@pavp/storywright 1.11.0 → 1.12.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.
@@ -15,7 +15,12 @@ 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 dual outputs via `jira-wiki-formatter`. Use the `Write` tool to write `story.standard.md` and `story.jira-wiki.md` to `docs/storywright/YYYY-MM-DD-HHmm-<title-slug>/` (current local time, title in kebab-case max 5 words). Also emit both as fenced code blocks in chat. Never ask — always write.
18
+ 7. Render three outputs via `jira-wiki-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
20
+ - `story.jira-wiki.md` — PM-facing Jira wiki markup: same content as standard
21
+ - `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands)
22
+ - `.storywright-context.json` — resolved session answers: `{"language":"...","persona":"...","naming_pattern":null,"output_folder":"...","resolved_questions":[],"sibling_refs":[]}`
23
+ Emit `story.standard.md` and `story.jira-wiki.md` as fenced code blocks in chat. Do NOT emit `story.dev.md` in chat.
19
24
  8. Non-blocking assumptions remain? Mark inline with `⚠️ Assumed:`. Do NOT emit clarifications.md.
20
25
 
21
26
  Output in the input language (preserve es/en).
@@ -16,5 +16,10 @@ 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 dual outputs via `jira-wiki-formatter`. Use the `Write` tool to write `story.standard.md` and `story.jira-wiki.md` to `docs/storywright/YYYY-MM-DD-HHmm-<title-slug>/` (current local time, title in kebab-case max 5 words). Also emit both as fenced code blocks in chat. Never ask — always write.
19
+ 7. Render three outputs via `jira-wiki-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
21
+ - `story.jira-wiki.md` — PM-facing Jira wiki markup: same content as standard
22
+ - `story.dev.md` — dev-facing CommonMark: full technical detail (file paths, imports, Technical Considerations, technical edge cases, DoD with `npm run` commands)
23
+ - `.storywright-context.json` — resolved session answers: `{"language":"...","persona":"...","naming_pattern":null,"output_folder":"...","resolved_questions":[],"sibling_refs":[]}`
24
+ Emit `story.standard.md` and `story.jira-wiki.md` as fenced code blocks in chat. Do NOT emit `story.dev.md` in chat.
20
25
  8. Non-blocking assumptions remain? Mark inline with `⚠️ Assumed:`. Do NOT emit clarifications.md.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pavp/storywright",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "PM Skills pack for Claude Code — turn ambiguous inputs (prompts, screenshots, Figma links) into Jira-ready user stories.",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,14 +1,15 @@
1
1
  ---
2
2
  name: jira-wiki-formatter
3
- description: Render a story into both Jira wiki markup and standard CommonMark Markdown. Outputs two artifacts so the same story is copy-pasteable into Jira and into any MD-aware tool.
3
+ description: Render a story into three files: story.standard.md and story.jira-wiki.md (PM-facing, no technical detail) plus story.dev.md (dev-facing, full technical detail).
4
4
  trigger: "internal use by story-* skills"
5
- intent: Component skill that takes a structured story (all sections drafted) and produces two output files following the templates in story-generate/templates.
6
- version: 1.0.0
5
+ intent: Component skill that takes a structured story and produces three output files following the templates in story-generate/templates.
6
+ version: 2.0.0
7
7
  inputs:
8
8
  - structured-story
9
9
  outputs:
10
- - story.jira-wiki.md
11
10
  - story.standard.md
11
+ - story.jira-wiki.md
12
+ - story.dev.md
12
13
  ---
13
14
 
14
15
  ## Purpose
@@ -25,7 +26,21 @@ Final step in `story-generate` and `story-refine`. Always last.
25
26
 
26
27
  ## Application (step-by-step)
27
28
 
28
- 1. Render `story.jira-wiki.md` using Jira's wiki markup:
29
+ ## Audience separation THREE files
30
+
31
+ | File | Audience | Technical detail |
32
+ |---|---|---|
33
+ | `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
+ | `story.dev.md` | Developer | ✅ Full — file paths, imports, Technical Considerations, technical edge cases, full DoD with commands |
36
+
37
+ **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.
38
+
39
+ **ACs in PM files must describe observable behavior only.** "A copy icon appears next to the email field and clicking it copies the value" — not "ContentCopyOutlinedIcon is rendered next to the email Typography block and calls navigator.clipboard.writeText()".
40
+
41
+ ---
42
+
43
+ 1. Render `story.jira-wiki.md` (PM-facing) using Jira's wiki markup:
29
44
  - Headings: `h1. `, `h2. `, `h3. `
30
45
  - Bold: `*text*`
31
46
  - Italic: `_text_`
@@ -33,7 +48,8 @@ Final step in `story-generate` and `story-refine`. Always last.
33
48
  - Lists: `* item`, `# item` (numbered)
34
49
  - Tables: `||header||header||` then `|cell|cell|`
35
50
  - Panels for callouts: `{panel:title=⚠️ Assumed}…{panel}`
36
- 2. Render `story.standard.md` using CommonMark:
51
+ - Strip all technical detail (see audience table above)
52
+ 2. Render `story.standard.md` (PM-facing) using CommonMark:
37
53
  - Headings: `##`, `###`
38
54
  - Bold: `**text**`
