v1.18.0 — Guide-read lock, mode_conseille, nested iframes, structural monitoring
Mandatory guide-read lock (--guide-version) + --version
shot.py, rpa.py, and watch.py now refuse to run without proof of reading docs/GUIDE_LLM.md — the one deliberate exception to the project's additive-only design. A model that never read the guide gets a hard failure instead of improvising silently.
--version— prints the installed version and exits immediately, no Playwright launch.--guide-version X.Y— token read from the top ofdocs/GUIDE_LLM.md(<!-- notice-version -->). Once accepted, a local marker (~/.config/diwall/guide_state.json) avoids re-asking — until the guide's next substantial update.
Triggered by a recurring field friction, surfaced directly by a Claude instance on a partner project: documentation alone kept failing to get read before first use.
mode_conseille — deterministic pre-flight advice
New etat.mode_conseille object, never an order, always grounded in a real measurement. Diwall checks the operations journal's history for the current host: if a prior DOM diagnostic (diagnostic_dom.json) detected a JS framework or Shadow Roots, a configuration recommendation (--mode full, --shadow-dom, --som-rafraichir) appears in the output. Absent when no real data exists — never a guess.
Nested iframes (iframe_chemin)
cliquer_iframe and remplir_iframe accept a new iframe_chemin key: an ordered array of CSS selectors to descend through multiple levels of nested iframes. iframe_selecteur (single frame) stays strictly unchanged — the two keys are mutually exclusive, deliberately not a pluralised name, to avoid confusion on a generated action.
Continuous structural monitoring (scripts/monitor-verifier.sh)
New orchestration script: one pass, zero image, zero LLM call, built on the existing --no-capture + --replay-verifier composition. Silent when stable, an ntfy push on regression. Repetition over time is left to cron/systemd-timer — no internal daemon, no long-running memory-leak risk.
Interoperability fixtures
New structural non-regression corpus under scenarios/interoperabilite/: a neutral witness (example.com) and a fully Diwall-controlled local HTML fixture (nested iframe, open Shadow DOM component, form). Reuses the existing --replay-verifier — no new comparison capability.
How to test
/opt/diwall/venv/bin/python3 /opt/diwall/shot.py --version
/opt/diwall/venv/bin/python3 /opt/diwall/shot.py --url https://example.com --mode fast --guide-version 3.6Validation: scenarios/v1.18.0_validation/verifier.py, 5/5. Regression on v1.15.2/v1.16.0/v1.17.0/v1.17.2: 0.