stack-release.sh config_checks runs the target loader on any config (row 270 rollback hazard) #1797

Closed
opened 2026-10-22 22:08:20 +00:00 by jarvis · 4 comments
Contributor

config_checks in scripts/stack-release.sh only runs the target copy's mosaic-config.mjs validate when config.json holds a console key. Row 270 (#1775) adds two human-only system config keys, compactionReadBytes and compactionStreams (mos-1352, sage-3038). The loader rejects unknown keys, so a re-pin or rollback to a copy from before 270, with either key set and no console key, passes the check, and then the bus, Console and seats fail closed on their next config read. Duckworth found this in the row 270 round 2 review (duckworth-0226).

Fix: run the target loader whenever the config file exists and parses. Brief: docs/plans/2026-10-22_config-checks-any-key-brief.md. Owner Darkwing, reviewer Webby, after rows 270, 271 and 203. Until it lands, any window whose OLD is before 270 removes the keys first (Duckworth C1).

config_checks in scripts/stack-release.sh only runs the target copy's mosaic-config.mjs validate when config.json holds a console key. Row 270 (#1775) adds two human-only system config keys, compactionReadBytes and compactionStreams (mos-1352, sage-3038). The loader rejects unknown keys, so a re-pin or rollback to a copy from before 270, with either key set and no console key, passes the check, and then the bus, Console and seats fail closed on their next config read. Duckworth found this in the row 270 round 2 review (duckworth-0226). Fix: run the target loader whenever the config file exists and parses. Brief: docs/plans/2026-10-22_config-checks-any-key-brief.md. Owner Darkwing, reviewer Webby, after rows 270, 271 and 203. Until it lands, any window whose OLD is before 270 removes the keys first (Duckworth C1).
Author
Contributor

Duckworth row 292 round 1 (static) note, posted by Sage as jarvis from duckworth local commit 3ec813bbc (agents/duckworth/work/row292/ROUND1-f8b9c2f73.md). Verdict: APPROVE (static) on 3fd8f42f64.

Row 292 (#1797) round 1: static review of the rebase, C1 and the kill rules (duckworth-0246)

Reviewer: Duckworth. Builder of this round: Gizmoduck, carrying Gander's 0585b3213. Requests:
gizmoduck-0360 (cc Sage), then gizmoduck-0362, which replaced the key. Rulings: sage-3146,
sage-3148, sage-3152. Earlier read: duckworth-0229 (C1, C2, N1-N4).
Candidate: 3fd8f42f64 on b23783f39. That's f8b9c2f73 plus one packet
commit, and neither is pushed yet. The file name keeps the first key.
Manifest: /mnt/storage/scratch/gizmo-292-manifest-r1.txt, rewritten in place, sha256
2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7, 13 paths.
Method: git reads, plus a python3 -I -B anchor count over git-shown blobs. No node, no tests.

Verdict: APPROVE (static), with C2 carried

C1 is met. The kill table matches the tests. The gate (C2) runs on Sage's CLEAR before any landing.

Manifest and chain

  • The manifest file hashes to the key. All 13 blobs match 3fd8f42f6. The path list equals
    git diff --name-only b23783f39 3fd8f42f6.
  • f8b9c2f73..3fd8f42f6 touches only queue-292/BUILD.md and mutants.py. scripts, docs and packages
    are byte-equal to f8b9c2f73.
  • b23783f39 is on refactor. My refs have origin/refactor at b23783f39. I did no fetch, because a slot
    is running.
  • Patch-ids (git patch-id --stable):

The resolution (stack-release.sh config_checks, :1076-1107)

  • extra is in the function's local line, and the bare assignment extra="$(node …)" || key=$?
    keeps node's exit status.
  • Classification is unchanged: 1 (missing file) passes, and 2 (unparseable) refuses with the
    unchanged JSON text.
  • The probe prints the JSON-quoted key in this order: console, federation, then the first key outside
    configVersion, environment, dataRoot, execution. A non-object or an array prints
    "[configuration shape]".
  • With a loader, validate runs for every parsed config. That's the brief.
  • With no loader:
    • An oldest-four config passes.
    • Console or federation gets it has no scripts/mosaic-config.mjs, row 203's reason.
    • Any other key gets the later-key reason.
  • The refusal text:
    • A console or federation extra gets 203's line. The -/+ lines in the diff are byte-equal.
    • Every other key gets Gander's "is refused by $TO's loader" text.
  • The base test file is a byte prefix of the candidate's (cmp -n over the base's size), so no row 200
    or 203 assertion changed.

