Commit Graph

2 Commits

Author SHA1 Message Date
Jordan Ritter 6865c3d1b8 fix(showcase): activate prod pin via serviceInstanceDeployV2 + verify running==pinned
Bug #2: promote used serviceInstanceRedeploy, which replays the EXISTING
deployment and never pulls the newly-pinned digest, so prod could keep
serving stale. Switch to serviceInstanceDeployV2 to spawn a NEW deployment
that pulls the pinned digest, then verify_serving_digest! fail-loud asserts
the new deployment reaches SUCCESS and its meta.imageDigest == the pinned
digest. Update the promote mock-GraphQL fixtures across the spec suite to
return serviceInstanceDeployV2 + meta.imageDigest accordingly.
2026-06-18 16:20:43 -07:00
Jordan Ritter f2a199b78c feat(showcase): add P5 mutation-correctness verification (boolean + re-query retry) to promote
serviceInstanceUpdate returns a Boolean scalar — the spec requires we
confirm that boolean is true AND re-query serviceInstance to confirm
BOTH source.image advanced to the new digest AND updatedAt strictly
advanced past the pre-mutation value. Image-equality alone is
insufficient: a no-op re-pin to the current value would otherwise
appear green.

Implementation:
- PromoteCommand::SERVICE_INSTANCE_RECHECK_QUERY: minimal query adding
  updatedAt (kept separate from snapshot's SERVICE_INSTANCE_QUERY to
  avoid disturbing snapshot behavior).
- PromoteCommand.pin_and_verify: pre-query updatedAt, run
  serviceInstanceUpdate, assert boolean true, run serviceInstanceRedeploy,
  then re-query up to RETRY_COUNT=3 times with RETRY_DELAY_SEC=10s
  apart. Each retry must observe BOTH gates green (image match AND
  updatedAt > pre_update_ts). Otherwise raises PromoteCommand::MutationError.
- execute_promotion now calls pin_and_verify (instead of
  RestoreCommand.pin_and_redeploy) so promote inherits the verification.
  MutationError is caught and converted to exit 1.

5 new P5 tests: boolean=false refusal, happy-path success,
image-advanced-but-ts-stale refusal, all-retries-stale refusal, and
late-third-retry success.
2026-05-29 11:45:11 -07:00