FED R4: revocation (30 s access re-read, access.reload, claim end, launcher SIGTERM) #1801

Closed
opened 2026-10-23 01:32:17 +00:00 by jarvis · 6 comments
Contributor

Owner Morgana, reviewer Dewey, gate owner Sage. Federation design r4.11 section 3.7 (P19 #414). Row 275's after-R4 note becomes an after on this row.

Brief: docs/plans/2026-10-23_mvp-readiness-rows.md, section "Brief: FED R4, revocation". Filed under mos-1371/mos-1372 (MVP readiness, due 2026-10-27).

Owner Morgana, reviewer Dewey, gate owner Sage. Federation design r4.11 section 3.7 (P19 #414). Row 275's after-R4 note becomes an after on this row. Brief: `docs/plans/2026-10-23_mvp-readiness-rows.md`, section "Brief: FED R4, revocation". Filed under mos-1371/mos-1372 (MVP readiness, due 2026-10-27).
Author
Contributor

Review request for queue row 295, round 1: FED R4: revocation

  • Owner: morgana
  • Reviewers: dewey
  • Gate: Dewey approves the manifest. The bus, cli and business suites and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage)
  • Brief: docs/plans/2026-10-23_mvp-readiness-rows.md § Brief: FED R4, revocation @ce24040defcd
  • Candidate: commit 527002f9756d61b5fcd4c74afda9eca7022eb080

Check a prospective commit against it with scripts/mosaic queue review verify-commit 295 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 295 --verdict approve|changes --comment COMMENT_ID --candidate 527002f9756d61b5fcd4c74afda9eca7022eb080 --op OP --by SEAT
<!-- mosaic-queue-op: sage-295-request-r1 --> <!-- mosaic-queue-round: row=295 round=1 candidate=527002f9756d61b5fcd4c74afda9eca7022eb080 --> Review request for queue row 295, round 1: FED R4: revocation - Owner: morgana - Reviewers: dewey - Gate: Dewey approves the manifest. The bus, cli and business suites and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage) - Brief: `docs/plans/2026-10-23_mvp-readiness-rows.md` § Brief: FED R4, revocation @ce24040defcd - Candidate: commit `527002f9756d61b5fcd4c74afda9eca7022eb080` Check a prospective commit against it with `scripts/mosaic queue review verify-commit 295 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 295 --verdict approve|changes --comment COMMENT_ID --candidate 527002f9756d61b5fcd4c74afda9eca7022eb080 --op OP --by SEAT ```
Member

Row 295 FED R4 revocation, round 1 review (Dewey): CHANGES

Candidate 527002f9756d61b5fcd4c74afda9eca7022eb080 on morgana/row295, base 253346e3c, review request c30991. I read the code only. Nothing ran, since runs wait for the gate.

B1 (blocker): an expiry with no write ends the run as a release, not a revoke.
When a grant expires and the access file doesn't change, the stamp doesn't move, so #revokeLost('access-change') returns early (broker.mjs:1010). threadsState still computes revoked: true from the cached doc and the current time (:1099-1103). The launcher's 2 s tick (launcher.mjs:707-716) sends SIGTERM while the claim is still held. endLaunch (:1385) then ends that claim as release with reason null. So a live expiry never writes revoke/access-revoked, and the run's calls aren't refused until it exits or the 30 s timer fires.
Fix: when a lost row in threadsState still holds a claim, end the lost claims with a forced #revokeLost from the cached doc. Add a B test (expiry, then threadsState, then the claim row is revoke/access-revoked), an M11 assertion that the run's last claim row is revoke rather than release, and a mutant for the new call.

Non-blocking

  • N1: access.reload ends lost claims in every business and writes the caller's human as by. Record that as a decision in BUILD.md.
  • N2: packages/bus/README.md doesn't document access.reload, the revoked field, the timer or access.intervalMs, and :308 doesn't yet say the access read is stamp-cached. Doc only.
  • N3: row 294 (c866a8a69) makes access live at boot. At the rebase, check 294's ACCESS_HELP edit against M15's ordering assertion.
  • N4: the existing access-fixture tests (user-principal, viewer, thread-shares) now sweep. Run them whole and watch for reds.

Checked, no finding: the thread_claims columns, no nested transactions, the lstat stamp, threads.owner NOT NULL, the other #threadRows caller, the transport allowlist, and the six tests the brief requires, which are all present.

Gate after the fix: the pin rebased on 294 with its manifest digest; bus, cli and business whole plus every scripts/test-*.sh with skips named; M1-M15 and the B1 mutant killed.

Morgana's round 2 is 44b778e09. It gets reviewed after the rebase onto 294.

**Row 295 FED R4 revocation, round 1 review (Dewey): CHANGES** Candidate `527002f9756d61b5fcd4c74afda9eca7022eb080` on morgana/row295, base 253346e3c, review request c30991. I read the code only. Nothing ran, since runs wait for the gate. **B1 (blocker): an expiry with no write ends the run as a release, not a revoke.** When a grant expires and the access file doesn't change, the stamp doesn't move, so `#revokeLost('access-change')` returns early (broker.mjs:1010). `threadsState` still computes `revoked: true` from the cached doc and the current time (:1099-1103). The launcher's 2 s tick (launcher.mjs:707-716) sends SIGTERM while the claim is still held. `endLaunch` (:1385) then ends that claim as `release` with reason null. So a live expiry never writes `revoke`/`access-revoked`, and the run's calls aren't refused until it exits or the 30 s timer fires. Fix: when a lost row in `threadsState` still holds a claim, end the lost claims with a forced `#revokeLost` from the cached doc. Add a B test (expiry, then `threadsState`, then the claim row is revoke/access-revoked), an M11 assertion that the run's last claim row is revoke rather than release, and a mutant for the new call. **Non-blocking** - N1: `access.reload` ends lost claims in every business and writes the caller's human as `by`. Record that as a decision in BUILD.md. - N2: packages/bus/README.md doesn't document `access.reload`, the `revoked` field, the timer or `access.intervalMs`, and :308 doesn't yet say the access read is stamp-cached. Doc only. - N3: row 294 (c866a8a69) makes access live at boot. At the rebase, check 294's ACCESS_HELP edit against M15's ordering assertion. - N4: the existing access-fixture tests (user-principal, viewer, thread-shares) now sweep. Run them whole and watch for reds. **Checked, no finding:** the thread_claims columns, no nested transactions, the lstat stamp, threads.owner NOT NULL, the other `#threadRows` caller, the transport allowlist, and the six tests the brief requires, which are all present. **Gate after the fix:** the pin rebased on 294 with its manifest digest; bus, cli and business whole plus every scripts/test-*.sh with skips named; M1-M15 and the B1 mutant killed. Morgana's round 2 is 44b778e09. It gets reviewed after the rebase onto 294.
Author
Contributor

Review request for queue row 295, round 2: FED R4: revocation

  • Owner: morgana
  • Reviewers: dewey
  • Gate: Dewey approves the manifest. The bus, cli and business suites and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage)
  • Brief: docs/plans/2026-10-23_mvp-readiness-rows.md § Brief: FED R4, revocation @ce24040defcd
  • Candidate: commit f5256e67790a5e8a88d92f314a306ef0cd63c183

Check a prospective commit against it with scripts/mosaic queue review verify-commit 295 REF.

Post your verdict as a comment here, then record it:

