@thebassclef/lite 0.1.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +431 -135
  2. package/dist/cli.js +433 -137
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
  8. package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
  9. package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
  10. package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
  11. package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
  12. package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
  13. package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
  14. package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
  15. package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
  16. package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
  17. package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
  18. package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
  19. package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
  20. package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
  21. package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
  22. package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
  23. package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
  24. package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
  25. package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
  26. package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
  27. package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
  28. package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
  29. package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
  30. package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
  31. package/dist/lite/.claude/settings.json +212 -0
  32. package/dist/lite/CLAUDE.md +41 -0
  33. package/dist/lite/gitignore +58 -0
  34. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  35. package/dist/lite/whereami.md +24 -0
  36. package/package.json +8 -2
  37. package/substrate/.bassclef/lite-manifest.json +0 -2701
  38. package/substrate/.claude/agents/architect.md +0 -70
  39. package/substrate/.claude/agents/builder.md +0 -114
  40. package/substrate/.claude/agents/designer.md +0 -156
  41. package/substrate/.claude/agents/reviewer.md +0 -88
  42. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  43. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,99 +0,0 @@
1
- ---
2
- tier: lite
3
- name: pattern-review
4
- description: "Review code through the lens of world-class engineering patterns \u2014 GoF, Fowler, SOLID, DDD. Flag violations and suggest improvements. Complements /architect-review which is system-level."
5
- problem: "Code review catches style but misses architecture. A wrong pattern ships and blocks future work."
6
- value: "Review through the lens of GoF and Fowler and SOLID and DDD. Names the pattern gap or misuse."
7
- inputs: [A file path or PR ref or code block]
8
- outputs: [Pattern gap list, Misuse findings, Suggested pattern per finding]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- ---
12
-
13
- # Principal Engineer Review
14
-
15
- Apply time-tested software engineering patterns as a review lens.
16
-
17
- ## Patterns to Apply
18
-
19
- ### Design judgment — per @luminary john-ousterhout
20
-
21
- The lens that asks whether the shape is right in the first place. Beck (TDD) and Fowler (refactoring tactics) presume a target shape; Ousterhout supplies the criteria for choosing the target.
22
-
23
- - **Deep modules** — a module is deep when it has a small interface and a large, complex implementation hidden behind it. When a class is being split for "smaller files," check: does the split produce TWO deep modules, or TWO shallow ones?
24
- INSTEAD of accepting file-size as the splitting metric: use interface-shape as the metric. Two shallow modules from a split is a regression even if the line count drops.
25
- - **Comments encode design decisions code cannot** — every non-obvious comment must say WHY (invariant), WHAT-IF (alternative considered and rejected), or WATCH-OUT (subtle constraint). Comments that restate code are noise; comments that record design decisions are essential. Flag the noise; preserve the design comments.
26
- - **Complexity is incremental** — flag the small drips at review time, not the large refactor later. A single special case, a single dependency, a single inconsistency adds nothing visible today and compounds across releases.
27
- - **Define errors out of existence** — when a review surfaces an API that throws errors callers must handle, ask whether the API can be redesigned so the error condition cannot occur. Idempotent operations and bootstrapping-on-missing are stronger than BLOCK-on-missing.
28
-
29
- When you cite `@luminary john-ousterhout`, you are citing the design-judgment lens. Pair it with Beck (test mechanics), Fowler (refactoring tactics), or GoF (pattern selection) when the review needs those lenses too.
30
-
31
- ### SOLID Principles — per @luminary robert-c-martin
32
- - **SRP** — Does this module do one thing? Would you change it for more than one reason?
33
- - **OCP** — Can you extend behavior without modifying existing code?
34
- - **LSP** — Can subtypes replace their parents without breaking callers?
35
- - **ISP** — Are interfaces lean? Do implementers stub methods they don't use?
36
- - **DIP** — Do high-level modules depend on abstractions, not concretions?
37
-
38
- Check: does business logic import framework or persistence code? That violates the Dependency Rule per @luminary robert-c-martin (Clean Architecture). Functions that do more than one thing, and modules with multiple reasons to change, are SOLID red flags. Boy Scout rule applies — leave the code cleaner than you found it.
39
-
40
- ### Gang of Four (GoF) patterns — per @luminary gang-of-four — Apply When Relevant
41
- - **Strategy** — scoring dimensions, data sources (each implements same interface)
42
- - **Observer** — job completion events, webhook callbacks
43
- - **Factory** — creating agents/workers by type
44
- - **Template Method** — base class with customizable steps
45
- - **Adapter** — wrapping external APIs with consistent interface
46
- - **Decorator** — cross-cutting concerns (observability, caching, auth) wrapping interfaces
47
-
48
- Per @luminary gang-of-four — the two opening principles of *Design Patterns*: program to an interface, not an implementation; favor object composition over class inheritance. Apply patterns when variation pressure or structural friction exists — not for aesthetics. Pattern stacking (five patterns where two would do) carries cognitive cost; each pattern earns its place.
49
-
50
- ### Fowler patterns — per @luminary martin-fowler
51
- - **Repository** — data access abstraction (are queries leaking business logic?)
52
- - **Service Layer** — is business logic in the right layer?
53
- - **Domain Events** — should actions trigger other actions?
54
- - **Value Objects** — are primitives used where domain types would be clearer?
55
- - **Specification** — complex query filters should be composable
56
-
57
- Code smells per @luminary martin-fowler (*Refactoring*): Long Method, Feature Envy, Shotgun Surgery (one change touches many unrelated files), Primitive Obsession (strings where domain types would clarify), Data Clumps, Inappropriate Intimacy. Name the smell, then name the refactoring that addresses it. When a change is hard, first refactor to make the change easy — then make the easy change.
58
-
59
- ### Stability patterns — per @luminary michael-nygard (*Release It!*)
60
- - **Circuit Breaker** — external service calls guarded; the three states (Closed / Open / Half-Open) prevent cascading failure
61
- - **Bulkhead** — thread pools / queue slots bounded per integration; one slow dependency can't starve others
62
- - **Timeout** — every integration point has explicit connect + read timeouts; no unbounded blocking calls
63
- - **Fail Fast** — validate at system boundaries; reject requests immediately when a known failure condition exists
64
-
65
- Check: any integration point without a circuit breaker is a cascading-failure risk per @luminary michael-nygard. Any call chain where one slow dependency can exhaust shared resources needs a bulkhead. Stability patterns are for integration points and external boundaries — not internal application logic.
66
-
67
- ### Domain-Driven Design — per @luminary eric-evans
68
- - **Bounded Contexts** — are domains properly separated? Does each module use one consistent model?
69
- - **Aggregates** — are entity boundaries correct? Does one root control access?
70
- - **Ubiquitous Language** — do code terms match business terms? "DealRecord" for what the business calls "Deal" is a vocabulary leak.
71
-
72
- Per @luminary eric-evans (DDD blue book): the model is the backbone of the design; bounded contexts let multiple models coexist without collapsing into mud. Watch for anemic domain models — objects that hold data without behavior, with business logic scattered across services.
73
-
74
- ### Pragmatic Rules
75
- - **YAGNI** — Don't build what you don't need. DO build the boundary so it's easy to add later.
76
- - **Tell, Don't Ask** — Objects should do things, not be interrogated for state
77
- - **Law of Demeter** — Don't reach through objects
78
- - **Composition over Inheritance** — Prefer composing behaviors (per @luminary gang-of-four opening principle)
79
- - **Fail Fast** — Validate at boundaries, throw early (per @luminary michael-nygard)
80
-
81
- ## Review Procedure
82
-
83
- 1. Read the code being reviewed
84
- 2. For each file/module, check against the patterns above
85
- 3. Flag violations with: pattern violated, current code, suggested improvement, severity
86
- 4. Acknowledge good patterns already in place
87
- 5. Produce summary: N critical, N improvement, N nitpick
88
-
89
- ## When NOT to Apply
90
-
91
- - Don't over-engineer simple CRUD
92
- - Don't add abstractions for one-time operations
93
- - Don't refactor working code just because it could be "more OOP"
94
- - Three similar lines is better than a premature abstraction
95
- - Apply patterns when they solve a real problem, not for aesthetics
96
-
97
- ## Output discipline
98
-
99
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -1,207 +0,0 @@
1
- ---
2
- tier: lite
3
- name: personas
4
- description: "Load, list, and manage user personas \u2014 the bassclef WHO record. Downstream skills (value-prop-canvas, synthetic-user, user-stories, jtbd-tasks) read from its output. Defaults to operator when no personas exist."
5
- problem: "Product decisions get made for a nameless user. Downstream skills invent personas per session."
6
- value: "One record of the WHO the product serves. Every skill reads the same personas."
7
- inputs: [Manage command — list or add or edit or delete]
8
- outputs: [Persona list with names and jobs, Loaded into session for downstream skills]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- ---
12
-
13
- # /personas — Bassclef Persona Primitive
14
-
15
- The WHO building block for bassclef. Load personas from a repo's persona
16
- directory, list them with summary, get one by slug, or fall back to a
17
- minimal operator-default when no personas exist.
18
-
19
- Downstream skills read personas via the file-system convention below —
20
- not via an in-memory API. The "interface" is a directory shape + a
21
- schema, not a function signature. That keeps the primitive compatible
22
- with every agent session regardless of runtime.
23
-
24
- ## Sources read
25
-
26
- - Roman Pichler — *The Persona Template* (goal + tasks + approach + context + knowledge + biography). https://www.romanpichler.com/the-persona-template/ — .
27
- - Agile Alliance — *Personas* glossary entry. https://agilealliance.org/glossary/personas/
28
- - Atlassian — *User Stories + Personas* overview. https://www.atlassian.com/agile/project-management/user-stories
29
- - `standards/persona-schema.md` — bassclef schema (this skill's companion standard; Stack-1 artifact)
30
- - `templates/persona-template.md` — bassclef template (this skill's companion template; Stack-1 artifact)
31
- - `.claude/skills/jtbd-tasks/SKILL.md` Step 0 — existing "minimum viable persona" (5 fields). Subset of Pichler; remains valid. Path `docs/design/personas/` supported as legacy.
32
- - `.claude/skills/synthetic-user/SKILL.md` — existing consumer; reads `docs/design/personas/`. This skill keeps that read-path working.
33
- - Quorum's `docs/personas/*.md` (3 files: couple-founders, cofounder-pair, operator-advisor) — evidence format reference. Schema validates them without forcing edits.
34
-
35
- ## What I'm NOT reading
36
-
37
- - Alan Cooper *Inmates* archetype-persona framework — adjacent theory; schema is Pichler-shaped per ticket, Cooper referenced in the template as further reading
38
- - Upstream persona generators (`/psychographic-mine`, `/auto-user-research`) — deferred to later bassclef promotion bet; this skill ships the consumer contract only
39
-
40
- ## When to invoke
41
-
42
- - Before running `/value-prop-canvas`, `/synthetic-user`, `/risk-test-synthetic`, `/jtbd-tasks`, `/user-stories`, `/spec`, `/riff-prototypes` — those skills read persona output
43
- - When onboarding a new repo that needs persona definitions
44
- - When the operator asks "who are our users?"
45
-
46
- ## Usage
47
-
48
- ```
49
- /personas → list all personas in the repo (summary table)
50
- /personas list → same as default
51
- /personas get [slug] → print full persona file
52
- /personas default → emit operator-default (when no personas exist)
53
- /personas validate → walk every persona file against the schema, report findings
54
- ```
55
-
56
- ## Procedure
57
-
58
- ### Step 1: Locate persona files
59
-
60
- Search for persona files in this order:
61
-
62
- 1. `docs/personas/*.md` — **preferred bassclef path**
63
- 2. `docs/design/personas/*.md` — legacy path (supported for backward compat with `/jtbd-tasks` + `/synthetic-user`)
64
- 3. If neither directory exists: proceed to operator-default fallback (Step 4)
65
-
66
- Both paths are valid. When both exist, prefer `docs/personas/` and warn the operator that legacy path files are being ignored (offer to migrate).
67
-
68
- ### Step 2: List mode (default)
69
-
70
- Emit a summary table:
71
-
72
- ```markdown
73
- | Slug | Name | Goal (1-line) | Evidence quality | Location |
74
- |------|------|---------------|-----------------|----------|
75
- | ... | ... | ... | High/Medium/Low/— | docs/personas/... |
76
- ```
77
-
78
- If a persona omits an evidence-quality field, render `—` (don't invent a rating).
79
-
80
- ### Step 3: Get mode
81
-
82
- Print the full persona file content. Verify required fields (see schema) before emitting; if any required field is missing, print the file AND a WARN block listing gaps.
83
-
84
- ### Step 4: Operator-default fallback
85
-
86
- When no persona files exist in the repo, auto-populate a minimal persona file for "you" (the operator) from:
87
-
88
- - `CLAUDE.md` — read the "What this repo is" / "Active initiative" sections for goal context
89
- - `substrate.config.md` — read `agents:` and `deploy_targets:` for role context
90
- - If a git `user.email` exists, use it to derive a rough slug (`operator-[local-part]`), otherwise `operator`
91
-
92
- Emit the operator default to the conversation (not to disk — operator decides whether to persist it):
93
-
94
- ```markdown
95
- # Persona — Operator (you)
96
-
97
- **Slug:** operator
98
- **Name:** you
99
- **Goal:** [inferred from CLAUDE.md "Active initiative" or similar section, one line]
100
- **Context:** [repo name + project_level + active iteration from whereami if present]
101
- **Knowledge:** [domain cues from CLAUDE.md — frameworks, subsystems]
102
- **Evidence quality:** — (auto-populated default; no source-trace)
103
- ```
104
-
105
- Tell the operator: "No personas found. Emitted operator-default for `you`. Run `/personas validate` after adding real persona files to `docs/personas/`."
106
-
107
- ### Step 5: Validate mode
108
-
109
- For each file under `docs/personas/*.md` (and legacy path), check:
110
-
111
- - [ ] Required fields present (slug, name) — FAIL if absent
112
- - [ ] Slug matches filename basename (`couple-founders.md` → slug: couple-founders) — FAIL on mismatch
113
- - [ ] Pichler recommended fields (goal, tasks, approach, context, knowledge, biography) present — WARN (not FAIL) on absence; small personas are valid, just thin. If `goal` is missing but the file has a `## JTBD statements` section, print an INFER line suggesting a goal line derived from the first JTBD — operator reviews, not auto-write.
114
- - [ ] Evidence-traceability: if persona contains claims about pain points, workflows, or behavior, at least one claim is cited to a source (internal research doc OR external URL). WARN on orphan claims.
115
- - [ ] No duplicate slugs across files — FAIL on duplicate
116
-
117
- Output format:
118
-
119
- ```markdown
120
- ## Persona validation
121
-
122
- **Files scanned**: N in docs/personas/, M in docs/design/personas/
123
-
124
- | File | Required | Pichler | Evidence | Slug-match | Status |
125
- |------|----------|---------|----------|-----------|--------|
126
- | couple-founders.md | ✅ | ✅ (all 6) | ✅ (5 citations) | ✅ | PASS |
127
- | minimal.md | ✅ | ⚠️ (goal + context only) | ⚠️ (1 orphan claim) | ✅ | WARN |
128
- | ...
129
-
130
- **Pass**: N | **Warn**: M | **Fail**: K
131
- ```
132
-
133
- Fail means a required field is missing — the persona can't be safely consumed. Warn means the persona works but would benefit from enrichment.
134
-
135
- ## Schema (summary)
136
-
137
- Required (every persona — FAIL if absent):
138
- - `slug` — URL-safe identifier; filename basename
139
- - `name` — human-readable display name (H1 counts)
140
-
141
- Recommended (Pichler — WARN if absent):
142
- - `goal` — one-line "what this persona is trying to accomplish" (downstream skills infer from Role/Context/JTBD sections when missing, but the inference is lossy)
143
- - `tasks` — recurring tasks in pursuit of the goal
144
- - `approach` — how they go about it (habits, tools, rhythm)
145
- - `context` — life / business / organizational context
146
- - `knowledge` — domain expertise, jargon comfort, technical fluency
147
- - `biography` — background, archetype, formative influences
148
-
149
- Recommended (evidence-traceability):
150
- - `provenance` section — where the persona comes from (research doc, interviews, analytics, external article URLs)
151
- - Every claim about pain/behavior/workflow traces to a source
152
-
153
- Full schema: `standards/persona-schema.md`. Template: `templates/persona-template.md`.
154
-
155
- ## Operator-default: when it's OK, when it isn't
156
-
157
- The operator-default fallback prevents skills from crashing in repos without personas. **Use it to bootstrap, not to replace real personas.**
158
-
159
- When operator-default is appropriate:
160
- - New repo, first iteration, no user research yet
161
- - Internal tooling where the operator IS the user
162
- - Spike / prototype sessions where user identity is deliberately deferred
163
-
164
- When it's a red flag:
165
- - `/synthetic-user` running against operator-default at Tier 3 — you're testing whether the operator can use their own tool, which is not the same as user testing
166
- - `/value-prop-canvas` built from operator-default — value props for "you" tell you nothing about fit for real customers
167
- - Iteration bet's "lovability signal" tied to operator-default — that's the operator proxy-hypothesizing, not evidence
168
-
169
- `/personas validate` surfaces these cases with a note: "Only operator-default persona found; consider adding real personas before [downstream skill]."
170
-
171
- ## Relationship to other skills
172
-
173
- | Skill | How it composes with `/personas` |
174
- |-------|---------------------------------|
175
- | `/value-prop-canvas` | Reads `/personas list` → produces one canvas per persona. 1:1 with persona, never "one for all." |
176
- | `/synthetic-user` | Reads personas; runs Tier 3 journeys per persona. Replaces the implicit "operator as user" assumption. |
177
- | `/risk-test-synthetic` | Reads personas; produces risk × persona × artifact matrix. |
178
- | `/jtbd-tasks` | Current Step 0 bootstraps a "minimum viable persona" (5 fields). That remains valid as a subset; consolidation to `/personas` tracked as follow-up. |
179
- | `/user-stories` | Reads persona.name for the `As a [persona]` clause in INVEST stories. |
180
- | `/spec` | Spec actors resolve to persona slugs when personas exist. |
181
- | `/riff-prototypes` | Prototype evaluation references personas for fit checks. |
182
- | `/psychographic-mine`, `/auto-user-research` | Upstream generators. Produce files that this skill reads. |
183
-
184
- ## Common pitfalls
185
-
186
- - **Inventing personas from domain intuition** — personas without source traces fail silently. They look plausible, Synthesize plausibly in test journeys, but don't survive contact with actual users. If you don't have evidence, emit operator-default and flag the research gap.
187
- - **One persona for all consumers** — if three real customer segments exist, three persona files exist. Compressing them into one loses the fit signal VPC depends on.
188
- - **Persona file as a wall of text** — the schema is designed for skim. Put the goal + context in the first ~10 lines so downstream skills (and humans) can skim-read before deciding to dive deep.
189
- - **Path confusion** — preferred path is `docs/personas/`. `docs/design/personas/` works but will eventually be deprecated. New repos should use the preferred path.
190
- - **Silent schema drift** — running `/personas validate` regularly catches when persona files have been edited in ways that violate required-field invariants. Do this at the start of any iteration that reasons about users.
191
-
192
- ## Provenance & evolution
193
-
194
- - Started as adopter work on user personas. Notes traced to real sources.
195
- - Later shipped upstream to bassclef.
196
- - Eight downstream skills read from `docs/personas/*.md`.
197
-
198
- Future promotions referenced (separate goals):
199
- - `/psychographic-mine` — upstream generator
200
- - `/auto-user-research` — orchestrated research → personas pipeline
201
- - `/user-stories` — downstream consumer
202
- - `/risk-test-synthetic` — downstream consumer
203
- - `/value-prop-canvas` — downstream consumer, shipping in Stack-2 of the same iteration as this skill
204
-
205
- ## Output discipline
206
-
207
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -1,283 +0,0 @@
1
- ---
2
- tier: lite
3
- name: promote
4
- description: "Propose promoting a pattern to bassclef. Creates an issue in the current repo (not bassclef) with the bassclef-evolution label. Three modes cover default, luminary upgrade, and substrate defect."
5
- problem: "Good patterns in one adopter repo stay stuck there. Every other adopter reinvents the same wheel."
6
- value: "Files a promote ticket in the current repo plus bassclef-upstream. Substrate evolves with real usage."
7
- inputs: [A pattern description or code snippet or discipline learned]
8
- outputs: [Promote ticket filed in current repo, Cross-repo mirror in bassclef-upstream]
9
- user_invocable: true
10
- disable_model_invocation: false
11
- composes_with: [state-a-problem, kiss, value-prop]
12
- requires:
13
- cli: [gh]
14
- network: true
15
- ---
16
-
17
- # /promote
18
-
19
- ## What you get
20
-
21
- An issue filed in the current app repo with the `bassclef-evolution` label, proposing that bassclef adopt a skill / rule / hook / workflow pattern you built locally. Three modes cover different promotion classes — the default files a general promotion issue; `--type luminary` files a full-depth upgrade for a stub luminary; `--type substrate-defect` files a mandatory promotion after fixing a bug in bassclef's own mechanism. Every issue body opens with a Problem section drafted by `/state-a-problem brief` and runs through `/kiss --grade10` inline.
22
-
23
- The issue stays in your current repo. Bassclef's session-reflection hook scans for `bassclef-evolution` labeled issues across child repos and ingests during a bassclef session — accept, defer, or reject.
24
-
25
- ## When to use it
26
-
27
- Any time you discover a skill, rule, hook, or workflow pattern in an app repo that would help other repos too. The SDLC checkpoint flags this ("Is this general or app-specific?"). Also fires automatically after resolving a BLOCKED item where the fix landed in bassclef's substrate itself (that path is mandatory, not optional — see FAQ).
28
-
29
- Skip promotion for genuinely app-specific work (tenant-scoped logic, business rules, deploy details). Bassclef ingests general patterns; app-specific work stays local.
30
-
31
- ## FAQ
32
-
33
- ### What are the three modes?
34
-
35
- - **Default** — the general path. File a promotion issue for a new skill / rule / hook you built, an extension to an existing bassclef standard, or a workflow pattern insight.
36
- - **`--type luminary [slug]`** — upgrade a stub luminary you used as primary in an iteration. The issue body carries a full drop-in replacement for the luminary file, not just a description.
37
- - **`--type substrate-defect [ref]`** — mandatory after fixing a bug in bassclef's own mechanism (hook, rule, counter, marker). The issue documents what was broken, what shipped locally, and why every consumer repo needs the fix. Trigger conditions in `.claude/rules/blocked-items.md` §"When resolution reveals a substrate defect".
38
-
39
- ### How do I know if I should use agent-self-proposed or agent-user-proposed?
40
-
41
- Scan the current user message for explicit promotion imperatives — "file a bassclef", "promote this", "run /promote", "push to bassclef". If any imperative is present, use `agent-user-proposed`. Otherwise use `agent-self-proposed`.
42
-
43
- Review requests like "check for /promote" are NOT imperatives to file. Read the intent and default to `agent-self-proposed` on review requests. When genuinely ambiguous, default `agent-self-proposed` and let bassclef triage flag if wrong.
44
-
45
- The distinction matters — `agent-self-proposed` means the agent's self-awareness caught a gap (evidence of maturing agent). `agent-user-proposed` means the operator caught a gap the agent missed (evidence of a weak trigger condition — bassclef triage asks why the agent missed it).
46
-
47
- ### Why does the issue open with a Problem section?
48
-
49
- Per `.claude/rules/github-issue-flash-tweet.md` V3 (bassclef#1178 retired Flash + Tweet at PR + issue surfaces). Every issue body opens with `**Problem (≤500 chars):**` drafted by `/state-a-problem brief` — 3-4 sentences carrying Who / What / When / Why-now / Outcome implicit. The Problem section is the headline; readers on mobile decide from it whether to scroll.
50
-
51
- Then `---` (horizontal rule) then technical detail (`## Summary`, `## Why`, `## Acceptance`).
52
-
53
- ### Why is /kiss --grade10 the default?
54
-
55
- Bassclef ships plain-English discipline per `.claude/rules/plain-english-discipline.md`. Issue bodies land in adopter-facing surfaces. The `/state-a-problem brief` skill runs `/kiss --grade10` inline by default so the Problem section is plain English without a separate pass. Body content after the Problem section runs through `/kiss words` as a second pass before submission.
56
-
57
- The PR-CI body-clarity job catches jargon at PR-open time as a backstop, but pre-submission cleanup is faster and produces no comment noise.
58
-
59
- ### Why is substrate-defect mode mandatory?
60
-
61
- Because silence about the mechanism defect keeps the bug local. Three sessions in April 2026 fixed local hook drift without firing /promote; the same drift re-surfaced in POA two weeks later. Bet `2026-04-21a-blocked-signal-integrity` filed this mode as the closing obligation — the agent doesn't choose whether to promote; the trigger fires it.
62
-
63
- If you fix a hook, rule, or counter mechanism in the app repo but skip the bassclef promotion, every other consumer repo inherits the broken version until they hit the same failure and re-diagnose it.
64
-
65
- ### How does bassclef ingest these?
66
-
67
- The bassclef session-reflection hook scans for `bassclef-evolution` labeled issues across all child repos. During a bassclef session, issues are reviewed for general applicability. Accepted issues result in content promoted to bassclef and the source issue closed. Deferred issues stay open with a rationale. Rejected issues close with an explanation.
68
-
69
- App repos never need write access to bassclef. The pull-side ingestion is how promotions land.
70
-
71
- ## Details below the fold
72
-
73
- ### Label creation (one-time per app repo)
74
-
75
- These labels don't exist by default. First time using `/promote` in a new repo, create them:
76
-
77
- ```bash
78
- gh label create agent-self-proposed \
79
- --color 0E8A16 \
80
- --description "Agent proactively identified this gap during reflection"
81
- gh label create agent-user-proposed \
82
- --color D93F0B \
83
- --description "Operator caught this gap; agent's trigger needs review"
84
- ```
85
-
86
- Bassclef provides the convention; each repo creates the labels locally.
87
-
88
- ### Procedure — target resolution (all modes)
89
-
90
- Before filing, resolve where the issue lands. Reads `promote_target` from `.claude/bassclef-configs.jsonc`. Two shapes accepted plus a fallback:
91
-
92
- ```bash
93
- # Read promote_target from bassclef-configs.jsonc (strip JSONC comments first)
94
- TARGET=$(sed 's|//.*||' .claude/bassclef-configs.jsonc 2>/dev/null | jq -r '.promote_target // empty' 2>/dev/null)
95
-
96
- if [ -z "$TARGET" ]; then
97
- # Backward-compat — file in current repo (skill's prior behavior)
98
- GH_REPO_ARG=""
99
- DISPATCH="gh"
100
- elif [ "${TARGET#email:}" != "$TARGET" ]; then
101
- # email:<address> — print mailto: URL, adopter sends
102
- EMAIL_ADDR="${TARGET#email:}"
103
- DISPATCH="mailto"
104
- else
105
- # <owner>/<repo> — gh issue create --repo <TARGET>
106
- GH_REPO_ARG="--repo $TARGET"
107
- DISPATCH="gh"
108
- fi
109
- ```
110
-
111
- When `$DISPATCH == "mailto"`, the procedure prints a ready-to-use `mailto:` URL instead of running `gh issue create`. The adopter sends. Nothing auto-sends.
112
-
113
- When `$DISPATCH == "gh"`, all three procedure modes below run their `gh issue create` command as documented, with `$GH_REPO_ARG` inserted right after `gh issue create`.
114
-
115
- Explicit env override — `PROMOTE_TARGET=<value> /promote ...` — beats the config field for one call.
116
-
117
- Defaults per adopter tier (advisory):
118
-
119
- | Adopter tier | Recommended `promote_target` |
120
- |---|---|
121
- | lite (npm-shipped) | `email:hello@bassclef.dev` (or your address) |
122
- | standard (this repo, other operator repos) | `sunj-labs/bassclef-upstream` |
123
-
124
- Adopter sets the value in `.claude/bassclef-configs.jsonc` once. `/promote` picks it up every call. Closes bassclef-upstream#1028.
125
-
126
- ### Procedure — default mode
127
-
128
- 1. Identify what to promote — which file(s) and why they're general
129
- 2. Classify — New (skill / rule / hook not in bassclef), Extension (improvement to an existing standard), Pattern (workflow insight, not a specific file)
130
- 3. Draft the Problem opener via `/state-a-problem brief` — Who benefits (bassclef adopters + future agents), what gap the local pattern fills, when adopters hit it, why now (concrete iteration evidence), what outcome promotion produces
131
- 4. Create the issue in THIS repo (not bassclef):
132
-
133
- ```bash
134
- gh issue create $GH_REPO_ARG \
135
- --label "bassclef-evolution,agent-self-proposed" \
136
- --title "Promote to bassclef: [brief description]" \
137
- --body "**Problem (≤500 chars):** [output from /state-a-problem brief]
138
-
139
- ---
140
-
141
- ## What
142
- [What should be promoted — file name, content summary]
143
-
144
- ## Why general
145
- [What makes it reusable — not app-specific]
146
-
147
- ## Type
148
- [New | Extension | Pattern]
149
-
150
- ## Content
151
- [Paste the relevant content or reference the file]"
152
- ```
153
-
154
- 5. Note in the session's session log: "Proposed promotion: [description] → #NNN"
155
-
156
- ### Procedure — luminary upgrade mode
157
-
158
- Fires when a stub-depth luminary was used as primary in an iteration and the iterating repo has concrete context to upgrade it.
159
-
160
- App repos can't edit bassclef files directly (symlinks). This mode files a drop-in replacement so bassclef's agent gets a ready diff instead of having to reconstruct what the app repo's agent already figured out.
161
-
162
- 1. Read the current stub at `.claude/luminaries/[slug].md` (inherited from bassclef via symlinks)
163
- 2. Identify what's missing to reach full depth:
164
- - When to channel this luminary (concrete conditions)
165
- - Stack translation (specific to your stack)
166
- - Anti-patterns it prevents (3-5 concrete failure modes)
167
- - Worked example (using real entities from your domain)
168
- - Related luminaries (3-5 named relationships)
169
- 3. Draft each section with evidence from the iteration that triggered the upgrade
170
- 4. Draft the Problem opener via `/state-a-problem brief`
171
- 5. Create the issue with the full-depth content pre-filled:
172
-
173
- ```bash
174
- gh issue create $GH_REPO_ARG \
175
- --label "bassclef-evolution,luminary-upgrade" \
176
- --title "Promote to bassclef: upgrade [luminary name] stub → full" \
177
- --body "**Problem (≤500 chars):** [output from /state-a-problem brief]
178
-
179
- ---
180
-
181
- ## Context
182
- Used [luminary] as primary in iteration [goal path]. Evidence reveals content the current stub doesn't capture.
183
-
184
- ## Proposed upgrade (drop-in replacement)
185
-
186
- \`\`\`markdown
187
- [full drafted content for .claude/luminaries/[slug].md]
188
- \`\`\`
189
-
190
- ## Evidence from this iteration
191
-
192
- - [concrete usage that informed the draft]
193
- - [what was missing from the stub]
194
- - [patterns and anti-patterns that emerged]
195
-
196
- ## Source references to verify
197
-
198
- - [primary sources to check before merging]"
199
- ```
200
-
201
- ### Procedure — substrate-defect mode
202
-
203
- Fires when resolution of a BLOCKED item reveals that the hook / rule / counter mechanism itself was broken — not the work. Trigger conditions in `blocked-items.md` §"When resolution reveals a substrate defect".
204
-
205
- **Trigger patterns:**
206
-
207
- - Stuck signal resolved via mechanism-read + substrate edit
208
- - Hook false-positive was the root cause (banner fired without real work being undone)
209
- - Counter miscount / marker rot / path drift in the substrate
210
- - Reviewer rejection that traces to a rule / hook producing wrong guidance
211
-
212
- **Procedure:**
213
-
214
- 1. Identify the defect — which substrate file (hook, rule, skill, standard) was wrong, and what specifically broke
215
- 2. Confirm the fix landed — the PR / commit that fixes the local instance is in-flight or merged
216
- 3. Draft the Problem opener via `/state-a-problem brief`
217
- 4. Create the issue with the substrate-defect template:
218
-
219
- ```bash
220
- gh issue create $GH_REPO_ARG \
221
- --label "bassclef-evolution,agent-self-proposed,substrate-defect" \
222
- --title "Promote to bassclef: substrate defect — [one-line description]" \
223
- --body "**Problem (≤500 chars):** [output from /state-a-problem brief]
224
-
225
- ---
226
-
227
- ## Signal observed
228
- [Banner text, chronicle dates showing the loop, or reviewer comment.
229
- Include counter values across sessions if stuck-signal path applies.]
230
-
231
- ## Mechanism file read
232
- - Path: [e.g., .claude/hooks/session-end.sh]
233
- - Defect: [wrong path, stale regex, counter reading location the writer stopped using, calendar-date check in ephemeral env, etc.]
234
-
235
- ## Fix applied
236
- - PR / commit: [ref]
237
- - Change shape: [1-2 sentences — what the substrate now does differently]
238
-
239
- ## Propagation requirement
240
- - Consumer repos that inherit this substrate: [list, or 'all per bassclef-sync.sh']
241
- - What breaks in consumer repos without this fix: [concrete failure mode, with at least one observable signal]
242
- - Urgency: [high if silent wrong signals; medium if noisy false positives; low if cosmetic]
243
-
244
- ## Source references
245
- - Rule / standard governing this mechanism: [path]
246
- - Related issues / prior drift: [issue refs if any]"
247
- ```
248
-
249
- 5. Cite in session log: `substrate defect promoted: #NNN`
250
-
251
- **Label discipline:** substrate-defect promotions carry THREE labels — `bassclef-evolution` + `agent-self-proposed` (or `agent-user-proposed` if operator flagged) + `substrate-defect`. The third label routes bassclef triage to treat these at higher priority.
252
-
253
- ### Composes with
254
-
255
- - `/state-a-problem brief` — drafts the Problem opener (≤500 chars) for every issue body; runs `/kiss --grade10` inline
256
- - `/kiss words` — applied to body content after the Problem section before filing
257
- - `/value-prop` — retained for non-issue surfaces (session log entries, journal openers, retro lines) where the tweet + brief sizes still apply
258
-
259
- ### Rules
260
-
261
- - Issue goes in the CURRENT repo. App repos file in their own repo with `bassclef-evolution` label; bassclef's session-reflection hook scans and ingests.
262
- - App repos never need write access to bassclef. The label routes promotion through pull-side ingestion.
263
- - Use the `bassclef-evolution` label consistently. The ingestion hook reads this exact label across all child repos.
264
- - Agent-proposed promotions get the `agent-self-proposed` or `agent-user-proposed` label for scrutiny routing.
265
- - Bassclef sessions make the accept / defer / reject decision. App repos file and continue with current work; bassclef lands on its own cadence.
266
-
267
- ### Refs
268
-
269
- - bassclef#1256 — this skill's V2 rewrite parent (Problem section opener replaces Flash + Tweet)
270
- - bassclef#1178 — parent rule update (Problem section at PR + issue body surfaces)
271
- - bassclef#559 — Phase II Trim the Fat plain-English discipline parent
272
- - `.claude/skills/state-a-problem/SKILL.md` — drafts the Problem opener
273
- - `.claude/skills/kiss/SKILL.md` — grade-10 substitution
274
- - `.claude/rules/github-issue-flash-tweet.md` — V3 rule this skill aligns with
275
- - `.claude/rules/plain-english-discipline.md` — master plain-English rule
276
- - `.claude/rules/blocked-items.md` — substrate-defect mode mandatory trigger
277
- - `.claude/rules/stuck-signal-diagnostic.md` — stuck-counter path that most often surfaces substrate defects
278
- - `standards/bassclef-evolution.md` — full ingestion protocol + three-source model
279
- - `standards/opener-discipline.md` — the three-block opener shape the Problem section fits into
280
-
281
- ## Output discipline
282
-
283
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.