Cleanup tool: mark deceased by a child's birth year #254

Merged
justin merged 1 commits from cleanup-deceased-by-child into main 2026-06-11 11:08:52 -04:00
Owner

Adds a preview/apply rule to the Cleanup tool for parents with no birth date of their own (so the existing born-on-or-before rule misses them) who have a child born long ago — necessarily deceased. This is the gap that left ~56 parents in the Paul tree as "unknown".

  • preview_deceased_by_child(year) — parents of any child born ≤ cutoff, excluding already-deceased; returns child_birth_year.
  • GET .../cleanup/deceased-by-child?born_on_or_before=1900; apply reuses the existing audited POST .../cleanup/deceased.
  • Frontend: a new preview→approve card in the Cleanup tool.

Goes through _require_editor + the audited mark-deceased path (not raw SQL). Test covers preview/apply/re-preview. Suite 106 passing. No migration.

🤖 Generated with Claude Code

Adds a preview/apply rule to the Cleanup tool for parents with **no birth date of their own** (so the existing born-on-or-before rule misses them) who have a child born long ago — necessarily deceased. This is the gap that left ~56 parents in the Paul tree as "unknown". - `preview_deceased_by_child(year)` — parents of any child born ≤ cutoff, excluding already-deceased; returns `child_birth_year`. - `GET .../cleanup/deceased-by-child?born_on_or_before=1900`; **apply reuses the existing audited `POST .../cleanup/deceased`**. - Frontend: a new preview→approve card in the Cleanup tool. Goes through `_require_editor` + the audited mark-deceased path (not raw SQL). Test covers preview/apply/re-preview. **Suite 106 passing.** No migration. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
justin added 1 commit 2026-06-11 11:08:51 -04:00
Adds a preview/apply rule to the Cleanup tool for parents who have NO birth date
of their own (so the existing born-on-or-before rule can't reach them) but who
have a child born long ago — they're necessarily deceased. This is the gap that
left ~56 parents in the Paul tree as "unknown".

- cleanup_service.preview_deceased_by_child(year): parents of any child born
  on/before the cutoff, excluding already-deceased; returns child_birth_year.
- GET /trees/{id}/cleanup/deceased-by-child?born_on_or_before=1900. Apply reuses
  the existing POST .../cleanup/deceased (same audited mark-deceased path).
- Frontend: a new card in the Cleanup tool (year input → preview → select →
  apply), preview-first like the rest of the tool.

Test covers preview (finds the no-birthdate parent of a pre-cutoff child,
excludes modern-child parents), child_birth_year, apply, and re-preview drop.
Suite 106 passing.

Signed-off-by: Justin Paul <justin@jpaul.me>
justin merged commit 7043532c3b into main 2026-06-11 11:08:52 -04:00
justin deleted branch cleanup-deceased-by-child 2026-06-11 11:08:52 -04:00
Sign in to join this conversation.