Source profileQuality 88/100Review permissions

stefanoginella/auto-bmad/.claude/skills/auto-bmad-compat-check/SKILL.md

auto-bmad-compat-check

Maintainer tool for the auto-bmad repo itself (run it with /auto-bmad-compat-check) — not for end-user BMAD projects. Checks whether new releases of the two npm packages auto-bmad delegates into — `bmad-method` (the core BMM line) and `bmad-method-test-architecture-enterprise` (the separately versioned TEA test-architecture module) — are compatible with auto-bmad, for each package's `latest` stable and `next` prerelease: reports what changed since the last verified version (diffing the published

Source repository stars
27
Declared platforms
0
Static risk flags
2
Last source update
2026-08-04
Source checked
2026-08-04

Decision brief

What it does—and where it fits

auto-bmad is an orchestrator layered on top of BMAD skills, and it delegates into two separately versioned npm packages: bmad-method (the core BMM line — create-story/dev-story/code-review/…) and bmad-method-test-architecture-enterprise (the TEA module — the bmad-testarch- skill…

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/stefanoginella/auto-bmad --skill ".claude/skills/auto-bmad-compat-check"
    Safe inspection promptEditorial

    Inspect the Agent Skill "auto-bmad-compat-check" from https://github.com/stefanoginella/auto-bmad/blob/9224abd2614491a2af03f33e78b3221f16464a2f/.claude/skills/auto-bmad-compat-check/SKILL.md at commit 9224abd2614491a2af03f33e78b3221f16464a2f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Step 1 — run the helper

      One run covers both packages: the output is { "verdict": , "packages": [ , ] }. Each per-package report has the same shape the rest of this doc describes (its own baseline/stable/prerelease, comparisons, and summary.verdict); the top-level verdict is the most-attention-needing o…

      Baseline = the last-checked versions (stable and prerelease) for eachSurface = the BMAD skills auto-bmad delegates to (bmad- including theFor each package, the script fetches the npm latest (stable) and next
    2. 02

      Step 2 — read the classification

      Each changed file is tagged by how much it can affect auto-bmad:

      Each changed file is tagged by how much it can affect auto-bmad:The relevance tiers are identical for both packages — bmad-method and TEA share one classifier and one surface. The bmad-testarch- skills are high, not contract-owners: auto-bmad's TEA gate reads the trace verdict (PASS…Remember the packages exclude docs/ and tests, so a docs-only release (in either package) correctly shows as "nothing shipped" — that's a real no runtime impact, not a gap in the check.
    3. 03

      Step 3 — cross-check each repo's history

      The tarball diff is authoritative for what file formats shipped, but blind to two things that decide compatibility just as much: changes the maintainers flag as breaking, and anything under tools/ (the installer) — which the published package excludes. Read each repo to close bo…

      bmad-method → bmad-code-org/BMAD-METHODTEA → bmad-code-org/bmad-method-test-architecture-enterprisebaseline → stable — release notes. Enumerate every release newer than the
    4. 04

      Step 4 — assess new skills/features

      For every entry in each comparison's newskills (and any low/off-pipeline change that looks like a genuinely new capability), ask concretely: which auto-bmad phase could use this? Map it to the pipeline (README "What it does per story" table) — e.g. a new test-architecture skill…

      For every entry in each comparison's newskills (and any low/off-pipeline change that looks like a genuinely new capability), ask concretely: which auto-bmad phase could use this? Map it to the pipeline (README "What it…Also re-read docs/upstream-capability-backlog.md (deferred-but-noted capabilities): for each open entry, if this run's diff touches its Revisit when trigger, re-surface it in the report rather than letting it age out. W…
    5. 05

      Step 5 — offer to update the markers (only if compatible)

      If a package's verdict is clean (no critical/high change that actually breaks a contract), offer to update its compatibility markers — never write silently. The two packages advance independently: update only the package(s) you actually re-verified clean. Markers, per package:

      README badge — the shields badge (tested with BMAD-.x /README compat blockquote — rewrite the exact versions in that package'sCHANGELOG [Unreleased] — add a short note only if this is a meaningful

    Permission review

    Static risk signals and limitations

    Runs scripts

    medium · line 44

    The documentation asks the agent to run terminal commands or scripts.

    python3 .claude/skills/auto-bmad-compat-check/scripts/bmad_compat.py \

    Reads files

    low · line 97

    The documentation asks the agent to read local files, directories, or repositories.

    | **critical** | A delegated skill that *owns a contract auto-bmad parses* changed (e.g. `bmad-create-story` → story `Status:` field; `bmad-sprint-*` → `sprint-status.yaml`; `bmad-generate-project-context` → `project-context.md`; `bmad-code

    Reads files

    low · line 117

    The documentation asks the agent to read local files, directories, or repositories.

    package excludes. Read each repo to close both gaps, **per package** — a TEA-only

    Runs scripts

    medium · line 286

    The documentation asks the agent to run terminal commands or scripts.

    validates the classification logic offline — run it if you change the script.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score88/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars27SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    stefanoginella/auto-bmad
    Skill path
    .claude/skills/auto-bmad-compat-check/SKILL.md
    Commit
    9224abd2614491a2af03f33e78b3221f16464a2f
    License
    MIT
    Collected
    2026-08-04
    Default branch
    main
    View the original SKILL.md

    BMAD compatibility check

    auto-bmad is an orchestrator layered on top of BMAD skills, and it delegates into two separately versioned npm packages: bmad-method (the core BMM line — create-story/dev-story/code-review/…) and bmad-method-test-architecture-enterprise (the TEA module — the bmad-testarch-* skills that run in the TEA-gated phases, on their own v1.x line). When either ships a new version, the only questions that matter are: did anything we delegate to or parse change, and is there a new capability we should wire in? This skill answers both for both packages in one run, grounded in the published npm packages (what users actually install) rather than guesswork.

    Run it from the root of the auto-bmad repo (it reads the repo to find both packages' baseline versions and the set of skills auto-bmad depends on).

    It checks incrementally and per-package: for each package, each line is diffed only from where you last left off — last-checked stable → current stable, and last-checked prerelease → current prerelease — so a run only ever surfaces what is genuinely new since the last check, never re-litigating churn you already signed off on. The store for "where you last left off" is the README compat blockquote itself, which records a clause per package (BMAD-METHOD versions + TEA versions); Step 5's marker update advances both baselines for next time. There is no separate state file to drift.

    The two packages have independent version lines (BMAD v6.x, TEA v1.x) and need not share a prerelease — TEA's next can sort below its own stable, leaving its clause with no -next. The helper windows each package's baseline to its own clause (by repo URL) precisely so one package's prerelease is never read as the other's; you never have to disentangle them by hand.

    How it works

    A dependency-free helper does the mechanical, error-prone part — resolving versions for both packages, downloading and diffing the published tarballs, and classifying every changed file against auto-bmad's surface. Your job is the judgement it can't do: reading the flagged diffs, cross-checking each repo's release notes and post-stable commits (Step 3), and deciding whether a change actually affects us.

    Step 1 — run the helper

    python3 .claude/skills/auto-bmad-compat-check/scripts/bmad_compat.py \
      --report --readme README.md --refs auto-bmad/references/*.md \
      > /tmp/bmad-compat.json
    

    One run covers both packages: the output is { "verdict": <worst-of>, "packages": [ <bmad-method report>, <TEA report> ] }. Each per-package report has the same shape the rest of this doc describes (its own baseline/stable/prerelease, comparisons, and summary.verdict); the top-level verdict is the most-attention-needing of the two, so a TEA break can't hide behind a clean BMAD line. A package whose baseline can't be resolved becomes an error entry instead of aborting the run.

    • Baseline = the last-checked versions (stable and prerelease) for each package, parsed from its clause in the README compat blockquote — the exact pair we last signed off on. (--baseline/--prev-prerelease override the bmad-method pair; --tea-baseline/--tea-prev-prerelease override TEA's.)
    • Surface = the BMAD skills auto-bmad delegates to (bmad-* including the bmad-testarch-* family), derived live from auto-bmad/references/*.md so it never goes stale as the pipeline evolves. The same surface is applied to both packages — each tarball only contains its own skills, so it self-scopes.
    • For each package, the script fetches the npm latest (stable) and next (prerelease) versions and diffs incrementally, each line anchored at the highest version you've already checked below it:
      • prerelease line → from the higher of {current stable, last-checked prerelease}. So next.1 → next.2 shows only next.1 → next.2, not the whole stable → next.2.
      • stable line → from the higher of {last-checked stable, a last-checked prerelease that has since graduated into this stable}. So when 6.8.1 ships after you reviewed 6.8.1-next.2, you see only the next.2 → 6.8.1 sliver, not the whole prev_stable → 6.8.1 (which would re-show everything you already reviewed as prereleases). A comparison is omitted entirely when nothing is new on that line (stable unchanged, or the prerelease hasn't moved / has graduated) — an empty comparisons list means up-to-date. Output is JSON with a summary plus per-file impact entries (each carrying a bounded unified diff for the changes that matter). Each comparison also carries from_git_head / to_git_head — the exact source commits npm built its endpoints from — for the precise repo cross-check in Step 3.

    If it can't determine a package's baseline from the README, pass that package's explicit override (--baseline/--prev-prerelease for bmad-method, --tea-baseline/--tea-prev-prerelease for TEA). If a recorded prerelease has since been unpublished from npm, the script degrades gracefully — it re-anchors that line at the current stable and records why in prerelease_anchor_note. If the network is unavailable it exits with a clear error — say so and stop.

    Step 2 — read the classification

    Each changed file is tagged by how much it can affect auto-bmad:

    RelevanceMeaningWhat you do
    criticalA delegated skill that owns a contract auto-bmad parses changed (e.g. bmad-create-story → story Status: field; bmad-sprint-*sprint-status.yaml; bmad-generate-project-contextproject-context.md; bmad-code-review### Review Findings plus its replicated internals — see below; bmad-review-adversarial-general / bmad-review-edge-case-hunter → the lens output shapes the triage prompt parses).Read the diff. Decide if the file format/structure auto-bmad reads actually changed. Cross-check the parser it would break: scripts/story_plan.py, review_findings.py, state_plan.py. For the code-review fan-out (auto-bmad replicates bmad-code-review's internal structure, since a delegate can't spawn its three review subagents): diff bmad-code-review's steps/step-02 + steps/step-03 and the two bmad-review-* skills against the replica in references/delegation.md (the code-review (fan-out) entries) — a changed lens roster, inline Acceptance Auditor prompt, edge-hunter JSON shape, or triage rubric must be mirrored there. Two parts of the replica are auto-bmad-LOCAL additions with no upstream counterpart (fenced with auto-bmad-local comments): the code-review-security delegate and the triage security-severity-map + Low keep/drop block. Do NOT treat their absence upstream as drift, and never remove them when reconciling — only the surrounding mirrored structure tracks upstream.
    highA delegated skill changed, but not one that owns a parsed contract (e.g. bmad-dev-story; the bmad-testarch-* family — which lives in the TEA package, so it surfaces in that package's report).Skim the diff for changed invocation flags/modes or removed capabilities auto-bmad's delegation prompts assume (references/delegation.md).
    lowA BMAD skill auto-bmad does not use changed, or a brand-new skill appeared.Not a compatibility risk. Assess only as a new-capability opportunity (Step 4).
    infoNon-skill file (e.g. package.json).Version noise — ignore.

    The relevance tiers are identical for both packages — bmad-method and TEA share one classifier and one surface. The bmad-testarch-* skills are high, not contract-owners: auto-bmad's TEA gate reads the trace verdict (PASS/CONCERNS/ FAIL) by delegate return, not by parsing a file format, so there's no parser to silently break — only invocation flags/modes to watch.

    Remember the packages exclude docs/ and tests, so a docs-only release (in either package) correctly shows as "nothing shipped" — that's a real no runtime impact, not a gap in the check.

    Step 3 — cross-check each repo's history

    The tarball diff is authoritative for what file formats shipped, but blind to two things that decide compatibility just as much: changes the maintainers flag as breaking, and anything under tools/ (the installer) — which the published package excludes. Read each repo to close both gaps, per package — a TEA-only release notes its breaking changes in the TEA repo, not BMAD-METHOD's. This complements the diff; don't re-narrate it.

    Repos (both: tags vX.Y.Z, default branch main, npm stamps gitHead per version):

    • bmad-methodbmad-code-org/BMAD-METHOD
    • TEA → bmad-code-org/bmad-method-test-architecture-enterprise

    Use the repo field on each per-package report as the --repo for the gh commands below.

    • baseline → stable — release notes. Enumerate every release newer than the baseline up to and including the stable (gh release list --repo <repo>, then gh release view v<X.Y.Z> --repo <repo> --json body) — not just v<stable>, since the baseline can lag a minor or more. Look for the 💥 Breaking Changes / deprecations callout and for installer/tools/ 🐛 Fixes the payload diff can't surface. Cross-check any installer note against CLAUDE.md "Known platform facts" — the README "Updating" guidance keys off exactly these. (For a TEA-only bump, <repo> is the TEA repo; its releases describe testarch changes, not BMM ones.)
    • prerelease line — exact commit window via gitHead. The next prerelease carries no git tag, but npm stamps the exact source commit it was built from into each version's metadata — the script surfaces it as from_git_head / to_git_head on the prerelease comparison (both packages stamp it). Use those to read the precise commit window that produced the incremental diff: gh api repos/<repo>/compare/<from_git_head>...<to_git_head> --jq '.commits[].commit.message'. This is tight — it spans only the last-checked prerelease → current prerelease, not the whole v<stable>...main (which can be ahead of the published next, and re-includes commits you reviewed on a prior run). A src/-touching commit is already in the diff; its value here is the intent behind it. The payoff is the tools/-only commits the package never carries.
      • Fallback: if from_git_head/to_git_head are null (an older publish that predates npm gitHead) or the compare 404s (commit squash-rewritten or force-pushed off main), fall back to repos/<repo>/compare/v<stable>...main and manually ignore commits at or before the last-checked prerelease.

    If gh is unauthenticated or offline, say so and fall through to the tarball-only verdict — this step sharpens judgement, it isn't a gate.

    Step 4 — assess new skills/features

    For every entry in each comparison's new_skills (and any low/off-pipeline change that looks like a genuinely new capability), ask concretely: which auto-bmad phase could use this? Map it to the pipeline (README "What it does per story" table) — e.g. a new test-architecture skill might slot into the TEA-gated phases; a new review layer might strengthen Phase 7. Recommend only where there's a real fit; say "nothing actionable" when there isn't. Don't invent uses.

    Also re-read docs/upstream-capability-backlog.md (deferred-but-noted capabilities): for each open entry, if this run's diff touches its Revisit when trigger, re-surface it in the report rather than letting it age out. When a check concludes "real capability, no fit today", add it there (don't lose it in chat).

    Report structure

    Produce this exact template in chat. The body is per package — repeat the ### <package> block for bmad-method and TEA, then close with one combined recommendation. Lead with the combined headline (the top-level verdict).

    # BMAD compatibility check — <YYYY-MM-DD>
    
    **Combined verdict:** <top-level `verdict`: up-to-date / compatible /
    review-opportunities / needs-attention> — <one clause naming which package drove
    it, if any>
    
    ### BMAD-METHOD (`bmad-method`)
    
    #### Versions
    - Last checked (auto-bmad): <baseline stable> + <prev_prerelease, or "no prerelease recorded">
    - Current stable (npm `latest`): <stable, or "unchanged since last check">
    - Current prerelease (npm `next`): <prerelease, "unchanged since last check", or "none ahead of stable">
    
    #### What changed
    <grouped by comparison — and note which line each is (stable vs prerelease) and
    its actual `from → to`, since the prerelease diff is incremental. Bold the
    delegated/contract changes; one line each. Draw on the Step 3 release notes
    (stable) and post-stable commits (prerelease) for the *why*. For docs-only or
    off-pipeline churn, say so plainly. If this package's `comparisons` is empty
    (verdict `up-to-date`), say plainly that nothing is new on either line since the
    last check — that is the whole point of the incremental check.>
    
    #### Impact on auto-bmad
    - **Verdict:** <this package's `summary.verdict`>
    - <specifics, citing the file + what you concluded from its diff. If a
      contract-owner changed, state explicitly whether the parsed format moved.>
    - <repo cross-check (Step 3): any maintainer-flagged breaking change or
      deprecation, and any `tools/` installer change — note whether it touches
      auto-bmad's delegation or the README "Updating" guidance.>
    
    #### New skills/features worth considering
    - <skill → concrete auto-bmad phase it could improve, or "nothing actionable">
    
    ### TEA test-architecture (`bmad-method-test-architecture-enterprise`)
    
    <the same four #### subsections for the TEA package. If the report entry is an
    `error` (baseline unresolved), say so plainly and stop the per-package detail.>
    
    ## Recommendation
    - <combined — e.g. "Safe to advance both markers (BMAD <stable>+<pre>, TEA
      <stable>+<pre>)", "Already up-to-date — nothing new on either package", or
      "Hold — inspect X in <package> first". Be explicit about *which* package(s) the
      marker advance covers, since they move independently.>
    

    Lead with the combined verdict; a maintainer should grasp it in seconds. When one package is up-to-date and the other isn't, keep the quiet package's block to a single "unchanged since last check" line — don't pad it.

    Step 5 — offer to update the markers (only if compatible)

    If a package's verdict is clean (no critical/high change that actually breaks a contract), offer to update its compatibility markers — never write silently. The two packages advance independently: update only the package(s) you actually re-verified clean. Markers, per package:

    1. README badge — the shields badge (tested with BMAD-<minor>.x / tested with TEA-<minor>.x). Bump only on a new minor line (e.g. 6.8.x6.9.x, or 1.19.x1.20.x); a new patch/prerelease alone doesn't change it.
    2. README compat blockquote — rewrite the exact versions in that package's clause to the new stable and the new prerelease. This blockquote is the store the next run reads as its baseline (windowed per package by repo URL — keep each clause's versions after its repo link, or the parser won't find them), so always advance both versions you just checked for that package — even a prerelease-only bump (next.1 → next.2) must be recorded, or the next run re-diffs ground you already covered. (If a package's next sorts below its own stable, it has no prerelease to record — leave its clause prerelease-less, as TEA's is today.) Keep the contract-based "couples to those skills' contracts rather than pinned versions" framing — that wording is why a bump is low-risk; don't reduce it to a bare version. Touch only the clause(s) you re-verified; leave the other package's clause byte-for-byte intact.
    3. CHANGELOG [Unreleased] — add a short note only if this is a meaningful compatibility statement (a verified new BMAD or TEA line — name which). A routine "still compatible, nothing changed" check — including a benign prerelease-marker advance — needs no changelog entry.

    Note for the user: scripts/bump-version.py rewrites auto-bmad's own version badge but not these BMAD/TEA-compat markers, so they're hand-maintained — which is exactly what this skill automates.

    Notes

    • Two packages, one run. bmad-method and TEA (bmad-method-test-architecture-enterprise) are checked together and folded into a worst-of headline verdict; everything below applies to each package's own line. TEA is the home of the bmad-testarch-* skills — a TEA release with no BMM change still matters, which is the whole reason it's tracked here.
    • The next tag can lag a fresh stable release; the script only treats it as a prerelease when it actually sorts above that package's latest (and reports the raw tag). TEA's next does exactly this today (1.18.1-next.0 < 1.19.0), so TEA currently has no prerelease line — that's expected, not a miss.
    • The check is incremental and stateful via the README (Step 1), per package: each line is diffed only from the highest version you've already checked below it, so nothing is ever reviewed twice. The prerelease line anchors at the higher of {current stable, last-checked prerelease}; the stable line, symmetrically, anchors at a last-checked prerelease once it has graduated into the stable (diffing just the prerelease→final sliver). A recorded prerelease that npm has since unpublished degrades to a durable stable anchor (stable_anchor_note / prerelease_anchor_note) rather than crashing.
    • Tarball diffing is authoritative for "what shipped" but won't catch an installer behavior change (those live in tools/, not the skill payload) — which is exactly why Step 3 reads each repo's release notes and post-stable commits. Weigh any installer finding against the install/update notes in CLAUDE.md.
    • python3 .claude/skills/auto-bmad-compat-check/scripts/bmad_compat.py --self-test validates the classification logic offline — run it if you change the script.

    Alternatives

    Compare before choosing