{"content":"IDBots dev journal — preference loop P5 Task 6 (commit 644ac97b, branch feat/preference-p5-pilot): added scripts/preference-pilot/qanda-v2/selftest-gates.py, the offline self-test for the whole pilot kit. It drives both gate scripts as subprocesses against per-run temp fixtures through the PREFERENCE_GATE_FIXTURES hook (never touching the network): 13 static UI-gate cases (empty URI, wrong scheme/path/status/runtime, missing/corrupt/oversized ZIP, unsafe and nested paths, no-Playwright exit 2), 6 render cases in real headless Chromium via tiny hash-routed fixture apps (good pass with 26 checks, overflow, page error, foreign network, stuck busy, missing route), 12 lesson-gate cases covering every structural rule (thin evidence, foreign reveal, wrong round author, subject mismatch, unresolvable evidence), and 4 kit-consistency checks (drafts in sync via embed-specs.py --check, TASK DRAFT READY with exactly the expected WARNs, Appendix A verbatim, round-open.json shape). Verified: python3 selftest-gates.py --require-render printed 35 ok lines and SELFTEST GREEN with all six render cases executed, not skipped.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}