Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
325 commits
Select commit Hold shift + click to select a range
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
2a618eb
sdg(phase-4): pin 14.20's expression production and parameters; TypeS…
claude Sep 17, 2026
38a6e55
sdg(phase-4): constructors are member units; cross-module text calls …
claude Sep 17, 2026
8a1f126
sdg(phase-4): condition 11 needs a resolving argument and names the c…
liamcardenas Sep 17, 2026
f88e4ec
sdg(phase-4): a call through a colliding `text` identifier is no `tex…
claude Sep 17, 2026
8b63f71
sdg(phase-4): condition 11 names no identity over an invalid path; le…
claude Sep 17, 2026
5e1eacc
sdg(phase-6): re-align section 2 tests with the well-formedness delta
claude Sep 17, 2026
3cd8197
sdg(phase-6): re-align sections 1.7, 3, 4, and 5.7 with the delta
claude Sep 17, 2026
09fe293
sdg(phase-6): re-align sections 11, 12.7, 14, and 16 with the delta; …
claude Sep 17, 2026
69440fb
sdg(phase-6): stage the export-naming-no-declaration early error and …
claude Sep 17, 2026
3c5b757
sdg(phase-6): pin the Optional twins; close review round 2 of the rev…
claude Sep 17, 2026
41084e1
sdg(phase-6): reword T2.7-4's excluded-code-point aside; pin the carr…
claude Sep 17, 2026
f7986eb
sdg(phase-7): bring CERTIFICATIONS.md up to date with the well-formed…
claude Sep 17, 2026
16b1514
sdg(phase-9): T13.5-1 pins `build --test-hold --json` consuming `--js…
claude Sep 17, 2026
d9c899b
sdg(phase-9): T13.3-2 pins the absent record staying absent after a r…
claude Sep 17, 2026
aa92620
sdg(phase-9): T14-2 pins the escape-spelled `d` literal and marker as…
claude Sep 17, 2026
c8b151d
sdg(phase-9): T1.4-1 and T1.4-4 stage the 1.4 quote, escape, referenc…
claude Sep 17, 2026
d0b28d9
sdg(phase-9): P-1 draws the escape and character-reference characters…
claude Sep 17, 2026
2e33b5e
sdg(phase-9): T1.5-2 and T11.5-3 stage the U+FFFD-pathed source on bo…
claude Sep 17, 2026
af61e83
sdg(phase-9): record Task 20 as landed in FIX_PLAN.md and the stand-i…
claude Sep 17, 2026
697674d
sdg(phase-9): T2.1-2 and T4-2 stage lexical specifier resolution with…
claude Sep 17, 2026
532f8ad
sdg(phase-9): share `findingsInSourceOrder` through support.ts and ex…
claude Sep 17, 2026
748c5c0
sdg(phase-9): register T2.4-5 (verbatim literals) — every static stri…
claude Sep 17, 2026
a59daa5
sdg(phase-9): T2.5-3 stages the escape- and reference-spelled coverag…
claude Sep 17, 2026
33b9e85
sdg(phase-9): record Task 23 as landed in FIX_PLAN.md
claude Sep 17, 2026
a958143
sdg(phase-9): T2.7-1 stages a section spelled inside an expression co…
claude Sep 17, 2026
f1ffc0c
sdg(phase-9): record Task 24 as landed in FIX_PLAN.md
claude Sep 17, 2026
cae9019
sdg(phase-9): T3-3 stages the multi-line opening tag's merged lines a…
claude Sep 17, 2026
e367c9c
sdg(phase-9): note in AGENTS.md how to check a staged MDX shape again…
claude Sep 17, 2026
743cae8
sdg(phase-6): T3-3 well-formed multi-line tag arms; pin T6.2-3/P-5/S-…
claude Sep 17, 2026
a048b9f
sdg(phase-4): resolve 6.2/6.5 move contradiction: refused-invalid-rew…
claude Sep 17, 2026
eb22c7b
sdg(phase-4): 6.2/6.5: draw the U+000B/U+000C boundary by grammar whi…
claude Sep 17, 2026
d43aae8
sdg(phase-4): 6.5/6.4/14: judge moved-text spellings from the target …
claude Sep 17, 2026
3fc96ba
sdg(phase-4): 6.5: fix the composition of coincident edits; additions…
claude Sep 17, 2026
565f80c
sdg(phase-4): 6.5: judge joint import removals over the block; keep i…
claude Sep 17, 2026
eef9fba
sdg(phase-4): 6.5/14: refuse a moved text holding an import; name ref…
claude Sep 17, 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