Purpose
Dispatch canary #5, filed 2026-08-28 on @agent-relay/factory@0.1.81.
Supersedes #394, which is now permanently un-dispatchable for the same reason #394 recorded about #390. The live sweep reaches it and refuses at the last gate:
[factory] skipped a work unit that cannot be dispatched right now
{"issue":"394","error":"Refusing to dispatch 394: dispatch lifecycle is already terminal"}
[factory] readiness reconciliation skipped dispatch
{"issue":"394","reason":"dispatch lifecycle already terminal","code":"dispatch-failed"}
Same for #390, #364, #350 and #186 — ten refusals in one sweep. Their durable
dispatch-lifecycle rows settled in complete/abandoned during the outage, so
claimDispatchLifecycle refuses (factory.ts:7105). The one repair path,
#clearTerminalRefusals, is armed only on a canonical-role edge
(done|humanReview -> readyForAgent). These issues never carried a terminal
label on GitHub, so that edge can never fire and the refusal is permanent.
This issue has no lifecycle history, so it is an uncontaminated test of the path
on 0.1.81, which contains the fixes that were verified this morning:
Deliverable — deliberately trivial
Append one line to the end of README.md:
<!-- dispatch-canary-5: 2026-08-28 -->
An HTML comment. Renders as nothing. No behaviour, build, or test is affected.
Definition of done
- A branch
factory/<issue-number>-* exists
- A PR is open against
main with exactly that one-line change
- Nothing else modified
Out of scope
No refactoring. Do not touch source, tests, workflows, or config. Do not merge the PR — the merge gate belongs to the principal. If this looks like more than one line of work, stop and comment instead of expanding scope.
What it proves
A factory/* branch appearing is unfakeable evidence that dispatch works end to end. The container is live and healthy, the sweep now reaches every eligible issue, and readiness/scope/index all pass — the terminal latch was the only thing left. This is the measurement that distinguishes "fixed" from "still broken".
Purpose
Dispatch canary #5, filed 2026-08-28 on
@agent-relay/factory@0.1.81.Supersedes #394, which is now permanently un-dispatchable for the same reason #394 recorded about #390. The live sweep reaches it and refuses at the last gate:
Same for #390, #364, #350 and #186 — ten refusals in one sweep. Their durable
dispatch-lifecycle rows settled in
complete/abandonedduring the outage, soclaimDispatchLifecyclerefuses (factory.ts:7105). The one repair path,#clearTerminalRefusals, is armed only on a canonical-role edge(
done|humanReview->readyForAgent). These issues never carried a terminallabel on GitHub, so that edge can never fire and the refusal is permanent.
This issue has no lifecycle history, so it is an uncontaminated test of the path
on 0.1.81, which contains the fixes that were verified this morning:
candidates: 0)pulls/_index.json— 6,464 rows carryingheadRef, so the probe no longer falls back onindex-without-head-refDeliverable — deliberately trivial
Append one line to the end of
README.md:An HTML comment. Renders as nothing. No behaviour, build, or test is affected.
Definition of done
factory/<issue-number>-*existsmainwith exactly that one-line changeOut of scope
No refactoring. Do not touch source, tests, workflows, or config. Do not merge the PR — the merge gate belongs to the principal. If this looks like more than one line of work, stop and comment instead of expanding scope.
What it proves
A
factory/*branch appearing is unfakeable evidence that dispatch works end to end. The container is live and healthy, the sweep now reaches every eligible issue, and readiness/scope/index all pass — the terminal latch was the only thing left. This is the measurement that distinguishes "fixed" from "still broken".