test: re-cite retired-mechanism comments in surviving carriers

The migrate-and-retire audit left the surviving carriers as the only
files still describing the retired combined.ww amalgamator as live:
m2wwi/m3sep headers claimed .wwi was dead code, four byteid carriers
carried dead cleanup of never-written .combined.ww intermediates, and
sepbuild's enumeration mirror plus lib_byteid's completeness scan
still skipped the retired artifact form (the same silent
accommodation just removed from both drivers — dropping it here
surfaced and flushed 39 stale untracked amalgamator outputs across
lib/, which the gates now reject loudly). Remaining mentions are
past-tense history or quoted diagnostics.
This commit is contained in:
2026-08-08 01:34:05 +09:00
parent f6628b985e
commit 939d0938e2
19 changed files with 42 additions and 57 deletions

View File

@@ -47,7 +47,7 @@ struct row {
/* Two-module probe: `caller` calls `needle.want(h, n)` where `n: []u8` /* Two-module probe: `caller` calls `needle.want(h, n)` where `n: []u8`
* widens into `(u8 | []u8)`. The // MODULE: directives + `use needle;` * widens into `(u8 | []u8)`. The // MODULE: directives + `use needle;`
* shape parallels what cmd/ww driver synthesises in combined.ww. */ * shape parallels the cmd/ww driver's resolved .unit.ww form. */
static const struct row rows[] = { static const struct row rows[] = {
{ "dot_callee_slice_widen", { "dot_callee_slice_widen",
"package needle;\n" "package needle;\n"

View File

@@ -45,7 +45,7 @@
* The dispatcher uses a BRANCHED callee (void arm → -1, fn-ptr arm → * The dispatcher uses a BRANCHED callee (void arm → -1, fn-ptr arm →
* v+100) so the field load actually feeds control flow (gate-blind * v+100) so the field load actually feeds control flow (gate-blind
* discipline). cstage `ww build` + run pins runtime; raw w6c vs w6c_ww * discipline). cstage `ww build` + run pins runtime; raw w6c vs w6c_ww
* `.s` cmp on the driver-produced combined.ww pins rule-10 byte-id * `.s` cmp on the self-built two-module unit pins rule-10 byte-id
* (the discriminating net for #223 — pre-fix the dispatcher diverges * (the discriminating net for #223 — pre-fix the dispatcher diverges
* `MOVQ reader(SB)` vs the pointer-field load). * `MOVQ reader(SB)` vs the pointer-field load).
* *

View File

@@ -130,8 +130,6 @@ cleanup_tmp(const char *tmpdir, const char *base)
} }
snprintf(p, sizeof p, "%s/%s.o", tmpdir, base); snprintf(p, sizeof p, "%s/%s.o", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; } if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
snprintf(p, sizeof p, "%s/%s.combined.ww", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; } if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; }
return bad; return bad;
} }

View File

@@ -130,8 +130,6 @@ cleanup_tmp(const char *tmpdir, const char *base)
} }
snprintf(p, sizeof p, "%s/%s.o", tmpdir, base); snprintf(p, sizeof p, "%s/%s.o", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; } if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
snprintf(p, sizeof p, "%s/%s.combined.ww", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; } if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; }
return bad; return bad;
} }

View File

@@ -27,8 +27,8 @@
* (AST-name vs cstage tinfo); precise Type identity is the #10 endgame. * (AST-name vs cstage tinfo); precise Type identity is the #10 endgame.
* *
* The PRE-FIX failure mode is a wwstage CHECKER REJECT, so the * The PRE-FIX failure mode is a wwstage CHECKER REJECT, so the
* discriminator is the `w6c_ww` build of the combined.ww succeeding at * discriminator is the `w6c_ww` build of the two-module unit succeeding
* all — pre-fix it errored out; post-fix it succeeds AND is byte-id * at all — pre-fix it errored out; post-fix it succeeds AND is byte-id
* with cstage. Self-contained 2-module fixtures (no lib coupling). * with cstage. Self-contained 2-module fixtures (no lib coupling).
* *
* scenario | shape | exit | byte-id * scenario | shape | exit | byte-id

View File

