Skip to content

fix(varve): pin the layer by digest — the rolling channel republished 2026.08.4 - #312

Merged
avrabe merged 1 commit into
mainfrom
fix/varve-pin-digest
Aug 28, 2026
Merged

fix(varve): pin the layer by digest — the rolling channel republished 2026.08.4#312
avrabe merged 1 commit into
mainfrom
fix/varve-pin-digest

Conversation

@avrabe

@avrabe avrabe commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

The symptom

Every varve-shimmed tool invocation in this repo currently fails:

$ varve which synth
error: layer 2026.08.4 is installed more than once under different digests
(2 entries) and the pin carries no digest to disambiguate — add
`digest = "sha256:…"` to the pin

Exit 1, nothing on stdout. Any script doing S=$(varve which synth) gets an
empty string and then either fails obscurely or silently falls back to an
ambient binary.

The cause

The rolling channel republished layer 2026.08.4 under a second manifest
digest. Both are in the local store:

manifest digest installed
sha256:7e48ccc3… 2026-08-27 00:35
sha256:c1e6a418… 2026-08-27 23:45

It is a re-publication, not a content change

varve inspect under each pin returns the same 47-line inventory,
byte-identical apart from the layer's own digest line. Every dispatched tool
hashes the same under both:

tool version sha256 (first 16)
synth 0.58.0 033d7c61118e7093
loom 1.4.0 9583f530baa0d6f0
meld 0.52.0 88fb38bd1e796632
witness 0.43.0 3c54bf7bde25f284
rivet 0.34.0 72b1b81dab0b8a78

So nothing built against either copy is suspect. No committed artifact needs
rebuilding.

The fix, and what it costs a claim

Pin the later digest — what the channel serves now — and document it.

This falsifies something docs/toolchain-pin.md rested on. On the rolling
channel a layer name is not a stable identifier: layer = "2026.08.4"
resolved to one manifest on 27 Aug and to two by 28 Aug. Any reproducibility
claim anchored to the name alone is falsifiable, and was. Only the digest
pins the artifact. The doc now says so.

Kill-criterion

Strip the digest line from varve.toml and run varve which synth. It must
exit 1 with the ambiguity error. Verified:

exit=1 msg=error: layer 2026.08.4 is installed more than once under different digests (2 entries) and

With the digest present, all five tools resolve (versions above).

Note on varve itself

Its refusal is the feature working — it exited non-zero and named the fix
instead of guessing. A shim that fell back to an ambient binary would have
produced a build attributable to no layer at all. Reporting the duplicate
publication upstream separately.

🤖 Generated with Claude Code

https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo

@codecov

codecov Bot commented Aug 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

… 2026.08.4

`varve which <tool>` in this repo exits 1 and resolves nothing:

    error: layer 2026.08.4 is installed more than once under different
    digests (2 entries) and the pin carries no digest to disambiguate

The rolling channel republished `2026.08.4` under a second manifest digest
(`7e48ccc3…` installed 27 Aug 00:35, `c1e6a418…` 27 Aug 23:45), so a
name-only pin no longer identifies one artifact. Every varve-shimmed tool
invocation in gale has been failing since.

The two manifests carry IDENTICAL payloads — `varve inspect` returns the same
47-line inventory under each, byte-identical apart from the layer's own digest
line, and synth/loom/meld/witness/rivet all hash the same under both. This is
a re-publication, not a content change.

Pin the later digest (what the channel serves now) and record the evidence in
docs/toolchain-pin.md, including the negative control: strip the digest line
and `varve which synth` must exit 1 again.

This also falsifies a claim that doc used to rest on. On the rolling channel a
layer NAME is not a stable identifier — "layer = 2026.08.4" resolved to one
manifest on 27 Aug and to two by 28 Aug. Only the digest pins the artifact.

varve's refusal is the feature working: it exited non-zero and named the fix
rather than guessing. A shim that fell back to an ambient binary would have
produced a build attributable to no layer at all — which is exactly the
failure this pin exists to prevent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011QG86sovTbfnPNY9SfhSmo
@avrabe
avrabe force-pushed the fix/varve-pin-digest branch from 801f749 to 73385e9 Compare August 28, 2026 02:30
@avrabe
avrabe merged commit f9e76fe into main Aug 28, 2026
61 checks passed
@avrabe
avrabe deleted the fix/varve-pin-digest branch August 28, 2026 03:50
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