KB-5225

C1 — Text Unit Operating Model

30 min read Revision 1
dieu38design-phaseoperating-modeltext-unitC1

C1 — TEXT UNIT OPERATING MODEL

Design Note tiền-schema — Điều 38 Text as Code

Trạng thái: DỰ THẢO — GPT review vòng 2 PASS, chờ User duyệt Loại: Design note (operating model), KHÔNG phải schema Phase: P1 trong Design Phase (P1–P7) Inputs pháp lý: L1 (Text Unit Governance), L3 (Metadata Governance), L4 (Birth Gate Extension), L5 (Unit-level Review + Change-set) Soạn: Opus 4.6 Review: GPT vòng 1 (14 chỉnh + 4 khuyến nghị) → GPT vòng 2 PASS Ngày: 2026-04-25


1. Mục đích

Mô tả cách hệ thống vận hành text unit từ khi sinh ra đến khi retire — ai làm gì, khi nào, theo trình tự nào, kiểm tra gì, lỗi gì phải chặn. Đây là "bản mô tả nhà máy": nguyên liệu vào cửa nào, qua bao nhiêu trạm, ra thành phẩm ở đâu.

C1 đủ chi tiết để design phase sau (P5) có thể chuyển thành schema PG mà không cần hỏi lại "cái này nghĩa là gì". Nhưng C1 chưa phải schema — không có tên bảng, tên cột, SQL, trigger, hay DOT.


2. Phạm vi

2.1 Bao gồm

  • Document envelope: bao bì văn bản, chứa metadata tổng, sở hữu tập text units.
  • Logical text unit: danh tính logic, giữ canonical address, tồn tại xuyên suốt các version.
  • Unit version: bản nội dung cụ thể của logical unit tại một thời điểm.
  • Canonical address + section code: định danh kỹ thuật bất biến (gắn logical unit) + alias đọc hiểu.
  • Parent-child tree: cây cấu trúc dọc trong cùng document.
  • Horizontal relation: tham chiếu ngang giữa units bất kỳ (qua universal_edges).
  • Change-set: gom nhiều thay đổi, review theo unit, approve theo change-set qua APR Đ32.
  • Change-set snapshot + published snapshot: đóng băng bằng chứng + tập unit versions enacted.
  • Document version aggregate: document bump version khi change-set enacted.
  • Write path: tạo/sửa/retire unit.
  • Checker path: phát hiện lỗi cấu trúc.
  • Hot path vs cold path: ghi PG ngay vs enrichment async.

2.2 Không bao gồm

  • Component/BOM (thuộc C3).
  • Metadata schema cụ thể — tên cột, kiểu dữ liệu (thuộc P5).
  • SQL, trigger, function, DOT list (thuộc P5/P6).
  • Migration plan (thuộc P7).
  • Workflow engine, UI, KG/vector implementation.

3. Inputs pháp lý

Input Lấy gì cho C1
L1 — Text Unit Governance Định nghĩa text unit, document envelope, addressing, cây dọc, ref ngang, lifecycle, version, change-set, species, 9 nguyên tắc bắt buộc
L3 — Metadata Governance Core metadata 4 nhóm + core-equivalent, profile 2 tầng, field responsibility 4 loại fill, 3 tầng kiểm tra (completeness/correctness/consistency), controlled vocabulary
L4 — Birth Gate Extension Birth gate cho text_unit: 8 nhóm kiểm tra core, required profile, derived fields không kiểm tại birth, enforcement mode config-driven, legacy/grandfather
L5 — Unit-level Review + Change-set Review gắn unit, change-set lifecycle (draft→submitted→review_passed→approval_passed→enacted), snapshot đóng băng, document approval aggregate, quorum Đ32

4. Object model concept

4.1 Document envelope

Bao bì của một văn bản quản trị. Chứa metadata tổng: tên, loại, version, lifecycle status, council score, owner. KHÔNG chứa nội dung chi tiết — nội dung sống trong unit versions.

Một document envelope sở hữu một tập logical text units. Mỗi logical unit biết mình thuộc document nào. Document envelope là "cái hộp", logical units là "các ngăn bên trong", unit versions là "các tờ giấy trong ngăn".

