@pavp/storywright 1.14.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/.claude-plugin/plugin.json +2 -2
- package/README.md +2 -2
- package/commands/story-batch.md +1 -1
- package/commands/story-from-figma.md +1 -1
- package/commands/story-generate.md +4 -5
- package/commands/story-refine.md +4 -5
- package/commands/story-split.md +1 -1
- package/package.json +1 -1
- package/skills/_components/acceptance-criteria/SKILL.md +1 -1
- package/skills/_components/business-rules/SKILL.md +1 -1
- package/skills/_components/definition-of-done/SKILL.md +2 -2
- package/skills/_components/edge-cases/SKILL.md +1 -1
- package/skills/_components/{jira-wiki-formatter → story-formatter}/SKILL.md +21 -56
- package/skills/_components/storywright-base/SKILL.md +14 -15
- package/skills/story-batch/SKILL.md +11 -12
- package/skills/story-from-figma/SKILL.md +3 -4
- package/skills/story-generate/SKILL.md +3 -4
- package/skills/story-refine/SKILL.md +3 -4
- package/skills/story-split/SKILL.md +3 -5
- package/skills/story-generate/templates/story.jira-wiki.md +0 -40
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "storywright",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
4
4
|
"description": "PM skills for Claude Code — turn ambiguous inputs (prompts, screenshots, Figma links) into Jira-ready user stories.",
|
|
5
5
|
"author": "pavp",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"skills/_components/edge-cases",
|
|
22
22
|
"skills/_components/analytics-events",
|
|
23
23
|
"skills/_components/risks-and-dependencies",
|
|
24
|
-
"skills/_components/
|
|
24
|
+
"skills/_components/story-formatter"
|
|
25
25
|
],
|
|
26
26
|
"commands": [
|
|
27
27
|
"commands/story-generate.md",
|
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ this story is too big, split it:
|
|
|
57
57
|
<paste a story that visibly mixes flows>
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
-
Outputs always include
|
|
60
|
+
Outputs always include `story.standard.md` (PM-facing CommonMark) and `story.dev.md` (dev-facing CommonMark).
|
|
61
61
|
|
|
62
62
|
## Skills
|
|
63
63
|
|
|
@@ -78,7 +78,7 @@ Outputs always include both `story.jira-wiki.md` (Jira wiki markup) and `story.s
|
|
|
78
78
|
- `edge-cases` — boundary/network/concurrency/permission/state
|
|
79
79
|
- `analytics-events` — funnel events with payload taxonomy
|
|
80
80
|
- `risks-and-dependencies` — risks + blocking deps
|
|
81
|
-
- `
|
|
81
|
+
- `story-formatter` — portable Markdown renderer
|
|
82
82
|
|
|
83
83
|
## Multimodal
|
|
84
84
|
|
package/commands/story-batch.md
CHANGED
|
@@ -12,7 +12,7 @@ Follow the skill's procedure:
|
|
|
12
12
|
1. Phase 0 — parse the input structurally (numbered → bullets → blank-line blocks). Guard: if no items found, stop with guidance. If exactly 1 item, abort and redirect to `/storywright-story-generate`. Present parsed boundaries and wait for user confirmation.
|
|
13
13
|
2. Phase 1 — run the cohesion gate: extract persona and feature-area nouns per item, build the sharing graph, compute the largest-connected-component percentage. Announce verdict inline as `⚠️ Assumed:` blockquote. Honor PM overrides.
|
|
14
14
|
3. Phase 2 — cohesive batch: one shared clarification round (≤4 questions) over the union of items. Disparate batch: per-item clarifications deferred to base step 5.
|
|
15
|
-
4. Phase 3 — per-item pipeline: run base Application steps 3–11 for each confirmed item. Items with pre-split count ≥2 → SPLIT RECOMMENDED (no
|
|
15
|
+
4. Phase 3 — per-item pipeline: run base Application steps 3–11 for each confirmed item. Items with pre-split count ≥2 → SPLIT RECOMMENDED (no files, flag in summary, continue). Items with INVEST V = FAIL → NOT A STORY (no files, flag, continue). All other items emit both files `story-N.{standard,dev}.md`.
|
|
16
16
|
5. Phase 4 — cross-item analysis over DRAFTED items only: mechanical NxN dependency matrix, per-story V audit, topological build order.
|
|
17
17
|
6. Phase 5 — emit `backlog-summary.md` (cohesion verdict, INVEST table, dep matrix, V audit, build order, SPLIT RECOMMENDED notes) + `.storywright-context.json`. All files in flat folder `docs/storywright/YYYY-MM-DD-HHmm-batch-<slug>/`.
|
|
18
18
|
|
|
@@ -14,6 +14,6 @@ Follow the skill's procedure:
|
|
|
14
14
|
3. Phase 1 — inventory pages and frames; group by prototype links into flows.
|
|
15
15
|
4. Phase 2 — per flow: identify goal, entry point, states, components. Score per-inference confidence (HIGH/MEDIUM/LOW). Mark MEDIUM/LOW with `> ⚠️ Assumed:` blockquotes.
|
|
16
16
|
5. Phase 3 — for any flow that fails INVEST (Small) OR whose deterministic pre-split count ≥2, STOP that flow's draft, route to `/story-split`, and mark it `SPLIT RECOMMENDED` in `flow-summary.md`. Continue with the other flows.
|
|
17
|
-
6. Phase 4 — invoke `story-generate` per drafted flow. Emit
|
|
17
|
+
6. Phase 4 — invoke `story-generate` per drafted flow. Emit both files per story (`story-<N>.standard.md` + `story-<N>.dev.md`) + `flow-summary.md` mapping stories → frames for traceability.
|
|
18
18
|
|
|
19
19
|
Output in the input language (text language wins if mixed inputs).
|
|
@@ -15,12 +15,11 @@ Follow the skill's full procedure:
|
|
|
15
15
|
4. Fill the CORE sections (Title, Summary, User Story, Acceptance Criteria, Definition of Done).
|
|
16
16
|
5. Fill optional sections only if they have real content (drop empty ones).
|
|
17
17
|
6. Run INVEST pre-split test. If count ≥2, show candidate children + ask via `AskUserQuestion` with options: "Yes, split" / "Continue without split" / "No, keep as-is". Never auto-split silently. For other verdicts (NOT A STORY / NEEDS REFINEMENT / RUN A SPIKE) — STOP and hand off accordingly.
|
|
18
|
-
7. Render
|
|
19
|
-
- `story.standard.md` — PM-facing CommonMark: observable behavior only, no file paths/imports/component names/CLI commands
|
|
20
|
-
- `story.
|
|
21
|
-
- `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands)
|
|
18
|
+
7. Render two outputs via `story-formatter` to `docs/storywright/YYYY-MM-DD-HHmm-<title-slug>/` (current local time, title kebab-case max 5 words). Use the `Write` tool for all files — never ask:
|
|
19
|
+
- `story.standard.md` — PM-facing CommonMark: observable behavior only, no file paths/imports/component names/CLI commands; DoD uses plain `- ` bullets (no checkboxes); no pipe tables
|
|
20
|
+
- `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands and `- [ ]` checkboxes)
|
|
22
21
|
- `.storywright-context.json` — resolved session answers: `{"language":"...","persona":"...","naming_pattern":null,"output_folder":"...","resolved_questions":[],"sibling_refs":[]}`
|
|
23
|
-
Emit `story.standard.md`
|
|
22
|
+
Emit `story.standard.md` as a fenced code block in chat. Do NOT emit `story.dev.md` in chat.
|
|
24
23
|
8. Non-blocking assumptions remain? Mark inline with `⚠️ Assumed:`. Do NOT emit clarifications.md.
|
|
25
24
|
|
|
26
25
|
Output in the input language (preserve es/en).
|
package/commands/story-refine.md
CHANGED
|
@@ -16,10 +16,9 @@ Follow the skill's procedure:
|
|
|
16
16
|
4. Fill missing/weak sections via component skills. Preserve original wording where good.
|
|
17
17
|
5. Append a "Refinement log" at the end listing what changed.
|
|
18
18
|
6. Run INVEST pre-split test. If count ≥2, show candidate children + ask via `AskUserQuestion` with options: "Yes, split" / "Continue without split" / "No, keep as-is". Never auto-split silently.
|
|
19
|
-
7. Render
|
|
20
|
-
- `story.standard.md` — PM-facing CommonMark: observable behavior only, no file paths/imports/component names/CLI commands
|
|
21
|
-
- `story.
|
|
22
|
-
- `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands)
|
|
19
|
+
7. Render two outputs via `story-formatter` to `docs/storywright/YYYY-MM-DD-HHmm-<title-slug>/` (current local time, title kebab-case max 5 words). Use the `Write` tool for all files — never ask:
|
|
20
|
+
- `story.standard.md` — PM-facing CommonMark: observable behavior only, no file paths/imports/component names/CLI commands; DoD uses plain `- ` bullets (no checkboxes); no pipe tables
|
|
21
|
+
- `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands and `- [ ]` checkboxes)
|
|
23
22
|
- `.storywright-context.json` — resolved session answers: `{"language":"...","persona":"...","naming_pattern":null,"output_folder":"...","resolved_questions":[],"sibling_refs":[]}`
|
|
24
|
-
Emit `story.standard.md`
|
|
23
|
+
Emit `story.standard.md` as a fenced code block in chat. Do NOT emit `story.dev.md` in chat.
|
|
25
24
|
8. Non-blocking assumptions remain? Mark inline with `⚠️ Assumed:`. Do NOT emit clarifications.md.
|
package/commands/story-split.md
CHANGED
|
@@ -20,6 +20,6 @@ Follow the skill's procedure:
|
|
|
20
20
|
4. Draft a split plan as a Markdown table with rationale, pattern, and proposed children.
|
|
21
21
|
5. Run the strategic evaluation: does the split reveal low-value work? Are children equal-sized?
|
|
22
22
|
6. STOP and ask the user to approve / adjust / cancel. Never auto-split.
|
|
23
|
-
7. After approval: write `epic.md` (single file — epic metadata, holds the decision trail; NO `split-plan.md`) +
|
|
23
|
+
7. After approval: write `epic.md` (single file — epic metadata, holds the decision trail; NO `split-plan.md`) + both files per child (`story-<N>.standard.md` + `story-<N>.dev.md`).
|
|
24
24
|
8. Coherence check + recursive re-split for children still >1 sprint.
|
|
25
25
|
9. Save artifacts under the canonical output folder `docs/storywright/YYYY-MM-DD-HHmm-<epic-slug>/`.
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@ Invoked by `story-generate` and `story-refine` after the body of the story is dr
|
|
|
39
39
|
- And <secondary observable outcome> (optional)
|
|
40
40
|
```
|
|
41
41
|
6. Number ACs `AC-1`, `AC-2`, …. This is the ONLY allowed scheme, in every language — never `CA-01`, `Criterio 1`, `Escenario 1`, or any localized variant. The `AC` label is fixed; translate only the scenario title after it. Stable numbering — never renumber when adding new ones in iterations.
|
|
42
|
-
7. Emit only the AC block. Do NOT include explanations, a section heading above the ACs, or surrounding prose. The host renderer (`[[
|
|
42
|
+
7. Emit only the AC block. Do NOT include explanations, a section heading above the ACs, or surrounding prose. The host renderer (`[[story-formatter]]`) owns the `## Acceptance Criteria` heading.
|
|
43
43
|
|
|
44
44
|
## Examples
|
|
45
45
|
|
|
@@ -17,7 +17,7 @@ Business rules are **policy invariants** the story must respect. They survive ac
|
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
20
|
-
After the story body is drafted, before ACs are finalized — so ACs can reference relevant rules. Business Rules are an **optional PM section** (see `[[
|
|
20
|
+
After the story body is drafted, before ACs are finalized — so ACs can reference relevant rules. Business Rules are an **optional PM section** (see `[[story-formatter]]` — emit in `story.standard.md` only when non-empty) AND are also rendered in `story.dev.md`. They are policy invariants, not technical detail, so unlike edge-cases they are not dev-only.
|
|
21
21
|
|
|
22
22
|
## Inputs & interpretation
|
|
23
23
|
|
|
@@ -17,7 +17,7 @@ A Definition of Done is the contract for "shippable". It must be **checkable, ob
|
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
20
|
-
Invoked after acceptance criteria and technical considerations are drafted. DoD is **dual-rendered** (see `[[
|
|
20
|
+
Invoked after acceptance criteria and technical considerations are drafted. DoD is **dual-rendered** (see `[[story-formatter]]`): `story.standard.md` carries the **acceptance-only** DoD projection (no CLI commands, no file-level criteria, plain `- ` bullets — no `- [ ]` checkboxes); `story.dev.md` carries the **full** DoD including CLI commands (`npm run test`), file-level lines, and `- [ ]` checkboxes. Produce both projections from the baseline below: PM projection = drop command/file lines AND strip `[ ]` to plain `- `; dev projection = keep everything including `- [ ]`.
|
|
21
21
|
|
|
22
22
|
## Inputs & interpretation
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ Invoked after acceptance criteria and technical considerations are drafted. DoD
|
|
|
29
29
|
1. Start from the baseline list below.
|
|
30
30
|
2. Drop lines that don't apply (e.g., no analytics if the story is purely internal).
|
|
31
31
|
3. Add story-specific lines from technical considerations (e.g., "Database migration runs cleanly on staging").
|
|
32
|
-
4. Use checkbox markdown (`- [ ]`) so reviewers can tick during review.
|
|
32
|
+
4. Use checkbox markdown (`- [ ]`) so reviewers can tick during review. **PM projection exception:** when rendering the DoD for `story.standard.md`, replace `- [ ]` with plain `- ` bullets — Jira Cloud does not autoformat task-list syntax. `story.dev.md` keeps `- [ ]` unchanged.
|
|
33
33
|
|
|
34
34
|
### Baseline DoD
|
|
35
35
|
|
|
@@ -16,7 +16,7 @@ Edge cases are how engineers find latent risk. Generate them **before** acceptan
|
|
|
16
16
|
|
|
17
17
|
## When to use
|
|
18
18
|
|
|
19
|
-
**Dev-file only.** Invoked while rendering `story.dev.md` (the dev-facing file), never the PM-facing `story.standard.md
|
|
19
|
+
**Dev-file only.** Invoked while rendering `story.dev.md` (the dev-facing file), never the PM-facing `story.standard.md`. `[[storywright-base]]` rule 3 forbids an Edge Cases section in the PM story body — this output lands exclusively in `story.dev.md`. It still informs AC failure paths (`[[acceptance-criteria]]`): the AC covers the observable behavior in the PM file; the enumerated technical edge detail lives in dev.md.
|
|
20
20
|
|
|
21
21
|
## Inputs & interpretation
|
|
22
22
|
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Render a story into
|
|
2
|
+
name: story-formatter
|
|
3
|
+
description: Render a story into two files: story.standard.md (PM-facing CommonMark, no technical detail) and story.dev.md (dev-facing CommonMark, full technical detail).
|
|
4
4
|
trigger: "internal use by story-* skills"
|
|
5
|
-
intent: Component skill that takes a structured story and produces
|
|
6
|
-
version:
|
|
5
|
+
intent: Component skill that takes a structured story and produces two output files following the templates in story-generate/templates.
|
|
6
|
+
version: 3.0.0
|
|
7
7
|
inputs:
|
|
8
8
|
- structured-story
|
|
9
9
|
outputs:
|
|
10
10
|
- story.standard.md
|
|
11
|
-
- story.jira-wiki.md
|
|
12
11
|
- story.dev.md
|
|
13
12
|
---
|
|
14
13
|
|
|
15
14
|
## Purpose
|
|
16
15
|
|
|
17
|
-
Stories need to live in Jira
|
|
16
|
+
Stories need to live in Jira Cloud, Notion, Linear, GitHub Issues, and any other Markdown surface. Generate a portable CommonMark PM file and a full developer-facing file from the same source.
|
|
18
17
|
|
|
19
18
|
## When to use
|
|
20
19
|
|
|
@@ -26,12 +25,11 @@ Final step in `story-generate` and `story-refine`. Always last.
|
|
|
26
25
|
|
|
27
26
|
## Application (step-by-step)
|
|
28
27
|
|
|
29
|
-
## Audience separation —
|
|
28
|
+
## Audience separation — TWO files
|
|
30
29
|
|
|
31
30
|
| File | Audience | Technical detail |
|
|
32
31
|
|---|---|---|
|
|
33
32
|
| `story.standard.md` | PM, stakeholders | ❌ None — no file paths, no imports, no component names, no `npm run X` in DoD |
|
|
34
|
-
| `story.jira-wiki.md` | PM → Jira paste | ❌ None — same content as standard, Jira markup |
|
|
35
33
|
| `story.dev.md` | Developer | ✅ Full — file paths, imports, Technical Considerations, technical edge cases, full DoD with commands |
|
|
36
34
|
|
|
37
35
|
**What is "technical":** file paths, import statements, component/hook names, API method names, CLI commands (`npm run test`), null/undefined checks, browser API constraints (HTTPS, permissions), specific library flags.
|
|
@@ -42,75 +40,43 @@ Final step in `story-generate` and `story-refine`. Always last.
|
|
|
42
40
|
|
|
43
41
|
**Pre-emit heading guard (apply before writing any section to any file):**
|
|
44
42
|
- `story.standard.md` and `story.dev.md`: title line must use `#`; every section heading must use `##`. If received content uses `###` or `####` for a section, demote it to `##` before emitting.
|
|
45
|
-
- `story.jira-wiki.md`: title line must use `h2.`; every section heading must use `h3.`. If `h1.` or `h2.` appears on any line after the first heading, correct it to `h3.` before emitting.
|
|
46
43
|
|
|
47
44
|
Apply silently — no log entry needed for heading-level corrections.
|
|
48
45
|
|
|
49
|
-
1. Render `story.
|
|
50
|
-
- Headings: `h1. `, `h2. `, `h3. `
|
|
51
|
-
- Bold: `*text*`
|
|
52
|
-
- Italic: `_text_`
|
|
53
|
-
- Code: `{{code}}` inline, `{code}…{code}` block
|
|
54
|
-
- Lists: `* item`, `# item` (numbered)
|
|
55
|
-
- Tables: `||header||header||` then `|cell|cell|`
|
|
56
|
-
- Panels for callouts: `{panel:title=⚠️ Assumed}…{panel}`
|
|
57
|
-
- Strip all technical detail (see audience table above)
|
|
58
|
-
2. Render `story.standard.md` (PM-facing) using CommonMark:
|
|
46
|
+
1. Render `story.standard.md` (PM-facing) using CommonMark:
|
|
59
47
|
- Headings: `##`, `###`
|
|
60
48
|
- Bold: `**text**`
|
|
61
49
|
- Italic: `*text*`
|
|
62
50
|
- Code: `` `inline` ``, ```` ``` ```` blocks
|
|
63
51
|
- Lists: `- item`, `1. item`
|
|
64
|
-
- Tables: standard pipe tables
|
|
65
52
|
- Callouts: `> ⚠️ **Assumed:** …`
|
|
66
53
|
- Strip all technical detail (see audience table above)
|
|
67
|
-
|
|
54
|
+
- **No pipe tables.** PM files MUST NOT contain pipe-table Markdown (`| col | col |` rows). Render any tabular content as lists instead — Jira Cloud does not autoformat Markdown tables on paste.
|
|
55
|
+
- **DoD projection:** when rendering the Definition of Done block in `story.standard.md`, strip `[ ]` from each item — emit `- ` plain bullets, not `- [ ]` checkboxes. Jira Cloud does not autoformat task-list syntax into interactive checkboxes; plain bullets paste cleanly. The dev file keeps `- [ ]` unchanged.
|
|
56
|
+
2. Render `story.dev.md` (dev-facing) using CommonMark:
|
|
68
57
|
- Same structure as `story.standard.md` PLUS:
|
|
69
58
|
- Technical Considerations section (file paths, imports, API calls)
|
|
70
59
|
- Edge Cases section (null checks, error states, browser constraints)
|
|
71
|
-
- DoD includes CLI commands and file-level criteria
|
|
60
|
+
- DoD includes CLI commands and file-level criteria; uses `- [ ]` checkboxes
|
|
72
61
|
- Refinement log includes technical changes
|
|
73
|
-
|
|
62
|
+
3. Section model for PM files = **core + optional (non-technical)**.
|
|
74
63
|
|
|
75
64
|
**Core (always emit, in this order):**
|
|
76
65
|
1. Title
|
|
77
66
|
2. User Story (As a / I want to / so that)
|
|
78
67
|
3. Acceptance Criteria (observable behavior only)
|
|
79
|
-
4. Definition of Done (acceptance
|
|
68
|
+
4. Definition of Done (acceptance-only projection, plain `- ` bullets — no commands, no `- [ ]`)
|
|
80
69
|
|
|
81
70
|
**Optional PM sections (emit only if non-empty):**
|
|
82
71
|
5. Business Goal
|
|
83
72
|
6. Scope / Out of Scope
|
|
84
73
|
7. Business Rules
|
|
85
74
|
|
|
86
|
-
|
|
87
|
-
|
|
75
|
+
4. **Drop any section with no real content.** An empty heading is noise.
|
|
76
|
+
5. Emit `story.standard.md` as a fenced code block in chat (PM-facing). Do NOT emit `story.dev.md` in chat — write to disk only. File persistence is handled by the calling skill via the `Write` tool.
|
|
88
77
|
|
|
89
78
|
## Examples
|
|
90
79
|
|
|
91
|
-
### Good — Jira wiki
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
h2. Login con Google
|
|
95
|
-
|
|
96
|
-
Permitir a usuarios autenticarse mediante OAuth con Google.
|
|
97
|
-
|
|
98
|
-
h3. User Story
|
|
99
|
-
*As a* visitante nuevo
|
|
100
|
-
*I want* iniciar sesión con mi cuenta de Google
|
|
101
|
-
*So that* puedo evitar crear una nueva contraseña.
|
|
102
|
-
|
|
103
|
-
h3. Criterios de Aceptación
|
|
104
|
-
*AC-1: Login exitoso*
|
|
105
|
-
* Given el usuario está en la pantalla de login
|
|
106
|
-
* When toca "Continuar con Google" y autoriza una cuenta válida
|
|
107
|
-
* Then es redirigido al dashboard en <3s
|
|
108
|
-
|
|
109
|
-
h3. Definition of Done
|
|
110
|
-
* (/) Code merged behind feature flag
|
|
111
|
-
* (/) ACs pass in QA
|
|
112
|
-
```
|
|
113
|
-
|
|
114
80
|
### Good — CommonMark
|
|
115
81
|
|
|
116
82
|
```
|
|
@@ -130,17 +96,16 @@ Permitir a usuarios autenticarse mediante OAuth con Google.
|
|
|
130
96
|
- Then es redirigido al dashboard en <3s
|
|
131
97
|
|
|
132
98
|
## Definition of Done
|
|
133
|
-
-
|
|
134
|
-
-
|
|
99
|
+
- Code merged behind feature flag
|
|
100
|
+
- ACs pass in QA
|
|
135
101
|
```
|
|
136
102
|
|
|
137
103
|
## Common Pitfalls
|
|
138
104
|
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
- Emoji in Jira: works in cloud, often mangled in older self-hosted. Keep emojis to non-critical decoration.
|
|
105
|
+
- Emitting `- [ ]` checkboxes in PM-file DoD — use plain `- ` bullets in `story.standard.md`; keep `- [ ]` only in `story.dev.md`.
|
|
106
|
+
- Including pipe tables in PM files — render tabular content as lists instead.
|
|
142
107
|
- Empty headings. Drop.
|
|
143
|
-
- Wrong heading levels: CommonMark output uses `#` (H1) for title, `##` (H2) for sections.
|
|
108
|
+
- Wrong heading levels: CommonMark output uses `#` (H1) for title, `##` (H2) for sections. The canonical block in `[[storywright-base]]` uses `###`/`####` as taxonomy shorthand only — do not copy those levels into the rendered artifact.
|
|
144
109
|
- Emitting INVEST as a section: INVEST is a process step. Its verdict belongs in the log line only (`INVEST Verdict: READY`), never as a standalone section in the output file.
|
|
145
110
|
|
|
146
111
|
## References
|
|
@@ -148,5 +113,5 @@ Permitir a usuarios autenticarse mediante OAuth con Google.
|
|
|
148
113
|
- [[story-generate]] (templates live under `story-generate/templates/`)
|
|
149
114
|
|
|
150
115
|
<claude-specific>
|
|
151
|
-
Cache
|
|
116
|
+
Cache the CommonMark syntax table — it's stable. Remember: PM file DoD uses plain `- ` bullets; dev file DoD uses `- [ ]` checkboxes. PM files must not contain pipe tables.
|
|
152
117
|
</claude-specific>
|
|
@@ -31,14 +31,14 @@ If you are reading this through a top-level skill, treat every rule below as non
|
|
|
31
31
|
- ONE AC Scenario (one Given chain + one `When` + one `Then`).
|
|
32
32
|
If the input naturally needs >1 `When`/`Then`, the skill MUST stop the single-story path and route to `[[story-split]]`.
|
|
33
33
|
|
|
34
|
-
3. **No mini-PRDs in the PM story body.** PROHIBITED in `story.standard.md
|
|
34
|
+
3. **No mini-PRDs in the PM story body.** PROHIBITED in `story.standard.md`:
|
|
35
35
|
- Non-Functional Requirements blocks (a11y/i18n/perf/tokens) — DoD only.
|
|
36
36
|
- Edge Cases enumerated as their own section — fold into AC failure paths.
|
|
37
37
|
- Dependencies as prose — Jira ticket links only.
|
|
38
38
|
- Per-claim visual specs (pixel measurements, hex inferences) inline — use single banner (rule 5).
|
|
39
39
|
- Logs >3 lines (>5 if SPLIT verdict).
|
|
40
40
|
|
|
41
|
-
3a. **Technical detail lives in `story.dev.md`.** The content rule 3 bans from the PM body is NOT discarded — it is rendered in the dev-facing file. Edge cases, analytics events, risks/dependencies, technical considerations, and the command-level DoD belong in `story.dev.md`, populated by the enrichment components (Application step 8b). The PM↔dev split is the home for this content; rule 3 governs the PM
|
|
41
|
+
3a. **Technical detail lives in `story.dev.md`.** The content rule 3 bans from the PM body is NOT discarded — it is rendered in the dev-facing file. Edge cases, analytics events, risks/dependencies, technical considerations, and the command-level DoD belong in `story.dev.md`, populated by the enrichment components (Application step 8b). The PM↔dev split is the home for this content; rule 3 governs the PM file, `story.dev.md` carries the technical detail. See `[[story-formatter]]` for the audience table.
|
|
42
42
|
|
|
43
43
|
4. **Output language matches the user's chat language**, not the input's. Auto-detect first via rule 4a; only ask via `AskUserQuestion` if signals split.
|
|
44
44
|
|
|
@@ -96,7 +96,7 @@ If you are reading this through a top-level skill, treat every rule below as non
|
|
|
96
96
|
|
|
97
97
|
12. **Passive-goal downstream prompt (rule G).** If the story's `I want to` verb is observational (`view, see, read, browse, look at, inspect, monitor`) AND the `so that` does not name a follow-up user action — ask once via `AskUserQuestion`: "What does the user do with this?". Strengthen the `so that` accordingly. Skip if `so that` already names a downstream action.
|
|
98
98
|
|
|
99
|
-
13. **PM section whitelist (rule H).** Only these section names may appear in `story.standard.md
|
|
99
|
+
13. **PM section whitelist (rule H).** Only these section names may appear in `story.standard.md`:
|
|
100
100
|
|
|
101
101
|
**ALLOWED:** User Story, Acceptance Criteria, Definition of Done, Contexto, Business Goal, Scope, Out of Scope, Business Rules. (`**Summary:**` is inline text, not a section heading — it is not subject to this list.)
|
|
102
102
|
|
|
@@ -171,7 +171,7 @@ Mechanical counter. Apply the table — do NOT eyeball:
|
|
|
171
171
|
|
|
172
172
|
## Canonical output shape (this is the WHOLE story — no exceptions)
|
|
173
173
|
|
|
174
|
-
> **Note:** This block shows the *section taxonomy and rules* — not heading levels or exact markup. The rendered artifact must follow the `story-generate/templates/` files exactly: `#` for title, `##` for sections (CommonMark)
|
|
174
|
+
> **Note:** This block shows the *section taxonomy and rules* — not heading levels or exact markup. The rendered artifact must follow the `story-generate/templates/` files exactly: `#` for title, `##` for sections (CommonMark). INVEST is a **process step** — it informs the Verdict line in the log but is NOT emitted as a section in the output artifact.
|
|
175
175
|
|
|
176
176
|
```markdown
|
|
177
177
|
### [Title]
|
|
@@ -232,15 +232,15 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
|
|
|
232
232
|
- Count ≤1 → continue to step 8 (single-story path).
|
|
233
233
|
- Count ≥2 → execute the **host skill's split behavior** (see Source-specific differential in each top-level skill).
|
|
234
234
|
|
|
235
|
-
8. **Fill the canonical block** (Use Case + AC + Design Ref + INVEST). Preserve original wording where it was already good. NEVER invent NFR/edge-case/deps sections **in the PM story body** — rule 3 still holds for `story.standard.md
|
|
235
|
+
8. **Fill the canonical block** (Use Case + AC + Design Ref + INVEST). Preserve original wording where it was already good. NEVER invent NFR/edge-case/deps sections **in the PM story body** — rule 3 still holds for `story.standard.md`.
|
|
236
236
|
|
|
237
|
-
**Summary line (mandatory).** Generate `**Summary:**` immediately after the title — one sentence, value-focused, no heading. This line is MANDATORY in
|
|
237
|
+
**Summary line (mandatory).** Generate `**Summary:**` immediately after the title — one sentence, value-focused, no heading. This line is MANDATORY in both output files. Format: `**Summary:** <sentence>`. Never omit it.
|
|
238
238
|
|
|
239
239
|
The Summary MUST open with WHAT the deliverable is and WHICH problem it solves, in business language. The rule 3 / rule H ban on technical detail (file paths, imports, component/CLI names) does NOT exempt you from explaining the purpose — "no technical names" means no jargon, NOT "no explanation of what it does." Strip the jargon, keep the purpose.
|
|
240
240
|
|
|
241
241
|
**For enabling / infra / platform stories this is mandatory and load-bearing.** When the deliverable is plumbing (publishing packages, provisioning a registry, setting up a pipeline, wiring shared config), describing only the process (publish / setup / install) is INSUFFICIENT — a PM reading it must understand what each artifact is FOR and what breaks downstream without it. State the consumer value, not the mechanics. Example: "publish 2 shared packages to a private registry" → the Summary explains what each package does and what stops working if it is missing, never just the publish/install cycle.
|
|
242
242
|
|
|
243
|
-
8.5. **PM section self-audit (rule H).** Before calling [[
|
|
243
|
+
8.5. **PM section self-audit (rule H).** Before calling [[story-formatter]], enumerate every section drafted for the PM file. For each section name:
|
|
244
244
|
- In Rule H ALLOWED list → keep.
|
|
245
245
|
- In Rule H BANNED list → move its content to `story.dev.md`.
|
|
246
246
|
- Not in either list → treat as BANNED, move to `story.dev.md`.
|
|
@@ -252,8 +252,8 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
|
|
|
252
252
|
- `[[risks-and-dependencies]]` → `### Dependencias` + `### Riesgos`
|
|
253
253
|
- `[[analytics-events]]` → `### Analytics / Eventos`
|
|
254
254
|
- `[[definition-of-done]]` → full DoD with CLI commands (PM files get the acceptance-only projection)
|
|
255
|
-
- `[[business-rules]]` → policy invariants (also an *optional* PM section per `[[
|
|
256
|
-
None of these may appear in the PM story body except the optional Business Rules section (see Rule H for the full PM section whitelist). Skip any component whose output is empty (drop empty sections — rule 3
|
|
255
|
+
- `[[business-rules]]` → policy invariants (also an *optional* PM section per `[[story-formatter]]` when non-empty)
|
|
256
|
+
None of these may appear in the PM story body except the optional Business Rules section (see Rule H for the full PM section whitelist). Skip any component whose output is empty (drop empty sections — rule 3).
|
|
257
257
|
|
|
258
258
|
9. **Run INVEST** via `[[invest-checklist]]`.
|
|
259
259
|
- `READY` → render.
|
|
@@ -261,15 +261,14 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
|
|
|
261
261
|
- `NEEDS REFINEMENT` → iterate failing dimension, max 1 cycle, then STOP.
|
|
262
262
|
- `NOT A STORY` → tell user it's a tech task and stop.
|
|
263
263
|
|
|
264
|
-
10. **Render** via `[[
|
|
264
|
+
10. **Render** via `[[story-formatter]]`.
|
|
265
265
|
- Derive the output folder: `docs/storywright/YYYY-MM-DD-HHmm-<title-slug>/` where `YYYY-MM-DD-HHmm` is the current local date+time and `<title-slug>` is the story title in kebab-case (max 5 words, drop articles/prepositions).
|
|
266
|
-
- Use the `Write` tool to persist
|
|
266
|
+
- Use the `Write` tool to persist both files to that folder (create it if it does not exist):
|
|
267
267
|
- `story.standard.md` — PM-facing CommonMark, no technical detail
|
|
268
|
-
- `story.jira-wiki.md` — PM-facing Jira wiki markup, no technical detail
|
|
269
268
|
- `story.dev.md` — dev-facing CommonMark, full technical detail (file paths, imports, technical edge cases, full DoD with commands)
|
|
270
|
-
- Emit `story.standard.md`
|
|
269
|
+
- Emit `story.standard.md` as a fenced code block in chat. Do NOT emit `story.dev.md` in chat.
|
|
271
270
|
- Write `.storywright-context.json` to the same folder.
|
|
272
|
-
- Never ask whether to save — always write
|
|
271
|
+
- Never ask whether to save — always write both story files and the context JSON.
|
|
273
272
|
|
|
274
273
|
11. **Log** ≤3 bullets (≤5 if SPLIT) appended at story end. Log type label is host-specific (Generation / Refinement / Split).
|
|
275
274
|
|
|
@@ -307,7 +306,7 @@ Everything else is identical and lives in this base.
|
|
|
307
306
|
- [[invest-checklist]]
|
|
308
307
|
- [[acceptance-criteria]]
|
|
309
308
|
- [[clarification-questions]]
|
|
310
|
-
- [[
|
|
309
|
+
- [[story-formatter]]
|
|
311
310
|
- [[story-generate]]
|
|
312
311
|
- [[story-refine]]
|
|
313
312
|
- [[story-split]]
|
|
@@ -8,7 +8,6 @@ inputs:
|
|
|
8
8
|
- backlog-text
|
|
9
9
|
outputs:
|
|
10
10
|
- story-1.standard.md
|
|
11
|
-
- story-1.jira-wiki.md
|
|
12
11
|
- story-1.dev.md
|
|
13
12
|
- backlog-summary.md
|
|
14
13
|
- .storywright-context.json
|
|
@@ -22,12 +21,12 @@ composes:
|
|
|
22
21
|
- _components/risks-and-dependencies
|
|
23
22
|
- _components/definition-of-done
|
|
24
23
|
- _components/invest-checklist
|
|
25
|
-
- _components/
|
|
24
|
+
- _components/story-formatter
|
|
26
25
|
---
|
|
27
26
|
|
|
28
27
|
## Purpose
|
|
29
28
|
|
|
30
|
-
A backlog input usually contains N discrete items — different features, improvements, or requirements listed together. This skill maps that multi-item input into Cohn+Gherkin stories — **one story per item, processed in a single invocation**.
|
|
29
|
+
A backlog input usually contains N discrete items — different features, improvements, or requirements listed together. This skill maps that multi-item input into Cohn+Gherkin stories — **one story per item, processed in a single invocation**. Each story emits two files: `story-N.standard.md` (PM-facing) + `story-N.dev.md` (dev-facing).
|
|
31
30
|
|
|
32
31
|
**All hard rules, canonical output shape, language detection, terminal-only Q, mechanical NxN dep matrix, per-child V audit, context persistence, and INVEST handling live in `[[storywright-base]]`. Read that first. Anything in this file is a SOURCE-SPECIFIC or SPLIT-BEHAVIOR delta only.**
|
|
33
32
|
|
|
@@ -54,7 +53,7 @@ This skill produces **multiple stories in one invocation** (one per confirmed it
|
|
|
54
53
|
|
|
55
54
|
For any item whose deterministic pre-split count ≥2 → STOP that item's draft, mark it `SPLIT RECOMMENDED` in `backlog-summary.md`, and continue with the remaining items. NEVER auto-invoke `[[story-split]]`.
|
|
56
55
|
|
|
57
|
-
For any item whose INVEST V dimension FAILS → mark it `NOT A STORY` in `backlog-summary.md`, emit no
|
|
56
|
+
For any item whose INVEST V dimension FAILS → mark it `NOT A STORY` in `backlog-summary.md`, emit no files, and continue. NEVER stop the batch.
|
|
58
57
|
|
|
59
58
|
If N=1 after boundary confirmation → abort and instruct the user to use `/storywright-story-generate` instead.
|
|
60
59
|
|
|
@@ -106,11 +105,11 @@ If the PM replies with an override, honor it and re-announce the new mode before
|
|
|
106
105
|
|
|
107
106
|
For each confirmed item (1-based index N):
|
|
108
107
|
|
|
109
|
-
1. Run base Application steps 3–11 verbatim (persona, passive-goal check, gap-check, pre-split count, canonical block, rule H audit, dev enrichment, INVEST, render
|
|
108
|
+
1. Run base Application steps 3–11 verbatim (persona, passive-goal check, gap-check, pre-split count, canonical block, rule H audit, dev enrichment, INVEST, render duo, log).
|
|
110
109
|
2. Use filename prefix `story-<N>.` (all items share one flat batch folder).
|
|
111
|
-
3. **Pre-split ≥2:** mark item as `SPLIT RECOMMENDED`, skip drafting the canonical block, emit no
|
|
112
|
-
4. **INVEST V = FAIL:** mark item as `NOT A STORY`, emit no
|
|
113
|
-
5. **INVEST other failures (T, N, E, I, S):** flag inline with `⚠️` in `backlog-summary.md` but still emit
|
|
110
|
+
3. **Pre-split ≥2:** mark item as `SPLIT RECOMMENDED`, skip drafting the canonical block, emit no files. Continue to the next item.
|
|
111
|
+
4. **INVEST V = FAIL:** mark item as `NOT A STORY`, emit no files. Continue to the next item.
|
|
112
|
+
5. **INVEST other failures (T, N, E, I, S):** flag inline with `⚠️` in `backlog-summary.md` but still emit both files (base behavior).
|
|
114
113
|
|
|
115
114
|
Only items in `DRAFTED` status (step 10 logged) proceed to the Phase 4 matrix.
|
|
116
115
|
|
|
@@ -124,7 +123,7 @@ Scope: only items that reached `DRAFTED` in Phase 3 participate in the matrix an
|
|
|
124
123
|
|
|
125
124
|
### Phase 5 — Output
|
|
126
125
|
|
|
127
|
-
|
|
126
|
+
Story pairs are already written by Phase 3 step 10. Emit:
|
|
128
127
|
|
|
129
128
|
1. **`backlog-summary.md`** at the batch folder root when N>1 OR any item is SPLIT RECOMMENDED or NOT A STORY:
|
|
130
129
|
|
|
@@ -133,8 +132,8 @@ Trios are already written by Phase 3 step 10. Emit:
|
|
|
133
132
|
|
|
134
133
|
Generated: YYYY-MM-DD HH:mm
|
|
135
134
|
Items: N
|
|
136
|
-
Drafted: D (story
|
|
137
|
-
Split recommended: S (no
|
|
135
|
+
Drafted: D (story pairs emitted)
|
|
136
|
+
Split recommended: S (no story files — run /storywright-story-split per item)
|
|
138
137
|
|
|
139
138
|
**Cohesion:** COHESIVE | DISPARATE (<cohesion%>, threshold 60%, driver: persona/area/both)
|
|
140
139
|
|
|
@@ -172,7 +171,7 @@ NO `clarifications.md`. NO Edge Cases / NFR sections **in PM files** (they live
|
|
|
172
171
|
Input: numbered list of 3 checkout-related items.
|
|
173
172
|
- Phase 0 finds 3 items structurally.
|
|
174
173
|
- Phase 1: cohesion% = 100% → COHESIVE, one shared clarification round.
|
|
175
|
-
- Phase 3: items 1 and 2 pass INVEST →
|
|
174
|
+
- Phase 3: items 1 and 2 pass INVEST → story pairs emitted; item 3 has pre-split ≥2 → SPLIT RECOMMENDED, no files.
|
|
176
175
|
- Phase 5: `backlog-summary.md` with 3-row table (2 DRAFTED, 1 SPLIT RECOMMENDED), 2×2 dep matrix over items 1–2.
|
|
177
176
|
|
|
178
177
|
### Good — disparate batch
|
|
@@ -8,7 +8,6 @@ inputs:
|
|
|
8
8
|
- figma-link
|
|
9
9
|
outputs:
|
|
10
10
|
- story-1.standard.md
|
|
11
|
-
- story-1.jira-wiki.md
|
|
12
11
|
- story-1.dev.md
|
|
13
12
|
- flow-summary.md
|
|
14
13
|
- .storywright-context.json
|
|
@@ -22,7 +21,7 @@ composes:
|
|
|
22
21
|
- _components/risks-and-dependencies
|
|
23
22
|
- _components/definition-of-done
|
|
24
23
|
- _components/invest-checklist
|
|
25
|
-
- _components/
|
|
24
|
+
- _components/story-formatter
|
|
26
25
|
---
|
|
27
26
|
|
|
28
27
|
## Purpose
|
|
@@ -91,8 +90,8 @@ Use the base canonical output shape. Design Reference banner per source-specific
|
|
|
91
90
|
|
|
92
91
|
### Phase 5 — Output
|
|
93
92
|
|
|
94
|
-
Per drafted flow, render
|
|
95
|
-
- `story-<N>.standard.md`
|
|
93
|
+
Per drafted flow, render both files via `[[story-formatter]]` (same 2-file contract as `story-generate` / `story-refine`):
|
|
94
|
+
- `story-<N>.standard.md` (PM-facing) + `story-<N>.dev.md` (dev-facing).
|
|
96
95
|
|
|
97
96
|
If N>1 OR any flow was routed to split:
|
|
98
97
|
- `flow-summary.md` with the matrix, V audit, build order, and SPLIT-RECOMMENDED markers.
|
|
@@ -10,7 +10,6 @@ inputs:
|
|
|
10
10
|
- figma-link
|
|
11
11
|
outputs:
|
|
12
12
|
- story.standard.md
|
|
13
|
-
- story.jira-wiki.md
|
|
14
13
|
- story.dev.md
|
|
15
14
|
- .storywright-context.json
|
|
16
15
|
composes:
|
|
@@ -23,12 +22,12 @@ composes:
|
|
|
23
22
|
- _components/risks-and-dependencies
|
|
24
23
|
- _components/definition-of-done
|
|
25
24
|
- _components/invest-checklist
|
|
26
|
-
- _components/
|
|
25
|
+
- _components/story-formatter
|
|
27
26
|
---
|
|
28
27
|
|
|
29
28
|
## Purpose
|
|
30
29
|
|
|
31
|
-
Take whatever the PM has — a one-liner, a half-baked story, a screenshot, a Figma link — and produce a Cohn+Gherkin story an engineer can pick up and ship without follow-up questions.
|
|
30
|
+
Take whatever the PM has — a one-liner, a half-baked story, a screenshot, a Figma link — and produce a Cohn+Gherkin story an engineer can pick up and ship without follow-up questions. Emits two files: `story.standard.md` (PM-facing) + `story.dev.md` (dev-facing).
|
|
32
31
|
|
|
33
32
|
**All hard rules, canonical output shape, language detection, mechanical pre-split test, context persistence, terminal-only Q, and INVEST handling live in `[[storywright-base]]`. Read that first. Anything in this file is a SOURCE-SPECIFIC or SPLIT-BEHAVIOR delta only.**
|
|
34
33
|
|
|
@@ -56,7 +55,7 @@ If the base **deterministic pre-split test** returns count ≥2:
|
|
|
56
55
|
- Show candidate children + dep notes + V audit.
|
|
57
56
|
- Ask via `AskUserQuestion`: "This story has [N] independent flows. Run split now?" with options:
|
|
58
57
|
- "Yes, split" → execute `[[story-split]]` inline (epic + children + .storywright-context.json).
|
|
59
|
-
- "Continue without split" → proceed with single-story path (fill canonical block → INVEST → render
|
|
58
|
+
- "Continue without split" → proceed with single-story path (fill canonical block → INVEST → render both files).
|
|
60
59
|
- "No, keep as-is" → stop. No output written.
|
|
61
60
|
- Do NOT silently auto-split without the AskUserQuestion confirmation.
|
|
62
61
|
|
|
@@ -10,7 +10,6 @@ inputs:
|
|
|
10
10
|
- figma-link
|
|
11
11
|
outputs:
|
|
12
12
|
- story.standard.md
|
|
13
|
-
- story.jira-wiki.md
|
|
14
13
|
- story.dev.md
|
|
15
14
|
- .storywright-context.json
|
|
16
15
|
composes:
|
|
@@ -23,12 +22,12 @@ composes:
|
|
|
23
22
|
- _components/risks-and-dependencies
|
|
24
23
|
- _components/definition-of-done
|
|
25
24
|
- _components/invest-checklist
|
|
26
|
-
- _components/
|
|
25
|
+
- _components/story-formatter
|
|
27
26
|
---
|
|
28
27
|
|
|
29
28
|
## Purpose
|
|
30
29
|
|
|
31
|
-
Bring an existing user story up to standard *without* turning it into a feature spec.
|
|
30
|
+
Bring an existing user story up to standard *without* turning it into a feature spec. Emits two files: `story.standard.md` (PM-facing) + `story.dev.md` (dev-facing).
|
|
32
31
|
|
|
33
32
|
**All hard rules, canonical output shape, language detection, mechanical pre-split test, context persistence, terminal-only Q, mechanical NxN dep matrix, per-child V audit, and INVEST handling live in `[[storywright-base]]`. Read that first. Anything in this file is a SOURCE-SPECIFIC or SPLIT-BEHAVIOR delta only.**
|
|
34
33
|
|
|
@@ -48,7 +47,7 @@ If the base **deterministic pre-split test** returns count ≥2:
|
|
|
48
47
|
- Show candidate children + per-pair dep notes (base rule 10) + V audit (base rule 11).
|
|
49
48
|
- Ask via `AskUserQuestion`: "This story has [N] independent flows. Run split now?" with options:
|
|
50
49
|
- "Yes, split" → execute `[[story-split]]` inline (epic + children + .storywright-context.json).
|
|
51
|
-
- "Continue without split" → proceed with single-story path (fill canonical block → INVEST → render
|
|
50
|
+
- "Continue without split" → proceed with single-story path (fill canonical block → INVEST → render both files).
|
|
52
51
|
- "No, keep as-is" → stop. No output written.
|
|
53
52
|
- Do NOT silently auto-split without the AskUserQuestion confirmation.
|
|
54
53
|
|
|
@@ -11,10 +11,8 @@ inputs:
|
|
|
11
11
|
outputs:
|
|
12
12
|
- epic.md
|
|
13
13
|
- story-1.standard.md
|
|
14
|
-
- story-1.jira-wiki.md
|
|
15
14
|
- story-1.dev.md
|
|
16
15
|
- story-2.standard.md
|
|
17
|
-
- story-2.jira-wiki.md
|
|
18
16
|
- story-2.dev.md
|
|
19
17
|
- .storywright-context.json
|
|
20
18
|
composes:
|
|
@@ -27,7 +25,7 @@ composes:
|
|
|
27
25
|
- _components/analytics-events
|
|
28
26
|
- _components/risks-and-dependencies
|
|
29
27
|
- _components/definition-of-done
|
|
30
|
-
- _components/
|
|
28
|
+
- _components/story-formatter
|
|
31
29
|
---
|
|
32
30
|
|
|
33
31
|
## Purpose
|
|
@@ -45,7 +43,7 @@ When a story is an epic in disguise, splitting badly is worse than not splitting
|
|
|
45
43
|
|
|
46
44
|
This skill IS the split behavior. It always emits multiple files:
|
|
47
45
|
- `epic.md` — title, why-split, INVEST failure reasons, mechanical NxN matrix, build order, V audit per child, list of children. Single file (epic metadata, not a user story).
|
|
48
|
-
- Per child:
|
|
46
|
+
- Per child: both files `story-<N>.standard.md` + `story-<N>.dev.md`, rendered via `[[story-formatter]]` — same contract as every other story-producing skill. Each child is a canonical user story (per base shape).
|
|
49
47
|
- `.storywright-context.json` — persisted answers.
|
|
50
48
|
|
|
51
49
|
NO `split-plan.md`. The plan lives inside `epic.md`.
|
|
@@ -116,7 +114,7 @@ Follow the **base Application** skeleton for the front-end behaviors (context lo
|
|
|
116
114
|
|
|
117
115
|
5. **STOP and ask the user to approve via `AskUserQuestion`.**
|
|
118
116
|
|
|
119
|
-
6. **For each approved child, write the base canonical block, then render via `[[
|
|
117
|
+
6. **For each approved child, write the base canonical block, then render via `[[story-formatter]]` to both files** (`story-<N>.standard.md` + `story-<N>.dev.md`). The child's enrichment (edge cases, risks, analytics) populates its `story-<N>.dev.md` per base step 8b.
|
|
120
118
|
|
|
121
119
|
7. **Build dependency matrix mechanically (base rule 10).** Render in `epic.md`.
|
|
122
120
|
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
h2. {{Title}}
|
|
2
|
-
|
|
3
|
-
*Summary:* {{value-focused one-liner}}
|
|
4
|
-
|
|
5
|
-
h3. User Story
|
|
6
|
-
* *As a* {{persona}}
|
|
7
|
-
* *I want to* {{action}}
|
|
8
|
-
* *so that* {{outcome}}
|
|
9
|
-
|
|
10
|
-
h3. Acceptance Criteria
|
|
11
|
-
|
|
12
|
-
*AC-1: {{scenario title}}*
|
|
13
|
-
* *Given* {{precondition}}
|
|
14
|
-
* *When* {{trigger}}
|
|
15
|
-
* *Then* {{observable outcome}}
|
|
16
|
-
|
|
17
|
-
h3. Definition of Done
|
|
18
|
-
* (/) {{line 1}}
|
|
19
|
-
* (/) {{line 2}}
|
|
20
|
-
|
|
21
|
-
----
|
|
22
|
-
|
|
23
|
-
{panel:title=PM-facing — no technical detail}
|
|
24
|
-
Technical Considerations, Edge Cases, Analytics, Risks & Dependencies live in story.dev.md (rule 3). Optional sections below — keep only those with content.
|
|
25
|
-
{panel}
|
|
26
|
-
|
|
27
|
-
h3. Contexto
|
|
28
|
-
{{trigger: feedback / OKR / incident / competitor}}
|
|
29
|
-
|
|
30
|
-
h3. Business Goal
|
|
31
|
-
{{metric or hypothesis this moves}}
|
|
32
|
-
|
|
33
|
-
h3. Scope
|
|
34
|
-
* {{in 1}}
|
|
35
|
-
|
|
36
|
-
h3. Out of Scope
|
|
37
|
-
* {{out 1}}
|
|
38
|
-
|
|
39
|
-
h3. Business Rules
|
|
40
|
-
# {{rule 1}}
|