# Client Iteration Summary Date: 2026-04-01 ## What was implemented This iteration focused on client-side share capture, local-first structure, and safer person assignment. Implemented: - generic shared payload normalization for: - plain text - URL - text + URL - a review-first share capture sheet for: - assign to existing person - create person quickly - save to inbox - richer local person model support: - aliases / nicknames - last updated / last interacted timestamps - richer local knowledge entities: - structured captured facts - important dates - source/provenance metadata - sensitive flag scaffolding - inbox triage improvements: - draft mapping to note / like / dislike / date / gift / place / activity / misc - create person directly from inbox - resolve to existing person with fact mapping - people profile UI improvements: - aliases visible in profile context - captured facts section - important dates section - edit/delete support for facts and dates - Android native text share entry: - `ACTION_SEND` text intent filter added to `AndroidManifest.xml` - trust/privacy wording: - clearer local-first copy in settings - tests: - generic share payload parser tests - repository tests for inbox-to-fact and date persistence - updated share inbox widget test flow ## Architecture decisions ### Kept the existing repository-centered local architecture `LocalRepository` remains the orchestrator for local persistence and ingest. This avoided a risky refactor and let the new share pipeline build on existing person/source-link/moment infrastructure. ### Added structured fact/date entities instead of overloading notes This creates a cleaner bridge to future recommendation, summarization, and sync work. Shared captures can now produce auditable, typed local knowledge instead of only raw note blobs. ### Used a review-first share flow for safety Rather than silently guessing in generic share cases, the app now asks for a target person or lets the user save to inbox. This is the safer default for a relationship product. ## Known limitations - iOS still does not have a real share extension target configured. The Flutter share logic exists, but native iOS share-sheet presence remains deferred. - Android share support added here is text-focused only. - Generic share flows do not infer advanced semantic structure automatically beyond the existing preference extractor. - Captured facts and important dates are local-only and not yet mapped into the backend sync protocol. - Inbox triage currently converts one structured draft per inbox item. It does not yet split a single payload into multiple facts. - Search is still strongest in People and not yet expanded across facts/dates/ inbox. ## What should happen next in a backend / LLM session 1. Define backend entity contracts for: - person aliases - structured facts - important dates - shared payload provenance 2. Add sync-envelope mappings for the new local entities. 3. Introduce optional AI-assisted extraction that proposes: - multiple facts from one payload - date detection - confidence scoring - recommendation context packaging 4. Add server-compatible merge/reconciliation rules for conflicting profile facts and dates. 5. Implement explicit privacy controls for any future cloud or AI sharing. ## Manual walkthrough ### 1. Create person - Open `People`. - Tap `Add person`. - Enter: - `Name` - `Relationship` - optional `Aliases` - optional notes/tags/location - Save. ### 2. Share text into app - On Android, share any text snippet into the app from another app. - Or use `Settings` -> `Simulate Share Capture`. - The review sheet should open showing the parsed text/URL preview. ### 3. Resolve ambiguity - In the review sheet, choose a fact type such as `Like` or `Note`. - Pick an existing person from recent chips or the full dropdown. - Save to that person. ### 4. Save to inbox - Repeat with another shared snippet. - In the review sheet, choose `Save To Inbox`. - Open `Share Inbox`. ### 5. Assign later - In `Share Inbox`, open the queued item. - Confirm or change the fact mapping. - Choose `Review & Save` to match an existing person, or `Create Person`. - Complete the flow. ### 6. Edit captured fact - Open `People`. - Select the person. - In `Captured facts`, tap `Edit` on the new fact. - Change the text/label/type or sensitive flag and save. ### 7. Edit captured date - If the capture was saved as a date, open `Important dates`. - Tap `Edit`. - Adjust label/classification/date and save.