@@ -111,8 +111,6 @@ cleanup_tmp(const char *tmpdir, const char *base)
} }
snprintf(p, sizeof p, "%s/%s.o", tmpdir, base); snprintf(p, sizeof p, "%s/%s.o", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; } if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
snprintf(p, sizeof p, "%s/%s.combined.ww", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; } if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; }
return bad; return bad;
} }

View File

@@ -111,8 +111,6 @@ cleanup_tmp(const char *tmpdir, const char *base)
} }
snprintf(p, sizeof p, "%s/%s.o", tmpdir, base); snprintf(p, sizeof p, "%s/%s.o", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; } if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
snprintf(p, sizeof p, "%s/%s.combined.ww", tmpdir, base);
if (unlink(p) != 0 && errno != ENOENT) { perror(p); bad = 1; }
if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; } if (rmdir(tmpdir) != 0) { perror(tmpdir); bad = 1; }
return bad; return bad;
} }

View File

@@ -35,8 +35,7 @@
* Single-file multi-package form (like 953): `package aa; ... package * Single-file multi-package form (like 953): `package aa; ... package
* main; import aa; ...` in one source, so w6c/w6c_ww see the cross- * main; import aa; ...` in one source, so w6c/w6c_ww see the cross-
* module reference without -I path plumbing, and the build is self- * module reference without -I path plumbing, and the build is self-
* contained (no selfhost traversal → no .combined.ww fixture race, so * contained (no selfhost traversal).
* this lives in the parallel phase, not the 990-997 skip-set).
* *
* GATE POLARITY: must stay GREEN. A wrong exit means the value-global * GATE POLARITY: must stay GREEN. A wrong exit means the value-global
* mangle regressed (collision returned); a byte-id FAIL means the stages * mangle regressed (collision returned); a byte-id FAIL means the stages

View File

@@ -53,8 +53,8 @@
* or the two stages' .s diverged (rule-10 break). * or the two stages' .s diverged (rule-10 break).
* *
* Builds its own 2-module fixtures in a private mktemp dir, so all * Builds its own 2-module fixtures in a private mktemp dir, so all
* intermediates (main.combined.ww, the linked binary, the .s probes) * intermediates (the linked binary, the .s probes) land OFF the
* land OFF the source tree (CLAUDE.md rule 14). * source tree (CLAUDE.md rule 14).
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>

View File

@@ -1,10 +1,10 @@
/* /*
* 901_asserttyped_gap — ww-stage checker nil-type gap-corpus net. * 901_asserttyped_gap — ww-stage checker nil-type gap-corpus net.
* *
* The live `make test` stdlib _run suite drives the CSTAGE `ww` * The ordinary suites drive the CSTAGE `ww` (cmd/ check.c), which has
* (cmd/ check.c), which has no asserttyped pass; 990_selfhost feeds * no asserttyped pass, and nothing else feeds the ww-stage dumper's
* the ww-stage dumper only -t/-a (tokens/ast), never the checker. So * checker (-c) — only -t/-a (tokens/ast) run elsewhere. So the
* the wwstage checker's asserttyped diagnostics (check.ww — the * wwstage checker's asserttyped diagnostics (check.ww — the
* #15 / A.6.2.1e post-checker nil-type invariant gate) are UNOBSERVED * #15 / A.6.2.1e post-checker nil-type invariant gate) are UNOBSERVED
* by every other test, yet the gate is now ARMED (a non-exempt * by every other test, yet the gate is now ARMED (a non-exempt
* nil-typed value node writes its diagnostic and os.exit(1)s). This * nil-typed value node writes its diagnostic and os.exit(1)s). This

View File

@@ -209,8 +209,7 @@ main(void)
if (getcwd(cwd, sizeof cwd) == NULL) return 1; if (getcwd(cwd, sizeof cwd) == NULL) return 1;
/* The real include set the sep producer needs to resolve the lib + /* The real include set the sep producer needs to resolve the lib +
* frontend package graph (verified live; the bare default path grabs * frontend package graph (verified live). */
* the in-tree *test.combined.ww fixtures and collides on `main`). */
char inc[4096]; char inc[4096];
snprintf(inc, sizeof inc, "-I %s/lib -I %s/lib/ww -I %s/selfhost/cmd/wcc", snprintf(inc, sizeof inc, "-I %s/lib -I %s/lib/ww -I %s/selfhost/cmd/wcc",
cwd, cwd, cwd); cwd, cwd, cwd);

