Dashboard › publish › Distillation
39effa20-bd74-4c7a-aebd-534a09b94723["lore_tm_v1_pk0I2P8InQjeOI_ZoL_MFciHagnYCvI7qBhB8d0laDM","lore_tm_v1_P0ZO4xgPf_nqDay00xjUvsdFITc2AQ2zhM9fV3CYH8c","lore_tm_v1_qArCBsMjzwdL9Q0NJG6RqSgNpvEr8efE5OO2gfFg3Rg","lore_tm_v1_ovUiOYQP0dGkbsTx7z2XlFV-IpD8omLGlfWAcetFnWc","lore_tm_v1_RbbYKYN686l3hzllzjW9XAbXO_18-p8DArwnLnE-uNg"]
Date: Aug 29, 2026
/home/byk/Code/getsentry/publish contains .eslintrc.js, .git/, .github/, .gitignore, .lore.md, AGENTS.md, auto-approve-repos.txt, docs/, LICENSE, node_modules/, package.json, README.md, src/, vitest.config.js, and yarn.lock (15 entries).src/publish/current-accepted-event.js, src/publish/record-ci-ready-attestation.js, src/publish/validate-approval-attestation.js, src/publish/authorize-approval.js, src/modules/approval-attestation.js; tests: src/publish/__tests__/current-accepted-event.js, src/publish/__tests__/record-ci-ready-attestation.js, src/publish/__tests__/validate-approval-attestation.js, src/publish/__tests__/authorize-approval.js, src/modules/__tests__/approval-attestation.js, and src/modules/__tests__/approval-authorizer.js..github/workflows/publish.yml uses the issue title (example: "publish: getsentry/foo@1.2.3") to handle duplicate approval events; its poller always adds ci-ready..github/workflows/ci-poller.yml must always allow workflow_dispatch for manual recovery.ci-ready after it changes while CI is being inspected.ci-ready.src/modules/approval-attestation.js defines prefixes <!-- publish-approval and <!-- publish-ci-ready , suffix -->, and creates base64url-encoded JSON attestations via createAttestation(prefix, value).createApprovalAttestation({ actor, eventId, title }) records { actor, eventId: String(eventId), title }; createCiReadyAttestation({ acceptedEvent, ciReadyActor, title }) records { acceptedActor: acceptedEvent.actor, acceptedEventId: String(acceptedEvent.eventId), ciReadyActor, title }.parseAttestation(body, prefix) locates the first prefix/suffix pair, base64url-decodes and JSON-parses it, returning null for absent/malformed content. parseApprovalAttestation(body) requires string actor, eventId, and title; parseCiReadyAttestation(body) requires string acceptedActor, acceptedEventId, ciReadyActor, and title.compareEventIds(left, right) strips leading zeroes, requires decimal-only IDs or throws Error("Invalid issue event ID"), compares normalized length first then localeCompare.currentLabeledEvent(events, labelName) filters labeled events with matching event.label?.name, string/number event.id, and event.actor?.login; returns the highest numeric event ID as { actor, eventId: String(event.id) }, or null for no candidates/invalid IDs. currentAcceptedEvent(events) and currentCiReadyEvent(events) call it for "accepted" and "ci-ready" respectively.hasApprovalAttestation({ comments, event, title, attestationAuthor }) requires a comment authored by attestationAuthor whose approval attestation exactly binds actor, eventId, and title; hasCiReadyAttestation({ comments, acceptedEvent, ciReadyEvent, title, attestationAuthor }) requires a comment by attestationAuthor whose ci-ready attestation exactly binds accepted actor/event ID, ci-ready actor, and title.