What's wrong
The design spec says the service "Ships as a container image and a dotnet tool from one binary":
docs/superpowers/specs/2026-08-19-gitbranchstatecache-design.md L205-207 in ktsu-dev/GitLfsCache``
Deployment
Ships as a container image and a dotnet tool from one binary, as ktsu.GitLfsCache does.
What exists today:
- The dotnet tool part is done and publishes on every release (NuGet is at 1.0.36, matching
VERSION.md).
deploy/container/Dockerfile exists.
README.md:44 (docker pull ghcr.io/ktsu-dev/gitbranchstatecache:latest) and deploy/k8s/statefulset.yaml:28 both point at the image.
What's missing:
- The scaffold's
dotnet.yml had a container: job that pushed to ghcr.
- That job was dropped in 560cd9c ("ci: adopt the unified dotnet workflow"), and nothing replaced it.
- The current
.github/workflows/ci.yml calls the shared ci-shared.yml, which has no container step.
- ghcr has tags
1.0.0 to 1.0.5, and latest is the same digest as 1.0.5.
Failure scenario
Anyone who follows the README or applies deploy/k8s runs 1.0.5. That build is missing every fix released since, for example #23, #24, #37, #42, #43, #45, #46 and #47. Nothing signals the problem, because :latest still pulls successfully.
Suggested fix
Add a job that runs after a release. It should build deploy/container/Dockerfile for linux/amd64 and linux/arm64 and push both <version> and latest to ghcr.io/ktsu-dev/gitbranchstatecache.
The job can live in this repo's ci.yml or as an opt-in input on the shared ci-shared.yml. A shared input would also fix ktsu-dev/GitLfsCache#80, which is the same regression in the sister repo.
This repo needs the Dockerfile route rather than PublishContainer, because the image needs git installed.
Acceptance criteria
- A release publishes
ghcr.io/ktsu-dev/gitbranchstatecache:<version> and moves latest to it, for both architectures.
docker pull ghcr.io/ktsu-dev/gitbranchstatecache:1.0.N works for the release that adds the job.
What's wrong
The design spec says the service "Ships as a container image and a dotnet tool from one binary":
docs/superpowers/specs/2026-08-19-gitbranchstatecache-design.mdL205-207 in ktsu-dev/GitLfsCache``What exists today:
VERSION.md).deploy/container/Dockerfileexists.README.md:44(docker pull ghcr.io/ktsu-dev/gitbranchstatecache:latest) anddeploy/k8s/statefulset.yaml:28both point at the image.What's missing:
dotnet.ymlhad acontainer:job that pushed to ghcr..github/workflows/ci.ymlcalls the sharedci-shared.yml, which has no container step.1.0.0to1.0.5, andlatestis the same digest as1.0.5.Failure scenario
Anyone who follows the README or applies
deploy/k8sruns 1.0.5. That build is missing every fix released since, for example #23, #24, #37, #42, #43, #45, #46 and #47. Nothing signals the problem, because:lateststill pulls successfully.Suggested fix
Add a job that runs after a release. It should build
deploy/container/Dockerfilefor linux/amd64 and linux/arm64 and push both<version>andlatesttoghcr.io/ktsu-dev/gitbranchstatecache.The job can live in this repo's
ci.ymlor as an opt-in input on the sharedci-shared.yml. A shared input would also fix ktsu-dev/GitLfsCache#80, which is the same regression in the sister repo.This repo needs the Dockerfile route rather than
PublishContainer, because the image needs git installed.Acceptance criteria
ghcr.io/ktsu-dev/gitbranchstatecache:<version>and moveslatestto it, for both architectures.docker pull ghcr.io/ktsu-dev/gitbranchstatecache:1.0.Nworks for the release that adds the job.