Dashboard › publish › Distillation
30f2c0e9-bfe8-4fb6-a2ec-01fa759b68bd["lore_tm_v1_1efxQy8T7nAlJ1HVKN2iG0ar2o9qNoPii6O7r6Q11Js","lore_tm_v1_fVi3tMBw9MXTDJHjO-X6vB6lOyB0igl78a3U09wXBwo","lore_tm_v1_zU-L6sC9wJ7WHOAiCd7NDq46DLFoxBrnJ8gMM8SEmw0","lore_tm_v1_VzANjYHvEyH1UKC7GOKtOw6fPiU0aR6znTBTNInSGFw","lore_tm_v1_jvi-Xr2e6NeavuLbT4h02fQuQqLlh_savm5J8sAlS64","lore_tm_v1_a9prg4JygqPF5oiCgMQNLYJbOLMGTEk7A-jJkGKi3XU","lore_tm_v1_n5192Ykio7RoTssj-X5XvzeVeRqspLxe1rHxpNNd9P0","lore_tm_v1_yrwkF5S9Nl8J8N9dWBpwoZcrUV22lPMn9QnBxrp3JmI","lore_tm_v1_cfyYL8QI4M0XA4mQWgvniJnMG6pXU0So41Vz2dwLSaU","lore_tm_v1_EXaAqPQK-n9zPM2it0f4aXI3jMMoNlZ_2aLqDpo-Vcs","lore_tm_v1_QW7h9Qe1tpUzJ-dIRsa80PyigKOmFIhT-56MtE2nrU4","lore_tm_v1_HkBv_8beCiiwpQtHdwNf87EGcRkViYi7_qvDWjUzUdM"]
.github/workflows/ci-poller.yml documents that workflow_dispatch can target any ref, so the controller checkout must use trusted code.ci-ready during the stale processing cycle.src/modules/details-from-context.js validates parsed publish-issue repo, version, and path using isPublishRepository(), isReleaseVersion(), and isPublishPath(); parsePublishTitle() returns null on parsing or validation failure, while detailsFromContext() throws specific invalid-title/repository/version/path errors. It derives merge_target through getReleaseRevisionDetails(), sets dry_run to "1" only for a dry-run label, and extracts checked targets with CHECKED_TARGETS_PARSER_REGEX.src/modules/ci-poller-input.js function getCiPollerInput({ title, issueBody, revision }) validates the parsed title’s repository, version, and path, reads currentRevision via getReleaseRevision({ issueBody, repo }), returns repository as getsentry/${repo}, and, when revision is supplied, returns an updated issueBody produced by updateReleaseRevision({ issueBody, repo, revision }).src/publish/update-issue.js attempts to parse process.env.PUBLISH_ARGS; malformed JSON only logs Could not parse publish inputs; skipping target update, after which it still calls updateIssue({ context, octokit, inputs }). Its top-level main() failure handler sets process.exitCode = 1.src/publish/update-issue.js parsing PUBLISH_ARGS as a stale compatibility shim because cleanup now depends only on trusted CRAFT_STATE_FILE_PATH; the key safety requirement is that malformed input must never block accepted revocation or state restoration.PUBLISH_ARGS parse because the cleanup wrapper remains fail-safe and no concrete need for removal had been established.gh issue list snapshot.src/publish/validate-approval-attestation.js fetches GitHub REST data with APPROVAL_TOKEN, Accept: application/vnd.github+json, and API version 2026-03-10; getAllPages() requests per_page=100 until a page contains fewer than 100 records.validateApprovalAttestation() concurrently retrieves the live issue, all issue events, and all comments. Approval requires an open issue, exact live title match, current accepted label, a current accepted event, optional exact expectedAcceptedEvent.actor and .eventId matching, and hasApprovalAttestation(). When requireCiReadyAttestation is true, it additionally requires a current ci-ready event, current ci-ready label, and hasCiReadyAttestation().gh issue list body snapshot. Under a concurrent issue mutation plus fresh approval, CI could run for revision A while publication uses revision B.src/publish/current-accepted-event.js function getCurrentAcceptedEvent() obtains all issue events, resolves the current event with currentAcceptedEvent(), and throws The issue has no current accepted label event when absent. Its CLI requires APPROVAL_TOKEN, APPROVAL_ISSUE_NUMBER, and APPROVAL_ISSUE_REPOSITORY, then writes the event as JSON to stdout.