You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The durable person root introduced in #531 is the base for a broader People and CardDAV upgrade. This issue tracks the direction so each focused pull request can stay reviewable without losing the larger context.
Outcomes
Rich, typed person profiles with provenance, history, custom fields, structured names, contact points, addresses, dates, media, and categories.
Organizations, complete employment history, and typed temporal relationships represented as first-class records rather than copied display fields.
Explainable identity resolution that preserves source evidence and requires review for ambiguous matches instead of merging people by name or email alone.
A dated activity layer that derives contact recency and cadence from archived messages, chats, and meetings without request-time full-archive scans.
Person-scoped attachments: scoped collection policy that keeps the media worth keeping, searchable document and visual attachments, a per-person Media and Files gallery, and the same person-scoped question answerable from the web, MCP, and the CLI.
A scheduled people sweep that keeps curated attributes current from the archive: deterministic fields for everyone, evidence-backed extracted candidates for tracked people with a per-attribute auto-apply policy, bitemporal supersession instead of overwrites, and a dated "last time we talked" brief.
Lossless vCard support with stable UID continuity and preservation of unknown properties, and a standards-only CardDAV client that syncs curated people into the user's existing address book server. Msgvault does not serve CardDAV.
A web Directory workspace and bounded people-network projection built on the same typed APIs.
Optional contact enrichment inspired by Mesh, with contact details, public profiles, organizations, and employment changes.
A fresh install that reaches all of the above from a pasted Voyage key and Mistral key, one consent per hosted provider, and recommended defaults everywhere else.
Embed curated person attributes into one document per person so semantic people search ("a finance expert in New York") returns the contact directly (feat(people): add semantic person search #656).
Merge two person profiles into one when they turn out to be the same human, and split them back: survivor keeps its ID and vCard UID, the retired UID becomes an alias, every curated row moves with its provenance, and the link and candidate flows offer merge instead of failing on person_binding_conflict (feat(people): add reversible profile merges #655).
Add a keyboard-first TUI People browser over the merged profile, relationship, activity, meeting, and person-file primitives, with dossier tabs, promotion, historized attributes, and private notes (feat(tui): add People browser #669).
Expose the resulting model through a web Directory workspace and bounded network views: every typed fact about a person visible and editable in place on the existing kit-ui components, with the identity and fact review queues in the same shell (feat(web): add Directory and Settings workspaces #705).
Ship recommended defaults and a setup pass that ties the stack together: provider defaults keyed off the keys the operator has (Voyage contextual + multimodal, Mistral documents via Docbank, OpenAI-compatible or local Ollama fallbacks), a participant cap on group-room media, the seeded attribute catalog and sweep schedule, the inference-model default for synthesis, and an MCP surface that answers "when did we last talk", "who is this", "who was active", and "which network" out of the box (Ship recommended defaults and a setup pass that turns on the people and attachment stack #634).
Design constraints
SQLite and PostgreSQL remain behaviorally equivalent.
New profile facts are typed and provenance-aware; mutable facts retain history.
Creating a custom field inserts metadata and values, never runtime DDL.
Unknown vCard data survives round trips until Msgvault explicitly manages it.
Published person UIDs are stable and never silently reassigned.
Identity evidence is preserved; ambiguous matches are reviewable and reversible.
One person can hold multiple current and historical emails, phones, usernames, social profiles, and other contact points.
The attachment occurrence stays message-owned; person scope is a filter, never ownership.
External enrichment is disabled by default, receives no message or transcript content, and writes candidates rather than curated facts.
Public fixtures and examples contain only synthetic identities.
Bonus: auto merge
Later, add optional public-data enrichment behind a provider-neutral adapter, explicit consent, cost limits, provenance, and review.
Same-name records should create a suggestion and trigger a search for stronger evidence. Automatic merge is parked as bonus research: look at mature identity-resolution systems, strong identifiers, multi-signal scoring, false-positive rates, and reversible split/unmerge behavior. Name, email, or phone similarity alone is not enough for an irreversible merge.
Adjacent
Add native Notion AI Meeting Notes sync #615: native Notion AI Meeting Notes sync. A new meeting source that feeds the same transcript-embedding and activity paths, but it is a connector rather than a people-model step, so it is tracked on its own.
Once #664 lands, the chat/transcript, visual-attachment, and attachment-document embedding lanes should pass a shared retrieval evaluation before the roadmap's semantic-search work is treated as complete.
The durable person root introduced in #531 is the base for a broader People and CardDAV upgrade. This issue tracks the direction so each focused pull request can stay reviewable without losing the larger context.
Outcomes
Delivery sequence
media_scope, a participant threshold, typed skip markers that distinguish a deliberate skip from a failed download, and a purge path for media a changed policy no longer collects (feat(media): add scoped attachment policies and excluded-media purge #620). Report durable over-cap drops and retry them only after the cap changes (fix(beeper): report durable over-cap media skips #648).person_binding_conflict(feat(people): add reversible profile merges #655).Design constraints
Bonus: auto merge
Later, add optional public-data enrichment behind a provider-neutral adapter, explicit consent, cost limits, provenance, and review.
Same-name records should create a suggestion and trigger a search for stronger evidence. Automatic merge is parked as bonus research: look at mature identity-resolution systems, strong identifiers, multi-signal scoring, false-positive rates, and reversible split/unmerge behavior. Name, email, or phone similarity alone is not enough for an irreversible merge.
Adjacent
Once #664 lands, the chat/transcript, visual-attachment, and attachment-document embedding lanes should pass a shared retrieval evaluation before the roadmap's semantic-search work is treated as complete.