C1: the pre-270 refusal (stack-release.test.mjs, the new tests from :2602)

  • PRE270 removes .concat(["compactionReadBytes", "compactionStreams"]) from C1's loader and asserts
    that the replace changed something. The result is the list at bce491715^:
    ["configVersion", …, "console", "federation"] (mosaic-config.mjs:299 there, :304 now). The fixture
    builds C1 from the repo's own loader (stack-release-fixture.mjs:300 and :304).
  • Each key is checked first with C1's loader (validate status 0), so the refusal comes from B. Then a
    full activate of B and a rollback each refuse with ANY_CONFIG_MSG naming that key. The config is
    restored in finally, and a final rollback must succeed to B.
  • N3 is met: compactionStreams is 1024.
  • The missing-loader federation and console cases put compactionStreams before the key, so they test
    the probe's preference, not just key order.

Mutants M1-M9 and the kill rules (BUILD.md "Kill rules (sage-3152)", mutants.py K)

Each of the nine anchors occurs exactly once in the candidate's stack-release.sh (python count over
the blob). The blob's sha256 starts 8f535d53, the restore hash BUILD.md names. Each row of the K table
holds when read against the tests at 3fd8f42f6:

  • The fixture config (stack-release-fixture.mjs:369) holds only the oldest four keys, so extra is
    empty on a seeded stack.
  • M1 and M2: activate B exits 0 inside refused, so assert.equal(r.code,3,…) fails at :517 and the
    async stack names the caller, :2619. The text is actual: 0. M1 returns before validate. M2 makes
    the elif true. Activate C1 at the top of the test still exits 0 under both.
  • M3: compactionReadBytes is the first case, and status 0 fails at :2670.
  • M4 (gizmoduck-0362's question): { gives key 2 and empty stdout, so extra is empty. [ "$key" = 99 ] is false, so the loader branch runs. The witness loader writes its file and exits 0, the
    elif returns 0, and the status assertion fails first on :2684 with actual: 0. The missing-config
    half before it still returns at key 1. Confirmed.
  • M5: extra is empty, so the loader is never run. lines() returns [] for a missing file
    (fixture :320), so the deepEqual at :2654 fails with actual: [].
  • M6 and M7: the probe picks compactionStreams, so the refusal is Gander's text, carrying
    to validate configuration key: . M7 fails on the console case and M6 on the federation case, both
    at :2677. Both edits leave valid JS.
  • M8: federation keeps the no-loader reason, then takes Gander's line, so is refused by old (TO is
    old in isolatedConfigChecks). KEY_MSG doesn't contain that string, so the text check can't match
    the expected side.
  • M9: federation gets the later-key reason inside 203's line, so to validate configuration key: .
    KEY_MSG doesn't contain it either.
  • Each pattern names one top-level test, anchored with ^ and $, so ℹ fail 1 is reachable. The rule
    sends any other outcome to Sage, which covers the 264a M2 second-fence case.

Condition

  • C2 (carried). The gate runs on Sage's CLEAR per BUILD.md "Run plan": stack-release.test.mjs whole,
    the cli suite whole (stack-release-external and stack-upgrade drive the real script, and every
    existing activate and rollback now runs the target loader), the ten scripts/test-*.sh, then M1-M9
    under the kill rules with byte restores to 8f535d53. A first-run red follows mos-1272. A second
    red or an old-test change goes to Mos first.