View File

@@ -5,9 +5,9 @@
* (with duplicate-type already owned by runww_dup_type_reject). This * (with duplicate-type already owned by runww_dup_type_reject). This
* residual retains only the modfn separate-package artifact leg. * residual retains only the modfn separate-package artifact leg.
* *
* Re-hosts every decl-namespace assertion that today lives ONLY in * Re-hosts every decl-namespace assertion that once lived ONLY in
* 910/997 onto a gate that survives the M4 flip (910/997 are deleted at * 910/997 onto a gate that survives the M4 flip (910/997 were deleted
* the flip — they feed combined.ww / amalgamation inputs). Three legs: * at the flip — they fed the retired amalgamation inputs). Three legs:
* *
* dup family — a duplicate top-level fn/type/def/let in one (flat) * dup family — a duplicate top-level fn/type/def/let in one (flat)
* module must build-FAIL on BOTH stages. The fixtures * module must build-FAIL on BOTH stages. The fixtures

View File

@@ -1,17 +1,16 @@
/* /*
* 989_lib_byteid — cstage-vs-wwstage byte-identity gate over the lib/ * 989_lib_byteid — cstage-vs-wwstage byte-identity gate over the whole
* surface that the embedded combined.ww set does NOT cover. * lib/ surface, and the ONE owner of wwstage-DRIVER-leg byte identity.
* *
* The 990-997 gates byte-id only the modules the selfhost tools import * The bootstrap gates (991-995) byte-id only the modules the selfhost
* (ascii/bytes/errors/io/math/memio/os/rt/strconv/strings/time/types/ * tools import (ascii/bytes/errors/io/math/memio/os/rt/strconv/strings/
* utf8 + lex/parse/wcc/ww). Every other lib/ module compiles through * time/types/utf8 + lex/parse/wcc/ww). Every other lib/ module compiles
* the CSTAGE driver alone (the 9xx _run tests), so a cs≠ww divergence * through the CSTAGE driver alone elsewhere, so a cs≠ww divergence
* there ships gate-green — regex.finish was cs≠ww for weeks this way * there ships gate-green — regex.finish was cs≠ww for weeks this way
* (task #21, FC0). This gate closes the class: each lib test fixture is * (task #21, FC0). This gate closes the class: each lib test fixture is
* sep-built through BOTH driver stages and the per-package asm compared. * sep-built through BOTH driver stages and the per-package asm compared.
* *
* #94 sep layout: the gate drives `ww` (cstage) and `ww_ww` * #94 sep layout: the gate drives `ww` (cstage) and `ww_ww` (wwstage).
* (wwstage) instead of feeding a single .combined.ww to raw w6c/w6c_ww.
* Under sep EACH package compiles to its OWN <stem>.sepwork/<pkg>.s — the * Under sep EACH package compiles to its OWN <stem>.sepwork/<pkg>.s — the
* lib body lands in <pkg>.s, NOT in __root.s (which holds only the test * lib body lands in <pkg>.s, NOT in __root.s (which holds only the test
* fixture / probe main). So the byte-id MUST concat EVERY <pkg>.s (the * fixture / probe main). So the byte-id MUST concat EVERY <pkg>.s (the
@@ -472,7 +471,7 @@ corpus_complete(const char *cwd)
* <stem>.sepwork/<pkg>.unit.ww scratch next to source; exclude it so * <stem>.sepwork/<pkg>.unit.ww scratch next to source; exclude it so
* the scan enrols real source dirs only, not generated work dirs. */ * the scan enrols real source dirs only, not generated work dirs. */
snprintf(cmd, sizeof cmd, "cd %s && find lib -name '*.ww' " snprintf(cmd, sizeof cmd, "cd %s && find lib -name '*.ww' "
"! -name '*.combined.ww' ! -path '*.sepwork/*' " "! -path '*.sepwork/*' "
"| sed 's|/[^/]*$||' | sort -u", cwd); "| sed 's|/[^/]*$||' | sort -u", cwd);
FILE *p = popen(cmd, "r"); FILE *p = popen(cmd, "r");
if (!p) return -1; if (!p) return -1;

