What happened
Three nodes in /qa emit prose as structured output that nothing reads and nothing writes to disk. The content exists in Archon's SQLite event row and nowhere else. When /cleanup prunes the worktree, it is gone.
| Field |
Emitted at |
Read by |
Can write a file? |
e2e.summary |
unic-dlc-qa.yaml:113 |
nothing |
No — allowed_tools: [Read, Bash] at :96 |
coverage-gate.summary |
:146 |
nothing |
No — allowed_tools: [Read, Bash] at :126 |
uat-prep.criteria |
:186 |
nothing |
— |
The only $e2e|$coverage-gate|$uat-prep.output.* reference in the whole file is line 337, which reads .result on the first two. summary and criteria have no reader at all.
uat-prep's own prompt states the purpose the emission fails to serve, at :181:
Emit the numbered criteria as structured output so the finding-capture step can reference them
The finding-capture step is uat-gate.on_reject. It references $REJECTION_REASON and nothing else.
Why it matters
uat-gate is the one place in /qa where a human judges the run. Its approval message, :216, tells that human:
review the UAT checklist printed by uat-prep above against the e2e and coverage-gate results
"Above" is console scrollback. So the evidence at the only human gate in this Box is terminal output, and /qa has no report node, so nothing it produces survives the worktree. A reviewer on the pull request sees none of it.
How this was found, and what it is not
It came out of #438's grilling. That ticket claimed /build's implement-review-precheck recorded its findings nowhere. That claim is false — unic-dlc-build.yaml:578 has the report node fold $implement-review-precheck.output.findings in verbatim, and run 2's thirteen findings are committed in workflows/profile-card/report.md § 4 on origin/feature/43004_build-profile-card in DXP-DesignSystem (commit c66eac9).
Surveying the other three Boxes for the same shape is what found these three fields. /build routes its prose correctly. /qa does not.
One observation seeded #438's false conclusion, and it applies here too. "The run's artifacts directory was empty" was true of $ARTIFACTS_DIR, which resolves outside the repo under ~/.archon/workspaces/<name>/artifacts/, is always gitignored, and is reused on resume. The repo-relative Session dir, <artifacts_dir>/<slug>/, is a different place and is deliberately committed. Name the home in every criterion that names a path. A criterion saying "the node writes its summary to the artifacts directory" is satisfiable in a way that fixes nothing.
The pattern that already works here
unic-dlc-pr-review.yaml solves the same problem without a DAG edge: prep writes SESSION/prep.json, and reconcile reads it back at :395. That is why prep's has_source / has_tests / has_types / has_docs / touches_error_handling / prior_findings fields look orphaned to a grep for $prep.output.* and are not. Write the file, read the file.
The open question, to be grilled before criteria
Does /qa gain a durable artefact of its own, or does each node write its own file into <artifacts_dir>/<slug>/?
Neither is decided. The first mirrors /build's report node and gives the human at uat-gate one thing to open; the second is smaller and matches what pr-review already does. A prior question sits under both, the same one #438 turned on: who is the reader, and when do they read? The human at uat-gate during the run, and the reviewer on the pull request afterwards, pull in different directions.
Overlap to state in whatever criteria this gets
#430's criterion 10 was amended on 2026-09-03 to require its unresolved-needs block to be durable, in a file under <artifacts_dir>/<slug>/. In /qa that block attaches to exactly the two summaries above. So #430 and this ticket touch the same file and the same nodes, and #430 is the one dispatched. Whichever lands first, the other rebases. If #430 lands first it will have created a file-writing surface in /qa that this ticket then generalises, which is the cheaper order.
Out of scope for run 3
Ruled by the maintainer on 2026-09-03: /qa is not needed for run 3 or for the #456 map. This ticket carries the /qa half so #438 can keep only its /build half.
What happened
Three nodes in
/qaemit prose as structured output that nothing reads and nothing writes to disk. The content exists in Archon's SQLite event row and nowhere else. When/cleanupprunes the worktree, it is gone.e2e.summaryunic-dlc-qa.yaml:113allowed_tools: [Read, Bash]at:96coverage-gate.summary:146allowed_tools: [Read, Bash]at:126uat-prep.criteria:186The only
$e2e|$coverage-gate|$uat-prep.output.*reference in the whole file is line 337, which reads.resulton the first two.summaryandcriteriahave no reader at all.uat-prep's own prompt states the purpose the emission fails to serve, at:181:The finding-capture step is
uat-gate.on_reject. It references$REJECTION_REASONand nothing else.Why it matters
uat-gateis the one place in/qawhere a human judges the run. Its approval message,:216, tells that human:"Above" is console scrollback. So the evidence at the only human gate in this Box is terminal output, and
/qahas noreportnode, so nothing it produces survives the worktree. A reviewer on the pull request sees none of it.How this was found, and what it is not
It came out of #438's grilling. That ticket claimed
/build'simplement-review-precheckrecorded its findings nowhere. That claim is false —unic-dlc-build.yaml:578has thereportnode fold$implement-review-precheck.output.findingsin verbatim, and run 2's thirteen findings are committed inworkflows/profile-card/report.md§ 4 onorigin/feature/43004_build-profile-cardinDXP-DesignSystem(commitc66eac9).Surveying the other three Boxes for the same shape is what found these three fields.
/buildroutes its prose correctly./qadoes not.One observation seeded #438's false conclusion, and it applies here too. "The run's artifacts directory was empty" was true of
$ARTIFACTS_DIR, which resolves outside the repo under~/.archon/workspaces/<name>/artifacts/, is always gitignored, and is reused on resume. The repo-relative Session dir,<artifacts_dir>/<slug>/, is a different place and is deliberately committed. Name the home in every criterion that names a path. A criterion saying "the node writes its summary to the artifacts directory" is satisfiable in a way that fixes nothing.The pattern that already works here
unic-dlc-pr-review.yamlsolves the same problem without a DAG edge:prepwritesSESSION/prep.json, andreconcilereads it back at:395. That is whyprep'shas_source/has_tests/has_types/has_docs/touches_error_handling/prior_findingsfields look orphaned to a grep for$prep.output.*and are not. Write the file, read the file.The open question, to be grilled before criteria
Does
/qagain a durable artefact of its own, or does each node write its own file into<artifacts_dir>/<slug>/?Neither is decided. The first mirrors
/build'sreportnode and gives the human atuat-gateone thing to open; the second is smaller and matches whatpr-reviewalready does. A prior question sits under both, the same one #438 turned on: who is the reader, and when do they read? The human atuat-gateduring the run, and the reviewer on the pull request afterwards, pull in different directions.Overlap to state in whatever criteria this gets
#430's criterion 10 was amended on 2026-09-03 to require its
unresolved-needs block to be durable, in a file under<artifacts_dir>/<slug>/. In/qathat block attaches to exactly the two summaries above. So #430 and this ticket touch the same file and the same nodes, and #430 is the one dispatched. Whichever lands first, the other rebases. If #430 lands first it will have created a file-writing surface in/qathat this ticket then generalises, which is the cheaper order.Out of scope for run 3
Ruled by the maintainer on 2026-09-03:
/qais not needed for run 3 or for the #456 map. This ticket carries the/qahalf so #438 can keep only its/buildhalf.