KB-350A

F-5 Ownership-Seed Rollback-Only — 02 Seed Plan

2 min read Revision 1
one-roofphase1f5seed-plan2026-06-02

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)

  1. collection agents / scope audit / accountable / GOV-COUNCIL / is_inherited_anchor=false → proves DIRECT (depth 0).
  2. group GRP-WORKFLOW / scope policy / 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.

Back to Knowledge Hub knowledge/dev/reports/architecture/one-roof-phase1-coverage-dry-run-f5-ownership-seed-rollback-only-2026-06-02/02-ownership-seed-plan.md