@thebassclef/lite 0.1.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +216 -137
  2. package/dist/cli.js +218 -139
  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/dist/lite/.claude/settings.json +212 -0
  8. package/dist/lite/CLAUDE.md +41 -0
  9. package/dist/lite/gitignore +58 -0
  10. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  11. package/dist/lite/whereami.md +24 -0
  12. package/package.json +8 -2
  13. package/substrate/.bassclef/lite-manifest.json +0 -2701
  14. package/substrate/.claude/agents/architect.md +0 -70
  15. package/substrate/.claude/agents/builder.md +0 -114
  16. package/substrate/.claude/agents/designer.md +0 -156
  17. package/substrate/.claude/agents/reviewer.md +0 -88
  18. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +0 -357
  19. package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
  20. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
  21. package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
  22. package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
  23. package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
  24. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  25. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
  26. package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
  27. package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
  28. package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
  29. package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
  30. package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
  31. package/substrate/.claude/hooks/session-end.sh +0 -433
  32. package/substrate/.claude/hooks/session-reflection.sh +0 -303
  33. package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
  34. package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
  35. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  36. package/substrate/.claude/hooks/state-validate.sh +0 -271
  37. package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
  38. package/substrate/.claude/hooks/temperance-gate.sh +0 -147
  39. package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
  40. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
  41. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
  42. package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
  43. package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
  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,437 +0,0 @@
