Dashboard › publish › Always fail closed when release request…
01a08953-e617-73da-b501-a745cfe2b100Treat the canonical parsed publish request and its approval as immutable, event-bound security state. Use Publish’s shared title parser everywhere so CI and publishing resolve exactly the same target. Bind approval and CI-ready attestations to the live title, body, dry-run state, label actor, and label event. Revalidate after potentially mutable operations and immediately before adding ci-ready or publishing. If the issue is renamed, edited, re-approved, relabeled, or otherwise differs from the approved request, revoke accepted as appropriate and stop; never advance it to ci-ready. Automated approvals must use the trusted Internal App attestation path rather than direct bot labels. For manually dispatched workflows, check out trusted default-branch code before creating or exposing privileged credentials.