@thebassclef/lite 0.1.3 → 1.0.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 +216 -137
- package/dist/cli.js +218 -139
- 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/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/artifact-ingestion-gate.sh +0 -357
- package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
- package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
- package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
- package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
- package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
- package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
- package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
- package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
- package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
- package/substrate/.claude/hooks/session-end.sh +0 -433
- package/substrate/.claude/hooks/session-reflection.sh +0 -303
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
- package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
- package/substrate/.claude/hooks/state-validate.sh +0 -271
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
- package/substrate/.claude/hooks/temperance-gate.sh +0 -147
- package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
- package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
- 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,96 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: Every planning-surface opener carries three blocks in this order — Problem, Value prop, Evidence.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Opener discipline — Problem + Value prop + Evidence
|
|
7
|
-
|
|
8
|
-
Every planning-surface opener carries three blocks in this order — Problem, Value prop, Evidence. The reader sees the pain, then the fix, then the receipts. Same shape scales down (a short session) or up (a goal close).
|
|
9
|
-
|
|
10
|
-
## The shape
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
## Problem (via /state-a-problem brief)
|
|
14
|
-
[≤500 chars: who was affected + what pain + when + why now + outcome sought]
|
|
15
|
-
|
|
16
|
-
## Value prop (via /value-prop tweet)
|
|
17
|
-
[≤280 chars: claim + sharpener]
|
|
18
|
-
|
|
19
|
-
## Evidence (per .claude/rules/assert-only-after-verify.md)
|
|
20
|
-
- Source: [file path, ticket, commit SHA — what I read inline]
|
|
21
|
-
- Warrant: [one sentence tying the source to the claim]
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Three blocks. First block frames the pain. Second block names the outcome. Third block cites what backs the claim.
|
|
25
|
-
|
|
26
|
-
## When this discipline fires
|
|
27
|
-
|
|
28
|
-
Every planning surface where the agent addresses the operator:
|
|
29
|
-
|
|
30
|
-
- `/longrun` prep + checkpoint + closeout output
|
|
31
|
-
- `/sprint` opener output
|
|
32
|
-
- `/session-log` (formerly `/chronicle`) opener block
|
|
33
|
-
- `/session-end` closeout dispatch shape
|
|
34
|
-
- Any agent turn prose that opens with a status assertion
|
|
35
|
-
|
|
36
|
-
Pass-through cases (discipline does not fire):
|
|
37
|
-
|
|
38
|
-
- Conversational asides mid-session ("switching to main now") — no assertion carried
|
|
39
|
-
- Tool output relayed verbatim — the tool is the source
|
|
40
|
-
- Direct answers to operator questions where the answer IS the value block
|
|
41
|
-
|
|
42
|
-
## Why three blocks
|
|
43
|
-
|
|
44
|
-
Seven luminaries converged on the shape:
|
|
45
|
-
|
|
46
|
-
- **Alan Cooper** — persona-anchored. The reader wants pain framing before solution framing.
|
|
47
|
-
- **Steve Krug** — don't make me think. A tweet claim alone makes the reader backfill "why should I care."
|
|
48
|
-
- **Stephen Toulmin** — claim + data + warrant. Three blocks carry all three.
|
|
49
|
-
- **Amazon PR/FAQ** — write the press release first. A press release opens with problem + value pairing, not claim + description.
|
|
50
|
-
- **Marty Cagan** — outcomes not output.
|
|
51
|
-
- **Kent Beck** — YAGNI. Three lines minimum; drop the fourth.
|
|
52
|
-
- **Taiichi Ohno** — 7 wastes. Prior tweet + KISS pairing overlapped semantically; consolidate.
|
|
53
|
-
|
|
54
|
-
## What replaces the old opener
|
|
55
|
-
|
|
56
|
-
The prior shape was `/value-prop tweet` + `/kiss words` — a claim in tweet form plus a paragraph summary of the same claim. It carried the same information twice while missing pain framing and evidence citation.
|
|
57
|
-
|
|
58
|
-
The new shape retires the tweet + KISS pair at planning surfaces. Tweet mode stays as one of the `/value-prop` sizes for other uses (like a status one-liner in chat). KISS words stays as a mode of `/kiss` for prose passes. Both stop being the opener default at planning surfaces.
|
|
59
|
-
|
|
60
|
-
## Sizing guidance
|
|
61
|
-
|
|
62
|
-
Scale the three blocks to the surface:
|
|
63
|
-
|
|
64
|
-
| Surface | Problem | Value prop | Evidence |
|
|
65
|
-
|---|---|---|---|
|
|
66
|
-
| `/sprint` opener | 1-2 sentences | 1-line tweet | 1 source + 1 warrant |
|
|
67
|
-
| `/longrun` prep | Full 500-char problem | Full 280-char tweet | 3-5 sources + warrants |
|
|
68
|
-
| `/longrun` checkpoint | 1-2 sentences | 1-line tweet | 1-2 sources + warrants |
|
|
69
|
-
| `/longrun` closeout | Full 500-char problem | Full 280-char tweet | Sources cited per major finding |
|
|
70
|
-
| `/session-log` opener | Full 500-char problem | Full 280-char tweet | Sources per section |
|
|
71
|
-
|
|
72
|
-
The reader's context governs the block size. A checkpoint mid-session needs less than a closeout at end-of-work.
|
|
73
|
-
|
|
74
|
-
## Grace window
|
|
75
|
-
|
|
76
|
-
Old openers keep working through 2026-10-31 per ADR-031 grace window and `.claude/rules/we-dont-break-adopters.md`. Sessions from before the rewrite still open with tweet + KISS; new sessions open with the three blocks. No adopter breakage.
|
|
77
|
-
|
|
78
|
-
## Composes with
|
|
79
|
-
|
|
80
|
-
- `.claude/rules/pr-body-shape.md` — sister discipline at PR body surface
|
|
81
|
-
- `.claude/rules/github-issue-flash-tweet.md` — sister discipline at GitHub issue body surface
|
|
82
|
-
- `.claude/rules/operator-facing-prose.md` Rule 3 — skill-dispatch citation extends to naming the standard opener
|
|
83
|
-
- `.claude/rules/assert-only-after-verify.md` — the argument shape the Evidence block satisfies
|
|
84
|
-
- `.claude/skills/state-a-problem/SKILL.md` — brief mode drafts the Problem block
|
|
85
|
-
- `.claude/skills/value-prop/SKILL.md` — tweet mode drafts the Value prop block
|
|
86
|
-
- ADR-040 Decisions 1-4 — the parent rewrite that introduced this standard
|
|
87
|
-
|
|
88
|
-
## Refs
|
|
89
|
-
|
|
90
|
-
- bassclef-upstream#750 — the ticket that mapped this rewrite
|
|
91
|
-
- bassclef-upstream#1178 — the sister rewrite at PR + issue body surfaces
|
|
92
|
-
- bassclef-upstream#559 — R8 mechanization umbrella (assert-only-after-verify parent)
|
|
93
|
-
|
|
94
|
-
## Retirement condition
|
|
95
|
-
|
|
96
|
-
This standard retires only if the three-block shape stops matching adopter reading behavior. The mechanical layer (hook scan for the shape) may ship as a follow-on when methodology drift is observed. Until then, this is methodology; the discipline holds at authoring time.
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: "Universal principle: any shorthand in operator-facing prose carries a plain-language gloss at first mention per response."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Operator-facing prose discipline
|
|
7
|
-
|
|
8
|
-
Universal principle: any shorthand in operator-facing prose carries a plain-language gloss at first mention per response. When editing any SKILL.md file, apply a /kiss pass to the whole file in the same change.
|
|
9
|
-
|
|
10
|
-
This standard scales operator attention across cross-session time gaps. The operator returns to substrate after hours, days, or weeks; the decoder ring for WU-N, F-X.Y, ADR-NNN, #NNN, LF-N, B1, B2 shouldn't have to be reconstructed from memory or substrate every time.
|
|
11
|
-
|
|
12
|
-
## Scope
|
|
13
|
-
|
|
14
|
-
Two surfaces:
|
|
15
|
-
|
|
16
|
-
1. **All operator-facing skill output** — /sprint, /longrun, /diagnose, /autonomous, /retro, /promote, /temperance, /value-prop, /lean-canvas, /personas, /canvas, /roadmap-reconcile, /whereami, and any future skill that produces output an operator reads.
|
|
17
|
-
2. **All turn-level prose between Claude Code and operator** — not just skill output. Conversational discipline applies the same gloss rule.
|
|
18
|
-
|
|
19
|
-
## Rule 1 — Gloss at first mention per response
|
|
20
|
-
|
|
21
|
-
Any shorthand reference in operator-facing prose carries a plain-language gloss at first mention per response. Subsequent mentions in the same response don't need to re-gloss.
|
|
22
|
-
|
|
23
|
-
Format: `<shorthand> (<plain-language description>)`.
|
|
24
|
-
|
|
25
|
-
Examples:
|
|
26
|
-
|
|
27
|
-
| Shorthand | Glossed form |
|
|
28
|
-
|---|---|
|
|
29
|
-
| `WU-4` | `WU-4 (Tier 0 pitch draft using canvas UVP)` |
|
|
30
|
-
| `#774` | `#774 (Phase XIV rescope proposal)` |
|
|
31
|
-
| `F-D9.1` | `F-D9.1 (README hedges audience — audit HIGH)` |
|
|
32
|
-
| `ADR-021` | `ADR-021 (anchor catalog selection)` |
|
|
33
|
-
| `LF1` | `LF1 (Morgan-as-gatekeeper riskiest assumption)` |
|
|
34
|
-
| `B1` | `B1 (tier-1-proposal-shaper bet)` |
|
|
35
|
-
| `B2-WU1` | `B2-WU1 (README rewrite per F-D9.1)` |
|
|
36
|
-
| `bassclef#739` | `bassclef#739 (substrate-coherence CI)` |
|
|
37
|
-
| `Phase XIV` | `Phase XIV (Draw the Line — IP Guard, growth-loop rescope pending)` |
|
|
38
|
-
|
|
39
|
-
### What this rule does NOT require
|
|
40
|
-
|
|
41
|
-
- **Re-glossing within the same response.** First mention only.
|
|
42
|
-
- **Glossing standard-vocabulary technical terms.** API, schema, hook, PR, commit, branch, merge — these stay as-is. See `standards/plain-english-discipline.md` "Keep standard technical vocabulary" section for the full allowlist.
|
|
43
|
-
- **Glossing reserved concept names from the four-name system.** `substrate`, `bassclef`, `cameo`, `Studio`, `Band`, `bandleader` are allowlisted per bassclef#763 (/kiss reserved-name allowlist). They carry meaning the operator chose deliberately; gloss would be patronizing.
|
|
44
|
-
- **Glossing skill names.** `/sprint`, `/longrun`, `/lean-canvas` — operator-invocable skills carry their own context via the `/` prefix.
|
|
45
|
-
|
|
46
|
-
### When the gloss is awkward
|
|
47
|
-
|
|
48
|
-
If the gloss inflates a sentence beyond readability, restructure the sentence rather than expand inline. Example:
|
|
49
|
-
|
|
50
|
-
- Awkward: "Continue with WU-4 (Tier 0 pitch draft using canvas UVP A' selected for substrate-credibility audience + UVP D for dreamer-operator framing) after merging #773 (ADR-021 amendment for IP→growth-loop pivot)."
|
|
51
|
-
- Restructured: "Continue with WU-4 after merging #773. WU-4 drafts the Tier 0 pitch using canvas UVP. #773 amends ADR-021 for the growth-loop pivot."
|
|
52
|
-
|
|
53
|
-
The principle is operator readability, not mechanical glossing.
|
|
54
|
-
|
|
55
|
-
## Rule 2 — /kiss pass when editing any SKILL.md
|
|
56
|
-
|
|
57
|
-
When touching any SKILL.md file for any reason, apply a /kiss pass to the entire file in the same change. Not a separate cycle.
|
|
58
|
-
|
|
59
|
-
Reasoning: if we're authoring an update to the skill that adds substrate discipline, the existing bassclef-internal vocabulary in that same file should be rewritten plain at the same time. Otherwise we ship discipline-as-substrate fixes that contain the very jargon the discipline catches.
|
|
60
|
-
|
|
61
|
-
### /kiss pass mechanics
|
|
62
|
-
|
|
63
|
-
Apply the rewrite rules from `.claude/rules/plain-english-discipline.md` (the master plain-English rule). Substitution targets that recur most often in SKILL.md files:
|
|
64
|
-
|
|
65
|
-
| Phrase | Replacement |
|
|
66
|
-
|---|---|
|
|
67
|
-
| `load-bearing` | `essential` or `required` (or remove) |
|
|
68
|
-
| `cross-cutting` | `affects multiple boxes` or name what it crosses |
|
|
69
|
-
| `forcing function` | name what it forces directly |
|
|
70
|
-
| `operator-locked` | `decided` or `set` |
|
|
71
|
-
| `substrate-resident` | `in bassclef already` or `shipped` |
|
|
72
|
-
| `operating thesis` | `the goal.we're making` |
|
|
73
|
-
| `compose-with` | `uses` or `builds on` |
|
|
74
|
-
| `tier-preset` | `preset` or `size` |
|
|
75
|
-
| `operationalize` | `do` or `ship` |
|
|
76
|
-
| `composer (as noun)` | `runs` or `chains` or `combines` |
|
|
77
|
-
|
|
78
|
-
Allowlist per bassclef#763 holds: `substrate`, `bassclef`, `cameo`, `Studio`, `Band`, `bandleader` stay.
|
|
79
|
-
|
|
80
|
-
### Scope of the /kiss pass
|
|
81
|
-
|
|
82
|
-
The pass covers the SKILL.md file's prose — descriptions, procedure narrative, when-to-use sections, why-this-exists sections, examples in prose form. It does NOT cover:
|
|
83
|
-
|
|
84
|
-
- Code blocks
|
|
85
|
-
- File path references
|
|
86
|
-
- Reserved skill names
|
|
87
|
-
- Quoted vocabulary from operator memory or chronicles
|
|
88
|
-
|
|
89
|
-
### When the /kiss pass produces no edits
|
|
90
|
-
|
|
91
|
-
If the file is already clean, the pass produces no edits. State this explicitly in the commit message ("kiss pass: no edits — file already clean") so future readers know the discipline was applied.
|
|
92
|
-
|
|
93
|
-
## Rule 3 — Tweets lead with the goal, not just the work done
|
|
94
|
-
|
|
95
|
-
A Tweet (≤280 chars) in a PR body, chronicle entry, or summary table tells the reader two things: what the work is FOR (the goal it serves) and what the work DID (the changes it shipped). When a Tweet captures only the second, the first rots within weeks — a future reader can't tell what problem the PR solved or why anyone cared.
|
|
96
|
-
|
|
97
|
-
Format: `<what this is for>. <what it did>.`
|
|
98
|
-
|
|
99
|
-
The goal sentence comes first. The work sentence comes second.
|
|
100
|
-
|
|
101
|
-
### Worked example — PR #825 (bassclef#811 implementation)
|
|
102
|
-
|
|
103
|
-
The original Tweet shipped without a goal sentence:
|
|
104
|
-
|
|
105
|
-
> Per bassclef#811: sunj-labs/bassclef-upstream created; 115 files migrated (2 with git history, 113 bulk-imported); per-subdirectory symlinks set up via scripts/operator-setup.sh; adopters see only README placeholder; Rule 3 still passes; two standards docs codify the workflow.
|
|
106
|
-
|
|
107
|
-
This tells you what happened. It doesn't tell you the goal was: operator-private files now have backup and version history without leaking to people who clone the public repo.
|
|
108
|
-
|
|
109
|
-
The goal-first rewrite:
|
|
110
|
-
|
|
111
|
-
> Operator-private files now safe from disk loss and version-controlled, but still hidden from people who clone the public repo. Per bassclef#811: sunj-labs/bassclef-upstream created; 115 files migrated; symlinks via scripts/operator-setup.sh; adopters see only README placeholder.
|
|
112
|
-
|
|
113
|
-
Fits 280 chars. Names the goal first. Says what was done second.
|
|
114
|
-
|
|
115
|
-
### What counts as a "goal"
|
|
116
|
-
|
|
117
|
-
The goal is what the operator (or adopter) gets from this work. Useful tests:
|
|
118
|
-
|
|
119
|
-
- If someone reads only the Tweet in 6 months, can they tell what problem the work solved?
|
|
120
|
-
- If a future contributor asks "why did we ship this?", does the Tweet answer them?
|
|
121
|
-
- If the work didn't ship at all, what would the operator miss?
|
|
122
|
-
|
|
123
|
-
### Three Tweet rules together
|
|
124
|
-
|
|
125
|
-
Tweets now carry three discipline rules:
|
|
126
|
-
|
|
127
|
-
1. **Fit in 280 chars** (per bassclef#785 — tweet-style descriptions in summary tables)
|
|
128
|
-
2. **Keep scoping qualifiers** (per bassclef#805 — "deferred within Tier 1" not just "deferred")
|
|
129
|
-
3. **Lead with the goal** (this rule, per bassclef#831 — what the work is FOR, then what it did)
|
|
130
|
-
|
|
131
|
-
All three rules become a single mechanical check when Rule 5 of substrate-coherence CI lands (bassclef#807).
|
|
132
|
-
|
|
133
|
-
### What this rule does NOT require
|
|
134
|
-
|
|
135
|
-
- **Lengthening the Tweet.** Goal-first should compress, not expand. If adding a goal sentence pushes past 280 chars, compress the work sentence.
|
|
136
|
-
- **Restating the title.** PR titles already name the work; the Tweet's goal sentence adds the WHY the title doesn't capture.
|
|
137
|
-
- **Goal-first for every PR-body section.** Tweets carry the goal; deeper sections (Summary, Implementation, Test plan) can lead with mechanics.
|
|
138
|
-
|
|
139
|
-
## Audience-vigilance scaling argument
|
|
140
|
-
|
|
141
|
-
The operator works across cross-session time gaps. A morning /sprint output that references `B1-WU4` without gloss requires the operator to either:
|
|
142
|
-
|
|
143
|
-
1. Remember what B1-WU4 was from yesterday's session (unreliable across multi-day gaps)
|
|
144
|
-
2. Read substrate (goal body + stack manifest + chronicle) to reconstruct the reference (operator-time tax)
|
|
145
|
-
3. Ask the agent to expand the reference (extra turn, breaks flow)
|
|
146
|
-
|
|
147
|
-
Glossing at first mention costs the agent zero additional reasoning — the gloss is already in scope from substrate reads the agent did to produce the response. The cost-shift is from operator-time to agent-tokens. The operator-time savings compound across every reference in every operator-facing response.
|
|
148
|
-
|
|
149
|
-
The /kiss pass on SKILL.md edits closes the meta-discipline gap: if we ship substrate that says "operator-facing output should be plain" and that substrate is itself dense with bassclef-internal vocabulary, the discipline corrodes at its own source. Every SKILL.md edit is an opportunity to apply the discipline to the substrate doing the enforcing.
|
|
150
|
-
|
|
151
|
-
## Enforcement layers
|
|
152
|
-
|
|
153
|
-
| Layer | Mechanism | Status |
|
|
154
|
-
|---|---|---|
|
|
155
|
-
| Methodology | This standard + `.claude/rules/operator-facing-prose.md` (the conversational rule) | Loaded into every session via `additionalDirectories` |
|
|
156
|
-
| Skill-level | Every operator-facing SKILL.md cites this standard in its rules section | Phased rollout — /longrun + /sprint + /diagnose + /autonomous land first |
|
|
157
|
-
| Mechanical | bassclef#739 (substrate-coherence CI) extension lints operator-facing skill output for unglossed shorthand | Deferred — methodology-first, mechanical later |
|
|
158
|
-
| /kiss pass on SKILL.md edits | Discipline-as-substrate per Rule 2 above | Methodology-level; substrate-clarity-gate hook (bassclef#382) already enforces at file-write boundary for jargon |
|
|
159
|
-
|
|
160
|
-
## Methodology source
|
|
161
|
-
|
|
162
|
-
Andrej Karpathy (`andrej-karpathy` luminary entry) is the methodology source for bassclef's clarity discipline. Karpathy's CPU-and-RAM framing — LLM as stateless computation engine; context window as finite working memory — makes prose clarity an engineering constraint, not a stylistic preference.
|
|
163
|
-
|
|
164
|
-
Operator-facing prose is the context the model loads next session. Glossing shorthand at first mention, applying `/kiss` on SKILL.md edits, leading tweets with the goal — all three rules are concrete implementations of Karpathy's framing applied at the operator-facing surface. Each rule reduces context-budget waste (operator-time on the surface side, model-attention budget on the substrate side).
|
|
165
|
-
|
|
166
|
-
Downstream practitioners apply INSTEAD-block discipline and DO/DO-NOT bounding as specific patterns; this standard cites Karpathy as the methodology, not those patterns as the source. The patterns compose; the methodology grounds them.
|
|
167
|
-
|
|
168
|
-
## Relationship to other discipline standards
|
|
169
|
-
|
|
170
|
-
- `.claude/rules/plain-english-discipline.md` — master plain-English rule. This standard extends it with the gloss rule + the /kiss-pass-on-edits meta-discipline.
|
|
171
|
-
- `.claude/rules/skill-description-clarity.md` — narrow case at skill description field. This standard extends to skill body prose.
|
|
172
|
-
- `.claude/rules/github-issue-flash-tweet.md` — flash-tweet-then-detail discipline for GitHub issue bodies. Sibling.
|
|
173
|
-
- `.claude/rules/context-engineering.md` — INSTEAD-block discipline for negations. Karpathy's methodology grounds the rule; INSTEAD-block is the pattern.
|
|
174
|
-
- `.claude/rules/visual-hierarchy.md` — formatting discipline for long agent output. Sibling.
|
|
175
|
-
- `.claude/luminaries/andrej-karpathy.md` — methodology source. CPU-and-RAM framing makes prose clarity a substrate constraint.
|
|
176
|
-
|
|
177
|
-
## Override
|
|
178
|
-
|
|
179
|
-
Per `.claude/rules/plain-english-discipline.md`: `SKIP_PLAIN_ENGLISH=1 <command>` for genuine cases (quoting an exact phrase from memory or external doc). Logged via trace-helper. Use rarely.
|
|
180
|
-
|
|
181
|
-
There is no override for the /kiss pass on SKILL.md edits — that's a meta-discipline that holds without exception. If a SKILL.md edit can't carry a /kiss pass within the same change (scope is too tight, urgency is too high), the discipline is signaling that the SKILL.md needs a dedicated /kiss-pass PR. File it.
|
|
182
|
-
|
|
183
|
-
## Surfaced in
|
|
184
|
-
|
|
185
|
-
- /sprint 2026-05-30 morning session — operator returned after overnight gap, surfaced that shorthand references in /sprint output require plain-language gloss for cross-session orientation. Pattern recurs in every operator session with a time gap from prior work.
|
|
186
|
-
- Same session — operator surfaced the meta-discipline: if we are already authoring SKILL.md updates for the gloss rule, the existing jargon in those files should be rewritten in the same pass.
|
|
187
|
-
|
|
188
|
-
## Refs
|
|
189
|
-
|
|
190
|
-
- bassclef#790 — parent ticket
|
|
191
|
-
- bassclef#785 — tweet-style descriptions in /longrun summary tables (sibling Tweet rule — length)
|
|
192
|
-
- bassclef#805 — Tweet scoping-qualifier discipline (sibling Tweet rule — qualifiers)
|
|
193
|
-
- bassclef#831 — Tweets lead with the goal (this Rule 3 — goal-first)
|
|
194
|
-
- bassclef#807 — Rule 5 of substrate-coherence CI will check all three Tweet rules together
|
|
195
|
-
- bassclef#780 — glossary + substrate-quote discipline (session-start glossary; this standard adds at-mention gloss)
|
|
196
|
-
- bassclef#763 — /kiss reserved-name allowlist
|
|
197
|
-
- bassclef#767 — /kiss hook coverage at artifact-write surfaces
|
|
198
|
-
- bassclef#779 — /kiss interactive-session anchoring at turn-counter boundaries
|
|
199
|
-
- bassclef#786 — /kiss PR-body hook enforcement decision (sibling)
|
|
200
|
-
- bassclef#787 — PR-body scrub discipline (sibling)
|
|
201
|
-
- `.claude/rules/plain-english-discipline.md` — master plain-English rule (this standard extends)
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: Bassclef schema for user personas in sunj-labs repos.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Persona Schema
|
|
7
|
-
|
|
8
|
-
Bassclef schema for user personas in sunj-labs repos. The contract the
|
|
9
|
-
`/personas` skill reads and every downstream consumer (`/value-prop-canvas`,
|
|
10
|
-
`/synthetic-user`, `/risk-test-synthetic`, `/user-stories`, `/jtbd-tasks`,
|
|
11
|
-
`/spec`, `/prototype-variants`) composes against.
|
|
12
|
-
|
|
13
|
-
Template: `templates/persona-template.md`.
|
|
14
|
-
Skill: `.claude/skills/personas/SKILL.md`.
|
|
15
|
-
|
|
16
|
-
## Why this standard exists
|
|
17
|
-
|
|
18
|
-
Before this schema, persona shape was implicit and scattered:
|
|
19
|
-
|
|
20
|
-
- `.claude/skills/jtbd-tasks/SKILL.md` Step 0 defined a "minimum viable
|
|
21
|
-
persona" with 5 fields (Age, Role, Device, Goal, Jargon comfort)
|
|
22
|
-
- `.claude/skills/synthetic-user/SKILL.md` read personas from
|
|
23
|
-
`docs/design/personas/` with no schema validation
|
|
24
|
-
- sunj-labs/quorum invented its own richer shape (Pichler + evidence-
|
|
25
|
-
traceability) for psychographic-mining output — not reflected anywhere
|
|
26
|
-
in bassclef
|
|
27
|
-
|
|
28
|
-
Three consumers, three schemas, zero validation. Adding `/value-prop-canvas`
|
|
29
|
-
and `/risk-test-synthetic` without standardizing would have made four.
|
|
30
|
-
|
|
31
|
-
This standard consolidates around Pichler's template shape, adds evidence-
|
|
32
|
-
traceability as a distinguishing rule, and preserves both prior path
|
|
33
|
-
conventions for backward compat.
|
|
34
|
-
|
|
35
|
-
## File convention
|
|
36
|
-
|
|
37
|
-
### Preferred path
|
|
38
|
-
|
|
39
|
-
`docs/personas/{slug}.md` — one file per persona.
|
|
40
|
-
|
|
41
|
-
Filename basename MUST match the `slug` field in the file's body. The
|
|
42
|
-
slug is URL-safe: lowercase, hyphens, no spaces.
|
|
43
|
-
|
|
44
|
-
### Legacy path (accepted)
|
|
45
|
-
|
|
46
|
-
`docs/design/personas/{slug}.md` — read by `/jtbd-tasks` and `/synthetic-user`
|
|
47
|
-
before this standard existed. Still valid. Consumers read both paths,
|
|
48
|
-
preferring `docs/personas/` when both exist.
|
|
49
|
-
|
|
50
|
-
New repos SHOULD use `docs/personas/`. Existing repos MAY migrate or
|
|
51
|
-
leave legacy files in place; consolidating bet may follow.
|
|
52
|
-
|
|
53
|
-
## Required fields
|
|
54
|
-
|
|
55
|
-
Every persona file MUST have:
|
|
56
|
-
|
|
57
|
-
| Field | Shape | Example |
|
|
58
|
-
|-------|-------|---------|
|
|
59
|
-
| `slug` | URL-safe identifier, matches filename | `couple-founders` |
|
|
60
|
-
| `name` | Human-readable display name (H1 satisfies) | `Couple Founders` |
|
|
61
|
-
|
|
62
|
-
Absent any required field → `/personas validate` reports FAIL. Downstream
|
|
63
|
-
skills SHOULD refuse to operate on invalid personas.
|
|
64
|
-
|
|
65
|
-
The required set is intentionally minimal. `slug` + `name` is enough to
|
|
66
|
-
reference a persona unambiguously; everything else is quality-of-output
|
|
67
|
-
for downstream skills, not a load-bearing contract at the identity level.
|
|
68
|
-
|
|
69
|
-
## Recommended fields (Pichler shape + outcome framing)
|
|
70
|
-
|
|
71
|
-
High-value personas carry the full Pichler template plus an explicit
|
|
72
|
-
goal line:
|
|
73
|
-
|
|
74
|
-
| Field | Purpose |
|
|
75
|
-
|-------|---------|
|
|
76
|
-
| `goal` | One-line "what this persona is trying to accomplish" — verb-first, outcome-oriented |
|
|
77
|
-
| `tasks` | Recurring tasks in pursuit of the goal |
|
|
78
|
-
| `approach` | How they go about it (habits, tools, rhythm) |
|
|
79
|
-
| `context` | Life / business / organizational grounding |
|
|
80
|
-
| `knowledge` | Domain expertise, jargon comfort, technical fluency |
|
|
81
|
-
| `biography` | Background, archetype, formative influences |
|
|
82
|
-
|
|
83
|
-
Absence produces WARN (not FAIL) in validation. A persona with only the
|
|
84
|
-
required fields is valid but thin — downstream skills will produce
|
|
85
|
-
thinner outputs against it.
|
|
86
|
-
|
|
87
|
-
**Goal inference fallback:** if a persona omits `goal` but has a
|
|
88
|
-
`## JTBD statements` section, `/personas validate` prints an INFER line
|
|
89
|
-
suggesting a goal derivable from the first JTBD. This is advisory, not
|
|
90
|
-
auto-applied — the operator reviews and edits the file. The rationale:
|
|
91
|
-
downstream skills like `/value-prop-canvas` and `/user-stories` need an
|
|
92
|
-
unambiguous goal, and silent inference produces inconsistent results
|
|
93
|
-
across consumers. Surface the gap once, let the operator resolve it, and
|
|
94
|
-
every downstream read is consistent.
|
|
95
|
-
|
|
96
|
-
## Evidence-traceability rule
|
|
97
|
-
|
|
98
|
-
A persona that claims pain points, workflows, or behavior patterns MUST
|
|
99
|
-
cite sources. Claims without source traces are **orphan claims** and
|
|
100
|
-
surface as WARN in `/personas validate`.
|
|
101
|
-
|
|
102
|
-
### Bassclef citation format
|
|
103
|
-
|
|
104
|
-
```markdown
|
|
105
|
-
### P1 — Concise pain label
|
|
106
|
-
|
|
107
|
-
[Paragraph describing the pain.]
|
|
108
|
-
|
|
109
|
-
> *Source trace: [source-N reference] — "[direct quote or close paraphrase]"*
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Acceptable source types:
|
|
113
|
-
|
|
114
|
-
- Repo-local research document (e.g., `docs/research/reddit-synthesis.md §3`)
|
|
115
|
-
- External URL (articles, interviews, public forum posts)
|
|
116
|
-
- Attributed interview note (`interview/YYYY-MM-DD-name.md §4`)
|
|
117
|
-
- Analytics dashboard reference (product metric + timeframe)
|
|
118
|
-
|
|
119
|
-
Not acceptable: "common knowledge," "I've seen this before," unattributed
|
|
120
|
-
assertions, operator intuition.
|
|
121
|
-
|
|
122
|
-
### Why this rule exists
|
|
123
|
-
|
|
124
|
-
Personas without source traces fail silently. They look plausible, their
|
|
125
|
-
synthesized behaviors read naturally, and downstream skills (VPC,
|
|
126
|
-
synthetic-user) produce plausible-looking artifacts against them. The
|
|
127
|
-
artifacts fail on contact with actual users because the foundational
|
|
128
|
-
persona was a pattern-match on training priors, not evidence.
|
|
129
|
-
|
|
130
|
-
Parallel to `.claude/rules/artifact-ingestion.md`: read before you
|
|
131
|
-
produce. Cite before you claim.
|
|
132
|
-
|
|
133
|
-
## Operator-default fallback
|
|
134
|
-
|
|
135
|
-
Repos without persona files are common — new repos, internal tooling,
|
|
136
|
-
early spikes. `/personas default` emits a minimal operator persona
|
|
137
|
-
derived from:
|
|
138
|
-
|
|
139
|
-
- `CLAUDE.md` (for goal / context)
|
|
140
|
-
- `substrate.config.md` (for agents / deploy targets)
|
|
141
|
-
- `docs/whereami.md` (for active iteration context)
|
|
142
|
-
- Git `user.email` (for slug derivation)
|
|
143
|
-
|
|
144
|
-
### When operator-default is appropriate
|
|
145
|
-
|
|
146
|
-
- New repo; first iteration; no user research yet
|
|
147
|
-
- Internal tooling where the operator IS the user
|
|
148
|
-
- Spike / prototype sessions where user identity is deliberately deferred
|
|
149
|
-
|
|
150
|
-
### When it's a red flag
|
|
151
|
-
|
|
152
|
-
Operator-default leaking into these situations means the product is
|
|
153
|
-
being validated against the operator's self-assessment, which is not
|
|
154
|
-
user validation:
|
|
155
|
-
|
|
156
|
-
- `/synthetic-user` running Tier 3 journeys against operator-default
|
|
157
|
-
- `/value-prop-canvas` built from operator-default (value prop for
|
|
158
|
-
"you" tells you nothing about fit for real customers)
|
|
159
|
-
- Iteration goal lovability/viability signals tied to operator-default
|
|
160
|
-
|
|
161
|
-
`/personas validate` surfaces these with a note:
|
|
162
|
-
"Only operator-default persona found; consider adding real personas
|
|
163
|
-
before [downstream skill]."
|
|
164
|
-
|
|
165
|
-
## Multiple personas — no compression
|
|
166
|
-
|
|
167
|
-
If three real customer segments exist, three persona files exist. Do NOT
|
|
168
|
-
collapse into a "composite customer" or "typical user" — compression
|
|
169
|
-
loses the fit signal that `/value-prop-canvas` and `/risk-test-synthetic`
|
|
170
|
-
depend on.
|
|
171
|
-
|
|
172
|
-
VPC is 1:1 with persona. Risk-test matrices are persona × risk × artifact.
|
|
173
|
-
A single merged persona flattens the matrix.
|
|
174
|
-
|
|
175
|
-
## Validation checklist
|
|
176
|
-
|
|
177
|
-
`/personas validate` walks every persona file under both bassclef and
|
|
178
|
-
legacy paths and reports:
|
|
179
|
-
|
|
180
|
-
- [ ] Required fields (slug, name) present — FAIL on absence
|
|
181
|
-
- [ ] Slug matches filename basename — FAIL on mismatch
|
|
182
|
-
- [ ] Pichler recommended fields (goal, tasks, approach, context, knowledge, biography) — WARN on absence
|
|
183
|
-
- If `goal` is absent but a `## JTBD statements` section exists, emit INFER line with suggested goal derived from first JTBD
|
|
184
|
-
- [ ] Evidence traces present for behavior/pain claims — WARN on orphans
|
|
185
|
-
- [ ] No duplicate slugs across files — FAIL on duplicate
|
|
186
|
-
- [ ] File is readable markdown (parses without error) — FAIL otherwise
|
|
187
|
-
|
|
188
|
-
Output format:
|
|
189
|
-
|
|
190
|
-
```markdown
|
|
191
|
-
## Persona validation
|
|
192
|
-
|
|
193
|
-
**Files scanned**: N in docs/personas/, M in docs/design/personas/
|
|
194
|
-
|
|
195
|
-
| File | Required | Pichler | Evidence | Slug-match | Status |
|
|
196
|
-
|------|----------|---------|----------|-----------|--------|
|
|
197
|
-
| [file] | ✅/❌ | ✅/⚠️ | ✅/⚠️ | ✅/❌ | PASS/WARN/FAIL |
|
|
198
|
-
|
|
199
|
-
**Pass**: N | **Warn**: M | **Fail**: K
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
## Relationship to other standards
|
|
203
|
-
|
|
204
|
-
| Standard / rule | Connection |
|
|
205
|
-
|-----------------|-----------|
|
|
206
|
-
| `.claude/rules/artifact-ingestion.md` | Evidence-traceability is artifact-ingestion applied to personas specifically |
|
|
207
|
-
| `standards/whereami-schema.md` | Same "schema + template + skill + rule" pattern; different domain |
|
|
208
|
-
| `standards/substrate-config-schema.md` | Operator-default fallback reads substrate.config fields |
|
|
209
|
-
| `.claude/skills/jtbd-tasks/SKILL.md` | Step 0 "minimum viable persona" is a subset view of this schema; valid but thin |
|
|
210
|
-
| `.claude/skills/synthetic-user/SKILL.md` | Existing consumer; reads legacy path; continues to work |
|
|
211
|
-
|
|
212
|
-
## Future evolution
|
|
213
|
-
|
|
214
|
-
When `/psychographic-mine` (quorum #54) and `/auto-user-research`
|
|
215
|
-
(quorum #53) promote to bassclef, they produce files conforming to
|
|
216
|
-
this schema with High evidence-quality ratings by construction.
|
|
217
|
-
|
|
218
|
-
When `/jtbd-tasks` consolidates its Step 0 to delegate to `/personas
|
|
219
|
-
default` or `/personas get`, the "minimum viable persona" variant
|
|
220
|
-
becomes a template preset rather than a parallel shape.
|
|
221
|
-
|
|
222
|
-
Neither consolidation happens in this bet's scope — both deferred to
|
|
223
|
-
follow-up iterations so this standard ships with a stable contract
|
|
224
|
-
first.
|
|
225
|
-
|
|
226
|
-
## Closes
|
|
227
|
-
|
|
228
|
-
- bassclef #200 (companion to quorum #50)
|
|
229
|
-
- Part of iteration `docs/iteration-bets/2026-04-19e-persona-vpc-promotions.md` Stack-1
|