The people reveal lands β persons nest under the org card, and adding one generates its affiliation with no explicit step
Spec steps 6 and 7 become chrome: every person RELATEd to an org listed with role and relevance, expandable to nested identity links with their own β and π, and an inline add-person where the operator only resolves the human β the affiliation edge and its observation materialize from person.affiliate with the org pre-bound.
Phase 4 of Augment From DB Flow, entirely UI in apps/org-workbench β zero service changes, because every verb this phase needs shipped in Phase 1 or in the person-db-resolver era. That was the point of sequencing the capabilities first.
What shipped
PeopleReveal β a collapsible "People Β· N" section under the org card's three lists, lazy-loading organization.affiliations (relevance-sorted server-side; Aspen's 10 people are the live reference). Each row shows name Β· role Β· relevance pill Β· links/corpus counts, and expands to a PersonCard: identity links as a full AdditiveList (β β person.links.add, π dispatching the person-shaped search envelope that search-and-add has been routing since Phase 3), corpus as count + β + π (entries ride affiliation.detail in a later pass β organization.affiliations carries counts by Phase 1 contract).
AddPersonInline β spec step 6's "magic," with the operator gate the product is built on: name (+ optional LinkedIn, role) β person.candidates β ALWAYS a gate (pick a scored match or explicitly "create new" β even zero candidates gets the explicit choice) β person.apply β person.affiliate with this card's org pre-bound. The affiliation edge and its paired observation appear without any affiliation UI existing β and the same person can gain other orgs later, N-affiliation by construction.
Cross-surface refresh is uniform: every person write dispatches augment-it:entity-updated { person_uuid }, and the reveal refetches whether the write came from its own β or from the search-and-add rail.
Proof
svelte-check 0 errors / 0 warnings (90 files); org-workbench and shell build green. The add-person write path is deliberately NOT exercised headlessly β it creates real canonical persons, and polluting the shared layer for a smoke test violates the additive-writes discipline; person.apply/person.affiliate were live-proven in the person-db-resolver flow, and organization.affiliations in Phase 1. Operator walk-through: reveal Aspen's 10 β expand one β β a link β add a real person β watch the affiliation appear with no explicit step.
What's next
Phase 5 (v1.1): stream-scan mode β fire a media_streams[] entry (Aspen's blog is already seeded) through the entity-pulse machinery, dedup against content_items.url, badge the already-known, one-click the new into the corpus.