Skip to content

fix(manifest): reject blank module names at parse - #96

Merged
mfw78 merged 2 commits into
mainfrom
seam/c1-reject-blank-names
Aug 6, 2026
Merged

fix(manifest): reject blank module names at parse#96
mfw78 merged 2 commits into
mainfrom
seam/c1-reject-blank-names

Conversation

@mfw78

@mfw78 mfw78 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

What

Reject a manifest [module].name that is missing, empty, or whitespace-only at parse time, instead of letting it fall through to a fallback namespace later.
validate_module_name now runs a name.trim().is_empty() check before the existing path-safety check, so the refusal fires before the component-digest parse and before the [capabilities] gate.
Adds a new ParseError::BlankModuleName variant, unit tests covering absence/empty/whitespace-only names (including tab and newline via TOML escapes), an integration test asserting the refusal happens before any component read for both the provider and worker boot roles, and two README lines documenting the requirement.

Why

An empty manifest name never reached downstream validation: the supervisor substituted a fallback namespace ("provider" or "module") before extensions ever saw it, so a blank-named adapter could silently install under an indistinguishable shared namespace, and a second blank-named adapter was refused as a duplicate rather than as a bad name.
Closes #78

Testing

Independent gate on a fresh clone of nullislabs/nexum-runtime, detached at origin/seam/c1-reject-blank-names.
Provenance verified against the live remote: HEAD matches refs/heads/seam/c1-reject-blank-names, base origin/main is a strict ancestor, range is 2 commits, 4 files, +59/-3.
Full CI-parity battery, every step inside nix develop --command (rustc 1.94.0, nextest 0.9.127):
cargo fmt --all -- --check: clean.
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings: clean.
just build (engine + example + 3 example modules + 6 wasm fixtures): clean.
CI=1 cargo nextest run --workspace --all-features --locked: 649 run, 649 passed, 0 skipped, 0 failed.
cargo test --doc --workspace --all-features --locked: all doctest targets ok, 0 failed.
RUSTDOCFLAGS='-D warnings' cargo doc --workspace --no-deps --locked: clean.
just test-e2e: 11 run, 11 passed, 405 filtered out (expected: recipe filters to supervisor::tests::e2e + digest::e2e_).
Em-dash scan of added lines: zero hits.

AI Assistance

implement claude-fable-5, red-team claude-opus-5, PR claude-sonnet-5

mfw78 added 2 commits August 6, 2026 02:07
AI Assistance: Claude Fable 5 used for implementation and tests
AI Assistance: Claude Opus 5 used for red-team review and test hardening
@mfw78
mfw78 merged commit d99d16e into main Aug 6, 2026
4 checks passed
@mfw78
mfw78 deleted the seam/c1-reject-blank-names branch August 6, 2026 07:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

manifest: reject blank names instead of substituting a fallback namespace

1 participant