Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
1eaeaf2
sdg(phase-7): add CONF-AVAIL datum-form violators; refresh CONF-VALID…
claude Aug 6, 2026
d4b4143
sdg(phase-7): pin CHATTYREADS line inertness; certify T11.3-4's restr…
claude Aug 6, 2026
327f67e
sdg(phase-7): pin read sweeps and pre-generation discovery observatio…
claude Aug 6, 2026
6daf3a0
sdg(phase-7): pin CONF-AVAIL command routing as staging constraint; e…
claude Aug 10, 2026
5d11f16
sdg(phase-7): CERTIFICATIONS.md converged; flip patch 0001 to Stage: …
claude Aug 10, 2026
8294929
sdg(phase-8): run CI on pushes to the patch branch — its conflicted P…
claude Aug 10, 2026
1c8747e
sdg(phase-9): plan 93 harness compliance tasks into FIX_PLAN.md
claude Aug 10, 2026
561c4b7
sdg(phase-9): decode findings literally per SPEC 12.7 with datum deco…
claude Aug 10, 2026
2ebe4b9
sdg(phase-9): assert the 12.7 error document on exit 2 with JSON in e…
claude Aug 10, 2026
88840e2
sdg(phase-9): re-pin the S-1 universe to 81 keys; renumber T6.6-1 to …
claude Aug 10, 2026
b568d85
sdg(phase-9): assert the present code-impact scope's source range; st…
claude Aug 10, 2026
fc91e6e
sdg(phase-9): restage the #-containing and non-UTF-8 move destination…
claude Aug 10, 2026
ba212a1
sdg(phase-9): mark FP-006 done — §§1–9 condition assertions already t…
claude Aug 10, 2026
a0db855
sdg(phase-9): assert stable refusal codes with their §14 concerns acr…
claude Aug 10, 2026
2fbe39d
sdg(phase-9): add T1.3-6's invalid-id-form arms and CONF-VALID's 14.1…
claude Aug 10, 2026
080ed86
sdg(phase-9): stage T3-1's grammar-boundary arm and give CONF-MD fenc…
claude Aug 11, 2026
a95a25c
sdg(phase-9): assert bare-identity edge endpoints across edges rows, …
claude Aug 11, 2026
5fe7e8c
sdg(phase-9): add T4.3-2's zero- and two-argument text(...) arity arm…
claude Aug 11, 2026
a53c343
sdg(phase-9): add T4.5-2's upstream cross-file impact arm (FP-014)
claude Aug 11, 2026
c810d67
sdg(phase-9): assert rename's applied-mapping report through a new H-…
claude Aug 11, 2026
4406923
sdg(phase-9): add T6.4-4's wrong-kind and parse-local old-ID-existenc…
claude Aug 11, 2026
c8f717f
sdg(phase-9): assert move's applied-mapping report in both forms (FP-…
claude Aug 11, 2026
6d83761
sdg(phase-9): add T6.5-4's destination-occupant, empty-id, and derive…
claude Aug 11, 2026
118b164
sdg(phase-9): add T6.5-5's wrong-kind, mixed-synopsis, and parse-loca…
claude Aug 11, 2026
dd90204
sdg(phase-9): add T7-2's string-literal group-name keys arm (FP-020)
claude Aug 11, 2026
60e608b
sdg(phase-9): add T7.5-5's literal-$ forms arms (FP-021)
claude Aug 11, 2026
500548c
sdg(phase-9): implement T1.7-2 — code-location ranges via occurrence …
claude Aug 11, 2026
4b4f562
sdg(phase-9): implement T5.7-1 — occurrence units and duplicates (FP-…
claude Aug 11, 2026
31a170e
sdg(phase-9): implement T5.7-2 — byte-precise occurrence spans per ki…
claude Aug 11, 2026
3976719
sdg(phase-9): implement T5.7-3 — occurrence record data and total ord…
claude Aug 11, 2026
17e2b7e
sdg(phase-9): implement T5.7-4 — no-occurrence constructs and exit-1 …
claude Aug 11, 2026
853df77
sdg(phase-9): implement T6.5-7 — operation-side rewrite bytes (FP-027)
claude Aug 11, 2026
6304869
sdg(phase-9): implement T6.6-2 — preview is inert and predictive (FP-…
claude Aug 11, 2026
12cf7b2
sdg(phase-9): implement T6.6-3 — preview refusal and scheduling equiv…
claude Aug 11, 2026
5512c3f
sdg(phase-9): implement T6.6-4 — preview report content, the ten 12.7…
claude Aug 11, 2026
b160ae1
sdg(phase-9): implement T6.6-5 — record-based derived-file delta (FP-…
claude Aug 11, 2026
a524885
sdg(phase-9): implement T6.6-6 — preview under a corrupt graph record…
claude Aug 11, 2026
7155de4
sdg(phase-9): implement T10.1-4 malformed-recorded-decompositions arm…
claude Aug 11, 2026
4ac3afa
sdg(phase-9): implement T10.4-2 non-scope presence-recording arms (FP…
claude Aug 11, 2026
58c9eee
sdg(phase-9): assert T10.7-7 payload source ranges for every present …
claude Aug 13, 2026
ebcf248
sdg(phase-9): add T11-6 wrong-kind, unknown-unit, and disambiguator a…
claude Aug 13, 2026
2eb5d3d
sdg(phase-9): extend the 12.0 command sweep with the new surfaces (FP…
claude Aug 13, 2026
797f29e
sdg(phase-9): add T12.0-9's new exit-partition representatives (FP-038)
claude Aug 13, 2026
5a7db48
sdg(phase-9): implement T12.0-10's own precedence arms (FP-039)
claude Aug 13, 2026
d3ab5fd
sdg(phase-9): extend T12.0-12's git-less sweep to the new surfaces (F…
claude Aug 13, 2026
c160785
sdg(phase-9): add T12.2-2 occupant-kind and graph-data unit-form arms…
claude Aug 13, 2026
f66579d
sdg(phase-9): pin T12.2-3's never-refreshes per state (FP-042)
claude Aug 13, 2026
c3e311a
sdg(phase-9): extend T12.5-1's dispatch sweep to the §11 surfaces (FP…
claude Aug 13, 2026
102abe4
sdg(phase-9): extend T13.3-1/-2 sweeps to the §11 surfaces; add the r…
claude Aug 13, 2026
f3f455a
sdg(phase-9): add T13.3-3's whole-gate arms and never-gated contrast …
claude Aug 13, 2026
7e2a9cf
sdg(phase-9): add T13.4-6's plain-file occupant and 14.22 cardinality…
claude Aug 13, 2026
6a77873
sdg(phase-9): add T13.5-1's seam-neutrality twin compare (FP-047)
claude Aug 13, 2026
5fa521b
sdg(phase-9): extend T14-4's reporter matrix to the new-surface rows …
claude Aug 13, 2026
917683e
sdg(phase-9): implement T10.1-5's gate-precedence-over-corruption pai…
claude Aug 13, 2026
46168b7
sdg(phase-9): implement T11.2-1's parse-local availability suite (FP-…
claude Aug 13, 2026
aacac62
sdg(phase-9): implement T11.2-2's spelled-identity/interpreted-data m…
claude Aug 13, 2026
960e5b3
sdg(phase-9): implement T11.2-3's invalid-paths suite (FP-052)
claude Aug 13, 2026
9699c23
sdg(phase-9): implement T11.2-4's resolution and expanded-text matrix…
claude Aug 13, 2026
d3d7518
sdg(phase-9): implement T11.2-5's domain/findings/exit discipline (FP…
claude Aug 13, 2026
50638f8
sdg(phase-9): implement T11.2-6's never-stale gate-findings-never-att…
claude Aug 14, 2026
8cfceb2
sdg(phase-9): implement T11.3-1's occurrences enumeration over shared…
claude Aug 14, 2026
55d6e9c
sdg(phase-9): implement T11.3-2's --file set restriction (FP-057)
claude Aug 14, 2026
af3eb4d
sdg(phase-9): implement T11.3-3's --to acceptance/malformed/selection…
claude Aug 14, 2026
d516812
sdg(phase-9): implement T11.3-4's definitive-emptiness contrast pair …
claude Aug 14, 2026
defe0d4
sdg(phase-9): implement T11.4-1's whole-domain views and positional t…
claude Aug 14, 2026
9c5a9bb
sdg(phase-9): implement T11.4-2's operands-vs-restriction matrix (FP-…
claude Aug 14, 2026
fb3bdeb
sdg(phase-9): implement T11.4-3's attribute matrix and per-node datum…
claude Aug 14, 2026
dde2e09
sdg(phase-9): implement T11.4-4's imports datum matrix (FP-063)
claude Aug 14, 2026
f964c21
sdg(phase-9): implement T11.4-5's --text expansion domain (FP-064)
claude Aug 14, 2026
d2fdd17
sdg(phase-9): implement T11.4-6's byte classification via the P-2 ora…
claude Aug 14, 2026
2b65f41
sdg(phase-9): implement T11.5-1's total at resolution and view deriva…
claude Aug 14, 2026
b06bbda
sdg(phase-9): implement T11.5-2's offset spelling and operand matrix …
claude Aug 14, 2026
2d79e1a
sdg(phase-9): implement T11.5-3's occurrence containment and imperfec…
claude Aug 14, 2026
5f9a14e
sdg(phase-9): implement T11.6-1's inventory anchoring with the E-6 Li…
claude Aug 14, 2026
2c81f28
sdg(phase-9): implement T11.6-2's resolved configuration/sources/deri…
claude Aug 14, 2026
e787702
sdg(phase-9): implement T11.6-3's record, area, durables, and orders …
claude Aug 14, 2026
69e0e41
sdg(phase-9): implement T11.6-4's no-parse/no-write/one-finding arms …
claude Aug 14, 2026
949c3c9
sdg(phase-9): implement T12.0-13's multi-# malformedness and whole-pa…
claude Aug 14, 2026
726d719
sdg(phase-9): implement T12.6-1/-2, the version command's surface and…
claude Aug 14, 2026
79edb59
sdg(phase-9): implement T12.7-1, the 12.7 value forms, and wire the m…
claude Aug 14, 2026
015e04a
sdg(phase-9): implement T12.7-2, the findings-array ordering and docu…
claude Aug 16, 2026
2a5bbfa
sdg(phase-9): implement T12.7-3, the exit-2 error document (FP-077)
claude Aug 16, 2026
3bced2e
sdg(phase-9): implement T13.4-8, writes create missing directories (F…
claude Aug 16, 2026
56dde0b
sdg(phase-9): implement T14-6, the stable-code sweep (FP-079)
claude Aug 16, 2026
6a8b3c8
sdg(phase-9): implement T14-7, the refusal-reason contract (FP-080)
claude Aug 16, 2026
aa68a6b
sdg(phase-9): implement T14-8, the location-cardinality contract (FP-…
claude Aug 17, 2026
377a057
sdg(phase-9): implement FP-082, the P-2 fence/code-span staging
claude Aug 17, 2026
8a403ee
sdg(phase-9): implement FP-083, the P-5 section-move category oracle
claude Aug 17, 2026
1bd23d5
sdg(phase-9): generalize P-5 to random section moves on the FP-083 or…
claude Aug 29, 2026
5c55122
sdg(phase-9): implement FP-085, the P-6 graph-diff oracle + its S-6 s…
claude Aug 29, 2026
b693078
sdg(phase-9): add the P-7 literal $-at-capture-boundary forms (FP-086)
claude Aug 29, 2026
464ec19
sdg(phase-9): implement P-11, the availability robustness fuzz (FP-087)
claude Aug 29, 2026
dba5be9
sdg(phase-9): implement P-12, the at-view/occurrence-order equivalenc…
claude Aug 29, 2026
eef2736
sdg(phase-9): implement FP-089, the P-13 coverage-reachability oracle…
claude Aug 29, 2026
bb5cf75
sdg(phase-9): implement P-13, the coverage oracle property (FP-090)
claude Aug 29, 2026
3b81b12
sdg(phase-9): build the CONF-AVAIL certification family (FP-091)
claude Aug 29, 2026
26adc0b
sdg(phase-9): extend the E-6 fixture with the new command steps (FP-092)
claude Aug 29, 2026
2e76888
sdg(phase-9): add the Windows-subset drive-mismatch anchoring arm of …
claude Aug 29, 2026
dacaf3f
sdg(phase-9): restage T11.5-1's fixture as real MDX blocks (FP-094)
claude Aug 29, 2026
138c91d
sdg(phase-9): plan compliance round-2 fixes (FP-095, FP-096)
claude Aug 29, 2026
bd7250b
sdg(phase-9): stage and assert the embedding half of SPEC 10.5's note…
claude Aug 29, 2026
d2abb67
sdg(phase-9): compare decoded documents, not bytes, in T12.0-1's JSON…
claude Aug 29, 2026
2be1bc7
sdg(phase-9): flip patch 0001 stage to Tested — code review clean, ha…
claude Aug 29, 2026
f419122
sdg(phase-10): plan product-compliance fixes from review findings
claude Aug 29, 2026
f9c0fb4
sdg(phase-10): rebuild findings into the 12.7 five-member form with s…
claude Aug 29, 2026
c0a32cb
sdg(phase-10): present non-UTF-8 finding paths in the 12.7 marked byt…
claude Aug 29, 2026
dfc35f8
sdg(phase-10): locate every participant of jointly-violated conditions
claude Aug 29, 2026
ec820b4
sdg(phase-10): emit the exit-2 JSON error document with anchored conf…
claude Aug 29, 2026
2c11bce
sdg(phase-10): report review-operation refusals as code-less findings
claude Aug 29, 2026
d1b3bdd
sdg(phase-10): report rename/move success as the applied mapping
claude Aug 29, 2026
c8fc353
sdg(phase-10): register the workspace-independent version command
claude Aug 29, 2026
39f7b69
sdg(phase-10): analyze invalid-path sources per-file with identities …
claude Aug 29, 2026
37134c1
sdg(phase-10): record reference occurrences in core analysis and grap…
claude Aug 30, 2026
64eba7b
sdg(phase-10): compute code-location source ranges
claude Aug 30, 2026
5a448c6
sdg(phase-10): add xspec occurrences and the shared 11.2 availability…
claude Aug 30, 2026
84ae644
sdg(phase-10): register xspec view with the 11.4 document form
claude Aug 30, 2026
92a8f7e
sdg(phase-10): resolve byte positions with xspec at
claude Aug 30, 2026
eeace33
sdg(phase-10): report the workspace inventory
claude Aug 30, 2026
532b644
sdg(phase-10): report every rename/move refusal reason as stable-code…
claude Aug 30, 2026
2a7a139
sdg(phase-10): preview rename and move plans with the derived-file delta
claude Aug 30, 2026
4649eb9
sdg(phase-10): classify move operands by spelling at parse level
claude Aug 30, 2026
8acae2a
sdg(phase-10): run gated-read argument checks before the invalid-work…
claude Aug 30, 2026
9003712
sdg(phase-10): sequence baseline-content validation past the read gate
claude Aug 30, 2026
ca2afce
sdg(phase-10): refuse any non-directory write-path component before m…
claude Aug 30, 2026
f62eb67
sdg(phase-10): persist unreadable recorded state past every refreshin…
claude Aug 30, 2026
4c0a3f8
sdg(phase-10): report both 14.10 unit forms against the graph-data area
claude Aug 30, 2026
e43c3d3
sdg(phase-10): carry source ranges on every present review-payload node
claude Aug 30, 2026
35acd95
sdg(phase-10): bound deep-nesting cost across serializer, view, and s…
claude Aug 30, 2026
e239f0c
sdg(phase-10): log P-11 harness-decoder blockage to TEST-SPEC problems
claude Aug 30, 2026
7cf2f05
sdg(phase-10): record CI leg verdicts and the artifact-upload skip in C7
claude Aug 30, 2026
22e5ead
sdg(phase-6): mandate harness answer-scale capacity (H-11, S-8); pin …
claude Aug 30, 2026
15b6c6f
sdg(phase-6): extend answer-scale capacity to stream capture (H-11, S-8)
claude Aug 30, 2026
f762919
sdg(phase-6): pin added-import insertion bytes; gate staged-scale fix…
claude Aug 30, 2026
9f8d09b
sdg(phase-6): TEST-SPEC iteration 4 — universal 12.7 value forms; T12…
claude Aug 30, 2026
46a6aed
sdg(phase-6): TEST-SPEC iteration 5 — impact/journal gate contradicti…
claude Sep 1, 2026
be6c7da
sdg(phase-6): TEST-SPEC iteration 6 — configuration member/shape arms…
claude Sep 1, 2026
2bc11fa
sdg(phase-6): TEST-SPEC iteration 7 — third-module bindings in moved …
claude Sep 1, 2026
897bfea
sdg(phase-6): TEST-SPEC iteration 8 — valueless id/coverage/tags at b…
claude Sep 2, 2026
587edca
sdg(phase-7): revisit CERTIFICATIONS for the Phase 6 TEST-SPEC change…
claude Sep 2, 2026
2911c14
sdg(phase-7): CERTIFICATIONS revisit round 1 — configuration location…
claude Sep 2, 2026
3b61122
sdg(phase-7): CERTIFICATIONS revisit round 2 — T13.5-4 compare-scope …
claude Sep 2, 2026
831df39
sdg(phase-9): retire the Phase 10 sweep task C7 and delete the leftov…
claude Sep 2, 2026
1f74dd1
sdg(phase-9): plan the harness re-descent — FIX_PLAN.md with 47 tasks…
claude Sep 2, 2026
f218488
sdg(phase-9): CONF-CORE conformer — refresh stale graph data inside m…
claude Sep 2, 2026
f7e6054
sdg(phase-9): T13.5-1 stale-workspace arm — the hold precedes the 13.…
claude Sep 2, 2026
75b6b8f
sdg(phase-9): VIOL-CORE-EARLYREFRESH violator — the 13.3 refresh runs…
claude Sep 2, 2026
300f23a
sdg(phase-9): certification manifest and gate pins for the revised CE…
claude Sep 2, 2026
5407ec3
sdg(phase-9): de-recurse the view decode path — decodeViewNodeForm, t…
claude Sep 2, 2026
f2cb541
sdg(phase-9): finish de-recursing the H-3 decoders — walkForRangeData…
claude Sep 2, 2026
7199b50
sdg(phase-9): de-recurse the registry modules' JSON walkers — canonic…
claude Sep 2, 2026
a6adf40
sdg(phase-9): add the S-8 answer-scale capacity gate — decoders and w…
claude Sep 2, 2026
fd7216b
sdg(phase-9): add the S-2 scale vectors — the 4096-deep tower and the…
claude Sep 2, 2026
20ee9fd
sdg(phase-9): add the T1.3-7 depth anchor — a valid 2048-deep chained…
claude Sep 2, 2026
d091075
sdg(phase-9): size P-11's hang guard to the staged answer scale — 120…
claude Sep 2, 2026
f266007
sdg(phase-9): CONF-DISC conformer — code groups discovered under the …
claude Sep 2, 2026
39b659d
sdg(phase-9): VIOL-DISC-DERIVED header — describe the revised deviati…
claude Sep 2, 2026
5a98aac
sdg(phase-9): T7-6 code-group exclusion arm — each excluded code-glob…
claude Sep 2, 2026
ca7cb7a
sdg(phase-9): T1.2-3 — locate the root's ignored reason through the c…
claude Sep 2, 2026
d39eec6
sdg(phase-9): T1.3-6 valueless-`id` arm — a bare `<S id>` bearer repo…
claude Sep 2, 2026
a80dba5
sdg(phase-9): T2.7-3 valueless `<S id>`, `<S id="x" coverage>`, `<S i…
claude Sep 2, 2026
8a831b8
sdg(phase-9): T4.5-4 callee-side arm — an inner-scope `function text`…
liamcardenas Sep 2, 2026
ed51219
sdg(phase-9): T4.6-3 value-side boundary arm — `const s = text(SPEC.v…
claude Sep 2, 2026
8b79fed
sdg(phase-9): T6.1-1 never-modifies sweep over every command surface …
claude Sep 2, 2026
557fb86
sdg(phase-9): T6.4-2 keepable-form rename arms — the affected segment…
claude Sep 2, 2026
f122975
sdg(phase-9): T6.4-3 two-bearer collision arm — a second staged file …
claude Sep 2, 2026
506bc87
sdg(phase-9): T6.4-4 second nonexistent-<file> spelling — a valid `do…
claude Sep 2, 2026
f99f809
sdg(phase-9): T6.4-5 move arm — a `typeof` reference to a node then s…
claude Sep 2, 2026
fa21756
sdg(phase-9): T6.5-1 specifier-rewrite byte contract for the file-for…
claude Sep 2, 2026
5f9752b
sdg(phase-9): T6.5-3 third-file arms — a spec source neither origin n…
claude Sep 2, 2026
a75fbc2
sdg(phase-9): T6.5-4 directory-occupant and symbolic-link-component a…
claude Sep 2, 2026
19f88b5
sdg(phase-9): T6.5-5 present-but-undiscovered origin `<file>` spellin…
claude Sep 2, 2026
b1e5d51
sdg(phase-9): T6.5-7 single-quoted descendant `id` and the code-sourc…
claude Sep 2, 2026
068a325
sdg(phase-9): T6.5-8 added-import insertion discipline — three sectio…
claude Sep 2, 2026
72e63b5
sdg(phase-9): T6.5-9 fresh identifiers in code — T6.5-8's TS arm re-s…
claude Sep 2, 2026
723652d
sdg(phase-9): T6.5-10 third-module bindings carried with moved text —…
claude Sep 2, 2026
08de4be
sdg(phase-9): T6.6-4 rename-preview mapping-order fixture — arm (a)'s…
claude Sep 2, 2026
c13ede1
sdg(phase-9): T6.6-5 lagging-record counterpart — a fourth arm over a…
claude Sep 2, 2026
e476c96
sdg(phase-9): T7-1 `--config` naming a nonexistent file is missing co…
claude Sep 2, 2026
215ccb2
sdg(phase-9): T7-3 value-shape arms (14.14) — seven fixtures in a new…
claude Sep 2, 2026
0d245a6
sdg(phase-9): T7.4-1 `edgeKinds` non-subset and non-string `targetTag…
claude Sep 2, 2026
fc1ace9
sdg(phase-9): T7.5-1 `kinds` non-subset and non-string selector `tags…
claude Sep 2, 2026
9c54d84
sdg(phase-9): T10.5-1 two-levels-deep chain arm (10.5) — a third work…
claude Sep 2, 2026
b7ed965
sdg(phase-9): T11-6 `query subtree`/`query ancestors` wrong-kind oper…
claude Sep 2, 2026
7e004fa
sdg(phase-9): extend T2.7-3's exported `<S id="x" tags>` fixture with…
claude Sep 2, 2026
07652a6
sdg(phase-9): T11.4-3 `view` arm on T2.7-3's shared `<S id="x" tags>`…
claude Sep 2, 2026
238f9c2
sdg(phase-9): T12.0-10 missing required flag/argument rows in the wit…
claude Sep 2, 2026
dfe294e
sdg(phase-9): T12.7-1 marker-exclusivity walk at every adjustable ada…
claude Sep 3, 2026
13f7bc1
sdg(phase-9): T12.7-2 clean-workspace `build --json` is exactly `{"fi…
claude Sep 3, 2026
5a8ad43
sdg(phase-9): T12.7-3 `--config ../cfg/xspec.config.ts` from a siblin…
claude Sep 3, 2026
515f252
sdg(phase-9): T13.3-3 `impact --base` leaves the journal-error stagin…
claude Sep 3, 2026
f29cbb2
sdg(phase-9): T13.4-3 unreadable-record half — the record corrupted s…
claude Sep 3, 2026
09852d6
sdg(phase-9): T14-7 `refused-id-collision` locates every colliding be…
claude Sep 3, 2026
c574214
sdg(phase-9): P-1 stages a `.`-bearing draw as nested segments and sp…
claude Sep 3, 2026
68797f6
sdg(phase-9): plan the round-2 harness fixes — E-6 exchange upload on…
claude Sep 3, 2026
f3acd32
sdg(phase-9): CI uploads the E-6 exchange whenever the Linux job is n…
claude Sep 3, 2026
fb8229b
sdg(phase-9): S-4 checks TS2440 detection directly — an import bindin…
claude Sep 3, 2026
6b136ee
sdg(phase-9): S-4 checks TS2300 detection directly — an import bindin…
claude Sep 3, 2026
36bec90
sdg(phase-9): plan 2 harness tasks from the third compliance determin…
claude Sep 3, 2026
c55255e
sdg(phase-9): staged-scale derivation carries the deterministic stage…
claude Sep 3, 2026
a45fb26
sdg(phase-9): S-2 stages the largest document the suite stages — T1.3…
claude Sep 3, 2026
72ad038
sdg(phase-10): plan 5 product tasks from the re-descent's first compl…
claude Sep 3, 2026
d83e1bc
sdg(liaison): update PHILOSOPHY.md
liamcardenas Sep 3, 2026
af2b468
sdg(phase-4): resolve SPEC-PROBLEMS 2026-09-03 — exclude U+FFFD from …
claude Sep 3, 2026
981ff62
sdg(phase-4): make a synopsis mismatch a usage error, fix flag arity …
claude Sep 3, 2026
b67b451
sdg(phase-4): fix rename's surplus-operand example, locate a would-be…
claude Sep 3, 2026
4ab1bf6
sdg(phase-4): pin the rename/move write order with the journal append…
claude Sep 3, 2026
845abc1
sdg(phase-4): fix every located condition's range per condition, make…
claude Sep 3, 2026
204df66
sdg(phase-4): fix the tag-set and kind-set value forms and every inve…
claude Sep 3, 2026
db5af1e
sdg(phase-4): report the recorded-file staleness form on a failing wo…
claude Sep 3, 2026
0cc11e6
sdg(phase-4): read an absent record as the empty record whatever the …
claude Sep 4, 2026
eb1764b
sdg(phase-4): rewrite a moved target's TypeScript text(...) call whol…
claude Sep 4, 2026
19c379e
sdg(phase-4): make rewrites byte-changing only, define import use by …
claude Sep 4, 2026
dcf3034
sdg(phase-4): make a same-scope value-level declaration colliding wit…
claude Sep 4, 2026
664487b
sdg(phase-6): round 1 part 1 — cover write and read failures (14.24/1…
claude Sep 10, 2026
8370797
sdg(phase-6): round 1 part 2 — cover 1.4's quote, escape, and U+FFFD …
claude Sep 10, 2026
3031926
sdg(phase-6): round 1 part 3 — cover same-scope collisions, the basel…
claude Sep 10, 2026
dc09301
sdg(phase-6): round 2 — index every 12.7 value form in T12.7-1 and pi…
claude Sep 10, 2026
035b088
sdg(phase-7): re-align CERTIFICATIONS.md with the rewritten SPEC.md a…
claude Sep 10, 2026
cbb0a35
sdg(phase-7): round 1 — pin VIOL-CORE-LATELOCK past rename/move's pre…
claude Sep 10, 2026
829ea59
sdg(phase-8): run the Linux CI legs as an unprivileged identity so E-…
claude Sep 10, 2026
090c72a
sdg(phase-9): remove FIX_PLAN Task 1 (code-source import removal on a…
claude Sep 10, 2026
54b53a4
sdg(phase-9): remove FIX_PLAN Task 2 (fresh code-file import identifi…
Sep 10, 2026
3198242
sdg(phase-9): remove FIX_PLAN Task 3 (successful preview emitted befo…
claude Sep 10, 2026
0c5a2b7
sdg(phase-9): note in AGENTS.md where a ready-made configuration for …
claude Sep 10, 2026
d4aabcb
sdg(phase-9): remove FIX_PLAN Task 4 (references rooted at invalid or…
liamcardenas Sep 10, 2026
b4c4661
sdg(phase-9): remove FIX_PLAN Task 5 (baseline-content validation bef…
claude Sep 10, 2026
24c9487
sdg(phase-9): register T4.5-8 (same-scope collisions) in the harness …
claude Sep 10, 2026
8342cdc
sdg(phase-9): register T6.3-5 (repository and path of the baseline) i…
claude Sep 10, 2026
3dd41df
sdg(phase-9): plan the harness re-alignment — 49 tasks in specs/tmp/F…
claude Sep 10, 2026
6f3b0f5
sdg(phase-9): register T13.5-8 (acquisition before every later check)…
claude Sep 10, 2026
b113c6e
sdg(phase-9): extend the CONF-CORE conformer to T13.5-8's scope — FIX…
claude Sep 10, 2026
822db2e
sdg(phase-9): add the VIOL-CORE-LATELOCK violator, wire the manifest,…
claude Sep 10, 2026
c5ecfb1
sdg(phase-9): add the E-1 self-verifying permission-staging helper — …
claude Sep 10, 2026
5088f75
sdg(phase-9): decode the performed rename/move report form-exact — FI…
claude Sep 10, 2026
f78f3d1
sdg(phase-9): emit the 12.7 performed form from the CONF-CORE conform…
claude Sep 10, 2026
7c75e46
sdg(phase-9): assert refusal `identities` form-exact — FIX_PLAN Task 6
claude Sep 10, 2026
298c581
sdg(phase-9): reject the quote, escape, reference characters and U+FF…
claude Sep 10, 2026
459ea19
sdg(phase-9): add the write-failure/read-failure codes and drop refus…
claude Sep 10, 2026
ca381ee
sdg(phase-9): cover all 25 conditions in T14-6 with the 14.24/14.25 e…
claude Sep 10, 2026
04addc4
sdg(phase-9): remove FIX_PLAN Task 8 and record the hand-staging name…
claude Sep 10, 2026
1245424
sdg(phase-9): rewrite T13.5-7 as the pinned write order under refused…
liamcardenas Sep 10, 2026
12bc33a
sdg(phase-9): register T14-9 (write failures, 14.24) in section-14-ii…
claude Sep 10, 2026
988fe1f
sdg(phase-9): register T14-10 (read failures, 14.25) in section-14-ii…
claude Sep 10, 2026
aa166fc
sdg(phase-9): extend T12.7-3 with as-given --config echoes, the symli…
claude Sep 10, 2026
9868e65
sdg(phase-9): add T14-7's destination-spelling and spec-import-cycle …
claude Sep 11, 2026
67a9275
sdg(phase-9): register T14-11 (per-condition ranges, byte-exact) in s…
claude Sep 11, 2026
6805562
sdg(phase-4): define well-formed MDX/TypeScript by grammar and editio…
claude Sep 11, 2026
d20e530
sdg(phase-4): well-formedness by derivability, not early errors; {// …
claude Sep 11, 2026
d9f96da
sdg(phase-4): line comments in MDX containers count only when a line …
claude Sep 11, 2026
890be57
sdg(phase-4): ECMAScript whitespace classes inside braces; MDX 3's co…
claude Sep 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 67 additions & 12 deletions .github/scripts/run-without-network.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,76 @@
#!/usr/bin/env bash
# Run a command with network access disabled (TEST-SPEC E-1: the suite must
# pass with network access disabled after setup, and product invocations run
# with network access denied).
# Run a command with network access disabled and as an unprivileged user
# (TEST-SPEC E-1): the suite must pass with network access disabled after
# setup, product invocations run with network access denied, and the Linux leg
# runs product invocations as an unprivileged user so that the permission-based
# stagings of environment refusals (T13.5-7, T14-9, T14-10) take effect. The
# harness verifies each staging on itself and reports a privileged runner as a
# harness error (H-11); this script is what makes the runner unprivileged.
#
# The command runs in a fresh network namespace containing only a loopback
# interface, so the command and every subprocess it spawns (the harness's
# product invocations included) have no route off the machine, while the
# Actions runner agent keeps its own connectivity. Failures here are loud by
# design: falling back to a networked run would silently drop the E-1
# guarantee.
# The command runs inside two nested user namespaces, entered by this script
# re-invoking itself one stage at a time:
#
# outer `unshare --map-root-user --net`. A fresh network namespace holding
# only a loopback interface, so the command and every subprocess it
# spawns (the harness's product invocations included) have no route
# off the machine while the Actions runner agent keeps its own
# connectivity. Root inside this namespace is needed only to bring
# loopback up. It must not run the suite: a root-mapped namespace
# also carries CAP_DAC_OVERRIDE over every file the runner user owns,
# so permission removal is ineffective there — a process writes into
# a read-only directory and reads a mode-200 file — exactly the
# privileged runner E-1 excludes.
#
# inner `unshare --map-user --map-group` (util-linux >= 2.38; ubuntu-24.04
# ships 2.39). Maps the identity back to the runner's real uid and
# gid; executing a program as a non-zero uid inside a user namespace
# clears every capability. Mode bits then refuse exactly as they do
# for a plain unprivileged process, the network namespace is
# inherited, and the uid the harness, git, and the product observe is
# the runner's own. The command runs here, after the stage verifies
# both properties.
#
# Failures here are loud by design: falling back to a networked or privileged
# run would silently drop the E-1 guarantee.
set -euo pipefail

me="run-without-network.sh"

case "${1-}" in
--stage-outer)
# Inside the root-mapped user + network namespaces.
uid=$2; gid=$3; shift 3
ip link set lo up 2>/dev/null || true
exec unshare --map-user="$uid" --map-group="$gid" -- bash "$0" --stage-inner "$uid" "$@"
;;
--stage-inner)
# Inside the inner user namespace: the runner's own identity, no
# capabilities. Verify both before running anything.
uid=$2; shift 2
if [ "$(id -u)" != "$uid" ]; then
echo "$me: uid $(id -u) inside the inner namespace, expected $uid" >&2
exit 1
fi
if ! grep -Eq '^CapEff:[[:space:]]*0+$' /proc/self/status; then
echo "$me: capabilities survived the inner namespace (privileged runner, E-1)" >&2
exit 1
fi
exec "$@"
;;
esac

uid=$(id -u)
gid=$(id -g)
if [ "$uid" -eq 0 ]; then
echo "$me: refusing to run as root — E-1 requires an unprivileged runner" >&2
exit 1
fi

# Ubuntu 24.04 can restrict unprivileged user namespaces; lift the restriction
# for this VM so `unshare` needs no root. A no-op where already permitted.
sudo sysctl -qw kernel.apparmor_restrict_unprivileged_userns=0 2>/dev/null || true

# --map-root-user grants CAP_NET_ADMIN inside the new namespaces (to bring up
# loopback); the real uid outside remains the runner user.
exec unshare --map-root-user --net -- \
sh -c 'ip link set lo up 2>/dev/null || true; exec "$@"' -- "$@"
# loopback); the real uid outside remains the runner user, and the inner stage
# maps it back.
exec unshare --map-root-user --net -- bash "$0" --stage-outer "$uid" "$gid" "$@"
57 changes: 42 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@
#
# suite-linux Linux. The full suite — sections 1–17, certification
# included (E-1) — run with network access disabled after
# dependency installation, so product invocations run with
# network denied. Expected red until the product conforms to
# SPEC.md; green is required from then on.
# dependency installation and as an unprivileged identity
# (.github/scripts/run-without-network.sh), so product
# invocations run with network denied and the permission-
# based stagings of environment refusals (T13.5-7, T14-9,
# T14-10) take effect; the harness verifies each staging on
# itself and reports a privileged runner as a harness error.
# Expected red until the product conforms to SPEC.md; green
# is required from then on.
#
# suite-windows Windows. The E-6 platform-sensitive subset. The E-6
# byte-identity comparison reads the Linux leg's
Expand All @@ -27,8 +32,16 @@ name: CI

on:
pull_request:
# GitHub creates no pull_request-event runs while a PR is unmergeable.
# PR #7 (patch 0001, branch claude/xspec-ui-apis-4df8fa, standing in for
# patch/external-ui-apis) is conflicted with main (specs/PHILOSOPHY.md), so
# its CI signal comes from push-event runs on the branch head instead —
# same workflow, same tree; checks attach to the head commit and surface on
# the PR. Drop that branch from this list once its PR is mergeable again or
# the patch completes. (Same channel sdg/initial-build used, kept for
# history.)
push:
branches: [main, sdg/initial-build]
branches: [main, sdg/initial-build, claude/xspec-ui-apis-4df8fa]
workflow_dispatch:

concurrency:
Expand All @@ -51,7 +64,7 @@ jobs:
run: npm run typecheck
- name: Build the product
run: npm run build
- name: Run harness self-tests and certification (network disabled)
- name: Run harness self-tests and certification (network disabled, unprivileged)
run: bash .github/scripts/run-without-network.sh npm run test:self

suite-linux:
Expand All @@ -67,17 +80,28 @@ jobs:
- run: npm ci
- name: Build the product
run: npm run build
- name: Run the full suite (network disabled after setup, E-1)
- name: Run the full suite (network disabled after setup, unprivileged, E-1)
run: bash .github/scripts/run-without-network.sh npm test
env:
XSPEC_E6_EXCHANGE_DIR: ${{ github.workspace }}/.e6-exchange
- name: Upload E-6 exchange outputs for the Windows leg
# No files exist until the harness writes the representative fixture's
# outputs into XSPEC_E6_EXCHANGE_DIR on this leg. The exchange lives
# in a dot-directory, which upload-artifact v4 excludes by default
# (include-hidden-files: false since v4.4) — without the override the
# written exchange uploads as nothing and the Windows comparison
# fails loudly on a missing manifest (E-6, H-9).
# Runs regardless of the suite step's verdict (a step without `if:` is
# skipped once an earlier step fails), so an exchange written by the
# passing E-6 writer test (test/suite/e6-exchange-writer.test.ts)
# always reaches the Windows leg even while unrelated Linux product
# tests are red — the Phase 9 red-green period included. `!cancelled()`
# rather than `always()`: a cancelled job uploads nothing. The Windows
# byte-identity test still fails loudly (H-9) exactly when no exchange
# was written — never because some other Linux test failed. No files
# exist until the harness writes the representative fixture's outputs
# into XSPEC_E6_EXCHANGE_DIR on this leg; `if-no-files-found: ignore`
# keeps this step harmless when the suite step never ran or the writer
# test wrote nothing. The exchange lives in a dot-directory, which
# upload-artifact v4 excludes by default (include-hidden-files: false
# since v4.4) — without the override the written exchange uploads as
# nothing and the Windows comparison fails loudly on a missing
# manifest (E-6, H-9).
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v4
with:
name: e6-linux-outputs
Expand All @@ -103,9 +127,12 @@ jobs:
- name: Build the product
run: npm run build
- name: Download E-6 exchange outputs from the Linux leg
# The artifact does not exist until the Linux leg produces outputs; the
# harness's E-6 comparison must itself fail loudly when the exchange
# directory is missing while the product exists.
# The artifact is absent only when the Linux job produced no exchange
# (it died before its suite step, or the E-6 writer test itself did not
# complete) — its upload step runs whenever that job is not cancelled,
# red product tests notwithstanding. The harness's E-6 comparison must
# itself fail loudly when the exchange directory is missing while the
# product exists.
continue-on-error: true
uses: actions/download-artifact@v4
with:
Expand Down
Loading
Loading