Skip to content

feat: add Planning Poker skill (Phase 4)#2458

Open
math0r-be wants to merge 3 commits into
bmad-code-org:mainfrom
math0r-be:feat/planning-poker
Open

feat: add Planning Poker skill (Phase 4)#2458
math0r-be wants to merge 3 commits into
bmad-code-org:mainfrom
math0r-be:feat/planning-poker

Conversation

@math0r-be

Copy link
Copy Markdown

Summary

Adds bmad-planning-poker skill to Phase 4 (Implementation) — a collaborative story point estimation workflow where AI agents and the human estimate stories together.

How it works

  1. Discover unestimated stories from sprint-status.yaml
  2. Silent vote — human + AI agents (PM, Dev, Architect) estimate privately
  3. Reveal — all estimates shown side-by-side with reasoning
  4. If divergent (max/min > 2.0x) → Party Mode debate → re-vote (max 3 rounds, then PM tiebreaks)
  5. Consensus → write story_points section to sprint-status.yaml + generate session report

Why

Planning Poker is a well-established agile estimation technique. BMAD has structured planning (epics, stories, sprints) but no collaborative estimation workflow. This fills that gap, letting users estimate stories collaboratively with their AI agents and participate as a full voting member — not just an observer.

Changes

File Action
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md New — 377 lines, full workflow
src/bmm-skills/4-implementation/bmad-planning-poker/customize.toml New — config defaults (scale, threshold, agents)
src/bmm-skills/module-help.csv Modify — register PP / Plan Poker entry

Output

  • sprint-status.yaml updated with new story_points section (backward compatible — does not modify development_status)
  • planning-poker-YYYY-MM-DD.md session report with full trace (votes, debates, justifications)

No new dependencies

All logic uses existing BMAD infrastructure:

  • Party Mode (bmad-party-mode) for debate phases — no code duplication
  • Config resolver (resolve_customization.py) for workflow customization
  • sprint-status.yaml format (additive story_points section)

Tested

Manually tested against a mock BMAD project with 6 stories across 2 epics. Full workflow verified: discovery → silent vote → reveal → divergence detection (2 stories triggered debate) → re-vote → consensus → output generation.

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: b96818cd-e096-416a-a8b8-e9775759074e

📥 Commits

Reviewing files that changed from the base of the PR and between 072d0a7 and 6325793.

