Skip to content

fix(release): stop reporting a gated Chrome publish as success - #25

Merged
ralyodio merged 1 commit into
masterfrom
fix/release-pipeline-truth
Aug 30, 2026
Merged

fix(release): stop reporting a gated Chrome publish as success#25
ralyodio merged 1 commit into
masterfrom
fix/release-pipeline-truth

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

The bug

The Chrome publish step caught Publish condition not met, downgraded it to a ::warning and exit 0. The run went green, the version was never submitted, and the store kept serving an older build.

Both v0.8.37 and v0.8.39 sat as unsubmitted drafts this way. Right now the Chrome update server serves 0.8.38 while 0.8.39 is tagged and CI says success.

Chrome invalidates the permission justifications whenever the manifest's permission set changes, so this fires on most releases that touch permissions — it is not a one-time account gate.

Changes

  • The gate now fails the Chrome job, with the dashboard steps in the error message. A version nobody can install is not a release.
  • Each store writes its real outcome to $GITHUB_STEP_SUMMARY, so a green tick is no longer the only signal. Edge's dead credentials now show as "nothing shipped" rather than passing silently.
  • New Verify Published Versions workflow (daily + manual) asks the Chrome update server and AMO what they actually serve, and fails when Chrome trails the newest tag.
  • docs/CHROME_PRIVACY_PRACTICES.md — ready-to-paste justifications for every permission and host in the manifest, plus the steps to clear the gate.

Checks

  • Both workflows parse as YAML.
  • The verify step was dry-run against the live endpoints: it correctly reports Chrome 0.8.38 / AMO 0.8.37 against tag 0.8.39 and exits 1.
  • Dry-running caught a real bug in the first draft — a bare version=" pattern matched the XML declaration's version="1.0". Now anchored to the <updatecheck> element.
  • Pre-commit lint + full build passed.

Note

The new workflow will go red on its first run. That is correct — Chrome is behind, and stays behind until the Privacy practices form is completed in the dashboard. Merging this does not publish 0.8.39; nothing automated can.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MrHcQXSjCeCcAKhWPZg8w9

The Chrome job caught the 'Publish condition not met' error, downgraded it to a warning and exited 0. The run went green, the version was never submitted, and the store quietly kept serving an older build — v0.8.37 and v0.8.39 both sat as unsubmitted drafts this way. Chrome invalidates the permission justifications whenever the manifest's permission set changes, so this fires on most releases that touch permissions.

The gate now fails the job with the dashboard steps in the error, and each store writes its real outcome to the run summary so a green tick is no longer the only signal.

Adds a daily Verify Published Versions workflow that asks the Chrome update server and AMO what they actually serve and fails when Chrome trails the newest tag, plus docs/CHROME_PRIVACY_PRACTICES.md with ready-to-paste justifications for every permission in the manifest.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MrHcQXSjCeCcAKhWPZg8w9
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

12 finding(s)

MEDIUM: 8 | LOW: 4

Severity Rule Location
MEDIUM js-open-redirect apps/extension/src/blocked/main.js:84
MEDIUM sql-template-interpolation apps/web/app/api/account/delete/route.js:104
MEDIUM js-credential-logged apps/web/app/api/health/route.js:27
MEDIUM js-open-redirect apps/web/app/dashboard/sync-sources-client.jsx:88
MEDIUM js-unescaped-html-sink apps/web/app/layout.jsx:86
MEDIUM js-unescaped-html-sink apps/web/app/layout.jsx:110
MEDIUM js-open-redirect apps/web/app/pricing/page.jsx:178
MEDIUM manifest-install-lifecycle-script package.json:17
LOW secret-generic-credential apps/web/__tests__/auth-api.test.js:541
LOW redos-nested-quantifier packages/sources/__tests__/dropbox-oauth.test.ts:72
LOW secret-generic-credential packages/vault/__tests__/items.test.js:201
LOW secret-generic-credential packages/vault/__tests__/items.test.js:216

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 018d2d1 into master Aug 30, 2026
9 checks passed
@ralyodio
ralyodio deleted the fix/release-pipeline-truth branch August 30, 2026 03:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant