The Pipeline

How bounded work becomes landed change, and where each check sits. Human’s drawing, moved out of human/ on Human’s direction, verified against the code on 2026-09-03 and 2026-09-04, and recut on 2026-09-05 after REQ-414, REQ-427 and FIND-1477 changed the dispatch half. “What was verified” at the foot says what was checked for this recut; the earlier verification logs are in Git history (git log -- house/THE_PIPELINE.md).

Read house/ARCHITECTURE.md for consequence routing between offices. This page is the other axis: one piece of work travelling from REQ to main, and what is proved about it at each gate.

2026-09-07 correction (FIND-1560, amended by FIND-1561): the verification snapshots below predate the Codex pipeline investigation. Human reports the Claude pipeline working; Claude Orchestrator may continue Claude Hands/Eyes. The launch hold concerns Codex workers, regardless of the controller host. Shared machinery alone did not justify Hod extending that hold to Claude. PATCH-346/347 remain written, awaiting independent review together. Current repair ground: house/offices/code-troll/baton.md.

Popup diagnosis entry: house/offices/code-troll/the_bug_hole/2026-09-07-hidden-processes/README.md starts with FIND-1581: Human-directed REQ-451 completed through Codex Hands TRACE-1618 and Eyes TRACE-1619, controller tests green and Eyes PASS. Human and passive window observation support no new popup. This supersedes the hold above for the tested ordinary Codex route. It also names original Eyes TRACE-1581, the controller/provider distinction, and missing command-event telemetry. Read that before repeating window probes; FIND-1580 records a probe itself interrupting Human despite passing private-desktop checks.

Lifecycle limit (FIND-1584): REQ-451 did not certify session archival or automatic creator wake. Both execution session pointers are null; Shore skipped import, and the ephemeral native threads have no rollout. The compact MCP end reply omits archive outcome. Read archive/diagnostics/2026-09-07-codex-pipeline/LIFECYCLE_AUDIT.md.

The map is not the ground. Where this page and the code disagree, the code wins and this page is the defect. The mouths’ --help wins over this page.


The flow

                              CORPUS CHANGE PIPELINE
================================================================================


 HUMAN / TROLL / ORCH
        |
        | accepted bounded work
        v
      REQ
        |
        | ops job start --request-id REQ-### --role hands --model ...
        |     [--write-scope path]...  [--wall-time-seconds N]  [--bundle-version N]
        |     (corpus_job_start on the MCP; the CLI is the fallback)
        v
  ASSIGNMENT -> EXECUTION -> TRACE -> WORKTREE LEASE -> PACKET
        |
        |   the worktree is cut from main NOW; that commit is the candidate's
        |   base and the worktree never follows main afterward
        v
  +-------------+
  |    HANDS    |
  |   writer    |
  +-------------+
        |
        | edits files
        v
  HANDS WORKTREE
  ----------------
  physical bytes
  may temporarily
  contain LF / CRLF
        |
        | ops job end --role hands --actor <worker>   (the controller's call,
        |                                              after the dispatch returns)
        | git add
        | Git clean filters
        v
  GIT STORED CONTENT
  ------------------
  blobs / tree / commit
  canonical repository content
        |
        | seal: git worktree add --detach at the writer's head,
        |       add -A, commit "Corpus released handoff <execution>",
        |       refs/candidates/...; the TRACE closes carrying
        |       eyes_start_command; mail hands-eyes-ready to orch
        v
  RELEASED HANDOFF
  =================================================
        |
        | records:
        |
        |   commit_sha
        |   tree_sha
        |   status_sha256
        |
        |       commit + tree = GIT IDENTITY
        |       status        = WORKTREE OVERLAY
        |
        v
  SEALED CANDIDATE
        |
        | ops job start --role eyes --candidate-worktree <handoff>
        |     (never --candidate-ref: FIND-1414)
        | prepare Eyes checkout
        v
  +------------------------------------------------+
  | PREPARE-TIME VERIFICATION                      |
  |                                                |
  | Is checkout the released handoff?              |
  |                                                |
  | commit wrong  ------> REFUSE                   |
  | tree wrong    ------> REFUSE                   |
  | dirty overlay ------> REFUSE                   |
  +------------------------------------------------+
        |
        | passes
        v
  IMMUTABLE EYES SNAPSHOT
        |
        | some time may pass here
        |
        v
  +------------------------------------------------+
  | PRE-LAUNCH VERIFICATION  (in the supervisor)   |
  |                                                |
  | read ONE CheckoutState                         |
  |                                                |
  |   git_identity                                 |
  |      commit                                    |
  |      tree                                      |
  |                                                |
  |   overlay                                      |
  |      status_sha256                             |
  |      status_entries                            |
  |                                                |
  +------------------------------------------------+
        |
        +-------------------------------+
        |                               |
        | commit/tree differ?           | no
        v                               |
  WRONG CANDIDATE                       |
  ----------------                      |
  "not what was sealed"                 |
                                        |
                                        v
                              status differs?
                                  |         |
                                 yes        no
                                  |         |
                                  v         v
                         EDITED AFTER     OK TO
                           PREPARE        LAUNCH
                         -------------      |
                         "right thing,      |
                          later edited"     |
                                            v
                                   PROVIDER DISPATCH
                                   (drawn below: three lanes in,
                                    one supervisor out)
                                            |
                                            v
                                   PROVIDER CHILD RETURNS
                                            |
                                            | Claude Eyes: read the
                                            | CheckoutState a THIRD time
                                            | (REQ-413)
                                            |
                              +-------------+-------------+
                              |                           |
                            match                       drift
                              |                           |
                              v                           v
                      candidate_witness            trace closes degraded,
                      on the dispatch              both states named; the
                      receipt: the review          verdict stays, marked
                      wrote nothing Git            unwitnessed
                      can see
                              |
                              v
                     ops job end --role eyes --actor <reviewer>
                     records the verdict on the TRACE

And Eyes/review sits downstream of the good launch:

                     OK TO LAUNCH
                          |
                          v
                       EYES
                     reviewer
                          |
          +---------+-----+-----+-----------+
          |         |           |           |
          v         v           v           v
        PASS      AMEND      REJECT    REJECT-HOUSE
          |         |           |           |
          v         v           v           v
    candidate    same REQ,   candidate   the contract
    accepted     fresh Hands  refused    itself is wrong
          |      and Eyes
          v
        LAND   cherry-pick the handoff commit onto main
          |    run the touched tests on the merged tree
          |    commit naming the Eyes trace
          |    set-status fulfilled --review-receipt TRACE-###
          v
        MAIN

RELINQUISH is not a verdict. The REQ still holds and the candidate remains unreviewed; recut the Eyes job to fresh folk.


Dispatch: three lanes in, one supervisor out

Since REQ-427 a dispatch does not wait. It reserves the TRACE, hands the wait to a Corpus supervisor that outlives the caller, and returns dispatch_state=in_progress. Job end stays a later call.

   ORCHESTRATOR (Claude host)                 ORCHESTRATOR (any host, fallback)
        |                                              |
        | corpus_job_dispatch                          | python corpus.py ops job dispatch
        | (MCP server `corpus`)                        |     --execution-id exec-...
        v                                              |
   python -m tools.corpus_job_mcp call                 |
   fresh interpreter, hidden console,                  |
   imports the controller from the tree                |
   on disk at the moment of the call (REQ-414)         |
        |                                              |
        +----------------------+-----------------------+
                               |
                               |  mouth=controller | mouth=cli  rides the receipt
                               v
                  RESERVE the TRACE: one-shot token, state in_progress
                               |
                               v
                  LAUNCH tools/job_dispatch_supervise.py
                    --database --execution-id --token --mouth
                    detached, CREATE_BREAKAWAY_FROM_JOB, new process group,
                    no console; supervisor_pid and supervisor_breakaway
                    ride the receipt (FIND-1431)
                               |
                               v
                  RETURN dispatch_state=in_progress          <- the caller is done
                               |
                               v
   +---------------------------------------------------------------------------+
   |  SUPERVISOR  (a fresh process per dispatch)                               |
   |                                                                           |
   |  rebuild the plan from the tree on disk; authenticate the token           |
   |  Claude Eyes: read the CheckoutState again, immediately before launch     |
   |  launch the provider child HIDDEN (CREATE_NO_WINDOW on every lane:        |
   |    PATCH-283 native, PATCH-289 legacy, PATCH-290 Codex verifier,          |
   |    PATCH-288 every run_child probe and git worktree)                      |
   |  wait under the wall (default 7200s, --wall-time-seconds, carried in      |
   |    the packet since REQ-412); on the wall: terminate, then kill           |
   |  finish the reservation                                                   |
   |      process_success | rail_failure (wall, process_crash,                 |
   |      candidate_mutation, candidate_drift) | protocol_failure              |
   +---------------------------------------------------------------------------+
                               |
              +----------------+----------------+
              |                                 |
              v                                 v
       receipt finished                 supervisor dies first
       TRACE closes at job end          reservation stays in_progress
                                                |
                                                v
                                        STRANDED RESERVATION
                                                |
                                                | ops job audit names it:
                                                | closed_trace_unresolved_
                                                | dispatch_reservation
                                                v
                                        ops job reconcile-dispatch (REQ-407)
                                                |
                                                v
                                        state=reconciled
                                        provider_outcome=unknown
                                        no exit_code, no outcome_class:
                                        the absence is the honest record

The three lanes, and when to take each:

MCP present, job tools unchanged            -> corpus_job_* (default)
job tool added, renamed, reshaped;
MCP configuration moved                     -> /mcp, then corpus_job_*
MCP absent, refusing a shape the CLI
accepts, or under diagnosis                 -> python corpus.py ops job ...

The served MCP process is transport: it carries the tool list and the configuration, and only those go stale. A landing on controller, dispatch, bundle, or verifier ground is the code that answers the next call. The CLI is the same controller, fresh per call; its --help says it is not the ordinary route. Wait on the trace, not on the tool call (FIND-1289).

Windows consoles. The supervisor is DETACHED_PROCESS and has no console. A console child launched from it without CREATE_NO_WINDOW allocates a visible one, and closing that window kills the job (FIND-1466: TRACE-1418, exit 129). The 2026-09-05 recut reported coverage after the legacy Claude lane and Codex Eyes verifier repairs (FIND-1477). Later inspection found bypasses in captured process launches and verifier helpers (FIND-1544/1546), repaired by PATCH-336/337. The Codex launch hold remains (scope corrected by FIND-1561): neither flags nor zero observed windows establish the missing console positive control or a full provider job. CREATE_NO_WINDOW is ignored beside DETACHED_PROCESS, so the supervisor’s own flag set is harmless and one bit of it untrue. The cost that remains: a child in its own console cannot be reached by CTRL_BREAK, so the Claude native lane’s deadline interrupt falls through to terminate then kill. Same as the legacy lane; not a regression.

The supervisor is a child. A worker that kills stray processes by name can still kill it (FIND-1415); the packet now says so and tells the worker to wait by polling a file. The breakaway flag keeps it outside a Grok MCP tool’s Job Object (FIND-1431); when the OS refuses breakaway the retry rides the receipt as supervisor_breakaway=false rather than pretending.


Three hosts, one spine

The pipeline above is provider-blind. What differs per host is the launch argv, the mouth that supervises the child, and what is validated on return.

                    ORCHESTRATOR (sitting on one lane: claude | codex | grok)
                                        |
                                        | ops job start --request-id --role
                                        | family/provider/model inherited
                                        | from the parent unless overridden;
                                        | provider_host explicit on the MCP
                                        v
   +--------------------------  SHARED SPINE  ---------------------------+
   |                                                                     |
   |  assignment -> execution -> TRACE -> worktree lease -> packet       |
   |                                                                     |
   |             [fork 1] capability_bundles: launch argv per host       |
   |                      claude: claude -p <packet> --tools ...         |
   |                              Eyes adds --json-schema and a bounded  |
   |                              Bash (REQ-413/420)                     |
   |                      codex : app-server turn, output_schema         |
   |                      grok  : ACP session, no schema                 |
   |                                                                     |
   |  dispatch --execution-id  ->  supervisor  ->  provider child        |
   |             [fork 2] NATIVE_MOUTHS + the bundle version: which      |
   |                      lane runs the child and what it reads back     |
   |                                                                     |
   |             claude v4 (current) --> legacy lane inside job_dispatch |
   |                                     one-shot claude -p,             |
   |                                     --output-format json            |
   |                                     Hands: return unread            |
   |                                     Eyes : 4 verdicts, --json-schema|
   |             claude v5 (--bundle-version 5) --> claude_job           |
   |                                     stream-json session, host       |
   |                                     witnesses; PROP-251's flip      |
   |                                     is held (FIND-1400)             |
   |             codex  (v6) --> codex_job   app-server                  |
   |                                     Hands: 5 fields, restraint      |
   |                                     Eyes : 4 verdicts               |
   |             grok   (v5) --> grok_job    ACP                         |
   |                                     Hands: free text                |
   |                                     Eyes : free text; the verdict   |
   |                                     is a later prompt (PATCH-286)   |
   |                                                                     |
   |  ops job end --execution-id --actor <worker>                        |
   |     seal handoff + refs/candidates  (Hands)                         |
   |     record verdict on TRACE         (Eyes)                          |
   |     bind + import the host transcript from the job cwd (PATCH-292)  |
   |                                                                     |
   |  land: cherry-pick -> tests -> commit -> set-status fulfilled       |
   |                                                                     |
   +---------------------------------------------------------------------+
                                        ^
                                        |
             [fork 3] transport into the spine, per host client
                      claude_corpus_mcp ---+
                      codex_corpus_mcp  ---+--> corpus_job_mcp --> fresh child
                      grok_corpus_mcp   ---+       per call (REQ-414)
                                                   (or the CLI, fresh per call)

Fork 1 and fork 2 are the same knowledge written twice, once as argv in tools/capability_bundles.py and once as the NATIVE_MOUTHS table in tools/corpus_ops_v1/domains/shop/job_dispatch.py. REQ-411 made the brief read the table so the two cannot drift silently. The gate between the two Claude lanes is claude_job.NATIVE_MOUTH_BUNDLE_VERSIONS, today {"5"}; Codex and Grok take their native mouth whenever the bundle carries a native-children record. Bundle currency runs Codex v6, Grok v5, Claude v4: the host carrying the offices is furthest behind on its own rail.

A job’s family, provider and model resolve from the parent execution or the sitting office unless all three are passed explicitly. Children stay on the parent’s lane by default. Cross-provider is mechanically open and reserved to Human direction by the Orchestrator card.

The Claude Eyes bench. Default permission mode with Bash bounded to git diff/log/show/status and python -m pytest (REQ-413). On Windows the launch refuses when CLAUDE_CODE_GIT_BASH_PATH is not an existing file (REQ-420) rather than degrade to a shell-less bench under a shell label. The projection drops APPDATA, so pytest from the user site may be invisible to the bench; the launch probes import pytest in the projected environment and records pytest_import_probe on the manifest (FIND-1439). Read it before believing a PASS that says tests ran.


Landing, and the version hazard that remains

A candidate lands by cherry-pick, by hand, after Eyes PASS. It is not a branch merge and not a copy of file images.

                              MAIN
                               |
                  newer accepted behavior lands
                               |
                         e.g. PATCH-289
                               |
                 +-------------+-------------+
                 |                           |
                 v                           v
              MAIN                       JOB WORKTREE
              moves on                   cut at job start,
                                         base = main THEN
                                            |
                                            | Hands edits; job end seals
                                            v
                                     HANDOFF COMMIT on that base
                                            |
                                            | Eyes PASS
                                            v
                 +---------- CHERRY-PICK onto main ----------+
                 |                                           |
                 v                                           v
        hunks touch lines main               a hunk crosses a region main
        did not move since the base          moved since the base
                 |                                           |
                 v                                           v
        land as-is; main's newer             Git STOPS with a conflict
        lines survive                                        |
                                                             v
                                              resolve by carrying BOTH
                                              never the candidate's side
                                              over what main moved
                                                             |
                                                             v
                                              run the touched tests on
                                              the merged tree

The worktree is cut when the job starts, not when the REQ was written, and it does not follow main. Every job worktree left on disk holds the tree as it was at its start. None can land by itself: landing takes a seal, a PASS and a hand. The hazard is a recovery sitting reopened on an old worktree, or a job that lives long enough for main to move under it, whose landing is then resolved the wrong way at a conflict. Start recovery from a fresh worktree on current main when one will do. ops job custody shows what is live; REQ-405 retires terminal maker worktrees without losing the candidate.

Git has two different jobs here, and a clean answer from one side does not prove the other:

                         GIT

          +---------------+---------------+
          |                               |
          v                               v
  CONTENT / IDENTITY                  HISTORY / ANCESTRY
  ------------------                  ------------------
  blobs                               base commit
  trees                               handoff commit
  commits                             cherry-pick
  clean filtering                     conflict
          |                               |
          v                               v
  "what candidate is this?"       "which behavior survives?"


git status clean        !=      physical LF-clean worktree
cherry-pick clean       !=      semantic behavior preserved

CRLF, off to the side

The CRLF problem is off to the side of candidate identity:

      Hands writes file
             |
             v
       CRLF on disk
             |
             | git add
             v
       LF Git blob/tree
             |
             v
       candidate identity
          is CORRECT


CRLF on disk
    |
    +------> worktree hygiene problem
    |
    X------> NOT Git candidate identity

The old scheme hashed disk bytes into a versioned candidate digest, so a line ending changed the identity and REQ-371 became unreproducible. It was deleted at 63879db; tests assert its absence. The model now:

              CHECKOUT STATE
                    |
          +---------+---------+
          |                   |
          v                   v
     Git identity          overlay
     ------------          -------
       commit               status
       tree
          |                   |
          +---------+---------+
                    |
                    v
              candidate check

Blobs are LF (.gitattributes); Python writers of repo text pass an LF newline; tests/test_repo_text_newline.py ratchets. Do not bring a content hash back (FIND-1405 wants the status fingerprint, never a content hash).


Whole thing compressed

REQ
 |
 | ops job start (MCP, or the CLI as fallback)
 v
worktree cut from main now = the candidate's base
 |
 v
dispatch: reserve -> detached supervisor -> in_progress returned
 |
 v
supervisor: plan from disk -> pre-launch read (Claude Eyes)
 |                          -> hidden provider child under the wall
 |                          -> reservation finished
 |
 +---- supervisor dies first ---> stranded in_progress
 |                                    |
 |                                    v
 |                             ops job audit
 |                             ops job reconcile-dispatch
 |                                    |
 |                                    v
 |                             state=reconciled, outcome=unknown
 |
 v
job end (controller calls it, actor = the worker)
 |
 |  Hands: seal handoff worktree, refs/candidates, eyes_start_command
 |  Eyes : verdict on the TRACE
 |  both : bind the host transcript from the job cwd, then import it
 |         (PATCH-292; Eyes leaves one too since REQ-439 stepped the Claude
 |          Eyes bundle 4 -> 6 and dropped --no-session-persistence)
 v
Eyes job start --candidate-worktree <handoff>
 |
 | prepare: verify identity + clean overlay      -> REFUSE on any of three
 | pre-launch, in the supervisor: read again     -> REFUSE wrong / edited
 | post-return (Claude): read a third time       -> witness or degraded
 v
PASS
 |
 v
cherry-pick onto main -> conflict? carry both -> touched tests -> commit
 |
 v
set-status fulfilled --review-receipt TRACE-###

Where you are now (2026-09-05)

Candidate identity model        Git identity + overlay; digest REMOVED (63879db)
Prepare / pre-launch / return   three reads on the Claude Eyes lane (REQ-413)
Dispatch                        returns in_progress; Corpus supervisor waits (REQ-427)
MCP staleness                   RETIRED: fresh child per job tool call (REQ-414)
Provider console windows        2026-09-07 correction: Codex launch hold remains
                                (FIND-1543; PATCH-336/337 narrow repairs verified)
                                Claude pipeline continues (Human; FIND-1561)
Stranded reservations           audit names them; reconcile-dispatch closes them
                                (REQ-407); two unresolved at this recut:
                                TRACE-1404, TRACE-1422
Dispatch wall                   7200s default, --wall-time-seconds, IN the packet (REQ-412)
Kill boundary                   WARNED in the packet, not fenced (FIND-1415)
Claude Hands return             UNREAD by the controller, and the brief now says so
                                (FIND-1422 open; REQ-411 landed)
