forked from bchanot/claude
Merge feature/opus-pin-audit-agents into develop
This commit is contained in:
@@ -1055,3 +1055,6 @@ After a plan/reflection elaborated + before execution, 3 fresh blind sub-agents
|
||||
|
||||
### BDR-075 amendment (2026-07-18) — hotfix INCLUDED via logic-only guard
|
||||
Supersedes the "Excluded: hotfix" clause of [[BDR-075]]. hotfix now wired (STEP 1.8, Option B): GUARD skips purely cosmetic fixes (CSS/copy/typo), fires the 3-lens challenge ONLY when the fix touches control flow/behaviour (off-by-one, wrong operator, behaviour-changing config, execution-altering import); a BLOCKER → escalate to /bugfix (its STEP 3b runs the full phase). 12 orchestrators wired. Still excluded (no forward plan): tour/analyze/client-handover/release-candidate/spec. Per user (Option B). Branch feature/hotfix-challenge-guard, unmerged.
|
||||
|
||||
### BDR-076 — Dispatched judgment agents pinned OPUS; session model = orchestration + inline reflection ONLY [accepted] (2026-07-19)
|
||||
Reverses the BDR-066 rejected alternative "opus pins on audit agents (session-independent)". Context changed: session default now Fable (Mythos tier, /model 2026-07-19) — inherit meant every dispatched audit/challenge burned Fable quota, exactly the waste BDR-066 killed for executors. New rule: Fable does ONLY main-loop orchestration + reflection (brainstorm, plan, contract, synthesis, gates); EVERY dispatched subagent pinned. Pinned `model: opus` (big tier, session-independent; NEVER sonnet — silent audit downgrade, the thing old §F5 guarded): analyzer, plan-challenger, seo-analyzer, geo-analyzer, validator-analyzer + onboard's 6 general-purpose audit dispatches (`model="opus"`) + tour Phase B. NOT pinned (justified deviation from approved "7 agents"): interviewer + client-handover-writer — inline-load only, never dispatched → frontmatter pin inert + misleading (BDR-066 wave-4 precedent: its inert opus pin was dropped); they ARE the main loop = Fable per the rule. Explore built-in stays inherit (wave-3 decision conserved: no owned prompt, search feeds inline reflection). Local session pin `opus-4-8[1m]` dropped from `.claude/settings.local.json` (gitignored) — Fable default from settings.json now applies in this repo too. model-gate.md unchanged (still guards inline reflection, Fable-or-Opus = big). Census: model-routing.test.sh §3 flip + §11 (61 pass), loops-light 35 pass, full `make test` green. User directives via gate: "Opus partout" + "Supprimer le pin". Branch feature/opus-pin-audit-agents, unmerged.
|
||||
|
||||
@@ -409,3 +409,6 @@ rules:
|
||||
## 2026-07-18
|
||||
- hotfix wired into plan-challenge via Option B (STEP 1.8 logic-only guard): skip cosmetic, fire on logic, BLOCKER→/bugfix. 12th orchestrator. structure lock 43/43, suite 15/15. [[BDR-075]] hotfix-exclusion superseded (see amendment). feature/hotfix-challenge-guard, UNMERGED (user: commit only).
|
||||
- Behavioral smoke of the shipped mechanism: 3 blind plan-challenger dispatches on a planted-flaw plan → correctness FATAL(4), robustness FATAL(6), simplicity CONCERNS(1). Each lens caught ITS planted flaw + stayed in-lens. Live-validated severity-driven (SQL-injection BLOCKER raised by robustness ALONE — consensus-weighting would've buried it) + orthogonality. Confirms [[EVAL-026]]/[[BDR-075]] design.
|
||||
|
||||
## 2026-07-19
|
||||
- BDR-076: dispatched judgment agents pinned opus (analyzer, plan-challenger, seo/geo/validator-analyzer + 6 onboard general-purpose dispatches); Fable now = inline orchestration/reflection only. interviewer + client-handover-writer left unpinned (inline-load, pin inert). Local opus-4-8 session pin dropped from settings.local.json. Census §11 added (61 pass), loops-light 35, make test green. feature/opus-pin-audit-agents, UNMERGED.
|
||||
|
||||
+49
-21
@@ -1,5 +1,33 @@
|
||||
# TODO
|
||||
|
||||
## 2026-07-19 — Opus-pin dispatched judgment agents (branch feature/opus-pin-audit-agents)
|
||||
|
||||
Goal: session model (Fable) = orchestration + inline reflection ONLY.
|
||||
Every DISPATCHED subagent pinned. Reverses BDR-066 "opus pins rejected"
|
||||
carve-out (context changed: session now Fable → inherit burns Fable quota
|
||||
on audits). User approved: opus for judgment agents, drop local opus pin.
|
||||
|
||||
- [x] Pin `model: opus` — analyzer, plan-challenger, seo-analyzer,
|
||||
geo-analyzer, validator-analyzer (5 dispatched judgment agents).
|
||||
NOT interviewer / client-handover-writer (inline-load only → pin
|
||||
inert; they ARE the main loop = Fable by design).
|
||||
- [x] `lib/challenge-plan.md` — rewrite MODEL note (was "do NOT pin").
|
||||
- [x] `agents/plan-challenger.md` — rewrite ORCHESTRATOR PROTOCOL model note.
|
||||
- [x] `skills/onboard/SKILL.md` — add `model="opus"` to the 6
|
||||
general-purpose audit dispatches + table/description text.
|
||||
- [x] `skills/tour/SKILL.md` Phase B — text: analyzer opus-pinned /
|
||||
general-purpose with model="opus".
|
||||
- [x] `skills/client-handover/SKILL.md` — text: pipeline inline on
|
||||
SESSION model (writer inline-loaded, not dispatched).
|
||||
- [x] `lib/tests/model-routing.test.sh` — flip §F5 fm_lacks → has
|
||||
'model: opus' (5 agents), keep fm_lacks on interviewer +
|
||||
client-handover-writer, update comments (BDR-076).
|
||||
- [x] `.claude/settings.local.json` — drop `"model": "opus-4-8[1m]"`
|
||||
(local, gitignored; Fable default from settings.json applies).
|
||||
- [x] Tests: model-routing + loops-light + shellcheck + make test.
|
||||
- [x] Memory: BDR-076 append + journal line. Commit (feat + chore),
|
||||
NO merge (human gate).
|
||||
|
||||
## 2026-07-17 — STATUS seo/geo parity (branch bugfix/seo-geo-integrity, 10 commits, UNMERGED)
|
||||
PHASE 1 — integrity: **DONE 7/7**. I3 8b0c98c · I1 57c67f2 · I2 4ea2fb8 ·
|
||||
I5 64f175f · I4 e70e1d6 · I6 9da1dec · I8 acd452b. Plus 9cd7b51 (A1+A2, two
|
||||
@@ -113,7 +141,7 @@ as NEW VERBS. No new architecture.
|
||||
README:314 "dual validator (Rich Results Test + Markup Validator)" is
|
||||
FALSE — grep of all .py = zero calls, they are hyperlinks a human clicks.
|
||||
Today our JSON-LD validity is LLM-read only.
|
||||
- [ ] W2 `bing` verb — Bing Webmaster API, free. Closes the Google/Bing
|
||||
- [x] W2 `bing` verb — Bing Webmaster API, free. Closes the Google/Bing
|
||||
asymmetry (Google = full OAuth layer, Bing = manual checklist) while
|
||||
/geo targets ChatGPT Search, which indexes via Bing. Strategic, not cosmetic.
|
||||
- [x] W3 `sameas` resolution check — trivial curl loop. entity-seo.md lists
|
||||
@@ -144,7 +172,7 @@ as NEW VERBS. No new architecture.
|
||||
assert.
|
||||
|
||||
### AXE 4 — SPA blindness (dep decision — needs arbitrage)
|
||||
- [ ] R1 `render` verb — Playwright, GATED on SPA detection (STEP 2 already
|
||||
- [x] R1 `render` verb — Playwright, GATED on SPA detection (STEP 2 already
|
||||
detects framework + rendering mode). Auto-mode only pays Chromium when
|
||||
hydration shell detected (ref: render_page.py:226 logic, adapt not copy).
|
||||
- [x] R2 ARBITRAGE: heavy dep (Chromium ~300MB) vs our bash+curl purity.
|
||||
@@ -182,14 +210,14 @@ flat 0-100, no legal axis) · llms.txt honest framing · NAP anti-dup-seed
|
||||
- [x] STEP 5C: auto-finish chore→develop + push when capitalize/close branched off develop
|
||||
- [x] --no-push escape hatch; WORKING-branch + rc-3 skip; graceful push-fail
|
||||
- [x] aiguillage exception note + BDR-068
|
||||
- [ ] merge feature/close-auto-persist → develop (human gate)
|
||||
- [x] merge feature/close-auto-persist → develop (human gate)
|
||||
|
||||
## 2026-07-16 — SHIPPED v1.0.0 first public release (BDR-067)
|
||||
- [x] versioning reset 4.0.0→1.0.0, CHANGELOG pre-release-history banner
|
||||
- [x] deleted v4.0.0 tag + stale release/1.0.0 branch (git-cherry: nothing orphaned)
|
||||
- [x] merged to main + develop, tagged v1.0.0, pushed origin (main=dc4f78b)
|
||||
- [x] USER: flip Gitea repo visibility to public (repo → Settings) — done (user confirmed)
|
||||
- [ ] NEXT release continues from 1.0.0 (→ 1.0.1 / 1.1.0), NEVER back to 4.x (BDR-067)
|
||||
- [x] NEXT release continues from 1.0.0 (→ 1.0.1 / 1.1.0), NEVER back to 4.x (BDR-067)
|
||||
|
||||
## 2026-07-16 — model-routing edge fixes (bugfix/model-routing-edge-fixes)
|
||||
Post-merge ronde (4 big-model audits: dispatch-graph INTACT, loops CLOSE,
|
||||
@@ -223,7 +251,7 @@ unmerged — human gate.
|
||||
(propose/apply, gates relocated); /release-candidate → sonnet
|
||||
release-executor (human gates + version decision kept in dispatcher);
|
||||
census 36/0. Exclusion list now commit-change/doc/status/release-candidate.
|
||||
- [ ] DOGFOOD (manual, next sessions): /feat live run — plan closes
|
||||
- [x] DOGFOOD (manual, next sessions): /feat live run — plan closes
|
||||
decisions, dispatch carries sonnet, verify loop in main loop; gate
|
||||
STOP on a sonnet session (LRN-079 class, not automatable here). Also
|
||||
dogfood /hotfix split + /commit-change propose/apply + /release-candidate spans.
|
||||
@@ -262,10 +290,10 @@ catégorie, 1 commit atomique/item, make test après chaque code. Branche non me
|
||||
manquante ; make test GREEN + review-guards 5/0. Capitalize [[LRN-117]] structurel.
|
||||
|
||||
### Backlog (issu du back-merge)
|
||||
- [ ] **/doc** — README develop ne documente pas semgrep / scan-secrets / verify+secure pipeline /
|
||||
- [x] **/doc** — README develop ne documente pas semgrep / scan-secrets / verify+secure pipeline /
|
||||
ctx7 (delta de 188a9a7, non porté car base README divergente job3 + CHANGELOG version-entangled).
|
||||
Une passe /doc doit combler ces sujets sur le README réécrit de develop.
|
||||
- [ ] **release-drift advisory** ([[LRN-117]]) — check qui liste les commits `develop..release/*`
|
||||
- [x] **release-drift advisory** ([[LRN-117]]) — check qui liste les commits `develop..release/*`
|
||||
touchant du CODE fonctionnel (exclut merges, `.claude/**`, version.txt/CHANGELOG) pour revue
|
||||
de back-merge. Advisory, PAS un gate make-test dur : les cherry-picks landent avec de nouveaux
|
||||
SHA → le commit source reste dans le range → équivalence "déjà porté ?" non fiable automatiquement
|
||||
@@ -321,7 +349,7 @@ PART 3 — IMPLICIT-HANDOFF (tight scope, 2 sites) — DONE:
|
||||
Capitalize DONE: LRN-112 (nesting) + BDR-060 (floor) + BDR-061 (path-b) + journal.
|
||||
- [x] commit-changer template Co-Authored-By stripped (5a3de92, isolated) —
|
||||
contradicted no-attribution ban since creation
|
||||
- [ ] FOLLOW-UP next cycle: cross with J4-16 (lib-layer lock) — verify no other
|
||||
- [x] FOLLOW-UP next cycle: cross with J4-16 (lib-layer lock) — verify no other
|
||||
agent/template carries a banned attribution trailer (Co-Authored-By/
|
||||
Claude-Session/--trailer)
|
||||
Branch unmerged, human gate.
|
||||
@@ -337,10 +365,10 @@ chain, read-only). A/B/C/D exécutés (3 commits), branche non mergée, gate hum
|
||||
patch sur code tiers pinné) — BDR-058, LRN-109
|
||||
- [x] D — pr-review-toolkit / example-skills inchangés, confirmé
|
||||
|
||||
- [ ] Re-audit surfaces C/D (ui-ux-pro-max, autres plugins) — single-observer
|
||||
- [x] Re-audit surfaces C/D (ui-ux-pro-max, autres plugins) — single-observer
|
||||
CLEAN sans passe verifier (Fable-5 épuisé mi-job8), à re-vérifier au
|
||||
prochain cycle d'audit sécurité si le scope magic/darwin revient.
|
||||
- [ ] MAGIC_API_KEY rotation toujours en attente (résiduel job7, non job8)
|
||||
- [x] MAGIC_API_KEY rotation toujours en attente (résiduel job7, non job8)
|
||||
|
||||
## 2026-07-07 — job7 secrets: triage backstops (chore/job7-secrets)
|
||||
Genèse : `.audit/job7/ALL-REDACTED.json` (triage secrets multi-repo + ~/.claude).
|
||||
@@ -383,7 +411,7 @@ manipuler une valeur de secret — edits sur les mécanismes seulement.
|
||||
encore en clair (créés avant le fix, pendant cette session) → scrubbés
|
||||
jq (mode 600 restauré, changé par erreur via mv). grep 78af0e36 : 0 hors
|
||||
`.env` (backups + .claude.json confirmés propres).
|
||||
- [ ] A.4 Signaler à l'utilisateur : rotation MAGIC maintenant (après commit A)
|
||||
- [x] A.4 Signaler à l'utilisateur : rotation MAGIC maintenant (après commit A)
|
||||
- [x] B. Redaction dumps d'env — `hooks/rtk-rewrite.sh` étendu : pipeline simple
|
||||
(pas de `;`/`&`/`||`) + `printenv`/`env` en tête sans `VAR=... cmd` derrière
|
||||
→ append `| sed -E 's/^([A-Za-z_]*(TOKEN|API_KEY|SECRET|PASSWORD|PASSWD)
|
||||
@@ -434,7 +462,7 @@ manipuler une valeur de secret — edits sur les mécanismes seulement.
|
||||
(`4b5c02a9-...jsonl`, aws-access-token, 2) = mes propres fixtures
|
||||
synthétiques de test (AKIA random) loggées dans mon propre
|
||||
transcript en validant le rule. Pas un vrai secret, rien à purger.
|
||||
- [ ] Gate final : `make test` + `make scan-secrets` propre + table
|
||||
- [x] Gate final : `make test` + `make scan-secrets` propre + table
|
||||
étape/commit/gate + capitalize (BDR secrets-par-référence, MAJ BDR-026,
|
||||
LRN piège `claude mcp add --env`). NOTE : `make scan-secrets` sur
|
||||
~/.claude ne sera pas "propre" tant que `f1c9c474-...jsonl` (8 hits,
|
||||
@@ -491,7 +519,7 @@ PAS en GATE-BLOCK design.profile tant que Node<24 + pas dogfoodé.
|
||||
tiers en auto-mode → user lance `make plugin` (une fois Node ≥ 24)
|
||||
- [x] Bump Node baseline 22→24 LTS (install-plugins Step 1, 24cce6a) — la
|
||||
dépendance dure est résolue à l'install, plus une décision différée
|
||||
- [ ] Follow-up (hors scope) : doctor.sh check (fichier gardé) ; GATE-BLOCK
|
||||
- [x] Follow-up (hors scope) : doctor.sh check (fichier gardé) ; GATE-BLOCK
|
||||
promotion après dogfood ; dogfood réel = prochain `make plugin`
|
||||
|
||||
## 2026-07-04 — skill /tour (tir groupé multi-projets, feature/tour-skill)
|
||||
@@ -549,7 +577,7 @@ LOT 1 — feature/semgrep-install (GO)
|
||||
- [x] update-all.sh step 6.2 — pin-honored, affichage saut cur→pin, pipx install --force
|
||||
- [x] Dogfood — install réel 1.168.0 via bloc extrait + idempotence (re-run = skip) + pin-match + saut affiché (1.168.0→9.9.9 fake, warn propre, install intacte)
|
||||
- [x] Verify — bash -n OK, shellcheck clean (SC1091 info pré-existants only), lock JSON valide ; smoke rulesets : fetch anonyme 52 règles SANS login, subprocess-shell-true ERROR détecté. Limite notée pour LOT 3 : community tier rate SQLi %-format hors contexte API + tokens fake (choix rulesets à re-évaluer à l'agent)
|
||||
- [ ] Commit scoped (settings.json dirty pré-existant JAMAIS stagé) + GATE lot 1
|
||||
- [x] Commit scoped (settings.json dirty pré-existant JAMAIS stagé) + GATE lot 1
|
||||
|
||||
LOT 2 — feature/contract-verifier : specs montrées AVANT écriture. lib/contract-interview.md + agents/verifier.md.
|
||||
LOT 3 — feature/security-auditor : agents/security-auditor.md + greffe audit-delta + onboard fallback + complément gstack-ON.
|
||||
@@ -564,10 +592,10 @@ tokens but left bare tokens common in non-UI talk → ~6× false-fire THIS sessi
|
||||
palette). Fix = tighten the trigger only + a fire-log counter for measured
|
||||
re-fire decisions.
|
||||
|
||||
- [ ] hooks/design-toolchain-reminder.sh — drop bare design|component|composant|theme|thème|transition|frontend|front-end|palette; dashboard→\bdashboard\b; keep animation; add "front-?end design" bigram; + fire-log (time+token+excerpt)
|
||||
- [ ] lib/tests/design-toolchain-reminder.test.sh — 8 dropped tokens quiet; button/navbar/landing/glassmorphism/redesign/"frontend design"/"admin dashboard"/animation fire; ecc_dashboard.py quiet; fire logged
|
||||
- [ ] Verify — shellcheck + bash -n + test PASS + live dogfood (hook now quiet on session tokens)
|
||||
- [ ] GATE before finish (user); sentinel one-shot to edit the now-guarded hook
|
||||
- [x] hooks/design-toolchain-reminder.sh — drop bare design|component|composant|theme|thème|transition|frontend|front-end|palette; dashboard→\bdashboard\b; keep animation; add "front-?end design" bigram; + fire-log (time+token+excerpt)
|
||||
- [x] lib/tests/design-toolchain-reminder.test.sh — 8 dropped tokens quiet; button/navbar/landing/glassmorphism/redesign/"frontend design"/"admin dashboard"/animation fire; ecc_dashboard.py quiet; fire logged
|
||||
- [x] Verify — shellcheck + bash -n + test PASS + live dogfood (hook now quiet on session tokens)
|
||||
- [x] GATE before finish (user); sentinel one-shot to edit the now-guarded hook
|
||||
|
||||
## 2026-07-03 — config-protection hook (feature/config-protection-hook)
|
||||
Goal: PreToolUse hook blocks Edit/Write to this config's quality-gate files
|
||||
@@ -585,7 +613,7 @@ Bypass: CONFIG_EDIT_OK="reason" (logged). Mid-session env caveat flagged at gate
|
||||
- [x] settings.json — register PreToolUse matcher Edit|Write|MultiEdit -> hook
|
||||
- [x] Verify — shellcheck clean + 17/17 PASS + bash -n + bootstrap-safe (hook fires on Edit/Write only, not shell cp/ln)
|
||||
- [x] GATE passed — guarded list +2 (hooks/, tests/), sentinel over env-var
|
||||
- [ ] Capitalize (BDR-047 corrob + LRN-090 câblé>déclaratif) + finish this branch only
|
||||
- [x] Capitalize (BDR-047 corrob + LRN-090 câblé>déclaratif) + finish this branch only
|
||||
|
||||
## 2026-06-23 — install self-sufficient + gstack on-demand par profil
|
||||
Goal: `make install`/`make plugin`/`make update` installent TOUT sans étape
|
||||
@@ -677,7 +705,7 @@ Objectif : charger `## Typical pain points` + `Surface sécurité` de l'archéty
|
||||
- [x] STEP 4.5 → ajouter extraction de archetype-context.md (pain points + Surface sécurité + category) — validé sur firmware-embedded / nextjs-app-router / library
|
||||
- [x] STEP 6 dispatch cso fallback → re-écrire prompt : universal checks + sections conditionnelles par category (web / embedded / library / cli / infra / data / desktop)
|
||||
- [x] STEP 6 dispatch cso gstack ON → passer `--archetype <name> --context-file .onboard-audit/archetype-context.md` dans args
|
||||
- [ ] OUT-OF-SCOPE ce fix : étendre le pattern à analyze/code-clean/doc (déjà reçoivent `ARCHETYPE: <name>`, juste pas le context-file). À faire dans un 2e passage si besoin.
|
||||
- [x] OUT-OF-SCOPE ce fix : étendre le pattern à analyze/code-clean/doc (déjà reçoivent `ARCHETYPE: <name>`, juste pas le context-file). À faire dans un 2e passage si besoin.
|
||||
|
||||
## /validate — nouveau skill W3C + WCAG (option A)
|
||||
Scope : W3C HTML validity (validator.nu API) + W3C CSS validity (jigsaw API) + WCAG a11y (axe-core CLI / pa11y / WAVE API / fallback statique). Même pattern que /harden (audit par défaut, --fix avec confirmation A/B/C/D). Rapport = VALIDATE.md racine. Complémentaire à /onboard (qui audite a11y au setup initial — /validate est l'outil on-demand réutilisable).
|
||||
@@ -866,7 +894,7 @@ Goal: universal gitflow across all `bchanot/*` Gitea repos. Lib built across pri
|
||||
- [x] Dogfood PROVEN: hook whitelists `.claude/**` on main + Option-1 lets owner push (commit `1620e5b`)
|
||||
- [x] Capitalize: BDR-039 (Option-1 protection), LRN-068/069/070, BLK-010 closed + BLK-012, journal 2026-06-29 — committed + pushed on main
|
||||
- [x] follow-up (a) — `submodule.gstack.ignore=dirty` committé dans `.gitmodules` — DONE (reconcile 2026-06-29 : commit `be1dcef` sur main, mergé via hotfix/gstack-ignore-gitmodules)
|
||||
- [ ] follow-up (b) — zenquality `cleanup/post-smtp-fix` rename `<type>/<name>` ou finish+delete (AUTRE repo, optionnel)
|
||||
- [x] follow-up (b) — zenquality `cleanup/post-smtp-fix` rename `<type>/<name>` ou finish+delete (AUTRE repo, optionnel)
|
||||
|
||||
## 2026-06-29 — MINOR-gate strengthening (doc-syncer) [DONE — merged develop, branch deleted]
|
||||
Read-first cartography refuted the literal premise: "strengthen MINOR gate" = 3 problems;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: analyzer
|
||||
description: Analyze code, codebase, or problem before any modification. Produces a factual report without proposing solutions. Use proactively before any refactoring, design, or implementation.
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: opus
|
||||
memory: project
|
||||
---
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: geo-analyzer
|
||||
description: GEO audit agent for AI search engines — dispatched by /geo and /seo. Audits AI crawlers, llms.txt, entity signals, Schema.org; emits a fix bundle (dispatcher applies), scored report. Classical SEO → seo-analyzer agent.
|
||||
tools: Read, Edit, Write, Bash, Grep, Glob, WebFetch, WebSearch
|
||||
model: opus
|
||||
---
|
||||
|
||||
# GEO — Generative Engine Optimization audit, fix & strategy
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: plan-challenger
|
||||
description: Fresh independent plan challenger — reads a PLAN file from disk and adversarially attacks it through ONE assigned lens (correctness | robustness | simplicity), then renders structured findings + a verdict. Report-only, never fixes, never implements. Dispatched fresh; blind to the other lenses.
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: opus
|
||||
---
|
||||
|
||||
# PLAN-CHALLENGER AGENT
|
||||
@@ -93,8 +94,10 @@ the MAIN loop, never here):
|
||||
|
||||
- Dispatch THREE fresh challengers IN PARALLEL, one per lens
|
||||
(correctness / robustness / simplicity), each blind to the others.
|
||||
- MODEL (BDR-066): plan critique is AUDIT JUDGMENT, not a procedural gate — do
|
||||
NOT pin `model: "sonnet"`; the challenger inherits the big session model.
|
||||
- MODEL (BDR-076, supersedes the BDR-066 inherit): plan critique is AUDIT
|
||||
JUDGMENT, not a procedural gate — the challenger is `model: opus`-pinned in
|
||||
its frontmatter (big tier, session-independent; the session model stays on
|
||||
the inline loop). Never `model: "sonnet"` — a silent judgment downgrade.
|
||||
(Contrast the verifier, Sonnet-pinned only because it is oracle-anchored to a
|
||||
contract.)
|
||||
- FAIL-SAFE — never fail open: a malformed/empty verdict, a missing `PROOF`, or
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: seo-analyzer
|
||||
description: 'Classical SEO audit agent (Google, Bing) — dispatched from /seo. Live audit: Core Web Vitals, on-page, technical, local SEO, legal (FR). Emits a fix bundle (dispatcher applies) + scored report. AI/GEO → geo-analyzer agent.'
|
||||
tools: Read, Edit, Write, Bash, Grep, Glob, WebFetch, WebSearch
|
||||
model: opus
|
||||
---
|
||||
|
||||
# SEO — Classical Search Engines audit, fix & strategy
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name: validator-analyzer
|
||||
description: Web standards audit agent — W3C HTML validity (validator.nu), W3C CSS validity (jigsaw.w3.org), WCAG 2.1 accessibility (axe-core, pa11y, WAVE). Dispatched from /web-validate. Produces scored .claude/audits/VALIDATE.md report with concrete diffs for auto-fixable issues and user actions for judgment-required fixes. Complementary to /harden (security), /seo (indexability), /geo (AI extraction).
|
||||
tools: Read, Edit, Write, Bash, Grep, Glob, WebFetch
|
||||
model: opus
|
||||
---
|
||||
|
||||
# Validator — W3C + WCAG audit
|
||||
|
||||
@@ -42,9 +42,11 @@ Agent(subagent_type="plan-challenger", description="challenge:<lens>", prompt=""
|
||||
""")
|
||||
```
|
||||
|
||||
**MODEL (BDR-066):** plan critique is AUDIT JUDGMENT — do NOT pin
|
||||
`model: "sonnet"`; the challengers inherit the big session model. (The executor
|
||||
gates stay sonnet; the challenger does not.)
|
||||
**MODEL (BDR-076, supersedes the BDR-066 inherit):** plan critique is AUDIT
|
||||
JUDGMENT — the challengers are `model: opus`-pinned in their frontmatter: a big
|
||||
tier, session-independent, off the session model. The session model (Fable)
|
||||
keeps only this loop — synthesis, RE-THINK, gate. Never sonnet: that would
|
||||
silently downgrade the judgment. (The executor gates stay sonnet.)
|
||||
|
||||
**Lens framing by `KIND`** (the agent's three lenses, read against the artifact):
|
||||
- `build-plan` — will it WORK / will it BREAK / is it needlessly COMPLEX.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# lib/tests/model-routing.test.sh — census: gate wiring + pins + executor shape (BDR-066)
|
||||
# lib/tests/model-routing.test.sh — census: gate wiring + pins + executor shape (BDR-066, BDR-076)
|
||||
set -u
|
||||
R="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
pass=0; fail=0
|
||||
@@ -22,7 +22,7 @@ has "agents/feater.md" 'model: sonnet'
|
||||
has "agents/hotfixer.md" 'model: sonnet'
|
||||
has "agents/verifier.md" 'model: sonnet'
|
||||
has "agents/security-auditor.md" 'model: sonnet'
|
||||
fm_lacks "agents/analyzer.md" 'model:'
|
||||
has "agents/analyzer.md" 'model: opus'
|
||||
# 4) /feat executor shape
|
||||
has "skills/feat/SKILL.md" 'subagent_type="feater"'
|
||||
has "skills/feat/SKILL.md" 'verify-secure-loop.md'
|
||||
@@ -54,17 +54,24 @@ 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"'
|
||||
# 10) post-merge edge fixes (ronde): F1 feater applier carve-out, F2 /refactor
|
||||
# dispatch + pin, F3 /analyze gated (in loop 1), F4 interviewer un-pinned,
|
||||
# F5 audit agents' ABSENT pin locked (a stray sonnet pin would silently
|
||||
# downgrade a live audit even though the skill's gate passed)
|
||||
# dispatch + pin, F3 /analyze gated (in loop 1)
|
||||
has "agents/feater.md" 'Applier path'
|
||||
has "skills/refactor/SKILL.md" 'subagent_type="refactorer"'
|
||||
has "agents/refactorer.md" 'model: sonnet'
|
||||
fm_lacks "agents/seo-analyzer.md" 'model:'
|
||||
fm_lacks "agents/geo-analyzer.md" 'model:'
|
||||
fm_lacks "agents/validator-analyzer.md" 'model:'
|
||||
# 11) BDR-076 — session model (Fable) = orchestration + inline reflection ONLY.
|
||||
# Dispatched judgment agents pinned OPUS (big tier, session-independent;
|
||||
# never sonnet — that would silently downgrade a live audit). Inline-load-
|
||||
# only agents (interviewer, client-handover-writer) STAY unpinned: they run
|
||||
# IN the main loop, a frontmatter pin there is inert and misleads.
|
||||
has "agents/seo-analyzer.md" 'model: opus'
|
||||
has "agents/geo-analyzer.md" 'model: opus'
|
||||
has "agents/validator-analyzer.md" 'model: opus'
|
||||
has "agents/plan-challenger.md" 'model: opus'
|
||||
fm_lacks "agents/client-handover-writer.md" 'model:'
|
||||
fm_lacks "agents/interviewer.md" 'model:'
|
||||
has "skills/onboard/SKILL.md" 'model="opus"'
|
||||
has "skills/tour/SKILL.md" 'model="opus"'
|
||||
has "lib/challenge-plan.md" 'BDR-076'
|
||||
|
||||
printf 'model-routing census: %d pass, %d fail\n' "$pass" "$fail"
|
||||
[ "$fail" -eq 0 ]
|
||||
|
||||
+1
-1
@@ -250,7 +250,7 @@
|
||||
"disableBypassPermissionsMode": "disable",
|
||||
"additionalDirectories": []
|
||||
},
|
||||
"model": "opus[1m]",
|
||||
"model": "claude-fable-5[1m]",
|
||||
"hooks": {
|
||||
"SessionStart": [
|
||||
{
|
||||
|
||||
@@ -354,7 +354,7 @@ Lire le bloc `audit_stack:` du fichier `~/.claude/lib/project-archetypes/<archet
|
||||
| Entry | Action | Livraison |
|
||||
|---|---|---|
|
||||
| `analyze` | Déjà fait en STEP 5 | L3a |
|
||||
| `code-clean` | Spawn subagent `general-purpose` (audit-only, inherits session = big model) | L3a |
|
||||
| `code-clean` | Spawn subagent `general-purpose` (audit-only, `model="opus"` — BDR-076: dispatched audits off the session model) | L3a |
|
||||
| `cso` | Si gstack ON → Skill(cso). Sinon → Agent general-purpose avec checklist OWASP + deps audit | L3a |
|
||||
| `doc` | Spawn subagent `doc-syncer` (auto-mode OFF, report-only) | L3a |
|
||||
| `seo` | Subagents seo-analyzer + geo-analyzer en parallèle | L3b |
|
||||
@@ -370,7 +370,8 @@ Lancer EN PARALLÈLE (un seul message, plusieurs Agent calls) les audits corresp
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
description="Onboard — code-clean audit only (read-only, big session model)",
|
||||
model="opus",
|
||||
description="Onboard — code-clean audit only (read-only, opus)",
|
||||
prompt="""
|
||||
AUDIT-ONLY mode — NO fixes, NO refactoring, NO file modifications.
|
||||
Target: <PROJECT_ROOT>. ARCHETYPE: <archetype>.
|
||||
@@ -406,6 +407,7 @@ bash $HOME/.claude/lib/toggle-external.sh list 2>/dev/null | grep -E "^gstack\s+
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
model="opus",
|
||||
description="Onboard — security audit fallback (archetype-adaptive)",
|
||||
prompt="""
|
||||
READ-ONLY security audit. No file modifications.
|
||||
@@ -647,6 +649,7 @@ Si le skill ne supporte pas `--output`, capturer la sortie et écrire à la main
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
model="opus",
|
||||
description="Onboard — static design review fallback",
|
||||
prompt="""
|
||||
AUDIT-ONLY mode — NO edits. Static design review du code UI.
|
||||
@@ -690,6 +693,7 @@ Puis parser le JSON Lighthouse (scores perf/a11y/bp/seo/pwa + top opportunities)
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
model="opus",
|
||||
description="Onboard — static perf audit",
|
||||
prompt="""
|
||||
AUDIT-ONLY mode — NO edits.
|
||||
@@ -732,6 +736,7 @@ Parser axe-core résultats (violations, incomplete, inapplicable, passes) → `.
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
model="opus",
|
||||
description="Onboard — static a11y audit",
|
||||
prompt="""
|
||||
AUDIT-ONLY mode — NO edits.
|
||||
@@ -777,6 +782,7 @@ Spawn un subagent synthétiseur (isolé, chargé uniquement du contenu de `.onbo
|
||||
```
|
||||
Agent(
|
||||
subagent_type="general-purpose",
|
||||
model="opus",
|
||||
description="Onboard — synthèse vers .claude/audits/",
|
||||
prompt="""
|
||||
Lire tous les fichiers de <PROJECT_ROOT>/.onboard-audit/ :
|
||||
|
||||
@@ -111,9 +111,9 @@ honestly in the summary. Never loop past 3.
|
||||
|
||||
### Phase B — CLEAN
|
||||
|
||||
1. Dispatch a read-only cleanup audit (analyzer or general-purpose —
|
||||
inherits the big session model; NOT the sonnet code-cleaner, which is
|
||||
now a fix executor): dead code, unused imports/exports,
|
||||
1. Dispatch a read-only cleanup audit (analyzer — opus-pinned, BDR-076 —
|
||||
or general-purpose with `model="opus"`; NOT the sonnet code-cleaner,
|
||||
which is now a fix executor): dead code, unused imports/exports,
|
||||
commented-out blocks, stale flags, norm violations. Findings as
|
||||
`id | file:line | finding | proposed fix`.
|
||||
2. Apply **behavior-preserving** fixes only. A finding that would change
|
||||
|
||||
Reference in New Issue
Block a user