Trong giai đoạn hiện hành, document envelope có thể map/neo với normative_registry; thiết kế chi tiết xác định ở schema phase.

Lifecycle của document: Tuân thủ Đ4 — draft → enacted → superseded → retired. Document version bump khi change-set enacted/applied theo rule (xem §6.5).

4.2 Logical text unit vs unit version

Đây là phân biệt quan trọng nhất của C1.

4.2.1 Logical text unit (logical unit)

Danh tính logic của một đơn vị thông tin. Logical unit:

  • Giữ canonical address (bất biến, L1 §4.3).
  • Biết mình thuộc document nào.
  • Có vị trí trong cây parent-child.
  • Tồn tại xuyên suốt mọi version — logical unit là "cái ngăn", version là "tờ giấy được thay vào ngăn".

Nôm na: logical unit giống "địa chỉ nhà" — nhà có thể sửa, sơn lại, xây thêm tầng (= version mới), nhưng địa chỉ nhà không đổi.

4.2.2 Unit version

Bản nội dung cụ thể của logical unit tại một thời điểm. Unit version:

  • Có version identity riêng (tách biệt canonical address).
  • Chứa nội dung thực: body, title, metadata snapshot.
  • Có lifecycle riêng: draft → enacted → superseded → retired.
  • Enacted version = bất biến. Sửa = tạo version mới.

4.2.3 Quan hệ logical unit ↔ unit version

  • 1 logical unit → nhiều unit versions (theo thời gian).
  • Tại bất kỳ thời điểm: tối đa 1 version enacted/current cho 1 logical unit.
  • Canonical address gắn với logical unit identity. Version mới giữ canonical address nhưng có version identity riêng.
  • Published snapshot chứa unit versions, không phải logical units trực tiếp (xem §4.10).

4.2.4 Sơ đồ quan hệ

Document envelope (VD: Đ38)
├── Logical unit A (address: D38-S1)
│   ├── Version A.1 (draft)
│   ├── Version A.2 (enacted/current) ← trong published snapshot
│   └── Version A.3 (superseded)
├── Logical unit B (address: D38-S2)
│   ├── Version B.1 (enacted/current) ← trong published snapshot
│   └── (chưa có version mới)
└── Logical unit C (address: D38-S3)
    └── Version C.1 (draft) ← KHÔNG trong published snapshot

Published snapshot = {Version A.2, Version B.1}

4.3 Canonical address

Định danh kỹ thuật duy nhất toàn hệ thống cho mỗi logical unit. Dạng: {doc_code}-{section_path} (VD: D43-S2-P2-1).

Đặc tính Mô tả Nguồn
Unique toàn hệ thống Không 2 logical unit nào cùng address L1 §3.4
Bất biến Canonical address không đổi suốt vòng đời logical unit. Đổi nội dung = version mới, giữ address. L1 §4.3
Gắn logical unit Address gắn với logical unit identity, KHÔNG gắn với unit version. GPT review #3
Có thể system-auto Address có thể do system cấp tại birth path. Nếu system-auto cấp thì phải được cấp hoặc reserved trước commit theo rule thiết kế, tránh race condition. L4 §4.2

4.4 Section code

Human-readable alias cho vị trí đọc hiểu (VD: §2.2.1). Section code có thể đổi theo render hoặc cấu trúc đọc — KHÔNG dùng làm định danh kỹ thuật.

Phân tách rõ: canonical address = kỹ thuật (bất biến, gắn logical unit), section code = hiển thị (có thể đổi).

4.5 Parent-child tree (cây cấu trúc dọc)

Logical units tổ chức theo cây parent-child trong cùng document.

Quy tắc Mô tả Nguồn
1 parent duy nhất Cây thuần, không phải DAG L1 §3.5
Cùng document Parent phải cùng document. Không nhúng unit từ document khác vào cây. L1 §3.5
Sort order Thứ tự con xác định bởi sort_order L1 §3.5
Xử lý khi retire parent Retire parent → con phải được xử lý (cảnh báo hoặc cascade theo rule). Không tự cascade enacted children nếu chưa có rule/approval. L1 §3.5, GPT review #8
Không giới hạn tầng Thực tế Incomex: 4–6 tầng L1 §3.5
1 canonical parent Logical unit có thể xuất hiện trong nhiều rendered views, nhưng chỉ có 1 parent trong cây gốc L1 §3.5

