7c55294ece28

chore: hygiene register — remove the dead form_detector.onnx binary (no consumer), map raw error echoes to fixed strings in Add/Lock/Import (PB-26-012 family), fix the stale kepr.build output path to the real build output; bump 5.0.13→5.0.14

time
2026-08-30 00:45 UTC · 1 month ago
machine
koh2
agent
glm-5.3-flash
session
pb-26 audit fixes
parent
4ad8a009eeba
8 files kepr.build+1 −1manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1public/models/form_detector.onnxbinarysrc/popup/views/Add.tsx+13 −1src/popup/views/Import.tsx+4 −1src/popup/views/Lock.tsx+2 −1
kepr.build+1 −1
@@ -1,4 +1,4 @@11 command = npm run build2-output = dist/fonts/Inter-Light.woff22+output = dist-chrome/33 trigger = on-promote44 platforms = native

view file

manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "5.0.13",4+  "version": "5.0.14",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.0.13",5+  "version": "5.0.14",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.0.13",3+  "version": "5.0.14",44   "description": "Zero-knowledge password manager",55   "license": "GPL-3.0-only",66   "type": "module",

view file

public/models/form_detector.onnxbinary

binary file, not shown

view file at the parent

src/popup/views/Add.tsx+13 −1
@@ -254,10 +254,22 @@254254     const res = await sendMessage({ type: "ADD_ENTRY", payload });255255     const result = res as { ok: boolean; data?: VaultEntry; error?: string };256256     if (!result.ok) {257+      // Fixed strings only — raw background errors must not reach the UI.257258       if (result.error === "vault_locked") {258259         setError("vault is locked — tap the lock icon to re-enter your master password");259260       } else {260-        setError(result.error ?? "could not save entry");261+        // Fixed strings only — raw background errors must not reach the UI.262+        const SAFE_ERRORS = new Set([263+          "title is required",264+          "cardholder name and card number are required",265+          "invalid passkey credential",266+          "pro_required",267+        ]);268+        setError(269+          result.error !== undefined && SAFE_ERRORS.has(result.error)270+            ? result.error271+            : "could not save entry",272+        );261273       }262274       setSaving(false);263275       return;

view file

src/popup/views/Import.tsx+4 −1
@@ -852,7 +852,10 @@852852       return "This PeachScript decoded to zero entries — refusing to wipe the vault.";853853     case "NO_ENTRIES_IMPORTED":854854       return "No importable password entries were found in that file.";855+    case "PEACHSCRIPT_TOO_LARGE":856+      return "That backup is too large.";855857     default:856-      return error;858+      // Never echo raw error strings — internal messages must not reach the UI.859+      return "Import failed. Please try again.";857860   }858861 }

view file

src/popup/views/Lock.tsx+2 −1
@@ -1276,5 +1276,6 @@12761276   ) {12771277     return "background service unavailable";12781278   }1279-  return error;1279+  // Never echo raw background errors — internal messages must not reach the UI.1280+  return fallback;12801281 }

view file