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.
- package/package.json +3 -2
- package/skills-registry.yaml +4 -0
- package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/__pycache__/lint_spine.cpython-313.pyc +0 -0
- package/src/bmm-skills/3-solutioning/wizz-architecture/scripts/tests/__pycache__/test_lint_spine.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +3 -5
- package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +71 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/references/claims-check.md +14 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/references/deletion-check.md +14 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/edge-case-hunter.md +110 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-01-gather-context.md +32 -23
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-02-review.md +10 -13
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-03-triage.md +16 -22
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-04-present.md +4 -2
- package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +76 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/references/claims-check.md +14 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/references/deletion-check.md +14 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/edge-case-hunter.md +110 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/verification-gap.md +113 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-04-review.md +38 -16
- package/src/bmm-skills/4-implementation/wizz-retrospective/SKILL.md +56 -1488
- package/src/bmm-skills/4-implementation/wizz-retrospective/customize.toml +3 -5
- package/src/bmm-skills/4-implementation/wizz-retrospective/references/acceptance-verdict.md +55 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/references/aggregate-views.md +17 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/references/evidence-gathering.md +30 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/references/retro-document.md +84 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/references/team-discussion.md +22 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/__pycache__/sprint_status.cpython-313.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/git_evidence.py +304 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/sprint_status.py +746 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/fixtures/sprint-status-template.yaml +71 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_git_evidence.py +750 -0
- package/src/bmm-skills/4-implementation/wizz-retrospective/scripts/tests/test_sprint_status.py +1579 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/SKILL.md +39 -296
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/customize.toml +1 -3
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/fix-sprint-status.md +30 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/generate-tracking.md +25 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/readiness-gate.md +20 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/status-view.md +14 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/references/validate.md +10 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/__pycache__/sprint_plan.cpython-313.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/sprint_plan.py +697 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/scripts/tests/test_sprint_plan.py +524 -0
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/sprint-status-template.yaml +9 -7
- package/src/bmm-skills/module-help.csv +3 -3
- package/src/core-skills/module-help.csv +1 -0
- package/src/core-skills/wizz-advanced-elicitation/SKILL.md +36 -114
- package/src/core-skills/wizz-advanced-elicitation/{methods.csv → assets/methods.csv} +29 -27
- package/src/core-skills/wizz-advanced-elicitation/customize.toml +54 -0
- package/src/core-skills/wizz-advanced-elicitation/scripts/__pycache__/pick_methods.cpython-313.pyc +0 -0
- package/src/core-skills/wizz-advanced-elicitation/scripts/pick_methods.py +233 -0
- package/src/core-skills/wizz-advanced-elicitation/scripts/tests/__pycache__/test_pick_methods.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/core-skills/wizz-advanced-elicitation/scripts/tests/test_pick_methods.py +228 -0
- package/src/core-skills/wizz-brainstorming/SKILL.md +2 -2
- package/src/core-skills/wizz-brainstorming/assets/brain-selector.html +2 -0
- package/src/core-skills/wizz-brainstorming/references/converge.md +1 -1
- package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
- package/src/core-skills/wizz-brainstorming/references/headless.md +1 -1
- package/src/core-skills/wizz-brainstorming/references/mode-autonomous.md +1 -1
- package/src/core-skills/wizz-brainstorming/scripts/__pycache__/brain.cpython-313.pyc +0 -0
- package/src/core-skills/wizz-brainstorming/scripts/brain.py +36 -6
- package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/core-skills/wizz-brainstorming/scripts/tests/__pycache__/test_brain.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-brainstorming/scripts/tests/test_brain.py +24 -2
- package/src/core-skills/wizz-customize/scripts/__pycache__/list_customizable_skills.cpython-313.pyc +0 -0
- package/src/core-skills/wizz-customize/scripts/tests/__pycache__/test_list_customizable_skills.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/SKILL.md +107 -0
- package/src/core-skills/wizz-forge-idea/customize.toml +41 -0
- package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-313.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/scripts/resolve_personas.py +275 -0
- package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/scripts/tests/__pycache__/test_resolve_personas.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/scripts/tests/test_resolve_personas.py +138 -0
- package/src/core-skills/wizz-party-mode/SKILL.md +37 -54
- package/src/core-skills/wizz-party-mode/customize.toml +61 -2
- package/src/core-skills/wizz-party-mode/references/create-party.md +8 -3
- package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +3 -1
- package/src/core-skills/wizz-party-mode/references/mode-subagent.md +16 -4
- package/src/core-skills/wizz-party-mode/references/party-memory.md +51 -0
- package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-313.pyc +0 -0
- package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-party-mode/scripts/resolve_party.py +22 -7
- package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/core-skills/wizz-party-mode/scripts/tests/__pycache__/test_resolve_party.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-party-mode/scripts/tests/{test-resolve_party.py → test_resolve_party.py} +8 -0
- package/src/core-skills/wizz-review-edge-case-hunter/SKILL.md +17 -3
- package/src/modules/wizz/agents/wizz-growth/customize.toml +10 -0
- package/src/scripts/__pycache__/memlog.cpython-313.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_memlog.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/skills-lib/pesquisa-de-publico-do-piva/README.md +83 -0
- package/src/skills-lib/pesquisa-de-publico-do-piva/SKILL.md +65 -0
- package/src/skills-lib/pesquisa-de-publico-do-piva/assets/template.html +414 -0
- package/src/skills-lib/pesquisa-de-publico-do-piva/prompts.md +131 -0
- package/src/skills-lib/wizz-offer-forge/README.md +13 -0
- package/src/skills-lib/wizz-offer-forge/SKILL.md +74 -0
- package/src/skills-lib/wizz-offer-forge/references/empilhamento-valor.md +25 -0
- package/src/skills-lib/wizz-offer-forge/references/garantia-reversa.md +22 -0
- package/src/skills-lib/wizz-offer-forge/references/mecanismo-unico.md +28 -0
- package/src/skills-lib/wizz-offer-forge/references/ponte-trafego.md +21 -0
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +2 -0
- package/tools/installer/core/installer.js +57 -0
- package/tools/installer/ide/_config-driven.js +3 -3
- package/tools/installer/ide/platform-codes.yaml +28 -0
- package/tools/installer/modules/external-manager.js +140 -2
- package/tools/installer/modules/official-modules.js +68 -21
- package/tools/installer/prompts.js +45 -103
- package/tools/installer/ui.js +64 -7
- package/wizz-modules.yaml +65 -11
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/checklist.md +0 -34
- package/src/core-skills/wizz-brainstorming/scripts/memlog.py +0 -202
- 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: '
|
|
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
|
-
#
|
|
6
|
+
# Overview
|
|
7
7
|
|
|
8
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
143
|
-
<action>For each story, detect current status by checking files:</action>
|
|
29
|
+
## If the Script Fails
|
|
144
30
|
|
|
145
|
-
|
|
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
|
-
|
|
148
|
-
- If exists → upgrade status to at least `ready-for-dev`
|
|
33
|
+
## On Completion
|
|
149
34
|
|
|
150
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
-
|
|
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
|
-
|
|
54
|
+
## References
|
|
314
55
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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.
|