Dashboard › publish › Distillation
34754a78-c249-4644-8c87-cf063aaf70da["lore_tm_v1_qpF0dfHOFc7d7xX1Bvu7v8bWc7w_dFPcn8_KVTZB9Gw","lore_tm_v1_4OKHToDr1sXZ85sQM8IwPOEUWy9t1ohhbxc8lVU9ffY","lore_tm_v1_D_7vEc0yv_ffBDASNDZyZtsOX69i-ClVSO96MV3kEac","lore_tm_v1_8Uo4RwRoOWGajBkpQFEusYvLM8clQJWBnJdbdy7--l0"]
Date: Sep 8, 2026
src/publish/current-accepted-event.js (48 lines). It imports currentAcceptedEvent from ../modules/approval-attestation.js and getAllPages from ./validate-approval-attestation.js; getCurrentAcceptedEvent({ getIssueEvents, issueNumber, repository }) fetches issue events, returns currentAcceptedEvent(...), and throws Error("The issue has no current accepted label event") if absent. main() requires APPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, and APPROVAL_ISSUE_REPOSITORY; fetches resource: "events" via getAllPages; writes the JSON event to stdout; exports { getCurrentAcceptedEvent, main }.StatusCode: non 2xx status code (404 GET https://docs.github.com/en/rest/repos/collaborators#get-repository-permissions-for-a-user).src/publish/inputs.js (12 lines). It imports @actions/github, @actions/core, and detailsFromContext from ../modules/details-from-context; inputs() calls detailsFromContext({ context: github.context }) and sets the result GitHub Actions output via core.setOutput("result", result), then is immediately invoked.auto-approve.yml:21-34 applies accepted with the Sentry Internal App token, causing GitHub to record that app as the label actor; publish.yml:63 forwards that actor, while approval-authorizer.js:20-34 special-cases only getsantry[bot] and otherwise authorizes the generic app by repository role. Consequence: auto-approvals may fail or any accepted label written by that app may be trusted. Recommended requiring request-bound auto-approval proof.publish.yml:196-219 validates once, then mints the release token and performs checkout before Craft executes at publish.yml:265-327; validate-approval-attestation.js:71-99 establishes labels/attestations only at read time and does not require the issue to remain open. Removing accepted/ci-ready or closing the issue during that interval would not stop publication. Recommended revalidating the live canonical request immediately before Craft in a fenced transition.publish.yml:327 executes mutable getsentry/craft:latest while publish.yml:338-381 provides publishing credentials and secrets. Recommended pinning Craft to an immutable digest.issue.user.login, rejects case-insensitive self-approval, and binds attestation to the accepted-label event actor in authorize-approval.js:121-139; permission handling consumes role_name in approval-authorizer.js:28-34; GitHub numeric event IDs are accepted in approval-attestation.js:121-142.ci-poller.yml:29-44; CI-ready handoff binds the accepted event, uses literal output handling rather than sourcing, and validates the matching label actor before publishing in ci-poller.yml:102-126, ci-poller.yml:275-335, and validate-approval-attestation.js:89-99.DO-NOT-MERGE pending the three MUST-FIX security issues.