4.6 Horizontal relation (tham chiếu ngang)

Liên kết giữa units bất kỳ (có thể khác document) — quản bằng universal_edges, KHÔNG bằng parent-child pointer.

Quy tắc phân tách (L1 §3.6):

  • Quan hệ dọc (cấu trúc) KHÔNG chạy qua universal_edges.
  • Quan hệ ngang (ngữ nghĩa) KHÔNG dùng parent-child pointer.
  • 2 kênh tách biệt, không trộn.

Ví dụ quan hệ ngang: "Đ38 §3 tham chiếu Đ4 §2", "SOP-001 unit 5 liên kết L1 §3.4".

4.7 Change-set

Container gom nhiều thay đổi ở nhiều unit versions, review chung, approve chung qua APR Đ32.

Đặc điểm (L5 §3.3):

  • Có scope rõ: liệt kê logical unit nào thay đổi, thay đổi gì (tạo version mới / sửa draft version / retire logical unit).
  • Có lifecycle riêng — TÁCH BIỆT APR lifecycle Đ32.
  • Có owner.
  • Thông thường gắn 1 document; cross-document change-set có thể xảy ra.
  • Phải self-contained: đọc change-set hiểu scope mà không truy ngoài luồng.

4.8 Change-set snapshot

Snapshot = tập object_id + version_id + diff/evidence tại thời điểm submit (L5 §3.4).

Vai trò: Bằng chứng đóng băng — reviewer và approver đánh giá trên snapshot, không phải trên object sống. Khi change-set submitted → snapshot đóng băng → không sửa lén. Sửa tiếp = withdraw/re-submit.

4.9 Published snapshot

Tập các unit versions enacted/current thuộc 1 document tại 1 thời điểm. Đây là "bản chính thức" của document — chỉ chứa enacted/current unit versions, không chứa draft versions.

Quy tắc (L5 §6.3): Document enacted chỉ bao gồm tập unit versions enacted/current thuộc published snapshot. Draft versions có thể tồn tại ngoài published snapshot, nhưng KHÔNG được lọt vào published snapshot. DOT kiểm điều này.

Lưu ý: Published snapshot chứa unit versions, không phải logical units trực tiếp. Mỗi logical unit có tối đa 1 version trong published snapshot (version enacted/current).

4.10 Split/merge unit

Split/merge unit là structural change lớn, không phải sửa version thường:

  • Split: 1 logical unit → 2+ logical units mới (mỗi cái có canonical address mới).
  • Merge: 2+ logical units → 1 logical unit mới (address mới hoặc giữ 1 trong các address cũ).

Split/merge phải qua change-set + APR. Không phải write path thông thường. Successor relation giữa address cũ và mới phải được ghi nhận.


5. Lifecycle model

5.1 Unit version lifecycle

Mỗi unit version tuân thủ Đ4:

draft → enacted → superseded → retired
Trạng thái Mô tả Chuyển khi nào
draft Version mới tạo, chưa approve. Có thể sửa tại chỗ. Mặc định tại birth
enacted Đã approve qua change-set + APR. Bất biến. Change-set enacted/applied
superseded Version cũ bị thay thế bởi version mới enacted. Giữ lại cho audit. Version mới enacted
retired Logical unit không còn hiệu lực. Version cuối cùng chuyển retired. Giữ lại cho audit. Quyết định retire logical unit qua change-set

Quy tắc chuyển trạng thái:

  • draft → enacted: chỉ khi version nằm trong change-set đã enacted/applied (L5 §5.2).
  • enacted → superseded: tự động khi version mới enacted cho cùng logical unit.
  • enacted → retired: qua change-set + APR (vì đây là thay đổi trạng thái enacted).
  • Không có đường ngược: enacted không quay lại draft. Sửa = version mới.

5.2 Logical unit lifecycle

