Repository navigation
fix: make no-op deploy output match its plan - #229
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Fixes #228.
Saved-plan human deploys now print the existing interactive no-op completion line. No-op plans state that the current release remains current and put the fresh-roll graph and commands under an explicit
--redeploycondition, including in the sealed JSON artifact.Why this is correct
Both planning and execution already use the same Compose/payload equality decision.
planWorkloadActionsdeliberately seals fresh-roll actions with reasonredeploy_onlywhen that decision is a no-op, so--redeploycannot widen approved retain actions. The command list and human graph omitted that condition, making an optional fresh roll look unconditional. Separately, the saved-plan adapter never rendered the successful no-op result.Preserving the default no-op follows the shipped capabilities contract for retaining unchanged workloads and the policies contract for
no_opwith exit 0. Showing both branches follows the plan-fidelity contract that runtime branches are shown as branches.docs/product.mddescribes the product direction; the shipped capabilities and executable-plan policies govern this correction.TestNoOpDeployReportsOutcome/saved_humanfailed with only the runner/applying-plan line, andTestNoOpPlanShowsRedeployAsConditionalfailed on unconditional recreate commands fortemporalandui.go test ./cmd/ob ./internal/onebox -run 'TestNoOp|TestExecuteNoOp|TestPlanWorkloadActionsSealsNoOp' -count=1passes. Coverage includes human saved/interactive output, JSON/NDJSON parity, no workload/job execution or activation, and existing under-lock drift rejection.just checkpasses: module/format checks, vet, the full Go suite, generated documentation, and site build. The site build emits Astro deprecation/content warnings. Opt-in Docker/SSH suites were not run.Effect on the safety envelope
None. This corrects the plan and outcome presentation. The sealed fresh-roll actions, approval requirements, binding checks, and execution decisions are preserved.
Checklist
just checkpasses locally.just checkverifies this).https://claude.ai/code/session_01AATfNEixcF8BQWkWJNDExs