KB-6638
GPT Review — P5b Component/BOM Schema Draft v0 Round 1
6 min read Revision 1
gptreviewdieu38p5bcomponent-bomschema-draftround12026-04-26
GPT Review — P5b Component/BOM Schema Draft v0 Round 1
Kết luận
P5b v0 đúng hướng và đủ nền, nhưng chưa nên upload KB nguyên trạng.
Trạng thái: PASS có điều kiện — cần patch trước khi upload.
Điểm đạt
- Bám đúng C3 và P5 v0.2.
- Component/BOM không bị trộn với text unit/publication_member.
- Component catalog không duplicate PG catalog.
- Đ24 label mapping được deferred đúng.
- Golden path phase 2 là hợp lý.
- Vector/KG projection-only được giữ.
- Có invariant bổ sung INV-BOM-CONSISTENCY và INV-CSM-EXCLUSIVITY tốt.
Chỉnh bắt buộc
- Không được nói “P5 v0.2 KHÔNG sửa” nếu có
ALTER change_set_member. Sửa wording thành: “Không thay đổi semantics/invariants của P5 slice; P5b đề xuất backward-compatible extension/amendment cho change_set_member.” - DP-B1 chọn nullable component fields trên
change_set_membercòn rủi ro vì P5 gốc cólogical_unit_id NOT NULL. Cần nêu rõ P5b phải relax NOT NULL hoặc tách subject. Nếu không muốn sửa P5 table sâu, phương án genericchange_subject/change_set_subjectnên được chọn hoặc ít nhất là option preferred. change_set_memberexclusivity: phải có đủ 3 case create/new_version/retire/bom_update. Vớibom_update, không nhất thiết có component_version_id; có thể cầnbom_entry_idhoặc snapshot_data. P5b phải xử lý.- DP-B2 BOM uniqueness
(publication_id, component_id)hơi cứng so với C3 đã làm mềm. Nếu chọn key này, phải thêm escape hatch: variant/component_use_identity hoặc future migration path. Tốt hơn: dùngcomponent_use_idlàm identity và enforce uniqueness rule configurable; unique key mặc định(publication_id, component_id)có thể là policy, không hard constraint tuyệt đối. reuse_decision_idtrên component FK tới reuse_decision tạo circular dependency nếu reuse_decision “tham chiếu từ component”/component mới chưa tồn tại. Cần đổi hướng: component có nullable reuse_decision_id sau khi record tạo trước, hoặc reuse_decision.subject_ref deferred. Viết rõ birth flow.reuse_decisionthiếu reference đến candidate/existing component được reuse/variant base. Cần có fields/concepts:target_component_id,base_component_id/considered_component_refs, hoặcsearch_evidenceJSONB.compatibility_rulegiữa component_id × 2 chưa xét version-specific compatibility. Cần cho phép component-level default + optional component_version constraints hoặc ghi deferred rõ.component_pg_refdùng string PG object ref. Với Đ33/NT11, phải ghi rõ không FK vào pg_catalog trong schema draft; validation qua checker/gateway.pg_object_schema default publicquá cụ thể; làm mềm thành nullable/default per deployment.component_type_vocab,governance_status_vocab,usage_type_vocabđều lifecycle active/deprecated/retired; cần ghi không thay Đ24 và không hardcode seed values. P5b chỉ đề xuất initial seed.- Component lifecycle có
supersededở component-level nhưng also version-level. Cần giải thích khi nào component superseded vs component_version superseded, tránh duplicate semantics. - BOM enacted rule: khi publication enacted, bom_entry phải trỏ
component_version.lifecycle_status='active'vàcomponent.lifecycle_status='active', governance_status cho phép. Không chỉ component status chung. golden_path_member.component_version_id NULL = latest active versioncó thể vi phạm snapshot immutability. Nếu golden path active/approved thì nên lock version explicitly; NULL/latest chỉ cho draft/proposed. Ghi rõ.anti-pattern: nói trước approve dùngconflictshoặc không ghi rule chưa ổn, vìconflictscũng có DOT action ERROR trong §11.1. Cần phân biệt advisory vs enforced rule bằngenforcement_status/is_enforced.approved_by TEXTnên giống P5/P5b APR hook: opaqueapproval_refhoặc authority_ref, không chỉ text.content_hashnên bao gồm spec_detail + implementation_ref + changelog_summary + content_profile, không chỉ spec/changelog/profile.vector_chunk_counttrên component_version cần cùng invariant như P5: chunk nằm trong đúng 1 component_version. Thêm invariant hoặc defer manifest to P6.- PASS criteria ghi “9 tables minimum + 2 phase 2” nhưng scope liệt kê 9 minimum, thực tế có component_pg_ref và usage_type_vocab khiến con số lẫn. Chuẩn hóa: minimum slice = 9 new tables? 10? Extension không phải table. Phải đếm nhất quán.
- Constitutional check Đ33 cần mạnh hơn: pseudo-DDL là design notation; mọi DDL thật phải qua gateway/migration approval. Không dùng ALTER trực tiếp như hành động.
Khuyến nghị
- Cân nhắc chọn
change_set_subjectgeneric thay vì sửachange_set_membernullable, vì P5 hiện đã design cho logical_unit. Nếu vẫn giữ nullable fields, phải ghi rõ đây là P5b amendment và cần P5 minor revision before implementation. - Thêm
bom_entry.lifecycle_statushoặc lock rule qua publication lifecycle? Nếu không có lifecycle riêng, ghi rõ BOM entry lifecycle derived từ publication. - Thêm
component_entity_mappingOD nếu Đ24 entity_code không dùng component.code trực tiếp.
Kiểm luật/hiến pháp
- NT1/NT13: PASS — PG SoT, KG/Qdrant projection-only.
- NT2: PASS có điều kiện — P6 phải machine-enforce reuse/birth/compatibility/BOM locks.
- NT4: PASS có điều kiện — vocab/rule/reuse/golden path phải là governance/config data, không hardcode.
- NT8: PASS — BOM/golden path hỗ trợ Assembly First.
- NT11: PASS có điều kiện — component_pg_ref chỉ reference PG catalog, không duplicate; Đ24 không duplicate.
- Đ24: PASS có điều kiện — mapping deferred, không chốt entity_code format.
- Đ32: PASS có điều kiện — approval_ref/apr_ref phải opaque, không text-only authority.
- Đ33: PASS có điều kiện — pseudo-DDL only, không ALTER/apply thật.
- P5/C3/L2/L4: PASS có điều kiện sau patch.
Chỉ đạo
Opus patch các điểm trên và trả P5b v0.1 cho GPT review Round 2. Chưa upload KB, chưa SQL, chưa migration, chưa DOT.