View File

@@ -1,8 +1,8 @@
/* /*
* 989_m2wwi_run — M2 `.wwi` export-data producer gate (task #22 arc). * 989_m2wwi_run — M2 `.wwi` export-data producer gate (task #22 arc).
* Both stages (rule-10): the new `w6c -I <out.wwi>` producer is DEAD on * Both stages (rule-10): since the sep flip the `w6c -I <out.wwi>`
* the live path (combined.ww stays the compile substrate; nothing reads * producer IS the live import path, and `.wwi` is a cross-stage
* `.wwi`), so this is purely a new cross-stage byte-id substrate. * byte-id substrate this gate pins directly.
* *
* POSITIVE gate — for each package (ascii/strings/getopt, drew2-audited * POSITIVE gate — for each package (ascii/strings/getopt, drew2-audited
* leak-free), drive the target as the PRIMARY module of a driver-combined * leak-free), drive the target as the PRIMARY module of a driver-combined

View File

@@ -3,8 +3,8 @@
* *
* M3 = w6c `-c` (separate-compile / primary-only codegen) reads each imported * M3 = w6c `-c` (separate-compile / primary-only codegen) reads each imported
* package's `.wwi` prototypes (M2's producer output) as import scope INSTEAD of * package's `.wwi` prototypes (M2's producer output) as import scope INSTEAD of
* re-checking dep bodies. Pure addition: combined.ww stays the LIVE path, `-c` * re-checking dep bodies. Since the sep flip this IS the sole compile
* is off on every existing invocation. This gate certifies the consumer. * path. This gate certifies the consumer.
* *
* Fixture: a leaf -> mid -> root chain carrying ALL FOUR cross-boundary fact- * Fixture: a leaf -> mid -> root chain carrying ALL FOUR cross-boundary fact-
* classes — fn SIGNATURE (leaf.add), struct/type LAYOUT (leaf.Point, used as a * classes — fn SIGNATURE (leaf.add), struct/type LAYOUT (leaf.Point, used as a

View File

@@ -121,10 +121,9 @@ strs_cmp(const void *a, const void *b)
return strcmp(*(const char *const *)a, *(const char *const *)b); return strcmp(*(const char *const *)a, *(const char *const *)b);
} }
/* Concatenate a package directory's *.ww bodies (less *test.ww and /* Concatenate a package directory's *.ww bodies (less *test.ww,
* *.combined.ww, byte-sorted) into `out`. Mirrors the driver's body * byte-sorted) into `out`. Mirrors the driver's body enumeration so
* enumeration so the substituted bodies-unit matches the sep-unit * the substituted bodies-unit matches the sep-unit structurally. */
* structurally. */
static int static int
append_dir_bodies(FILE *out, const char *dir) append_dir_bodies(FILE *out, const char *dir)
{ {
@@ -138,7 +137,6 @@ append_dir_bodies(FILE *out, const char *dir)
size_t nl = strlen(nm); size_t nl = strlen(nm);
if (nl <= 3 || strcmp(nm + nl - 3, ".ww") != 0) continue; if (nl <= 3 || strcmp(nm + nl - 3, ".ww") != 0) continue;
if (nl >= 7 && strcmp(nm + nl - 7, "test.ww") == 0) continue; if (nl >= 7 && strcmp(nm + nl - 7, "test.ww") == 0) continue;
if (nl >= 12 && strcmp(nm + nl - 12, ".combined.ww") == 0) continue;
names[n++] = strdup(nm); names[n++] = strdup(nm);
} }
closedir(d); closedir(d);

View File

@@ -9,7 +9,7 @@
* `use` resolution + the -I search path + the libwwrt.a link. * `use` resolution + the -I search path + the libwwrt.a link.
* *
* Each build runs from a per-driver scratch directory so the * Each build runs from a per-driver scratch directory so the
* intermediate .combined.ww/.s/.o files don't collide. * intermediate .s/.o files don't collide.
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -72,7 +72,7 @@ build_via(const char *bin, const char *driver, const char *src,
{ {
char cmd[4096]; char cmd[4096];
/* -o <workdir>/<out> keeps the binary where the diff expects it AND /* -o <workdir>/<out> keeps the binary where the diff expects it AND
* routes the .combined.ww/.s/.o into the workdir (T3) — no longer * routes the .s/.o intermediates into the workdir (T3) — no longer
* next to the source, so concurrent driver builds never collide. */ * next to the source, so concurrent driver builds never collide. */
if (incs && incs[0]) { if (incs && incs[0]) {
snprintf(cmd, sizeof cmd, snprintf(cmd, sizeof cmd,

View File

@@ -7,10 +7,9 @@
* so w6c_ww must produce byte-identical output to wwdump_ww -c on * so w6c_ww must produce byte-identical output to wwdump_ww -c on
* every program — this test pins that. * every program — this test pins that.
* *
* (We do not diff against C-side `w6c` here because the C compiler has * (We do not diff against C-side `w6c` here: this carrier's oracle is
* features the ww cgen has not yet ported — float compare, fn-address * the wwdump_ww -c TOOL OUTPUT, not the tool binary. The C-vs-ww diff
* @symbol, indirect call. Test 990 probe 5 covers the C-vs-ww diff on * on real programs is owned by the blanket byte-identity gates.)
* the subset that the ww cgen handles today.)
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -189,9 +188,8 @@ main(void)
char cwd[1024]; char cwd[1024];
if (getcwd(cwd, sizeof cwd) == NULL) return 1; if (getcwd(cwd, sizeof cwd) == NULL) return 1;
/* In-source corpus: programs the ww-side cgen handles today. /* In-source corpus: programs the ww-side cgen handles today,
* Mirrors probe 5 in 990_selfhost without the parts that drift * kept free of the parts that drift against C w6c. */
* against C w6c. */
struct { const char *label; const char *src; } progs[] = { struct { const char *label; const char *src; } progs[] = {
{ "ret42", { "ret42",
"fn main() i32 = { return 42; };" }, "fn main() i32 = { return 42; };" },
@@ -360,9 +358,9 @@ main(void)
* The load-bearing M4 oracle: build w6c by SEPARATE compilation under * The load-bearing M4 oracle: build w6c by SEPARATE compilation under
* BOTH driver stages and prove they sep-produce byte-identical per-package * BOTH driver stages and prove they sep-produce byte-identical per-package
* .s/.o/.wwi (cs==ww on the real tool's sep artifacts, rule 10). The * .s/.o/.wwi (cs==ww on the real tool's sep artifacts, rule 10). The
* combined corpus + the sep-out==combined-out leg are gone — combined-mode * combined corpus + the sep-out==combined-out leg are gone with the
* is being retired (E3 flip), so combined.ww is no longer fed as compiler * retired combined mode (E3 flip); the per-pkg cs==ww comparison is
* INPUT; the per-pkg cs==ww comparison is the surviving live oracle. Its * the surviving live oracle. Its
* cold pid-keyed scratch is wiped after the explicit bootstrap gate. */ * cold pid-keyed scratch is wiped after the explicit bootstrap gate. */
{ {
char inc[4096], cmd[16384]; char inc[4096], cmd[16384];

View File

@@ -88,7 +88,7 @@ struct buildjob {
* inherits no concurrent siblings — system() spawns a fresh /bin/sh -c. * inherits no concurrent siblings — system() spawns a fresh /bin/sh -c.
* stderr lands in <workdir>/build.err so concurrent builds don't merge * stderr lands in <workdir>/build.err so concurrent builds don't merge
* their diagnostics. `-o <workdir>/main` (T3) makes the driver write its * their diagnostics. `-o <workdir>/main` (T3) makes the driver write its
* intermediates (main.{combined.ww,s,o}) beside the output in <workdir> * intermediates (main.{s,o} and the sepwork tree) beside the output in <workdir>
* instead of next to every traversed source — so concurrent driver * instead of next to every traversed source — so concurrent driver
* builds no longer share the next-to-source fixed paths, and this gate * builds no longer share the next-to-source fixed paths, and this gate
* may run in the parallel group. The rebuilt binary still lands at * may run in the parallel group. The rebuilt binary still lands at