All 6 concept/idea-stage templates hardcoded the literal shared branch
spec/auto-draft instead of a per-item branch. Concurrent concept items
(now routine via the M41 auto-advance sweep) all pushed to the same
branch — a git collision risk. Switched to spec/${item.uuid}, matching
the established task/${item.uuid} convention used by every task-stage
template (merge@1, scaffold@1, etc — see spec/typed-workflows.md WF-COMP
stable-per-item-branch rationale). spec-review-loop@1's 4 nodes keep the
literal branch shared ACROSS the node set (now per-item, not global) so
loop iterations still accumulate on one branch per item, per spec's
cross-iteration-artifact caveat.
Files: review-spec-arch-opus@1.yaml, spec-draft-opus@1.yaml,
spec-review-loop@1.yaml, review-spec-arch-airouter@1.yaml,
spec-draft-airouter@2.yaml, scope-decompose-sonnet@1.yaml
138 lines
5.1 KiB
YAML
138 lines
5.1 KiB
YAML
name: spec-review-loop
|
|
version: 1
|
|
description: >
|
|
Opus + MiniMax review a spec draft, Sonnet revises, Haiku judges clean/rework.
|
|
Additive alternative to review-spec-arch-opus@1 / review-spec-arch-airouter@1 —
|
|
those single-pass templates remain the default for the spec-draft state; a
|
|
project opts into this loop instead via its own triggers.yaml, it does not
|
|
replace them.
|
|
runtime: code-sonnet-tdd-repo
|
|
input:
|
|
state: spec-draft
|
|
tags_forbidden: [security-sensitive]
|
|
required_artifacts: [spec_file]
|
|
output:
|
|
state: spec-reviewed-arch
|
|
scope_budget:
|
|
wall_clock_seconds_max: 7200 # must be >= iterations_max * per_iteration_seconds_max
|
|
# (5 * 1200 = 6000) plus slack
|
|
iterations_max: 5
|
|
per_iteration_seconds_max: 1200
|
|
nodes:
|
|
- id: review-opus
|
|
kind: agent
|
|
role: spec-review # M36 v0.6 (bug 69370eda fix): per-node role replaces
|
|
# the ungrounded top-level `runtime: review-loop-repo`.
|
|
# Harness resolution: (role, model) → composite.
|
|
model: claude-opus-4
|
|
runtime_env:
|
|
AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git"
|
|
AGENT_BRANCH: "spec/${item.uuid}"
|
|
prompt: |
|
|
The agent-runtimes project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Review the spec draft for the following concept.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
**Original concept**:
|
|
${item.body}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find the spec file: ls spec/ and look for a file matching the concept title slug
|
|
3. Read the spec file completely
|
|
4. Review it against architectural best practices:
|
|
- Are requirements testable and unambiguous?
|
|
- Are there security implications not addressed?
|
|
- Are interfaces and data contracts clearly defined?
|
|
- Are edge cases and failure modes covered?
|
|
5. Write your findings to /workspace/.agent-output/review-opus.md
|
|
- id: review-minimax
|
|
kind: agent
|
|
role: spec-review
|
|
model: minimax-m2
|
|
runtime_env:
|
|
AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git"
|
|
AGENT_BRANCH: "spec/${item.uuid}"
|
|
prompt: |
|
|
The agent-runtimes project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Review the spec draft for the following concept.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
**Original concept**:
|
|
${item.body}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find the spec file: ls spec/ and look for a file matching the concept title slug
|
|
3. Read the spec file completely
|
|
4. Review it against architectural best practices:
|
|
- Are requirements testable and unambiguous?
|
|
- Are there security implications not addressed?
|
|
- Are interfaces and data contracts clearly defined?
|
|
- Are edge cases and failure modes covered?
|
|
5. Write your findings to /workspace/.agent-output/review-minimax.md
|
|
- id: improve-sonnet
|
|
kind: agent
|
|
role: spec-review
|
|
tier: coding
|
|
depends_on: [review-opus, review-minimax]
|
|
runtime_env:
|
|
AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git"
|
|
AGENT_BRANCH: "spec/${item.uuid}"
|
|
prompt: |
|
|
The agent-runtimes project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Revise the spec file for the following concept to address both reviews
|
|
left on this branch.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find the spec file: ls spec/ and look for a file matching the concept title slug
|
|
3. Read /workspace/.agent-output/review-opus.md and
|
|
/workspace/.agent-output/review-minimax.md
|
|
4. Revise the spec file in place to address every finding from both reviews
|
|
5. Commit the revised spec on this branch
|
|
- id: judge-haiku
|
|
kind: agent
|
|
role: spec-review
|
|
model: claude-haiku-4
|
|
depends_on: [improve-sonnet]
|
|
runtime_env:
|
|
AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git"
|
|
AGENT_BRANCH: "spec/${item.uuid}"
|
|
prompt: |
|
|
The agent-runtimes project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Judge the revised spec file for the following concept.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find the spec file: ls spec/ and look for a file matching the concept title slug
|
|
3. Check whether every finding from /workspace/.agent-output/review-opus.md
|
|
and /workspace/.agent-output/review-minimax.md has been addressed
|
|
4. Write exactly CLEAN or NEEDS_REWORK (nothing else, no trailing
|
|
punctuation or explanation) to /workspace/.workflow/verdict
|
|
- id: judge-gate
|
|
kind: script
|
|
cmd: scripts/workflow/verdict-gate
|
|
depends_on: [judge-haiku]
|
|
loop:
|
|
body: [review-opus, review-minimax, improve-sonnet, judge-haiku, judge-gate]
|
|
condition_node: judge-gate
|
|
on_max_reached: escalate
|
|
escalation:
|
|
contract_ambiguous: review-spec-opus
|
|
loop_max_reached: review-spec-opus
|