Commit 24c3bd8
feat(shell, flows), feat(person-db-resolver, resolver): N-flow rotation + a person-aware resolver as its own remote
Two coherent threads landed together tonight because the files overlap
too much to split cleanly — the flow-registry rename (and the third flow
it enabled) happened first, then testing that third flow against a real
people CSV is what surfaced the need for the second.
ROTATION becomes N flows: the header's "Flows" popdown moved to sit
where the numbered bubble strip lives and now actually switches which
flow is active. shell/src/remotes.ts's single hardcoded ROTATION split
into CSV_AUGMENTATION_ROTATION, BUILD_CORPORA_ROTATION, and (added
minutes later, proving the "one array + one registry entry" claim)
EVENT_ATTENDEES_ROTATION. FlowWidget's bubble count is derived from the
active flow's rotation length instead of a fixed constant.
Person-aware resolver: record-db-resolver only ever knew organizations —
running FreedomFest 2026's speaker CSV through it matched a person as a
fuzzy org name and, on "create new org," actually wrote a person into the
organizations table plus a nonsense opportunity (both deleted from
SurrealDB Cloud by hand). The fix is a new sibling remote,
person-db-resolver: match-or-create a person, then independently
match-or-create their org and RELATE the affiliation with a role — no
opportunity concept, person and org are separate decisions the operator
can make in either order, together or alone, not a coupled 1:1 (the first
version of this shipped with the org section wrongly gated behind the
person being resolved first; fixed same night).
Backend: person-resolver.ts (person.candidates / person.apply /
person.affiliate / person.add_observation), reusing resolver.ts's org
match/create logic via a newly-extracted resolveOrgRow rather than
reimplementing it. Every id that crosses the NATS/WS wire and comes back
in a later call is a plain person_uuid string, re-looked-up fresh inside
the query that needs a real RecordId — the same lesson domains.ts already
learned once for source_uuid, re-learned here the hard way (the first
version failed RELATE with a type error on the first live test).
Frontend: apps/person-db-resolver (new, port 3010) adds a column-mapping
step asked once per record set — the direct fix for record-db-resolver's
bug of hardcoding five Master Pipeline Tracker column names and dropping
everything else a differently-shaped CSV carried. record-db-resolver
itself got two fixes found along the way: RecordCard shows every raw CSV
column now, not just the org-normalized subset, and it was missing the
active-record-set-changed listener pack-runner already had, so a click
from Record Collector on an already-mounted resolver landed on an empty
picker instead of the uploaded set. record-collector gained a second
button ("Resolve Orgs to Canonical DB" / "Resolve People to Canonical
DB") and a new "Augment a CSV of People" flow.
Files:
- shell/src/flows.svelte.ts (new), shell/src/remotes.ts, FlowWidget.svelte,
layout.svelte.ts, App.svelte, rsbuild.config.ts
- services/record-surrealdb-resolver/src/person-resolver.ts (new),
person-handlers.ts (new), resolver.ts, server.ts
- services/workspace/src/capabilities.ts
- apps/person-db-resolver/ (new)
- apps/record-db-resolver/src/App.svelte, app.css, components/RecordCard.svelte
- apps/record-collector/src/App.svelte
- context-v/plans/Person-Aware-Canonical-Resolver-Extension.md (new)
- context-v/explorations/Augment-It-Has-Outgrown-One-Flow-The-Choose-A-Flow-Front-Door.md
- changelog/2026-07-07_02_ROTATION-Becomes-N-Flows-The-Bubble-Strip-Goes-Dynamic.md (new)
- changelog/2026-07-07_03_Person-DB-Resolver-A-Sibling-Remote-For-People-Not-Orgs.md (new)
Also included:
- pnpm-lock.yaml (person-db-resolver's new workspace package)
- clients/reach-edu and clients/humain-vc gitlinks intentionally NOT
bumped here — reach-edu's own commit (FreedomFest CSVs) already pushed
separately; parent gitlink reconciliation is the user's deliberate step.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>1 parent 618ec0d commit 24c3bd8
35 files changed
Lines changed: 2730 additions & 133 deletions
File tree
- apps
- person-db-resolver
- src
- components
- lib
- record-collector/src
- record-db-resolver/src
- components
- changelog
- context-v
- explorations
- plans
- services
- record-surrealdb-resolver/src
- workspace/src
- shell
- src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
0 commit comments