CURRENT AUTHORITATIVE STATE — post-v1.29.1 hardening — 2026-09-29
V1_29_1_BLOCKER = NO
CURRENT_MITIGATION = procedural / actively watched
MECHANICAL_ENFORCEMENT_OWNER = #911
START_AFTER = #872 v1.29.1 VERIFIED
v1.29.1 keeps the already-qualified release pipeline unchanged: refresh the exact-candidate Security Audit immediately before tag, watch the tag-triggered audit, cancel Tauri publication if red, and verify GitHub/Desktop and GHCR states independently.
The durable target here is machine enforcement after the recovery release: gate Tauri GitHub Release and GHCR publication/moving aliases on required security success, with positive + negative-path proof and workflow-policy revalidation.
Exact v1.29.0 Docker evidence confirms the current tag workflow emitted/pushed 1.29.0, 1.29, and latest. The :latest output is also produced by docker/metadata-action's stable-SemVer latest=auto behavior; future tests must preserve actual output semantics rather than reason only from the explicit raw is_default_branch rule.
Problem (observed on v1.29.0, #872)
Tag-triggered publishing does not depend on the tag's security audit:
tauri-build.yml release has needs: [bundle] only. The enforced OSV scan runs in ci.yml (🔒 Security Audit) as an independent workflow.
docker.yml pushes :X.Y.Z, :X.Y and :latest without depending on it either.
On v1.29.0, a new advisory (GHSA-6h2x-m376-mqjq, dev-only joi) appeared between the candidate's resulting-main run and the tag.
- The tag CI/CD failed.
- The desktop release was stopped only because it was cancelled by hand before its
GitHub Release job.
- GHCR had already published
1.29.0, 1.29 and latest.
Current mitigation (procedural, not mechanical)
The v1.29.1 evidence record (#910) sets a procedure: re-check the Security Audit on the exact candidate right before tagging, then watch the tag's Security Audit (about 1–2 min) and cancel the Tauri release run if it is red. The bundle jobs take at least 12 min before release can start.
This is fail-closed only while someone is watching. It is not enforced by the pipeline.
Proposal (maintainer decision: release-pipeline and governance surface)
- Add a pinned OSV scan job (same
osv-scanner.toml and lockfiles as ci.yml) to tauri-build.yml and make release depend on it: needs: [bundle, security-audit].
- Gate the
docker.yml push on the same check. This also closes the gap where :latest moves before the audit.
- Exercise it with a
workflow_dispatch run and a negative fixture, and update the workflow-policy tests.
Not part of the v1.29.1 cut, so the qualified release pipeline stays unchanged under the candidate. Found by review on #910 (Codex P1, CodeRabbit).
CURRENT AUTHORITATIVE STATE — post-v1.29.1 hardening — 2026-09-29
v1.29.1 keeps the already-qualified release pipeline unchanged: refresh the exact-candidate Security Audit immediately before tag, watch the tag-triggered audit, cancel Tauri publication if red, and verify GitHub/Desktop and GHCR states independently.
The durable target here is machine enforcement after the recovery release: gate Tauri GitHub Release and GHCR publication/moving aliases on required security success, with positive + negative-path proof and workflow-policy revalidation.
Exact v1.29.0 Docker evidence confirms the current tag workflow emitted/pushed
1.29.0,1.29, andlatest. The:latestoutput is also produced by docker/metadata-action's stable-SemVerlatest=autobehavior; future tests must preserve actual output semantics rather than reason only from the explicit rawis_default_branchrule.Problem (observed on v1.29.0, #872)
Tag-triggered publishing does not depend on the tag's security audit:
tauri-build.ymlreleasehasneeds: [bundle]only. The enforced OSV scan runs inci.yml(🔒 Security Audit) as an independent workflow.docker.ymlpushes:X.Y.Z,:X.Yand:latestwithout depending on it either.On
v1.29.0, a new advisory (GHSA-6h2x-m376-mqjq, dev-onlyjoi) appeared between the candidate's resulting-main run and the tag.GitHub Releasejob.1.29.0,1.29andlatest.Current mitigation (procedural, not mechanical)
The v1.29.1 evidence record (#910) sets a procedure: re-check the Security Audit on the exact candidate right before tagging, then watch the tag's Security Audit (about 1–2 min) and cancel the Tauri release run if it is red. The bundle jobs take at least 12 min before
releasecan start.This is fail-closed only while someone is watching. It is not enforced by the pipeline.
Proposal (maintainer decision: release-pipeline and governance surface)
osv-scanner.tomland lockfiles asci.yml) totauri-build.ymland makereleasedepend on it:needs: [bundle, security-audit].docker.ymlpush on the same check. This also closes the gap where:latestmoves before the audit.workflow_dispatchrun and a negative fixture, and update the workflow-policy tests.Not part of the v1.29.1 cut, so the qualified release pipeline stays unchanged under the candidate. Found by review on #910 (Codex P1, CodeRabbit).