docs: dissolve PROJECT_PLAN.md; drop retired-mechanism citations

PROJECT_PLAN.md was a historical disclaimer wrapping five still-open
T1 driver items — those move to docs/test-system-v2.md (Open driver
work); the rest is dated 2026-08-05 design history, archived in git.
Also retired-mechanism cleanup: both drivers drop the *.combined.ww
enumeration skip (the amalgamator is gone; leftover debris now fails
loudly instead of being silently accommodated), the consumer-less
m4_combined_epoch.md5 pin is deleted, and the wwi.ww/ww.h/check.ww
comments that still described combined.ww as the live path are
re-cited to the sep reality.
This commit is contained in:
2026-08-08 01:15:03 +09:00
parent 3f7452814b
commit f11f1629d9
8 changed files with 39 additions and 896 deletions

View File

@@ -3780,7 +3780,7 @@ fn exprtype(c: *checker, e: *syntax.node, hint: *syntax.node) *syntax.node = {
// `scopelookup(c.cur, nm)` else-arm bound whichever
// same-leaf global fn headed the flat scope bucket —
// order-sensitive (os.read:i64 vs io.read:(i32|eof|closed)
// flipped by combined.ww concat order), yielding a
// flipped by scope-install order), yielding a
// false `return: not assignable`. Leaving s nil falls
// through to the fn-VALUE path below (exprtype(callee) →
// TPTR peel → TFN.ret), matching cstage cmd/wcc/check.c

View File

@@ -1,19 +1,20 @@
// wwi.ww — `.wwi` export-data producer (w6c_ww -I). M2 DEAD-CODE: writes
// a re-parseable ww-prototype rendering of a package's EXPORTED surface.
// Nothing consumes `.wwi` yet (combined.ww stays the live path); the only
// caller is the new -I flag, off on every existing invocation.
// wwi.ww — `.wwi` export-data producer (w6c_ww -I): a re-parseable
// ww-prototype rendering of a package's EXPORTED surface. Since the
// sep-compile flip (epic #22) this is the LIVE import path the driver
// runs one `w6c -c -I` per package and feeds each dep's `.wwi` to its
// importers as import scope.
//
// wwstage twin of cmd/w6c/wwi.c — byte-identical output is a rule-10
// requirement (`.wwi` is a new cross-stage byte-id substrate). Specs:
// requirement (`.wwi` is a cross-stage byte-id substrate). Specs:
// .ai/rob-M2-spec.md + .ai/drew-M2-checkexported.md.
//
// - Unparse walks the AST type-expr subtree (the N_T* nodes), NOT the
// tinfo — tinfo collapses nominal pkg.Name identity.
// - check_exported_type rides the producer entry (flag-gated), so M2
// stays dead on the normal `.s` path. It rejects exactly one thing:
// an exported signature naming a non-exported nominal type.
// - A `.wwi` is ONE package's interface; the M2 gate feeds a driver-
// combined unit, so the emit filters to PRIMARY decls (imported==0).
// - check_exported_type rides the producer entry (flag-gated), off on
// the normal `.s` path. It rejects exactly one thing: an exported
// signature naming a non-exported nominal type.
// - A `.wwi` is ONE package's interface; the emit filters to PRIMARY
// decls (imported==0).
// Imports mirror check.ww (os/tok/strconv only): node/nkind/sym/skind/
// scopelookuptype/streq/checker/tkind resolve bare in the selfhost's flat

View File

@@ -394,8 +394,8 @@ fn dirfileattest(dirpath: *u8, name: *u8) bool = {
};
// Filter for production enumeration: keep `*.ww` minus canonical
// `*_test.ww`, the explicit compatibility sources above, and generated
// `*.combined.ww` artifacts. Returns true to keep.
// `*_test.ww` and the explicit compatibility sources above. Returns
// true to keep.
fn dirfilekeep(dirpath: *u8, name: *u8, nlen: u64) bool = {
// nlen<=3 guard kept: a bare ".ww" (len 3) is rejected here but
// would pass strings.hassuffix(".ww"); preserves cstage parity.
@@ -404,9 +404,6 @@ fn dirfilekeep(dirpath: *u8, name: *u8, nlen: u64) bool = {
s.ptr = name;
s.len = nlen: i32;
if (!strings.hassuffix(s, ".ww")) { return false; };
// ".combined.ww" — full 12-char match mirrors cstage
// cmd/ww/main.c enumerate_dir_ww strcmp (rule 10).
if (strings.hassuffix(s, ".combined.ww")) { return false; };
if (strings.hassuffix(s, "_test.ww")
|| dirfileattest(dirpath, name)) { return false; };
return true;
@@ -433,7 +430,7 @@ fn bytecmp(a: *u8, alen: u64, b: *u8, blen: u64) i32 = {
};
// enumeratedir — list production *.ww paths of `dirpath` (less canonical
// and compatibility test sources plus *.combined.ww), byte-sort. Returns
// and compatibility test sources), byte-sort. Returns
// one exact pointer array of NUL-terminated full paths. This is the sole
// directory-membership discovery path; the owning seppkg retains the list.
fn enumeratedir(dirpath: *u8) (**u8, i32) = {