<!-- Generated by _src/build.py from 4-dispatch.yaml. DO NOT EDIT. -->

# Execution — decision discipline — ORCHESTRATED · dispatch

**Everyone whose setup looks like this should read this file.** More than one agent runs at once, from a queue. Runs read what their brief names and cannot ask why a choice was made, so a decision overtaken after the brief was written is executed in good faith.

You are building now. Read the four files the interview wrote before you touch anything.

---

## Read first

    <folder>/DECISION-MAP.md     where decisions live, what is broken, what loads always
    <folder>/INTERVIEW.md        what they said, marked measured or stated
    <folder>/TIER.md             the tier and the three dimension scores
    <folder>/DECISIONS.md        what this module has already settled with them

If any is missing, stop and say which. Building from a partial record is how you produce something
that contradicts a decision already made — which, in this module, would be its own failure demonstrated.

---

## The pattern, in four rules — build every one of them

1. **A choice that is expensive to reverse gets a record, written before or with the change.** Anything
   else goes in the commit message. A records directory full of trivia is a directory nobody reads.
2. **A killed thing gets a kill record** — what it was, why it died, what replaced it, and what new
   information would reopen it. Disagreement is not new information.
3. **A superseded record is edited in the SAME COMMIT as its successor** — `Status: superseded`,
   `Superseded-by:` naming the new file. Never deleted.
4. **A limit is a measurement.** A number that caps something carries the measurement that set it, or
   a record saying it is unmeasured.

---

## What to build at this tier

- **records beside the work item a run reads, with the brief naming the record path literally** — a run reads only what its brief names; a record in a separate wiki does not exist to it
- **the checker in CI, advisory, plus the pre-commit hook** — dispatched commits bypass local hooks more often than people do
- **one line in the runs' standing instructions — reopening a decision means a superseding record in the same pull request** — it turns a silent re-decision into a reviewable diff
- **a caps audit — every concurrency, retry and timeout value gets its measurement beside it, or a record saying it is unmeasured** — caps chosen from caution are the most common invisible limit on a fleet

Build these where `INTERVIEW.md` showed appetite. Where it did not, say so and leave it — building
against a gap the person does not have is how a durable system becomes an abandoned one.

The template and the checker are files, not prose to paraphrase. Fetch both and copy them verbatim:

    https://docs.utopiamodels.ai/kit/patterns/decision-discipline/TEMPLATE.md
    https://docs.utopiamodels.ai/kit/patterns/decision-discipline/check-supersession.py

Put the records where `DECISION-MAP.md` said they should go. Where `DECISIONS.md` already settled a
question — the records directory, the pointer's scope — carry the settled answer and name the entry;
do not ask it again. Ask only what it does not settle.

Never edit a record in a tree `DECISION-MAP.md` marks as read-only reference, even a silently dead one.
Leave the finding recorded where it is.

---

## The gate — the reminder that fires without anyone remembering it

The occasion, and it is an occasion, never a topic:

    about to choose something expensive to reverse  ·  about to rebuild or re-propose something
    that was removed  ·  about to set or change a numeric limit

When it fires, the agent lists the records directory BEFORE proposing anything, and writes or
supersedes a record WITH the change.

The runs' standing instructions are the reminder, because a run reads them every time and a skill may not fire headless — gates.md measured that. The checker in CI is the check. Do not add a second reminder for interactive sessions.

Read `https://docs.utopiamodels.ai/kit/workflows/gates.md` before proposing a mechanism. Present the
options ranked against what `DECISION-MAP.md` shows this harness actually has, **exactly one marked
RECOMMENDED**, one line of why each. Do not offer a mechanism the harness does not support.

🔴 **The pointer is three lines or fewer.** It says where the records are and when to read them. It
never holds the records or the rules above.

🔴 **The bar: if they accept every recommendation without reading, they end with a working system.**

---

## What closes this tier's gaps

- **a run cannot reopen a decision without writing a superseding record** — otherwise every run is free to re-decide what the last one settled
- **every cap carries the measurement that set it** — an unmeasured ceiling becomes your capacity without ever failing

---

## Prove it — four tests, with real output

Do not report that it works. Run each and paste what it printed.

**The gate, both directions.** Start a FRESH session of this harness non-interactively from the folder
the work lives in (`claude -p`, `codex exec`, `gemini -p`, `opencode run` — whichever this is, with stdin
closed by `</dev/null`, or it reads the rest of your script as its prompt), once per
sentence, each ending "Do not change anything — tell me what you would do first." Build the trigger
from a decision recorded in this session:

    a sentence that SHOULD trigger it   e.g. "switch <the recorded choice> to <the rejected option>"
                                        →  it read the records and named the one that applies
    a sentence that should NOT          e.g. "rename this variable" / "fix this typo"
                                        →  it did not mention decision records at all

🔴 **A gate that fires on everything is as broken as one that fires on nothing, and only the negative
test catches it.** If either fails, fix the pointer or description and run both again. If this harness
has no non-interactive mode, say so and give them the two sentences to run in a new session.

**The checker, both directions.** In a scratch copy of the records directory, never the real one:

    write a record that Supersedes an existing one, leave the old one untouched
                                        →  check-supersession.py exits 1 and names the pair
    mark the old one superseded, pointing at the new one
                                        →  it exits 0

Then delete the scratch copy, and run the checker once against the real directory.

Then verify the rest against reality: every path in `DECISION-MAP.md` resolves, and the always-on total
matches what the harness loads now that you have added to it.

---

## Finish

Every file created with its path. The four test results with their real output. The always-on byte
total before and after.

Append to `DECISIONS.md`: what you recommended, what they chose, and what you did not build.

Then say exactly this:

  "Decision discipline is in. The gate fires on [trigger] and stays quiet on [non-trigger]. The
  checker caught a one-sided supersession and passed the repaired one. Always-on went from [X] to [Y]
  bytes."

Then stop.