⛔ Files ignored due to path filters (1)
  • src/bmm-skills/module-help.csv is excluded by !**/*.csv
📒 Files selected for processing (2)
  • src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md
  • src/bmm-skills/4-implementation/bmad-planning-poker/customize.toml

📝 Walkthrough

Walkthrough

This PR introduces bmad-planning-poker, a new Planning Poker skill workflow that enables collaborative story point estimation. The skill discovers unestimated stories, conducts silent voting with human and AI agent participation, detects divergence to optionally trigger Party Mode debate, reaches consensus, persists estimates, and generates a session report.

Changes

Planning Poker Skill Implementation

Layer / File(s) Summary
Skill metadata and activation flow
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md (lines 1–61)
Metadata identifies the skill as bmad-planning-poker for collaborative estimation. Facilitator role and path/value resolution conventions are defined. On-activation flow resolves the workflow config block, executes prepend steps, loads persistent facts and estimation parameters, greets the user, and executes append steps.
Configuration and customization surface
src/bmm-skills/4-implementation/bmad-planning-poker/customize.toml
Customization file defines activation hooks (activation_steps_prepend/append), persistent fact loading from project-context files, estimation scale selection (default Fibonacci), divergence threshold, max debate rounds, participating agent codes, and on_complete post-completion hook.
Workflow parameters and story discovery
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md (lines 62–129)
Documents input/output paths, supported estimation scales (Fibonacci, T-shirt, Linear), and implements execution step 1 to discover unestimated stories from sprint-status.yaml, filter by missing story_points, order results, and handle large-backlog and exit scenarios.
Silent voting, divergence detection, and debate triggering
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md (lines 131–247)
Implements step 2 per-story estimation: story presentation, silent voting from user and agents (with skip and ? handling), estimate reveal, ratio-based divergence detection (automatically triggering debate when any estimate is ?), Party Mode debate sub-flow with max_rounds guard, and post-debate re-vote capture.
Consensus reaching and result persistence
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md (lines 249–295)
Defines consensus via mode/median clustering, captures proposed consensus with user confirmation (y/n/skip handling), and implements step 3 to update sprint-status.yaml with story_points section without modifying development_status or overwriting existing estimates.
Session reporting and workflow completion
src/bmm-skills/4-implementation/bmad-planning-poker/SKILL.md (lines 297–377)
Implements step 4 to generate session report markdown with overview table, per-story sections with optional debate summaries and round breakdowns, and step 5 to emit completion counts, point averages, updated file list, and optionally execute resolved workflow.on_complete terminal instruction.

Sequence Diagram

flowchart TD
  Start([Start Story Estimation]) --> Discover["Step 1: Discover unestimated stories<br/>from sprint-status.yaml"]
  Discover --> Loop{"More stories<br/>to estimate?"}
  Loop -->|No| Report["Step 4: Generate<br/>session report"]
  Loop -->|Yes| Present["Present story to user<br/>and agents"]
  Present --> SilentVote["Step 2: Collect silent votes<br/>user estimate + agent estimates"]
  SilentVote --> Reveal["Reveal all estimates<br/>(handle skip and ?)"]
  Reveal --> CheckDivergence{"Divergence detected<br/>or any ? estimate?"}
  CheckDivergence -->|No| Consensus["Step 2: Reach consensus<br/>via mode/median"]
  CheckDivergence -->|Yes| Debate["Party Mode: Debate flow<br/>with agent argument exchange"]
  Debate --> RoundCount{"Max rounds<br/>exhausted?"}
  RoundCount -->|Yes| PMEstimate["Capture Party Mode<br/>final estimate"]
  RoundCount -->|No| ReVote["Re-vote on estimate"]
  ReVote --> RoundCount
  PMEstimate --> Consensus
  Consensus --> UserConfirm{"User confirms<br/>consensus?"}
  UserConfirm -->|Yes| Save["Step 3: Save story_points<br/>to sprint-status.yaml"]
  UserConfirm -->|No or Override| Save
  UserConfirm -->|Skip| Save
  Save --> Loop
  Report --> Complete["Step 5: Emit completion stats<br/>and run on_complete hook"]
  Complete --> End([Workflow Complete])
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • bmad-code-org/BMAD-METHOD#2308: Introduces standardized customize.toml [workflow] extension points (including workflow.on_complete terminal hook) for BMM skills.
  • bmad-code-org/BMAD-METHOD#2284: Related skill addition that uses the same TOML-based customization pattern for workflow activation hooks and post-completion behavior.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add Planning Poker skill (Phase 4)' clearly and concisely summarizes the main change: adding a new Planning Poker skill to Phase 4, which aligns with the changeset that introduces the bmad-planning-poker workflow.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, covering the Planning Poker workflow implementation, how it works, files modified, and testing details.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@bmadcode

bmadcode commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Thank you for your submission, interesting idea to keep with the agile execution theme, but I am not sure of the utility of it - how will this help the flow? I think this might work as a addition in an other existing skill of the upcoming change to epic and story planning with v7 where it will optionally allow pointing tickets. From what I have seen though, the models are relatively poor at estimating things based on their training data.

Also - generally we are trying to get it so that the vertically slides smallest tickets are all about the same size for the llm. so a small epics size aside from any HitL becomes a function of how many sliced tickets the epic produces. Not implemented exactly this way now, but this is a main goal for the next version.

@bmadcode

Copy link
Copy Markdown
Collaborator

@math0r-be I thought about this some more - I think a seed of the idea here can survive with changes coming. I do want to build in a mechanism that can autorank stories - potentially with or without HitL. This will serve two purposes - one might be estimation, not another can really serve as a criticality or risk pointing indication where higher pointed items indicate potential need for more critical HitL review or oversight if being implemented autonomously. I know this is not necessarily how pointing is used but its a similar idea and could be tied to the auto pointing so it serves a purpose. Not sure on this yet, but will keep this open as a reminder to consider this. let me know what you think also...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants