Skip to content

fix(statewrite): route orchestrate and external state writes through WriteManifestState#389

Merged
joshua-temple merged 1 commit into
mainfrom
fix/statewrite-preserve-cli-version-sha
Jun 27, 2026
Merged

fix(statewrite): route orchestrate and external state writes through WriteManifestState#389
joshua-temple merged 1 commit into
mainfrom
fix/statewrite-preserve-cli-version-sha

Conversation

@joshua-temple

@joshua-temple joshua-temple commented Jun 27, 2026

Copy link
Copy Markdown
Collaborator

Problem

orchestrate.writeConfig and external.writeManifest re-marshaled the typed CICDFile, dropping manifest config the running binary does not model. This is the last lossy state-write class after #350/#371. It strips cli_version_sha (added in #384) on the next state commit, leaving a pin_mode: sha repo with SHA-pinned workflows but a manifest missing the pin declaration. That permanent drift fails the drift-check gate (the live fleet's 4env failure) and would re-open the setup-cli alerts on cascade's own repo after its next state write.

Fix

Route both writers through config.WriteManifestState (yaml.Node splice of only state/latest_release), preserving all other config verbatim. New tests assert cli_version_sha, an unmodeled field, the ci wrapper, and no runtime-field leak survive. go test ./... green. Closes #372.

…WriteManifestState

orchestrate writeConfig and external writeManifest re-marshaled the typed CICDFile, dropping any manifest config the running binary does not model (and writeConfig dropped the ci: wrapper). This is the last lossy state-write class after #350/#371: it strips cli_version_sha (added in #384) on the next state commit for a binary that predates it, leaving a pin_mode:sha repo with SHA-pinned workflows but a manifest that no longer declares the pin, which reads as permanent drift and would re-open the setup-cli code-scanning alerts. Route both writers through config.WriteManifestState so only state and latest_release change and all other config, modeled or not, survives verbatim. Closes #372.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(statewrite): preserve unmodeled config in the orchestrate and external-update state writes

1 participant