Skip to content

Verified: Continuous deployment

Each claim the Continuous deployment page makes, with the tests that prove it in the last green CI run: 2 of 11 verified, 3 with no test yet. The claims live in docs/claims/deployment.yaml.

Last green CI run 16 Oct 2026, 14:48 UTC on c7618d3 · all runtime claims

DEP-001 partly verified

naut new with the Kubernetes deploy feature (--deploy) scaffolds a Dockerfile, deploy/k8s.yaml and a deploy workflow, all rendered without leftover template syntax, and none of them without the feature.

where the docs say so · The no-feature cases assert Dockerfile and deploy/k8s.yaml are absent but never that .github/workflows/deploy.yml is absent.

  • pass TestScaffoldVariants/demo with deploy in cmd/naut
  • pass TestScaffoldVariants/demo manifest project in cmd/naut
  • pass TestDeployWorkflowRenders in cmd/naut

DEP-002 partly verified

The scaffolded deploy workflow runs check, test and build, builds the binary with naut build, and pushes an image to GHCR using the repo's own GITHUB_TOKEN.

where the docs say so · Asserts the workflow text contains naut build, naut test, ghcr.io and the repository variable; the naut check step and the GITHUB_TOKEN login are not asserted, and the workflow is never run.

  • pass TestDeployWorkflowRenders in cmd/naut

DEP-003 no test yet

Every merge that passes its acceptance suites becomes an image tagged with its sha, and a PR that fails its suites cannot merge.

where the docs say so · Gap. A CI-pipeline property of the scaffolded workflows; nothing in the test suite executes it.

DEP-004 partly verified

naut build emits a self-contained controller: runtime plus project in one binary.

where the docs say so · Asserts the output is the runner's bytes plus the project archive, that the startup reader finds it, and that project.Load over that archive builds a runtime. The runner is a fake byte string, so a real built binary starting and scanning its embedded project is never executed.

  • pass TestBuildEmbedRoundTrip in cmd/naut
  • pass TestBuildEmbedsHMIAndBuiltBinaryServesIt in cmd/naut

DEP-005 no test yet

The Dockerfile is distroless/static with no shell, so the binary must be static; release CLIs are static builds and the workflow sets CGO_ENABLED=0.

where the docs say so · Gap. The Dockerfile content is only checked for unrendered template syntax.

DEP-006 verified

A deploy scaffold adds the retain: {} and redundancy: {} sections to the manifest, which the two-replica Deployment depends on.

where the docs say so

  • pass TestDeployWorkflowRenders in cmd/naut

DEP-007 partly verified

A Lease elects the scanning leader, and when the leader dies the standby acquires the lease on its next 1 s tick, 4 s at worst.

where the docs say so · Exercised against a fake Kubernetes API; the real lease and the 4 s worst-case takeover bound are not tested.

  • pass TestFreshClusterAcquire in leader
  • pass TestRenew in leader
  • pass TestFollowerThenSteal in leader
  • pass TestCASRace in leader
  • pass TestStepDown in leader
  • pass TestRelease in leader

DEP-008 partly verified

Setpoints and online edits ride a ConfigMap across restarts and failovers.

where the docs say so · Against a fake API server; a real cluster failover is not exercised.

  • pass TestConfigMapStoreRoundTrip in retain
  • pass TestConfigMapStoreSaveUpdatesWhenPresent in retain
  • pass TestRetainedProgramApplies in runtime
  • pass TestTakeoverReloadsAndResetsFrames in runtime

DEP-009 verified

Either replica answers the Service: a standby proxies API traffic to the leader.

where the docs say so

  • pass TestStandbyProxiesToLeader in server
  • pass TestLeaderNeverProxies in server

DEP-010 no test yet

The scaffolded RBAC grants exactly the verbs the lease and ConfigMap need and not delete.

where the docs say so · Gap. The k8s manifest's RBAC rules are not asserted by any test.

DEP-011 partly verified

The deployed binary embeds the project's git history and serves GET /api/program/history with no git, .git directory or network.

where the docs say so · Asserts the history rides the built archive and decodes back; serving it over GET /api/program/history from the built binary, and the no-git runtime environment, are not exercised here (see PH-004).

  • pass TestBuildEmbedsHistory in cmd/naut