KB-5A70

Codex — Nghiệm thu read-only nút Đồng bộ Balo production (2026-07-17)

4 min read Revision 1
baloproductionreadonlyacceptancenuxtnginxruntimecurrent-state

Nghiệm thu read-only nút Đồng bộ Balo — production

  • Ngày kiểm tra: 2026-07-17
  • Phạm vi: UI công khai + shell production, chỉ đọc
  • Không thực hiện: sửa code/config, deploy/restart/reload, --apply, --sync, ghi DB, đăng nhập Administrator, bấm nút Administrator

Verdict

PASS_RUNTIME_READY_PENDING_ADMIN_ACCEPTANCE

Toàn bộ phép đo được yêu cầu trong phạm vi chưa đăng nhập Administrator đều PASS. Phần duy nhất còn chờ là Owner đăng nhập bằng phiên Administrator thật và bấm nút Đồng bộ Balo từ PG.

UI

  • /reports tải bình thường, hiện 6 report. Tổng hiện tại: Function 654, Table 385, Trigger 410, View 699, Loài 42, PG Census 12.
  • Bốn trang Balo đều tải bình thường và khớp dữ liệu shell:
    • /reports/report-balo-table: 385 bản ghi.
    • /reports/report-balo-view: 699 bản ghi.
    • /reports/report-balo-function: 654 bản ghi.
    • /reports/report-balo-trigger: 410 bản ghi.
  • Trên cả bốn trang, thanh đầu trang hiện Login (chưa đăng nhập), có nút Làm mới, không có nút Đồng bộ Balo từ PG.
  • PG Census tải bình thường, tổng 12 loại census; không có nút đồng bộ Balo.
  • Report Loài (collection khác balo_thuc_the) tải bình thường, 42 bản ghi; không có nút đồng bộ Balo.

Runtime production

  • Nginx live có đúng 1 exact route location = /api/balo/reconcile, proxy tới nuxt_backend; upstream là nuxt:3000. Control /api/nonexistent vẫn trả chữ ký Agent Data {"detail":"Not Found"}.
  • incomex-nuxt: running/healthy, restart=0; mount /run/incomex -> /run/incomex read-only; GroupAdd=["987"]; identity có supplementary group 987.
  • Runtime có đủ:
    • NUXT_BALO_OPERATOR_ROLE_IDS=a40a1070-0b62-4a7e-b2c0-bd4bce9d41ac
    • NUXT_PUBLIC_BALO_OPERATOR_ROLE_IDS=a40a1070-0b62-4a7e-b2c0-bd4bce9d41ac
    • NUXT_BALO_RECONCILE_SOCKET_PATH=/run/incomex/balo-reconcile.sock
  • Artifact live chỉ có route reconcile.post.mjs; không có GET/PUT/DELETE route. Artifact chứa BaloSyncButton và điều kiện compiled tương đương resolvedCollection === 'balo_thuc_the'.
  • Systemd socket enabled/active; bridge service active/running. Socket là Unix socket root:incomex-balo-sync, GID 987, mode 0660. Có Unix listener trên đúng path; không có TCP listener cho Balo/reconcile.

Endpoint và dữ liệu

  • POST hợp lệ về request-gate nhưng không có phiên đăng nhập trả 401 UNAUTHENTICATED.
  • GET /api/balo/reconcile trả 404 Page Not Found với chữ ký Nuxt, không phải Agent Data.
  • dot-balo-reconcile --dry-run:
    • delta=0, conflict=0, sequence_safe=t, write=0
    • DRY_RUN|PASS|delta=0|write=0
  • dot-balo-reconcile --verify:
    • delta=0, conflict=0, sequence_safe=t, write=0
    • VERIFY|PASS_RECONCILED|delta=0|write=0
  • Baseline trước/sau hai lệnh giống hệt:
    • Tổng 2148 = table 385 + view 699 + function 654 + trigger 410.
    • Balo fingerprint: 8ed1cd5d2f93f5f8a970497bd5e4ec87 trước = sau.
    • Hash chỉ gồm stt,date_updated: fb106723449deb931632cf3afc0053b3 trước = sau.
    • Sequence: last_value=2148, is_called=t, increment_by=1, predicted next=2149, safe.

Phần chưa chứng minh

Không có tài khoản/phiên Administrator trong lần kiểm này. Vì vậy báo cáo này không tuyên bố đã thấy nút khi đăng nhập, đã bấm nút, đã nhận ALREADY_UP_TO_DATE, hoặc đã quan sát refresh sau click. Đó là phần duy nhất còn chờ Owner acceptance: đăng nhập Administrator thật, mở một report Balo và bấm nút một lần.