wizz-method 1.15.0 → 1.16.0

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.
Files changed (116) hide show
  1. package/package.json +3 -2
  2. package/skills-registry.yaml +4 -0
  3. package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/__pycache__/lint_spine.cpython-313.pyc +0 -0
  4. package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/tests/__pycache__/test_lint_spine.cpython-313-pytest-9.1.1.pyc +0 -0
  5. package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +3 -5
  6. package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +71 -0
  7. package/src/bmm-skills/4-implementation/wizz-code-review/references/claims-check.md +14 -0
  8. package/src/bmm-skills/4-implementation/wizz-code-review/references/deletion-check.md +14 -0
  9. package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/edge-case-hunter.md +110 -0
  10. package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/verification-gap.md +113 -0
  11. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-01-gather-context.md +32 -23
  12. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-02-review.md +10 -13
  13. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-03-triage.md +16 -22
  14. package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-04-present.md +4 -2
  15. package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +76 -0
  16. package/src/bmm-skills/4-implementation/wizz-quick-dev/references/claims-check.md +14 -0
  17. package/src/bmm-skills/4-implementation/wizz-quick-dev/references/deletion-check.md +14 -0
  18. package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/edge-case-hunter.md +110 -0
  19. package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/verification-gap.md +113 -0
  20. package/src/bmm-skills/4-implementation/wizz-quick-dev/step-04-review.md +38 -16
  21. package/src/bmm-skills/4-implementation/wizz-retrospective/SKILL.md +56 -1488
  22. package/src/bmm-skills/4-implementation/wizz-retrospective/customize.toml +3 -5
  23. package/src/bmm-skills/4-implementation/wizz-retrospective/references/acceptance-verdict.md +55 -0
  24. package/src/bmm-skills/4-implementation/wizz-retrospective/references/aggregate-views.md +17 -0
  25. package/src/bmm-skills/4-implementation/wizz-retrospective/references/evidence-gathering.md +30 -0
  26. package/src/bmm-skills/4-implementation/wizz-retrospective/references/retro-document.md +84 -0
  27. package/src/bmm-skills/4-implementation/wizz-retrospective/references/team-discussion.md +22 -0
  28. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/__pycache__/sprint_status.cpython-313.pyc +0 -0
  29. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/git_evidence.py +304 -0
  30. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/sprint_status.py +746 -0
  31. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-313-pytest-9.1.1.pyc +0 -0
  32. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-313-pytest-9.1.1.pyc +0 -0
  33. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
  34. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_git_evidence.py +750 -0
  35. package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_sprint_status.py +1579 -0
  36. package/src/bmm-skills/4-implementation/wizz-sprint-planning/SKILL.md +39 -296
  37. package/src/bmm-skills/4-implementation/wizz-sprint-planning/customize.toml +1 -3
  38. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/fix-sprint-status.md +30 -0
  39. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/generate-tracking.md +25 -0
  40. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/readiness-gate.md +20 -0
  41. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/status-view.md +14 -0
  42. package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/validate.md +10 -0
  43. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/__pycache__/sprint_plan.cpython-313.pyc +0 -0
  44. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/sprint_plan.py +697 -0
  45. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-313-pytest-9.1.1.pyc +0 -0
  46. package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
  47. package/src/bmm-skills/4-implementation/wizz-sprint-planning/sprint-status-template.yaml +9 -7
  48. package/src/bmm-skills/module-help.csv +3 -3
  49. package/src/core-skills/module-help.csv +1 -0
  50. package/src/core-skills/wizz-advanced-elicitation/SKILL.md +36 -114
  51. package/src/core-skills/wizz-advanced-elicitation/{methods.csv → assets/methods.csv} +29 -27
  52. package/src/core-skills/wizz-advanced-elicitation/customize.toml +54 -0
  53. package/src/core-skills/wizz-advanced-elicitation/scripts/__pycache__/pick_methods.cpython-313.pyc +0 -0
  54. package/src/core-skills/wizz-advanced-elicitation/scripts/pick_methods.py +233 -0
  55. package/src/core-skills/wizz-advanced-elicitation/scripts/tests/__pycache__/test_pick_methods.cpython-313-pytest-9.1.1.pyc +0 -0
  56. package/src/core-skills/wizz-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
  57. package/src/core-skills/wizz-brainstorming/SKILL.md +2 -2
  58. package/src/core-skills/wizz-brainstorming/assets/brain-selector.html +2 -0
  59. package/src/core-skills/wizz-brainstorming/references/converge.md +1 -1
  60. package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
  61. package/src/core-skills/wizz-brainstorming/references/headless.md +1 -1
  62. package/src/core-skills/wizz-brainstorming/references/mode-autonomous.md +1 -1
  63. package/src/core-skills/wizz-brainstorming/scripts/__pycache__/brain.cpython-313.pyc +0 -0
  64. package/src/core-skills/wizz-brainstorming/scripts/brain.py +36 -6
  65. package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-313-pytest-9.1.1.pyc +0 -0
  66. package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-314.pyc +0 -0
  67. package/src/core-skills/wizz-brainstorming/scripts/tests/test_brain.py +24 -2
  68. package/src/core-skills/wizz-customize/scripts/__pycache__/list_customizable_skills.cpython-313.pyc +0 -0
  69. package/src/core-skills/wizz-customize/scripts/tests/__pycache__/test_list_customizable_skills.cpython-313-pytest-9.1.1.pyc +0 -0
  70. package/src/core-skills/wizz-forge-idea/SKILL.md +107 -0
  71. package/src/core-skills/wizz-forge-idea/customize.toml +41 -0
  72. package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-313.pyc +0 -0
  73. package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-314.pyc +0 -0
  74. package/src/core-skills/wizz-forge-idea/scripts/resolve_personas.py +275 -0
  75. package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-313-pytest-9.1.1.pyc +0 -0
  76. package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-314.pyc +0 -0
  77. package/src/core-skills/wizz-forge-idea/scripts/tests/test_resolve_personas.py +138 -0
  78. package/src/core-skills/wizz-party-mode/SKILL.md +37 -54
  79. package/src/core-skills/wizz-party-mode/customize.toml +61 -2
  80. package/src/core-skills/wizz-party-mode/references/create-party.md +8 -3
  81. package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +3 -1
  82. package/src/core-skills/wizz-party-mode/references/mode-subagent.md +16 -4
  83. package/src/core-skills/wizz-party-mode/references/party-memory.md +51 -0
  84. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-313.pyc +0 -0
  85. package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
  86. package/src/core-skills/wizz-party-mode/scripts/resolve_party.py +22 -7
  87. package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-313-pytest-9.1.1.pyc +0 -0
  88. package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-314.pyc +0 -0
  89. package/src/core-skills/wizz-party-mode/scripts/tests/{test-resolve_party.py → test_resolve_party.py} +8 -0
  90. package/src/core-skills/wizz-review-edge-case-hunter/SKILL.md +17 -3
  91. package/src/modules/wizz/agents/wizz-growth/customize.toml +10 -0
  92. package/src/scripts/__pycache__/memlog.cpython-313.pyc +0 -0
  93. package/src/scripts/tests/__pycache__/test_memlog.cpython-313-pytest-9.1.1.pyc +0 -0
  94. package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-313-pytest-9.1.1.pyc +0 -0
  95. package/src/skills-lib/pesquisa-de-publico-do-piva/README.md +83 -0
  96. package/src/skills-lib/pesquisa-de-publico-do-piva/SKILL.md +65 -0
  97. package/src/skills-lib/pesquisa-de-publico-do-piva/assets/template.html +414 -0
  98. package/src/skills-lib/pesquisa-de-publico-do-piva/prompts.md +131 -0
  99. package/src/skills-lib/wizz-offer-forge/README.md +13 -0
  100. package/src/skills-lib/wizz-offer-forge/SKILL.md +74 -0
  101. package/src/skills-lib/wizz-offer-forge/references/empilhamento-valor.md +25 -0
  102. package/src/skills-lib/wizz-offer-forge/references/garantia-reversa.md +22 -0
  103. package/src/skills-lib/wizz-offer-forge/references/mecanismo-unico.md +28 -0
  104. package/src/skills-lib/wizz-offer-forge/references/ponte-trafego.md +21 -0
  105. package/src/skills-lib/wizz-router/references/routing-table-flat.md +2 -0
  106. package/tools/installer/core/installer.js +57 -0
  107. package/tools/installer/ide/_config-driven.js +3 -3
  108. package/tools/installer/ide/platform-codes.yaml +28 -0
  109. package/tools/installer/modules/external-manager.js +140 -2
  110. package/tools/installer/modules/official-modules.js +68 -21
  111. package/tools/installer/prompts.js +45 -103
  112. package/tools/installer/ui.js +64 -7
  113. package/wizz-modules.yaml +65 -11
  114. package/src/bmm-skills/4-implementation/wizz-sprint-planning/checklist.md +0 -34
  115. package/src/core-skills/wizz-brainstorming/scripts/memlog.py +0 -202
  116. package/src/core-skills/wizz-brainstorming/scripts/tests/test_memlog.py +0 -265
