RFC: a stored status claim should carry its basis, and out-of-band work should leave an in-band pointer
Sibling of #1711, and deliberately not folded into it — see Why this is not #1711 below.
Principle
1. A stored status field should carry the basis that produced it, co-located with the claim.
2. When authoritative work happens outside the tool, the record should carry an in-band pointer to where that authority lives.
The incident
A Shannon SPIR project's status.yaml produced three mutually inconsistent readings of the same phase, each individually defensible. Evidence below is first-hand from the project directory and git log.
(a) The status field is unqualified. phase_2 carries status: complete and nothing else.
(b) The basis for that field exists — in a different artifact. The phase was force-advanced at porch's safety ceiling, recorded only in the commit message: chore(porch): 5189 implement force-advance (safety ceiling reached at iter 3). A reader of status.yaml has no signal that a basis exists in git log, and no reason to look.
(c) The same file contradicts the field. Further down, the review iterations for plan_phase: phase_2 carry verdict: REQUEST_CHANGES.
So a reader who trusts the summary field concludes passed; a reader who scrolls to the detail concludes not passed. Both are wrong. The phase genuinely passed, in a review round that ran outside porch (a multi-model round adjudicated in GitHub comments). Nothing in the file could record that, and nothing in it says so.
⚠️ That is the part worth generalising: the record was not stale — it was structurally incapable of being right, and carried no marker of that incapacity. A reader cannot distinguish "this did not happen" from "this happened somewhere I do not index." Two separate reviewers, independently, read the missing record as a missing review. One of them had personally run the review that was missing.
(d) A third instance in the same file: evidence pointers that resolve on one machine. The verdict entries reference their consult transcripts by absolute local filesystem path into a builder worktree. For any reader on any other machine — or after that worktree is cleaned up — the pointer is dead. This is the same defect as (b): the basis is stored elsewhere, and here the pointer to it does not survive leaving the author's machine.
(e) A copied stale title. phase_3's title in status.yaml describes a design that was replaced; the plan deliberately kept its original title with an amendment beneath it (to preserve evidence of the redesign), and porch copied the title without the amendment. A copy inherits the claim and not the evidence.
Why this is not #1711
#1711 asks that a command report the state it is acting on — it protects the operator at action time.
This asks that a stored record carry its basis and point at out-of-band authority — it protects the reader at interpretation time.
They are complementary rather than overlapping, and neither fix prevents the other's incidents: #1711's fix would not have helped here, because nobody was running a command — they were reading a file days later. Same origin (porch state misleading readers), different moment, different reader.
Sketch of a fix
Not prescribing the design, but the shape:
- A status field that was set by anything other than its normal path (force-advance, manual override, ceiling) says so in the field's own vicinity, not only in a commit message.
- Where a phase's authority is external, the record carries a URL. One line naming where the review lives would have prevented every downstream error in this chain.
- Evidence references are stored relative to the project, or as durable URLs — not as absolute paths into one machine's worktree.
- Copied fields (titles) either carry the amendment or carry a marker that survives copying.
Scope note
Raised from the Shannon side as a consumer of codev; the placement call is the codev architect's. Filed here rather than in Shannon's architecture docs deliberately — a rule about porch's records, written in a document porch never reads, would reproduce the very co-location defect it describes.
RFC: a stored status claim should carry its basis, and out-of-band work should leave an in-band pointer
Sibling of #1711, and deliberately not folded into it — see Why this is not #1711 below.
Principle
The incident
A Shannon SPIR project's
status.yamlproduced three mutually inconsistent readings of the same phase, each individually defensible. Evidence below is first-hand from the project directory and git log.(a) The status field is unqualified.
phase_2carriesstatus: completeand nothing else.(b) The basis for that field exists — in a different artifact. The phase was force-advanced at porch's safety ceiling, recorded only in the commit message:
chore(porch): 5189 implement force-advance (safety ceiling reached at iter 3). A reader ofstatus.yamlhas no signal that a basis exists ingit log, and no reason to look.(c) The same file contradicts the field. Further down, the review iterations for
plan_phase: phase_2carryverdict: REQUEST_CHANGES.So a reader who trusts the summary field concludes passed; a reader who scrolls to the detail concludes not passed. Both are wrong. The phase genuinely passed, in a review round that ran outside porch (a multi-model round adjudicated in GitHub comments). Nothing in the file could record that, and nothing in it says so.
(d) A third instance in the same file: evidence pointers that resolve on one machine. The verdict entries reference their consult transcripts by absolute local filesystem path into a builder worktree. For any reader on any other machine — or after that worktree is cleaned up — the pointer is dead. This is the same defect as (b): the basis is stored elsewhere, and here the pointer to it does not survive leaving the author's machine.
(e) A copied stale title.
phase_3's title instatus.yamldescribes a design that was replaced; the plan deliberately kept its original title with an amendment beneath it (to preserve evidence of the redesign), and porch copied the title without the amendment. A copy inherits the claim and not the evidence.Why this is not #1711
#1711 asks that a command report the state it is acting on — it protects the operator at action time.
This asks that a stored record carry its basis and point at out-of-band authority — it protects the reader at interpretation time.
They are complementary rather than overlapping, and neither fix prevents the other's incidents: #1711's fix would not have helped here, because nobody was running a command — they were reading a file days later. Same origin (porch state misleading readers), different moment, different reader.
Sketch of a fix
Not prescribing the design, but the shape:
Scope note
Raised from the Shannon side as a consumer of codev; the placement call is the codev architect's. Filed here rather than in Shannon's architecture docs deliberately — a rule about porch's records, written in a document porch never reads, would reproduce the very co-location defect it describes.