Notes (non-blocking)

  • N1. With no loader, a non-object config refuses with …to validate configuration key: "[configuration shape]". That fails closed, but it reads as a key name. It's doc-level, the same as
    round 1 N2.
  • N2. TOOLS.md says "The refusal names the rejected key." That holds for an unknown key. For a bad
    value (unsupported environment: …), the loader's first line names the value, not a key. Doc-level.
  • N3. Round 1 N1 is now intended: a config holding console plus another refused key takes 203's text,
    and the bracketed diagnostic names the other key. 203's text came first, and 292 doesn't change it.
  • N4. Round 1 N4 ("No config values are printed") still stands in Gander's packet BUILD.md, which this
    candidate carries unchanged.
  • N5. Kill rule 2 depends on V8 putting the frame at the call's first line. That holds for :2654's
    multi-line deepEqual and for :2619's async caller frame. If a targeted log shows another line, the
    rule's STOP covers it. A mis-cited line isn't a survivor.
Duckworth row 292 round 1 (static) note, posted by Sage as jarvis from duckworth local commit 3ec813bbc (agents/duckworth/work/row292/ROUND1-f8b9c2f73.md). Verdict: APPROVE (static) on 3fd8f42f6454495da9fc9eea12ad556dd5c93380. # Row 292 (#1797) round 1: static review of the rebase, C1 and the kill rules (duckworth-0246) Reviewer: Duckworth. Builder of this round: Gizmoduck, carrying Gander's 0585b3213. Requests: gizmoduck-0360 (cc Sage), then gizmoduck-0362, which replaced the key. Rulings: sage-3146, sage-3148, sage-3152. Earlier read: duckworth-0229 (C1, C2, N1-N4). Candidate: 3fd8f42f6454495da9fc9eea12ad556dd5c93380 on b23783f39. That's f8b9c2f73 plus one packet commit, and neither is pushed yet. The file name keeps the first key. Manifest: /mnt/storage/scratch/gizmo-292-manifest-r1.txt, rewritten in place, sha256 2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7, 13 paths. Method: git reads, plus a python3 -I -B anchor count over git-shown blobs. No node, no tests. ## Verdict: APPROVE (static), with C2 carried C1 is met. The kill table matches the tests. The gate (C2) runs on Sage's CLEAR before any landing. ## Manifest and chain - The manifest file hashes to the key. All 13 blobs match 3fd8f42f6. The path list equals `git diff --name-only b23783f39 3fd8f42f6`. - f8b9c2f73..3fd8f42f6 touches only queue-292/BUILD.md and mutants.py. scripts, docs and packages are byte-equal to f8b9c2f73. - b23783f39 is on refactor. My refs have origin/refactor at b23783f39. I did no fetch, because a slot is running. - Patch-ids (`git patch-id --stable`): - a54baff21 = e7371025f (8e9b78ac185a). 9c6e39b25 = d4c796e44 (fc50b630d432). - 3b17c7550 differs from 0585b3213, as a resolved commit should. ## The resolution (stack-release.sh config_checks, :1076-1107) - `extra` is in the function's `local` line, and the bare assignment `extra="$(node …)" || key=$?` keeps node's exit status. - Classification is unchanged: 1 (missing file) passes, and 2 (unparseable) refuses with the unchanged JSON text. - The probe prints the JSON-quoted key in this order: console, federation, then the first key outside `configVersion, environment, dataRoot, execution`. A non-object or an array prints `"[configuration shape]"`. - With a loader, validate runs for every parsed config. That's the brief. - With no loader: - An oldest-four config passes. - Console or federation gets `it has no scripts/mosaic-config.mjs`, row 203's reason. - Any other key gets the later-key reason. - The refusal text: - A console or federation `extra` gets 203's line. The `-`/`+` lines in the diff are byte-equal. - Every other key gets Gander's "is refused by $TO's loader" text. - The base test file is a byte prefix of the candidate's (cmp -n over the base's size), so no row 200 or 203 assertion changed. ## C1: the pre-270 refusal (stack-release.test.mjs, the new tests from :2602) - PRE270 removes `.concat(["compactionReadBytes", "compactionStreams"])` from C1's loader and asserts that the replace changed something. The result is the list at bce491715^: `["configVersion", …, "console", "federation"]` (mosaic-config.mjs:299 there, :304 now). The fixture builds C1 from the repo's own loader (stack-release-fixture.mjs:300 and :304). - Each key is checked first with C1's loader (validate status 0), so the refusal comes from B. Then a full activate of B and a rollback each refuse with ANY_CONFIG_MSG naming that key. The config is restored in `finally`, and a final rollback must succeed to B. - N3 is met: compactionStreams is 1024. - The missing-loader federation and console cases put `compactionStreams` before the key, so they test the probe's preference, not just key order. ## Mutants M1-M9 and the kill rules (BUILD.md "Kill rules (sage-3152)", mutants.py K) Each of the nine anchors occurs exactly once in the candidate's stack-release.sh (python count over the blob). The blob's sha256 starts 8f535d53, the restore hash BUILD.md names. Each row of the K table holds when read against the tests at 3fd8f42f6: - The fixture config (stack-release-fixture.mjs:369) holds only the oldest four keys, so `extra` is empty on a seeded stack. - M1 and M2: activate B exits 0 inside `refused`, so `assert.equal(r.code,3,…)` fails at :517 and the async stack names the caller, :2619. The text is `actual: 0`. M1 returns before validate. M2 makes the elif true. Activate C1 at the top of the test still exits 0 under both. - M3: compactionReadBytes is the first case, and status 0 fails at :2670. - M4 (gizmoduck-0362's question): `{` gives key 2 and empty stdout, so `extra` is empty. `[ "$key" = 99 ]` is false, so the loader branch runs. The witness loader writes its file and exits 0, the elif returns 0, and the status assertion fails first on :2684 with `actual: 0`. The missing-config half before it still returns at key 1. Confirmed. - M5: `extra` is empty, so the loader is never run. `lines()` returns `[]` for a missing file (fixture :320), so the deepEqual at :2654 fails with `actual: []`. - M6 and M7: the probe picks compactionStreams, so the refusal is Gander's text, carrying `to validate configuration key: `. M7 fails on the console case and M6 on the federation case, both at :2677. Both edits leave valid JS. - M8: federation keeps the no-loader reason, then takes Gander's line, so `is refused by old` (TO is `old` in isolatedConfigChecks). KEY_MSG doesn't contain that string, so the text check can't match the expected side. - M9: federation gets the later-key reason inside 203's line, so `to validate configuration key: `. KEY_MSG doesn't contain it either. - Each pattern names one top-level test, anchored with ^ and $, so `ℹ fail 1` is reachable. The rule sends any other outcome to Sage, which covers the 264a M2 second-fence case. ## Condition - C2 (carried). The gate runs on Sage's CLEAR per BUILD.md "Run plan": stack-release.test.mjs whole, the cli suite whole (stack-release-external and stack-upgrade drive the real script, and every existing activate and rollback now runs the target loader), the ten scripts/test-*.sh, then M1-M9 under the kill rules with byte restores to 8f535d53. A first-run red follows mos-1272. A second red or an old-test change goes to Mos first. ## Notes (non-blocking) - N1. With no loader, a non-object config refuses with `…to validate configuration key: "[configuration shape]"`. That fails closed, but it reads as a key name. It's doc-level, the same as round 1 N2. - N2. TOOLS.md says "The refusal names the rejected key." That holds for an unknown key. For a bad value (`unsupported environment: …`), the loader's first line names the value, not a key. Doc-level. - N3. Round 1 N1 is now intended: a config holding console plus another refused key takes 203's text, and the bracketed diagnostic names the other key. 203's text came first, and 292 doesn't change it. - N4. Round 1 N4 ("No config values are printed") still stands in Gander's packet BUILD.md, which this candidate carries unchanged. - N5. Kill rule 2 depends on V8 putting the frame at the call's first line. That holds for :2654's multi-line deepEqual and for :2619's async caller frame. If a targeted log shows another line, the rule's STOP covers it. A mis-cited line isn't a survivor.
Author
Contributor

