Dashboard › publish › Distillation
2ab10233-86eb-48e2-a24a-07e404f303e8["lore_tm_v1_xY8sAbFWuOGBiDYricnJpgzLRzYhr74s4zYaBMAzFVw","lore_tm_v1_X3sU-lGvQQa_vOwVi63WZzgNiLMiMcPw1pW3xNFiZzw","lore_tm_v1_SOMBzteXaqPjnCvvJkp1pDCHWoxuNBcBRGegzJVWvDM","lore_tm_v1_FpeRvL1XFxcA27whJnh6NFy-EAnPG0WeHE-G-V0Eya8","lore_tm_v1_ZoIX21qIBEhvvVoXgtmryfYaT22sXh1IUXfUrxln9t8"]
Date: Sep 8, 2026
/home/byk/Code/getsentry/publish/src/modules/details-from-context.js (75 lines). It defines TARGETS_SECTION_PARSER_REGEX at lines 4-5, TARGETS_PARSER_REGEX at line 11, CHECKED_TARGETS_PARSER_REGEX at line 17, and PUBLISH_TITLE_REGEX at lines 18-19; parsePublishTitle(title) returns title.match(PUBLISH_TITLE_REGEX)?.groups || null (lines 21-23). detailsFromContext({ context }) throws Issue context is not defined without context.payload.issue (lines 25-28), rejects invalid titles (lines 30-35), maps dry-run label to "1" (lines 36-38), parses Merge target: via /^Merge target: (?<merge_target>[\w.\-/]+)$/m (lines 41-47), parses checked targets from matched target section (lines 49-57), and returns title details, dry_run, merge_target, path, and targets (lines 59-65). Exports all parser constants, detailsFromContext, parsePublishTitle, and PUBLISH_TITLE_REGEX (lines 68-75).MUST-FIX, CONCERN, or PASS, with current file:line citation on each, followed by compact test/evidence and an exact final MERGE or DO-NOT-MERGE.vitest run --printConsoleTrace through Yarn v1.22.22 in /home/byk/Code/getsentry/publish; 15 test files and 63 tests passed, duration 2.12s (transform 283ms, import 1.46s, tests 265ms). Passing suites/counts: src/publish/__tests__/validate-approval-attestation.js (9), authorize-approval.js (5), current-accepted-event.js (2), src/modules/__tests__/approval-authorizer.js (14), approval-attestation.js (5), post-workflow-details.js (1), process-end-state.js (4), src/publish/__tests__/record-auto-approval-attestation.js (2), record-ci-ready-attestation.js (3), src/modules/__tests__/update-issue.js (6), details-from-context.js (5), src/libs/__tests__/github.js (2), src/publish/__tests__/publish-workflow.js (2), auto-approval-workflow.js (2), and ci-poller-workflow.js (1).eslint src .github --ignore-pattern '!.github' through Yarn v1.22.22; it failed with 1 error, 0 warnings: .github/workflows/cocoapods-keepalive.yml:1:7 violates yml/plain-scalar (βMust use plain style scalarβ). ESLint reported the error is potentially fixable with --fix; command exited 1.MUST-FIX: AUTO_APPROVERS receives allowlist authorization at src/modules/approval-authorizer.js:42-47, while the generic approval route rejects only self-approval and checks the current label actor at src/publish/authorize-approval.js:173-210; assistant concluded getsantry[bot] can open an allowlisted request and sentry-release-bot[bot] can directly add accepted, bypassing matching auto-attestation required on the Internal App route at src/publish/authorize-approval.js:135-169. Recommended rejecting direct labels from both automated requester identities and accepting Internal App labels only with matching auto-approval attestation.PASS: Internal App labels require an open, title-stable request from an allowed bot, an exact allowlisted release path, a current Internal-App accepted event, and trusted request-bound auto-attestation (src/publish/authorize-approval.js:150-169).PASS: Attestations bind complete issue body, title, and dry-run state using SHA-256; approval and CI-ready validation require the live digest (src/modules/approval-attestation.js:14-28, src/modules/approval-attestation.js:176-241).PASS: Human self-approval fails closed using case-insensitive requester/approver comparison (src/publish/authorize-approval.js:200-212).PASS: CI poller binds work to accepted event; validates before CI inspection, after CI, and immediately before ci-ready; CI-ready proof binds accepted event and label actor (.github/workflows/ci-poller.yml:102-134, .github/workflows/ci-poller.yml:253-340, src/publish/validate-approval-attestation.js:90-100).PASS: Publish workflow live-validates approval and CI-ready proof after target setup and directly before privileged Craft execution (.github/workflows/publish.yml:327-362).PASS: Craft uses an immutable SHA-256 image digest (.github/workflows/publish.yml:352).PASS: Manual CI-poller dispatch checks out trusted default-branch code before app credentials are created (.github/workflows/ci-poller.yml:23-44).src/publish/__tests__/validate-approval-attestation.js:66-430, src/publish/__tests__/authorize-approval.js:96-168, and src/publish/__tests__/publish-workflow.js:7-21. Identified missing regression test for direct approval by one allowed automation bot of another allowed botβs request..github/workflows/cocoapods-keepalive.yml:1 and ended the independent review DO-NOT-MERGE.