diff --git a/CHANGELOG.md b/CHANGELOG.md index f061a08..b7d161f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -221,6 +221,7 @@ Written against the real runtime rather than assumed from documentation: altered what the worker is told, so position is checked by counting the `"""` delimiters that precede it. - `wire_api` accepts only `responses` on Codex CLI 0.153.0. `chat` returns "is no longer - supported" and `openai` returns "unknown variant". The published config schema still - advertises all three; the binary is the authority. An endpoint that speaks only - chat-completions cannot serve a Codex lane on this version. + supported" and `openai` returns "unknown variant". The published config schema agrees + rather than conflicting: its `WireApi` is a `oneOf` carrying the single variant + `responses`. An endpoint that speaks only chat-completions cannot serve a Codex lane on + this version. diff --git a/README.md b/README.md index 4318966..8a96514 100644 --- a/README.md +++ b/README.md @@ -134,6 +134,26 @@ Then invoke `$fablewright` and let it post the call sheet before it calls anyone Installing lane profiles is deliberately a separate step: installing a plugin registers skills, not user-owned agent profiles. +### One-minute smoke test + +Four commands. None of them calls a model, spends a token, or writes outside a temporary +directory, so it is safe to run before you trust anything here. + +```sh +sh scripts/verify.sh # the repo checks itself +sh tests/run-tests.sh # 143 offline cases +sh scripts/install-agents.sh --host codex --dry-run # what WOULD be written, nothing is +sh scripts/cast-call.sh --lane terra --check # is this lane real and runnable? +``` + +Expect `VERIFY PASSED`, `ALL TESTS PASSED`, six `Would install:` lines, and then either a +lane that validates or a named reason it cannot. `--check` resolving a lane is the point +where an install stops being a claim. + +The verifier's count moves with your environment even though its verdict does not: **154** +on a machine with neither CLI installed — the floor CI asserts — and 155 when the Claude +CLI is present and the optional manifest validator can also run. + --- ## The call sheet diff --git a/docs/WALKTHROUGH.md b/docs/WALKTHROUGH.md index 2dd9719..13086a7 100644 --- a/docs/WALKTHROUGH.md +++ b/docs/WALKTHROUGH.md @@ -219,10 +219,16 @@ passed: 143 failed: 0 ALL TESTS PASSED $ sh scripts/verify.sh -verify 1.0.0: passed 155, failed 0 +verify 1.0.0: passed 154, failed 0 VERIFY PASSED ``` +The verifier's **count is environment-dependent; its verdict is not.** 154 is the +invariant floor — what a machine with neither CLI installed runs, and what CI asserts. +With the Claude CLI on `PATH` the optional `claude plugin validate --strict` manifest +check also runs and the total is 155. Quote 154 when you need a number that holds +everywhere. + Both call no model and write nothing outside a temporary directory. The test suite uses synthetic session fixtures under `tests/fixtures/`, plus a stub runtime that lets the whole routing-verification path — including a lane that drops below its pinned effort — diff --git a/docs/images/proof.png b/docs/images/proof.png index e54cb7f..aefca31 100644 Binary files a/docs/images/proof.png and b/docs/images/proof.png differ diff --git a/skills/fablewright/SKILL.md b/skills/fablewright/SKILL.md index cc9c15f..af5e3c0 100644 --- a/skills/fablewright/SKILL.md +++ b/skills/fablewright/SKILL.md @@ -60,17 +60,26 @@ risk: ~~~ No task tool call may precede it. `solo` is the default and needs a reason to leave, not -a reason to keep. A later call sheet may only **escalate**, only on newly observed risk, -and only with that evidence recorded. Never silently downgrade, and never add a lane -that the posted sheet did not call. +a reason to keep. A later call sheet may **escalate** on newly observed risk, with that +evidence recorded, and may never add a lane the posted sheet did not call. + +Reducing rigour is the constrained direction, not a forbidden one. Dropping a reader, +widening a sandbox, or standing a lane down needs the same written evidence an +escalation does — what is banned is doing it *silently*. One reduction is planned rather +than reactive: when `ensemble` cannot meet its disjoint-ownership or single-family +requirements, the plan becomes sequential `full` runs and the risk line records why +(`references/role-contracts.md`). That is a change of structure, not a loss of rigour. ## Routes +Listed in the order the decision ladder in `references/call-sheet.md` works down. +Stop at the first match; do not shop for a route further down the table. + | route | implements | wright verifies | reader | use when | |---|---|---|---|---| | `solo` | wright | n/a | none | bounded, low-risk, reversible, cheap to redo | -| `delegate` | one cast lane | yes | none | bounded and fully specifiable, and worth the wright's context | | `audit` | wright | yes | one | the wright is the fastest author but the risk earns an independent read | +| `delegate` | one cast lane | yes | none | bounded and fully specifiable, and worth the wright's context | | `full` | one cast lane | yes | one | judgment-heavy, high-risk, or wide blast radius | | `ensemble` | 2+ cast lanes | yes | one | genuinely parallel work over **provably disjoint** file ownership |