GEDCOM: duplicate-aware import + maiden/married + RELI/NOTE mapping #21

Merged
justin merged 1 commits from gedcom-import-dedupe into main 2026-06-07 10:41:09 -04:00
Owner

Stacked on #20.

  • Preview flags likely-duplicate people; import resolves each as new/skip/merge/overwrite (per-record or global default), with relationship dedupe.
  • _MARNM/NICK import as typed alternate names (maiden stays primary); RELI -> religion event; NOTE -> notes. Verified against the 2185-person export: 0 unmapped tags.

48 backend tests pass; frontend builds.

Stacked on #20. - Preview flags likely-duplicate people; import resolves each as new/skip/merge/overwrite (per-record or global default), with relationship dedupe. - _MARNM/NICK import as typed alternate names (maiden stays primary); RELI -> religion event; NOTE -> notes. Verified against the 2185-person export: 0 unmapped tags. 48 backend tests pass; frontend builds.
justin changed target branch from names-deletion-self to main 2026-06-07 10:40:38 -04:00
justin added 3 commits 2026-06-07 10:40:38 -04:00
- Tree page: add a "Find a person" search box that jumps the chart to a
  match and rebuilds the hourglass (parents/grandparents/partner/children)
  around them. Clicking any card recenters via family-chart's default
  behavior (setAncestryDepth 3 / setProgenyDepth 2), syncing focus through
  setAfterUpdate for the "Open profile" link.
- Person detail: replace the relationship "add" <select> with a
  type-to-filter PersonCombobox so long people lists are searchable.
- Person detail: gender is now a Male/Female dropdown, not free text.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Names (the genealogy standard: maiden name primary, married/alias as typed
alternates):
- Name model already supported multiple typed names; expose full CRUD —
  NameCreate/Read/Update schemas, name_service (one-primary invariant,
  promote-on-delete), nested /persons/{id}/names routes.
- Person page gains a Names card: add/edit/delete + "make primary", with a
  curated name_type dropdown (birth/maiden, married, alias, nickname, …).

Self-person ("who am I"):
- users.self_person_id FK (use_alter for the users<->persons<->trees cycle)
  + migration; PATCH /users/me/self-person; "This is me" / "This is you"
  on the person page. Soft-deleting the linked person clears it.

Deletion integrity (fixes the broken tree view):
- delete_person now soft-deletes the relationships touching the person, so no
  dangling edges remain; family-chart also filters links to missing people.
- Optional cascade=true recursively deletes descendants (GEDCOM cleanup);
  the person page asks "only this person" vs "with all descendants".
- DELETE returns {deleted: n}.

Family view surfaces "Not connected to anyone" so dangling people aren't lost.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Duplicate detection (the "merge / skip / overwrite" the user asked for):
- New POST /gedcom/preview dry-runs the file and flags incoming people that
  resemble existing ones (name similarity via difflib + birth-year guard;
  high/medium score). No writes.
- /gedcom/import takes default_action (new|skip|merge|overwrite) + per-xref
  resolutions {xref: {action, target_id}}:
    new       create as a new person (current behavior)
    skip      link families to the existing person, copy nothing
    merge     attach the incoming names (as alternates), events, citations,
              and notes onto the existing person
    overwrite soft-delete the existing person, import the incoming one fresh
  Relationship creation is deduped so a merge can't double an edge.

Richer record mapping (covers the user's repo's GEDCOM):
- Multiple NAME records honor their TYPE; _MARNM (and NICK) import as typed
  alternate names — maiden stays primary, married becomes a "married" Name.
- RELI -> a "religion" event with the value in detail; OCCU/EDUC values too.
- NOTE -> person notes (and event notes); NOTE/RELI are no longer "unmapped".
- Export round-trips name TYPE.

Verified against the user's 2185-person export: 0 unmapped tags. 48 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
justin merged commit b90ba53a3f into main 2026-06-07 10:41:09 -04:00
justin deleted branch gedcom-import-dedupe 2026-06-07 10:41:09 -04:00
Sign in to join this conversation.