Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
174 commits
Select commit Hold shift + click to select a range
a55c8dc
sdg(liaison): update PHILOSOPHY.md
claude Jul 31, 2026
e85f836
sdg(liaison): write SEED.md β€” foundational APIs for an external spec UI
claude Jul 31, 2026
2cd687e
sdg(phase-2): draft IP 0001-external-ui-apis (intent question pending)
claude Jul 31, 2026
df0171b
sdg(liaison): update PHILOSOPHY.md
claude Aug 3, 2026
85a9dd2
sdg(phase-2): finalize IP 0001 per Developer-confirmed scope; consume…
claude Aug 3, 2026
9b173b4
sdg(phase-3): apply review round 1 to IP 0001 β€” imperfect-workspace m…
claude Aug 3, 2026
3900780
sdg(phase-3): apply review round 2 to IP 0001 β€” occurrence spans, exi…
claude Aug 3, 2026
b590c53
sdg(phase-3): apply review round 3 to patch 0001 (external UI APIs)
claude Aug 3, 2026
5bd9c08
sdg(phase-3): apply review round 4 to IP 0001 β€” area/durable composit…
claude Aug 3, 2026
b913612
sdg(phase-3): one ownership rule for graph-area paths; scope occurren…
claude Aug 3, 2026
1c595e4
sdg(phase-3): pin code-range outputs; ground unattributed-path rule i…
claude Aug 3, 2026
3643efa
sdg(phase-3): apply iteration-7 review to patch 0001 (diagnostics car…
claude Aug 3, 2026
b24d2aa
sdg(phase-3): decide text-value and identity-uniqueness rules on impe…
claude Aug 3, 2026
9c86b59
sdg(phase-3): disambiguate attribute-view datum; seal stable-code del…
claude Aug 3, 2026
d6f8c6e
sdg(phase-3): pin invalid-form id-prop identity semantics (iter 10)
claude Aug 3, 2026
937e36d
sdg(phase-3): define unreadable-record outcome for preview delta; dro…
claude Aug 3, 2026
a724662
sdg(phase-3): apply optional clarifications O2/O3, accept patch 0001
claude Aug 3, 2026
6040942
sdg(phase-4): apply IP 0001 external-UI machine surfaces to SPEC.md (…
claude Aug 3, 2026
f5b312e
sdg(phase-4): define invalid-path behavior on UI surfaces; close refr…
claude Aug 3, 2026
f979178
sdg(phase-4): define machine-facing JSON forms (12.7); pin finding co…
claude Aug 3, 2026
71f18e0
sdg(phase-4): seal refused-preview form, unify build-validation gate,…
claude Aug 3, 2026
9cc71e8
sdg(phase-4): define .mdx-less derived map, import name datum, anchor…
claude Aug 3, 2026
32b5bd4
sdg(phase-4): pin preview reporting for created files, finding-order …
claude Aug 3, 2026
1df1cf6
sdg(phase-4): pin policy-violation finding form and invalid-workspace…
claude Aug 3, 2026
b2094c4
sdg(phase-4): pin old-ID existence datum, disjoint refusal scopes, de…
claude Aug 4, 2026
ccc02b8
sdg(phase-4): pin move target occupancy, origin kind, rename collisio…
claude Aug 4, 2026
e34bcdd
sdg(phase-4): pin check's graph-data staleness form, classify mixed m…
claude Aug 4, 2026
6a74e5b
sdg(phase-4): pin per-file staleness occupant judgment and absent-fil…
claude Aug 4, 2026
926ce74
sdg(phase-4): pin gated-read precedence and move-destination componen…
claude Aug 5, 2026
253e7e0
sdg(phase-4): close IP 0001 β€” write-path occupancy, spells-no-identit…
claude Aug 5, 2026
0fb8dca
sdg(phase-6): cover IP 0001 surfaces in TEST-SPEC (iter 1)
claude Aug 5, 2026
9efbd86
sdg(phase-6): close literal-\$, read-gate, occupant, and directory-cr…
claude Aug 5, 2026
638cfd0
sdg(phase-6): close move-refusal, gate-vs-corruption, presence, and M…
claude Aug 5, 2026
213b935
sdg(phase-6): positively assert 14.10's graph-data unit form at check…
claude Aug 5, 2026
b0984f3
sdg(phase-6): cover undefined-source occurrences and unknown code uni…
claude Aug 5, 2026
8a24dad
sdg(phase-6): correct P-5's section-move oracle; string-literal keys,…
claude Aug 6, 2026
2e236c7
sdg(phase-6): byte-assert the move's real import edits and conversion…
claude Aug 6, 2026
320f063
sdg(phase-6): align T14-4 with 11.2's non-attachment of 13/22; test 1…
claude Aug 6, 2026
bdab22a
sdg(phase-6): retire 6.5's unspellable destination refusals to exit-2…
claude Aug 6, 2026
d5e47a6
sdg(phase-6): assert @1 unknown; record the ignored-order dead pair a…
claude Aug 6, 2026
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
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
10 changes: 9 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,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 Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ Build, test, and run instructions for this repository (nothing else belongs in t
- Requires Node.js >= 22 and npm. Install dependencies: `npm ci`.
- One npm package (`xspec`) holding two distinct programs: the product under `src/` and the test harness under `test/`. The harness never imports product code; it drives the built `xspec` executable as a subprocess.
- Build the product: `npm run build` β€” compiles `src/` (TypeScript ESM, `src/tsconfig.json`) to `dist/`; the `xspec` bin is `dist/cli/bin.js`. Run it: `node dist/cli/bin.js`.
- The built product enables Node's on-disk V8 compile cache (`node:module` `enableCompileCache`; default directory under the OS temp dir, e.g. `/tmp/node-compile-cache`). The first invocations after `npm run build` repopulate it, so one-off CLI timings are slower than steady state; the cache affects timing only, never output.
- The built product enables Node's on-disk V8 compile cache (`node:module` `enableCompileCache`; default directory under the OS temp dir, e.g. `/tmp/node-compile-cache`). The first invocations after `npm run build` repopulate it, so one-off CLI timings are slower than steady state; the cache affects timing only, never output. Steady-state per-invocation cost is ~0.26s for any command that parses the configuration (the TypeScript compiler module is loaded through `createRequire` in `src/core/ts-module.ts` β€” importing that CJS file through the ESM loader instead costs ~0.2s more per invocation in format sniffing and named-export lexing; keep any new `typescript` use routed through that module) and ~0.12s for the store-backed fast paths (`query` and `at` on a workspace whose `.xspec/graph.json` verifies against the current bytes) β€” the numbers that matter when a test sweeping many CLI invocations nears its timeout.
- Typecheck both programs: `npm run typecheck` (`src/tsconfig.json`, then `test/tsconfig.json`; the harness is not typechecked by Vitest at run time). `test/fixtures/` is excluded from the harness typecheck: fixture projects are data compiled or executed at test run time and may contain deliberate type errors (e.g. the S-4 fixture).
- Consumer fixture programs are compiled through the harness's TypeScript tooling driver (`test/helpers/tooling.ts`), which resolves `@types/node` from this repository's own `node_modules` β€” `npm ci` (dev dependencies included) must have run for consumer compilation to work.
- Full test suite (TEST-SPEC sections 1–17, certification included; the Linux CI leg): `npm test`. Build the product first β€” tests invoke the built executable.
- Run a subset of a test project by appending file paths, e.g. `npx vitest run --config test/vitest.config.ts --project suite test/suite/section-1.1-1.2.test.ts` β€” the way to observe new product-facing tests failing-as-diagnosed against the stub product (Phase 9 red-green).
- Running tests also requires the system `git` executable on PATH: harness fixtures script local git repositories (`test/helpers/workspace.ts`). No git configuration is needed β€” the builder isolates all ambient git config and identity.
- Harness self-tests and certification only (TEST-SPEC 17): `npm run test:self`.
- Certification fixture products (CERTIFICATIONS.md, e.g. `test/fixtures/conf-core/`) are plain Node ESM programs with no build step and no dependencies: the certification runner (and manual debugging) invokes `node test/fixtures/<fixture>/bin.mjs <command> …` with a staged workspace as the working directory. Violator executables sit beside the conformer's entry as `bin-<deviation>.mjs` (e.g. `bin-nolock.mjs`) and run the same way. `test/fixtures/` is excluded from the harness typecheck; Prettier still formats it.
- Windows-leg subset (TEST-SPEC E-6; run by the Windows CI job): `npm run test:windows`. Build the product first. Its byte-identity test compares this leg's representative-fixture outputs against the Linux leg's, read from the directory named by `XSPEC_E6_EXCHANGE_DIR`; the Linux outputs are written by the suite project's E-6 writer test (`test/suite/e6-exchange-writer.test.ts`) whenever that variable is set during `npm test`, and CI exchanges them as the `e6-linux-outputs` artifact (`.github/workflows/ci.yml`). Against the stub product the whole subset is red (diagnosed failures) before any exchange is consulted; once the product conforms, run the Linux suite with the variable set, then the Windows subset with the same variable β€” with the variable unset or the directory absent, the byte-identity test fails loudly by design (never skips).
- Windows-leg subset (TEST-SPEC E-6; run by the Windows CI job): `npm run test:windows`. Build the product first. Its byte-identity test compares this leg's representative-fixture outputs against the Linux leg's, read from the directory named by `XSPEC_E6_EXCHANGE_DIR`; the Linux outputs are written by the suite project's E-6 writer test (`test/suite/e6-exchange-writer.test.ts`) whenever that variable is set during `npm test`, and CI exchanges them as the `e6-linux-outputs` artifact (`.github/workflows/ci.yml`). Against the stub product the whole subset is red (diagnosed failures) before any exchange is consulted; once the product conforms, run the Linux suite with the variable set, then the Windows subset with the same variable β€” with the variable unset or the directory absent, the byte-identity test fails loudly by design (never skips). The T11.6-1 drive-mismatch test (`test/windows/e6-drive-mismatch.test.ts`) additionally stages a substituted drive mapping (`subst`), which exists only on Windows: on any other platform it fails loudly after its same-drive premise arm (never skips), so a fully green `npm run test:windows` needs an actual Windows machine.
- Local-only suite (TEST-SPEC E-2; separately invocable, never run in CI, currently empty): `npm run test:local`.
- Property tests (TEST-SPEC 16; machinery in `test/helpers/property.ts`) run a fixed seed set by default β€” the CI mode, fully deterministic. To rerun with a specific seed: `XSPEC_PROPERTY_SEED=<uint32 from the failure message>`. Optional randomized local mode: `XSPEC_PROPERTY_SEED=random` (each property reports its seed for replay). Never set the variable in CI. Vitest intercepts the seed reports (`console.info`); add `--disable-console-intercept` to the vitest invocation to see them β€” but place any test-file filter argument *before* that flag (a file path following `--disable-console-intercept` is not treated as a filter and the whole project runs).
- Format code (Prettier, default config, `src/` and `test/` only): `npm run format`; verify: `npm run format:check`.
Expand Down
Loading
Loading