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

@@ -395,6 +395,52 @@ ImportPath = ident { "." ident } .
persistence, process, or filesystem owner. Build and all test forms retain
their distinct stat-first directory behavior. Build workdir format remains
18, test workdir format remains 19, and semantic storage format remains 3.
- A public operand is eligible for direct named-source adoption only when its
exact requested spelling ends `.ww` and that command's existing file-kind
rule admits it. An existing non-directory object with another suffix is not
source: its bytes, package clause, imports, syntax, test declarations,
runtime behavior, mode, and timestamp are not read as source, and ordinary
dotted resolution continues exactly as though the colliding object were
absent. Thus request `foo.bar` may resolve `foo/bar.ww` or `foo/bar/` even
while a physical non-directory `foo.bar` exists. A wrong-suffix symlink to a
non-directory is the same ignored collision; a symlink to a directory remains
an ordinary stat-first directory request. A visible `.ww` symlink to a
regular source remains eligible, and the established stage-specific handling
of visible `.ww` special files is not broadened by this rule.
A resolved logical single file retains the established `__root` command-line
package/action/artifact identity. A resolved logical directory retains its
dotted package, import, graph, action, symbol, `.wwi`, initializer, artifact,
publication, and persistence identity. The ignored physical pathname/object
creates no membership, binding, edge, action, key, or alternate identity.
Build and run use only the logical provider's production/import/initializer
closure and runtime. Raw running test, its historical second-positional
test-name filter, `test -c`, and `test -S` use only the provider's test
package, descriptors, support closure, binary, and assembly.
When no provider exists, collision-present behavior is byte-for-byte the
existing collision-absent behavior. An ordinary single target retains its
direct build/run/test cannot-find result and creates no producer action. A
second positional retains the established package-coordinator route,
diagnostics, status, selection lifecycle, and cleanup; this source gate does
not reinterpret that positional form. Mutation invariance covers only absent
and stat-successful non-directory collision states. A transition to a
directory leaves this rule and follows ordinary directory routing, with no
new atomic-snapshot guarantee for concurrent kind changes.
Provider compilation failure preserves the prior public and semantic
generation. A retained running-test runtime failure occurs after the complete
logical build generation commits: it preserves prior retained public bytes by
skipping deferred installation, while that semantic generation remains
committed and reusable. Restoring prior source bytes requires a later
successful rebuild and commit, not runtime-failure rollback. Controlled-
failure cleanup otherwise remains unchanged. External signal
interruption after action start is unchanged, including the verified-open
fixed `.new` residue and later persistent-request poisoning. Multiple named
sources, remaining suffix-first run behavior, finite `.ww` FIFOs, test
process topology, and `-run` regular expressions are not completed here.
Build workdir format remains 18, test workdir format remains 19, and semantic
storage format remains 3.
- `import acme.codec;` loads the canonical package `acme.codec`. If that
package declares `package wire;`, the importing file sees its exported names
as `wire.Name`; `codec.Name` is not an additional binding. An explicit alias