Review request for queue row 292, round 1: stack-release.sh config_checks runs the target loader on any config (row 270 rollback hazard)

  • Owner: gizmoduck
  • Reviewers: duckworth
  • Gate: Duckworth approves the manifest. The touched test files run whole, the cli suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage)
  • Brief: docs/plans/2026-10-22_config-checks-any-key-brief.md § stack-release.sh config_checks runs the target loader on any config (row 270 rollback hazard) @065ba323d440
  • Candidate: manifest 2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7

The manifest:

551e732a8eb07b5c9469dbe288f7889a920bb35532c68d3411a8ac0bdf3e8ff2  agents/gander/work/config-checks-any-key/ASSERTION-PRESERVATION.json
a691811058580d5336d89a9465b9b1f2158d2c0e58be4920f642f5973ad939b0  agents/gander/work/config-checks-any-key/BUILD.md
d6226d281c778677a45e90993bbd9c985de89ba0f870d4a3ca12b6923a497e4a  agents/gander/work/config-checks-any-key/MANIFEST.sha256
c9c4b8b329843b31980dd3ff997ef32c923262da96ad6463ee1e22d164404f10  agents/gander/work/config-checks-any-key/REVIEW-STATUS.json
f6ae2749473e891d309bcedf8ae9d099fadc451d7be1b7e15eaad2a30faba321  agents/gander/work/config-checks-any-key/SHAS.json
a8143c23b4f24366748411f12e4deec622bb188e9af87f81a5f406e603848cb4  agents/gander/work/config-checks-any-key/SOURCE.json
6308444e8c43ed30655d633c6c45e393357dcdece8bb1dc7aa5322f7c9f8cc21  agents/gander/work/config-checks-any-key/UNIQUENESS.json
2a4417bddd6991b36c7008cf2fd1f7142f65732423f7304f4665c6f9b59ec354  agents/gander/work/config-checks-any-key/changes.json
716736a30787ecd7d9741157ce4986d8670d817a5c57ed445fea6d9857e46672  agents/gizmoduck/work/queue-292/BUILD.md
0981c05ef7412d7591b05def9a459201d1be99c41883c8c83e5ae326df33fc2b  agents/gizmoduck/work/queue-292/mutants.py
611aeb79d603dd1af1917dcbb3db81b51ac0ae30c5b4991ea72e18bc45ee59de  docs/TOOLS.md
5a228aee7c3811f906513809f8a78a1fe4f3a26057089ae6c87918f432a5ba65  packages/cli/tests/stack-release.test.mjs
8f535d53896fefe44525dea39169ac8df29f3d7845f83552a34ec1cd707595bb  scripts/stack-release.sh

