KB-32B6

Birth Stage 2 QT-001 — 02 Identity Blocker Classification

4 min read Revision 1
birth-gatewaystage2identityclassification2026-06-06

02 — Identity Blocker Classification (Supertrack B)

All 43 identity blockers classified. Classification method: mirror each live birth trigger's actual TG_ARGV (read from pg_get_triggerdef), cross-validated against the entity_code form of existing births. This guarantees byte-identical entity_codes to the realtime path → zero duplicate risk and idempotent backfill.

Live gateway identity logic (verified from source)

fn_birth_registry_auto: entity_code = TG_ARGV[0] value if the trigger has a code-field arg and it is non-empty; else collection || '::' || id. The Stage 1 resolver's column branch has the SAME id-fallback, so mirroring TG_ARGV reproduces the live entity_code exactly.

The 43 by disposition

Disposition Count Strategy Collections
CLASSIFIED_COLUMN 7 column apr_action_types(action_code); checkpoint_instances, checkpoint_type_overrides, comments, table_proposals, trigger_registry, workflow_categories (all code)
CLASSIFIED_SYNTHETIC 32 synthetic_id (collection::id) agent_views, ai_discussion_comments, ai_discussions, ai_tasks, apr_approvals, checkpoint_rules, checkpoint_set_items, contacts, content_requests, conversations, doc_reviews, dot_domain_rules, feedbacks, field_type_equivalences, governance_docs, help_articles, help_collections, help_feedback, inbox, knowledge_documents, label_rules, messages, navigation_items, normative_relations, organization_addresses, organizations, os_invoice_items, os_items, os_task_files, task_checkpoints, task_comments, universal_rule_registry
NEEDS_OWNER_TRIGGER_RECONCILE 3 column (staged) apr_request_types(request_code), binding_registry(code), nrm_doc_type_config(doc_type)
NEEDS_OWNER_COMPOSITE_KEY 1 blocked nrm_approval_rules (PK = composite doc_level_min,doc_level_max; no single natural key)

Why the 4 are NEEDS_OWNER (not auto-classified)

These 4 have no id column AND a no-arg live birth trigger. The live trigger therefore computes collection || '::' || NULL = NULL, which violates birth_registry.entity_code NOT NULL → inserts would fail. Consistent with this, all 4 have 0 existing births (no successful realtime inserts). Classifying them to a single natural key is possible for 3 (request_code/code/doc_type) but would be realtime-divergent (the live no-arg trigger still produces NULL — fixing that is a trigger reconcile, forbidden here). nrm_approval_rules has no single key at all. → owner decision required; left unclassified and action-packed (NOT silently enabled).

Validation (existing births confirm parity)

Every no-arg trigger collection with births showed 100% synthetic form (collection::id): knowledge_documents 6686, task_comments 380, label_rules 38, agent_views 28, etc. Every code-arg collection showed 100% code form: checkpoint_instances 121, trigger_registry 110, apr_action_types 8 (action_code), workflow_categories 3. Zero NULL entity_codes anywhere.

Views

v_birth_stage2_identity_blocker_classification (master 43), v_birth_stage2_identity_blocker_inventory (live unclassified = 4), v_birth_stage2_identity_fix_priority (priority 1 composite, 2 trigger-reconcile, 8/9 resolved).

Back to Knowledge Hub knowledge/dev/reports/architecture/birth-stage2-qt001-identity-metadata-backfill-repair-2026-06-06/02-identity-blocker-classification.md