Repository navigation
release(native): establish platform code signing, notarization, artifact identity & rollback trust #574
Description
Activity
qnbs commented
on Sep 11, 2026 OwnerAuthorMore actions2026-09-11 release-trust addendum — SAST evidence at the tagged SHA, without redundant tag-trigger theatre
Fresh workflow inspection shows
.github/workflows/codeql.ymlcurrently runs on:pull_request → main push → main weekly scheduleand does not run directly on release tags. At the same time,
ci.ymldoes run on tags.This should be treated as a release-evidence question, not automatically as a demand to add another expensive duplicate CodeQL run.
Required trust property
For every native release tag, the release pipeline should be able to prove:
release tag → exact source commit SHA → that SHA is admitted main/release source → required CI passed on that SHA → CodeQL/SAST passed on that same source SHA (or an explicitly equivalent analyzed tree) → packaging/signing starts from that admitted sourceIf the release tag is created only from a main commit with terminal exact-SHA CodeQL evidence, a second tag-triggered CodeQL run may provide little unique signal. Prefer verifying/referencing the existing exact-SHA result in release admission/evidence rather than adding redundant SAST solely for optics.
If the current release process cannot reliably prove that relation — e.g. a tag can point at source without qualifying CodeQL evidence — then add the smallest fail-closed release admission necessary, which may be a tag-triggered analysis or an explicit exact-SHA verification gate.
Acceptance refinement
The machine-readable/native release evidence owned by #574 should record or link the security-analysis admission for the source SHA alongside:
- tag/SHA/version;
- CI identity;
- artifact hashes;
- platform signing/notarization state;
- updater signature state;
- provenance/attestation.
Do not describe
CodeQL on tagitself as the security objective; SAST-qualified exact source identity is the objective.This remains separate from #529's SBOM/provenance work and from OS-native signing/notarization.
qnbs commented
on Sep 22, 2026 OwnerAuthorMore actions2026-09-22 housekeeping — v1.28.8 supplies partial release-trust evidence, not OS-native signing closure
The successful v1.28.8 release materially advances this issue's evidence baseline:
- annotated tag
v1.28.8is GitHub-verified with a valid SSH signature; - the tag resolves to exact release commit
868d66bc9e1e378a6937d426bca2727fafa0d963; - source admission was performed from exact-SHA main CI/CD + CodeQL evidence before tag creation;
- the tag-triggered Tauri release workflow completed for Ubuntu, Windows and macOS;
- the published GitHub Release contains the expected Linux/Windows/macOS ARM artifacts, updater
.sigfiles andlatest.json; - post-release repository truth was synchronized separately without moving the immutable release tag.
This is useful evidence for:
SOURCE / TAG IDENTITY exact-SHA release admission updater artifact/signature publication release asset ↔ version/tag consistencyIt does not prove or satisfy by implication:
- macOS Developer ID signing/notarization/stapling;
- Windows Authenticode/timestamping;
- a complete machine-readable artifact trust matrix;
- signing-key rotation/revocation/compromise policy;
- full rollback/withdrawal policy;
- supply-chain: document trust-policy gaps across Docker/GHCR, Tauri release artifacts, and pnpm dependency provenance #529 provenance/SBOM closure.
Keep #574 OPEN / P1 until those platform/native trust criteria are evidenced explicitly. Coordinate any user-facing wording with #549 so "signed" never collapses tag signature, updater Minisign, Authenticode and Apple notarization into one claim.
Historical text embedded in the immutable v1.28.8 tag message reflects the tracker state at tag time; later issue-state changes do not justify moving or rewriting the tag.
- annotated tag
qnbs commented
on Sep 23, 2026 OwnerAuthorMore actionsUser-facing trust overclaim found during 2026-09-23 issue housekeeping
Current
locales/en/help.json→help.docs.tauriDesktop.contentpresently describes:.dmg for macOS (code-signed) .msi / .exe for Windows (code-signed)That wording is stronger than the evidence currently admitted by this issue.
As already recorded here, v1.28.8 establishes verified source/tag identity and Tauri updater-signature publication, but does not by itself prove:
- macOS Developer ID signing + notarization + stapling;
- Windows Authenticode + timestamping.
Therefore this Help wording is a concrete #574/#549 truth consumer that must be corrected now, without waiting for #574 implementation, so users are not told a platform trust property that is not yet evidenced.
When #574 eventually lands OS-native signing, update the Help copy from the machine-/release-evidence authority rather than reintroducing a generic “signed” statement.
Cross-owner:
- release(native): establish platform code signing, notarization, artifact identity & rollback trust #574 = implementation/evidence owner;
- security(truth): consolidate user-visible security/privacy claims across storage, providers, PWA, collaboration & supply chain #549 = cross-surface security/release-truth owner;
- i18n: propagate desktop API-key/storage security-doc corrections to 14 remaining locales #382 = non-production locale propagation after the English source is correct.
- added a commit that references this issue
on Sep 29, 2026 qnbs commented
on Sep 29, 2026 OwnerAuthorMore actions#904 merged — user-facing signing overclaim corrected
GH #904 merged normally to
mainata67354841c54a73a6ddb8785bac2273762499aa2. The Help surface no longer claims macOS/Windows installers have OS-native code signing, and the reviewed desktop data/log-path corrections are included.This closes the narrow v1.29 truth-consumer blocker identified under #574/#549; it does not close this issue. Apple Developer ID signing/notarization/stapling, Windows Authenticode/timestamping, machine-readable artifact trust evidence and the broader native-signing lifecycle remain post-release work under #574.
Vercel Production is READY on exact
a67354841...; resulting-main CI/CD + CodeQL still require terminal proof before candidate freeze.The user-facing overclaim recorded above is fixed by #904 (merged
a6735484).help.docs.tauriDesktop.contentno longer calls the macOS/Windows installers code-signed in any of the 17 affected locales. This issue remains open as the implementation owner for real OS-native signing, notarization and Authenticode; once that lands, the Help copy should be re-derived from release evidence.qnbs commented
on Sep 30, 2026 OwnerAuthorMore actionsv1.30.0 boundary — 2026-10-01
Release owner #926 targets the complete desktop at-rest encryption authority.
This signing/notarization owner remains separate. Do not falsely block v1.30.0 on OS-native signing/notarization unless a fresh distribution policy/security requirement explicitly makes it a prerequisite; equally, do not claim Apple notarization/Developer ID or Windows Authenticode unless actually implemented and proven.
Artifact identity/rollback evidence that is already available should still be reused by #926/#924 where relevant.
v1.29 release-truth disposition — 2026-09-29
The only current v1.29 blocker discovered under this owner was a truth bug, not missing signing implementation: Help claimed macOS/Windows installers were code-signed even though the release pipeline currently provides Tauri updater signatures, not Apple Developer ID/notarization or Windows Authenticode.
#904 removed that overclaim across the affected locales and also corrected the desktop data/log path shown for manual backups. Resulting main
a67354841c54a73a6ddb8785bac2273762499aa2has green CI/CD + CodeQL and exact-SHA READY Production.Therefore:
Do not pull Developer ID/notarization/Authenticode implementation into v1.29 unless a new independently evidenced release blocker appears.
#906 owns future packaged functional qualification; it does not replace this artifact-trust/signing owner.
Context
WorldScript Studio's desktop release pipeline already has meaningful integrity controls, but it currently stops short of OS-native trust for downloaded installers.
Current release evidence and documentation distinguish these layers correctly:
The updater path already verifies per-platform Tauri updater artifacts with the configured Minisign public key. Current v1.28.x release evidence nevertheless states explicitly that platform code-signing and notarization remain separate claims.
docs/TAURI-CI.mddocuments macOSAPPLE_*requirements and says Windows Authenticode still requires a CA-issued certificate.docs/TAURI-UPDATER.mdlikewise documents the intended macOS/Windows signing inputs but the normal release pipeline does not yet make these guarantees authoritative.The binding native roadmap also requires packaged identity, signing/update trust, rollback and installer evidence before native stable admission.
No current open issue owns this cross-platform release-trust remainder end to end.
Related but distinct:
Goal
Establish one explicit, testable native-release trust contract for supported desktop platforms:
The objective is not simply to make Gatekeeper/SmartScreen warnings disappear. It is to make every release artifact's identity, signing authority, update relationship, revocation/rotation behavior and recovery path explicit.
1. Current release-trust inventory
Before changing CI, inventory every produced desktop artifact and its existing trust layer.
At minimum record for each current platform/artifact:
For every artifact capture:
Do not call an installer "signed" solely because a different updater archive has a Minisign
.sigfile.2. macOS Developer ID signing + notarization
Define and implement the production macOS release path using the current Apple-supported model.
Required properties:
.dmgand updater bundle are independently verified after packaging;codesign,spctl, notarization/stapling status) without dumping certificate/private material;A locally usable unsigned developer build may remain possible, but it must be visibly distinct from a production release artifact.
Credential policy
Inventory and minimize the currently documented
APPLE_*secret surface.Prefer modern short-lived/notarization credentials where upstream tooling supports them; if long-lived credentials remain necessary, document:
Never expose Apple credentials to pull-request-controlled code.
3. Windows Authenticode signing
Define and implement an evidence-backed Windows signing path.
Required decisions/evidence:
.msiand.exe/NSIS artifacts covered as applicable;signtool verifyor equivalent verification against the published bytes;SmartScreen reputation is not itself a cryptographic acceptance criterion. Document it as a distribution UX consideration rather than pretending code signing guarantees immediate reputation.
4. Linux artifact trust policy
Linux desktop distribution has no single universal Authenticode/Gatekeeper equivalent.
Define an explicit policy for the formats WorldScript publishes rather than making a vague "all installers signed" claim.
Evaluate, as applicable:
.deb/.rpmrepository/package-signing semantics only if WorldScript actually operates a repository requiring them;Do not introduce redundant signature layers with no documented verifier/user path.
5. Updater trust remains a separate layer
Preserve the current Tauri updater signature model as an independent control.
Explicitly prove:
Test both positive and negative cases.
Required negative cases include:
Do not conflate updater Minisign with macOS/Windows platform signatures in UI or docs.
6. Signing-key lifecycle and emergency response
Every signing authority must have a documented lifecycle.
For each key/certificate define:
At minimum cover:
Updater-key rotation
A rotation must not strand already-installed clients.
Design the transition explicitly before replacing the embedded updater public key. If the updater architecture only trusts one key at a time, define the necessary bridge-release sequence and recovery behavior.
A compromised updater key is a security event, not an ordinary dependency bump.
7. Release artifact identity and manifest coherence
Create one release evidence manifest or equivalent machine-verifiable record tying together:
The exact serialization format is implementation-defined, but duplicate sources of truth should be avoided.
latest.json, GitHub Release assets and the actual uploaded bytes must be checked for exact agreement.Do not generate hashes before a later signing/notarization step mutates the artifact.
8. Reproducibility and rebuild evidence
This issue does not require immediate bit-for-bit reproducible desktop binaries on every OS, but it must make the level of reproducibility explicit.
Inventory nondeterministic inputs:
Classify release reproducibility as one of:
Do not claim deterministic/reproducible binaries without evidence.
Where bit-for-bit comparison is impossible due to signatures/timestamps, compare stable pre-signing payloads or normalized components only if this produces meaningful assurance.
#529 remains the provenance/SBOM owner; #570/#572/#573 own the underlying toolchain determinism.
9. Rollback / bad-release response
Define a safe response to a signed but defective release.
At minimum answer:
latest.jsonbe rolled back safely?;Data compatibility outranks release convenience. Never downgrade automatically across a persisted-data format boundary that the older version cannot safely read.
Coordinate project/schema compatibility with #553 and protected-data migration with #445.
10. CI trust boundary / least privilege
Release-signing jobs are privileged code-execution environments.
Required properties:
Coordinate generalized GitHub Actions trusted-execution concerns with #506/#510 rather than inventing a separate workflow-policy engine here.
11. Qt migration relationship
This contract must survive the Tauri→Qt transition.
Separate:
Do not defer OS signing/notarization merely because Tauri is transitional: current users download current installers today.
Conversely, do not build a Tauri-specific signing abstraction that Qt cannot replace cleanly.
Before Qt Stable, the Qt packaging lane must prove equivalent or stronger:
12. Documentation truth
After implementation, reconcile:
docs/TAURI-CI.md;docs/TAURI-UPDATER.md;AUDIT.mdrelease evidence;Use precise vocabulary:
Never collapse them into generic "signed".
Acceptance criteria
latest.json/release-assets/artifact identities are cross-checked deterministically.Non-goals