Hand-sync of hatchmate-crs's plan-review-loop@1 under a project-prefixed name so hatchmate's triggers can reference it via the global WorkflowRegistry. Interim pattern until agent-runtimes ships project-scope template serving via crs_manager (M42 gap: DispatchService only consults the concepts_syncer WorkflowRegistry, not crs_manager's repo store). Template is hatchmate-specific throughout: Fable-low + MiniMax-M3-max + Airouter-Qwen3.8-max reviewers, hatchmate/hatchmate-agents clone URL, hatchmate-aware prompts and conventions. Claude-Session: https://claude.ai/code/session_01PdFrhZypEDBTsbAeTJqHq1
211 lines
9.1 KiB
YAML
211 lines
9.1 KiB
YAML
# agent-runtime-framework — task-templates/workflow/hatchmate-plan-review-loop@1.yaml
|
|
#
|
|
# Mirrors agent-runtime-framework's task-templates/workflow/plan-review-loop@1.yaml
|
|
# structurally (nodes shape, judge + script verdict-gate, loop block, escalation
|
|
# map) but is hatchmate-specific throughout: prompts reference the hatchmate
|
|
# portal and its conventions (not agent-runtimes' own repo/plan), reviewers are
|
|
# three EXPLICIT models spanning three families (a tier resolves ONE model,
|
|
# never a trio — see model-registry/tiers.yaml), and the improve node uses
|
|
# `tier: build` per plan §3c.
|
|
#
|
|
# WorkflowTemplate is extra="forbid" (verified against
|
|
# agent-runtimes/spec/typed-workflows.md this session) — no `diversity:` key
|
|
# here; F-WE-PDIV (registry `family` + template `diversity:` block, concept
|
|
# b45ff626 under milestone ae0c7a79) has not landed. `allowed_models` is the
|
|
# per-template cost/blast-radius ceiling (WF-SCH-14/WF-MODEL-2) and lists
|
|
# exactly: the three explicit reviewer models, the judge model, and the single
|
|
# model `tier: build` resolves to today against the merged registry pool
|
|
# (model-registry/minimax-m3.yaml — dry-run-verified this session; see
|
|
# model-registry/tiers.yaml's `build` tier comments for why framework's
|
|
# zero-cost entries don't hijack that resolution).
|
|
#
|
|
# `cmd: scripts/workflow/verdict-gate` is copied unchanged from the framework
|
|
# template — this path resolves image-baked (framework's own script-node
|
|
# nodes use the identical relative path with no repo-local
|
|
# scripts/workflow/verdict-gate file existing in that repo either), so nothing
|
|
# is ported into this repo or hatchmate-agents for it.
|
|
name: hatchmate-plan-review-loop
|
|
version: 1
|
|
description: >
|
|
Fable-low + MiniMax-M3-max + Airouter-Qwen3.8-max review a hatchmate concept's
|
|
draft plan, MiniMax-M3 (tier: build) revises, Fable-low judges clean/rework.
|
|
runtime: code-minimax-tdd-repo
|
|
input:
|
|
state: plan-drafted
|
|
tags_required: []
|
|
tags_forbidden: [security-sensitive] # HC-25: security-sensitive items are human-present
|
|
required_artifacts: [plan_doc]
|
|
output:
|
|
state: plan-reviewed
|
|
allowed_models:
|
|
- claude-fable-5-low
|
|
- minimax-m3-max
|
|
- airouter-qwen38-max
|
|
- minimax-m3
|
|
scope_budget:
|
|
wall_clock_seconds_max: 7200 # WF-ITER-7: run-level ceiling across ALL iterations —
|
|
# must be >= iterations_max * per_iteration_seconds_max
|
|
# (5 * 1200 = 6000) plus slack; NOT a per-iteration value
|
|
iterations_max: 5 # WF-SCH-19: required whenever loop is set
|
|
per_iteration_seconds_max: 1200
|
|
nodes:
|
|
- id: review-fable
|
|
kind: agent
|
|
role: plan-review
|
|
model: claude-fable-5-low
|
|
runtime_env:
|
|
AGENT_REPO_URL: hatchmate/hatchmate-agents
|
|
AGENT_BRANCH: "task/${item.uuid}"
|
|
prompt: |
|
|
The hatchmate project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
hatchmate is a multi-tenant customer portal for NZ small business owners
|
|
(identity, app shell, customer/team management, resource catalogue —
|
|
see CLAUDE.md and docs/scope.md in the cloned repo). Review the draft
|
|
plan document attached to the following work item against hatchmate's
|
|
settled conventions (permission grammar `customer:app_group:resource
|
|
_type:[id]:noun:verb`, teams-hold-grants-never-users, no-escalation rule,
|
|
app onboarding rule — CLAUDE.md § Conventions) before judging it on
|
|
general engineering merit.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
**Original concept**:
|
|
${item.body}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find and read the draft plan document referenced by this item completely
|
|
3. Review it for CRITICAL and HIGH severity issues: violations of a
|
|
settled hatchmate convention or ADR, missing requirements, unaddressed
|
|
security implications (multi-tenant boundary crossing, permission
|
|
escalation), unworkable sequencing
|
|
4. Write your findings to /workspace/.agent-output/review-fable.md
|
|
- id: review-minimax
|
|
kind: agent
|
|
role: plan-review
|
|
model: minimax-m3-max
|
|
runtime_env:
|
|
AGENT_REPO_URL: hatchmate/hatchmate-agents
|
|
AGENT_BRANCH: "task/${item.uuid}"
|
|
prompt: |
|
|
The hatchmate project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
hatchmate is a multi-tenant customer portal for NZ small business owners.
|
|
Review the draft plan document attached to the following work item
|
|
against hatchmate's settled conventions in CLAUDE.md (permission
|
|
grammar, team-based grants, no-escalation rule, app onboarding rule) and
|
|
docs/scope.md before judging it on general engineering merit.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
**Original concept**:
|
|
${item.body}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find and read the draft plan document referenced by this item completely
|
|
3. Review it for CRITICAL and HIGH severity issues: violations of a
|
|
settled hatchmate convention or ADR, missing requirements, unaddressed
|
|
security implications, unworkable sequencing
|
|
4. Write your findings to /workspace/.agent-output/review-minimax.md
|
|
- id: review-airouter
|
|
kind: agent
|
|
role: plan-review
|
|
model: airouter-qwen38-max
|
|
runtime_env:
|
|
AGENT_REPO_URL: hatchmate/hatchmate-agents
|
|
AGENT_BRANCH: "task/${item.uuid}"
|
|
prompt: |
|
|
The hatchmate project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
hatchmate is a multi-tenant customer portal for NZ small business owners.
|
|
Review the draft plan document attached to the following work item
|
|
against hatchmate's settled conventions in CLAUDE.md (permission
|
|
grammar, team-based grants, no-escalation rule, app onboarding rule) and
|
|
docs/scope.md before judging it on general engineering merit.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
**Original concept**:
|
|
${item.body}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Find and read the draft plan document referenced by this item completely
|
|
3. Review it for CRITICAL and HIGH severity issues: violations of a
|
|
settled hatchmate convention or ADR, missing requirements, unaddressed
|
|
security implications, unworkable sequencing
|
|
4. Write your findings to /workspace/.agent-output/review-airouter.md
|
|
- id: improve-build
|
|
kind: agent
|
|
role: plan-review
|
|
tier: build
|
|
depends_on: [review-fable, review-minimax, review-airouter]
|
|
runtime_env:
|
|
AGENT_REPO_URL: hatchmate/hatchmate-agents
|
|
AGENT_BRANCH: "task/${item.uuid}"
|
|
prompt: |
|
|
The hatchmate project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Revise the draft plan document for the following hatchmate concept to
|
|
address all three reviews left on this branch.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Read /workspace/.agent-output/review-fable.md,
|
|
/workspace/.agent-output/review-minimax.md, and
|
|
/workspace/.agent-output/review-airouter.md
|
|
3. Revise the plan document in place to address every CRITICAL/HIGH
|
|
finding from all three reviews, keeping it consistent with
|
|
hatchmate's CLAUDE.md conventions
|
|
4. Commit the revised plan on this branch
|
|
- id: judge-fable
|
|
kind: agent
|
|
role: plan-review
|
|
model: claude-fable-5-low
|
|
depends_on: [improve-build]
|
|
runtime_env:
|
|
AGENT_REPO_URL: hatchmate/hatchmate-agents
|
|
AGENT_BRANCH: "task/${item.uuid}"
|
|
prompt: |
|
|
The hatchmate project repo is cloned at /workspace/project.
|
|
Change to that directory before doing any work.
|
|
|
|
Judge the revised plan document for the following hatchmate concept.
|
|
|
|
**Title**: ${item.title}
|
|
|
|
Steps:
|
|
1. cd /workspace/project
|
|
2. Read the revised plan document
|
|
3. Check whether every CRITICAL/HIGH finding from
|
|
/workspace/.agent-output/review-fable.md,
|
|
/workspace/.agent-output/review-minimax.md, and
|
|
/workspace/.agent-output/review-airouter.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-fable]
|
|
loop:
|
|
body: [review-fable, review-minimax, review-airouter, improve-build, judge-fable, judge-gate]
|
|
condition_node: judge-gate
|
|
on_max_reached: escalate
|
|
escalation:
|
|
loop_max_reached: null # WF-SCH-19/WF-ITER-5: required whenever on_max_reached
|
|
# is "escalate" (the default); no hatchmate escalation
|
|
# template exists yet (spec-review-loop@1 etc. are
|
|
# reserved for a later task per spec/crs.md), so this
|
|
# explicitly escalates to a human (no dispatch target)
|
|
# rather than naming a template that doesn't exist —
|
|
# `escalation: dict[str, str | None]` permits null
|
|
# (verified against typed-workflows.md this session)
|