Skip to content

Recover fail-closed ECR manifest verification for active release capture #117

Description

@alexeygrigorev

Parent: #110
Observed on CI run: https://github.com/DataTalksClub/website/actions/runs/31329237384

Incident

All source, quality, selected Django, Playwright, container, and aggregate CI gates passed for main 77167686cee6ce9c23e542527de639625799f913. Automatic deployment then stopped before publication or service mutation in auto-capture-prior with:

release failed safely: active image manifest is missing from development ECR

The live service remains healthy on accepted source ffc0f37b8631710546c825e2ebd8de85d40c478f, VERSION 20260809-164941-ffc0f37, digest sha256:eb091aec0f7edc66f6493acf9b1b14a23d6ee8fac5c0888888789713daae5730. The same capture already proved the full-SHA tag, digest description, and VERSION tag resolve to that digest; only the subsequent BatchGetImage manifest lookup failed.

Scope

Make active-image manifest verification tolerate the observed ECR lookup form while retaining exact, fail-closed proof. Do not skip prior capture, publish before capture, accept a mutable/wrong tag, or weaken compensation eligibility.

Acceptance criteria

  • Try the exact digest lookup first. If ECR does not return a usable manifest for that lookup, retry using the already-proven exact 40-character source-SHA tag.
  • The fallback succeeds only when there are no ECR failures, exactly one image is returned, its imageId.imageDigest equals the expected immutable digest, and its manifest is nonempty.
  • Wrong digest, missing/empty manifest, multiple/no images, malformed responses, and ECR failure results still stop before publication or service mutation.
  • Unit/contract tests cover direct success, fallback success, fallback wrong digest, fallback failure, and absent manifest.
  • Existing release identity, prior-pair, compensation, OIDC/current-main, and deployment contract tests stay green.
  • After independent acceptance, deploy the exact main commit through CI and verify live health/source/VERSION/digest plus historical event-total behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions