@pavp/storywright 1.12.2 → 1.13.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pavp/storywright",
3
- "version": "1.12.2",
3
+ "version": "1.13.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",
@@ -3,7 +3,7 @@ name: jira-wiki-formatter
3
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
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
6
+ version: 2.2.0
7
7
  inputs:
8
8
  - structured-story
9
9
  outputs:
@@ -40,6 +40,12 @@ Final step in `story-generate` and `story-refine`. Always last.
40
40
 
41
41
  ---
42
42
 
43
+ **Pre-emit heading guard (apply before writing any section to any file):**
44
+ - `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
+
47
+ Apply silently — no log entry needed for heading-level corrections.
48
+
43
49
  1. Render `story.jira-wiki.md` (PM-facing) using Jira's wiki markup:
44
50
  - Headings: `h1. `, `h2. `, `h3. `
45
51
  - Bold: `*text*`
@@ -108,22 +114,22 @@ h3. Definition of Done
108
114
  ### Good — CommonMark
109
115
 
110
116
  ```
111
- ## Login con Google
117
+ # Login con Google
112
118
 
113
119
  Permitir a usuarios autenticarse mediante OAuth con Google.
114
120
 
115
- ### User Story
121
+ ## User Story
116
122
  **As a** visitante nuevo
117
123
  **I want** iniciar sesión con mi cuenta de Google
118
124
  **So that** puedo evitar crear una nueva contraseña.
119
125
 
120
- ### Criterios de Aceptación
126
+ ## Criterios de Aceptación
121
127
  **AC-1: Login exitoso**
122
128
  - Given el usuario está en la pantalla de login
123
129
  - When toca "Continuar con Google" y autoriza una cuenta válida
124
130
  - Then es redirigido al dashboard en <3s
125
131
 
126
- ### Definition of Done
132
+ ## Definition of Done
127
133
  - [ ] Code merged behind feature flag
128
134
  - [ ] ACs pass in QA
129
135
  ```
@@ -3,7 +3,7 @@ name: storywright-base
3
3
  description: Shared base behavior for all storywright top-level skills. Hard rules, canonical output, terminal-only Q, context schema, mechanical deps, V audit, language detect.
4
4
  trigger: "internal use by story-* skills"
5
5
  intent: Component skill that holds the v2.2 baseline. Top-level skills (story-generate, story-refine, story-split, story-from-figma) compose this and add only their source-specific behavior on top.
6
- version: 2.3.0
6
+ version: 2.4.0
7
7
  inputs:
8
8
  - none
9
9
  outputs:
@@ -96,6 +96,14 @@ 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` and `story.jira-wiki.md`:
100
+
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
+
103
+ **BANNED** (move content to `story.dev.md`, never emit in PM files): Edge Cases, Non-Functional Requirements, NFR, Performance, Security, Accessibility, Technical Considerations, Analytics, Risks, Dependencies, Dependencias, Riesgos — and any section whose name does not appear in the ALLOWED list above.
104
+
105
+ If you find yourself writing a banned section into a PM file, stop. Move its content to `story.dev.md` instead (use `## Technical Considerations` as the target heading for Accessibility, Performance, and Security content). Do not silently drop it.
106
+
99
107
  ### 4a. Language auto-detect — expanded signals (rule E)
100
108
 
101
109
  Run cheap detection before asking. Multi-signal weighted decision:
@@ -222,13 +230,22 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
222
230
 
223
231
  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` / `story.jira-wiki.md`.
224
232
 
233
+ **Summary line (mandatory).** Generate `**Summary:**` immediately after the title — one sentence, value-focused, no heading. This line is MANDATORY in all three output files. Format: `**Summary:** <sentence>` in CommonMark files, `*Summary:* <sentence>` in the Jira wiki file. Never omit it.
234
+
235
+ 8.5. **PM section self-audit (rule H).** Before calling [[jira-wiki-formatter]], enumerate every section drafted for the PM files. For each section name:
236
+ - In Rule H ALLOWED list → keep.
237
+ - In Rule H BANNED list → move its content to `story.dev.md`.
238
+ - Not in either list → treat as BANNED, move to `story.dev.md`.
239
+ Log any moves in the Refinement Log: "Moved <Section> to dev (rule H)."
240
+ Do not proceed to step 8b until the PM draft contains only ALLOWED sections.
241
+
225
242
  8b. **Gather dev-file enrichment** (feeds `story.dev.md` only — see rule 3a). Invoke the enrichment components to populate the technical sections of the dev file:
226
243
  - `[[edge-cases]]` → `### Edge Cases` (technical failure axes)
227
244
  - `[[risks-and-dependencies]]` → `### Dependencias` + `### Riesgos`
228
245
  - `[[analytics-events]]` → `### Analytics / Eventos`
229
246
  - `[[definition-of-done]]` → full DoD with CLI commands (PM files get the acceptance-only projection)
230
247
  - `[[business-rules]]` → policy invariants (also an *optional* PM section per `[[jira-wiki-formatter]]` when non-empty)
231
- None of these may appear in the PM story body except the optional Business Rules section. Skip any component whose output is empty (drop empty sections — rule 3 / jira-wiki-formatter).
248
+ 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 / jira-wiki-formatter).
232
249
 
233
250
  9. **Run INVEST** via `[[invest-checklist]]`.
234
251
  - `READY` → render.