You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Third tranche of the v1.1.0 migration. Rewires the four AFK Boxes onto the Method resolver from #279. Mostly a deletion.
Why this is mostly deletion
The structural-only bar (ADR-0030, #279): a Box survives only for what no Method can supply — worktree isolation, gate config, red/green integrity, tracker abstraction, posting surfaces. Everything a Method covers gets delegated. v1.1.0 made three Methods explicitly AFK-safe, so AFK coverage grows while the plugin’s hand-written text shrinks.
Scope
Box
Work
/build
Host implement + the AFK-safe tdd (v1.1 rewrote it as reference material precisely so an AFK agent can be handed it). Delete the hand-rolled loop prose. Refactoring leaves the loop — upstream moved it into code review — so amend ADR-0023 including its title. implement calls code-review itself: allow that as a local pre-check that never posts, keeping /pr-review the only Box with posting authority. Keep worktree isolation, fresh-context red/green (ADR-0012), slopcheck, gates.build.
/pr-review
Replace the seven hand-written aspect prompts with code-review’s two axes (standards · spec, parallel sub-agents) plus its Fowler refactoring smells — ground the plugin currently maintains itself and upstream now maintains. Keep the intent brief, the <!-- unic-dlc-pr-review:iteration=N --> marker re-review, config-gated posting, and both posting surfaces. Amend ADR-0026.
/qa
Inline the borrowed qa brief shape — upstream moved qa to skills/deprecated/, so the source is a dead branch.
/explore
Host research in the AFK research nodes (upstream Method is background-agent shaped by construction). Amend ADR-0029.
Explicitly out of scope
wayfinder adoption — it is a new Box and human-paced, so it is deferred to its own issue. The box set stays frozen at nine for this migration.
Locked in a grilling session on 2026-07-31. See #279 for the full design.
Acceptance criteria
/build's nodes read implement and tdd through a repo-relative path from .archon/methods/. The hand-rolled red/green/refactor prose is deleted, not commented out.
Refactoring no longer appears in /build. ADR-0023 is amended, including its title, and its status line records the change.
Refactoring appears in /pr-review instead, via code-review.
implement's own review step runs as a local pre-check that posts nothing. /pr-review remains the only Box with posting authority.
/pr-review's seven hand-written aspect prompts are replaced by code-review's two axes plus its refactoring smells. The intent brief, the <!-- unic-dlc-pr-review:iteration=N --> re-review classification, the config gate, and both posting surfaces still work. ADR-0026 amended.
/qa no longer cites Matt's qa Method. The brief shape it used is inlined, with a comment recording that upstream deprecated the source.
/explore's research nodes read research through the resolver. ADR-0029 amended.
All four workflows still pass archon validate and remain key-discriminated (ADR-0011). No node imports plugin lib/ (ADR-0023 §5).
Worktree isolation, fresh-context red/green (ADR-0012), slopcheck, and every gates.<box> key behave as before — this slice removes hand-written text, not Harness capability.
pnpm --filter unic-archon-dlc typecheck and test pass; pnpm ci:check is clean. Version bumped, CHANGELOG entry added.
Dispatch brief
Written after surveying the four shipped workflows and the vendored v1.1.0 Methods, on develop at 3f37e8d (tranche 2 merged, unic-archon-dlc@0.14.0). The ten ACs above are the definition of done;
this brief only records what an unattended agent would otherwise have to guess. Where this brief and
an AC disagree, the AC wins — say so in the PR rather than silently choosing.
1. Three Methods ask for a human. The Boxes are AFK. Inject, don't skip.
This is the main hazard in the tranche. Each Method was written for a live session and stops to ask a
question no one is there to answer. The Harness already holds every answer — the Box must supply it up
front, in the node prompt, and say where it came from.
Inject the answer. Do not add an approval: node for any of these. A workflow does support human
intervention, but only in one shape: an approval: node at a step boundary, config-gated by gates.<box>, carrying a yes/no — never a conversation (ADR-0017; that is why /specs and /triage
are commands). Each of the four Boxes already has one or two, and AC 9 requires them to behave exactly
as before. Two reasons a gate is the wrong instrument here:
Only one of the four is a human decision, and it was already made — twice.tdd's seams were
approved at /specs Step 5, the seam-approval halt, and again at the /tickets gate, where every
slice must carry a test_command. Injecting them is not bypassing a human: it tells the node the
approval is on record and where to read it. The other three are not decisions at all — the fixed
point is the merge-base the DAG determines, the spec source is what prep already resolved, and the setup-matt-pocock-skills line is a forbidden action rather than a question.
A gate would be worse than injection, precisely in AFK. Every existing gate is written when: "$bootstrap.output.gate == 'hitl'", so it is skipped when the gate is afk. An approval node
added to satisfy tdd's seam rule would therefore fire only when a human is present and be silently skipped when one is not, leaving the node to proceed on unconfirmed seams — the outcome
the rule exists to prevent. An injected answer holds in both modes.
Method
What it asks for
What the Box injects
tdd
"Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam."
The seams were pre-agreed at /specs Step 5 and are durable: PRD.md § Testing Decisions, plus each slice's test_command in issues.json. Tell the node the seams are confirmed and name those two sources.
code-review
"Whatever the user said is the fixed point… If they didn't specify one, ask for it."
/pr-review: the merge-base the workflow already computes. /build: the branch point of the build branch. Never let a node ask.
code-review
"If nothing is found, ask the user where the spec is."
/pr-review: the intent brief the prep node already assembles (linked work items + PRD.md + PR description). /build: PRD.md + issues.json + the tracker issue.
code-review, implement, tdd
"run /setup-matt-pocock-skills if docs/agents/issue-tracker.md is missing"
Never. .archon/unic-dlc.config.yaml provides tracker + labels; that skill writes a competing label file (ADR-0024). The four command Boxes each carry this override already — copy the wording from commands/triage.md Step 3.
One gap the injection does not close: test_command_planned slices.issues.json lets a slice set test_command_planned: true instead of a test_command — "no runner exists yet, or the test is itself
the deliverable" (commands/tickets.md Step 5). For those slices there is no pre-agreed seam to inject,
and tdd forbids writing a test at an unconfirmed seam. Let the node choose the seam and record the
choice in report.md, in a line naming the slice id and the seam picked, so /pr-review and /improve-architecture can see what was decided while no one was watching. Do not halt the slice and do
not make it HITL-only: that would shrink AFK coverage, which this tranche exists to grow. Note the
asymmetry in the ADR-0023 amendment — a slice with a pinned test_command inherits a human-approved
seam, one with test_command_planned gets an agent-chosen seam that is auditable after the fact.
code-review step 3 also carries a twelve-item Fowler smell baseline and step 4 says the Standards
sub-agent has no access to it, so it must be pasted in full into that sub-agent's prompt. AC 5 depends
on that paste actually happening — if the Box spawns the axes itself (see item 2) it inherits the duty.
2. One open fork the ACs don't settle: where the two axes run
AC 5 says the seven aspect prompts become "code-review's two axes plus its refactoring smells". The
Method implements its own parallelism — step 4: "Send a single message with two Agent tool calls. Use
the general-purpose subagent for both." So there are two readings, and they produce different DAGs:
(a) One node. A single review node reads the Method and spawns both axes as Agent calls
inside itself. Faithful to the Method verbatim; the DAG loses the fan-out; synthesize gets one input.
(b) Two nodes. Archon nodes review-standards and review-spec run in parallel, each given one
axis. Keeps the fan-out shape the other Boxes use and keeps each axis in a fresh context — which is
the Method's stated reason for sub-agents — but the Box then re-implements step 4 rather than
delegating it, which is the ADR-0030 defect.
Do (a). It is what "verbatim" means, and ADR-0030's bar is structural: nothing about running two
sub-agents needs the Harness. Record the DAG change (7 nodes → 1) in the ADR-0026 amendment AC 5 asks
for, and note that synthesize now consumes one structured output instead of seven. If (a) turns out
not to work inside an Archon prompt node — a node that cannot spawn Agent calls — stop and report
rather than falling back to (b) silently: that is a real finding about the container, not a detail.
README.md:98 — the row reads `research` | no box yet (#276) and must become `/explore`. test/methods-manifest.test.mjs parses that table and fails if it disagrees with providedTo.
Same applies to implement and tdd: providedTo → ['build'], README rows → `/build`. code-review gains build alongside pr-reviewonly if the AC-4 pre-check counts as a direct read
— it does, the node reads the Method — so ['pr-review', 'build'].
4. test/command-methods.test.mjs does not cover these Boxes
Tranche 2 added it; it reads commands/<box>.md for the four interactive Boxes. The Archon Boxes are
workflow-YAML node prompts, so extending BOXES is not a one-line change: readBox needs a second
file shape, and the const wanted = [...] convention it parses does not exist in a YAML prompt.
Two acceptable outcomes, in order of preference:
Extend the test with a YAML-prompt shape, so a stale Method name in a node prompt fails CI the same
way it now does in command prose. This is the durable answer and it closes the other half of the gap AGENTS.md names.
Do not do neither. If (1), the manifest-alignment assertion must key off whatever the YAML uses to name
its Methods; pick one convention and use it in all four workflows.
5. Reading a Method from inside a node
Repo-relative from .archon/methods/<name>/SKILL.md, never $CLAUDE_PLUGIN_ROOT — it is not reliably
set in Archon's script runner (ADR-0023 §5), and every node stays a self-contained prompt node with no
plugin-lib/ import. Consequences worth stating in the node prompts:
No resolveMethod call. That helper lives in plugin lib/, which a node cannot import. A node
reads the bundle-tier path directly, so the config and .local tiers do not apply inside an Archon
Box. Say so in the ADR amendments — it is a real asymmetry with the command Boxes, not an oversight.
A missing file is fatal for the node: the fix is /unic-archon-dlc:setup, which writes the tree.
6. /qa — inline, and record why
unic-dlc-qa.yaml:218 and :226 cite "Matt's qa method". Confirmed dead: there is no qa under vendor/mattpocock-skills/skills/, upstream moved it to skills/deprecated/, and it is not in the
manifest — so nothing resolves and nothing ever did. The brief shape is already written out inline at :226-229 (What happened / What I expected / Steps to reproduce / Blocked by / Additional context);
AC 6 needs only the two attributions dropped and a comment recording that the source is a dead
upstream branch. Do not add qa to the manifest.
7. Verification, beyond the AC-10 list
archon validate on all four workflows (AC 8). Name the version you ran it with in the PR — the 0.x
line churns and the node schema is the contract, not the release number (ADR-0011).
Diff-read the deletions specifically for Harness capability removed alongside prose: worktree
isolation, fresh-context red/green (ADR-0012), slopcheck, and each gates.<box> key. AC 9 exists
because that is this tranche's characteristic failure, and it is invisible in a green test run.
pnpm ci:check at the repo root, not just pnpm test — the latter misses Biome formatting.
Any new test file must be added to package.jsonscripts.test; it enumerates every file
explicitly, so a new suite silently never runs.
Version bump: pnpm --filter unic-archon-dlc bump minor. It refuses on a dirty tree, and git status --porcelain counts untracked files — commit first.
8. Out of scope, to be stated in the PR rather than done
wayfinder (#282); the box set stays frozen at nine. And discuss_mode: assumptions in /specs —
Box-authored procedure behind a config key, noted as a wart in #280's PR; it belongs to neither this
tranche nor /specs' own scope.
Third tranche of the v1.1.0 migration. Rewires the four AFK Boxes onto the Method resolver from #279. Mostly a deletion.
Why this is mostly deletion
The structural-only bar (ADR-0030, #279): a Box survives only for what no Method can supply — worktree isolation, gate config, red/green integrity, tracker abstraction, posting surfaces. Everything a Method covers gets delegated. v1.1.0 made three Methods explicitly AFK-safe, so AFK coverage grows while the plugin’s hand-written text shrinks.
Scope
/buildimplement+ the AFK-safetdd(v1.1 rewrote it as reference material precisely so an AFK agent can be handed it). Delete the hand-rolled loop prose. Refactoring leaves the loop — upstream moved it into code review — so amend ADR-0023 including its title.implementcallscode-reviewitself: allow that as a local pre-check that never posts, keeping/pr-reviewthe only Box with posting authority. Keep worktree isolation, fresh-context red/green (ADR-0012), slopcheck,gates.build./pr-reviewcode-review’s two axes (standards · spec, parallel sub-agents) plus its Fowler refactoring smells — ground the plugin currently maintains itself and upstream now maintains. Keep the intent brief, the<!-- unic-dlc-pr-review:iteration=N -->marker re-review, config-gated posting, and both posting surfaces. Amend ADR-0026./qaqabrief shape — upstream movedqatoskills/deprecated/, so the source is a dead branch./exploreresearchin the AFK research nodes (upstream Method is background-agent shaped by construction). Amend ADR-0029.Explicitly out of scope
wayfinderadoption — it is a new Box and human-paced, so it is deferred to its own issue. The box set stays frozen at nine for this migration.Unblocks
#276, #277, #278.
Blocked by
#280
Context
Locked in a grilling session on 2026-07-31. See #279 for the full design.
Acceptance criteria
/build's nodes readimplementandtddthrough a repo-relative path from.archon/methods/. The hand-rolled red/green/refactor prose is deleted, not commented out./build. ADR-0023 is amended, including its title, and its status line records the change./pr-reviewinstead, viacode-review.implement's own review step runs as a local pre-check that posts nothing./pr-reviewremains the only Box with posting authority./pr-review's seven hand-written aspect prompts are replaced bycode-review's two axes plus its refactoring smells. The intent brief, the<!-- unic-dlc-pr-review:iteration=N -->re-review classification, the config gate, and both posting surfaces still work. ADR-0026 amended./qano longer cites Matt'sqaMethod. The brief shape it used is inlined, with a comment recording that upstream deprecated the source./explore's research nodes readresearchthrough the resolver. ADR-0029 amended.archon validateand remain key-discriminated (ADR-0011). No node imports pluginlib/(ADR-0023 §5).gates.<box>key behave as before — this slice removes hand-written text, not Harness capability.pnpm --filter unic-archon-dlc typecheckandtestpass;pnpm ci:checkis clean. Version bumped, CHANGELOG entry added.Dispatch brief
Written after surveying the four shipped workflows and the vendored v1.1.0 Methods, on
developat3f37e8d(tranche 2 merged,unic-archon-dlc@0.14.0). The ten ACs above are the definition of done;this brief only records what an unattended agent would otherwise have to guess. Where this brief and
an AC disagree, the AC wins — say so in the PR rather than silently choosing.
1. Three Methods ask for a human. The Boxes are AFK. Inject, don't skip.
This is the main hazard in the tranche. Each Method was written for a live session and stops to ask a
question no one is there to answer. The Harness already holds every answer — the Box must supply it up
front, in the node prompt, and say where it came from.
Inject the answer. Do not add an
approval:node for any of these. A workflow does support humanintervention, but only in one shape: an
approval:node at a step boundary, config-gated bygates.<box>, carrying a yes/no — never a conversation (ADR-0017; that is why/specsand/triageare commands). Each of the four Boxes already has one or two, and AC 9 requires them to behave exactly
as before. Two reasons a gate is the wrong instrument here:
tdd's seams wereapproved at
/specsStep 5, the seam-approval halt, and again at the/ticketsgate, where everyslice must carry a
test_command. Injecting them is not bypassing a human: it tells the node theapproval is on record and where to read it. The other three are not decisions at all — the fixed
point is the merge-base the DAG determines, the spec source is what
prepalready resolved, and thesetup-matt-pocock-skillsline is a forbidden action rather than a question.when: "$bootstrap.output.gate == 'hitl'", so it is skipped when the gate isafk. An approval nodeadded to satisfy
tdd's seam rule would therefore fire only when a human is present and besilently skipped when one is not, leaving the node to proceed on unconfirmed seams — the outcome
the rule exists to prevent. An injected answer holds in both modes.
tdd/specsStep 5 and are durable:PRD.md§ Testing Decisions, plus each slice'stest_commandinissues.json. Tell the node the seams are confirmed and name those two sources.code-review/pr-review: the merge-base the workflow already computes./build: the branch point of the build branch. Never let a node ask.code-review/pr-review: the intent brief theprepnode already assembles (linked work items +PRD.md+ PR description)./build:PRD.md+issues.json+ the tracker issue.code-review,implement,tdd/setup-matt-pocock-skillsifdocs/agents/issue-tracker.mdis missing".archon/unic-dlc.config.yamlprovides tracker + labels; that skill writes a competing label file (ADR-0024). The four command Boxes each carry this override already — copy the wording fromcommands/triage.mdStep 3.One gap the injection does not close:
test_command_plannedslices.issues.jsonlets a slice settest_command_planned: trueinstead of atest_command— "no runner exists yet, or the test is itselfthe deliverable" (
commands/tickets.mdStep 5). For those slices there is no pre-agreed seam to inject,and
tddforbids writing a test at an unconfirmed seam. Let the node choose the seam and record thechoice in
report.md, in a line naming the slice id and the seam picked, so/pr-reviewand/improve-architecturecan see what was decided while no one was watching. Do not halt the slice and donot make it HITL-only: that would shrink AFK coverage, which this tranche exists to grow. Note the
asymmetry in the ADR-0023 amendment — a slice with a pinned
test_commandinherits a human-approvedseam, one with
test_command_plannedgets an agent-chosen seam that is auditable after the fact.code-reviewstep 3 also carries a twelve-item Fowler smell baseline and step 4 says the Standardssub-agent has no access to it, so it must be pasted in full into that sub-agent's prompt. AC 5 depends
on that paste actually happening — if the Box spawns the axes itself (see item 2) it inherits the duty.
2. One open fork the ACs don't settle: where the two axes run
AC 5 says the seven aspect prompts become "
code-review's two axes plus its refactoring smells". TheMethod implements its own parallelism — step 4: "Send a single message with two
Agenttool calls. Usethe
general-purposesubagent for both." So there are two readings, and they produce different DAGs:reviewnode reads the Method and spawns both axes asAgentcallsinside itself. Faithful to the Method verbatim; the DAG loses the fan-out;
synthesizegets one input.review-standardsandreview-specrun in parallel, each given oneaxis. Keeps the fan-out shape the other Boxes use and keeps each axis in a fresh context — which is
the Method's stated reason for sub-agents — but the Box then re-implements step 4 rather than
delegating it, which is the ADR-0030 defect.
Do (a). It is what "verbatim" means, and ADR-0030's bar is structural: nothing about running two
sub-agents needs the Harness. Record the DAG change (7 nodes → 1) in the ADR-0026 amendment AC 5 asks
for, and note that
synthesizenow consumes one structured output instead of seven. If (a) turns outnot to work inside an Archon prompt node — a node that cannot spawn
Agentcalls — stop and reportrather than falling back to (b) silently: that is a real finding about the container, not a detail.
3.
researchgets its Box here, not in #276AC 7 wires
/explore's research nodes onto theresearchMethod. Three places currently say thathasn't happened, and two of them are test-enforced:
lib/methods-manifest.mjs—research.providedTois[], and the file comment says "researchinfeat(unic-archon-dlc): unic-dlc-research AFK Archon workflow #276".
providedTomust become['explore'].README.md:98— the row reads`research` | no box yet (#276)and must become`/explore`.test/methods-manifest.test.mjsparses that table and fails if it disagrees withprovidedTo.test/methods-manifest.test.mjs— theboxNotShippedYetallowlist is['implement', 'tdd', 'research']. All three leave it in this tranche, so the set becomes empty; keep the constant withits comment rather than deleting it, since feat(unic-archon-dlc): unic-dlc-research AFK Archon workflow #276 and feat(unic-archon-dlc): adopt wayfinder as the pre-spec planning Box #282 will refill it.
Same applies to
implementandtdd:providedTo→['build'], README rows →`/build`.code-reviewgainsbuildalongsidepr-reviewonly if the AC-4 pre-check counts as a direct read— it does, the node reads the Method — so
['pr-review', 'build'].4.
test/command-methods.test.mjsdoes not cover these BoxesTranche 2 added it; it reads
commands/<box>.mdfor the four interactive Boxes. The Archon Boxes areworkflow-YAML node prompts, so extending
BOXESis not a one-line change:readBoxneeds a secondfile shape, and the
const wanted = [...]convention it parses does not exist in a YAML prompt.Two acceptable outcomes, in order of preference:
way it now does in command prose. This is the durable answer and it closes the other half of the gap
AGENTS.mdnames.AGENTS.mdsentence that currently says the Archon Boxes areunwired until feat(unic-archon-dlc): Matt v1.1.0 migration tranche 3 — rewire the Archon Boxes #281 — it becomes wrong the moment this merges.
Do not do neither. If (1), the manifest-alignment assertion must key off whatever the YAML uses to name
its Methods; pick one convention and use it in all four workflows.
5. Reading a Method from inside a node
Repo-relative from
.archon/methods/<name>/SKILL.md, never$CLAUDE_PLUGIN_ROOT— it is not reliablyset in Archon's script runner (ADR-0023 §5), and every node stays a self-contained prompt node with no
plugin-
lib/import. Consequences worth stating in the node prompts:resolveMethodcall. That helper lives in pluginlib/, which a node cannot import. A nodereads the bundle-tier path directly, so the config and
.localtiers do not apply inside an ArchonBox. Say so in the ADR amendments — it is a real asymmetry with the command Boxes, not an oversight.
/unic-archon-dlc:setup, which writes the tree.6.
/qa— inline, and record whyunic-dlc-qa.yaml:218and:226cite "Matt'sqamethod". Confirmed dead: there is noqaundervendor/mattpocock-skills/skills/, upstream moved it toskills/deprecated/, and it is not in themanifest — so nothing resolves and nothing ever did. The brief shape is already written out inline at
:226-229(What happened / What I expected / Steps to reproduce / Blocked by / Additional context);AC 6 needs only the two attributions dropped and a comment recording that the source is a dead
upstream branch. Do not add
qato the manifest.7. Verification, beyond the AC-10 list
archon validateon all four workflows (AC 8). Name the version you ran it with in the PR — the 0.xline churns and the node schema is the contract, not the release number (ADR-0011).
isolation, fresh-context red/green (ADR-0012), slopcheck, and each
gates.<box>key. AC 9 existsbecause that is this tranche's characteristic failure, and it is invisible in a green test run.
pnpm ci:checkat the repo root, not justpnpm test— the latter misses Biome formatting.package.jsonscripts.test; it enumerates every fileexplicitly, so a new suite silently never runs.
pnpm --filter unic-archon-dlc bump minor. It refuses on a dirty tree, andgit status --porcelaincounts untracked files — commit first.8. Out of scope, to be stated in the PR rather than done
wayfinder(#282); the box set stays frozen at nine. Anddiscuss_mode: assumptionsin/specs—Box-authored procedure behind a config key, noted as a wart in #280's PR; it belongs to neither this
tranche nor
/specs' own scope.