@thebassclef/lite 1.0.4 → 1.1.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 +298 -55
- package/dist/cli.js +298 -55
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- package/package.json +12 -5
|
@@ -0,0 +1,229 @@
|
|
|
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
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Each agent in bassclef has a default set of luminaries — thinkers whose principles guide its decisions.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Pluggable Luminaries
|
|
7
|
+
|
|
8
|
+
Each agent in bassclef has a default set of luminaries — thinkers whose
|
|
9
|
+
principles guide its decisions. App repos that inherit bassclef can
|
|
10
|
+
customize which luminaries are active per agent, per phase, without editing
|
|
11
|
+
bassclef agent definitions directly.
|
|
12
|
+
|
|
13
|
+
Customization lives in `substrate.config.md`. Bassclef defaults are never
|
|
14
|
+
modified. The merge is computed at runtime by the Orchestrator during boot.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## File architecture (as of 2026-04-12)
|
|
19
|
+
|
|
20
|
+
Luminary content lives in **per-luminary files** at `.claude/luminaries/[slug].md`,
|
|
21
|
+
one file per thinker. Agent definitions (`.claude/agents/*.md`) reference
|
|
22
|
+
luminaries by slug and keep a one-line signature; they do NOT duplicate the
|
|
23
|
+
luminary's full content inline.
|
|
24
|
+
|
|
25
|
+
**Why per-file**: Previously luminary content lived inline inside agent
|
|
26
|
+
definitions, squeezed into whatever space the agent file could spare. This
|
|
27
|
+
produced structural sparsity — Designer at 17 luminaries × 4 lines each
|
|
28
|
+
meant every luminary was a name-drop. Three "data-heavy" prototype variants
|
|
29
|
+
(Prater, Norman, Tufte dominants) blurred together because the luminaries
|
|
30
|
+
themselves blurred. Per-file gives each thinker its own budget (40–80 lines),
|
|
31
|
+
lets multiple agents share a single source of truth (Cockburn spans
|
|
32
|
+
Architect, Builder, Shaper), and makes depth structurally enforceable via
|
|
33
|
+
schema.
|
|
34
|
+
|
|
35
|
+
**Depth bar** (see `.claude/luminaries/TEMPLATE.md` for full schema):
|
|
36
|
+
|
|
37
|
+
| Depth | Requirements |
|
|
38
|
+
|-------|-------------|
|
|
39
|
+
| `full` | All schema sections populated — signature, 2–4 named methods, when to channel, stack translation, anti-patterns, worked example, sources, related luminaries. 40–80 lines. |
|
|
40
|
+
| `stub` | Frontmatter + signature + core methods + sources minimum. Lighter entries for luminaries that are legitimate references but don't dominate iteration decisions. |
|
|
41
|
+
|
|
42
|
+
**Signature distinctiveness test**: If you could swap a luminary's signature
|
|
43
|
+
line for another luminary's and nothing would break, the signature is too
|
|
44
|
+
generic. Rewrite. Garrett's "UX is about people" fails this; "Strategy →
|
|
45
|
+
scope → structure → skeleton → surface — every UX has five planes, skip one
|
|
46
|
+
and the next collapses" passes.
|
|
47
|
+
|
|
48
|
+
**New luminary protocol**: Copy `TEMPLATE.md` → `[slug].md`. Populate to
|
|
49
|
+
`full` depth if the luminary will dominate iteration decisions; `stub`
|
|
50
|
+
otherwise. Add a one-line reference in each claiming agent's definition
|
|
51
|
+
pointing at the slug.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Depth standard (as of 2026-04-12b)
|
|
56
|
+
|
|
57
|
+
Every luminary file MUST satisfy:
|
|
58
|
+
|
|
59
|
+
### Required for all depths (full + stub)
|
|
60
|
+
|
|
61
|
+
1. **Frontmatter** — name, slug (kebab-case matching filename),
|
|
62
|
+
claimed_by (list of agents), primary_domain, depth.
|
|
63
|
+
2. **Signature** — one to two sentences capturing the distinctive POV.
|
|
64
|
+
Must pass the **swap test**: if you substituted another luminary's
|
|
65
|
+
signature, would anything meaningfully change? If no, the signature
|
|
66
|
+
is too generic. Rewrite.
|
|
67
|
+
3. **Core methods** — 2–4 named, operational methods. Each must be
|
|
68
|
+
a phrase the agent can invoke by name ("Apply ORCA", "Draw Walking
|
|
69
|
+
Skeleton"). Vague principles without names ("user-centered thinking")
|
|
70
|
+
don't count.
|
|
71
|
+
4. **Sources** — primary sources only. Books, seminal talks, bassclef
|
|
72
|
+
articles by the luminary themselves. No third-party summaries or
|
|
73
|
+
Medium round-ups.
|
|
74
|
+
|
|
75
|
+
### Additional for `full` depth
|
|
76
|
+
|
|
77
|
+
5. **When to channel this luminary** — paragraph-level trigger
|
|
78
|
+
describing concrete conditions (domain, problem type, stakes) where
|
|
79
|
+
this POV dominates. Include "Do NOT channel for:" clause with
|
|
80
|
+
counter-cases.
|
|
81
|
+
6. **Stack translation** — how the POV maps concretely to Next.js +
|
|
82
|
+
Prisma + React + TypeScript + Tailwind + our SDLC.
|
|
83
|
+
7. **Anti-patterns it prevents** — 3–5 specific failure modes this
|
|
84
|
+
POV catches. Each must be concrete (not "bad design") and testable.
|
|
85
|
+
8. **Worked example** — paragraph showing the POV applied to a
|
|
86
|
+
representative problem using our domain entities (Deal, Broker,
|
|
87
|
+
Seller, etc.).
|
|
88
|
+
9. **Related luminaries** — 3–5 named relationships (complements,
|
|
89
|
+
contrasts, builds-on).
|
|
90
|
+
|
|
91
|
+
### Distinctiveness enforcement
|
|
92
|
+
|
|
93
|
+
When signatures fail the swap test, reject and rewrite. Common
|
|
94
|
+
failures:
|
|
95
|
+
|
|
96
|
+
| Generic signature (fails swap) | Distinctive signature (passes) |
|
|
97
|
+
|---|---|
|
|
98
|
+
| "UX is about people, not technology." | "Every user experience has five planes: strategy → scope → structure → skeleton → surface. Skip one and the next collapses." (Garrett) |
|
|
99
|
+
| "Good design is simple." | "Material honesty. Resolve every seam. A product is finished when nothing can be removed without breaking it." (Ive) |
|
|
100
|
+
| "Start with the user." | "Personas are precision tools — each a research-grounded behavioral archetype, not a fictional user." (Cooper) |
|
|
101
|
+
|
|
102
|
+
### Who needs full vs stub
|
|
103
|
+
|
|
104
|
+
**Full** — luminaries that regularly dominate iteration decisions or
|
|
105
|
+
prototype variants. Priority list evolves with use; current full-depth
|
|
106
|
+
list includes: Prater, Norman, Cooper, Garrett, Lupton, Walter, Tidwell,
|
|
107
|
+
Ive, Rams, Tufte, Morville, Fowler, Evans, Beck, Gang of Four, Robert
|
|
108
|
+
C. Martin, Simon Brown, plus 5–15 others who qualify.
|
|
109
|
+
|
|
110
|
+
**Stub** — legitimate references that inform but rarely dominate:
|
|
111
|
+
historical figures, field-specific specialists, tool/system-level
|
|
112
|
+
references (Apple HIG, Conventional Commits, DORA Team, etc.).
|
|
113
|
+
Frontmatter + signature + core methods + sources is the minimum bar.
|
|
114
|
+
|
|
115
|
+
### Review cadence
|
|
116
|
+
|
|
117
|
+
Luminary files should be reviewed when:
|
|
118
|
+
- A new iteration selects them as primary_luminary (opportunity to
|
|
119
|
+
upgrade stub → full if used in anger)
|
|
120
|
+
- A POA prototype sprint uses them and the decomposition reveals gaps
|
|
121
|
+
- bassclef/standards changes affect how we describe stack translation
|
|
122
|
+
|
|
123
|
+
No fixed review cadence; review is event-driven.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Schema
|
|
130
|
+
|
|
131
|
+
Add a `luminaries` block to `substrate.config.md`:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
## Luminaries
|
|
135
|
+
luminaries:
|
|
136
|
+
add:
|
|
137
|
+
designer: [Dieter Rams, Massimo Vignelli]
|
|
138
|
+
builder: [Kent Beck]
|
|
139
|
+
remove:
|
|
140
|
+
builder: [Gang of Four]
|
|
141
|
+
replace:
|
|
142
|
+
creative-director: [Apple HIG, Dieter Rams]
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Agent names match the lowercase agent role: `designer`, `builder`,
|
|
146
|
+
`architect`, `pm`, `shaper`, `reviewer`, `creative-director`, `deployer`,
|
|
147
|
+
`closer`, `orchestrator`.
|
|
148
|
+
|
|
149
|
+
### Operations
|
|
150
|
+
|
|
151
|
+
| Operation | Meaning |
|
|
152
|
+
|-----------|---------|
|
|
153
|
+
| `add` | Bassclef defaults + these additional luminaries |
|
|
154
|
+
| `remove` | Bassclef defaults minus these luminaries |
|
|
155
|
+
| `replace` | Ignore bassclef defaults — use only these luminaries |
|
|
156
|
+
|
|
157
|
+
Operations compose in order: `replace` wins if present, otherwise
|
|
158
|
+
`add` and `remove` both apply to the bassclef defaults. A single
|
|
159
|
+
agent can appear in `add` and `remove` simultaneously — the result is
|
|
160
|
+
`(defaults + add) - remove`.
|
|
161
|
+
|
|
162
|
+
If no `luminaries` section exists in `substrate.config.md`, bassclef
|
|
163
|
+
defaults are used unchanged.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Per-phase overrides (advanced)
|
|
168
|
+
|
|
169
|
+
An agent's luminary set can differ by phase:
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
luminaries:
|
|
173
|
+
add:
|
|
174
|
+
designer:
|
|
175
|
+
elaboration: [Sophia Prater]
|
|
176
|
+
construction: [Apple HIG]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
When phase-keyed entries are present, the flat form is not valid for that
|
|
180
|
+
agent — use phase keys consistently for clarity. If an entry for a phase
|
|
181
|
+
is not provided, bassclef defaults apply for that phase.
|
|
182
|
+
|
|
183
|
+
Per-phase overrides support `add`, `remove`, and `replace` for each phase
|
|
184
|
+
key. The top-level agent name cannot mix flat and phase-keyed forms in the
|
|
185
|
+
same operation:
|
|
186
|
+
|
|
187
|
+
```markdown
|
|
188
|
+
# Valid — consistent phase keys
|
|
189
|
+
luminaries:
|
|
190
|
+
add:
|
|
191
|
+
designer:
|
|
192
|
+
elaboration: [Sophia Prater]
|
|
193
|
+
construction: [Apple HIG]
|
|
194
|
+
|
|
195
|
+
# Invalid — do not mix flat and phase-keyed
|
|
196
|
+
luminaries:
|
|
197
|
+
add:
|
|
198
|
+
designer: [Sophia Prater] # flat
|
|
199
|
+
designer.construction: [Apple HIG] # phase-keyed — not supported
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Merge algorithm
|
|
205
|
+
|
|
206
|
+
The Orchestrator resolves the active luminary set for each agent during
|
|
207
|
+
boot (step 1 of the boot sequence in `strategy/agent-choreography.md`).
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
function resolve_luminaries(agent, phase, config, bassclef_defaults):
|
|
211
|
+
|
|
212
|
+
if config.luminaries is empty:
|
|
213
|
+
return bassclef_defaults[agent]
|
|
214
|
+
|
|
215
|
+
base = bassclef_defaults[agent]
|
|
216
|
+
|
|
217
|
+
# Step 1: replace wins
|
|
218
|
+
if agent in config.luminaries.replace:
|
|
219
|
+
entries = config.luminaries.replace[agent]
|
|
220
|
+
if is_phase_keyed(entries):
|
|
221
|
+
base = entries[phase] if phase in entries else bassclef_defaults[agent]
|
|
222
|
+
else:
|
|
223
|
+
base = entries
|
|
224
|
+
# add/remove do not apply after replace
|
|
225
|
+
return base
|
|
226
|
+
|
|
227
|
+
# Step 2: add
|
|
228
|
+
if agent in config.luminaries.add:
|
|
229
|
+
entries = config.luminaries.add[agent]
|
|
230
|
+
additions = entries[phase] if is_phase_keyed(entries) else entries
|
|
231
|
+
base = base + additions
|
|
232
|
+
|
|
233
|
+
# Step 3: remove
|
|
234
|
+
if agent in config.luminaries.remove:
|
|
235
|
+
entries = config.luminaries.remove[agent]
|
|
236
|
+
removals = entries[phase] if is_phase_keyed(entries) else entries
|
|
237
|
+
base = [l for l in base if l not in removals]
|
|
238
|
+
|
|
239
|
+
return base
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The bassclef defaults are the luminary lists defined in each agent
|
|
243
|
+
definition file (`.claude/agents/{role}.md`). These are never modified by
|
|
244
|
+
app-level config.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Validation
|
|
249
|
+
|
|
250
|
+
The Orchestrator warns (does not block) on these conditions:
|
|
251
|
+
|
|
252
|
+
| Condition | Warning |
|
|
253
|
+
|-----------|---------|
|
|
254
|
+
| A name in `remove` does not match any bassclef default for that agent | `WARN: remove lists "[Name]" for [agent] but it is not in bassclef defaults` |
|
|
255
|
+
| A `replace` set is empty | `WARN: replace for [agent] is empty — agent will have no luminaries` |
|
|
256
|
+
| A phase key in a per-phase override does not match a known phase | `WARN: phase key "[phase]" in luminaries config is not a recognized phase` |
|
|
257
|
+
|
|
258
|
+
Warnings surface in the boot report. They do not block execution.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Boot report surface
|
|
263
|
+
|
|
264
|
+
At boot (step 8 of `/autonomous start`), the Orchestrator reports the
|
|
265
|
+
resolved luminary set per agent. See `strategy/agent-choreography.md`
|
|
266
|
+
Section 1 for the boot report format.
|
|
267
|
+
|
|
268
|
+
Format:
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
Active luminaries:
|
|
272
|
+
Designer: Don Norman, Sophia Prater, Apple HIG (+2 from config)
|
|
273
|
+
Builder: Martin Fowler, SOLID (-GoF, +Kent Beck from config)
|
|
274
|
+
Creative Director: Apple HIG, Dieter Rams (replaced from config)
|
|
275
|
+
Architect: [bassclef defaults]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Agents using bassclef defaults without modification are shown with
|
|
279
|
+
`[bassclef defaults]` — do not list every luminary for every agent at
|
|
280
|
+
boot. Only show the delta annotation for agents that have overrides.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Rationale
|
|
285
|
+
|
|
286
|
+
Luminaries are not decorative. They determine which principles the agent
|
|
287
|
+
applies when faced with trade-offs. A CRUD-heavy app repo may find GoF
|
|
288
|
+
patterns too heavy for the Builder. A brand-focused creative sprint may
|
|
289
|
+
want Dieter Rams over whatever bassclef defaults. A regulated industry
|
|
290
|
+
repo may want explicit risk-oriented luminaries in the Architect slot.
|
|
291
|
+
|
|
292
|
+
Bassclef cannot anticipate every project's aesthetic, technical, and
|
|
293
|
+
domain needs. This standard makes the luminary layer composable — app
|
|
294
|
+
repos add their perspective without forking agent definitions.
|
|
295
|
+
|
|
296
|
+
The merge model (add/remove/replace) was chosen over a full override
|
|
297
|
+
because:
|
|
298
|
+
- Most repos want to tune, not replace, bassclef judgment
|
|
299
|
+
- `replace` exists as an escape hatch for radically different contexts
|
|
300
|
+
- Bassclef defaults remain the stable base — upgrades propagate to all
|
|
301
|
+
repos that don't override the changed luminary
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Example: app repo configuration
|
|
306
|
+
|
|
307
|
+
```markdown
|
|
308
|
+
## Luminaries
|
|
309
|
+
luminaries:
|
|
310
|
+
add:
|
|
311
|
+
designer: [Dieter Rams, Massimo Vignelli]
|
|
312
|
+
builder: [Kent Beck]
|
|
313
|
+
remove:
|
|
314
|
+
builder: [Gang of Four]
|
|
315
|
+
replace:
|
|
316
|
+
creative-director: [Apple HIG, Dieter Rams]
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
This configuration:
|
|
320
|
+
- Adds two visual-system thinkers to the Designer for a brand-heavy product
|
|
321
|
+
- Adds Kent Beck's TDD emphasis to the Builder
|
|
322
|
+
- Removes GoF from the Builder (this is a simple CRUD app — patterns overhead is not worth it)
|
|
323
|
+
- Replaces Creative Director's entire luminary set with Apple HIG + Dieter Rams (full override for a minimalist product direction)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: PR bodies are public substrate. When bassclef (and bassclef) ship public, PR bodies become permanent public history visible to every adopter, contributor, and reader who follows a commit back to its PR. This standard documents the scrub discipline…
|
|
4
|
+
---
|
|
5
|
+
<!-- andon-allow: docs/operator-private/[a-z-]+/20[0-9][0-9]-[0-9]{2} -->
|
|
6
|
+
|
|
7
|
+
# PR-body discipline — scrub before push
|
|
8
|
+
|
|
9
|
+
PR bodies are public substrate. When bassclef (and bassclef) ship public, PR bodies become permanent public history visible to every adopter, contributor, and reader who follows a commit back to its PR. This standard documents the scrub discipline that applies to every PR body before push.
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
|
|
13
|
+
Every PR opened against bassclef's main branch, regardless of authoring path:
|
|
14
|
+
|
|
15
|
+
- Operator-direct authoring via `gh pr create`
|
|
16
|
+
- Skill-authored PRs from /longrun, /sprint, /autonomous, /build, /promote, and any future PR-authoring skill
|
|
17
|
+
- Agent-authored PRs in interactive sessions
|
|
18
|
+
|
|
19
|
+
The discipline applies BEFORE push, not after merge. A PR body that lands public is harder to scrub than a PR body that gets revised before push.
|
|
20
|
+
|
|
21
|
+
## Three scrub criteria
|
|
22
|
+
|
|
23
|
+
### Criterion 1 — No operator-private path citations
|
|
24
|
+
|
|
25
|
+
PR body refs and inline citations must not reference paths under `docs/operator-private/*`. Those paths are gitignored; citations point at files invisible to public readers. The citation tells the reader to consult evidence they cannot access — worse than not citing at all.
|
|
26
|
+
|
|
27
|
+
Where the PR genuinely needs to cite a private path for completeness, use stub framing:
|
|
28
|
+
|
|
29
|
+
| Avoid | Use |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `per docs/operator-private/strategy/2026-05-25-locked-decisions.md` | `per internal strategic decision` |
|
|
32
|
+
| `canvas at docs/operator-private/canvases/bassclef-public-launch-lean-canvas.md surfaced X` | `internal canvas walk surfaced X` |
|
|
33
|
+
| `audit finding F-D9.1 at docs/operator-private/audits/2026-05-25-...md` | `audit finding F-D9.1 (audit HIGH)` |
|
|
34
|
+
|
|
35
|
+
The stub preserves the substantive claim (an internal decision happened; a canvas walk surfaced something; an audit produced a finding) without exposing the specific operator-private path.
|
|
36
|
+
|
|
37
|
+
### Criterion 2 — No operator-strategic deliberation as PR justification
|
|
38
|
+
|
|
39
|
+
PR body justification frames mechanically: what the PR does + which acceptance criterion it closes + which downstream work it unblocks. Not: why the operator decided what they decided + the strategic-pivot reasoning + the alternatives considered.
|
|
40
|
+
|
|
41
|
+
Specifically scrub:
|
|
42
|
+
|
|
43
|
+
- Strategic pivot reasoning (e.g., "IP-protection-vs-growth-loop", "Tier 1 selection trade-offs")
|
|
44
|
+
- Leap-of-faith framing (e.g., "LF1 Morgan-as-gatekeeper riskiest assumption analysis")
|
|
45
|
+
- Canvas-walk findings exposition (the canvas surfaces what was found; the PR ships the mechanical change, not the canvas analysis)
|
|
46
|
+
- Audit-finding internal reasoning (cite the finding number + the mechanical fix; don't re-expose the audit analysis)
|
|
47
|
+
- Persona-divergence analysis (operator-strategic reasoning belongs in canvas/audit, not PR)
|
|
48
|
+
|
|
49
|
+
Mechanical framing examples:
|
|
50
|
+
|
|
51
|
+
| Avoid | Use |
|
|
52
|
+
|---|---|
|
|
53
|
+
| "Why now: the canvas-walk surfaced that ADR-021's framing contradicts the operator's locked growth-loop pivot. The canvas Revenue Streams box names HashiCorp-pattern downstream commercialization paths as option preserved, not roadmap committed — explicitly NOT an IP-protection play." | "Why now: amends language to reflect locked decision per 2026-05-25 strategic call." |
|
|
54
|
+
| "Closes F-D9.1 (audit HIGH from /lean-canvas walk; Jamie reads the README hedge in 'Why this exists' as load-bearing weak signal; Sam adopts 'personal project that grew' mental model)" | "Closes audit finding F-D9.1 (README hedges audience)." |
|
|
55
|
+
|
|
56
|
+
The reader of the public PR sees what changed + which acceptance criterion it closes. They don't see the operator's strategic deliberation; that deliberation lives in operator-private substrate where it belongs.
|
|
57
|
+
|
|
58
|
+
### Criterion 3 — Plain-language gloss + /kiss pass per bassclef#790
|
|
59
|
+
|
|
60
|
+
Apply the gloss-at-first-mention rule per `standards/operator-facing-prose-discipline.md` to all shorthand referenced in the PR body. Apply /kiss vocabulary substitution per `.claude/rules/plain-english-discipline.md` to remove bassclef-internal compound terms.
|
|
61
|
+
|
|
62
|
+
This criterion composes with criteria 1 and 2: the scrub passes BOTH the operator-private check AND the plain-language check.
|
|
63
|
+
|
|
64
|
+
## Scrub workflow
|
|
65
|
+
|
|
66
|
+
Before `gh pr create` or `gh pr edit`:
|
|
67
|
+
|
|
68
|
+
1. **Read the drafted PR body** as if reading it for the first time as a public adopter
|
|
69
|
+
2. **Apply Criterion 1** — search for `docs/operator-private/` substrings; replace with stub framing or remove
|
|
70
|
+
3. **Apply Criterion 2** — identify strategic-deliberation paragraphs; replace with mechanical framing
|
|
71
|
+
4. **Apply Criterion 3** — gloss + /kiss pass per bassclef#790
|
|
72
|
+
5. **Push the scrubbed body**
|
|
73
|
+
|
|
74
|
+
The scrub is part of the same authoring cycle, not a separate review pass.
|
|
75
|
+
|
|
76
|
+
## What this discipline does NOT require
|
|
77
|
+
|
|
78
|
+
- **Scrubbing commit messages.** Commit messages are also public history but follow `commit-conventions.md` separately. Operator-private path citations in commit messages should also be avoided, but PR-body scrub is the primary surface this standard covers.
|
|
79
|
+
- **Scrubbing operator-private files themselves.** Files under `docs/operator-private/*` stay as-is; they're gitignored. The scrub applies to PR bodies that reference them.
|
|
80
|
+
- **Hiding the existence of operator-private work.** PR bodies can say "internal canvas walk produced this change" — what they can't do is cite the specific path.
|
|
81
|
+
|
|
82
|
+
## Enforcement layers
|
|
83
|
+
|
|
84
|
+
| Layer | Mechanism | Status |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| Methodology | This standard + `.claude/rules/operator-facing-prose.md` (bassclef#790 sibling rule) | Loaded into every session via `additionalDirectories` |
|
|
87
|
+
| Skill-level | /longrun, /sprint, /autonomous SKILL.md cite this standard + run scrub before PR push | Lands in WU-4 + WU-5 of /longrun discipline-as-substrate (2026-05-30) |
|
|
88
|
+
| Authoring discipline | Operator + agent self-scrub before push | Methodology-level |
|
|
89
|
+
| Mechanical | bassclef#739 (substrate-coherence CI) extension lints PR bodies for `docs/operator-private/*` citations | Deferred — methodology-first |
|
|
90
|
+
| /kiss PR-body hook | Advisory today; bassclef#786 decides hard-block vs advisory-with-skill-discipline | Pending operator decision |
|
|
91
|
+
|
|
92
|
+
## Why this discipline matters
|
|
93
|
+
|
|
94
|
+
The bassclef launch promise: "operators get a working methodology they can apply to their own products." PR bodies are part of the public substrate adopters read. If PRs cite operator-private paths and expose operator-strategic deliberation, three failure modes:
|
|
95
|
+
|
|
96
|
+
1. **Adopter encounters broken citations.** "Per docs/operator-private/strategy/..." — adopter clicks through, finds nothing, loses trust in citation discipline elsewhere
|
|
97
|
+
2. **Operator-private strategic context becomes public via PR-body archaeology.** Strategic pivots, leap-of-faith assumptions, alternative scenarios all leak via PR body history even though the source canvas is operator-private
|
|
98
|
+
3. **PR review noise.** Reviewers read multi-paragraph strategic exposition when they need to evaluate a 3-line mechanical change
|
|
99
|
+
|
|
100
|
+
Scrub discipline at push closes all three.
|
|
101
|
+
|
|
102
|
+
## Surfaced in
|
|
103
|
+
|
|
104
|
+
- PR #773 (ADR-021 amendment) — operator caught operator-private path citations + multi-paragraph strategic-pivot exposition in public PR body before merge. Operator manually scrubbed before merging.
|
|
105
|
+
- Pattern recurs across /longrun-authored PRs from 2026-05-29 session; backlog: review prior PR bodies on bassclef for similar leakage.
|
|
106
|
+
|
|
107
|
+
## Refs
|
|
108
|
+
|
|
109
|
+
- bassclef#787 — parent ticket
|
|
110
|
+
- bassclef#769 — canvas-path discipline (same principle for canvas file location)
|
|
111
|
+
- bassclef#790 — operator-facing-prose discipline (gloss + /kiss pass; composes with this standard)
|
|
112
|
+
- bassclef#786 — /kiss PR-body hook enforcement decision (mechanical layer for criterion 3)
|
|
113
|
+
- bassclef#739 — substrate-coherence CI (extension surface for mechanical lint)
|
|
114
|
+
- `.claude/rules/plain-english-discipline.md` — master plain-English rule
|
|
115
|
+
- `standards/operator-facing-prose-discipline.md` — gloss rule + /kiss pass on SKILL.md edits
|