Commit Graph
2956 Commits
Author SHA1 Message Date
jason.woltje 73bbbee81b sessions: Sage row 65 landing, c216f47db with gate g3 green (#1558) 2026-10-19 11:37:56 -05:00
jason.woltje a5810fc849 build-log: row 65 landed as c216f47db, gate g3 green, mos-0841 conditions met, not live (#1558) 2026-10-19 11:37:32 -05:00
jason.woltje 71fd9b9227 queue: row 65 done, landed as c216f47db on #1558 (sage rev 1955) 2026-10-19 11:35:45 -05:00
jason.woltje aed9062b4b sage: row 65 landing notes, c216f47db with gate g3 green, the mos-0840 Routing view, the plugins set patch for Jason, follow-up 5 (#1558) 2026-10-19 11:35:02 -05:00
jason.woltje c216f47dbb plugins, cli, bus, business, webui: harness, model and thinking from the instance vars, a fallback route, and a harness plug-in kind (row 65, #1558)
Adds the harness plug-in kind (interface 1). packages/plugins/harness/pi
and claude-code hold what core branched on: the adapter, thinking levels,
preflight, version probe, sandbox mounts, builtins line, typed tool names,
gate timeout, bundle files, adapter env, turn end and session-files path.
Core reaches a module only through the loader.

A session's route is the instance's harness, model and thinking vars, or
the three fallback. vars; a missing one refuses no-route, and the system
file's execution keys are never read for a session. The launcher checks
the primary route, then the fallback: harness-off, harness-refused,
thinking-unsupported, then preflight. A failed preflight falls back when
a fallback is set, and any refusal of the fallback names the primary's
failure too. Account checks run
only when the route's module counts an account. The manifest records
route, routeReason and harnessVersion, replacing piVersion and
claudeVersion. pi gets --thinking, Claude Code --effort, both from
MOSAIC_THINKING.

The business file refuses a partial fallback. routes and routes.set are
human-only bus verbs outside ORGANIZATION_KEYS; checkRoutes is shared by
routes.set, instances.set and limits.set and checks only changed routes.
The chief of staff changes an instance's model, and the assistant's whole
vars (Q169), through limits.set, so its route write runs the same checks.
A model outside launch.models refuses unknown-model, primary or fallback,
and routes.set passes that code through.
A new run binds only on a switched-on harness module name and records
its transcript path, which the usage reader uses. Settings gains a
Routing table with six selects per instance and loses the Role models
fieldset; it posts changed rows to /api/routes. webui/src/bus.mjs is
unchanged.

Until Jason's `mosaic plugins set` adds "harness": ["claude-code"], a new
launch refuses harness-off.
2026-10-19 11:27:19 -05:00
jason.woltje 866f3c5a80 queue: row 65 round 2 in review on #1558 with candidate 8d7c9e2f1, request 29143 (sage revs 1951-1952); darkwing approve (rev 1953, comment 29144) and dewey approve (rev 1954, comment 29145), both on manifest 8df15e39 2026-10-19 11:26:04 -05:00
jason.woltje 24320f80c5 sessions: Dewey row 65 round 2 review, approve (comment 29145, rev 1954) 2026-10-19 11:25:09 -05:00
jason.woltje b4c9cb3597 sage: row 65 round 2 packet, candidate 8d7c9e2f1 on 89ddb0225, manifest, diff, public/ diff (digest a91cf866 unchanged), build notes, gate and 18 mutants (#1558) 2026-10-19 11:07:55 -05:00
jason.woltje 89ddb02255 queue: row 65 round 1 verdicts, dewey changes (rev 1947, comment 29136) and darkwing changes (rev 1948, comment 29137); sage moves row 65 back to in-progress (rev 1949) and re-pins the brief to blob 0cdff87390 (rev 1950) for round 2 (#1558) 2026-10-19 10:58:46 -05:00
jason.woltje 0235fa9fd9 brief: row 65 routing table names the chief of staff's Q169 assistant exception and its tests (round 2 ruling, sage-1006, #1558) 2026-10-19 10:55:56 -05:00
jason.woltje ff9edc7782 sessions: Dewey row 65 round 1 review, changes (comment 29136, rev 1947) 2026-10-19 10:48:59 -05:00
jason.woltje 9014f9f728 sessions: Sage row 65 build, Mos decision 123 go (mos-0841) and in-review 2026-10-19 10:41:03 -05:00
jason.woltje 4c66494548 queue: row 65 in review, round 1 on #1558 with candidate ccdbc2232, request 29133 (sage revs 1945-1946) 2026-10-19 10:40:51 -05:00
jason.woltje 1d5897024d sage: row 65 packet, candidate ccdbc2232 manifest, diff, public/ diff, build notes, gate and mutants (#1558) 2026-10-19 10:36:42 -05:00
jason.woltje d8336daef2 queue: row 65 brief re-pinned for the human-only routes.set verb (sage rev 1944) 2026-10-19 08:36:54 -05:00
jason.woltje 841e0b0a2a brief: row 65 routing table saves through a human-only routes.set verb, outside ORGANIZATION_KEYS 2026-10-19 08:35:48 -05:00
jason.woltje 4d856a0cdd queue: row 65 brief re-pinned to 54cbf1a2 for the Console routing table, and its gate names Mos's decision 123 check (sage revs 1942-1943) 2026-10-19 08:33:55 -05:00
jason.woltje d3af6db973 brief: row 65 adds a Console routing table for harness, model, thinking and fallback (mos-0840), and refuses thinking a harness can't apply 2026-10-19 08:32:07 -05:00
jason.woltje b65e6d5fe9 sessions: Sage row 168 landing, row 65 brief amendment (decision 151), row 7 posts 2026-10-19 08:29:32 -05:00
jason.woltje e1bfc2cd45 queue: row 65 in progress and brief re-pinned to 802e046c with its gate, row 168 approved by Dewey and done (sage revs 1937, 1939-1941; dewey rev 1938) 2026-10-19 08:26:01 -05:00
jason.woltje 8e2cbb5558 brief: row 65 keeps the instance vars as its one source, adds fallback vars and the full harness list (decision 151, #1558) 2026-10-19 08:24:25 -05:00
jason.woltje efb51169de ledger: count only stack issue numbers, a tracker-name skip and a --first-issue floor (#1665) 2026-10-19 08:24:06 -05:00
jason.woltje 54786df03a sessions: Dewey row 168 review round 1, approve (29121) 2026-10-19 08:10:16 -05:00
jason.woltje c34deedf92 sessions: Sage row 168 build and review request, P19 371 rulings 2026-10-19 08:06:53 -05:00
jason.woltje 3bf16114a1 queue: row 168 in review round 1, manifest candidate, request 29120 (sage, revs 1935-1936) 2026-10-19 08:06:31 -05:00
jason.woltje 6da8fdaa98 sage: row 168 packet, candidate f3a966ea4 manifest, diff, build notes and gate (#1665) 2026-10-19 08:04:58 -05:00
jason.woltje e2ad3aa10d queue: row 168 in progress, brief re-pinned to 52ac1975 and piece updated (sage, revs 1932-1934) 2026-10-19 07:54:31 -05:00
jason.woltje 03586947af docs: row 168 brief amended before build, floor moves to a --first-issue option (#1665); window-plan: mos-0838 rulings in the 3i draft 2026-10-19 07:52:47 -05:00
jason.woltje e69e646b40 window-plan: P19 371 3i window draft for Mos, one or two windows and the restore caveat 2026-10-19 07:49:00 -05:00
jason.woltje c16ba2f0c4 queue: row 168 ledger stack refs added and briefed, #1665 (sage) 2026-10-19 07:46:55 -05:00
jason.woltje a1572a8f7d docs: brief for the ledger counting only stack issue numbers (#1665, P19 372, row 7 follow-up) 2026-10-19 07:45:35 -05:00
jason.woltje 15357b4ba7 sessions: Sage AM standup and row 7 week 10-11 ledger rerun record 2026-10-19 07:43:41 -05:00
jason.woltje b90d944c8c queue: row 7 note, 10-11..10-17 ledger rerun 29089 (sage) 2026-10-19 07:43:27 -05:00
jason.woltje 296972652a queue: row 126 Filbert r2 approve and done (sage) 2026-10-18 20:37:38 -05:00
jason.woltje a267a64b19 sessions: Sage row 126 landing, P19 371 and 372, row 7 week ledger; Dewey queue-126 packet 2026-10-18 20:36:53 -05:00
jason.woltje ca15d73e9f limits: a daily token quota for the account the stack uses, and bus schema 3h to 3i (row 126, #1620)
The business file can name the account claude-code launches use,
`launch.account` = {name, credential}. `name` is an identifier and
`credential` names one login set's environment variables, never a value.
`launch.limits.tokens.daily.<account>` = {limit, since, reset, timeZone}
sets a daily quota for that account. A daily key that isn't the account's
name refuses the business read.

The new plug-in limit-check/daily-quota (interface 2, pure) starts a day at
the first instant at or after `reset` on that local date in `timeZone`. Across
DST that makes a 23- or 25-hour day, and a reset in a skipped hour starts at
the gap's end. It counts the account's known records of all four kinds since
the later of the day start and `since`, and counts unknown turns apart.

The launcher refuses account-credential-missing, account-credential-ambiguous
and account-is-credential (an account name equal to a session credential's
value). Messages name variables, never values. The account rides mayLaunch,
bindLaunch, the usage records, mustStop and the launch record. A pi launch
has no account, records NULL, and no daily quota covers it. `mosaic limits`
and the Console's Settings show one fixed line when a daily row shows:
"Daily quotas count only this stack's own use of the account, not its use
anywhere else."

Bus schema 3h to 3i: 3h reserved usage_records.account as
CHECK (account IS NULL). The new step 3h-3i.sql rebuilds the table in one
transaction, keeping every row's seq and the sqlite_sequence value, and
recreates the three append-only triggers. All of sqlite_master equals 3h's
apart from the account line. A 3h engine refuses a 3i store.
packages/bus/tests/account-migration.test.mjs covers all three, with a
step that fails partway and leaves 3h intact. 3i goes live only through
`stack-release.sh activate ... --migrate` with Jason present (P19 371); the
activate path takes the pre-migrate backup, and the way back is restoring
it (agents/dewey/work/queue-126/MIGRATION.md).

Mos's go mos-0835, six conditions: (1) one transaction, account-migration
test 2 and mutant D29; (2) sqlite_master against 3h, test 1 and mutant D28;
(3) account is never a credential, the launcher's account-is-credential
refusal (launch-account.test.mjs) and the business name pattern
(token-limit-settings.test.mjs); (4) MIGRATION.md, accepted by Mos in
mos-0837; (5) the packet's DESIGN.md "no schema change" line corrected;
(6) the public/ digest below.

The public/ change in bus.js (the daily line under the token-limit table)
carries Mos's decision 123 go mos-0833 on the +/- digest 03e6d9da...ba78,
unchanged at landing.

Owner Dewey, brief docs/plans/2026-10-14_prd-1.2-build.md, "Daily quota for
the credential the stack uses today". Review round 2 rebases the round 4
build onto 1df04f52f (row 167). Reviewer: Filbert approve 29068 on round 1
(manifest d18314f7...8e65); Filbert approve 29080 on
round 2 (manifest f332db76...6fa6).
Seat run on round 2: touched 158/0, singles 1388/0 with 1 esbuild skip,
test-land-work.sh 86/0, 30/30 mutants killed.
Sage gate on 54319f552: GATE_PASSED, 2474+422/0, all 15 packages, the queue
suite and 10 script selftests.

Nothing live.
2026-10-18 20:35:02 -05:00
jason.woltje 54319f5521 sessions: Filbert row 126 r2 review, approve 2026-10-18 20:27:32 -05:00
jason.woltje 4c385db45e sessions: Dewey row 126 round 4 build and review rounds 1-2 2026-10-18 20:27:16 -05:00
jason.woltje 2124cfa761 queue: row 126 Filbert r1 approve, brief re-pin for 3h to 3i, row 7 week note, round 2 in-review (sage) 2026-10-18 20:26:41 -05:00
jason.woltje e264db51ba plans: row 126 brief names the 3h to 3i step and the account guard (#1620)
Filbert's r1 note (a): the scope line didn't name the 3i rebuild or the
account-is-credential guard, which sage-0970 and mos-0835 authorize.
Item 6 describes both. The acceptance list gains the mos-0835 tests, and
the scope bullet now covers the migration step, the version bump and the
guard.
2026-10-18 20:14:03 -05:00
jason.woltje 1df04f52f7 sessions: Filbert row 126 r1 review, approve 2026-10-18 20:09:59 -05:00
jason.woltje 9e2b268660 queue: row 167 Filbert approve and done, row 126 round 1 in-review (sage) 2026-10-18 20:09:07 -05:00
jason.woltje 640a1ee978 sessions: Sage row 167 landing and row 126 3i ruling 2026-10-18 20:08:26 -05:00
jason.woltje 5fa9cc8f2c webui: one settings snapshot and a names read that rethrows a refusal (row 167, #1664)
The Settings page held the launch settings twice, one copy for the launch form and the
token-limit reset and one for the Assistant section. A save in one form left the other with
the old revision, so its next save was refused with revision-conflict. Now one snapshot
serves both. Every successful save or reset sets it from the answer, a read replaces it only
while no form has a draft, and reload clears it.

The names read now rethrows a 403 or signed-out like the usage, instances and limits reads,
so a refusal gives the refused page instead of an empty name field.

Tests: the names refusal, one per snapshot path (launch save, assistant save, reset), and a
null body on /api/name and /api/assistant-stop. limits-browser.test.mjs:54 now expects the
reset's revision on the following save.

Owner Darkwing, brief docs/plans/2026-10-18_settings-reads-after-q169.md.
Mos's decision 123 go mos-0836 on the public/ +/- digest
82a8a810...e984. Mos's F1 and Filbert's notes 1-2 are P19 370.
Reviewer on candidate manifest dba38330...59cc: Filbert approve 29062.
Seat run: 231/0 on all 38 webui files singly, 8/8 mutants killed.
Sage gate on ee3f1fb3f: 2443 package tests and 422 script selftests, 0 failed,
GATE_PASSED 01:06:56Z.

Nothing live.
2026-10-18 20:07:31 -05:00
jason.woltje ee3f1fb3f6 sessions: Filbert row 167 r1 review, approve 2026-10-18 19:37:26 -05:00
jason.woltje 0434ecfef0 sessions: Darkwing lines from 2026-10-16 to 2026-10-19 (rows 137, 141, 150, 87, 155, 162, 165, 166) 2026-10-18 19:12:47 -05:00
jason.woltje 81f26551b4 queue: row 165 r3 in-review, approvals and done, row 166 r2 in-review and Filbert approve (sage) 2026-10-18 19:11:54 -05:00
jason.woltje cff5f31eda sessions: Sage row 165 landing 2026-10-18 19:11:13 -05:00
jason.woltje 9466f3e5ed business: the human adds and changes role instances from the CLI and the Console (row 165, Q171, #1662)
`mosaic business instances BUSINESS` reads the role instances, and
`mosaic business instance add|set` writes one add or change through the
broker's new human-only `instances` and `instances.set` verbs. The writer is
packages/business/src/instance-settings.mjs. It takes the caller's revision,
validates the next document, refuses a definition that declares credentials
(organization-credentials-out-of-scope), keeps protected instances as they
are, logs the human as the actor, and says when the running bus needs a
restart. Neither command restarts the bus.

The writer refuses the instance ids human and tester with invalid-request,
because the broker refuses a business whose roles use either name when the
bus starts.

The Console's Settings view shows the instances and, under --send only,
posts to POST /api/instances with the exact Origin and same-origin Fetch
Metadata. A refusal keeps the draft. An answer without the view's shape is
outcome-unknown (503). The page's public/ diff carries the decision 123 go
in mos-0832.

Neither verb is in ORGANIZATION_KEYS, so no agent tool reaches them.

Owner Darkwing, brief in row 165 (#1662). Round 3 rebases round 2 onto
4f45cadc0 (row 156). The public/ +/- digest is 939ecd28...9444, unchanged
at landing. Reviewers on candidate manifest e30b54da...f580: Dewey
approve 29052, Filbert approve 29053. Seat run on 4f45cadc0: 1436/0
singles, 37/37 mutants killed. Sage gate on e8b09735a: GATE_PASSED 25/25,
packages 2282/0, queue node 156/0, script selftests 422/0, 23:59:13Z to
00:05:35Z. Rebased onto 50a57e454 over two SESSIONS-only commits.

Nothing live.
2026-10-18 19:10:20 -05:00
jason.woltje 50a57e454b sessions: Filbert row 166 r2 review, approve 2026-10-18 19:09:30 -05:00