scripts/mosaic queue review record 295 --verdict approve|changes --comment COMMENT_ID --candidate f5256e67790a5e8a88d92f314a306ef0cd63c183 --op OP --by SEAT
<!-- mosaic-queue-op: sage-3341 --> <!-- mosaic-queue-round: row=295 round=2 candidate=f5256e67790a5e8a88d92f314a306ef0cd63c183 --> Review request for queue row 295, round 2: FED R4: revocation - Owner: morgana - Reviewers: dewey - Gate: Dewey approves the manifest. The bus, cli and business suites and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage) - Brief: `docs/plans/2026-10-23_mvp-readiness-rows.md` § Brief: FED R4, revocation @ce24040defcd - Candidate: commit `f5256e67790a5e8a88d92f314a306ef0cd63c183` Check a prospective commit against it with `scripts/mosaic queue review verify-commit 295 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 295 --verdict approve|changes --comment COMMENT_ID --candidate f5256e67790a5e8a88d92f314a306ef0cd63c183 --op OP --by SEAT ```
Member

Dewey: row 295 round 2 verdict: APPROVE (candidate morgana/row295-r2 = f5256e6779, a commit-kind candidate)

  • Static deltas, all clean (git only).
    • b16cef1d0, the rebase on 80793d824: dewey-0888/0890.
    • 9f29e1b2f, the three mos-1272 first-run placements: dewey-0904. No assertion was loosened, and both test files are new in this row. Lazy bind keeps each thread-revoke test's meaning, and every spread claim() expectation is non-empty.
    • f652dfa5b, the mos-1436 option (a) old-test setup: dewey-0906. Only message-filter's trail test and governance pin get an access function. spec-fixtures gains one optional param that defaults to null. The bindLaunch lines and every assert are byte-identical.
    • f5256e677 closes F1: the grant names only the test's project (projects: [ref.project]). Nothing reads access before ref.project is set: request() reads it only for user sessions, and the thread-less runs short-circuit #threadLost. Checked in dewey-0908.
  • Merge. d68b4300d = f5256e677 onto 07802dc57 (tree a86592ffc). Its 12 changed paths equal f5256e677's row delta on 80793d824, and every per-file patch-id matches. refactor is still 07802dc57, so there's no drift.
  • Gate (Morgana's record in 7e69a4a4b, BUILD.md "Third run").
    • The manifest checked clean: 12 paths, e94c9aeb.
    • Red first on 38591cf96: message-filter 4/2, both thread-revoked. Green on d68b4300d: 6/0.
    • 13 whole files green.
    • Suites: bus 886/0, business 231/0, cli 924/0, harness 151/0.
    • Every scripts/test-*.sh exits 0 under timeout -k 10 300 (mos-1275). The skips are named: test-queue 1 (canonical root) and test-task 2 (live provider cases, row 244).
  • Mutants. M1-M16 are each killed by their named test, and M11 failed on an assertion, not a timeout. M8's anchor is the full :1371 bindLaunch line (grep -c 1; the bare fail('thread-revoked') also appears at role.claim :5259). M8 is killed by access-revoke "R4: a new run of a revoked thread refuses thread-revoked at bind and at claim; a rebind is allowed".
  • Carried. N1 is a revoked run calling between its claim end and SIGTERM, which gets not-holder/exit 22 (Morgana's BUILD.md). Sage decides after landing whether it becomes a row.
**Dewey: row 295 round 2 verdict: APPROVE** (candidate morgana/row295-r2 = f5256e67790a5e8a88d92f314a306ef0cd63c183, a commit-kind candidate) - **Static deltas, all clean (git only).** - b16cef1d0, the rebase on 80793d824: dewey-0888/0890. - 9f29e1b2f, the three mos-1272 first-run placements: dewey-0904. No assertion was loosened, and both test files are new in this row. Lazy bind keeps each thread-revoke test's meaning, and every spread claim() expectation is non-empty. - f652dfa5b, the mos-1436 option (a) old-test setup: dewey-0906. Only message-filter's trail test and governance pin get an access function. spec-fixtures gains one optional param that defaults to null. The bindLaunch lines and every assert are byte-identical. - f5256e677 closes F1: the grant names only the test's project (`projects: [ref.project]`). Nothing reads access before `ref.project` is set: request() reads it only for user sessions, and the thread-less runs short-circuit #threadLost. Checked in dewey-0908. - **Merge.** d68b4300d = f5256e677 onto 07802dc57 (tree a86592ffc). Its 12 changed paths equal f5256e677's row delta on 80793d824, and every per-file patch-id matches. refactor is still 07802dc57, so there's no drift. - **Gate (Morgana's record in 7e69a4a4b, BUILD.md "Third run").** - The manifest checked clean: 12 paths, e94c9aeb. - Red first on 38591cf96: message-filter 4/2, both thread-revoked. Green on d68b4300d: 6/0. - 13 whole files green. - Suites: bus 886/0, business 231/0, cli 924/0, harness 151/0. - Every scripts/test-*.sh exits 0 under `timeout -k 10 300` (mos-1275). The skips are named: test-queue 1 (canonical root) and test-task 2 (live provider cases, row 244). - **Mutants.** M1-M16 are each killed by their named test, and M11 failed on an assertion, not a timeout. M8's anchor is the full :1371 bindLaunch line (grep -c 1; the bare `fail('thread-revoked')` also appears at role.claim :5259). M8 is killed by access-revoke "R4: a new run of a revoked thread refuses thread-revoked at bind and at claim; a rebind is allowed". - **Carried.** N1 is a revoked run calling between its claim end and SIGTERM, which gets not-holder/exit 22 (Morgana's BUILD.md). Sage decides after landing whether it becomes a row.
Author
Contributor

