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@postgreson VPS 38.242.240.89, schemapublic) Scope: 8 BIRTH_REQUIRED+IN_SCOPE collections lackingspecies_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 forpivot_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
- No purely-new-species candidate is required for any of the 8 — each can be mapped to an existing
entity_speciesrow, though several are imperfect fits (binding_registry, dot_domain_rules, field_type_equivalences). - APR family clustering —
apr_action_types,apr_approvals,apr_request_typesall naturally fall underapproval_request. Consider seeding all three under that species in one operation. - NRM family clustering —
nrm_approval_rules,nrm_doc_type_configboth fall undergovernance_infraalongsidenormative_relations. - dot_domain_rules is the weakest existing-species match; the best long-term answer is likely a dedicated species (
routing_ruleordot_rule), not a reuse. - All 8 candidate composition_levels = atom, consistent with their flat reference/registry shape.
- 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_maprow 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