Decompose: Feature: "Little Black Book" mode — locked private vault for discreet contacts — Phase 3: Contact isolation — keep vault contacts out of main UI #141

Closed
opened 2026-07-14 00:48:02 +00:00 by Mark · 0 comments
Owner

Phase 3: Contact isolation — keep vault contacts out of main UI

Goal: Vault contacts, their interactions, gifts, and dates must not appear in the main app's People page, search, Dashboard, or analytics. No visible hint that the vault exists while locked.

Approach candidates:

  • All main-app list / search / aggregate queries are routed through a single mainPersonQuery() helper. The helper itself reads only kin_db; it cannot reach into kin_vault even if the vault is unlocked.
  • No global search index includes vault-side data.
  • Dashboard tiles explicitly exclude interactionCount / giftCount derived from vault tables.

Outputs:

  • src/db.ts query helpers (or wrapper) that guarantee vault data is unreachable from the main app.
  • Update to src/screens/People.tsx, src/screens/Search.tsx, src/screens/Dashboard.tsx, src/screens/Analytics.tsx if any of them aggregated over interactions.

Acceptance criteria:

  • With vault locked or unlocked, main People page shows zero vault contacts.
  • Search results contain zero vault contacts or their interaction text.
  • Dashboard tiles (total interactions, gift counts, upcoming dates) reflect only main-DB data.
  • Test asserting all four surfaces with a seed of 5 vault contacts + 5 main contacts → main surfaces show 5.

Files touched: query layer in src/db.ts, the four surface screens.



Decomposed from kimi_agent_kin_app_sync#26

## Phase 3: Contact isolation — keep vault contacts out of main UI **Goal:** Vault contacts, their interactions, gifts, and dates must not appear in the main app's People page, search, Dashboard, or analytics. No visible hint that the vault exists while locked. **Approach candidates:** - All main-app list / search / aggregate queries are routed through a single `mainPersonQuery()` helper. The helper itself reads only `kin_db`; it cannot reach into `kin_vault` even if the vault is unlocked. - No global search index includes vault-side data. - Dashboard tiles explicitly exclude `interactionCount` / `giftCount` derived from vault tables. **Outputs:** - `src/db.ts` query helpers (or wrapper) that guarantee vault data is unreachable from the main app. - Update to `src/screens/People.tsx`, `src/screens/Search.tsx`, `src/screens/Dashboard.tsx`, `src/screens/Analytics.tsx` if any of them aggregated over interactions. **Acceptance criteria:** - [ ] With vault locked or unlocked, main People page shows zero vault contacts. - [ ] Search results contain zero vault contacts or their interaction text. - [ ] Dashboard tiles (total interactions, gift counts, upcoming dates) reflect only main-DB data. - [ ] Test asserting all four surfaces with a seed of 5 vault contacts + 5 main contacts → main surfaces show 5. **Files touched:** query layer in `src/db.ts`, the four surface screens. --- --- _Decomposed from [kimi_agent_kin_app_sync#26](https://forgejo.tail018ac4.ts.net/Mark/kimi_agent_kin_app_sync/issues/26)_
Mark closed this issue 2026-07-27 00:30:45 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Mark/kimi_agent_kin_app_sync#141
No description provided.