Row 295 (FED R4 revocation) landed on refactor at 2efd127ce6 (10:10Z 10-23).

  • 9 commits cherry-picked onto 07802dc57: range-diff all equal, patch-ids match, and HEAD~1's tree a86592ffc is the gated tree. The top commit is the doc-only BUILD.md gate record.
  • Gate on merge d68b4300d, manifest e94c9aeb (12 paths): red first on 38591cf96 then green (mos-1436), 13 whole files, bus 886/0, business 231/0, cli 924/0, harness 151/0. Every scripts/test-*.sh rc 0, M1-M16 killed, M8 killed by access-revoke R4.
  • Dewey approve: rev 3500, comment 31102. Queue note and done: sage-3343 and sage-3344.
  • Not live yet. The live stack stays on 464010fbe. Before any re-pin that carries 295, count the user: threads in the live store (mos-1436 condition 11).

Closing.

Row 295 (FED R4 revocation) landed on refactor at 2efd127ce617a9bff8dc3bee3a3b657b0c175c07 (10:10Z 10-23). - 9 commits cherry-picked onto 07802dc57: range-diff all equal, patch-ids match, and HEAD~1's tree a86592ffc is the gated tree. The top commit is the doc-only BUILD.md gate record. - Gate on merge d68b4300d, manifest e94c9aeb (12 paths): red first on 38591cf96 then green (mos-1436), 13 whole files, bus 886/0, business 231/0, cli 924/0, harness 151/0. Every scripts/test-*.sh rc 0, M1-M16 killed, M8 killed by access-revoke R4. - Dewey approve: rev 3500, comment 31102. Queue note and done: sage-3343 and sage-3344. - Not live yet. The live stack stays on 464010fbe. Before any re-pin that carries 295, count the user: threads in the live store (mos-1436 condition 11). Closing.
Member

Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 295's commits (ff54a1556, 31da9dcb8, 24f8f5d73, 0c8f12ea2) now run live. It acts only on user: threads. There are none, and access.json is absent, so it is inert; wiring access is a human act (mos-1487 D3). P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: agents/darkwing/work/window-repin-45dca69f6/STATE.md on branch darkwing/window-repin-45dca69f6.

Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 295's commits (ff54a1556, 31da9dcb8, 24f8f5d73, 0c8f12ea2) now run live. It acts only on `user:` threads. There are none, and access.json is absent, so it is inert; wiring access is a human act (mos-1487 D3). P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1801