bmady (Bmady) — dogfood bilan
Index + template: README.md. Newest first.
2026-09-17 — profile 2: the five personas and five gates walked on a scratch CLI, the commit swept the skills mirror again (run 01a0afa6-aaf4)
- Status: validated end to end, one known sweep —
analyst→elicit_brief→pm→review_prd(approve) →architect→approve_arch(approved) →select_stories(S1–S3, now, WIP 3) →dev→qa(no blocker, confidence high) →final_review(ship) →commit_changes→ done. Neither new exhaustion exit was reached (both loops approved on their first turn); their witness is the dry run below. - Versions: bot bmady 0.1.1 (
dsl: 2+ the two C145 exits, wave 3b of #1344) · iterion5fa790d82for the bots; the engine the branch binaryv3.157.0+c31559517(built on the wave-3a branch from main at v3.157.0; main is at v3.159.0 as this is written, one PR of engine work ahead), served through the host's Anthropic-compatible facade (z.ai) as the runs' provenance records. - Method: launched FROM a scratch greeter repository,
--var brief="Add a --lang option (en or fr) to the greet CLI: fr prints 'Bonjour, NAME'. Keep the standard-library-only rule of ADR-0001 and the existing tests green.",--store-dirthe operator's workspace store,--sandbox none,--merge-into none, caps--max-cost-usd 1.5 --max-duration 10m, every LLM node onclaude_code/claude-opus-5. The five gates answered withiterion resume --answer …; the operator pauses count against the wall, so the 90 % duration guard fired asdevstarted and the run was resumed with--max-duration 40m --max-cost-usd 4. - Result: $1.83, 23 min 18 s from launch to done including the five pauses. The analyst asked the right clarifications (language set, casing, exit code), the PM wrote acceptance criteria with the exit-code map, the architect chose a
ValueErrorsubclass carried through the existing except-ladder and named the ordering risk, the dev implemented S1–S3 with aGREETINGStable as the single source of truth plus tests asserting exit 3 and the exact stderr line, QA found no blocker;commit_changesproducedd5a39fdon the run worktree — 43 files, of which 16 under.claude/skills/are iterion's own mirror, swept in by the deterministicgit add -A(the bot's comment calls it safe on the assumption that the repository ignores the mirror; this scratch does not). Storage branchiterion/run/01a0afa6-aaf4-7549-960f-70206b791fd0→d5a39fd. - Value: the fifteen prompts' paragraph breaks reach the models — proven in the run's
events.jsonlfor every system prompt and all five gate instruction blocks, whose#titles and paragraphs now arrive as the authors laid them out — and the two exits hold invalidate --exec --strict: the false pass (every condition false, so both loops exhaust) now endsfinishedthroughderive_prd -> architectandapprove_arch -> select_storieswhere main's copy endedfailed_resumable(LOOP_EXHAUSTED). - Findings / misses: the mirror sweep is the commit-side twin of #1364 (the gate-side refusal of
?? .claude/) — same cause, same class rule to apply (iterion's scaffold is never run output); recorded on #1364, not fixed in this wave. - Engine hardening: none in this wave.
- Lessons for next run: budget the wall for the operator's own latency at five gates (
--max-duration 30m); pass--merge-into noneagain on resume.
2026-06-14 — full BMAD flow validated end-to-end via API-driven gates (run 019ec66b)
- Status: validated. All five BMAD personas + all five human gates ran to a shipped, tested, committed feature. I drove the gates programmatically (resume API), not Playwright.
- Method: dedicated worktree studio :4899,
worktree: auto(no sandbox), all nodesclaude_code/opus (no claw/gpt → no forfait shape flakiness).--var brief="Add a --short flag to iterion version that prints only the semantic version, for shell scripts",merge_into=none. - Flow: analyst (Mary) → elicit_brief → pm (John) → review_prd → architect (Winston) → approve_arch → select_stories → dev (James) → qa → final_review → commit → done. Each gate paused as
paused_waiting_human; answered viaPOST /api/runs/{id}/resumewith the node's output-schema fields (clarifications/action/approved/selected_story_ids+priority+wip_limit/action:ship). - Quality of each persona (high):
- Analyst surfaced 5 genuine open questions (build-date misconception,
devun-stamped handling, leading-v,--jsoncomposition, flag spelling) — real ambiguities, no solutioning. - PM produced precise acceptance criteria incl. "no regression to RawVersion / desktop auto-updater" and "
--jsonwins deterministically". - Architect correctly judged this "exposure work, not new machinery" and reused the existing
FullVersion/Versionseam (3-layer minimal design). - Dev implemented exactly to spec AND wrote tests unprompted (
cmd/iterion/version_test.go+pkg/cli/version_test.go). - qa judge: blockers=[], confidence high.
- Analyst surfaced 5 genuine open questions (build-date misconception,
- Result:
final_commit f452cccfon storage branchiterion/run/dawn-thrash-midnightkazoo-9da0(not merged). The feature is correct:ShortVersion()reads onlyappinfo.Version(commit suffix structurally impossible), strips one leadingv;--shortprints it;--jsontakes precedence;version_test.gocovers both; docs indocs/cli-reference.md+CLAUDE.md. - Finding (confirms Doki): the commit also swept in
.claude/skills/bmady-*.md(6 files) — the runtime skill mirror. The clone carries main's.gitignore(which lacks the.claude/skills/entry added on thec082-board-emitbranch, commita9b6d671), so Bmady'scommit_changesincluded the mirror as if it were source. This is exactly the data-loss/noise Doki flagged and the gitignore fix prevents — a code bot DID sweep the mirror into its commit. Re-running with the gitignore fix in place would produce a clean feature-only commit. - Lessons for next run: Bmady is reliable + high-value for a scoped feature when the gates are driven attentively; the all-claude_code/opus pipeline avoided the forfait shape flakiness that bit Seki. Land the
.claude/skills/gitignore fix (already on this branch) before using Bmady on a repo where the commit matters.