Logical unit có trạng thái hiệu lực phái sinh từ version hiện hành:

  • Logical unit "active" = có ít nhất 1 version enacted/current.
  • Logical unit "retired" = version cuối cùng retired, không còn version enacted.
  • Logical unit "draft-only" = chỉ có draft versions, chưa bao giờ enacted.

Trạng thái logical unit có thể là derived (tính từ versions) hoặc explicit — quyết định cụ thể thuộc schema phase (OD).

5.3 Change-set lifecycle

Tách biệt APR lifecycle. Chi tiết theo L5 §5.2:

draft → submitted → review_passed → approval_passed → enacted/applied
                  ↘ rejected / withdrawn
Trạng thái Mô tả
draft Đang soạn. Unit versions có thể thay đổi. Chưa tạo APR.
submitted Snapshot đóng băng. Tạo hoặc liên kết APR qua DOT theo Đ32.
review_passed Tất cả units đã review pass (hoặc batch pass theo rule).
approval_passed APR đã pass quorum Đ32. Chờ apply step.
enacted/applied APR applied hoặc apply step thành công. Thay đổi chính thức. Unit versions → enacted. Document bump version theo rule.
rejected APR bị reject. Có thể sửa và re-submit.
withdrawn Owner rút trước khi approval hoàn tất.

5.4 Quan hệ change-set lifecycle ↔ APR lifecycle

Change-set lifecycle và APR lifecycle là 2 chuỗi trạng thái song song:

Change-set APR (Đ32) Ai trigger
draft Chưa tạo APR
submitted APR pending System/DOT tạo APR khi submit
review_passed APR pending (vẫn chờ quorum) Reviewers cập nhật review state trên units
approval_passed APR approved Quorum đạt
enacted/applied APR applied Apply step thành công
rejected APR rejected Quorum reject
withdrawn APR cancelled/withdrawn Owner rút

Điểm mấu chốt: APR approved cho phép change-set chuyển approval_passed. APR applied hoặc apply step thành công mới cho phép change-set enacted/applied. Không nhảy từ approved thẳng sang enacted — phải qua apply step. APR vẫn tuân thủ Đ32 lifecycle riêng — L5/C1 không thay đổi cơ chế lõi APR.

5.5 Document lifecycle

Document envelope cũng tuân thủ Đ4: draft → enacted → superseded → retired. Document version bump system-driven theo rule khi change-set enacted/applied (xem §6.5).

5.6 Review state trên unit

Mỗi unit có review state riêng (metadata theo L3):

unreviewed → in_review → review_passed / review_failed → needs_re_review

Review state chuyển bởi reviewer (agent hoặc human). Review parent ≠ approve children — không cascade (L1 §4.6, L5 §4.3).


6. Write path

6.1 Tạo unit mới

Nôm na: Một người muốn thêm 1 đoạn mới vào văn bản → tạo 1 logical unit mới + 1 draft version đầu tiên.

Trình tự:

  1. Agent/human xác định document đích và parent logical unit trong cây.
  2. Chuẩn bị nội dung: body, title, section_type, owner, description + required profile fields.
  3. Birth gate (L4): Hệ thống kiểm 8 nhóm core metadata:
    • Canonical address (system-auto cấp hoặc agent cung cấp) — unique toàn hệ thống. Nếu system-auto cấp thì phải được cấp hoặc reserved trước commit theo rule thiết kế, tránh race condition.
    • doc_code trỏ document envelope tồn tại + hợp lệ.
    • Parent tồn tại + cùng document (nếu không phải root). Sort_order có giá trị.
    • Content payload hợp lệ theo section_type.
    • Section_type thuộc controlled vocabulary.
    • Owner có giá trị.
    • Description có giá trị.
    • Lifecycle status = draft (system auto).
    • Required profile fields có giá trị (theo config).
  4. Enforcement: Birth gate pass → logical unit + draft version đầu tiên vào PG. Birth gate fail → block/warn/escalate theo config.
  5. Draft version nằm ngoài published snapshot.
  6. Hot path hoàn tất. Cold path (vector sync, KG enrichment) chạy async sau.

6.2 Sửa draft version

Nôm na: Sửa 1 đoạn đang nháp, chưa ai approve.

