Plan-tune cathedral T2 + part of T1 follow-up (Codex IRON RULE — regressions
get tests). v1.49 shipped two prose-driven implicit gates inside plan-tune
Step 0 (consent, setup) with zero test coverage. The cathedral refactors that
template heavily; without tests, silent breakage is possible.
Three regression families plus a static template assertion:
1. Consent gate fires under qt=false + no marker; goes silent on marker write
or qt=true flip.
2. Setup gate fires under qt=true + empty declared + no marker; goes silent
when declared populates, marker is written, or qt is still false.
3. Marker idempotency: gates stay silent across 5 re-invocations after a
single decline/bail. Markers honored independently.
4. Static template assertion: gate language can't be silently deleted
without breaking a test.
Also extends gstack-config to honor GSTACK_STATE_ROOT (it was the last bin
still ignoring it — caught while writing the tests; without this, tests
would silently mutate the user's real config.yaml).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>