1
- ---
2
- tier: lite
3
- description: Long agent responses that mix summary + analysis + enumeration + action become walls of text.
4
- ---
5
-
6
- # Visual Hierarchy in Agent Output
7
-
8
- Long agent responses that mix summary + analysis + enumeration + action
9
- become walls of text. Operators scan on mobile and multi-pane desktop;
10
- walls of text force re-reading. Use markdown primitives to create
11
- scannable separation.
12
-
13
- ## When this rule fires
14
-
15
- Fires on any agent response that:
16
-
17
- - Is longer than ~5 paragraphs, OR
18
- - Mixes more than one of: summary, analysis, enumeration, actions, questions
19
-
20
- Does NOT fire on:
21
-
22
- - Short answers (<3 sentences)
23
- - Single-action replies
24
- - Tool-output relays
25
- - Code diffs or file contents
26
-
27
- ## The conventions
28
-
29
- ### 1. TL;DR at the top (when response has conclusions before detail)
30
-
31
- Set off as a bold callout or blockquote, not a plain paragraph:
32
-
33
- ```markdown
34
- > **TL;DR:** one-line conclusion the operator needs even if they read nothing else.
35
- ```
36
-
37
- Not every response needs one. Use when the operator benefits from the
38
- conclusion before the reasoning.
39
-
40
- ### 2. Section headers for distinct parts
41
-
42
- Use `##` with consistent category labels:
43
-
44
- ```markdown
45
- ## Summary
46
- ## Analysis
47
- ## Actions
48
- ## Next
49
- ```
50
-
51
- Pick the labels that match the response shape.
52
-
53
- INSTEAD of forcing all four headers when only two apply: use only the
54
- ones that match (e.g., just `## Summary` and `## Next` for a status
55
- update; just `## Analysis` for a diagnostic).
56
-
57
- ### 3. Horizontal rules between large sections
58
-
59
- `---` separates major sections visually. Use when sections are long
60
- enough that the reader would benefit from a clear break.
61
-
62
- ### 4. Bold category labels in lists
63
-
64
- When enumerating buckets (MUST / SHOULD / COULD, Tier 1 / Tier 2,
65
- Option A / Option B):
66
-
67
- ```markdown
68
- **Tier 1 — Must-fix (N)**
69
- - #NN — title
70
- - #NN — title
71
-
72
- **Tier 2 — Should-fix (N)**
73
- - #NN — title
74
- ```
75
-
76
- Category labels in bold, content under them.
77
-
78
- **Prose enumeration shape.** When a paragraph enumerates 3-5 items
79
- inline (not as a list), each item opens with a bold lead followed
80
- by an em-dash and the item's expansion. The bold lead names the
81
- item; the em-dash separates label from body.
82
-
83
- **Anti-pattern:** flat prose enumeration with no scan anchors.
84
-
85
- ```
86
- The three findings are that CI is stale which means the pipeline
87
- hasn't run in 48 hours, tests are flaky which produced 5 false
88
- positives last week, and the marker check is missing which lets
89
- regressions slip through.
90
- ```
91
-
92
- **Conformant:** bold-lead + em-dash per item, blank line between.
93
-
94
- ```
95
- - **CI stale** — pipeline hasn't run in 48 hours.
96
- - **Tests flaky** — 5 false positives last week.
97
- - **Marker check missing** — regressions slip through.
98
- ```
99
-
100
- Same principle as section 10 (bold inline lead for reasoning
101
- paragraphs). Prose enumeration is a compact form; the bold-lead +
102
- em-dash carries the anchor without needing full paragraph breaks.
103
-
104
- ### 5. Code-fence inline quotes and file refs
105
-
106
- ```markdown
107
- `.claude/rules/visual-hierarchy.md` — not plain text
108
- `git status` — not plain text
109
- ```
110
-
111
- Consistent across the whole response.
112
-
113
- ### 6. Questions / confirmation prompts set off from analysis
114
-
115
- When the response ends with a question for the operator, separate it
116
- visually from preceding analysis — a `---` rule, a bold header
117
- (`**Confirm to proceed?**`), or a short blockquote.
118
-
119
- ### 7. Bulleted wraps use hanging indent
120
-
121
- When a bullet's text wraps to a second or third line, the wrapped text aligns with the first character after the `- ` marker. Not with column 0. Most markdown renderers do this automatically when the source places the bullet at column 0. Agent output that indents wrapped lines to column 0 breaks the signal. The eye reads the wrapped text as a new paragraph, not as part of the bullet.
122
-
123
- **Anti-pattern:** continuation text at column 0 — wrapped text
124
- reads as a new paragraph, not a continuation.
125
-
126
- ```
127
- - This is a long bullet whose text wraps to a second line and the
128
- continuation lands flush left at column 0 which breaks the visual
129
- signal that it belongs to the bullet above.
130
- ```
131
-
132
- **Conformant:** continuation text stays inside the bullet's
133
- visual column.
134
-
135
- ```
136
- - This is a long bullet whose text wraps to a second line, and the
137
- continuation stays indented to align with the first character
138
- after the `- ` marker. The eye reads it as one bullet.
139
- ```
140
-
141
- The rule is about source shape, not render shape. Write markdown source with `-<space>` at column 0. Let the renderer handle wrapping. Do not manually break lines at fixed column widths in ways that put wrapped text at column 0.
142
-
143
- **Alignment is the renderer's job too.** Same principle as line-wrap. Terminals left-align by default. That is the right shape. Do not embed CSS, HTML, or padding to force full-justify or center alignment. The rule scopes source shape, not render shape.
144
-
145
- ### 8. Headers use `##` and `###` for color signals
146
-
147
- Most terminal + web markdown renderers give `##` and `###` headers a color or weight signal. Bold plain text (`**Section**:`) does not get the same signal. The color difference is what lets the operator's eye jump between sections on a long response.
148
-
149
- **Anti-pattern:** section labels as bold plain text.
150
-
151
- ```markdown
152
- **Analysis:** long paragraph here that runs on and on and the
153
- reader cannot easily spot where the next section starts.
154
-
155
- **Recommendation:** more paragraphs.
156
- ```
157
-
158
- **Conformant:** section labels as `##` or `###` headers.
159
-
160
- ```markdown
161
- ## Analysis
162
-
163
- Long paragraph here that runs on and on. The `## Analysis` header
164
- above renders in the harness's header color, giving the eye an
165
- anchor.
166
-
167
- ## Recommendation
168
-
169
- More paragraphs.
170
- ```
171
-
172
- Use `##` for top-level sections in a response; `###` for
173
- subsections. Do not use `#` (H1) in agent output — that heading
174
- level is reserved for document titles.
175
-
176
- ### 9. Skill names and file paths use inline code
177
-
178
- Skill invocations (`/luminary`, `/sprint`, `/kiss`) and file paths
179
- (`.claude/hooks/foo.sh`, `docs/whereami.md`) render distinctly when
180
- wrapped in inline code spans (backticks). Prose that names them
181
- without backticks blends into surrounding text.
182
-
183
- **Anti-pattern:** skill names and file paths as plain text.
184
-
185
- ```
186
- The /luminary skill reads .claude/luminaries/*.md files at every
187
- session start. Also see the /sprint output and docs/whereami.md.
188
- ```
189
-
190
- **Conformant:** skill names and file paths as inline code.
191
-
192
- ```
193
- The `/luminary` skill reads `.claude/luminaries/*.md` files at
194
- every session start. Also see the `/sprint` output and
195
- `docs/whereami.md`.
196
- ```
197
-
198
- Extend the same treatment to:
199
-
200
- - **Environment variables** — `ANTHROPIC_BASE_URL`, `HOME`,
201
- `SKIP_TURN_PROSE_GRADE`
202
- - **CLI commands** — `git status`, `gh pr list`, `bash
203
- scripts/foo.sh`
204
- - **Config keys** — `schema_version`, `tier`, `install-class`
205
- - **Ticket references in code shape** — `#940`, `bassclef#559`
206
- (only when quoted verbatim from a source; plain prose can drop
207
- the backticks)
208
-
209
- Composes with ### 5. Extend ### 5's principle to every skill
210
- name (with slash prefix), every file path (relative or absolute),
211
- every env var, every CLI command, and every config key in
212
- operator-facing prose.
213
-
214
- ### 10. Bold inline lead for reasoning paragraphs and lists
215
-
216
- When a response has 2 or more paragraphs of reasoning, each
217
- paragraph opens with a **short bold lead phrase** (2-4 words)
218
- that names the paragraph's point. Blank line separates
219
- paragraphs. The bold lead renders in the terminal's accent color
220
- — bassclef gold (`--bc-gold` per `design-tokens.css`) or the
221
- renderer's chosen highlight. The exact shade is renderer-controlled;
222
- the source shape is `**bold**`.
223
-
224
- Applies when:
225
- - Paragraph runs 2+ sentences of reasoning
226
- - Response has 2+ such paragraphs stacked
227
- - **Numbered or bulleted list items carry multi-sentence reasoning
228
- (not one-line items)** — the bold lead sits at the head of each
229
- item, followed by an em-dash or a period + space, then the body
230
-
231
- Skips:
232
- - Single-sentence answers (no anchor needed)
233
- - Yes/no confirmations
234
- - One-line list items (they are already their own anchor)
235
- - Tables (they have their own anchors)
236
- - Code blocks
237
-
238
- **Anti-pattern:** wall of reasoning text with no scan anchors.
239
-
240
- ```
241
- The subject matter is already structured which lets the description
242
- inherit that structure. You asked sharp questions which forced short
243
- answers. There was no hedging pressure so the writing stayed direct.
244
- ```
245
-
246
- **Conformant:** bold inline lead per paragraph, blank line between.
247
-
248
- ```
249
- **Subject matter already structured.** Bassclef has explicit layers.
250
- When the thing being described has clear structure, the description
251
- inherits it.
252
-
253
- **Sharp questions.** You cut to the decision, not the background.
254
- That forces short answers because the right answer actually is short.
255
-
256
- **No hedging pressure.** You pushed back on advice. That established
257
- that correctness matters more than validation. That removes the padding.
258
- ```
259
-
260
- **Conformant for lists carrying reasoning:** bold lead on each item.
261
-
262
- ```
263
- 1. **Ishikawa fishbone earned its keep.** Going broad across 6M
264
- categories before five-whys caught the launchd-dead-file
265
- mechanism that direct five-whys would have missed.
266
-
267
- 2. **Operator pause before kickoff was essential.** The 5-lens
268
- luminary consult grounded the plan; would have wasted the whole
269
- /longrun otherwise.
270
-
271
- 3. **Linus lens applied honestly to the cross-OS question.** Forced
272
- the ADR frame. Producer pays cost. No adopter left behind.
273
- ```
274
-
275
- Composes with ### 8 (colored `##` and `###` headers) and ### 4
276
- (bold category labels in lists). Bold lead phrases work at the
277
- paragraph scale the way `##` headers work at the section scale.
278
- Same principle — give the eye a scan anchor.
279
-
280
- ### 11. Arrow-indent for call chains and pipelines
281
-
282
- When describing a sequence of steps that flow into each other (a
283
- tool chain, a pipeline, a call graph), use the `→` arrow prefix
284
- with two-space indent for sub-steps. Plain text — no code fence.
285
- The arrow renders in the same accent color as bold leads on most
286
- terminals.
287
-
288
- **Anti-pattern:** pipeline as flat prose.
289
-
290
- ```
291
- The dispatcher fetches the source config then reads the settings
292
- then reads the sync template then runs the sync then loads the
293
- skills.
294
- ```
295
-
296
- **Conformant:** arrow-prefixed steps, two-space nest for sub-steps.
297
-
298
- ```
299
- → fetch `.bassclef-source.json`
300
- → read `.claude/settings.json`
301
- → merge project + operator settings
302
- → read `presence/install/bassclef-sync.template.sh`
303
- → run the sync
304
- → symlink skills
305
- → symlink rules
306
- → symlink hooks
307
- ```
308
-
309
- Applies when:
310
- - Response describes a call chain, pipeline, or sequence of at
311
- least 3 steps
312
- - Sub-steps nest below a parent step
313
- - The order matters and the reader needs to trace flow
314
-
315
- The arrow prefix is a data glyph (per Tufte). It carries the flow
316
- direction. Composes with ### 5 (inline code for filenames) and
317
- ### 9 (env vars, CLI commands, config keys in inline code).
318
-
319
- ### 12. Tables + special characters — prefer card format when in doubt
320
-
321
- The Claude Code TUI (and some other markdown renderers) has post-processing after markdown parse that can mangle specific characters inside table cells. Standard GFM parsers (pandoc, cmark-gfm) handle these characters cleanly — verified 2026-08-06 with 6-fixture pandoc test on control + apostrophes + escaped pipes + backticks + HTML entities + quotes + backslash. The break happens downstream of GFM, in the renderer itself.
322
-
323
- Suspect character class (per operator observation + #966 comment thread hypothesis + #1144 filing):
324
-
325
- - Apostrophe `'` — reported to collapse rows or drop cells in the Claude Code TUI; unconfirmed at markdown-parse layer
326
- - Raw pipe `|` — will always split a cell unless escaped `\|`; that IS a spec-level defect the author must handle
327
- - Backtick `` ` `` — starts inline code; if unbalanced across a cell, cascades into neighboring cells
328
- - HTML entities (`&lt;`, `&gt;`, `&amp;`) — safe at GFM layer but some renderers do double-decode
329
- - Angle brackets `<>` — some renderers treat as HTML fragments if not entity-encoded
330
-
331
- **Defensive stance** — three options in order of preference:
332
-
333
- 1. **Prefer cards for content with special chars.** Per ### 12 sister-rule sections (#966 wide-table cure + #959 prep density card format), authoring-time card format sidesteps the whole class. Use `**Label** — value.` bullets instead of a table when cells contain apostrophes, quotes, or code.
334
- 2. **If a table is the right shape, escape the suspect chars.** `\|` for pipe, `` `\`` `` for backtick, HTML entities for `<>&`. Apostrophes: try `&#39;` if the TUI break reproduces.
335
- 3. **Keep tables narrow AND alphanumeric-first.** Per ### 12 sister-rule (#966), tables past 4 columns collapse. Combined with special-char break, wide-plus-special-char is the worst case.
336
-
337
- **Anti-pattern:** ships a wide table (5+ cols) with cells containing apostrophes.
338
-
339
- **Conformant:** narrow (≤4 cols) table with alphanumerics only, OR card format for anything with special chars.
340
-
341
- **INSTEAD-block — per-character cure recipes** (per #1144 body step 3):
342
-
343
- - Apostrophe `'` in cell text — write as `&#39;` (HTML entity) OR replace with typographic apostrophe `'` (U+2019) OR move content to card
344
- - Straight double quote `"` in cell text — write as `&quot;` OR replace with typographic quotes `""` (U+201C / U+201D) OR move to card
345
- - Raw pipe `|` — always write as `\|` inside cells; unescaped pipes split cells at GFM parse time (spec-level)
346
- - Backslash `\` in cell text — safe when not preceding a pipe; when followed by pipe use `\\|` to keep the backslash literal
347
- - Angle brackets `<` `>` — write as `&lt;` and `&gt;`; raw brackets sometimes parse as HTML fragments in TUI post-processing
348
- - Backtick `` ` `` — balance inside cells; unbalanced backticks cascade inline-code state into neighboring cells; when carrying literal backticks use HTML entity `&#96;`
349
- - Combined `'` + `"` in the same cell — worst case; move to card. Contractions plus quoted phrases collapse rows in the Claude Code TUI per operator screenshots (whereami L30 of 2026-08-13a session)
350
-
351
- The reproducer at `#1144` characterizes which classes trigger flatten in the current Claude Code TUI. When operator observation surfaces a new class beyond this list, extend the block via a follow-on PR.
352
-
353
- Composes with sister rules — #966 (wide-column threshold), #967 (section-anchor spacing), #959 (prep density card format).
354
-
355
- ## What NOT to do
356
-
357
- - Terminal color codes (renderer-dependent — breaks in different UIs)
358
- - **Decoration emoji** — do not use emoji for ornament (✨, 🎉, 🚀
359
- at the head of sections)
360
- - Nested bold-inside-header (visual noise, no added signal)
361
- - More than one `#` heading level per response (start at `##`)
362
- - **Do not embed CSS, HTML, or padding to force alignment or
363
- justification.** Renderers left-align by default; that is the
364
- correct shape. Full-justify and center are not source-level
365
- markdown signals.
366
-
367
- **Data glyph carve-out** (per Tufte). A glyph that carries data is
368
- allowed, even encouraged. Examples:
369
-
370
- - Risk glyphs in tables — `🟢 low` / `🟡 med` / `🔴 high` (encodes
371
- data on a shared axis)
372
- - Gate signals emitted by hooks — `🛑 BLOCKED:`, `⚠ ADVISORY:`
373
- (encodes state)
374
- - Flow arrows — `→` in call chains (encodes direction)
375
-
376
- The rule is Tufte's — data-ink is welcome; decoration ink is not.
377
- A `🎉` at the head of a section is decoration. A `🟢` inside a
378
- risk column is data.
379
-
380
- INSTEAD: use plain markdown primitives (bold, italics, blockquotes,
381
- code fences) for emphasis; let the operator's renderer decide visual
382
- treatment. Reserve emojis for gate signals the hook itself emits or
383
- for data glyphs that encode information the reader needs to scan.
384
-
385
- ## Why this rule exists
386
-
387
- Captured from operator feedback across multiple sessions (memory entry `feedback_visual_hierarchy.md`). Agent responses with headers like "Key design choices worth calling out" and "Skill summary" blended into surrounding text. On mobile screenshots the eye could not jump to sections. The operator re-read the whole response to find the one they wanted.
388
-
389
- Visual hierarchy is not cosmetic. It is what makes long responses usable on the surfaces operators actually work on.
390
-
391
- Sections 7-9 landed 2026-07-26 per ticket #914. Two mobile screenshots the operator shared in session `chronicle/2026-07-26d-cures-2-3-5-shipped.md` motivated the extension. The reference output showed hanging-indent bullets, colored `##` headers, and inline-code skill names as scannable anchors. Bassclef's agent output was missing those three signals. The extension prescribes them at the source shape so any conforming renderer produces the same scannability.
392
-
393
- Section 10 (bold inline lead) landed 2026-07-27 per ticket #936. Sections 4 (prose enumeration shape), 9 (env vars + CLI + config keys), 10 (numbered and bulleted list reasoning), 11 (arrow-indent pipelines), and the "What NOT to do" data-glyph carve-out landed the same day. Six operator-shared screenshots showed the target output shape — bold leads at paragraph heads, arrow-indent pipelines, inline code for env vars and paths. Bassclef renderers use the accent color from `design-tokens.css` — `--bc-gold` (#F5B83D) for warm highlight, `--bc-orange` (#E85D04) for the master burnt orange. The exact shade is the renderer's choice. The source shape is `**bold**` and inline code fences.
394
-
395
- ## Applies to
396
-
397
- - Session-end summaries
398
- - PR descriptions generated by the agent
399
- - `/sprint`, `/whereami`, `/whats-the-plan` outputs
400
- - `/value-prop`, `/feynman`, `/kiss` outputs
401
- - `/diagnose`, `/architect-review`, `/pattern-review` reports
402
- - Any gut-check or status report longer than a few sentences
403
-
404
- ## Does NOT apply to
405
-
406
- - Short answers (<3 sentences) — keep single-line answers single-line
407
- - Tool-output relays (commit messages, test output) — don't reformat
408
- - Code content — never decorate diff blocks
409
- - When the operator explicitly asks for "just the bullet" / "one line"
410
-
411
- INSTEAD for the exempt cases: pass the content through verbatim
412
- (tool output) or match the requested format (operator-specified).
413
- Visual hierarchy is a tool, not a mandate.
414
-
415
- ## Relationship to other rules
416
-
417
- - `commit-conventions.md` — commit messages have their own format
418
- discipline; this rule doesn't override them
419
- - `session-artifacts.md` — chronicle + journal entries have their own
420
- templates; this rule applies to the agent's conversational output
421
- around them, not the artifacts themselves
422
- - `artifact-ingestion.md` — "Sources read" blocks satisfy the
423
- structured-output requirement; they're already compliant with this
424
- rule
425
-
426
- ## Enforcement
427
-
428
- Methodology-level. No hook today. If agent output consistently ignores
429
- the rule across sessions, a post-response lint could be added as a
430
- Stop hook — but the first line of defense is the rule loading into
431
- every session via `additionalDirectories`.
432
-
433
- ## Override path
434
-
435
- None needed. The rule prescribes a style; operator may request
436
- alternative formatting per-response ("just give me the bullet list")
437
- and the agent complies without rule violation.
@@ -1,126 +0,0 @@
1
- ---
2
- tier: lite
3
- description: "Bassclef adopts Linus Torvalds's rule: we do not break adopters."
4
- ---
5
-
6
- # We don't break adopters
7
-
8
- Bassclef adopts Linus Torvalds's rule: **we do not break adopters**. Every change to a surface adopters see must keep their existing setup working. When a change would break an adopter, bassclef pays the migration cost. Adopters never pay for bassclef's internal cleanup.
9
-
10
- **Adopter-count threshold (per ADR-041, added 2026-07-17):** the mechanism for keeping adopters working scales with adopter count.
11
-
12
- - **N ≤ 24 active adopters** (current: 5) — substrate renames ship immediate. Old vocabulary in prior artifacts (session logs, past goal docs, chronicles, closed PRs) reads through `standards/vocabulary-migration.json`. No compat-shim SKILL stubs per rename. No 90-day grace window on prose. The operator Slacks each adopter about renames as they ship.
13
- - **N ≥ 25 active adopters** — the full compat-shim discipline returns: rename ships with compat alias, fixture, migration manifest, 90-day grace window on prose, adopter changelog entry.
14
-
15
- Adopter count read from `standards/bassclef-source-consumers.json` and `.claude/rules/sibling-smoke-after-substrate-change.md` (sibling-smoke rule ships at standard tier). A backlog ticket tracks the counter mechanism (see ADR-041 Decision 4).
16
-
17
- **Behavior changes stay under full discipline regardless of adopter count.** API contract changes, schema shape changes, and hook filename changes still ship with compat shims — the translation table cannot help there. Only vocabulary renames (word-for-word substitution) qualify for the translation-table path.
18
-
19
- This rule is the methodology layer. The mechanical layer (CI test that clones a representative adopter and verifies their sync hook against the proposed bassclef HEAD; pre-rename validation; the bassclef-source-redirect registry) is Phase 2 work tracked under bassclef#1360.
20
-
21
- ## When this rule fires
22
-
23
- Any change to bassclef-upstream or public bassclef that touches an **adopter-observable surface**:
24
-
25
- **Filesystem surfaces:**
26
- - Filesystem paths under `~/src/sunj-labs/` that adopter repos symlink into (`canonical/`, `bassclef/`, etc.)
27
- - Symlink targets inside `<adopter>/.claude/hooks/` or `<adopter>/.claude/skills/`
28
- - Filenames referenced by adopter `.claude/settings.json` (e.g., the bassclef-sync filename (renamed from a former canonical name per ADR-031))
29
- - Schema shape of state-spine files (entity types, required frontmatter fields, marker formats)
30
- - `settings.json` `additionalDirectories` path conventions
31
- - Repo names and sync URLs in `.bassclef-source.json`
32
- - Hook filenames, agent names, skill directory names that adopter automation invokes
33
-
34
- **gh API surfaces (per bassclef-upstream#404):**
35
- - Label names — rename affects `gh issue list --label X`, `gh pr list --label X`, saved filter URLs, and webhook payloads
36
- - Label descriptions — visible on hover in GitHub UI + in `gh label list` output; carry brand vocabulary adopters quote
37
- - Repo description — visible on repo home page + in `gh repo view --json description` + at discovery surfaces
38
- - Repo topics — discovery + search surface
39
- - Milestone titles + descriptions — adopters filter by these
40
- - Project descriptions (gh projects v2) — when used for cross-repo coordination
41
-
42
- Use `scripts/migrate-gh-surfaces.sh` (sister to `migrate-adopter-references.sh`) to sweep gh API surfaces during a rename event. Defaults to `--dry-run`; operator runs `--apply` after confirming the proposed diff.
43
-
44
- Does NOT fire on:
45
- - Internal bassclef refactors that don't change any of the above (private/methodology docs, operator-private content)
46
- - Strict additions (new skills/rules/hooks that don't replace existing surfaces)
47
- - gh API surfaces internal to a repo (issue body content, PR review comments, individual issue numbers — those have their own discipline)
48
-
49
- ## What the rule requires
50
-
51
- When a substrate change touches an adopter-observable surface:
52
-
53
- 1. **Compatibility shim** — the old surface must keep working. Filesystem rename → leave a symlink at the old path. Filename rename → keep an alias or a one-line forwarding stub at the old name. Schema field rename → continue accepting both during the deprecation window.
54
- 2. **Migration manifest** — file at `docs/operator-private/forward-port-registry/migrations/<date>-<change-slug>.md` documenting: what changed, what the shim is, when adopters can safely remove it, the path forward.
55
- 3. **Adopter changelog entry** — when /release ships the change to public bassclef, the PR body's Summary section names the rename + the shim + when the shim retires.
56
- 4. **Deprecation period** — minimum one /release cycle between "shim in place + old surface deprecated" and "shim removable / breaking change ships." Documented explicitly per change.
57
- 5. **Override path** — if a breaking change is genuinely unavoidable, file an ADR explaining why, AND add a `**BREAKING:**` section to the next /release's PR body, AND set the deprecation period to ≥3 release cycles for any high-blast-radius surface.
58
-
59
- ## Anti-patterns
60
-
61
- These shapes violate the rule:
62
-
63
- - **Silent rename** — old name removed, no shim, adopters discover when they `git pull` and something disappears. (Exactly what tonight's `mv canonical bassclef` did before the rescue symlink.)
64
- - **"It works on my machine" testing** — substrate-renames tested only against the operator's own setup, not against adopter sync paths.
65
- - **Breaking change disguised as feature work** — a feat: commit that happens to rename a public schema field; adopters' parsers break silently.
66
- - **One-shot fallback** — the existing `bassclef-sync.sh` line `if [ -d $CWD/../bassclef ]; then ... else $CWD/../canonical` is a one-shot fallback, NOT a compat shim. It papers over the rename for new clones; it doesn't help adopters who already have stale symlinks.
67
-
68
- INSTEAD of any of those: leave the old surface in place as a redirect/symlink/alias; deprecate it explicitly with a date; ship the migration manifest; surface the change in the adopter changelog.
69
-
70
- ## Why this rule exists
71
-
72
- 2026-06-21 evening. Operator renamed `~/src/sunj-labs/canonical` → `~/src/sunj-labs/bassclef` on their machine. Every adopter repo on the machine broke. The list: poa, twoDo, family-recipe-2, eugene-supplements, quorum. Each had 30+ broken symlinks pointing through `../canonical/.claude/hooks/<name>.sh`. poa's `/longrun` start emitted 6+ PreToolUse hook errors per Bash tool call. Non-blocking but noisy. Real failures got masked.
73
-
74
- The rename was reasonable (the GitHub repo had been renamed canonical → bassclef weeks earlier; the local folder was finally catching up). The lack of compatibility-shim discipline made it cascade.
75
-
76
- This is Hyrum's Law in action. Every adopter depended on the observable path `~/src/sunj-labs/canonical/`. Bassclef never named that path in any contract. With enough adopters, every observable behavior becomes essential.
77
-
78
- Linus's 30-year rule applies directly. The Linux kernel does not break userspace. Even when userspace depends on something the kernel never promised. The kernel team pays the cost. Bassclef takes the same stance.
79
-
80
- ## How this composes with existing substrate
81
-
82
- - `architecture/decisions/ADR-024-forward-port-registry.md` — Strategy A-clean (replace adopter-facing names, no grace period) was the prior default. **This rule supersedes that for adopter-observable surfaces** — compat shims and grace periods are now required. Operator-internal rewrites (chronicles, ADRs, iteration-bets) keep Strategy A-clean.
83
- - `architecture/decisions/ADR-019-reference-vs-vendor-distribution.md` — reference-binding adopters (HTTP API, agent-read URLs) need URL-stability; vendor-binding adopters need filesystem-path-stability. This rule covers both.
84
- - `architecture/decisions/ADR-029-release-pipeline.md` — every /release that touches an adopter-observable surface MUST include a migration-manifest reference in the PR body.
85
- - `architecture/decisions/ADR-030-adopter-inbox-flow.md` — adopters file issues when something silently breaks; this rule makes those issues a defect signal, not an acceptable channel.
86
- - `architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md` — the architectural decision that adopts this rule as Tier 1.
87
- - `architecture/dual-repo-flow.md` — contains the "Non-breaking changes to adopters" section that this rule operationalizes.
88
-
89
- ## Override path
90
-
91
- `SKIP_ADOPTER_COMPAT=1 <command>` — for genuinely-exceptional cases. Logged via trace-helper. Use only when:
92
-
93
- - The breaking change ships under an explicit ADR with `**BREAKING:**` PR body section
94
- - Deprecation period ≥3 /release cycles has elapsed since the deprecation announcement
95
- - A migration manifest exists with documented automated remediation
96
-
97
- INSTEAD of overriding for routine work: write the compat shim. The cost is small (one symlink, one alias, one forwarding stub); the adopter trust compounds across every future release.
98
-
99
- ## Composes with
100
-
101
- - `@luminary linus-torvalds` — anchor for the discipline (we don't break userspace)
102
- - `@luminary hyrum-wright` — theoretical foundation (with enough users, all observable behaviors are depended on)
103
- - `@luminary michael-nygard` — circuit-breaker / stability-pattern shape
104
- - `@luminary vaughn-vernon` — anticorruption layer between bassclef-internal renames and adopter-observable state
105
- - `@luminary frederick-brooks` — conceptual integrity vs migration cost trade-off
106
- - `.claude/rules/destructive-operations.md` — sister discipline at the local-action layer
107
- - `.claude/rules/sdlc-gates.md` — temperance gate must fire before any rename touching adopter-observable surfaces
108
-
109
- ## Refs
110
-
111
- - bassclef#1360 — substrate-rename adopter-migration discipline gap (mechanical layer Phase 2)
112
- - poa#1251 — poa-specific migration sister ticket
113
- - ADR-031 — non-breaking-change adopter discipline decision
114
- - ADR-024 — forward-port-registry (this rule extends/supersedes for adopter-observable surfaces)
115
- - ADR-019 — reference vs vendor distribution
116
- - 2026-06-21 chronicle — the rename + cascade + rescue
117
-
118
- ## Retirement condition
119
-
120
- This rule retires only if bassclef stops having adopters. The mechanical-layer Phase 2 work may reduce the methodology cost but does not retire the discipline. Every release continues to carry adopter compatibility as Tier 1.
121
-
122
- ## When the discipline costs more than the rename benefit
123
-
124
- Sometimes the migration cost will exceed the rename benefit. That's a signal NOT to do the rename. Adopter compatibility is the constraint that disciplines bassclef-internal refactoring — if a rename can't be made non-breaking, the rename probably isn't worth doing. This is Brooks's conceptual-integrity discipline as a budget, not as a license.
125
-
126
- Closes the methodology gap surfaced 2026-06-21. Phase 2 mechanical layer tracked at bassclef#1360.