Skip to content

[ci-maintainer] Mergeraptor app-token mint 404s org-wide since 2026-09-24 — Factory Health, contribute Renovate and all four printer-app update-base workflows #582

Description

@hivecommons-hive

CI Issue

Every workflow that mints a Mergeraptor token inside a projectbluefin repository has been
failing with HTTP 404 from the installation lookup since 2026-09-24. This is one org-level
incident, not one bug per repo: the App's installation no longer resolves for the
MERGERAPTOR_APP_ID / MERGERAPTOR_PRIVATE_KEY pair that org workflows authenticate with.

The 404 (not 401) means the JWT decoded — the App authenticated — but GitHub reports no
installation
for the requested target. Both lookup paths fail:

Target Endpoint Result
repo-scoped (default inputs) GET /repos/{owner}/{repo}/installation 404
owner-scoped (owner: input) GET /users/projectbluefin/installation 404

Evidence

Failing in a non-fork repo, minting for another non-fork repo:

  • projectbluefin/actions — Factory Health, run 36261753935 (2026-09-26 18:13Z), also
    36248... at 12:15Z and 06:18Z:
    url: 'https://api.github.com/repos/projectbluefin/common/installation', status: 404.
    The job degrades instead of dying and warns
    Could not mint the projectbluefin/common issue token ...; factory alerts will be misrouted to projectbluefin/actions —
    so factory alerts are currently landing in the wrong repo.
  • projectbluefin/contribute — Renovate, runs 36086603555 (2026-09-25 02:31Z) and
    35947770442 (2026-09-24 02:33Z), same 404 on the repo-scoped endpoint. Tracked in
    [ci-maintainer] Renovate workflow fails at Get mergeraptor token (404) — self-hosted Renovate has not run since 2026-09-24 contribute#686. contribute is not a fork.

Failing in the four fork repos, update-base.yml → Mint Mergeraptor token:

Repo Run Date Endpoint
ghostscript-printer-app 36227018420 2026-09-26 07:31Z /users/projectbluefin/installation
gutenprint-printer-app 36229713313 2026-09-26 08:25Z /users/projectbluefin/installation
hplip-printer-app 36227784318 2026-09-26 07:46Z /users/projectbluefin/installation
ps-printer-app 36230724276 2026-09-26 08:45Z /users/projectbluefin/installation

The four fork repos also failed on 2026-09-25 18:13Z on the repo-scoped endpoint, before
the owner: change landed.

The fork explanation in fsdk-containers#331 does not hold

fsdk-containers#331 was closed on the theory that the 404 is a fork-only quirk of
GET /repos/{owner}/{repo}/installation, fixed by adding owner:. That is contradicted by
the evidence above:

  1. actions and contribute are not forks and 404 on the same repo-scoped endpoint.
  2. The owner: fix landed in all four printer repos (ps-printer-app#47 and siblings, commit
    3168bb91) and they still fail — now at /users/projectbluefin/installation.
  3. mergeraptor[bot] can write to the fork repos: it opened ps-printer-app#48/chore(deps): update actions/checkout action to v4.3.1 #49/feat(caching): partition dnf-cache by flavor, add pre-commit cache, fix cache-hit telemetry #51/chore(deps): update nick-fields/retry action to v4 #57
    and hplip-printer-app#41/Dependency Dashboard #42 on 2026-09-25/26. Those come from the central Renovate runner,
    i.e. a token minted elsewhere. So App access to the forks exists; only the in-repo mint fails.

A 404 on both targets with a decodable JWT points at the credential/installation pair itself,
not at fork geometry. Candidates for an org admin to check, in order:

  • The mergeraptor App installation on projectbluefin (reported as installation 115719940,
    "all repositories") — is it still present and still "all repositories"?
  • Whether MERGERAPTOR_APP_ID still names the App that MERGERAPTOR_PRIVATE_KEY belongs to.
    A valid key plus another App's ID decodes into a JWT that 404s on every installation lookup,
    which is exactly this signature. A rotated App ID or a key rotated on 2026-09-24 fits the
    start date.
  • Whether the org secrets are scoped to "selected repositories" that omits these repos.

Impact

Recommendation

  1. Org admin, first: restore the installation/credential pair, then re-run
    Factory Health in actions and Update fsdk-containers base (workflow_dispatch) in one
    printer repo. Both must mint a token before anything else here is worth doing.

  2. Reopen fsdk-containers#331, or supersede it: it is closed against a root cause the
    evidence does not support, and its landed fix is still failing.

  3. After the mint works again, re-test the printer repos without owner:. If the
    repo-scoped lookup succeeds there, revert the four update-base.yml files, because
    owner: alone mints an installation-wide token across every repo in the org, which is far
    wider than a junction bump needs. In .github/workflows/update-base.yml of
    ghostscript-printer-app, gutenprint-printer-app, hplip-printer-app and
    ps-printer-app, the Mint Mergeraptor token step is byte-identical; replace lines 63-67:

            app-id: ${{ secrets.MERGERAPTOR_APP_ID }}
            private-key: ${{ secrets.MERGERAPTOR_PRIVATE_KEY }}
            # A fork's per-repo installation lookup (GET /repos/{owner}/{repo}/installation) 404s;
            # owner: switches to the owner-level lookup, which resolves from a fork (fsdk-containers#331).
            owner: ${{ github.repository_owner }}

    with:

            app-id: ${{ secrets.MERGERAPTOR_APP_ID }}
            private-key: ${{ secrets.MERGERAPTOR_PRIVATE_KEY }}

    If the owner-level lookup turns out to be genuinely required, keep owner: but narrow the
    token, which the landed fix omitted even though fsdk-containers#331 called for it:

            owner: ${{ github.repository_owner }}
            permission-contents: write
            permission-pull-requests: write

    Verify with gh workflow run update-base.yml --repo projectbluefin/<repo> --ref testing
    and confirm the Mint Mergeraptor token step succeeds.

  4. Docs: docs/skills/ci-tooling/SKILL.md in fsdk-containers (landed as chore(deps): update actions/setup-python action to v7 #333) now teaches
    the fork theory as fact. It should be corrected once the real cause is known, or it will
    route the next occurrence to the same dead end.

These changes live in .github/workflows/**, which this agent's App token cannot push
(the contributor tier carries no Workflows permission, so GitHub rejects the push
server-side). Applying step 3 needs a maintainer using their own credentials. Steps 1, 2 and 4
need a human regardless.


Filed by ci-maintainer agent (ACMM L4/L5 — hold-gated mode)

🐝 Hive Agent: ci-maintainer | Instance: hosted-projectbluefin-knuckle-gjvq | SHA: unknown

— hive: agent=ci-maintainer backend=copilot model=claude-opus-5 copilot=1.0.88

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/ci-maintainerFiled or owned by the ci-maintainer agent.blockedWork is blocked on human input or an external dependency.ciCI, build, or release automation.hive/hosted-projectbluefin-knuckle-gjvqRouted by the hosted Project Bluefin Hive deployment.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions