From 2fa4dc92c24c2c3795f9329e1cc9d17406b58da2 Mon Sep 17 00:00:00 2001 From: Paul O'Reilly Date: Wed, 2 Sep 2026 21:43:23 +1200 Subject: [PATCH] pipeline model routing: mechanical stages to MiniMax M3, spec stages to Fable low effort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scaffolding-repo + test-writing-repo: anthropic-cloud-paul-oauth -> minimax + minimax-m3-max - merge@1: new best-practices-minimax-repo composite (impl-review stays Sonnet) - spec-draft-opus@1: Opus -> Fable 5 low effort via new fable-low-effort/v1 env context (ANTHROPIC_MODEL=claude-fable-5, MAX_THINKING_TOKENS=1024) + spec-writing-fable-low-repo composite - review-spec-arch-opus@1: Qwen3.6/airouter -> Fable 5 low effort via best-practices-fable-low-repo (arch review was on the cheapest model) Template names kept (trigger rules reference them). Node model: fields removed where env pins the model — a --model flag overrides ANTHROPIC_MODEL. Claude-Session: https://claude.ai/code/session_019tJk7P8tZzJ24PvtgoGhLN --- .../v1/harness.yaml | 11 +++++++++++ .../best-practices-minimax-repo/v1/harness.yaml | 11 +++++++++++ .../composites/scaffolding-repo/v1/harness.yaml | 5 ++++- .../spec-writing-fable-low-repo/v1/harness.yaml | 11 +++++++++++ .../composites/test-writing-repo/v1/harness.yaml | 6 +++++- .../contexts/fable-low-effort/v1/harness.yaml | 16 ++++++++++++++++ task-templates/workflow/merge@1.yaml | 7 ++++--- .../workflow/review-spec-arch-opus@1.yaml | 10 +++++----- task-templates/workflow/spec-draft-opus@1.yaml | 8 +++++--- 9 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 harnesses/composites/best-practices-fable-low-repo/v1/harness.yaml create mode 100644 harnesses/composites/best-practices-minimax-repo/v1/harness.yaml create mode 100644 harnesses/composites/spec-writing-fable-low-repo/v1/harness.yaml create mode 100644 harnesses/contexts/fable-low-effort/v1/harness.yaml diff --git a/harnesses/composites/best-practices-fable-low-repo/v1/harness.yaml b/harnesses/composites/best-practices-fable-low-repo/v1/harness.yaml new file mode 100644 index 0000000..a2b59c0 --- /dev/null +++ b/harnesses/composites/best-practices-fable-low-repo/v1/harness.yaml @@ -0,0 +1,11 @@ +kind: composite +name: best-practices-fable-low-repo +version: 1 +description: "Best practices / spec review agent on Fable 5 (low effort) + repo clone via SSH" + +layers: + - context: best-practices/v1 + - context: anthropic-cloud-paul-oauth/v1 + - context: fable-low-effort/v1 + - context: gitea-ssh/v1 + - context: agent-repo/v1 diff --git a/harnesses/composites/best-practices-minimax-repo/v1/harness.yaml b/harnesses/composites/best-practices-minimax-repo/v1/harness.yaml new file mode 100644 index 0000000..c3534e8 --- /dev/null +++ b/harnesses/composites/best-practices-minimax-repo/v1/harness.yaml @@ -0,0 +1,11 @@ +kind: composite +name: best-practices-minimax-repo +version: 1 +description: "Best practices review agent on MiniMax M3 (max effort) + repo clone via SSH — mechanical review/merge stages" + +layers: + - context: best-practices/v1 + - context: minimax/v1 + - context: minimax-m3-max/v1 + - context: gitea-ssh/v1 + - context: agent-repo/v1 diff --git a/harnesses/composites/scaffolding-repo/v1/harness.yaml b/harnesses/composites/scaffolding-repo/v1/harness.yaml index c326736..c6b144e 100644 --- a/harnesses/composites/scaffolding-repo/v1/harness.yaml +++ b/harnesses/composites/scaffolding-repo/v1/harness.yaml @@ -5,6 +5,9 @@ description: "Model-agnostic scaffolding harness — writes stubs for coding age layers: - context: scaffolding/v1 - - context: anthropic-cloud-paul-oauth/v1 + # MiniMax M3 — scaffolding is mechanical (stub files so tests import); + # moved off the personal Anthropic subscription 2026-09-02. + - context: minimax/v1 + - context: minimax-m3-max/v1 - context: gitea-ssh/v1 - context: agent-repo/v1 diff --git a/harnesses/composites/spec-writing-fable-low-repo/v1/harness.yaml b/harnesses/composites/spec-writing-fable-low-repo/v1/harness.yaml new file mode 100644 index 0000000..f96047a --- /dev/null +++ b/harnesses/composites/spec-writing-fable-low-repo/v1/harness.yaml @@ -0,0 +1,11 @@ +kind: composite +name: spec-writing-fable-low-repo +version: 1 +description: "Spec writing agent on Fable 5 (low effort) + repo clone via SSH" + +layers: + - context: spec-writing/v1 + - context: anthropic-cloud-paul-oauth/v1 + - context: fable-low-effort/v1 + - context: gitea-ssh/v1 + - context: agent-repo/v1 diff --git a/harnesses/composites/test-writing-repo/v1/harness.yaml b/harnesses/composites/test-writing-repo/v1/harness.yaml index 0dd60c9..c569030 100644 --- a/harnesses/composites/test-writing-repo/v1/harness.yaml +++ b/harnesses/composites/test-writing-repo/v1/harness.yaml @@ -5,6 +5,10 @@ description: "Model-agnostic test writing harness — credential layer swappable layers: - context: test-writing/v1 - - context: anthropic-cloud-paul-oauth/v1 + # MiniMax M3 max effort — moved off the personal Anthropic subscription + # 2026-09-02 (the "credential layer swappable" swap this composite was + # designed for). + - context: minimax/v1 + - context: minimax-m3-max/v1 - context: gitea-ssh/v1 - context: agent-repo/v1 diff --git a/harnesses/contexts/fable-low-effort/v1/harness.yaml b/harnesses/contexts/fable-low-effort/v1/harness.yaml new file mode 100644 index 0000000..0c5e202 --- /dev/null +++ b/harnesses/contexts/fable-low-effort/v1/harness.yaml @@ -0,0 +1,16 @@ +kind: context +name: fable-low-effort +version: 1 +description: "Pin Claude Fable 5 at low reasoning effort — layer AFTER anthropic-cloud-paul-oauth/v1 (auth comes from there)" +requires: [claude-code] +provides: [] + +# Model pin + effort dial for Claude Code against the Anthropic cloud. +# - ANTHROPIC_MODEL forces Fable 5; workflow nodes using this layer must +# NOT set a node-level model: (the --model flag would override this env). +# - MAX_THINKING_TOKENS keeps the extended-thinking budget small ("low +# effort") — Fable's raw capability at minimal thinking is the point: +# frontier judgment without frontier token burn. +env: + ANTHROPIC_MODEL: "claude-fable-5" + MAX_THINKING_TOKENS: "1024" diff --git a/task-templates/workflow/merge@1.yaml b/task-templates/workflow/merge@1.yaml index aace22a..0b99b8b 100644 --- a/task-templates/workflow/merge@1.yaml +++ b/task-templates/workflow/merge@1.yaml @@ -1,7 +1,9 @@ name: merge version: 1 description: Prepare a reviewed implementation for merge — runs pre-merge checks and marks item merge-ready -runtime: best-practices-opus-repo +# MiniMax M3 (2026-09-02): merge prep is mechanical (checklist + verdict); +# moved off the Anthropic subscription. impl-review stays on Sonnet. +runtime: best-practices-minimax-repo input: state: impl-reviewed tags_forbidden: [] @@ -15,8 +17,7 @@ scope_budget: nodes: - id: agent kind: agent - template: best-practices-opus-repo - model: sonnet + template: best-practices-minimax-repo runtime_env: AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git" AGENT_BRANCH: "task/${item.uuid}" diff --git a/task-templates/workflow/review-spec-arch-opus@1.yaml b/task-templates/workflow/review-spec-arch-opus@1.yaml index 9838695..8c03431 100644 --- a/task-templates/workflow/review-spec-arch-opus@1.yaml +++ b/task-templates/workflow/review-spec-arch-opus@1.yaml @@ -1,7 +1,10 @@ name: review-spec-arch-opus version: 1 description: Architecture review of a spec draft -runtime: best-practices-airouter-repo +# Fable 5 low effort (2026-09-02) — was Qwen3.6 via airouter, the cheapest +# model reviewing architecture while Claude did scaffolding. Template name +# kept for trigger compat; model comes from the fable-low-effort/v1 env layer. +runtime: best-practices-fable-low-repo input: state: spec-draft tags_forbidden: [security-sensitive] @@ -15,10 +18,7 @@ scope_budget: nodes: - id: agent kind: agent - template: best-practices-airouter-repo - cli: agentic - model: Qwen3.6 - labels: [airouter] + template: best-practices-fable-low-repo runtime_env: AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git" AGENT_BRANCH: "spec/${item.uuid}" diff --git a/task-templates/workflow/spec-draft-opus@1.yaml b/task-templates/workflow/spec-draft-opus@1.yaml index d925a94..eca2178 100644 --- a/task-templates/workflow/spec-draft-opus@1.yaml +++ b/task-templates/workflow/spec-draft-opus@1.yaml @@ -1,7 +1,10 @@ name: spec-draft-opus version: 1 description: Draft a spec from an idea using spec-writer agent -runtime: spec-writing-opus-repo +# Fable 5 low effort (2026-09-02) — template name kept for trigger compat. +# Model comes from the fable-low-effort/v1 env layer; no node model: here +# (a --model flag would override ANTHROPIC_MODEL). +runtime: spec-writing-fable-low-repo input: state: idea tags_required: [] @@ -16,8 +19,7 @@ scope_budget: nodes: - id: agent kind: agent - template: spec-writing-opus-repo - model: opus + template: spec-writing-fable-low-repo runtime_env: AGENT_REPO_URL: "git@gitea.oreillyit.nz-ai-enablement:skynet/agent-runtimes-agents.git" AGENT_BRANCH: "spec/${item.uuid}"