Skip to content

feat(unic-archon-dlc): Matt v1.1.0 migration tranche 3 — rewire the Archon Boxes #281

Description

@orioltf

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.

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

  1. /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.
  2. Refactoring no longer appears in /build. ADR-0023 is amended, including its title, and its status line records the change.
  3. Refactoring appears in /pr-review instead, via code-review.
  4. implement's own review step runs as a local pre-check that posts nothing. /pr-review remains the only Box with posting authority.
  5. /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.
  6. /qa no longer cites Matt's qa Method. The brief shape it used is inlined, with a comment recording that upstream deprecated the source.
  7. /explore's research nodes read research through the resolver. ADR-0029 amended.
  8. All four workflows still pass archon validate and remain key-discriminated (ADR-0011). No node imports plugin lib/ (ADR-0023 §5).
  9. 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.
  10. 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.

3. research gets its Box here, not in #276

AC 7 wires /explore's research nodes onto the research Method. Three places currently say that
hasn't happened, and two of them are test-enforced:

Same applies to implement and tdd: providedTo['build'], README rows → `/build`.
code-review gains build alongside pr-review only 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:

  1. 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.
  2. Leave the test as-is and update the AGENTS.md sentence that currently says the Archon Boxes are
    unwired 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 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.
  • Therefore no tier line either. AC 7 of feat(unic-archon-dlc): Matt v1.1.0 migration tranche 2 — rewire the command Boxes #280 does not extend here; do not invent one.
  • 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.json scripts.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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions