A resource can name the version of the build it uses #156

Merged
jschoubben merged 1 commits from feat/142-a-version-can-reach-a-path into main 2026-09-30 08:04:02 +00:00
Owner

novox/hq issue 142 — the second of the two things ADR 0141's own insight named: a version cannot reach the path.

A component is unpacked into a directory named for its version so it can read its own version from its path. An archive named a fixed path and nothing interpolated the build into it, so nothing could ask for .../versions/<version>/ and every machine took a hand-placed fallback.

A resource using an archive or a bundle may now say ${version} in any of its values. No artifact name in the reference — the resource already says which artifact it is for.

The version is the digest, short, not the commit. Two builds of one commit are meant to be the same bytes (every toolchain is -trimpath for that), so a content-addressed version means an unchanged build resolves to the path it already had. A commit-named path would move for an identical binary and recreate everything reading it.

An image is refused one with a reason: an image is not unpacked, so it has no versioned place — and left alone it would reach a machine as literal text and be created as a directory called ${version}.

make check: only the pre-existing failure.

novox/hq issue 142 — the **second** of the two things ADR 0141's own insight named: *a version cannot reach the path*. A component is unpacked into a directory named for its version so it can read its own version from its path. An archive named a fixed path and nothing interpolated the build into it, so nothing could ask for `.../versions/<version>/` and every machine took a hand-placed fallback. A resource using an archive or a bundle may now say `${version}` in any of its values. No artifact name in the reference — the resource already says which artifact it is for. **The version is the digest, short, not the commit.** Two builds of one commit are meant to be the same bytes (every toolchain is `-trimpath` for that), so a content-addressed version means an unchanged build resolves to the path it already had. A commit-named path would move for an identical binary and recreate everything reading it. An image is refused one with a reason: an image is not unpacked, so it has no versioned place — and left alone it would reach a machine as literal text and be created as a directory called `${version}`. `make check`: only the pre-existing failure.
jschoubben added 1 commit 2026-09-30 08:03:56 +00:00
novox/hq 04-ISSUES/142, and the second of the two things ADR 0141's own
insight named: "a version cannot reach the path". A component is unpacked
into a directory named for its version so it can read its own version from
its path — and an archive named a fixed path in the manifest with nothing
interpolating the build into it, so nothing could ask for
.../versions/<version>/ and every machine took a hand-placed fallback.

A resource using an archive or a bundle may now say ${version} in any of
its values. No artifact name in the reference: the resource already says
which artifact it is for, and a second name is a second thing to keep in
step.

The version is the artifact's digest, short, and not the commit. Two
builds of one commit are meant to be the same bytes — every toolchain here
is -trimpath for that reason — so a content-addressed version means an
unchanged build resolves to the path it already had. A commit-named path
would move for an identical binary and recreate everything that reads it.

An image is refused one, with a reason: an image is not unpacked, so it
has no versioned place. Left alone it would reach a machine as literal
text and be created as a directory called ${version}.
jschoubben merged commit 94ab9f665e into main 2026-09-30 08:04:02 +00:00
jschoubben deleted branch feat/142-a-version-can-reach-a-path 2026-09-30 08:04:02 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#156