@pavp/storywright 1.12.2 → 1.13.1
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
|
@@ -3,7 +3,7 @@ name: acceptance-criteria
|
|
|
3
3
|
description: Write acceptance criteria for a user story in Given/When/Then style. Covers happy path, edge cases, and explicit non-goals. Returns only the AC block, never a full story.
|
|
4
4
|
trigger: "internal use by story-* skills"
|
|
5
5
|
intent: Component skill that produces a complete, testable acceptance-criteria block. Pure renderer — does not ask the user questions; relies on context already gathered upstream.
|
|
6
|
-
version: 1.
|
|
6
|
+
version: 1.1.0
|
|
7
7
|
inputs:
|
|
8
8
|
- story-context
|
|
9
9
|
- edge-cases-block
|
|
@@ -38,8 +38,8 @@ Invoked by `story-generate` and `story-refine` after the body of the story is dr
|
|
|
38
38
|
- Then <observable outcome>
|
|
39
39
|
- And <secondary observable outcome> (optional)
|
|
40
40
|
```
|
|
41
|
-
6. Number ACs `AC-1`, `AC-2`, …. Stable numbering — never renumber when adding new ones in iterations.
|
|
42
|
-
7. Emit only the AC block. Do NOT include explanations,
|
|
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 (`[[jira-wiki-formatter]]`) owns the `## Acceptance Criteria` heading.
|
|
43
43
|
|
|
44
44
|
## Examples
|
|
45
45
|
|
|
@@ -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.
|
|
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
|
-
|
|
117
|
+
# Login con Google
|
|
112
118
|
|
|
113
119
|
Permitir a usuarios autenticarse mediante OAuth con Google.
|
|
114
120
|
|
|
115
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
6
|
+
version: 2.5.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:
|
|
@@ -180,7 +188,7 @@ Mechanical counter. Apply the table — do NOT eyeball:
|
|
|
180
188
|
- ...
|
|
181
189
|
|
|
182
190
|
#### Acceptance Criteria
|
|
183
|
-
-
|
|
191
|
+
**AC-1: [single-outcome scenario name]**
|
|
184
192
|
- **Given:** [context — surface nouns here drive dep matrix per rule 10]
|
|
185
193
|
- **and Given:** [context]
|
|
186
194
|
- **When:** [single trigger]
|
|
@@ -198,6 +206,10 @@ Mechanical counter. Apply the table — do NOT eyeball:
|
|
|
198
206
|
|
|
199
207
|
NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No Assumptions block (assumptions get `⚠️ Assumed` inline or are resolved via `AskUserQuestion`). No standalone INVEST section — verdict belongs in the log only.
|
|
200
208
|
|
|
209
|
+
**Title — no story-number prefix.** The title is the bare story name. NEVER prefix it with a story/sequence number (`Historia 00 —`, `Story 3:`, `HU-01 -`, or any equivalent). Sequence belongs in the ticket ID / filename, not the heading. One title heading, one scheme, every file.
|
|
210
|
+
|
|
211
|
+
**AC numbering — one scheme only: `AC-N`.** Every acceptance criterion is labelled `**AC-1:**`, `**AC-2:**`, … in ALL output files and ALL languages — never `CA-01`, `Criterio 1`, `Escenario 1`, or any localized variant. The label `AC` is fixed; only the scenario title after it is translated. Numbering is stable: append, never renumber existing ACs across iterations (see `[[acceptance-criteria]]`).
|
|
212
|
+
|
|
201
213
|
## Application (step-by-step — every skill follows this skeleton)
|
|
202
214
|
|
|
203
215
|
0. **Detect companion sources** (image, figma-link, accompanying text). Run conflict detection against the primary input. Run chrome detection using rule 7. Surface conflicts as BLOCKING `AskUserQuestion`.
|
|
@@ -222,13 +234,26 @@ NOTHING else. No NFR block. No Edge Cases enumeration. No Dependencies prose. No
|
|
|
222
234
|
|
|
223
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` / `story.jira-wiki.md`.
|
|
224
236
|
|
|
237
|
+
**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.
|
|
238
|
+
|
|
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
|
+
|
|
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
|
+
|
|
243
|
+
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:
|
|
244
|
+
- In Rule H ALLOWED list → keep.
|
|
245
|
+
- In Rule H BANNED list → move its content to `story.dev.md`.
|
|
246
|
+
- Not in either list → treat as BANNED, move to `story.dev.md`.
|
|
247
|
+
Log any moves in the Refinement Log: "Moved <Section> to dev (rule H)."
|
|
248
|
+
Do not proceed to step 8b until the PM draft contains only ALLOWED sections.
|
|
249
|
+
|
|
225
250
|
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
251
|
- `[[edge-cases]]` → `### Edge Cases` (technical failure axes)
|
|
227
252
|
- `[[risks-and-dependencies]]` → `### Dependencias` + `### Riesgos`
|
|
228
253
|
- `[[analytics-events]]` → `### Analytics / Eventos`
|
|
229
254
|
- `[[definition-of-done]]` → full DoD with CLI commands (PM files get the acceptance-only projection)
|
|
230
255
|
- `[[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).
|
|
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 / jira-wiki-formatter).
|
|
232
257
|
|
|
233
258
|
9. **Run INVEST** via `[[invest-checklist]]`.
|
|
234
259
|
- `READY` → render.
|