KB-E8C9 rev 3

13 — IU-0 Description Policy Tiering and Pack 2B F6 Preflight (rev 3)

23 min read Revision 3
iu-0description-policytieringpack-2bf6-preflightdesignh11birth-guardrev3

13 — IU-0 Description Policy Tiering and Pack 2B F6 Preflight

Date: 2026-05-04 | Rev 3 Status: DESIGN — chưa runtime, chưa DDL, chưa patch luật Scope: Thiết kế Description Policy theo tầng để unblock Pack 2B mà không phá Description Governance Trigger: Pack 2A closure phát hiện IU data rows không fit mô hình description hiện tại Tham chiếu: Đ3 §2.1/§2.5, Đ4 §2.1, Đ43 §9.1 H11a/H11b, P38-XC §7, 12a decision note Rev 2 patches: GPT review 8 điểm — SQL fix, pg_get_functiondef, H11 runtime check, Directus schema check, Tier B wording, option neutrality, read-list Rev 3 patches: GPT review 4 điểm — schema-first guard, Q11 conditional, law paths in read-list, report path + hard stop


PHẦN A — Rà luật / Khái niệm

§A.1 Bối cảnh — Luật đang chật so với thực tế

Hệ thống Description Governance hiện tại (Đ3 + Đ4 + Đ43 H11) thiết kế ban đầu cho thực thể kiến trúc — DOT tools, collections, species, config, domains. Các thực thể này cần description chi tiết vì chúng là thành phần cố định trong thiết kế, vai trò không tự hiện qua structured metadata.

Bây giờ xuất hiện loại mới: information_unit data rows — miếng thông tin (điều luật, quy trình, knowledge atom...). Chúng tự mô tả qua cấu trúc: có canonical_address (Đ44.§3.2), unit_kind (law_unit), body (nội dung đầy đủ), identity_profile JSONB (title, owner, section_type...). Bắt chúng phải có description free-text riêng = thừa và gây noise trong H11.

Nếu không giải quyết trước Pack 2B, khi tạo IU data rows:

  • H11a sẽ flag CRITICAL nếu IU rows thiếu description (dù IU có body+profile đầy đủ).
  • fn_description_birth_guard sẽ block/warn nếu IU tables nâng governed.
  • HC-SCHEMA (Đ36 GP8.1) flag CRITICAL nếu governed mà thiếu cột physical description.

§A.2 Evidence từ luật hiện hành

Nguồn Nội dung liên quan Gap
Đ3 §2.5 Đã phân biệt "thực thể kiến trúc" vs "bản ghi dữ liệu vận hành". Mô tả chi tiết CHỈ cho kiến trúc. Vận hành chỉ cần cơ bản. Phân biệt chỉ ở mức enrichment (H11b scope), chưa ở mức birth guardH11a.
dot_config.h11b_exclude_species Cơ chế loại trừ species khỏi H11b scan. Hiện dùng cho system_issue. Chỉ cover H11b (WARNING). H11a (CRITICAL) vẫn flag mọi governed thiếu description.
fn_description_birth_guard (Đ4 §2.1) Governed + block mode = RAISE EXCEPTION nếu description rỗng/ngắn/gaming. Không có concept "loại entity này exempt" — chỉ có governance_role axis.
Đ43 §9.1 H11a Scan MỌI governed có description IS NULL/empty → CRITICAL. Không loại trừ theo species/entity type.
Đ43 §9.1 H11b Scan governed chưa enrichment → WARNING. Loại trừ theo h11b_exclude_species. Đã có cơ chế tiering — nhưng chỉ 1 tầng (excluded_species).
P38-XC §7 IU có 3 profiles JSONB (identity_v1, content_v1, publication_v1). Description nằm trong identity_profile, KHÔNG phải cột physical riêng. Birth guard + H11a hiện check cột description — không check JSONB profile.
12a Decision Note observed không yêu cầu description chi tiết. Nhưng khi nâng governed → vướng HC-SCHEMA + birth guard. Ghi nhận problem, chưa giải pháp.
description-enrichment-guide Phạm vi viết: "thực thể kiến trúc". KHÔNG viết cho "bản ghi dữ liệu vận hành". Align Đ3 §2.5 nhưng guide level, chưa enforce PG.

§A.3 Định nghĩa 3 Tier Description Policy

Tier A — required_detailed

Đối tượng: Thực thể kiến trúc — thành phần cố định trong thiết kế hệ thống. Vai trò không tự hiện qua structured metadata; cần description để AI/người hiểu mục đích + cách hoạt động.

Danh sách cụ thể (match Đ43 §9.2.1 + enrichment guide §1):

Bảng PG Loại entity
dot_tools DOT script
collection_registry Collection
entity_species Species
dot_config Config key
dot_domains Domain
dot_operations Operation
dot_coverage_required Coverage config
dot_domain_rules Domain rule
law_jurisdiction Jurisdiction
binding_registry Binding
universal_rule_registry Rule
modules Module
meta_catalog Catalog entry
taxonomy Taxonomy
taxonomy_facets Taxonomy facet
context_trigger_sources Trigger source
workflows Workflow definition

Policy:

  • H11a flag CRITICAL nếu description IS NULL/empty.
  • H11b flag WARNING nếu chưa enrichment (PROV-DOT / no provenance).
  • fn_description_birth_guard: governed = block (khi mode=block), observed = warn.
  • Enrichment guide §3 áp dụng đầy đủ.

Tier B — structured_exempt

Đối tượng: Entity có ý nghĩa chính yếu qua structured metadata / content, KHÔNG qua description free-text. Description cơ bản (auto-gen) hữu ích nhưng không bắt buộc block birth.

★ Rev 2 clarify (GPT patch #6): Tier B KHÔNG có nghĩa thiếu metadata. Tier B entities vẫn PHẢI có structured metadata đầy đủ theo luật tương ứng. Cụ thể với IU data rows: canonical_address (Đ44 §3.2), unit_kind, parent/child relations, source/provenance, identity_profile JSONB (title, owner, section_type), version/content_hash. Chỉ miễn description free-text — vì structured metadata + content body đã mô tả đầy đủ mục đích và nội dung.

2 nhóm con:

B1 — Data rows có structured content thay thế:

Bảng PG Lý do structured đủ
information_unit identity_profile JSONB (title, owner, section_type), canonical_address, unit_kind
unit_version body, content_hash, content_profile JSONB, lifecycle_status
tac_logical_unit canonical_address, section_type, identity_profile
tac_unit_version body, content_hash, review_state, content_profile
tac_publication publication_type, publication_profile JSONB
tac_publication_member Relation row — P44-2 §4.1 Entry 4: G6 N/A

B2 — Bản ghi vận hành / runtime / generated:

Bảng PG Lý do
system_issues Tạo/đóng liên tục bởi executor. Metadata cấu trúc (severity, category, source) đã đủ.
system_health_checks Check definition — structured fields (executor_type, threshold_config) mô tả đầy đủ.
birth_registry Auto-generated record. Code + species + timestamps đã đủ.
entity_labels Label assignment. Label code + entity code đã đủ.
trigger_registry Trigger metadata. Name + table + function đã đủ.
admin_fallback_log Audit log.

Policy:

  • H11a: KHÔNG flag nếu description NULL/empty — structured metadata thay thế.
  • H11b: KHÔNG flag — ngoài scope enrichment.
  • fn_description_birth_guard: KHÔNG block — auto-gen nếu có template, không block nếu không có.
  • Description cơ bản (auto-gen) vẫn WELCOME nhưng không gây alert.

Tier C — unclassified

Đối tượng: Bảng/entity chưa classify vào A hoặc B. Phải discovery + classify trước khi áp dụng policy.

Policy:

  • H11a: flag WARNING (không CRITICAL) + ghi note "chưa classify description policy".
  • fn_description_birth_guard: warn mode mặc định.
  • Agent KHÔNG được đoán — phải classify qua review.

§A.4 Tác động lên luật hiện hành

Luật/Component Cần sửa gì Mức độ
Đ3 §2.5 Bổ sung khái niệm Tier A/B/C chính thức. Hiện chỉ có "kiến trúc vs vận hành" ở mức guideline. Cần policy field tham chiếu. Amend nhỏ — clarify, không đổi logic
Đ4 §2.1 fn_description_birth_guard Đọc description_policy từ nơi encode (chốt sau investigation). Tier B → skip block, chỉ warn hoặc pass. Amend function logic
Đ43 §9.1 H11a Thêm điều kiện: chỉ flag CRITICAL cho Tier A. Tier B = skip. Tier C = WARNING. Amend query WHERE clause
Đ43 §9.1 H11b Giữ nguyên — h11b_exclude_species đã cover B2. Mở rộng loại trừ cho B1 nếu cần. Có thể giữ nguyên hoặc mở rộng exclude
description-enrichment-guide Thêm note: Tier B entities ngoài scope enrichment (★ clarify: chỉ miễn description free-text, không miễn structured metadata). Minor update
Đ44 Pack 2B Unblocked: IU data rows = Tier B → birth không cần description column physical. Critical unblock

§A.5 Rà soát 2 vòng

Vòng 1 — OR/CP/CQ/NT/Tuyên ngôn

Tiêu chí Kết quả
NT4 Thay đổi = config Description policy qua field/config, không hardcode
NT13 PG First Policy sống trong PG (collection_registry hoặc mapping table)
§0-AU Cấm hardcode Tier A/B/C list phải config-driven, không enum cứng
Tuyên ngôn ① Vĩnh viễn hay tạm? Tier system = vĩnh viễn, list có thể update
Tuyên ngôn ② Cơ hội nhầm? Tier C = phải classify, không đoán = không nhầm
Tuyên ngôn ③ Lỗi = cơ hội vàng Pack 2A vướng description = phát hiện gap tiering

Vòng 2 — Rà sâu

  1. Tier B có risk bỏ sót entity cần description? Không nếu classify cẩn thận. Nguyên tắc: "Nếu nghi ngờ → Tier A hoặc Tier C, không Tier B." An toàn hơn flag thừa.
  2. description_policy field ở đâu tốt nhất? Nhiều options — cần agent điều tra thực tế trước khi chốt. Xem §B.3.
  3. H11a thay đổi có break existing flow? Không — H11a hiện flag 0 IU rows (chưa có rows). Change chỉ thêm WHERE filter, không sửa logic existing.
  4. fn_description_birth_guard thay đổi có risk? Thấp — thêm 1 lookup description_policy, Tier B = early return PASS. Logic Tier A giữ nguyên.
  5. Đ3 §2.5 đã ghi "bản ghi vận hành KHÔNG nằm trong scope enrichment" — Tier B có conflict? Không — Tier B mở rộng concept đã có thành 3 tầng chính thức + PG-enforced.

PHẦN B — Agent Điều tra Kỹ thuật Read-only

§B.1 Mục tiêu điều tra

Xác định thực tế PG/Directus hiện tại trước khi chốt nơi encode description_policy và cách amend H11a/fn_description_birth_guard. Agent phải so sánh tất cả options (field vs label vs config vs mapping table vs mở rộng h11b_exclude_species) — không nghiêng sớm vào DDL.

§B.1.1 Read-list cho Agent (★ Rev 2+3 bổ sung)

Agent PHẢI đọc trước khi query:

  1. knowledge/dev/laws/dieu44-trien-khai/design/13-iu0-description-policy-tiering-and-pack2b-f6-preflight.md (file này)
  2. knowledge/dev/guides/description-enrichment-guide.md
  3. knowledge/current-state/queries/h11a-description-basic-missing
  4. knowledge/current-state/queries/h11b-description-detail-missing
  5. knowledge/dev/laws/law-03-metadata.md (Đ3 — description governance)
  6. knowledge/dev/laws/law-04-birth-process.md (Đ4 — birth guard)
  7. knowledge/dev/laws/dieu43-system-context-law.md (Đ43 — H11 health checks)

§B.2 Prompt điều tra cho Claude Code Agent

# ĐIỀU TRA: Description Policy Tiering — Read-only Investigation

## Mục tiêu
Điều tra 11 câu hỏi kỹ thuật. Chỉ đọc. KHÔNG sửa, KHÔNG INSERT, KHÔNG UPDATE, KHÔNG DDL.

## Read-list bắt buộc (đọc từ KB trước khi chạy queries):
1. knowledge/dev/laws/dieu44-trien-khai/design/13-iu0-description-policy-tiering-and-pack2b-f6-preflight.md
2. knowledge/dev/guides/description-enrichment-guide.md
3. knowledge/current-state/queries/h11a-description-basic-missing
4. knowledge/current-state/queries/h11b-description-detail-missing
5. knowledge/dev/laws/law-03-metadata.md
6. knowledge/dev/laws/law-04-birth-process.md
7. knowledge/dev/laws/dieu43-system-context-law.md

## ★ SCHEMA-FIRST GUARD (Rev 3)
Một số query bên dưới assume table/column tồn tại. Quy tắc:
- Nếu table hoặc column trong query KHÔNG tồn tại, KHÔNG coi là failure.
- Ghi rõ "table/column absent" + paste schema output thực tế.
- Dùng schema output để điều chỉnh query read-only nếu cần.
- KHÔNG sửa schema, KHÔNG workaround write, KHÔNG skip — vẫn phải ghi nhận absence.

## Câu hỏi

### Q1: entity_species schema đầy đủ
```sql
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns 
WHERE table_name = 'entity_species' 
ORDER BY ordinal_position;

Tìm xem có field nào tên description_policy, description_tier, metadata_policy hay tương tự. Nếu không có: ghi "Cần thêm field hoặc dùng cơ chế khác."

Q2: collection_registry schema đầy đủ

SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns 
WHERE table_name = 'collection_registry' 
ORDER BY ordinal_position;

Tìm field có thể encode policy. Đặc biệt chú ý JSONB fields, config columns.

Q3: entity_labels và taxonomy_facets schema + policy labels

-- Kiểm tra schema entity_labels
SELECT column_name, data_type
FROM information_schema.columns 
WHERE table_name = 'entity_labels' 
ORDER BY ordinal_position;

-- Kiểm tra schema taxonomy_facets (nếu table tồn tại)
SELECT column_name, data_type
FROM information_schema.columns 
WHERE table_name = 'taxonomy_facets' 
ORDER BY ordinal_position;

-- Tìm label liên quan description/policy/tier (dùng column names từ schema output ở trên)
SELECT DISTINCT label_code FROM entity_labels 
WHERE label_code LIKE '%DESC%' OR label_code LIKE '%POLICY%' OR label_code LIKE '%TIER%'
LIMIT 20;

-- Tìm facet liên quan (chỉ chạy nếu taxonomy_facets tồn tại + có đúng column names)
-- Điều chỉnh column names theo schema output thực tế
SELECT code, name FROM taxonomy_facets 
WHERE name ILIKE '%description%' OR name ILIKE '%policy%' OR name ILIKE '%tier%'
LIMIT 20;
SELECT key, value, description FROM dot_config 
WHERE key LIKE '%h11b%' OR key LIKE '%exclude%' OR key LIKE '%description%'
ORDER BY key;

Q5: H11a/H11b runtime — v_entity_full_classification + findings hiện tại

-- Verify v_entity_full_classification tồn tại và columns
SELECT column_name FROM information_schema.columns 
WHERE table_name = 'v_entity_full_classification' 
ORDER BY ordinal_position;

-- Count H11a findings hiện tại (chỉ chạy nếu view tồn tại)
SELECT v.source_table, count(*) AS h11a_findings
FROM v_entity_full_classification v
WHERE v.governance_role = 'governed'
  AND (v.description IS NULL OR btrim(v.description) = '')
GROUP BY v.source_table ORDER BY h11a_findings DESC;

-- Count H11b findings hiện tại (chỉ chạy nếu view tồn tại)
SELECT v.source_table, count(*) AS h11b_findings
FROM v_entity_full_classification v
WHERE v.governance_role = 'governed'
  AND v.description IS NOT NULL AND btrim(v.description) <> ''
  AND (v.description_provenance = 'PROV-DOT' OR v.description_provenance IS NULL)
GROUP BY v.source_table ORDER BY h11b_findings DESC;

Q6: fn_description_birth_guard — function source + triggers

-- Full function definition (★ Rev 2: dùng pg_get_functiondef)
SELECT pg_get_functiondef('fn_description_birth_guard'::regproc);

-- Liệt kê tất cả triggers gọi fn_description_birth_guard
SELECT tgname, tgrelid::regclass AS table_name, tgenabled
FROM pg_trigger 
WHERE tgfoid = 'fn_description_birth_guard'::regproc
ORDER BY table_name;

Q7: IU tables schema — description column + profile columns

-- Check description column trực tiếp
SELECT table_name, column_name, data_type
FROM information_schema.columns 
WHERE table_name IN ('information_unit', 'unit_version')
  AND column_name = 'description';

-- Check profile/JSONB columns (★ Rev 2 fix SQL precedence)
SELECT table_name, column_name, data_type
FROM information_schema.columns 
WHERE table_name IN ('information_unit', 'unit_version')
  AND (column_name LIKE '%profile%' OR column_name LIKE '%description%');

Q8: collection_registry JSONB/config fields

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'collection_registry' 
  AND (data_type = 'jsonb' OR column_name LIKE '%extra%' OR column_name LIKE '%config%');

Q9: H11 runtime registration trong system_health_checks

-- Schema system_health_checks (nếu table tồn tại)
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'system_health_checks'
ORDER BY ordinal_position;

-- H11a/H11b hiện đăng ký thế nào (điều chỉnh column names theo schema output)
SELECT code, name, executor_type, executor_ref, threshold_config, severity_on_fail, is_active
FROM system_health_checks
WHERE code LIKE 'H11%'
ORDER BY code;

Q10: Directus schema cho collection_registry

-- Directus fields metadata (nếu directus_fields tồn tại — kiểm schema trước)
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'directus_fields'
ORDER BY ordinal_position;

-- Nếu tồn tại, query fields cho collection_registry (điều chỉnh column names theo schema)
SELECT field, type, meta
FROM directus_fields
WHERE collection = 'collection_registry'
ORDER BY sort;

-- Count total collection_registry rows
SELECT count(*) AS total_collections FROM collection_registry;

-- Count per governance_role
SELECT governance_role, count(*) FROM collection_registry GROUP BY governance_role;

Q11: Khả năng encode policy không cần DDL

★ Rev 3: Q11 phụ thuộc Q8. Chỉ query collection_registry.extra_metadata NẾU Q8 xác nhận column này tồn tại.

-- Kiểm tra h11b_exclude_species hiện chứa gì
SELECT value FROM dot_config WHERE key = 'h11b_exclude_species';

-- Xem species_collection_map cho IU tables
SELECT * FROM species_collection_map 
WHERE collection_name IN ('information_unit', 'unit_version');

-- ★ CHỈ CHẠY NẾU Q8 XÁC NHẬN extra_metadata tồn tại:
-- Kiểm tra collection_registry JSONB column đang dùng thế nào
-- SELECT collection_name, extra_metadata 
-- FROM collection_registry 
-- WHERE extra_metadata IS NOT NULL AND extra_metadata::text != '{}'
-- LIMIT 10;
-- Nếu Q8 cho thấy extra_metadata KHÔNG tồn tại → ghi "column absent, Option 2 không khả thi."

Report output

Upload kết quả điều tra vào: knowledge/dev/laws/dieu44-trien-khai/reports/iu0-description-policy-tiering-runtime-investigation-report.md

Trả lời từng Q1-Q11. Mỗi câu gồm 3 phần: (a) Query output — paste nguyên kết quả. (b) Nhận xét ngắn — phát hiện gì. (c) Implications cho description_policy encoding.

Cuối cùng, tổng hợp so sánh 5 options:

  1. DDL field mới trong collection_registry
  2. JSONB key trong collection_registry.extra_metadata (nếu tồn tại)
  3. dot_config JSON array mapping
  4. Label/facet system (entity_labels + taxonomy)
  5. Mở rộng h11b_exclude_species (tạm thời, không cần DDL/config mới)

Mỗi option ghi: (a) feasibility, (b) DDL cần không, (c) performance, (d) maintainability.

★ HARD STOP SAU REPORT (Rev 3)

Sau khi upload report: HARD STOP.

  • Không propose patch runtime.
  • Không execute patch.
  • Không mở Pack 2B.
  • Không DDL.
  • Không sửa function/trigger.
  • Báo về cho GPT/User review report.

KHÔNG ĐƯỢC LÀM

  • Không INSERT/UPDATE/DELETE (ngoài upload report vào KB)
  • Không DDL
  • Không sửa trigger
  • Không sửa function
  • Không tạo IU rows
  • Không dispatch thêm agent

---

### §B.3 5 Options encode description_policy (★ Rev 2 — neutral, chờ agent)

Agent phải so sánh tất cả 5 options trước khi recommend. **Không có pre-selected winner.**

#### Option 1: DDL field mới `description_policy` trong `collection_registry`

- Ưu: collection_registry đã encode governance_role, source_kind, storage_role. Policy tự nhiên cùng chỗ. fn_description_birth_guard đã lookup collection_registry.
- Nhược: DDL ALTER TABLE. Populate ~N collections (kiểm Q10 biết chính xác). Directus auto-detect nhưng cần test.

#### Option 2: JSONB key trong `collection_registry.extra_metadata` (nếu tồn tại)

- Ưu: 0 DDL nếu JSONB column đã có. UPDATE JSONB key tự nhiên.
- Nhược: fn_description_birth_guard phải đọc JSONB key thay vì cột trực tiếp. Schema không rõ ràng. Kiểm Q8 xem có tồn tại không.

#### Option 3: `dot_config` JSON array mapping

- Ưu: 0 DDL. NT4 pure — INSERT/UPDATE config key.
- Nhược: fn_description_birth_guard phải parse JSONB array mỗi trigger fire → performance. Khó maintain list dài.

#### Option 4: Label/facet system (entity_labels + taxonomy)

- Ưu: Align Đ24. Policy = label trên collection.
- Nhược: entity_labels gắn per entity_code, không per collection. Phải label mỗi collection (COL-XXX) → indirect. Kiểm Q3.

#### Option 5: Mở rộng `h11b_exclude_species` tạm thời

- Ưu: 0 DDL, 0 new config. Cơ chế đã hoạt động cho H11b. Nhanh nhất.
- Nhược: Chỉ cover H11b, không cover H11a và fn_description_birth_guard. Species granularity có thể không match. IU chưa có species (observed). Tạm thời, không phải giải pháp dài hạn.

**Chờ kết quả agent Q1-Q11 rồi chốt.**

---

### §B.4 Tác động tối thiểu để unblock Pack 2B

Chốt sau investigation. Mỗi option có minimum path khác nhau:
- Option 1: DDL + seed + fn amend
- Option 2: UPDATE JSONB + fn amend (nếu column tồn tại)
- Option 3: INSERT config + fn amend
- Option 4: INSERT labels + fn amend
- Option 5: UPDATE config + (vẫn cần fn amend cho birth guard)

Minimum chung: fn_description_birth_guard PHẢI hiểu Tier B. Nơi encode Tier khác nhau nhưng fn amend là bắt buộc.

---

### §B.5 Rủi ro + Mitigation

| Rủi ro | Mitigation |
|---|---|
| Tier B entity thực ra cần description | Default = unclassified (Tier C). Chỉ explicit classify mới thành Tier B. An toàn hơn. |
| fn_description_birth_guard amend gây regression | Tier A logic giữ nguyên. Chỉ thêm early return cho Tier B. Test: existing Tier A entity vẫn bị block/warn. |
| DDL break Directus (Option 1) | ALTER ADD COLUMN safe — Directus auto-detect. Test staging. |
| H11a amend miss existing findings | Chạy H11a trước và sau amend, compare output. Tier A findings giữ nguyên. |
| Option sai gây tech debt | Investigation Q1-Q11 trả lời trước khi chốt. Không chốt mù. |

---

### §B.6 Không được làm (hard stop)

- Không mở Pack 2B CRUD
- Không DDL (chờ investigation + GPT/User approve)
- Không patch luật (chờ design review)
- Không Claude Code write
- Không tạo IU rows
- Không expose Directus cho IU
- Không dispatch agent trước khi GPT/User review rev3

---

### §B.7 Changelog

#### Rev 1 → Rev 2

| # | GPT patch | Vị trí sửa |
|---|---|---|
| 1 | Q7 SQL precedence: thêm parentheses cho OR | §B.2 Q7 |
| 2 | Q6 dùng `pg_get_functiondef` thay `prosrc` | §B.2 Q6 |
| 3 | Thêm Q9: kiểm H11 runtime trong system_health_checks | §B.2 Q9 (mới) |
| 4 | Thêm Q10: kiểm Directus schema + Q11: JSONB/species hiện có | §B.2 Q10, Q11 (mới) |
| 5 | Q3 kiểm schema taxonomy/entity_labels trước khi query data | §B.2 Q3 |
| 6 | Tier B wording clarify: vẫn phải có structured metadata | §A.3 Tier B header |
| 7 | Option 1 thành candidate neutral, thêm Option 4+5, bỏ "Recommendation" | §B.3 (5 options neutral) |
| 8 | Thêm read-list cho Agent | §B.1.1 (mới) |

#### Rev 2 → Rev 3

| # | GPT patch | Vị trí sửa |
|---|---|---|
| 9 | Schema-first guard: absent table/column = ghi nhận, không fail | §B.2 header (SCHEMA-FIRST GUARD) |
| 10 | Q11 conditional: chỉ query extra_metadata nếu Q8 confirm tồn tại | §B.2 Q11 |
| 11 | Read-list thêm exact law paths (Đ3, Đ4, Đ43) | §B.1.1 items 5-7 |
| 12 | Report path + HARD STOP sau report | §B.2 footer (HARD STOP SAU REPORT) |

---

*13 rev 3 | 2026-05-04 | Opus 4.6 | Patched per GPT review 8+4 điểm. Agent prompt ready for GPT/User review before dispatch.*
Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/design/13-iu0-description-policy-tiering-and-pack2b-f6-preflight.md