diff --git a/agents/client-handover-writer.md b/agents/client-handover-writer.md index 386ba4c..6a71e36 100644 --- a/agents/client-handover-writer.md +++ b/agents/client-handover-writer.md @@ -1130,3 +1130,7 @@ Parse the returned `HANDOVER-DOC REPORT`: - `STATUS: BLOCKED` → surface the report verbatim (including which PACKAGE field the doc-writer flagged) and stop — do not retry or patch the PACKAGE silently. + +In BOTH branches, then clean the transient draft: +`rm -f ".audit/handover-draft-${RUNID}.md"` (run-scoped, gitignored — +cleanup keeps `.audit/` from accumulating stranded drafts). diff --git a/agents/doc-syncer.md b/agents/doc-syncer.md index 7fb0bd5..7411114 100644 --- a/agents/doc-syncer.md +++ b/agents/doc-syncer.md @@ -380,9 +380,10 @@ Omit any section whose delegated target does not exist and is not being proposed this run (e.g. drop "Deploy" entirely when `DEPLOY_COMPLEXITY` is `NONE`/`TRIVIAL`; drop "Configuration" when there is no config schema). -Tag as **AUTO** — create on first audit. Surface the rendered README in -the validation gate before writing so the user can `edit` if needed, but -do NOT skip creation; "skip" is not an offered option on README bootstrap. +Tag as **AUTO** — create on first audit. The rendered README is a DRAFT +inside the audit report (`[CREATE-AUTO]` in the PATCH PLAN); the +DISPATCHER's gate surfaces it so the user can `edit`, but do NOT skip +creation; "skip" is not an offered option on README bootstrap. ### STEP 6 — DEPLOY.md GATE @@ -669,9 +670,10 @@ Last updated: () CHANGELOG entries always HUMAN. DEPLOY.md creation always HUMAN. CLEAN removals always HUMAN. -**README.md creation is AUTO** — always render and write, never gate on -user input. The validation gate (STEP 8) still surfaces the rendered -file so the user can edit before write, but "skip" is not an option for +**README.md creation is AUTO** — always render (audit mode: as a draft +in the report) and write (patch mode), never gate on user input. The +DISPATCHER's validation gate still surfaces the rendered draft so the +user can edit before the patch dispatch, but "skip" is not an option for README bootstrap; it is mandatory. If no drift in any doc and no missing required doc (and, in CLEAN MODE, diff --git a/agents/plugin-advisor.md b/agents/plugin-advisor.md index 106c45c..7d9141e 100644 --- a/agents/plugin-advisor.md +++ b/agents/plugin-advisor.md @@ -46,8 +46,8 @@ Detect signals from REQUEST + the PROBE REPORT fields: | `skill-creation` | "create a skill", "new skill", "custom skill", `/plugin-dev:create-plugin` in description | | `embedded` | "firmware", "bare-metal", "microcontroller", "STM32", "ESP32", "RTOS", "driver", "kernel", "bootloader" in description; **or** `platformio.ini` present; **or** linker script (`*.ld`, `*.lds`) present; **or** `Makefile` + `src/*.c` + no `package.json`/`Cargo.toml`/`go.mod`/`setup.py`/`pyproject.toml` (C project without standard ecosystems). Note: `.c` files with a Rust/Node/Go manifest = FFI binding, NOT embedded. | | `simple` | single file, hotfix, quick script, no frontend, no deploy | -| `anim-lib-eligible` | output of `detect_anim_eligibility` starts with `eligible|` (React/Vue/Svelte stack) | -| `anim-lib-installed` | `is_anim_lib_installed` returns 0 (any of motion / motion-v / framer-motion / gsap / lottie-react / react-spring / popmotion / auto-animate present) | +| `anim-lib-eligible` | PROBE REPORT `ANIM` field: `eligibility=eligible|…` (React/Vue/Svelte stack) | +| `anim-lib-installed` | PROBE REPORT `ANIM` field: `installed=` (any of motion / motion-v / framer-motion / gsap / lottie-react / react-spring / popmotion / auto-animate) | --- diff --git a/lib/tests/model-routing.test.sh b/lib/tests/model-routing.test.sh index 7e56af8..ae5342b 100755 --- a/lib/tests/model-routing.test.sh +++ b/lib/tests/model-routing.test.sh @@ -114,6 +114,7 @@ has "skills/doc/SKILL.md" 'MODE: patch' lacks "agents/scaffolder.md" 'INLINE-LOAD' for s in bugfix hotfix feat ship-feature init-project; do has "skills/$s/SKILL.md" 'MODE: audit' + has "skills/$s/SKILL.md" 'doc-syncer", model="opus"' # shellcheck disable=SC2016 # literal $HOME wanted: matching the exact inline-load string lacks "skills/$s/SKILL.md" 'Load `$HOME/.claude/agents/doc-syncer.md`' done @@ -160,6 +161,9 @@ has "skills/seo/SKILL.md" 'never re-derive a score' has "skills/seo/SKILL.md" 'DISPATCHER ERROR CONTRACT' has "skills/geo/SKILL.md" 'MODE: collect' has "skills/geo/SKILL.md" 'geo-analyzer", model="sonnet"' +has "skills/geo/SKILL.md" 'ERROR CONTRACT' +has "skills/geo/SKILL.md" 'never re-derive a score' +has "agents/handover-doc-writer.md" 'SYNTH REPORT' printf 'model-routing census: %d pass, %d fail\n' "$pass" "$fail" [ "$fail" -eq 0 ] diff --git a/skills/init-project/SKILL.md b/skills/init-project/SKILL.md index 9567fb8..e4832e2 100644 --- a/skills/init-project/SKILL.md +++ b/skills/init-project/SKILL.md @@ -104,12 +104,14 @@ Creates: CLAUDE.md, `.claude/settings.json`, `.claudeignore`, `.gitignore`, `.en Verify: `git init` + build passes. ## STEP 5b — CREATE README -Dispatch the doc pipeline (BDR-077): `Agent(subagent_type="doc-syncer", -model="opus")` — `MODE: audit`, `auto-mode scope: full project`. README.md -missing → the report carries the rendered README draft as `[CREATE-AUTO]`; -re-dispatch `Agent(subagent_type="doc-syncer")` (sonnet pin) with -`MODE: patch` + that plan to write it. No stop (README bootstrap is -unconditional). +Dispatch the doc pipeline (BDR-077): +`Agent(subagent_type="doc-syncer", model="opus")` +— `MODE: audit` (FULL-AUDIT path, NOT `auto-mode scope:` — +auto-mode gates a missing README as SIGNIFICANT; the full audit's STEP 5 +renders it `[CREATE-AUTO]`, unconditional). README.md missing → the +report carries the rendered README draft as `[CREATE-AUTO]`; re-dispatch +`Agent(subagent_type="doc-syncer")` (sonnet pin) with `MODE: patch` + +that plan to write it. No stop (README bootstrap is unconditional). ## STEP 5c — CTX7 PRE-FETCH (if fast-libs detected) If `fast-libs` signal was detected in STEP 0 (Next.js, React 18+, Prisma, Supabase, Drizzle, etc.): @@ -298,8 +300,9 @@ does NOT commit them, and `gitflow finish` integrates only COMMITTED history — so a patch left uncommitted never reaches the merge/PR. Same PR-stranding class as the STEP 10b capitalize fix (BDR-034). -Dispatch the doc pipeline (BDR-077): `Agent(subagent_type="doc-syncer", -model="opus")` — `MODE: audit` + `auto-mode scope: `; NONE → done; `[MINOR]` plan → `MODE: patch` re-dispatch (sonnet pin, no gate; SHAPE ESCALATION comes back gated); SIGNIFICANT → gate here, then `MODE: patch` with the approved subset.