Invoke repository skills with $skill-name in Codex; this mirrored copy rewrites legacy Claude /skill-name references.
Task tracker mandate: BEFORE executing any workflow or skill step, create/update task tracking for all steps and keep it synchronized as progress changes.
User-question prompts mean to ask the user directly in Codex.
Ignore Claude-specific mode-switch instructions when they appear.
Strict execution contract: when a user explicitly invokes a skill, execute that skill protocol as written.
Subagent authorization: when a skill is user-invoked or AI-detected and its protocol requires subagents, that skill activation authorizes use of the required spawn_agent subagent(s) for that task.
Do not skip, reorder, or merge protocol steps unless the user explicitly approves the deviation first.
For workflow skills, execute each listed child-skill step explicitly and report step-by-step evidence.
If a required step/tool cannot run in this environment, stop and ask the user before adapting.
Codex Project-Reference Loading (No Hooks)
Codex uses static project-reference loading instead of runtime-injected project docs.
When coding, planning, debugging, testing, or reviewing, open project docs explicitly using this routing.
Always read:
docs/project-config.json (project-specific paths, commands, modules, and workflow/test settings)
docs/project-reference/docs-index-reference.md (routes to the full docs/project-reference/* catalog)
docs/project-reference/lessons.md (always-on guardrails and anti-patterns)
Missing/stale context route: If docs/project-config.json, the docs index, lessons.md, CLAUDE.md, AGENTS.md, or any task-required reference doc is missing or stale, auto-run $project-init or the narrow setup route ($project-config, $docs-init, $scan-all, $scan --target=<key>, $claude-md-init) before ordinary project-specific work. If Codex mirrors or AGENTS.md are missing/stale, ask the user to run $sync-codex; do not auto-run it.
Situation-based docs:
Project structure/architecture/tech-stack/deployment/setup (any layer — backend, frontend, or infra): project-structure-reference.md
Spec authoring, docs/specs/ pathing, or TC format: feature-spec-reference.md, spec-system-reference.md, spec-principles.md
Behavior/public-contract changes or spec-test-code sync: workflow-spec-test-code-cycle-reference.md plus the spec docs above
Derived spec indexes/ERDs/reimplementation guides: spec-system-reference.md and source Feature Specs under docs/specs/
Integration test implementation/review: integration-test-reference.md
E2E test implementation/review: e2e-test-reference.md
Code review/audit work: code-review-rules.md plus domain docs above based on changed files
Do not read all docs blindly. Start from docs-index-reference.md, then open only relevant files for the task.
[BLOCKING] Execute skill steps in declared order. NEVER skip, reorder, or merge steps without explicit user approval.
[BLOCKING] Before each step or sub-skill call, update task tracking: set in_progress when step starts, set completed when step ends.
[BLOCKING] Every completed/skipped step MUST include brief evidence or explicit skip reason.
[BLOCKING] If Task tools are unavailable, create and maintain an equivalent step-by-step plan tracker with the same status transitions.
Quick Summary
Goal: Produce sprint-ready, INVEST-valid user stories — tech-agnostic, testable GWT criteria, evidence-cited estimates, dependency-mapped — by breaking Product Backlog Items into implementable stories via vertical slicing and SPIDR splitting, so a team with zero codebase knowledge can implement on any stack.
Summary:
Main steps (the pipeline): (1) read PBI + active plan, load domain context — module, entities, BR-IDs; (2) identify VERTICAL end-to-end slices; (3) SPIDR-split anything SP >8 (MUST) / >5 (SHOULD) until INVEST-valid; (4) write each story with min 3 GWT scenarios + 1 authorization scenario; (5) estimate bottom-up (Blast-Radius pre-pass → phase-hours → days; SP DERIVED) and emit full estimate frontmatter; (6) emit Story Dependencies table (no orphans); (7) run MANDATORY ask the user directly validation; (8) save to team-artifacts/pbis/stories/{YYMMDD}-ba-story-{slug}.md; (9) suggest $spec [mode=tests] next.
Slice VERTICALLY (thin end-to-end), NEVER horizontally (backend/frontend split) — apply SPIDR (Spike/Paths/Interfaces/Data/Rules) until each story is INVEST-valid — why: horizontal slices delay deliverable user value.
Every story is tech-agnostic + rebuild-from-scratch + demoable (AI-SDD M1-M5 and M7): no framework/class/file names in prose, carry the inherited FR-/BR- logical ID plus a [Source: namespace/service/id] abstract anchor (NEVER file:line), and every criterion states an outcome a stakeholder could SEE — reject and rework on any STOP condition.
Min 3 GIVEN/WHEN/THEN scenarios (happy + edge + error) PLUS a mandatory authorization scenario per story; every criterion has exactly ONE observable interpretation.
Estimate bottom-up (phase-hours → days × productivity factor; SP DERIVED, never the driver) with explicit test_count and Blast-Radius pass; emit full man_days_* / risk_* / blast_radius / estimate_reasoning frontmatter — why: SP-first anchors to a guess, downstream $prioritize+$plan read these fields.
Story Dependencies table is mandatory (no orphan stories) and the ask the user directly validation interview runs before handoff — NEVER auto-decide slicing/scope/effort.
MANDATORY IMPORTANT MUST ATTENTION Plan ToDo Task to READ the following project-specific reference docs:
project-structure-reference.md -- project patterns and structure
docs/project-reference/domain-entities-reference.md — Domain entity catalog, relationships, cross-service sync (read when task involves business entities/models)
docs/specs/ — Test specifications by module (read existing TCs for related features; include test story/acceptance criteria for new stories)
If file not found, search for: project documentation, coding standards, architecture docs.
Vertical Slice — Identify end-to-end slices of functionality
SPIDR Split — Apply Spike/Paths/Interfaces/Data/Rules splitting if effort >5
Write Stories — INVEST-validated stories with min 3 GIVEN/WHEN/THEN scenarios each
Validate — Interview user to confirm slicing, acceptance criteria, and effort estimates
Key Rules:
Slice VERTICALLY (thin end-to-end); NEVER horizontally (backend/frontend split) — why: a horizontal slice ships no user-visible value on its own.
SP >8 MUST ATTENTION be split; >5 SHOULD be split — apply SPIDR until each story is INVEST-valid.
Every story MUST ATTENTION carry story_points, complexity, man_days_traditional, man_days_ai — plus the risk_* / blast_radius / estimate_reasoning fields $prioritize and $plan read downstream.
SP is DERIVED from bottom-up phase-hours → days × productivity factor — NEVER the driver.
Min 3 GIVEN/WHEN/THEN scenarios (happy + edge + error) PLUS a mandatory authorization scenario; each criterion has exactly ONE observable interpretation.
Tech-agnostic prose ONLY — no framework/class/file names; anchor with [Source: namespace/service/id], NEVER file:line.
Story Dependencies table is mandatory — NEVER leave an orphan story.
Run the ask the user directly validation interview before handoff — NEVER auto-decide slicing, scope, or effort.
Frontend/UI Context (if applicable)
When the task involves frontend or UI changes, read:
Design system tokens: docs/project-reference/design-system/README.md
Greenfield Mode
Auto-detected: no existing codebase (no discovered source directories, no manifest files, no populated project-config.json) → greenfield mode switches on automatically. Planning artifacts (docs/, plans/, .claude/) do NOT count — the repository needs actual code directories with content.
When greenfield is detected:
Generate foundation PBIs instead of feature stories: infrastructure setup, project scaffold, CI/CD pipeline, first feature vertical slice
Dependency ordering: infrastructure stories BEFORE feature stories
Skip the project-structure-reference.md read — it will not exist
Include setup stories: dev environment, build tooling, deployment pipeline, monitoring
Priority order: infra → scaffold → first feature → remaining features
[CRITICAL] Architecture Scaffolding Story: FIRST story = "Architecture Scaffolding" — every OOP/SOLID base abstract class, generic interface, and infrastructure abstraction the chosen stack needs. AI self-investigates which base classes the project requires; every feature story depends on it — why: features built on an unscaffolded foundation encode the wrong abstractions permanently.
Scaffolding acceptance criteria: base classes compile/type-check, DI/IoC registrations resolve, smoke test passes
UI System Foundation Story: If the project has a frontend, generate a "UI System Foundation" story (Sprint 0) with these sub-stories:
Format: Single file with all stories (use ## headers per story)
Artifact Path (canonical convention) — Command $story → base path team-artifacts/pbis/stories/, role token ba, type story. General filename pattern: {YYMMDD}-{role}-{type}-{slug}.md → e.g. 260119-ba-story-invoice-approval.md. Slug = lowercased basename, non-alphanumeric → -, trimmed, max 50 chars.
Project Domain Context Loading
When slicing domain-related PBIs, automatically load business context.
Step 1: Detect Module
From PBI frontmatter:
Check module field
If missing, detect module from docs/specs/ directory names
Step 2: Load Feature Context
Glob("docs/specs/{module}/*.md")
Read module README (first 200 lines)
Identify related feature from related_features list
Extract existing business rules (BR-{MOD}-XXX)
Note entity names from feature docs
Step 3: Apply Domain Vocabulary
Read docs/project-config.json modules[] and docs/specs/ to detect domain vocabulary per module. Use entity names from feature docs — avoid ambiguous synonyms.
When to apply: Story SP >8 MUST ATTENTION split. SP >5 SHOULD split. SP 13 = SHOULD split into 2-3 stories. SP 21 = MUST ATTENTION split (epic-level).
Pattern
Question
Split Strategy
Spike
Unknown complexity?
Create research spike first, then stories
Paths
Multiple workflow branches?
One story per path/choice
Interfaces
Multiple UIs or APIs?
One story per interface
Data
Multiple data formats/types?
One story per data variation
Rules
Multiple business rules?
One story per rule variation
Splitting Examples
Paths: "User can pay by card OR PayPal" → Story A: Card payment, Story B: PayPal payment
Data: "Import CSV, Excel, JSON" → Story A: CSV import, Story B: Excel import, Story C: JSON import
Rules: "Different approval flows by amount" → Story A: <$1000 auto-approve, Story B: >$1000 manager approval
Size Validation
SP 1-5: ✅ Good size
SP 6-8: ⚠️ Consider splitting (apply SPIDR)
SP 13: ❌ SHOULD split into 2-3 stories
SP 21: ❌ MUST ATTENTION split — epic-level, not sprint-ready
Scenario Templates
Minimum 3 scenarios per story:
1. Happy Path (Positive)
Scenario: User successfully {completes action}
Given {user has required permissions/state}
And {required data exists}
When user {performs valid action}
Then {primary expected outcome}
And {secondary verification if needed}
2. Edge Case (Boundary)
Scenario: System handles {boundary condition}
Given {edge state: empty list, max items, zero value}
When user {attempts action at boundary}
Then {appropriate handling: pagination, warning, default}
3. Error Case (Negative)
Scenario: System prevents {invalid action}
Given {precondition}
When user {provides invalid input OR unauthorized action}
Then error message "{specific error message}"
And {system remains in valid state}
And {no partial changes saved}
4. Authorization (MANDATORY per story)
Scenario: Unauthorized user cannot {perform action}
Given user has role {unauthorized role}
When user attempts to {action}
Then system rejects with "Forbidden" or "Unauthorized"
And no data is modified
Additional Scenario Types
Performance: Response time under load
Concurrency: Simultaneous user actions
Integration: External service unavailable
AI-SDD Mandate Gate (M1-M5 and M7) — BLOCKING
See .claude/skills/shared/sdd-artifact-contract.md → "AI-SDD Mandates (M1-M7)" for BLOCKING criteria. Every generated story MUST satisfy M1-M5 and M7:
Separate intent from implementation (M1/M2): The story narrative and acceptance criteria stay tech-agnostic — describe observable business behavior, no framework/product/language/design-pattern names, no source identifiers. Keep optional hints in ## Technical Notes and source references in evidence carriers as stack-portable abstract anchors ([Source: namespace/service/id], never file:line). Prose follows docs/project-reference/spec-principles.md §3.
Logical Requirement ID (M3): Each story carries a logical requirement ID (FR-/BR-) inherited from its parent PBI as the PRIMARY citation spine; keep the [Source: namespace/service/id] abstract anchor as a SECONDARY, stack-portable carrier — KEEP it, never remove it and never replace it with file:line (physical coordinates live only in the provenance sidecar).
Testable GWT/EARS criteria (M4): Every Given/When/Then or EARS criterion has ONE valid interpretation, observable completion states, and named failure modes — no vague phrasing ("fast", "user-friendly", "handle appropriately") and no implementation details.
Rebuild-from-scratch (M5): A team with zero codebase knowledge can implement identical behavior on ANY stack from the story alone.
Business-visibility (M7): Apply the demo test to each criterion's BODY: "what would a stakeholder SEE change?" — no answer → FAIL as TECHNICAL-ONLY and drop it from the story. Every GIVEN = a state a user could arrange; every WHEN = an action a user could take; every THEN = an outcome a user could see. FAIL a WHEN that is an invocation (a handler runs, a consumer receives, a job fires, data syncs) or a THEN asserting schema/type/nullability/call-count. Judge the BODY, never the story's title or ID. Never derive the story or scenario count from an architecture inventory (handlers, consumers, jobs) — that count moves when the system is re-architected though no business behavior changed, falsifying M5.
M1 governs vocabulary; M7 governs subject matter. A technical story in impeccably tech-free prose satisfies M1 while violating M7 — "the system correctly synchronizes the record" names no framework and is still a technical case in a business costume. That gap is the most common way business specs rot. Ask what a user could SEE, not which words were used.
[STOP — rework before emitting] Reject and rework a story when ANY of these failure conditions holds:
Tech-specific prose — narrative/criteria name a framework, product, language type, or design-pattern class.
Source code reference in prose — a class/method name, file path, or namespace appears outside an evidence carrier.
Missing logical ID or evidence — no FR-/BR- ID, OR a requirement/rule with no [Source: namespace/service/id] abstract-anchor evidence (or explicit TBD (pre-implementation) marker).
Vague acceptance criteria — non-testable, non-observable, or more than one valid interpretation.
Not implementable from the artifact alone — a reader would have to read source or guess a rule, limit, role, or failure mode.
Not demoable (M7) — a criterion's body fails the demo test: its WHEN is an invocation, or its THEN asserts schema/type/nullability/call-count, or no stakeholder-visible change answers "what would they SEE?" — it is TECHNICAL-ONLY and belongs to the technical tree, not this story.
Story Artifact Template
---
id: US-{YYMMDD}-{NNN}
parent_pbi: '{PBI-ID}'
title: '{Brief story title}'
persona: '{User persona}'
priority: P1 | P2 | P3
story_points: 1 | 2 | 3 | 5 | 8 | 13
complexity: Low | Medium | High | Very High
man_days_traditional: '{ Xd (Yd code + Zd test) — from SP table }'
man_days_ai: '{ Xd (Yd code + Zd test) — from SP table with AI }'
sprint: 0 | 1 | 2 | ...
status: draft | ready | in_progress | done
module: '{ServiceA | ServiceB | ServiceC | ServiceD}'
---
# User Stories for {PBI Title}
## Story 1: {Title}
**As a** {user role}
**I want** {goal}
**So that** {benefit}
### Acceptance Criteria
#### Scenario 1: {Happy path title}
```gherkin
Given {context}
When {action}
Then {outcome}
```
#### Scenario 2: {Edge case title}
```gherkin
Given {edge state}
When {action}
Then {handling}
```
#### Scenario 3: {Error case title}
```gherkin
Given {context}
When {invalid action}
Then error "{message}"
```
---
## Story 2: {Title}
{Repeat structure...}
---
## Out of Scope
- {Explicitly excluded items}
## Story Dependencies
| Story | Depends On | Type | Reason |
| -------- | ---------- | ------------ | --------------------------------- |
| US-{NNN} | - | independent | First slice, no dependencies |
| US-{NNN} | US-{NNN} | must-after | Needs entity/API from prior story |
| US-{NNN} | US-{NNN} | can-parallel | Independent feature slice |
| US-{NNN} | US-{NNN} | blocked-by | Requires external service/infra |
## Domain Context
**Module:** {module}
**Related Feature:** {feature doc path}
**Entities:** {Entity1}, {Entity2}
**Requirement IDs (M3 — inherited from PBI):** {FR-XXX / BR-XXX — primary citation spine}
**Business Rules:** {BR-XXX references}
**Evidence (secondary, stack-portable):** {`[Source: namespace/service/id]` abstract anchor per requirement, or `TBD (pre-implementation)`}
## UI Wireframe
### Layout
{ASCII wireframe showing this story's UI slice — see UI wireframe protocol}
### Components
- **{ComponentName}** — {behavior for this story} _(tier: common | domain-shared | page/app)_
> Classify per **Component Hierarchy** in `UI wireframe protocol` — search existing libs before proposing new components.
### Interaction Flow
1. User {action} on {component}
2. System {response/feedback}
3. UI updates to show {result}
### States
| State | Behavior |
| ------- | -------------------------- |
| Default | {what user sees initially} |
| Loading | {spinner/skeleton} |
| Empty | {empty state message} |
| Error | {error handling} |
> If backend-only: `## UI Wireframe` → `N/A — Backend-only change. No UI affected.`
## Technical Notes
- {Implementation hints if needed}
## Validation Summary
**Validated:** {date}
### Confirmed
- {decision}: {user choice}
### Action Items
- [ ] {follow-up if any}
Sprint 0 / Foundation Stories (Production Readiness)
When the PBI includes a "Production Readiness Concerns" table with "Required" items, automatically generate Sprint 0 / foundation stories for each concern:
PBI Concern
Story Title
Story Points
Priority
Code linting/analyzers = Required
"Set up code linting and formatting"
1-2 SP
Must Have
Error handling setup = Required
"Set up error handling foundation"
2-3 SP
Must Have
Loading indicators = Required
"Set up loading indicator infrastructure"
1-2 SP
Must Have
Docker integration = Required
"Set up Docker development environment"
2-3 SP
Must Have
CI/CD quality gates = Required
"Set up CI/CD quality gates"
2-3 SP
Must Have
Seed data = Required
"Set up seed data / data seeder"
2-3 SP
Must Have
Data migration = Required
"Create data migration for schema changes"
1-3 SP
Must Have
Rules
Foundation stories MUST ATTENTION be completed before feature stories begin
Mark as sprint: 0 or sprint: foundation in story metadata
Each foundation story references the specific protocol section for implementation guidance
If PBI concern = "Existing", skip story generation (already set up)
If PBI concern = "No", skip story generation (explicitly opted out)
Anti-Patterns to Avoid
Anti-Pattern
Problem
Correct Approach
Horizontal slicing
"Backend story" + "Frontend story" = delays value
Vertical slice: thin end-to-end functionality
Single scenario
Missing edge/error cases
Minimum 3 scenarios: happy, edge, error
Vague criteria
"Fast", "user-friendly" untestable
Quantify: "< 200ms", "≤ 3 clicks"
Solution-speak
"Use Redis cache" constrains team
Outcome: "Results return within 200ms"
Effort >8
Won't fit sprint, hard to estimate
Apply SPIDR, split until ≤8
No error scenario
Missing negative test coverage
Always include invalid input handling
Generic persona
"As a user" too vague
Specific: "As a warehouse operator"
Key Rules
Every story set MUST ATTENTION include a Story Dependencies table — with types: must-after, can-parallel, blocked-by, independent. This enables $prioritize and $plan to respect implementation ordering.
SPIDR splits MUST ATTENTION include dependency chains — When splitting a story, declare which split stories depend on others.
No orphan stories — Every story must appear in the dependency table, even if independent.
Quality Checklist
Before completing user stories:
Each story follows "As a... I want... So that..." format
SPIDR splitting applied (effort ≤8, prefer ≤5)
At least 3 scenarios per story: happy, edge, error
All scenarios use GIVEN/WHEN/THEN format
Effort estimated in Fibonacci (1, 2, 3, 5, 8)
Stories independent (can develop in any order)
Out of scope explicitly listed
Story Dependencies table included with all stories listed
Authorization scenario included per story (unauthorized access rejection)
Seed data story included if PBI has seed data requirements
Data migration story included if PBI has schema changes
Validation interview completed
Validation Step (MANDATORY)
After creating user stories, validate with user.
Question Categories
Category
Example Question
Slicing
"Are the story slices independent enough?"
Size
"Any story >8 effort that needs further splitting?"
Scenarios
"Any acceptance criteria missing for edge cases?"
Dependencies
"Are there hidden dependencies between stories?"
Scope
"Should anything be explicitly excluded?"
Process
Generate 2-4 questions focused on slicing quality, scenarios, and dependencies
Use ask the user directly tool to interview
Document in story artifact under ## Validation Summary
Update stories based on answers (split if needed)
This step is NOT optional.
Related
Type
Reference
Role Skill
business-analyst
Command
$story
Input
$refine output (PBI)
Next Steps
$spec [mode=tests], $design-spec, $prioritize
MANDATORY: Systematic Task Breakdown for Stories
MANDATORY IMPORTANT MUST ATTENTION break down ALL stories into small, systematic todo tasks using task tracking BEFORE starting implementation. Each story MUST ATTENTION have its own set of tasks that cover:
Read & understand story — Load story artifact, acceptance criteria, domain context
Create implementation subtasks per layer — One task per file or logical unit (entity, command handler, DTO, component, service, test)
Include spec tasks — Each story MUST ATTENTION have corresponding test specifications (unit, integration, or E2E as appropriate)
Include validation task — Verify story against acceptance criteria GIVEN/WHEN/THEN after implementation
Include review task — Final quality check per story
Task Naming Convention
[Story US-{ID}] {Layer}: {Description}
Example for a "Create Invoice" story:
[Story US-001] Entity: Create Invoice entity with validation rules
[Story US-001] Command: CreateInvoiceCommand + Handler
[Story US-001] DTO: InvoiceDto with mapping
[Story US-001] API: POST /api/invoices endpoint
[Story US-001] Component: InvoiceCreateFormComponent
[Story US-001] Store: InvoiceVmStore with create action
[Story US-001] Test: Integration test for CreateInvoiceCommand
[Story US-001] Test: E2E test for invoice creation flow
[Story US-001] Review: Verify against AC scenarios
Why: Without systematic task breakdown, stories become monolithic — missed edge cases, incomplete specs, context loss during implementation.
Next Steps
MANDATORY IMPORTANT MUST ATTENTION — NO EXCEPTIONS after completing this skill, you MUST ATTENTION use ask the user directly to present these options. Do NOT skip because the task seems "simple" or "obvious" — the user decides:
"$spec [mode=tests] (Recommended)" — Generate test specifications from stories
"$pbi-mockup" — Generate HTML mockup report from PBI and stories
"$plan-validate" — If stories need validation against plan
"Skip, continue manually" — user decides
[IMPORTANT] Use task tracking to break ALL work into small tasks BEFORE starting — including tasks for each file read. This prevents context loss from long files. For simple tasks, AI MUST ATTENTION ask user whether to skip.
External Memory: For complex or lengthy work (research, analysis, scan, review), write intermediate findings and final results to a report file in plans/reports/ — prevents context loss and serves as deliverable.
Evidence Gate: MANDATORY IMPORTANT MUST ATTENTION — every claim, finding, and recommendation requires file:line proof or traced evidence with confidence percentage (>80% to act, <80% must verify first).
Estimation Framework — Bottom-up first; SP DERIVED; output min-max range when likely ≥3d. Stack-agnostic. Baseline: 3-5yr dev, 6 productive hrs/day. AI estimate assumes Claude Code + project context.
Method:
Blast Radius pass (below) — drives code AND test cost
story_points: <n>
complexity: low | medium | high | critical
man_days_traditional: '<min>-<max>d' # range when likely ≥3d; '<N>d' when <3d
man_days_ai: '<min>-<max>d'
risk_margin_pct: <n> # base + add-ons
risk_factors: [touches-complex-existing
…(truncated)
1---2name: story3description: [Project Management] Use when creating user stories from PBIs, slicing features, or breaking down requirements.4---56> Codex compatibility note:
7>
8> - Invoke repository skills with `$skill-name` in Codex; this mirrored copy rewrites legacy Claude `/skill-name` references.
9> - Task tracker mandate: BEFORE executing any workflow or skill step, create/update task tracking for all steps and keep it synchronized as progress changes.
10> - User-question prompts mean to ask the user directly in Codex.
11> - Ignore Claude-specific mode-switch instructions when they appear.
12> - Strict execution contract: when a user explicitly invokes a skill, execute that skill protocol as written.
13> - Subagent authorization: when a skill is user-invoked or AI-detected and its protocol requires subagents, that skill activation authorizes use of the required `spawn_agent` subagent(s) for that task.
14> - Do not skip, reorder, or merge protocol steps unless the user explicitly approves the deviation first.
15> - For workflow skills, execute each listed child-skill step explicitly and report step-by-step evidence.
16> - If a required step/tool cannot run in this environment, stop and ask the user before adapting.
1718<!-- CODEX:PROJECT-REFERENCE-LOADING:START -->
1920## Codex Project-Reference Loading (No Hooks)
2122Codex uses static project-reference loading instead of runtime-injected project docs.
23When coding, planning, debugging, testing, or reviewing, open project docs explicitly using this routing.
2425**Always read:**
2627- `docs/project-config.json` (project-specific paths, commands, modules, and workflow/test settings)
28- `docs/project-reference/docs-index-reference.md` (routes to the full `docs/project-reference/*` catalog)
29- `docs/project-reference/lessons.md` (always-on guardrails and anti-patterns)
3031**Missing/stale context route:** If `docs/project-config.json`, the docs index, `lessons.md`, `CLAUDE.md`, `AGENTS.md`, or any task-required reference doc is missing or stale, auto-run `$project-init` or the narrow setup route (`$project-config`, `$docs-init`, `$scan-all`, `$scan --target=<key>`, `$claude-md-init`) before ordinary project-specific work. If Codex mirrors or `AGENTS.md` are missing/stale, ask the user to run `$sync-codex`; do not auto-run it.
3233**Situation-based docs:**
3435- Project structure/architecture/tech-stack/deployment/setup (any layer — backend, frontend, or infra): `project-structure-reference.md`
36- Backend/CQRS/API/domain/entity changes: `backend-patterns-reference.md`, `domain-entities-reference.md`
37- Frontend/UI/styling/design-system: `frontend-patterns-reference.md`, `scss-styling-guide.md`, `design-system/README.md`
38- Spec authoring, `docs/specs/` pathing, or TC format: `feature-spec-reference.md`, `spec-system-reference.md`, `spec-principles.md`
39- Behavior/public-contract changes or spec-test-code sync: `workflow-spec-test-code-cycle-reference.md` plus the spec docs above
40- Derived spec indexes/ERDs/reimplementation guides: `spec-system-reference.md` and source Feature Specs under `docs/specs/`
41- Integration test implementation/review: `integration-test-reference.md`
42- E2E test implementation/review: `e2e-test-reference.md`
43- Code review/audit work: `code-review-rules.md` plus domain docs above based on changed files
4445Do not read all docs blindly. Start from `docs-index-reference.md`, then open only relevant files for the task.
4647<!-- CODEX:PROJECT-REFERENCE-LOADING:END -->
4849<!-- PROMPT-ENHANCE:STEP-TASK-ANCHOR:START -->
5051> **[BLOCKING]** Execute skill steps in declared order. NEVER skip, reorder, or merge steps without explicit user approval.
52> **[BLOCKING]** Before each step or sub-skill call, update task tracking: set `in_progress` when step starts, set `completed` when step ends.
53> **[BLOCKING]** Every completed/skipped step MUST include brief evidence or explicit skip reason.
54> **[BLOCKING]** If Task tools are unavailable, create and maintain an equivalent step-by-step plan tracker with the same status transitions.
5556<!-- PROMPT-ENHANCE:STEP-TASK-ANCHOR:END -->
5758## Quick Summary
5960**Goal:** Produce sprint-ready, INVEST-valid user stories — tech-agnostic, testable GWT criteria, evidence-cited estimates, dependency-mapped — by breaking Product Backlog Items into implementable stories via vertical slicing and SPIDR splitting, so a team with zero codebase knowledge can implement on any stack.
6162**Summary:**
6364- **Main steps (the pipeline):** (1) read PBI + active plan, load domain context — module, entities, BR-IDs; (2) identify VERTICAL end-to-end slices; (3) SPIDR-split anything SP >8 (MUST) / >5 (SHOULD) until INVEST-valid; (4) write each story with min 3 GWT scenarios + 1 authorization scenario; (5) estimate bottom-up (Blast-Radius pre-pass → phase-hours → days; SP DERIVED) and emit full estimate frontmatter; (6) emit Story Dependencies table (no orphans); (7) run MANDATORY ask the user directly validation; (8) save to `team-artifacts/pbis/stories/{YYMMDD}-ba-story-{slug}.md`; (9) suggest `$spec [mode=tests]` next.
65- Slice VERTICALLY (thin end-to-end), NEVER horizontally (backend/frontend split) — apply SPIDR (Spike/Paths/Interfaces/Data/Rules) until each story is INVEST-valid — why: horizontal slices delay deliverable user value.
66- Every story is tech-agnostic + rebuild-from-scratch + demoable (AI-SDD M1-M5 and M7): no framework/class/file names in prose, carry the inherited `FR-`/`BR-` logical ID plus a `[Source: namespace/service/id]` abstract anchor (NEVER `file:line`), and every criterion states an outcome a stakeholder could SEE — reject and rework on any STOP condition.
67- Min 3 GIVEN/WHEN/THEN scenarios (happy + edge + error) PLUS a mandatory authorization scenario per story; every criterion has exactly ONE observable interpretation.
68- Estimate bottom-up (phase-hours → days × productivity factor; SP DERIVED, never the driver) with explicit `test_count` and Blast-Radius pass; emit full `man_days_*` / `risk_*` / `blast_radius` / `estimate_reasoning` frontmatter — why: SP-first anchors to a guess, downstream `$prioritize`+`$plan` read these fields.
69- Story Dependencies table is mandatory (no orphan stories) and the ask the user directly validation interview runs before handoff — NEVER auto-decide slicing/scope/effort.
7071> **MANDATORY IMPORTANT MUST ATTENTION** Plan ToDo Task to READ the following project-specific reference docs:
72>
73> - `project-structure-reference.md` -- project patterns and structure
74> - `docs/project-reference/domain-entities-reference.md` — Domain entity catalog, relationships, cross-service sync (read when task involves business entities/models)
75> - `docs/specs/` — Test specifications by module (read existing TCs for related features; include test story/acceptance criteria for new stories)
76>
77> If file not found, search for: project documentation, coding standards, architecture docs.
7879**Workflow:**
80811. **Read PBI** — Load PBI artifact, acceptance criteria, and domain context
822. **Vertical Slice** — Identify end-to-end slices of functionality
833. **SPIDR Split** — Apply Spike/Paths/Interfaces/Data/Rules splitting if effort >5
844. **Write Stories** — INVEST-validated stories with min 3 GIVEN/WHEN/THEN scenarios each
855. **Validate** — Interview user to confirm slicing, acceptance criteria, and effort estimates
8687**Key Rules:**
8889- Slice VERTICALLY (thin end-to-end); NEVER horizontally (backend/frontend split) — why: a horizontal slice ships no user-visible value on its own.
90- SP >8 MUST ATTENTION be split; >5 SHOULD be split — apply SPIDR until each story is INVEST-valid.
91- Every story MUST ATTENTION carry `story_points`, `complexity`, `man_days_traditional`, `man_days_ai` — plus the `risk_*` / `blast_radius` / `estimate_reasoning` fields `$prioritize` and `$plan` read downstream.
92- SP is DERIVED from bottom-up phase-hours → days × productivity factor — NEVER the driver.
93- Min 3 GIVEN/WHEN/THEN scenarios (happy + edge + error) PLUS a mandatory authorization scenario; each criterion has exactly ONE observable interpretation.
94- Tech-agnostic prose ONLY — no framework/class/file names; anchor with `[Source: namespace/service/id]`, NEVER `file:line`.
95- Story Dependencies table is mandatory — NEVER leave an orphan story.
96- Run the ask the user directly validation interview before handoff — NEVER auto-decide slicing, scope, or effort.
9798### Frontend/UI Context (if applicable)
99100> When the task involves frontend or UI changes, read:
101102- Component patterns: `docs/project-reference/frontend-patterns-reference.md`
103- Styling/BEM guide: `docs/project-reference/scss-styling-guide.md`
104- Design system tokens: `docs/project-reference/design-system/README.md`
105106## Greenfield Mode
107108> **Auto-detected:** no existing codebase (no discovered source directories, no manifest files, no populated `project-config.json`) → greenfield mode switches on automatically. Planning artifacts (`docs/`, `plans/`, `.claude/`) do NOT count — the repository needs actual code directories with content.
109110**When greenfield is detected:**
1111121. Generate **foundation PBIs** instead of feature stories: infrastructure setup, project scaffold, CI/CD pipeline, first feature vertical slice
1132. Dependency ordering: infrastructure stories BEFORE feature stories
1143. Skip the `project-structure-reference.md` read — it will not exist
1154. Include setup stories: dev environment, build tooling, deployment pipeline, monitoring
1165. Priority order: infra → scaffold → first feature → remaining features
1176. **[CRITICAL] Architecture Scaffolding Story:** FIRST story = "Architecture Scaffolding" — every OOP/SOLID base abstract class, generic interface, and infrastructure abstraction the chosen stack needs. AI self-investigates which base classes the project requires; every feature story depends on it — why: features built on an unscaffolded foundation encode the wrong abstractions permanently.
1187. Scaffolding acceptance criteria: base classes compile/type-check, DI/IoC registrations resolve, smoke test passes
1198. **UI System Foundation Story:** If the project has a frontend, generate a "UI System Foundation" story (Sprint 0) with these sub-stories:
120121 | Sub-Story | SP | Priority | Depends On |
122 | ------------------------------------------------------------------------- | --- | --------- | ------------------------ |
123 | "Set up design token system" | 2-3 | Must Have | Architecture Scaffolding |
124 | "Create base layout and responsive grid" | 2-3 | Must Have | Design tokens |
125 | "Create core UI components (loading, error, empty, toast, button, input)" | 3-5 | Must Have | Design tokens + layout |
126127**Dependency rule:** All UI feature stories MUST ATTENTION depend on "UI System Foundation" stories.
128129- Each story needs happy path, edge case, and error scenario (minimum)
130- Use correct project domain vocabulary when available (check project docs for terminology)
131132**Be skeptical. Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence percentages (Idea should be more than 80%).**
133134# User Story Creation
135136Break Product Backlog Items into implementable user stories using vertical slicing and SPIDR patterns.
137138---
139140## Step 0: Locate Active Plan (if in workflow)
141142If running within a workflow (big-feature, greenfield-init, etc.):
1431441. **Search for active plan** — Glob `plans/*/plan.md` sorted by modification time, or check the current task list for plan context
1452. **Read `plan.md`** — understand project scope, architecture decisions, domain model, implementation plan
1463. **Read existing research** — `{plan-dir}/research/*.md` and `{plan-dir}/phase-*.md` for domain model, tech stack, architecture
1474. **Read `docs/project-reference/domain-entities-reference.md`** (if exists) — understand existing domain entities for accurate story scoping
1485. Use plan context to inform story slicing (architecture decisions affect how stories are split)
149150---
151152## When to Use
153154- PBI ready for story breakdown
155- Feature needs vertical slicing
156- Creating sprint-ready work items
157- Story too large (effort >8)
158159---
160161## Quick Reference
162163### Workflow
1641651. Read PBI artifact and acceptance criteria
1662. **Load domain context** (if project module detected)
1673. Identify vertical slices (end-to-end functionality)
1684. **Apply SPIDR splitting** if stories too large
1695. Apply INVEST criteria to each story
1706. Create user stories with GIVEN/WHEN/THEN (min 3 scenarios)
1717. Save to `team-artifacts/pbis/stories/`
1728. **Validate stories** (MANDATORY) - Interview user to confirm slicing, acceptance criteria, and effort
1739. Suggest next: `$spec [mode=tests]` or `$design-spec`
174175### Output
176177- **Path:** `team-artifacts/pbis/stories/{YYMMDD}-us-{pbi-slug}.md`
178- **Format:** Single file with all stories (use ## headers per story)
179180> **Artifact Path (canonical convention)** — Command `$story` → base path `team-artifacts/pbis/stories/`, role token `ba`, type `story`. General filename pattern: `{YYMMDD}-{role}-{type}-{slug}.md` → e.g. `260119-ba-story-invoice-approval.md`. Slug = lowercased basename, non-alphanumeric → `-`, trimmed, max 50 chars.
181182---
183184## Project Domain Context Loading
185186When slicing domain-related PBIs, automatically load business context.
187188### Step 1: Detect Module
189190**From PBI frontmatter:**
1911921. Check `module` field
1932. If missing, detect module from `docs/specs/` directory names
194195### Step 2: Load Feature Context
196197```
198Glob("docs/specs/{module}/*.md")
199```
2002011. Read module README (first 200 lines)
2022. Identify related feature from `related_features` list
2033. Extract existing business rules (BR-{MOD}-XXX)
2044. Note entity names from feature docs
205206### Step 3: Apply Domain Vocabulary
207208Read `docs/project-config.json` modules[] and `docs/specs/` to detect domain vocabulary per module. Use entity names from feature docs — avoid ambiguous synonyms.
209210### Step 4: Include in Story
211212```markdown
213## Domain Context
214215**Module:** {detected module}
216**Feature:** {related feature}
217**Entities:** {Entity1}, {Entity2}
218**Business Rules:** BR-{MOD}-XXX (from feature docs)
219```
220221---
222223## INVEST Criteria
224225| Criterion | Definition | Validation Question |
226| --------------- | -------------------------------- | ------------------------------------ |
227| **I**ndependent | No dependencies on other stories | Can this be developed in any order? |
228| **N**egotiable | Details can change | Is the "how" open for discussion? |
229| **V**aluable | Delivers user value | Does user get observable benefit? |
230| **E**stimable | Can estimate story points | Can team size this? (Fibonacci 1-21) |
231| **S**mall | Completable in sprint | SP ≤8? (prefer ≤5) |
232| **T**estable | Clear acceptance criteria | Can we write pass/fail tests? |
233234---
235236## SPIDR Splitting Checklist
237238**When to apply:** Story SP >8 MUST ATTENTION split. SP >5 SHOULD split. SP 13 = SHOULD split into 2-3 stories. SP 21 = MUST ATTENTION split (epic-level).
239240| Pattern | Question | Split Strategy |
241| -------------- | ---------------------------- | ----------------------------------------- |
242| **S**pike | Unknown complexity? | Create research spike first, then stories |
243| **P**aths | Multiple workflow branches? | One story per path/choice |
244| **I**nterfaces | Multiple UIs or APIs? | One story per interface |
245| **D**ata | Multiple data formats/types? | One story per data variation |
246| **R**ules | Multiple business rules? | One story per rule variation |
247248### Splitting Examples
249250**Paths:** "User can pay by card OR PayPal" → Story A: Card payment, Story B: PayPal payment
251252**Data:** "Import CSV, Excel, JSON" → Story A: CSV import, Story B: Excel import, Story C: JSON import
253254**Rules:** "Different approval flows by amount" → Story A: <$1000 auto-approve, Story B: >$1000 manager approval
255256### Size Validation
257258```
259SP 1-5: ✅ Good size
260SP 6-8: ⚠️ Consider splitting (apply SPIDR)
261SP 13: ❌ SHOULD split into 2-3 stories
262SP 21: ❌ MUST ATTENTION split — epic-level, not sprint-ready
263```
264265---
266267## Scenario Templates
268269**Minimum 3 scenarios per story:**
270271### 1. Happy Path (Positive)
272273```gherkin
274Scenario: User successfully {completes action}
275 Given {user has required permissions/state}
276 And {required data exists}
277 When user {performs valid action}
278 Then {primary expected outcome}
279 And {secondary verification if needed}
280```
281282### 2. Edge Case (Boundary)
283284```gherkin
285Scenario: System handles {boundary condition}
286 Given {edge state: empty list, max items, zero value}
287 When user {attempts action at boundary}
288 Then {appropriate handling: pagination, warning, default}
289```
290291### 3. Error Case (Negative)
292293```gherkin
294Scenario: System prevents {invalid action}
295 Given {precondition}
296 When user {provides invalid input OR unauthorized action}
297 Then error message "{specific error message}"
298 And {system remains in valid state}
299 And {no partial changes saved}
300```
301302### 4. Authorization (MANDATORY per story)
303304```gherkin
305Scenario: Unauthorized user cannot {perform action}
306 Given user has role {unauthorized role}
307 When user attempts to {action}
308 Then system rejects with "Forbidden" or "Unauthorized"
309 And no data is modified
310```
311312### Additional Scenario Types
313314**Performance:** Response time under load
315**Concurrency:** Simultaneous user actions
316**Integration:** External service unavailable
317318---
319320## AI-SDD Mandate Gate (M1-M5 and M7) — BLOCKING
321322See `.claude/skills/shared/sdd-artifact-contract.md` → "AI-SDD Mandates (M1-M7)" for BLOCKING criteria. Every generated story MUST satisfy M1-M5 and M7:
323324- **Separate intent from implementation (M1/M2):** The story narrative and acceptance criteria stay tech-agnostic — describe observable business behavior, no framework/product/language/design-pattern names, no source identifiers. Keep optional hints in `## Technical Notes` and source references in evidence carriers as stack-portable abstract anchors (`[Source: namespace/service/id]`, never `file:line`). Prose follows `docs/project-reference/spec-principles.md` §3.
325- **Logical Requirement ID (M3):** Each story carries a logical requirement ID (`FR-`/`BR-`) inherited from its parent PBI as the PRIMARY citation spine; keep the `[Source: namespace/service/id]` abstract anchor as a SECONDARY, stack-portable carrier — KEEP it, never remove it and never replace it with `file:line` (physical coordinates live only in the provenance sidecar).
326- **Testable GWT/EARS criteria (M4):** Every Given/When/Then or EARS criterion has ONE valid interpretation, observable completion states, and named failure modes — no vague phrasing ("fast", "user-friendly", "handle appropriately") and no implementation details.
327- **Rebuild-from-scratch (M5):** A team with zero codebase knowledge can implement identical behavior on ANY stack from the story alone.
328- **Business-visibility (M7):** Apply the demo test to each criterion's BODY: _"what would a stakeholder SEE change?"_ — no answer → FAIL as TECHNICAL-ONLY and drop it from the story. Every `GIVEN` = a state a user could arrange; every `WHEN` = an action a user could take; every `THEN` = an outcome a user could see. FAIL a `WHEN` that is an invocation (a handler runs, a consumer receives, a job fires, data syncs) or a `THEN` asserting schema/type/nullability/call-count. Judge the BODY, never the story's title or ID. Never derive the story or scenario count from an architecture inventory (handlers, consumers, jobs) — that count moves when the system is re-architected though no business behavior changed, falsifying M5.
329330> **M1 governs vocabulary; M7 governs subject matter.** A technical story in impeccably tech-free prose satisfies M1 while violating M7 — _"the system correctly synchronizes the record"_ names no framework and is still a technical case in a business costume. That gap is the most common way business specs rot. Ask what a user could SEE, not which words were used.
331332> **[STOP — rework before emitting]** Reject and rework a story when ANY of these failure conditions holds:
333>
334> 1. Tech-specific prose — narrative/criteria name a framework, product, language type, or design-pattern class.
335> 2. Source code reference in prose — a class/method name, file path, or namespace appears outside an evidence carrier.
336> 3. Missing logical ID or evidence — no `FR-`/`BR-` ID, OR a requirement/rule with no `[Source: namespace/service/id]` abstract-anchor evidence (or explicit `TBD (pre-implementation)` marker).
337> 4. Vague acceptance criteria — non-testable, non-observable, or more than one valid interpretation.
338> 5. Not implementable from the artifact alone — a reader would have to read source or guess a rule, limit, role, or failure mode.
339> 6. Not demoable (M7) — a criterion's body fails the demo test: its `WHEN` is an invocation, or its `THEN` asserts schema/type/nullability/call-count, or no stakeholder-visible change answers _"what would they SEE?"_ — it is TECHNICAL-ONLY and belongs to the technical tree, not this story.
340341---
342343## Story Artifact Template
344345````markdown
346---
347id: US-{YYMMDD}-{NNN}
348parent_pbi: '{PBI-ID}'
349title: '{Brief story title}'
350persona: '{User persona}'
351priority: P1 | P2 | P3
352story_points: 1 | 2 | 3 | 5 | 8 | 13
353complexity: Low | Medium | High | Very High
354man_days_traditional: '{ Xd (Yd code + Zd test) — from SP table }'
355man_days_ai: '{ Xd (Yd code + Zd test) — from SP table with AI }'
356sprint: 0 | 1 | 2 | ...
357status: draft | ready | in_progress | done
358module: '{ServiceA | ServiceB | ServiceC | ServiceD}'
359---
360361# User Stories for {PBI Title}
362363## Story 1: {Title}
364365**As a** {user role}
366**I want** {goal}
367**So that** {benefit}
368369### Acceptance Criteria
370371#### Scenario 1: {Happy path title}
372373```gherkin
374Given {context}
375When {action}
376Then {outcome}
377```
378379#### Scenario 2: {Edge case title}
380381```gherkin
382Given {edge state}
383When {action}
384Then {handling}
385```
386387#### Scenario 3: {Error case title}
388389```gherkin
390Given {context}
391When {invalid action}
392Then error "{message}"
393```
394395---
396397## Story 2: {Title}
398399{Repeat structure...}
400401---
402403## Out of Scope
404405- {Explicitly excluded items}
406407## Story Dependencies
408409| Story | Depends On | Type | Reason |
410| -------- | ---------- | ------------ | --------------------------------- |
411| US-{NNN} | - | independent | First slice, no dependencies |
412| US-{NNN} | US-{NNN} | must-after | Needs entity/API from prior story |
413| US-{NNN} | US-{NNN} | can-parallel | Independent feature slice |
414| US-{NNN} | US-{NNN} | blocked-by | Requires external service/infra |
415416## Domain Context
417418**Module:** {module}
419**Related Feature:** {feature doc path}
420**Entities:** {Entity1}, {Entity2}
421**Requirement IDs (M3 — inherited from PBI):** {FR-XXX / BR-XXX — primary citation spine}
422**Business Rules:** {BR-XXX references}
423**Evidence (secondary, stack-portable):** {`[Source: namespace/service/id]` abstract anchor per requirement, or `TBD (pre-implementation)`}
424425## UI Wireframe
426427### Layout
428429{ASCII wireframe showing this story's UI slice — see UI wireframe protocol}
430431### Components
432433- **{ComponentName}** — {behavior for this story} _(tier: common | domain-shared | page/app)_
434435> Classify per **Component Hierarchy** in `UI wireframe protocol` — search existing libs before proposing new components.
436437### Interaction Flow
4384391. User {action} on {component}
4402. System {response/feedback}
4413. UI updates to show {result}
442443### States
444445| State | Behavior |
446| ------- | -------------------------- |
447| Default | {what user sees initially} |
448| Loading | {spinner/skeleton} |
449| Empty | {empty state message} |
450| Error | {error handling} |
451452> If backend-only: `## UI Wireframe` → `N/A — Backend-only change. No UI affected.`
453454## Technical Notes
455456- {Implementation hints if needed}
457458## Validation Summary
459460**Validated:** {date}
461462### Confirmed
463464- {decision}: {user choice}
465466### Action Items
467468- [ ] {follow-up if any}
469````
470471---
472473## Sprint 0 / Foundation Stories (Production Readiness)
474475When the PBI includes a "Production Readiness Concerns" table with "Required" items, automatically generate Sprint 0 / foundation stories for each concern:
476477| PBI Concern | Story Title | Story Points | Priority |
478| --------------------------------- | ------------------------------------------ | ------------ | --------- |
479| Code linting/analyzers = Required | "Set up code linting and formatting" | 1-2 SP | Must Have |
480| Error handling setup = Required | "Set up error handling foundation" | 2-3 SP | Must Have |
481| Loading indicators = Required | "Set up loading indicator infrastructure" | 1-2 SP | Must Have |
482| Docker integration = Required | "Set up Docker development environment" | 2-3 SP | Must Have |
483| CI/CD quality gates = Required | "Set up CI/CD quality gates" | 2-3 SP | Must Have |
484| Seed data = Required | "Set up seed data / data seeder" | 2-3 SP | Must Have |
485| Data migration = Required | "Create data migration for schema changes" | 1-3 SP | Must Have |
486487### Rules
488489- Foundation stories MUST ATTENTION be completed before feature stories begin
490- Mark as `sprint: 0` or `sprint: foundation` in story metadata
491- Each foundation story references the specific protocol section for implementation guidance
492- If PBI concern = "Existing", skip story generation (already set up)
493- If PBI concern = "No", skip story generation (explicitly opted out)
494495---
496497## Anti-Patterns to Avoid
498499| Anti-Pattern | Problem | Correct Approach |
500| ------------------ | ------------------------------------------------- | --------------------------------------------- |
501| Horizontal slicing | "Backend story" + "Frontend story" = delays value | Vertical slice: thin end-to-end functionality |
502| Single scenario | Missing edge/error cases | Minimum 3 scenarios: happy, edge, error |
503| Vague criteria | "Fast", "user-friendly" untestable | Quantify: "< 200ms", "≤ 3 clicks" |
504| Solution-speak | "Use Redis cache" constrains team | Outcome: "Results return within 200ms" |
505| Effort >8 | Won't fit sprint, hard to estimate | Apply SPIDR, split until ≤8 |
506| No error scenario | Missing negative test coverage | Always include invalid input handling |
507| Generic persona | "As a user" too vague | Specific: "As a warehouse operator" |
508509---
510511## Key Rules
512513- **Every story set MUST ATTENTION include a Story Dependencies table** — with types: `must-after`, `can-parallel`, `blocked-by`, `independent`. This enables `$prioritize` and `$plan` to respect implementation ordering.
514- **SPIDR splits MUST ATTENTION include dependency chains** — When splitting a story, declare which split stories depend on others.
515- **No orphan stories** — Every story must appear in the dependency table, even if independent.
516517## Quality Checklist
518519Before completing user stories:
520521- [ ] Each story follows "As a... I want... So that..." format
522- [ ] SPIDR splitting applied (effort ≤8, prefer ≤5)
523- [ ] At least 3 scenarios per story: happy, edge, error
524- [ ] All scenarios use GIVEN/WHEN/THEN format
525- [ ] Effort estimated in Fibonacci (1, 2, 3, 5, 8)
526- [ ] Stories independent (can develop in any order)
527- [ ] Out of scope explicitly listed
528- [ ] Story Dependencies table included with all stories listed
529- [ ] Dependency types correct (must-after, can-parallel, blocked-by, independent)
530- [ ] Parent PBI linked in frontmatter
531- [ ] Domain vocabulary used correctly (if the project)
532- [ ] Authorization scenario included per story (unauthorized access rejection)
533- [ ] Seed data story included if PBI has seed data requirements
534- [ ] Data migration story included if PBI has schema changes
535- [ ] Validation interview completed
536537---
538539## Validation Step (MANDATORY)
540541After creating user stories, validate with user.
542543### Question Categories
544545| Category | Example Question |
546| ---------------- | --------------------------------------------------- |
547| **Slicing** | "Are the story slices independent enough?" |
548| **Size** | "Any story >8 effort that needs further splitting?" |
549| **Scenarios** | "Any acceptance criteria missing for edge cases?" |
550| **Dependencies** | "Are there hidden dependencies between stories?" |
551| **Scope** | "Should anything be explicitly excluded?" |
552553### Process
5545551. Generate 2-4 questions focused on slicing quality, scenarios, and dependencies
5562. Use ask the user directly tool to interview
5573. Document in story artifact under `## Validation Summary`
5584. Update stories based on answers (split if needed)
559560**This step is NOT optional.**
561562---
563564## Related
565566| Type | Reference |
567| -------------- | --------------------------------------------------- |
568| **Role Skill** | `business-analyst` |
569| **Command** | `$story` |
570| **Input** | `$refine` output (PBI) |
571| **Next Steps** | `$spec [mode=tests]`, `$design-spec`, `$prioritize` |
572573---
574575## MANDATORY: Systematic Task Breakdown for Stories
576577**MANDATORY IMPORTANT MUST ATTENTION** break down ALL stories into small, systematic todo tasks using task tracking BEFORE starting implementation. Each story MUST ATTENTION have its own set of tasks that cover:
5785791. **Read & understand story** — Load story artifact, acceptance criteria, domain context
5802. **Identify vertical slice layers** — Backend entity/command/query, frontend component/store/API, integration points
5813. **Create implementation subtasks per layer** — One task per file or logical unit (entity, command handler, DTO, component, service, test)
5824. **Include spec tasks** — Each story MUST ATTENTION have corresponding test specifications (unit, integration, or E2E as appropriate)
5835. **Include validation task** — Verify story against acceptance criteria GIVEN/WHEN/THEN after implementation
5846. **Include review task** — Final quality check per story
585586### Task Naming Convention
587588```
589590[Story US-{ID}] {Layer}: {Description}
591592```
593594Example for a "Create Invoice" story:
595596```
597598[Story US-001] Entity: Create Invoice entity with validation rules
599[Story US-001] Command: CreateInvoiceCommand + Handler
600[Story US-001] DTO: InvoiceDto with mapping
601[Story US-001] API: POST /api/invoices endpoint
602[Story US-001] Component: InvoiceCreateFormComponent
603[Story US-001] Store: InvoiceVmStore with create action
604[Story US-001] Test: Integration test for CreateInvoiceCommand
605[Story US-001] Test: E2E test for invoice creation flow
606[Story US-001] Review: Verify against AC scenarios
607608```
609610**Why:** Without systematic task breakdown, stories become monolithic — missed edge cases, incomplete specs, context loss during implementation.
611612---
613614## Next Steps
615616**MANDATORY IMPORTANT MUST ATTENTION — NO EXCEPTIONS** after completing this skill, you MUST ATTENTION use ask the user directly to present these options. Do NOT skip because the task seems "simple" or "obvious" — the user decides:
617618- **"$spec [mode=tests] (Recommended)"** — Generate test specifications from stories
619- **"$pbi-mockup"** — Generate HTML mockup report from PBI and stories
620- **"$plan-validate"** — If stories need validation against plan
621- **"Skip, continue manually"** — user decides
622623> **[IMPORTANT]** Use task tracking to break ALL work into small tasks BEFORE starting — including tasks for each file read. This prevents context loss from long files. For simple tasks, AI MUST ATTENTION ask user whether to skip.
624625> **External Memory:** For complex or lengthy work (research, analysis, scan, review), write intermediate findings and final results to a report file in `plans/reports/` — prevents context loss and serves as deliverable.
626627> **Evidence Gate:** MANDATORY IMPORTANT MUST ATTENTION — every claim, finding, and recommendation requires `file:line` proof or traced evidence with confidence percentage (>80% to act, <80% must verify first).
628629<!-- SYNC:estimation-framework -->
630631> **Estimation Framework** — Bottom-up first; SP DERIVED; output min-max range when likely ≥3d. Stack-agnostic. Baseline: 3-5yr dev, 6 productive hrs/day. AI estimate assumes Claude Code + project context.
632>
633> **Method:**
634>
635> 1. **Blast Radius pass** (below) — drives code AND test cost
636> 2. Decompose phases → hours/phase → `bottom_up_hours = Σ phase_hours`
637> 3. `likely_days = ceil(bottom_up_hours / 6) × productivity_factor`
638> 4. Sum **Risk Margin** (base + add-ons) → `max_days = likely_days × (1 + margin)`
639> 5. `min_days = likely_days × 0.9`
640> 6. Output as range when `likely_days ≥3`; single point allowed `<3` (still record margin)
641> 7. `man_days_ai` = same range × AI speedup
642> 8. `story_points` DERIVED from `likely_days` via SP-Days — NEVER driver. Disagreement >50% → trust bottom-up
643>
644> **Productivity factor:** 0.8 strong scaffolding+codegen+AI hooks · 1.0 mature default · 1.2 weak patterns · 1.5 greenfield
645>
646> **Cost Driver Heuristic (apply BEFORE work-type row):**
647>
648> - **UI dominates** in CRUD/business apps — 1.5-3x backend (states, validation, responsive, a11y, polish)
649> - **Backend dominates ONLY:** multi-aggregate invariants, cross-service contracts, schema migrations, heavy query/perf, new event flows
650>
651> **Reuse-vs-Create axis (PRIMARY lever, per layer):**
652>
653> | UI tier | Cost |
654> | -------------------------------------------- | -------- |
655> | Reuse component on existing screen | 0.1-0.3d |
656> | Add control/column to existing screen | 0.3-0.8d |
657> | Compose components into NEW screen | 1-2d |
658> | NEW screen, custom layout/states/validation | 2-4d |
659> | NEW shared/common component (themed, tested) | 3-6d+ |
660>
661> | Backend tier | Cost |
662> | ---------------------------------------------------- | --------- |
663> | Reuse query/handler from new place | 0.1-0.3d |
664> | Small update existing handler/entity | 0.3-0.8d |
665> | NEW query on existing repo/model | 0.5-1d |
666> | NEW command/handler on existing aggregate (additive) | 1-2d |
667> | NEW aggregate/entity (repo, validation, events) | 2-4d |
668> | NEW cross-service contract OR schema migration | 2-4d each |
669> | Multi-aggregate invariant / heavy domain rule | 3-5d |
670>
671> **Rule:** Sum tiers across UI+backend+tests, apply productivity factor. Reuse short-circuits tiers — call out.
672>
673> **Test-Scope drivers (compute test_count EXPLICITLY — "+tests" hand-wave is #1 failure):**
674>
675> | Driver | Count |
676> | --------------------------------- | ------------------------------------------------------ |
677> | Happy-path journeys | 1 per story / AC main flow |
678> | State-machine transitions | reachable transitions × allowed actors |
679> | Multi-entity state combos | state(A) × state(B) — REACHABLE only, not Cartesian |
680> | Authorization matrix | (owner, non-owner, elevated, unauth) × each mutation |
681> | Validation rules | 1 per required field / boundary / format / cross-field |
682> | UI states (per new screen/dialog) | happy, loading, empty, error, partial — present only |
683> | Negative paths / invariants | 1 per violatable business rule |
684>
685> | Test tier (Trad, incl. setup+assert+flake) | Cost |
686> | ------------------------------------------ | -------- |
687> | 1-5 cases, fixtures reused | 0.3-0.5d |
688> | 6-12 cases, 1 new fixture | 0.5-1d |
689> | 13-25 cases, multi-entity setup | 1-2d |
690> | 26-50 cases OR new state-machine coverage | 2-3d |
691> | >50 cases OR full E2E journey | 3-5d |
692>
693> **Test multipliers:** new fixture/seed harness +0.5d · cross-service/bus assertion +0.3d each · UI E2E ×1.5 · each new role +1-2 cases
694>
695> **Blast Radius (mandatory pre-pass — affects code AND test):**
696>
697> 1. Files/components directly modified — count
698> 2. Of those, "complex" (>500 LOC, multi-handler, central, frequently-modified) — count
699> 3. Downstream consumers (callers, event subscribers, cross-service) — list
700> 4. Shared/common code touched (multi-app blast) — yes/no
701> 5. Regression scope — areas needing re-test
702>
703> **Rule:** Complex touch → add `risk_factors`. Each downstream consumer → +1-3 regression cases. Blast >5 areas OR >2 complex → re-evaluate SPLIT before estimating.
704>
705> **Risk Margin (drives max bound):**
706>
707> | likely_days | Base margin |
708> | ------------------- | ------------------------------- |
709> | <1d trivial | +10% |
710> | 1-2d small additive | +20% |
711> | 3-4d real feature | +35% |
712> | 5-7d large | +50% |
713> | 8-10d very large | +75% |
714> | >10d | +100% AND **flag SHOULD SPLIT** |
715>
716> **Risk-factor add-ons (additive — enumerate in `risk_factors`):**
717>
718> | Factor | +margin |
719> | --------------------------------------------------------------------- | ------- |
720> | `touches-complex-existing-feature` (>500 LOC, multi-handler, central) | +20% |
721> | `cross-service-contract` change | +25% |
722> | `schema-migration-on-populated-data` | +25% |
723> | `new-tech-or-unfamiliar-pattern` | +30% |
724> | `regression-fan-out` (≥3 downstream areas re-test) | +20% |
725> | `performance-or-latency-critical` | +20% |
726> | `concurrency-race-event-ordering` | +25% |
727> | `shared-common-code` (multi-consumer/multi-app) | +25% |
728> | `unclear-requirements-or-design` | +30% |
729>
730> **Collapse rule:** total margin >100% → STOP, split (padding past 2x is dishonesty). Margin <15% on `likely_days ≥5` → under-estimated, widen.
731>
732> **Work-Type Caps (hard ceilings on `likely_days`):**
733> | Work type | Max SP | Max likely |
734> | --- | --- | --- |
735> | Single field / config flag / style fix | 1 | 0.5d |
736> | Add property to existing model + bind to existing UI | 2 | 1d |
737> | **Additive endpoint + minor UI control** (button/menu/column), reuses fixtures | **3** | **2-3d** |
738> | Additive endpoint + **NEW UI surface** OR additive multi-layer + new domain rule + 2+ test files | 5 | 3-5d |
739> | NEW model/aggregate OR migration OR cross-module contract OR heavy test (>1.5d) OR NEW UI + non-trivial backend | 8 | 5-7d |
740> | NEW UI surface + (NEW aggregate OR migration OR cross-service contract) | 13 | SHOULD split |
741> | Cross-service contract + migration combined | 13 | SHOULD split |
742> | Beyond | 21 | MUST split |
743>
744> **SP→Days (validation only):** 1=0.5d/0.25d · 2=1d/0.35d · 3=2d/0.65d · 5=4d/1.0d · 8=6d/1.5d · 13=10d/2.0d (Trad/AI likely)
745> **AI speedup:** SP 1≈2x · 2-3≈3x · 5-8≈4x · 13+≈5x. AI cost = `(code_gen × 1.3) + (test_gen × 1.3)` (30% review overhead).
746>
747> **MANDATORY frontmatter:**
748>
749> ```yaml
750> story_points: <n>
751> complexity: low | medium | high | critical
752> man_days_traditional: '<min>-<max>d' # range when likely ≥3d; '<N>d' when <3d
753> man_days_ai: '<min>-<max>d'
754> risk_margin_pct: <n> # base + add-ons
755> risk_factors: [touches-complex-existing
756757…(truncated)
Run npx skillmds@latest add duc01226/story in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
[Project Management] Use when creating user stories from PBIs, slicing features, or breaking down requirements. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Capability flags: reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
duc01226 (@duc01226) published this skill. Their other Agent Skills are listed on their SkillMD profile.