Problem
The verified local-audit workflow introduced by #1023 can run and seal an exact-head Claude PASS, but its default-branch publisher rejects the valid repository-dispatch run. GitHub reports the repository-dispatch event type in display_title (for example code-mower-local-audit) and the workflow identity in name plus path. audit_publication.verify_run incorrectly requires display_title == WORKFLOW_NAME, so publication always fails before creating a reservation.
The fresh dedicated runner also exposed two setup gaps: the source checkout needs the package's declared Python runtime dependencies through a stable CODE_MOWER_PYTHON, and the optional metadata-upload step invokes code_mower.cli without restoring the support checkout's src path.
Scope
- Validate immutable publication identity using the API's workflow
name, trusted workflow path, event, repository, default branch, run attempt and SHA. Do not weaken any existing source seal, exact-head, receipt, replay, identity or digest checks.
- Add realistic regression fixtures where repository-dispatch
display_title is the event type and name is the workflow name; reject wrong workflow names and paths.
- Make the metadata-upload step import the default-branch support package explicitly.
- Update the local audit runner guide with a stable Python 3.12+ environment containing Code Mower's declared runtime dependencies, configured through
CODE_MOWER_PYTHON, and a runner-job preflight. Keep credentials and provider output private.
- Regenerate owned workflow/package artifacts as required and validate with focused tests plus relevant CI.
Delivery
Use one Code Mower Codex writer and an independent Claude exact-head review. Produce a focused PR, resolve all P0/P1/P2 findings, pass CI and the authoritative gate, then merge. No provider rerun, Slack/provider canary, release, deployment or credential change is part of this issue.
Problem
The verified local-audit workflow introduced by #1023 can run and seal an exact-head Claude PASS, but its default-branch publisher rejects the valid repository-dispatch run. GitHub reports the repository-dispatch event type in
display_title(for examplecode-mower-local-audit) and the workflow identity innamepluspath.audit_publication.verify_runincorrectly requiresdisplay_title == WORKFLOW_NAME, so publication always fails before creating a reservation.The fresh dedicated runner also exposed two setup gaps: the source checkout needs the package's declared Python runtime dependencies through a stable
CODE_MOWER_PYTHON, and the optional metadata-upload step invokescode_mower.cliwithout restoring the support checkout'ssrcpath.Scope
name, trusted workflowpath, event, repository, default branch, run attempt and SHA. Do not weaken any existing source seal, exact-head, receipt, replay, identity or digest checks.display_titleis the event type andnameis the workflow name; reject wrong workflow names and paths.CODE_MOWER_PYTHON, and a runner-job preflight. Keep credentials and provider output private.Delivery
Use one Code Mower Codex writer and an independent Claude exact-head review. Produce a focused PR, resolve all P0/P1/P2 findings, pass CI and the authoritative gate, then merge. No provider rerun, Slack/provider canary, release, deployment or credential change is part of this issue.