Dashboard › publish › Distillation
23db23d8-0b5f-4b1d-b51d-8643443fa877["lore_tm_v1_kCJP1_T4b_xP7NKxRd7djpuRqL6wbAeUaWzPwKUzst4","lore_tm_v1_9nxyKTOQxm_8BOLO8KqeR184ngLDOjEQWvxO-NIiuT8","lore_tm_v1_arLrU-SJvHqVwtao9IAETeNUkwjBX0xdlEtHfASxNbU","lore_tm_v1_sCGJ-ZfXP65mgiM9hGCacBw2v9z4JFC6nv_LXUgkzvU","lore_tm_v1_F8aQcHsnF1T05vpZXRTmkO9DwUww_K_CAn1JM6DAvig","lore_tm_v1_H1O7aeJlhe1N_U6CtjEMdY2wLEW-t5LCObcqtPl6YAk","lore_tm_v1_XJILCssrWKy5gDFSrnZU1CsO5z_KDvMrUR4ZwmjPD34","lore_tm_v1_wzFKlGdOEezd5ZY1Y3zeZlQCmli9M0XyjOtUkdIIKtQ"]
Date: Aug 29, 2026
src/publish/__tests__/validate-approval-attestation.js and src/publish/__tests__/record-ci-ready-attestation.js.yarn vitest run src/publish/__tests__/validate-approval-attestation.js src/publish/__tests__/record-ci-ready-attestation.js failed: 2 test files failed, with 8 passed and 2 failed tests; duration 464ms (transform 65ms, import 128ms, tests 68ms).src/publish/__tests__/record-ci-ready-attestation.js had 3 tests: passed “binds the current approval to the app that will add ci-ready” (6ms) and “rejects an approval that changes before ci-ready is recorded” (2ms); failed “rejects a re-approval after the event observed by the poller” (14ms).record-ci-ready-attestation.js test expected recordCiReadyAttestation to reject with “The approval changed before CI could be marked …”, but it resolved with a <!-- publish-ci-ready ... --> comment attesting acceptedActor: "contractor", acceptedEventId: "200", ciReadyActor: "sentry-internal-app[bot]", and title publish: getsentry/sentry-javascript@10.0.0.src/publish/__tests__/validate-approval-attestation.js had 7 tests: passed acceptance of the current trusted attestation, rejection after title changes, rejection after accepted removal, rejection after accepted re-addition, CI-ready-proof requirement, and manual ci-ready rejection; failed “rejects a later attested approval when an earlier event was checked” (18ms), because validateApprovalAttestation() returned true rather than expected false.src/publish/validate-approval-attestation.js, src/publish/record-ci-ready-attestation.js, and .github/workflows/ci-poller.yml.src/publish/validate-approval-attestation.js (144 lines). It imports currentAcceptedEvent, currentCiReadyEvent, hasApprovalAttestation, and hasCiReadyAttestation from ../modules/approval-attestation.js.src/publish/validate-approval-attestation.js, getGitHubResponse(path) fetches https://api.github.com/${path} with Accept: "application/vnd.github+json", Authorization: Bearer ${process.env.APPROVAL_TOKEN}, and "X-GitHub-Api-Version": "2026-03-10".getIssue({ repository, issueNumber }) retrieves repos/${repository}/issues/${issueNumber} and throws Could not retrieve issue #${issueNumber}: GitHub returned ${response.status} on a non-OK response. getAllPages({ repository, issueNumber, resource }) retrieves paginated issue events or comments with per_page=100&page=${page}, accumulating records until a page contains fewer than 100 entries.validateApprovalAttestation({ attestationAuthor, expectedAcceptedEvent, issueNumber, issueTitle, repository, requireCiReadyAttestation = false }) concurrently retrieves the issue, events, and comments; obtains event = currentAcceptedEvent(events) and ciReadyEvent = currentCiReadyEvent(events).issueTitle; live accepted label exists; a current accepted event exists; if supplied, expectedAcceptedEvent.actor and .eventId exactly equal the current event’s actor and event ID; and hasApprovalAttestation({ attestationAuthor, comments, event, title }) succeeds.requireCiReadyAttestation is true, validateApprovalAttestation() additionally requires a current ci-ready event, live ci-ready label, and hasCiReadyAttestation({ acceptedEvent: event, attestationAuthor, comments, ciReadyEvent, title }); otherwise it returns only the approval-validation result.main() currently requires environment variables APPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, APPROVAL_ISSUE_REPOSITORY, APPROVAL_ISSUE_TITLE, and APPROVAL_ATTESTATION_AUTHOR; it passes REQUIRE_CI_READY_ATTESTATION === "true" but does not yet pass expectedAcceptedEvent from environment into validateApprovalAttestation(). Invalid validation throws The current accepted label has no matching approval attestation.ci-ready transition; it stated this would close the re-approval race without changing manual-dispatch behavior.