39
55
  - Italic: `*text*`
@@ -41,29 +57,28 @@ Final step in `story-generate` and `story-refine`. Always last.
41
57
  - Lists: `- item`, `1. item`
42
58
  - Tables: standard pipe tables
43
59
  - Callouts: `> ⚠️ **Assumed:** …`
44
- 3. Section model = **core + optional**.
60
+ - Strip all technical detail (see audience table above)
61
+ 3. Render `story.dev.md` (dev-facing) using CommonMark:
62
+ - Same structure as `story.standard.md` PLUS:
63
+ - Technical Considerations section (file paths, imports, API calls)
64
+ - Edge Cases section (null checks, error states, browser constraints)
65
+ - DoD includes CLI commands and file-level criteria
66
+ - Refinement log includes technical changes
67
+ 4. Section model for PM files = **core + optional (non-technical)**.
45
68
 
46
69
  **Core (always emit, in this order):**
47
70
  1. Title
48
- 2. Summary
49
- 3. User Story (As a / I want to / so that)
50
- 4. Acceptance Criteria
51
- 5. Definition of Done
52
-
53
- **Optional (emit only if non-empty, in this order, after a separator):**
54
- 6. Contexto
55
- 7. Business Goal
56
- 8. Scope
57
- 9. Out of Scope
58
- 10. Business Rules
59
- 11. Technical Considerations
60
- 12. Dependencies
61
- 13. Risks
62
- 14. Analytics
63
- 15. Edge Cases
64
-
65
- 4. **Drop any section with no real content.** An empty heading is noise. A story with only the 5 core sections is a valid output.
66
- 5. Emit both as fenced code blocks in the chat so the user can copy them. File persistence is handled by the calling skill via the `Write` tool.
71
+ 2. User Story (As a / I want to / so that)
72
+ 3. Acceptance Criteria (observable behavior only)
73
+ 4. Definition of Done (acceptance criteria only, no commands)
74
+
75
+ **Optional PM sections (emit only if non-empty):**
76
+ 5. Business Goal
77
+ 6. Scope / Out of Scope
78
+ 7. Business Rules
79
+
80
+ 5. **Drop any section with no real content.** An empty heading is noise.
81
+ 6. Emit `story.standard.md` and `story.jira-wiki.md` as fenced code blocks 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.
67
82
 
68
83
  ## Examples
69
84
 
@@ -228,10 +228,13 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
228
228
 
229
229
  10. **Render** via `[[jira-wiki-formatter]]`.
230
230
  - 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).
231
- - Use the `Write` tool to persist `story.standard.md` and `story.jira-wiki.md` to that folder (create it if it does not exist).
232
- - Also emit both as fenced code blocks in chat.
231
+ - Use the `Write` tool to persist three files to that folder (create it if it does not exist):
232
+ - `story.standard.md` PM-facing CommonMark, no technical detail
233
+ - `story.jira-wiki.md` — PM-facing Jira wiki markup, no technical detail
234
+ - `story.dev.md` — dev-facing CommonMark, full technical detail (file paths, imports, technical edge cases, full DoD with commands)
235
+ - Emit `story.standard.md` and `story.jira-wiki.md` as fenced code blocks in chat. Do NOT emit `story.dev.md` in chat.
233
236
  - Write `.storywright-context.json` to the same folder.
234
- - No other files. Never ask whether to save — always write.
237
+ - Never ask whether to save — always write all four files.
235
238
 
236
239
  11. **Log** ≤3 bullets (≤5 if SPLIT) appended at story end. Log type label is host-specific (Generation / Refinement / Split).
237
240
 
@@ -11,6 +11,7 @@ inputs:
11
11
  outputs:
12
12
  - story.standard.md
13
13
  - story.jira-wiki.md
14
+ - story.dev.md
14
15
  - .storywright-context.json
15
16
  composes:
16
17
  - _components/storywright-base
@@ -0,0 +1,27 @@
1
+ # {{Title}} — Dev Notes
2
+
3
+ > This file is the developer supplement to `story.standard.md`.
4
+ > It contains all technical detail stripped from the PM-facing outputs.
5
+
6
+ ## Technical Considerations
7
+
8
+ - {{file path or component name}} — {{what changes}}
9
+ - {{import to add/remove}}
10
+ - {{API call / SDK / feature flag / data model note}}
11
+
12
+ ## Edge Cases & Error States
13
+
14
+ - **{{axis}}:** {{technical behavior — null checks, error states, race conditions, HTTPS requirements}}
15
+
16
+ ## Definition of Done
17
+
18
+ - [ ] {{business criterion}}
19
+ - [ ] {{test command: npm run test / npm run lint}}
20
+ - [ ] {{file-level criterion: file X updated, import Y removed}}
21
+
22
+ ---
23
+
24
+ <!-- Refinement Log — full version including technical changes -->
25
+
26
+ *Refinement log*
27
+ - {{change}} — {{reason}}
@@ -11,6 +11,7 @@ inputs:
11
11
  outputs:
12
12
  - story.standard.md
13
13
  - story.jira-wiki.md
14
+ - story.dev.md
14
15
  - .storywright-context.json
15
16
  composes:
16
17
  - _components/storywright-base