KB-6727

P3D — Birth B3-A1 Species Mapping Gap Read-Only Probe Report

11 min read Revision 1
p3dbirth-systemb3a1species-mappingreadonlyprobe2026-05-12

P3D — Birth B3-A1 Species Mapping Gap Probe Report

Date: 2026-05-12 Mode: READ-ONLY (no DB write, no DDL, no trigger creation, no function patch, no species seed, no migration) Source: live PG (directus@postgres on VPS 38.242.240.89, schema public) Scope: 8 BIRTH_REQUIRED+IN_SCOPE collections lacking species_collection_map


Live universe

  • entity_species: 41 species (composition_level ∈ {atom, molecule, compound, meta}; management_mode ∈ {governed, observed, excluded}).
  • species_collection_map: 154 rows covering 153 distinct collections (1 duplicate row for pivot_results).
  • 8 target collections currently have 0 mapping rows.

Per-target evidence + candidate

1. apr_action_types

row_count            = 6
governance_role      = governed
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = governance
table_shape_summary  = 8 cols (6 text, 0 jsonb), PK=action_code (text), 1 FK
columns              = action_code, description, handler_ref, risk_level, status,
                       _dot_origin, created_at, retired_at
closest_mapped_peer  = approval_requests  → species `approval_request` (compound)
                       (sibling: same APR family, FK linkage)
candidate_species_code     = approval_request
candidate_composition_level = atom
confidence           = MEDIUM
reason               = APR type/taxonomy table tightly coupled to the approval_request
                       species (parameterises action behaviour). Closest existing species.
                       Ideal long-term: dedicated `approval_action_type` species.
risk                 = Reusing a "compound" parent species for a sub-type lookup
                       conflates instance and metadata layers; B3 triggers may need
                       to distinguish via composition_level.
candidate_not_approved = true

2. apr_approvals

row_count            = 42
governance_role      = governed
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = governance
table_shape_summary  = 7 cols (4 text), PK=id (bigint), 1 FK (→ apr_id)
columns              = id, apr_id, approver, approver_type, decision, rationale, created_at
closest_mapped_peer  = approval_requests → species `approval_request`
                       (this table is approval decisions ON approval_requests)
candidate_species_code     = approval_request
candidate_composition_level = atom
confidence           = HIGH
reason               = Direct child of approval_requests via apr_id FK; semantically
                       part of the approval_request compound. Highest-fit existing species.
risk                 = If `approval_request` species is later split into
                       request/decision atoms, mapping will need re-seed.
candidate_not_approved = true

3. apr_request_types

row_count            = 14
governance_role      = governed
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = governance
table_shape_summary  = 7 cols (5 text), PK=request_code (text), 1 FK
columns              = request_code, description, default_action_code, status,
                       _dot_origin, created_at, retired_at
closest_mapped_peer  = approval_requests → species `approval_request`
candidate_species_code     = approval_request
candidate_composition_level = atom
confidence           = MEDIUM
reason               = APR type/taxonomy partner to apr_action_types. Same family.
risk                 = Same conflation risk as apr_action_types.
candidate_not_approved = true

4. binding_registry

row_count            = 0
governance_role      = locked
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = (none)
table_shape_summary  = 9 cols (all text), PK=code (text), 1 FK
columns              = code, name, binding_type, source_table, source_column,
                       source_view, output_format, description, status
closest_mapped_peer  = trigger_registry, label_rules, universal_rule_registry
                       → species `governance_infra` (governance-side registry of bindings/rules)
                       sibling registries (catalog/dot_tool) are GRP-REGISTRY, not GRP-GOVERNANCE
candidate_species_code     = governance_infra
candidate_composition_level = atom
confidence           = MEDIUM
reason               = Naming `*_registry` + governance-locked semantics + 0 rows
                       suggests an infra registry of UI/data bindings. `governance_infra`
                       already groups *_registry tables not pinned to other species.
risk                 = `governance_infra` is heterogeneous; a dedicated `binding` species
                       would be cleaner. Mapping should be revisited if rows accumulate.
candidate_not_approved = true

5. dot_domain_rules

row_count            = 67
governance_role      = governed
coverage_status      = BIRTH_REQUIRED
group                = GRP-REGISTRY
classification       = (none)
table_shape_summary  = 6 cols (4 text), PK=id (integer), 1 FK
columns              = id, pattern, target_domain, priority, description, status
closest_mapped_peer  = label_rules (species `governance_infra`) by shape (rule registry,
                       integer PK, pattern+priority+status columns).
                       Sibling `entity_rule` species maps only to law_catalog (statutory).
