🤖 Apply lean Athanor review fixes

Adept dispatches no longer pass a model alias over the pin. Igor checks
the stamped model id of plan, attack and phase-review outputs before
acting on them. Implementation work no longer goes to the Athanor as an
unplanned brief. The spawning reference says plainly that "verified"
means read from the schema, marks fork availability unverified, and
cites the 184/184 evidence for alias-over-pin. Minor consistency fixes:
trunk notes, re-check failure path, staging, fallout diffs, run-log
timing.
This commit is contained in:
2026-10-05 22:18:14 +02:00
parent 146a48c343
commit 5909221022
7 changed files with 25 additions and 22 deletions
+2 -2
View File
@@ -44,14 +44,14 @@ Plan-writing tools are swappable (superpowers `writing-plans` today; others late
Both extremes have failed. Many tiny fresh implementers relearn the code each time and fragment the plan. One implementer kept across many tasks bloats and drifts. Choose per block: how much shared understanding does it need, and how much room is left? Context figures in `references/models.md` are guesstimates, not limits.
One option is **trunk and forks**. At intake the builder reads the build plan and the code it touches (the trunk) and writes short trunk notes. Complex blocks in the trunk's area go to a fork of the builder, which inherits its context and model. Mechanical or distant blocks go to a fresh agent that reads the trunk notes. Which harness behaviour is verified and which is assumed: `references/spawning-claude-code.md`.
One option is **trunk and forks**. At intake the builder reads the build plan and the code it touches (the trunk) and writes short trunk notes. Complex blocks in the trunk's area go to a fork of the builder, which inherits its model and (assumed) its context. Mechanical or distant blocks go to a fresh agent that reads the trunk notes. Which harness behaviour is verified and which is assumed: `references/spawning-claude-code.md`.
## Phase review, fix, stop
- A **fresh** reviewer that did not build the phase, dispatched outside the build, stamps its model id in its report header. A review without a stamped id does not count.
- It is adversarial: it runs the gates, traces concrete scenarios, and **answers every deviation and flag in the handoff notes**, one by one. It looks specifically for **weakened checks** (loosened assertions, downgraded errors) and **tests that cannot fail**.
- **One fix pass** over all findings. Minors are fixed in that pass or logged as follow-ups.
- **Re-check only Critical and Important**, by a fresh reviewer scoped to those findings. Then stop.
- **Re-check only Critical and Important**, by a fresh reviewer scoped to those findings. Then stop. A Critical or Important that survives the re-check goes to the user or into a new plan, not into the next phase.
- Extra reviews (for example a mid-phase review of a hotspot block whose note flags a deviation) are a choice with a stated reason, not a default.
## Bugs
@@ -40,7 +40,7 @@ Full id not recorded here; spacecraft notes mention "Sonnet 5".
## Haiku
- Fine for runs, compiles, commits and mechanical appliers. Treat its self-reports as claims to check: it once reported "no deviations" alongside misplaced edits (spacecraft, 2026-09-29).
- Used for runs, compiles, commits and mechanical appliers. In one spacecraft run it reported "no deviations" while edits had landed in the wrong place (spacecraft, 2026-09-29).
## Context and block size
@@ -16,7 +16,7 @@ Rules:
- Plan: <path> · Build plan: <path>
- Branch: <branch> · Start commit: <hash>
- Trunk notes: <path or "none">
- Trunk notes: <path>
- Athanor: <model id> · Session journal: <path>
```
@@ -25,8 +25,8 @@ Rules:
```markdown
## Phase <N> — <title>
| Block | Owner (model id) | Start | End | Commit | Tokens (if known) |
|---|---|---|---|---|---|
| Block | Owner (model id) | Commit | Tokens (if known) |
|---|---|---|---|
```
## Handoff note (one per block, written by the block's owner)
@@ -58,6 +58,6 @@ Rules:
After the review, Igor (or the fixer) appends the review report path, the fix-pass commits, the re-check result, and the minors logged as follow-ups.
## Trunk notes (optional, written at intake)
## Trunk notes (written by the Athanor at intake)
Short, for the next agent that has not read the code: key files and seams, invariants the phase touches, every consumer of a changed semantic, the gate command, known traps. A page, not a design document.
@@ -4,7 +4,7 @@ Harness mechanics for dispatching, resuming and forking agents in Claude Code. O
Each claim carries a status and a date:
- **verified**: read from the tool schema or checked directly, on that date.
- **verified**: read from the tool schema text on that date. Not tested at runtime unless the row says so.
- **observed**: seen in real runs; the mechanism may be assumed. Source given.
- **assumed**: inferred, not checked. Treat as a hypothesis.
- **unknown**: open; check before relying on it.
@@ -48,14 +48,17 @@ The harness changes. When a claim fails, fix it here with a new date.
| With `model` omitted, a pinned agent runs on its pin; an unpinned agent inherits the caller's model unless a default subagent model is configured. | verified 2026-10-05 (Agent tool schema) |
| A full model id (e.g. `claude-opus-5-5`) can only be set in the agent definition's frontmatter, so pinning by full id means a pinned agent dispatched without `model`. | verified 2026-10-05 (follows from the alias-only parameter) |
| The `opus` alias overrode 4.6 pins in 184 of 184 spawns (they ran on 5.5). | observed 2026-09-27 (spacecraft MVP retrospective) |
| Passing `model: "opus"` gave the Athanor the model Igor was running on: a 4.6 Igor produced a 4.6 Athanor (the dirigent end review that passed with zero findings). | observed 2026-10-05 (user's attribution; the dirigent report recorded the model as unknown). How the alias resolves is assumed, not checked: it may follow the caller's model or a session default. Either way the alias, not the pin, decided. |
| Every agent sees its exact model id in its system prompt. | verified 2026-10-05 (this agent's prompt shows `claude-opus-5-5`) |
| A 4.6 Igor passing `model: "opus"` to the then 4.6-pinned Athanor got a 4.6 run (the dirigent end review that passed with zero findings). | observed 2026-10-05 (user's attribution; the dirigent report recorded the model as unknown). Consistent with both the alias following the caller and the pin holding, so it is not evidence for alias-over-pin. The 184/184 row and the schema are. |
| What the `opus` alias resolves to (the caller's model, a session default, or the newest Opus). | unknown. Check the stamped id of every plan, attack and review instead of relying on it. |
| Every agent sees its exact model id in its system prompt. | observed 2026-10-05 for general-purpose agents (prompt shows `claude-opus-5-5`); not checked for plugin agents with their own bodies |
| Context window of the bare `claude-opus-5-5` pin versus a `[1m]` suffix (other Spire pins carry `[1m]`). | unknown; the ~600k guesstimate in `models.md` assumes the larger window |
## Fork
| Claim | Status |
|---|---|
| `subagent_type: "fork"` exists. A fork always inherits the caller's model; the `model` parameter is ignored. | verified 2026-10-05 (Agent tool schema) |
| The Agent tool schema documents `subagent_type: "fork"`: a fork always inherits the caller's model; the `model` parameter is ignored. | verified 2026-10-05 (schema text) |
| `fork` is actually offered as an agent type in a given session. | unverified: the schema mentions it, but on 2026-10-05 it was not in the list of agent types offered to the reviewer |
| A fork copies the **caller**, not an arbitrary agent. Only the agent holding a context (e.g. the Athanor as trunk) can fork it. | assumed (no parameter names a fork source; Igor's skill calls it "forking yourself") |
| A fork starts with the caller's full transcript, so it starts at the caller's token count. | assumed, not measured |
| Can a fork fork again? Does a foreground fork return its result to the caller? Does it see the caller's preloaded skills? | unknown; check in a throwaway preflight before relying on trunk and forks |