4.5 KiB
4.5 KiB
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_SENDtext intent filter added toAndroidManifest.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
- Define backend entity contracts for:
- person aliases
- structured facts
- important dates
- shared payload provenance
- Add sync-envelope mappings for the new local entities.
- Introduce optional AI-assisted extraction that proposes:
- multiple facts from one payload
- date detection
- confidence scoring
- recommendation context packaging
- Add server-compatible merge/reconciliation rules for conflicting profile facts and dates.
- Implement explicit privacy controls for any future cloud or AI sharing.
Manual walkthrough
1. Create person
- Open
People. - Tap
Add person. - Enter:
NameRelationship- 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
LikeorNote. - 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 & Saveto match an existing person, orCreate Person. - Complete the flow.
6. Edit captured fact
- Open
People. - Select the person.
- In
Captured facts, tapEditon 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.