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
↓ peach-browser-7c55294e.tar.gzatlas at this save
files changed8 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 −1kepr.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 = nativemanifest.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": {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",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",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;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 }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 }