candidate_species_code     = governance_infra
candidate_composition_level = atom
confidence           = LOW
reason               = Rule registry, not statutory; closest by shape is label_rules.
                       Long-term, a dedicated `dot_rule` or `routing_rule` species would
                       be cleaner.
risk                 = `entity_rule` looks superficially attractive by name but its
                       only member is law_catalog — semantic drift if reused here.
candidate_not_approved = true

6. field_type_equivalences

row_count            = 4
governance_role      = governed
coverage_status      = BIRTH_REQUIRED
group                = GRP-REGISTRY
classification       = (none)
table_shape_summary  = 3 cols, PK=id (integer), 1 FK
columns              = id, type_a, type_b
closest_mapped_peer  = measurement_registry, meta_catalog → species `catalog`
                       (small reference-data registries in GRP-REGISTRY)
candidate_species_code     = catalog
candidate_composition_level = atom
confidence           = MEDIUM
reason               = Small registry of type-equivalence pairs in GRP-REGISTRY;
                       semantically a catalog reference, not a junction (no joint PK).
risk                 = Shape resembles a junction (type_a, type_b) but `type_a`/`type_b`
                       are values not FKs; misreading as junction would corrupt birth
                       classification.
candidate_not_approved = true

7. nrm_approval_rules

row_count            = 3
governance_role      = locked
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = (none)
table_shape_summary  = 4 cols (2 text), PK=(doc_level_min,doc_level_max) composite smallint
columns              = doc_level_min, doc_level_max, approval_authority, approval_method
closest_mapped_peer  = normative_relations, governance_docs → species `governance_infra`
                       (normative-side rules-config tables)
candidate_species_code     = governance_infra
candidate_composition_level = atom
confidence           = MEDIUM-HIGH
reason               = Config for NRM approval workflow; locked governance asset.
                       `governance_infra` already groups normative-side infra
                       (normative_relations is its peer).
risk                 = Composite PK + tiny row count suggests it could later be moved
                       into normative_registry as embedded config.
candidate_not_approved = true

8. nrm_doc_type_config

row_count            = 6
governance_role      = locked
coverage_status      = BIRTH_REQUIRED
group                = GRP-GOVERNANCE
classification       = (none)
table_shape_summary  = 6 cols (3 text), PK=doc_type (text), 1 FK
columns              = doc_type, doc_level, label_vi, label_en,
                       is_normative_source, requires_enforcement
closest_mapped_peer  = governance_docs, normative_relations → species `governance_infra`
candidate_species_code     = governance_infra
candidate_composition_level = atom
confidence           = MEDIUM-HIGH
reason               = NRM doc-type taxonomy/config; locked governance asset; same
                       family as nrm_approval_rules.
risk                 = Same as #7 — could be absorbed into normative_registry later.
candidate_not_approved = true

Confidence tally

Confidence Count Members
HIGH 1 apr_approvals
MEDIUM-HIGH 2 nrm_approval_rules, nrm_doc_type_config
MEDIUM 4 apr_action_types, apr_request_types, binding_registry, field_type_equivalences
LOW 1 dot_domain_rules

(Per the requested confidence ladder of HIGH/MEDIUM/LOW, the MEDIUM-HIGH entries count under MEDIUM in the summary numbers below.)


Cross-cutting observations

  1. No purely-new-species candidate is required for any of the 8 — each can be mapped to an existing entity_species row, though several are imperfect fits (binding_registry, dot_domain_rules, field_type_equivalences).
  2. APR family clusteringapr_action_types, apr_approvals, apr_request_types all naturally fall under approval_request. Consider seeding all three under that species in one operation.
  3. NRM family clusteringnrm_approval_rules, nrm_doc_type_config both fall under governance_infra alongside normative_relations.
  4. dot_domain_rules is the weakest existing-species match; the best long-term answer is likely a dedicated species (routing_rule or dot_rule), not a reuse.
  5. All 8 candidate composition_levels = atom, consistent with their flat reference/registry shape.
  6. None of these candidates is approved — this report is a probe only. A separate species-mapping seed prompt must be designed and approved before any species_collection_map row is written.

Final response

b3a1_species_probe_status=PASS
target_count=8
candidate_mapping_count=8
high_confidence_count=1
medium_confidence_count=6
low_confidence_count=1
no_mutation_performed=true
report_path=knowledge/dev/laws/dieu44-trien-khai/reports/p3d-birth-b3a1-species-mapping-gap-probe-report.md
next_recommended_action=GPT_REVIEW_SPECIES_CANDIDATES_THEN_MAPPING_SEED_DESIGN

(MEDIUM-HIGH entries are tallied within MEDIUM per the requested confidence ladder.)


B3-A1 Species Mapping Gap Probe | read-only | 2026-05-12

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/reports/p3d-birth-b3a1-species-mapping-gap-probe-report.md