Workflow Implement Review
Router Required Reading
Do not read ts-implement or ts-review in the router. Pass those skill names
verbatim to the dispatched judges.
Role
Workflow Build is a router.
It runs a fixed sequence:
(judge-implement -> judge-review){1,n}
It dispatches judge passes to subagents, reads status and finding dispositions,
and routes the next pass. It never edits, reviews, verifies, or changes code
itself.
The router's only write target is the work log. Any code change belongs to a
dispatched judge.
Use this when the user asks to build, implement, fix, or change code and wants a
review loop. This skill does not create a plan. The user request can be ad-hoc
or linked to a prior plan.
Sub-Agent Selection
Use this section when this skill dispatches sub-agent judges.
- Choose the first available entry for the judge role.
- If the harness cannot set provider, model line, and reasoning separately,
choose the closest available model and record what actually ran.
- Do not dispatch extra judges just to use every entry.
Implementation Judge
| Priority |
Provider |
Model line |
Reasoning |
| 1 |
OpenAI |
sol latest |
high |
| 2 |
Anthropic |
opus latest |
high |
| 3 |
OpenAI |
terra latest |
medium |
| 4 |
Cursor |
composer |
high |
Review Judge
| Priority |
Provider |
Model line |
Reasoning |
| 1 |
OpenAI |
astra latest |
high |
| 2 |
Anthropic |
fable latest |
high |
| 3 |
OpenAI |
sol latest |
high |
| 4 |
Anthropic |
opus latest |
high |
| 5 |
Cursor |
composer |
high |
Workflow
- CREATE_LOG
- DISPATCH_IMPLEMENT
- DISPATCH_REVIEW
- ROUTE_NEXT_PASS
- HANDLE_DEVELOPER_FEEDBACK
CREATE_LOG
- Use the
ts-log skill to create the shared work log.
- Record the user request as
Source request:. Link a plan or design artifact
when one exists, or copy the request inline.
- Record the workflow baseline: base ref (current
git HEAD) and starting dirty
files (git status).
- In this workflow, the router owns log creation and routing state. Each
judge pass owns its own log entry, artifact links, findings, worker dispatch
count, types, providers, model lines, reasoning levels, and handoff.
- The router must record the exact selected provider, model line, and reasoning
level for each dispatched judge in the work log.
- When composing a judge prompt, replace
<provider>, <model-line>, and
<reasoning> with the actual selected values.
- Always pass the same log path to every judge pass.
- Use the owning skill's artifact directory for each pass: reviews in
docs/reviews/, work logs in docs/work-logs/.
- Sub-agents must start with fresh context. Never fork parent history. Use a
self-contained prompt: cwd, log path, source request, baseline, relevant
artifacts, and output contract.
- Always close sub-agents once they return. After each pass returns its status
line, kill the spawned sub-agent before routing the next pass; do not let them
stick around.
DISPATCH_IMPLEMENT
- Dispatch an implementation judge from the
Implementation Judge list.
- Prompt:
You are the implementation judge. Use `skill: ts-implement`.
Work log path: <path>. Respect the recorded baseline; do not absorb
unrelated pre-existing user changes.
Dispatched judge: provider <provider>, model line <model-line>, reasoning <reasoning>.
Task input:
- On pass 1: implement the linked source request from the log.
- If the log contains developer feedback, use it as input for the implementation
pass.
- On later passes, resolve every blocker with the smallest in-scope change.
Treat suggested fixes as advice.
- Escalate before expanding a public contract, architecture, deployment
surface, or product scope without recorded user authority.
- Preserve review-owned direct writing edits recorded in the log unless an open
finding explicitly requires changing them.
Before returning, you must:
- Write or update the work log at `<path>`.
- Record the dispatched judge and every worker as provider, model line, and
reasoning level in the work log.
- Record worker dispatches as `<count> (<type>: <provider>/<model-line>/<reasoning>, ...)`, e.g.
`2 (frontend: openai/terra latest/medium, backend: anthropic/sonnet latest/medium)`.
Return exactly one status line:
STATUS: DONE
STATUS: BLOCKED: <reason>
STATUS: ESCALATE: <reason>
DISPATCH_REVIEW
- Dispatch a review judge from the
Review Judge list.
- Prompt:
You are the review judge. Use `skill: ts-review`.
Work log path: <path>.
Dispatched judge: provider <provider>, model line <model-line>, reasoning <reasoning>.
Review the workflow-owned diff against the source request, workflow baseline,
and latest implementation handoff in the log.
The source request, named plan or design, and recorded user decisions define
the review contract. Principles do not expand it. The first formal review is
`initial`; later reviews are `follow-up`.
For a new inspection, run all review types from `skill: ts-review`.
When dispatched to resolve pending review questions, resume adjudication
from the existing artifact. Preserve mode, finding IDs, and admission; inspect
only missing or changed evidence.
Workers do not know the mode or prior rulings. Classify their findings:
- `regular`: found initially or introduced by an identified later change
- `out-of-scope`: no basis in the review contract or remediation
- `carried`: the same open finding remains unresolved
- `regression`: the same resolved finding has recurred
- `late`: first reported in a follow-up without a later change that caused it
`carried` and `regression` require the prior ID and the same contract and
impact. A broader defect gets its own class. New follow-up findings default to
`late`; use `regular` only when evidence names the later change that caused it.
Record `**Admission:**` and `**Scope Basis:**` with the requirement, decision,
finding ID, or remediation change.
Technical-writing review may make direct writing edits allowed by `ts-review`.
Treat those edits as review-owned workflow changes, not unrelated user changes.
In a follow-up review, limit technical-writing direct edits to writing changed
by the latest implementation pass or required by an open finding.
Rule on every finding before assigning work. Keep rejected, resolved, and
duplicate findings in the review artifact without remediation tasks.
For deferred rulings, record the finding IDs and exact questions in the log and
return `STATUS: ESCALATE: review context needed` for the router to relay.
Apply these dispositions only to upheld findings, using final severity:
- Critical and high `regular`, `carried`, and `regression`: `fix now`.
- Critical and high `late`: record it and return `STATUS: ESCALATE`.
- Low or `out-of-scope`: executable `follow-up`.
- Work outside the review contract: `STATUS: ESCALATE`.
This is a formal workflow review, not an informal review. You must write a
separate review artifact, even when there are no findings.
Keep upheld and deferred findings in `## Open Findings`, with ruling, reasoning,
final severity, admission, scope basis, disposition, and next action. Remove
closed entries from that section; retain every finding in the review artifact.
Review status semantics:
- `STATUS: DONE`: review completed with no blocking findings or deferred rulings.
- `STATUS: BLOCKED`: review completed with blocking findings for the next
implementation pass.
- `STATUS: ESCALATE`: a human decision or exception is needed.
Before returning, you must:
- Write the review artifact using the `ts-review` artifact rules.
- Write or update the work log at `<path>`.
- Use these artifact destinations:
- Review artifact: `docs/reviews/YYYY-MM-DD_HH:MM_<review-type>_<review-name>.md`.
- Workflow log: `<path>`.
- Record the review artifact link in `## Artifacts`.
- Keep the work log as coordination state with links, finding dispositions,
pass status, worker metadata, and handoff.
- If direct edits were made, record changed paths and purpose in the review
artifact and work log handoff.
- Record the dispatched judge and every worker as provider, model line, and
reasoning level in the work log.
- Record worker dispatches as `<count> (<type>: <provider>/<model-line>/<reasoning>, ...)`, e.g.
`2 (automatic-testing: anthropic/fable latest/high, robustness: openai/astra latest/high)`.
Return exactly one status line:
STATUS: DONE
STATUS: BLOCKED: <reason>
STATUS: ESCALATE: <reason>
ROUTE_NEXT_PASS
- Read
## Open Findings and ## Current State from the log before deciding.
- Count each completed review round once in
## Current State. A review paused
for context and its resumed adjudication belong to the same round.
- If subagent dispatch fails (tool error, no return), stop with
STATUS: BLOCKED: subagents unavailable.
- If a dispatched judge returns no status line or more than one, stop with
STATUS: BLOCKED: invalid handoff.
- If implementation returns
BLOCKED or ESCALATE, stop and report.
- If review returns
ESCALATE, relay its recorded questions or decision to the
user. Leave the next handoff in ## Current State; stop until answered.
- If review returns
BLOCKED, route from ## Open Findings.
- Treat any
fix now finding as blocking. Use the review judge's disposition;
do not reclassify findings in the router.
- If review has no blocking findings or deferred rulings, stop with
STATUS: DONE.
- If review has blocking findings and the round limit is not reached, dispatch
implementation again with the same log path.
- If developer feedback arrives after any router report, handle it through
HANDLE_DEVELOPER_FEEDBACK.
- Default round limit is 5 unless the user sets another. One round is one
implementation pass followed by one review pass.
- If the round limit is reached with open blocking findings, stop with
STATUS: BLOCKED: review loop limit reached.
HANDLE_DEVELOPER_FEEDBACK
- Record user feedback verbatim in
## Timeline and its next handoff in
## Current State, including feedback after STATUS: DONE.
- Route answers to pending review questions back to a fresh review judge with
the same log and review artifact. Resume adjudication in the same round;
the judge records reusable context and updates the rulings.
- Route code change requests to implementation as a new round, then review.
Pass the same log path and any accompanying context answers.
- Before dispatch, update only the work log. Never edit code.
Stop Conditions
STATUS: DONE: latest review pass completed with no blocking findings or
deferred rulings in ## Open Findings.
STATUS: BLOCKED: <reason>: required input, dependency, or verification is
unavailable. Includes subagents unavailable, invalid handoff, and
review loop limit reached.
STATUS: ESCALATE: <reason>: a human decision is needed.
1---2name: ts-workflow-implement-review3description: Run an implement-review loop. Only explicitly triggered by user.4---56# Workflow Implement Review78## Router Required Reading910- skill: ts-log1112Do not read `ts-implement` or `ts-review` in the router. Pass those skill names13verbatim to the dispatched judges.1415## Role1617Workflow Build is a router.1819It runs a fixed sequence:2021`(judge-implement -> judge-review){1,n}`2223It dispatches judge passes to subagents, reads status and finding dispositions,24and routes the next pass. It never edits, reviews, verifies, or changes code25itself.2627The router's only write target is the work log. Any code change belongs to a28dispatched judge.2930Use this when the user asks to build, implement, fix, or change code and wants a31review loop. This skill does not create a plan. The user request can be ad-hoc32or linked to a prior plan.3334## Sub-Agent Selection3536Use this section when this skill dispatches sub-agent judges.3738- Choose the first available entry for the judge role.39- If the harness cannot set provider, model line, and reasoning separately,40 choose the closest available model and record what actually ran.41- Do not dispatch extra judges just to use every entry.4243### Implementation Judge4445| Priority | Provider | Model line | Reasoning |46| --- | --- | --- | --- |47| 1 | OpenAI | `sol` latest | `high` |48| 2 | Anthropic | `opus` latest | `high` |49| 3 | OpenAI | `terra` latest | `medium` |50| 4 | Cursor | `composer` | `high` |5152### Review Judge5354| Priority | Provider | Model line | Reasoning |55| --- | --- | --- | --- |56| 1 | OpenAI | `astra` latest | `high` |57| 2 | Anthropic | `fable` latest | `high` |58| 3 | OpenAI | `sol` latest | `high` |59| 4 | Anthropic | `opus` latest | `high` |60| 5 | Cursor | `composer` | `high` |6162## Workflow63641. CREATE_LOG652. DISPATCH_IMPLEMENT663. DISPATCH_REVIEW674. ROUTE_NEXT_PASS685. HANDLE_DEVELOPER_FEEDBACK6970### CREATE_LOG7172- Use the `ts-log` skill to create the shared work log.73- Record the user request as `Source request:`. Link a plan or design artifact74 when one exists, or copy the request inline.75- Record the workflow baseline: base ref (current `git HEAD`) and starting dirty76 files (`git status`).77- In this workflow, the router owns log creation and routing state. Each78 judge pass owns its own log entry, artifact links, findings, worker dispatch79 count, types, providers, model lines, reasoning levels, and handoff.80- The router must record the exact selected provider, model line, and reasoning81 level for each dispatched judge in the work log.82- When composing a judge prompt, replace `<provider>`, `<model-line>`, and83 `<reasoning>` with the actual selected values.84- Always pass the same log path to every judge pass.85- Use the owning skill's artifact directory for each pass: reviews in86 `docs/reviews/`, work logs in `docs/work-logs/`.87- Sub-agents must start with fresh context. Never fork parent history. Use a88 self-contained prompt: cwd, log path, source request, baseline, relevant89 artifacts, and output contract.90- Always close sub-agents once they return. After each pass returns its status91 line, kill the spawned sub-agent before routing the next pass; do not let them92 stick around.9394### DISPATCH_IMPLEMENT9596- Dispatch an implementation judge from the `Implementation Judge` list.97- Prompt:9899```text100You are the implementation judge. Use `skill: ts-implement`.101102Work log path: <path>. Respect the recorded baseline; do not absorb103unrelated pre-existing user changes.104Dispatched judge: provider <provider>, model line <model-line>, reasoning <reasoning>.105106Task input:107- On pass 1: implement the linked source request from the log.108- If the log contains developer feedback, use it as input for the implementation109 pass.110- On later passes, resolve every blocker with the smallest in-scope change.111 Treat suggested fixes as advice.112- Escalate before expanding a public contract, architecture, deployment113 surface, or product scope without recorded user authority.114- Preserve review-owned direct writing edits recorded in the log unless an open115 finding explicitly requires changing them.116117Before returning, you must:118- Write or update the work log at `<path>`.119- Record the dispatched judge and every worker as provider, model line, and120 reasoning level in the work log.121- Record worker dispatches as `<count> (<type>: <provider>/<model-line>/<reasoning>, ...)`, e.g.122 `2 (frontend: openai/terra latest/medium, backend: anthropic/sonnet latest/medium)`.123124Return exactly one status line:125STATUS: DONE126STATUS: BLOCKED: <reason>127STATUS: ESCALATE: <reason>128```129130### DISPATCH_REVIEW131132- Dispatch a review judge from the `Review Judge` list.133- Prompt:134135```text136You are the review judge. Use `skill: ts-review`.137138Work log path: <path>.139Dispatched judge: provider <provider>, model line <model-line>, reasoning <reasoning>.140141Review the workflow-owned diff against the source request, workflow baseline,142and latest implementation handoff in the log.143The source request, named plan or design, and recorded user decisions define144the review contract. Principles do not expand it. The first formal review is145`initial`; later reviews are `follow-up`.146147For a new inspection, run all review types from `skill: ts-review`.148When dispatched to resolve pending review questions, resume adjudication149from the existing artifact. Preserve mode, finding IDs, and admission; inspect150only missing or changed evidence.151Workers do not know the mode or prior rulings. Classify their findings:152- `regular`: found initially or introduced by an identified later change153- `out-of-scope`: no basis in the review contract or remediation154- `carried`: the same open finding remains unresolved155- `regression`: the same resolved finding has recurred156- `late`: first reported in a follow-up without a later change that caused it157158`carried` and `regression` require the prior ID and the same contract and159impact. A broader defect gets its own class. New follow-up findings default to160`late`; use `regular` only when evidence names the later change that caused it.161Record `**Admission:**` and `**Scope Basis:**` with the requirement, decision,162finding ID, or remediation change.163Technical-writing review may make direct writing edits allowed by `ts-review`.164Treat those edits as review-owned workflow changes, not unrelated user changes.165In a follow-up review, limit technical-writing direct edits to writing changed166by the latest implementation pass or required by an open finding.167168Rule on every finding before assigning work. Keep rejected, resolved, and169duplicate findings in the review artifact without remediation tasks.170For deferred rulings, record the finding IDs and exact questions in the log and171return `STATUS: ESCALATE: review context needed` for the router to relay.172Apply these dispositions only to upheld findings, using final severity:173- Critical and high `regular`, `carried`, and `regression`: `fix now`.174- Critical and high `late`: record it and return `STATUS: ESCALATE`.175- Low or `out-of-scope`: executable `follow-up`.176- Work outside the review contract: `STATUS: ESCALATE`.177178This is a formal workflow review, not an informal review. You must write a179separate review artifact, even when there are no findings.180Keep upheld and deferred findings in `## Open Findings`, with ruling, reasoning,181final severity, admission, scope basis, disposition, and next action. Remove182closed entries from that section; retain every finding in the review artifact.183184Review status semantics:185- `STATUS: DONE`: review completed with no blocking findings or deferred rulings.186- `STATUS: BLOCKED`: review completed with blocking findings for the next187 implementation pass.188- `STATUS: ESCALATE`: a human decision or exception is needed.189190Before returning, you must:191- Write the review artifact using the `ts-review` artifact rules.192- Write or update the work log at `<path>`.193- Use these artifact destinations:194 - Review artifact: `docs/reviews/YYYY-MM-DD_HH:MM_<review-type>_<review-name>.md`.195 - Workflow log: `<path>`.196- Record the review artifact link in `## Artifacts`.197- Keep the work log as coordination state with links, finding dispositions,198 pass status, worker metadata, and handoff.199- If direct edits were made, record changed paths and purpose in the review200 artifact and work log handoff.201- Record the dispatched judge and every worker as provider, model line, and202 reasoning level in the work log.203- Record worker dispatches as `<count> (<type>: <provider>/<model-line>/<reasoning>, ...)`, e.g.204 `2 (automatic-testing: anthropic/fable latest/high, robustness: openai/astra latest/high)`.205206Return exactly one status line:207STATUS: DONE208STATUS: BLOCKED: <reason>209STATUS: ESCALATE: <reason>210```211212### ROUTE_NEXT_PASS213214- Read `## Open Findings` and `## Current State` from the log before deciding.215- Count each completed review round once in `## Current State`. A review paused216 for context and its resumed adjudication belong to the same round.217- If subagent dispatch fails (tool error, no return), stop with `STATUS: BLOCKED: subagents unavailable`.218- If a dispatched judge returns no status line or more than one, stop with `STATUS: BLOCKED: invalid handoff`.219- If implementation returns `BLOCKED` or `ESCALATE`, stop and report.220- If review returns `ESCALATE`, relay its recorded questions or decision to the221 user. Leave the next handoff in `## Current State`; stop until answered.222- If review returns `BLOCKED`, route from `## Open Findings`.223- Treat any `fix now` finding as blocking. Use the review judge's disposition;224 do not reclassify findings in the router.225- If review has no blocking findings or deferred rulings, stop with `STATUS: DONE`.226- If review has blocking findings and the round limit is not reached, dispatch227 implementation again with the same log path.228- If developer feedback arrives after any router report, handle it through229 `HANDLE_DEVELOPER_FEEDBACK`.230- Default round limit is 5 unless the user sets another. One round is one231 implementation pass followed by one review pass.232- If the round limit is reached with open blocking findings, stop with233 `STATUS: BLOCKED: review loop limit reached`.234235### HANDLE_DEVELOPER_FEEDBACK236237- Record user feedback verbatim in `## Timeline` and its next handoff in238 `## Current State`, including feedback after `STATUS: DONE`.239- Route answers to pending review questions back to a fresh review judge with240 the same log and review artifact. Resume adjudication in the same round;241 the judge records reusable context and updates the rulings.242- Route code change requests to implementation as a new round, then review.243 Pass the same log path and any accompanying context answers.244- Before dispatch, update only the work log. Never edit code.245246## Stop Conditions247248- `STATUS: DONE`: latest review pass completed with no blocking findings or249 deferred rulings in `## Open Findings`.250- `STATUS: BLOCKED: <reason>`: required input, dependency, or verification is251 unavailable. Includes `subagents unavailable`, `invalid handoff`, and252 `review loop limit reached`.253- `STATUS: ESCALATE: <reason>`: a human decision is needed.