Trình tự:

  1. Unit version phải ở status draft. Nếu enacted → xem §6.3.
  2. Agent/human sửa nội dung (body, title, metadata).
  3. Hệ thống kiểm integrity cơ bản: parent vẫn tồn tại + cùng document, canonical address không đổi, section_type hợp lệ.
  4. Cập nhật PG. Derived fields (body_hash, tier) tính lại bởi system auto / DOT derive.
  5. Review state có thể chuyển sang needs_re_review nếu đã từng review.

Đặc biệt: Sửa draft KHÔNG tạo version mới — draft version có thể sửa tại chỗ. Chỉ enacted version mới bất biến.

6.3 Sửa enacted unit (→ version mới)

Nôm na: Muốn sửa 1 đoạn đã được duyệt chính thức — phải tạo "bản nháp mới" trong cùng logical unit.

Trình tự:

  1. Version hiện tại ở status enacted — bất biến, không sửa đè (L1 §4.2).
  2. Agent/human tạo version mới của logical unit. Version mới:
    • Giữ canonical address (vì address gắn logical unit, bất biến).
    • Có version identity riêng.
    • Status = draft.
    • Kế thừa parent, sort_order (có thể thay đổi nếu cần).
  3. Version mới phải qua birth/creation validation tương ứng (L4 §9.2).
  4. Draft version mới nằm ngoài published snapshot.
  5. Để version mới enacted → phải gom vào change-set → review → APR approve → apply step → enacted.
  6. Khi version mới enacted → version cũ tự động chuyển sang superseded.

Lưu ý: Version mới giữ canonical address trong cùng logical unit hoặc successor relation theo rule. Không tạo canonical address mới trừ split/merge/structural change được change-set chấp thuận (xem §4.10).

6.4 Retire unit

Nôm na: Xóa bỏ hiệu lực 1 đoạn — không xóa khỏi PG, chỉ đánh dấu hết hiệu lực.

Trình tự:

  1. Retire logical unit (có enacted version) = thay đổi trạng thái enacted → phải qua change-set + APR (L1 §4.2).
  2. Agent/human tạo change-set ghi rõ: logical unit X retire.
  3. Hệ thống kiểm: logical unit X có con không? Có ref ngang trỏ vào không? → Cảnh báo impact.
  4. Không tự cascade enacted children. Nếu logical unit X có con đã enacted, phải có rule hoặc approval rõ ràng cho từng con: retire cascade, re-parent, hoặc giữ nguyên với cảnh báo. Không tự động cascade mà bỏ qua authority.
  5. Change-set submit → snapshot → review → APR approve → apply → enacted.
  6. Version enacted cuối cùng của logical unit chuyển sang retired. Logical unit trở thành retired.
  7. Ref ngang trỏ vào logical unit retired → DOT daily phát hiện "ref gãy" (xem §7.2).

6.5 Document version bump

Nôm na: Khi 1 change-set được duyệt và applied, "cái hộp" (document) có thể tăng số version.

  • Document version bump = system-driven theo rule khi change-set enacted/applied (L5 §6.2).
  • Ví dụ mặc định: minor bump (sửa text, thêm section), major bump (thay đổi cấu trúc — thêm/xóa article, merge/split document). Phân loại = config, không chốt pháp lý ở C1.
  • Lưu ý: Metadata-only hoặc non-published change-set có thể không bump hoặc chỉ bump patch theo rule. Không phải mọi change-set đều bump document version.
  • Document version bump cập nhật published snapshot: thêm unit versions enacted mới, loại unit versions superseded/retired.

7. Checker path

Checker path = các kiểm tra DOT daily/event-driven để phát hiện lỗi cấu trúc + metadata. Thuộc tầng correctness + consistency (L3 §7.2, §7.3). Khác birth gate (birth gate = completeness tại INSERT, L4).

7.1 Parent sai document

Lỗi: Logical unit có parent trỏ tới logical unit thuộc document khác.

Phát hiện: DOT daily quét: so sánh document của unit vs document của parent. Không khớp → log issue.

Xử lý: Draft version → self-healing nếu rule cho phép (sửa parent hoặc escalate). Enacted version → escalate, không auto-fix nội dung (L3 §8.6).

7.2 Ref gãy (broken reference)

Lỗi: Quan hệ ngang (universal_edges) trỏ tới logical unit không tồn tại, hoặc logical unit đã retired/superseded mà không có version kế thừa.

Phát hiện: DOT daily/event-driven: quét edges, kiểm target tồn tại + status hợp lệ.

Xử lý: Log issue. Nhắc reviewer/owner xử lý. Nếu target superseded → gợi ý cập nhật ref theo successor/current version nếu rule cho phép và authority chấp thuận. Không mặc định auto-update ref. Nếu target retired → gợi ý xóa ref hoặc tìm thay thế.

7.3 Draft version lọt published snapshot

Lỗi: Published snapshot của document enacted chứa unit version ở status draft — vi phạm quy tắc "published snapshot chỉ chứa enacted/current unit versions" (L5 §6.3).

Phát hiện: DOT daily: quét published snapshot, kiểm tất cả unit versions trong snapshot có status enacted/current. Bất kỳ draft version → critical issue.

Xử lý: Escalate ngay. Đây là lỗi nghiêm trọng — published snapshot phải chỉ chứa enacted/current unit versions.

7.4 Address collision

Lỗi: 2 logical units trùng canonical address — vi phạm tính unique (L1 §3.4).

Phát hiện: Birth gate chặn tại INSERT (kiểm unique). DOT daily quét toàn bộ (phòng trường hợp race condition hoặc bypass).

Xử lý: Nếu phát hiện collision tồn tại → critical issue. Escalate. Không auto-fix — cần human quyết định logical unit nào giữ address.

7.5 Lifecycle mismatch

Lỗi: Trạng thái lifecycle không nhất quán giữa các object liên quan. Ví dụ:

  • Document enacted nhưng published snapshot chứa draft version.
  • Change-set enacted nhưng unit versions trong change-set vẫn draft.
  • Unit review_passed nhưng change-set rejected → cần re-review.
  • Unit version enacted nhưng document đã retired.

Phát hiện: DOT daily: cross-check status unit version ↔ document ↔ change-set.

Xử lý: Log issue. Draft objects → self-healing nếu rule cho phép. Enacted objects → escalate.

7.6 Duplicate enacted version cho cùng logical unit

Lỗi: Cùng 1 logical unit có 2+ versions ở status enacted/current trong cùng published snapshot — vi phạm quy tắc "tối đa 1 version enacted/current per logical unit" (§4.2.3).

Phát hiện: DOT daily: quét published snapshot, group by logical unit, kiểm mỗi logical unit chỉ có 1 version.

Xử lý: Critical issue. Escalate. Cần human quyết định version nào giữ.

7.7 Orphan draft version

Lỗi: Draft version tồn tại quá lâu (sau threshold) mà không thuộc change-set nào — có thể là draft bị quên.

Phát hiện: DOT daily/weekly: quét draft versions không thuộc change-set nào, kiểm thời gian tạo > threshold.

Xử lý: Warn (INFO level). Nhắc owner review/xóa/gom vào change-set. Không auto-delete.


8. Hot path vs cold path

8.1 Hot path — ghi PG ngay

Khi tạo/sửa/retire unit, những việc sau xảy ra ngay trong transaction PG (hoặc ngay sau commit):

Việc Mô tả
Ghi nội dung Body, title, metadata vào PG
Birth gate check Kiểm completeness tại INSERT (L4)
Integrity check cơ bản Parent tồn tại + cùng document, address unique, section_type hợp lệ
Status transition draft → enacted (khi change-set enacted/applied), enacted → superseded
System-auto fields Timestamps, lifecycle status mặc định, canonical address (nếu system cấp), body_hash

Về published snapshot update: Snapshot transition/update là PG-native critical path khi apply/enact change-set. Transaction boundary cụ thể thuộc schema/implementation phase — có thể cùng transaction hoặc tách transaction tùy thiết kế.

Nguyên tắc: Hot path = PG native. Latency budget cụ thể xác định ở schema/implementation phase. Mục tiêu: ghi xong, integrity đảm bảo, trước khi trả kết quả (L1 §4.9, QĐ5).

