* feat(method): add bmad-preview-ticketing skill and tickets.py runtime Ticketing at every altitude: an initiative sliced into epics, an epic incepted into a Breakdown of stories, spikes, and bugs, and tickets written, refined, published, and moved on a git-backed store or a tracker (GitHub, Jira, Linear, Notion, Trello). - Container tickets are the spec at their altitude: Requirements with stable ids, Outcome, Done when, Boundaries, Breakdown. - Thin tickets carry contribution and verification; full criteria are written when pulled (`refined: false` until approved). - scripts/tickets.py derives ready, blocked, and to-create views from the files; scripts/read_toml.py reads the store config; tests beside them. - Store configs per tracker under config/, templates per type under assets/, customization surface in customize.toml. - Listed in the bmad help catalog as a preview alternative to bmad-create-epics-and-stories plus bmad-sprint-planning. * fix(method): address review findings in bmad-preview-ticketing - tickets.py: a dropped blocker still blocks its dependents; mark clears blocked_at and blocked_reason on a status change and takes the assignee literally; --project-root finds the store config when tickets live outside the project; a numeric blocker falls back to the ticket id; duplicate Breakdown numbers and blockers naming no entry are errors. - read_toml.py: read local files only. - board.md: mark is the leaf-level write, a container's status is a file edit, and a dropped ticket is removed or repointed in its dependents. - SKILL.md: tickets are drafted under tickets.root; persistent facts load file: entries. - gh config: read children with `gh issue view --json subIssues`. - help catalog: the breakdown includes bugs. * docs: add a guide to testing v7 previews A new page under Plan Larger Work for trying proposed v7 planning changes: setting up an initiative store, configuring where tickets are tracked, and using bmad-preview-ticketing. It states early that preview stories are not wired into sprint planning, sprint-status.yaml, or status updates from bmad-build, and that a story must be refined before it is built. - Sidebar entry and a pointer from the stories-and-tracking page. - Locale coverage baseline records the new English-only page.
BMAD Method Documentation Site
This directory contains the Astro + Starlight configuration for the BMAD Method documentation site.
Architecture
The documentation uses a symlink architecture to keep content in docs/ at the repo root while serving it through Astro:
bmad2/
├── docs/ # Content lives here (repo root)
│ ├── index.md
│ ├── tutorials/
│ ├── how-to/
│ ├── explanation/
│ └── reference/
└── docs-site/
├── astro.config.mjs # Astro + Starlight config
├── scripts/ # Build pipeline, link and sidebar validators
├── test/ # Node tests for the site and its scripts
├── src/
│ ├── content/
│ │ └── docs -> ../../../docs # Symlink to content
│ └── styles/
│ └── custom.css # Custom styling
└── public/ # Static assets
Development
cd docs-site
npm ci # Install (Node version in .nvmrc)
npm run dev # Start dev server
npm run build # Build for production (validates links first)
npm run preview # Preview production build
npm run validate-links # Check site-relative links in docs/
npm run validate-sidebar # Check sidebar.order frontmatter
npm run fix-links # Rewrite relative links to repo-relative (add --write)
npm run lint # ESLint over scripts/ and test/
npm run format:check # Prettier over scripts/ and test/
npm test # Run the site tests
The site is the only part of the repository that uses Node; everything else
runs on uv. tools/quality.py at the repository root runs these checks
together with the Python ones.
Platform Notes
Windows Symlink Support
The docs-site/src/content/docs symlink may not work correctly on Windows without Developer Mode enabled or administrator privileges.
To enable symlinks on Windows:
-
Enable Developer Mode (recommended):
- Settings → Update & Security → For developers → Developer Mode: On
- This allows creating symlinks without admin rights
-
Or use Git's symlink support:
git config core.symlinks trueThen re-clone the repository.
-
Or create a junction (alternative):
# Run as Administrator mklink /J docs-site\src\content\docs ..\..\..\docs
If symlinks don't work, you can copy the docs folder instead:
# Remove the symlink
rm docs-site/src/content/docs
# Copy the docs folder
cp -r docs docs-site/src/content/docs
Note: If copying, remember to keep the copy in sync with changes to docs/.
Build Output
The build pipeline (npm run build) produces:
- Static HTML site in
build/site/