@thebassclef/lite 1.0.4 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/dist/cli.cjs +298 -55
  2. package/dist/cli.js +298 -55
  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/.claude/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +12 -5
@@ -0,0 +1,427 @@
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
+ ## Applies to
386
+
387
+ - Session-end summaries
388
+ - PR descriptions generated by the agent
389
+ - `/sprint`, `/whereami`, `/whats-the-plan` outputs
390
+ - `/value-prop`, `/feynman`, `/kiss` outputs
391
+ - `/diagnose`, `/architect-review`, `/pattern-review` reports
392
+ - Any gut-check or status report longer than a few sentences
393
+
394
+ ## Does NOT apply to
395
+
396
+ - Short answers (<3 sentences) — keep single-line answers single-line
397
+ - Tool-output relays (commit messages, test output) — don't reformat
398
+ - Code content — never decorate diff blocks
399
+ - When the operator explicitly asks for "just the bullet" / "one line"
400
+
401
+ INSTEAD for the exempt cases: pass the content through verbatim
402
+ (tool output) or match the requested format (operator-specified).
403
+ Visual hierarchy is a tool, not a mandate.
404
+
405
+ ## Relationship to other rules
406
+
407
+ - `commit-conventions.md` — commit messages have their own format
408
+ discipline; this rule doesn't override them
409
+ - `session-artifacts.md` — chronicle + journal entries have their own
410
+ templates; this rule applies to the agent's conversational output
411
+ around them, not the artifacts themselves
412
+ - `artifact-ingestion.md` — "Sources read" blocks satisfy the
413
+ structured-output requirement; they're already compliant with this
414
+ rule
415
+
416
+ ## Enforcement
417
+
418
+ Methodology-level. No hook today. If agent output consistently ignores
419
+ the rule across sessions, a post-response lint could be added as a
420
+ Stop hook — but the first line of defense is the rule loading into
421
+ every session via `additionalDirectories`.
422
+
423
+ ## Override path
424
+
425
+ None needed. The rule prescribes a style; operator may request
426
+ alternative formatting per-response ("just give me the bullet list")
427
+ and the agent complies without rule violation.
@@ -0,0 +1,103 @@
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
+ ## How this composes with existing substrate
71
+
72
+ - `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.
73
+ - `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.
74
+ - `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.
75
+ - `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.
76
+ - `architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md` — the architectural decision that adopts this rule as Tier 1.
77
+ - `architecture/dual-repo-flow.md` — contains the "Non-breaking changes to adopters" section that this rule operationalizes.
78
+
79
+ ## Override path
80
+
81
+ `SKIP_ADOPTER_COMPAT=1 <command>` — for genuinely-exceptional cases. Logged via trace-helper. Use only when:
82
+
83
+ - The breaking change ships under an explicit ADR with `**BREAKING:**` PR body section
84
+ - Deprecation period ≥3 /release cycles has elapsed since the deprecation announcement
85
+ - A migration manifest exists with documented automated remediation
86
+
87
+ 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.
88
+
89
+ ## Composes with
90
+
91
+ - `@luminary linus-torvalds` — anchor for the discipline (we don't break userspace)
92
+ - `@luminary hyrum-wright` — theoretical foundation (with enough users, all observable behaviors are depended on)
93
+ - `@luminary michael-nygard` — circuit-breaker / stability-pattern shape
94
+ - `@luminary vaughn-vernon` — anticorruption layer between bassclef-internal renames and adopter-observable state
95
+ - `@luminary frederick-brooks` — conceptual integrity vs migration cost trade-off
96
+ - `.claude/rules/destructive-operations.md` — sister discipline at the local-action layer
97
+ - `.claude/rules/sdlc-gates.md` — temperance gate must fire before any rename touching adopter-observable surfaces
98
+
99
+ ## When the discipline costs more than the rename benefit
100
+
101
+ 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.
102
+
103
+ Closes the methodology gap surfaced 2026-06-21. Phase 2 mechanical layer tracked at bassclef#1360.