Repository navigation
[coord] Separate merged from post-merge verified before projecting Done #2905
Description
Parent and finding
Child of #2903, instance 3. delivery --apply projects issue closure, Status=Done, claim release, and a delivery-completion receipt during guarded landing, before the protected/default-branch run can exist. The measured S.I.R. control had an empty intersection between PR-only and protected-branch checks, so pre-merge green evidence cannot establish the post-merge state that Done claims.
Filing-bar verdict
- Red today: current
Delivery.decideCompletionauthorizesProjectCompletionfromMerged, reachability, mutable projections, and declared obligations; it has no protected-branch verification fact.LiveHandlers.runDonethen appends the completion receipt and closes/projects the issue immediately after merge. - Not already derived: no
scripts/check-*.pycontinuously derives whether a completion receipt is backed by a protected-branch run for its exact merge SHA. - Class-anchored: [epic] Move deterministic development-process protocol from agent prose into fsgg-coord #2130 owns the general typed-process programme, but no open child owns this distinct merge-versus-verification transition. [cross-repo] An unclaimed item branch with an open PR is invisible to every scheduler collision check #2849 concerns invisible unclaimed work, not completion evidence.
Acceptance
Mergedand post-mergeVerifiedare distinct typed facts/states.Done, issue closure, claim release, and the terminal completion receipt cannot claim verified completion before an exact-merge protected/default-branch receipt exists.- A red or unreadable protected-branch result remains visible and recoverable; it never becomes
Done. - Inversion proves a PR-green merge with no qualifying post-merge run cannot complete, while the same merge completes after a matching green receipt.
- The existing delivery-obligation saga remains resumable and idempotent.
Verification: src/FS.GG.Coord.Core/Delivery.fs:345-372,394-428; src/FS.GG.Coord.Cli.Lifecycle/LiveHandlers.fs:1640-1678; #2903 instance 3. Adjudicated by brant-bea2.
Class: defect
Severity: Critical
Repo Scope: .github
Paths: src/FS.GG.Coord.Core/Delivery.fs src/FS.GG.Coord.Core/Delivery.fsi src/FS.GG.Coord.Cli.Lifecycle/DeliveryApplication.fs src/FS.GG.Coord.Cli.Lifecycle/LiveHandlers.fs tests/FS.GG.Coord.Core.Tests/DeliveryTests.fs tests/FS.GG.Coord.Cli.Lifecycle.Tests/DeliveryApplicationTests.fs tests/FS.GG.Coord.Cli.Lifecycle.Tests/DoneStderrTests.fs src/FS.GG.Coord.Cli.Lifecycle/LiveHandlers.fsi work/2905-post-merge-verification/** readiness/2905-post-merge-verification/** src/FS.GG.Coord.GitHub/Reads.fs src/FS.GG.Coord.GitHub/Reads.fsi tests/FS.GG.Coord.GitHub.Tests/ReadTests.fs tests/FS.GG.Coord.GitHub.Tests/WriteTests.fs tests/FS.GG.Coord.GitHub.Tests/DoneFactsTests.fs tests/FS.GG.Coord.Cli.BoardOps.Tests/ApplicationServiceTests.fs src/FS.GG.Coord.Cli.Lifecycle/DeliveryApplication.fsi .agents/skills/fs-gg-sdd-analyze .agents/skills/fs-gg-sdd-authoring-contracts .agents/skills/fs-gg-sdd-charter .agents/skills/fs-gg-sdd-checklist .agents/skills/fs-gg-sdd-clarify .agents/skills/fs-gg-sdd-evidence .agents/skills/fs-gg-sdd-getting-started .agents/skills/fs-gg-sdd-lifecycle .agents/skills/fs-gg-sdd-plan .agents/skills/fs-gg-sdd-refresh-agents .agents/skills/fs-gg-sdd-ship .agents/skills/fs-gg-sdd-specify .agents/skills/fs-gg-sdd-tasks .agents/skills/fs-gg-sdd-troubleshooting .agents/skills/fs-gg-sdd-validate .agents/skills/fs-gg-sdd-verify .claude/skills/fs-gg-sdd-analyze .claude/skills/fs-gg-sdd-authoring-contracts .claude/skills/fs-gg-sdd-charter .claude/skills/fs-gg-sdd-checklist .claude/skills/fs-gg-sdd-clarify .claude/skills/fs-gg-sdd-evidence .claude/skills/fs-gg-sdd-getting-started .claude/skills/fs-gg-sdd-lifecycle .claude/skills/fs-gg-sdd-plan .claude/skills/fs-gg-sdd-refresh-agents .claude/skills/fs-gg-sdd-ship .claude/skills/fs-gg-sdd-specify .claude/skills/fs-gg-sdd-tasks .claude/skills/fs-gg-sdd-troubleshooting .claude/skills/fs-gg-sdd-validate .claude/skills/fs-gg-sdd-verify src/FS.GG.Coord.GitHub/Transport.fs tests/FS.GG.Coord.GitHub.Tests/HttpTransportTests.fs
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
EHotwagner commentedon Aug 24, 2026
EHotwagner commentedon Aug 24, 2026
{"schema":"fsgg.coord.route-decision/v2","subject":"#2905","revision":1,"previousDigest":null,"scope":["Separate merged from exact-merge protected-branch verification before terminal delivery completion."],"dependencies":["none"],"touchSet":["src/FS.GG.Coord.Core/Delivery.fs","src/FS.GG.Coord.Core/Delivery.fsi","src/FS.GG.Coord.Cli.Lifecycle/DeliveryApplication.fs","src/FS.GG.Coord.Cli.Lifecycle/LiveHandlers.fs","tests/FS.GG.Coord.Core.Tests/DeliveryTests.fs","tests/FS.GG.Coord.Cli.Lifecycle.Tests/DeliveryApplicationTests.fs"],"policyVersion":"structured-decisions/1","route":"sdd-required","agent":"brant-bea2","timestamp":"2026-08-24T00:31:00Z","reasonCodes":["parent-2903-priority","irreversible-completion-boundary","post-merge-evidence-contract"],"rationale":"The change adds a distinct lifecycle state and durable evidence boundary around irreversible completion projection; SDD is required to define recovery, idempotency, and exact-merge verification semantics before implementation.","sddWorkId":"2905-post-merge-verification","specHome":"work/2905-post-merge-verification/spec.md","requiredGates":["implementationReady","analyze","verify","ship"],"digest":"50589191989f4f628a2434fcfccc14c415b9f3be9002c6841478459e3868b1a5"}
EHotwagner commentedon Aug 24, 2026
EHotwagner commentedon Aug 24, 2026
fs-gg-cross-repo-dispatch commentedon Aug 25, 2026
13 remaining items
EHotwagner commentedon Aug 25, 2026
Rotate #2905 review generation
EHotwagner commentedon Aug 25, 2026
Merge election for this item's current claim generation, posted by
deliveryfor pull request #2973 (.github#2395, design §4.2). Append-only: it carries no lease, is never deleted, and the lowest-id election bearing this operation key is the one whose merge this generation admits.fs-gg-cross-repo-dispatch commentedon Aug 25, 2026