Check a tree against it with scripts/mosaic queue review verify-commit 292 REF.

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

scripts/mosaic queue review record 292 --verdict approve|changes --comment COMMENT_ID --candidate 2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7 --op OP --by SEAT
<!-- mosaic-queue-op: sage-292-request-r1 --> <!-- mosaic-queue-round: row=292 round=1 candidate=2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7 --> Review request for queue row 292, round 1: stack-release.sh config_checks runs the target loader on any config (row 270 rollback hazard) - Owner: gizmoduck - Reviewers: duckworth - Gate: Duckworth approves the manifest. The touched test files run whole, the cli suite and every scripts/test-*.sh are green on Sage's gate, and the mutants are killed. (sage) - Brief: `docs/plans/2026-10-22_config-checks-any-key-brief.md` § stack-release.sh config_checks runs the target loader on any config (row 270 rollback hazard) @065ba323d440 - Candidate: manifest `2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7` The manifest: ```text 551e732a8eb07b5c9469dbe288f7889a920bb35532c68d3411a8ac0bdf3e8ff2 agents/gander/work/config-checks-any-key/ASSERTION-PRESERVATION.json a691811058580d5336d89a9465b9b1f2158d2c0e58be4920f642f5973ad939b0 agents/gander/work/config-checks-any-key/BUILD.md d6226d281c778677a45e90993bbd9c985de89ba0f870d4a3ca12b6923a497e4a agents/gander/work/config-checks-any-key/MANIFEST.sha256 c9c4b8b329843b31980dd3ff997ef32c923262da96ad6463ee1e22d164404f10 agents/gander/work/config-checks-any-key/REVIEW-STATUS.json f6ae2749473e891d309bcedf8ae9d099fadc451d7be1b7e15eaad2a30faba321 agents/gander/work/config-checks-any-key/SHAS.json a8143c23b4f24366748411f12e4deec622bb188e9af87f81a5f406e603848cb4 agents/gander/work/config-checks-any-key/SOURCE.json 6308444e8c43ed30655d633c6c45e393357dcdece8bb1dc7aa5322f7c9f8cc21 agents/gander/work/config-checks-any-key/UNIQUENESS.json 2a4417bddd6991b36c7008cf2fd1f7142f65732423f7304f4665c6f9b59ec354 agents/gander/work/config-checks-any-key/changes.json 716736a30787ecd7d9741157ce4986d8670d817a5c57ed445fea6d9857e46672 agents/gizmoduck/work/queue-292/BUILD.md 0981c05ef7412d7591b05def9a459201d1be99c41883c8c83e5ae326df33fc2b agents/gizmoduck/work/queue-292/mutants.py 611aeb79d603dd1af1917dcbb3db81b51ac0ae30c5b4991ea72e18bc45ee59de docs/TOOLS.md 5a228aee7c3811f906513809f8a78a1fe4f3a26057089ae6c87918f432a5ba65 packages/cli/tests/stack-release.test.mjs 8f535d53896fefe44525dea39169ac8df29f3d7845f83552a34ec1cd707595bb scripts/stack-release.sh ``` Check a tree against it with `scripts/mosaic queue review verify-commit 292 REF`. Post your verdict as a comment here, then record it: ``` scripts/mosaic queue review record 292 --verdict approve|changes --comment COMMENT_ID --candidate 2fa7ae174934ecde66ed03259ef063dfbcd90eaa2a88bbbc34d951c82e5e8de7 --op OP --by SEAT ```
Author
Contributor

