E5 Execution Package — Create FAC-07/08/09 v0.2
E5 Execution Package — Create taxonomy_facets FAC-07/08/09 (v0.2)
Phase: P9 Entry Gate, E5 Loại: Production mutation — Directus API Trạng thái: DRAFT v0.2 — Patched 5 điểm GPT. Chờ GPT final gate. Phiên: S183 | Ngày: 2026-04-27 APR Authority: P9-E4-FACETS-D38 APPROVED 3/3 (rev 2) Scope: taxonomy_facets INSERT ONLY. Không taxonomy_labels. Không entity_labels. Không E7/P9.
1. Mục tiêu
Tạo 3 approved taxonomy_facets (FAC-07, FAC-08, FAC-09) qua Directus API. Verify tồn tại đúng. Upload action log. STOP.
2. Ràng buộc tuyệt đối
- CHỈ INSERT vào
taxonomy_facets. Không collection nào khác. - CHỈ 3 rows đúng APR decision payload. Không thêm/bớt.
- KHÔNG tạo taxonomy_labels.
- KHÔNG tạo entity_labels.
- KHÔNG chạy E7/P9.
- Nếu BẤT KỲ pre-check FAIL → STOP + report.
- Nếu partial failure (1-2 created, 1 fail) → STOP + report. Không tự sửa, không retry.
- Governed path: Directus API POST
/items/taxonomy_facets. Không SQL trực tiếp. Không manual UI.
3. Actor / Gateway Guard
- Actor: Opus hoặc agent execute. GPT KHÔNG execute.
- Gateway: Directus API (MCP tool hoặc VPS curl). Cấm manual SQL/UI.
- Logging: Mọi POST phải log rõ: actor, gateway method, timestamp, payload, response.
4. Pre-checks (read-only, BLOCKING)
4.1 Verify FAC-07/08/09 chưa tồn tại
GET /items/taxonomy_facets?filter[code][_in]=FAC-07,FAC-08,FAC-09
Expect: 0 items. Nếu bất kỳ FAC-07/08/09 đã tồn tại → STOP: "target facet already exists".
4.2 Verify baseline taxonomy intact (BLOCKING)
GET /items/taxonomy_facets?fields=id,code,name,status&sort=code
Expect: đúng 7 items với codes và status:
| # | Code | Status |
|---|---|---|
| 1 | FAC-01 | active |
| 2 | FAC-02 | active |
| 3 | FAC-03 | active |
| 4 | FAC-04 | active |
| 5 | FAC-05 | active |
| 6 | FAC-06 | active |
| 7 | FAC-PROV | active |
Nếu:
- Count ≠ 7 → STOP: "baseline taxonomy drift — expected 7, found [n]"
- Bất kỳ code thiếu/thừa → STOP: "baseline code mismatch"
- Bất kỳ status ≠ active → STOP: "baseline status drift on [code]"
4.3 Verify Directus API availability
GET /server/health
Expect: status=ok. Nếu fail → STOP: "Directus API unavailable".
5. Exact Payload (từ APR decision, immutable)
[
{
"code": "FAC-07",
"name": "Thuộc tài liệu nào?",
"description": "Phân loại text unit theo document source gốc. Áp dụng cho D38 Text as Code logical units.",
"status": "active"
},
{
"code": "FAC-08",
"name": "Chủ đề nội dung?",
"description": "Phân loại text unit theo chủ đề nội dung chính. Áp dụng cho D38 Text as Code logical units.",
"status": "active"
},
{
"code": "FAC-09",
"name": "Tầng kiến trúc?",
"description": "Phân loại text unit theo design/legal/operational layer. Áp dụng cho D38 Text as Code logical units.",
"status": "active"
}
]
6. Final Pre-flight Re-check (ngay trước POST)
Ngay trước khi gửi POST đầu tiên, chạy lại:
- Re-verify FAC-07/08/09 non-existence (§4.1)
- Re-verify API health (§4.3)
- Confirm payload vẫn khớp APR decision §5
Nếu bất kỳ re-check FAIL → STOP. Không POST.
7. Execution
3 POST requests tuần tự qua Directus API:
POST /items/taxonomy_facets → payload[0] (FAC-07)
POST /items/taxonomy_facets → payload[1] (FAC-08)
POST /items/taxonomy_facets → payload[2] (FAC-09)
Sau mỗi POST:
- Verify HTTP 200/201
- Verify response chứa created item với code/name/status khớp
- Nếu fail → STOP ngay. Không POST tiếp. Report partial state.
8. Execution Guard
| Check | Condition | Action |
|---|---|---|
| Pre-existing FAC-07/08/09 | Any exists | STOP |
| Baseline drift | Count ≠ 7 or status ≠ active | STOP |
| API unavailable | Health ≠ ok | STOP |
| POST returns error | HTTP ≠ 200/201 | STOP + report partial state |
| Response missing fields | code/name/status absent | STOP |
| Payload mismatch vs APR | Any field differs from §5 | STOP |
9. Post-verify
Sau khi tạo cả 3:
GET /items/taxonomy_facets?filter[code][_in]=FAC-07,FAC-08,FAC-09&fields=id,code,name,description,status
Expect: 3 items khớp exact payload §5.
Verify tổng count: GET /items/taxonomy_facets → expect 10 items (7 baseline + 3 new).
10. Rollback / Compensation
- Rollback = compensation, cần gate riêng. KHÔNG tự động.
- Nếu partial failure → STOP + report. KHÔNG tự DELETE, KHÔNG retry.
- Nếu GPT/User chỉ đạo rollback → prompt/gate riêng cho DELETE.
11. Action Log
Report tại reports/p9-e5-facet-creation-log-2026-04-27.md:
# E5 Facet Creation Log — 2026-04-27
> APR: P9-E4-FACETS-D38 APPROVED 3/3
> Actor: [Opus/agent]
> Gateway: [Directus MCP / VPS curl]
> Timestamp: [ISO 8601]
> Prompt: E5 Execution Package v0.2
## Pre-checks
| # | Check | Result | Status |
|---|-------|--------|--------|
| 1 | FAC-07/08/09 not exist | [result] | PASS/FAIL |
| 2 | Baseline 7 facets intact | [codes+status] | PASS/FAIL |
| 3 | API health | [result] | PASS/FAIL |
## Pre-flight re-check
| # | Check | Result | Status |
|---|-------|--------|--------|
| 1 | FAC-07/08/09 still not exist | [result] | PASS/FAIL |
| 2 | API still healthy | [result] | PASS/FAIL |
| 3 | Payload matches APR | [yes/no] | PASS/FAIL |
## Execution
| # | Facet | Timestamp | HTTP | Response ID | Payload match APR? | Status |
|---|-------|-----------|------|-------------|---------------------|--------|
| 1 | FAC-07 | [ts] | [code] | [id] | PASS/FAIL | PASS/FAIL |
| 2 | FAC-08 | [ts] | [code] | [id] | PASS/FAIL | PASS/FAIL |
| 3 | FAC-09 | [ts] | [code] | [id] | PASS/FAIL | PASS/FAIL |
## Post-verify
| Check | Result | Status |
|-------|--------|--------|
| 3 new facets exist | [codes] | PASS/FAIL |
| Total facets = 10 | [count] | PASS/FAIL |
| All fields match APR | [detail] | PASS/FAIL |
## Verdict: PASS / PARTIAL / FAIL
Upload KB: knowledge/dev/laws/dieu38-trien-khai/reports/p9-e5-facet-creation-log-2026-04-27.md
12. Scope Exclusions
| Mutation | In scope? |
|---|---|
| taxonomy_facets INSERT (3 rows) | ✅ |
| taxonomy_labels INSERT | ❌ |
| entity_labels INSERT | ❌ |
| approval_requests INSERT | ❌ |
| E7 dot-register | ❌ |
| P9 migration | ❌ |
| DELETE rollback | ❌ (needs own gate) |
SAU KHI XONG: STOP. Chờ GPT/User review.
Patch log v0.1 → v0.2
| # | GPT điểm | Fix |
|---|---|---|
| 1 | §3.2 baseline drift = NOTE | ✅ §4.2: BLOCKING — STOP nếu count/code/status lệch |
| 2 | Thiếu actor/path guard | ✅ §3: actor + gateway + logging requirements |
| 3 | Thiếu final pre-flight re-check | ✅ §6: re-verify ngay trước POST |
| 4 | Action log thiếu fields | ✅ §11: actor, gateway, timestamp, payload match per POST |
| 5 | Rollback wording mơ hồ | ✅ §10: compensation cần gate riêng, không tự động |
E5 Execution Package v0.2 | S183 | 2026-04-27 | Opus 4.6 GPT review v0.1: PASS WITH PATCH → v0.2 Chờ GPT final gate