← Context/ issues
Parent-Child Nested Organizations Are Not Modeled — Initiatives, Funds, and Sub-Orgs Have Nowhere Canonical to Hang
`upmobility-foundation-urban-institute` welds a parent org to its initiative, so triaged content has no honest folder to land in.
The trigger
Triage run clients/reach-edu/corpus/inbox/_triage-runs/2026-07-24_1.md, item 18:
inbox/2026-06-10_apprenticeship-industry-driven-made-to-scale.md — an Urban
Institute event page (urban.org). The suggestion engine matched it to the funder
folder upmobility-foundation-urban-institute by host family
(upward-mobility.urban.org). The operator declined: the Urban Institute is the
parent org; the Upward Mobility Foundation is an initiative of it (probably in
cooperation with others). Filing parent-org content into a folder named for the
initiative (or vice versa) bakes the conflation in deeper. A second capture hit
the same wall in batch 2: the Urban Institute homepage
(inbox/2026-06-10_driving-impact-by-equipping-changemakers-with-evidence-and-s.md).
The same shape recurs across the roster wherever a slug welds two entities
together: upmobility-foundation-urban-institute,
truist-foundation-liftfund-us, zoma-foundation-of-zoma-lab,
alabama-state-legislature-appropriations-funds, the-denver-foundation-beacon
(Beacon fund of the Denver Foundation), schusterman-family-philanthropies vs
charles-and-lynn-schusterman-family-foundation, and BlackRock Future Builders
(a program of BlackRock, administered by JFF's CAWBL).
The Koch / Stand Together constellation (operator note, 2026-07-25) is the
sharpest case — a deliberately layered structure ("Charles Koch trying to hide
his money and influence"): Stand Together the umbrella community, Stand
Together Trust (formerly the Charles Koch Institute), Stand Together
Foundation, Stand Together Ventures/other arms, and the Charles Koch
Foundation itself. reach-edu currently holds charles-koch-foundation and
stand-together-trust as separate funder folders, and both
stand-together-trust and stand-together-foundation org rows exist in the
DB — all legitimately distinct entities, NOT dedupe candidates. What's missing
is the edges between them. Deliberately-opaque giving structures are exactly
why the relation model matters for a philanthropic-funding client: knowing that
a grant from any arm is Koch-network money is analysis the flat model can't
produce.
Academic institutions (added 2026-07-25, batch 5): the new
academic-institutions/ bucket is nested by construction — Project on
Workforce ⊂ Harvard Kennedy School ⊂ Harvard University. The org row minted
(project-on-workforce-at-harvard) is the leaf; nothing expresses the chain.
Operator flagged this explicitly when ruling the bucket.
What's missing
DB shape.
organizationsrows are flat. There is no edge or field expressing initiative-of / fund-of / program-of / chapter-of. SurrealDB is a graph database — aRELATE-style edge (e.g.initiative_of, or a typedorg_relationsedge with akindfield) is the natural fit, but nothing mints or reads one today.Disk shape.
funders/<slug>/folders are flat siblings. No convention says whether a sub-org gets its own folder, nests, or points.Aboutness routing. Triage has no rule for which org a piece of content files under when parent and child both plausibly claim it.
Candidate shape (proposed during the run, NOT ratified)
Both parent and child get their own
organizationsrows (SurrealDB stays the source of truth; no more welded slugs for new entries).A typed relation edge connects them (
initiative_of,fund_of,program_of, …) — queryable in both directions.Corpus content files canonically under whichever org the item is about, with a
reference_of:pointer file in the other folder when discoverability wants it — the pattern first used for BlackRock↔jff (canonical infunders/jff/, pointer infunders/blackrock/, content_uuid019eec87-f75e-7702-8adf-41a444fb1fc2).Existing welded slugs get untangled lazily, on first real filing pressure, not in a big-bang rename.
The reconciliation worklist (added 2026-07-27 — this is the tracked work)
Everything cleanly renamable was renamed on 2026-07-27 (DB slug = source of
truth). What remains is exactly the set this issue exists for. Untangling one
case = (1) ensure BOTH entities have org rows, (2) create the typed relation
edge, (3) split/rename the disk folder by aboutness with reference_of:
pointers across the seam, (4) re-home any parked inbox captures.
A. Welded disk folders (4)
funders/upmobility-foundation-urban-institute/— UNTANGLED 2026-07-27 (the pilot case, run through the live Org Workbench + operator-confirmed sweep). Ruling supersedes the original framing: the weld conflated two DISTINCT entities — UpMobility Foundation (upmobility.org, a nonprofit donor) and Urban Institute's Upward Mobility initiative (upward-mobility.urban.org). The operator ruled the relation peer /partners_with, not initiative_of — the initiative is Urban's, not the foundation's.urban-instituteminted via the workbench (+Think-Tanktag); edge live inaffiliations; folder split by aboutness (7 files →funders/upmobility-foundation/, 6 →think-tanks/urban-institute/incl. the three parked captures, 2 gated, 2 re-inboxed) with NOreference_of:pointers — the DB edge carries the connection. reach-edu commit30e0453.funders/truist-foundation-liftfund-us/— Truist Foundation welded to LiftFund (a CDFI grantee/partner, not a sub-org — the edge here isfunds/partners_with, notinitiative_of). Cleantruist-foundationrow EXISTS. Untangle: decide LiftFund's own row + bucket, split folder.funders/the-denver-foundation-beacon/— the Beacon fund OF the Denver Foundation. Cleandenver-foundationrow EXISTS. The fund is the thing reach-edu cares about; the community foundation is its host. Untangle:beacon-fund —fund_of→ denver-foundation; folder probably renames to the fund's own slug.funders/alabama-state-legislature-appropriations-funds/— a funding mechanism (state appropriations) welded to a gov body. NO row exists for either. Untangle: mintalabama-state-legislature(gov-entities); decide whether the appropriations channel is an edge property, a stream, or its own entity.
B. Same-shape residue (not welded folders, same missing model)
funders/mandelblatt-foundation/— a donor fund hosted at a community foundation (yourcommunityfoundation.org); no row. Same fund-of shape as Beacon.Koch / Stand Together constellation — rows exist (
charles-koch-foundation,stand-together-trust,stand-together-foundation); the edges don't. See the constellation note above.us-department-of-agriculture↔usda-rural-development— both rows exist as flat siblings; needsagency_of(and DOL/ETA has the same shape waiting: TEGL/ETA content sits onus-department-of-labor).Academic chain —
project-on-workforce-at-harvardis a leaf with no chain to HKS/Harvard (see the academic-institutions note above).Schusterman dupe merged 2026-07-27: operator ruled the official long-form name wins — keeper
charles-and-lynn-schusterman-family-foundation;schusterman-family-philanthropiesfolded in (4 links + 2 streams unioned on normalized URLs, rebrand forms preserved as aliases,merged_fromobservation, dupe row deleted — neither row had edges or content_items). Disk: the two captures moved into the canonical folder, dupe folder retired (reach-edube59891).DB dupe merged 2026-07-27: operator ruled
donorstrustthe accurate slug (the brand is one word);donor-s-trustfolded in non-destructively — links/corpus unioned by URL, both edges re-pointed (RELATE fresh → delete old; in/out are immutable), aliases gainedDonor's Trust/donor-s-trust/Donors Trust,merged_fromobservation on the keeper, dupe row deleted. The merge surfaced a PERSON dupe — twoPeter Lipsettrows — also merged 2026-07-27 (operator-directed): the richer gatsby-events row kept (email, split name fields, 4 links, 4 corpus), the FreedomFest-CSV row folded in — its operator-rated edge fields won (kindVice President, relevancerelevant, replacing the machine-mintedprimary), itsspeaker_at/has_name/affiliated_withobservations re-homed,linkedin_profile_urlset on the keeper for future dedupe keying,merged_fromtrail written. donorstrust card now shows one Peter Lipsett.
C. The build (what "model lands" means)
Ratify the edge shape— SHIPPED 2026-07-27, with one deliberate deviation from the candidate shape: org→org edges live in the existingaffiliationstable (edge_type: 'org_org',rel: 'child_of' | 'peer', open-vocabularykind, free-textdescription,client_access), not a neworg_relationstable. Per Org Relations Parent Child Peer Plus Org Tags.Capabilities—organization.relate / relations / unrelate / relation.update+organization.tag.add / tag.removelive; proof scriptscripts/prove-org-relations.mjs22/22 green.Surface— Org Workbench card shows Part of / Contains / Peers with click-through navigation + a Tags row. (Corpus roll-up lenses deliberately deferred — named out-of-scope in the plan.)Triage integration— aboutness routing landed as step 5b in the triage skill + didi's slabs; pilot untangle done (worklist A-1 above).
Parked pending this issue
All three parked captures filed 2026-07-27 (event page, homepage, AND
the 2025 impact report) → think-tanks/urban-institute/, registered via
organization.corpus.add, reach-edu commit 30e0453. Nothing remains
parked on this issue.
See also
triage-inbox-w-suggestions — open-decisions list links here; the triage lane that keeps hitting this.
clients/reach-edu/corpus/inbox/_triage-runs/2026-07-24_1.md— the run manifest where the ruling was recorded.