driver: ignore wrong-suffix files as named sources

This commit is contained in:
2026-08-23 03:18:19 +09:00
parent 59fc76964c
commit f6fabfc6ac
6 changed files with 1325 additions and 28 deletions

View File

@@ -302,6 +302,53 @@ multiple named sources, finite FIFOs, and hidden regular sources are not
claimed by this existing-directory slice. The general direct-driver `.new`
interruption residue also remains open.
The raw source front also applies one positive requested-spelling gate before
physical adoption. An existing non-directory operand whose exact requested
spelling does not end `.ww` is not a raw source and cannot hijack its ordinary
dotted provider. Build, run, raw test, the historical second-positional raw
test filter, `test -c`, and `test -S` therefore resolve and consume the same
logical file or directory they consume when the collision is absent. Logical
files keep the existing `__root` action/artifact family; logical directories
keep dotted package/import/action identity. The ignored object's bytes,
package, imports, tests, runtime status, mode, and timestamp supply no package
membership, edge, producer input, artifact, publication, or persistence key.
Requested suffix owns the gate through symlinks. Wrong-suffix links to regular
or special non-directories remain logical requests, while a link to a directory
retains stat-first direct-directory routing; a visible `.ww` link to a regular
source remains raw source. Each stage's existing visible `.ww` special-file
handling is outside this slice. Mutation/reuse invariance is limited to absent
or stat-successful non-directory collision states. A transition to a directory
uses the directory owner and receives no new concurrent-kind snapshot promise.
No-provider rows deliberately separate the ordinary single-target path from
the second-positional compatibility path. The first retains direct cannot-find
diagnostics, running-test `FAIL`, and producer/artifact absence. The second
retains the existing package-coordinator process, canonicalization or usage
diagnostic, status, selection state, and cleanup; the gate does not turn that
route into a direct raw-file error. Logical producer failure preserves prior
public and semantic bytes. A retained running-test runtime failure instead
keeps the complete newly built semantic generation committed and reusable but
skips deferred installation, preserving prior retained public bytes; restoring
the old source requires a later successful rebuild and commit. Normal and
controlled-failure cleanup is unchanged. External driver signals after action
start retain the open fixed
`.new` leakage and later-request poisoning behavior.
The focused `wrong_suffix_physical_files_do_not_hijack_dotted_requests`
package observer owns this boundary for both driver stages. It compares absent
controls with regular, symlinked-regular, and symlinked-special collisions;
checks build, run, raw/filter test, `-c`, and `-S` streams, statuses, runtime,
public bytes, complete comparable semantic artifacts, `__root` file identity,
and dotted directory identity; separates direct and coordinator no-provider
rows; exercises warm non-directory mutation, producer-failure rollback,
retained-runtime-failure public-byte preservation with committed semantic-
generation reuse and later successful restoration, request-local concurrent
builds, positive `.ww` and direct-directory controls, and normal residue
cleanup. It makes no finite-FIFO or signal-recovery claim.
The rule changes no package coordinator, test harness/process topology,
test-result caching, or build/test/semantic format (18/19/3).
List mode uses that same product process and initialization boundary but starts
no per-test child. The shared language harness emits only selected qualified
test names, one per line in descriptor order. A valid filter selecting no tests