8.2 Cold path — enrichment async

Chạy sau hot path, không block transaction ghi:

Việc Mô tả Cơ chế
Vector sync Đẩy unit version content sang Qdrant cho retrieval PG NOTIFY → sync worker
KG enrichment Gợi ý/cập nhật projection hoặc tạo proposed edges. Authoritative edges/bindings phải qua write path hợp pháp — KG enrichment KHÔNG tự sửa truth. DOT event-driven hoặc scheduled
DOT daily checks Correctness, consistency (§7) Cron schedule
Derived metadata Tier (tính từ cây), binding count, species count DOT derive
Optional enrichment Nhắc fill optional profile fields DOT daily (INFO level)

Nguyên tắc: PG unit version = gốc (SSOT). Vector/Qdrant = projection phục vụ retrieval (L1 §4.7). Cold path fail → unit version vẫn tồn tại trong PG, chỉ thiếu enrichment. Retry/self-healing xử lý.


9. Invariants bắt buộc

Những quy tắc KHÔNG BAO GIỜ được vi phạm, bất kể hoàn cảnh:

# Invariant Nguồn
I1 PG unit là SSOT. Mọi nội dung văn bản quản trị sống trong PG dưới dạng unit versions. File/KB = backup. L1 §4.1, HP NT1, NT13
I2 Enacted version = bất biến. Unit version đã enacted không sửa đè. Thay đổi = version mới + change-set + APR. L1 §4.2, Đ4
I3 Canonical address bất biến, gắn logical unit. Address không đổi suốt vòng đời logical unit. Version mới giữ address, có version identity riêng. L1 §4.3
I4 Cây dọc tách graph ngang. Parent-child = cấu trúc. Edges = ngữ nghĩa. Không trộn. L1 §4.4
I5 Parent cùng document. Không nhúng unit từ document khác vào cây. L1 §3.5
I6 Review gắn unit, không cascade. Review parent ≠ approve children. L1 §4.6, L5 §4.1
I7 Mọi unit mới qua birth gate. Không đường tắt vào PG bỏ qua birth gate. L4 §9.1
I8 Published snapshot chỉ chứa enacted/current unit versions. Draft version không lọt vào published snapshot. Mỗi logical unit tối đa 1 version trong published snapshot. L5 §6.3
I9 Change-set submitted → snapshot đóng băng. Không sửa lén khi chờ approve. L5 §5.3
I10 Mọi approval qua APR Đ32. Change-set approve qua APR pipeline. Agent không tự approve enacted content change. L5 §10.3, §10.7
I11 Review result và APR decision không xóa/ghi đè. Re-review = cycle/record mới. L5 §3.1
I12 Hot path PG, enrichment async. Ghi PG + integrity check trước. Vector/KG sau. KG enrichment không tự sửa truth. L1 §4.9, QĐ5
I13 Controlled vocabulary cho classification. doc_type, section_type = FK config. Không free-form. L3 §8.9
I14 Derived-first cho metadata cấu trúc. Tier, counts = tính từ data. Agent đề xuất, system/DOT xác nhận. L3 §8.7, NT11

10. Open decisions — chuyển sang schema phase

Những quyết định chưa chốt ở C1, cần giải quyết khi thiết kế schema (P5) hoặc implementation (P6):

