fix(model-routing): wave-4 review fixes — forward DEPLOY_HINTS + SKIP_SEO in PACKAGE, realign §7/§8 annex numbering (I1/I2/I3)
This commit is contained in:
@@ -387,3 +387,4 @@ rules:
|
|||||||
- model routing WAVE 2 (same branch, user directive): doc/status dispatch their agent (sonnet/haiku pins effective); /hotfix split like /feat (joins gated group 12→13, hotfixer dual-use executor); /commit-change → sonnet commit-changer (propose/apply, gates relocated); /release-candidate → sonnet release-executor (human gates + version decision kept in dispatcher). Consumer-staleness swept (feat Rule 1 + commit-split). census 36/0, make test green. Branch still unmerged.
|
- model routing WAVE 2 (same branch, user directive): doc/status dispatch their agent (sonnet/haiku pins effective); /hotfix split like /feat (joins gated group 12→13, hotfixer dual-use executor); /commit-change → sonnet commit-changer (propose/apply, gates relocated); /release-candidate → sonnet release-executor (human gates + version decision kept in dispatcher). Consumer-staleness swept (feat Rule 1 + commit-split). census 36/0, make test green. Branch still unmerged.
|
||||||
- model routing WAVE 3 (same branch): /bugfix + /code-clean split like /feat — reflection inline, sonnet executors (bugfixer, code-cleaner). code-clean refactor now runs on sonnet (inline-load pin was inert). consumers rerouted (hotfix deeper-bug→/bugfix skill; onboard/tour read-only audit→big-model agent). Explore kept built-in (inherits big). census 42/0, loops-light 35/0. Branch still unmerged.
|
- model routing WAVE 3 (same branch): /bugfix + /code-clean split like /feat — reflection inline, sonnet executors (bugfixer, code-cleaner). code-clean refactor now runs on sonnet (inline-load pin was inert). consumers rerouted (hotfix deeper-bug→/bugfix skill; onboard/tour read-only audit→big-model agent). Explore kept built-in (inherits big). census 42/0, loops-light 35/0. Branch still unmerged.
|
||||||
- model routing waves 1-3 MERGED into develop (e5c7c51); LRN-125 added. WAVE 4 started on feature/client-handover-dispatch (off develop): client-handover doc-gen → sonnet. REDACTION-ONLY (user flipped from whole-writer — nested audits must run big either way). client-handover-writer trimmed to ship pipeline (STEP 1-8 preserved byte-for-byte) + delegates writing to NEW sonnet handover-doc-writer (gate-free, STEP 9-16). client-handover joins gated group. census 46/0. NOTE: a Task-20 implementer ran `git checkout -- settings.json`, discarding user /model=opus working-tree state (LRN-098) — flagged to user (re-run /model). Lesson worth an LRN: constrain SDD implementers from git ops on files outside their task.
|
- model routing waves 1-3 MERGED into develop (e5c7c51); LRN-125 added. WAVE 4 started on feature/client-handover-dispatch (off develop): client-handover doc-gen → sonnet. REDACTION-ONLY (user flipped from whole-writer — nested audits must run big either way). client-handover-writer trimmed to ship pipeline (STEP 1-8 preserved byte-for-byte) + delegates writing to NEW sonnet handover-doc-writer (gate-free, STEP 9-16). client-handover joins gated group. census 46/0. NOTE: a Task-20 implementer ran `git checkout -- settings.json`, discarding user /model=opus working-tree state (LRN-098) — flagged to user (re-run /model). Lesson worth an LRN: constrain SDD implementers from git ops on files outside their task.
|
||||||
|
- wave-4 FINAL REVIEW (opus whole-branch): all 7 deliverable invariants hold, child gate-free, PACKAGE complete. Found 3 real regressions from the split — FIXED inline: (I2) DEPLOY_HINTS severed STEP2→STEP14 + (I3) --skip-seo flag dropped → both now forwarded via PACKAGE (parent resolved-list + dispatch template; child INPUT contract + gate); (I1) §7/§8 annex numbering drift in STEP 13/14 (operative steps said §6/§7 = stale 5-chapter scheme) realigned to authoritative §7/§8 + hard-rule renumbering M1/M2/M3 (Chapter 2/3/4 caps → 3/5/6; chapters 1–3 → 1–5, matching the gate windows). census lock added: lacks 'Agent(' on child (M5). census 47/0, shellcheck clean. Branch NOT merged (awaiting human signal).
|
||||||
|
|||||||
@@ -1053,6 +1053,11 @@ it, don't recompute) or resolved in 9.1–9.5:
|
|||||||
plus `.claude/audits/HUMAN-ACTIONS.md` and
|
plus `.claude/audits/HUMAN-ACTIONS.md` and
|
||||||
`.claude/audits/THRESHOLD-OVERRIDE.md` when present.
|
`.claude/audits/THRESHOLD-OVERRIDE.md` when present.
|
||||||
- `INCLUDE_DEPLOY` — from 9.1.
|
- `INCLUDE_DEPLOY` — from 9.1.
|
||||||
|
- `DEPLOY_HINTS` — the `DEPLOY_HINTS` array detected in STEP 2 (empty if
|
||||||
|
none), forwarded as a comma-separated list so the doc-writer can
|
||||||
|
tailor §8. Only consumed when `INCLUDE_DEPLOY=yes`.
|
||||||
|
- `SKIP_SEO` — `yes` if `$ARGUMENTS` contained `--skip-seo` (STEP 0 flag
|
||||||
|
parse), else `no`. Gates the doc-writer's §7 platforms chapter.
|
||||||
- `NAP` — from 9.2.
|
- `NAP` — from 9.2.
|
||||||
- `PRECHECK_DONE` — from 9.3.
|
- `PRECHECK_DONE` — from 9.3.
|
||||||
- `CLIENT_NAME` — from 9.5.
|
- `CLIENT_NAME` — from 9.5.
|
||||||
@@ -1075,6 +1080,8 @@ SCORES: seo=<before→after,status> geo=<before→after,status>
|
|||||||
[cso=<before→after,status> for non-web] [code-ceiling notes]
|
[cso=<before→after,status> for non-web] [code-ceiling notes]
|
||||||
AUDIT_REPORTS: <paths>
|
AUDIT_REPORTS: <paths>
|
||||||
INCLUDE_DEPLOY: <yes|no>
|
INCLUDE_DEPLOY: <yes|no>
|
||||||
|
DEPLOY_HINTS: <comma-separated list from STEP 2, or empty>
|
||||||
|
SKIP_SEO: <yes|no>
|
||||||
NAP: <resolved table, field by field>
|
NAP: <resolved table, field by field>
|
||||||
PRECHECK_DONE: <list>
|
PRECHECK_DONE: <list>
|
||||||
CLIENT_NAME: <name|—>
|
CLIENT_NAME: <name|—>
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ parent already resolved:
|
|||||||
`HUMAN-ACTIONS.md` / any threshold-override note if present), for §5
|
`HUMAN-ACTIONS.md` / any threshold-override note if present), for §5
|
||||||
and §6 sourcing.
|
and §6 sourcing.
|
||||||
- `INCLUDE_DEPLOY` — `yes` | `no`. Controls whether §8 is rendered.
|
- `INCLUDE_DEPLOY` — `yes` | `no`. Controls whether §8 is rendered.
|
||||||
|
- `DEPLOY_HINTS` — detected deploy platforms (Vercel, Netlify, Docker,
|
||||||
|
GitHub Actions, …) from the parent's STEP 2 scan, for tailoring §8.
|
||||||
|
Empty = no platform detected (use the generic §8 fallback).
|
||||||
|
- `SKIP_SEO` — `yes` | `no`. When `yes`, skip the §7 platforms chapter
|
||||||
|
even for web projects (the parent's `--skip-seo` flag).
|
||||||
- `NAP` — the full, already-resolved §4 table (name, address, phone,
|
- `NAP` — the full, already-resolved §4 table (name, address, phone,
|
||||||
email, categories, short description, hours, …).
|
email, categories, short description, hours, …).
|
||||||
- `PRECHECK_DONE` — the set of platforms/items already confirmed done,
|
- `PRECHECK_DONE` — the set of platforms/items already confirmed done,
|
||||||
@@ -84,7 +89,8 @@ ranges — the client document does not render them.
|
|||||||
|
|
||||||
## STEP 12 — SYNTHESIZE THE DOCUMENT
|
## STEP 12 — SYNTHESIZE THE DOCUMENT
|
||||||
|
|
||||||
Generate the deliverable as a tight 4-chapter structure: what was needed,
|
Generate the deliverable following the 6-chapter structure defined
|
||||||
|
below (plus the §7/§8 annexes). The narrative arc: what was needed,
|
||||||
what was done (lay summary), what the client must do, then technical
|
what was done (lay summary), what the client must do, then technical
|
||||||
details for the curious. Translate headings to `LANG`. Tone: friendly,
|
details for the curious. Translate headings to `LANG`. Tone: friendly,
|
||||||
concrete, no jargon. One short paragraph per idea.
|
concrete, no jargon. One short paragraph per idea.
|
||||||
@@ -131,7 +137,7 @@ concrete, no jargon. One short paragraph per idea.
|
|||||||
in §3 / §4 / §5 / §6.x sub-tables / §6.9 calendar must all
|
in §3 / §4 / §5 / §6.x sub-tables / §6.9 calendar must all
|
||||||
use the linked form.
|
use the linked form.
|
||||||
|
|
||||||
1. **Never name internal tools or skill identifiers in chapters 1–3.**
|
1. **Never name internal tools or skill identifiers in chapters 1–5.**
|
||||||
Forbidden tokens (do not appear, in any case, in the lay portion):
|
Forbidden tokens (do not appear, in any case, in the lay portion):
|
||||||
`/seo`, `/harden`, `/web-validate`, `/cso`, `/feat`, `/bugfix`,
|
`/seo`, `/harden`, `/web-validate`, `/cso`, `/feat`, `/bugfix`,
|
||||||
`/ship-feature`, `/ship`, `/code-clean`, `/refactor`, `seo-analyzer`,
|
`/ship-feature`, `/ship`, `/code-clean`, `/refactor`, `seo-analyzer`,
|
||||||
@@ -140,14 +146,14 @@ concrete, no jargon. One short paragraph per idea.
|
|||||||
`ALL_PASS`, `SCORE_*`. Replace with what they correspond to in client
|
`ALL_PASS`, `SCORE_*`. Replace with what they correspond to in client
|
||||||
language: référencement / visibilité IA / sécurité / conformité
|
language: référencement / visibilité IA / sécurité / conformité
|
||||||
technique / audit interne. Internal tool names may appear ONLY in
|
technique / audit interne. Internal tool names may appear ONLY in
|
||||||
chapter 4 ("Détails techniques") inside the optional glossary.
|
chapter 6 ("Détails techniques") inside the optional glossary.
|
||||||
2. **Chapter 2 hard cap: 300 words max, zero technical jargon.** Plain
|
2. **Chapter 3 hard cap: 300 words max, zero technical jargon.** Plain
|
||||||
French (or plain English if `LANG=en`). No acronyms not already in
|
French (or plain English if `LANG=en`). No acronyms not already in
|
||||||
common usage (HTTPS is fine; CSP is not). Run `wc -w` against the
|
common usage (HTTPS is fine; CSP is not). Run `wc -w` against the
|
||||||
chapter body; if over 300, rewrite shorter.
|
chapter body; if over 300, rewrite shorter.
|
||||||
3. **Chapter 3 is action-only.** Every bullet starts with a verb the
|
3. **Chapter 5 is action-only.** Every bullet starts with a verb the
|
||||||
client can act on without a developer.
|
client can act on without a developer.
|
||||||
4. **Chapter 4 may use technical terms** (SEO, GEO, HSTS, CSP, etc.) but
|
4. **Chapter 6 may use technical terms** (SEO, GEO, HSTS, CSP, etc.) but
|
||||||
each term gets a one-line plain-language definition the first time it
|
each term gets a one-line plain-language definition the first time it
|
||||||
appears, or a glossary at the end of the chapter.
|
appears, or a glossary at the end of the chapter.
|
||||||
|
|
||||||
@@ -440,17 +446,17 @@ des audits de santé. Pour toute question, contactez [contact].*
|
|||||||
4. Concrete numbers > adjectives.
|
4. Concrete numbers > adjectives.
|
||||||
5. Short paragraphs. Bullet lists for things you can count.
|
5. Short paragraphs. Bullet lists for things you can count.
|
||||||
6. **Score deltas explained in plain words**. Never just dump numbers.
|
6. **Score deltas explained in plain words**. Never just dump numbers.
|
||||||
7. **Chapter 3 is action-oriented**. Every line starts with a verb.
|
7. **Chapter 5 is action-oriented**. Every line starts with a verb.
|
||||||
Every line is something the client can do without a developer.
|
Every line is something the client can do without a developer.
|
||||||
8. **No skill-name leaks in chapters 1–3.** See "Hard rules" above.
|
8. **No skill-name leaks in chapters 1–5.** See "Hard rules" above.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## STEP 13 — SEO/GEO MANUAL CHECKLIST (web projects only)
|
## STEP 13 — SEO/GEO MANUAL CHECKLIST (web projects only)
|
||||||
|
|
||||||
If `PROJECT_TYPE=web` AND `--skip-seo` NOT set, append this chapter
|
If `PROJECT_TYPE=web` AND `PACKAGE.SKIP_SEO` is not `yes`, append this chapter
|
||||||
as **§6 Annexe — Plateformes externes** in the 5-chapter structure
|
as **§7 Annexe — Plateformes externes** in the 6-chapter structure
|
||||||
(see STEP 12). Replace the §6 stub with the full content rendered from
|
(see STEP 12). Replace the §7 stub with the full content rendered from
|
||||||
the resource file.
|
the resource file.
|
||||||
|
|
||||||
Read the resource file:
|
Read the resource file:
|
||||||
@@ -501,7 +507,7 @@ The chapter must include:
|
|||||||
8. **Outils gratuits pour vérifier votre présence**.
|
8. **Outils gratuits pour vérifier votre présence**.
|
||||||
|
|
||||||
Cross-link this chapter from §4 (owner responsibilities — "Ce qui vous
|
Cross-link this chapter from §4 (owner responsibilities — "Ce qui vous
|
||||||
reste à faire"). Items in this §6 annex that are recurring belong in
|
reste à faire"). Items in this §7 annex that are recurring belong in
|
||||||
§4's cadence checklist (Mensuel / Trimestriel / Annuel).
|
§4's cadence checklist (Mensuel / Trimestriel / Annuel).
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -511,8 +517,8 @@ reste à faire"). Items in this §6 annex that are recurring belong in
|
|||||||
If `PACKAGE.INCLUDE_DEPLOY != yes`, skip this step entirely — do not
|
If `PACKAGE.INCLUDE_DEPLOY != yes`, skip this step entirely — do not
|
||||||
render §8. The parent already asked the client; do not re-ask.
|
render §8. The parent already asked the client; do not re-ask.
|
||||||
|
|
||||||
If included, this becomes **§7 Annexe — Build & déploiement** in the
|
If included, this becomes **§8 Annexe — Build & déploiement** in the
|
||||||
5-chapter structure (see STEP 12). For each `DEPLOY_HINTS` match,
|
6-chapter structure (see STEP 12). For each `PACKAGE.DEPLOY_HINTS` match,
|
||||||
generate a short subsection:
|
generate a short subsection:
|
||||||
1. What this means (1 paragraph).
|
1. What this means (1 paragraph).
|
||||||
2. First-time setup (numbered steps + signup link).
|
2. First-time setup (numbered steps + signup link).
|
||||||
@@ -522,7 +528,7 @@ generate a short subsection:
|
|||||||
2026 pricing if not in repo).
|
2026 pricing if not in repo).
|
||||||
6. Who to call when it breaks (status page, support link).
|
6. Who to call when it breaks (status page, support link).
|
||||||
|
|
||||||
If no deploy hints, offer 2-3 standard options:
|
If `PACKAGE.DEPLOY_HINTS` is empty, offer 2-3 standard options:
|
||||||
- Static site → Netlify / Vercel / Cloudflare Pages
|
- Static site → Netlify / Vercel / Cloudflare Pages
|
||||||
- Webapp → Fly.io / Render / Vercel / Railway
|
- Webapp → Fly.io / Render / Vercel / Railway
|
||||||
- CLI / library → npm / PyPI / crates.io / Homebrew
|
- CLI / library → npm / PyPI / crates.io / Homebrew
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ lacks "agents/code-cleaner.md" 'AskUserQuestion'
|
|||||||
# 9) wave-4 — client-handover: pipeline (big) inline + gated, doc-gen dispatched to sonnet
|
# 9) wave-4 — client-handover: pipeline (big) inline + gated, doc-gen dispatched to sonnet
|
||||||
has "agents/handover-doc-writer.md" 'model: sonnet'
|
has "agents/handover-doc-writer.md" 'model: sonnet'
|
||||||
lacks "agents/handover-doc-writer.md" 'AskUserQuestion'
|
lacks "agents/handover-doc-writer.md" 'AskUserQuestion'
|
||||||
|
lacks "agents/handover-doc-writer.md" 'Agent('
|
||||||
has "agents/client-handover-writer.md" 'subagent_type="handover-doc-writer"'
|
has "agents/client-handover-writer.md" 'subagent_type="handover-doc-writer"'
|
||||||
|
|
||||||
printf 'model-routing census: %d pass, %d fail\n' "$pass" "$fail"
|
printf 'model-routing census: %d pass, %d fail\n' "$pass" "$fail"
|
||||||
|
|||||||
Reference in New Issue
Block a user