mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-08-30 17:14:59 +08:00
cf54f4d76d
* refactor(bmm): move sprint-planning and sprint-status to plan/ They sit at the plan/ship boundary and their outputs are planning artifacts of the dev cycle; next commit makes sprint-planning the readiness gate, which is plan-side work. * refactor(bmm): fold readiness gate into sprint-planning, retire check-implementation-readiness The old skill was 1,154 lines of legacy numbered-step ceremony whose document discovery hardcoded filename globs (*prd*, *ux*, *epic*) that miss what current skills produce (SPEC.md, DESIGN.md) and still treated retired sharded docs as first-class. Sprint-planning now opens with a lean readiness gate: generic artifact discovery by content, forward/back traceability, PASS/CONCERNS/FAIL, stop on FAIL with findings. The IR trigger on John's and Winston's menus dispatches sprint-planning, so 'check implementation readiness' still works everywhere it used to. * refactor(bmm): modernize sprint-planning with deterministic script core SKILL.md drops the legacy XML step dialect for the product-brief style (~100 lines, uv run, headless contract). New scripts/sprint_plan.py owns the mechanical work — epic parsing, key derivation, ordering, preserve- never-downgrade merge, story-file detection, action_items carry-over, atomic writes, drift checks — with 11 tests wired in as test:sprint-planning. Judgment stays with the LLM: epic discovery, the readiness gate, and reconciling script-reported orphans and unparsed headings. checklist.md retired (the script performs that checklist); sprint-status-template.yaml is the single source for the status vocabulary. Output stays byte-compatible with build's sprint sync and retrospective's tooling. * refactor(bmm): fold sprint-status into sprint-planning's status view sprint_plan.py gains a status subcommand: counts (legacy values mapped), risk flags, open action items, and a priority-ordered next-action recommendation — the old skill's inference-driven summary, computed deterministically and covered by 9 new tests. bmad-sprint-status becomes a v6-shims husk that forwards with status-view intent and a deprecation notice; its dead data/validate modes had zero callers and are gone. If a hand-edited status file defeats the script, the skill falls back to reading it directly and summarizing by best judgment. New explanation page docs/explanation/sprint-planning.md covers the consolidated skill; workflow maps and references updated across all languages. * docs: changelog entries for skill reorg and sprint consolidation * fix(bmm): harden sprint_plan.py per review; add validate/fix intents with full progressive disclosure Review fixes (PR #2659 findings, bot + internal review): - Normalize legacy v6 statuses (drafted/contexted) on every read — merged by meaning and reported, never treated as illegal or reset - dropped_orphans carry their old status; transplant renames via --set - project_key/tracking_system/story_location preserved from the existing file unless overridden; refresh round-trips custom keys and user comments - Hardened write path: dump-to-bytes, fsync, permission-preserving atomic write inside the guarded block, explicit checks (no asserts), atomic restore - JSON-only argparse (errors and -h emit JSON); unicode-aware slugs with hash fallback; fenced code blocks ignored when parsing epics - Odd retro keys, date-typed stamps, and non-mapping YAML report cleanly instead of crashing; unparseable timestamps warn instead of silently disabling the staleness check; malformed action items flagged, not dropped - Dead check subcommand removed; generate --dry-run reports drift/in_sync - test:sprint-planning wired into quality and CI (was test-only) - Retro tests use a vendored template fixture (PATH-05); repo-level test-template-sync.js keeps it byte-identical to the source; template example timestamps and story_location fixed; header block pinned to the template by test New capability: - validate subcommand + reference: structural validation, never writes - fix flow: evidence-gathering subagents -> user-confirmed state table -> generate --fresh --set writes a pristine file (the one path allowed to downgrade); universal script-failure fallback to inference for every intent - SKILL.md is now a lean router: gate, tracking, status, fix, and validate each load as progressive-disclosure references Docs: explanation page gains Repair section; workflow-map and getting-started across all five languages mention the status view; headless payload nests under 'report' to avoid the status key collision; changelog updated. Test suite grows 20 -> 37; retro suite 91/91; docs build and validators green. * docs: mention repair in sprint-planning explanation description
124 lines
4.8 KiB
JSON
124 lines
4.8 KiB
JSON
{
|
|
"$schema": "https://json.schemastore.org/package.json",
|
|
"name": "bmad-method",
|
|
"version": "6.10.0",
|
|
"description": "Breakthrough Method of Agile AI-driven Development",
|
|
"keywords": [
|
|
"agile",
|
|
"ai",
|
|
"orchestrator",
|
|
"development",
|
|
"methodology",
|
|
"agents",
|
|
"bmad"
|
|
],
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/bmad-code-org/BMAD-METHOD.git"
|
|
},
|
|
"license": "MIT",
|
|
"author": "Brian (BMad) Madison",
|
|
"main": "tools/installer/bmad-cli.js",
|
|
"bin": {
|
|
"bmad": "tools/installer/bmad-cli.js",
|
|
"bmad-method": "tools/installer/bmad-cli.js"
|
|
},
|
|
"scripts": {
|
|
"bmad:install": "node tools/installer/bmad-cli.js install",
|
|
"bmad:uninstall": "node tools/installer/bmad-cli.js uninstall",
|
|
"docs:build": "node tools/build-docs.mjs",
|
|
"docs:dev": "astro dev --root website",
|
|
"docs:fix-links": "node tools/fix-doc-links.js",
|
|
"docs:preview": "astro preview --root website",
|
|
"docs:validate-links": "node tools/validate-doc-links.js",
|
|
"docs:validate-sidebar": "node tools/validate-sidebar-order.js",
|
|
"format:check": "prettier --check \"**/*.{js,cjs,mjs,json,yaml}\"",
|
|
"format:fix": "prettier --write \"**/*.{js,cjs,mjs,json,yaml}\"",
|
|
"format:fix:staged": "prettier --write",
|
|
"install:bmad": "node tools/installer/bmad-cli.js install",
|
|
"lint": "eslint . --ext .js,.cjs,.mjs,.yaml --max-warnings=0",
|
|
"lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix",
|
|
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
|
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
|
"quality": "npm run format:check && npm run lint && npm run lint:md && npm run docs:build && npm run test:site-url && npm run test:install && npm run test:urls && npm run test:renderer && npm run test:retrospective && npm run test:sprint-planning && npm run validate:refs && npm run validate:skills && npm run docs:validate-sidebar",
|
|
"rebundle": "node tools/installer/bundlers/bundle-web.js rebundle",
|
|
"test": "npm run test:refs && npm run test:install && npm run test:urls && npm run test:site-url && npm run test:channels && npm run test:renderer && npm run test:retrospective && npm run test:sprint-planning && npm run test:skills && npm run lint && npm run lint:md && npm run format:check",
|
|
"test:channels": "node test/test-installer-channels.js",
|
|
"test:install": "node test/test-installation-components.js",
|
|
"test:refs": "node test/test-file-refs-csv.js",
|
|
"test:renderer": "uv run --python 3.11 python -m unittest src/scripts/tests/test_config_utils.py src/scripts/tests/test_resolve_config.py src/scripts/tests/test_resolve_customization.py && node test/test-build-auto-renderer.js",
|
|
"test:retrospective": "uv run --python 3.11 src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_git_evidence.py && uv run --python 3.11 src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_sprint_status.py",
|
|
"test:site-url": "node test/test-site-url.mjs",
|
|
"test:skills": "node test/test-validate-skills.js",
|
|
"test:sprint-planning": "uv run --python 3.11 src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/test_sprint_plan.py && node test/test-template-sync.js",
|
|
"test:urls": "node test/test-parse-source-urls.js",
|
|
"validate:refs": "node tools/validate-file-refs.js --strict",
|
|
"validate:skills": "node tools/validate-skills.js --strict"
|
|
},
|
|
"lint-staged": {
|
|
"*.{js,cjs,mjs}": [
|
|
"npm run lint:fix",
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.yaml": [
|
|
"eslint --fix",
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.json": [
|
|
"npm run format:fix:staged"
|
|
],
|
|
"*.md": [
|
|
"markdownlint-cli2"
|
|
]
|
|
},
|
|
"overrides": {
|
|
"esbuild": "^0.28.1",
|
|
"markdownlint-cli2": {
|
|
"markdown-it": "^14.2.0"
|
|
}
|
|
},
|
|
"dependencies": {
|
|
"@clack/core": "^1.3.1",
|
|
"@clack/prompts": "^1.4.0",
|
|
"@kayvan/markdown-tree-parser": "^1.6.1",
|
|
"chalk": "^4.1.2",
|
|
"commander": "^14.0.0",
|
|
"csv-parse": "^6.1.0",
|
|
"glob": "^11.0.3",
|
|
"ignore": "^7.0.5",
|
|
"js-yaml": "^4.1.0",
|
|
"picocolors": "^1.1.1",
|
|
"semver": "^7.6.3",
|
|
"xml2js": "^0.6.2",
|
|
"yaml": "^2.7.0"
|
|
},
|
|
"devDependencies": {
|
|
"@astrojs/sitemap": "^3.7.3",
|
|
"@astrojs/starlight": "^0.40.0",
|
|
"@eslint/js": "^9.33.0",
|
|
"astro": "^6.4.6",
|
|
"c8": "^10.1.3",
|
|
"eslint": "^9.33.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-n": "^17.21.3",
|
|
"eslint-plugin-unicorn": "^60.0.0",
|
|
"eslint-plugin-yml": "^1.18.0",
|
|
"husky": "^9.1.7",
|
|
"jest": "^30.2.0",
|
|
"lint-staged": "^16.1.1",
|
|
"markdownlint-cli2": "^0.19.1",
|
|
"prettier": "^3.7.4",
|
|
"prettier-plugin-packagejson": "^2.5.19",
|
|
"sharp": "^0.33.5",
|
|
"unist-util-visit": "^5.1.0",
|
|
"yaml-eslint-parser": "^1.2.3",
|
|
"yaml-lint": "^1.7.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.12.0"
|
|
},
|
|
"publishConfig": {
|
|
"access": "public"
|
|
}
|
|
}
|