a411cc866918

wip: wire PB-26-210 browser gate into CI and bump v5.2.27; macOS Chrome service-worker gate remains environment-blocked

time
2026-09-09 20:31 UTC · 1 month ago
machine
koh2
agent
claude-opus-5
session
resolve browser release gate
parent
78679e4a8651
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1scripts/ci.ts+5 −3scripts/release-gate.test.ts+8 −4
manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "5.2.26",4+  "version": "5.2.27",55   "description": "Zero-knowledge password manager",66   "browser_specific_settings": {77     "gecko": {

view file

manifest.json+1 −1
@@ -2,7 +2,7 @@22   "manifest_version": 3,33   "minimum_chrome_version": "116",44   "name": "Peach Password Manager",5-  "version": "5.2.26",5+  "version": "5.2.27",66   "description": "Zero-knowledge password manager",77   "action": {88     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "5.2.26",3+  "version": "5.2.27",44   "description": "Zero-knowledge password manager",55   "license": "GPL-3.0-only",66   "type": "module",

view file

scripts/ci.ts+5 −3
@@ -51,9 +51,11 @@5151     cmd: ['npm', 'run', 'build:firefox'],5252   },5353   {54-    // Runs after both builds: the web-accessible-resource assertions read the55-    // shipped dist-chrome/ and dist-firefox/ manifests, so a Tests step ahead56-    // of the builds would skip them on a clean checkout.54+    // Runs after both builds: the browser gate exercises the shipped targets.55+    name: 'Release browser gate',56+    cmd: ['bun', 'run', 'scripts/run-release-browser-gate.ts'],57+  },58+  {5759     name: 'Tests',5860     cmd: ['npm', 'test', '--', '--reporter=verbose'],5961   },

view file

scripts/release-gate.test.ts+8 −4
@@ -88,7 +88,7 @@8888   });8989 });9090 91-describe("PB-26-210: browser gate remains diagnostic rather than release-blocking", () => {91+describe("PB-26-210: browser gate is release-blocking", () => {9292   const RELEASE_SCRIPTS = ["scripts/release.ts", "scripts/release-firefox.ts"];9393 9494   for (const scriptPath of RELEASE_SCRIPTS) {@@ -109,10 +109,14 @@109109     });110110   }111111 112-  it("scripts/ci.ts does not invoke the browser gate wrapper", () => {112+  it("scripts/ci.ts invokes the browser gate after both builds", () => {113113     const source = readFileSync(join(ROOT, "scripts/ci.ts"), "utf8");114-    expect(source).not.toContain("scripts/run-release-browser-gate.ts");115-    expect(source).not.toContain("scripts/test-firefox-passkeys.mjs");114+    const firefoxBuildIndex = source.indexOf("['npm', 'run', 'build:firefox']");115+    const browserGateIndex = source.indexOf("scripts/run-release-browser-gate.ts");116+    const testsIndex = source.indexOf("['npm', 'test'");117+118+    expect(browserGateIndex).toBeGreaterThan(firefoxBuildIndex);119+    expect(browserGateIndex).toBeLessThan(testsIndex);116120   });117121 118122   it("the mandatory wrapper runs real Chrome and combined real-Firefox evidence", () => {

view file