{"slug":"bmad-revendor","title":"bmad-revendor","summary":"Maintainer-only. Use when re-vendoring vendor-skills/BMAD/ against a newer BMAD-METHOD commit — \"update BMAD\", \"re-vendor BMAD\", \"bump the BMAD pin\". Not part of the Hedgehog discipline a consuming project copies; this only applies to the Hedgehog repo itself.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T05:35:44.518497Z","repo":{"url":"https://github.com/skyf0xx/hedgehog","stars":43,"forks":5,"license":"MIT","updatedAt":"2026-10-01T12:02:48Z"},"bodyHtml":"<hr>\n<h2>name: bmad-revendor\ndescription: Maintainer-only. Use when re-vendoring vendor-skills/BMAD/ against a newer BMAD-METHOD commit — \"update BMAD\", \"re-vendor BMAD\", \"bump the BMAD pin\". Not part of the Hedgehog discipline a consuming project copies; this only applies to the Hedgehog repo itself.</h2>\n<h1>Re-vendoring BMAD-METHOD</h1>\n<p><code>vendor-skills/BMAD/</code> is a pinned, manually-updated vendor copy of eight skills\nfrom <code>bmad-code-org/BMAD-METHOD</code>'s <code>bmm</code> module (see\n<code>vendor-skills/BMAD/ATTRIBUTION.md</code> for the current pin). It is never\nauto-updated — re-vendoring is a deliberate act, run only when this\nskill is invoked by name or the user explicitly asks to update BMAD.</p>\n<h2>What's vendored, and why these specific paths</h2>\n<p>Eight skill directories plus two shared scripts they all depend on:</p>\n<ul>\n<li><code>src/core-skills/bmad-forge-idea</code> — pressure-tests an idea before any\nartifact gets written; runs first in the shelf, ahead of\n<code>bmad-brainstorming</code>. Carries its own script, <code>resolve_personas.py</code>\n(not shared with the other skills — vendored inside this skill's own\n<code>scripts/</code>, not in the shared <code>vendor-skills/BMAD/scripts/</code>).</li>\n<li><code>src/core-skills/bmad-brainstorming</code></li>\n<li><code>src/core-skills/bmad-advanced-elicitation</code></li>\n<li><code>src/core-skills/bmad-deep-recon</code></li>\n<li><code>src/bmm-skills/plan/bmad-product-brief</code></li>\n<li><code>src/bmm-skills/plan/bmad-prfaq</code></li>\n<li><code>src/bmm-skills/plan/bmad-prd</code></li>\n<li><code>src/bmm-skills/plan/bmad-ux</code></li>\n<li><code>src/scripts/memlog.py</code>, <code>src/scripts/resolve_customization.py</code> — shared\nutilities every one of the eight skills calls. Not inside any single\nskill directory upstream; vendored separately into <code>vendor-skills/BMAD/scripts/</code>.</li>\n</ul>\n<p>Upstream keeps the four <code>bmm-skills</code> above under a single flat\n<code>bmm-skills/plan/</code> directory as of the <code>v6.11.0</code> vendor pass — it used to\nbe split across numbered <code>1-analysis/</code> and <code>2-plan-workflows/</code>\ndirectories. If upstream has moved them again since, update these paths\nto match rather than leaving a stale layout here.</p>\n<p><code>bmad-deep-recon</code> was, before the <code>v6.11.0</code> pass, the one skill in this\nset that existed only on BMAD-METHOD's <code>main</code> branch — not in any tagged\nrelease; it is now in <code>v6.11.0</code>. If a <em>newer</em> addition to this set is\never unreleased, pin to <code>main</code> at a specific commit SHA rather than a\nrelease tag (see \"Pinning,\" below) instead of silently dropping it; ask\nthe user how to resolve the conflict if it's not obvious (this came up\nduring the original vendor pass — see git history on\n<code>vendor-skills/BMAD/</code>).</p>\n<p>Not vendored, deliberately: <code>bmad-party-mode</code> (BMAD-METHOD's multi-agent\nroster skill) and the <code>bmm-skills/agents/bmad-agent-*</code> persona skills it\nneeds for a real roster. <code>bmad-forge-idea</code> can optionally draw on\nparty-mode's roster but degrades gracefully without it — its\n<code>resolve_personas.py</code> returns an empty roster and the skill falls back to\ngenerating personas on the fly, which is its documented normal path.\nVendoring party-mode for real would mean also vendoring the five\n<code>bmad-agent-*</code> skills, a parallel persona system to Hedgehog's own\n<code>src/agents/</code> that's out of scope for the planning shelf. Don't add it\nwithout raising this tradeoff to the user again.</p>\n<h2>Procedure</h2>\n<ol>\n<li><p><strong>Find the ref to vendor against.</strong> Check <code>gh repo view bmad-code-org/BMAD-METHOD --json defaultBranchRef</code> and <code>gh api repos/bmad-code-org/BMAD-METHOD/tags</code> for available release tags. If\nevery one of the eight skills above exists in the newest tag, pin to\nthat tag. If any of them is unreleased, pin to <code>main</code> at its current\ncommit SHA instead — get it via <code>gh api repos/bmad-code-org/BMAD-METHOD/commits/main --jq '.sha'</code>. Don't\nsilently drop a skill just because it's unreleased; ask the user how\nto resolve the conflict if it's not obvious (this came up during the\noriginal vendor pass — see git history on <code>vendor-skills/BMAD/</code>).</p>\n</li>\n<li><p><strong>List the file tree at that ref</strong>, scoped to the eight skill\ndirectories plus <code>src/scripts/</code> (adjust the path segments below if\nupstream has moved any of them again since the last pass):</p>\n<pre><code>gh api \"repos/bmad-code-org/BMAD-METHOD/git/trees/&lt;ref&gt;?recursive=true\" \\\n  --jq '.tree[] | select(.type==\"blob\") | .path' \\\n  | grep -E \"^src/(core-skills/(bmad-forge-idea|bmad-brainstorming|bmad-advanced-elicitation|bmad-deep-recon)|bmm-skills/plan/(bmad-product-brief|bmad-prfaq|bmad-prd|bmad-ux)|scripts)/\"\n</code></pre>\n<p>Diff this against the current file list in <code>vendor-skills/BMAD/</code> (excluding\n<code>LICENSE</code>, <code>ATTRIBUTION.md</code>, and any files this skill's step 4 strips)\nto see what's new, removed, or moved upstream before blindly\noverwriting — a file that moved to a new path upstream needs its\npath updated here too, not a stale copy left behind.</p>\n</li>\n<li><p><strong>Fetch every file</strong> at that ref via <code>gh api repos/bmad-code-org/BMAD-METHOD/contents/&lt;path&gt;?ref=&lt;sha&gt;</code> (the\n<code>.content</code> field is base64), decoding with <code>base64 --decode</code> (BSD\n<code>base64</code> on macOS needs <code>-i</code>/<code>-o</code> flags, not <code>-d &lt;file&gt;</code>) into\n<code>vendor-skills/BMAD/&lt;path-with-src/-stripped&gt;</code>. Also re-fetch <code>LICENSE</code> from\nthe repo root the same way.</p>\n</li>\n<li><p><strong>Re-apply the strip pass.</strong> Every vendored <code>SKILL.md</code> and its\n<code>references/*.md</code> files have BMAD's own orchestration layer removed —\nthis doesn't survive a raw re-fetch and must be redone by hand each\ntime:</p>\n<ul>\n<li>Central config resolution (<code>_bmad/scripts/resolve_config.py</code>,\n<code>_bmad/config.toml</code>, <code>_bmad/bmm/config.yaml</code>) — not vendored;\nreplace with trivial inline defaults for <code>{user_name}</code>,\n<code>{communication_language}</code> (English), <code>{date}</code> (today),\n<code>{project_name}</code>.</li>\n<li><code>_bmad/scripts/resolve_customization.py</code> and\n<code>_bmad/scripts/memlog.py</code> calls — these ARE vendored (in\n<code>vendor-skills/BMAD/scripts/</code>); rewrite their paths to\n<code>{bmad-root}/scripts/&lt;name&gt;.py</code>, where <code>{bmad-root}</code> is defined once\nper file (in a \"Conventions\" section) as the vendored <code>vendor-skills/BMAD/</code>\nroot.</li>\n<li><code>bmad-party-mode</code> mentions/invocations — remove (not vendored).</li>\n<li>Chain-forward \"common next skill\" suggestions, <code>bmad-help</code>\nreferences, and misroute-detection pointing at non-vendored BMAD\nskills — remove. Control returns to Hedgehog's <code>planner</code> after each\nskill, not to BMAD's own routing.</li>\n<li>Keep <code>bmad-advanced-elicitation</code> invocations — it IS vendored.</li>\n<li>Verify when done:\n<pre><code>cd vendor-skills/BMAD &amp;&amp; grep -rn \"_bmad/\\|resolve_config\\.py\\|party-mode\\|party_mode\\|bmad-help\\|common next\\|scan for misroute\" --include=\"*.md\" .\n</code></pre>\nZero matches is the bar. Read each match before deciding it's really\norchestration — don't blind-strip a line that happens to contain one\nof these words for an unrelated reason.</li>\n</ul>\n</li>\n<li><p><strong>Verify self-containment.</strong> Every vendored Python script must compile\nand its own test suite must pass, standalone, from inside\n<code>vendor-skills/BMAD/</code>:</p>\n<pre><code>cd vendor-skills/BMAD\nfor f in $(find . -name \"*.py\" -not -path \"*/tests/*\"); do python3 -c \"import py_compile; py_compile.compile('$f', doraise=True)\"; done\nuv run --with pytest python3 -m pytest scripts/tests/ core-skills/*/scripts/tests/ -q\n</code></pre>\n<p>Also confirm no vendored file references an absolute path outside\n<code>vendor-skills/BMAD/</code> or a project path from the machine that did the\nvendoring.</p>\n</li>\n<li><p><strong>Update <code>vendor-skills/BMAD/ATTRIBUTION.md</code></strong>: new pinned ref (tag or commit\nSHA), new date, and a note if the vendored file set itself changed\n(a skill added/removed upstream, a shared script renamed, etc.).</p>\n</li>\n<li><p><strong>One commit</strong>, <code>chore(bmad): re-vendor to &lt;ref&gt;</code> — the whole\nre-vendor pass is one unit of work, not split across the fetch and the\nstrip pass.</p>\n</li>\n</ol>\n<h2>Constraints</h2>\n<ul>\n<li>Never auto-run this on a schedule or \"while you're in the area\" — only\non explicit request, same posture as a core package's own workspace\nregeneration.</li>\n<li>Never hand-patch a single vendored file to fix an upstream bug without\nalso updating <code>ATTRIBUTION.md</code> — a silent local fork is worse than a\nstale pin, since nothing records that <code>vendor-skills/BMAD/</code> has diverged from\nwhat its own attribution claims.</li>\n<li>If BMAD-METHOD has restructured upstream (skill renamed, moved to a\ndifferent module, split into multiple skills) since the last vendor\npass, don't force a mechanical file-for-file replace — read the new\nshape and decide whether Hedgehog's list of eight skills still makes\nsense, or whether <code>src/agents/planner.md</code>'s shelf-invocation list\n(Section \"Planning intake\" in that file) itself needs updating to\nmatch. Surface this to the user rather than silently adapting.</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":8848,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-03T16:33:12.717477Z","sha256":"FF610A8B2545D655B3AE8FDF5BAD83B53654CCDA268B76C454B37F3448135BDC","sizeBytes":3849},"review":null,"source":{"repositoryUrl":"https://github.com/skyf0xx/hedgehog","path":".claude/skills/bmad-revendor","license":"MIT","commit":"e7a38b860d3a2bfcf3414b81a823db0731889729","subtreeSha":"C987D8AC28250ACC405FE40C81BEE324EF96826A80C8603B33AB151DD64886AA","lastSyncedAt":"2026-10-01T15:23:18.418472Z"},"reviewedAt":"2026-09-03T16:33:36.546679Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/skyf0xx/hedgehog/tree/master/.claude/skills/bmad-revendor"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install skyf0xx-hedgehog@llmmart"},{"target":"git","command":"git clone https://github.com/skyf0xx/hedgehog.git"}]}