forked from bchanot/claude
fix(routing): W6 ronde — 6 findings closed (README bootstrap path, 2 census gaps, 3 stale refs)
Fresh-opus whole-chantier ronde (17fbe51..HEAD, EVAL-023 style): axes severed-wires / gate-regressions / fail-open PROVEN CLEAN (all 7 new handoffs traced end-to-end both sides). Fixed: init 5b now dispatches the FULL-AUDIT path (auto-mode gated a missing README as SIGNIFICANT → [CREATE-AUTO] unconditional restored, sole greenfield README path); census locks added for /geo ERROR CONTRACT + never-re-derive (deleting the fail-closed handler would have stayed green), doc-audit model=opus override x5 flows, SYNTH REPORT grammar; doc-syncer ex-STEP-8 prose repointed to the dispatcher gate; plugin-advisor anim rows read the PROBE REPORT ANIM field (no Bash anymore); client-handover 9.7 cleans the transient draft. Census caught one more line-wrapped lock before it shipped vacuous. 133 pass / 0 fail, make test exit 0.
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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: <date> (<N commits since>)
|
||||
|
||||
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,
|
||||
|
||||
@@ -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=<lib>` (any of motion / motion-v / framer-motion / gsap / lottie-react / react-spring / popmotion / auto-animate) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
@@ -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: <files changed this
|
||||
Dispatch the doc pipeline (BDR-077):
|
||||
`Agent(subagent_type="doc-syncer", model="opus")`
|
||||
— `MODE: audit` + `auto-mode scope: <files changed this
|
||||
session>`; 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.
|
||||
|
||||
Reference in New Issue
Block a user