@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,28 +0,0 @@
1
- ---
2
- tier: lite
3
- description: "We're committed to a welcoming, respectful community for everyone contributing to or using bassclef."
4
- ---
5
- # Code of Conduct
6
-
7
- We're committed to a welcoming, respectful community for everyone contributing to or using bassclef.
8
-
9
- ## Expected behavior
10
-
11
- - Treat others with respect and good faith.
12
- - Engage constructively with feedback and disagreement.
13
- - Credit sources for content you contribute.
14
-
15
- ## Unacceptable behavior
16
-
17
- - Harassment, personal attacks, or discriminatory language.
18
- - Sharing others' private information without consent.
19
- - Threats or encouragement of violence.
20
- - Impersonating others or evading enforcement actions.
21
-
22
- ## Reporting
23
-
24
- To report a violation, email conduct@bassclef.dev. Reports are handled privately.
25
-
26
- ## Scope
27
-
28
- This applies to all project spaces — issues, pull requests, discussions, and any official project communication.
@@ -1,177 +0,0 @@
1
- ---
2
- tier: lite
3
- description: Bassclef is a framework for guiding AI agents through software development — skills, rules, hooks, and standards that compose into an opinionated SDLC substrate.
4
- ---
5
- # Contributing to Bassclef
6
-
7
- Bassclef is a framework for guiding AI agents through software development — skills, rules, hooks, and standards that compose into an opinionated SDLC substrate. This guide is for contributors extending it.
8
-
9
- If you're adopting bassclef (not extending it), start with [`docs/bassclef-mental-model.md`](docs/bassclef-mental-model.md) — the 5-minute primer.
10
-
11
- ## Before you start
12
-
13
- Read these three, in order:
14
-
15
- 1. **[`docs/bassclef-mental-model.md`](docs/bassclef-mental-model.md)** — the shape of the framework in 5 minutes
16
- 2. **[`docs/philosophy.md`](docs/philosophy.md)** — the nine threads of influence bassclef embeds and why
17
- 3. **[`.claude/rules/context-engineering.md`](.claude/rules/context-engineering.md)** — the foundational rule. Every skill, rule, and hook is improved by this lens.
18
-
19
- Then browse the catalogs for the surface you're touching:
20
-
21
- - [`docs/skills-catalog.md`](docs/skills-catalog.md) — all skills
22
- - [`docs/hooks-catalog.md`](docs/hooks-catalog.md) — all hooks
23
- - [`docs/rules-catalog.md`](docs/rules-catalog.md) — all rules
24
- - [`docs/glossary.md`](docs/glossary.md) — the vocabulary
25
-
26
- ## The contribution model
27
-
28
- Bassclef's substrate is **markdown + bash + git**. No proprietary runtime. Contributing means editing markdown files and bash scripts, then opening a PR.
29
-
30
- Four surfaces you can contribute to:
31
-
32
- | Surface | Where | What it is |
33
- |---|---|---|
34
- | **Skill** | `.claude/skills/<name>/SKILL.md` | A named workflow the agent invokes |
35
- | **Rule** | `.claude/rules/<name>.md` | A methodology constraint auto-loaded every session |
36
- | **Hook** | `.claude/hooks/<name>.sh` | Mechanical enforcement firing on tool-use events |
37
- | **Standard** | `standards/<name>.md` | A reference document |
38
-
39
- Not sure which surface fits? The `/skill` skill runs a taxonomy gate (skill / rule / hook?) before scaffolding. Use it.
40
-
41
- ### Operator-private vs adopter-facing
42
-
43
- The `docs/operator-private/` directory in your clone contains only a README placeholder. That's intentional — operator-private substrate (internal deliberation, strategy notes) lives in a separate private repo. Contributors don't need to populate or interact with it. The discipline: strategy artifacts stay private; only reference substrate (rules, hooks, standards) ships to the public bassclef repo.
44
-
45
- If you're the bassclef maintainer (operator), `scripts/operator-setup.sh` sets up the symlink workflow when the private repo is cloned at the expected sibling location. The script is idempotent + a no-op for adopter clones; adopters can ignore it.
46
-
47
- ## How to contribute a change
48
-
49
- ### 1. Open an issue first
50
-
51
- Every branch ties to an issue. The issue body opens with a flash (≤180 chars) + tweet (≤280 chars) + `---` + detail, per [`.claude/rules/github-issue-flash-tweet.md`](.claude/rules/github-issue-flash-tweet.md). Operators scan flash → tweet → decide.
52
-
53
- ### 2. Branch from main
54
-
55
- ```
56
- feature/ISSUE-NNN-short-description
57
- fix/ISSUE-NNN-short-description
58
- ```
59
-
60
- Trunk-based. Main is always deployable. No branches older than 5 days — break large work into a stack.
61
-
62
- ### 3. Follow the rules that fire on your surface
63
-
64
- Rules auto-load every session. The ones you'll feel most when contributing:
65
-
66
- - **`context-engineering.md`** — every "DON'T do X" instruction needs a paired "INSTEAD do Y." The stateless model can't act on negation alone.
67
- - **`skill-description-clarity.md`** — skill descriptions ≤280 chars, verb-first, no jargon. The `substrate-clarity-gate` hook BLOCKs violations.
68
- - **`plain-english-discipline.md`** — grade-10 vocabulary. Keep standard tech terms; drop framework-internal jargon.
69
- - **`artifact-ingestion.md`** — read every referenced artifact before producing output. State "Sources read" upfront.
70
- - **`pr-strategy.md`** — stacked atomic branches by default; one work-unit per PR.
71
-
72
- The full set: [`docs/rules-catalog.md`](docs/rules-catalog.md).
73
-
74
- ### 4. Hooks will check your work
75
-
76
- When you edit a skill or rule, the `substrate-clarity-gate` hook validates description length + verb-first opener + paired-discipline INSTEAD-blocks. When you write a state-spine file, `state-validate` checks it against the JSON schema. These BLOCK the write if you've drifted — read the stderr, adjust, retry.
77
-
78
- The full set: [`docs/hooks-catalog.md`](docs/hooks-catalog.md).
79
-
80
- ### 5. Commit conventions
81
-
82
- ```
83
- <type>: <description>
84
- ```
85
-
86
- Types: `feat`, `fix`, `docs`, `refactor`, `test`, `ci`, `chore`, `security`. Imperative mood, lowercase, no period, ≤72 chars. The body explains *why* — the diff shows *what*.
87
-
88
- ### 6. Open the PR
89
-
90
- PR title becomes the squash-merge commit. PR body opens with flash + tweet, same as issues. Include a test plan.
91
-
92
- ### 7. CI runs
93
-
94
- The PR triggers three blocking substrate-coherence checks (bassclef#739):
95
-
96
- - **Rule 1 — Jargon enforcement** — blocks PR body containing bassclef-internal jargon (composer, primitive, tier-preset, load-bearing, blast radius, compose-with, scope-bounded, operationalize). Override via `bassclef-internal-prose-ok` label for intentional exceptions.
97
- - **Rule 3 — Operator-private path enforcement** — blocks persona-review-shaped, canvas-shaped, or proposal-shaped artifacts outside `docs/operator-private/`. Same label override.
98
- - **Rule 4 — PR-body scrub** — blocks operator-private path citations + operator-strategic deliberation framing in PR body. Same label override.
99
-
100
- Plus an advisory body-clarity check (does not block; flags long sentences + jargon for review). Address failures before requesting review.
101
-
102
- ## Branch-stacking discipline
103
-
104
- When work splits into multiple dependent PRs, follow the mandatory protocol per [`standards/branch-stacking.md`](standards/branch-stacking.md):
105
-
106
- - Each PR ships one work unit; revertable independently
107
- - **Retarget-before-merge is mandatory when dependents exist** — retarget dependent PRs to `main` via `gh pr edit <PR> --base main` BEFORE merging the parent with `--delete-branch`. Skipping retarget causes GitHub to auto-close dependents (rebase-after-merge fallback is recovery, not first-class choice).
108
- - Pre-merge audit: `scripts/check-stack-dependents.sh <PR>` lists open dependents before you trigger the merge
109
-
110
- ## Plain-language discipline
111
-
112
- All operator-facing prose (PR bodies, chronicle entries, ticket bodies, summary tables) passes through `/kiss words` by default. See [`standards/operator-facing-prose-discipline.md`](standards/operator-facing-prose-discipline.md) for the three Tweet rules:
113
-
114
- 1. **Fit in 280 chars** (bassclef#785)
115
- 2. **Keep scoping qualifiers** — "deferred within Tier 1" not just "deferred" (bassclef#805)
116
- 3. **Lead with the goal**, then say what was done (bassclef#831)
117
-
118
- Shorthand references (WU-N, F-X.Y, ADR-NNN, #NNN) carry a plain-language gloss at first mention per response.
119
-
120
- ## Writing a new skill
121
-
122
- `/skill` composes a new skill from idea to conforming `SKILL.md`. It runs the taxonomy gate first, generates a verb-first plain-language description, scaffolds the frame, and pre-validates against the live clarity gate before writing.
123
-
124
- Skill frontmatter requirements:
125
-
126
- - `name` — matches the directory name; not a reserved Claude Code built-in (see [`standards/reserved-skill-names.md`](standards/reserved-skill-names.md))
127
- - `description` — ≤280 chars, verb-first, names any `modes:` declared
128
- - `user_invocable` + `disable_model_invocation` — the invocation contract
129
-
130
- A skill is **composite** (hands-off-execution — returns a clickable artifact) or **atomic** (hands-off-planning — drives a thinking-and-decision loop). Know which you're building. See [`docs/skills-catalog.md`](docs/skills-catalog.md).
131
-
132
- ## Writing a new rule
133
-
134
- Rules are methodology constraints. They auto-load every session via `additionalDirectories` — the agent doesn't invoke them.
135
-
136
- A good rule:
137
-
138
- - States the constraint, then **Why** (the reason, often a past incident), then **How to apply** (when/where it fires)
139
- - Pairs every "DON'T" with an "INSTEAD" (the foundational `context-engineering.md` discipline)
140
- - Names its enforcement — methodology-level, or which hook BLOCKs it
141
- - Names its override path (most rules have a `SKIP_*` env var; methodology-level rules don't)
142
-
143
- ## Writing a new hook
144
-
145
- Hooks are mechanical enforcement. They fire on tool-use events (PreToolUse, PostToolUse, SessionStart, Stop, UserPromptSubmit).
146
-
147
- A good hook:
148
-
149
- - Has a header comment — what it fires on, what it checks, why it exists
150
- - Is **idempotent** — running it twice with the same input produces the same result (see [`standards/hook-idempotency.md`](standards/hook-idempotency.md))
151
- - Provides a `SKIP_*` override env var, logged via `trace-helper`
152
- - Has test coverage in `.claude/hooks/tests/`
153
-
154
- ## Promoting a pattern back to bassclef
155
-
156
- If you're using bassclef in your own repo and discover a pattern worth sharing, the `/promote` skill files a `bassclef-evolution` issue. Patterns discovered in projects compound into the substrate.
157
-
158
- ## What bassclef is NOT
159
-
160
- - **Not a code generator.** It guides the agent through the SDLC; the agent writes the code.
161
- - **Not a CI tool.** It runs locally + via hooks. CI surfaces show its outputs but it doesn't replace your CI.
162
- - **Not opinionated about your stack.** Works with any language / framework / cloud.
163
- - **Not greenfield-only.** Bassclef drops onto an existing repo. The substrate goes in `.claude/`; your code stays in `src/`.
164
-
165
- ## Code of conduct
166
-
167
- Be direct, be kind, assume good faith. Bassclef is opinionated by design — disagreement about the opinions is welcome, expressed as a reasoned issue, not a drive-by. The substrate evolves through `/promote` and reasoned PRs, not through unilateral rewrites of essential rules.
168
-
169
- A formal `CODE_OF_CONDUCT.md` (Contributor Covenant 2.1) is planned for the open-source launch. Until it lands, the above guidance applies.
170
-
171
- ## Questions
172
-
173
- Open an issue with the `question` label. For "how do I use bassclef" questions, the mental-model primer + glossary answer most of them first.
174
-
175
- ---
176
-
177
- *Bassclef is markdown + bash + git. If you can read a file and run a script, you can contribute.*
@@ -1,173 +0,0 @@
1
- ---
2
- tier: lite
3
- description: A shared substrate for working with AI coding agents.
4
- ---
5
- # Bassclef
6
-
7
- > **If you are new — start here.** Three short reads in this order:
8
- > 1. The [Mental Model](https://github.com/sunj-labs/bassclef/wiki/Mental-Model) — one page; what bassclef is and what it isn't.
9
- > 2. The [Skill lifecycle diagram](https://github.com/sunj-labs/bassclef/wiki/Diagrams) — one image; the full skill catalog at a glance.
10
- > 3. The [Getting Started](https://github.com/sunj-labs/bassclef/wiki/Getting-Started) page — three commands; substrate live in your repo.
11
- >
12
- > Then read the rest of this README as background. About 10 minutes total.
13
-
14
- **A shared substrate for working with AI coding agents.** Install it once into your repo, and every Claude Code session starts loaded: 76 skills, 53 rules, 16 agents, 32 practitioner profiles, 27 hooks, 67 standards, and 27 ADRs that wire them together. The agent reads your rules, knows the catalog, handles failure cleanly, and ships with discipline. You stop re-explaining your conventions every session — the difference between an assistant you brief and a band that already knows the set.
15
-
16
- It is not a product. It is not a SaaS. It's a public framework, Apache 2.0: clone the repo, run the install script, own your stack.
17
-
18
- **Two install paths.** [Curl install](docs/getting-started.md) — one command per project, works once bassclef is public and your network allows `raw.githubusercontent.com`. [Clone install](docs/install-from-clone.md) — one clone of bassclef, wire many projects against it as siblings, one place to `git pull` for updates. Pre-launch adopters and multi-project operators pick the clone path.
19
-
20
- ## Who this is for
21
-
22
- **Solo system / app / portfolio operators.** The person running multiple software projects in parallel — apps, internal systems, side bets, family operations — around a day job, around family, around the other things that don't pause. Real deadlines, real stakes, no headcount. Other audiences may benefit; this is the one SENTINEL_bassclef_commits to.
23
-
24
- ## Why this exists
25
-
26
- A kid of immigrant entrepreneurs becomes one in his 20s with a hundred ideas and two hands. Every idea needed a team; teams needed money; money needed the ideas to work. Most entrepreneurship dies in that loop. Twenty-five years later — after launching the Alexa Skills Kit and building enterprise collaboration tools before their time — I hit the loop again. I hold power of attorney for my parents and run their affairs alongside acquiring small businesses on their behalf. Real deadlines, real stakes, no headcount. So I built the band I couldn't hire.
27
-
28
- That origin is why bassclef is shaped the way it is:
29
-
30
- - **Apache 2.0, no SaaS** — a capital bypass has to be free. Anthropic's 81k-person global study found entrepreneurship-with-AI resonates most where funding is scarcest; this is for the operator with ideas and no budget line.
31
- - **Cheap by design** — small models route mechanical work; hard cost ceilings cap every run. Built by one person paying his own bills.
32
- - **Local-first** — it works without expensive infrastructure, because mine had to.
33
- - **Discipline as substrate** — rules, skills, and practitioner profiles load at session start because a solo operator can't afford to re-explain conventions, and an agent without a chart is a session musician with no memory of the band.
34
-
35
- The acceptance test for v1 wasn't a demo — it was a live ticket from my parents' actual work. When it closed, the repo opened.
36
-
37
- ## What's actually shipped
38
-
39
- Not theoretical. Bassclef runs today across eight repos in active use:
40
-
41
- - **A private sibling repo for strategy notes** — canvases, audits, and locked decisions. Adopters replicate the pattern with a separate private repo cloned alongside their bassclef checkout.
42
- - **Seven application repos in daily use** — from a power-of-attorney tracker for my family to a collaborative travel planner to a recipe database. Each one is code I use myself, not a demo.
43
-
44
- The pattern: build the apps on the go, each repo's friction feeds back into bassclef as evolution tickets, the substrate hardens with every shipped feature.
45
-
46
- **4,650 commits and 3,409 merged PRs to date** across the portfolio. The substrate you'd adopt is the one already smoke-tested across seven repos in production.
47
-
48
- ## Full documentation
49
-
50
- The complete adopter docs live in the bassclef wiki: **[github.com/sunj-labs/bassclef/wiki](https://github.com/sunj-labs/bassclef/wiki)**.
51
-
52
- Start there for [Getting Started](https://github.com/sunj-labs/bassclef/wiki/Getting-Started) (3-step fast path), [First-use sequence](https://github.com/sunj-labs/bassclef/wiki/First-Use-Sequence) (what bassclef actually does end-to-end), [Install paths](https://github.com/sunj-labs/bassclef/wiki/Install), [FAQ](https://github.com/sunj-labs/bassclef/wiki/FAQ), [Architecture Overview](https://github.com/sunj-labs/bassclef/wiki/Architecture-Overview), [Glossary](https://github.com/sunj-labs/bassclef/wiki/Glossary), and the [Luminary catalog](https://github.com/sunj-labs/bassclef/wiki/Luminary-Catalog).
53
-
54
- ## Before you start
55
-
56
- Bassclef assumes a few things already work on your machine. Five minutes of setup before the build path:
57
-
58
- | You need | How to check | If missing |
59
- |---|---|---|
60
- | A GitHub account | sign in to github.com | create one — free |
61
- | `gh` CLI installed + authenticated | `gh auth status` | `brew install gh && gh auth login` |
62
- | Claude Code installed | `command -v claude` | follow [code.claude.com](https://code.claude.com) install steps |
63
- | `ANTHROPIC_API_KEY` set | `echo $ANTHROPIC_API_KEY` (non-empty) | get a key at [console.anthropic.com](https://console.anthropic.com) and `export` it |
64
- | `git` installed | `git --version` | install from [git-scm.com](https://git-scm.com) |
65
- | `python3` installed | `python3 --version` | macOS: pre-installed. Linux: `apt install python3`. Required by bassclef hooks (per [ADR-028](https://github.com/sunj-labs/bassclef/blob/main/architecture/decisions/ADR-028-python3-as-substrate-runtime.md)) |
66
-
67
- Once those check out, pick a path.
68
-
69
- ## Two paths in
70
-
71
- ### Path A — Cold adopter (paragraph in, working preview out)
72
-
73
- You have an idea. You don't have an issue tracker yet. You just want to see something real on your screen.
74
-
75
- | Step | What | Time |
76
- |---|---|---|
77
- | 1 | `/onboard-repo` — installs substrate + asks "what is this repo for?"; auto-chains `/launch --local` with your paragraph | 60s |
78
- | 2 | Wait — bassclef extracts intent, picks practitioner profiles, generates 4 variant directions | 4 min |
79
- | 3 | Walk the variant gallery on your phone or laptop; say "I like variant 2" (or "none of these — try X instead") | 3 min |
80
- | 4 | Wait — bassclef writes the formal artifacts (use case, user stories, IA, interaction design, spec, migration plan) for the chosen direction only | 5 min |
81
- | 5 | `/build <bet-slug>` — dispatches per-work-unit feature branches with tests + PRs | continues asynchronously |
82
-
83
- **Total to first variant pick: ~7 min.** Per-WU PRs land as `/build` works through the stack. You merge as they pass review.
84
-
85
- This is the "I just want to build something" path. No tickets to file. No roadmap to maintain. The substrate handles the chain.
86
-
87
- ### Path B — Existing repo with open work
88
-
89
- You have a repo with open issues, an iteration bet in flight, a roadmap. You want bassclef to help you execute against existing work, not invent new scope.
90
-
91
- | Step | What | Time |
92
- |---|---|---|
93
- | 1 | `/onboard-repo` — installs substrate; closing handoff defers (no auto-chain in operator mode) | 60s |
94
- | 2 | `/sprint` + `/whereami` — orient to project state + open issues + active iteration bet | 90s |
95
- | 3 | Pick work from open issues / iteration bet; create a feature branch | 30s |
96
- | 4 | `/stage quick "<scope>"` (variants) **OR** `/launch medium "<scope>"` (full plan) **OR** direct edits | 3-5 min |
97
- | 5 | `/verify` — runs the test path matched to your change type | 60s |
98
- | 6 | `git commit` + `git push` — pre-commit gate + scrub hooks fire automatically | 90s |
99
- | 7 | `/session-end` — chronicle entry + whereami update + clean close | 90s |
100
-
101
- **Total: ~12 min.** Operator opens a PR via GitHub UI or `gh pr create`.
102
-
103
- Requires existing open issues, an iteration bet, or a roadmap. Without those, `/sprint` will surface "nothing in flight" and recommend Path A. Operator-mode is the sustained-work path; Path A is the first-contact path.
104
-
105
- ## What you can do with it
106
-
107
- - **Dispatch a paragraph from your phone** → returns as a working preview on localhost
108
- - **Run a long autonomous session** that paces itself, checkpoints at phase boundaries, and closes with a chronicle + retrospective
109
- - **Combine skills** across the full SDLC (shape → spec → design → build → verify → deploy)
110
- - **Audit the substrate against itself** via hooks + rules + the context-engineering rule that catches drift
111
-
112
- ## Substrate at a glance
113
-
114
- | Component | Count | Where | Catalog |
115
- |-----------|------:|-------|---------|
116
- | Skills | 75 | `.claude/skills/*/SKILL.md` | [skills catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/skills-catalog.md) |
117
- | Hooks | 25 | `.claude/hooks/*.sh` | [hooks catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/hooks-catalog.md) |
118
- | Rules | 48 | `.claude/rules/*.md` | [rules catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/rules-catalog.md) |
119
- | Agents | 13 | `.claude/agents/*.md` | — |
120
- | Practitioner profiles | 31 | `.claude/luminaries/*.md` (plus 1 TEMPLATE.md scaffold for new entries) | [wiki Luminary catalog](https://github.com/sunj-labs/bassclef/wiki/Luminary-Catalog) |
121
- | Standards | 65 | `standards/` | — |
122
- | ADRs | 26 | `architecture/decisions/` | — |
123
-
124
- Browse interactively: `/skills`, `/hooks`. Past the build path, adopters pick up additional skills from the catalogs as needs surface.
125
-
126
- ## Team adopters
127
-
128
- The substrate is shaped for solo operators, not teams. Teams will still find value: the state spine, the test + verify chain, and the auto-loading rules translate to team contexts (engineer A pairs Monday → `/sprint` surfaces context for engineer B Wednesday). Methodology evolution will favor solo-operator concerns; team adopters who borrow the substrate accepting that constraint do well.
129
-
130
- Total team cost to adopt: about 3 engineer-days for a 5-person team in week 1.
131
-
132
- ## Foundations
133
-
134
- Bassclef is context engineering applied to the full software development lifecycle. The discipline has a name and a literature:
135
-
136
- - **[Karpathy — context engineering](https://x.com/karpathy/status/1937902205765607626)**: "LLM is the CPU, context window is RAM." Prompts as filling a finite working-memory buffer.
137
- - **[Willison — stateless tool framing](https://fedi.simonwillison.net/@simon/114757992443676572)**: every conversation starts cold; the model knows what it knows only via what's in the prompt.
138
- - **[Anthropic — Effective context engineering for AI agents](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)**: vendor-validated principles for context budgeting, persistence, and tool design.
139
-
140
- Bassclef builds on eight more threads — distributed state management, multi-agent coordination, methodology (Shape Up, DDD), strategy canvases (Strategyzer, Lean Canvas, PR/FAQ), Jobs-to-be-Done, use-case design (Cockburn), red/green/refactor testing (Beck), and rapid prototyping (IDEO, design thinking). Each thread, who it comes from, and where it lives in the substrate: [philosophy](https://github.com/sunj-labs/bassclef/wiki/Philosophy).
141
-
142
- ## Start here
143
-
144
- | Doc | What it is |
145
- |---|---|
146
- | [Mental Model](https://github.com/sunj-labs/bassclef/wiki/Mental-Model) | 5-minute primer — where things live, which skills to invoke, brownfield retrofit |
147
- | [Glossary](https://github.com/sunj-labs/bassclef/wiki/Glossary) | The vocabulary — iteration bet, work unit, stack, marker, BLOCKED, and more |
148
- | [Philosophy](https://github.com/sunj-labs/bassclef/wiki/Philosophy) | Nine threads of influence bassclef embeds and where each lives |
149
- | [Overview](https://github.com/sunj-labs/bassclef/wiki/Overview) | Long-form — what bassclef is, how it works, where it's going |
150
- | [Contributing](https://github.com/sunj-labs/bassclef/blob/main/CONTRIBUTING.md) | How to extend bassclef — four surfaces, contribution flow, per-surface guides |
151
-
152
- ## License + sustainability
153
-
154
- Apache 2.0. Single-operator project today; the substrate is markdown + bash + git, so adopters retain everything that ships even if maintainer velocity changes. Business model is community-open — no commercial-pivot pressure on your adoption.
155
-
156
- ## Contributing
157
-
158
- Bassclef is markdown + bash + git. If you can read a file and run a script, you can contribute. See [CONTRIBUTING](https://github.com/sunj-labs/bassclef/blob/main/CONTRIBUTING.md) — four surfaces (skill, rule, hook, standard), a 7-step contribution flow, per-surface authoring guides.
159
-
160
- ## Key files
161
-
162
- - [Mental Model](https://github.com/sunj-labs/bassclef/wiki/Mental-Model) — 5-minute adopter primer
163
- - [Glossary](https://github.com/sunj-labs/bassclef/wiki/Glossary) — the vocabulary
164
- - [Philosophy](https://github.com/sunj-labs/bassclef/wiki/Philosophy) — eight threads of influence
165
- - [Skills catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/skills-catalog.md) · [Hooks catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/hooks-catalog.md) · [Rules catalog](https://github.com/sunj-labs/bassclef/blob/main/docs/rules-catalog.md) — substrate catalogs
166
- - [Context engineering framing](https://github.com/sunj-labs/bassclef/blob/main/design/bassclef-as-context-engineering.md) — substrate-truth framing
167
- - [Context engineering rule](https://github.com/sunj-labs/bassclef/blob/main/.claude/rules/context-engineering.md) — the foundational rule
168
- - Agent choreography — multi-agent operational guide (operator substrate)
169
- - whereami — current project state (operator substrate)
170
-
171
- ## Operator-private substrate
172
-
173
- The `docs/operator-private/` directory contains only a README placeholder in adopter clones. Operator-private substrate (internal deliberation, strategy notes) lives in a separate private repo cloned alongside bassclef.
@@ -1,19 +0,0 @@
1
- ---
2
- tier: lite
3
- description: "Please report security vulnerabilities privately via GitHub's security advisory system:"
4
- ---
5
- # Security Policy
6
-
7
- ## Reporting a vulnerability
8
-
9
- Please report security vulnerabilities privately via GitHub's security advisory system:
10
-
11
- **https://github.com/sunj-labs/bassclef/security/advisories/new**
12
-
13
- Do not report security issues via public GitHub issues, discussions, or pull requests.
14
-
15
- We aim to acknowledge reports within 72 hours and provide an initial response within 7 days.
16
-
17
- ## Supported versions
18
-
19
- Bassclef is pre-1.0. Security fixes apply to the current main branch. Once tagged releases ship, this policy will be updated with version support details.
@@ -1,79 +0,0 @@
1
- ---
2
- tier: lite
3
- adr: ADR-029
4
- title: Release pipeline — tier-filtered export from bassclef-upstream to public bassclef
5
- status: accepted
6
- date: 2026-06-21
7
- description: bassclef-upstream is the upstream experimental source-of-truth (WU-0).
8
- ---
9
- <!-- andon-allow: operator-private -->
10
- <!-- andon-allow: bassclef-upstream -->
11
- <!-- andon-allow: locked-decisions -->
12
-
13
- # ADR-029 — Release pipeline (bassclef-upstream → public bassclef)
14
-
15
- ## Context
16
-
17
- bassclef-upstream is the upstream experimental source-of-truth (WU-0). Public bassclef is the downstream release mirror. One operator, two repos, one direction of flow per the simplified Linux-kernel model (ADR-022 established the rename-in-place rationale that made this split sustainable).
18
-
19
- Without a defined release pipeline, every release is either manual cherry-pick (slow, error-prone) or an unfiltered rsync (catastrophic — operator-private content ships). Neither is acceptable.
20
-
21
- ## Decision
22
-
23
- Implement `scripts/release-to-bassclef.sh` with the following discipline:
24
-
25
- 1. **Tier-tagged frontmatter filter.** Each substrate file carries a `tier:` field with value `private | basic | premium | public` (per ADR + `standards/tier-tag-schema.md`). The script ships `basic` + `public`, excludes `private` + `premium`. Untagged legacy files default to `public`.
26
-
27
- 2. **Andon scan (jidoka stop-the-line).** Before any cross-repo write, grep the filtered file set for operator-private patterns (`operator-private`, `bassclef-upstream`, `locked-decisions`, plus any BLOCK-tier term in `standards/bassclef-internal-jargon.md`). Any match → STOP, surface file+line, refuse to push. Per-file override via `# andon-allow: <term>` header. Process-wide override via `SKIP_ANDON=1` (logged; never in prod).
28
-
29
- 3. **PR-based, never direct push.** Script rsyncs into the target repo working tree, commits on a `release-YYYY-MM-DD-<sha>` branch, pushes, and opens a PR against public bassclef main. Operator merges after review. No direct main-branch writes.
30
-
31
- 4. **Source tag for rollback.** Every release tags bassclef-upstream with `release-YYYY-MM-DD-<sha>` before any external action. Rollback = revert the PR + delete the tag; the source state is recoverable.
32
-
33
- 5. **Operator-fired cadence.** No cron. Operator runs `/release` when they want to ship. Conway lens — one operator IS the cadence signal; automated cadence would manufacture artificial release rhythm.
34
-
35
- ## Alternatives considered
36
-
37
- | Alternative | Why rejected |
38
- |---|---|
39
- | Manual cherry-pick per file | Slow + error-prone + invites operator to skip the andon scan |
40
- | Cron-scheduled auto-release | One-operator org doesn't need automated cadence (Conway); manufactures rhythm |
41
- | Path-allowlist filter without tier | Too coarse for the iterative basic→premium graduation operator wanted (per session's plan-mode decision) |
42
- | Direct push to public main | Branch protection on public main makes this impossible; PR-based works in both modes |
43
- | Bidirectional sync (git subtree / submodule) | Adopter-PR merge to public would diverge; next `--delete` rsync would obliterate silently. PR cherry-pick into private preserves credit (per ADR-030) |
44
-
45
- ## Luminary rationale
46
-
47
- - **Taiichi Ohno (jidoka)** — andon scan is the stop-the-line mechanism. Any operator-private term in shipped content trips the cord; release halts; operator diagnoses before resuming. No silent ship.
48
- - **Vaughn Vernon (bounded contexts)** — the release script IS the explicit context map between the private-experimental and public-hardened bounded contexts. Every cross-context translation runs through one channel.
49
- - **Melvin Conway (one source-of-truth)** — single release valve, single direction of flow, single operator firing it. Reject Linus's distributed subsystem-maintainer ceremony as overkill for one operator.
50
-
51
- ## Consequences
52
-
53
- **Positive:**
54
- - Operator gets one-command release with confidence (tier counts + andon clean before any cross-repo write)
55
- - Iterative releases possible per feature (basic → premium graduation)
56
- - Operator-private content cannot ship through this channel by accident
57
- - PR-based release preserves review surface + rollback posture
58
-
59
- **Negative / accepted trade-offs:**
60
- - Operator must remember to fire `/release` (no automated cadence)
61
- - Untagged legacy files default to public — if operator wanted them private, they must explicitly tier-tag (defense in depth via `docs/operator-private/**` path exclusion covers most cases)
62
- - First-run risk: if the andon scan has a bug, operator-private content could ship. Mitigated by WU-4 verification gates including an intentional-leak andon trip test before Doors Open
63
- - Tag clutter: each release creates a tag. After N releases, `git tag | grep release` is noisy. Acceptable for the cadence we expect (~weekly)
64
-
65
- ## Status
66
-
67
- Accepted 2026-06-21. Implementation in commits shipping under WU-2 (#7). Verified by WU-4 (#10) before Doors Open.
68
-
69
- ## See also
70
-
71
- - ADR-022 — rename-in-place (the move that made one-source-of-truth feasible)
72
- - ADR-030 — adopter inbox flow (the complementary ingestion direction)
73
- - ADR-032 — adopter-sync dispatcher architecture (what the release ships into adopter repos via `install.sh` — see `#1330`)
74
- - `standards/tier-tag-schema.md` — the field definition this script consumes
75
- - `scripts/release-to-bassclef.sh` — the implementation
76
- - `.claude/skills/release/SKILL.md` — operator-invocable wrapper
77
- - `architecture/tier-system-and-release-flow.md` § "Subsystem 4 — Release pipeline" + § "Subsystem 5 — Cold-adopter install bootstrap" — end-to-end view of tier + registry + manifest + release + install
78
- - WU-2 (#7), WU-4 (#10) — work units shipping + verifying this pipeline
79
- - bassclef-upstream `#1330` — cold-adopter install.sh missing (release ships install.sh once it lands; see architecture doc Subsystem 5)
@@ -1,139 +0,0 @@
1
- ---
2
- tier: lite
3
- adr: ADR-031
4
- title: Non-breaking changes to adopters — substrate stability discipline
5
- status: accepted
6
- date: 2026-06-21
7
- description: bassclef positions itself as an open substrate for Claude Code.
8
- ---
9
-
10
- # ADR-031 — Non-breaking changes to adopters
11
-
12
- ## Context
13
-
14
- bassclef positions itself as an open substrate for Claude Code. Once public adopters exist (and they will, per the morning's Doors Open arc), every breaking change costs adopter trust. The discipline that protects that trust must be Tier 1, on par with ADR-029 (release pipeline) and ADR-030 (adopter inbox).
15
-
16
- Tonight (2026-06-21 evening) demonstrated the failure mode concretely. A single filesystem rename — `mv ~/src/sunj-labs/canonical ~/src/sunj-labs/bassclef` — silently broke every adopter repo on the operator's machine. poa, twoDo, family-recipe-2, eugene-supplements, and quorum each had 30+ symlinks pointing through `../canonical/.claude/hooks/`. Every Bash tool call across every adopter emitted 6+ PreToolUse errors. Non-blocking but noisy, and masks any real failure signal.
17
-
18
- The rename was reasonable: the GitHub repo had been renamed weeks earlier; the local folder was finally catching up. The architectural defect was the lack of any compatibility-shim discipline. The rename should have shipped with the shim in the same atomic action.
19
-
20
- Two prior ADRs touched the edges of this concern but neither named it:
21
-
22
- - **ADR-024 (Forward-port registry)** — handles internal content rewrites (chronicles, ADRs, iteration-bets) via Strategy A-clean (replace, no grace period). It does not handle adopter-observable surfaces.
23
- - **ADR-019 (Reference vs vendor distribution)** — names the two adopter binding shapes (reference fetches latest; vendor freezes at pull-time) but does not name the stability guarantee bassclef makes to either.
24
-
25
- The architecture document `architecture/dual-repo-flow.md` covers steady-state operation (release pipeline + adopter inbox) but is silent on substrate evolution. The gap surfaced clearly on 2026-06-21 evening and demands explicit decision.
26
-
27
- ## Decision
28
-
29
- bassclef adopts **"we don't break adopters"** as a Tier 1 architectural discipline, with the same essential weight that Linus Torvalds's "we don't break userspace" carries for the Linux kernel. Hyrum's Law is the theoretical foundation: with enough adopters, every observable behavior is a contract whether bassclef declared it or not.
30
-
31
- The discipline is operationalized through:
32
-
33
- 1. **A rule** at `.claude/rules/we-dont-break-adopters.md` that fires on any change to an adopter-observable surface. Methodology layer.
34
-
35
- 2. **Two luminaries** — Linus Torvalds (`linus-torvalds.md`) as the anchor; Hyrum Wright (`hyrum-wright.md`) as the theoretical foundation. Cited by the rule and by the architecture doc.
36
-
37
- 3. **A new section in `architecture/dual-repo-flow.md`** — "Non-breaking changes to adopters" — between the up-flow (ADR-030) and the "what ships, what doesn't" sections. Enumerates adopter-observable surfaces and the rename-with-compat-shim procedure.
38
-
39
- 4. **Migration manifest discipline** — `docs/operator-private/forward-port-registry/migrations/<date>-<change>.md` is required for every change touching an adopter-observable surface. Documents the change, the shim, the deprecation window, and the retirement condition for the shim.
40
-
41
- 5. **Phase 2 mechanical layer** (tracked at bassclef#1360, separate work) — pre-rename CI test that clones a representative adopter and validates their sync hook against the proposed bassclef HEAD; versioned sync protocol; redirect registry.
42
-
43
- The rule supersedes ADR-024's Strategy A-clean default **for adopter-observable surfaces**. Operator-internal rewrites (chronicles, ADRs, iteration-bets) keep Strategy A-clean per ADR-024. The line between the two is the adopter-observable boundary.
44
-
45
- ## What counts as adopter-observable
46
-
47
- Enumerated in the rule (`.claude/rules/we-dont-break-adopters.md`). Summary:
48
-
49
- - Filesystem paths under `~/src/sunj-labs/` that adopter symlinks resolve through
50
- - Symlink targets inside `<adopter>/.claude/hooks/` and `<adopter>/.claude/skills/`
51
- - Filenames referenced by adopter `.claude/settings.json`
52
- - Schema shape of state-spine files
53
- - `settings.json` field conventions
54
- - Repo names + `.bassclef-source.json` schema
55
- - Hook filenames, agent names, skill directory names referenced by adopter automation
56
-
57
- ## What this requires of every substrate change
58
-
59
- 1. **Identify adopter-observable surfaces touched.** Required analysis before the change ships.
60
- 2. **Build compatibility shim FIRST.** Symlink, alias, forwarding stub, schema accommodation. Old surface keeps working.
61
- 3. **Write migration manifest.** Documents the shim + retirement condition.
62
- 4. **Adopter changelog entry.** /release PR body Summary names the rename, the shim, when the shim retires.
63
- 5. **Deprecation period.** Minimum one /release cycle between deprecation announcement and shim removal. Three cycles for high-blast-radius surfaces.
64
- 6. **Test against real adopter.** Clone a representative adopter; run their sync hook; confirm no observable change. This becomes Phase 2 CI-mechanical.
65
-
66
- ## Alternatives considered
67
-
68
- | Alternative | Why rejected |
69
- |---|---|
70
- | Status quo (rely on operator's judgment per rename) | Tonight proved the operator's judgment is insufficient — we don't enumerate adopter dependencies before substrate changes. Need explicit discipline. |
71
- | SemVer-only (no shim discipline; just bump major version on breaks) | Adopters don't auto-update; SemVer signals don't stop the cascade. Shim is the essential piece. |
72
- | Strategy A-clean everywhere (per ADR-024 default) | Worked for chronicles. Doesn't work for filesystem paths and symlink targets adopters depend on. |
73
- | Pre-announcement only (announce 2 weeks before rename) | Linus's response: "Announcements aren't shims. Did the old name keep working? No? You broke userspace." Announcements are necessary but insufficient. |
74
- | Reference-only distribution (force every adopter to fetch via HTTP API) | Adopters with vendor bindings (the most stable adopter shape) would all need to migrate first. Worse trade than the discipline itself. |
75
-
76
- The selected approach is the strictest discipline that's still operationally feasible for a one-operator substrate. Compat shims cost minutes per substrate change; the alternative is an angry adopter trail.
77
-
78
- ## Consequences
79
-
80
- **Positive:**
81
-
82
- - Adopters can pin a bassclef version and never have their existing setup break across upstream changes
83
- - The discipline scales as adopter count grows (more adopters = more value from the shim)
84
- - The substrate gets to refactor internal naming with adopter-cost-of-zero (the shim absorbs it)
85
- - The "we don't break adopters" framing aligns bassclef philosophically with the most respected substrate evolutions in software history (Linux, POSIX, the Web)
86
-
87
- **Negative:**
88
-
89
- - Every substrate-rename costs more (one extra symlink + one manifest + one changelog entry)
90
- - The substrate accumulates permanent compatibility code (shims that outlive their original purpose)
91
- - Some clean-rename opportunities become uneconomic (Brooks's conceptual-integrity tax)
92
- - Operator discipline required at every substrate change — easy to skip when tired
93
-
94
- **Neutral:**
95
-
96
- - Phase 2 mechanical layer is substantial work (pre-rename CI test, versioned protocol, redirect registry). Tracked as deferred. Discipline holds at methodology layer until Phase 2 ships.
97
-
98
- ## Implementation
99
-
100
- Phase 1 (this session, 2026-06-21 evening):
101
-
102
- - `.claude/rules/we-dont-break-adopters.md` — methodology rule
103
- - `.claude/luminaries/linus-torvalds.md` + `.claude/luminaries/hyrum-wright.md` — discipline anchors
104
- - This ADR (ADR-031)
105
- - `architecture/dual-repo-flow.md` — new section "Non-breaking changes to adopters"
106
- - `docs/operator-private/forward-port-registry/migrations/2026-06-21-local-canonical-to-bassclef-folder.md` — manifest for tonight's rename
107
- - `~/src/sunj-labs/canonical → ~/src/sunj-labs/bassclef` — the rescue shim (already in place at time of authoring)
108
-
109
- Phase 2 (separate session, bassclef#1360):
110
-
111
- - Pre-rename CI test workflow
112
- - bassclef-sync.sh extension that detects + auto-migrates stale references
113
- - `.bassclef-source-redirect.json` registry
114
- - Versioned sync protocol with breaking-change markers
115
-
116
- ## Eat-our-own-dogfood
117
-
118
- This ADR was authored within minutes of the rule's first violation (the canonical→bassclef rename cascade). The shim was applied. The migration manifest names the substrate-rename retroactively. Future renames cite ADR-031 explicitly in their commit messages and /release PR bodies.
119
-
120
- ## References
121
-
122
- - @luminary linus-torvalds
123
- - @luminary hyrum-wright
124
- - @luminary michael-nygard — circuit-breaker pattern (sister discipline)
125
- - @luminary vaughn-vernon — anticorruption layer (the architectural pattern)
126
- - @luminary frederick-brooks — conceptual integrity vs migration cost
127
- - ADR-024 — forward-port registry (this ADR extends/scopes ADR-024 for adopter-observable surfaces)
128
- - ADR-019 — reference vs vendor distribution (sets the two binding shapes this ADR protects)
129
- - ADR-029 — release pipeline (every /release that breaks an adopter-observable surface MUST include migration-manifest reference)
130
- - ADR-030 — adopter inbox (adopter-filed silent-break issues are now defect signals, not acceptable channel)
131
- - `.claude/rules/we-dont-break-adopters.md` — operational methodology
132
- - `architecture/dual-repo-flow.md` — architecture doc with the new section
133
- - bassclef#1360 — Phase 2 mechanical layer
134
- - poa#1251 — sister adopter-side migration ticket
135
- - 2026-06-21 chronicle — the canonical→bassclef cascade + rescue + ADR authoring
136
-
137
- ## Retirement condition
138
-
139
- This ADR retires only if bassclef stops having adopters. Phase 2 mechanical layer may reduce the methodology cost; it does not retire the decision. Adopter stability is a forever commitment.