From 8c3142f4faa47aeaa6713864c372375260e5b99d Mon Sep 17 00:00:00 2001 From: Sai Krishna Vennamaneni Date: Tue, 21 Jul 2026 01:54:36 +0530 Subject: [PATCH 1/3] =?UTF-8?q?harness=20v0.3.2:=20micro-trim=20over=20mai?= =?UTF-8?q?n=20=E2=80=94=20request-budget=20pacing=20+=20budgeted=20parall?= =?UTF-8?q?elism?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three surgical, instruction-only changes to the build SKILL (main otherwise untouched), designed for providers that cap REQUESTS per minute: - Intake: batch each round's questions as parallel clarify calls in ONE turn. - Slice rhythm: one slice ≈ 3 requests (parallel writes turn; single chained pytest+add+commit+push command; progress note). Never two terminal calls where one && chain works. 429 mention → sleep 30 prefix + batch harder. - Delegation: replace the blanket free-key inline preference with a request BUDGET — 2-3 parallel workers on disjoint slices while total request rate stays under ~half the provider cap; drop to one worker after any rate limit. Co-Authored-By: Claude Fable 5 --- harness/skills/zero-shot-build/SKILL.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/harness/skills/zero-shot-build/SKILL.md b/harness/skills/zero-shot-build/SKILL.md index 0142036..6798c64 100644 --- a/harness/skills/zero-shot-build/SKILL.md +++ b/harness/skills/zero-shot-build/SKILL.md @@ -69,6 +69,10 @@ Intake has **two fixed sections and a variable middle**: 2. **Technical round (fixed, always last)** — build-blockers only (LLM provider, stack, access method). +**Batch each round: issue ALL of a round's questions as PARALLEL `clarify` calls in ONE +turn** — one question + one flat `choices` array of plain strings per call; never one +question per turn, never several questions crammed into one call. + All rounds use `clarify`. Three resilience rules: - **If `clarify` fails DURING a round** (mid-round timeout, empty result, unavailable), fall @@ -219,11 +223,19 @@ explicitly. ("Just build it" → narrow MVP, baseline defaults, documented as as For the current phase (Phase 1 first; later phases on user approval): 1. **Read the phase's slices** from `spec/roadmap.md`. -2. **Implement each slice** via the **code-generator** role — delegate independent slices in - parallel (up to 3) when `delegate_task` works AND the LLM key is a paid/dedicated one; - otherwise inline, sequentially, one slice at a time. **On a shared/free key, prefer - sequential inline** — parallel fan-out multiplies 429s on one credential pool and stalls - the build (mining the prior runs showed ~14h cumulative blocked on pool exhaustion). +2. **Implement each slice** via the **code-generator** role. **Budget requests — don't fear + them.** Free tiers cap REQUESTS per minute; keep the total across the root and all + workers under roughly HALF the provider's cap, and parallelism is fine: + - `delegate_task` available → **up to 2–3 workers on independent slices in parallel**, + each on disjoint files. If any worker (or the root) hits a rate limit, drop to ONE + worker until a full slice completes clean. + - No delegation → inline, one slice at a time, in fat turns. + **Slice rhythm — one slice ≈ 3 requests:** (1) write the slice's files (tests + + implementation) as PARALLEL tool calls in ONE turn; (2) gate + ship in ONE chained + command: `pytest -q && git add && git commit -m "phase-N: " && git push`; + (3) a one-line progress note. Never spend two terminal calls where one `&&` chain works; + never write one file per turn. If any tool result mentions a rate limit, prepend + `sleep 30 && ` to the next terminal command and batch harder. Verify each handback's CONTENT, not just its status — a worker can return `status=completed` whose body is a rate-limit error; that slice is NOT done. Each slice = its surfaces + its tests, test-first. Tell each generator exactly which files it owns; slices own disjoint paths. From e63f69c17a85534c7beabb2d0cef212918f8294d Mon Sep 17 00:00:00 2001 From: Sai Krishna Vennamaneni Date: Tue, 21 Jul 2026 02:25:28 +0530 Subject: [PATCH 2/3] =?UTF-8?q?harness=20v0.3.2:=20pacing=20floor=20?= =?UTF-8?q?=E2=80=94=20sleep=2015=20before=20every=20terminal=20command=20?= =?UTF-8?q?on=20free=20tiers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Main harness's resilience was accidental: fat context made calls slow (~2 rpm), so the loop rarely rolled the dice during a rate-limited pool's empty windows. The trim's lean-fast calls rolled 4x more often and died 4x more often. This makes the armor deliberate: keep the trim's batching (fewer requests per unit of work) but hold the cadence at main's pace via a sleep-15 floor on terminal commands, escalating to 45s after any rate-limit mention. Steady beats fast. Co-Authored-By: Claude Fable 5 --- harness/skills/zero-shot-build/SKILL.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/harness/skills/zero-shot-build/SKILL.md b/harness/skills/zero-shot-build/SKILL.md index 6798c64..001d9e4 100644 --- a/harness/skills/zero-shot-build/SKILL.md +++ b/harness/skills/zero-shot-build/SKILL.md @@ -234,8 +234,13 @@ For the current phase (Phase 1 first; later phases on user approval): implementation) as PARALLEL tool calls in ONE turn; (2) gate + ship in ONE chained command: `pytest -q && git add && git commit -m "phase-N: " && git push`; (3) a one-line progress note. Never spend two terminal calls where one `&&` chain works; - never write one file per turn. If any tool result mentions a rate limit, prepend - `sleep 30 && ` to the next terminal command and batch harder. + never write one file per turn. + **Pacing floor (free-tier providers) — steady beats fast:** prepend `sleep 15 && ` to + EVERY terminal command during build stages. This deliberately holds the loop at a slow, + even cadence (~2–4 requests/min) — a long-running build that never provokes the rate + limiter outlives a fast one that dies on it. Escalation: if any tool result mentions a + rate limit (429/"Too Many Requests"), use `sleep 45 && ` for the next several commands + and batch even harder. Only drop the floor when the provider is a paid/dedicated tier. Verify each handback's CONTENT, not just its status — a worker can return `status=completed` whose body is a rate-limit error; that slice is NOT done. Each slice = its surfaces + its tests, test-first. Tell each generator exactly which files it owns; slices own disjoint paths. From ba8072e0ae8bc739bdc4066cad77a45078a503c4 Mon Sep 17 00:00:00 2001 From: Sai Krishna Vennamaneni Date: Tue, 21 Jul 2026 02:41:00 +0530 Subject: [PATCH 3/3] =?UTF-8?q?harness=20v0.3.2:=20anti-thrash=20+=20narra?= =?UTF-8?q?tion=20rules=20=E2=80=94=20nemotron-class=20behavioral=20guards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- harness/skills/zero-shot-build/SKILL.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/harness/skills/zero-shot-build/SKILL.md b/harness/skills/zero-shot-build/SKILL.md index 001d9e4..923a6c4 100644 --- a/harness/skills/zero-shot-build/SKILL.md +++ b/harness/skills/zero-shot-build/SKILL.md @@ -235,6 +235,12 @@ For the current phase (Phase 1 first; later phases on user approval): command: `pytest -q && git add && git commit -m "phase-N: " && git push`; (3) a one-line progress note. Never spend two terminal calls where one `&&` chain works; never write one file per turn. + **Anti-thrash rule:** never re-run a failing command unchanged. If the same command + fails twice, STOP — read the full error output, then change something (the command, the + code, or your diagnosis) before any retry. Repeating an identical failing call is never + progress. + **Narrate every move:** before each tool batch, one short line — what you're doing and + why. Silence reads as a hang and makes the user interrupt a healthy build. **Pacing floor (free-tier providers) — steady beats fast:** prepend `sleep 15 && ` to EVERY terminal command during build stages. This deliberately holds the loop at a slow, even cadence (~2–4 requests/min) — a long-running build that never provokes the rate