Birth Stage 2 QT-001 — 02 Identity Blocker Classification
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).