feat(agents): W2/S2 doc pipeline two-mode + last inline conversions (BDR-077)
doc-syncer: ONE agent, TWO dispatch modes around the dispatcher's gate — MODE: audit (model="opus" call-site override, READ-ONLY, drafts + PATCH PLAN) / MODE: patch (sonnet pin, applies the APPROVED plan, shape oracle w/ revert-on-fail, emits CHANGE SUMMARY + PATCHED_FILES). Deviation from plan's 2-file split, per the challenge's own commit-changer mode precedent: zero text duplication, zero lock moves. Fixes a LATENT DEFECT: /doc dispatched an agent whose STEP 8 gate could never fire (dispatched agents cannot ask) — the gate now lives in the dispatcher (DISPATCHER PROTOCOL section). doc-commit.md consumes the patcher's CHANGE SUMMARY (the in-thread context now crosses the dispatch boundary, LRN-126). Consumers rewired: /doc (audit→gate→patch→commit), onboard (audit report-only, opus), doc-commit steps in bugfix/hotfix/feat/ship-feature/ init-project(5b+10c); scaffolder loses PHASE 6 (README = init 5b's job); scaffolder + onboarder now DISPATCHED in init-project/onboard (pins live, was inline on session model). In-wave planted-drift smoke PASSED end-to-end, disk-verified (audit caught npm-run-dev drift → [MINOR] plan → patch applied → summary crossed). Census §14-15 (103 pass), make test exit 0. Typed plugin-probe dispatch resolution verified post-restart.
This commit is contained in:
@@ -92,12 +92,24 @@ contract, each tagged `[gated <date>]`. STEP 9's verifier judges against this
|
||||
enriched contract.
|
||||
|
||||
## STEP 5 — SCAFFOLD
|
||||
Load `$HOME/.claude/agents/scaffolder.md`. Pass: BRIEF + DESIGN + `~/.claude/templates/project-CLAUDE.md` + `~/.claude/CLAUDE.md`.
|
||||
Dispatch `Agent(subagent_type="scaffolder")` (pin sonnet, effort high —
|
||||
BDR-077 : le design est CLOS au gate #1, le scaffold est de l'exécution,
|
||||
plus jamais inline sur le modèle de session). Pass IN THE PROMPT (LRN-126 —
|
||||
every field the scaffolder consumes crosses the dispatch): BRIEF (verbatim)
|
||||
+ DESIGN (verbatim) + paths `~/.claude/templates/project-CLAUDE.md` +
|
||||
`~/.claude/CLAUDE.md`. A STOP (missing input) comes back as its report —
|
||||
resolve here, re-dispatch. The ~30s liveness pings are THIS loop's job
|
||||
while waiting.
|
||||
Creates: CLAUDE.md, `.claude/settings.json`, `.claudeignore`, `.gitignore`, `.env.example`, empty entry points. NO README, NO features, NO `.claude/tasks/` or `.claude/memory/` (not bootstrapped by this flow — copy from `~/.claude/templates/memory/` manually if wanted before STEP 10b's memory commit).
|
||||
Verify: `git init` + build passes.
|
||||
|
||||
## STEP 5b — CREATE README
|
||||
Load `$HOME/.claude/agents/doc-syncer.md` (AUTO MODE, scope: full project). README.md missing → its README bootstrap creates it. No stop.
|
||||
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).
|
||||
|
||||
## 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.):
|
||||
@@ -286,8 +298,11 @@ 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).
|
||||
|
||||
Load `$HOME/.claude/agents/doc-syncer.md` (AUTO MODE, scope: files changed this session).
|
||||
Detect drift, update cmds/vars/structure, add recent changes entry.
|
||||
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.
|
||||
|
||||
**Then commit the docs** — follow `$HOME/.claude/lib/doc-commit.md`: it surgically commits
|
||||
ONLY the files doc-syncer patched (its `PATCHED_FILES` output, one path per line → one argv
|
||||
|
||||
Reference in New Issue
Block a user