Skip to content

A layer that carries only a composition is not an empty layer - #171

Merged
avrabe merged 2 commits into
mainfrom
fix/composition-only-layer
Sep 18, 2026
Merged

avrabe merged 2 commits into
mainfrom
fix/composition-only-layer

Conversation

@avrabe

@avrabe avrabe commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Found by bootstrapping the realm varve's own roadmap describes.

covalent carries no payloads of its own and only includes (REQ-COVALENT-001 clause 1): a pin names exactly one layer, so composing is the only way one pin reaches two toolchains, and a composition that also shipped binaries would be a fourth place tools are defined.

Its manifest parsed. plan reported 0 payload(s) from 0 release(s), realm 'covalent'. And deposit refused:

deposit has no tools — an empty layer is not a toolchain

A guard that is right about emptiness and wrong about composition — so the realm was unbuildable while the manifest, the planner and the docs all described it.

The fix

Empty means no payloads and nothing composed. The error message now says which of the two it meant, and that a composition is accepted, so the next person does not rediscover this from a refusal.

Controls

  • Reverting to the payload-only check → a composition is refused again.
  • Removing the guard entirely → a layer with neither payloads nor includes is accepted.

Both fail the new test. Gate: fmt, clippy -D warnings, 1003 workspace tests, trace-gate, rivet validate.

This joins v0.37.0, which is being cut for this same line of work: [[include]] in a manifest (#169) and a realm's stated opt-in reason reaching the deposit (#170, merged).

🤖 Generated with Claude Code

https://claude.ai/code/session_019TNtfRjLNhEz82G2ggeeNu

Found by bootstrapping the realm varve's own roadmap describes. `covalent`
carries NO payloads of its own and only includes (REQ-COVALENT-001 clause 1): a
pin names exactly one layer, so composing is the only way one pin reaches two
toolchains, and a composition that also shipped binaries would be a fourth
place tools are defined.

Its manifest parsed. `plan` said "0 payload(s) from 0 release(s), realm
'covalent'". And `deposit` refused: "an empty layer is not a toolchain" — a
guard that is right about emptiness and wrong about composition, which made
that realm unbuildable while the manifest, the planner and the documentation
all described it.

Empty now means empty: no payloads AND nothing composed. The error says so, so
the next person does not have to rediscover which of the two it meant.

Controls: reverting to the payload-only check refuses a composition again;
removing the guard lets a layer with neither payloads nor includes through.
Both fail the test.

Gate: fmt, clippy -D warnings, 1003 workspace tests, trace-gate, rivet validate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019TNtfRjLNhEz82G2ggeeNu
@avrabe
avrabe enabled auto-merge (squash) September 18, 2026 18:40
@avrabe
avrabe merged commit e5f9780 into main Sep 18, 2026
26 checks passed
@avrabe
avrabe deleted the fix/composition-only-layer branch September 18, 2026 20:10
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.

1 participant