Changes touching this path
- Liveness: one loot-core home for live/superseded/divergent/parked + the head partition (#216); CONTEXT.md vocabulary; rides along: cargo-dist release config (dist-workspace.toml, release workflow, 0.1.0 manifests) from the install-prototype session (loot-site map, #206)
3630469b · dbf3dbe6… - chore(release): attestations + unified sha256.sum + Linux smoke leg (#258)
Prep for cutting the real v0.1.0 release (spec §5-6):
- dist-workspace.toml: github-attestations = true (GitHub Artifact Attestations,
#221 integrity, verifiable via `gh attestation verify`) + checksum = sha256
(unified sha256.sum on the Release).
- release.yml regenerated by cargo-dist 0.32.0: adds attestations/id-token
permissions + the actions/attest step; the six target archives, both installers,
the unified sha256.sum and dist-manifest.json are unchanged.
- smoke-install.yml (standalone, so `dist generate` never clobbers it): on release
published it installs via the Linux `curl | sh` one-liner on a clean ubuntu
runner and resolves `loot --version`.
loot-cli is already 0.1.0. Firing the tag (`loot-first tag v0.1.0`) is a separate,
deliberate step. Refs #258.
924bda35 · dbf3dbe6…diff - Catch up to git main 809ddfe: #260 smoke default, #271 arm64 build, loot diff (#1), ADR 0034 dock retirement (#253)
587684dd · dbf3dbe6…diff - Turn off release attestations: unavailable on a private repo, and going public is gated (#652)
52ac7c00 · dbf3dbe6…diff - publish-r2: mirror release artifacts to Cloudflare R2 for anonymous download (#807)
The repo is private permanently (ADR 0045), so Release assets 404 for an
unauthenticated fetch — which is what broke `curl | sh`. This adds the anonymous
path that replaces them: every asset the Release publishes is mirrored to
dl.millerbyte.com/<tag>/, served from R2 with no credentials.
The bucket, its scoped credential and the dl.millerbyte.com custom domain are
provisioned by scripts/setup-artifacts.js (scripts @ 736f6e8), and the anonymous
fetch is already proven live against that bucket.
A *publish* job, not post-announce, and the ordering is load-bearing: publish jobs
run after `host` uploads the Release and `announce` waits for them, so R2 is
populated before the post-announce smoke test. Listed post-announce instead, #808's
`curl | sh` gate would race the very artifacts it fetches.
The job body is hand-owned in its own file so `dist generate` cannot clobber it —
the same shape as smoke-install.yml (#258). It carries a workflow_dispatch tag input
so it can be exercised against an existing release rather than first running during a
real one, verifies every mirrored asset anonymously against the Release's own sha256,
and warns (not fails) if the edge is not caching.
⚠ dist-workspace.toml also documents that it must be edited with `dist generate`,
never `dist init` — init rewrites the config from its own defaults and strips every
comment, which today destroyed the #270 native-ARM64-runner rationale and the whole
ADR 0045 attestations block before they were restored.
5b710e89 · dbf3dbe6…diff - a PR no longer uploads a cache nothing reads, and a daily sweep keeps the artifact budget under its own alarm (#835)
2a1e459e · dbf3dbe6…diff
Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.