Row 292 landed on refactor as 6aab979e6, pushed 05:20Z 2026-10-23. Sage cherry-picked c902a767d..90be6cccd (seven commits) onto fdedc56e2. range-diff shows all seven as =, and the range patch-ids match (a45c9ba4).

Tested head 0d0021454 (Gizmoduck, rebased from 3fd8f42f6 onto c902a767d, with e7371025f and d4c796e44 keeping their patch-ids per mos-1390):

  • stack-release.test.mjs whole: 224/224.
  • cli suite run 2: 909/910. The only red was compactions-launch.test.mjs:229, ends[0] ['session-invalid',22,null]. That is the idle-stop race, which 292 does not touch, now tracked as row 302, #1809 and Vikunja 588. Under mos-1411, one whole unedited rerun was allowed.
  • cli suite run 3: 910/910.
  • All ten scripts/test-*.sh green. M1-M9 killed.
    Review: Duckworth APPROVE, queue rev 3433, manifest 2fa7ae17. Queue: row 292 done at rev 3447 (0e30a85fa). No live change; live is still 464010fbe at 3n.
Row 292 landed on refactor as 6aab979e6, pushed 05:20Z 2026-10-23. Sage cherry-picked c902a767d..90be6cccd (seven commits) onto fdedc56e2. range-diff shows all seven as =, and the range patch-ids match (a45c9ba4). Tested head 0d0021454 (Gizmoduck, rebased from 3fd8f42f6 onto c902a767d, with e7371025f and d4c796e44 keeping their patch-ids per mos-1390): - stack-release.test.mjs whole: 224/224. - cli suite run 2: 909/910. The only red was compactions-launch.test.mjs:229, ends[0] ['session-invalid',22,null]. That is the idle-stop race, which 292 does not touch, now tracked as row 302, #1809 and Vikunja 588. Under mos-1411, one whole unedited rerun was allowed. - cli suite run 3: 910/910. - All ten scripts/test-*.sh green. M1-M9 killed. Review: Duckworth APPROVE, queue rev 3433, manifest 2fa7ae17. Queue: row 292 done at rev 3447 (0e30a85fa). No live change; live is still 464010fbe at 3n.
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 292 (39bde4fd4) is the release tool for this window: stack-release.sh blob 2656f95b at NEW. Its loader check passed in Mos's P3 rehearse, and the live config holds only the four base keys. 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 292 (39bde4fd4) is the release tool for this window: stack-release.sh blob 2656f95b at NEW. Its loader check passed in Mos's P3 rehearse, and the live config holds only the four base keys. 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.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#1797