• v1 8b0fbac78a

    fix(auto-promote): fail loud on 403 instead of silently degrading (#15)

    Ghost released this 2026-04-28 18:11:59 +00:00 | 210 commits to main since this release

    Independent code review caught a Critical issue inherited from the
    pre-extraction workflow: the branch-protection API call falls through
    to '{}' on any non-200, then the empty-GATES check treats this as
    "no gates configured (or API inaccessible)" and sets ok=true. Combined
    with --ff-only being ancestry-only (not test-status), a green-but-
    flaky source branch could ff-promote red commits to the target with
    zero CI enforcement.

    The conflation of three response classes is the bug:

    200 with .contexts[] populated → honor the gates (correct)
    200 with empty .contexts → "no gates configured" → ok=true (correct)
    404 (no branch protection) → "no gates configured" → ok=true (correct)
    403 (token lacks permission) → silently treated like 404 (BUG)

    Use gh api -i to capture the HTTP status line and discriminate:

    • 200 → extract body, proceed to gate-check loop
    • 404 → legitimate fallback to --ff-only safety, log notice
    • 403/401 → fail loud with a concrete fix ("add administration: read
      to your caller's permissions block")
    • any other → fail loud with the response prefix for debugging

    Also:

    • Update the README in the workflow header to document the
      administration: read requirement.
    • Add administration: read to molecule-ci's own self-caller
      (auto-promote-staging.yml) so its behavior is preserved.

    Verified locally against four real API responses:

    • molecule-core/staging → HTTP 200, 8 gates → loop runs
    • molecule-ci/main → HTTP 200, 0 gates → ok=true (notice)
    • hackathon org-template/main → HTTP 200, 0 gates → ok=true (notice)
    • this-repo-does-not-exist → HTTP 404 → legitimate fallback path

    Closes a Critical from the post-merge review of #14.

    Co-authored-by: Claude Opus 4.7 (1M context) noreply@anthropic.com

    Downloads