bmad-method 6.10.1-next.39 → 6.10.1-next.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -3
- package/package.json +4 -3
- package/removals.txt +6 -0
- package/src/bmm-skills/agents/bmad-agent-architect/customize.toml +2 -2
- package/src/bmm-skills/agents/bmad-agent-pm/customize.toml +2 -2
- package/src/bmm-skills/module-help.csv +2 -3
- package/src/bmm-skills/plan/bmad-sprint-planning/SKILL.md +62 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/fix-sprint-status.md +30 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/generate-tracking.md +25 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/readiness-gate.md +20 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/status-view.md +14 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/references/validate.md +10 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/sprint_plan.py +697 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
- package/src/bmm-skills/{ship → plan}/bmad-sprint-planning/sprint-status-template.yaml +9 -7
- package/src/bmm-skills/ship/bmad-retrospective/references/retro-document.md +1 -1
- package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/test_sprint_status.py +6 -7
- package/src/bmm-skills/v6-shims/README.md +1 -0
- package/src/bmm-skills/v6-shims/bmad-sprint-status/SKILL.md +26 -0
- package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/SKILL.md +0 -91
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/customize.toml +0 -41
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -179
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -168
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -169
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -129
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -241
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -132
- package/src/bmm-skills/plan/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -4
- package/src/bmm-skills/ship/bmad-sprint-planning/SKILL.md +0 -319
- package/src/bmm-skills/ship/bmad-sprint-planning/checklist.md +0 -34
- package/src/bmm-skills/ship/bmad-sprint-status/SKILL.md +0 -311
- /package/src/bmm-skills/{ship → plan}/bmad-sprint-planning/customize.toml +0 -0
- /package/src/bmm-skills/{ship → v6-shims}/bmad-sprint-status/customize.toml +0 -0
|
@@ -84,15 +84,14 @@
|
|
|
84
84
|
"./src/bmm-skills/plan/bmad-ux",
|
|
85
85
|
"./src/bmm-skills/agents/bmad-agent-architect",
|
|
86
86
|
"./src/bmm-skills/plan/bmad-architecture",
|
|
87
|
-
"./src/bmm-skills/plan/bmad-check-implementation-readiness",
|
|
88
87
|
"./src/bmm-skills/plan/bmad-create-epics-and-stories",
|
|
89
88
|
"./src/bmm-skills/plan/bmad-generate-project-context",
|
|
90
89
|
"./src/bmm-skills/agents/bmad-agent-dev",
|
|
91
90
|
"./src/bmm-skills/v6-shims/bmad-dev-story",
|
|
92
91
|
"./src/bmm-skills/ship/bmad-build",
|
|
93
92
|
"./src/bmm-skills/ship/bmad-checkpoint-preview",
|
|
94
|
-
"./src/bmm-skills/
|
|
95
|
-
"./src/bmm-skills/
|
|
93
|
+
"./src/bmm-skills/plan/bmad-sprint-planning",
|
|
94
|
+
"./src/bmm-skills/v6-shims/bmad-sprint-status",
|
|
96
95
|
"./src/bmm-skills/ship/bmad-code-review",
|
|
97
96
|
"./src/bmm-skills/v6-shims/bmad-create-story",
|
|
98
97
|
"./src/bmm-skills/ship/bmad-correct-course",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-method",
|
|
4
|
-
"version": "6.10.1-next.
|
|
4
|
+
"version": "6.10.1-next.40",
|
|
5
5
|
"description": "Breakthrough Method of Agile AI-driven Development",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"agile",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"lint:fix": "eslint . --ext .js,.cjs,.mjs,.yaml --fix",
|
|
41
41
|
"lint:md": "markdownlint-cli2 \"**/*.md\"",
|
|
42
42
|
"prepare": "command -v husky >/dev/null 2>&1 && husky || exit 0",
|
|
43
|
-
"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 validate:refs && npm run validate:skills && npm run docs:validate-sidebar",
|
|
43
|
+
"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",
|
|
44
44
|
"rebundle": "node tools/installer/bundlers/bundle-web.js rebundle",
|
|
45
|
-
"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:skills && npm run lint && npm run lint:md && npm run format:check",
|
|
45
|
+
"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",
|
|
46
46
|
"test:channels": "node test/test-installer-channels.js",
|
|
47
47
|
"test:install": "node test/test-installation-components.js",
|
|
48
48
|
"test:refs": "node test/test-file-refs-csv.js",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"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",
|
|
51
51
|
"test:site-url": "node test/test-site-url.mjs",
|
|
52
52
|
"test:skills": "node test/test-validate-skills.js",
|
|
53
|
+
"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",
|
|
53
54
|
"test:urls": "node test/test-parse-source-urls.js",
|
|
54
55
|
"validate:refs": "node tools/validate-file-refs.js --strict",
|
|
55
56
|
"validate:skills": "node tools/validate-skills.js --strict"
|
package/removals.txt
CHANGED
|
@@ -79,3 +79,9 @@ bmad-shard-doc
|
|
|
79
79
|
# defaults; document-project remains directly invocable. Paige is on hiatus
|
|
80
80
|
# and will return in the future far more capable.
|
|
81
81
|
bmad-agent-tech-writer
|
|
82
|
+
|
|
83
|
+
# Removed skills (skill consolidation)
|
|
84
|
+
# bmad-check-implementation-readiness: folded into bmad-sprint-planning,
|
|
85
|
+
# which now opens with a readiness gate (PASS/CONCERNS/FAIL) before
|
|
86
|
+
# generating tracking. The IR agent menu trigger dispatches sprint-planning.
|
|
87
|
+
bmad-check-implementation-readiness
|
|
@@ -61,5 +61,5 @@ skill = "bmad-architecture"
|
|
|
61
61
|
|
|
62
62
|
[[agent.menu]]
|
|
63
63
|
code = "IR"
|
|
64
|
-
description = "
|
|
65
|
-
skill = "bmad-
|
|
64
|
+
description = "Check implementation readiness — verify the planning artifacts are complete and aligned (opens sprint planning; stop after the gate or continue into tracking)"
|
|
65
|
+
skill = "bmad-sprint-planning"
|
|
@@ -66,8 +66,8 @@ skill = "bmad-create-epics-and-stories"
|
|
|
66
66
|
|
|
67
67
|
[[agent.menu]]
|
|
68
68
|
code = "IR"
|
|
69
|
-
description = "
|
|
70
|
-
skill = "bmad-
|
|
69
|
+
description = "Check implementation readiness — verify the planning artifacts are complete and aligned (opens sprint planning; stop after the gate or continue into tracking)"
|
|
70
|
+
skill = "bmad-sprint-planning"
|
|
71
71
|
|
|
72
72
|
[[agent.menu]]
|
|
73
73
|
code = "CC"
|
|
@@ -12,9 +12,8 @@ BMad Method,bmad-prd,Create Edit and Review PRD,PRD,"Facilitated PRD workflow
|
|
|
12
12
|
BMad Method,bmad-ux,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-prd,,false,planning_artifacts,ux design
|
|
13
13
|
BMad Method,bmad-architecture,Architecture,CA,Offer once requirements exist (a PRD or spec; plus UX if present) and the user is ready to move from what to how. Also offer any time independently-built parts risk diverging. Produces the architecture spine: the invariants that keep features epics and stories consistent. Comes before epics and stories and scales from a quick spine to a full architecture (brownfield: ratifies the existing codebase).,,,plan,,,true,planning_artifacts,architecture
|
|
14
14
|
BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,plan,bmad-architecture,,true,planning_artifacts,epics and stories
|
|
15
|
-
BMad Method,bmad-
|
|
16
|
-
BMad Method,bmad-sprint-planning,Sprint
|
|
17
|
-
BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,ship,bmad-sprint-planning,,false,,
|
|
15
|
+
BMad Method,bmad-sprint-planning,Sprint Planning,SP,Readiness gate then tracking: verifies the planning is implementable (PASS/CONCERNS/FAIL) and produces the sprint status the implementation agents follow for every story.,,,plan,,,true,implementation_artifacts,sprint status
|
|
16
|
+
BMad Method,bmad-sprint-planning,Sprint Status,SS,Anytime: summarize sprint status with risks open action items and the next recommended action; can also validate or repair the tracking file.,status,,anytime,,,false,,status summary
|
|
18
17
|
BMad Method,bmad-code-review,Code Review,CR,Ad hoc review of any code change. Optional extra layer after Build's built-in review.,,,ship,bmad-build,,false,,
|
|
19
18
|
BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,,ship,,,false,,
|
|
20
19
|
BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,,ship,bmad-build,,false,implementation_artifacts,test suite
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-sprint-planning
|
|
3
|
+
description: 'Gate planning readiness, generate sprint status tracking from epics, summarize sprint progress, and validate or repair the tracking file. Use when the user says "run sprint planning", "generate sprint plan", "check implementation readiness", "show sprint status", "validate sprint status", or "fix sprint status"'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Overview
|
|
7
|
+
|
|
8
|
+
You are a senior developer about to commit to this plan. Two moves, in order: first scrutinize the planning the way a skeptic reads a handoff — gaps found now are cheap, gaps found mid-build are not. Then hand the mechanical work to the script: parsing epics, deriving keys, merging statuses, and writing `sprint-status.yaml` are deterministic jobs, not judgment calls. Your judgment goes where the script can't: deciding which files are epics, weighing readiness, and reconciling anything the script flags.
|
|
9
|
+
|
|
10
|
+
## On Activation
|
|
11
|
+
|
|
12
|
+
1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly and use defaults.
|
|
13
|
+
2. Execute each entry in `{workflow.activation_steps_prepend}` in order.
|
|
14
|
+
3. Treat every entry in `{workflow.persistent_facts}` as foundational context for the rest of the run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
|
|
15
|
+
4. Load `{project-root}/_bmad/bmm/config.yaml` (and `config.user.yaml` if present). Resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{project_name}`, `{planning_artifacts}`, `{implementation_artifacts}`, `{project_knowledge}` (skip gracefully if unset), `{date}`. Stay in `{communication_language}` for every turn, not just the greeting.
|
|
16
|
+
5. Greet `{user_name}`, detect intent, and load only what that intent needs:
|
|
17
|
+
- **readiness** — check implementation readiness only: load `references/readiness-gate.md`, run the gate, report, stop
|
|
18
|
+
- **sprint-planning** — the full flow (also the refresh path for an existing `sprint-status.yaml`): load `references/readiness-gate.md`, then on PASS `references/generate-tracking.md`
|
|
19
|
+
- **status** — "show sprint status", "where are we": skip the gate, load `references/status-view.md`
|
|
20
|
+
- **validate** — check the tracking file's format: load `references/validate.md`
|
|
21
|
+
- **fix** — repair or rebuild a broken `sprint-status.yaml`: load `references/fix-sprint-status.md`
|
|
22
|
+
|
|
23
|
+
If interactive and unclear, ask; for headless behavior see `## Headless Mode`.
|
|
24
|
+
|
|
25
|
+
Execute each entry in `{workflow.activation_steps_append}` in order.
|
|
26
|
+
|
|
27
|
+
Activation is complete. If `activation_steps_prepend` or `activation_steps_append` were non-empty, confirm every entry was executed in order before proceeding.
|
|
28
|
+
|
|
29
|
+
## If the Script Fails
|
|
30
|
+
|
|
31
|
+
This rule covers every intent: when `sprint_plan.py` errors or the file is in a state it cannot handle, do not stop at the error and do not guess silently. Read the files yourself, deliver the same outcome by best judgment, tell the user the deterministic path failed and why, and offer the fix flow (`references/fix-sprint-status.md`) to restore a file the script can work with.
|
|
32
|
+
|
|
33
|
+
## On Completion
|
|
34
|
+
|
|
35
|
+
Whatever the intent, close out in `{communication_language}` per the loaded reference, then run `{workflow.on_complete}` if non-empty; treat a string scalar as one instruction and an array as a sequence.
|
|
36
|
+
|
|
37
|
+
## Headless Mode
|
|
38
|
+
|
|
39
|
+
When invoked headless, do not ask. Run the gate and, unless intent was readiness-only, generate tracking. Ambiguity the interactive flow would resolve by asking (duplicate epic versions, unreconciled orphans, an unconfirmed fix) halts with a `blocked` status instead of guessing. End with a JSON response:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"status": "complete",
|
|
44
|
+
"intent": "sprint-planning",
|
|
45
|
+
"gate": "PASS",
|
|
46
|
+
"status_file": "{implementation_artifacts}/sprint-status.yaml",
|
|
47
|
+
"findings": [],
|
|
48
|
+
"warnings": []
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`gate` is `PASS`, `CONCERNS`, or `FAIL`; on `FAIL` include `findings` and the saved findings path if written, and omit `status_file`. `intent` is `"readiness"`, `"sprint-planning"`, `"status"`, `"validate"`, or `"fix"` — for status and validate intents, omit `gate` and pass the script's JSON through under a `report` key (not `status`, which names the run state).
|
|
53
|
+
|
|
54
|
+
## References
|
|
55
|
+
|
|
56
|
+
- `scripts/sprint_plan.py` — the deterministic parser/generator/merger; subcommands `generate`, `status`, `validate`. Its JSON output is the contract this skill reads; argparse errors are JSON too
|
|
57
|
+
- `references/readiness-gate.md` — the PASS/CONCERNS/FAIL gate: artifact inventory and the implementability question
|
|
58
|
+
- `references/generate-tracking.md` — epic discovery, the generate command, and acting on its JSON report
|
|
59
|
+
- `references/status-view.md` — the status view: counts, risks, open action items, next recommended action
|
|
60
|
+
- `references/fix-sprint-status.md` — rebuild a broken tracking file: evidence-gathering subagents, user confirmation, pristine regeneration
|
|
61
|
+
- `references/validate.md` — format validation of an existing `sprint-status.yaml`
|
|
62
|
+
- `sprint-status-template.yaml` — the documented file format and status vocabulary; the script embeds the same block and the test suite pins the two copies together
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Fix Sprint Status
|
|
2
|
+
|
|
3
|
+
Rebuild `sprint-status.yaml` to a pristine, script-valid state when it is broken, hand-mangled, drifted from reality, or the user simply asks to fix it. Inference determines what the state *should* be; the user confirms it; the script writes it. Never write without the confirmation.
|
|
4
|
+
|
|
5
|
+
1. **Scope the damage.** Run `sprint_plan.py validate` and share what it found. If even the epic files are missing or unparseable, say so — there is nothing to rebuild tracking against until planning artifacts exist.
|
|
6
|
+
|
|
7
|
+
2. **Determine the true state by inference.** This is judgment work — fan out subagents in parallel, each gathering one kind of evidence, and have each return proposed `key=status` pairs with the evidence behind them:
|
|
8
|
+
- **Epics** — read the epic files in `{planning_artifacts}`: the authoritative work breakdown (which epics, stories, and retrospectives should exist at all)
|
|
9
|
+
- **Story files** — scan `{implementation_artifacts}`: which stories have files on disk, and what their content says about progress (acceptance criteria checked off, completion notes, review sections)
|
|
10
|
+
- **Code evidence** — git history and the codebase: commits or merged work referencing story keys are evidence a story is done or in progress
|
|
11
|
+
- **The current file** — salvage everything credible from the existing `sprint-status.yaml`, especially `action_items`, even when its structure is broken
|
|
12
|
+
|
|
13
|
+
3. **Reconcile into one proposed state.** Merge the evidence into a single table: key → proposed status, evidence, and anything uncertain. When evidence conflicts or is thin, prefer the lower status and flag it — a false `done` costs more than a false `in-progress`.
|
|
14
|
+
|
|
15
|
+
4. **Confirm with `{user_name}`.** Show the table. Highlight every entry that differs from the current file — especially downgrades — and every low-confidence call. Adjust to their corrections. Headless: halt with `blocked` instead of confirming.
|
|
16
|
+
|
|
17
|
+
5. **Write pristine.** One command, from the confirmed table:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
uv run {skill-root}/scripts/sprint_plan.py generate \
|
|
21
|
+
--epic-file <path> [...] \
|
|
22
|
+
--status-file {implementation_artifacts}/sprint-status.yaml \
|
|
23
|
+
--stories-dir {implementation_artifacts} \
|
|
24
|
+
--project "{project_name}" --date "{date}" \
|
|
25
|
+
--fresh --set <key>=<status> [--set <key>=<status> ...]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
`--fresh` rebuilds the document cleanly (canonical vocabulary, standard header) while still carrying `action_items`; `--set` applies the confirmed statuses and is the one path allowed to downgrade. Only confirmed entries that differ from the fresh defaults need a `--set`.
|
|
29
|
+
|
|
30
|
+
6. **Verify.** Run `validate` again (expect `valid: true`) and present the status view summary so the user sees the repaired state.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generate Tracking
|
|
2
|
+
|
|
3
|
+
Discovery is your call; everything after it is the script's.
|
|
4
|
+
|
|
5
|
+
1. Identify the epic files. The gate inventory already surfaced them — typically `epics.md`, `epic-*.md`, or a sharded `epics/` folder in `{planning_artifacts}`, but trust content over filename. If both a whole document and a sharded version exist, ask which is current rather than guessing.
|
|
6
|
+
2. Run the script, passing every epic file:
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
uv run {skill-root}/scripts/sprint_plan.py generate \
|
|
10
|
+
--epic-file <path> [--epic-file <path> ...] \
|
|
11
|
+
--status-file {implementation_artifacts}/sprint-status.yaml \
|
|
12
|
+
--stories-dir {implementation_artifacts} \
|
|
13
|
+
--project "{project_name}" --date "{date}"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`{date}` must be `MM-DD-YYYY HH:MM` — the format the staleness check parses. The script owns parsing (`## Epic N:` / `### Story N.M: Title` → kebab-case keys; fenced code blocks ignored), ordering (epic, its stories, its retrospective), merging with any existing file (preserve advanced statuses, never downgrade; legacy v6 values like `drafted`/`contexted` are normalized to their modern meaning, never reset; `action_items`, custom keys, and user comments carried through; `project_key`/`tracking_system`/`story_location` kept from the existing file unless overridden by flag), story-file detection (a story file on disk floors its status at `ready-for-dev`), atomic writes, and post-write validation. It prints a JSON report. Add `--dry-run` to preview — the report's `in_sync`, `new_entries`, `dropped_orphans`, `illegal`, and `legacy_mapped` fields answer "is tracking in sync?" without writing.
|
|
17
|
+
|
|
18
|
+
3. Read the JSON report and act on it — this is where judgment re-enters:
|
|
19
|
+
- `warnings` about unparsed Epic/Story-like headings mean the epic file deviates from the standard format. Show the user, fix the headings together (or accept the omission), and rerun.
|
|
20
|
+
- `dropped_orphans` are entries that existed in the old status file but match nothing in the epics — usually renames. Each carries its old status; reconcile with the user, then transplant by rerunning with `--set <new-key>=<old-status>`.
|
|
21
|
+
- If the epics defeat the parser entirely (a format the regexes can't see), fall back to building the file yourself against `sprint-status-template.yaml`, and tell the user the deterministic path didn't apply.
|
|
22
|
+
|
|
23
|
+
## Report
|
|
24
|
+
|
|
25
|
+
Present the result from the script's JSON in `{communication_language}`: file path, epic/story counts, status breakdown, anything upgraded from disk. Suggest next steps — review the file, `bmad-build` to start the first story, rerun this skill anytime to refresh after epics change.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Readiness Gate
|
|
2
|
+
|
|
3
|
+
Before generating any tracking, judge whether the plan can actually be built. If the user only asked to check readiness, this gate is the deliverable — report the verdict and stop.
|
|
4
|
+
|
|
5
|
+
Inventory what planning actually exists: scan `{planning_artifacts}` and `{project_knowledge}` for intent and planning artifacts — briefs, PRFAQs, PRDs, specs, UX outputs, architecture, epics and stories. Identify documents by reading what they are, not by filename patterns; projects arrive with different artifact mixes and naming.
|
|
6
|
+
|
|
7
|
+
Assess the plan as a whole against one question: **could a developer implement these epics without inventing decisions nothing records?**
|
|
8
|
+
|
|
9
|
+
- Requirements and decisions in the intent artifacts trace forward into stories; stories trace back to recorded intent — flag orphans in both directions
|
|
10
|
+
- Epics deliver user value and carry no forward dependencies; stories are independently completable
|
|
11
|
+
- Architecture and UX decisions the stories rely on are recorded somewhere, not assumed
|
|
12
|
+
- Conflicts between artifacts (a spec and an epic disagreeing) are surfaced, not silently resolved
|
|
13
|
+
|
|
14
|
+
A missing document type is only a finding if stories depend on decisions nothing records — a project with no UX artifact and no UI stories is fine.
|
|
15
|
+
|
|
16
|
+
Deliver a verdict:
|
|
17
|
+
|
|
18
|
+
- **PASS** — state it in one line; for the full sprint-planning intent, continue with `generate-tracking.md`
|
|
19
|
+
- **CONCERNS** — list them briefly with where each gap lives; ask `{user_name}` whether to proceed anyway or fix first
|
|
20
|
+
- **FAIL** — the plan is not implementable as recorded. Present findings ordered by severity, name the skill that fixes each (the relevant plan skill, or `bmad-correct-course` for cross-cutting changes), offer to save the findings to `{planning_artifacts}/implementation-readiness.md`, and stop
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Status View
|
|
2
|
+
|
|
3
|
+
When the user wants to know where the sprint stands ("show sprint status", "where are we"), run:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
uv run {skill-root}/scripts/sprint_plan.py status \
|
|
7
|
+
--status-file {implementation_artifacts}/sprint-status.yaml --date "{date}"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
`{date}` is `MM-DD-YYYY HH:MM`. The script computes everything: counts by status (legacy values like `drafted` mapped transparently and reported in `legacy_mapped`), risk flags (stale file, orphaned stories, in-progress epics without stories, stories waiting in review, unrecognized keys), open action items from retrospectives, and the next recommended action by fixed priority — resume in-progress → review what's in review → start the next ready or backlog story → run an open retrospective → all done. If the file is missing, the script says so — offer to run sprint planning to create it.
|
|
11
|
+
|
|
12
|
+
Render the JSON as a compact summary in `{communication_language}`: counts, risks, open action items, and the recommendation with its story key. Offer to run the recommended skill. Surface `illegal` and `unrecognized` entries and the script's `warnings` (malformed action items land there); if the user gives corrections, apply them via the fix flow rather than ad-hoc edits. No time estimates — status, risks, and next steps only.
|
|
13
|
+
|
|
14
|
+
If the script errors — malformed YAML, a hand-edited structure it can't parse, anything — do not stop at the error. Read `sprint-status.yaml` yourself, apply best judgment to give the user the same summary (counts, risks, next recommended action), tell them the deterministic path failed and why, and offer the fix flow (`fix-sprint-status.md`) so the script works next time.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Validate
|
|
2
|
+
|
|
3
|
+
When the user asks whether `sprint-status.yaml` is well-formed, run:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
uv run {skill-root}/scripts/sprint_plan.py validate \
|
|
7
|
+
--status-file {implementation_artifacts}/sprint-status.yaml
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Never writes; exits 0 whether valid or not. Report `valid` in one line. If `problems` is non-empty, list them plainly (each names the key or field at fault) and offer the fix flow (`fix-sprint-status.md`). If `legacy_mapped` is non-empty, note the file still uses v6 status names and that any regenerate will rewrite them to the modern vocabulary — progress is preserved either way.
|