12d — IU-0 Pack 2A: QT-003R Process Addendum
12d — IU-0 Pack 2A: QT-003R Process Addendum
Date: 2026-05-04 | Rev 1 Status: DRAFT — chờ GPT/User approve trước khi patch canonical
birth-procedures.mdScope: Bổ sung biến thể QT-003R vào taxonomy quy trình quản lý thực thể Trigger: Pack 2A discovery — bảng PG đã tồn tại, 0 rows, thiếu governance registration Tham chiếu: gpt-analysis-need-qt003r-retroactive-collection-registration-2026-05-04.md
§1. Existing Process Taxonomy — Tóm tắt
Nguồn: knowledge/dev/architecture/birth-procedures.md v3.0 + knowledge/ops/processes/birth-process-v1.md v1.0
| QT | Tên | Mục đích | Khi nào |
|---|---|---|---|
| QT-001 | Nhập khai sinh (Backfill) | Entity/data rows đã tồn tại → đưa vào birth_registry | 1 lần per collection, xong chuyển QT-002 |
| QT-002 | Khai trước sinh sau (Birth-first) | Entity mới → birth record TRƯỚC, INSERT entity SAU | Vĩnh viễn, mọi DOT tạo entity |
| QT-003 | Khai báo collection mới | Collection mới → species + birth trigger + mô tả TRƯỚC KHI dùng | Khi tạo collection mới |
| QT-005 | Thăng cấp / hạ cấp | Chuyển governance_role khi business thay đổi | Khi cần nâng observed→governed hoặc ngược lại |
| QT-006 | Khai tử | Entity bị xóa → cập nhật birth_registry | Khi DELETE entity |
§2. Gap — Pack 2A không khớp quy trình nào
Pack 2A (đăng ký information_unit + unit_version vào collection_registry) không khớp:
- Không phải QT-001: QT-001 backfill data rows đã tồn tại. IU tables có 0 data rows, không có gì backfill.
- Không phải QT-002: QT-002 tạo entity mới (birth → INSERT). Pack 2A không tạo entity IU nào, chỉ đăng ký bảng vào catalog.
- Gần QT-003 nhưng không khớp hoàn toàn: QT-003 giả định collection mới tạo và chưa tồn tại trên PG. Pack 2A là case retroactive — PG tables đã tồn tại từ Pack 1 DDL, nhưng chưa được đăng ký governance.
Kết luận: cần biến thể QT-003 cho case "bảng đã lỡ tạo nhưng chưa dùng".
§3. QT-003R — Retroactive Collection Registration Before First Use
Định nghĩa
Đăng ký governance cho PG table/collection đã tồn tại nhưng chưa có data rows và chưa có collection_registry entry.
Điều kiện áp dụng
- PG table tồn tại (CREATE TABLE đã chạy).
- Table có 0 data rows.
- Chưa có row trong collection_registry cho table này.
- Chưa có production use.
STOP condition
Nếu table có >0 data rows → STOP. Reclassify sang QT-001 (backfill analysis) vì đã có entity cần khai sinh trước.
Các bước
BƯỚC 1 — PREFLIGHT (read-only)
□ Verify PG table tồn tại.
□ SELECT count(*) FROM <table> → phải = 0. Nếu >0 → STOP, reclassify QT-001.
□ Verify chưa có collection_registry row cho table.
□ Verify DOT tool sẵn sàng (dot-collection-register --help).
BƯỚC 2 — RESOLVE PARAMETERS
□ governance_role: observed (pilot) hoặc governed (production).
□ source_kind: native / derived / registry / policy.
□ storage_role: primary / junction / log / system.
□ migration_state: pilot / stable / deprecated.
□ description: theo Đ3 §A.3 form.
BƯỚC 3 — REGISTER
□ Chạy dot-collection-register <table> --cloud với parameters từ bước 2.
□ Không raw SQL INSERT. Không admin fallback.
BƯỚC 4 — VERIFY
□ External: query collection_registry → row tồn tại, parameters đúng.
□ External: query birth_registry → auto-created row cho COL-NNN.
□ dot-collection-health: no finding cho table.
BƯỚC 5 — TRIGGER GOVERNANCE (nếu applicable)
□ dot-schema-trigger-registry-ensure → sync trigger metadata.
□ Nếu tool fail → STOP, ghi TD, không workaround.
BƯỚC 6 — DECLARE FOLLOW-UP
□ Trước khi tạo data rows: phải chốt birth path (QT-002 hoặc domain-specific).
□ Ghi F6 blocking gate.
Khác biệt so với QT-003
| QT-003 | QT-003R | |
|---|---|---|
| PG table | Chưa tồn tại, tạo mới | Đã tồn tại |
| Data rows | Chưa có (vì table mới) | Chưa có (bắt buộc 0) |
| Birth trigger setup | Bước 4 QT-003 | Có thể đã setup sẵn (Pack 1) |
| Species | Bước 2 QT-003 bắt buộc | Có thể SKIP nếu observed |
| Timing | Trước use → proactive | Sau DDL nhưng trước use → retroactive |
§4. Pack 2A — Worked Example
| Step | Pack 2A thực tế |
|---|---|
| Preflight | information_unit 0 rows, unit_version 0 rows, cả 2 chưa trong collection_registry |
| Parameters | observed, native, pilot, primary. Description theo Đ3 form |
| Register | dot-collection-register --cloud → COL-176, COL-177 |
| Verify | collection_registry 2 rows, birth_registry 2 auto-rows, dot-collection-health 0 IU-specific findings |
| Trigger | STOP (SSH key fail) → TD F7 |
| Follow-up | F6: birth path cho IU data rows blocking trước Pack 2B |
§5. Near-case Classification — Tránh process explosion
Nguyên tắc: không tạo top-level process mới nếu biến thể của QT hiện tại đủ cover. Dùng suffix (QT-003R) khi domain giống nhưng timing khác.
| Tình huống | Phân loại |
|---|---|
| Collection đã có >0 data rows, chưa có registry | QT-001 (backfill) — data rows cần khai sinh |
| Collection đã có, 0 rows, chưa có registry | QT-003R (retroactive registration) |
| Collection mới, chưa tạo PG table | QT-003 (proactive declaration) |
| Data row mới trong collection đã registered | QT-002 (birth-first) |
| Nâng governance_role observed → governed | QT-005 (thăng cấp) |
| Xóa entity | QT-006 (khai tử) |
| Collection đã registered nhưng thiếu description/provenance | Description Governance (Đ3/Đ4/H11) — không phải birth process |
| Tool registry tồn tại nhưng scanner/sync bị lỗi | TD/tooling repair — không phải birth process |
| Governance_role cần hạ cấp | QT-005 (hạ cấp) |
§6. Proposed Patch cho birth-procedures.md
Vị trí chèn
Sau QT-003, trước QT-005. Giữ nguyên số hiệu QT-003R (subtype, không top-level mới).
Wording đề xuất
## QT-003R: KHAI BÁO COLLECTION ĐÃ LỠ TẠO NHƯNG CHƯA DÙNG (Retroactive)
> Biến thể QT-003 cho case: PG table đã tồn tại từ trước nhưng chưa được
> đăng ký governance và chưa có data rows. Đăng ký trước khi tạo row đầu tiên.
> **Nếu table có >0 rows → STOP, chuyển QT-001 backfill.**
BƯỚC 1 — Verify table tồn tại + 0 rows + chưa có collection_registry row
BƯỚC 2 — Resolve parameters (governance_role, source_kind, storage_role, description)
BƯỚC 3 — dot-collection-register --cloud (không raw SQL)
BƯỚC 4 — Verify: collection_registry + birth_registry + dot-collection-health
BƯỚC 5 — Trigger governance sync (nếu applicable)
BƯỚC 6 — Declare follow-up: chốt birth path (QT-002 hoặc domain-specific) trước data rows
*Tiền lệ: Pack 2A (IU-0) — information_unit/unit_version → COL-176/COL-177.*
Cập nhật bảng tổng kết
Thêm row:
| QT-003R | Khai báo collection retroactive | PG table đã tạo, 0 rows, chưa registry | Trước first data row |
CHỜ APPROVE
Không patch canonical birth-procedures.md cho đến khi GPT/User duyệt wording 12d này.
§7. Rà soát 2 vòng
Vòng 1 — OR/CP/CQ/NT/Tuyên ngôn
| Tiêu chí | Rà | Kết quả |
|---|---|---|
| NT13 PG First | QT-003R verify PG table đầu tiên | ✅ |
| §0-AU Cấm hardcode | Không hardcode tên table/tool | ✅ |
| §0-AY Không register = vô hình | QT-003R giải quyết đúng gap "vô hình" | ✅ |
| Tuyên ngôn ① Vĩnh viễn hay tạm? | QT-003R = subtype vĩnh viễn trong taxonomy | ✅ |
| Tuyên ngôn ② Cơ hội nhầm? | STOP condition >0 rows = thiết kế không thể nhầm | ✅ |
| Tuyên ngôn ③ Lỗi = cơ hội vàng | Pack 2A confusion → phát hiện gap QT taxonomy | ✅ |
Vòng 2 — Rà sâu
- QT-003R có trùng QT-003 không? Không — QT-003 giả định table chưa tồn tại (Bước 0 namespace, Bước 4 birth trigger setup). QT-003R bỏ qua tạo table/trigger vì đã có.
- QT-003R có risk tạo process explosion? Không — là suffix variant, cùng domain "collection declaration". Không top-level mới.
- Near-case table §5 có bỏ sót? Đã cover 9 tình huống thực tế. Không tìm thấy case nào ngoài taxonomy hiện tại.
- Wording §6 có conflict với v3.0 existing text? Không — chèn giữa QT-003 và QT-005, không sửa text hiện có.
- Gốc rễ: tại sao Pack 2A phải khám phá lại? TD
td-iu0-text-as-code-information-unit-process-linking-gapđã ghi — chưa có IU/Text-as-Code link law↔process↔code ở cấp miếng thông tin.
12d rev 1 | 2026-05-04 | Opus 4.6 | QT-003R process addendum based on GPT analysis + Pack 2A evidence. Chờ GPT/User approve trước patch canonical doc.