Repository navigation
Onboard solution-architect as an addressable advisory persona (repo-local first cut) #1627
Description
What this epic delivers
The minimum viable slice of Discussion #1360's architectural-integrity initiative, scoped by the maintainer refresh comment (2026-08-31, §7) — not all of Phases A–G. One outcome: onboard solution-architect as an addressable, mention-routed advisory persona, give it a repo-local architecture-of-record (ADRs) to cite, and promote it past draft behind a scored eval gate. That is Phase E, the advisory half of Phase D, and the minimum-viable slice of Phase B — nothing else.
This breaks the pattern the refresh comment flags: eight personas onboarded, all still draft seven weeks on, because promotion was deferred out of every cut. Here, promotion is a story inside the epic.
The architecture-specific correction (why the ADR seed blocks the persona)
qa-lead works as a bare wrapper because bmad-tea carries portable doctrine. Architecture doctrine is not portable. A solution-architect shipped as a bare wrapper over bmad-agent-architect would reverse-engineer intent from the current code — "a drifted codebase teaches the planner its drift" (§2) — and would be the ratchet wearing a third hat. So the persona must have something normative to cite: the ADR seed (S1) is in this cut and blocks the persona (S2), repo-local to .github-private only (Q4), lifted from doctrine already in AGENTS.md rather than invented.
Success metrics (this cut — §9)
.github-privatecarries ≥5 accepted ADRs, each stating a checkable boundary or invariant.solution-architectreachesstablewith a scored eval gate green — the first of eight personas to leavedraft.- ≥1 advisory that cites an ADR by number and is acted on — either the flagged change moves, or a new superseding ADR is written (the second is the ratchet actually breaking).
- Counter-metric, watched from run one: zero advisories that assert doctrine without an ADR citation.
Cost cap (this cut — §9)
Mention-routed only: a run happens when — and only when — a human types the handle. No cron, no per-PR fan-out, no standing token cost. Explicitly do NOT wire pull_request: synchronize in this cut. If a per-agent budget is later wanted, its home is a solution-architect entry in standards/agent-rate-limits.json (org repo; provisional/inert pending #636) — a placement decision, not an enforcement one for this cut.
Explicitly out of scope — no stories created
Remains in Discussion #1360 for later cuts: Phase A (org architecture standard + specs/), Phase B fleet-wide half (views/, deterministic generation, other repos, the March-2026 artifact migration), Phase C (plan-time rubric checkpoints + solutioning stage), Phase F (continuous refactor, incl. its unmet Q6 shared-engine premise), Phase G (contract conformance + the purpose-built DDD DSL). Known-and-accepted platform gaps (no discussion labels API for hands-off; N-mention fan-out has no quota cap; no 👀 ack reaction) are carried, not solved.
DAG
S1 (ADR seed) -> S2 (persona) -> S3 (real evals + scored gate) -> S4 (promotion)
|
+-> S5 (shared.md reclassification)
T (org team) -- parallel human/session step
V (verify) -- gate, after S2 + T
Untracked prerequisites
- The
canary-rings.jsonand (optional)agent-rate-limits.jsonregistries that S4 touches live in the org repopetry-projects/.githubunderstandards/, not in this repo — S4's ring registration is a cross-repo change coordinated the same way qa-lead/security-lead would register.
Planned from idea discussion #1360 by the BMAD Scrum Master initiative-planner. Inert until a maintainer adds initiative:auto.
Activity
solution-architectadvisory persona (manifest + advisory prompt + interaction contract + eval seed) #1629solution-architectpastdraftthrough the release rings, verifying propagation reached a consumer #1631don-petry commentedon Sep 5, 2026
Initiative driver — stale in-flight slot(s) detected
The following open sub-issue(s) still carry the
dev-leadlabel but havehad no dev-lead activity for ≥ 72h, so they are occupying an in-flight
slot without progressing: #1631.
No labels were changed. A human should decide whether to split-and-close, retry,
or park each one so the slot is freed for the rest of the epic.
feat(personas): invert the reach check per ADR-0006 and promote solut…
don-petry commentedon Sep 7, 2026
Epic delivered — all seven stories closed
solution-architectis live, addressable, and the first of nine personas to leavedraft. Verified againstmain, not asserted:docs/architecture/adr/, Nygard-with-Status, each lifted fromAGENTS.mdwith a checkable boundaryinteraction.yml+ advisory prompt in one PRrun-eval.sh <role>) — unblocks the other eightdraft → canary, evidence = reach check + live mentionshared.mdreclassificationpetry-projects/solution-architect, closed, notifications off, 0 membersIt works, and it was tested on a real decision
In soak #1640 it cited
ADR-0001by number and caught both planted violations. Then, asked to decide its own rollout architecture in #1688, it identified the governing principle the humans had missed — a persona is a caller of the shared runtime, not a reusable, so registering each one inverts ADR-0001's two-tier boundary. It rejected the option I had recommended, and it stated plainly that no accepted ADR governed the case rather than inventing doctrine — the exact rule #1629 AC #6 exists to enforce. That advisory became ADR-0006.What the epic changed beyond the persona
dev-lead:hands-offwas the only one that existed. Now all nine do (Epic: Persona framework — post-rollout hardening & follow-ups #1318).prompts/shared.mdno longer auto-approves boundary-crossing refactors — Architectural integrity in the agentic delivery model — what enforces our standards, and where does the Solution Architect fit? #1360 called this the single highest-leverage edit in the proposal.Incidents caused and fixed, recorded honestly
I broke the fleet. combsmith/.github#1082 merged with a bidirectional schema rule added during review; all nine manifests violated it instantly, and
validate-personas.pyfetches that schema live from.github@main, so every open PR here went red 21 seconds after the last green run. Fixed forward in #1701 (removingcanaryis what ADR-0006 mandates anyway).I wrote a false premise into an issue. combsmith/.github#1078 claimed autocut ignores prompt-only changes;
agent_ref_pathscoversprompts/, anddev-lead— same shape — carries 162 tags at v139.8.0. dev-lead implemented my bad instruction faithfully. Had it merged, the false claim would have propagated into eight more registry entries.I over-applied my own ADR. Stripping
canaryfrom all nine was wrong fordev-lead, which genuinely ships its own reusable and is legitimately registered. Caught only because codeant-ai's finding forced the check out of the draft gate, which surfaced the defect underneath.Open follow-ups (not blocking)
canaryis a legitimate resting state;stablerequires it. If it scores low, the answer is a better advisory prompt, not a lower bar.statusvocabulary mismatch — the schema enum has nonext, but the registry channel andPRC_RING_ORDERdo. [Phase 4] Promotesolution-architectpastdraftthrough the release rings, verifying propagation reached a consumer #1631's AC test issue from agent #1 was unimplementable as literally written. Now pinned by a test; deserves its own decision.validate-personas.pypulls a schema live from another repo'smain— any org-repo merge can red every PR here instantly. Same class as Script-only changes never reach the fleet: autocut watches the reusable blob, but agents execute scripts/ pinned at agent_ref #1592 and [Phase 4] pr-review runs are ~49% cancelled-while-pending — cancel-in-progress:false protects in-flight only, and cancelled renders as a failing check #1422: the standard is versioned, the fetch is not.architecture.mdartifacts into per-repo ADRs (Phase B, fleet-wide).Remaining phases of Discussion #1360 (A, C, F, G) stay there for later cuts.