@thebassclef/lite 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +65 -0
- package/dist/cli.js +65 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- package/package.json +1 -1
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: use-case
|
|
4
|
+
description: "Produce Cockburn-style use cases \u2014 main success scenario, numbered extensions, preconditions, postconditions, and stakeholders. Closes the gap between /user-stories and /spec. Distinct from /task-scenarios (UX narrative)."
|
|
5
|
+
problem: "Requirements go straight to code without a main success scenario. Extension paths get invented per PR."
|
|
6
|
+
value: "Cockburn-style use cases with numbered extensions and pre/postcondition contracts."
|
|
7
|
+
inputs: [A feature or persona-scoped scope]
|
|
8
|
+
outputs: [Fully-dressed use case, Main success scenario plus extensions, Pre/postconditions]
|
|
9
|
+
user_invocable: true
|
|
10
|
+
disable_model_invocation: false
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# /use-case — Cockburn Behavior Spec
|
|
14
|
+
|
|
15
|
+
Produce goal-level behavior specs in the fully-dressed format per @luminary alistair-cockburn (*Writing Effective Use Cases*, 2000). Forces systematic extension enumeration (1a, 1b, 2a), surfaces preconditions + postconditions as first-class fields, captures stakeholders + interests so non-actor concerns (compliance, audit, -ilities) reach `/decompose`.
|
|
16
|
+
|
|
17
|
+
## When to invoke
|
|
18
|
+
|
|
19
|
+
- After `/personas`, `/jtbd-tasks`, and ideally `/value-prop-canvas`
|
|
20
|
+
have produced upstream artifacts
|
|
21
|
+
- Before `/user-stories` — write the goal-level spec first, then
|
|
22
|
+
slice into INVEST stories with traceability back to use-case lines
|
|
23
|
+
- Before `/interaction-design` + `/decompose` — use-case lines map
|
|
24
|
+
directly to state diagrams and responsibilities
|
|
25
|
+
- Whenever a feature spans multiple actor steps with alternate flows
|
|
26
|
+
(anything with "if X, otherwise Y" logic is a candidate)
|
|
27
|
+
|
|
28
|
+
**Do NOT invoke for**:
|
|
29
|
+
- Single-step CRUD (no extensions, no goals beyond the step — story is enough)
|
|
30
|
+
- UX research (that's `/task-scenarios`)
|
|
31
|
+
- Positioning (that's `/value-prop` or `/value-prop-canvas`)
|
|
32
|
+
- System architecture (that's ADRs + `/architect-review`)
|
|
33
|
+
|
|
34
|
+
## Distinction from adjacent artifacts
|
|
35
|
+
|
|
36
|
+
Cockburn (2024) and NN/G both emphasize that these four are
|
|
37
|
+
**distinct artifacts** — not competing framings. `/use-case`
|
|
38
|
+
occupies the SPEC seat:
|
|
39
|
+
|
|
40
|
+
| Artifact | Purpose | Format | Primary consumer |
|
|
41
|
+
|----------|---------|--------|------------------|
|
|
42
|
+
| **JTBDs** | WHY (job being hired) | Outcome statement | PM, strategist |
|
|
43
|
+
| **Task scenarios** (NN/G) | CONTEXT (day-in-the-life narrative) | Story prose | UX researcher, `/synthetic-user` |
|
|
44
|
+
| **User stories** (Cohn/Wake) | WHAT (backlog tokens for incremental delivery) | As-a-I-want-So-that + INVEST | Developer, sprint planner |
|
|
45
|
+
| **Use cases** (Cockburn) | SPEC (system behavior for complete goal) | Structured: goal + main scenario + extensions + pre/post + stakeholders | Architect, `/decompose`, `/verify` |
|
|
46
|
+
|
|
47
|
+
A use case answers: *"What must the system do for this actor to
|
|
48
|
+
achieve this goal, including every branch, failure, and exit?"*
|
|
49
|
+
Not "how" (implementation) and not "why" (value prop) — **what
|
|
50
|
+
behavior the system exhibits, exhaustively**.
|
|
51
|
+
|
|
52
|
+
## Sources read
|
|
53
|
+
|
|
54
|
+
- @luminary alistair-cockburn — *Writing Effective Use Cases* (2000). Origin of the fully-dressed format, extension enumeration rules, goal levels (user-goal / subfunction / summary), precondition + guarantees discipline, stakeholders+interests practice. Every rule in this skill's procedure traces back to this text.
|
|
55
|
+
- @luminary alistair-cockburn — *Unifying user stories, use cases, and story maps* (2024). Establishes the use-case↔user-story↔story-map distinction; this skill respects the boundaries.
|
|
56
|
+
- `.claude/skills/personas/SKILL.md`, `.claude/skills/jtbd-tasks/SKILL.md`,
|
|
57
|
+
`.claude/skills/value-prop-canvas/SKILL.md` — upstream artifacts
|
|
58
|
+
- `.claude/skills/user-stories/SKILL.md` — downstream consumer;
|
|
59
|
+
stories slice use-case lines with traceability (UC-N step Xa)
|
|
60
|
+
- `.claude/skills/interaction-design/SKILL.md` — renders use-case
|
|
61
|
+
main scenario + extensions as state + sequence diagrams
|
|
62
|
+
- `.claude/skills/decompose/SKILL.md` — consumes use-case as
|
|
63
|
+
alternative input to sequence diagrams; stakeholders+interests
|
|
64
|
+
drive the -ility audit
|
|
65
|
+
- `.claude/skills/verify/SKILL.md` — use-case lines → test
|
|
66
|
+
assertions (every step + every extension = at least one assertion)
|
|
67
|
+
- `standards/use-case-format.md` — companion standard (this skill's
|
|
68
|
+
standard; codifies Cockburn schema + extension rules +
|
|
69
|
+
stakeholders+interests discipline)
|
|
70
|
+
- `templates/use-case-template.md` — fully-dressed template
|
|
71
|
+
|
|
72
|
+
## What I'm NOT reading (with reason)
|
|
73
|
+
|
|
74
|
+
- Full Cockburn 2000 book — the rules needed are well-established
|
|
75
|
+
(main scenario / extensions / pre/post / stakeholders) and
|
|
76
|
+
captured in the companion standard. Cited, not reconstructed.
|
|
77
|
+
- Other use-case notation styles (RUP, "Use Case 2.0" Jacobson
|
|
78
|
+
variants) — Cockburn is the bassclef shape for this skill.
|
|
79
|
+
Alternative styles can be adopted later with explicit ADR.
|
|
80
|
+
- `.claude/skills/spec/SKILL.md` full body — /spec consumes
|
|
81
|
+
use-cases downstream; this skill's output shape is defined by
|
|
82
|
+
the Cockburn format, not by /spec's input expectations.
|
|
83
|
+
|
|
84
|
+
## Usage
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
/use-case → produce use case(s) from current iteration goal scope
|
|
88
|
+
/use-case [ticket-ref] → produce from a specific ticket / spec / canvas
|
|
89
|
+
/use-case from-jtbd [JTBD slug] → derive use case for one JTBD (primary goal)
|
|
90
|
+
/use-case from-user-story [US-NNN] → reverse-engineer: a story that's grown complex enough to need a use-case backing
|
|
91
|
+
/use-case validate [path] → audit existing use case against Cockburn schema + extension enumeration
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Procedure
|
|
95
|
+
|
|
96
|
+
### Step 1: Resolve inputs
|
|
97
|
+
|
|
98
|
+
Read upstream artifacts in this order. Halt with a useful warning
|
|
99
|
+
if a required input is missing:
|
|
100
|
+
|
|
101
|
+
1. **Personas** — `docs/personas/*.md` (preferred) or
|
|
102
|
+
`docs/design/personas/*.md` (legacy). Use-case's **primary
|
|
103
|
+
actor** MUST be a persona slug, not "user."
|
|
104
|
+
2. **JTBDs** — `docs/design/personas/[persona]/jtbds.md` or
|
|
105
|
+
equivalent. Each use case has a single **goal** that traces to
|
|
106
|
+
a JTBD outcome. Halt if no JTBDs for the scope in question
|
|
107
|
+
(warn the operator; offer to run `/jtbd-tasks` first).
|
|
108
|
+
3. **Value Prop Canvas** (optional) — `docs/value-prop-canvas/*.md`.
|
|
109
|
+
When present, Pain-Relievers + Gain-Creators ground the "why
|
|
110
|
+
this goal matters" framing in the stakeholders+interests block.
|
|
111
|
+
4. **Iteration bet or canvas scope** — if invoked without a ticket,
|
|
112
|
+
read the active iteration goal's scope statement.
|
|
113
|
+
|
|
114
|
+
### Step 2: Choose goal level
|
|
115
|
+
|
|
116
|
+
Per Cockburn, every use case has a **goal level**. Picking the
|
|
117
|
+
right one prevents the "use case that tries to do everything"
|
|
118
|
+
failure mode.
|
|
119
|
+
|
|
120
|
+
| Level | Symbol | Description | Example |
|
|
121
|
+
|-------|--------|-------------|---------|
|
|
122
|
+
| **Summary** | ☁️ (cloud) | Multi-session, multi-actor, strategic outcome | "Onboard a new tenant" |
|
|
123
|
+
| **User goal** | 🎯 (sea level) | Single actor, single session, observable completion | "Submit an expense report" |
|
|
124
|
+
| **Subfunction** | 🐟 (underwater) | Component of a user-goal; not worth standalone use-case unless reused | "Validate expense receipt" |
|
|
125
|
+
|
|
126
|
+
**Default to user-goal** (🎯). Summary-level only when the work
|
|
127
|
+
genuinely spans sessions. Subfunction only when the same behavior
|
|
128
|
+
is reused by 2+ user-goal use cases.
|
|
129
|
+
|
|
130
|
+
### Step 3: Draft the fully-dressed use case
|
|
131
|
+
|
|
132
|
+
Use the template at `templates/use-case-template.md`.
|
|
133
|
+
Required fields:
|
|
134
|
+
|
|
135
|
+
- **Use case ID + title** — `UC-NNN — [imperative goal]`
|
|
136
|
+
- **Primary actor** — persona slug
|
|
137
|
+
- **Goal level** — ☁️ / 🎯 / 🐟
|
|
138
|
+
- **Scope** — system under design (e.g., "POA backend + web UI")
|
|
139
|
+
- **Stakeholders + interests** — table: who cares, what they want
|
|
140
|
+
- **Preconditions** — what's true before the use case fires
|
|
141
|
+
- **Minimal guarantees** — what's true after, regardless of outcome
|
|
142
|
+
- **Success guarantees** — what's true after success
|
|
143
|
+
- **Trigger** — event that starts the use case
|
|
144
|
+
- **Main success scenario** — numbered steps, actor↔system alternating
|
|
145
|
+
- **Extensions** — Na Nb format, mapped to step N
|
|
146
|
+
- **Technology/data variations** (optional) — alternate mechanisms at a step
|
|
147
|
+
- **Related information** — non-functional requirements, references
|
|
148
|
+
|
|
149
|
+
Every step numbered. Every extension numbered per Cockburn's Na Nb
|
|
150
|
+
convention (1a = first extension at step 1, 1b = second extension
|
|
151
|
+
at step 1, 2a = first extension at step 2, etc.).
|
|
152
|
+
|
|
153
|
+
### Step 4: Extension enumeration discipline
|
|
154
|
+
|
|
155
|
+
This is the step most often skipped. Cockburn's rule: **enumerate
|
|
156
|
+
every way the main scenario can branch, fail, or exit early**.
|
|
157
|
+
|
|
158
|
+
For each step N in the main scenario, ask:
|
|
159
|
+
|
|
160
|
+
1. What if the actor's input is invalid?
|
|
161
|
+
2. What if the system can't complete the step (timeout, dependency, resource limit)?
|
|
162
|
+
3. What if a precondition silently broke?
|
|
163
|
+
4. What if the actor abandons partway?
|
|
164
|
+
5. What if a concurrent actor changed state?
|
|
165
|
+
|
|
166
|
+
Each yes → an extension line. Name the extension with the
|
|
167
|
+
triggering condition + the recovery path:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
3a. Email already registered:
|
|
171
|
+
3a1. System displays error + offers password reset
|
|
172
|
+
3a2. Use case ends with actor unauthenticated
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Extension paths can themselves have sub-extensions (3a1a, 3a1b).
|
|
176
|
+
Keep nesting to 2 levels max; deeper usually means the extension
|
|
177
|
+
should be its own subfunction use case.
|
|
178
|
+
|
|
179
|
+
### Step 5: Stakeholders + interests — drive the -ility audit
|
|
180
|
+
|
|
181
|
+
The stakeholders+interests block is what makes a use case feed
|
|
182
|
+
`/decompose`'s -ility audit correctly. For each **non-actor** party
|
|
183
|
+
with a stake in this goal, record:
|
|
184
|
+
|
|
185
|
+
| Stakeholder | Interest |
|
|
186
|
+
|-------------|----------|
|
|
187
|
+
| Compliance | Audit trail of every auth attempt |
|
|
188
|
+
| Ops | No secret leakage into logs |
|
|
189
|
+
| Support | Failed-auth reason visible in support tool |
|
|
190
|
+
| Billing | Auth event triggers usage counter |
|
|
191
|
+
|
|
192
|
+
Every row becomes a non-functional requirement `/decompose` must
|
|
193
|
+
account for. Without this block, cross-cutting concerns (audit,
|
|
194
|
+
observability, compliance, rate-limiting) get bolted onto
|
|
195
|
+
implementations later — the exact Langfuse-inside-HaikuImputer
|
|
196
|
+
class of failure the `/decompose` skill exists to prevent.
|
|
197
|
+
|
|
198
|
+
### Step 6: Validation
|
|
199
|
+
|
|
200
|
+
Walk the drafted use case through the Cockburn validation
|
|
201
|
+
checklist from `standards/use-case-format.md`:
|
|
202
|
+
|
|
203
|
+
| Check | Fail signal |
|
|
204
|
+
|-------|-------------|
|
|
205
|
+
| Goal level stated | No ☁️/🎯/🐟 |
|
|
206
|
+
| Primary actor is a persona slug | "user" or missing |
|
|
207
|
+
| Stakeholders include at least 2 non-actor parties | Only primary actor listed |
|
|
208
|
+
| Every main step numbered | Bullet list or prose |
|
|
209
|
+
| Every step has at least one extension considered | Happy path only |
|
|
210
|
+
| Preconditions are checkable | Vague ("everything's OK") |
|
|
211
|
+
| Success guarantees match trigger outcome | Guarantee doesn't trace back to trigger |
|
|
212
|
+
| Main scenario completes within 3-9 steps | >9 = split into subfunction(s) |
|
|
213
|
+
| Extensions use Na Nb format | Free-form bullets |
|
|
214
|
+
|
|
215
|
+
Fails become WARN or BLOCK per the standard.
|
|
216
|
+
|
|
217
|
+
### Step 7: Emit + traceability
|
|
218
|
+
|
|
219
|
+
Write each use case to `docs/use-cases/UC-NNN-[slug].md`.
|
|
220
|
+
|
|
221
|
+
Update `docs/use-cases/_matrix.md` with a traceability row:
|
|
222
|
+
|
|
223
|
+
```markdown
|
|
224
|
+
| Use case | Primary actor | Goal level | JTBD | Stories sliced from | Stakeholders (count) | Status |
|
|
225
|
+
|----------|---------------|------------|------|---------------------|---------------------|--------|
|
|
226
|
+
| UC-001 | couple-founders | 🎯 | J1 | US-001, US-002, US-005 | 4 | PASS |
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The matrix surfaces:
|
|
230
|
+
- **Orphan use cases** — no JTBD trace = solution without a problem
|
|
231
|
+
- **JTBD gaps** — JTBDs with no use case = unserved goals
|
|
232
|
+
- **Story coverage** — use cases with no downstream stories = spec that didn't reach the backlog
|
|
233
|
+
- **Stakeholder thinness** — use cases with ≤1 non-actor stakeholder = likely missing cross-cutting concerns
|
|
234
|
+
|
|
235
|
+
### Step 8: Output summary
|
|
236
|
+
|
|
237
|
+
```markdown
|
|
238
|
+
## Use cases produced
|
|
239
|
+
|
|
240
|
+
**Iteration**: [iteration goal slug]
|
|
241
|
+
**Use cases written**: N
|
|
242
|
+
**Goal levels**: N summary / N user-goal / N subfunction
|
|
243
|
+
**Extensions total**: N (avg N per use case)
|
|
244
|
+
**Stakeholders/interests rows**: N total
|
|
245
|
+
**Downstream stories traced**: N
|
|
246
|
+
|
|
247
|
+
**Gaps**:
|
|
248
|
+
- JTBDs without use cases: [list]
|
|
249
|
+
- Use cases without downstream stories: [list]
|
|
250
|
+
- Use cases with <2 non-actor stakeholders: [list — rewrite recommended]
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
## Worked example — the /decompose-feeding shape
|
|
254
|
+
|
|
255
|
+
Here's a fully-dressed use case that demonstrates why the
|
|
256
|
+
stakeholders+interests block matters.
|
|
257
|
+
|
|
258
|
+
### UC-001 — Sign in with email + password
|
|
259
|
+
|
|
260
|
+
- **Primary actor**: cofounder-pair (persona slug)
|
|
261
|
+
- **Goal level**: 🎯 user-goal
|
|
262
|
+
- **Scope**: POA web UI + auth service
|
|
263
|
+
- **Stakeholders + interests**:
|
|
264
|
+
|
|
265
|
+
| Stakeholder | Interest |
|
|
266
|
+
|-------------|----------|
|
|
267
|
+
| Compliance | Every attempt logged with IP + user-agent |
|
|
268
|
+
| Ops | No password or partial hash leaks into logs |
|
|
269
|
+
| Support | Failed-auth reason visible in support tool (but not to actor) |
|
|
270
|
+
| Billing | Successful auth increments MAU counter |
|
|
271
|
+
|
|
272
|
+
- **Preconditions**: cofounder-pair account exists; password is set
|
|
273
|
+
- **Minimal guarantees**: audit log written with actor ID (or null for failed lookup) + timestamp + outcome
|
|
274
|
+
- **Success guarantees**: valid session cookie issued; MAU incremented
|
|
275
|
+
- **Trigger**: actor submits email + password form
|
|
276
|
+
|
|
277
|
+
**Main success scenario**:
|
|
278
|
+
|
|
279
|
+
1. Actor submits email + password.
|
|
280
|
+
2. System looks up account by email.
|
|
281
|
+
3. System verifies password against stored hash.
|
|
282
|
+
4. System issues session cookie with 24h TTL.
|
|
283
|
+
5. System redirects to post-auth landing page.
|
|
284
|
+
|
|
285
|
+
**Extensions**:
|
|
286
|
+
|
|
287
|
+
- **2a. Email not found**:
|
|
288
|
+
- 2a1. System displays generic "Invalid credentials" (no user enumeration).
|
|
289
|
+
- 2a2. Audit log entry written with null user-ID.
|
|
290
|
+
- 2a3. Use case ends with actor unauthenticated.
|
|
291
|
+
- **3a. Password mismatch**:
|
|
292
|
+
- 3a1. System displays generic "Invalid credentials."
|
|
293
|
+
- 3a2. Audit log entry written with user-ID + "pw-mismatch" reason.
|
|
294
|
+
- 3a3. Use case ends with actor unauthenticated.
|
|
295
|
+
- **3b. Account locked (per rate-limit policy)**:
|
|
296
|
+
- 3b1. System displays "Account temporarily locked — try again in N minutes."
|
|
297
|
+
- 3b2. Audit log entry written with "lockout" reason.
|
|
298
|
+
- 3b3. Use case ends with actor unauthenticated.
|
|
299
|
+
- **4a. Session issue fails (transient)**:
|
|
300
|
+
- 4a1. System displays "Try again" error.
|
|
301
|
+
- 4a2. Audit log written with "session-issue-failure" + error code.
|
|
302
|
+
- 4a3. Use case ends with actor unauthenticated.
|
|
303
|
+
|
|
304
|
+
### Why the stakeholders block matters
|
|
305
|
+
|
|
306
|
+
Without rows for Compliance, Ops, and Support, the audit-trail
|
|
307
|
+
requirement doesn't reach `/decompose`. `/decompose` then picks an
|
|
308
|
+
implementation without an AuditLogger decorator; logs get bolted
|
|
309
|
+
into the route handler; compliance files an incident three months
|
|
310
|
+
later.
|
|
311
|
+
|
|
312
|
+
With the block, `/decompose` reads: *"4 stakeholders, 3 non-actor
|
|
313
|
+
concerns — route handler needs an audit-log decorator wrapping
|
|
314
|
+
the password-verify interface, and logging must scrub secrets
|
|
315
|
+
at the boundary."* The responsibility assignment shows up in the
|
|
316
|
+
decomposition artifact before any code is written.
|
|
317
|
+
|
|
318
|
+
Every extension is also a test assertion for `/verify`:
|
|
319
|
+
|
|
320
|
+
- 2a1 → test: `sign_in_with_unknown_email_returns_generic_error`
|
|
321
|
+
- 3a1 → test: `sign_in_with_wrong_password_returns_generic_error`
|
|
322
|
+
- 3b1 → test: `sign_in_after_rate_limit_returns_lockout_message`
|
|
323
|
+
- 4a1 → test: `sign_in_when_session_issue_fails_returns_retry_error`
|
|
324
|
+
|
|
325
|
+
Use-case-line → test mapping is 1:1. Extensions that aren't
|
|
326
|
+
tested are gaps; tests without use-case-line traceability are
|
|
327
|
+
orphan coverage.
|
|
328
|
+
|
|
329
|
+
## Common pitfalls
|
|
330
|
+
|
|
331
|
+
- **Happy-path only** — the main scenario is just the "yes path";
|
|
332
|
+
real behavior is in the extensions. Skipping extensions = no
|
|
333
|
+
spec, just a hope.
|
|
334
|
+
- **"User" as primary actor** — use the persona slug. If there's
|
|
335
|
+
no persona yet, run `/personas` first.
|
|
336
|
+
- **Implementation leak** — "System calls Postgres to look up
|
|
337
|
+
account" is implementation. Use case says "System looks up
|
|
338
|
+
account"; decomposition decides the storage.
|
|
339
|
+
- **Stakeholders block listed only actors** — the whole point of
|
|
340
|
+
the block is non-actor concerns (compliance, ops, audit,
|
|
341
|
+
billing, support). If it's only the primary actor, you've
|
|
342
|
+
missed the -ility audit input.
|
|
343
|
+
- **Goal level drift** — "Onboard and sign in and explore the app"
|
|
344
|
+
is summary-level but written like user-goal. Pick the level
|
|
345
|
+
consciously; if it's summary, split into user-goal use cases.
|
|
346
|
+
- **Extension prose that's really a story** — if an extension has
|
|
347
|
+
its own multi-step success path, it's probably a subfunction
|
|
348
|
+
use case, not an extension. Extract it.
|
|
349
|
+
- **Preconditions as throat-clearing** — "The system is running"
|
|
350
|
+
is not a precondition. Preconditions are state invariants the
|
|
351
|
+
use case assumes (account exists, user is authenticated,
|
|
352
|
+
quota is below limit).
|
|
353
|
+
|
|
354
|
+
## Relationship to other skills
|
|
355
|
+
|
|
356
|
+
| Skill | Relationship |
|
|
357
|
+
|-------|-------------|
|
|
358
|
+
| `/personas` | Upstream — provides the primary actor slug |
|
|
359
|
+
| `/jtbd-tasks` | Upstream — goal traces to JTBD outcome |
|
|
360
|
+
| `/value-prop-canvas` | Upstream (optional) — informs "why this goal matters" framing in stakeholders block |
|
|
361
|
+
| `/user-stories` | Downstream — stories slice use-case main scenario + extensions into INVEST tokens (US-N cites UC-N step Xa) |
|
|
362
|
+
| `/interaction-design` | Downstream — renders use-case flow as state + sequence diagrams |
|
|
363
|
+
| `/decompose` | Downstream — consumes use-case as alternative input alongside sequence diagrams; stakeholders+interests drive -ility audit |
|
|
364
|
+
| `/verify` | Downstream — use-case-line → test-assertion mapping (every step + extension = at least one test) |
|
|
365
|
+
| `/spec` | Downstream — spec consumes use cases + stories as input |
|
|
366
|
+
| `/task-scenarios` | Sibling, NOT replacement — task-scenarios are narrative day-in-the-life for UX research; use cases are behavior specs. Both coexist. |
|
|
367
|
+
| `/synthetic-user` | Indirect — use cases are too granular for journey testing; use `/task-scenarios` for that |
|
|
368
|
+
| `/shape` | Workflow — /shape's `medium` and `full` tiers invoke /use-case as part of the chain |
|
|
369
|
+
|
|
370
|
+
## Chain position
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
/personas (WHO)
|
|
374
|
+
↓
|
|
375
|
+
/jtbd-tasks (WHY)
|
|
376
|
+
↓
|
|
377
|
+
/value-prop-canvas (FIT)
|
|
378
|
+
↓
|
|
379
|
+
/use-case (SPEC) ← THIS SKILL
|
|
380
|
+
↓
|
|
381
|
+
/user-stories (BACKLOG) [slices use-case lines]
|
|
382
|
+
↓
|
|
383
|
+
/interaction-design (RENDERS) + /decompose (RESPONSIBILITIES)
|
|
384
|
+
↓
|
|
385
|
+
/spec (BUILD)
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Parallel branch for UX research narrative:
|
|
389
|
+
|
|
390
|
+
```
|
|
391
|
+
/jtbd-tasks
|
|
392
|
+
↓
|
|
393
|
+
/task-scenarios (CONTEXT)
|
|
394
|
+
↓
|
|
395
|
+
/synthetic-user (PERSONA TESTING)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## Provenance & evolution
|
|
399
|
+
|
|
400
|
+
- Drafted during user-centric chain shaping (2026-04-19e session)
|
|
401
|
+
after reading Cockburn 2024 — *Unifying user stories, use cases,
|
|
402
|
+
and story maps*. That paper established the 4-artifact
|
|
403
|
+
non-overlap that made adding /use-case to the chain defensible.
|
|
404
|
+
- Promoted to bassclef via issue #213 (part of spec-lineage family
|
|
405
|
+
epic #155).
|
|
406
|
+
- Cockburn-aligned: fully-dressed format with extension enumeration
|
|
407
|
+
discipline, goal levels, and stakeholders+interests as first-class.
|
|
408
|
+
|
|
409
|
+
## Closes
|
|
410
|
+
|
|
411
|
+
- bassclef #213
|
|
412
|
+
- Part of spec-lineage family epic #155
|
|
413
|
+
- WS-1 of iteration goal 2026-04-21b-shaping-chain-plus-slack
|
|
414
|
+
|
|
415
|
+
## Output discipline
|
|
416
|
+
|
|
417
|
+
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|