docs(m2): correct where the O4 gate lands and why

The first draft pinned the gate to Step 21. Wrong distinction: the gate lives
in the launcher, so it covers tools reached through the MCP server and not a
skill that calls a script directly, which is how Steps 21 and 22 write. Step 21
is where the defect starts; it is not where the gate has to land. Pinned to
Step 24 instead, with the one-file fence amendment named.

Co-Authored-By: Claude <claude-opus-5>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-05 21:43:54 +02:00
commit 52fd5c26a7

View file

@ -455,11 +455,20 @@ defect starts at plan Step 21 and Step 22, where `sak.md` and
`beslutninger.jsonl` first persist employer names, titles, URLs and notes that
came from a listing.
**Timing.** Taken here, in M2, as the order required. Implemented in the step
that introduces the first such write (Step 21), because the change lives in
`scripts/jobbsok_tools_launch.py` and `scripts/jobbsok_tools.py`, both outside
the fence of the order that took the decision. A decision recorded without its
implementation date is a decision that evaporates; this one has a step number.
**Timing, and one distinction the first draft of this section got wrong.**
The gate lives in `scripts/jobbsok_tools_launch.py`, so it protects exactly one
path: tools reached through the MCP server. It does **not** protect a skill that
calls a script directly, which is how `sak` and `beslutning` write in Steps 21
and 22. So Step 21 is where the *defect* starts and it is not where the *gate*
has to land; the hard deadline is the first time the server exposes a tool that
persists untrusted content, which Step 24's status and daily tools are not.
Implemented at **Step 24** anyway, because that is the next step that touches
this neighbourhood and shipping the gate before it is needed costs nothing.
Step 24's fence (plan Session 6) lists `scripts/jobbsok_tools.py` and must be
extended by one file to include the launcher; the order that carries Step 24
says so explicitly. A decision recorded without an implementation step is a
decision that evaporates; this one has a step number and a fence amendment.
## Degradation branch