Dashboard › publish › Distillation
831f350d-36ce-471d-91e0-a445569f9a64["lore_tm_v1_3ZvNE_lEd_lPKZXgKzuIlbFLs5smyI9-YBp1Hsv6KNk","lore_tm_v1_guf7er2-YCBZDlzOZSYA9JLsDNcMPIUqmVaf419WaJI","lore_tm_v1_UCbbp2L03SQPVH6Y52vjWrSTN7SBZPQywi0wMZy2sls","lore_tm_v1_l2f2zTALevhPJvztEKeIhe5ceqQguDAdq72QKsLSues","lore_tm_v1_WCTkd8ScrkJG8c7GnpRQn8jja0uzIftFN1sFEPG98zk","lore_tm_v1_897o0eylPtWR_zHHpbabCvBQTpUNjIsKUbd3R79iwu4","lore_tm_v1_52lOSWrQpc1I1aL8TGKBLximPjqth9fEXzcTkS8QIds","lore_tm_v1_Ci1UL7j4NihdVBER5zZgT76iQtj5ebeJuGlGiRWIPq4","lore_tm_v1_SykF6cY_OQyKXxV7oVAQof5z-6OS2UgIufLQJ-AxPlI","lore_tm_v1_G52A1xf9ymaOniorqBwVOJZ9k3XnBQ2b8KbidSiEHHE","lore_tm_v1_Ncdcat2PAoHZ_U5IyBVSga9Goo5QDUjNQSHTjvdgQfA","lore_tm_v1_EBSdhWodM1YWh6_t14B9hd3czNPZfgYziodTj8MyBls","lore_tm_v1_y2xFyAAEGp3Pbl1ZmFgL1Si1V2zPfXlP-hoDlhByhfk","lore_tm_v1_VtxuGluyDFOKxTyKxep_puJbdQvroLA3CWhluM4n6l4","lore_tm_v1_dko-0xKECgh1B2hsVD4X69_KlWcynm8GbsZ5dyTkmZs","lore_tm_v1_w4n5CastkeyS73E8roI6MymKXJBRiG9xe5CYCmp9nLw","lore_tm_v1_T0iV3KHWDUYee8EQNjr8upNHmj0WisgLK2Gs_AmpgZ4","lore_tm_v1_Q82OWhuneec_8gX-XdpGzVb7cuvR62Uu9EVLya4L-oo","lore_tm_v1_uCNRDTwWXTAzVZCiXlV_KEGPQrBKMYH7cI9TBTCOfxs"]
Date: Aug 28, 2026
/home/byk/Code/getsentry/publish/src/modules/details-from-context.js (66 lines). It defines TARGETS_SECTION_PARSER_REGEX, TARGETS_PARSER_REGEX, CHECKED_TARGETS_PARSER_REGEX, and PUBLISH_TITLE_REGEX = /^publish: (?:getsentry\/)?(?<repo>[^/@]+)(?<path>\/[\w./-]+)?@(?<version>[\w.+-]+)$/; detailsFromContext({ context }) validates context.payload.issue, parses issue title, maps a dry-run label to dry_run: "1" or "", sets path to "." + (titleMatch.path || ""), parses Merge target: ..., and extracts checked target IDs./home/byk/Code/getsentry/publish/src/publish/validate-approval-attestation.js, authorize-approval.js, update-issue.js, post-workflow-details.js, post-result.js, and inputs.js.src/publish/__tests__/validate-approval-attestation.js. Its 4 tests validate validateApprovalAttestation: accepts a current accepted label event plus trusted attestation; rejects if issue title changed from attested publish: getsentry/sentry-javascript@10.0.0 to current publish: getsentry/sentry-python@10.0.0; rejects if accepted was removed; and rejects if accepted was re-added (events IDs "100" then "200"). Tests use trusted author github-actions[bot], issue number "123", repository "getsentry/publish", actor "contractor", and mock global.fetch.src/modules/__tests__/approval-authorizer.js (14 tests). authorizeApproval behavior covered: auto-approval actor getsantry[bot] is authorized without getPermission only when release path is in autoApprovedRepositories; releases outside its allowlist are rejected without lookup; target-repository roles write, maintain, and admin authorize actor "contractor"; unqualified title publish: sentry-javascript/packages/core@10.0.0 resolves to getsentry/sentry-javascript; roles none, read, triage, "Elevated Bot", and undefined reject; malformed titles publish: @1.0.0 and publish: getsentry/sentry-javascript reject without GitHub queries; GitHub lookup failure "Not Found" propagates.ci-ready; on failure remove accepted and prevent publication.src/modules/__tests__/details-from-context.js was modified./home/byk/Code/getsentry/publish/src/modules/approval-authorizer.js failed because expected lines containing const title = issueTitle.match(PUBLISH_TITLE_REGEX); followed by if (!title) { were not found in the expected patch context.src/modules/approval-authorizer.js (37 lines). It imports PUBLISH_TITLE_REGEX from ./details-from-context.js; ALLOWED_ROLE_NAMES is new Set(["write", "maintain", "admin"]); AUTO_APPROVER is "getsantry[bot]". authorizeApproval() parses issueTitle, rejects malformed titles as { authorized: false, repository: null }, constructs repository as getsentry/${title.groups.repo} and releasePath as ${repository}${title.groups.path || ""}, authorizes the auto-approver only when autoApprovedRepositories contains that release path, otherwise queries getPermission({ owner: "getsentry", repository: title.groups.repo, username: actor }) and authorizes only allowed role names.src/modules/details-from-context.js and src/modules/approval-authorizer.js..github/workflows/ci-poller.yml to implement approval revalidation at the final handoff before ci-ready.vitest run src/modules/__tests__/details-from-context.js src/modules/__tests__/approval-authorizer.js src/publish/__tests__/validate-approval-attestation.js. Result: 3 test files passed, 23 tests passed—details-from-context.js 5 tests in 8ms, validate-approval-attestation.js 4 tests in 38ms, approval-authorizer.js 14 tests in 17ms; total duration 371ms, Yarn completed in 0.86s.prettier --write src --check .github/workflows/ci-poller.yml src/modules/details-from-context.js src/modules/approval-authorizer.js src/modules/__tests__/details-from-context.js. Formatting initially reported code-style issues in exactly src/modules/__tests__/details-from-context.js and src/modules/details-from-context.js.src/modules/details-from-context.js (97ms) and src/modules/__tests__/details-from-context.js (25ms).vitest run. Result: 9 test files passed and 41 tests passed: src/modules/__tests__/approval-attestation.js 3, src/publish/__tests__/validate-approval-attestation.js 4, src/modules/__tests__/approval-authorizer.js 14, src/publish/__tests__/authorize-approval.js 3, src/modules/__tests__/update-issue.js 5, src/modules/__tests__/post-workflow-details.js 1, src/modules/__tests__/details-from-context.js 5, src/modules/__tests__/process-end-state.js 4, and src/libs/__tests__/github.js 2. Duration was 1.36s; Yarn completed in 1.84s.prettier --write src --check .github/workflows/ci-poller.yml src/modules/details-from-context.js src/modules/approval-authorizer.js src/modules/__tests__/details-from-context.js; all matched files used Prettier code style, completing in 0.81s.ci-ready revalidation, and approval-drift regression coverage all completed; “Run full validation and substantive reviews” remained in progress.task_result/no substantive report.