F-5 Ownership-Seed Rollback-Only — 02 Seed Plan
02 — Ownership Seed Plan
How coverage resolves (from live view definitions)
v_object_effective_owner (recursive climb): depth 0 (direct) when an accountable+active row exists on the object itself for that scope (is_inherited_anchor irrelevant at depth 0); depth ≥1 (inherited) when the climb walks object→parent(group) and matches an accountable+active ancestor row only if that row has is_inherited_anchor=true. v_object_owner_gap = inventory × active_scopes LEFT JOIN effective_owner(accountable) WHERE owner IS NULL. Only inventory objects (35 collections) contribute gap rows; group nodes never appear in inventory.
Seed set (2 rows)
- collection
agents/ scopeaudit/ accountable / GOV-COUNCIL / is_inherited_anchor=false → proves DIRECT (depth 0). - group
GRP-WORKFLOW/ scopepolicy/ accountable / GOV-DOT / is_inherited_anchor=TRUE → proves INHERITED (depth 1) to its 2 children. Tags: created_by='F5_ROLLBACK_ONLY_REHEARSAL', source_design_ref='F5-direct'|'F5-inherited'.
Expected coverage
Row1 covers (agents,audit)=1. Row2 covers (workflows,policy)+(workflow_steps,policy)=2. No overlap. Covered=3. Expected gap_after=210−3=207.
Missing-owner control
(agents,policy) left unseeded (agents∈GRP-AI not GRP-WORKFLOW; direct seed only covered audit) → must remain gap=1.
Negative/conflict tests (savepoint-isolated)
N0 dup accountable on (collection,agents,audit) → UNIQUE uq_gov_obj_accountable. N1 owner_gov_code='GOV-NOPE' → FK. N2 scope='not_a_scope' → FK. N3 owner_kind='overlord' → CHECK. N4 delegated + effective_to NULL → chk_delegated_ttl. N5 lifecycle_status='pending' → CHECK. Each: SAVEPOINT n#; insert; ROLLBACK TO n#; under ON_ERROR_STOP=0.
Script: sql/f5_ownership_seed_rollback.sql.