docs: decision 144 (decision 104's hold closed, Jason edits the business file); row 65 brief gains the harness plug-in scope (Q156) and waits on row 131
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -3264,3 +3264,21 @@ which stay with him. Each item names who decided it and what happened.
|
||||
- 7. Row 87 decides whether the service manager becomes a kind.
|
||||
The build plan records the order, and the queue runs row 65 before
|
||||
64 and 66.
|
||||
|
||||
144. **Decision 104's hold is closed: Jason edits the business file
|
||||
himself (2026-10-14, Mos in sage-0197).** Mos closed Q135 at
|
||||
2026-10-14T18:32Z, in their STATE entry for Q152 and their DECISIONS
|
||||
reading of Q152: "This settles the last part of Q135". The rule comes
|
||||
from Q133, confirmed as Q140 (PRD REQ-ROLE-3): "We need the human and
|
||||
the Chief of Staff to be able to edit the Business file(s)". The
|
||||
chief-of-staff parts of Q135 were stale or moved into PRD 1.2, and
|
||||
`bus.tester` was Vikunja #284, which Jason set and which is live on
|
||||
copy c2525dd33.
|
||||
- C-suite launches wait until Jason adds an instance to
|
||||
`launch.instances` himself, or until the chief-of-staff rows land
|
||||
(rows 119, 122 and 123). Nobody else edits the live business file.
|
||||
- Rows that need a business-file entry at landing (row 65's
|
||||
`plugins.harness` and `routing`, for one) send Jason the exact
|
||||
entry through Mos, and the live check runs after he adds it.
|
||||
- Nothing goes to Jason for this. My 2026-10-14 PM standup listed it
|
||||
under Needs Jason; Mos's reply corrects that.
|
||||
|
||||
@@ -12,8 +12,9 @@ is after rows 55, 42 and 49.
|
||||
Q156 (2026-10-14, lead decision 143) changed the order: row 65 runs
|
||||
first, then 64, then 66. Row 65 is where the harnesses become plug-in
|
||||
modules (PRD 1.3 REQ-PLUG-2), so 64 and 66 add their files to those
|
||||
modules. Sage adds the harness-kind scope to row 65's brief before the
|
||||
row starts.
|
||||
modules. Row 65's brief carries the harness-kind scope (added
|
||||
2026-10-14), and the row now waits on row 131, which ships the plug-in
|
||||
loader.
|
||||
|
||||
Two decisions shape the set. Q84 is its own row, not part of the skills
|
||||
row: the ms-unslop skill is guidance the model reads, and the hook is a
|
||||
@@ -141,6 +142,14 @@ the system config has no `execution.adapter`, so a managed launch there
|
||||
refuses today with `unsupported-harness`. The row 41 recorded run used a
|
||||
test business with `claude-code` and `claude-sonnet-5-5`.
|
||||
|
||||
The harness names are hard-coded too, which PRD 1.3 REQ-PLUG-2 says
|
||||
this row converts (Q156). The pair `pi` and `claude-code` is a list in
|
||||
`packages/harness/src/bundle.mjs:20` and a check in
|
||||
`packages/bus/src/broker.mjs:197`. `packages/seat/src/session.mjs:39`
|
||||
maps each to its adapter script, `packages/seat/src/sandbox.mjs:104`
|
||||
adds the Claude Code mounts, and `packages/cli/src/launcher.mjs:171` and
|
||||
`:209` branch on `claude-code` for the credential and version checks.
|
||||
|
||||
### Owner and reviewer
|
||||
|
||||
- Owner: Sage.
|
||||
@@ -156,14 +165,41 @@ test business with `claude-code` and `claude-sonnet-5-5`.
|
||||
- `packages/cli/src/launcher.mjs` and its tests
|
||||
- `adapters/pi/adapter.sh`, `adapters/claude/adapter.sh`,
|
||||
`adapters/README.md`
|
||||
- the `harness` entry in `packages/plugins/src/kinds.mjs`,
|
||||
`packages/plugins/harness/pi/` and `packages/plugins/harness/claude-code/`,
|
||||
their tests, and the harness section of `packages/plugins/README.md`
|
||||
- `packages/bus/src/broker.mjs` (the harness check only) and
|
||||
`packages/seat/src/sandbox.mjs` (the Claude Code mounts only), with
|
||||
their tests
|
||||
- test business fixtures that set `harness`, `model` or `thinking`
|
||||
- `agents/sage/work/queue-<row>/`
|
||||
|
||||
### What ships
|
||||
|
||||
- Harnesses as plug-in modules (PRD 1.3 REQ-PLUG-1, REQ-PLUG-2; Q156).
|
||||
Row 131's loader and kind registry are in place first.
|
||||
- A `harness` entry in `packages/plugins/src/kinds.mjs` at interface
|
||||
version 1. The organization file switches on a list,
|
||||
`plugins.harness`, through the write path from row 122.
|
||||
- Two modules, `packages/plugins/harness/pi/` and
|
||||
`packages/plugins/harness/claude-code/`. Each `index.mjs` exports
|
||||
the adapter script it runs (a path under `adapters/`, which stay
|
||||
where they are), a preflight (binary present, version, credential
|
||||
status), its sandbox mounts, its bundle notes and gate timeout, and
|
||||
how it passes `thinking`. Rows 64 and 66 add their skills and
|
||||
unslop exports to these modules.
|
||||
- Core reaches a harness only through the loader. The five places
|
||||
listed under Problem read the module instead, and none of them
|
||||
names `pi` or `claude-code` after this row. The broker's
|
||||
`invalid-harness` check accepts a harness that is switched on.
|
||||
- A routing entry or fallback that names a harness not switched on
|
||||
refuses the business file at load with `harness-off`. The loader's
|
||||
own refusals (bad name, missing directory, symlink, load failure,
|
||||
missing export, other version) refuse the launch and name the
|
||||
module.
|
||||
- A top-level `routing` table in the business file, keyed by role
|
||||
instance name (the keys of `roles`). Each entry has `harness`
|
||||
(`pi` or `claude-code`), `model`, `family` (a key of
|
||||
(a harness module that is switched on), `model`, `family` (a key of
|
||||
`LAUNCH_CEILING`), `thinking` (the existing six levels), and
|
||||
`fallback`: null, or an object with the same four keys. Unknown keys
|
||||
refuse. A `launch.instances` or `launch.by` name with no entry refuses
|
||||
@@ -205,7 +241,16 @@ test business with `claude-code` and `claude-sonnet-5-5`.
|
||||
one never is; the cap counts by entry family, so a model name holding
|
||||
`opus` launched under a `sonnet` entry counts as sonnet; thinking
|
||||
reaches the Pi and Claude Code fake adapters as the recorded flag.
|
||||
- Gate suites: `node --test 'packages/business/tests/*.test.mjs'`,
|
||||
- Harness tests: a route to a harness that isn't switched on refuses
|
||||
with `harness-off`; a fixture harness module switched on in a test
|
||||
organization file launches a fake session with no core file changed;
|
||||
a grep test that no file under `packages/*/src` outside
|
||||
`packages/plugins` names `pi` or `claude-code` as a harness, with the
|
||||
exceptions under Out of scope listed in the test. One mutant per
|
||||
refusal, and one that puts a harness name back in core.
|
||||
- Gate suites: `node --test 'packages/plugins/tests/*.test.mjs'`,
|
||||
`node --test 'packages/bus/tests/*.test.mjs'`,
|
||||
`node --test 'packages/business/tests/*.test.mjs'`,
|
||||
`node --test 'packages/harness/tests/*.test.mjs'`,
|
||||
`node --test 'packages/seat/tests/*.test.mjs'`,
|
||||
`node --test 'packages/cli/tests/*.test.mjs'`, and every
|
||||
@@ -218,13 +263,23 @@ comes with CLIProxyAPI. Model switching in a running session and the
|
||||
console UI for it (row 29, parked). `scripts/run-task.sh` worker model
|
||||
selection.
|
||||
|
||||
The tool-policy gate stays in core: `packages/harness/src/gate.mjs` and
|
||||
`claude-gate.mjs` enforce the session's tool policy, and a module
|
||||
mustn't be able to change that boundary (PRD REQ-PLUG-1). Pi started
|
||||
directly by `packages/conversation` and the Discord CLI converts when a
|
||||
row changes those engines (Q156 item 2). No model provider kind; row
|
||||
122 names providers as data, and the kind waits on row 127.
|
||||
|
||||
### Gate
|
||||
|
||||
Darkwing and Dewey approve on the issue, naming the candidate manifest.
|
||||
The suites above pass on a gate rerun in a clean worktree. At landing,
|
||||
Sage writes the first table into `mosaic-stack.json` and starts one
|
||||
managed coder session, attaching the manifest that shows the entry used,
|
||||
the family counted and the thinking flag passed.
|
||||
The suites above pass on a gate rerun in a clean worktree. Jason edits
|
||||
the business file himself (decision 144), so at landing Sage sends him,
|
||||
through Mos, the exact `plugins.harness` and `routing` entries for
|
||||
`mosaic-stack.json`. Once he has added them, Sage starts one managed
|
||||
coder session, attaching the manifest that shows the module loaded, the
|
||||
entry used, the family counted and the thinking flag passed. The
|
||||
modules go live only through a re-pin on Mos's go (decision 109).
|
||||
|
||||
## Managed sessions run the unslop check on both harnesses
|
||||
|
||||
|
||||
Reference in New Issue
Block a user