# Open decision Ghi chú Risk ref
OD1 Tên trạng thái lifecycle enum cụ thể. C1 dùng "draft / enacted / superseded / retired" nhưng enum PG cần chuẩn hóa chính xác (có thể có trạng thái phụ). Cần đối chiếu Đ4 enum hiện hành. R1
OD2 Map change-set lifecycle ↔ APR lifecycle. C1 mô tả song song (§5.4) nhưng cơ chế trigger/event giữa 2 lifecycle + apply step cần chốt ở schema. Điểm phức tạp nhất. R2, R6
OD3 Profile fields cụ thể cho text_unit. C1 biết có required vs optional profile nhưng danh sách fields cụ thể = config data, seed ở P5. Liên quan C2. R3
OD4 Enforcement mode cụ thể per birth check. C1 biết block/warn/escalate nhưng check nào mode nào = config. Cần matrix chi tiết. R4
OD5 Review state enum cụ thể. C1 dùng "unreviewed / in_review / review_passed / review_failed / needs_re_review" — cần chuẩn hóa. Có thể gộp/tách tùy implementation. R7
OD6 Canonical address generation. System-auto hay agent cung cấp? Format chính xác? Reservation mechanism? Ảnh hưởng birth path + race condition.
OD7 Cross-document change-set handling. C1 thừa nhận có thể xảy ra nhưng cơ chế chi tiết (multi-document version bump, authority) cần chốt. Edge case quan trọng.
OD8 Version numbering scheme. Semantic (major.minor.patch) hay sequential? Document vs unit? Ảnh hưởng version bump rule. R6
OD9 Retire cascade policy. Retire parent → con retire cascade hay re-parent? Config hay cứng? Enacted children cần rule/approval riêng. Ảnh hưởng checker + write path.
OD10 Latency budget cho hot path. Bao nhiêu ms cho birth gate + integrity check trong transaction? Performance constraint.
OD11 Snapshot storage model. Snapshot = copy data hay reference (object_id + version_id)? Storage vs query tradeoff.
OD12 Logical unit vs unit version storage model. 1 bảng (unit + version cùng row) hay 2 bảng (logical unit riêng, version riêng)? Đây là open decision quan trọng nhất trước P5. Ảnh hưởng toàn bộ schema design.

11. Ranh giới — C1 không làm gì

Không làm Lý do
Không viết SQL Schema thuộc P5
Không chốt tên bảng/cột Schema thuộc P5
Không viết trigger/function Implementation thuộc P5/P6
Không viết DOT list/config Implementation thuộc P6
Không viết migration plan Thuộc P7
Không định nghĩa component/BOM Thuộc C3
Không chốt metadata schema cụ thể Thuộc C2 + P5
Không chốt workflow engine/UI Ngoài scope
Không chốt KG/vector implementation Cold path concept only, implementation thuộc riêng
Không thay đổi Đ32 APR lõi L5 đã clarify, C1 chỉ mô tả interaction
Không thay đổi Đ0-G lõi L4 đã mở rộng scope, C1 chỉ mô tả birth flow

12. Điều kiện PASS

# Điều kiện
1 C1 phân biệt rõ logical unit, unit version và published snapshot membership. Logical unit = danh tính + address. Unit version = nội dung + lifecycle. Published snapshot = tập unit versions.
2 Object model (§4) nhất quán với L1 định nghĩa: document envelope, logical unit, unit version, addressing, cây dọc, ref ngang, change-set, snapshot
3 Lifecycle model (§5) nhất quán với Đ4 + L5: unit version lifecycle, change-set lifecycle, map change-set ↔ APR (bao gồm apply step)
4 Write path (§6) cover 4 thao tác: tạo mới, sửa draft, sửa enacted (→ version mới), retire — mỗi thao tác bám đúng L1/L4/L5
5 Checker path (§7) cover 7 loại lỗi: parent sai document, ref gãy, draft lọt published snapshot, address collision, lifecycle mismatch, duplicate enacted version, orphan draft
6 Hot/cold path (§8) nhất quán với QĐ5 + L1 §4.9: ghi PG trước, enrichment async sau. KG enrichment không tự sửa truth.
7 Invariants (§9) trích xuất đúng từ L1/L3/L4/L5, không thêm invariant tự sáng tác
8 Open decisions (§10) cover 7 rủi ro design (R1–R7) + OD12 (logical unit vs unit version storage model)
9 Không trượt sang SQL/tên bảng/cột/trigger/DOT/migration
10 Không mâu thuẫn với L1, L3, L4, L5, Đ4, Đ0-G, Đ32, Đ33, Đ39, HP
11 Đủ chi tiết để P5 (schema draft) có thể bắt tay mà không cần hỏi lại "cái này nghĩa là gì"
12 GPT review PASS + User duyệt

DỰ THẢO | C1 — Text Unit Operating Model | Design Note tiền-schema | Opus 4.6 | GPT review vòng 1 + vòng 2 PASS | 2026-04-25