Skip to content

Onboard solution-architect as an addressable advisory persona (repo-local first cut) #1627

Closed
7 of 7 issues completed

Description

@github-actions

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-private carries ≥5 accepted ADRs, each stating a checkable boundary or invariant.
  • solution-architect reaches stable with a scored eval gate green — the first of eight personas to leave draft.
  • ≥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.json and (optional) agent-rate-limits.json registries that S4 touches live in the org repo petry-projects/.github under standards/, 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

  1. added
    initiative:autoDriver may auto-release this epic's ready sub-issues to dev-lead
    on Sep 1, 2026
  2. don-petry commented on Sep 5, 2026

    @don-petry
    Collaborator

    Initiative driver — stale in-flight slot(s) detected

    The following open sub-issue(s) still carry the dev-lead label but have
    had 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.

  3. don-petry commented on Sep 7, 2026

    @don-petry
    Collaborator

    Epic delivered — all seven stories closed

    solution-architect is live, addressable, and the first of nine personas to leave draft. Verified against main, not asserted:

    status: canary
    verdict: promoted   (registered:false — by design, ADR-0006)
    OK: 9 persona manifest(s) valid, invariants hold.
    tests/persona_reach_check.bats — 17/17
    
    Story Outcome
    #1628 — ADR seed 6 ADRs at docs/architecture/adr/, Nygard-with-Status, each lifted from AGENTS.md with a checkable boundary
    #1629 — the persona Manifest + interaction.yml + advisory prompt in one PR
    #1630 — real evals + scored gate Role-generic harness (run-eval.sh <role>) — unblocks the other eight
    #1631 — promotion draft → canary, evidence = reach check + live mention
    #1632 — shared.md reclassification Boundary-crossing refactors off the auto-approve path
    #1633 — org team petry-projects/solution-architect, closed, notifications off, 0 members
    #1634 — verification gate Manifests, interaction model, team mentionability, live smoke test

    It works, and it was tested on a real decision

    In soak #1640 it cited ADR-0001 by 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

    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.py fetches that schema live from .github@main, so every open PR here went red 21 seconds after the last green run. Fixed forward in #1701 (removing canary is what ADR-0006 mandates anyway).

    I wrote a false premise into an issue. combsmith/.github#1078 claimed autocut ignores prompt-only changes; agent_ref_paths covers prompts/, and dev-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 canary from all nine was wrong for dev-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)

    1. The scored eval has never been run against this persona. canary is a legitimate resting state; stable requires it. If it scores low, the answer is a better advisory prompt, not a lower bar.
    2. status vocabulary mismatch — the schema enum has no next, but the registry channel and PRC_RING_ORDER do. [Phase 4] Promote solution-architect past draft through 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.
    3. Cross-repo schema fetch has no ring. validate-personas.py pulls a schema live from another repo's main — 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.
    4. Phase B (fleet-wide): decompose the three product architecture.md artifacts into per-repo ADRs #1637 — decomposing the three product architecture.md artifacts into per-repo ADRs (Phase B, fleet-wide).
    5. pr-review-sweep's stop condition mistakes a marker for a standing approval — a dismissed approval strands a green, auto-merge-armed PR indefinitely #1665 — the sweep's stop condition mistakes a rate-limited marker for a review.

    Remaining phases of Discussion #1360 (A, C, F, G) stay there for later cuts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    initiativeEpic / initiative tracking issueinitiative:autoDriver may auto-release this epic's ready sub-issues to dev-lead

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions