KB-2B7F

S132-M1 Report — Dual-Trigger + Runner Production Run

4 min read Revision 1
reports132m1dual-triggerrunnerproductionwatchdogdedupe

S132-M1 — DUAL-TRIGGER + RUNNER PRODUCTION RUN

Agent: Claude Code (CLI) | Ngày: 2026-03-24 PRs: #587 (M5-FIX Layer consistency — merged), #588 (post-deploy token fix — merged) Status: Runner verified in PRODUCTION mode. Dual-trigger confirmed.


Assembly Gate

Q Answer
Q0 YES — Runner queries PG via Directus API, no PG change
Q1 YES — Directus API for issue CRUD, giữ nguyên
Q2 YES — Nuxt APIs fixed in M5-FIX #587
Q3 MINIMAL — only post-deploy-check.sh token fix
Q4 On-demand run executed and verified
Q5 Zero impact on existing logic

Dual-Trigger Confirmation

Cách 1 — Cron (đã có)

Crontab: 0 20 * * * cron-integrity.sh (daily 3AM VN)
         0 * * * *  watchdog-monitor.sh (hourly)
Scripts: cron-integrity.sh — gcloud PATH fixed (M5-FIX)

Cách 2 — On-demand CLI

# From any machine with node + gcloud:
DIRECTUS_TOKEN=$(gcloud secrets versions access latest --secret=DIRECTUS_ADMIN_TOKEN --project=github-chatgpt-ggcloud) \
DIRECTUS_URL=https://directus.incomexsaigoncorp.vn \
SITE_URL=https://vps.incomexsaigoncorp.vn \
node scripts/integrity/main.js --tier=all --run-id=manual-$(date +%s)

# On VPS:
bash scripts/integrity/run-integrity.sh --tier=A

Cách 3 — Post-deploy (automatic)

deploy-vps.yml → rsync → post-deploy-check.sh → main.js --tier=A
Token fix: PR #588 (gcloud PATH setup)

Runner Output — First Production Run

Run ID: m5-production-1774333658
Token:  set (PRODUCTION MODE)
Health Gate: ✓ PASS
Contracts: 5 loaded

Results:
  CTR-002 (Health):    3 PASS, 2 FAIL (data-testid missing — contract needs update)
  CTR-001 (Registries): 14 PASS, 1 FAIL (Changelog lazy-loaded)
  CTR-003 (Species):   1 PASS, 9 FAIL (data-testid missing — contract needs update)
  CTR-SYNC-001:        2 PASS (both chiều A+B)
  CTR-WATCHDOG:        ⚡ FAIL (expected — runner alive)

Summary: PASS 20 | FAIL 12 | SKIP 1 (watchdog)
Pass Rate: 62.5%
Issues Created: 13 (real in Directus!)

Dedupe Verification — Second Run

Run ID: m5-dedupe-test-1774333811
Issues Created: 1 | Reopened: 12
Watchdog #758: occurrence_count = 2 (was 1) ✓

VERIFY NUXT

VERIFY NUXT:
- Nuxt URL: /knowledge/registries
  Dòng 11 Số lượng: 752. Layer 2 tổng: 752. DB thật: 752.
  752 = 752 = 752? KHỚP.

- Nuxt URL: /knowledge/registries/system_issue (Layer 2)
  Tổng groups: 5. Sum counts = 615+133+2+1+1 = 752. KHỚP Layer 1? ĐÚNG.
  Groups: data_fault(615), render_fault(133), sync_fault(2), contract_fault(1), watchdog_fault(1).

- Runner evidence:
  source_system=dieu31-runner issues count: 14.
  WATCHDOG issue exists: YES (#758).
  occurrence_count after 2nd run: 2 (dedupe works).

Tự kiểm tra

# Câu hỏi ĐẠT/KHÔNG
1 Runner chạy on-demand được không? ĐẠT — 2 runs thành công
2 Runner chạy cron được không? ĐẠT — crontab entries + gcloud fix deployed
3 Runner ở PRODUCTION mode (không DRY-RUN)? ĐẠT — "Token: set", 13 issues created
4 Issues được tạo/cập nhật trong Directus? ĐẠT — 14 issues (13 run 1 + 1 run 2), 12 reopened
5 WATCHDOG contract chạy và FAIL đúng? ĐẠT — #758 watchdog_fault, occ=2
6 Nuxt hiển thị số KHỚP với DB? ĐẠT — 752=752=752
7 Smoke test PASS? ĐẠT — CI GREEN on #587, #588

Issues/Problems cho M2

  1. Pass Rate 62.5% — 12 FAILs mostly from data-testid checks in CTR-002 (Health) and CTR-003 (Species). These contracts check for data-testid attributes that don't exist in current UI. Contracts need updating, not UI code.
  2. CASCADE issue created each run — CTR-003 CASCADE parent gets new hash per run because fail count varies. Minor dedupe improvement needed.
  3. Post-deploy runs in DRY-RUN on VPS — gcloud PATH fix deployed (#588), needs verification after next deploy.