PathKeep has multiple quality surfaces. This file exists so we do not confuse a focused triage helper with the signed-off checker.
Run this before merging normal changes:
bun run checkbun run check is the authoritative per-commit checker. It runs:
bun run check:base: formatting, linting, i18n checks, type checking, unit tests, desktop-contract checks, Rust checks, supply-chain audit, host-matched platform checks, and release-config drift checks.bun run coverage:js: 100% statement / branch / function / line coverage for active frontend runtime source undersrc/**/*.{ts,tsx}.bun run coverage:rust: 100% line + function coverage for fullsrc-tauri/**/src/*.rsworkspace source.bun run build: TypeScript compile + Vite browser bundle.bun run test:e2e: browser-preview Playwright smoke.bun run test:e2e:desktop-bridge:truth: Chrome + Playwright smoke against the feature-gated Rust desktop command bridge.bun run check:mutation: 100% desktop-contract JS mutation score forsrc/main.tsxandsrc/lib/ipc/bridge.ts.
Use these for release rehearsal and focused triage:
bun run verify
bun run check:base
bun run release:check
bun run coverage:js
bun run coverage:rust
bun run mutation:js
bun run mutation:js:full
bun run mutation:rust
bun run check:deep
bun run test:desktop-bridge:rust
bun run test:e2e:desktop-bridgebun run verify runs the release-style local sweep:
bun run checkbun run desktop:build:debug
What they mean:
bun run check:base: fast static/unit/native triage path; it is not a signed-off merge gate by itself.bun run release:check: focused release config guard for updater URLs, unsigned Windows installer workflow, offline WebView2 bundling, and support-link drift.bun run mutation:js: desktop-contract Stryker gate used bybun run check.bun run mutation:js:full: active frontend runtime Stryker sweep for manual / scheduled deep checks.bun run mutation:rust: whole-workspace cargo-mutants deep sweep. Surviving mutants are failures unless a narrow equivalent/inapplicable exclusion is documented with evidence.bun run check:deep:bun run checkplus full JS/Rust mutation sweeps. It is intentionally long-running and not required before every commit.bun run test:desktop-bridge:rust: targeted Rust unit coverage for the feature-gated dev desktop bridge command dispatcher.bun run test:e2e:desktop-bridge: Chrome + Playwright smoke that drives the frontend through the dev-only desktop command bridge and proves browser automation can reach real Rust responses.
Use this only when WORK-QA-GATE-B is explicitly scheduled:
- Start from a green
bun run check. - Run
bun run mutation:js:full; fix survivors with tests or product-code repairs, and only annotate narrow equivalent/inapplicable mutants with a reason. - Before Rust mutation, fix the cargo-mutants copy-sandbox fixture contract if the Safari reference database path still fails in the copied tree.
- Run
bun run mutation:rust:full, or shard the same command withcargo mutants --shard n/mand merge the survivor list. - Update docs/plan/program/quality-matrix.md, this file, and docs/plan/CHANGELOG.md with actual runtime, survivor closeout, and any narrow equivalent evidence.
bun run test:unit
bun run test:unit:desktop-contract
bun run coverage:js:desktop-contract
bun run check:js
bun run check:rust
bun run release:check
bun run mutation:js:desktop-contract
bun run mutation:js:full
bun run mutation:rust:quality- Focused helpers do not replace
bun run check. - The desktop-contract slice only protects
src/main.tsxandsrc/lib/ipc/bridge.ts. - Browser-preview e2e does not verify native scheduler install, keyring integration, signing, notarization, or filesystem side effects. Windows Task Scheduler apply/status/remove must still be accepted on a real Windows host or VM even though the Rust unit slice uses a stubbed
schtasksrunner. bun run release:checkproves the release config still permits unsigned Windows installers and bundles the WebView2 offline installer; it does not prove a specific Windows host can launch the installer.- GitHub-hosted Windows runners currently validate the desktop surface with
desktop:build:debug,vault-platformnative-host tests, and frontend updater coverage. Thepathkeep-desktopRust test binary for updater/file-manager facades is skipped on Windows CI because the hosted runner fails before the test harness starts with a loader-levelSTATUS_ENTRYPOINT_NOT_FOUND; macOS/Linux still run those Rust facade tests. - Chrome desktop-bridge smoke verifies the typed desktop command facade from a real browser, but it still does not magically grant every Tauri guest API to Chrome. Treat it as an agent/dev-loop surface, not the final WebView plugin truth.
- Platform validation for macOS / Windows / Linux lives in RELEASE.md and docs/plan/m4-full-polish/release-readiness-runbook.md.
- User-facing support diagnostics and redaction rules live in SUPPORT.md.
- Public browser support claims must follow docs/architecture/browser-support-and-adapter-playbook.md, not just the broadest code path currently implemented in the repo.
Validated now: Google Chrome; Microsoft Edge / Edge Dev; Firefox history-only baseline; ChatGPT Atlas on macOS; Perplexity Comet on macOS; Safari baseline on macOS after Full Disk Access is granted.Implemented, not yet publicly promised: Chromium, Brave, Vivaldi, Arc, Opera, Opera GX, LibreWolf, Floorp, Waterfox.
Use this recipe before promoting any browser into README or onboarding promise copy:
- Verify one successful Google Chrome backup / recall path on the current local host.
- Verify one successful Microsoft Edge backup / recall path, then verify
/importBrowser Direct against one EdgeHistoryprofile: preview, execute, re-import dedupe, import batch preview, revert, and restore. Confirm source profile metadata preservesMicrosoft Edgerather than generic Chrome. - Verify one successful Firefox backup / recall path, then verify
/importBrowser Direct against one Firefox profile directory orplaces.sqlite: preview, execute, re-import dedupe, import batch preview, revert, and restore. Record that Firefox is history-only in this release slice. - Verify
/importBrowser Direct against one local ChatGPT Atlas macOSHistoryprofile undercom.openai.atlas/browser-data/host: preview, execute, re-import dedupe, import batch preview, revert, and restore. Record only schema coverage, aggregate counts, and time ranges; never paste private URLs or titles into docs, logs, or chat. - Verify
/importBrowser Direct against one local Perplexity Comet macOSHistoryprofile under~/Library/Application Support/Comet/<profile>: preview, execute, re-import dedupe, import batch preview, revert, and restore. Record only schema coverage, aggregate counts, and time ranges; never paste private URLs or titles into docs, logs, or chat. - Verify Safari remains visible but unreadable when
History.dbcannot be accessed, and Browser Direct reports Full Disk Access guidance instead of a generic parse failure. - Verify Safari baseline backup succeeds after Full Disk Access is granted.
- Verify
/importBrowser Direct against SafariHistory.db: preview, execute, re-import dedupe, import batch preview, revert, and restore. Record only aggregate counts and time ranges; never paste private URLs into docs, logs, or chat.
Focused browser / scheduler release-blocker gates:
cargo test --manifest-path src-tauri/Cargo.toml -p browser-history-parser firefox -- --test-threads=1cargo test --manifest-path src-tauri/Cargo.toml -p vault-core takeout::tests::browser_history -- --test-threads=1cargo test --manifest-path src-tauri/Cargo.toml -p vault-core backup_ -- --test-threads=1cargo test --manifest-path src-tauri/Cargo.toml -p vault-platform scheduler -- --test-threads=1cargo test --manifest-path src-tauri/Cargo.toml -p vault-core atlas -- --nocapturecargo test --manifest-path src-tauri/Cargo.toml -p vault-core comet -- --nocapturecargo test --manifest-path src-tauri/Cargo.toml -p browser-history-parser safari -- --nocapturecargo test --manifest-path src-tauri/Cargo.toml -p vault-core browser_history -- --nocapturebun run test:unit -- src/pages/import/index.test.tsx src/pages/trust-flows/import-flows.test.tsx src/pages/trust-flows/schedule-flows.test.tsx src/pages/onboarding/shared.test.ts src/lib/browser-icons.test.tsx src/lib/i18n.test.ts
Additional adapters may keep shipping as implementation coverage, but they stay out of public promise copy until the same recipe is documented for them.
Use this order for release rehearsal:
bun run checkbun run verify
If the change touches packaging, release workflow, platform guidance, or troubleshooting copy, also perform the traceability sweep in RELEASE.md.