@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,323 +0,0 @@
|
|
|
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)
|
|
@@ -1,115 +0,0 @@
|
|
|
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
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
tier: lite
|
|
3
|
-
description: docs/preview-state/<slug>.yml is the session-spanning state file for each /preview cycle.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Preview-state Schema
|
|
7
|
-
|
|
8
|
-
`docs/preview-state/<slug>.yml` is the **session-spanning state file**
|
|
9
|
-
for each `/preview` cycle. One per slug; persists across `/preview quick`
|
|
10
|
-
→ `/preview light` → `/preview medium` escalations and across operator
|
|
11
|
-
sessions. Read + written by every skill in the preview chain
|
|
12
|
-
(`/preview`, `/luminary`, `/prototype-variants`, `/prototype-gallery`,
|
|
13
|
-
`/ux-migration`).
|
|
14
|
-
|
|
15
|
-
## Why this exists
|
|
16
|
-
|
|
17
|
-
Without persistent state, the preview chain has no memory between
|
|
18
|
-
operator commands. Operator runs `/preview quick "X"` Monday, picks
|
|
19
|
-
variant B, runs `/preview light base=variant-B` Tuesday — the chain
|
|
20
|
-
needs to know:
|
|
21
|
-
- Which variants exist now
|
|
22
|
-
- Which variant the operator picked
|
|
23
|
-
- What luminaries have been tried (for divergence)
|
|
24
|
-
- What scope was rejected (for the rejection-history → next-attempt feedback loop)
|
|
25
|
-
- Whether we're awaiting a pick, escalating, building, or shipped
|
|
26
|
-
|
|
27
|
-
Stuffing this into the operator's head doesn't survive context loss.
|
|
28
|
-
Stuffing it into chronicles doesn't survive cross-session reads. A
|
|
29
|
-
typed YAML file at `docs/preview-state/<slug>.yml` does both.
|
|
30
|
-
|
|
31
|
-
## Schema
|
|
32
|
-
|
|
33
|
-
YAML format (not Markdown — preview state is structured, not narrative).
|
|
34
|
-
|
|
35
|
-
### Required fields
|
|
36
|
-
|
|
37
|
-
```yaml
|
|
38
|
-
slug: <kebab-case-identifier>
|
|
39
|
-
created: <ISO 8601 UTC timestamp>
|
|
40
|
-
current_tier: <pending | quick | light | medium | full>
|
|
41
|
-
status: <pending | awaiting-pick | escalating | migrating | shipped | reset>
|
|
42
|
-
current_variants: [<variant-slug>, ...] # variants live now (post-current-run)
|
|
43
|
-
luminaries_used: [<name>, ...] # cumulative across all runs (drives divergence)
|
|
44
|
-
identity_ref: <path/to/design/identity/X.md or null>
|
|
45
|
-
escalation_history: [] # populated by tier-escalation
|
|
46
|
-
rejection_history: [] # populated by /preview reset
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Optional fields
|
|
50
|
-
|
|
51
|
-
```yaml
|
|
52
|
-
selected_variant: <variant-slug or null> # set on operator pick
|
|
53
|
-
last_run_at: <ISO 8601 UTC> # bumped per /preview invocation
|
|
54
|
-
notes: <free-form prose, multiline OK> # operator scratchpad
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Status values (state machine)
|
|
58
|
-
|
|
59
|
-
| Status | Meaning | Set by |
|
|
60
|
-
|--------|---------|--------|
|
|
61
|
-
| `pending` | New cycle, no variants built yet | `ps_create` |
|
|
62
|
-
| `awaiting-pick` | Variants live at URL, operator hasn't picked | end of `/preview <tier>` |
|
|
63
|
-
| `escalating` | Operator picked + escalation in flight | mid-`/preview` when `base=` set |
|
|
64
|
-
| `migrating` | `/ux-migration` in flight (medium tier) | start of `/ux-migration` step |
|
|
65
|
-
| `shipped` | `/ux-migration` produced build-ready output AND operator approved | end of `/ux-migration` |
|
|
66
|
-
| `reset` | Variants archived; rejection_history populated; awaiting next attempt | `/preview reset <slug>` |
|
|
67
|
-
|
|
68
|
-
### History entries
|
|
69
|
-
|
|
70
|
-
`escalation_history` entries:
|
|
71
|
-
|
|
72
|
-
```yaml
|
|
73
|
-
escalation_history:
|
|
74
|
-
- from: quick
|
|
75
|
-
to: light
|
|
76
|
-
base: variant-b-cooper
|
|
77
|
-
pick_reason: "goal-flow surfaces 'next deal' immediately"
|
|
78
|
-
at: 2026-04-25T10:30Z
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
`rejection_history` entries (populated by `/preview reset`):
|
|
82
|
-
|
|
83
|
-
```yaml
|
|
84
|
-
rejection_history:
|
|
85
|
-
- tier_when_rejected: medium
|
|
86
|
-
variants_archived: [variant-a-tufte, variant-b-cooper, variant-c-prater]
|
|
87
|
-
rejection_reason: "all three failed the 'broker can scan in 10s' test"
|
|
88
|
-
at: 2026-04-25T14:00Z
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
`rejection_reason` is the highest-leverage signal in the file — it
|
|
92
|
-
feeds the next `/preview` attempt as input ("what didn't work").
|
|
93
|
-
|
|
94
|
-
## Lifecycle
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
[ps_create] status: pending, no variants
|
|
98
|
-
│
|
|
99
|
-
↓ /preview quick → builds variants
|
|
100
|
-
[after build] status: awaiting-pick, variants in current_variants[]
|
|
101
|
-
│
|
|
102
|
-
↓ Operator picks (sets selected_variant)
|
|
103
|
-
│
|
|
104
|
-
├─ Escalate: /preview light base=<picked>
|
|
105
|
-
│ status: escalating → awaiting-pick (after build)
|
|
106
|
-
│ escalation_history += entry
|
|
107
|
-
│
|
|
108
|
-
├─ Migrate: /preview medium → /ux-migration
|
|
109
|
-
│ status: migrating → shipped
|
|
110
|
-
│
|
|
111
|
-
└─ Reject all: /preview reset <slug> --reason "..."
|
|
112
|
-
status: reset
|
|
113
|
-
rejection_history += entry
|
|
114
|
-
current_variants archived to docs/prototypes/archive/<slug>/
|
|
115
|
-
next /preview <tier> reads rejection_history as input
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Operations
|
|
119
|
-
|
|
120
|
-
The accessor lib `lib/preview-state.sh` exposes:
|
|
121
|
-
|
|
122
|
-
| Operation | Function | Purpose |
|
|
123
|
-
|-----------|----------|---------|
|
|
124
|
-
| Create | `ps_create <slug>` | Initialize new file with defaults |
|
|
125
|
-
| Read field | `ps_get <slug> <field>` | Scalar fields only (MVP) |
|
|
126
|
-
| Set field | `ps_set <slug> <field> <value>` | Scalar fields only (MVP) |
|
|
127
|
-
| Status | `ps_status <slug>` | Convenience for `ps_get <slug> status` |
|
|
128
|
-
| List | `ps_list` | All known slugs |
|
|
129
|
-
| Archive | `ps_archive <slug>` | Move to `archive/` (timestamped) — used by `/preview kill` |
|
|
130
|
-
| Reset | `ps_reset <slug> <reason>` | Archive variants, populate rejection_history, status: reset |
|
|
131
|
-
| Kill | `ps_kill <slug>` | Hard-archive entire state (rare; requires --confirm at skill level) |
|
|
132
|
-
|
|
133
|
-
Multi-line / list field manipulation (e.g., appending to
|
|
134
|
-
`current_variants` or `escalation_history`) is added by the consuming
|
|
135
|
-
skill (`/preview` itself) since the shape is operation-specific. The
|
|
136
|
-
lib provides primitives; composition lives in skills.
|
|
137
|
-
|
|
138
|
-
## Distinction from related artifacts
|
|
139
|
-
|
|
140
|
-
- **Iteration goal**: scope contract for build work; preview-state is
|
|
141
|
-
the runtime state of the `/preview` cycle that produced the variants
|
|
142
|
-
- **Stack manifest**: per-bet branch coordination; preview-state is
|
|
143
|
-
per-slug (one preview cycle = one slug, may span multiple bets)
|
|
144
|
-
- **Whereami**: project-level snapshot; preview-state is cycle-level
|
|
145
|
-
- **Chronicle**: retrospective narrative; preview-state is current state
|
|
146
|
-
|
|
147
|
-
## Reset is not erasure
|
|
148
|
-
|
|
149
|
-
`/preview reset` archives variants + records rejection rationale +
|
|
150
|
-
restarts at quick. The rejection_history is the **most valuable signal**
|
|
151
|
-
in the schema — it carries forward "what didn't work" as input to the
|
|
152
|
-
next attempt. Erasing it means re-running the same dead-ends.
|
|
153
|
-
|
|
154
|
-
Hard erasure is `/preview kill <slug> --confirm`, rare. Use case:
|
|
155
|
-
abandoned product, slug being retired permanently. Hard kill empties
|
|
156
|
-
all history.
|
|
157
|
-
|
|
158
|
-
## Storage location
|
|
159
|
-
|
|
160
|
-
`docs/preview-state/<slug>.yml` — one file per active slug.
|
|
161
|
-
`docs/preview-state/archive/<slug>-<timestamp>.yml` — archived
|
|
162
|
-
state-files (post-`ps_archive` or `ps_kill`).
|
|
163
|
-
|
|
164
|
-
`docs/preview-state/` is git-tracked (durable across sandbox teardown
|
|
165
|
-
per `mobile-ephemeral-session.md`). Schema lives in this standard;
|
|
166
|
-
template lives at `templates/preview-state.yml`.
|
|
167
|
-
|
|
168
|
-
## Relationship to other standards
|
|
169
|
-
|
|
170
|
-
- `standards/whereami-schema.md` — sibling state artifact at project level
|
|
171
|
-
- `standards/branch-stacking.md` — preview-state is per-slug; stack
|
|
172
|
-
manifests are per-bet
|
|
173
|
-
- `standards/artifact-composition.md` — preview-state cross-references
|
|
174
|
-
bet (consumed by /ux-migration in medium tier) but is not a child of bet
|
|
175
|
-
- `lib/preview-state.sh` (Phase A WS-1) — the typed accessor
|
|
176
|
-
|
|
177
|
-
## Scrutiny
|
|
178
|
-
|
|
179
|
-
This standard meets the bar for bassclef inclusion because:
|
|
180
|
-
|
|
181
|
-
1. `/preview` (Phase B WS-9) consumes it as primary state
|
|
182
|
-
2. `/ux-migration` (Phase D WS-19) consumes `selected_variant` +
|
|
183
|
-
`current_tier` to gate Construction kickoff
|
|
184
|
-
3. `lib/preview-state.sh` is already in bassclef (WS-1) — schema is
|
|
185
|
-
the consumer-facing spec for the lib
|
|
186
|
-
4. Multi-session resumability is the load-bearing property; without
|
|
187
|
-
the schema, resumability is per-slug operator memory
|
|
188
|
-
|
|
189
|
-
Without all four hooks, this standard would be premature documentation.
|