@@ -1,319 +1,62 @@
1
1
  ---
2
2
  name: wizz-sprint-planning
3
- description: 'Generate sprint status tracking from epics. Use when the user says "run sprint planning" or "generate sprint plan"'
3
+ description: 'Check that planning is complete enough to implement, then generate the sprint status file from the epics. Can also 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
4
  ---
5
5
 
6
- # Sprint Planning Workflow
6
+ # Overview
7
7
 
8
- **Goal:** Generate sprint status tracking from epics, detecting current story statuses and building a complete sprint-status.yaml file.
9
-
10
- **Your Role:** You are a Developer generating and maintaining sprint tracking. Parse epic files, detect story statuses, and produce a structured sprint-status.yaml.
11
-
12
- ## Conventions
13
-
14
- - Bare paths (e.g. `checklist.md`) resolve from the skill root.
15
- - `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives).
16
- - `{project-root}`-prefixed paths resolve from the project working directory.
17
- - `{skill-name}` resolves to the skill directory's basename.
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.
18
9
 
19
10
  ## On Activation
20
11
 
21
- ### Step 1: Resolve the Workflow Block
22
-
23
- Run: `python3 {project-root}/_wizz/scripts/resolve_customization.py --skill {skill-root} --key workflow`
24
-
25
- **If the script fails**, resolve the `workflow` block yourself by reading these three files in base → team → user order and applying the same structural merge rules as the resolver:
26
-
27
- 1. `{skill-root}/customize.toml` — defaults
28
- 2. `{project-root}/_wizz/custom/{skill-name}.toml` — team overrides
29
- 3. `{project-root}/_wizz/custom/{skill-name}.user.toml` — personal overrides
30
-
31
- Any missing file is skipped. Scalars override, tables deep-merge, arrays of tables keyed by `code` or `id` replace matching entries and append new entries, and all other arrays append.
32
-
33
- ### Step 2: Execute Prepend Steps
34
-
35
- Execute each entry in `{workflow.activation_steps_prepend}` in order before proceeding.
36
-
37
- ### Step 3: Load Persistent Facts
12
+ 1. Resolve customization: `python3 {project-root}/_wizz/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}/_wizz/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`
38
22
 
39
- Treat every entry in `{workflow.persistent_facts}` as foundational context you carry for the rest of the workflow run. Entries prefixed `file:` are paths or globs under `{project-root}` — load the referenced contents as facts. All other entries are facts verbatim.
40
-
41
- ### Step 4: Load Config
42
-
43
- Load config from `{project-root}/_wizz/bmm/config.yaml` and resolve:
44
-
45
- - `project_name`, `user_name`
46
- - `communication_language`, `document_output_language`
47
- - `implementation_artifacts`
48
- - `planning_artifacts`
49
- - `date` as system-generated current datetime
50
- - `project_context` = `**/project-context.md` (load if exists)
51
- - YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
52
- - Generate all documents in `{document_output_language}`
53
-
54
- ### Step 5: Greet the User
55
-
56
- Greet `{user_name}`, speaking in `{communication_language}`.
57
-
58
- ### Step 6: Execute Append Steps
23
+ If interactive and unclear, ask; for headless behavior see `## Headless Mode`.
59
24
 
