test: prove case-fold collision preflight
This commit is contained in:
@@ -242,6 +242,22 @@ directory entry order. A recursive pattern omits a directory with no eligible
|
||||
source, while an explicit wrong-target-only build rejects it as having no WW
|
||||
package source. There is no source-level build-expression or user-tag mode.
|
||||
|
||||
After that eligibility boundary and the coordinator's required package-clause
|
||||
classification and production `@test` validation parses, the delegated loader
|
||||
performs selected-basename Go 1.26.5 simple-fold preflight before its graph
|
||||
import scan. During graph loading, effective canonical imports register only
|
||||
after contextual local/vendor expansion; exact identity reuse is accepted, but
|
||||
two distinct fold-equivalent identities reject the entire shared plan.
|
||||
Selected basenames register in one canonical-directory scope. A production
|
||||
build registers production names only. A test plan shares the filename scope
|
||||
across production, internal-test, and external-test actions, including
|
||||
same-only, external-only, and mixed directories, without combining their source
|
||||
units. Hidden, underscore-prefixed, wrong-platform, and otherwise ineligible
|
||||
files never register. Package variants, product-scoped recompiled copies,
|
||||
support, and generated main remain action wiring over exact identities and do
|
||||
not manufacture package collisions. The fold preflight does not replace or
|
||||
precede those coordinator-owned source-validation parses.
|
||||
|
||||
Separate compilation is the only driver build path; no compatibility mode
|
||||
switch remains.
|
||||
|
||||
@@ -294,6 +310,24 @@ have the same `ww: out of memory` diagnostic, invoke no compiler, assembler, or
|
||||
linker, and leave an empty caller work directory with no output, status, or
|
||||
staging path.
|
||||
|
||||
The same observer now owns selected-basename folding: ASCII production,
|
||||
internal, external, same-only, external-only, mixed, and cross-classification
|
||||
collisions; printable Unicode Kelvin folding; malformed UTF-8 replacement-rune
|
||||
keys with exact `\xNN` diagnostics; accepted composed/decomposed neighbors;
|
||||
ordinary-build isolation from test collisions; ignored folded pairs; reversed
|
||||
creation order; and direct/recursive collision-diagnostic parity. It proves zero
|
||||
compiler/assembler/linker calls and an empty workdir, including no
|
||||
test-support/main artifact, on cold rejection. A committed warm package then
|
||||
gains and loses a colliding file; the failed middle request preserves every
|
||||
unit, `.wwi`, assembly, object, archive, binary, tool record, and stamp, and
|
||||
removal restores exact reuse.
|
||||
`package_graph_diagnostics_are_stable` provides the corresponding direct,
|
||||
transitive, reversed-root, recursive, same-directory, exact-repeat, and warm
|
||||
import proof. `vendor_directory_import_resolution` proves folding uses the
|
||||
expanded vendor identity under reversed imports and product descriptors, even
|
||||
when both spellings reach one physical directory, and that multi-product
|
||||
rejection publishes no output, status, tool state, or staging residue.
|
||||
|
||||
`test/sep/sepinit_test.ww` is the single focused package-initialization owner.
|
||||
It generates all source trees temporarily and runs independent cold/persistent
|
||||
Cstage and WWstage legs. Its matrix covers blank-only reachability; dependency,
|
||||
@@ -353,6 +387,13 @@ real directory test products always run, while no-selected-test directories do
|
||||
not create a process. The byte-identity and bootstrap gates keep building on
|
||||
fresh scratch. `make clean` reclaims every workdir under `out/`.
|
||||
|
||||
Fold keys and first-spelling tables are request-only loader state and are never
|
||||
stored in a workdir. They do not alter successful unit bytes, action/storage
|
||||
keys, or tool records, so build format 18, test format 19, and semantic storage
|
||||
format 3 remain unchanged. Structural fold rejection occurs before staging and
|
||||
cannot mutate a committed generation; a later request with the collision
|
||||
removed evaluates the original exact-key reuse contract.
|
||||
|
||||
On a package or tree target, `ww build/test -w DIR` forwards that exact caller
|
||||
path as the one command-global semantic-action store; neither pattern spelling
|
||||
nor package-group name derives a persistent subdirectory. The delegated driver
|
||||
|
||||
Reference in New Issue
Block a user