β Context/ plans
Augment from DB Β· Phase 4 β people reveal, person cards, add-person with automatic affiliation
The org card grows its people: every affiliated person revealed with role + relevance, nested identity links with their own β and π, and an inline add-person where the affiliation edge materializes without the operator ever managing it.
Spec reference
Implements Phase 4 of Augment From DB Flow. All UI lands in apps/org-workbench; zero service changes β every verb (organization.affiliations, person.candidates / person.apply / person.affiliate, person.links.add / person.corpus.add) shipped in Phase 1 or earlier flows. Branch: rebuild/turbo-rsbuild.
Wire shapes verified against person-resolver.ts: PersonNormRecord (name required; linkedin_url, role, observation optional), PersonCandidate (person_uuid + score + match_reason), PersonApplyInput (action: 'match'|'create', person_uuid required for match), PersonAffiliateInput (person_uuid + org_action:'match' + org_slug + role? + client).
Scope note: AffiliatedPerson carries personal_corpus_count, not the corpus entries (Phase 1 contract). The person card therefore lists links in full (AdditiveList reuse) but shows corpus as count + β + π only β entry listing rides affiliation.detail in a later pass if the operator wants it.
Steps
Client lib (
org-client.ts+types.ts) βPersonCandidate,PersonNormRecordmirrors; wrappers forperson.candidates,person.apply,person.affiliate,person.links.add,person.corpus.add.PersonCard.svelteβ one affiliated person expanded: headline Β· role Β· relevance;AdditiveListreuse forpersonal_links(β βperson.links.add, π β person-shaped envelope, targetlinks); corpus row (count + β βperson.corpus.add, π targetcorpus). Every write dispatchesaugment-it:entity-updated { person_uuid }.AddPersonInline.svelteβ the spec's "magic": name (+ optional LinkedIn URL, role) βperson.candidatesβ operator gate ALWAYS (pick a candidate or "create new" β scores + match_reason shown) βperson.applyβperson.affiliatewith the org pre-bound (org_action:'match', this card'sorg_slug) β the edge + paired observation materialize without an explicit affiliation step. Callable again later for other orgs (N-affiliation assumption).PeopleReveal.svelteβ collapsible "People Β· N" section on the org card overorganization.affiliations(already relevance-sorted server-side); rows expand toPersonCard; footer hostsAddPersonInline; refetches on its own writes and on person-shapedaugment-it:entity-updated.OrgCard.svelteβ mountsPeopleRevealunder the three lists.Verify β svelte-check + build org-workbench; shell build regression;
organization.affiliationslive data already proven (Aspen, 10 people). The add-person write path is NOT exercised headlessly β it creates real canonical persons, and polluting the shared layer for a smoke test violates the additive-writes discipline; the verbs themselves shipped and were live-proven in the person-db-resolver flow. Operator walk-through: reveal Aspen's 10 β expand one β β a link β add a real person β see the affiliation appear with no explicit step.Changelog, commit + push as
attempt(augment-from-db, people-reveal, step4):.