60
25
  Execute each entry in `{workflow.activation_steps_append}` in order.
61
26
 
62
- Activation is complete. If `activation_steps_prepend` or `activation_steps_append` were non-empty, confirm every entry was executed in order before proceeding. Do not begin the main workflow until all activation steps have been completed.
63
-
64
- ## Paths
65
-
66
- - `tracking_system` = `file-system`
67
- - `project_key` = `NOKEY`
68
- - `story_location` = `{implementation_artifacts}`
69
- - `story_location_absolute` = `{implementation_artifacts}`
70
- - `epics_location` = `{planning_artifacts}`
71
- - `epics_pattern` = `*epic*.md`
72
- - `status_file` = `{implementation_artifacts}/sprint-status.yaml`
73
-
74
- ## Input Files
75
-
76
- | Input | Path | Load Strategy |
77
- |-------|------|---------------|
78
- | Epics | `{planning_artifacts}/*epic*.md` (whole) or `{planning_artifacts}/*epic*/*.md` (sharded) | FULL_LOAD |
79
-
80
- ## Execution
81
-
82
- ### Document Discovery - Full Epic Loading
83
-
84
- **Strategy**: Sprint planning needs ALL epics and stories to build complete status tracking.
85
-
86
- **Epic Discovery Process:**
87
-
88
- 1. **Search for whole document first** - Look for `epics.md`, `bmm-epics.md`, or any `*epic*.md` file
89
- 2. **Check for sharded version** - If whole document not found, look for `epics/index.md`
90
- 3. **If sharded version found**:
91
- - Read `index.md` to understand the document structure
92
- - Read ALL epic section files listed in the index (e.g., `epic-1.md`, `epic-2.md`, etc.)
93
- - Process all epics and their stories from the combined content
94
- - This ensures complete sprint status coverage
95
- 4. **Priority**: If both whole and sharded versions exist, use the whole document
96
-
97
- **Fuzzy matching**: Be flexible with document names - users may use variations like `epics.md`, `bmm-epics.md`, `user-stories.md`, etc.
98
-
99
- <workflow>
100
-
101
- <step n="1" goal="Parse epic files and extract all work items">
102
- <action>Load {project_context} for project-wide patterns and conventions (if exists)</action>
103
- <action>Communicate in {communication_language} with {user_name}</action>
104
- <action>Look for all files matching `{epics_pattern}` in {epics_location}</action>
105
- <action>Could be a single `epics.md` file or multiple `epic-1.md`, `epic-2.md` files</action>
106
-
107
- <action>For each epic file found, extract:</action>
108
-
109
- - Epic numbers from headers like `## Epic 1:` or `## Epic 2:`
110
- - Story IDs and titles from patterns like `### Story 1.1: User Authentication`
111
- - Convert story format from `Epic.Story: Title` to kebab-case key: `epic-story-title`
112
-
113
- **Story ID Conversion Rules:**
114
-
115
- - Original: `### Story 1.1: User Authentication`
116
- - Replace period with dash: `1-1`
117
- - Convert title to kebab-case: `user-authentication`
118
- - Final key: `1-1-user-authentication`
119
-
120
- <action>Build complete inventory of all epics and stories from all epic files</action>
121
- </step>
122
-
123
- <step n="2" goal="Build sprint status structure">
124
- <action>For each epic found, create entries in this order:</action>
125
-
126
- 1. **Epic entry** - Key: `epic-{num}`, Default status: `backlog`
127
- 2. **Story entries** - Key: `{epic}-{story}-{title}`, Default status: `backlog`
128
- 3. **Retrospective entry** - Key: `epic-{num}-retrospective`, Default status: `optional`
129
-
130
- **Example structure:**
131
-
132
- ```yaml
133
- development_status:
134
- epic-1: backlog
135
- 1-1-user-authentication: backlog
136
- 1-2-account-management: backlog
137
- epic-1-retrospective: optional
138
- ```
139
-
140
- </step>
27
+ Activation is complete. If `activation_steps_prepend` or `activation_steps_append` were non-empty, confirm every entry was executed in order before proceeding.
141
28
 
