Hiện trạng Vòng 2 — Đối chiếu logic 4 Bà Mẹ ↔ PG / registry / binding / khóa (khảo sát đọc-only)
Hiện trạng Vòng 2 — Đối chiếu logic 4 Bà Mẹ ↔ PG / registry / binding / khóa
Nhịp KHẢO SÁT, ĐỌC-ONLY, nối tiếp Vòng 1 (
hien-trang-he-thong-truoc-trien-khai-pilot-0.md— KHÔNG sửa file đó). Không thiết kế, không triển khai, không sửa DB, không tạo bảng/field/DOT/event/workflow/task, không deploy, không git, không in secret value. Ngày khảo sát: 2026-06-29 Công cụ:query_pg(READ ONLY txn, rolecontext_pack_readonly, statement_timeout 5s, hard LIMIT 500) ·pg_schema· đọc KB ·WebFetch(preview HTML) ·upload_document(đúng 1 báo cáo này). Không psql/shell, không gọi function gây ghi.
0. Bằng chứng môi trường
SELECT current_database(), current_user, current_schema(), version();
| db | user | schema | version |
|---|---|---|---|
directus |
context_pack_readonly |
public |
PostgreSQL 16.13 (Debian) |
- Trùng dự kiến. User =
context_pack_readonly(read-only chuyên dụng). Tool ép transaction READ ONLY ⇒ đảm bảo đọc-only ở tầng công cụ. SHOW transaction_read_only/default_transaction_read_only: CHƯA XÁC MINH trực tiếp (current_setting()ngoài allowlist của tool →[DENIED]). Mọi câu đều SELECT.- Phát hiện mô hình truy cập (quan trọng cho cách đọc báo cáo này): role
context_pack_readonlychỉ đượcGRANT SELECTtrên một tập bảng được duyệt, KHÔNG phải toàn bộ public. Bảng không nằm trong allowlist → SELECT trảrelation "..." does not exist(che quyền). Bằng chứnginformation_schema.table_privileges WHERE grantee='context_pack_readonly': có SELECT trênapproval_requests, binding_registry, block_form, collection_field_standards, collection_registry, design_templates, field_type_equivalences, forms, governance_registry, table_registry, tasks, trigger_registry(+ từ Vòng 1:task_comments, task_checkpoints, workflows, workflow_steps, workflow_step_relations, workflow_categories, workflow_change_requests, dot_iu_command_catalog, event_*). Không có grant trên một số registry trọng yếu. - Catalog (
pg_class/pg_attribute/to_regclass) đọc được.reltuplesthường = -1 (chưa ANALYZE) vàpg_stat_user_tables.n_live_tupkhông tin được (trả 0 cho bảng có dữ liệu, vdcollection_registry) ⇒ chỉcount(*)trên bảng readable mới là sự thật; bảng ungranted thì số dòng CHƯA XÁC MINH.
1. Tóm tắt 5 dòng — 4 mẹ ↔ PG đủ/thiếu gì
- MOIT = chưa chạy được. 3 registry lõi của thiết kế
field_registry,input_form_registry,tier_registryKHÔNG TỒN TẠI live (to_regclass=NULL; DDL 2026-05-29 chỉ chạyBEGIN..ROLLBACK).binding_registry/forms/block_formtồn tại nhưng rỗng (0 dòng) vàbinding_registrylại có hình dạng khác thiết kế (binding nguồn→output, không phải field↔cột). Không có DOT submit form. ⇒ "bind field → cột DB → form submit" = KHÔNG. - MOW canvas = mới có khung thô.
workflows(2)/workflow_steps(70)/workflow_step_relations(80)/workflow_change_requests(3) tồn tại, nhưng thiếu toàn bộ cột EXTEND (owner_gov_code, design_health, iu_ref, dot_ref, event_ref…), không có viewv_mow_design_*, không cótier_registry, không có bảng cây 7 tầng tổ chức, không có lớp instance/run. Hợp đồng CanvasNode 22 trường phần lớn chưa có nền PG. - MOT đọc/đổi task = chạy được; cá nhân hóa = KHÔNG.
tasks/task_comments/task_checkpointsđủ cho vòng đời task (Vòng 1). Nhưng không có row-filter$CURRENT_USERtrêntasks(chỉfeedbacks.readcó), vàassigned_tolà text agent (claude_code/CLI/…), không phảidirectus_users⇒ "việc của tôi" theo hàng không làm được. - MOUT = không có tầng registry.
output_table_registry/report_registry/report_run/recipient/distributionđều KHÔNG TỒN TẠI. Mặt báo cáo sống duy nhất = cụm pg-read-pg (table_registry=28 + snapshotv_report_home/v_report_pg) — cơ chế khác thiết kế MOUT-builder. - Liên thông 4 mẹ = mới ở mức UI + khóa MỀM. Toàn cụm task/workflow/proposal 0 foreign key (PK-only, tất cả là soft-ref). 4 mẹ đã đăng ký
governance_registry(factory) nhưng status=draft và GOV-MOIT trỏoutput_tablekhông tồn tại. Không có anchor key 7 tầng nối chéo. ⇒ Pilot xuyên tầng tối thiểu KHÔNG chạy được nếu không tạo ≥2 bảng mới (field_registry + input_form_registry).
2. Hợp đồng dữ liệu mỗi mẹ (từ thiết kế) → PG đáp ứng thế nào
| Mẹ | Hợp đồng dữ liệu phải có (thiết kế) | Điểm ghi | Điểm đọc | Điểm phê duyệt | Điểm liên thông | PG đáp ứng |
|---|---|---|---|---|---|---|
| MOW | CanvasNode 22 trường (node_id, tier, code, parent_id, status, traffic_light, automation_level, owner_gov_code, freeze_status, health_summary, iu_ref, workflow_ref, task_ref, dot_refs, event_refs, proposal_count, permission_actions, instance_data…) ánh xạ workflows/workflow_steps + cột EXTEND + view v_mow_design_workflow/_step + tier_registry + cây 7 tầng |
Proposal-only → workflow_change_requests (dsl_diff) |
view + Directus policy + predicate Điều-37 | ≥2 chữ ký (Điều 32) | anchor 7 tầng; task_ref/iu_ref/dot_refs/event_refs | PARTIAL→THIẾU: bảng thô có; EXTEND cols/views/tier_registry/cây-7-tầng/instance KHÔNG; proposal_count=wcr; quorum/chữ ký KHÔNG có trường |
| MOT | Task card: header + input + reference/output + instruction + comments/checkpoints + actions; "việc của tôi" theo người | tasks.status/content_*/task_comments qua Directus |
Public read tasks |
(n/a, qua MOW) | task↔workflow_step, task↔form (MOIT), task↔report (MOUT) | CÓ phần lõi: tasks/comments/checkpoints đủ; THIẾU row-perm cá nhân, assignee thật, cột anchor/form_ref/output_ref |
| MOIT | field_registry (field↔collection_code↔column↔interface↔validation) + input_form_registry (target_collection, field_set, form_schema, routing direct/queue) + DOT assembly + DOT write |
DOT executor → INSERT target_collection (direct) hoặc staging+event (queue) | <MOITForm formId> zero-logic |
(queue) → MOW duyệt | field_registry→cột; form→target_collection | KHÔNG: field_registry/input_form_registry không tồn tại; binding_registry rỗng+sai-hình; forms/block_form rỗng; 0 DOT submit |
| MOUT | report_registry (report_id, code, title, anchor_node, anchor_tier, created_by, schedule/cron, distribute[], output_url, status) + output_table_registry + report_run/history + recipient/distribution; neo anchor 7 tầng, resolvePath |
"Đúc báo cáo" → lưu hệ thống | đọc kho trường + source view | governance D0-G/Điều 30-31 | anchor node 7 tầng (2 chiều với MOW/MOT/MOIT) | KHÔNG: report_registry/output_table_registry/report_run/recipient/distribution vắng; chỉ table_registry + v_report_* (cơ chế khác) |
| MODW | "Con của MOW" — ma trận Hiến pháp đa chiều; logic nằm trong MOW; nền normative_registry/universal_rule_registry |
(qua MOW) | đọc ma trận | (qua MOW Điều 32) | anchor vào workflows MOW | PARTIAL: nền luật (normative_registry=46, universal_rule_registry, measurement_registry=142) tồn tại; không có anchor key nối MODW↔workflows |
| Master hub | Mỗi mẹ một list "đã đúc" cùng khuôn (STT·Mã·Tên·Tầng quản lý·Đường 7 tầng·Ngày·Người lập·Trạng thái) đọc từ report_registry/workflow_registry/task_registry; Master = tổng hợp 4 list theo thời gian |
(n/a) | đọc per-mother registry | (n/a) | gộp 4 list theo cây 7 tầng | KHÔNG (data): per-mother "*_registry" hầu hết vắng; chỉ table_registry/v_report_home cho mặt MOUT. Master = tổng hợp UI (eco-nav), không phải bảng dữ liệu |
3. Registry / binding hiện có (đối chiếu thiết kế ↔ live)
| Bảng | Tồn tại? | Owner | Số dòng (thật) | Vai trò thiết kế | Trạng thái |
|---|---|---|---|---|---|
field_registry |
KHÔNG (to_regclass NULL) | — | — | MOIT: field↔cột↔widget↔validation | KHÔNG CÓ |
input_form_registry |
KHÔNG | — | — | MOIT: form contract (target+field_set+layout+routing) | KHÔNG CÓ |
tier_registry |
KHÔNG | — | — | 7 tầng quản trị (cả 4 mẹ tiêu thụ) | KHÔNG CÓ |
output_table_registry |
KHÔNG | — | — | MOUT: bảng output | KHÔNG CÓ |
report_registry |
KHÔNG | — | — | MOUT: khuôn báo cáo đã đúc | KHÔNG CÓ |
dot_function_registry |
KHÔNG | — | — | MOT: registry hàm DOT | KHÔNG CÓ (de-facto = dot_iu_command_catalog) |
task_template_registry |
KHÔNG | — | — | MOW: khuôn task | KHÔNG CÓ |
role_in_process / iu_process_binding |
KHÔNG | — | — | MOW role-in-process / binding | KHÔNG CÓ |
binding_registry |
CÓ | directus | 0 | (thiết kế kỳ vọng field↔form) — thực = code,name,binding_type,source_table,source_column,source_view,output_format,description,status |
CÓ NHƯNG RỖNG + sai hình so với MOIT |
forms |
CÓ | directus | 0 | form (kiểu Directus: id,key,title,schema,submit_label,on_success,redirect_url,status) | CÓ NHƯNG RỖNG |
block_form |
CÓ | directus | 0 | block↔form (id,title,headline,form) | CÓ NHƯNG RỖNG |
collection_field_standards |
CÓ | directus | 11 | chuẩn field theo collection (field_name,field_type,tier 1/2,required,field_status) — tier=mức quan trọng (1 lõi/2 phụ), KHÔNG phải 7 tầng |
CÓ + SEEDED |
field_type_equivalences |
CÓ | directus | 4 | tương đương kiểu (type_a,type_b) | CÓ + SEEDED |
trigger_registry |
CÓ | directus | 107 | trigger_name,table_name,trigger_type,function_name,fires_on,timing,enabled,status | CÓ + SEEDED |
design_templates |
CÓ | directus | 1 | Điều-28 template — chỉ 1 dòng TPL-002 "DirectusMatrix" (pivot/matrix view, instance_collection=pivot_definitions). Không có template form/node |
CÓ NHƯNG CHƯA SEED đủ (1 matrix) |
governance_registry |
CÓ | directus | 9 | 4 mẹ = factory (xem §8-C); + GOV-COUNCIL/DOT/KG-SYS/NRM-SYS/SIV | CÓ nhưng 4 mẹ draft |
collection_registry |
CÓ | directus | 168 | hợp đồng collection (FK group→collection_groups) | CÓ + SEEDED |
table_registry |
CÓ | directus | 28 | hợp đồng bảng UI (nền cụm reports) | CÓ + SEEDED |
approval_requests |
CÓ | directus | 231 | hàng phê duyệt governance/birth (xem §8-B) | CÓ + SEEDED (khác miền MOW) |
workflow_change_requests |
CÓ | directus | 3 | đề xuất sửa workflow MOW | CÓ (mỏng, MOW-only) |
qt001_tier_registry (+_rule_registry,_v2) |
CÓ | directus | CHƯA XÁC MINH (ungranted, reltuples -1) | tier tự-trị DOT (tier_code,tier_rank,eligibility_rule,allowed_action,scale_risk,parity) — KHÔNG phải cây 7 tầng tổ chức | CÓ nhưng sai miền cho MOW-7-tầng |
dot_iu_command_catalog |
CÓ | directus | 47 | catalog DOT (IU/piece/collection/health) | CÓ nhưng 0 lệnh mother-verb |
event_type_registry / event_outbox |
CÓ | workflow_admin | 40 / ~209,989 | (Vòng 1) — 0 type miền task/workflow active | CÓ NHƯNG CHƯA NỐI task |
4. Luồng liên thông 4 mẹ
| Luồng | Có khóa thật? | Soft-ref? | Bảng/cột | Đủ/thiếu | Bằng chứng |
|---|---|---|---|---|---|
| I1. MOIT form → tạo/cập nhật task MOT | KHÔNG | — | (không có) | THIẾU | field_registry/input_form_registry vắng; không cơ chế form-submit→task |
| I2. MOW workflow/step → sinh task MOT | KHÔNG (chỉ ngược 1:1) | Có | workflows.task_id→tasks (soft, 1 WF↔1 task); workflow_steps không có task_id |
THIẾU sinh task từ step | constraint: 0 FK; steps thiếu task_id |
| I3. MOT task → mở MOIT form nhập | KHÔNG | — | tasks không có form_ref | THIẾU | input_form_registry vắng; tasks 26 cột không có form_ref |
| I4. MOT task → hiển thị MOUT reference/output | KHÔNG | — | tasks không có output_ref/report_ref | THIẾU | report_registry vắng |
| I5. MOW proposal → wcr → duyệt → apply | PARTIAL (mềm) | Có | workflow_change_requests(workflow_id,task_id,dsl_diff,approved_by,applied_at,status) |
CÓ phần lõi (2/3 applied), không FK, không quorum | sample WCR-001/002 applied by 'codex'; WCR-003 draft |
| I6. MOUT report → phân phối email/MOT task | KHÔNG | — | không recipient/distribution; không report→task | THIẾU | report_run/recipient/distribution vắng |
| I7. Master hub → list "đã đúc" từng mẹ | PARTIAL (UI) | — | chỉ table_registry/v_report_home (mặt MOUT) | THIẾU data | per-mother registry vắng; Master = eco-nav UI |
| I8. MODW (trong MOW) — anchor nối dữ liệu | KHÔNG | — | normative_registry/universal_rule_registry tồn tại, không anchor key tới workflows | THIẾU | không cột nối MODW↔workflows |
Kết luận I: liên thông mới ở UI (eco-nav) + 1 phần MOW-internal (wcr). CHƯA có khóa dữ liệu thật xuyên 4 mẹ; thiếu hẳn anchor key 7 tầng dùng chung.
5. Ma trận khóa PK / FK / soft-ref (đầy đủ)
Mọi bảng dưới đây đều trong
directus.public⇒ cột "Cùng DB?" = Y (cùng database, cùng schema). Khuyến nghị là phân loại trên giấy, KHÔNG phải lệnh sửa DB.
| source.cột | DB/schema | target.cột | DB/schema | Cùng DB? | Loại hiện tại | Index? | Null? | Orphan? | Loại thiếu | Khuyến nghị (giấy) | Lý do | Bằng chứng |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
tasks.id |
directus.public | (PK) | — | Y | PK | ✔ | no | — | — | giữ | định danh task | tasks_pkey |
task_comments.task_id |
directus.public | tasks.id |
directus.public | Y | soft-ref | ? | yes | 1 orphan | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM-CÓ-INDEX | có 1 orphan → dọn trước khi FK | count=1 |
task_checkpoints.task_id |
directus.public | tasks.id |
directus.public | Y | soft-ref | ? | yes | 0 | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM-CÓ-INDEX | sạch nhưng không cưỡng chế | orphan=0 |
task_checkpoints.workflow_step_id |
directus.public | workflow_steps.id |
directus.public | Y | soft-ref | ? | yes | CHƯA KT | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM | link checkpoint↔step | cột tồn tại |
workflows.task_id |
directus.public | tasks.id |
directus.public | Y | soft-ref | ? | yes | 0 | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM-CÓ-INDEX | 1 WF↔1 task | orphan=0 |
workflows.parent_workflow_id |
directus.public | workflows.id |
directus.public | Y | soft-ref | ? | yes | CHƯA KT | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM | phân cấp WF | cột tồn tại |
workflows.category_id |
directus.public | workflow_categories.id |
directus.public | Y | soft-ref | ? | yes | CHƯA KT | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM-CÓ-INDEX | phân loại | cột tồn tại |
workflow_steps.workflow_id |
directus.public | workflows.id |
directus.public | Y | soft-ref | ? | no? | 0 | CÓ NHƯNG CHƯA NỐI |
NÂNG-FK-CỨNG khả thi (sau khi index) | cạnh xương sống, sạch | orphan=0 |
workflow_step_relations.from_step_id |
directus.public | workflow_steps.id |
directus.public | Y | soft-ref | ? | no? | 0 | CÓ NHƯNG CHƯA NỐI |
NÂNG-FK-CỨNG khả thi | đồ thị A→B, sạch | orphan=0 |
workflow_step_relations.to_step_id |
directus.public | workflow_steps.id |
directus.public | Y | soft-ref | ? | no? | 0 | CÓ NHƯNG CHƯA NỐI |
NÂNG-FK-CỨNG khả thi | đồ thị A→B, sạch | orphan=0 |
workflow_change_requests.workflow_id |
directus.public | workflows.id |
directus.public | Y | soft-ref | ? | yes | 0 | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM-CÓ-INDEX | proposal↔WF | orphan=0 |
workflow_change_requests.task_id |
directus.public | tasks.id |
directus.public | Y | soft-ref | ? | yes | 0 | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM | proposal↔task | orphan=0 |
workflow_change_requests.approved_by |
directus.public | (người duyệt) | — | Y | text tự do ('codex') |
— | yes | — | CÓ NHƯNG CHƯA NỐI |
CHƯA ĐỦ DỮ LIỆU | không trỏ user thật | sample |
tasks.assigned_to |
directus.public | directus_users.id? |
directus.public | Y | text tự do (claude_code/CLI) |
— | yes | — | CÓ NHƯNG CHƯA NỐI |
CHƯA ĐỦ DỮ LIỆU | không phải user UUID | dist |
approval_requests.proposed_action_code |
directus.public | apr_action_types.action_code |
directus.public | Y | FK CỨNG | ✔ | yes | — | — | giữ | đã FK | fk_apr_action_type |
approval_requests.request_type_code |
directus.public | apr_request_types.request_code |
directus.public | Y | FK CỨNG | ✔ | yes | — | — | giữ | đã FK | fk_apr_request_type |
approval_requests.entity_type/entity_code/target_collection |
directus.public | (đa hình) | directus.public | Y | soft-ref | — | yes | — | CÓ NHƯNG CHƯA NỐI |
GIỮ-MỀM | đa hình (collection/dot_tool/axis…) | dist §8-B |
governance_registry.domain |
directus.public | dot_domains.code |
directus.public | Y | FK CỨNG | ✔ | yes | — | — | giữ | đã FK | fk_gov_registry_domain |
governance_registry.created_by_law |
directus.public | normative_registry.code |
directus.public | Y | FK CỨNG | ✔ | yes | — | — | giữ | đã FK | fk_gov_registry_created_by_law |
governance_registry.output_target |
directus.public | (tên bảng) | directus.public | Y | text (GOV-MOIT→input_form_registry không tồn tại) |
— | yes | dangling | CÓ NHƯNG CHƯA NỐI |
CHƯA ĐỦ DỮ LIỆU | trỏ bảng vắng | §8-C |
collection_registry.group |
directus.public | collection_groups.code |
directus.public | Y | FK CỨNG | ✔ | yes | — | — | giữ | đã FK | fk_collection_group |
field_registry.collection_code→column (thiết kế) |
— | (không tồn tại) | — | Y | — | — | — | — | KHÔNG CÓ |
CHƯA ĐỦ DỮ LIỆU | bảng nguồn không tồn tại | to_regclass NULL |
input_form_registry.field_set[]→field_registry (thiết kế) |
— | (không tồn tại) | — | Y | — | — | — | — | KHÔNG CÓ |
CHƯA ĐỦ DỮ LIỆU | cả 2 bảng vắng | to_regclass NULL |
Kết luận G: Khóa nên cứng được (sạch, cùng DB): workflow_steps.workflow_id, workflow_step_relations.from/to_step_id (xương sống đồ thị WF, 0 orphan). Khóa nên mềm-có-index: các task_id/workflow_id/category_id (dọn 1 orphan ở task_comments trước). Khóa nguy hiểm nếu nối ngay: assigned_to/approved_by (text, không trỏ user thật) và governance_registry.output_target (GOV-MOIT trỏ bảng không tồn tại) — không được FK. Khóa MOIT (field_registry/input_form_registry) = CHƯA ĐỦ DỮ LIỆU vì bảng không tồn tại.
6. Orphan check (soft-ref chính)
-- NOT EXISTS check, read-only
| Soft-ref | Orphan |
|---|---|
task_comments.task_id → tasks.id |
1 |
task_checkpoints.task_id → tasks.id |
0 |
workflows.task_id → tasks.id |
0 |
workflow_steps.workflow_id → workflows.id |
0 |
workflow_step_relations.from_step_id → workflow_steps.id |
0 |
workflow_step_relations.to_step_id → workflow_steps.id |
0 |
workflow_change_requests.workflow_id → workflows.id |
0 |
workflow_change_requests.task_id → tasks.id |
0 |
Hiện sạch (chỉ 1 orphan ở
task_comments— giảm so Vòng 1 vì dữ liệu task đã đổi). Không kiểm được orphan chofield_registry.field_set/input_form_registry(bảng không tồn tại) và choqt001_tier_*(ungranted).
7. Phân loại thiếu (3 mức)
| Miếng thiếu | Loại thiếu | Bằng chứng | Hệ quả với Pilot |
|---|---|---|---|
field_registry, input_form_registry, tier_registry |
KHÔNG CÓ | to_regclass=NULL (control binding_registry/tasks resolve) |
MOIT không bind/submit được |
output_table_registry, report_registry, report_run/history, recipient/distribution |
KHÔNG CÓ | name-scan + to_regclass NULL | MOUT không đúc/lưu/phân phối theo thiết kế |
dot_function_registry, task_template_registry, role_in_process, iu_process_binding |
KHÔNG CÓ | to_regclass NULL | thiếu nền MOT/MOW |
Cột EXTEND workflows/workflow_steps (owner_gov_code, design_health, iu_ref, dot_ref, event_ref…) + view v_mow_design_* |
KHÔNG CÓ | col-list + view-scan (chỉ v_registry_/v_report_) | CanvasNode 22 trường không render từ PG |
| Bảng cây 7 tầng tổ chức (Lĩnh vực→Công việc) | KHÔNG CÓ | tier_registry vắng; qt001_tier_* là tier tự-trị DOT; workflows.level chỉ =1 | không anchor/resolvePath thật |
Lớp run/instance workflow; cột started_at/done_at/anchor_node trên tasks |
KHÔNG CÓ | Vòng 1 + col-list | không track "đang chạy"/2 chiều |
| DOT mother-verb (create-task, set-status, render/submit-form, create/distribute-report, propose) | KHÔNG CÓ | catalog scan (chỉ create_workflow_from_steps, staging_approve) | tự động hóa đường ghi chưa có |
binding_registry, forms, block_form |
CÓ NHƯNG RỖNG | count=0,0,0 | tồn tại khung, chưa seed/nối |
design_templates (1 matrix) |
CÓ NHƯNG CHƯA SEED đủ | count=1, TPL-002 matrix | thiếu template form/node |
4 mẹ trong governance_registry |
CÓ NHƯNG CHƯA NỐI (draft) | status=draft; GOV-MOIT→bảng vắng | factory chưa kích hoạt |
workflow_change_requests (3) |
CÓ NHƯNG CHƯA NỐI | thiếu step/tier/quorum; 0 FK | proposal MOW chưa đủ trường |
approval_requests (231) |
CÓ NHƯNG CHƯA NỐI | entity_type ∈ collection/dot_tool/axis… (0 task/workflow) | không governance proposal mẹ |
event_outbox/event_type_registry |
CÓ NHƯNG CHƯA NỐI | Vòng 1: 0 type task active | analytics task không có nơi hứng |
row-perm cá nhân hóa trên tasks |
KHÔNG CÓ | chỉ feedbacks.read có $CURRENT_USER |
"việc của tôi" không lọc được |
8. Trả lời chi tiết Nhóm A–J (kèm SELECT + kết quả thật)
Nhóm A — Registry / binding MOIT
- A1
field_registryđủ để field trỏ cột DB?SELECT to_regclass('public.field_registry')→ NULL ⇒ KHÔNG TỒN TẠI. (Hợp đồng thiết kế: code·name·collection_code·field_kind·data_type·is_required·interface·validation·owner_mother·status — DDL 2026-05-29 chỉ chạyBEGIN..ROLLBACK.) - A2
input_form_registryđủ để form chạy?to_regclass=NULL ⇒ KHÔNG TỒN TẠI.forms(Directus-style) tồn tại nhưng 0 dòng;block_form0 dòng. - A3 Đường truy vết form_id→field_code→collection_code→column→target_collection? KHÔNG — đứt ngay khâu đầu (2 registry vắng).
- A4
binding_registryvai trò? Tồn tại, 0 dòng, hình dạng =code,name,binding_type,source_table,source_column,source_view,output_format,description,status⇒ là binding nguồn→output (kiểu MOUT/view), KHÔNG nối field↔form như MOIT cần. PK=code, 0 FK. - A5
trigger_registrynối form submit/sinh task/trigger workflow? Tồn tại 107 dòng (trigger_name,table_name,function_name,fires_on,timing,enabled,status) — là catalog mô tả trigger DB, không có cơ chế nối form→task; không có dòng nào trỏforms/field_registry(các bảng đó rỗng/vắng). - Kết luận A: MOIT bind field → cột DB → form submit thật: KHÔNG.
Nhóm B — MOW proposal / sinh việc / phê duyệt
- B1 Proposal ghi vào đâu?
workflow_change_requests(3 dòng). Cột:id, workflow_id, change_type, title, description, position_context, suggested_actor_type, suggested_block_id, status, schema_warnings, dsl_diff(jsonb), approved_by(text), applied_at, task_id, date_created, code, _dot_origin.- Có: target workflow (
workflow_id), change_type (add_step/add_block), payload đề xuất (dsl_diff), người duyệt (approved_by='codex' text), ngày duyệt/áp dụng (applied_at), trạng thái (draft/applied). - THIẾU: target step (chỉ
suggested_block_id), target tier T1–T7, số chữ ký/quorum (Điều 32 ≥2 — không có cột), người đề xuất riêng (chỉ user_created qua Directus), reject reason. - Mẫu: WCR-001(add_step,applied,by codex), WCR-002(add_block,applied), WCR-003(add_step,draft). Cả 3 đều
workflow_id=1, task_id=10.
- Có: target workflow (
- B2 Hai đường PA1/PA2? PA1 (duyệt→áp dụng): biểu diễn được bằng
statusdraft→approved→applied +applied_at. PA2 (staging→duyệt→nạp): CHƯA THẤY bảng staging/queue cho MOW; chỉdot_iu_staging_approve(miền IU). ⇒ CHƯA ĐỦ. - B3 Trigger sinh task? trigger→workflow→step→task: không có engine;
workflow_stepskhông cótask_id; không cơ chế sinh task từ step (Vòng 1 + 0 FK). - B4
workflow_stepsbiết sinh task loại gì? Cột:step_type(wait_for_event/human_checkpoint/agent_call/condition/action),actor_type,config(jsonb) — không có task_type_ref/executor_class/assignee_rule/form_ref/output_ref.configjsonb CHƯA mở (CHƯA XÁC MINH). - Phụ —
approval_requests(231): hệ phê duyệt governance/birth riêng, không phải MOW proposal. request_type:birth_orphan(143),reclassify(18),schema_modify(15),fix_repair_dot(25),topic_promotion(7 pending)…; entity_type ∈ {collection, dot_tool, topic_node, axis, facet, process…} — 0 dòng task/workflow/workflow_step. status ∈ {applied, expired, pending, rejected, approved}. ⇒ 2 hệ phê duyệt song song, chưa nối (wcr cho DSL workflow; approval_requests cho governance). - Kết luận B: MOW proposal có chỗ lưu phần lõi nhưng KHÔNG đủ theo thiết kế (thiếu step/tier/quorum/chữ ký).
Nhóm C — MOW canvas 7 tầng & Master-list
- C1 T7→T1 map vào đâu? KHÔNG có bảng cây 7 tầng tổ chức.
tier_registryvắng.qt001_tier_registry= tier tự-trị DOT (tier_code/eligibility_rule/allowed_action/scale_risk) — sai miền.collection_field_standards.tier= mức quan trọng field (1/2).workflows.levelchỉ có giá trị1. ⇒ 7 tầng (Lĩnh vực/Công ty/Khối/Phòng ban/Chuyên môn/Nhiệm vụ/Công việc) chỉ tồn tại trong mock-data.json (UI), không có nền PG. - C2
CanvasNode.idtừ đâu? Thiết kế:workflows.id/workflow_steps.id/tbl_*.id. Có (bảng thô). - C3
parent_id?workflows.parent_workflow_id/workflow_steps.workflow_id(soft, không FK). Có. - C4
workflow_ref/task_type_ref/iu_refcó cột thật?workflow_ref=workflows.id (có).task_type_ref/iu_ref/dot_ref/event_ref: KHÔNG — col-listworkflow_steps=id,workflow_id,step_key,step_type,title,description,actor_type,config,position_x,position_y,block_id,sort_order,date_created,date_updated,trigger_in_text,trigger_out_text,code,checkpoint_set_id,_dot_origin,status(không có step_iu_ref/dot_ref/event_*_ref).workflowscũng không có owner_gov_code/active_design_version/freeze_active/design_health/design_iu_ref. ⇒ toàn bộ cột "+8/+7 EXTEND" của hợp đồng chưa áp. - C5
proposal_count? =count(workflow_change_requests WHERE status IN draft/submitted/review)per node → tính được (hiện 1 draft cho workflow_id=1). - C6
permission_actions? Cần predicate Điều-37 theo role (Directus) — chưa có (server-computed, chưa có cột/view). - C7
instance_data? THIẾU (không có lớp workflow_run/instance — Vòng 1). - C8 Master-list nguồn? view
v_mow_design_workflow/v_mow_design_step: KHÔNG TỒN TẠI (view-scan chỉ thấyv_registry_*,v_report_home,v_report_pg). 4 mẹ đã đăng kýgovernance_registryfactory: GOV-MOW→workflows, GOV-MOT→tasks, GOV-MOUT→design_templates, GOV-MOIT→input_form_registry(vắng); tất cả status=draft, primary_collection=NULL. - Kết luận C: MOW canvas + master-list render từ PG thật, không hardcode: KHÔNG (thiếu EXTEND cols, views, tier_registry, cây 7 tầng, instance).
Nhóm D — MOT cá nhân hóa / inbox / quyền theo hàng
- D1
taskscó assignee/PIC? Có cộtassigned_to(varchar). - D2 Assignee trỏ user thật? KHÔNG —
SELECT assigned_to, count(*):null(4),claude_code(2),CLI(2),Claude Desktop(1),claude(1) ⇒ text danh tính agent, không phảidirectus_usersUUID. (tasks=10; status active=7/done=2/draft=1.) - D3 Role/tier/department phân việc? Không trên
tasks(không cột department/tier/role). - D4 Directus row-filter
assigned_to = current_user?SELECT … WHERE permissions ILIKE '%CURRENT_USER%'→ chỉ 1 dòng:feedbacks.read={user_created _eq $CURRENT_USER}. KHÔNG có trêntasks(Vòng 1: tasks read Public, row_filter{}). - D5 "Việc của tôi" bằng cách nào? Directus row-filter: chưa có. Gateway/DOT filter: chưa có. ⇒ Hiện chỉ lọc được ở UI (client-side), không cưỡng chế.
- D6 Admin/master thấy tất cả? Có — Public read
tasksrow_filter{}⇒ ẩn danh đã thấy tất cả (ngược lại: không che được). - D7 Task card map vùng nào? header=
name/status/priority/deadline; input=content_targets/content_rules/content_checklist; reference/output=content_reports/content_verify/content_test(text, không có output_ref thật); instruction=content_prompt/content_plan; comments/checkpoints=task_comments(75)/task_checkpoints(9); actions=update qua Directus Agent Policy. Các vùng nội dung CÓ (text); link form/output thật KHÔNG. - Kết luận D: MOT cá nhân hóa theo người + master theo admin CHƯA đủ (thiếu row-perm + assignee thật).
Nhóm E — MOUT report / bản đúc / phân phối
- E1 Registry khuôn báo cáo?
report_registry/output_table_registry/mout_registry: KHÔNG TỒN TẠI. Gần nhất =table_registry(28). - E2 Nơi lưu bản đúc/lịch sử chạy?
report_run/report_history/report_runs: KHÔNG TỒN TẠI (name-scan NULL). Mặt sống = snapshotv_report_home/v_report_pg(là table relkind 'r', không phải view) — từ cụm pg-read-pg. - E3
report_run_id? KHÔNG. - E4 Nguồn output table/view/matview?
v_report_*snapshot tables +table_registry. Không có matviewv_report_%(relkind 'm'); cácv_report_*là bảng snapshot. - E5 Phân phối email/MOT?
recipient_registry/distribution_registry/distribution: KHÔNG TỒN TẠI. report→task: không có. - E6 MOUT master-list nguồn? Thiết kế =
report_registry(report_id,code,title,anchor_node,anchor_tier,schedule,distribute[],output_url,status) → vắng. Thực =table_registry/v_report_home.design_templates(output target của GOV-MOUT) = 1 dòng TPL-002 "DirectusMatrix" (matrix/pivot view). - Kết luận E: MOUT có registry + nơi lưu bản đúc/report run/phân phối: KHÔNG (chỉ có mặt reports pg-read-pg, cơ chế khác thiết kế).
Nhóm F — Đường ghi tự động / DOT / Secret Manager / token
- F1 Đường ghi hiện có cho 4 mẹ: (a) Directus REST/SDK (role Agent — đổi
tasks.status; AI Agent không gồm status) = đường ghi thật duy nhất đang dùng; (b) PG triggers (side-effect, không emit event task); (c) DOT CLI ngoài DB (/opt/incomex/dot/*— file-based, KHÔNG trong catalog; CHƯA XÁC MINH lại vòng này); (d) Directus flows (sync Agent Data/Changelog). Nuxt KHÔNG ghi DB (Điều 28 zero-logic — thiết kế). - F2 DOT sẵn cho mother-verb? Catalog scan: chỉ
dot_iu_create_workflow_from_steps+dot_iu_staging_approve. KHÔNG có get-canvas / propose-change / get-task-card / create-task / update-task-status / render-form / submit-form / create-report / distribute-report. - F3 DOT/agent lấy token từ Secret Manager? Trong
publicKHÔNG có bảng secret/vault/credential/api_key (name-scan NULL) ⇒ credential không nằm trong DB (Secret Manager external — env/docker). Cơ chế cụ thể (metadata): CHƯA XÁC MINH (không đọc secret value; không có tool đọc env trong nhịp này). - F4 UI/Nuxt ghi thẳng DB? Thiết kế = KHÔNG (Nuxt zero-logic, ghi qua Directus/DOT). Live: đường ghi qua Directus REST (Agent token).
- F5 Đường ghi phù hợp nguyên tắc (Nuxt zero-logic + DOT-pair validate + Secret Manager + PG/Directus SoT)? Hiện trạng: nguyên tắc chưa hiện thực cho 4 mẹ — DOT-pair cho form/task/report chưa tồn tại; chỉ Directus REST.
- Kết luận F: Tự động hóa đường ghi qua DOT/agent + Secret Manager mà không đưa token cho UI: CHƯA XÁC MINH/PARTIAL (Secret không ở DB = đúng nguyên tắc; nhưng DOT mother-verb vắng nên chưa có đường tự động hóa thật).
Nhóm G — Ma trận khóa
Xem §5 + §6. Tóm: toàn cụm task/workflow/proposal PK-only, 0 FK; FK cứng chỉ ở registry tĩnh (governance_registry, collection_registry, approval_requests→apr_*). Mọi khóa cùng directus.public.
Nhóm H — Analytics / audit / cải tiến
- H1 Nơi hứng sự kiện phân tích?
event_outbox(~209,989) chỉ eventsystem/health (Vòng 1).workflow_change_requests(3) có approved_by/applied_at (đo được ai duyệt/đã áp dụng) nhưng không có: tầng đề xuất, bước sửa cụ thể (chỉ block), thời lượng, phút tiết kiệm, số quy trình ảnh hưởng.approval_requests(231) có reviewed_by/reviewed_at/status (đo governance) nhưng khác miền mẹ. - H2 correlation_id xuyên suốt?
event_outboxcócorrelation_id(Vòng 1) nhưngworkflow_change_requests/tasks/approval_requestsKHÔNG có correlation_id chung ⇒ không nối proposal→task→approval→execution→report. - H3
event_outboxdùng được cho analytics này? KHÔNG — bị chặn vì thiếu event_type miền task/workflow active (Vòng 1:process.step.*inactive). - H4
task_comments/changelog đủ phân tích? Một phần (nhật ký tự do) — không cấu trúc đủ để đo tiết kiệm/ảnh hưởng. - Kết luận H: Tầm nhìn analytics cải tiến có nơi hứng dữ liệu: KHÔNG (chưa có event task + chưa có correlation_id xuyên suốt).
Nhóm I — Liên thông 4 mẹ
Xem §4. Kết luận I: 4 mẹ có khóa liên thông dữ liệu thật: KHÔNG (mới liên thông UI + 1 phần MOW-internal wcr).
Nhóm J — Lát cắt pilot xuyên tầng tối thiểu
- J1 Lát cắt
MOIT chọn field đã đăng ký → submit qua DOT → ghi task/comment → MOT thấy → xác nhận → master/MOUT đọc lại trạng tháichạy được? KHÔNG (toàn mạch) — khâu MOIT (chọn field đã đăng ký + submit qua DOT) bất khả vìfield_registry/input_form_registrykhông tồn tại và 0 DOT submit. - J2 Nếu làm được, dùng bảng/cột nào? Nửa MOT chạy được:
tasks(status/content_*) +task_comments(Directus Agent), đọc lại qua Public read +v_report_*. (Đây chính là Pilot 0 của Vòng 1.) - J3 Thiếu đúng miếng nào? Khâu MOIT→DB: thiếu
field_registry+input_form_registry(+ ≥1 design_template kiểu form + cờ routing) + DOT submit executor. - J4 Cần tạo bảng mới? CÓ — tối thiểu
field_registry+input_form_registrycho mạch xuyên tầng thật. (Nửa MOT không cần bảng mới.) - J5 Cần thêm field? Cho liên thông: cột
anchor_node/anchor_tier(neo 7 tầng) +started_at/done_at; cho MOT cá nhân: row-perm + assignee user thật. - J6 Cần Kestra? KHÔNG cho nửa MOT (Vòng 1). Cho engine workflow thật thì thiếu lớp instance (ngoài phạm vi).
- J7 Cần event_outbox? KHÔNG bắt buộc (nhật ký = task_comments/changelog).
- J8 Phân loại miếng thiếu:
field_registry/input_form_registry/DOT-submit = KHÔNG CÓ;binding_registry/forms/design_templates(form)= CÓ NHƯNG RỖNG/CHƯA SEED; 4 mẹ governance = CÓ NHƯNG CHƯA NỐI (draft). - Kết luận J: Pilot xuyên tầng tối thiểu chạy bằng cái hiện có: KHÔNG (phải tạo ≥2 bảng MOIT). Pilot nửa-MOT (đọc task→nhập→đổi status→đọc lại): CÓ (đã xác nhận ở Vòng 1).
9. Danh sách "miếng còn thiếu" (phân nhóm)
Khóa định nghĩa: field_registry, input_form_registry, tier_registry, output_table_registry, report_registry, dot_function_registry, task_template_registry, role_in_process, iu_process_binding, bảng cây 7 tầng tổ chức, cột EXTEND workflows/workflow_steps (owner_gov_code/design_health/iu_ref/dot_ref/event_ref…), view v_mow_design_*, design_template kiểu form/node.
Khóa vận hành: lớp workflow_run/instance/step_run/task_run; report_run_id; cột assigned_at/started_at/done_at; anchor_node/anchor_tier trên tasks/reports; bảng staging/queue MOW (PA2).
Khóa audit/cải tiến: correlation_id chung xuyên workflow_change_requests↔tasks↔approval_requests↔report; event_type miền task/workflow active; cột đo (thời lượng, phút tiết kiệm, số quy trình ảnh hưởng); thống nhất 2 hệ phê duyệt (wcr ↔ approval_requests).
Quyền/secret/đường ghi: row-perm $CURRENT_USER trên tasks; assigned_to trỏ directus_users thật; DOT mother-verb (create-task/set-status/render-form/submit-form/create-report/distribute); kích hoạt 4 factory governance (draft→active) + sửa GOV-MOIT.output_target (đang trỏ bảng vắng); cơ chế Secret Manager (metadata) CHƯA XÁC MINH.
Analytics/report: nơi hứng event task; report run/history; recipient/distribution; báo cáo→task.
10. Nguy cơ nếu nối PG ngay mà không siết khóa
- 0 FK toàn cụm vận hành ⇒ soft-ref trôi âm thầm (đã có 1 orphan
task_comments); nối hệ thống ngay = rủi ro tham chiếu gãy. governance_registry.output_targetcủa GOV-MOIT trỏinput_form_registryKHÔNG TỒN TẠI ⇒ kích hoạt factory MOIT sẽ ghi vào bảng vắng.assigned_to/approved_bylà text agent (không phải user) ⇒ không lọc/audit theo người thật được; nếu phơi "việc của tôi" sẽ lộ toàn bộ task (Public read{}).- Không lớp run/instance + không engine (Vòng 1) ⇒ "đang chạy" không track được; bước
wait_for_event/agent_callchỉ là mô tả. - KB nói registry MOIT "đã có" nhưng live không có ⇒ hành động theo KB cũ sẽ xây trên tiền đề sai.
- 2 hệ phê duyệt song song (
workflow_change_requestsvsapproval_requests) chưa nối ⇒ nhập nhằng "ai cai quản proposal của mẹ". binding_registryrỗng + sai hình so với nhu cầu MOIT ⇒ nếu tái dùng nhầm sẽ lệch ngữ nghĩa (binding nguồn→output ≠ field↔form).- Worker chết / event task vắng (Vòng 1) ⇒ bất kỳ "đẩy event" nào hiện không có người tiêu thụ.
11. Danh sách "CHƯA XÁC MINH"
transaction_read_only/default_transaction_read_only(tool chặncurrent_setting).- Số dòng + shape thật của
field_registry/input_form_registry/tier_registry— moot vìto_regclass=NULL (không tồn tại); giả định Postgres chuẩn không RLS trênpg_catalog. Nếu môi trường có lớp lọc catalog-theo-grant đặc biệt thì còn khả năng "tồn-tại-nhưng-ẩn" (xác suất thấp, chưa loại trừ 100%). qt001_tier_registry/_rule_registry/_v2: nội dung + số dòng (ungranted, reltuples -1).workflow_steps.config(jsonb): cấu hình actor/agent — chưa mở./opt/incomex/dot/*CLI (dot-report-publish, dot-pg-atomic-apply…): file-based, ngoài catalog — chưa đọc lại vòng này (chỉ biết qua KB/memory).- Cơ chế Secret Manager thật (env/docker secret) — không đọc value, metadata chưa soi.
ai_tasks(collection riêng + 2 flow Auto-Dispatch/Auto-Create Reviewer — Vòng 1) — chưa khảo sát cấu trúc/quan hệ vớitasks.- Có token sống cho role Agent (đường ghi
tasks.status) — mới xác minh permission, chưa xác minh token dùng được. v_report_home/v_report_pgcó đúng là mặt "đã đúc" MOUT không — suy từ memory, chưa truy vết đầy đủ vòng này.
12. Mâu thuẫn preview ↔ KB (cần người chốt)
MÂU THUẪN — CẦN NGƯỜI CHỐT— KBmoit-input-runnable-architecture-notes.md(2026-06-18) khẳng định "LỚP KẾT NỐI ĐÃ CÓ TRONG DB PRODUCTION… field_registry, input_form_registry, tier_registry…" ↔ live PG 2026-06-29:to_regclass=NULL (KHÔNG TỒN TẠI). Cùng đó: survey 2026-05-28 (02-candidate-registry-survey) = ABSENT; doc 2026-05-29 (01-production-schemas) = DDL chỉ chạyBEGIN..ROLLBACK(rolled back, deferred chờ Điều 32). ⇒ Cần chốt: các bảng từng được tạo rồi DROP, hay note 2026-06-18 là nguyện vọng/nhầm? (Ghi cả ba nguồn, không tự chọn.)- Hợp đồng MOW node-card (
03-node-card-data-contract, 2026-05-29) coi cột EXTENDworkflows/workflow_steps+ viewv_mow_design_*là "existing+EXTEND substrate" ↔ live: EXTEND cols & views KHÔNG TỒN TẠI. ⇒ hợp đồng tham chiếu nền chưa hiện thực (design-vs-impl gap, cần chốt thứ tự đúc). - MOUT design (
mout-governance-master-notes/mout-builder-v3) dựareport_registry/output_table_registry↔ live dùngtable_registry+v_report_*(cơ chế pg-read-pg khác). ⇒ cần chốt MOUT đi theo report_registry mới hay mở rộng table_registry. - Survey 2026-05-28 "No factory registered" ↔ live: 4 mẹ đã đăng ký factory (draft, GOV-MOIT lỗi output_target). ⇒ tiến hóa, không phải mâu thuẫn — nhưng cần chốt việc kích hoạt draft→active + sửa output_target.
- Preview HTML: đọc được (MOW canvas v2, MOUT builder v3, master-hub) nhưng nội dung mỏng;
moit-builder-v3.html→ HTTP 404 (URL KHÔNG ĐỌC ĐƯỢC BẰNG TOOL — DÙNG KB THAY THẾ). Không mâu thuẫn trực tiếp với KB, chỉ thiếu.
13. Ghi rõ về FK cứng & cùng database
Tất cả bảng/khóa ứng viên trong báo cáo này đều thuộc cùng một database directus, cùng schema public ⇒ cột "Cùng DB?" = Y cho mọi dòng ma trận khóa. Do đó không có khuyến nghị NÂNG-FK-CỨNG nào bị hạ vì lý do khác-DB. Tuy nhiên, theo §3.1/§5, các khóa sau bị hạ CHƯA ĐỦ DỮ LIỆU vì lý do dữ liệu (không phải khác-DB): field_registry.collection_code/input_form_registry.field_set (bảng nguồn không tồn tại), tasks.assigned_to/workflow_change_requests.approved_by (text, không trỏ user), governance_registry.output_target (trỏ bảng vắng). Các khóa đủ điều kiện FK cứng cùng DB (sạch, 0 orphan): workflow_steps.workflow_id, workflow_step_relations.from_step_id/to_step_id — đã xác minh cùng directus.public.
14. Kết luận đóng K1–K14
| # | Câu hỏi | Đáp | Bằng chứng 1 dòng |
|---|---|---|---|
| K1 | PG đủ registry/binding để MOIT bind field→cột→form submit? | KHÔNG | field_registry/input_form_registry to_regclass=NULL; forms/binding_registry=0; 0 DOT submit |
| K2 | PG đủ khóa để MOW canvas 7 tầng map node→workflow/step/IU? | KHÔNG | thiếu EXTEND cols + v_mow_design_* + tier_registry + cây 7 tầng; workflows.level chỉ =1 |
| K3 | MOT lọc "việc của tôi" theo hàng bằng dữ liệu/quyền hiện có? | KHÔNG | 0 row-filter $CURRENT_USER trên tasks; assigned_to=text agent |
| K4 | Proposal mode MOW có nơi lưu đủ trường? | PARTIAL (lõi-có, đủ-KHÔNG) | wcr có workflow_id/dsl_diff/approved_by/applied_at; thiếu step/tier/quorum/chữ ký |
| K5 | Hai đường PA1/PA2 biểu diễn được? | PARTIAL → CHƯA ĐỦ | PA1=status draft→applied; PA2 staging MOW không thấy (chỉ IU staging) |
| K6 | Lớp run/instance workflow có thiếu không? | CÓ THIẾU | 0 bảng workflow_run/instance/step_run (Vòng 1 + scan) |
| K7 | MOUT có registry + bản đúc/report run/phân phối? | KHÔNG | output_table_registry/report_registry/report_run/recipient/distribution vắng; chỉ table_registry+v_report_* |
| K8 | Có nơi hứng analytics + correlation_id xuyên suốt? | KHÔNG | event_outbox chỉ system; wcr/tasks/approval_requests không correlation_id chung |
| K9 | Liên thông 4 mẹ đã có khóa dữ liệu thật? | KHÔNG | 0 FK cụm; không anchor 7 tầng; chỉ eco-nav UI + wcr MOW-internal |
| K10 | Đường ghi tự động DOT/agent + Secret Manager đủ rõ? | CHƯA XÁC MINH/PARTIAL | secret không ở DB (đúng nguyên tắc) nhưng 0 DOT mother-verb; cơ chế secret metadata chưa soi |
| K11 | Pilot xuyên tầng chạy không tạo bảng mới? | KHÔNG | nửa MOIT cần field_registry+input_form_registry mới (nửa MOT chạy được = Pilot 0) |
| K12 | Miếng tối thiểu phải thêm? | (liệt kê) | field_registry+input_form_registry(+1 design_template form+routing)+DOT-submit; (tùy) output_table_registry; cột anchor_node/tier; row-perm tasks |
| K13 | Có FK cứng nào chưa xác minh cùng DB? | KHÔNG (đều cùng directus.public) | nhưng hạ CHƯA ĐỦ DỮ LIỆU cho các khóa trỏ bảng vắng/text (lý do dữ liệu, không khác-DB) |
| K14 | Có mâu thuẫn preview↔KB cần người chốt? | CÓ | chính: MOIT note "registry tồn tại" ↔ live NULL; phụ: MOW EXTEND/views, MOUT registry (§12) |
Hết khảo sát Vòng 2. Chỉ SELECT đọc-only + đúng 1 tài liệu KB này. Không mutation DB / Directus write / tạo bảng/field/DOT/event/workflow/task / deploy / git / in secret value. Không sửa báo cáo Vòng 1.