Skip to content

Add a web Directory workspace to view and edit person attributes #639

Description

@salmonumbrella

The situation

The people model on main is now much richer than anything the web shows. Since #531 the following have merged with authenticated APIs and generated clients: portable attribute definitions and typed, historized attribute values (#535); structured names, contact points, addresses, dates, media, categories, and service-scoped observations with ETag-guarded patching and explicit history (#565); reviewable identity-match candidates (#596); organizations and employment (#593); typed temporal relationships (#592); dated activity and computed contact state (#599). #621 adds the vCard envelope, #628 proposes fact candidates and briefs, and #622 adds the person Media and Files gallery.

The web has a Relationships workspace — RelationshipsWorkspace, RelationshipHeader, RelationshipList, RelationshipTimeline, LinkIdentityDialog, PersonTimeline — built on Svelte 5 and @kenn-io/kit-ui. GET /api/v1/people/{id} returns a profile block when the cluster is promoted. That is the whole person surface. There is no component under web/src/lib that reads or writes an attribute, a definition, a contact point, an address, a date, a category, an employment, or a typed relationship; those endpoints exist only in web/src/lib/api/generated/schema.d.ts. #532 lists the web exposure deferred from #531 — promote, list, rename, delete, and the person_binding_conflict handling in the link flow.

#534 step 17 is "Expose the resulting model through the web Directory and bounded network views." This issue is that step.

What works today, and why it is not enough

Everything is reachable through the CLI (msgvault person attributes set|list --history, attribute-definition create|list) and through the generated clients. That is fine for agents and scripts. It is not how a person maintains a contact. Someone who wants to see what msgvault knows about a contact — current employer, partner's name, the last time they talked, which channel to use — and correct one field, has to leave the browser. And a profile you cannot see is a profile you do not trust; the sweep in #628 will propose changes that need a place to be reviewed.

Ask

Add a Directory workspace to the web app that shows every typed fact about a person and lets the user change them, using the components and patterns the app already has.

Design constraints: read-side behaviour identical against SQLite and PostgreSQL because everything goes through the API; sensitive attributes are visible but marked and never auto-filled; nothing in the UI writes an attribute without provenance (source=user, actor); fixtures and screenshots use synthetic identities.

Delivery boundary

Owns the web Directory workspace, person detail, in-place editing, review queues, and the network view. Does not add or change API contracts except to fill a discovered gap. #622 owns the Media and Files tab and mounts into this shell. #628 (f) is the fact-candidate review UI and lands inside the review queue here. #532's web items are covered by this issue; its read-side integration and unbinding items are not.

Refs #534, #531, #532, #535, #565, #592, #593, #596, #599, #621, #622, #628.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions