Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
519 commits
Select commit Hold shift + click to select a range
0288d0f
docs(state): record phase 12 context session
LayZeeDK Jul 30, 2026
7390983
docs(12): research Windows CI reuse (O4) and the consumer recipe
LayZeeDK Jul 30, 2026
f0c9cd5
docs(12): fold research corrections into phase context
LayZeeDK Jul 30, 2026
191e3c1
docs(phase-12): add validation strategy
LayZeeDK Jul 30, 2026
16a498b
docs(12): map phase-12 files to their in-repo analogs
LayZeeDK Jul 30, 2026
5733e59
docs(12): create phase plan -- 6 plans in 5 waves
LayZeeDK Jul 30, 2026
5ba462e
docs(12): close the two plan-check warnings
LayZeeDK Jul 30, 2026
cffb064
docs(12): normalize em dashes to ASCII in the research record
LayZeeDK Jul 30, 2026
0251bd3
docs(12): close the decision-coverage gate and record planning complete
LayZeeDK Jul 30, 2026
13c5775
test(12-01): add RED shape guards for the three Windows CI legs
LayZeeDK Jul 30, 2026
91dbdc1
test(12-01): add the RED detector-workflow guard and register it in n…
LayZeeDK Jul 30, 2026
56dd7e1
docs(12-01): complete the Windows-reuse RED plan
LayZeeDK Jul 30, 2026
f5dd429
feat(12-02): add the three windows-11-arm reuse legs and correct what…
LayZeeDK Jul 30, 2026
c46b844
docs(12-02): re-price TRUST-11's Q1 residual for the second producer
LayZeeDK Jul 30, 2026
270c85b
docs(12-02): complete the Windows-reuse GREEN plan
LayZeeDK Jul 30, 2026
83333a3
feat(12-03): add the scheduled windows-11-arm regression detector
LayZeeDK Jul 30, 2026
19bd2a8
docs(12-03): record the detector's two Windows arm64 measurements
LayZeeDK Jul 30, 2026
3d9f895
feat(12-04): adopt the stderr-immune discriminator in nx.json
LayZeeDK Jul 30, 2026
d8e18b9
refactor(12-04): spell one discriminator string at every site in the …
LayZeeDK Jul 30, 2026
f85b6c1
docs(12-04): supersede CORR-04's byte-identical invariant in place
LayZeeDK Jul 30, 2026
72a5dbf
docs(12-04): complete the single-sourced stderr-immune discriminator …
LayZeeDK Jul 30, 2026
8abe25c
test(12-05): add the DOCS-07 cross-os drift guard and its registratio…
LayZeeDK Jul 30, 2026
6c0c2d1
feat(12-05): ship docs/cross-os.md, register it, and link it (DOCS-07)
LayZeeDK Jul 30, 2026
e8faa6b
test(12-05): pin the discriminator at BOTH rendered sites, not a >= 1…
LayZeeDK Jul 30, 2026
03b0143
docs(12-05): complete the DOCS-07 consumer cross-os recipe plan
LayZeeDK Jul 30, 2026
f5d03b0
docs(12-06): discharge 11-EVIDENCE.md's RESERVED O4 section with the …
LayZeeDK Jul 30, 2026
29484b3
docs(12-06): record the O4 observation attempt as PENDING, with the p…
LayZeeDK Jul 30, 2026
febc04b
docs(12-06): complete the O4 pre-registration plan
LayZeeDK Jul 30, 2026
2edb4b1
test(12): persist human verification items as UAT
LayZeeDK Jul 30, 2026
5e0a741
docs(12): add code review report
LayZeeDK Jul 30, 2026
2f9f567
fix(12): CR-01 make section 1's snippet demonstrate section 1
LayZeeDK Jul 30, 2026
f46a005
fix(12): WR-01 name the consequence of an incomplete replacement list
LayZeeDK Jul 30, 2026
8758f0c
fix(12): WR-02 add the line-ending prerequisite section 4 steered awa…
LayZeeDK Jul 30, 2026
38d8483
fix(12): WR-03 split the two-axis reason and restate the verification…
LayZeeDK Jul 30, 2026
1c33db9
fix(12): WR-04 scope the cache-directory claim instead of asserting c…
LayZeeDK Jul 30, 2026
98c8613
fix(12): WR-05 pin the detector's GATING grep and its single invocation
LayZeeDK Jul 30, 2026
15e898d
fix(12): WR-06 guard what actually makes a Windows leg a consumer
LayZeeDK Jul 30, 2026
4797311
fix(12): WR-07 state the count the guard actually reads, and name the…
LayZeeDK Jul 30, 2026
8ae902a
fix(12): WR-08 replace compare.ts's stale unguardable-anchor argument
LayZeeDK Jul 30, 2026
19d4fa5
fix(12): WR-09 narrow the XOS-07 guard to the invariant its list prov…
LayZeeDK Jul 30, 2026
7868d97
fix(12): IN-01 drop the stale job count from the detector's header
LayZeeDK Jul 30, 2026
25281c9
fix(12): IN-02 state the real docs/ ordering convention, which is adj…
LayZeeDK Jul 30, 2026
a523e9d
fix(12): IN-03 say PINS, not renders -- there is no generator
LayZeeDK Jul 30, 2026
1e6f8a8
fix(12): IN-04 guard the checklist heading before slicing on it
LayZeeDK Jul 30, 2026
75eb093
fix(12): IN-05 assert an actual markdown link, not a bare mention
LayZeeDK Jul 30, 2026
84eac4d
fix(12): IN-06 restate ROBUST-04's sidecar split as a rule, with meas…
LayZeeDK Jul 30, 2026
e757d4c
docs(12): add code review fix report
LayZeeDK Jul 30, 2026
04e099b
test(12): complete UAT - 4 passed, 0 issues
LayZeeDK Jul 31, 2026
c16b8e7
chore(12): canonicalize verification -- human UAT passed 4/4
LayZeeDK Jul 31, 2026
0063676
docs(12): add security threat verification -- 21/21 closed
LayZeeDK Jul 31, 2026
e73f49c
test(12): guard ::add-mask:: ordering in ci.yml (T-12-05)
LayZeeDK Jul 31, 2026
b2a118e
docs(12): resolve validation strategy -- nyquist_compliant true
LayZeeDK Jul 31, 2026
77e7bde
docs(12): extract learnings -- 8 decisions, 9 lessons, 8 patterns, 8 …
LayZeeDK Jul 31, 2026
43502c9
chore(12): close phase -- traceability, roadmap and state
LayZeeDK Jul 31, 2026
2e98d91
docs(12): ship milestone v0.0.2 -- PR #12
LayZeeDK Jul 31, 2026
76df25f
fix(12): cite nx.json test-input registration by key, not line
LayZeeDK Jul 31, 2026
0c127bf
fix(12): repoint two stale cross-file citations in compare.ts
LayZeeDK Jul 31, 2026
7a48e0d
fix(12): scope the producer-attribution retraction guard to one sentence
LayZeeDK Jul 31, 2026
d95ba14
docs(12): document the workspace-root working-directory prerequisite
LayZeeDK Jul 31, 2026
73e1a93
docs(12): document the Release asset-name rotation as an upgrade cost
LayZeeDK Jul 31, 2026
85fb504
docs(12): document the on-disk archive location and its constraints
LayZeeDK Jul 31, 2026
dc85191
test(12): assert the single-project premise under typecheck.outputs
LayZeeDK Jul 31, 2026
ef09a49
fix(12): name publish in the unknown-operation message
LayZeeDK Jul 31, 2026
6d26bec
test(12): pin the sidecar GITHUB_TOKEN on the three Windows legs
LayZeeDK Aug 1, 2026
86d1fc4
test(12): pin the hash-parity success anchor, and retract the claim i…
LayZeeDK Aug 1, 2026
5060492
fix(12): walk the shard window in read-back's publisher-label check
LayZeeDK Aug 1, 2026
1c6faef
fix(12): re-create the archive directory on put(), not only at constr…
LayZeeDK Aug 1, 2026
4fe2c14
docs(12): retract publish-mirror's surviving same-OS restore claims
LayZeeDK Aug 1, 2026
8ef82c3
docs(12): correct the wrong-cwd failure mode and the scope of the sta…
LayZeeDK Aug 1, 2026
d4f26d3
docs(12): retract the hash-neutrality claims the nx.json registration…
LayZeeDK Aug 1, 2026
337422e
test(12): pin the two workspace-root instrument inputs in nx.json
LayZeeDK Aug 1, 2026
7ca3356
refactor(12): bind the invariant and divergent targets to EXPECTED_TA…
LayZeeDK Aug 1, 2026
497ae45
refactor(12): return the validated records in the parity success verdict
LayZeeDK Aug 1, 2026
8feb6f9
ci(12): cap the three push-only background jobs with timeout-minutes
LayZeeDK Aug 1, 2026
11b0d4e
test(12): name the CORR-05 ledger assertion for what it actually asserts
LayZeeDK Aug 1, 2026
904a836
docs(12): record the fork-PR case the integration positive control ne…
LayZeeDK Aug 1, 2026
c4bf7cf
ci(12): give the three Windows legs a runtime cache observation
LayZeeDK Aug 1, 2026
fd75d83
docs(12): resolve the fork-PR contradiction -- the build comment was …
LayZeeDK Aug 1, 2026
db7f9f8
fix(12): pin GITHUB_WORKSPACE in the workspace-root fixture, not just…
LayZeeDK Aug 1, 2026
891d922
fix(12): make --diff see an empty container, the shape Phase 8 root-c…
LayZeeDK Aug 1, 2026
974fc36
fix(12): route assert-parity's throw path through the collapse it doc…
LayZeeDK Aug 1, 2026
2339f10
fix(12): compare the TRIMMED discriminator, which is what Nx hashes
LayZeeDK Aug 1, 2026
7e777b3
docs(12): correct the README's fork-PR exemption from the startup check
LayZeeDK Aug 1, 2026
99e92eb
chore(12): ignore the six workspace-root logs the CI jobs also tee
LayZeeDK Aug 1, 2026
61f8123
fix(12): bound read-back's asset-page walk, whose only exit was a sho…
LayZeeDK Aug 1, 2026
af69266
fix(12): ban the ambient platform read in the archive-path scanner too
LayZeeDK Aug 1, 2026
fb6d25e
ci(12): cap the last six uncapped jobs and supersede stale PR runs
LayZeeDK Aug 1, 2026
3905550
docs(12): prefix the cross-os recipe's nx with the package manager
LayZeeDK Aug 1, 2026
9f76a80
docs(12): retire the mid-job `nx reset` 500, which this branch alread…
LayZeeDK Aug 1, 2026
9e949e4
docs(12): correct the claim that `.cjs` is the only live `no-undef` s…
LayZeeDK Aug 1, 2026
9e79009
fix(12): add lint to the detector, the one invariant it could not see
LayZeeDK Aug 1, 2026
f3251d4
test(12): make the EXPECTED_TARGETS lockstep pin actually read the in…
LayZeeDK Aug 1, 2026
fee5fbe
ci(12): run the cross-OS dogfood proof on same-repo pull requests
LayZeeDK Aug 1, 2026
70fd31c
ci(12): close the review findings on the CR-18 dogfood widening
LayZeeDK Aug 1, 2026
d0ff98d
docs(quick-260801-vyy): Resolve CR-18
LayZeeDK Aug 1, 2026
a6ceb24
docs(12): state the ungating rationale once instead of three times over
LayZeeDK Aug 1, 2026
8a588d9
docs(roadmap): add Phase 13 -- read-only Actions-cache backend
LayZeeDK Aug 1, 2026
82b637d
docs(13): capture phase context
LayZeeDK Aug 1, 2026
eec515b
docs(state): record phase 13 context session
LayZeeDK Aug 1, 2026
1ac90f3
docs(13): lock role-derived read-only selection, record the ratchet
LayZeeDK Aug 1, 2026
4d693d1
docs(13): research the read-only Actions-cache backend shape and role…
LayZeeDK Aug 1, 2026
7844cfe
docs(phase-13): add validation strategy
LayZeeDK Aug 1, 2026
3a923c0
docs(13): map phase patterns to existing analogs
LayZeeDK Aug 1, 2026
8bcbc90
docs(13): create the phase plan -- read-only Actions-cache backend
LayZeeDK Aug 1, 2026
9f54b50
docs(13): close the plan-checker's three text-precision findings
LayZeeDK Aug 2, 2026
4b71942
docs(13): repair decision-bullet format so the coverage gate can parse
LayZeeDK Aug 2, 2026
34577b8
docs(13-01): register Phase 13's seven requirements in REQUIREMENTS.md
LayZeeDK Aug 2, 2026
4b22cee
docs(13-01): reconcile ROADMAP Phase 13 traceability and register the…
LayZeeDK Aug 2, 2026
7b45c38
docs(13-01): record the CACHE_READ_ONLY ratchet as a residual note, n…
LayZeeDK Aug 2, 2026
decf56d
docs(13-01): complete register-Phase-13-requirements plan
LayZeeDK Aug 2, 2026
b4362d8
chore(13-01): gitignore the GSD research cache, record 13-01 self-check
LayZeeDK Aug 2, 2026
c35ad00
docs(13-01): log the redundant phase-dir .gitkeep as a deferred item
LayZeeDK Aug 2, 2026
24c5d9f
test(13-02): add failing specs for the read-only Actions-cache factor…
LayZeeDK Aug 2, 2026
1172887
feat(13-02): compose the writable Actions backend from a read-only ba…
LayZeeDK Aug 2, 2026
2fdfd56
test(13-02): record the measured VER-09 mutation instead of arguing i…
LayZeeDK Aug 2, 2026
fdba09c
docs(13-02): complete the read-only Actions-cache backend plan
LayZeeDK Aug 2, 2026
658301e
docs(13-02): record 13-02 completion in STATE, ROADMAP and REQUIREMENTS
LayZeeDK Aug 2, 2026
73f002a
test(13-03): add failing narrowing-only specs for the read-only knob …
LayZeeDK Aug 2, 2026
cbf60e6
feat(13-03): narrow to a read-only Actions backend via a last-branch …
LayZeeDK Aug 2, 2026
3a83e01
docs(13-03): complete the last-branch narrowing CACHE_READ_ONLY knob …
LayZeeDK Aug 2, 2026
9906de8
feat(13-04): enumerate CACHE_READ_ONLY in the consumer contract (DOCS…
LayZeeDK Aug 2, 2026
d2f7dd9
docs(13-04): document CACHE_READ_ONLY and the fifth backend-selection…
LayZeeDK Aug 2, 2026
5f7f2cd
test(13-04): pin the fifth backend-selection outcome and its document…
LayZeeDK Aug 2, 2026
79aea97
docs(13-04): complete the consumer-contract and docs plan for CACHE_R…
LayZeeDK Aug 2, 2026
54943a5
test(13-05): pin the read-only Windows legs and their gated counts (X…
LayZeeDK Aug 2, 2026
c818e7a
ci(13-05): gate the three Windows legs on a read-only cross-OS HIT (X…
LayZeeDK Aug 2, 2026
d96fa70
test(13-05): record the mutation proofs for the new Windows-leg claus…
LayZeeDK Aug 2, 2026
6a6370b
docs(13-05): complete the read-only Windows leg gate plan
LayZeeDK Aug 2, 2026
631a2e7
docs(13-06): pre-register the expected per-leg counts for the Phase 1…
LayZeeDK Aug 2, 2026
440b824
docs(13-06): record the Phase 13 proving run; A1 answered, not closed…
LayZeeDK Aug 2, 2026
a78365f
docs(13-06): complete the pre-registered-counts and proving-run plan
LayZeeDK Aug 2, 2026
4d18acb
docs(13): record phase verification -- 7/7 requirements, fail path hu…
LayZeeDK Aug 2, 2026
ee67055
docs(13): record the gate fail path observed live on run 30745558383 …
LayZeeDK Aug 2, 2026
e6b3268
wip: phase 13 paused at 6/6 -- audit tail deferred to a fresh session
LayZeeDK Aug 2, 2026
7968f21
test(13): assert the two record-only survivors XOS-09 left ungated (T…
LayZeeDK Aug 2, 2026
eb57440
docs(13): add the phase security audit -- 27/27 threats closed
LayZeeDK Aug 2, 2026
cbe69ce
test(13): pin the memory-degrade branch ahead of the knob (TRUST-14, …
LayZeeDK Aug 2, 2026
80f3066
docs(13): complete the phase validation audit -- nyquist_compliant
LayZeeDK Aug 2, 2026
934bd98
docs(13): retract a false coverage claim about T-13-03-E1 in the secu…
LayZeeDK Aug 2, 2026
a851ae2
docs(13): extract phase learnings -- 46 items across four categories
LayZeeDK Aug 2, 2026
ce19770
docs(13): close the phase -- audit tail complete, records reconciled
LayZeeDK Aug 2, 2026
095291c
docs(260802-toz): pre-register the Case B and A1 observations
LayZeeDK Aug 2, 2026
a2354e7
docs(260802-toz): tighten the observation method before any run exists
LayZeeDK Aug 2, 2026
e5fcc84
docs(260802-toz): record the Case B and A1 observations
LayZeeDK Aug 2, 2026
bb5e1f7
docs(260802-toz): add the quick-task plan
LayZeeDK Aug 2, 2026
b293432
docs(260802-toz): close the quick task -- Case B proven, A1 answered,…
LayZeeDK Aug 2, 2026
3a46db9
wip: quick 260803-0rr paused at 2/3 -- A1 ANSWERED, propagation deferred
LayZeeDK Aug 2, 2026
da462b5
docs(260803-0rr): close assumption A1 and propagate both live-CI clos…
LayZeeDK Aug 2, 2026
e96670e
fix(publish): only an explicit already_exists 422 is a benign skip
LayZeeDK Aug 2, 2026
1162a01
docs(debug): correct the publish-verify diagnosis and record the defe…
LayZeeDK Aug 3, 2026
ed3b72d
docs(debug): record the main window -- fix proven, second defect found
LayZeeDK Aug 3, 2026
3faab10
fix(publish): fail closed on a createRelease 422 that is not already_…
LayZeeDK Aug 3, 2026
40e4d21
fix(ci): make o3-witness read the base-branch cache scope (Case B)
LayZeeDK Aug 3, 2026
ccc18c9
fix(docs): name all six package exports in versioning.md, and guard them
LayZeeDK Aug 3, 2026
4ac20dc
docs(quick-260803-3g1): resolve remaining blockers toward a verified …
LayZeeDK Aug 3, 2026
8dc0131
fix(observability): hoist the 422 body reader to lib/ and decouple it…
LayZeeDK Aug 3, 2026
f44dd3b
test(publish): cover the data.message fallback and the whole fail-clo…
LayZeeDK Aug 3, 2026
1d62298
fix(ci): a timeless cache row must not win sort_by and report a false…
LayZeeDK Aug 3, 2026
680fa7c
fix(ci): guard that the caches response IS an array, like its jobs-AP…
LayZeeDK Aug 3, 2026
9e52ed1
docs(ci): retract the false claim that the caches query is ref-filtered
LayZeeDK Aug 3, 2026
a7a603f
docs(test): correct the stale clause counts and sweep the whole file …
LayZeeDK Aug 3, 2026
442f9de
style(test): prettier quote style on the o3-witness clause reasons
LayZeeDK Aug 3, 2026
6992553
docs(260803-3g1): code review, applied fixes, and Phase 13 re-verific…
LayZeeDK Aug 3, 2026
1e5bc10
fix(publish): skip a burned month-shard tag instead of failing the run
LayZeeDK Aug 3, 2026
a1d6139
refactor(retention): rename the month-shard tag prefix to nx-cache-
LayZeeDK Aug 3, 2026
70064f5
style(publish): prettier formatting on the field-scoped fault reader
LayZeeDK Aug 3, 2026
45f5bb2
docs(quick-260803-fcd): close the publish-verify blocker, proven live
LayZeeDK Aug 3, 2026
41f65e1
docs(quick-260803-fcd): verification passed 8/8, and unstale the STAT…
LayZeeDK Aug 3, 2026
e6c34ed
docs(quick-260803-mew): pre-dispatch plan, context and research
LayZeeDK Aug 3, 2026
c8975f9
docs(260803-mew): record the main window that dispatched both detecto…
LayZeeDK Aug 3, 2026
10d629f
docs(260803-mew): observe both detector directions at step granularity
LayZeeDK Aug 3, 2026
828b823
docs(260803-mew): forward-point the six claims closed on the supersed…
LayZeeDK Aug 3, 2026
98b705b
docs(quick-260803-mew): observe both detector directions on real runners
LayZeeDK Aug 3, 2026
c84ae43
fix(ci): fail the three cross-OS gates closed on an uncountable label…
LayZeeDK Aug 3, 2026
3178cc6
test(ci): pin the gate's exit, not only its comparison (XOS-09)
LayZeeDK Aug 3, 2026
2327a3e
test(ci): pin CACHE_READ_ONLY to the three consumers, so no producer …
LayZeeDK Aug 3, 2026
27eea90
test(ci): guard the one-line-wide ordering the read-only knob depends…
LayZeeDK Aug 3, 2026
64dfe8c
fix(ci): keep a curl transport fault from killing the o3-witness verd…
LayZeeDK Aug 3, 2026
e5d3cd3
fix(ci): admit the default-branch scope to the o3-witness ref allowli…
LayZeeDK Aug 3, 2026
6803942
fix(ci): reject a non-object cache row before indexing it (D-17)
LayZeeDK Aug 3, 2026
061bd83
fix(publish): treat an empty errors[] string as absent, so the fallba…
LayZeeDK Aug 3, 2026
b2c1250
fix(publish): scan every errors[] entry for already_exists, not just …
LayZeeDK Aug 3, 2026
6833706
fix(backend): remove the restored archive on the miss and fault paths…
LayZeeDK Aug 3, 2026
fd29858
test(backend): guard the VER-04 message prefix the source claimed was…
LayZeeDK Aug 3, 2026
bb6ea2b
test(select-backend): make the two guards the source claimed real (TR…
LayZeeDK Aug 3, 2026
f6c91fd
docs(backend): retract the claim that no second cache-version computa…
LayZeeDK Aug 3, 2026
e13dcd3
refactor(publish): construct the read-only Actions backend in the mir…
LayZeeDK Aug 3, 2026
0c76669
docs: correct the read-only PUT 403 wording and the CACHE_READ_ONLY o…
LayZeeDK Aug 3, 2026
16b44f3
test(ci): forbid workflow expressions inside every run: body
LayZeeDK Aug 3, 2026
8842b88
test(ci): escape the tee pipe so the six leg needles stop alternating…
LayZeeDK Aug 4, 2026
6abf294
test(ci): see the dash-prefixed run: one-liners the expression guard …
LayZeeDK Aug 4, 2026
1cefdd7
test(ci): derive the runner-mention count instead of restating one th…
LayZeeDK Aug 4, 2026
862093f
fix(ci): name the third cause in the three floor-of-1 gate annotation…
LayZeeDK Aug 4, 2026
501bcb1
feat(select-backend): say so in the log when CACHE_READ_ONLY narrows …
LayZeeDK Aug 4, 2026
f9c16e3
refactor(fault-reason): hold the errors[] path once, as the module's …
LayZeeDK Aug 4, 2026
0bfc29b
docs: let advanced.md own the backend-outcome count, and stop restati…
LayZeeDK Aug 4, 2026
4b51649
docs(retention): give shardTag its docstring back
LayZeeDK Aug 4, 2026
2df3af5
test(backend): walk the source tree once, and stop citing line number…
LayZeeDK Aug 4, 2026
3c67513
docs(audit): audit milestone v0.0.2, and say which source the stale c…
LayZeeDK Aug 4, 2026
d4dc093
docs(260804-h3b): retire the o3-witness Case-B note that its own fix …
LayZeeDK Aug 4, 2026
dd780f8
docs(260804-h3b): observe the delta allowance live, on the run that c…
LayZeeDK Aug 4, 2026
76a9e9b
docs(260804-h3b): catch the $defaultref clause being the one that sat…
LayZeeDK Aug 4, 2026
d1600f6
docs(quick-260804-h3b): record the task that found its own subject al…
LayZeeDK Aug 4, 2026
723ddc6
wip(260804-lc3): pause before execution, with the plan recorded as no…
LayZeeDK Aug 4, 2026
a372b96
wip(260804-lc3): correct the handoff my own pause made stale
LayZeeDK Aug 4, 2026
abb722d
docs(260804-lc3): correct the positive control's two false premises, …
LayZeeDK Aug 4, 2026
c84ebd5
docs(quick-260804-lc3): record the correction, and the gate that made…
LayZeeDK Aug 4, 2026
ff21356
wip(260808-lpt): pause mid-revision, with the plan's own residue named
LayZeeDK Aug 8, 2026
ccd8248
docs(260808-lpt): finish revision 3 and close plan-check iteration 3
LayZeeDK Aug 8, 2026
c3fe74d
docs(260808-lpt): close the nine Phase 8 checkboxes and twelve stale …
LayZeeDK Aug 8, 2026
d5841c2
docs(260808-lpt): fix the ROADMAP Phase 8 ID shift and reconcile ever…
LayZeeDK Aug 8, 2026
fed70f4
docs(260808-lpt): reconcile 12-VERIFICATION, resolve the pjz status, …
LayZeeDK Aug 8, 2026
142ea72
docs(260808-lpt): correct the inherited five-weeks figure the verifie…
LayZeeDK Aug 8, 2026
7f2ba26
docs(260808-lpt): resolve the pjz status and record the task in STATE.md
LayZeeDK Aug 8, 2026
f9be637
docs(260808-lpt): carry the handoff forward with item 1 closed
LayZeeDK Aug 8, 2026
71773ee
docs(260808-u2q): plan the restore-push fix, through two plan-check r…
LayZeeDK Aug 8, 2026
92998de
fix(260808-u2q): gate publish on !github.event.forced, so a window re…
LayZeeDK Aug 8, 2026
0cd43b4
docs(260808-u2q): keep the next battery run's output, and put the win…
LayZeeDK Aug 8, 2026
43f3612
fix(260808-u2q): correct the incident count and make the capture rule…
LayZeeDK Aug 8, 2026
5d60ea4
docs(quick-260808-u2q): record the restore-push fix and its audit trail
LayZeeDK Aug 8, 2026
bf35b3c
docs(260808-u2q): mark item 2 complete and point item 3 at its two pr…
LayZeeDK Aug 8, 2026
d70c667
docs(260808-u2q): correct the gate's effective date, and rebuild item…
LayZeeDK Aug 8, 2026
c4b532f
docs(260808-wxg): plan the main window, with its recovery procedure o…
LayZeeDK Aug 8, 2026
7b4b5b3
fix(260808-wxg): correct an impossible observation and a claim my own…
LayZeeDK Aug 8, 2026
b276bdc
wip(260808-wxg): hand the main window to a fresh session, fully prepa…
LayZeeDK Aug 8, 2026
6708929
feat(260808-wxg): close all four live-CI observations, and find the n…
LayZeeDK Aug 8, 2026
fbfd88a
chore(260808-wxg): consume the handoff and record what the window taught
LayZeeDK Aug 8, 2026
46f0b8a
feat(260809-2s6): give the dogfood seed family its own marker word
LayZeeDK Aug 9, 2026
3cdf87c
feat(260809-2s6): skip other runs' seeds and pre-restore shard members
LayZeeDK Aug 9, 2026
e78a842
feat(260809-2s6): split the conflated miss metric and guard the parti…
LayZeeDK Aug 9, 2026
9b1b136
fix(260809-2s6): correct the comments that assert constraints the cod…
LayZeeDK Aug 9, 2026
3a82c01
test(260809-2s6): pin the all-decimal Nx hash shape the seed filter r…
LayZeeDK Aug 9, 2026
e3bf98b
docs(quick-260809-2s6): record the seed-enumeration fix and its audit…
LayZeeDK Aug 9, 2026
deffc67
test(260809-2s6): rebuild the partial-miss boundary fixtures for a bound
LayZeeDK Aug 9, 2026
aee017c
feat(260809-2s6): gate the partial-miss branch on a Wilson lower bound
LayZeeDK Aug 9, 2026
e40cfcf
docs(260809-2s6): replace the partial-miss branch's estimates with a …
LayZeeDK Aug 9, 2026
54677af
fix(260809-2s6): stop the partial-miss warning leaking this repo's ow…
LayZeeDK Aug 9, 2026
ff25c5a
docs(quick-260809-2s6): record the measurement that settled the thres…
LayZeeDK Aug 9, 2026
909a88a
docs(quick-260809-hcr): say which warning a version bump actually pro…
LayZeeDK Aug 9, 2026
9251809
docs(quick-260809-hcr): record the correction, and file the requireme…
LayZeeDK Aug 9, 2026
23d9207
wip: paused before the one remaining edit, with the rejected correcti…
LayZeeDK Aug 9, 2026
06ccf16
docs(quick-260809-iqe): correct the ROBUST-04 capture against re-deri…
LayZeeDK Aug 9, 2026
aceb526
docs(quick-260809-iqe): pin the byte-identity measurement to the tree…
LayZeeDK Aug 9, 2026
ded3ddf
docs(quick-260809-iqe): amend the ROBUST-04 capture with the four rev…
LayZeeDK Aug 9, 2026
51dadac
test(260809-og2): pin both read-miss warnings against a closed cause …
LayZeeDK Aug 9, 2026
5a5ed82
fix(260809-og2): stop both read-miss warnings claiming a complete cau…
LayZeeDK Aug 9, 2026
e94c649
docs(260809-og2): stop the prose counting the causes the warnings name
LayZeeDK Aug 9, 2026
845b9cc
fix(260809-og2): guard the retraction and correct three comments that…
LayZeeDK Aug 9, 2026
538e167
docs(quick-260809-og2): mark the misattribution fixed in the capture …
LayZeeDK Aug 9, 2026
c7793c4
docs(quick-260809-og2): address the rollover misattribution in the pu…
LayZeeDK Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .fallowrc.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@
// cannot infer it. Resolves the mirrored asset through the real Releases reader
// behind a pathToFileURL(main) guard.
"packages/github-cache/src/roundtrip/read-back.ts",
// Cross-OS hash-parity gate entry: ci.yml's hash-parity-compare job invokes it
// as dist/hash-parity/assert-parity.js via node; never imported, so reachability
// analysis cannot infer it. Reads both legs' records and calls compareHashParity
// behind a pathToFileURL(main) guard (CORR-03, D-19).
"packages/github-cache/src/hash-parity/assert-parity.ts",
// Consumer JS action entry: esbuild.action.mjs bundles it to
// start-cache-server/index.js, which the runner invokes as action.yml's `main`;
// it is never imported, so reachability analysis cannot infer it (D-09, Phase 6).
Expand All @@ -35,6 +40,11 @@
// npm tarball file-list guard: the `pack:check` package script + the ci.yml
// pack-check job invoke it as a standalone node bin; never imported (T-06-01-01).
"packages/github-cache/pack-check.cjs",
// Nx task-hash capture instrument: the `capture:hashes` package script + the
// ci.yml hash-parity capture job invoke it as a standalone node bin; never
// imported, so reachability analysis cannot infer it. Deliberately NOT an Nx
// target -- a cached capture would replay instead of measure (D-01b).
"capture-hashes.mjs",
// Integration vitest config: consumed by the `integration` target's
// `vitest run --config` command (project.json), not by any import. fallow
// auto-credits vitest.config.mts but not the .integration. variant, so declare it.
Expand All @@ -60,6 +70,7 @@
// string match (not glob); exempts each from BOTH unused-dependency and
// unlisted-dependency detection. Removing any of these breaks the build.
"ignoreDependencies": [
"@nx/eslint", // Nx plugin that INFERS the `lint` target via nx.json (D-01)
"@nx/vitest", // Nx plugin that INFERS the `test` target via nx.json
"@swc-node/register", // SWC transpile hook for the test runner
"@swc/helpers", // SWC runtime helpers
Expand Down
1,990 changes: 1,906 additions & 84 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

120 changes: 120 additions & 0 deletions .github/workflows/windows-regression-detector.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Windows regression detector

# The scheduled --skip-nx-cache windows-11-arm run (XOS-05/D-08). This is a
# SEPARATE scheduled workflow, never a job inside ci.yml: adding a schedule
# trigger to ci.yml would fire EVERY ONE of its jobs on a calendar cadence
# unless every one of them grew an `if:` gate, and cleanup.yml's own header
# already records why a scheduled concern lives in its own file. (This line used
# to say "all nineteen of its jobs". ci.yml declares 21 job keys at HEAD -- 18
# before XOS-04 added three -- so the number was wrong on the day this file was
# authored and wrong again three jobs later. The ARGUMENT never depended on it,
# so the count is dropped rather than restated: an unguarded number in a comment
# rots, and a comment carrying a false claim is a documented argument for undoing
# the work it explains.)
#
# WHY IT EXISTS, in XOS-05's own words, because the job below is unreadable
# without them: the success signal for O4 -- every target reporting
# [remote cache], wall time collapsing to sidecar overhead -- is the IDENTICAL
# observation to a Windows-only regression being invisible forever. A green O4
# leg IS a Windows leg that did not run the code. Reading a green O4 CI as
# evidence that the targets are PORTABLE is circular, and REQUIREMENTS.md's Out
# of Scope table names it as such: a restored task does not execute.
#
# So once XOS-04 lands, this workflow is the ONLY path in the repository that
# EXECUTES build, typecheck or test on a Windows runner. That is its whole
# justification, and it is why it HARD FAILS rather than warning. It is NOT the
# "tripwire that fires on correct work" class OBS-04 records disabling: a red
# leg here means a genuine Windows-only regression in the code under test,
# never correct work.
on:
# Once daily, off the top of the hour: GitHub delays scheduled runs under
# top-of-hour load, and this check has no deadline, so an off-peak minute is
# fine. Both fields differ from cleanup.yml's '17 3 * * *' so the two
# scheduled workflows do not contend.
schedule:
- cron: '23 4 * * *'
# workflow_dispatch is how the detector gets re-run ON DEMAND AFTER merge.
# It does NOT close the "does this go green on a real runner" question before
# merge, and must never be documented as if it could: GitHub only dispatches a
# workflow whose file exists on the DEFAULT branch, so a brand-new file on a
# feature branch does not appear in the UI at all and the API rejects it.
# cleanup.yml, the shape precedent, carries a schedule trigger ONLY -- so this
# addition is deliberate, and its justification is post-merge re-runs.
workflow_dispatch:

# Least privilege: this job checks out, installs and runs four targets, and
# writes nothing -- no Releases asset, no Actions-cache entry, no package. It
# therefore does not copy cleanup.yml's write scope (cleanup needs one because
# it DELETES release assets), and it requests no Actions scope either.
permissions:
contents: read

# No concurrency group here, deliberately. cleanup.yml needs single-writer
# serialization because concurrent DELETEs are unsafe; this job deletes nothing
# and writes nothing, so two overlapping runs are harmless and the mechanism
# would be unrequested.

jobs:
detect:
runs-on: windows-11-arm
# 20 rather than the 15 the ci.yml jobs carry: this is the only job in the
# repository whose wall time is FULL cold execution of all four targets
# rather than a cache restore, so it needs more headroom than a leg that
# HITs. `lint` joined the set without raising this: it is the cheapest of
# the four and the ceiling was already sized for the three expensive ones.
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version-file: '.node-version'
cache: 'npm'
- run: npm ci
# NO sidecar block and no remote-cache client variable, deliberately
# (D-08). --skip-nx-cache skips the remote READ and the remote WRITE at
# Nx 23.1.0 -- source-traced: doNotSkipCache gates the read AND is passed
# as postRunSteps' shouldCache argument -- so a cache server here would be
# dead weight and an extra cache producer this milestone does not want.
# With no remote-cache client variable in the environment there is no
# remote tier at all, regardless. No separate build step either: the
# run-many invocation below IS the build.
#
# Exit 0 is NOT sufficient, and that is the whole reason this is a
# scripted step rather than a bare `- run:`. nx run-many with no matching
# target ANYWHERE prints "NX No tasks were run" and exits 0 (measured in
# this repo). Worse for a four-target run: source-traced at
# node_modules/nx/dist/src/tasks-runner/life-cycles/formatting-utils.js:37
# Nx FILTERS the printed target list down to targets that actually
# resolved a task, so a needle matching only the singular prefix still
# PASSES when three of the four ran. The needle below therefore names all
# four, in -t argument order. The trade: it pins the -t ARGUMENT ORDER
# too, so reordering the flags reddens a CORRECT run -- and the fix for
# that is to update the needle and its clause in
# windows-regression-detector.spec.ts in the SAME commit, never to
# shorten the needle.
#
# One invocation rather than four single-target steps: one graph load on
# the slowest runner in the fleet, and Nx already names the failing target
# in its own output.
#
# NO_COLOR is MORE load-bearing here than in ci.yml's lint job, not less.
# Nx bolds each target name INDIVIDUALLY while the ", " separators are
# not, so with colour on the combined line carries four escape-sequence
# pairs interleaved with the commas and a plain-text match cannot fire. A
# gate that always fails gets deleted just as fast as one that never
# fires.
#
# shell: bash is REQUIRED, not stylistic: the default shell on
# windows-11-arm is pwsh, which fails on set -euo pipefail, on the pipe
# and on tee. The grep is runner-side POSIX inside a workflow body and is
# correct -- this project's never-use-grep rule governs the agent's own
# shell, not workflow bodies, and ci.yml's lint job already uses grep -q
# for exactly this purpose.
- name: Execute build, typecheck, test and lint on Windows with the Nx cache bypassed
shell: bash
env:
NO_COLOR: '1'
run: |
set -euo pipefail
npm exec -- nx run-many -t build typecheck test lint --skip-nx-cache 2>&1 | tee detector.log
grep -q 'Successfully ran targets build, typecheck, test, lint for project' detector.log
54 changes: 54 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,66 @@ Thumbs.db
# fallow dead-code analysis cache (self-ignored via .fallow/.gitignore too)
.fallow/

# capture-hashes.mjs measurement records, written at the workspace ROOT by the
# hash-parity CI job and by a local `npm run capture:hashes` / `assert:graph-premise`.
# Ignored so they never dirty the working tree the NEXT record measures: both modes
# record `workingTreeClean`, which exists to reveal an uncommitted nx.json edit, and
# an untracked sibling record would peg the field to false and destroy that signal.
# The COMMITTED copies of these records live under .planning/, never here.
/hash-parity-*.json
/graph-premise-*.json

# O3 probe records, written at the workspace ROOT by ci.yml's integration and
# o3-witness steps and by a local `node read-integration-hash.mjs`. Ignored for the
# same reason as the records above -- an untracked sibling would dirty the tree the
# next `workingTreeClean` measurement reads -- and because integration-hash.txt's
# contents become a cache key, so it must never be committed and mistaken for one.
/integration-nx.log
/integration-hash.txt
/o3-witness.log

# The remaining workspace-ROOT logs the CI jobs tee, for the SAME reason as the two
# above and completing that set: `build-nx.log`, `typecheck-nx.log` and `test-nx.log`
# (the three Windows reuse legs' runtime cache observation), `lint.log`,
# `hash-parity.log` (the `^hash-parity: PARITY OK` grep target) and `detector.log`
# (windows-regression-detector.yml). Only the two O3 logs were listed, which made the
# rule look like an O3 special case rather than what it is: a `tee` at the workspace
# root leaves an UNTRACKED file, and `capture-hashes.mjs` records `workingTreeClean`
# from `git status --porcelain`, so any of these sitting beside a capture pegs that
# field to false and destroys the signal it exists to carry. Latent today only because
# no job both tees and captures in one checkout -- which is a scheduling accident, not
# a guarantee, and the hash-parity job already tees `hash-parity.log`.
/build-nx.log
/typecheck-nx.log
/test-nx.log
/lint.log
/hash-parity.log
/detector.log

# The OPERATOR-side counterpart to the list above, for the identical reason. AGENTS.md's
# "Capturing test-battery output" section tells a human (or an agent) to tee each battery
# iteration to `test-<epoch>-<i>.log` at the workspace root so a failing run's output
# survives -- Nx caches terminal output for SUCCESSFUL runs only, so the re-run destroys the
# evidence. Those logs are untracked by construction and would peg `workingTreeClean` to
# false in exactly the way the paragraph above describes. A glob rather than an enumeration
# because the iteration suffix is unbounded; it subsumes `/test-nx.log`, which is kept above
# so the CI-teed set stays readable as a complete list.
/test-*.log

# op-nx/github-cache act test harness (test-only, never a runtime dep)
.act-cache
.act-artifacts
.cursor/rules/nx-rules.mdc
.github/instructions/nx.instructions.md

# GSD research-tool response cache (hash-named JSON, written by the `research-*`
# query handlers). Generated, never authored, and worthless as history -- but it is
# NOT merely noise: it lands untracked under `.planning/`, and `capture-hashes.mjs`
# records `workingTreeClean` from `git status --porcelain`, so a research probe run
# in the same checkout as a hash capture pegs that field to false and destroys the
# signal, exactly as the workspace-root logs above would. Same rule, new writer.
.planning/research/.cache/

.claude/worktrees
.claude/settings.local.json
.nx/polygraph
Expand Down
Loading