@thebassclef/lite 0.1.0 → 0.1.2
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/dist/cli.cjs +2 -0
- package/dist/cli.js +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/substrate/.bassclef/lite-manifest.json +999 -92
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +1 -2
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +30 -1
- package/substrate/.claude/luminaries/glenford-myers.md +230 -0
- package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
- package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
- package/substrate/.claude/luminaries/michael-feathers.md +2 -2
- package/substrate/.claude/luminaries/tony-hoare.md +170 -0
- package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
- package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
- package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
- package/substrate/.claude/rules/adr-discipline.md +120 -0
- package/substrate/.claude/rules/api-conventions.md +125 -0
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/defensive-bash.md +68 -0
- package/substrate/.claude/rules/deferred-actions.md +233 -0
- package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
- package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +3 -3
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
- package/substrate/.claude/rules/loop-discipline.md +81 -0
- package/substrate/.claude/rules/manual-prod-approval.md +100 -0
- package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
- package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/substrate/.claude/rules/new-dependency-check.md +51 -0
- package/substrate/.claude/rules/option-label-discipline.md +108 -0
- package/substrate/.claude/rules/pattern-annotation.md +100 -0
- package/substrate/.claude/rules/plain-english-discipline.md +11 -9
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
- package/substrate/.claude/rules/pr-title-shape.md +161 -0
- package/substrate/.claude/rules/prototype-workflow.md +65 -0
- package/substrate/.claude/rules/reserved-skill-names.md +123 -0
- package/substrate/.claude/rules/schema-management.md +49 -0
- package/substrate/.claude/rules/security.md +37 -0
- package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
- package/substrate/.claude/rules/skill-description-clarity.md +247 -0
- package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
- package/substrate/.claude/rules/substrate-config-schema.md +98 -0
- package/substrate/.claude/rules/test-list-discipline.md +175 -0
- package/substrate/.claude/rules/test-sufficiency.md +210 -0
- package/substrate/.claude/rules/testing-tier-config.md +145 -0
- package/substrate/.claude/rules/testing.md +38 -0
- package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
- package/substrate/.claude/rules/visual-hierarchy.md +437 -0
- package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
- package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
- package/substrate/.claude/skills/build/SKILL.md +1 -1
- package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/substrate/.claude/skills/decompose/SKILL.md +1 -1
- package/substrate/.claude/skills/diagnose/SKILL.md +1 -1
- package/substrate/.claude/skills/feynman/SKILL.md +90 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +1 -1
- package/substrate/.claude/skills/ia-model/SKILL.md +1 -1
- package/substrate/.claude/skills/interaction-design/SKILL.md +1 -1
- package/substrate/.claude/skills/interpret-input/SKILL.md +8 -8
- package/substrate/.claude/skills/journal/SKILL.md +209 -0
- package/substrate/.claude/skills/kiss/SKILL.md +1 -1
- package/substrate/.claude/skills/launch/SKILL.md +14 -23
- package/substrate/.claude/skills/lean-canvas/SKILL.md +1 -1
- package/substrate/.claude/skills/longrun/SKILL.md +45 -8
- package/substrate/.claude/skills/luminary/SKILL.md +1 -1
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +1 -1
- package/substrate/.claude/skills/onboard-repo/SKILL.md +143 -709
- package/substrate/.claude/skills/pattern-review/SKILL.md +1 -1
- package/substrate/.claude/skills/personas/SKILL.md +5 -5
- package/substrate/.claude/skills/promote/SKILL.md +1 -1
- package/substrate/.claude/skills/requirement/SKILL.md +1 -1
- package/substrate/.claude/skills/retro/SKILL.md +1 -1
- package/substrate/.claude/skills/riff/SKILL.md +1 -1
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +1 -1
- package/substrate/.claude/skills/session-end/SKILL.md +1 -1
- package/substrate/.claude/skills/session-log/SKILL.md +3 -3
- package/substrate/.claude/skills/skills/SKILL.md +1 -1
- package/substrate/.claude/skills/spec/SKILL.md +1 -1
- package/substrate/.claude/skills/sprint/SKILL.md +1 -1
- package/substrate/.claude/skills/stage/SKILL.md +1 -1
- package/substrate/.claude/skills/state-a-problem/SKILL.md +1 -1
- package/substrate/.claude/skills/temperance/SKILL.md +1 -1
- package/substrate/.claude/skills/use-case/SKILL.md +1 -1
- package/substrate/.claude/skills/user-stories/SKILL.md +1 -1
- package/substrate/.claude/skills/value-prop/SKILL.md +1 -1
- package/substrate/.claude/skills/verify/SKILL.md +1 -1
- package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/substrate/.claude/skills/whereami/SKILL.md +2 -2
- package/substrate/CONTRIBUTING.md +1 -1
- package/substrate/README.md +5 -5
- package/substrate/lib/prose-scan-boundary.sh +171 -0
- package/substrate/lib/tier-check.sh +50 -1
- package/substrate/lib/tier-dependency-audit.sh +159 -4
- package/substrate/presence/install/bassclef-sync.template.sh +1 -1
- package/substrate/scripts/generate-lite-manifest.sh +21 -5
- package/substrate/standards/adr-template.md +86 -0
- package/substrate/standards/api-conventions/nextjs.md +84 -0
- package/substrate/standards/artifact-composition.md +209 -0
- package/substrate/standards/bash-hook-safety.md +246 -0
- package/substrate/standards/branch-stacking.md +408 -0
- package/substrate/standards/code-safety-principles.md +176 -0
- package/substrate/standards/composer-prerequisites.md +155 -0
- package/substrate/standards/dependency-discipline/cargo.md +39 -0
- package/substrate/standards/dependency-discipline/gem.md +43 -0
- package/substrate/standards/dependency-discipline/go-mod.md +41 -0
- package/substrate/standards/dependency-discipline/npm.md +42 -0
- package/substrate/standards/dependency-discipline/pip.md +42 -0
- package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/substrate/standards/deployment-topology.md +69 -0
- package/substrate/standards/docs-sync-allowlist.md +4 -4
- package/substrate/standards/domain-and-dns.md +145 -0
- package/substrate/standards/frontend-stack.md +67 -0
- package/substrate/standards/frontmatter-schema.md +154 -0
- package/substrate/standards/hook-injection-discipline.md +202 -0
- package/substrate/standards/hook-install-class.md +215 -0
- package/substrate/standards/input-handler-interface.md +152 -0
- package/substrate/standards/lite-manifest-schema-changes.md +60 -0
- package/substrate/standards/luminary-matching.md +105 -0
- package/substrate/standards/migration-discipline/active-record.md +50 -0
- package/substrate/standards/migration-discipline/alembic.md +43 -0
- package/substrate/standards/migration-discipline/gorm.md +50 -0
- package/substrate/standards/migration-discipline/prisma.md +53 -0
- package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
- package/substrate/standards/mobile-ephemeral-session.md +167 -0
- package/substrate/standards/model-routing-discipline.md +160 -0
- package/substrate/standards/persona-schema.md +229 -0
- package/substrate/standards/pluggable-luminaries.md +323 -0
- package/substrate/standards/pr-body-discipline.md +115 -0
- package/substrate/standards/preview-state-schema.md +189 -0
- package/substrate/standards/reserved-skill-names.md +120 -0
- package/substrate/standards/scannable-multi-option-output.md +261 -0
- package/substrate/standards/sdlc-gates/typescript.md +57 -0
- package/substrate/standards/session-board.md +256 -0
- package/substrate/standards/state-spine-contract.md +255 -0
- package/substrate/standards/steering-hints/kiss-words.md +11 -0
- package/substrate/standards/substrate-config-schema.md +267 -0
- package/substrate/standards/tier-dependency-analysis.md +1 -1
- package/substrate/standards/tier-tag-schema.md +1 -1
- package/substrate/standards/two-layer-config.md +99 -0
- package/substrate/standards/use-case-format.md +292 -0
- package/substrate/standards/user-story-invest.md +268 -0
- package/substrate/standards/velocity-and-appetite.md +229 -0
- package/substrate/standards/voice-input-pattern.md +119 -0
- package/substrate/standards/worktree-management.md +211 -0
- package/substrate/templates/chronicle-template.md +75 -0
- package/substrate/templates/memory-proposal-template.md +77 -0
- package/substrate/templates/persona-template.md +200 -0
- package/substrate/templates/pr-faq.md +45 -0
- package/substrate/templates/secret-rotation-template.md +162 -0
- package/substrate/templates/spec-template.md +131 -0
- package/substrate/templates/use-case-template.md +194 -0
- package/substrate/templates/user-story-template.md +107 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# UC-NNN — [imperative goal title]
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Template for a Cockburn fully-dressed use case.
|
|
9
|
+
See standards/use-case-format.md for the schema + validation rules.
|
|
10
|
+
See .claude/skills/use-case/SKILL.md for the procedure.
|
|
11
|
+
|
|
12
|
+
Replace NNN with a zero-padded 3-digit number.
|
|
13
|
+
Title is imperative, no period (e.g., "Sign in with email and password").
|
|
14
|
+
Delete all <!-- comment -- > blocks before committing.
|
|
15
|
+
-->
|
|
16
|
+
|
|
17
|
+
- **Primary actor**: [persona-slug]
|
|
18
|
+
- **Goal level**: 🎯 user-goal
|
|
19
|
+
<!-- ☁️ summary (multi-session) | 🎯 user-goal (single session, default) | 🐟 subfunction (reused by ≥2 use cases) -->
|
|
20
|
+
- **Scope**: [system-under-design]
|
|
21
|
+
- **Status**: draft
|
|
22
|
+
- **Last validated**: YYYY-MM-DD
|
|
23
|
+
|
|
24
|
+
## Stakeholders + interests
|
|
25
|
+
|
|
26
|
+
<!-- At least 2 NON-ACTOR stakeholders required (beyond primary actor).
|
|
27
|
+
Examples: Compliance, Ops, Support, Billing, Legal, Security, Partners.
|
|
28
|
+
Each row feeds /decompose's -ility audit — cross-cutting concerns
|
|
29
|
+
that would otherwise get bolted into implementations later. -->
|
|
30
|
+
|
|
31
|
+
| Stakeholder | Interest |
|
|
32
|
+
|-------------|----------|
|
|
33
|
+
| [stakeholder] | [what they want to be true about this goal's execution] |
|
|
34
|
+
| [stakeholder] | [...] |
|
|
35
|
+
|
|
36
|
+
## Preconditions
|
|
37
|
+
|
|
38
|
+
<!-- Checkable state invariants the use case assumes on entry.
|
|
39
|
+
"The system is running" is throat-clearing, not a precondition.
|
|
40
|
+
Valid: "account exists," "user authenticated," "quota below limit." -->
|
|
41
|
+
|
|
42
|
+
- [state invariant 1]
|
|
43
|
+
- [state invariant 2]
|
|
44
|
+
|
|
45
|
+
## Minimal guarantees
|
|
46
|
+
|
|
47
|
+
<!-- What's true after ANY exit (success or extension).
|
|
48
|
+
Typically: audit logging, state consistency, no secret leakage. -->
|
|
49
|
+
|
|
50
|
+
- [invariant that holds on any exit]
|
|
51
|
+
|
|
52
|
+
## Success guarantees
|
|
53
|
+
|
|
54
|
+
<!-- What's true on successful completion only. -->
|
|
55
|
+
|
|
56
|
+
- [invariant that holds on success]
|
|
57
|
+
|
|
58
|
+
## Trigger
|
|
59
|
+
|
|
60
|
+
<!-- The specific event (actor action, scheduled event, external signal) that starts the flow. -->
|
|
61
|
+
|
|
62
|
+
- [triggering event]
|
|
63
|
+
|
|
64
|
+
## Main success scenario
|
|
65
|
+
|
|
66
|
+
<!-- Numbered list, 3-9 steps, alternating actor↔system.
|
|
67
|
+
No implementation language ("system calls Postgres" ❌ — say "system retrieves X").
|
|
68
|
+
>9 steps = split into subfunction use case(s). -->
|
|
69
|
+
|
|
70
|
+
1. [Actor does X]
|
|
71
|
+
2. [System responds with Y]
|
|
72
|
+
3. [Actor does Z]
|
|
73
|
+
4. [System does W]
|
|
74
|
+
5. [...]
|
|
75
|
+
|
|
76
|
+
## Extensions
|
|
77
|
+
|
|
78
|
+
<!-- EVERY step in main scenario MUST have at least one extension considered,
|
|
79
|
+
OR an explicit line: "*No extensions — [reason]*". Silence is failure.
|
|
80
|
+
|
|
81
|
+
Format: Na (step number + letter). Sub-steps: Na1, Na2, Na3.
|
|
82
|
+
|
|
83
|
+
Enumeration prompts (Cockburn):
|
|
84
|
+
1. What if actor input is invalid?
|
|
85
|
+
2. What if system can't complete step (timeout, dependency, resource)?
|
|
86
|
+
3. What if precondition silently broke?
|
|
87
|
+
4. What if actor abandons partway?
|
|
88
|
+
5. What if concurrent actor changed state?
|
|
89
|
+
-->
|
|
90
|
+
|
|
91
|
+
- **Na. [condition at step N]**:
|
|
92
|
+
- Na1. [recovery step 1]
|
|
93
|
+
- Na2. [recovery step 2]
|
|
94
|
+
- Na3. Use case ends with [outcome].
|
|
95
|
+
|
|
96
|
+
- **Nb. [another condition at step N]**:
|
|
97
|
+
- Nb1. [...]
|
|
98
|
+
- Nb2. Use case ends with [outcome].
|
|
99
|
+
|
|
100
|
+
- **Ma. [condition at step M]**:
|
|
101
|
+
- Ma1. [...]
|
|
102
|
+
|
|
103
|
+
## Technology / data variations (optional)
|
|
104
|
+
|
|
105
|
+
<!-- Use when the same logical step has multiple implementation paths
|
|
106
|
+
with different -ility characteristics. Feeds /decompose with variation
|
|
107
|
+
points needing Strategy pattern. Omit if not applicable. -->
|
|
108
|
+
|
|
109
|
+
- *Step N*: [alternative mechanism] — [when used]
|
|
110
|
+
|
|
111
|
+
## Related information
|
|
112
|
+
|
|
113
|
+
- **Non-functional requirements**: [rate limits, latency SLOs, accessibility, etc.]
|
|
114
|
+
- **References**: [specs, ADRs, canvases, external docs]
|
|
115
|
+
- **Sliced by stories**: [US-NNN, US-NNN, ...]
|
|
116
|
+
- **JTBD traceability**: [J-N — job-statement]
|
|
117
|
+
- **VPC traceability** (if applicable): [PR-N or GC-N — item]
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Worked example — sign in with email and password
|
|
122
|
+
|
|
123
|
+
<!-- Keep this worked example in the template for reference;
|
|
124
|
+
/use-case skill strips it when emitting a new file. -->
|
|
125
|
+
|
|
126
|
+
# UC-001 — Sign in with email and password
|
|
127
|
+
|
|
128
|
+
- **Primary actor**: cofounder-pair
|
|
129
|
+
- **Goal level**: 🎯 user-goal
|
|
130
|
+
- **Scope**: POA web UI + auth service
|
|
131
|
+
- **Status**: accepted
|
|
132
|
+
- **Last validated**: 2026-04-21
|
|
133
|
+
|
|
134
|
+
## Stakeholders + interests
|
|
135
|
+
|
|
136
|
+
| Stakeholder | Interest |
|
|
137
|
+
|-------------|----------|
|
|
138
|
+
| Compliance | Every attempt logged with IP + user-agent |
|
|
139
|
+
| Ops | No password or partial hash leaks into logs |
|
|
140
|
+
| Support | Failed-auth reason visible in support tool (not actor) |
|
|
141
|
+
| Billing | Successful auth increments MAU counter |
|
|
142
|
+
|
|
143
|
+
## Preconditions
|
|
144
|
+
|
|
145
|
+
- cofounder-pair account exists in the user table
|
|
146
|
+
- Password has been set (not null)
|
|
147
|
+
|
|
148
|
+
## Minimal guarantees
|
|
149
|
+
|
|
150
|
+
- Audit log entry written with timestamp + outcome + user-ID (or null for failed lookup)
|
|
151
|
+
- No password or hash value written to logs
|
|
152
|
+
|
|
153
|
+
## Success guarantees
|
|
154
|
+
|
|
155
|
+
- Valid session cookie issued with 24h TTL
|
|
156
|
+
- MAU counter incremented for the actor's tenant
|
|
157
|
+
|
|
158
|
+
## Trigger
|
|
159
|
+
|
|
160
|
+
- Actor submits email + password form
|
|
161
|
+
|
|
162
|
+
## Main success scenario
|
|
163
|
+
|
|
164
|
+
1. Actor submits email + password.
|
|
165
|
+
2. System looks up account by email.
|
|
166
|
+
3. System verifies password against stored hash.
|
|
167
|
+
4. System issues session cookie with 24h TTL.
|
|
168
|
+
5. System redirects to post-auth landing page.
|
|
169
|
+
|
|
170
|
+
## Extensions
|
|
171
|
+
|
|
172
|
+
- **2a. Email not found**:
|
|
173
|
+
- 2a1. System displays generic "Invalid credentials" (no user enumeration).
|
|
174
|
+
- 2a2. Audit log entry written with null user-ID.
|
|
175
|
+
- 2a3. Use case ends with actor unauthenticated.
|
|
176
|
+
- **3a. Password mismatch**:
|
|
177
|
+
- 3a1. System displays generic "Invalid credentials."
|
|
178
|
+
- 3a2. Audit log entry written with user-ID + "pw-mismatch" reason.
|
|
179
|
+
- 3a3. Use case ends with actor unauthenticated.
|
|
180
|
+
- **3b. Account locked (rate-limit exceeded)**:
|
|
181
|
+
- 3b1. System displays "Account temporarily locked — try again in N minutes."
|
|
182
|
+
- 3b2. Audit log entry written with "lockout" reason.
|
|
183
|
+
- 3b3. Use case ends with actor unauthenticated.
|
|
184
|
+
- **4a. Session issue fails (transient)**:
|
|
185
|
+
- 4a1. System displays "Try again" error.
|
|
186
|
+
- 4a2. Audit log written with "session-issue-failure" + error code.
|
|
187
|
+
- 4a3. Use case ends with actor unauthenticated.
|
|
188
|
+
|
|
189
|
+
## Related information
|
|
190
|
+
|
|
191
|
+
- **Non-functional requirements**: p95 auth latency <500ms; rate-limit 5 attempts per email per 15min
|
|
192
|
+
- **References**: ADR-003 session management, standards/security.md
|
|
193
|
+
- **Sliced by stories**: US-001 (happy path), US-002 (rate limit UX), US-003 (audit log)
|
|
194
|
+
- **JTBD traceability**: J1 — "Sign in quickly without re-typing credentials on every session"
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# US-NNN — [Imperative title — what the persona accomplishes]
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
Bassclef user story template. INVEST-shaped per
|
|
9
|
+
standards/user-story-invest.md. Produced by /user-stories skill.
|
|
10
|
+
|
|
11
|
+
Save location:
|
|
12
|
+
Per-story: docs/user-stories/US-NNN-[slug].md (preferred —
|
|
13
|
+
granular Git history, easier review)
|
|
14
|
+
Batch: docs/user-stories/[iteration-slug].md (acceptable
|
|
15
|
+
for small iterations or bulk import)
|
|
16
|
+
|
|
17
|
+
Filename basename MUST match the US-NNN ID.
|
|
18
|
+
|
|
19
|
+
Delete this comment block after copy-paste.
|
|
20
|
+
-->
|
|
21
|
+
|
|
22
|
+
**ID**: US-NNN
|
|
23
|
+
**Iteration**: [iteration-bet path or slug]
|
|
24
|
+
**Status**: new | refined | in-progress | done | killed
|
|
25
|
+
**INVEST**: PASS | PASS-WARN | WARN | FAIL (computed by /user-stories validate)
|
|
26
|
+
**Estimate**: [story points / t-shirt / hours — team convention]
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Story
|
|
31
|
+
|
|
32
|
+
**As a** [persona slug — e.g., `couple-founders`, NOT "user"]
|
|
33
|
+
**I want to** [observable, testable outcome — what the persona does or experiences, NOT internal mechanism]
|
|
34
|
+
**So that** [benefit grounded in VPC entry or JTBD outcome]
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Traceability
|
|
39
|
+
|
|
40
|
+
<!--
|
|
41
|
+
REQUIRED: Persona + JTBD. SHOULD: VPC + use-case (when present).
|
|
42
|
+
Stories without JTBD trace are red flags per
|
|
43
|
+
standards/user-story-invest.md.
|
|
44
|
+
-->
|
|
45
|
+
|
|
46
|
+
- **Persona**: [slug] — `docs/personas/[slug].md`
|
|
47
|
+
- **JTBD**: [J-N: job statement] — `docs/design/personas/[persona]/jtbds.md#J-N`
|
|
48
|
+
- **VPC entry** (when present): [PR-N or GC-N] — `docs/value-prop-canvas/[persona].md`
|
|
49
|
+
- **Use-case line** (when /use-case exists): [UC-N step Xa] — `docs/use-cases/[uc-slug].md`
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Acceptance criteria
|
|
54
|
+
|
|
55
|
+
<!--
|
|
56
|
+
Each criterion = one test assertion. Concrete, observable,
|
|
57
|
+
threshold-bearing where applicable. NOT "works well" / "is intuitive".
|
|
58
|
+
Cover happy path + at least one edge / non-functional concern.
|
|
59
|
+
-->
|
|
60
|
+
|
|
61
|
+
- [ ] [Observable behavior — written as a test assertion]
|
|
62
|
+
- [ ] [Edge case from CTA decision points or use-case extension]
|
|
63
|
+
- [ ] [Non-functional concern when applicable: performance threshold, accessibility, error handling]
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## INVEST self-check
|
|
68
|
+
|
|
69
|
+
<!--
|
|
70
|
+
Each letter answered briefly. Validate with /user-stories validate.
|
|
71
|
+
Failing one letter = WARN; failing multiple = FAIL.
|
|
72
|
+
-->
|
|
73
|
+
|
|
74
|
+
- **I** (Independent): [why this story can ship without other stories shipping first]
|
|
75
|
+
- **N** (Negotiable): [what's flexible in implementation vs. what's fixed]
|
|
76
|
+
- **V** (Valuable): [observable value to the named persona — not internal/refactor value]
|
|
77
|
+
- **E** (Estimable): [team can estimate within ~30 min refinement]
|
|
78
|
+
- **S** (Small): [fits in one iteration / sprint — typically 1-5 days]
|
|
79
|
+
- **T** (Testable): [acceptance criteria are concrete, observable, automatable]
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Notes
|
|
84
|
+
|
|
85
|
+
<!--
|
|
86
|
+
Optional. Conversation log, open questions, deferred decisions,
|
|
87
|
+
rejection criteria. Stories are conversation tokens — capture the
|
|
88
|
+
conversation here.
|
|
89
|
+
-->
|
|
90
|
+
|
|
91
|
+
- [Open question for refinement]
|
|
92
|
+
- [Deferred decision]
|
|
93
|
+
- [Constraint discovered during discussion]
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Splits / dependencies
|
|
98
|
+
|
|
99
|
+
<!--
|
|
100
|
+
Optional. If this story was split from a larger one, name the parent.
|
|
101
|
+
If it has acceptable dependencies (infrastructure already in place),
|
|
102
|
+
surface them.
|
|
103
|
+
-->
|
|
104
|
+
|
|
105
|
+
- **Split from**: US-NNN (if applicable)
|
|
106
|
+
- **Splits to**: [if this is the parent of others]
|
|
107
|
+
- **Acceptable dependencies**: [infrastructure / platform reality — NOT story dependencies]
|