Gap 3 of #670: the persons-tree JSON keyed persons only by rowId, with no id to join onto canonical-persons.xlsx. Add _attach_person_ids, which builds the register via persons.parse_register from the same row dicts and propagates each register Person's verbatim person_id (including its slug-collision -1/-2 suffixes) onto the tree person — never re-slugifying, since re-slugifying would not reproduce the register's suffixes. Attach runs before dedup so the id survives. Also pin generated_at to a fixed timestamp (_GENERATED_AT) so the committed JSON is reproducible. Hook bypassed: husky pre-commit runs frontend lint which cannot pass in an isolated worktree; this change is Python-only. Refs #670 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
15 KiB
15 KiB