142
- <step n="3" goal="Apply intelligent status detection">
143
- <action>For each story, detect current status by checking files:</action>
29
+ ## If the Script Fails
144
30
 
145
- **Story file detection:**
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.
146
32
 
147
- - Check: `{story_location_absolute}/{story-key}.md` (e.g., `stories/1-1-user-authentication.md`)
148
- - If exists → upgrade status to at least `ready-for-dev`
33
+ ## On Completion
149
34
 
150
- **Preservation rule:**
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.
151
36
 
152
- - If existing `{status_file}` exists and has more advanced status, preserve it
153
- - Never downgrade status (e.g., don't change `done` to `ready-for-dev`)
154
- - If existing `{status_file}` has an `action_items` section, carry it over unchanged
37
+ ## Headless Mode
155
38
 
156
- **Status Flow Reference:**
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:
157
40
 
158
- - Epic: `backlog` → `in-progress` → `done`
159
- - Story: `backlog` → `ready-for-dev` → `in-progress` → `review` → `done`
160
- - Retrospective: `optional` ↔ `done`
161
- </step>
162
-
163
- <step n="4" goal="Generate sprint status file">
164
- <action>Create or update {status_file} with:</action>
165
-
166
- **File Structure:**
167
-
168
- ```yaml
169
- # generated: {date}
170
- # last_updated: {date}
171
- # project: {project_name}
172
- # project_key: {project_key}
173
- # tracking_system: {tracking_system}
174
- # story_location: {story_location}
175
-
176
- # STATUS DEFINITIONS:
177
- # ==================
178
- # Epic Status:
179
- # - backlog: Epic not yet started
180
- # - in-progress: Epic actively being worked on
181
- # - done: All stories in epic completed
182
- #
183
- # Epic Status Transitions:
184
- # - backlog → in-progress: Automatically when first story is created (via create-story)
185
- # - in-progress → done: Manually when all stories reach 'done' status
186
- #
187
- # Story Status:
188
- # - backlog: Story only exists in epic file
189
- # - ready-for-dev: Story file created in stories folder
190
- # - in-progress: Developer actively working on implementation
191
- # - review: Ready for code review (via Dev's code-review workflow)
192
- # - done: Story completed
193
- #
194
- # Retrospective Status:
195
- # - optional: Can be completed but not required
196
- # - done: Retrospective has been completed
197
- #
198
- # Action Item Status:
199
- # - open: Committed during a retrospective, not yet addressed
200
- # - in-progress: Actively being worked on
201
- # - done: Completed
202
- #
203
- # WORKFLOW NOTES:
204
- # ===============
205
- # - Epic transitions to 'in-progress' automatically when first story is created
206
- # - Stories can be worked in parallel if team capacity allows
207
- # - Developer typically creates next story after previous one is 'done' to incorporate learnings
208
- # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
209
- # - Retrospective appends its action items to action_items; sprint-status surfaces open ones
210
-
211
- generated: { date }
212
- last_updated: { date }
213
- project: { project_name }
214
- project_key: { project_key }
215
- tracking_system: { tracking_system }
216
- story_location: { story_location }
217
-
218
- development_status:
219
- # All epics, stories, and retrospectives in order
220
- ```
221
-
222
- <action>Write the complete sprint status YAML to {status_file}</action>
223
- <action>CRITICAL: Metadata appears TWICE - once as comments (#) for documentation, once as YAML key:value fields for parsing</action>
224
- <action>Ensure all items are ordered: epic, its stories, its retrospective, next epic...</action>
225
- <action>If the existing file had an action_items section, write it back unchanged after development_status</action>
226
- </step>
227
-
228
- <step n="5" goal="Validate and report">
229
- <action>Perform validation checks:</action>
230
-
231
- - [ ] Every epic in epic files appears in {status_file}
232
- - [ ] Every story in epic files appears in {status_file}
233
- - [ ] Every epic has a corresponding retrospective entry
234
- - [ ] No development_status items in {status_file} that don't exist in epic files
235
- - [ ] action_items section (if it existed) carried over unchanged
236
- - [ ] All status values are legal (match state machine definitions)
237
- - [ ] File is valid YAML syntax
238
-
239
- <action>Count totals:</action>
240
-
241
- - Total epics: {{epic_count}}
242
- - Total stories: {{story_count}}
243
- - Epics in-progress: {{in_progress_count}}
244
- - Stories done: {{done_count}}
245
-
246
- <action>Display completion summary to {user_name} in {communication_language}:</action>
247
-
248
- **Sprint Status Generated Successfully**
249
-
250
- - **File Location:** {status_file}
251
- - **Total Epics:** {{epic_count}}
252
- - **Total Stories:** {{story_count}}
253
- - **Epics In Progress:** {{in_progress_count}}
254
- - **Stories Completed:** {{done_count}}
255
-
256
- **Next Steps:**
257
-
258
- 1. Review the generated {status_file}
259
- 2. Use this file to track development progress
260
- 3. Agents will update statuses as they work
261
- 4. Re-run this workflow to refresh auto-detected statuses
262
-
263
- <action>Run: `python3 {project-root}/_wizz/scripts/resolve_customization.py --skill {skill-root} --key workflow.on_complete` — if the resolved value is non-empty, follow it as the final terminal instruction before exiting.</action>
264
- </step>
265
-
266
- </workflow>
267
-
268
- ## Additional Documentation
269
-
270
- ### Status State Machine
271
-
272
- **Epic Status Flow:**
273
-
274
- ```
275
- backlog → in-progress → done
276
- ```
277
-
278
- - **backlog**: Epic not yet started
279
- - **in-progress**: Epic actively being worked on (stories being created/implemented)
280
- - **done**: All stories in epic completed
281
-
282
- **Story Status Flow:**
283
-
284
- ```
285
- backlog → ready-for-dev → in-progress → review → done
286
- ```
287
-
288
- - **backlog**: Story only exists in epic file
289
- - **ready-for-dev**: Story file created (e.g., `stories/1-3-plant-naming.md`)
290
- - **in-progress**: Developer actively working
291
- - **review**: Ready for code review (via Dev's code-review workflow)
292
- - **done**: Completed
293
-
294
- **Retrospective Status:**
295
-
296
- ```
297
- optional ↔ done
298
- ```
299
-
300
- - **optional**: Ready to be conducted but not required
301
- - **done**: Finished
302
-
303
- **Action Item Status:**
304
-
305
- ```
306
- open → in-progress → done
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
+ }
307
50
  ```
308
51
 
309
- - **open**: Committed during a retrospective, not yet addressed
310
- - **in-progress**: Actively being worked on
311
- - **done**: Completed
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).
312
53
 
313
- ### Guidelines
54
+ ## References
314
55
 
315
- 1. **Epic Activation**: Mark epic as `in-progress` when starting work on its first story
316
- 2. **Sequential Default**: Stories are typically worked in order, but parallel work is supported
317
- 3. **Parallel Work Supported**: Multiple stories can be `in-progress` if team capacity allows
318
- 4. **Review Before Done**: Stories should pass through `review` before `done`
319
- 5. **Learning Transfer**: Developer typically creates next story after previous one is `done` to incorporate learnings
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. **It runs under `uv run --no-cache`, not the Wizz default `python3`**: it needs `ruamel.yaml` to round-trip `sprint-status.yaml` without destroying its comments, and `uv` provisions that from the script's own header. Rewriting the invocation to `python3` fails with `ModuleNotFoundError` unless `ruamel.yaml` is installed globally
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
@@ -30,9 +30,7 @@ activation_steps_append = []
30
30
  # - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
31
31
  # (glob patterns are supported; the file's contents are loaded and treated as facts).
32
32
 
33
- persistent_facts = [
34
- "file:{project-root}/**/project-context.md",
35
- ]
33
+ persistent_facts = []
36
34
 
37
35
  # Scalar: executed when the workflow reaches its final step,
38
36
  # after sprint-status.yaml is generated and validated. Override wins.
@@ -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 --no-cache {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 --no-cache {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, `wizz-quick-dev` 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 `wizz-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 --no-cache {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 --no-cache {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.