Repository navigation
fix(coord): make Blocked by mutations set-safe - #2916
EHotwagner wants to merge 5 commits into
Conversation
|
No description provided. |
|
✅ This PR stays inside the touch-set its issue declared. |
48d5ed7 to
7bf90b5
Compare
|
{"claimGeneration":"5390890035","enteredAt":"2026-08-24T05:38:32.0000000\u002B00:00","event":"enter","evidenceRef":"https://github.com/FS-GG/.github/pull/2916","expiresAt":"2026-08-24T09:38:32.0000000\u002B00:00","item":"FS-GG/.github#2907","kind":"initial-review","reviewGeneration":"7bf90b522961d5955a8914c8ccc1c4a74e6af65c:initial-review:0","schema":"fsgg.coord.review-wait/v1"} |
|
{"acceptedExceptions":[],"baseSha":null,"claimGeneration":null,"critic":"rook-78c3","diffAuditReceipts":[],"diffAuditRequired":false,"digest":"a820887d95c45a5862d33da9b02fe45ed0b603b57bd212d868b22ee527f7c6ae","headSha":"7bf90b522961d5955a8914c8ccc1c4a74e6af65c","initialReview":null,"kind":"initial","policyVersion":"structured-decisions/1","precedingReview":null,"previousDigest":null,"repairPhaseReceipt":null,"revision":1,"round":0,"routeApplicability":"not-meaningful","routeEvidence":["No alternate production route exists for this board-operations CLI change; the built command path, parser, guarded GitHub adapter seam, lint application seam, and batch compatibility path were exercised directly."],"schema":"fsgg.coord.review-decision/v2","subject":"#2907/pr/2916","succession":null,"timestamp":"2026-08-24T05:49:42Z","verdict":"changes-required"} |
|
{"at":"2026-08-24T05:51:12.0000000\u002B00:00","event":"complete","evidenceRef":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391243430","reviewGeneration":"7bf90b522961d5955a8914c8ccc1c4a74e6af65c:initial-review:0","schema":"fsgg.coord.review-wait/v1"} |
|
{"claimGeneration":"5390890035","enteredAt":"2026-08-24T06:16:45.0000000\u002B00:00","event":"enter","evidenceRef":"https://github.com/FS-GG/.github/pull/2916","expiresAt":"2026-08-24T10:16:45.0000000\u002B00:00","item":"FS-GG/.github#2907","kind":"repair-confirmation","reviewGeneration":"6be996676ce5d33e4bb3ed10e270111615d3ded7:repair-confirmation:1","schema":"fsgg.coord.review-wait/v1"} |
|
{"acceptedExceptions":[],"baseSha":null,"claimGeneration":null,"critic":"crake-f274","diffAuditReceipts":[],"diffAuditRequired":false,"digest":"39717200a4dff09e3562a90f15fb5e8076acd6e89f1aa22d78b27c92af9e39bf","headSha":"6be996676ce5d33e4bb3ed10e270111615d3ded7","initialReview":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391243430","kind":"confirmation","policyVersion":"structured-decisions/1","precedingReview":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391243430","previousDigest":"a820887d95c45a5862d33da9b02fe45ed0b603b57bd212d868b22ee527f7c6ae","repairPhaseReceipt":null,"revision":2,"round":1,"routeApplicability":"not-meaningful","routeEvidence":["No alternate production route exists for this board-operations CLI change; the built command path, parser, guarded GitHub adapter seam, lint application seam, batch compatibility path, and hosted parity route were exercised directly."],"schema":"fsgg.coord.review-decision/v2","subject":"#2907/pr/2916","succession":null,"timestamp":"2026-08-24T06:38:26Z","verdict":"pass"} |
|
{"at":"2026-08-24T06:39:26.0000000\u002B00:00","event":"complete","evidenceRef":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391634674","reviewGeneration":"6be996676ce5d33e4bb3ed10e270111615d3ded7:repair-confirmation:1","schema":"fsgg.coord.review-wait/v1"} |
|
{"claimGeneration":"5390890035","enteredAt":"2026-08-24T07:13:37.0000000\u002B00:00","event":"enter","evidenceRef":"https://github.com/FS-GG/.github/pull/2916","expiresAt":"2026-08-24T11:13:37.0000000\u002B00:00","item":"FS-GG/.github#2907","kind":"repair-confirmation","reviewGeneration":"f802984b44f352ced6b1e687b7713b2d7cd49262:repair-confirmation:2","schema":"fsgg.coord.review-wait/v1"} |
|
Host succession grant for the current #2907 review generation.
This grants critic identity succession only. It does not grant a verdict, acceptance, merge, authorization, publication, or disposition of any finding. |
|
{"acceptedExceptions":[],"baseSha":null,"claimGeneration":null,"critic":"shrike-e6e3","diffAuditReceipts":[],"diffAuditRequired":false,"digest":"3916abd48ebc4b29c75c6751fc4276194ee0a9afcc07410dc46ff36da8777407","headSha":"f802984b44f352ced6b1e687b7713b2d7cd49262","initialReview":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391243430","kind":"confirmation","policyVersion":"structured-decisions/1","precedingReview":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5391634674","previousDigest":"39717200a4dff09e3562a90f15fb5e8076acd6e89f1aa22d78b27c92af9e39bf","repairPhaseReceipt":null,"revision":3,"round":2,"routeApplicability":"not-meaningful","routeEvidence":["No alternate production route exists for this single board-write CLI boundary; the built command/parity route and direct guarded adapter seam were exercised. Material finding: the issue\u0027s atomic-add/remove acceptance remains unmet because Board.boardWriteGuarded re-reads the observed value/revision and then emits an unconditional Projects-v2 field mutation, leaving a TOCTOU window in which a concurrent edge added after the re-read is overwritten. The focused stale fixture changes only the second read and cannot represent a change between that read and the mutation. Verification: issue #2907 live body acceptance; work/2907-blocked-by-set-mutations/spec.md:29-39; src/FS.GG.Coord.GitHub/Board.fs:1463-1474; tests/FS.GG.Coord.Cli.BoardOps.Tests/BlockerLintTests.fs:63-96,163-174; GitHub GraphQL schema introspection returned UpdateProjectV2ItemFieldValueInput fields [clientMutationId,projectId,itemId,fieldId,value] with no expected-revision/CAS input; exact-head focused tests 9/9, BoardOps 255/255, GitHub 671/671, Kernel 182/182, parity 616/616 and identity harness 14/14 passed, but none closes that post-read race. The repaired identity-harness subject passed; independently deleting only the CLAUDE_CODE_SESSION_ID scrub made its named test red, and restoring it returned green with a clean tracked diff. Producer agreement/non-vacuity: source parsing found one intake body writer, one authoritative field writer, and one lint reader for Blocked by; the relation is equality over the shared validated value with both sides non-empty, and dropping the producer field made the independent relation assertion exit 1. Workflow reachability: coord-engine is universal on pull_request and its engine job is selected by touched src/tests paths; coord-github is selected by src/FS.GG.Coord.GitHub/Board.fs; harness-identity is selected by tests/FS.GG.Coord.Cli.BoardOps.Tests/BlockerLintTests.fs. Hosted current-head engine and mutation-sweep checks were still in progress and claim-generation was expectedly red before authorization at observation time. Verification: .github/workflows/coord-engine.yml:20-190; .github/workflows/coord-github.yml:20-85; .github/workflows/harness-identity.yml:17-68; GitHub check-runs API for f802984 at 2026-08-24T07:27:44Z."],"schema":"fsgg.coord.review-decision/v2","subject":"#2907/pr/2916","succession":{"grantUrl":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5392036344","grantedBy":"osprey-b926","originalCritic":"crake-f274"},"timestamp":"2026-08-24T07:27:44Z","verdict":"changes-required"} |
|
{"at":"2026-08-24T07:30:19.0000000\u002B00:00","event":"complete","evidenceRef":"https://github.com/FS-GG/.github/pull/2916#issuecomment-5392040842","reviewGeneration":"f802984b44f352ced6b1e687b7713b2d7cd49262:repair-confirmation:2","schema":"fsgg.coord.review-wait/v1"} |
|
{"claimGeneration":"5390890035","enteredAt":"2026-08-24T08:05:38.0000000\u002B00:00","event":"enter","evidenceRef":"https://github.com/FS-GG/.github/pull/2916","expiresAt":"2026-08-24T12:05:38.0000000\u002B00:00","item":"FS-GG/.github#2907","kind":"repair-confirmation","reviewGeneration":"8f8b0bcb4a415dee27fc81a3d8dab15b87015fd0:repair-confirmation:3","schema":"fsgg.coord.review-wait/v1"} |
8f8b0bc to
ded5b50
Compare
|
Superseded by #2936 at the identical candidate commit This PR's expired Verification: |
Closes #2907
Summary
--add,--remove,--replace, and--clearintents for the set-valuedBlocked byfieldBLOCKED-BY-BODY-INERTlinting for empty, divergent, duplicate, or invalid body projectionsVerification
dotnet build src/FS.GG.Coord.Cli/FS.GG.Coord.Cli.fsproj -c Release --no-restore: 0 warnings, 0 errors on the rebased recovery headscripts/generate-projections --check: currentfsgg-sdd analyze:implementationReady;verify:verificationReadywith 14/14 observed obligations;ship:shipReadyVerification: exact commands, outcomes, controls, and inversion evidence are recorded in
work/2907-blocked-by-set-mutations/verification/verification-evidence.md; the durable 257-test TRX isreadiness/2907-blocked-by-set-mutations/test-results/boardops.trx.Recovery
The stranded claim was recovered through the typed force-claim route, the branch was rebased onto current
origin/main, and its SDD generated views were refreshed withfsgg-sdd1.2.5. The prior #2912 dependency and coherent-set 0.75.2 release are already landed and verified; this PR itself declares no delivery obligation.