Skip to content

feat(simulate): add what-if engine for state diff and effect sequence - #353

Merged
joshua-temple merged 2 commits into
mainfrom
feat/simulator-whatif-engine
Jun 25, 2026
Merged

joshua-temple merged 2 commits into
mainfrom
feat/simulator-whatif-engine

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Adds cascade simulate, a what-if engine that needs no Docker and no GitHub access. Given a manifest and current ci.state plus a hypothetical action, it replays the real orchestration logic (internal/promote) in record-only mode against a temp clone of the manifest, then prints a before and after state diff plus an ordered effect sequence (run, skip, gate).

The engine is action-agnostic via an Action interface; this lands the command, the state-clone, the diff and effect renderers, and one wired action (promote) end to end. The remaining actions follow in #312.

No on-disk state is mutated and no git or network call is made: the manifest is copied to a temp file, the transition is computed against the copy, and the copy is discarded. Additive only; schema_version, generator output, and cascade verify are unaffected.

Verification: go build ./... and go test ./... and golangci-lint run ./... all green; unit, golden-file, and end-to-end engine tests included.

Closes #311.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
Comment thread internal/simulate/diff.go Fixed
Comment thread internal/simulate/diff.go Fixed
Comment thread internal/simulate/diff.go Fixed
Comment thread internal/simulate/diff.go Fixed
@joshua-temple
joshua-temple enabled auto-merge (squash) June 25, 2026 15:09
Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple
joshua-temple merged commit 5c0eb33 into main Jun 25, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(simulate): what-if engine that prints a state diff and effect sequence

2 participants