Claude Eyes bench               bounded shell; pytest probed, not promised (FIND-1439)
Cards a goblin/imp is sent to   LANDED (REQ-410)
Brief states the real return    LANDED (REQ-411)
Landing                         cherry-pick by hand; conflicts carry both sides
Job worktrees on disk           0 at this recut; only the _leases ledger remains
                                (all removed on Human's word, ae0418a)
Claude bundle                   v4 default; v5 behind --bundle-version 5; flip HELD
                                (PROP-251, FIND-1400)
Full suite on main              FIND-1413 named a load-dependent red on 2026-09-03;
                                a full run on 2026-09-04 reported 2182 passed
Handoff edited after sealing    FIND-1405, inert while Eyes gets a fresh checkout

The vague concept called “candidate drift” was pulled apart into the actual things underneath it: Git identity, overlay state, physical representation, dispatch state, and ancestry. The diagram is bigger; the individual rules are simpler.


What is enforced, and what is only said

Nothing parses a brief. render_job_brief and the packet are rendered and never read back. Every line in a brief is advice; a wrong line is caught by nothing. So the test for what a brief owes a worker is what will refuse them, that they cannot otherwise discover.

Enforced: these refuse, and folk have paid for them

Gate Where it bites Evidence
Declared write scope Custody return, after the execution is spent FIND-1410; REQ-429 refuses a wildcard at the door and offers custody widen after a miss
Dispatch wall Subprocess timeout in the supervisor TRACE-1324 died on it; TRACE-1326 raced it and killed its own controller
Candidate identity Prepare-time, pre-launch, and post-return on the Claude Eyes lane; three conditions wrong commit, wrong tree, dirty overlay; post-return drift closes the Eyes trace degraded
One dispatch per reservation The token a second dispatch on a reserved TRACE refuses already reserved
Claude Eyes return --json-schema on argv four verdicts, additionalProperties: False
Claude Eyes shell Launch on Windows refuses unless CLAUDE_CODE_GIT_BASH_PATH is an existing file (REQ-420)
Codex Hands return output_schema on the turn five fields, restraint required
Imp verification receipt patch-verification/v2 verifier_status must equal passed iff exit_code is 0
PATCH write receipt declared-path containment, per-path pre/post images refuses an undeclared path; a declared untouched path is a recorded disposition

Stated but not enforced

The rows that were inverted on 2026-09-04 are closed: the wall is in the packet (REQ-412), the imp’s vocabulary is the store’s (REQ-411), and every seating route names the card the folk actually holds (REQ-410).

The roles are not shaped the way the code suggests

job_dispatch.py carries PATCH_JOB_PROFILES = {"hands": "goblin", "eyes": "imp"}, which reads as though goblin and imp are profiles of Hands and Eyes with those benches. The store disagrees: four of 296 goblin and imp sittings ever went through ops job start. The ordinary goblin and imp are spawned by Troll and open their own trace from the Hole packet. The mapping governs a door walked four times.


As it could be drawn

Human reaffirmed this drawing as the intended pipeline destination on 2026-09-07 (FIND-1560). It guides the Codex repair investigation; it is not a claim that the declaration exists or that the recent host update caused the observed defects. PROP-257 is enacted as REQ-381; PROP-251 remains deferred.

Not the current flow. One declaration per host, data not code, read by everything that today asks “which provider is this” on its own. Architect holds the shape (PROP-251, PROP-257: one neutral job router, three host delegators, one closed host table).

                            HOST DECLARATION  (one per host)
                            ======================================================
                            host: claude
                              launch:   exe, argv shape, permission mode, tools
                              bench:    hands = Read Grep Glob Edit Write Bash
                                        eyes  = Read Grep Glob + bounded Bash
                              return:   hands = none  | eyes = claude-eyes-verdict/v1
                              rails:    wall, kill scope, spend ceiling
                              witness:  session path pattern, cost field, model field
                              wake:     SendMessage by name
                            host: codex   { ... same keys ... }
                            host: grok    { ... same keys ... }
                                             |
                    every reader gets the same object; none carries its own copy
                                             |
      +-------------------+-------------------+-------------------+------------------+
      |                   |                   |                   |                  |
      v                   v                   v                   v                  v
   brief             launch argv          supervise           classify           card/baton
 "Return:" line     capability_bundles   NATIVE_MOUTHS       provider return    bench line,
 (REQ-411 moved     (hand-written        (the table           (reads schema     wake command
  this reader)       per host today)      today)               off the same
                                                               declaration)

What already exists toward it: NATIVE_MOUTHS is the return half, capability_bundles is the launch half, house/MODELS.json is a loose witness half. REQ-411 and REQ-412 moved the brief onto the table; REQ-413 moved the Eyes bench line. The launch argv and the classifier remain per-host code, and a run mouth on top of the spine is not cut (FIND-1427).


What was verified

Checked against the repository and the operational store on 2026-09-05 for this recut. Each line says what was read.

What this recut removed: the 2026-09-04 night log, the branch-merge drawing (candidates never land by merge), the in-process dispatch watcher, and the “stale MCP” rule. They are in Git history, not gone.