- create/set_assignee validate child+rule inside the same serialized
transaction as the INSERT/UPDATE (time-of-check/time-of-use race
closed; inactive child or deleted rule at assignment time raises
ValueError, never a raw FK error)
- update() methods take an _UNSET sentinel: omitted = leave alone,
explicit None = write SQL NULL (reopen ended rules, clear metadata)
- rule create/update validate strict YYYY-MM-DD date shape (lexical
CHECK cannot prove calendar validity)
- delete/create race test now forces both orderings via a validation
hook; SQL-leak guard no longer exempts dao_children.py