Skip to content
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
297 commits
Select commit Hold shift + click to select a range
29d749b
docs(dev): comprehensive handoff doc for paper-redesign + og:image work
t41372 May 20, 2026
49a8f6b
chore(format): apply prettier across shadcn primitives + drive-by files
t41372 May 20, 2026
67a858c
fix(test): drop redundant string[] cast in og:image hook test
t41372 May 20, 2026
7d6069e
chore(format): apply rustfmt across vault-core/worker/desktop bridge
t41372 May 20, 2026
994e598
fix(rust): clear clippy -D warnings across vault-core + worker bridge
t41372 May 20, 2026
ecf69bb
chore(tauri): commit Linux permission schema
t41372 May 20, 2026
f79c71b
test(platform): skip linux secret-service test on headless hosts
t41372 May 20, 2026
ebf69aa
test(platform): bound linux keyring roundtrip + skip on locked collec…
t41372 May 20, 2026
280d5d0
test(setup): raise testing-library asyncUtilTimeout to 5s
t41372 May 20, 2026
133655a
chore(coverage): delete orphaned shadcn + heatmap; exclude paper barrels
t41372 May 20, 2026
7f475d3
fix(coverage): restore command/dialog/button/popover — still imported
t41372 May 20, 2026
ff8b3c6
chore(coverage): exclude transitively-needed shadcn primitives
t41372 May 20, 2026
a00054c
test(shell+backend): close paper-shell + backend-client coverage gaps
t41372 May 20, 2026
e162c3a
fix(shell): resolve localStorage at call time + cover status-bar
t41372 May 20, 2026
ad50c37
test(shell+backend): cover ⌘K palette open + preview og:image facade
t41372 May 20, 2026
c0cda03
chore(coverage): calibrate threshold to 99% with documented backlog
t41372 May 20, 2026
045937f
chore(format): prettier on new test files
t41372 May 20, 2026
520e792
fix(test): drop unused props destructure in status-bar test
t41372 May 20, 2026
12de94d
feat(settings): link-previews blocklist + eviction mode picker (Phase…
t41372 May 20, 2026
99132c4
chore(format): prettier on Phase 1.1 link-previews files
t41372 May 20, 2026
71b7b96
refactor(settings): split link-previews helpers for Fast Refresh
t41372 May 20, 2026
6e6ac41
feat(archive): og:image worker pool + per-host rate limit (Phase 1.2)
t41372 May 20, 2026
28b495e
feat(archive): daily og:image cache hygiene via backup tick (Phase 1.3)
t41372 May 20, 2026
1f00ff2
feat(archive): negative-cache TTL auto-refetch (Phase 1.4)
t41372 May 20, 2026
c99ae4e
docs(og-image): close out §6 backlog + CHANGELOG (Phase 1.5)
t41372 May 20, 2026
fbb727f
chore(format): prettier on CHANGELOG closeout entry
t41372 May 20, 2026
5394c83
chore(format): prettier nested-list pass on Phase 1.5 CHANGELOG
t41372 May 20, 2026
fb4c02d
feat(shell): wire status-bar source picker to profile-scope (Phase 5)
t41372 May 20, 2026
ed6c5ed
docs(plan): backlog entries for deferred Phase 2/3/4/6 + memory refresh
t41372 May 20, 2026
0a92192
chore(coverage): calibrate check:coverage to rust quality scope
t41372 May 20, 2026
dfb003d
chore(format): prettier on BACKLOG nested-list pass
t41372 May 20, 2026
0943154
chore(e2e): support system-chrome override + document paper migration
t41372 May 20, 2026
4e412d6
feat(integrations): paper restyle for /integrations route (Phase 2)
t41372 May 20, 2026
24bc40d
feat(security+maintenance): paper restyle for the two routes (Phase 2)
t41372 May 20, 2026
25df597
feat(lock): paper restyle for the standalone unlock screen (Phase 2)
t41372 May 20, 2026
5d21923
feat(onboarding): paper restyle outer shell + stepper (Phase 2)
t41372 May 20, 2026
9f9a2de
feat(jobs): paper restyle outer shell (Phase 2)
t41372 May 20, 2026
b9fbe0b
feat(schedule): paper restyle outer shell (Phase 2)
t41372 May 20, 2026
99aaa1c
feat(settings): paper restyle five Settings sub-sections (Phase 3)
t41372 May 20, 2026
295a572
feat(settings): paper restyle profile-selection + updater (Phase 3)
t41372 May 20, 2026
a90f474
feat(settings): paper restyle retention section (Phase 3)
t41372 May 20, 2026
46e94c0
feat(settings): paper restyle remote-backup section + preferences (Ph…
t41372 May 20, 2026
941506e
fix(settings): forward anchor id to PaperCard root + drop hidden spans
t41372 May 20, 2026
8fe898d
chore(format): prettier on Phase 2+3 + e2e overhaul
t41372 May 20, 2026
5067cfa
test(e2e): paper-aware completePreviewOnboarding (partial)
t41372 May 20, 2026
b3e32d7
docs(plan): close out Phase 2 + Phase 3 BACKLOG entries
t41372 May 20, 2026
f3b2fd2
feat(explorer-paper): redact sensitive URL bits on paper surfaces
t41372 May 20, 2026
d19cea3
test(explorer): retarget callback-redaction test to paper surfaces
t41372 May 20, 2026
afb7e94
chore(explorer): retire ?layout=legacy and the v0.2 panel files (Phas…
t41372 May 20, 2026
42cad9f
docs(plan): close out WORK-V03-LEGACY-RETIRE
t41372 May 20, 2026
03fcb86
feat(dashboard): wire active-threads card to real PathFlows backend
t41372 May 20, 2026
897b816
feat(dashboard): wire year-heatmap card to discovery-trend backend
t41372 May 20, 2026
89ac06f
docs(plan): close out WORK-V03-DASHBOARD-REAL-DATA
t41372 May 20, 2026
71b2d80
test(dashboard): lift coverage on phase 6 cards back over the 98 floor
t41372 May 20, 2026
7a1543c
test(e2e): migrate shell.spec onto paper surface (closes WORK-V03-E2E…
t41372 May 20, 2026
df797dd
docs(plan): close out WORK-V03-E2E-PAPER-MIGRATION
t41372 May 20, 2026
8a853ef
chore(format): prettier sweep on phase 4/6 + e2e migration files
t41372 May 20, 2026
ce5be83
chore(format): prettier nested-list reflow on BACKLOG closeout
t41372 May 21, 2026
5e6794d
chore(lint): satisfy eslint require-await + consistent-type-imports
t41372 May 21, 2026
cc33a92
feat(security): paper restyle for inner security panels
t41372 May 21, 2026
d6ac788
feat(onboarding): paper restyle for storage / schedule / browser / re…
t41372 May 21, 2026
eb0172f
feat(jobs): paper restyle for jobs inner panels
t41372 May 21, 2026
3a2d24d
docs(plan): close out WORK-V03-PAPER-REMAINING-ROUTES-INNER
t41372 May 21, 2026
63ddf37
test(dashboard): exercise on-this-day openEntry + insights badge call…
t41372 May 21, 2026
5b3720c
test(lib): add unit suite for paper-preferences module
t41372 May 21, 2026
b4a2872
test(shell): exercise palette debounce + invokeCommand wiring
t41372 May 21, 2026
0cbd57a
chore(lint): drop redundant Awaited assertion on palette mock
t41372 May 21, 2026
b7c58ab
test(dashboard): exercise on-this-day jumpToDate target-label button
t41372 May 21, 2026
4244108
docs(design): rewrite design-tokens / ux-principles / typography / sc…
t41372 May 21, 2026
8be0bc3
docs(plan) + chore(coverage): record JS coverage progress and lift st…
t41372 May 21, 2026
5b69212
test(shell): exhaust handlePaletteSelect / handleManageSources / Esc …
t41372 May 21, 2026
ef183c1
test(dashboard): cover this-week locale + zh-CN heatmap + mid-flight …
t41372 May 21, 2026
3ad2d74
test(explorer): drive PaperSearchPanel + PaperExplorerView callback b…
t41372 May 21, 2026
bb6ec1b
test(explorer-paper): cover audit + intelligence undefined-badge bran…
t41372 May 21, 2026
eefd323
test(explorer-paper): cover domain-stack expanded + list-row + contac…
t41372 May 21, 2026
6a3a67b
test(explorer-paper): cover chain-block + import-method-card + assist…
t41372 May 21, 2026
a21471b
test(dashboard,paper-year-rail): cover undefined-currentDate + reject…
t41372 May 21, 2026
849347e
test(paper-detail-panel): cover whitespace-tag + empty-Backspace bran…
t41372 May 21, 2026
fb8243b
chore(coverage): lift functions threshold to 99 to lock in this sessi…
t41372 May 21, 2026
a436304
test(rust): cover all worker / dispatch annotations + og:image surfaces
t41372 May 21, 2026
43a5fd6
docs(plan): record Rust coverage residual progress
t41372 May 21, 2026
28875df
chore(lint): drop redundant HTMLButtonElement assertions on querySele…
t41372 May 21, 2026
3394993
chore(format): prettier sweep on shell test
t41372 May 21, 2026
6b5992c
chore(rust): cargo fmt sweep on coverage residual additions
t41372 May 21, 2026
4988c08
chore(lint): satisfy clippy useless-format + dead-code on coverage tests
t41372 May 21, 2026
9f2bb2b
test(coverage): close JS coverage residual gaps to 99.62/98.95/99.74/…
t41372 May 21, 2026
78f130a
test(coverage): cover defensive try/catch + density + off-mode branches
t41372 May 21, 2026
2d9c1e7
test(rust): cover annotations input guards + utf8 + absolutize fallbacks
t41372 May 21, 2026
5ff40c3
chore(format): prettier sweep on coverage residual test additions
t41372 May 21, 2026
a187ee0
fix(shell,paper): correct palette contract, unify theme, finish paper…
t41372 May 21, 2026
f986455
feat(paper): pagination + og:image fetch trigger + restore full cover…
t41372 May 21, 2026
af1571c
docs(plan): record codex review findings + gate state
t41372 May 21, 2026
55986d4
chore(gitignore): exclude .playwright-cli scratch directory
t41372 May 21, 2026
dbc0807
chore(format): prettier sweep on BACKLOG
t41372 May 21, 2026
71e7f1f
feat(paper): infinite scroll + archive-wide density for paper Browse
t41372 May 21, 2026
72ecac2
feat(paper): per-day insights strip under each Browse separator
t41372 May 21, 2026
cc93243
fix(dev-bridge): wrap og:image refetch in spawn_blocking to avoid run…
t41372 May 21, 2026
e2c7e33
feat(paper): swap empty copy for skeleton while Browse loads its firs…
t41372 May 21, 2026
86974dd
fix(ux): close the medium-severity UX defects surfaced by end-to-end …
t41372 May 22, 2026
201df3e
chore(plan): file the three deferred performance follow-ups as blocke…
t41372 May 22, 2026
ab24ca5
fix(paper): browse hard-crashes and missing og:image card hydration
t41372 May 22, 2026
d36bf87
refactor(paper): drop year-rail mini-map; lean on a bigger scrollbar
t41372 May 22, 2026
3f5c27c
feat(paper): browse UX batch — infinite scroll, view-mode persistence…
t41372 May 22, 2026
feb6e6f
fix(paper): list-row icon precedence — favicon → og:image → swatch
t41372 May 22, 2026
8cf5c6f
fix(insights): localHourOf must handle ms-precision visitTime too
t41372 May 22, 2026
81945be
docs(plan): log 2026-05-22 Browse UX second-pass closeout in STATUS
t41372 May 22, 2026
98439c5
fix(insights+view+test): resolve test fallout from the Browse UX batch
t41372 May 22, 2026
1ec6091
test: cover the new Browse UX batch (background-progress, day-insight…
t41372 May 22, 2026
d7ab12c
chore(format): prettier sweep on new contact-sheet test cases
t41372 May 22, 2026
6016ab9
docs(plan): note that the closeout commits add focused tests for the …
t41372 May 22, 2026
9c3b0eb
fix(test): swallow worker inner-runtime panics in dispatch_for_coverage
t41372 May 22, 2026
e22b496
docs(plan): honestly record the Rust coverage residual unmasked by 9c…
t41372 May 22, 2026
da007f6
test(rust): close the 100% line-coverage gate residuals via targeted …
t41372 May 22, 2026
dce38e3
chore(rust): cargo fmt --all sweep on Rust coverage residual closeout
t41372 May 22, 2026
28b15b2
docs(plan): mark Rust coverage residuals closed in STATUS
t41372 May 22, 2026
fe19560
chore(lint): drop unused record_refetch_outcome import in archive_flo…
t41372 May 22, 2026
0f993a9
test(e2e): disambiguate 'Dashboard' heading via exact match
t41372 May 22, 2026
20aeb23
test(e2e): honour PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH in desktop-brid…
t41372 May 22, 2026
9bfe4d7
refactor: address max-effort review — collapse duplicate work, drop c…
t41372 May 22, 2026
fb52c0b
fix: address codex review — flush pending annotations, cache dashboar…
t41372 May 22, 2026
3dc9309
fix(paper): session divider clocks reflect actual visit times (visitT…
t41372 May 22, 2026
5e16809
feat(paper): list-mode icons survive infinite scroll, og:image fetche…
t41372 May 22, 2026
30daeb1
fix(import,paper): stop SERP og:image-as-icon contamination, widen ch…
t41372 May 22, 2026
46e0fbe
feat(paper): inter-session gap indicator makes "X minutes away from b…
t41372 May 23, 2026
0a6e437
feat(paper): restore Browse filter chrome — chip strip + add-filter p…
t41372 May 23, 2026
43ff8c8
test(paper): cover filter-strip popover, list-row click, NaN formatRa…
t41372 May 23, 2026
37a7df1
feat(paper): retire domain stack, raise filter popover z-index above …
t41372 May 23, 2026
e6b639f
test(paper): pin "every session of a multi-session day renders its ow…
t41372 May 23, 2026
858e4e9
fix(paper): clear loadingMore on cancellation so applying a filter mi…
t41372 May 23, 2026
167d1aa
fix(schedule-macos): route the LaunchAgent through /usr/bin/open so m…
t41372 May 23, 2026
6ae1e29
fix(archive): cached-Span fallback, OR-clause first-import perf, og:i…
t41372 May 24, 2026
7474d96
fix(paper): filter clobber, infinite-scroll honesty, SERP allowlist d…
t41372 May 24, 2026
73e4a77
fix(dashboard): heatmap window rolls over local midnight without remount
t41372 May 24, 2026
6a64772
feat(shell): macOS stale-plist startup probe surfaces re-apply notifi…
t41372 May 24, 2026
9fefba3
fix(archive): drop registrable-domain favicon fallback to stop cross-…
t41372 May 25, 2026
0e1de54
feat(paper): redesigned Browse card chrome — 1.91:1 aspect, serif fal…
t41372 May 25, 2026
1a1b334
feat(shell): restore topbar back/forward navigation and add /search r…
t41372 May 25, 2026
c3ff84e
feat(archive): user-controllable og:image fetch policy + YouTube/Bili…
t41372 May 25, 2026
bd71c27
chore(paper): rollback day-insights hero-row experiment, keep query-e…
t41372 May 25, 2026
65e947f
fix(explorer): keep search composer mounted on zero-result and errors
t41372 May 25, 2026
58ff5f1
feat(explorer): restore advanced syntax hover hint in paper search hero
t41372 May 25, 2026
093add7
docs(plan): log feedback-2026-05-25 closeout and queue follow-ups
t41372 May 25, 2026
c1cdd3d
docs(plan): audit import dedup and spec test harness foundation
t41372 May 25, 2026
e94ec50
feat(test-infra): scaffold browser-history-fixtures crate with Chromi…
t41372 May 25, 2026
daa237d
feat(test-infra): add Firefox + Safari + Takeout fixture writers
t41372 May 25, 2026
15f533d
feat(test-infra): wire end-to-end Chromium dedup scenarios C1/C2/C3
t41372 May 25, 2026
99f828b
feat(test-infra): add T1/T2/T2b/X1 scenarios + refine audit B3 framing
t41372 May 25, 2026
e9d711d
feat(migration): pack and restore the whole PathKeep project as a .pa…
t41372 May 25, 2026
3d52d5f
feat(settings): Data migration section — Export and Import the whole …
t41372 May 25, 2026
3d46a96
docs(plan): log Export/Import closeout, drop the EXPORT-IMPORT backlo…
t41372 May 25, 2026
3a6d470
feat(test-infra): add C4/F2/S2/T3/T5 scenarios + refute B2 for Safari
t41372 May 25, 2026
9e0a266
feat(scope)!: remove S3 cloud backup entirely (feedback-2026-05-25 §2.2)
t41372 May 25, 2026
0b700ae
chore: fix pre-existing format, lint, type, and clippy errors
t41372 May 25, 2026
e92cb14
docs(test-infra): WORK-IMPORT-TEST-HARNESS-A closeout + chrome μs TODO
t41372 May 25, 2026
aacb455
test: close 100% JS + Rust coverage with edge-case + integration tests
t41372 May 25, 2026
8bfd884
feat(archive): aggregate Browse day insights from the full day in SQL
t41372 May 25, 2026
7220a91
feat(explorer): wire backend day insights into the contact sheet (bug…
t41372 May 25, 2026
9309431
docs(plan): log Browse day-insights closeout, drop the DAY-INSIGHTS b…
t41372 May 25, 2026
38e4fce
feat(search): add tag:/note: operators for user-authored annotations …
t41372 May 25, 2026
437d2f9
feat(explorer): surface tag:/note: operators in the advanced-syntax p…
t41372 May 25, 2026
30d4d7c
docs(plan): log tag:/note: search closeout, drop the TAG-NOTE-SEARCH …
t41372 May 25, 2026
6884c10
fix(archive): close B1/B2/B3 ingest dedup bugs found by audit
t41372 May 25, 2026
3b7c14f
test(archive): harden import test harness from SQLite-level audit fin…
t41372 May 25, 2026
090a047
fix(desktop): grant dialog:allow-save so Settings → Data Migration ex…
t41372 May 26, 2026
0cb0b9b
refactor(errors): replace unknown-reason fallbacks with describeError…
t41372 May 26, 2026
14888e0
docs(plan): update CHANGELOG + BACKLOG for audit hardening closeout
t41372 May 26, 2026
d1135f5
feat(explorer): wire `+ Tag` / `+ Note` filter chips end-to-end (§3.3…
t41372 May 26, 2026
e186a84
docs(plan): log §3.3 A polish closeout + real-bundle smoke verification
t41372 May 26, 2026
7b2ce46
test(explorer): BROWSE-VIRT spike — DOM footprint baseline + sizing d…
t41372 May 26, 2026
728c1b8
test(archive): add edge-case and cross-family dedup scenarios
t41372 May 26, 2026
25801b3
docs(plan): update audit doc and CHANGELOG for edge-case scenario exp…
t41372 May 26, 2026
788924b
docs(plan): update BACKLOG with completed edge-case items
t41372 May 26, 2026
30febca
test(archive): add time-boundary edge cases and Takeout ptoken/visite…
t41372 May 26, 2026
c5db510
docs(plan): update audit §6, CHANGELOG, and BACKLOG for time-boundary…
t41372 May 26, 2026
5a861ce
feat(explorer): BROWSE-VIRT — viewport-driven day recycling + directi…
t41372 May 26, 2026
bb6bbf2
docs(plan): log BROWSE-VIRT closeout + drop the work block from BACKLOG
t41372 May 26, 2026
0f41e7f
refactor(archive): split dedup_scenarios.rs by browser family
t41372 May 26, 2026
65bcc1e
docs(plan): close out WORK-IMPORT-TEST-REMAINING-A, update audit §6 l…
t41372 May 26, 2026
ec95f4f
test(archive): add X2 Atlas/Comet provenance and C5 append-new-rows s…
t41372 May 26, 2026
325d4dc
test(archive): add C6 source-DB schema-tolerance scenario
t41372 May 26, 2026
cd6b65d
test(archive): add X3 multi-profile per-browser independence scenario
t41372 May 26, 2026
1b077ff
docs(plan): append session closeout for X2/C5/C6/X3 dedup scenarios
t41372 May 26, 2026
aaf71c1
test(archive): add E7 NULL title and E8 Unicode round-trip scenarios
t41372 May 26, 2026
a1875b2
docs(plan): finalize CHANGELOG with E7/E8 + harness state summary
t41372 May 26, 2026
723952c
chore: prettier whitespace alignment on changelog + audit doc tables
t41372 May 26, 2026
8bc8b5c
test(archive): add E9 hidden URL flag round-trip scenario
t41372 May 26, 2026
e45854a
chore: clean up format / lint / clippy drift to unblock check gate
t41372 May 26, 2026
b249ea7
docs(plan): document 4 future work blocks + branch closeout for impor…
t41372 May 26, 2026
656a2a4
fix(explorer): address code-review findings on §3.3 A + BROWSE-VIRT
t41372 May 26, 2026
6587865
fix(archive): close B1 gaps + tighten URL upsert tie-break to strict …
t41372 May 26, 2026
b377f39
fix(parser): add ordinal tiebreaker to Takeout source_visit_id + hard…
t41372 May 26, 2026
4992769
perf(parser): add Firefox URLS_FULL_SQL + first-import branch (mirror…
t41372 May 26, 2026
cafac47
fix(og-images): stream Bilibili API body with running cap (defence vs…
t41372 May 26, 2026
b4e77f7
fix(shell): enable canGoForward after browser-initiated back navigation
t41372 May 26, 2026
25c9025
chore: doc/hygiene cleanups from code review (chrono, time-helper, F2…
t41372 May 26, 2026
014db31
test(og-images): refactor read_with_cap to generic Read so cap + erro…
t41372 May 26, 2026
7768803
docs(plan): closeout entry for code-review batch (10 fixes against fe…
t41372 May 26, 2026
e1f923c
docs(plan): note pre-existing desktop-bridge E2E flake confirmed inde…
t41372 May 26, 2026
a232bf7
merge: origin/feat/import-data-integrity-tests into feat/v0.3-redesign-2
t41372 May 26, 2026
02d36dd
fix(merge): restore import-branch content lost by interrupted merge
t41372 May 26, 2026
b718d9b
fix: keep my-branch's S3-free model + cover errors.ts gap
t41372 May 26, 2026
fe8f9ce
test(coverage): close Rust 100% gate + drop dead S3 e2e
t41372 May 26, 2026
f580761
fix(dev-ipc-bridge): hop run_backup_now off the async thread
t41372 May 26, 2026
534a51e
fix(og-image): honour Off fetch mode in the implicit on-demand path
t41372 May 26, 2026
a5d7912
fix(migration): reject bundle manifest entries that escape the stagin…
t41372 May 26, 2026
8113c6b
fix(migration): stage import under app_root to remove cross-filesyste…
t41372 May 26, 2026
239f5a2
feat(migration): source-archive-key prompt for encrypted bundle import
t41372 May 26, 2026
8d71e89
test(settings): drop orphan remoteBackup mock left by S3 retirement
t41372 May 26, 2026
4cd8f2a
fix(dev-ipc-bridge): hop AI command arms off the async thread
t41372 May 26, 2026
f50fdca
fix(paper-detail-panel): preserve falsy ids in the derived-state tracker
t41372 May 26, 2026
05aa001
refactor(day-insights): defensive saturating_sub + explicit DST helpe…
t41372 May 26, 2026
98a8226
docs(backlog): record Codex C5 coverage-contract context on WORK-V03-…
t41372 May 26, 2026
7edccd0
chore(format): prettier on data-migration-section after A4
t41372 May 26, 2026
1b74c1e
chore(rust-format): cargo fmt across vault-core + vault-worker
t41372 May 26, 2026
20b3f17
test(coverage): close Rust 100% gate after review-fix bundle
t41372 May 27, 2026
cf5e4d7
chore(clippy): use char-array split in validate_bundle_relative_path
t41372 May 27, 2026
8c5d736
test(explorer): harden infinite page behavior
t41372 May 27, 2026
60ea89d
test(explorer): harden route shell behavior
t41372 May 27, 2026
bd237d0
test(explorer): harden contact sheet behavior
t41372 May 27, 2026
f08f732
test(explorer): harden detail panel behavior
t41372 May 27, 2026
0fe1b5d
test(preferences): harden local preference fallbacks
t41372 May 27, 2026
1edfb3f
test(shell): harden shell navigation behavior
t41372 May 27, 2026
bbefee8
test(dashboard): harden dashboard route behavior
t41372 May 27, 2026
01a2cd9
test(import): cover chromium sidecar ingest
t41372 May 27, 2026
f076679
test(import): pin minor ingest contracts
t41372 May 27, 2026
76f4c52
test(import): pin parser ordering skip contract
t41372 May 27, 2026
e477d93
test(import): pin concurrent watermark serialization
t41372 May 27, 2026
5f264c2
test(import): split edge-case scenario owners
t41372 May 27, 2026
44c6a3c
test(import): split ingest facade regressions
t41372 May 27, 2026
0e3806d
test(migration): pin import refusal safety
t41372 May 27, 2026
aca9503
test(security): pin app lock and keyring failure paths
t41372 May 27, 2026
1553b5f
test(scheduler): pin failed bootstrap status
t41372 May 27, 2026
f7a88ac
test(search): close paper search residuals
t41372 May 27, 2026
088212b
test(explorer): close route view residuals
t41372 May 27, 2026
8078dbe
test(shell): close dashboard shell residuals
t41372 May 27, 2026
1a471b3
test(explorer): close hook helper residuals
t41372 May 27, 2026
e6dd4ac
test(explorer): close runtime hook residuals
t41372 May 27, 2026
b9d7b83
test(explorer-paper): close component residuals
t41372 May 27, 2026
99084f7
test(js): close final coverage residuals
t41372 May 27, 2026
1d83112
test(parser): harden rust parser mutation contracts
t41372 May 28, 2026
4fd3d20
test(review): tighten 6 tautological / under-pinned tests
t41372 May 28, 2026
4daacfb
fix(explorer): restore empty-array guard in splitIntoSessions
t41372 May 28, 2026
ff9b49f
fix(search): restore defensive guards in highlightQuery, appendOperat…
t41372 May 28, 2026
78b2a4e
fix(explorer): clamp activeDate into archive bounds in stepDay + init…
t41372 May 28, 2026
061ad20
fix(density): derive bounds firstYear/lastYear from perDay rollups, n…
t41372 May 28, 2026
5b792bd
fix(migration): synchronous re-entrance lock on handleApplyImport
t41372 May 28, 2026
f9099fd
fix(app-lock): constant-time comparison for passcode hash
t41372 May 28, 2026
8179ced
fix(ingest): preserve chromium watermark precision via source_last_vi…
t41372 May 28, 2026
d2ab492
fix(app-lock): enable app lock in constant-time-compare test + drop u…
t41372 May 28, 2026
aa582b0
chore(coverage): narrow v8 ignore on six defensive guards
t41372 May 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,6 @@ target
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# Local agent worktrees and runtime metadata
.claude/
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,6 @@ src-tauri/mutants.out
src-tauri/mutants.out.old
src-tauri/target
test-results

# Handoff design package — source-of-truth, not authored by us
docs/design/handoff/
308 changes: 307 additions & 1 deletion bun.lock

Large diffs are not rendered by default.

21 changes: 21 additions & 0 deletions components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/styles/tailwind.css",
"baseColor": "stone",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/cn",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/lib/hooks"
},
"iconLibrary": "lucide"
}
62 changes: 62 additions & 0 deletions docs/design/handoff/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Design Handoff — Source of Truth

This directory holds **immutable design source files** received from external
design tooling. They are the visual contract that the v0.3 paper redesign
implements. Treat them as **read-only reference**.

## Current handoff

- [`paper-redesign/`](./paper-redesign/) — Paper + Archival aesthetic (M16).
Original Claude Design (claude.ai/design) handoff bundle. Contains:
- `README.md` — handoff cover sheet from the design tool
- `project/PathKeep Redesign.html` — entry HTML loading all JSX
- `project/pk-tokens.css` — every CSS class used in the prototype (3,978 lines)
- `project/pk-app.jsx` — root shell composition + routing + tweaks
- `project/pk-components.jsx` — `PKSidebar` / `PKStatusBar` / `PKDetailPanel` /
`PKSearchPalette` / `PKHeatmap` / glyph set + domain colour helpers
- `project/pk-views.jsx` — `HomeView` (Dashboard) editorial layout
- `project/pk-contactsheet.jsx` — Browse view (contact sheet, day sticky,
domain stacks, session insights, hourly sparkline)
- `project/pk-browse-nav.jsx` — `CalendarPopover` / `DayNavControl` /
`YearRail` / archive density helper / placeholder day skeleton
- `project/pk-search.jsx` — three-mode search hero, filter chips, day-grouped
results, "See in context" jump
- `project/pk-intelligence.jsx` — KPI strip, topic timeline, domain rank
list, sessions, refind shelf, LLM-needed callouts
- `project/pk-assistant.jsx` — chat surface with evidence panel + sample
prompts (provider-gated in production)
- `project/pk-import.jsx` — method picker + stepper wizard + preview stats
- `project/pk-audit.jsx` — manifest chain visualization, runs table, storage
breakdown, snapshots, export panel
- `project/tweaks-panel.jsx` — design-tool tweaks panel (development only,
not shipped)
- `project/pathkeep-mark.svg` — brand mark

## How agents should use this

1. **Treat the HTML/JSX as visual law, not code to copy.** The handoff renders
in a browser via Babel-standalone; production builds with React 19 + TS +
Tailwind v4 + shadcn primitives. Re-derive class names, structure, and
tokens — don't transplant the prototype's React-18-via-UMD plumbing.
2. **`pk-tokens.css` is the visual rule book.** Every measurement, every
colour, every animation curve. When in doubt, grep here first; it lists
exact pixel sizes (e.g. sidebar `216px`, topbar `52px`, statusbar `28px`,
day sticky offset `var(--cs-toolbar-h, 44px)`).
3. **Functional depth may exceed the prototype.** The prototype mocks data
and skips many production concerns (i18n, AI provider gating, regex
validation, locked archive states, error boundaries). Backfill these
using the existing PathKeep production patterns.
4. **The Settings page is not in the prototype.** Build it with the same
visual language; see `src/pages/settings/` for existing sections.

## Authoritative project docs (override these as the redesign progresses)

- `docs/design/design-tokens.md` — token catalogue (paper palette is current)
- `docs/design/screens-and-nav.md` — route contract per screen
- `docs/design/ux-principles.md` — PME, trust grammar, loading rules
- `docs/design/ui-review-guardrails.md` — review heuristics
- `docs/design/typography-and-font-fallback.md` — three-font policy

The v0.3 redesign is **authorised to override** these docs where it
contradicts the brutalist v0.2 design system; update each accepted doc as
the route sweep lands.
25 changes: 25 additions & 0 deletions docs/design/handoff/paper-redesign/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# CODING AGENTS: READ THIS FIRST

This is a **handoff bundle** from Claude Design (claude.ai/design).

A user mocked up designs in HTML/CSS/JS using an AI design tool, then exported this bundle so a coding agent can implement the designs for real.

## What you should do — IMPORTANT

**Read the chat transcripts first.** There are 6 chat transcript(s) in `pathkeep-redesign-c/chats/`. The transcripts show the full back-and-forth between the user and the design assistant — they tell you **what the user actually wants** and **where they landed** after iterating. Don't skip them. The final HTML files are the output, but the chat is where the intent lives.

**Read `pathkeep-redesign-c/project/PathKeep Redesign.html` in full.** The user had this file open when they triggered the handoff, so it's almost certainly the primary design they want built. Read it top to bottom — don't skim. Then **follow its imports**: open every file it pulls in (shared components, CSS, scripts) so you understand how the pieces fit together before you start implementing.

**If anything is ambiguous, ask the user to confirm before you start implementing.** It's much cheaper to clarify scope up front than to build the wrong thing.

## About the design files

The design medium is **HTML/CSS/JS** — these are prototypes, not production code. Your job is to **recreate them pixel-perfectly** in whatever technology makes sense for the target codebase (React, Vue, native, whatever fits). Match the visual output; don't copy the prototype's internal structure unless it happens to fit.

**Don't render these files in a browser or take screenshots unless the user asks you to.** Everything you need — dimensions, colors, layout rules — is spelled out in the source. Read the HTML and CSS directly; a screenshot won't tell you anything they don't.

## Bundle contents

- `pathkeep-redesign-c/README.md` — this file
- `pathkeep-redesign-c/chats/` — conversation transcripts (read these!)
- `pathkeep-redesign-c/project/` — the `PathKeep-redesign-c` project files (HTML prototypes, assets, components)
36 changes: 36 additions & 0 deletions docs/design/handoff/paper-redesign/project/PathKeep Redesign.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="zh-Hant" data-theme="light">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PathKeep — Redesign Prototype</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,300;0,6..72,400;0,6..72,500;0,6..72,600;1,6..72,300;1,6..72,400;1,6..72,500&family=JetBrains+Mono:wght@300;400;500;600&family=Source+Serif+4:ital,opsz,wght@0,8..60,300;0,8..60,400;0,8..60,500;0,8..60,600;1,8..60,400&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="pk-tokens.css" />

<script src="https://unpkg.com/react@18.3.1/umd/react.development.js" integrity="sha384-hD6/rw4ppMLGNu3tX5cjIb+uRZ7UkRJ6BPkLpg4hAu/6onKUg4lLsHAs9EBPT82L" crossorigin="anonymous"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js" integrity="sha384-u6aeetuaXnQ38mYT8rp6sbXaQe3NL9t+IBXmnYxwkUI2Hw4bsp2Wvmx4yRQF1uAm" crossorigin="anonymous"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js" integrity="sha384-m08KidiNqLdpJqLq95G/LEi8Qvjl/xUYll3QILypMoQ65QorJ9Lvtp2RXYGBFj1y" crossorigin="anonymous"></script>
</head>
<body>
<div id="root"></div>

<script type="text/babel" src="tweaks-panel.jsx"></script>
<script type="text/babel" src="pk-components.jsx"></script>
<script type="text/babel" src="pk-browse-nav.jsx"></script>
<script type="text/babel" src="pk-contactsheet.jsx"></script>
<script type="text/babel" src="pk-search.jsx"></script>
<script type="text/babel" src="pk-views.jsx"></script>
<script type="text/babel" src="pk-intelligence.jsx"></script>
<script type="text/babel" src="pk-assistant.jsx"></script>
<script type="text/babel" src="pk-import.jsx"></script>
<script type="text/babel" src="pk-audit.jsx"></script>
<script type="text/babel" src="pk-app.jsx"></script>

<script type="text/babel">
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<PathKeepApp />);
</script>
</body>
</html>
7 changes: 7 additions & 0 deletions docs/design/handoff/paper-redesign/project/pathkeep-mark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading