Tasks: the checklist asks, the config answers when nobody did
Phase 3 of 3. A DAG of small, verifiable tasks. Each task references the requirements it serves and names the testing-plan row that proves it.
tdd.mode: standard— the red tests come first and their failure is captured as evidence.
Task list
- [x] T1 — red: the gate renders and freezes a mode. Assert the posted checklist carries the three
pr-sessions-*rows with the configured default pre-ticked; that ticking one freezes it into the decision, the frozen graph and the published record and names it in the confirmation; that none/several fall back to the default; and that a mode row is never read as a phase. Fails today: no such rows. Requirements: R1.1–R1.5, R3.1, R3.3 · Test: T1, T10 - [x] T2 — red: routing honours the frozen mode. Assert
_endpoint_forunder a frozenalways/never/ absent / invalid mode on a daemon configuredcross-repository, that two work items resolve independently, and thatdelivery_statusresolves through the same mode. Fails today: onlyself.config.tmuxis consulted. Requirements: R2.1–R2.5, R3.4 · Test: T3, T10, T12 - [x] T3 — red: the integration scenario. One Gherkin-documented scenario through the receiver: a work item frozen to
neveron a daemon configuredcross-repositorykeeps a cross-repository pull request's events in the work item's session. Requirements: R1.2, R2.1 · Test: T4 - [x] T4 — green: the shared vocabulary. Move the mode constants and the resolver out of
webhook/dispatcher.pyintothe_loop/prsessions.py; the dispatcher imports them. No behaviour change — T2 of the testing plan proves the resolver from its new home. Requirements: R3.2 · Test: T2 - [x] T5 — green: the operator's default reaches the gate.
graph/bootstrap.pyreadsrouting.tmux.sessionPerPrfrom the CLI config it already loads and puts the resolved mode in the hook config. Requirements: R1.1, R3.2 · Test: T1 · Depends: T4 - [x] T6 — green: the rows.
graph/hooks/selection.pyrenders the three rows, parses them into a mode, keeps them out of the phase vocabulary, states the result in the confirmation, and carries it on the hook result and insidefrozenGraph. Turns T1 green. Requirements: R1.1–R1.4, R3.1, R3.3 · Test: T1, T10 · Depends: T5 - [x] T7 — green: recording.
graph/runtime.pycopies the mode into thephase-selectiondecision besidesurface;ControlStoregains the reader that mirrorsrecord_frozen_graph. Requirements: R1.3 · Test: T1, T3 · Depends: T6 - [x] T8 — green: routing.
Dispatcher._tmux_for(work_item)substitutes the frozen mode into the operator'sTmuxConfig;_endpoint_foranddelivery_statususe it. Turns T2 and T3 green. Requirements: R2.1–R2.5, R4.1–R4.3 · Test: T3, T4 · Depends: T7 - [x] T9 — docs: the configuration reference.
docs/config/cli/routing-options.mdstates thattmux.sessionPerPris the default and thatphase-selectionoverrides it, with the token names. Keeps the docs-parity gate green. Requirements: R1, R2, R3 · Test: T14 · Depends: T8 - [x] T10 — docs: capabilities, skill and decision.
docs/capabilities/process-graph.md(the gate's second and third questions),docs/capabilities/webhook-triggers.md(routing reads the frozen mode first),docs/cli/state.md(the portable record's new key), the twocli-config.yamlcommentaries and both schema descriptions,skills/the-loop/reference/workflow.md+skills/the-loop/SKILL.md(the checklist's other box), anddecision-093.md+ the decisions index. Requirements: R1, R2 · Test: T14 · Depends: T8 - [x] T11 — verification. Run every activity in
testing-plan.md, commit the evidence, fill Verification results. Test: all · Depends: T9, T10
Dependency graph (DAG)
mermaid
flowchart LR
T1 --> T6
T2 --> T8
T3 --> T8
T4 --> T5 --> T6 --> T7 --> T8
T8 --> T9 --> T11
T8 --> T10 --> T11The three red roots are independent: the gate (T1), routing (T2) and the end-to-end scenario (T3) each fail for their own reason before any production line moves.
Checkpoints
- After T3: the full red run is captured to
evidence/red.mdand committed before any production line changes. That commit is the TDD record. - After T8:
make testis green — proof that R3 holds (the default path is untouched) before any documentation is written against the new behaviour. - After T11: the ready-to-ship gate — green checks, capability docs updated in this pull request, reviewer briefing posted.
Review comments
Appended by the-loop's
record-feedbackhook when a human gate approves with comments.