Summary
The repo lane's receipt collector reads check evidence from .agent-sdlc/checks.jsonl and returns { items: [], total: 0 } when the file doesn't exist (packages/cli/templates/receipts/collect.mjs:203). All six generated workflows point FACILITY_RECEIPT_CHECKS_FILE at that same path, but none of them, or anything else under packages/cli/templates, ever writes it.
The builder prompt tells the agent to "run the configured suite" (packages/cli/templates/prompts/builder.md:34-38), using CHECKS_INLINE, the raw shell command joined with ; (packages/cli/src/init.mjs:384), through its own bash tool. That's a prose instruction with no wrapper capturing the result into the file the collector reads. So on every repo lane run today, receipt.checks comes back empty, indistinguishable from "this repo has no checks configured."
Where
packages/cli/templates/receipts/collect.mjs:202-203 (parseChecks returns empty on missing file)
packages/cli/templates/prompts/builder.md:34-38 (instructs the agent to run checks, nothing captures the result)
packages/cli/src/init.mjs:384 (CHECKS_INLINE is the raw shell command, unwrapped)
- Confirmed by grep across
packages/cli/templates, including every workflow: no file writes .agent-sdlc/checks.jsonl.
Contrast with the platform lane
runner/src/index.ts:1591-1600 (runChecks) runs the configured check commands itself, outside the agent's turn, and emits each result with self_reported: false (runner/src/index.ts:1607). That lane works correctly. The repo lane has the schema (packages/core/src/receipts.ts:4-8) and the reader, but nothing plays the role runChecks plays on the platform side.
Why it matters
The repo lane is the path most people adopting Facility hit first, no platform dependency, just vendored GitHub Actions. Right now the receipt from that lane, the artifact meant to answer "did this really pass its checks", carries no check evidence at all, and silently, nobody has to misreport anything for this to happen.
Suggested fix
Add a step to the generated workflows that sets FACILITY_RECEIPT_CHECKS_FILE (facility-crew.yml, facility-codex.yml, facility-review.yml, facility-address-review.yml, facility-doctor.yml, facility-security-sweep.yml) that runs CHECKS_INLINE itself, outside the agent's turn, and appends the result to checks.jsonl with self_reported: false before the receipt-collect step runs, mirroring runChecks in the runner.
Summary
The repo lane's receipt collector reads check evidence from
.agent-sdlc/checks.jsonland returns{ items: [], total: 0 }when the file doesn't exist (packages/cli/templates/receipts/collect.mjs:203). All six generated workflows pointFACILITY_RECEIPT_CHECKS_FILEat that same path, but none of them, or anything else underpackages/cli/templates, ever writes it.The builder prompt tells the agent to "run the configured suite" (
packages/cli/templates/prompts/builder.md:34-38), usingCHECKS_INLINE, the raw shell command joined with;(packages/cli/src/init.mjs:384), through its own bash tool. That's a prose instruction with no wrapper capturing the result into the file the collector reads. So on every repo lane run today,receipt.checkscomes back empty, indistinguishable from "this repo has no checks configured."Where
packages/cli/templates/receipts/collect.mjs:202-203(parseChecksreturns empty on missing file)packages/cli/templates/prompts/builder.md:34-38(instructs the agent to run checks, nothing captures the result)packages/cli/src/init.mjs:384(CHECKS_INLINEis the raw shell command, unwrapped)packages/cli/templates, including every workflow: no file writes.agent-sdlc/checks.jsonl.Contrast with the platform lane
runner/src/index.ts:1591-1600(runChecks) runs the configured check commands itself, outside the agent's turn, and emits each result withself_reported: false(runner/src/index.ts:1607). That lane works correctly. The repo lane has the schema (packages/core/src/receipts.ts:4-8) and the reader, but nothing plays the rolerunChecksplays on the platform side.Why it matters
The repo lane is the path most people adopting Facility hit first, no platform dependency, just vendored GitHub Actions. Right now the receipt from that lane, the artifact meant to answer "did this really pass its checks", carries no check evidence at all, and silently, nobody has to misreport anything for this to happen.
Suggested fix
Add a step to the generated workflows that sets
FACILITY_RECEIPT_CHECKS_FILE(facility-crew.yml,facility-codex.yml,facility-review.yml,facility-address-review.yml,facility-doctor.yml,facility-security-sweep.yml) that runsCHECKS_INLINEitself, outside the agent's turn, and appends the result tochecks.jsonlwithself_reported: falsebefore the receipt-collect step runs, mirroringrunChecksin the runner.