@thebassclef/lite 0.1.3 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +431 -135
- package/dist/cli.js +433 -137
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.bassclef-source.json +10 -0
- package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
- package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
- package/dist/lite/.claude/settings.json +212 -0
- package/dist/lite/CLAUDE.md +41 -0
- package/dist/lite/gitignore +58 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
- package/dist/lite/whereami.md +24 -0
- package/package.json +8 -2
- package/substrate/.bassclef/lite-manifest.json +0 -2701
- package/substrate/.claude/agents/architect.md +0 -70
- package/substrate/.claude/agents/builder.md +0 -114
- package/substrate/.claude/agents/designer.md +0 -156
- package/substrate/.claude/agents/reviewer.md +0 -88
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
- package/substrate/.claude/luminaries/alan-cooper.md +0 -170
- package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
- package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
- package/substrate/.claude/luminaries/ash-maurya.md +0 -121
- package/substrate/.claude/luminaries/bill-buxton.md +0 -210
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
- package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
- package/substrate/.claude/luminaries/don-norman.md +0 -173
- package/substrate/.claude/luminaries/edward-tufte.md +0 -179
- package/substrate/.claude/luminaries/eric-evans.md +0 -160
- package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
- package/substrate/.claude/luminaries/gang-of-four.md +0 -157
- package/substrate/.claude/luminaries/glenford-myers.md +0 -230
- package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
- package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
- package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
- package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
- package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
- package/substrate/.claude/luminaries/karl-popper.md +0 -132
- package/substrate/.claude/luminaries/kent-beck.md +0 -168
- package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
- package/substrate/.claude/luminaries/martin-fowler.md +0 -164
- package/substrate/.claude/luminaries/michael-feathers.md +0 -125
- package/substrate/.claude/luminaries/michael-nygard.md +0 -118
- package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
- package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
- package/substrate/.claude/luminaries/sophia-prater.md +0 -193
- package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
- package/substrate/.claude/luminaries/tony-hoare.md +0 -170
- package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
- package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
- package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
- package/substrate/.claude/rules/adr-discipline.md +0 -120
- package/substrate/.claude/rules/api-conventions.md +0 -125
- package/substrate/.claude/rules/artifact-ingestion.md +0 -179
- package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
- package/substrate/.claude/rules/blocked-items.md +0 -146
- package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
- package/substrate/.claude/rules/branching.md +0 -28
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
- package/substrate/.claude/rules/commit-conventions.md +0 -22
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
- package/substrate/.claude/rules/context-engineering.md +0 -202
- package/substrate/.claude/rules/context-management.md +0 -85
- package/substrate/.claude/rules/defensive-bash.md +0 -68
- package/substrate/.claude/rules/deferred-actions.md +0 -233
- package/substrate/.claude/rules/destructive-operations.md +0 -69
- package/substrate/.claude/rules/diagnosis.md +0 -38
- package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
- package/substrate/.claude/rules/guardrails.md +0 -73
- package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
- package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
- package/substrate/.claude/rules/loop-discipline.md +0 -81
- package/substrate/.claude/rules/manual-prod-approval.md +0 -100
- package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
- package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
- package/substrate/.claude/rules/new-dependency-check.md +0 -51
- package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
- package/substrate/.claude/rules/operator-facing-prose.md +0 -196
- package/substrate/.claude/rules/option-label-discipline.md +0 -108
- package/substrate/.claude/rules/pattern-annotation.md +0 -100
- package/substrate/.claude/rules/plain-english-discipline.md +0 -156
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
- package/substrate/.claude/rules/pr-body-shape.md +0 -317
- package/substrate/.claude/rules/pr-strategy.md +0 -167
- package/substrate/.claude/rules/pr-title-shape.md +0 -161
- package/substrate/.claude/rules/prototype-workflow.md +0 -65
- package/substrate/.claude/rules/reserved-skill-names.md +0 -123
- package/substrate/.claude/rules/schema-management.md +0 -49
- package/substrate/.claude/rules/sdlc-gates.md +0 -149
- package/substrate/.claude/rules/security.md +0 -37
- package/substrate/.claude/rules/session-artifacts.md +0 -236
- package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
- package/substrate/.claude/rules/skill-description-clarity.md +0 -247
- package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
- package/substrate/.claude/rules/state-schema-validation.md +0 -162
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
- package/substrate/.claude/rules/substrate-config-schema.md +0 -98
- package/substrate/.claude/rules/test-list-discipline.md +0 -175
- package/substrate/.claude/rules/test-sufficiency.md +0 -210
- package/substrate/.claude/rules/testing-tier-config.md +0 -145
- package/substrate/.claude/rules/testing.md +0 -38
- package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
- package/substrate/.claude/rules/visual-hierarchy.md +0 -437
- package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
- package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
- package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
- package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
- package/substrate/.claude/skills/build/SKILL.md +0 -640
- package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
- package/substrate/.claude/skills/decompose/SKILL.md +0 -280
- package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
- package/substrate/.claude/skills/feynman/SKILL.md +0 -90
- package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
- package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
- package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
- package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
- package/substrate/.claude/skills/journal/SKILL.md +0 -209
- package/substrate/.claude/skills/kiss/SKILL.md +0 -449
- package/substrate/.claude/skills/launch/SKILL.md +0 -915
- package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
- package/substrate/.claude/skills/longrun/SKILL.md +0 -463
- package/substrate/.claude/skills/luminary/SKILL.md +0 -481
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
- package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
- package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
- package/substrate/.claude/skills/personas/SKILL.md +0 -207
- package/substrate/.claude/skills/promote/SKILL.md +0 -283
- package/substrate/.claude/skills/requirement/SKILL.md +0 -98
- package/substrate/.claude/skills/retro/SKILL.md +0 -117
- package/substrate/.claude/skills/riff/SKILL.md +0 -114
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
- package/substrate/.claude/skills/session-end/SKILL.md +0 -309
- package/substrate/.claude/skills/session-log/SKILL.md +0 -299
- package/substrate/.claude/skills/skills/SKILL.md +0 -228
- package/substrate/.claude/skills/spec/SKILL.md +0 -105
- package/substrate/.claude/skills/sprint/SKILL.md +0 -392
- package/substrate/.claude/skills/stage/SKILL.md +0 -384
- package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
- package/substrate/.claude/skills/temperance/SKILL.md +0 -108
- package/substrate/.claude/skills/use-case/SKILL.md +0 -417
- package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
- package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
- package/substrate/.claude/skills/verify/SKILL.md +0 -160
- package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
- package/substrate/.claude/skills/whereami/SKILL.md +0 -307
- package/substrate/AGENTS.md +0 -79
- package/substrate/CLAUDE-lite.md +0 -85
- package/substrate/CODE_OF_CONDUCT.md +0 -28
- package/substrate/CONTRIBUTING.md +0 -177
- package/substrate/README.md +0 -173
- package/substrate/SECURITY.md +0 -19
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
- package/substrate/lib/clean-artifacts-sweep.sh +0 -112
- package/substrate/lib/code-comment-discipline.sh +0 -144
- package/substrate/lib/composer-preflight.sh +0 -459
- package/substrate/lib/hook-inject.sh +0 -255
- package/substrate/lib/luminary-pick.sh +0 -96
- package/substrate/lib/output-discipline.sh +0 -143
- package/substrate/lib/prose-scan-boundary.sh +0 -171
- package/substrate/lib/rewrite-check.sh +0 -214
- package/substrate/lib/state.sh +0 -1372
- package/substrate/lib/telemetry.sh +0 -205
- package/substrate/lib/tier-check.sh +0 -187
- package/substrate/lib/tier-dependency-audit.sh +0 -1088
- package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
- package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
- package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
- package/substrate/scripts/aggregate-telemetry.sh +0 -217
- package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
- package/substrate/scripts/generate-lite-manifest.sh +0 -505
- package/substrate/scripts/generate-tier-manifest.sh +0 -28
- package/substrate/scripts/intent-drift-check.sh +0 -456
- package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
- package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
- package/substrate/standards/adr-template.md +0 -86
- package/substrate/standards/api-conventions/nextjs.md +0 -84
- package/substrate/standards/artifact-composition.md +0 -209
- package/substrate/standards/bash-hook-safety.md +0 -246
- package/substrate/standards/bassclef-configs-schema.md +0 -232
- package/substrate/standards/bassclef-evolution.md +0 -143
- package/substrate/standards/bassclef-internal-jargon.md +0 -244
- package/substrate/standards/bassclef-managed-sentinel.md +0 -96
- package/substrate/standards/bassclef-source-config.md +0 -228
- package/substrate/standards/branch-stacking.md +0 -408
- package/substrate/standards/code-safety-principles.md +0 -176
- package/substrate/standards/composer-prerequisites.md +0 -155
- package/substrate/standards/deferred-actions-schema.md +0 -204
- package/substrate/standards/dependency-discipline/cargo.md +0 -39
- package/substrate/standards/dependency-discipline/gem.md +0 -43
- package/substrate/standards/dependency-discipline/go-mod.md +0 -41
- package/substrate/standards/dependency-discipline/npm.md +0 -42
- package/substrate/standards/dependency-discipline/pip.md +0 -42
- package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
- package/substrate/standards/deployment-topology.md +0 -69
- package/substrate/standards/docs-sync-allowlist.md +0 -76
- package/substrate/standards/domain-and-dns.md +0 -145
- package/substrate/standards/frontend-stack.md +0 -67
- package/substrate/standards/frontmatter-schema.md +0 -154
- package/substrate/standards/graceful-exit.md +0 -227
- package/substrate/standards/hook-idempotency.md +0 -102
- package/substrate/standards/hook-injection-discipline.md +0 -202
- package/substrate/standards/hook-install-class.md +0 -215
- package/substrate/standards/input-handler-interface.md +0 -152
- package/substrate/standards/lite-manifest-schema-changes.md +0 -135
- package/substrate/standards/luminary-matching.md +0 -105
- package/substrate/standards/luminary-problem-patterns.md +0 -481
- package/substrate/standards/migration-discipline/active-record.md +0 -50
- package/substrate/standards/migration-discipline/alembic.md +0 -43
- package/substrate/standards/migration-discipline/gorm.md +0 -50
- package/substrate/standards/migration-discipline/prisma.md +0 -53
- package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
- package/substrate/standards/mobile-ephemeral-session.md +0 -167
- package/substrate/standards/model-routing-discipline.md +0 -160
- package/substrate/standards/ogilvy-writing-rules.md +0 -225
- package/substrate/standards/opener-discipline.md +0 -96
- package/substrate/standards/operator-facing-prose-discipline.md +0 -201
- package/substrate/standards/persona-schema.md +0 -229
- package/substrate/standards/pluggable-luminaries.md +0 -323
- package/substrate/standards/pr-body-discipline.md +0 -115
- package/substrate/standards/preview-state-schema.md +0 -189
- package/substrate/standards/project-directory-layout.md +0 -276
- package/substrate/standards/release-tagging.md +0 -137
- package/substrate/standards/reserved-skill-names.md +0 -120
- package/substrate/standards/scannable-multi-option-output.md +0 -261
- package/substrate/standards/sdlc-compliance.md +0 -286
- package/substrate/standards/sdlc-gates/typescript.md +0 -57
- package/substrate/standards/secrets-lifecycle.md +0 -210
- package/substrate/standards/security-scanner-adapter.md +0 -145
- package/substrate/standards/session-board.md +0 -256
- package/substrate/standards/skill-output-discipline.md +0 -90
- package/substrate/standards/state-spine-contract.md +0 -255
- package/substrate/standards/state-spine.md +0 -511
- package/substrate/standards/steering-hints/kiss-words.md +0 -11
- package/substrate/standards/substrate-config-schema.md +0 -267
- package/substrate/standards/tech-stack-config.md +0 -109
- package/substrate/standards/tier-dependency-analysis.md +0 -167
- package/substrate/standards/tier-runtime-deps/lite.md +0 -57
- package/substrate/standards/tier-tag-schema.md +0 -155
- package/substrate/standards/two-layer-config.md +0 -99
- package/substrate/standards/use-case-format.md +0 -292
- package/substrate/standards/user-story-invest.md +0 -268
- package/substrate/standards/velocity-and-appetite.md +0 -229
- package/substrate/standards/voice-input-pattern.md +0 -119
- package/substrate/standards/whereami-schema.md +0 -301
- package/substrate/standards/worktree-management.md +0 -211
- package/substrate/standards/writing-guide.md +0 -213
- package/substrate/templates/chronicle-template.md +0 -75
- package/substrate/templates/deferred-action-template.md +0 -45
- package/substrate/templates/memory-proposal-template.md +0 -77
- package/substrate/templates/persona-template.md +0 -200
- package/substrate/templates/pr-faq.md +0 -45
- package/substrate/templates/secret-rotation-template.md +0 -162
- package/substrate/templates/spec-template.md +0 -131
- package/substrate/templates/use-case-template.md +0 -194
- package/substrate/templates/user-story-template.md +0 -107
- package/substrate/templates/whereami-template.md +0 -101
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: stage
|
|
4
|
-
description: "Turn an idea into clickable mock variants on a deployed subdomain. Two sizes: quick (~30 min, 2 variants) and light (~2h, 3 variants plus an Anthropic baseline). Operator picks a direction from phone before committing to build work."
|
|
5
|
-
problem: "A UI idea needs to be seen before it can be judged. Prose and wireframes lose the story."
|
|
6
|
-
value: "Turns an idea into clickable mocks on a deployed subdomain. Operator taps through and picks."
|
|
7
|
-
inputs: [A UI intent or design goal, Optional size — quick or light]
|
|
8
|
-
outputs: [Deployed mock at a subdomain URL, Multiple variants to compare]
|
|
9
|
-
user_invocable: true
|
|
10
|
-
disable_model_invocation: false
|
|
11
|
-
sizes: [quick, light]
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# /stage (formerly /preview) — Prototype-Tier Composer (Inception/Elaboration)
|
|
15
|
-
|
|
16
|
-
End-to-end composer for **prototype tiers** (quick + light). Takes
|
|
17
|
-
operator input (text in Phase B; URL / image / repo / transcript /
|
|
18
|
-
napkin in Phase C) and produces a PR containing deployed prototype
|
|
19
|
-
variants + clickable comparison gallery (with back-navigation from
|
|
20
|
-
each variant) + bind-subdomain wiring.
|
|
21
|
-
|
|
22
|
-
After this skill + dependencies ship + merge, operator can dispatch
|
|
23
|
-
a paragraph from phone to any consumer repo and
|
|
24
|
-
`/stage quick "<paragraph>"` runs the chain end-to-end.
|
|
25
|
-
|
|
26
|
-
**For Construction-input tiers (medium / full)**, use
|
|
27
|
-
`.claude/skills/launch/SKILL.md`. The boundary is operator
|
|
28
|
-
intent: `/stage` = "still picking direction"; `/launch` =
|
|
29
|
-
"committing to ship this".
|
|
30
|
-
|
|
31
|
-
## Phase boundary
|
|
32
|
-
|
|
33
|
-
| Axis | `/stage` (this skill) | `/launch` (sibling) |
|
|
34
|
-
|------|------------------------|---------------------------|
|
|
35
|
-
| Phase | Inception / Elaboration | Construction transition |
|
|
36
|
-
| Operator intent | "Pick a direction" | "Ship the chosen direction" |
|
|
37
|
-
| Data substrate | Stubbed / hardcoded | Stubbed (variants) → real (post-build) |
|
|
38
|
-
| Output | Variants for visual selection | Spec + GRASP + ux-migration + iteration-goal draft |
|
|
39
|
-
| Cameo review | /visual-review with complement evaluators | Same + spec/decomp review |
|
|
40
|
-
| Commitment level | None — variants are throwaway | Operator decides next: scaffold Construction or pivot |
|
|
41
|
-
|
|
42
|
-
Quick + light produce visual artifacts only. Medium + full cross the
|
|
43
|
-
prototype/production boundary by producing buildable specs (in
|
|
44
|
-
`/launch`).
|
|
45
|
-
|
|
46
|
-
## When to invoke
|
|
47
|
-
|
|
48
|
-
- Operator dispatches new UX rework intent: `/stage quick "<paragraph>"`
|
|
49
|
-
- Bake-off against existing surface: `/stage quick "<paragraph>" base=<existing-slug>`
|
|
50
|
-
- Multi-variant exploration: `/stage quick "<paragraph>" variants=3`
|
|
51
|
-
- Medium tier (Phase D follow-up): `/stage medium "<input>"` returns
|
|
52
|
-
"deferred to Phase D" stub in this MVP
|
|
53
|
-
|
|
54
|
-
## What this skill is NOT
|
|
55
|
-
|
|
56
|
-
| Skill | Altitude | Output |
|
|
57
|
-
|-------|----------|--------|
|
|
58
|
-
| `/stage` | **Pipeline composer** | PR with full chain output |
|
|
59
|
-
| `/interpret-input` | Input normalization | InputArtifact (one step of preview) |
|
|
60
|
-
| `/objectory-decompose` | Jacobson analysis | Decomposition (one step of preview) |
|
|
61
|
-
| `/riff-prototypes` | Variant generation | Variants in docs/prototypes/ (one step) |
|
|
62
|
-
| `/prototype-gallery` | Variant index page | Gallery scaffolding (one step) |
|
|
63
|
-
| `/bind-subdomain` | Amplify deployment | Subdomain DNS + cert (one step) |
|
|
64
|
-
|
|
65
|
-
`/stage` orchestrates these — it does NOT replace any of them. Each
|
|
66
|
-
step's skill remains independently invocable for debugging or
|
|
67
|
-
out-of-band work.
|
|
68
|
-
|
|
69
|
-
## Hard constraints (per goal rules)
|
|
70
|
-
|
|
71
|
-
- **MUST produce a PR**, never push directly to main (per
|
|
72
|
-
`.claude/rules/branching.md` + `.claude/rules/pr-strategy.md`)
|
|
73
|
-
- **MUST run on a feature branch** — refuses to run from main
|
|
74
|
-
- **MUST capture champion-challenger signal** in `preview-state.yml`
|
|
75
|
-
(`selected_variant` + `is_baseline` per step-11b)
|
|
76
|
-
- **MUST tolerate stub-mode InputArtifacts** (Phase B is text-strict;
|
|
77
|
-
other types produce `extracted_text="deferred to Phase C"`)
|
|
78
|
-
- **MUST NOT touch app-repo files outside the chain's expected paths**
|
|
79
|
-
(`docs/input-artifacts/`, `docs/decompositions/`, `docs/prototypes/`,
|
|
80
|
-
`docs/preview-state/`, plus consumer's gallery scaffolding paths
|
|
81
|
-
per `/prototype-gallery`)
|
|
82
|
-
|
|
83
|
-
## Procedure
|
|
84
|
-
|
|
85
|
-
### Phase 0 — Pre-flight
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
# Verify on feature branch (fail fast on main)
|
|
89
|
-
CURRENT=$(git branch --show-current)
|
|
90
|
-
case "$CURRENT" in
|
|
91
|
-
main|master)
|
|
92
|
-
echo "preview: refuses to run on $CURRENT — create a feature branch first" >&2
|
|
93
|
-
exit 2
|
|
94
|
-
;;
|
|
95
|
-
esac
|
|
96
|
-
|
|
97
|
-
# Verify accessor library available
|
|
98
|
-
[ -f lib/state.sh ] || { echo "preview: lib/state.sh not found; spine v0 not installed" >&2; exit 4; }
|
|
99
|
-
source lib/state.sh
|
|
100
|
-
|
|
101
|
-
# Validate args: <tier> "<input>" [variants=N] [base=<slug>]
|
|
102
|
-
TIER="$1"; INPUT="$2"; shift 2
|
|
103
|
-
case "$TIER" in
|
|
104
|
-
quick) ;;
|
|
105
|
-
medium) echo "preview: medium tier returns stub (Phase D deferred); proceeding with stub output" >&2 ;;
|
|
106
|
-
*) echo "preview: unknown tier '$TIER' (must be: quick|medium)" >&2; exit 2 ;;
|
|
107
|
-
esac
|
|
108
|
-
[ -z "$INPUT" ] && { echo "preview: input required" >&2; exit 2; }
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Parse remaining args:
|
|
112
|
-
- `variants=N` (default 2-3 per `/riff-prototypes` ceiling; max 4 luminary + 1 baseline = 5)
|
|
113
|
-
- `base=<slug>` (optional — re-bake on existing prototype slug)
|
|
114
|
-
|
|
115
|
-
### Phase 1 — `/interpret-input`
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
SPRINT_SLUG="$(date -u +%Y-%m-%d)-preview-$(echo "$INPUT" | md5 -q 2>/dev/null | cut -c1-6 \
|
|
119
|
-
|| echo "$INPUT" | md5sum 2>/dev/null | cut -c1-6)"
|
|
120
|
-
|
|
121
|
-
INPUT_ARTIFACT_PATH=$(bash scripts/interpret-input.sh "$INPUT" --persist --slug="${SPRINT_SLUG}-input")
|
|
122
|
-
# State-validate.sh hook validates schema at write; failure → BLOCKED
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Output: `docs/input-artifacts/<slug>-input.json`
|
|
126
|
-
|
|
127
|
-
If the artifact is stub-mode (auto-detected as url/image/repo/transcript/
|
|
128
|
-
napkin), surface a warning that downstream extraction will be empty
|
|
129
|
-
but proceed — the chain validates the interface even without real
|
|
130
|
-
extraction.
|
|
131
|
-
|
|
132
|
-
### Phase 2 — `/objectory-decompose`
|
|
133
|
-
|
|
134
|
-
The agent invokes the skill via Skill tool with:
|
|
135
|
-
|
|
136
|
-
```
|
|
137
|
-
/objectory-decompose ${SPRINT_SLUG}-input
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
(Skill reads InputArtifact, applies Jacobson method, writes
|
|
141
|
-
`docs/decompositions/${SPRINT_SLUG}-input-domain.md`)
|
|
142
|
-
|
|
143
|
-
If extraction is empty (stub-mode upstream), surface to operator
|
|
144
|
-
that variant generation will be working from minimal domain context.
|
|
145
|
-
|
|
146
|
-
### Phase 3 — `/value-prop`
|
|
147
|
-
|
|
148
|
-
The agent invokes:
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
/value-prop --brief "<extracted_text from InputArtifact>"
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Captures a brief value-prop (claim + 3 RTBs) for the prototype-variants
|
|
155
|
-
step to consume.
|
|
156
|
-
|
|
157
|
-
In Phase B MVP, value-prop output goes inline into the PR body (does
|
|
158
|
-
not persist to disk — `/value-prop` outputs are typically ephemeral).
|
|
159
|
-
|
|
160
|
-
### Phase 3.5 — `/pick-luminaries` (in-turn picker for variant grounding)
|
|
161
|
-
|
|
162
|
-
Runs inside the current turn. Picks N luminaries whose lens fits the intent. No separate LLM call. No provider key required. Per web#193 Option A rewrite. Sibling adopters can override the picker with their own `/extract-intent`.
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
source "${BASSCLEF_DIR:-$HOME/src/sunj-labs/bassclef}/lib/luminary-pick.sh"
|
|
166
|
-
CATALOG=$(luminary_pick_catalog)
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Now Claude (in-turn) reads `$intent_text`, enumerates `$CATALOG`, picks `${VARIANTS:-3}` slugs whose lens fits. Writes JSON to `/tmp/luminary-pick.json`:
|
|
170
|
-
|
|
171
|
-
```json
|
|
172
|
-
{
|
|
173
|
-
"matched_luminaries": ["slug1", "slug2", "slug3"],
|
|
174
|
-
"rationale": "One short sentence per pick",
|
|
175
|
-
"picker_version": "bassclef-harness-pick-2.0",
|
|
176
|
-
"provider": "claude-code-harness"
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
If the catalog helper fails (missing catalog dir), Phase 4 falls back to `/luminary recommend` signal scoring.
|
|
181
|
-
|
|
182
|
-
### Phase 4 — `/riff-prototypes` (with WU-11b Anthropic baseline)
|
|
183
|
-
|
|
184
|
-
The agent invokes:
|
|
185
|
-
|
|
186
|
-
```
|
|
187
|
-
/riff-prototypes
|
|
188
|
-
scope: "${INPUT}"
|
|
189
|
-
decomposition: docs/decompositions/${SPRINT_SLUG}-input-domain.md
|
|
190
|
-
value_prop: "<step 3 output>"
|
|
191
|
-
grounding: /tmp/luminary-pick.json # from Phase 3.5; matched luminaries drive variants
|
|
192
|
-
variants: ${VARIANTS:-3} # luminary-driven count
|
|
193
|
-
base: "${BASE:-}" # optional re-bake target
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
Per WU-11b, `/riff-prototypes` ALWAYS emits N luminary-driven
|
|
197
|
-
variants + 1 Anthropic `/frontend-design` baseline. Output:
|
|
198
|
-
`docs/prototypes/${SPRINT_SLUG}/variant-*/` (N+1 directories).
|
|
199
|
-
|
|
200
|
-
### Phase 5 — `/prototype-gallery`
|
|
201
|
-
|
|
202
|
-
The agent invokes:
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
/prototype-gallery
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
(Scaffolds gallery index page with all variants. Per WU-11b, the
|
|
209
|
-
gallery flags the `variant-baseline-anthropic/` directory visibly.)
|
|
210
|
-
|
|
211
|
-
### Phase 6 — `/bind-subdomain` per variant
|
|
212
|
-
|
|
213
|
-
For each variant, the agent dispatches:
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
/bind-subdomain
|
|
217
|
-
product_slug: ${SPRINT_SLUG}-${VARIANT_NAME}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
If `/bind-subdomain` fails (e.g., consumer's `substrate.config.md`
|
|
221
|
-
lacks `deploy_targets` / `amplify.yml` not configured), surface the
|
|
222
|
-
failures BUT proceed — bind-subdomain is best-effort in Phase B; the
|
|
223
|
-
PR still ships with prototype HTML and gallery for local review.
|
|
224
|
-
|
|
225
|
-
### Phase 7 — Persist preview-state.yml
|
|
226
|
-
|
|
227
|
-
```yaml
|
|
228
|
-
# docs/preview-state/${SPRINT_SLUG}.yml
|
|
229
|
-
slug: ${SPRINT_SLUG}
|
|
230
|
-
input_artifact: ${SPRINT_SLUG}-input
|
|
231
|
-
decomposition: ${SPRINT_SLUG}-input-domain
|
|
232
|
-
status: variants-ready # operator picks; status moves to "selected" / "rejected"
|
|
233
|
-
current_tier: quick
|
|
234
|
-
luminaries_used: [<list from /riff-prototypes output>]
|
|
235
|
-
current_variants:
|
|
236
|
-
- name: variant-a-<luminary>
|
|
237
|
-
is_baseline: false
|
|
238
|
-
bind_subdomain_url: <if successful>
|
|
239
|
-
- name: variant-b-<luminary>
|
|
240
|
-
is_baseline: false
|
|
241
|
-
bind_subdomain_url: <if successful>
|
|
242
|
-
- name: variant-baseline-anthropic
|
|
243
|
-
is_baseline: true
|
|
244
|
-
bind_subdomain_url: <if successful>
|
|
245
|
-
selected_variant: null # operator fills post-review
|
|
246
|
-
created_at: <ISO timestamp>
|
|
247
|
-
created_by_session: <session-id>
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
State-validate.sh validates against `preview-state.schema.json` (v0
|
|
251
|
-
catalog). Champion-challenger signal lives in `current_variants[*]
|
|
252
|
-
.is_baseline` + `selected_variant` (when operator picks).
|
|
253
|
-
|
|
254
|
-
### Phase 8 — Open PR
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
git add docs/input-artifacts/${SPRINT_SLUG}-input.json \
|
|
258
|
-
docs/decompositions/${SPRINT_SLUG}-input-domain.md \
|
|
259
|
-
docs/prototypes/${SPRINT_SLUG}/ \
|
|
260
|
-
docs/preview-state/${SPRINT_SLUG}.yml \
|
|
261
|
-
public/prototypes/${SPRINT_SLUG}/ \
|
|
262
|
-
src/app/page.tsx # if gallery scaffold updated
|
|
263
|
-
|
|
264
|
-
git commit -m "feat(preview): /stage quick — ${SPRINT_SLUG}
|
|
265
|
-
|
|
266
|
-
InputArtifact: docs/input-artifacts/${SPRINT_SLUG}-input.json
|
|
267
|
-
Decomposition: docs/decompositions/${SPRINT_SLUG}-input-domain.md
|
|
268
|
-
Variants: N+1 (N luminary-driven + 1 Anthropic baseline per step-11b)
|
|
269
|
-
Gallery: <route>
|
|
270
|
-
Bind-subdomain: <success/failure summary>"
|
|
271
|
-
|
|
272
|
-
git push -u origin <branch>
|
|
273
|
-
|
|
274
|
-
gh pr create --title "/stage ${TIER}: ${SPRINT_SLUG}" --body "<body summarizing chain output + variant URLs + champion-challenger>"
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
PR body must follow `.claude/rules/pr-body-shape.md` — Flash + Tweet + `## Goal` first section. Then include:
|
|
278
|
-
- Variant URLs (one per variant, including baseline)
|
|
279
|
-
- Bind-subdomain status per variant
|
|
280
|
-
- Pointer to `docs/preview-state/${SPRINT_SLUG}.yml`
|
|
281
|
-
- Operator's next action: "Review variants. Pick winner. Update
|
|
282
|
-
`selected_variant` in preview-state.yml. Merge PR."
|
|
283
|
-
|
|
284
|
-
## Tier behavior (PROTOTYPE-only — see /launch (formerly /preview-build) for build tiers)
|
|
285
|
-
|
|
286
|
-
| Tier | Phase B MVP | Status |
|
|
287
|
-
|---|---|---|
|
|
288
|
-
| `quick` | ✅ Full chain (Phases 1-8). 2 variants + Anthropic baseline. ~30 min wall time. Mobile-dispatchable. | shipped |
|
|
289
|
-
| `light` | ✅ Full chain + carry-forward ledger if `base=<slug>` provided. 3 variants + Anthropic baseline. ~2h wall time. Adds `/personas` (operator default OK), `/jtbd-tasks` (top jobs only), `/user-stories` (3-5). | shipped (Phase 4 dispatch fans out to multi-skill chain when `--tier=light`) |
|
|
290
|
-
| `medium` | ❌ Refused — use `/launch medium` instead. Construction-input tier; produces buildable spec + GRASP + ux-migration. | redirected |
|
|
291
|
-
| `full` | ❌ Refused — use `/launch full` instead. Audit-grade tier; same as medium + per-persona analysis + /synthetic-user. | redirected |
|
|
292
|
-
|
|
293
|
-
When operator dispatches `/stage medium "..."` or `/stage full "..."`, this skill:
|
|
294
|
-
1. Surfaces a clear error: "medium/full tiers ship buildable specs, not just visual variants — use `/launch <tier> '<input>'` instead. See the phase-boundary section above for the prototype/production boundary."
|
|
295
|
-
2. Exits without dispatching the chain.
|
|
296
|
-
|
|
297
|
-
Operator who wants medium/full's deeper analysis but ALSO wants a shorter exploratory pass first runs `/stage light` first (3 variants), picks a winner, then runs `/launch medium "..." base=<winner-slug>` for the buildable spec.
|
|
298
|
-
|
|
299
|
-
## Failure modes (Phase B MVP scope)
|
|
300
|
-
|
|
301
|
-
| Failure | Behavior |
|
|
302
|
-
|---|---|
|
|
303
|
-
| Stub-mode InputArtifact | Proceed; warn that downstream extraction is minimal |
|
|
304
|
-
| `/objectory-decompose` produces empty inventory | Proceed; warn that variants will lack domain language |
|
|
305
|
-
| `/bind-subdomain` fails (no amplify.yml in consumer) | Proceed; PR ships without deployed URLs; operator handles Amplify wiring out-of-band |
|
|
306
|
-
| `/prototype-gallery` fails (consumer not Next.js) | Proceed; surface gallery error in PR body; variants still committed |
|
|
307
|
-
| state-validate.sh BLOCKs any write | Hard fail; surface BLOCK to operator; do not commit partial chain |
|
|
308
|
-
| On main branch | Refuse with exit 2 (per branching.md) |
|
|
309
|
-
| Empty input | Refuse with exit 2 |
|
|
310
|
-
|
|
311
|
-
## Rules
|
|
312
|
-
|
|
313
|
-
- **PR-first, always** — per `.claude/rules/branching.md` and
|
|
314
|
-
`.claude/rules/pr-strategy.md`. Never push directly to main.
|
|
315
|
-
- **All state writes through accessor** — preview-state.yml writes
|
|
316
|
-
use `state_preview_state_set` (or equivalent); state-validate.sh
|
|
317
|
-
hook gates schema conformance
|
|
318
|
-
- **Stub-mode gracefully proceeds** — Phase B is text-strict; other
|
|
319
|
-
input modes don't break the chain, they produce stubs that
|
|
320
|
-
downstream consumers handle
|
|
321
|
-
- **Champion-challenger captured** — `is_baseline` flag preserved
|
|
322
|
-
through to preview-state.yml; future runs can audit ratio
|
|
323
|
-
- **Best-effort bind-subdomain** — failures don't fail the chain;
|
|
324
|
-
operator wires Amplify config in consumer repo separately
|
|
325
|
-
|
|
326
|
-
## Skipping / Aborting
|
|
327
|
-
|
|
328
|
-
- Operator interrupts mid-chain: agent commits whatever's complete +
|
|
329
|
-
surfaces "preview interrupted at Phase N" in the partial PR body
|
|
330
|
-
- Hard ceiling hit (per `guardrails.md`): pause + surface to operator
|
|
331
|
-
- Schema validation block: stop chain; do not commit
|
|
332
|
-
|
|
333
|
-
## Reserved-names check
|
|
334
|
-
|
|
335
|
-
`preview` is NOT on `standards/reserved-skill-names.md` list. Verified
|
|
336
|
-
during WU-9 goal shape and at branch creation time.
|
|
337
|
-
|
|
338
|
-
## Relationship to other skills + standards
|
|
339
|
-
|
|
340
|
-
- `standards/input-handler-interface.md` — InputArtifact contract
|
|
341
|
-
(Phase 1 dispatch)
|
|
342
|
-
- `.claude/skills/interpret-input/SKILL.md` — Phase 1 producer
|
|
343
|
-
- `.claude/skills/objectory-decompose/SKILL.md` — Phase 2 consumer
|
|
344
|
-
- `.claude/skills/value-prop/SKILL.md` — Phase 3 producer
|
|
345
|
-
- `.claude/skills/prototype-variants/SKILL.md` — Phase 4 (with WU-11b
|
|
346
|
-
baseline)
|
|
347
|
-
- `.claude/skills/prototype-gallery/SKILL.md` — Phase 5
|
|
348
|
-
- `.claude/skills/bind-subdomain/SKILL.md` — Phase 6
|
|
349
|
-
- `standards/state-spine/schemas/preview-state.schema.json` — Phase 7 schema
|
|
350
|
-
- `.claude/rules/branching.md` + `.claude/rules/pr-strategy.md` — Phase 8 PR discipline
|
|
351
|
-
- `docs/iteration-bets/<goal-slug>.md` —
|
|
352
|
-
parent goal defining the full pipeline ambition (this MVP ships subset)
|
|
353
|
-
|
|
354
|
-
## What this skill enables (post-merge)
|
|
355
|
-
|
|
356
|
-
After this skill + dependencies ship + merge:
|
|
357
|
-
|
|
358
|
-
1. Operator dispatches a paragraph from phone:
|
|
359
|
-
```
|
|
360
|
-
cd ~/src/your-org/your-app
|
|
361
|
-
/stage quick "Dramatically simplify and delightfully surface deals..."
|
|
362
|
-
```
|
|
363
|
-
2. Chain runs end-to-end (~5 min wall time on quick tier)
|
|
364
|
-
3. PR opens with InputArtifact + decomposition + N+1 variants + gallery
|
|
365
|
-
4. Operator reviews PR (mobile-friendly via GitHub mobile app)
|
|
366
|
-
5. Operator picks winner; updates `selected_variant` in preview-state.yml
|
|
367
|
-
6. Operator merges PR; CI deploys variants to Amplify (if consumer has wiring)
|
|
368
|
-
7. Operator decides: ship winner via `/ux-migration` (Phase D follow-up)
|
|
369
|
-
OR re-bake with different variants
|
|
370
|
-
|
|
371
|
-
This is the mobile-dispatchable SDLC the parent goal was shaped for.
|
|
372
|
-
Phase B MVP ships the dispatch path; Phase D ships the migration path
|
|
373
|
-
to Construction.
|
|
374
|
-
|
|
375
|
-
## Enforcement
|
|
376
|
-
|
|
377
|
-
Methodology-level. State-validate.sh hook enforces preview-state.yml
|
|
378
|
-
schema. PR-first discipline enforced via branching.md rule + pre-build-gate
|
|
379
|
-
hook. Reserved-names check passes. No additional hook enforcement
|
|
380
|
-
added by this skill.
|
|
381
|
-
|
|
382
|
-
## Output discipline
|
|
383
|
-
|
|
384
|
-
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: state-a-problem
|
|
4
|
-
description: "Draft a problem statement for a PR, issue, canvas, or spec. Two sizes: brief (\u2264500 chars, opener, framework implicit) and para (\u22641200 chars, 5-block Who/What/When/Why-now/Outcome template). Runs /kiss --grade8 inline by default."
|
|
5
|
-
problem: "PR bodies and issue bodies open with framing that hides the user pain. Readers scroll past."
|
|
6
|
-
value: "One statement that leads with who hurts and what breaks and why fix it now. Ready to paste."
|
|
7
|
-
inputs: [A ticket ref or doc path or scope description, Optional size — brief or para]
|
|
8
|
-
outputs: [A problem statement that leads with user pain]
|
|
9
|
-
user_invocable: true
|
|
10
|
-
disable_model_invocation: false
|
|
11
|
-
sizes: [brief, para]
|
|
12
|
-
composes_with: [kiss, value-prop]
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# /state-a-problem
|
|
16
|
-
|
|
17
|
-
## What you get
|
|
18
|
-
|
|
19
|
-
A problem statement that leads with user pain. Two sizes.
|
|
20
|
-
|
|
21
|
-
`brief` fits a PR or issue opener. Cap 500 chars. 3-4 sentences carry the 5W framework — Who, What, When, Why now, Outcome. Labels stay implicit.
|
|
22
|
-
|
|
23
|
-
`para` fits a canvas Thesis or spec Problem section. Cap 1200 chars. 5 blocks name each W.
|
|
24
|
-
|
|
25
|
-
Output runs through `/kiss --grade8` inline by default. The statement lands in plain English ready to paste.
|
|
26
|
-
|
|
27
|
-
## When to use it
|
|
28
|
-
|
|
29
|
-
Use this when opening a doc a reader will scan for "why does this exist?" — a PR body, an issue body, a canvas Thesis, a spec Problem section, an ADR Context section. Pair with `/value-prop` when both problem and value belong at the opener.
|
|
30
|
-
|
|
31
|
-
Skip it for one-line status updates. Skip it for chat asides. The 5W framework earns its cost on scan surfaces.
|
|
32
|
-
|
|
33
|
-
## FAQ
|
|
34
|
-
|
|
35
|
-
### What's the difference between brief and para?
|
|
36
|
-
|
|
37
|
-
`brief` (default) drafts 3-4 sentences in ≤500 chars. The framework labels stay implicit. Sentence structure carries the Who / What / When / Why now / Outcome without spelling them out. Use it for PR and issue openers where scan speed matters.
|
|
38
|
-
|
|
39
|
-
`para` drafts the same content as 5 labeled blocks in ≤1200 chars. Use it for a canvas Thesis or spec Problem section. Named blocks help readers find each W.
|
|
40
|
-
|
|
41
|
-
### What does the 5W framework cover?
|
|
42
|
-
|
|
43
|
-
- **Who** — the user role that hits the pain. Agent, operator, adopter, end user, future reader. Specific — not "everyone."
|
|
44
|
-
- **What** — the pain or gap. Stated with verbs. Concrete — not "the experience is poor."
|
|
45
|
-
- **When** — the trigger. "On every commit." "When authoring a PR body." "After the third tab open."
|
|
46
|
-
- **Why now** — the insight that makes this iteration the right time. A new signal, a fresh incident, a downstream block.
|
|
47
|
-
- **Outcome we want** — the observable change once the work ships. Not the fix — the result.
|
|
48
|
-
|
|
49
|
-
If "why now" is "it has always been this way" — surface to the operator. The problem may not be urgent.
|
|
50
|
-
|
|
51
|
-
### Why /kiss runs inline by default?
|
|
52
|
-
|
|
53
|
-
We use what we ship. A skill that drafts plain English must itself emit plain English. The default runs BLOCK plus ADVISE substitution. It reads the wordlist at `standards/bassclef-internal-jargon.md`. Use `--no-kiss` when you want to inspect the raw draft. Rare.
|
|
54
|
-
|
|
55
|
-
### What if the draft runs over the char cap?
|
|
56
|
-
|
|
57
|
-
The skill surfaces the overage with the AS-IS draft. You decide. Condense further. Or accept the overage with a note. Trim adjectives first. Then condense the When clause. Then merge sentences.
|
|
58
|
-
|
|
59
|
-
### How does this pair with /value-prop?
|
|
60
|
-
|
|
61
|
-
`/state-a-problem` states the pain. `/value-prop` states the solution claim. Together they open a PR body that reads pain-first, value-next, diff-after. Run them in sequence when a feature-scope PR wants both framings.
|
|
62
|
-
|
|
63
|
-
### What are the three references behind the template?
|
|
64
|
-
|
|
65
|
-
NN/g (Nielsen Norman Group) — the 5W1H plus insight framework. UX Design Institute — the User / Problem / Outcome template that seeds the para-mode block names. OpinionX — the discovery framing that anchors "Why now" as the insight worth addressing. All three converge on the same form. The skill synthesizes them.
|
|
66
|
-
|
|
67
|
-
## Details below the fold
|
|
68
|
-
|
|
69
|
-
### Procedure
|
|
70
|
-
|
|
71
|
-
**Step 0 — Read the situation.**
|
|
72
|
-
|
|
73
|
-
The operator pastes the situation. Or links the ticket. Or describes it verbally. Read every artifact named. The ticket body. Prior PRs. The iteration goal. Sibling tickets. The 5W answers come from the situation. Not from imagination.
|
|
74
|
-
|
|
75
|
-
If the situation is thin ("draft a problem statement for bassclef#NNNN") — read the ticket body first.
|
|
76
|
-
|
|
77
|
-
**Step 1 — Extract the five Ws.**
|
|
78
|
-
|
|
79
|
-
Ask each block's question. Land a concrete answer. If any block reads as vague — "everyone", "the experience is poor", "it has always been this way" — pause. Surface to the operator.
|
|
80
|
-
|
|
81
|
-
**Step 2 — Draft at the requested size.**
|
|
82
|
-
|
|
83
|
-
For `brief` — compose 3-4 sentences. Aim ~400 chars. Cap 500. Order — When plus Who plus What sets the situation. Why-now grounds urgency. Outcome names the change. Labels stay implicit.
|
|
84
|
-
|
|
85
|
-
Sample form — `Today [Who] [What] when [When]. [Why now]. The change we want is [Outcome].`
|
|
86
|
-
|
|
87
|
-
For `para` — use the 5-block named template. Aim 80-200 chars per block. Cap the whole at 1200.
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
**Who:** [1-2 sentences naming the user role]
|
|
91
|
-
**What:** [1-2 sentences naming the pain or gap, with verbs]
|
|
92
|
-
**When:** [1 sentence naming the trigger context]
|
|
93
|
-
**Why now:** [1-2 sentences naming the insight or new evidence]
|
|
94
|
-
**Outcome we want:** [1 sentence naming the measurable change]
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**Step 3 — Run /kiss --grade8 inline (default).**
|
|
98
|
-
|
|
99
|
-
Unless `--no-kiss` is set — pass the draft through `/kiss --grade8` substitution.
|
|
100
|
-
|
|
101
|
-
- Replaces BLOCK-tier terms per `standards/bassclef-internal-jargon.md`
|
|
102
|
-
- Replaces ADVISE-tier terms per the same standard
|
|
103
|
-
- Preserves ALLOW-tier terms (substrate, bassclef, cameo, Studio, Band, bandleader per bassclef#763)
|
|
104
|
-
- Preserves standard tech vocab (API, hook, schema, etc.)
|
|
105
|
-
|
|
106
|
-
**Step 4 — Verify length + return.**
|
|
107
|
-
|
|
108
|
-
Check the output fits within the requested size's char cap. If over — surface to the operator with the AS-IS draft.
|
|
109
|
-
|
|
110
|
-
Return the cleaned statement. If `--no-kiss` — return the raw draft with a one-line note.
|
|
111
|
-
|
|
112
|
-
### Example output — brief mode
|
|
113
|
-
|
|
114
|
-
For bassclef#1178 (this skill's parent ticket):
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
Today PR + issue body openers use Flash + Tweet — both solution-framed,
|
|
118
|
-
neither stating the user pain. Readers scan from "what this PR ships"
|
|
119
|
-
straight to the diff without seeing why the work exists. UX research
|
|
120
|
-
frameworks center user pain before solution; applied at PR + issue
|
|
121
|
-
opener, the same template gives readers a clean entry. The change we
|
|
122
|
-
want is one problem-grounded section per opener, drafted by a skill
|
|
123
|
-
that runs /kiss --grade8 inline so adopters get plain English by
|
|
124
|
-
default.
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
478 chars — fits the ≤500 cap.
|
|
128
|
-
|
|
129
|
-
### Example output — para mode
|
|
130
|
-
|
|
131
|
-
For bassclef#1178 (same ticket, canvas Thesis size):
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
**Who:** Agents and operators authoring PR + issue bodies, and the
|
|
135
|
-
readers scanning those bodies.
|
|
136
|
-
|
|
137
|
-
**What:** Today's PR + issue opener uses Flash (≤180) + Tweet (≤280) —
|
|
138
|
-
both solution-framed. Neither states the user pain. Readers jump from
|
|
139
|
-
"what this PR ships" to the diff without seeing why the work exists.
|
|
140
|
-
|
|
141
|
-
**When:** Every PR-body or issue-body draft. The skip happens at the
|
|
142
|
-
first scan, every time.
|
|
143
|
-
|
|
144
|
-
**Why now:** Three UX research frameworks (NN/g, UX Design Institute,
|
|
145
|
-
OpinionX) converge on a stable template — Who/What/When/Why-now/
|
|
146
|
-
Outcome — that centers user pain. The substrate already ships /kiss +
|
|
147
|
-
/value-prop as the discipline layer; one more skill locks in the shape.
|
|
148
|
-
|
|
149
|
-
**Outcome we want:** Every feature-scope PR + issue opens with a
|
|
150
|
-
problem-grounded section drafted by /state-a-problem and run through
|
|
151
|
-
/kiss --grade8 inline. Reader orientation costs drop; adopters get
|
|
152
|
-
plain English by default.
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
~1100 chars — fits the ≤1200 cap.
|
|
156
|
-
|
|
157
|
-
### Composes with
|
|
158
|
-
|
|
159
|
-
- `/kiss --grade8` — runs inline by default on the skill's output
|
|
160
|
-
- `/value-prop` — pairs at solution framing. Problem first, value next.
|
|
161
|
-
- `/ticket` — this skill drafts the opener. `/ticket` drafts the INVEST story or epic that follows.
|
|
162
|
-
- `/spec` — `/state-a-problem para` drafts the Problem section. `/spec` drafts the rest.
|
|
163
|
-
|
|
164
|
-
### Distinct from
|
|
165
|
-
|
|
166
|
-
- `/value-prop` — states the solution claim. Not the pain. Complements. Does not replace.
|
|
167
|
-
- `/feynman` — explains a concept in plain English. Different intent. Explain vs orient.
|
|
168
|
-
- `/kiss` — substitutes jargon line by line. Different scope. Line edit vs section draft.
|
|
169
|
-
|
|
170
|
-
### Refs
|
|
171
|
-
|
|
172
|
-
- bassclef#906 — original PR-body contract being retired
|
|
173
|
-
- bassclef#484 — issue-body Flash + Tweet rule being retired
|
|
174
|
-
- bassclef#1178 — this skill's parent ticket
|
|
175
|
-
- bassclef#1181 — sister audit ticket for inline /kiss default across other skills operators read
|
|
176
|
-
- `.claude/rules/pr-body-shape.md` — the contract this skill's output ships into
|
|
177
|
-
- `.claude/rules/github-issue-flash-tweet.md` — sister rule at issue surface
|
|
178
|
-
- `.claude/rules/assert-only-after-verify.md` — Toulmin argument (My claim + Evidence + Why the evidence supports the claim)
|
|
179
|
-
- `standards/bassclef-internal-jargon.md` — wordlist `/kiss --grade8` reads from
|
|
180
|
-
- `standards/opener-discipline.md` — the three-block opener discipline this skill drafts the Problem block for
|
|
181
|
-
- NN/g, UX Design Institute, OpinionX — the three references synthesized in the template
|
|
182
|
-
|
|
183
|
-
## Output discipline
|
|
184
|
-
|
|
185
|
-
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
name: temperance
|
|
4
|
-
description: "Pause and think before you code. Asks \u2014 am I building the right thing AND building it the right way? Fires before every non-trivial action."
|
|
5
|
-
problem: "Sessions dive into edits before the operator asks whether it's the right work or the right shape."
|
|
6
|
-
value: "A pause-and-think gate at every scope decision boundary. Six questions before code."
|
|
7
|
-
inputs: [Optional scope decision context]
|
|
8
|
-
outputs: [Right-thing answer, Right-way answer, Drift trigger for future watch]
|
|
9
|
-
user_invocable: true
|
|
10
|
-
disable_model_invocation: false
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Temperance
|
|
14
|
-
|
|
15
|
-
A pause before you write code. Two questions that every other governance mechanism misses.
|
|
16
|
-
|
|
17
|
-
Question one — am I building the right thing?
|
|
18
|
-
|
|
19
|
-
Question two — am I building it the right way?
|
|
20
|
-
|
|
21
|
-
## When to invoke
|
|
22
|
-
|
|
23
|
-
- Before starting any non-trivial task.
|
|
24
|
-
- When you feel the urge to "just ship it."
|
|
25
|
-
- When the approach has more than 3 steps.
|
|
26
|
-
- When you are about to touch auth, middleware, data pipeline, or external services.
|
|
27
|
-
- When the user says "just do it" or "go fast" — that is exactly when to slow down.
|
|
28
|
-
|
|
29
|
-
## The temperance checklist
|
|
30
|
-
|
|
31
|
-
Answer these honestly before writing code.
|
|
32
|
-
|
|
33
|
-
### 0. Right thing check — are you building the right thing?
|
|
34
|
-
|
|
35
|
-
- Does this trace to a real need? A canvas, spec, issue, or user request.
|
|
36
|
-
- Can you state the business signal this proves in one sentence?
|
|
37
|
-
- If this ships and nobody uses it, was it still worth building?
|
|
38
|
-
- Are you building this because the spec says so, because the user asked, or because it feels like a good idea?
|
|
39
|
-
- At standard or full level — is this in the declared iteration scope? Retiring the declared risk? Proving the declared value?
|
|
40
|
-
|
|
41
|
-
If you cannot answer "why does this matter?" in one sentence, stop. The most expensive thing you can build is a well-engineered feature nobody wanted.
|
|
42
|
-
|
|
43
|
-
### 1. Simplicity check — building it the right way
|
|
44
|
-
|
|
45
|
-
- Is this the simplest correct approach?
|
|
46
|
-
- Are you adding complexity to handle scenarios that may not happen?
|
|
47
|
-
- Could you solve this with config instead of code?
|
|
48
|
-
- Would a senior engineer look at this and ask "why didn't you just...?"
|
|
49
|
-
|
|
50
|
-
### 2. Brute-force check
|
|
51
|
-
|
|
52
|
-
- Are you brute-forcing to make the user happy instead of designing properly?
|
|
53
|
-
- Are you trying many approaches hoping one works?
|
|
54
|
-
- Did you run `/diagnose` before jumping to a fix?
|
|
55
|
-
- Are you treating symptoms or root causes?
|
|
56
|
-
|
|
57
|
-
### 3. Blast radius check
|
|
58
|
-
|
|
59
|
-
- What else does this change affect?
|
|
60
|
-
- What working parts could break?
|
|
61
|
-
- Have you verified the "before" state so you can confirm "after"?
|
|
62
|
-
|
|
63
|
-
### 4. Verification check
|
|
64
|
-
|
|
65
|
-
- How will you know this works — not just that it compiles?
|
|
66
|
-
- What is the smallest test you can run?
|
|
67
|
-
- Can you verify in under 2 minutes? If not, the approach may be too complex.
|
|
68
|
-
|
|
69
|
-
### 5. Reversibility check
|
|
70
|
-
|
|
71
|
-
- If this is wrong, how hard is it to undo?
|
|
72
|
-
- Are you about to do something destructive? Force push. Schema change. Delete data.
|
|
73
|
-
- Should you commit what you have first, before the change?
|
|
74
|
-
|
|
75
|
-
## The decision
|
|
76
|
-
|
|
77
|
-
State these five lines after the checklist:
|
|
78
|
-
|
|
79
|
-
- **Why this matters** — one sentence naming the need this serves.
|
|
80
|
-
- **Approach** — what you are going to do.
|
|
81
|
-
- **Why this is the simplest correct approach** — one sentence.
|
|
82
|
-
- **What you are NOT doing** — the temptations you resist.
|
|
83
|
-
- **Verification plan** — how you will know it works.
|
|
84
|
-
|
|
85
|
-
Then write the gate marker. BOTH the ephemeral flag AND the durable git-tracked marker. The pre-build-gate hook accepts either. The durable marker lets the 5-session compliance counter see mobile firings that would evaporate at sandbox teardown.
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
BRANCH=$(git branch --show-current)
|
|
89
|
-
BRANCH_SLUG=$(echo "$BRANCH" | tr '/' '-')
|
|
90
|
-
BRANCH_HASH=$(echo "$BRANCH" | md5 -q 2>/dev/null || echo "$BRANCH" | md5sum 2>/dev/null | cut -d' ' -f1)
|
|
91
|
-
SESSION_ID=${CLAUDE_SESSION_ID:-$$}
|
|
92
|
-
|
|
93
|
-
# Ephemeral flag (existing pre-build-gate contract)
|
|
94
|
-
touch "/tmp/claude-temperance-done-${SESSION_ID}-${BRANCH_HASH}"
|
|
95
|
-
|
|
96
|
-
# Durable git-tracked marker
|
|
97
|
-
mkdir -p state/markers/temperance
|
|
98
|
-
date -u +%Y-%m-%dT%H:%M:%SZ > "state/markers/temperance/${BRANCH_SLUG}.marker"
|
|
99
|
-
git add "state/markers/temperance/${BRANCH_SLUG}.marker"
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
The durable marker commits with the branch's normal flow. `state/markers/` is git-tracked per `.claude/rules/mobile-ephemeral-session.md` section 2.
|
|
103
|
-
|
|
104
|
-
Then proceed with the work.
|
|
105
|
-
|
|
106
|
-
## Output discipline
|
|
107
|
-
|
|
108
|
-
Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
|