Dashboard › publish › Distillation
c1e76811-5282-4900-a5d3-320d3d3d28ad["lore_tm_v1_dz_MAVmC9wIo63za0s5IuMAMyZRKGF3J0mSnwahnlUo","lore_tm_v1_mZSRCJyQ-cDRhWnzXf6I8KPHHw64zGW5dRojRKSsGYQ","lore_tm_v1_yDnhxq5_uGa9UVLdk5teiI2KUukFlrXpu2FjnSHbkpw","lore_tm_v1_6rMq-jdWgFBPuaCOESF5OpkPU55Vehy4xlMMXWQ17mg","lore_tm_v1_PSmKo49YJ9dCBBTfA6Qy7caYZueCkak3FlnxIukTJSc","lore_tm_v1_b2Dl9m9Tc7IX7guvyzhAg64sU8HzLnbgGDp4RTVMVl8","lore_tm_v1_lkkSCeEg7XWaAl3Ua117duHC7cYDjqweX1ffAeQ9gnA","lore_tm_v1_Gdx5mXnWAFKenK89_5wwrbCF1zhBhRECxJa9pfbQ7ss","lore_tm_v1_VULB-NOB34_lk4NXFG_y6SnfMZKnrK_IOHL5_xGkVPI","lore_tm_v1_FJEoJ6aV_yydIxJn8pmwKYXrvHeedLBX2UugMYfmFBM"]
Date: Sep 10, 2026
ci-ready label in .github/workflows/ci-poller.yml:356-359; waiting-for-CI removes stale ci-ready in .github/workflows/publish.yml:113-129..github/workflows/ci-poller.yml:48-53 must use ref: ${{ github.event.repository.default_branch }} with persist-credentials: false.DO-NOT-MERGE after finding 2 MUST-FIX blockers and 3 security regression tests that passed for the wrong reason..github/workflows/auto-approve.yml:18-21 sparse-checks out only auto-approve-repos.txt, but .github/workflows/auto-approve.yml:28-36 executes src/publish/record-auto-approval-attestation.js. That source and its dependencies are absent, so automated approval fails with MODULE_NOT_FOUND. src/publish/__tests__/auto-approval-workflow.js:7-13 checks only textual ordering and does not verify checkout contents.src/publish/record-auto-approval-attestation.js depends on ../modules/approval-attestation.js and ./validate-approval-attestation.js; recordAutoApprovalAttestation() fetches the issue and rejects unless issue.state === "open", issue.title === issueTitle, and issue.user.login case-insensitively equals autoApprover, then calls createAutoApprovalAttestation({ autoApprover, issue })..github/workflows/ci-poller.yml:36-46 validates ATTEMPT with ^(0|[1-5][0-9])$, which accepts only 0 and 10β59 despite the stated range 0β59. The first run dispatches attempt 1 at .github/workflows/ci-poller.yml:453-463, so the next run rejects it and self-dispatch stops after the first retry. src/publish/__tests__/ci-poller-workflow.js:40-51 explicitly preserves the faulty regex.src/publish/__tests__/authorize-approval.js:96-107 omits state: "open", causing src/publish/authorize-approval.js:202-210 to reject at the open-state guard before exercising the intended self-approval guard; removing the self-approval check would therefore not fail this regression.src/publish/__tests__/record-ci-ready-attestation.js:48-63 and :66-91 omit state: "open", so both short-circuit at src/publish/record-ci-ready-attestation.js:46-55 rather than testing title mutation or accepted-event replacement. Removing the intended title or event checks would not fail these tests.write, maintain, or admin; automated requesters and direct Internal App authorization are denied by the generic path in src/modules/approval-authorizer.js:1-49, and src/publish/authorize-approval.js:186-219 denies case-insensitive self-approval after checking the live requester.github-actions[bot], implemented in src/publish/authorize-approval.js:135-169.src/modules/approval-attestation.js:14-55, src/modules/approval-attestation.js:176-240, and src/publish/validate-approval-attestation.js:63-100.ci-ready in .github/workflows/ci-poller.yml:121-153 and :272-359..github/workflows/publish.yml:197-220 and :328-354.accepted even when publish inputs are absent or malformed, via .github/workflows/publish.yml:409-414, src/publish/update-issue.js:8-18, and src/modules/update-issue.js:62-79.workflow_dispatch relay behind production in .github/workflows/ci-poller-dispatch.yml:3-16. The privileged poller accepts only a successful default-branch relay run and checks out the default branch before token creation in .github/workflows/ci-poller.yml:8-31 and :48-74. The accepted organization-secret exposure is documented in README.md:97-99, and the diff does not widen its organization scope..github/workflows/publish.yml:191-223, :266-274, and :353-354; src/publish/__tests__/workflow-action-pinning.js:30-75 enforces this.yarn test --printConsoleTrace passed all 84 tests across 16 files; yarn lint passed in 1.54s; git diff --check passed with no output.83d210b29553ea6f4d97508821724a834c43856e; unstaged diff SHA-256 8ca4aa7afcb6a1c171f695d488a06b8cf4d08436a414a3223a18b33a08db4fc6; staged diff empty; every untracked-file hash matched the initial snapshot.in_progress, high); 2. Add fail-first regression for retry attempts 1β9 (pending, high); 3. Repair self-approval and CI-ready mutation fixtures (pending, high); 4. Fix auto-approval checkout and retry validation (pending, high); 5. Verify regressions fail without each guard (pending, high); 6. Run formatting, full tests, lint, and whitespace checks (pending, high); 7. Obtain final independent exact-worktree review (pending, high).node src/publish/record-auto-approval-attestation.js; test every canonical retry attempt from 0 through 59; and add valid open-issue snapshots to existing self-approval and CI-ready guard tests so they reach the intended branches.recordCiReadyAttestation() in src/publish/record-ci-ready-attestation.js:30-59 concurrently fetches the issue, events, and authenticated login; obtains currentAcceptedEvent(events); and throws "The approval changed before CI could be marked ready" if the issue is not open, title differs, accepted is absent, no accepted event exists, or the event actor/ID differs from expectedAcceptedEvent. On success it calls createCiReadyAttestation({ acceptedEvent, ciReadyActor, issue }).