Problem
The ghcr.io/thedancingdeveloper-org/vogt-stack repository interleaves two deliberately different artifacts under one name, with nothing in the registry distinguishing them:
- Release builds (
X.Y.Z, X.Y, sha-<short>, latest) — built by release.yml on the lean pod base: CLI-free by policy (docs/DEPLOYMENT.md §7 states the signed release digests are CLI-free).
- Branch builds (
dev, dev-<longsha>, prod-<longsha>) — built by build.yml on the full pod base: carry the agent CLIs and toolchain, because the estate's own pods run coding sessions (build.yml selects full for dev/prod pushes).
A consumer inspecting the registry — or pinning by the natural-looking vogt-stack:<version>/latest — cannot tell they are getting the lean variant. A deployment that runs agent sessions and pins a release/latest stack digest comes up without claude/codex, and its session templates register but cannot start. This exact mispin has happened in practice more than once (v0.3.0 shipped agent-less this way; the "bake the AI clients into the release image" fix was written and deliberately reverted in favour of the CLI-free-release policy).
Proposals (any subset)
- Document the tag taxonomy in
docs/DEPLOYMENT.md so the two families and their variants are stated where a deployer reads (PR incoming).
- Stop tagging the lean release stack
latest — release.yml notes vogt-stack "is not the supported install of Vogt"; advertising latest on it invites exactly the wrong pin. (Semver tags could arguably go too, leaving the release stack addressable by digest + sha-<short> only.)
- Make the variant discoverable in the artifact itself — distinct image names per variant (e.g.
vogt-stack vs vogt-stack-lean), or at minimum an OCI label/annotation (org.opencontainers.image.variant=full|lean) so tooling and humans can check before running.
Non-goals
The lean/CLI-free release policy itself is settled and correct (public artifacts stay free of bundled third-party agent CLIs); this issue is only about the two variants being indistinguishable at the point of consumption.
Problem
The
ghcr.io/thedancingdeveloper-org/vogt-stackrepository interleaves two deliberately different artifacts under one name, with nothing in the registry distinguishing them:X.Y.Z,X.Y,sha-<short>,latest) — built byrelease.ymlon the lean pod base: CLI-free by policy (docs/DEPLOYMENT.md§7 states the signed release digests are CLI-free).dev,dev-<longsha>,prod-<longsha>) — built bybuild.ymlon the full pod base: carry the agent CLIs and toolchain, because the estate's own pods run coding sessions (build.ymlselectsfullfor dev/prod pushes).A consumer inspecting the registry — or pinning by the natural-looking
vogt-stack:<version>/latest— cannot tell they are getting the lean variant. A deployment that runs agent sessions and pins a release/lateststack digest comes up withoutclaude/codex, and its session templates register but cannot start. This exact mispin has happened in practice more than once (v0.3.0 shipped agent-less this way; the "bake the AI clients into the release image" fix was written and deliberately reverted in favour of the CLI-free-release policy).Proposals (any subset)
docs/DEPLOYMENT.mdso the two families and their variants are stated where a deployer reads (PR incoming).latest—release.ymlnotes vogt-stack "is not the supported install of Vogt"; advertisinglateston it invites exactly the wrong pin. (Semver tags could arguably go too, leaving the release stack addressable by digest +sha-<short>only.)vogt-stackvsvogt-stack-lean), or at minimum an OCI label/annotation (org.opencontainers.image.variant=full|lean) so tooling and humans can check before running.Non-goals
The lean/CLI-free release policy itself is settled and correct (public artifacts stay free of bundled third-party agent CLIs); this issue is only about the two variants being indistinguishable at the point of consumption.