fix(blueprints): gate confirmed apply on live intent fingerprint (#1663)

* fix(blueprints): gate confirmed apply on live intent fingerprint

reconcileConfirmedPlan only checked approval_status, so a concurrent compose
edit during Apply could deploy unapproved content under a stale fingerprint.
Match the tick-path fingerprint gate, refuse Apply when live intent drifts,
and surface reconciler refusal as PREVIEW_STALE instead of a false success.

* test(blueprints): cover matching-fingerprint reconcileConfirmedPlan path

Prove the production allow branch still deploys authorized actions when the
approval fingerprint matches, and does not execute unauthorized blast nodes.

* fix(blueprints): report live approval after confirmed snapshot apply

A concurrent edit can clear approval while multi-node snapshot deploy is
still running. Keep the in-flight snapshot contract, but re-read live
effectiveApproval before responding and warn in the rollout dialog when
approval is no longer current.
This commit is contained in:
Anso
2026-07-21 20:31:13 -04:00
committed by GitHub
parent e079a5baf3
commit 155db30554
5 changed files with 244 additions and 8 deletions
@@ -78,6 +78,8 @@ export function RolloutPreviewDialog({
const { failed = 0, pending = 0 } = result.outcomeSummary ?? {};
if (failed > 0) {
toast.warning(result.message || 'Rollout confirmed with node failures');
} else if (result.effectiveApproval !== 'approved') {
toast.warning(result.message || 'Confirmed snapshot finished; approval is no longer current');
} else if (pending > 0) {
toast.info(result.message || 'Rollout confirmed; some actions are still in progress');
} else {