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