KB-4608

F-3 Consolidation Rollback-Only Coverage Dry-Run — 05 Owner/Gap/Conflict/Containment Results

7 min read Revision 1
one-roofphase-1f3owner-resolutioninheritedgroup-anchorgapconflict

05 — Owner / Gap / Conflict / Containment Results

Live output of Phase D/E. The heart of F-3: one group-level inherited anchor fanning out to 4 child collections through a real containment edge, plus a direct owner, missing owners, and conflict detection — at the broader 10-collection scope. All inside the rolled-back transaction.

5.1 D1/D2 — ownership seeds (two rows)

D1  ('group','GRP-GOVERNANCE','policy','accountable','GOV-COUNCIL', is_inherited_anchor=true,  'active','APR-F3-DRY')
D2  ('collection','workflows','policy','accountable','GOV-DOT',     is_inherited_anchor=false, 'active','APR-F3-DRY')

object_type='group' is accepted (the ownership table has no CHECK on object_type — verified in preflight; only owner_kind, lifecycle_status, chk_delegated_ttl CHECKs and the owner/scope FKs exist). This lets an owner anchor on a folder-group node, which is exactly how group-level inheritance is expressed.

5.2 E1 — owner resolution (6 rows: 2 direct + 4 inherited)

 object_type |    object_ref     | scope  | owner_gov_code | resolution | depth | source_anchor_ref
-------------+-------------------+--------+----------------+------------+-------+-------------------
 group       | GRP-GOVERNANCE    | policy | GOV-COUNCIL    | direct     |     0 | GRP-GOVERNANCE
 collection  | workflows         | policy | GOV-DOT        | direct     |     0 | workflows
 collection  | approval_requests | policy | GOV-COUNCIL    | inherited  |     1 | GRP-GOVERNANCE
 collection  | apr_action_types  | policy | GOV-COUNCIL    | inherited  |     1 | GRP-GOVERNANCE
 collection  | apr_approvals     | policy | GOV-COUNCIL    | inherited  |     1 | GRP-GOVERNANCE
 collection  | apr_request_types | policy | GOV-COUNCIL    | inherited  |     1 | GRP-GOVERNANCE

The recursive v_object_effective_owner:

  • resolves the group node GRP-GOVERNANCE/policy directly at depth 0;
  • resolves workflows/policy directly at depth 0 (the standalone direct owner);
  • climbs the real containment edge from each of the 4 GRP-GOVERNANCE child collections to the group node and inherits GOV-COUNCIL at depth 1, because the anchor row has is_inherited_anchor=true (anti-hiding: inheritance only through flagged anchors). source_anchor_ref=GRP-GOVERNANCE for all four — the provenance is explicit.

This is the F-3 advance over F-2: one anchor → many inherited children, through a production folder-group, not a single hand-made edge. It is the scaling behavior a ratified F-4 will rely on.

5.3 E2 — resolution landing on inventory objects (5)

    object_ref     | scope  | owner_gov_code | resolution | depth
-------------------+--------+----------------+------------+-------
 workflows         | policy | GOV-DOT        | direct     |     0
 approval_requests | policy | GOV-COUNCIL    | inherited  |     1
 apr_action_types  | policy | GOV-COUNCIL    | inherited  |     1
 apr_approvals     | policy | GOV-COUNCIL    | inherited  |     1
 apr_request_types | policy | GOV-COUNCIL    | inherited  |     1

The group node is an intermediate (not in inventory); the 5 owned inventory rows = 1 direct + 4 inherited. Objective 4 (direct), Objective 5 (inherited) met.

5.4 E3/E4 — gap after ownership (Objective 6, missing owner)

     object_ref      | gaps              gap_after = 55
---------------------+------
 approval_requests   |    5   (policy covered, inherited)
 apr_action_types    |    5   (policy covered, inherited)
 apr_approvals       |    5   (policy covered, inherited)
 apr_request_types   |    5   (policy covered, inherited)
 workflows           |    5   (policy covered, direct)
 workflow_steps      |    6   ── MISSING: in GRP-WORKFLOW which has NO group anchor;
 collection_registry |    6      a direct owner on a *sibling* (workflows) does NOT
 dot_tools           |    6      inherit sideways. Honest gap.
 taxonomy            |    6
 taxonomy_facets     |    6
  • 60 → 55: the one group anchor + one direct owner reduced the gap set by exactly 5 — the 4 inherited GRP-GOVERNANCE children + the 1 direct workflows. The gap view honors inheritance (it does not re-flag the 4 children's policy scope even though they have no direct owner).
  • workflow_steps stays 6/6 — a crisp negative-inheritance proof: it shares a group with workflows, but workflows's owner is direct on the collection, not anchored on GRP-WORKFLOW, so it does not propagate to the sibling. Objective 4 (missing owner → GAP) met for workflow_steps and all 4 GRP-REGISTRY collections.

5.5 E5–E7 — covered proof + conflict detection

E5  approval_requests/policy  COVERED(inherited)
    apr_action_types/policy   COVERED(inherited)
    apr_approvals/policy      COVERED(inherited)
    apr_request_types/policy  COVERED(inherited)
    workflows/policy          COVERED(direct)        (5 rows)

E6  conflicts      = 0   (v_object_owner_conflict on real store)
E7  double_groups  = 1   (index-less _own_probe with 2 active accountables)
  • E6=0 — no double accountable owners can exist on the real store because uq_gov_obj_accountable (partial unique index) prevents them; N1 (doc 06) proves it rejects a second one.
  • E7=1 — the GROUP BY … HAVING count(*)>1 detector catches two active accountables for the same (object,scope) inserted into an index-less probe table, proving the detection logic works against legacy/out-of-band doubles independent of the preventing index.

5.6 Why governance_relations is not the containment source

governance_relations (8 rows, relations in the census) holds agency→law edges (e.g. GOV-COUNCIL --owner--> NRM-LAW-37), not collection→collection containment. It is correctly untouched (Δ=0) and is not a candidate Seam-B source. The real collection-containment source is collection_registry."group", used here.

5.7 Owner / gap / conflict / containment verdict

PASS. All four behaviors proven live at broader scope over real view objects + the real ownership store + a real acyclic containment source: direct depth-0 (×2), group-anchored inherited depth-1 (×4), honest missing owners (6 collections incl. the negative-inheritance workflow_steps), gap honors inheritance (60→55), conflict prevented by index and still detectable by predicate. Nothing persisted (doc 07).

Back to Knowledge Hub knowledge/dev/reports/architecture/one-roof-phase1-coverage-dry-run-f3-consolidation-rollback-only-2026-06-02/05-owner-gap-conflict-containment-results.md