Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
993 commits
Select commit Hold shift + click to select a range
ded6110
sdg(phase-10): land Task 79 in the plan; record its probe and runs
claude Sep 29, 2026
766b1da
sdg(phase-10): judge a recorded derived path by the read side of 13.4…
claude Sep 29, 2026
7e3ba81
sdg(phase-10): land Task 80 in the plan; record its probe and runs
claude Sep 29, 2026
0a1efda
sdg(phase-10): record Task 80's full-suite run
claude Sep 29, 2026
e85aee0
sdg(phase-10): report an obstructed write path beside source and jour…
claude Sep 29, 2026
5343900
sdg(phase-10): land Task 81 in the plan; record its probe and runs
claude Sep 29, 2026
1380e60
sdg(phase-10): read a d value and an embedding as the expression MDX …
claude Sep 29, 2026
4b62dce
sdg(phase-10): land Task 87 in the plan; record its probe and runs
claude Sep 29, 2026
ed3fff0
sdg(phase-10): report a text binding passed to a text(...) call once,…
claude Sep 29, 2026
439ba98
sdg(phase-10): record Task 88's full-suite run
claude Sep 29, 2026
8a0da01
sdg(phase-10): put an append to an unterminated journal on a line of …
claude Sep 29, 2026
8f5660d
sdg(phase-10): record Task 89's full-suite run
claude Sep 29, 2026
c62f451
sdg(phase-10): confirm the full suite and CI green; delete the exhaus…
claude Sep 29, 2026
9d095d9
sdg(phase-10): record CI on the Task 54 commit; widen the CI run timing
claude Sep 29, 2026
f1f74b4
sdg(phase-4): bar quote, backslash, CR, and LF from spec-source paths…
claude Sep 29, 2026
61ee56e
sdg(phase-4): close the list of TypeScript module-linking forms (C4)
claude Sep 29, 2026
1664f15
sdg(phase-4): refuse moves that change emit-destination judgements (C2)
claude Sep 29, 2026
9e69f87
sdg(phase-4): render 6.5's refusal conditions as a list, one reason e…
claude Sep 29, 2026
e1d93c4
sdg(phase-4): name string-named module declarations exactly (C4 follo…
claude Sep 29, 2026
a4f9d4c
sdg(phase-4): stop 12.0 claiming discovered paths carry no backslash …
claude Sep 29, 2026
27db838
sdg(phase-4): refuse moves whose new paths collide with regenerated p…
claude Sep 29, 2026
a4b6396
sdg(phase-4): scope 4.5's type-level sentence to binding references (O2)
claude Sep 29, 2026
7f04726
sdg(phase-4): close round 2 of the SPEC-PROBLEMS refinement (applied …
claude Sep 29, 2026
85a2172
sdg(phase-4): refuse derived paths above sources or other derived pat…
claude Sep 29, 2026
f275680
sdg(phase-4): close round 3 of the SPEC-PROBLEMS refinement (applied …
claude Sep 29, 2026
22573b9
sdg(phase-4): bar markdown.outDir inside the graph-data area (C1)
claude Sep 29, 2026
05a4918
sdg(phase-4): leave rebuild-obstructing orphans to manual deletion; s…
claude Sep 29, 2026
cbf6907
sdg(phase-4): close round 4 of the SPEC-PROBLEMS refinement (applied …
claude Sep 29, 2026
7a7d372
sdg(phase-4): bar U+2028/U+2029 from spec paths and ID segments; exem…
claude Sep 29, 2026
f9fb8ab
sdg(phase-4): close round 5 of the SPEC-PROBLEMS refinement (applied …
claude Sep 29, 2026
a190dd3
sdg(phase-4): fix TypeScript's language level, define valid TypeScrip…
claude Sep 29, 2026
19ebd8e
sdg(phase-4): pin 14.20's TypeScript grammar at release 5.9.3; restat…
claude Sep 29, 2026
e22816c
sdg(phase-4): bound an added import's identifier and offset so it cap…
claude Sep 29, 2026
26e29fe
sdg(phase-4): count using declarations as variable declarations; bar …
claude Sep 29, 2026
06a48c3
sdg(phase-4): added imports bind only strict-module names and follow …
claude Sep 29, 2026
90e7e59
sdg(phase-4): bar names TypeScript's compilation reserves, declares, …
claude Sep 29, 2026
fc64d26
sdg(phase-4): root TypeScript spellings only at timely bindings; bar …
claude Sep 29, 2026
a63ce11
sdg(phase-4): match a JSX pragma's name regardless of ASCII case in 6…
claude Sep 29, 2026
2c22d08
sdg(phase-6): bar U+2028/U+2029 in segment and tag tests; test 1.4's …
claude Sep 29, 2026
11d1d8e
sdg(phase-6): test using declarations, every module-linking form, con…
claude Sep 29, 2026
6b01b13
sdg(phase-6): test 7.1's spec-path character bar, its move refusal, a…
claude Sep 29, 2026
779dbb6
sdg(phase-6): test 14.22's second relation, rebuild-obstructing orpha…
claude Sep 29, 2026
ff3d902
sdg(phase-6): test 6.5's derived-path destination refusals and refuse…
claude Sep 29, 2026
86c1e0e
sdg(phase-6): test 6.5's barred and captured names for added imports …
claude Sep 29, 2026
4772637
sdg(phase-6): test 6.5's TypeScript placement and timeliness; pin the…
claude Sep 29, 2026
99c858e
sdg(phase-6): extend S-9 to TypeScript fixtures under 14.20's 5.9.3 p…
claude Sep 29, 2026
b6633ea
sdg(phase-6): name every addition test in T6.5-22(a); align T6.5-10(c…
claude Sep 29, 2026
9992151
sdg(phase-6): log SPEC 6.5's undecided statement-end reading for adde…
claude Sep 29, 2026
f31e100
sdg(phase-4): 6.5: judge a TypeScript source's prologue and statement…
claude Sep 29, 2026
b5e6876
sdg(phase-6): set IP 0001's Stage to Applied (Phase 6 start stage)
claude Oct 1, 2026
832ba26
sdg(phase-6): T6.5-22 and P-5 assert Annex B's escape/unescape barred…
claude Oct 1, 2026
1ad88fa
sdg(phase-6): T6.5-23 tests the removed declaration's place, the prol…
claude Oct 1, 2026
9a7be43
sdg(phase-6): T1.4-5(c) and T6.4-2 judge identifiers at TypeScript 5.…
claude Oct 1, 2026
3936ed1
sdg(phase-6): close round 1 of the TEST-SPEC revisit for SPEC f31e100…
claude Oct 1, 2026
2104863
sdg(phase-6): T6.5-23(k) gains its control re-rooting a callee and an…
claude Oct 1, 2026
9d5ac65
sdg(phase-6): T13.4-11(e) removes nothing below a symbolic-link direc…
claude Oct 1, 2026
9aff6b0
sdg(phase-6): T6.5-22(a) defines what counts as a reference; (b) adds…
claude Oct 1, 2026
0703298
sdg(phase-6): T6.5-20 repeats each refused staging of (b)-(d) under t…
claude Oct 1, 2026
e613c38
sdg(phase-6): close round 2 of the TEST-SPEC revisit for SPEC f31e100
claude Oct 1, 2026
b8ae4e7
sdg(phase-6): T6.5-23(d) stages U+00A0 and U+2028 after a statement's…
claude Oct 1, 2026
170ac72
sdg(phase-6): derived paths above a code source alone, on the build s…
claude Oct 1, 2026
f4c6786
sdg(phase-6): T13.4-11(a) leaves the graph-data unit form unasserted;…
claude Oct 1, 2026
4167e10
sdg(phase-6): close round 3 of the TEST-SPEC revisit for SPEC f31e100
claude Oct 1, 2026
66b364d
sdg(phase-6): T6.5-1 rewrites file-move specifiers in import declarat…
claude Oct 1, 2026
c1b5dd6
sdg(phase-6): T6.5-18 never roots a rewritten spelling at a type-only…
claude Oct 1, 2026
d900bd4
sdg(phase-6): pin the spec glob behind T6.5-4's nested barred-charact…
claude Oct 1, 2026
a55f863
sdg(phase-6): S-9 judges MDX identifier and JSX-name characters at Un…
claude Oct 1, 2026
f119d22
sdg(phase-6): T6.5-23(l) times one added binding against every spelli…
claude Oct 1, 2026
b3b2b92
sdg(phase-6): T1.4-5(a) compiles its consumer at TypeScript 5.9.3; T6…
claude Oct 1, 2026
d9c16d2
sdg(phase-6): smooth the wording of T6.5-4's glob pins (I1)
claude Oct 1, 2026
d1d5e47
sdg(phase-6): close round 4 of the TEST-SPEC revisit for SPEC f31e100
claude Oct 1, 2026
0b77ccc
sdg(phase-6): T6.4-3 and T6.5-4 refuse new IDs carrying 1.4's quote-a…
claude Oct 1, 2026
b8dba94
sdg(phase-6): T6.5-20(d) stages the designation refusal once per modu…
claude Oct 1, 2026
4fe85a6
sdg(phase-6): restate T6.5-13(k)'s rationale against today's arms (O1)
claude Oct 1, 2026
a34a775
sdg(phase-6): T6.5-23 gains arm (m) and the exempt side of (f)'s impo…
claude Oct 1, 2026
0051d4b
sdg(phase-6): S-6 self-tests T6.5-22(a)'s name analysis on fixed vect…
claude Oct 1, 2026
2ddf121
sdg(phase-6): T13.4-9 and T6.5-20 stage the companion leg of the deri…
claude Oct 1, 2026
256e090
sdg(phase-6): T6.5-9's compile reaches the value-level lures, T6.5-22…
claude Oct 1, 2026
d05dba3
sdg(phase-6): T12.2-4(b) expects one condition-10 finding per orphane…
claude Oct 1, 2026
bedf07a
sdg(phase-6): T6.5-22(b) gains a fixed yield lure (O3)
claude Oct 1, 2026
caf07d2
sdg(phase-6): T11.6-2 and T7-6 cover invalid .mdx sources' derived pa…
claude Oct 1, 2026
3cf2c21
sdg(phase-6): T6.5-23(n) stages nested statement lists; T6.5-11(a) na…
claude Oct 1, 2026
50d12f3
sdg(phase-6): T14-12 pins TypeScript's language level and the release…
claude Oct 1, 2026
d8ea4ae
sdg(phase-6): T13.4-9(f) and T6.5-20(a) stage the two obstruction rel…
claude Oct 1, 2026
0db6760
sdg(phase-6): T6.5-23(f) re-roots at a held binding that precedes the…
claude Oct 1, 2026
ed87f4b
sdg(phase-6): T6.5-23(o) re-roots a spec source's reference at a held…
claude Oct 1, 2026
f5de29f
sdg(phase-6): T6.5-22 spells out clause 19's function properties; S-6…
claude Oct 1, 2026
045e523
sdg(phase-6): T6.5-20(e) stages the derived paths a file-form move re…
claude Oct 1, 2026
ab0c329
sdg(phase-6): template-literal arms in T4-2, T4.5-3, T4.3-2 and T6.5-…
claude Oct 1, 2026
ee6ab9b
sdg(phase-6): T2.4-5 stages the escaped segment in MDX and the escape…
claude Oct 1, 2026
9112dea
sdg(phase-6): terminator-kind arms in T6.5-2, T6.5-7, T6.5-8 and E-6 …
claude Oct 1, 2026
7c8471d
sdg(phase-6): S-6's name-analysis vectors cover every barred class (O1)
claude Oct 1, 2026
cd8e54f
sdg(phase-6): T6.5-23's preamble names each staging's gained declarat…
claude Oct 2, 2026
d26d689
sdg(phase-6): T6.5-23(p) stages whitespace between a statement's end …
claude Oct 2, 2026
3a92284
sdg(phase-6): T6.5-20(a) and T6.5-21 name what they mean, not what is…
claude Oct 2, 2026
d83c362
sdg(phase-6): T13.4-11(f) stages a recorded path holding no occupant …
claude Oct 2, 2026
d960ac8
sdg(phase-6): brace whitespace takes Unicode 15.1's space separators …
claude Oct 2, 2026
dd3a71d
sdg(phase-6): T6.5-11(e)/(f) stage a held `text` binding beside a lac…
claude Oct 2, 2026
4e49140
sdg(phase-6): T6.5-18 stages the callee side of shadow-aware rooting …
claude Oct 2, 2026
5359d3f
sdg(phase-6): T14-12 stages TypeScript 5.9.3's own whitespace in a co…
claude Oct 2, 2026
4f4e3b7
sdg(phase-6): record round-13 review of TEST-SPEC.md
claude Oct 2, 2026
6780f53
sdg(phase-6): close round 13 of the TEST-SPEC refinement (HALT by esc…
claude Oct 2, 2026
08946ff
sdg(phase-7): CONF-VALID: bar U+2028/U+2029 in the contract list; nar…
claude Oct 2, 2026
daa38d6
sdg(phase-7): CONF-MD: admit every Unicode 15.1 space separator P-2 n…
claude Oct 2, 2026
dc2f163
sdg(phase-7): CONF-DISC: admit T7-4's literal-backslash code-group ar…
claude Oct 2, 2026
e80cca9
sdg(phase-7): keep CONF-AVAIL's paths valid under 7.1, describe S-9's…
claude Oct 2, 2026
1662e2e
sdg(phase-7): Exclusions: account for T1.4-5, T6.5-22, T6.5-23, and t…
claude Oct 2, 2026
4a724e1
sdg(phase-7): Exclusions: account for T6.5-20, T6.5-21, T13.4-9 throu…
claude Oct 2, 2026
ebc267a
sdg(phase-7): Exclusions: state T13.4-11's self-protecting stagings a…
claude Oct 2, 2026
4bfe394
sdg(phase-7): Exclusions: separate the well-formedness bullet's offse…
claude Oct 2, 2026
6c0ee0c
sdg(phase-7): CONF-DISC scope wording and code-source exclusions; one…
claude Oct 2, 2026
2c3e6a9
sdg(phase-7): certify T13.4-11 through CONF-ORPHAN and VIOL-ORPHAN-TH…
claude Oct 2, 2026
6af8def
sdg(phase-7): certify T13.4-11(c) through VIOL-ORPHAN-LINKTARGET; acc…
claude Oct 2, 2026
5d986f5
sdg(phase-7): VIOL-ORPHAN-THROUGHLINK names 13.4's removal clause; CO…
claude Oct 2, 2026
22f8c69
sdg(phase-7): CONF-VALID names its joint certification and its residu…
claude Oct 2, 2026
e77332e
sdg(phase-7): VIOL-ORPHAN-THROUGHLINK follows links to directories in…
claude Oct 2, 2026
301f2f9
sdg(phase-7): CONF-DISC's 14.19 clause binds spec-group matches; CONF…
claude Oct 2, 2026
eb8ed4f
sdg(phase-8): pin TypeScript at 5.9.3 and give the harness its own co…
claude Oct 2, 2026
f0d3cd9
sdg(phase-9): plan the re-descent's harness work from the first compl…
claude Oct 2, 2026
5b0903d
sdg(phase-9): pin the C-1 gate at 6 conformers and 21 violators
claude Oct 2, 2026
df14d76
sdg(phase-9): make U+00A0 and U+0085 T1.4-2's only valid boundaries
claude Oct 2, 2026
6476c04
sdg(phase-9): bar U+2028 and U+2029 in CONF-VALID and P-1's oracle
claude Oct 2, 2026
6aef60a
sdg(phase-9): add U+2028 and U+2029 arms to T1.4-1 and T1.4-4
claude Oct 2, 2026
18d1097
sdg(phase-9): add the VIOL-VALID-SEP violator and wire it into the ma…
claude Oct 2, 2026
429aa54
sdg(phase-9): register T13.4-11 and share its link staging with T13.4-4
claude Oct 2, 2026
01c0873
sdg(phase-9): add the CONF-ORPHAN conformer and its manifest entry
claude Oct 2, 2026
8ea2d39
sdg(phase-9): add the VIOL-ORPHAN-THROUGHLINK violator and wire it in…
claude Oct 2, 2026
222cc47
sdg(phase-9): add the VIOL-ORPHAN-LINKTARGET violator and wire it int…
claude Oct 2, 2026
c929d7f
sdg(phase-9): close FIX_PLAN Task 9 with the C-1 gate green; record t…
claude Oct 2, 2026
89195eb
sdg(phase-9): bring the CONF-DISC conformer to its current scope (FIX…
claude Oct 2, 2026
6dae5d7
sdg(phase-9): add T7-4's Linux-leg literal-backslash arm (FIX_PLAN Ta…
claude Oct 2, 2026
9cedede
sdg(phase-9): add T7-6's invalid-source arm and its control (FIX_PLAN…
claude Oct 2, 2026
bb19b53
sdg(phase-9): add refused-exposed-derived-file to the refusal vocabul…
claude Oct 2, 2026
1d16b45
sdg(phase-9): add S-9's TypeScript judge and its fixed vectors (FIX_P…
claude Oct 2, 2026
3f43daa
sdg(phase-9): judge staged code sources and configurations with S-9's…
claude Oct 2, 2026
dc97774
sdg(phase-9): add S-9's TypeScript staged-source records; convert §1 …
claude Oct 2, 2026
2909dfb
sdg(phase-9): split FIX_PLAN Task 16 into Tasks 16b–16o; record the T…
claude Oct 2, 2026
820bb8a
sdg(phase-9): convert §2 and §3 stagings to TypeScript records (FIX_P…
claude Oct 2, 2026
85b5ce4
sdg(phase-9): convert section-4.ts stagings to TypeScript records (FI…
claude Oct 2, 2026
346e7da
sdg(phase-9): convert §4.3–§4.6 stagings to TypeScript records (FIX_P…
claude Oct 2, 2026
c6bd3c4
sdg(phase-9): convert §5 and §6.1–§6.4 stagings to TypeScript records…
claude Oct 2, 2026
4716158
sdg(phase-9): convert §6.5–§6.7 stagings to TypeScript records (FIX_P…
claude Oct 2, 2026
c21f3b0
sdg(phase-9): convert section-7-basics stagings to TypeScript records…
claude Oct 2, 2026
8d0ab2a
sdg(phase-9): record Task 16g's counts and remove it from the plan (F…
claude Oct 2, 2026
fda477c
sdg(phase-9): convert section-7-discovery and section-7.1-7.3 staging…
claude Oct 2, 2026
cd3e9a6
sdg(phase-9): record Task 16h's counts and remove it from the plan (F…
claude Oct 2, 2026
8d2fef3
sdg(phase-9): convert section-7.4-7.5 stagings to TypeScript records …
claude Oct 2, 2026
2295baa
sdg(phase-9): record Task 16i's counts and remove it from the plan (F…
claude Oct 2, 2026
1013543
sdg(phase-9): convert §8–§10 stagings to TypeScript records (FIX_PLAN…
claude Oct 2, 2026
4c4c279
sdg(phase-9): record Task 16j's counts and remove it from the plan (F…
claude Oct 2, 2026
10494d5
sdg(phase-9): convert §11 and §12.0 stagings to TypeScript records (F…
claude Oct 2, 2026
1843dac
sdg(phase-9): record Task 16k's counts and remove it from the plan (F…
claude Oct 2, 2026
883b0e4
sdg(phase-9): convert §12.1–§13 stagings to TypeScript records (FIX_P…
claude Oct 2, 2026
9df8ff2
sdg(phase-9): record Task 16l's counts and remove it from the plan (F…
claude Oct 2, 2026
ea81c11
sdg(phase-9): convert §14 stagings to TypeScript records (FIX_PLAN Ta…
claude Oct 2, 2026
e330def
sdg(phase-9): record Task 16m's counts and remove it from the plan (F…
claude Oct 2, 2026
361ad3c
sdg(phase-9): convert the §16 properties' fixed files to TypeScript r…
claude Oct 2, 2026
e2bf58d
sdg(phase-9): record Task 16n's counts and remove it from the plan (F…
claude Oct 2, 2026
d3c5755
sdg(phase-9): extend the undeclared-staging guard to code sources and…
claude Oct 2, 2026
0f46684
sdg(phase-9): confirm the guard's TypeScript arm on the full suite; r…
claude Oct 2, 2026
9201494
sdg(phase-9): judge S-9's MDX identifier characters and space separat…
claude Oct 2, 2026
9401e86
sdg(phase-9): confirm S-9's Unicode 15.1 judgement on the full suite;…
claude Oct 2, 2026
8e10079
sdg(phase-9): add S-6's name analysis behind T6.5-22(a) and its fixed…
claude Oct 2, 2026
f7d0cec
sdg(phase-9): hold every performed move's added imports to T6.5-22(a)…
claude Oct 2, 2026
a40ce14
sdg(phase-9): record the full suite's timing and verdicts with T6.5-2…
claude Oct 2, 2026
6a825ce
sdg(phase-9): map T11.2-4 to passage "14" in the H-7 map (FIX_PLAN Ta…
claude Oct 2, 2026
a8e427d
sdg(phase-9): register T1.4-5, identifier by characters (FIX_PLAN Tas…
claude Oct 2, 2026
756cf7f
sdg(phase-9): red-check T1.4-5 and close FIX_PLAN Task 21
claude Oct 2, 2026
87ca64d
sdg(phase-9): add the using and await using unit arms to T1.7-2 and T…
claude Oct 2, 2026
6b55052
sdg(phase-9): add T2.4-1's reserved-word arm and T2.4-5's MDX segment…
claude Oct 2, 2026
807470e
sdg(phase-9): close FIX_PLAN Task 23 and record the self project's count
claude Oct 2, 2026
50264f4
sdg(phase-9): add T2.7-4's Unicode 15.1 space-separator comment arms …
claude Oct 2, 2026
0ce8fa3
sdg(phase-9): close FIX_PLAN Task 24 and record T2.7-4's run facts
claude Oct 2, 2026
b51fc52
sdg(phase-9): add T4-2's import-type, string-named module declaration…
claude Oct 2, 2026
8d5071b
sdg(phase-9): add T4.3-2's template-literal arm and restage T4.5-3's …
claude Oct 2, 2026
29950f5
sdg(phase-9): add T4.5-4's using/await-using shadowing arms and T4.5-…
claude Oct 2, 2026
806c7b2
sdg(phase-9): close FIX_PLAN Task 27 and record T4.5-4/T4.5-8's run f…
claude Oct 2, 2026
b6934f8
sdg(phase-9): add T5.7-2's U+3000/U+202F token-bound arm (FIX_PLAN Ta…
claude Oct 2, 2026
6d4af36
sdg(phase-9): add T6.4-2's five keepable-form rename arms (FIX_PLAN T…
claude Oct 2, 2026
d982bf3
sdg(phase-9): add T6.4-3's six barred-character <new-id> arms (FIX_PL…
claude Oct 2, 2026
ff3a2f1
sdg(phase-9): add T6.5-1's five-declaration specifier arm (FIX_PLAN T…
claude Oct 2, 2026
41693a1
sdg(phase-9): add T6.5-2's CRLF and lone-CR terminator-kind arms (FIX…
claude Oct 2, 2026
ee629b4
sdg(phase-9): add T6.5-4's barred-character <new-id> and destination-…
claude Oct 2, 2026
4d9d688
sdg(phase-9): add T6.5-7's CRLF and lone-CR re-runs (FIX_PLAN Task 34)
claude Oct 2, 2026
8dbc4a1
sdg(phase-9): judge added-import line starts by SPEC 3's terminators;…
claude Oct 2, 2026
73437a4
sdg(phase-9): restage T6.5-8's arms and add their CRLF and lone-CR re…
claude Oct 2, 2026
e41b976
sdg(phase-9): restage T6.5-9's code arm on T6.5-8's TS arm and confin…
claude Oct 2, 2026
aa23da9
sdg(phase-9): restage T6.5-11's arms (a) and (b), pin their placement…
claude Oct 2, 2026
1f2de48
sdg(phase-9): restage T6.5-18 with T's import first and add its type-…
claude Oct 2, 2026
2d256dd
sdg(phase-9): register T6.5-20 arms (a) and (b) with T6.6-3's preview…
claude Oct 3, 2026
84aed31
sdg(phase-9): add T6.5-20 arm (c), its performed exemption, and T6.6-…
claude Oct 3, 2026
708166d
sdg(phase-9): add T6.5-20 arms (d) and (e) with T6.6-3's twins (FIX_P…
claude Oct 3, 2026
1722e38
sdg(phase-9): register T6.5-21 with T6.6-3's preview twins (FIX_PLAN …
claude Oct 3, 2026
51217bb
sdg(phase-9): finish FIX_PLAN Task 42 — T6.5-21 checks, AGENTS.md, plan
claude Oct 3, 2026
a3c2eae
sdg(phase-9): register T6.5-22 with its (b) lures (FIX_PLAN Task 43)
claude Oct 3, 2026
0f12298
sdg(phase-9): finish FIX_PLAN Task 43 — T6.5-22 checks, AGENTS.md, plan
claude Oct 3, 2026
6962dd1
sdg(phase-9): register T6.5-23 arms (a)-(e) (FIX_PLAN Task 44)
claude Oct 3, 2026
2c40552
sdg(phase-9): finish FIX_PLAN Task 44 — T6.5-23 recipe, AGENTS.md, plan
claude Oct 3, 2026
0fc515a
sdg(phase-9): register T6.5-23 arms (f) and (g) (FIX_PLAN Task 45)
claude Oct 3, 2026
68763c2
sdg(phase-9): finish FIX_PLAN Task 45 — T6.5-23 (f)/(g) checks, AGENT…
claude Oct 3, 2026
3e0a367
sdg(phase-9): register T6.5-23 arms (h)-(k) (FIX_PLAN Task 46)
claude Oct 3, 2026
8c7f485
sdg(phase-9): finish FIX_PLAN Task 46 — T6.5-23 (h)-(k) checks, AGENT…
claude Oct 3, 2026
bedaef2
sdg(phase-9): register T6.5-23 arms (l)-(p) (FIX_PLAN Task 47)
claude Oct 3, 2026
e8c797e
sdg(phase-9): finish FIX_PLAN Task 47 - T6.5-23 (l)-(p) checks, AGENT…
claude Oct 3, 2026
08b2448
sdg(phase-9): add T7-2's four import-modifier arms (FIX_PLAN Task 48)
claude Oct 3, 2026
bbc8404
sdg(phase-9): add T7.1-1's path-character arms and code-source contro…
claude Oct 3, 2026
8ae9a63
sdg(phase-9): finish FIX_PLAN Task 49 - T7.1-1 results, AGENTS.md, plan
claude Oct 3, 2026
6300bb7
sdg(phase-9): add T7.3-1's graph-data-area outDir arms and look-alike…
claude Oct 3, 2026
a4ec419
sdg(phase-9): finish FIX_PLAN Task 50 - T7.3-1 results, AGENTS.md, plan
claude Oct 3, 2026
7a78790
sdg(phase-9): T11.6-2 invalid-path .mdx derived-map arms (FIX_PLAN Ta…
claude Oct 3, 2026
bee609d
sdg(phase-9): finish FIX_PLAN Task 51 - T11.6-2 results, AGENTS.md, plan
claude Oct 3, 2026
feabdb9
sdg(phase-9): T12.0-5 positive side of the backslash (FIX_PLAN Task 52)
claude Oct 3, 2026
2b15f07
sdg(phase-9): finish FIX_PLAN Task 52 - T12.0-5 results, AGENTS.md, plan
claude Oct 3, 2026
844e724
sdg(phase-9): T12.0-10 U+2028 --tag and U+2029 --to syntax rows (FIX_…
claude Oct 3, 2026
e9d9fb9
sdg(phase-9): T12.2-4 (b) orphan set read from the record (FIX_PLAN T…
claude Oct 3, 2026
1b62bc8
sdg(phase-9): T12.7-2 two-reason file move order (FIX_PLAN Task 55)
claude Oct 3, 2026
c7cfec2
sdg(phase-9): T13.4-4 directory-occupant arms (FIX_PLAN Task 56)
claude Oct 3, 2026
6cf5656
sdg(phase-9): register T13.4-9 derived-path relation (FIX_PLAN Task 57)
claude Oct 3, 2026
dd68bfe
sdg(phase-9): register T13.4-10 rebuild-obstructing orphans (FIX_PLAN…
claude Oct 3, 2026
1f76b26
sdg(phase-9): T14-7 re-asserts T6.5-20/T6.5-21 refusals and T6.5-4's …
claude Oct 3, 2026
d181f39
sdg(phase-9): T14-11 widens arm (r) and adds arm (x)'s 14.15 module-l…
claude Oct 3, 2026
3f2eafc
sdg(phase-9): close FIX_PLAN Task 60 (T14-11 arm (r) widened, arm (x)…
claude Oct 3, 2026
0691fd7
sdg(phase-9): T14-12 gains the release-pin, language-level, U+1C89, w…
claude Oct 3, 2026
e04d435
sdg(phase-9): close FIX_PLAN Task 61 (T14-12's re-descent arms); reco…
claude Oct 3, 2026
415ca1c
sdg(phase-9): name T14-12's new arms in two enumerating comments (FIX…
claude Oct 3, 2026
0fc6485
sdg(phase-9): P-2 draws brace-side whitespace from its full set (FIX_…
claude Oct 3, 2026
d214ebc
sdg(phase-9): draw P-5's spec basenames from 6.5's barred classes and…
claude Oct 3, 2026
3a27856
sdg(phase-9): judge each draw's code sources and configuration before…
claude Oct 3, 2026
0408365
sdg(phase-9): confirm S-9's TypeScript check for generated forms on t…
claude Oct 3, 2026
a84033e
sdg(phase-9): E-6 fixture gains a journaled section-form move into an…
claude Oct 3, 2026
f8e031e
sdg(phase-9): close FIX_PLAN Task 65 (E-6's section-form move) after …
claude Oct 3, 2026
44c5dad
sdg(phase-9): confirm the self project, the suite, and CI at the re-d…
claude Oct 3, 2026
857e51a
sdg(phase-9): plan iteration 82's harness work from the second compli…
claude Oct 3, 2026
6428348
sdg(phase-9): CONF-MD's query node reports its contains edges; P-3 ta…
claude Oct 3, 2026
4a30a2f
sdg(phase-9): an exhausted capture limit in P-8 or P-11 is a harness …
claude Oct 3, 2026
cd11b34
sdg(phase-9): every conversion of a driver rejection lets an exhauste…
claude Oct 3, 2026
bc6e553
sdg(phase-9): record Task 2b's results and remove it from the plan (F…
claude Oct 3, 2026
6446cef
sdg(phase-9): S-9 judges a spec-group file not named .mdx once its st…
claude Oct 3, 2026
2641ef0
sdg(phase-9): declare the suite's three non-.mdx spec-group files wel…
claude Oct 3, 2026
5035310
sdg(phase-9): T4.3-2's dynamic node-form arms assert no edge and no o…
claude Oct 3, 2026
6d5d2bd
sdg(phase-9): every T4.5-3 arm asserts no edge and no occurrence (FIX…
claude Oct 3, 2026
3df3857
sdg(phase-9): T4.5-3 stages TEST-SPEC's optional-chaining spelling SP…
claude Oct 3, 2026
6afffd5
sdg(phase-9): T5.5-2 restages its kind-distinction arm in-line (FIX_P…
claude Oct 3, 2026
79262e6
sdg(phase-9): extract T13.4-10's manual-deletion matcher into a pure …
claude Oct 3, 2026
ddb647b
sdg(phase-9): T13.4-10 matches the manual-deletion correction for its…
claude Oct 3, 2026
4d57d4e
sdg(phase-9): guard P-8's own fixed-seed draws: the 2048 floor and ev…
claude Oct 3, 2026
28d0590
sdg(phase-9): P-8 sweeps the read surfaces, the JSON-only rule by sur…
claude Oct 3, 2026
128b82c
sdg(phase-9): P-8 sweeps the review session and item surfaces as comp…
claude Oct 3, 2026
79d2013
sdg(phase-9): P-8 sweeps the previews and the section form of move (F…
claude Oct 3, 2026
2649480
sdg(phase-9): confirm the harness locally and against CI run 871 (FIX…
claude Oct 3, 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