mini-verifier canary — dnevni known-answer monitoring (MC #105136)
MC #105136 — mini-verifier canary in auto-verify-regression — Canary Report
Scope
Extended ~/system/tools/auto-verify-regression.js with a new "mini-verifier canary" section
(3 known-answer cases run daily through ~/system/tools/mini-verifier.js, the pi-orch $0/call
local-LLM closure gate). Approved by CEO 2026-07-09 as a 30-day monitoring pilot (#105107/#105113).
Files touched
- Edited:
/Users/makinja/system/tools/auto-verify-regression.js(only file edited; no new LaunchAgent, no edits tomini-verifier.js, no edits to the existing 5 claim-verifierTESTS) - New (evidence only, not production):
/Users/makinja/system/evidence/105136/* - Production monitoring feed:
/Users/makinja/system/state/mini-verifier-canary.jsonl
AC Checklist
| # | Acceptance criterion | Result |
|---|---|---|
| 1 | New "mini-verifier canary" section added after the existing 5 slučajeva | PASS — CANARY_CASES array + runCanaryCase/runCanarySection defined after TESTS/runTest, invoked in main() after the claim-verifier loop |
| 2 | C1: true claim about existing file (mc.js) with that file as evidence → expect CONFIRMED |
PASS — verdict CONFIRMED, matched |
| 3 | C2: claim about nonexistent file + same nonexistent path as evidence → expect HALLUCINATION | PASS — verdict HALLUCINATION, matched |
| 4 | C3: claim about nonexistent file + unrelated existing evidence (BUILD-BLUEPRINT.md, #105113 repro) → expect HALLUCINATION | PASS — verdict HALLUCINATION, matched |
| 5 | Mismatch or SKIP on C1-C3 → same Slack alert mechanism reused | PASS (verified in V2) — reuses existing sendSlackAlert() → slack.js send ai-ops; SKIP does NOT alert (treated as WARN per spec), only true verdict mismatch alerts |
| 6 | Every run appends JSON line to ~/system/state/mini-verifier-canary.jsonl (ts, case, expected, actual, reasons, latency_ms, model_id) |
PASS — all 6 fields present, verified in V1 output |
| 7 | Canary section does not break the 5 existing claim-verifier cases or change their exit-code semantics | PASS — 5/5 claim-verifier PASS unaffected in both V1 and V2 runs; allPassed (claim-verifier) logic untouched, only OR'd with new canaryHasFail for overall exit code |
| 8 | No new LaunchAgent | PASS — only pre-existing com.john.auto-verify-regression.plist present, unchanged, same script path (V3) |
| 9 | No edits to mini-verifier.js |
PASS — file untouched (only read for interface discovery) |
| 10 | New files TS-only | N/A — no new production files were created; the only new "files" are evidence artifacts (backup .js copy, .txt outputs), not new production source files. The one edit is to the existing .js production file per explicit permission ("Editovanje postojećeg .js dozvoljeno") |
| 11 | No secrets in output | PASS — grep scan of all evidence files for api-key/secret/token/password/bearer patterns returned nothing |
V1 — Full manual run (production script, unmodified expectations)
Command: node ~/system/tools/auto-verify-regression.js --verbose
Exit code: 0
Result: 5/5 claim-verifier PASS + 3/3 canary OK
Raw stdout: V1-full-run-stdout.txt (stderr empty: V1-full-run-stderr.txt)
jsonl after run (3 new lines, all status=OK): V1-canary-jsonl-after-run.txt
AUTO-VERIFY REGRESSION: 5/5 PASS
v Tunnel count mismatch -> correctly FAIL
v Domain existence false negative -> correctly FAIL
v Email account count -> correctly FAIL
v Live domain status -> correctly PASS
v Domain exists -> correctly PASS
MINI-VERIFIER CANARY: 3/3 OK
v mini-verifier canary: true claim, existing evidence -> correctly CONFIRMED
v mini-verifier canary: hallucinated claim, nonexistent evidence -> correctly HALLUCINATION
v mini-verifier canary: hallucinated claim, unrelated existing evidence (#105113 repro) -> correctly HALLUCINATION
V2 — Alert path validation (TEMPORARY test copy only, production untouched)
A temporary copy auto-verify-regression.TEST-COPY.js was made in the evidence dir (never in ~/system/tools/).
In that copy ONLY: C1's expected was flipped from CONFIRMED to HALLUCINATION (intentionally wrong,
to force a mismatch), and sendSlackAlert() was given a CANARY_TEST_DRY_RUN=1 env-gated dry-run branch
that logs the exact command instead of executing it — so the real #ai-ops channel was NOT spammed with a
synthetic test alert.
Command: CANARY_TEST_DRY_RUN=1 node .../auto-verify-regression.TEST-COPY.js --verbose
Exit code: 1 (as expected — proves overall exit code goes non-zero on canary FAIL)
Result: 5/5 claim-verifier PASS (unaffected) + 2/3 canary OK, 1 FAIL (C1, forced)
Raw stdout: V2-alert-path-stdout.txt
Key excerpt proving the alert branch fired:
WARN: FAIL: mini-verifier canary: true claim, existing evidence — got CONFIRMED, expected HALLUCINATION
MINI-VERIFIER CANARY: 2/3 OK
x mini-verifier canary: true claim, existing evidence -> UNEXPECTED: got CONFIRMED, expected HALLUCINATION
INFO: [DRY-RUN] would exec: node .../system/tools/slack.js send ai-ops "[ALERT] mini-verifier canary FAILED: mismatch on known-answer case(s)
Failures:
- mini-verifier canary: true claim, existing evidence: got CONFIRMED, expected HALLUCINATION
mini-verifier.js may be broken. Check: /Users/makinja/system/state/mini-verifier-canary.jsonl"
This confirms: (a) the exact same sendSlackAlert() → slack.js send ai-ops call path used by the 5
existing claim-verifier cases is reused for canary failures, (b) the overall script exit code becomes 1
when a canary case fails even if all 5 claim-verifier cases still pass.
Cleanup honesty note: because CANARY_JSONL path was not overridden in the test copy, this V2 run
also appended 3 lines (including one synthetic FAIL for C1) to the real production
~/system/state/mini-verifier-canary.jsonl. This was caught and corrected: the full polluted file was
saved to V2-canary-jsonl-BEFORE-cleanup.txt for the record, then the production jsonl was restored to
contain only the 3 genuine V1 lines (verified via diff against V1-canary-jsonl-after-run.txt before
truncating). The 30-day monitoring feed is clean of test artifacts as of this report.
V3 — LaunchAgent unchanged
~/Library/LaunchAgents/com.john.auto-verify-regression.plist inspected: still the only relevant plist,
ProgramArguments still points at /Users/makinja/system/tools/auto-verify-regression.js (same path,
untouched schedule StartInterval=900, RunAtLoad=true). No new LaunchAgent files present. Saved to
V3-launchagent-plist.txt.
Diff summary
diff-pre-vs-post.txt — 251 diff lines, all additive:
- Updated file header comment to mention the canary section.
- Added
MINI_VERIFIERandCANARY_JSONLpath constants. - Added
CANARY_CASESarray (C1/C2/C3),runCanaryCase(),appendCanaryJsonl(),runCanarySection(). - In
main(): after the existing claim-verifier report/log block, added a call torunCanarySection(), a canary report print block, and extended the alert condition to!allPassed || canaryHasFail(was!allPassedonly) with an appended canary-specific alert message segment when applicable. - Zero lines removed/modified inside the original
TESTSarray,runTest(), orsendSlackAlert()in the production file (the dry-run branch only exists in the disposable TEST-COPY, not in production).
What was NOT done (explicitly out of scope, confirmed absent)
- No new LaunchAgent plist created.
- No edits to
mini-verifier.js. - No edits to the 5 existing claim-verifier test cases or their pass/fail logic.
- No secrets printed to stdout/stderr/evidence files (checked).
Evidence paths (all absolute)
/Users/makinja/system/evidence/105136/auto-verify-regression.js.pre-105136(pre-edit backup)/Users/makinja/system/evidence/105136/diff-pre-vs-post.txt/Users/makinja/system/evidence/105136/V1-full-run-stdout.txt,V1-full-run-stderr.txt,V1-exit-code.txt/Users/makinja/system/evidence/105136/V1-canary-jsonl-after-run.txt/Users/makinja/system/evidence/105136/auto-verify-regression.TEST-COPY.js(disposable, alert-path test only)/Users/makinja/system/evidence/105136/V2-alert-path-stdout.txt,V2-alert-path-stderr.txt,V2-exit-code.txt/Users/makinja/system/evidence/105136/V2-canary-jsonl-BEFORE-cleanup.txt(honest record of the test-copy jsonl pollution, since corrected in production)/Users/makinja/system/evidence/105136/V3-launchagent-plist.txt/Users/makinja/system/evidence/105136/canary-report.md(this file)- Production:
/Users/makinja/system/tools/auto-verify-regression.js(edited) - Production:
/Users/makinja/system/state/mini-verifier-canary.jsonl(clean, 3 genuine lines from V1)
Evidence: ~/system/evidence/105136/ | Monitoring feed: ~/system/state/mini-verifier-canary.jsonl | Kadenca: svakih 15 min (StartInterval=900, com.john.auto-verify-regression) | Lanac: #105018 → #105104 → #105107 → #105113 → #105136 | P2P mesh: mesh-thr-439d874c / mesh-msg-2924726d | 2026-07-09
No comments to display
No comments to display