Mission 0.5 — Fix Production Blockers (3 Blockers + birth_registry status)
MISSION 0.5: FIX PRODUCTION BLOCKERS — ĐIỀU 26
Giao: Claude Code CLI (claude-go) Mục tiêu: Fix 3 blockers SSH-verified → 8/8 contract tests PASS KHÔNG SỬA KIẾN TRÚC. KHÔNG TẠO PIVOT. Chỉ fix blockers hiện tại.
⛔ 4 REQUIRED CHECKS GREEN = MERGE NGAY
KHÔNG đợi build/E2E/Terraform/docs-guard. MERGE ≠ DONE: sau merge → deploy → smoke-test → verify production URL → THEN báo DONE.
📋 CHECKPOINT BẮT BUỘC (đọc TRƯỚC khi làm)
Đọc SSOT:
search_knowledge("handoff S141")
search_knowledge("council claude code review dieu26 round2")
Trả lời Assembly Gate:
- Q0: "PostgreSQL đã giải quyết chưa?" → CÓ, sửa trực tiếp PG function + GRANT
- Q1-Q5: confirm đọc xong SSOT
3 BLOCKERS CẦN FIX
B1: GRANT TRUNCATE privilege
# SSH vào VPS, chạy:
docker exec -i postgres psql -U directus -d directus -c "
GRANT TRUNCATE ON v_registry_counts TO directus;
GRANT TRUNCATE ON v_registry_summary TO directus;
"
Verify B1:
docker exec -i postgres psql -U directus -d directus -c "
SELECT has_table_privilege('directus', 'v_registry_counts', 'TRUNCATE');
SELECT has_table_privilege('directus', 'v_registry_summary', 'TRUNCATE');
"
# Kết quả: cả 2 = true
B2: Fix count_material trong summary INSERT
SSH vào PG, đọc function refresh_registry_counts() hiện tại:
docker exec -i postgres psql -U directus -d directus -c "
SELECT prosrc FROM pg_proc WHERE proname = 'refresh_registry_counts';
" > /tmp/current_function.sql
Tìm dòng INSERT vào v_registry_summary → thêm count_material column.
Logic: count_material = (SELECT SUM(record_count) FROM v_registry_counts WHERE composition_level = 'material')
Verify B2:
docker exec -i postgres psql -U directus -d directus -c "
SELECT count_material FROM v_registry_summary LIMIT 1;
"
# Kết quả: > 0 (expected ~55)
B3: Sync code file với PG deployed
# Dump current deployed function
docker exec -i postgres psql -U directus -d directus -c "
SELECT pg_get_functiondef(oid) FROM pg_proc WHERE proname = 'refresh_registry_counts';
" > /tmp/deployed_refresh.sql
docker exec -i postgres psql -U directus -d directus -c "
SELECT pg_get_functiondef(oid) FROM pg_proc WHERE proname = 'test_counting_contract';
" > /tmp/deployed_test.sql
So sánh với code file scripts/dot-pg-views-ensure.mjs (hoặc tương đương).
Cập nhật code file cho khớp với PG deployed + B2 fix.
B3.5: Add status field cho birth_registry (ngoại lệ duy nhất)
# Verify birth_registry thiếu status
docker exec -i postgres psql -U directus -d directus -c "
SELECT column_name FROM information_schema.columns
WHERE table_name = 'birth_registry' AND column_name = 'status';
"
# Nếu trống → thêm:
docker exec -i postgres psql -U directus -d directus -c "
ALTER TABLE birth_registry ADD COLUMN IF NOT EXISTS status VARCHAR(20) DEFAULT 'active';
UPDATE birth_registry SET status = 'active' WHERE status IS NULL;
"
Sau đó tạo field status trong Directus cho birth_registry collection (qua API hoặc DOT).
RE-TEST: 8/8 PASS
docker exec -i postgres psql -U directus -d directus -c "
SELECT * FROM test_counting_contract();
"
Kết quả mong đợi: 8 dòng, tất cả status = 'PASS'. Đặc biệt:
- T1: active_count = record_count → PASS (sau B1 fix cho phép refresh chạy đúng)
- T5: count_material > 0 → PASS (sau B2 fix)
BÁO CÁO BẮT BUỘC
Sau khi xong, tạo report tại knowledge/current-state/reports/mission-05-blockers-fix.md:
## Mission 0.5 Results
### B1: GRANT TRUNCATE
- Trước: [output cũ]
- Sau: [output mới]
### B2: count_material
- Trước: count_material = [giá trị]
- Sau: count_material = [giá trị]
### B3: Code sync
- Diff: [số dòng khác biệt]
- Files updated: [danh sách]
### B3.5: birth_registry status
- Trước: [có/không có column]
- Sau: status column added, [N] records = 'active'
### Contract Tests
- T1: [PASS/FAIL] — [giá trị]
- T2: [PASS/FAIL]
- T3: [PASS/FAIL]
- T4: [PASS/FAIL]
- T5: [PASS/FAIL] — count_material = [giá trị]
- T6: [PASS/FAIL]
- T7: [PASS/FAIL]
- T8: [PASS/FAIL hoặc N/A]
### Production URL verify
- https://vps.incomexsaigoncorp.vn/api/health → [status]
§0-AF: Evidence BẮT BUỘC từ https://vps.incomexsaigoncorp.vn, KHÔNG từ Directus/localhost.
RÀNG BUỘC
- KHÔNG sửa kiến trúc. Chỉ fix 3 blockers + 1 status field.
- KHÔNG tạo pivot_definitions hay pivot_count(). Đó là Mission 1.
- KHÔNG #DISABLE triggers hay views. Đó là Mission 1.
- Test local TRƯỚC khi push. Gộp fix vào 1 commit.
- Tiết kiệm context. Không đọc toàn bộ Hiến pháp, chỉ đọc handoff + report R2.
Mission 0.5 | Fix 3 blockers | Re-test 8/8 PASS | S141