Write Task Todo
Use this skill after analyze-task and after the analysis has been discussed and aligned when a task is large enough to need multiple implementation loops, commits, reviews, or cross-layer coordination.
This skill turns an analysis result into a single working task document:
Purpose
Create a todo that is:
- structured
- execution-friendly
- test-aware
- biased toward definitions and interfaces before UI
This skill is not for coding and not for long-form design writing.
Preflight gate for large cross-layer tasks
Before writing docs/todolist.md, use a short Decision Draft when the task crosses any of these Formax boundaries:
- permissions / policy / approval / hooks
- runtime config / persistent settings / credentials / secrets
- tool runtime / prompt exposure / deferred exposure / ToolSearch
- SDK / REPL / app-server / Web / Electron entrypoints
- protocol boundaries, child processes, startup timing, session lifecycle, result mapping, files, binary payloads, or cleanup
Do not write the final todo until the Decision Draft is aligned. The draft should be short and must answer:
- Storage and config source: where data lives, who reads it, and who must not read it.
- Schema and strictness: accepted fields, rejected fields, default values, and unknown-field behavior.
- Startup / activation timing: which entrypoint may create side effects and which phases are pure.
- Permission model: whether existing Formax permission / approval / hook flow can express the behavior before adding new actions.
- Capability level: whether the feature is a tool, slash command, SDK control, hook, transcript renderer, config setting, or prompt exposure behavior.
- Entrypoints: REPL, SDK, app-server, Web, and Electron behavior.
- Result / IO boundaries: output caps, file locations, binary/media handling, cleanup, secrets, and timeout behavior.
- Non-goals: what is explicitly out of Phase 1 and what user-visible behavior that implies.
For small single-layer fixes, skip the Decision Draft and keep the todo lightweight.
Core rules
Use a single working todo file
- default path:
docs/todolist.md
Do not create a parallel source-of-truth doc at the start
- put evolving definitions in the todo first
- once a concept becomes stable and long-lived, promote that part into the repo's canonical docs
- in Formax, canonical docs usually mean
docs/contracts/*, docs/frontend/*, docs/environment-variables.md, or tightly owned package-local README deep dives
- after promotion, the todo should reference the canonical doc rather than maintain a second truth
Prefer definitions before implementation
- canonical-doc impact
- data model
- types / interfaces
- tests
- then implementation layers
Use [x] and [ ] strictly
[x] only for confirmed facts, fixed decisions, or completed work
[ ] for pending work
- never mark assumptions as
[x]
The todo must be loop-ready
- break work into mainline slices that can be implemented, verified, reviewed, and committed independently
- every meaningful implementation loop should include an explicit unchecked
codex review item
- every meaningful implementation loop should include a
Loop Contract that says what review may block on and what must be classified as later-loop/non-blocking
- use the repository's existing review profile instead of redefining model, reasoning, or timeout in the todo
If the task is too small to justify a todo
- say so explicitly
- do not create
docs/todolist.md
Do not generate a todo while key alignment questions are still unresolved
- if scope, semantics, host/scope boundaries, or architecture direction are still under discussion, stop and ask for alignment first
Add a spec lock / review-scope lock for high-risk multi-loop work
- required when the task crosses multiple layers such as shared semantics, app-server protocol, session persistence, runtime config/profile, credentials/secrets, startup/recovery, Electron/Web bridge, or Web UI state
- required when review is likely to confuse final-feature completeness with the current implementation slice
- include a semantic decision table and a review finding triage policy before implementation loops
- create a dedicated review findings log when the task is large enough to expect multiple
codex review runs
- do not let the todo imply that review findings are direct edit commands; findings must be classified before code changes
Add an EntryPoint Matrix for cross-entrypoint features
- required when behavior may differ across REPL, SDK, app-server, Web, or Electron
- each relevant entrypoint must say whether it reads config, starts/activates runtime, exposes the capability, renders UI/transcript state, and has tests
- if an entrypoint is explicitly out of scope, say what it does instead, such as empty overlay, unsupported error, no-op with diagnostic, or no surface
Attribute critical semantic decisions
- mark each non-obvious rule as one of:
Reference-derived with the concrete reference, such as Claude Code, OpenAI SDK, MCP SDK/spec, or another repo source
Formax-existing for behavior inherited from current contracts/code
Formax-Phase-1 safety choice for thresholds, fail-closed defaults, local caps, cleanup, or bounded behavior we choose ourselves
User-aligned for decisions explicitly settled with the user
- do not label a rule as parity/reference behavior unless the source was actually checked
Prefer existing Formax models before inventing new concepts
- for permissions, first test whether existing permission / policy / approval / hook flow can express the behavior
- for tools, first decide the product level: normal tool, dynamic tool, ToolSearch/deferred catalog behavior, slash command, SDK control, or renderer
- add new policy actions, protocol fields, brokers, registries, or config files only after documenting why existing Formax contracts cannot express the need
Make non-goals actionable
- for large protocol/runtime/config tasks, a non-goal should say:
- whether the upstream/reference system has the capability
- whether Formax Phase 1 implements it
- what behavior the user sees in Phase 1
- avoid vague non-goals such as "defer X" without the resulting behavior
Run a vague-language scan before finalizing the todo
- search for terms like
where needed, if needed, if practical, either, or explicitly, fallback, unless scoped, later, may, might, optional, as needed, TBD, unresolved
- every hit must become one of:
- a Phase 1 accepted rule
- an explicit non-goal
- a Phase 2 backlog item
- a stop condition
- a question for the user
- do not leave implementation-time choices hidden in prose
Source thresholds and IO bounds
- any output cap, timeout, byte limit, file-backed path, cleanup policy, binary/media behavior, or secret redaction rule must cite its source
- if the value is a Formax local safety choice, say that explicitly and add tests that pin the behavior
Required structure
Use this shape unless a task has a strong reason to be simpler:
# <Feature Name> Todo
## 0. Context and Boundary
### 0.1 Confirmed facts
- [x] ...
### 0.2 Goals
- [ ] ...
### 0.3 Non-goals
- [x] ...
### 0.4 Spec lock and review-scope
- [x/ ] Spec lock required:
- [x/ ] Review findings log:
- [x/ ] Review findings must be classified before code changes
- [x/ ] Current-loop review is scoped by each loop's `Loop Contract`
- [x/ ] Later-loop findings are logged, not chased in the current loop
- [x/ ] Spec ambiguity stops implementation until contracts/todo/user alignment are updated
### 0.5 Decision Draft Summary
- [ ] Storage/config source:
- [ ] Schema/defaults/rejected fields:
- [ ] Startup/activation timing:
- [ ] Permission model:
- [ ] Capability level:
- [ ] Result/IO/cleanup bounds:
- [ ] Explicit non-goals:
## 1. Definitions First
### 1.1 Canonical docs
- [ ] align with existing canonical docs
- [ ] decide whether a new canonical doc will be needed later
### 1.2 Data model
- [ ] ...
### 1.3 Types / Interfaces
- [ ] ...
### 1.4 Semantic decision table
| Decision | Accepted rule | Source | Alternatives rejected / deferred | Contract target | Test implication |
|---|---|---|---|---|---|
| ... | ... | `Reference-derived` / `Formax-existing` / `Formax-Phase-1 safety choice` / `User-aligned` | ... | ... | ... |
### 1.5 EntryPoint Matrix
| EntryPoint | Reads config? | Activates runtime? | Exposes capability? | UI/transcript behavior | Tests |
|---|---|---|---|---|---|
| REPL | ... | ... | ... | ... | ... |
| SDK | ... | ... | ... | ... | ... |
| app-server | ... | ... | ... | ... | ... |
| Web | ... | ... | ... | ... | ... |
| Electron | ... | ... | ... | ... | ... |
### 1.6 Review finding triage policy
- [ ] Classify every review finding as `true blocker`, `valid but later-loop`, `spec ambiguity`, `reviewer preference`, or `conflicts with accepted contract`
- [ ] Fix code only for true blockers inside the current loop contract, accepted contract violations, or localized low-risk implementation bugs
- [ ] For later-loop findings, update the review findings log and make sure a future loop owns the acceptance item
- [ ] For spec ambiguity, stop implementation and update contracts/todo or ask the user before editing code
- [ ] For reviewer preference, do not adopt unless it is low-risk, local to the current loop, and does not change behavior or scope
- [ ] For contract conflicts, do not implement the finding; cite the accepted contract and add a focused regression test if needed
- [ ] Re-run review only after triage is documented and targeted tests pass
## 2. Runtime / Platform
- [ ] core
- [ ] contracts
- [ ] app
- [ ] runtime
## 3. Frontend Boundary
- [ ] repo
- [ ] service
- [ ] runtime
- [ ] ui
## 4. Tests
- [ ] runtime tests
- [ ] ui tests
- [ ] integration tests
## 5. Recommended Execution Order
### Loop 1
#### Loop Contract
- Purpose:
- In scope:
- Out of scope:
- Blocking findings:
- Non-blocking / later-loop findings:
- Known unresolved semantics:
- Required targeted tests:
- Review prompt scope:
- Exit criteria:
- [ ] ...
- [ ] triage review findings into the review findings log
- [ ] run `codex review` for this loop after targeted verification passes
### Loop 2
#### Loop Contract
- Purpose:
- In scope:
- Out of scope:
- Blocking findings:
- Non-blocking / later-loop findings:
- Known unresolved semantics:
- Required targeted tests:
- Review prompt scope:
- Exit criteria:
- [ ] ...
- [ ] triage review findings into the review findings log
- [ ] run `codex review` for this loop after targeted verification passes
Adaptation rules
- Drop sections that truly do not apply, but keep the ordering principle.
- If the task is backend-only or frontend-only, simplify the irrelevant half instead of filling it with noise.
- If the task is documentation-only, keep the todo much smaller and avoid fake engineering sections.
- If the prior analysis still has unresolved
Alignment Questions, do not write the todo yet.
- If the task is primarily a Formax web GUI/runtime task, prefer
Runtime / Platform plus Frontend Boundary over generic backend/database sections.
What good looks like
A good todo should:
- make the next implementation loop obvious
- make verification obvious
- make loop-level review explicit
- show where tests belong
- prevent UI-first drift
- make it easy to know when the todo is done
- reflect aligned decisions rather than unresolved debate
- make entrypoint differences visible instead of implicit
- distinguish reference parity from Formax safety choices
Review rule
When writing ## 5. Recommended Execution Order:
- include a
codex review checkbox in every meaningful implementation loop
- include a
Loop Contract before every meaningful implementation loop's checklist
- make the
Loop Contract explicit about blocking vs non-blocking/later-loop findings
- place the review item after the loop's targeted verification step
- place a review-finding triage/logging item after targeted verification and before the review is considered handled
- keep the item unchecked unless that loop has actually been completed
- prefer wording like
- [ ] run \codex review` for this loop`
- do not restate model, reasoning, or timeout settings if the repository already defines a single-source-of-truth review profile
- if review finds issues, the next todo update should classify them before code edits:
true blocker: fix in the current loop
valid but later-loop: log and bind to a later loop
spec ambiguity: stop implementation and update contracts/todo or ask the user
reviewer preference: usually do not adopt unless low-risk and local
conflicts with accepted contract: do not implement; cite the contract and consider a regression test
Review churn trigger
For large multi-loop tasks, include a stop/escalation rule in the todo or review findings log. Stop implementation edits and run a convergence pass when any condition is true:
- two review rounds in the same loop produce new P1/P2 semantic findings after targeted tests pass
- any finding contradicts an accepted contract or confirmed user decision
- the same semantic cluster receives opposite recommendations across rounds
- a finding requires changing behavior outside the current loop contract
- more than three findings in one review are not obvious code bugs
- a credential, secret, startup gate, fail-open/fail-closed, durable-state, runtime-profile, or protocol-boundary finding is not already covered by contract/todo
- the agent is about to make a third code change in the same semantic area only to satisfy review
Vague-language final check
Before handing the todo back to the user, run a text search over the todo for ambiguous planning language:
rg -n "where needed|if needed|if practical|either|or explicitly|fallback|unless scoped|later|may|might|optional|as needed|TBD|unresolved" docs/todolist.md
Classify every match. It is acceptable for a match to remain only when it is clearly inside a Phase 2 backlog item, a stop condition, or a review triage rule. It is not acceptable for a Phase 1 implementation item to leave the decision open.
Completion rule
When the work is finished:
- stable long-lived facts should live in the repo's canonical docs
docs/todolist.md should be deleted
- no parallel definitions should remain behind
1---2name: write-task-todo3description: Use after task analysis when a non-trivial Formax repository task needs a structured `docs/todolist.md` with [x]/[ ] items, definitions-before-UI ordering, explicit non-goals, tests, and loop-ready execution slices.4---56# Write Task Todo78Use this skill after `analyze-task` **and after the analysis has been discussed and aligned** when a task is large enough to need multiple implementation loops, commits, reviews, or cross-layer coordination.910This skill turns an analysis result into a **single working task document**:1112- `docs/todolist.md`1314## Purpose1516Create a todo that is:1718- structured19- execution-friendly20- test-aware21- biased toward definitions and interfaces before UI2223This skill is **not** for coding and **not** for long-form design writing.2425## Preflight gate for large cross-layer tasks2627Before writing `docs/todolist.md`, use a short **Decision Draft** when the task crosses any of these Formax boundaries:2829- permissions / policy / approval / hooks30- runtime config / persistent settings / credentials / secrets31- tool runtime / prompt exposure / deferred exposure / ToolSearch32- SDK / REPL / app-server / Web / Electron entrypoints33- protocol boundaries, child processes, startup timing, session lifecycle, result mapping, files, binary payloads, or cleanup3435Do not write the final todo until the Decision Draft is aligned. The draft should be short and must answer:3637- Storage and config source: where data lives, who reads it, and who must not read it.38- Schema and strictness: accepted fields, rejected fields, default values, and unknown-field behavior.39- Startup / activation timing: which entrypoint may create side effects and which phases are pure.40- Permission model: whether existing Formax permission / approval / hook flow can express the behavior before adding new actions.41- Capability level: whether the feature is a tool, slash command, SDK control, hook, transcript renderer, config setting, or prompt exposure behavior.42- Entrypoints: REPL, SDK, app-server, Web, and Electron behavior.43- Result / IO boundaries: output caps, file locations, binary/media handling, cleanup, secrets, and timeout behavior.44- Non-goals: what is explicitly out of Phase 1 and what user-visible behavior that implies.4546For small single-layer fixes, skip the Decision Draft and keep the todo lightweight.4748## Core rules49501. Use a single working todo file51 - default path: `docs/todolist.md`52532. Do **not** create a parallel source-of-truth doc at the start54 - put evolving definitions in the todo first55 - once a concept becomes stable and long-lived, promote that part into the repo's canonical docs56 - in Formax, canonical docs usually mean `docs/contracts/*`, `docs/frontend/*`, `docs/environment-variables.md`, or tightly owned package-local README deep dives57 - after promotion, the todo should reference the canonical doc rather than maintain a second truth58593. Prefer **definitions before implementation**60 - canonical-doc impact61 - data model62 - types / interfaces63 - tests64 - then implementation layers65664. Use `[x]` and `[ ]` strictly67 - `[x]` only for confirmed facts, fixed decisions, or completed work68 - `[ ]` for pending work69 - never mark assumptions as `[x]`70715. The todo must be **loop-ready**72 - break work into mainline slices that can be implemented, verified, reviewed, and committed independently73 - every meaningful implementation loop should include an explicit unchecked `codex review` item74 - every meaningful implementation loop should include a `Loop Contract` that says what review may block on and what must be classified as later-loop/non-blocking75 - use the repository's existing review profile instead of redefining model, reasoning, or timeout in the todo76776. If the task is too small to justify a todo78 - say so explicitly79 - do not create `docs/todolist.md`80817. Do not generate a todo while key alignment questions are still unresolved82 - if scope, semantics, host/scope boundaries, or architecture direction are still under discussion, stop and ask for alignment first83848. Add a **spec lock / review-scope lock** for high-risk multi-loop work85 - required when the task crosses multiple layers such as shared semantics, app-server protocol, session persistence, runtime config/profile, credentials/secrets, startup/recovery, Electron/Web bridge, or Web UI state86 - required when review is likely to confuse final-feature completeness with the current implementation slice87 - include a semantic decision table and a review finding triage policy before implementation loops88 - create a dedicated review findings log when the task is large enough to expect multiple `codex review` runs89 - do not let the todo imply that review findings are direct edit commands; findings must be classified before code changes90919. Add an **EntryPoint Matrix** for cross-entrypoint features92 - required when behavior may differ across REPL, SDK, app-server, Web, or Electron93 - each relevant entrypoint must say whether it reads config, starts/activates runtime, exposes the capability, renders UI/transcript state, and has tests94 - if an entrypoint is explicitly out of scope, say what it does instead, such as empty overlay, unsupported error, no-op with diagnostic, or no surface959610. Attribute critical semantic decisions97 - mark each non-obvious rule as one of:98 - `Reference-derived` with the concrete reference, such as Claude Code, OpenAI SDK, MCP SDK/spec, or another repo source99 - `Formax-existing` for behavior inherited from current contracts/code100 - `Formax-Phase-1 safety choice` for thresholds, fail-closed defaults, local caps, cleanup, or bounded behavior we choose ourselves101 - `User-aligned` for decisions explicitly settled with the user102 - do not label a rule as parity/reference behavior unless the source was actually checked10310411. Prefer existing Formax models before inventing new concepts105 - for permissions, first test whether existing permission / policy / approval / hook flow can express the behavior106 - for tools, first decide the product level: normal tool, dynamic tool, ToolSearch/deferred catalog behavior, slash command, SDK control, or renderer107 - add new policy actions, protocol fields, brokers, registries, or config files only after documenting why existing Formax contracts cannot express the need10810912. Make non-goals actionable110 - for large protocol/runtime/config tasks, a non-goal should say:111 - whether the upstream/reference system has the capability112 - whether Formax Phase 1 implements it113 - what behavior the user sees in Phase 1114 - avoid vague non-goals such as "defer X" without the resulting behavior11511613. Run a vague-language scan before finalizing the todo117 - search for terms like `where needed`, `if needed`, `if practical`, `either`, `or explicitly`, `fallback`, `unless scoped`, `later`, `may`, `might`, `optional`, `as needed`, `TBD`, `unresolved`118 - every hit must become one of:119 - a Phase 1 accepted rule120 - an explicit non-goal121 - a Phase 2 backlog item122 - a stop condition123 - a question for the user124 - do not leave implementation-time choices hidden in prose12512614. Source thresholds and IO bounds127 - any output cap, timeout, byte limit, file-backed path, cleanup policy, binary/media behavior, or secret redaction rule must cite its source128 - if the value is a Formax local safety choice, say that explicitly and add tests that pin the behavior129130## Required structure131132Use this shape unless a task has a strong reason to be simpler:133134```md135# <Feature Name> Todo136137## 0. Context and Boundary138139### 0.1 Confirmed facts140- [x] ...141142### 0.2 Goals143- [ ] ...144145### 0.3 Non-goals146- [x] ...147148### 0.4 Spec lock and review-scope149- [x/ ] Spec lock required:150- [x/ ] Review findings log:151- [x/ ] Review findings must be classified before code changes152- [x/ ] Current-loop review is scoped by each loop's `Loop Contract`153- [x/ ] Later-loop findings are logged, not chased in the current loop154- [x/ ] Spec ambiguity stops implementation until contracts/todo/user alignment are updated155156### 0.5 Decision Draft Summary157- [ ] Storage/config source:158- [ ] Schema/defaults/rejected fields:159- [ ] Startup/activation timing:160- [ ] Permission model:161- [ ] Capability level:162- [ ] Result/IO/cleanup bounds:163- [ ] Explicit non-goals:164165## 1. Definitions First166167### 1.1 Canonical docs168- [ ] align with existing canonical docs169- [ ] decide whether a new canonical doc will be needed later170171### 1.2 Data model172- [ ] ...173174### 1.3 Types / Interfaces175- [ ] ...176177### 1.4 Semantic decision table178| Decision | Accepted rule | Source | Alternatives rejected / deferred | Contract target | Test implication |179|---|---|---|---|---|---|180| ... | ... | `Reference-derived` / `Formax-existing` / `Formax-Phase-1 safety choice` / `User-aligned` | ... | ... | ... |181182### 1.5 EntryPoint Matrix183| EntryPoint | Reads config? | Activates runtime? | Exposes capability? | UI/transcript behavior | Tests |184|---|---|---|---|---|---|185| REPL | ... | ... | ... | ... | ... |186| SDK | ... | ... | ... | ... | ... |187| app-server | ... | ... | ... | ... | ... |188| Web | ... | ... | ... | ... | ... |189| Electron | ... | ... | ... | ... | ... |190191### 1.6 Review finding triage policy192- [ ] Classify every review finding as `true blocker`, `valid but later-loop`, `spec ambiguity`, `reviewer preference`, or `conflicts with accepted contract`193- [ ] Fix code only for true blockers inside the current loop contract, accepted contract violations, or localized low-risk implementation bugs194- [ ] For later-loop findings, update the review findings log and make sure a future loop owns the acceptance item195- [ ] For spec ambiguity, stop implementation and update contracts/todo or ask the user before editing code196- [ ] For reviewer preference, do not adopt unless it is low-risk, local to the current loop, and does not change behavior or scope197- [ ] For contract conflicts, do not implement the finding; cite the accepted contract and add a focused regression test if needed198- [ ] Re-run review only after triage is documented and targeted tests pass199200## 2. Runtime / Platform201- [ ] core202- [ ] contracts203- [ ] app204- [ ] runtime205206## 3. Frontend Boundary207- [ ] repo208- [ ] service209- [ ] runtime210- [ ] ui211212## 4. Tests213- [ ] runtime tests214- [ ] ui tests215- [ ] integration tests216217## 5. Recommended Execution Order218219### Loop 1220#### Loop Contract221- Purpose:222- In scope:223- Out of scope:224- Blocking findings:225- Non-blocking / later-loop findings:226- Known unresolved semantics:227- Required targeted tests:228- Review prompt scope:229- Exit criteria:230231- [ ] ...232- [ ] triage review findings into the review findings log233- [ ] run `codex review` for this loop after targeted verification passes234235### Loop 2236#### Loop Contract237- Purpose:238- In scope:239- Out of scope:240- Blocking findings:241- Non-blocking / later-loop findings:242- Known unresolved semantics:243- Required targeted tests:244- Review prompt scope:245- Exit criteria:246247- [ ] ...248- [ ] triage review findings into the review findings log249- [ ] run `codex review` for this loop after targeted verification passes250```251252## Adaptation rules253254- Drop sections that truly do not apply, but keep the ordering principle.255- If the task is backend-only or frontend-only, simplify the irrelevant half instead of filling it with noise.256- If the task is documentation-only, keep the todo much smaller and avoid fake engineering sections.257- If the prior analysis still has unresolved `Alignment Questions`, do not write the todo yet.258- If the task is primarily a Formax web GUI/runtime task, prefer `Runtime / Platform` plus `Frontend Boundary` over generic backend/database sections.259260## What good looks like261262A good todo should:263264- make the next implementation loop obvious265- make verification obvious266- make loop-level review explicit267- show where tests belong268- prevent UI-first drift269- make it easy to know when the todo is done270- reflect aligned decisions rather than unresolved debate271- make entrypoint differences visible instead of implicit272- distinguish reference parity from Formax safety choices273274## Review rule275276When writing `## 5. Recommended Execution Order`:277278- include a `codex review` checkbox in every meaningful implementation loop279- include a `Loop Contract` before every meaningful implementation loop's checklist280- make the `Loop Contract` explicit about blocking vs non-blocking/later-loop findings281- place the review item after the loop's targeted verification step282- place a review-finding triage/logging item after targeted verification and before the review is considered handled283- keep the item unchecked unless that loop has actually been completed284- prefer wording like `- [ ] run \`codex review\` for this loop`285- do not restate model, reasoning, or timeout settings if the repository already defines a single-source-of-truth review profile286- if review finds issues, the next todo update should classify them before code edits:287 - `true blocker`: fix in the current loop288 - `valid but later-loop`: log and bind to a later loop289 - `spec ambiguity`: stop implementation and update contracts/todo or ask the user290 - `reviewer preference`: usually do not adopt unless low-risk and local291 - `conflicts with accepted contract`: do not implement; cite the contract and consider a regression test292293## Review churn trigger294295For large multi-loop tasks, include a stop/escalation rule in the todo or review findings log. Stop implementation edits and run a convergence pass when any condition is true:296297- two review rounds in the same loop produce new P1/P2 semantic findings after targeted tests pass298- any finding contradicts an accepted contract or confirmed user decision299- the same semantic cluster receives opposite recommendations across rounds300- a finding requires changing behavior outside the current loop contract301- more than three findings in one review are not obvious code bugs302- a credential, secret, startup gate, fail-open/fail-closed, durable-state, runtime-profile, or protocol-boundary finding is not already covered by contract/todo303- the agent is about to make a third code change in the same semantic area only to satisfy review304305## Vague-language final check306307Before handing the todo back to the user, run a text search over the todo for ambiguous planning language:308309```sh310rg -n "where needed|if needed|if practical|either|or explicitly|fallback|unless scoped|later|may|might|optional|as needed|TBD|unresolved" docs/todolist.md311```312313Classify every match. It is acceptable for a match to remain only when it is clearly inside a Phase 2 backlog item, a stop condition, or a review triage rule. It is not acceptable for a Phase 1 implementation item to leave the decision open.314315## Completion rule316317When the work is finished:3183191. stable long-lived facts should live in the repo's canonical docs3202. `docs/todolist.md` should be deleted3213. no parallel definitions should remain behind