@thebassclef/lite 0.0.1 → 0.1.2

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 (289) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +85 -4
  3. package/dist/cli.cjs +1612 -0
  4. package/dist/cli.js +1589 -0
  5. package/dist/index.cjs +4 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +4 -0
  8. package/package.json +51 -3
  9. package/substrate/.bassclef/lite-manifest.json +2701 -0
  10. package/substrate/.claude/agents/architect.md +70 -0
  11. package/substrate/.claude/agents/builder.md +114 -0
  12. package/substrate/.claude/agents/designer.md +156 -0
  13. package/substrate/.claude/agents/reviewer.md +88 -0
  14. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
  15. package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
  16. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
  17. package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
  18. package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
  19. package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
  20. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  21. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
  22. package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
  23. package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
  24. package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
  25. package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
  26. package/substrate/.claude/hooks/pre-commit-gate.sh +451 -0
  27. package/substrate/.claude/hooks/session-end.sh +433 -0
  28. package/substrate/.claude/hooks/session-reflection.sh +303 -0
  29. package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
  30. package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
  31. package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
  32. package/substrate/.claude/hooks/state-validate.sh +271 -0
  33. package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
  34. package/substrate/.claude/hooks/temperance-gate.sh +147 -0
  35. package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
  36. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
  37. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +463 -0
  38. package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
  39. package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
  40. package/substrate/.claude/luminaries/alan-cooper.md +170 -0
  41. package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
  42. package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
  43. package/substrate/.claude/luminaries/ash-maurya.md +121 -0
  44. package/substrate/.claude/luminaries/bill-buxton.md +210 -0
  45. package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
  46. package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
  47. package/substrate/.claude/luminaries/don-norman.md +173 -0
  48. package/substrate/.claude/luminaries/edward-tufte.md +179 -0
  49. package/substrate/.claude/luminaries/eric-evans.md +160 -0
  50. package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
  51. package/substrate/.claude/luminaries/gang-of-four.md +157 -0
  52. package/substrate/.claude/luminaries/glenford-myers.md +230 -0
  53. package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
  54. package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
  55. package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
  56. package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
  57. package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
  58. package/substrate/.claude/luminaries/karl-popper.md +132 -0
  59. package/substrate/.claude/luminaries/kent-beck.md +168 -0
  60. package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
  61. package/substrate/.claude/luminaries/martin-fowler.md +164 -0
  62. package/substrate/.claude/luminaries/michael-feathers.md +125 -0
  63. package/substrate/.claude/luminaries/michael-nygard.md +118 -0
  64. package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
  65. package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
  66. package/substrate/.claude/luminaries/sophia-prater.md +193 -0
  67. package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
  68. package/substrate/.claude/luminaries/tony-hoare.md +170 -0
  69. package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
  70. package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
  71. package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
  72. package/substrate/.claude/rules/adr-discipline.md +120 -0
  73. package/substrate/.claude/rules/api-conventions.md +125 -0
  74. package/substrate/.claude/rules/artifact-ingestion.md +179 -0
  75. package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
  76. package/substrate/.claude/rules/blocked-items.md +146 -0
  77. package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
  78. package/substrate/.claude/rules/branching.md +28 -0
  79. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
  80. package/substrate/.claude/rules/commit-conventions.md +22 -0
  81. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
  82. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
  83. package/substrate/.claude/rules/context-engineering.md +202 -0
  84. package/substrate/.claude/rules/context-management.md +85 -0
  85. package/substrate/.claude/rules/defensive-bash.md +68 -0
  86. package/substrate/.claude/rules/deferred-actions.md +233 -0
  87. package/substrate/.claude/rules/destructive-operations.md +69 -0
  88. package/substrate/.claude/rules/diagnosis.md +38 -0
  89. package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
  90. package/substrate/.claude/rules/guardrails.md +73 -0
  91. package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
  92. package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
  93. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
  94. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
  95. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
  96. package/substrate/.claude/rules/loop-discipline.md +81 -0
  97. package/substrate/.claude/rules/manual-prod-approval.md +100 -0
  98. package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
  99. package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
  100. package/substrate/.claude/rules/new-dependency-check.md +51 -0
  101. package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
  102. package/substrate/.claude/rules/operator-facing-prose.md +196 -0
  103. package/substrate/.claude/rules/option-label-discipline.md +108 -0
  104. package/substrate/.claude/rules/pattern-annotation.md +100 -0
  105. package/substrate/.claude/rules/plain-english-discipline.md +156 -0
  106. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
  107. package/substrate/.claude/rules/pr-body-shape.md +317 -0
  108. package/substrate/.claude/rules/pr-strategy.md +167 -0
  109. package/substrate/.claude/rules/pr-title-shape.md +161 -0
  110. package/substrate/.claude/rules/prototype-workflow.md +65 -0
  111. package/substrate/.claude/rules/reserved-skill-names.md +123 -0
  112. package/substrate/.claude/rules/schema-management.md +49 -0
  113. package/substrate/.claude/rules/sdlc-gates.md +149 -0
  114. package/substrate/.claude/rules/security.md +37 -0
  115. package/substrate/.claude/rules/session-artifacts.md +236 -0
  116. package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
  117. package/substrate/.claude/rules/skill-description-clarity.md +247 -0
  118. package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
  119. package/substrate/.claude/rules/state-schema-validation.md +162 -0
  120. package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
  121. package/substrate/.claude/rules/substrate-config-schema.md +98 -0
  122. package/substrate/.claude/rules/test-list-discipline.md +175 -0
  123. package/substrate/.claude/rules/test-sufficiency.md +210 -0
  124. package/substrate/.claude/rules/testing-tier-config.md +145 -0
  125. package/substrate/.claude/rules/testing.md +38 -0
  126. package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
  127. package/substrate/.claude/rules/visual-hierarchy.md +437 -0
  128. package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
  129. package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
  130. package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
  131. package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
  132. package/substrate/.claude/skills/build/SKILL.md +640 -0
  133. package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
  134. package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
  135. package/substrate/.claude/skills/decompose/SKILL.md +280 -0
  136. package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
  137. package/substrate/.claude/skills/feynman/SKILL.md +90 -0
  138. package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
  139. package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
  140. package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
  141. package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
  142. package/substrate/.claude/skills/journal/SKILL.md +209 -0
  143. package/substrate/.claude/skills/kiss/SKILL.md +449 -0
  144. package/substrate/.claude/skills/launch/SKILL.md +915 -0
  145. package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
  146. package/substrate/.claude/skills/longrun/SKILL.md +463 -0
  147. package/substrate/.claude/skills/luminary/SKILL.md +481 -0
  148. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  149. package/substrate/.claude/skills/onboard-repo/SKILL.md +1624 -0
  150. package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
  151. package/substrate/.claude/skills/personas/SKILL.md +207 -0
  152. package/substrate/.claude/skills/promote/SKILL.md +283 -0
  153. package/substrate/.claude/skills/requirement/SKILL.md +98 -0
  154. package/substrate/.claude/skills/retro/SKILL.md +117 -0
  155. package/substrate/.claude/skills/riff/SKILL.md +114 -0
  156. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  157. package/substrate/.claude/skills/session-end/SKILL.md +309 -0
  158. package/substrate/.claude/skills/session-log/SKILL.md +299 -0
  159. package/substrate/.claude/skills/skills/SKILL.md +228 -0
  160. package/substrate/.claude/skills/spec/SKILL.md +105 -0
  161. package/substrate/.claude/skills/sprint/SKILL.md +392 -0
  162. package/substrate/.claude/skills/stage/SKILL.md +384 -0
  163. package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
  164. package/substrate/.claude/skills/temperance/SKILL.md +108 -0
  165. package/substrate/.claude/skills/use-case/SKILL.md +417 -0
  166. package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
  167. package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
  168. package/substrate/.claude/skills/verify/SKILL.md +160 -0
  169. package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
  170. package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
  171. package/substrate/.claude/skills/whereami/SKILL.md +307 -0
  172. package/substrate/AGENTS.md +79 -0
  173. package/substrate/CLAUDE-lite.md +85 -0
  174. package/substrate/CODE_OF_CONDUCT.md +28 -0
  175. package/substrate/CONTRIBUTING.md +177 -0
  176. package/substrate/README.md +173 -0
  177. package/substrate/SECURITY.md +19 -0
  178. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  179. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  180. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  181. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  182. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  183. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  184. package/substrate/lib/clean-artifacts-sweep.sh +112 -0
  185. package/substrate/lib/code-comment-discipline.sh +144 -0
  186. package/substrate/lib/composer-preflight.sh +459 -0
  187. package/substrate/lib/hook-inject.sh +255 -0
  188. package/substrate/lib/luminary-pick.sh +96 -0
  189. package/substrate/lib/output-discipline.sh +143 -0
  190. package/substrate/lib/prose-scan-boundary.sh +171 -0
  191. package/substrate/lib/rewrite-check.sh +214 -0
  192. package/substrate/lib/state.sh +1372 -0
  193. package/substrate/lib/telemetry.sh +205 -0
  194. package/substrate/lib/tier-check.sh +187 -0
  195. package/substrate/lib/tier-dependency-audit.sh +1088 -0
  196. package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
  197. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  198. package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
  199. package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
  200. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  201. package/substrate/scripts/aggregate-telemetry.sh +217 -0
  202. package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
  203. package/substrate/scripts/generate-lite-manifest.sh +505 -0
  204. package/substrate/scripts/generate-tier-manifest.sh +28 -0
  205. package/substrate/scripts/intent-drift-check.sh +456 -0
  206. package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
  207. package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
  208. package/substrate/standards/adr-template.md +86 -0
  209. package/substrate/standards/api-conventions/nextjs.md +84 -0
  210. package/substrate/standards/artifact-composition.md +209 -0
  211. package/substrate/standards/bash-hook-safety.md +246 -0
  212. package/substrate/standards/bassclef-configs-schema.md +232 -0
  213. package/substrate/standards/bassclef-evolution.md +143 -0
  214. package/substrate/standards/bassclef-internal-jargon.md +244 -0
  215. package/substrate/standards/bassclef-managed-sentinel.md +96 -0
  216. package/substrate/standards/bassclef-source-config.md +228 -0
  217. package/substrate/standards/branch-stacking.md +408 -0
  218. package/substrate/standards/code-safety-principles.md +176 -0
  219. package/substrate/standards/composer-prerequisites.md +155 -0
  220. package/substrate/standards/deferred-actions-schema.md +204 -0
  221. package/substrate/standards/dependency-discipline/cargo.md +39 -0
  222. package/substrate/standards/dependency-discipline/gem.md +43 -0
  223. package/substrate/standards/dependency-discipline/go-mod.md +41 -0
  224. package/substrate/standards/dependency-discipline/npm.md +42 -0
  225. package/substrate/standards/dependency-discipline/pip.md +42 -0
  226. package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
  227. package/substrate/standards/deployment-topology.md +69 -0
  228. package/substrate/standards/docs-sync-allowlist.md +76 -0
  229. package/substrate/standards/domain-and-dns.md +145 -0
  230. package/substrate/standards/frontend-stack.md +67 -0
  231. package/substrate/standards/frontmatter-schema.md +154 -0
  232. package/substrate/standards/graceful-exit.md +227 -0
  233. package/substrate/standards/hook-idempotency.md +102 -0
  234. package/substrate/standards/hook-injection-discipline.md +202 -0
  235. package/substrate/standards/hook-install-class.md +215 -0
  236. package/substrate/standards/input-handler-interface.md +152 -0
  237. package/substrate/standards/lite-manifest-schema-changes.md +135 -0
  238. package/substrate/standards/luminary-matching.md +105 -0
  239. package/substrate/standards/luminary-problem-patterns.md +481 -0
  240. package/substrate/standards/migration-discipline/active-record.md +50 -0
  241. package/substrate/standards/migration-discipline/alembic.md +43 -0
  242. package/substrate/standards/migration-discipline/gorm.md +50 -0
  243. package/substrate/standards/migration-discipline/prisma.md +53 -0
  244. package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
  245. package/substrate/standards/mobile-ephemeral-session.md +167 -0
  246. package/substrate/standards/model-routing-discipline.md +160 -0
  247. package/substrate/standards/ogilvy-writing-rules.md +225 -0
  248. package/substrate/standards/opener-discipline.md +96 -0
  249. package/substrate/standards/operator-facing-prose-discipline.md +201 -0
  250. package/substrate/standards/persona-schema.md +229 -0
  251. package/substrate/standards/pluggable-luminaries.md +323 -0
  252. package/substrate/standards/pr-body-discipline.md +115 -0
  253. package/substrate/standards/preview-state-schema.md +189 -0
  254. package/substrate/standards/project-directory-layout.md +276 -0
  255. package/substrate/standards/release-tagging.md +137 -0
  256. package/substrate/standards/reserved-skill-names.md +120 -0
  257. package/substrate/standards/scannable-multi-option-output.md +261 -0
  258. package/substrate/standards/sdlc-compliance.md +286 -0
  259. package/substrate/standards/sdlc-gates/typescript.md +57 -0
  260. package/substrate/standards/secrets-lifecycle.md +210 -0
  261. package/substrate/standards/security-scanner-adapter.md +145 -0
  262. package/substrate/standards/session-board.md +256 -0
  263. package/substrate/standards/skill-output-discipline.md +90 -0
  264. package/substrate/standards/state-spine-contract.md +255 -0
  265. package/substrate/standards/state-spine.md +511 -0
  266. package/substrate/standards/steering-hints/kiss-words.md +11 -0
  267. package/substrate/standards/substrate-config-schema.md +267 -0
  268. package/substrate/standards/tech-stack-config.md +109 -0
  269. package/substrate/standards/tier-dependency-analysis.md +167 -0
  270. package/substrate/standards/tier-runtime-deps/lite.md +57 -0
  271. package/substrate/standards/tier-tag-schema.md +155 -0
  272. package/substrate/standards/two-layer-config.md +99 -0
  273. package/substrate/standards/use-case-format.md +292 -0
  274. package/substrate/standards/user-story-invest.md +268 -0
  275. package/substrate/standards/velocity-and-appetite.md +229 -0
  276. package/substrate/standards/voice-input-pattern.md +119 -0
  277. package/substrate/standards/whereami-schema.md +301 -0
  278. package/substrate/standards/worktree-management.md +211 -0
  279. package/substrate/standards/writing-guide.md +213 -0
  280. package/substrate/templates/chronicle-template.md +75 -0
  281. package/substrate/templates/deferred-action-template.md +45 -0
  282. package/substrate/templates/memory-proposal-template.md +77 -0
  283. package/substrate/templates/persona-template.md +200 -0
  284. package/substrate/templates/pr-faq.md +45 -0
  285. package/substrate/templates/secret-rotation-template.md +162 -0
  286. package/substrate/templates/spec-template.md +131 -0
  287. package/substrate/templates/use-case-template.md +194 -0
  288. package/substrate/templates/user-story-template.md +107 -0
  289. package/substrate/templates/whereami-template.md +101 -0
@@ -0,0 +1,167 @@
1
+ ---
2
+ tier: lite
3
+ description: "The default PR strategy for any multi-issue iteration is stacked atomic branches: one branch per issue, one PR per branch, each independently reviewable and revertable."
4
+ ---
5
+
6
+ # PR Strategy — Stacked Default (Mechanically Enforced)
7
+
8
+ The default PR strategy for any multi-issue iteration is **stacked atomic
9
+ branches**: one branch per issue, one PR per branch, each independently
10
+ reviewable and revertable. Bundling multiple issues into a single PR is
11
+ the **explicit override**, requested via `bundle: true` in the iteration
12
+ goal's frontmatter (or operator statement) at iteration scaffold time.
13
+
14
+ This rule was methodology-only in v0. **As of Phase II Trim the Fat
15
+ (2026-05-07), it is mechanically enforced** by the `atomic-pr-check.sh`
16
+ hook, which fires on `git push` and BLOCKs branches with multiple WU-N
17
+ tags in commit messages unless a matching iteration goal declares
18
+ `bundle: true` in frontmatter.
19
+
20
+ INSTEAD of relying on agent self-discipline: the hook reads the branch's
21
+ commits, counts distinct WU-N tags, and either passes (≤1 distinct tag)
22
+ or BLOCKs with a structured remediation message (multi-step without
23
+ `bundle: true`).
24
+
25
+ ## Default behavior
26
+
27
+ When `/autonomous start` enters Construction with N≥2 issues in scope:
28
+
29
+ - Each issue → its own branch (`feature/ISSUE-NNN-stack-N-slug`)
30
+ - Each branch → its own PR
31
+ - Per `standards/branch-stacking.md`: independence is designed in,
32
+ graceful unwind is mechanical, manifest declares dependencies
33
+ - Boot sequence does NOT ask "stacked or bundled?" — assumes stacked
34
+
35
+ ## Override: `bundle` flag
36
+
37
+ To collapse a multi-issue iteration into a single PR, the operator
38
+ supplies `bundle` at boot:
39
+
40
+ ```
41
+ /autonomous start orchestrator-gated bundle
42
+ /autonomous start operator-gated sequential bundle
43
+ ```
44
+
45
+ Or states it conversationally during scope confirmation. The default
46
+ short-circuits unless the override is present.
47
+
48
+ ## When bundling IS acceptable
49
+
50
+ Use `bundle` when ALL of these hold:
51
+
52
+ 1. **Single logical concern** — all changes serve one decision; splitting
53
+ would be artificial (e.g., a tightly-coupled rename across N files
54
+ that doesn't compile in isolation).
55
+ 2. **Tight coupling that breaks atomic verification** — branch N can't
56
+ pass `/verify` without branch M's changes (decomposition gap, not a
57
+ feature).
58
+ 3. **Emergency hotfix** — staging delay between PRs would compound the
59
+ incident; one PR + one merge gets fixes to prod faster.
60
+ 4. **Operator explicitly requests** — `bundle` flag or verbatim
61
+ instruction.
62
+
63
+ If only #4 holds without #1-3, push back: "stacked is default; what
64
+ about this scope makes bundling correct?"
65
+
66
+ ## When stacking is mandatory
67
+
68
+ Stack regardless of operator preference when:
69
+
70
+ - **Mix of skill + rule + hook changes** — different review surfaces;
71
+ reviewer needs to evaluate each independently
72
+ - **Mix of new files + existing-file edits** — independent revert paths
73
+ - **Different blast radii** — high-radius changes (hooks, schemas)
74
+ shouldn't ride with low-radius (doc edits) in one PR
75
+ - **Multi-WS iteration goal** — workstreams are separate intents by
76
+ definition
77
+
78
+ ## Why this rule exists
79
+
80
+ Every autonomous session before this rule asked "stacked or bundled?"
81
+ Operator answered "stacked" 100% of the time, with `bundle` as a rare
82
+ tactical override (~1 in 20 sessions). Codifying the default eliminates
83
+ the round-trip per bet × bet count × consumer count.
84
+
85
+ Source: operator feedback 2026-04-18 — "default is 'stacked', override
86
+ is 'bundle', so '/pr bundle'." Filed bassclef #177.
87
+
88
+ ## Eat-our-own-dogfood note
89
+
90
+ The PR that ships this rule is itself stacked (with #173) — proves the
91
+ default in the same iteration that codifies it.
92
+
93
+ ## Enforcement
94
+
95
+ - **Hook (mechanical)**: `.claude/hooks/atomic-pr-check.sh` fires on
96
+ Bash tool calls matching `git push`. Counts distinct WU-N tags in
97
+ branch commits. BLOCKs multi-step branches without `bundle: true` in
98
+ a matching iteration goal's frontmatter. Phase II Trim the Fat
99
+ shipped this as the v1 mechanical-enforcement layer.
100
+ - **Boot sequence** (`strategy/autonomous-boot-sequence.md` Step 4):
101
+ scaffold prompt skips PR-strategy question unless `bundle: true`
102
+ supplied
103
+ - **Skill args** (`.claude/skills/autonomous/SKILL.md`): `bundle` listed
104
+ in args reference table
105
+ - **Standard** (`standards/branch-stacking.md`): declares stacked as
106
+ default at the top
107
+ - **Methodology**: agent self-checks before pushing; the hook is the
108
+ backstop, not the only line of defense
109
+
110
+ INSTEAD of methodology-only enforcement: the hook fires automatically
111
+ on every `git push`. Bypass with `SKIP_ATOMIC_PR_CHECK=1` (logged via
112
+ trace-helper) only for genuine bypass cases.
113
+
114
+ ## Override path
115
+
116
+ `bundle` at boot. No mid-session switch — once a stack manifest is
117
+ written, the strategy is locked for that bet (changing mid-flight would
118
+ require re-decomposing scope).
119
+
120
+ ## Merge protocol — MUST read before merging any stacked PR
121
+
122
+ When merging stacked PRs with declared dependencies (Graphite-style:
123
+ dependent PR's `baseRefName` is another feature branch, not `main`),
124
+ **read `standards/branch-stacking.md` §"Squash merge — two protocols"
125
+ BEFORE the first merge in the stack**.
126
+
127
+ Two protocols exist; picking one is mandatory:
128
+
129
+ 1. **Retarget-before-merge** (preferred) — retarget dependents to
130
+ `main` via `gh pr edit <PR> --base main` before merging the parent.
131
+ Dependents survive the cascade.
132
+ 2. **Rebase-after-merge** (fallback) — only if auto-close already
133
+ fired. Per-PR rebase + re-create. Costs 3-8 turns per stack.
134
+
135
+ Helper: `scripts/check-stack-dependents.sh <PR-N>` lists PRs that
136
+ will auto-close when PR N merges with `--delete-branch`.
137
+
138
+ **Why this rule repeats what the standard says**: agents load the
139
+ `.claude/rules/` directory automatically. Standards live in
140
+ `standards/` and are referenced by path. Moving the ceremony-layer
141
+ pointer into the rule means an agent that reads `pr-strategy.md`
142
+ at merge-time is told to go read the protocol — closes the
143
+ "standard exists but agent didn't read it before acting" gap
144
+ observed 2026-04-22 (#245 auto-closed on #244 merge because the
145
+ retarget protocol wasn't consulted).
146
+
147
+ ## Relationship to other rules
148
+
149
+ - `branching.md` — trunk-based + squash merge (governs all branches)
150
+ - `iteration-bet-brief-completeness.md` — Orchestrator transmits
151
+ manifest to Builder; manifest carries the strategy decision
152
+ - `commit-conventions.md` — PR titles per format regardless of strategy
153
+ - `bassclef-workflow-parity.md` — sibling-grep discipline applies per
154
+ PR, not per strategy
155
+ - `standards/branch-stacking.md` §"Squash merge — two protocols" —
156
+ merge-time recovery protocols; MUST read before first merge in any
157
+ stack
158
+
159
+ ## Retirement condition
160
+
161
+ If observed over 6 months and `bundle` ratio stays below 5% with zero
162
+ operator corrections of the default, this rule is correctly calibrated.
163
+ If `bundle` ratio rises above 25%, re-shape — the default may have
164
+ drifted from operator intent. If 0% bundle for 12 months, consider
165
+ removing the override entirely.
166
+
167
+ Closes bassclef #177.
@@ -0,0 +1,161 @@
1
+ ---
2
+ tier: lite
3
+ description: Sister rule to pr-body-shape.md. Encodes authoring-time discipline for the PR title surface. Titles show in gh pr list, GitHub search, and mobile views — they are the…
4
+ ---
5
+
6
+ # PR Title Shape Contract
7
+
8
+ Sister rule to `pr-body-shape.md`. Encodes authoring-time discipline for the PR title surface. Titles show in `gh pr list`, GitHub search, and mobile views — they are the highest-visibility surface in the PR-authoring stack.
9
+
10
+ ## Why this rule exists
11
+
12
+ The `pre-gh-pr-title-scrub.sh` hook catches BLOCK terms in titles per `standards/bassclef-internal-jargon.md`. It does not catch:
13
+
14
+ - Length over 72 chars (mobile views truncate)
15
+ - Multiple concepts stacked with `+` or `—`
16
+ - `(WU-N of bet YYYY-MM-DDx)` suffix bloat
17
+ - Process narration (`/longrun pre-flight`, `/session-end for X`)
18
+ - Bassclef-internal compound verbs/nouns (`Pattern-B mv`, `review-file pass`, `registry shape`)
19
+ - Ticket-ref bloat with verbose body
20
+ - Conventional-commit prefix mismatch (`chore` for substantive features)
21
+ - Uncommon hyphenated prose compounds in titles
22
+ - Repeating literal filenames across title + body
23
+ - Inconsistent `skillname` vs `/skillname` references
24
+
25
+ This rule is the methodology that covers the gap. The wordlist hook is the FLOOR; this catalog is the BAR. Apply the catalog at authoring time rather than relying on the hook to catch what slipped past you.
26
+
27
+ The catalog was drafted from PR-authoring failures observed 2026-06-19. See bassclef#1241 for the source incidents.
28
+
29
+ ## When this rule fires
30
+
31
+ Any time a PR title is being written via:
32
+
33
+ - `gh pr create --title ...`
34
+ - `gh pr edit <N> --title ...`
35
+ - Direct REST `curl POST /repos/<o>/<r>/pulls` with a `title` field
36
+ - GitHub web UI (manual operator authoring)
37
+
38
+ ## Format contract
39
+
40
+ Every PR title is:
41
+
42
+ - **≤72 characters** (mobile views truncate; squash-merge commit messages prefer short)
43
+ - **One conventional-commit prefix** per `commit-conventions.md` — `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `ci:`, `chore:`, `security:`
44
+ - **One primary change** — sub-concepts go in the body Summary, not the title
45
+ - **Bet/WU reference** as `(WU-N)` only when present; bet ref belongs in body Refs
46
+
47
+ Recommended shape: `<type>(<scope>): <verb> <object> (<optional WU-N>)`
48
+
49
+ Examples (all ≤72 chars):
50
+
51
+ - `feat(#1241): document the pseudonym registry file (WU-4)`
52
+ - `fix(bassclef#1125): jq+set -e fail-soft fix in 2 hooks (WU-8)`
53
+ - `chore: update whereami; close bet 2026-06-19b (WU-5)`
54
+
55
+ ## DON'T / INSTEAD catalog
56
+
57
+ ### Length and structure
58
+
59
+ | Don't | INSTEAD |
60
+ |---|---|
61
+ | Exceed 72 chars (mobile truncates; squash commit messages prefer short) | Keep under 72; cut to one concept |
62
+ | Stack multiple concepts with `+` or `—` (`carry-forward + housekeeping + roadmap-reconcile`) | Name the ONE primary change; sub-concepts go in body Summary |
63
+ | `(WU-N of bet YYYY-MM-DDx)` suffix bloat | Either drop entirely or `(WU-N)` alone — bet ref belongs in body Refs |
64
+ | Ticket-ref bloat with verbose body (`chore(bassclef#1031): document operator-private-pseudonyms.json registry shape`) | Either prefix `(#NNNN)` OR a full descriptive body — not both |
65
+
66
+ ### Conventional-commit prefix
67
+
68
+ | Don't | INSTEAD |
69
+ |---|---|
70
+ | Conventional-commit prefix mismatch (`chore` for substantive features) | Match prefix to actual change type per `commit-conventions.md` |
71
+ | Invent bassclef-internal prefixes (`substrate-defect:`, `bet:`, `closeout:` outside of `chore(closeout)`) | Use the 8 standard types only; substrate bugs are `fix:` |
72
+ | Process narration as title (`/longrun pre-flight`, `/session-end for X`) | Name the artifact change (`prep goal doc`, `update whereami`) |
73
+
74
+ ### Plain English
75
+
76
+ | Don't | INSTEAD |
77
+ |---|---|
78
+ | Bassclef-internal compound verbs/nouns (`Pattern-B mv`, `review-file pass`, `registry shape`) | Plain verb + object (`move`, `run`, `document the file schema`) |
79
+ | Uncommon hyphenated prose compounds (`carry-forward`, `pre-flight` as title prose) | Plain words (`continued`, `prep`); literal filenames + CLI flags + script names preserve as code identifiers |
80
+ | Buzz adjectives in titles (`substantive`, `comprehensive`, `robust`) | Concrete verb + concrete object |
81
+ | Bassclef-internal verbs (`flip`, `Pattern-B'd`, `seed` as noun) | Plain verbs (`update`, `move`, `set up`) |
82
+
83
+ ### Cross-surface consistency
84
+
85
+ | Don't | INSTEAD |
86
+ |---|---|
87
+ | Repeat literal filenames in both title and body Summary | Plain title; filenames in body where they're grep-anchored to the actual change |
88
+ | Mix `skillname` and `/skillname` for the same skill across titles | Use `/skillname` consistently when referencing the skill; plain filename when referencing the file (e.g., `docs/whereami.md`) |
89
+
90
+ ## Worked examples
91
+
92
+ ### Anti-pattern — multi-concept + bet-ref bloat + bassclef-internal compound
93
+
94
+ ```
95
+ chore(bet): /longrun 2026-06-19b pre-flight — carry-forward + housekeeping + roadmap-reconcile (WU-0 of bet 2026-06-19b)
96
+ ```
97
+
98
+ 100 chars. Three stacked concepts. Process narration. Bet ref bloat. Bassclef-internal compound `carry-forward`.
99
+
100
+ ### Conformant pattern
101
+
102
+ ```
103
+ chore(bet): prep 2026-06-19b /longrun continued (WU-0)
104
+ ```
105
+
106
+ 53 chars. One primary change. Plain English. `/longrun` slashed consistently. Bet ref dropped from title (lives in body).
107
+
108
+ ### Anti-pattern — buzz adjective + invented compound + filename duplication
109
+
110
+ ```
111
+ chore(bassclef#1031): document operator-private-pseudonyms.json registry shape (WU-4 of bet 2026-06-19b)
112
+ ```
113
+
114
+ 104 chars. Invented compound `registry shape`. Filename appears in title AND body Summary.
115
+
116
+ ### Conformant pattern
117
+
118
+ ```
119
+ chore(#1031): document the pseudonym registry file (WU-4)
120
+ ```
121
+
122
+ 57 chars. Plain English. Filename moved to body (where the diff is grep-anchored).
123
+
124
+ ## Mechanical enforcement
125
+
126
+ Wordlist BLOCK terms are caught by `pre-gh-pr-title-scrub.sh` at write time. This rule covers everything else as methodology. Hook extension to catch the additional catalog rows is sibling work tracked at bassclef#1241.
127
+
128
+ ## Override path
129
+
130
+ `SKIP_PR_TITLE_SHAPE=1 <command>` — logged via trace-helper. Use rarely:
131
+
132
+ - Quoting an exact phrase from a memory file or external doc that requires verbatim retention
133
+ - One-off automated dispatch where the title is generated by a third-party tool
134
+
135
+ ## Composes with
136
+
137
+ - `.claude/rules/pr-body-shape.md` — sister rule at the body surface
138
+ - `.claude/rules/commit-conventions.md` — conventional-commit format
139
+ - `.claude/rules/plain-english-discipline.md` — master plain-English rule
140
+ - `.claude/rules/operator-facing-prose.md` — gloss + /kiss meta-discipline
141
+ - `.claude/rules/context-engineering.md` — INSTEAD-block discipline (foundational)
142
+ - `standards/bassclef-internal-jargon.md` — wordlist driving BLOCK substitutions
143
+ - `.claude/hooks/pre-gh-pr-title-scrub.sh` — mechanical floor
144
+
145
+ ## Distinct from
146
+
147
+ - `commit-conventions.md` — commit message FORMAT (type + scope + body); this rule applies to PR TITLES (which become squash-commit subjects)
148
+ - `pr-body-shape.md` — body section structure + DON'T/INSTEAD catalog for each section
149
+ - `pattern-annotation.md` — source code annotation; orthogonal
150
+
151
+ ## Refs
152
+
153
+ - bassclef#1241 — `/pr-title` + `/pr-body` skill spec (this rule is the methodology side)
154
+ - bassclef#1239 — pre-gh-*-scrub matcher extension for curl REST fallback (related substrate-defect)
155
+ - bassclef#1178 — Problem-section shape (rule for the body opener)
156
+ - bassclef#1217 — pre-gh-pr-title-scrub hook (the mechanical floor)
157
+ - bassclef#915 — phrase-shaped advisory perimeter
158
+
159
+ ## Retirement condition
160
+
161
+ If observed across 6 months with title-shape drift consistently below 10% on sampled feature-scope PRs, the rule is correctly calibrated. If drift exceeds 25%, escalate the hook to enforce the catalog rows mechanically. The catalog rows ship without an a-priori retirement condition — they encode discipline that survives any future skill or hook build.
@@ -0,0 +1,65 @@
1
+ ---
2
+ tier: lite
3
+ description: "Design prototypes (artifacts under docs/prototypes/**) are visual statements to Reviewer (\"this is what we want built\")."
4
+ ---
5
+
6
+ # Prototype Workflow — Visual Confirm Before Commit
7
+
8
+ Design prototypes (artifacts under `docs/prototypes/**`) are visual
9
+ statements to Reviewer ("this is what we want built"). They MUST NOT
10
+ enter git history until the operator has confirmed the rendered output.
11
+
12
+ ## Protocol for prototype edits
13
+
14
+ When modifying a file under `docs/prototypes/**/*.{html,css,tsx,jsx}`:
15
+
16
+ 1. **Render** — open the prototype locally (dev server, Playwright MCP, or direct file)
17
+ 2. **Screenshot** — save to `.playwright-mcp/prototype-render-<branch>.png` or equivalent
18
+ 3. **Share with operator** — show rendered output, wait for explicit confirmation
19
+ 4. **Then commit** — only after confirmation
20
+
21
+ Committing first and sharing after inverts the gate: git history now
22
+ holds unapproved state, and any revert has to serve only as a rule-
23
+ violation record.
24
+
25
+ ## Distinction from production-UI visual review
26
+
27
+ - **Production UI** (per usability rule #7): Reviewer diffs built surface
28
+ against prototype before merge
29
+ - **Prototype edits** (this rule): agent confirms rendered prototype
30
+ against operator intent before commit
31
+
32
+ The two gates are complementary. Production gate catches drift from
33
+ prototype; this gate catches drift from operator intent.
34
+
35
+ ## When this rule does NOT fire
36
+
37
+ - Non-visual edits to prototype directory (README, notes, data fixtures)
38
+ - Branch explicitly scoped to "prototype cleanup / lint / formatting"
39
+ with no visual change (agent must assert no-visual-change)
40
+
41
+ ## Why this rule exists
42
+
43
+ 2026-04-13 incident: agent modified conversational Review Queue
44
+ prototype v5, committed, pushed, reported success — all before showing
45
+ operator the rendered output. Operator reviewed, rejected. Commit +
46
+ revert pair now serves only to satisfy the rule that was violated.
47
+
48
+ The existing `/verify` "UI component / page" gate runs `/visual-review`
49
+ for production UI. Prototypes fell in a gap: not production (so gate
50
+ doesn't fire) but visual artifacts whose whole purpose is operator
51
+ review. This rule closes the gap.
52
+
53
+ ## Relationship to other rules
54
+
55
+ - `usability.md` #7 — production UI visual review; this rule's upstream
56
+ - `design-direction.md` — prototype approvals are load-bearing once
57
+ given; this rule governs HOW to get them
58
+ - `sdlc-gates.md` — post-build gates; prototype confirmation is a
59
+ pre-commit gate
60
+
61
+ ## Enforcement
62
+
63
+ Methodology-level today. Future mechanical backstop (proposed): pre-commit
64
+ hook checks paths matching `docs/prototypes/**/*.{html,css}` and requires
65
+ a render artifact newer than the edit plus an operator-confirmation marker.
@@ -0,0 +1,123 @@
1
+ ---
2
+ tier: lite
3
+ description: "Bassclef MUST NOT create a skill (.claude/skills/<name>/SKILL.md) with a name Claude Code's harness already claims."
4
+ ---
5
+
6
+ # Reserved Skill Names
7
+
8
+ Bassclef MUST NOT create a skill (`.claude/skills/<name>/SKILL.md`)
9
+ with a name Claude Code's harness already claims. Collisions are
10
+ silent and behavioral: operator types `/<name>` expecting bassclef's
11
+ skill; harness resolves the built-in first and returns something else.
12
+
13
+ The authoritative list lives in `standards/reserved-skill-names.md`.
14
+ This file is the **rule** — semantics, enforcement, override path.
15
+
16
+ ## Why this rule exists
17
+
18
+ 2026-04-18 during fix-workflow family shaping: bet originally proposed
19
+ `/investigate` as the postmortem composer. Check of Claude Code's `FEY`
20
+ array revealed `investigate` is a harness built-in (remote investigation
21
+ workflow). Naming the bassclef skill `/investigate` would have meant
22
+ every `/investigate` invocation resolved to the harness, not bassclef —
23
+ the skill would have been unreachable via its own name.
24
+
25
+ Renamed to `/incident-report`. Filed this rule to prevent future
26
+ collisions reaching PR stage.
27
+
28
+ ## When this rule fires
29
+
30
+ On any commit (or PR) that stages a new `.claude/skills/<name>/SKILL.md`
31
+ where `<name>` appears in the `standards/reserved-skill-names.md` list.
32
+
33
+ Does NOT fire on:
34
+ - Edits to existing skill files (only NEW skill directories)
35
+ - Files outside `.claude/skills/`
36
+ - Skills whose name includes a prefix/suffix avoiding collision
37
+ (e.g., `/docs-generator`, `/review-pr`)
38
+
39
+ ## Enforcement
40
+
41
+ ### Mechanical — pre-commit hook
42
+
43
+ `.claude/hooks/pre-commit-gate.sh` checks staged skill directories
44
+ against the reserved list. On collision, emits:
45
+
46
+ ```
47
+ BLOCKED: reserved skill name — `<name>` collides with a Claude Code
48
+ built-in. See standards/reserved-skill-names.md. Rename or override
49
+ with SKIP_RESERVED_NAMES=1.
50
+ ```
51
+
52
+ Blocks the commit. Per `blocked-items.md`, the block must be resolved
53
+ (rename) or explicitly deferred (override with rationale) — silence
54
+ is not deferral.
55
+
56
+ ### Methodology — agent self-check
57
+
58
+ When drafting a new skill, the agent MUST:
59
+
60
+ 1. Read `standards/reserved-skill-names.md` before proposing a skill name
61
+ 2. If the proposed name matches, either:
62
+ - Pick a different name
63
+ - Justify the override (see Override path below)
64
+ 3. Cite the check in the PR body ("Reserved-names check: [name] — no
65
+ collision" or "collision — override justified by X")
66
+
67
+ The "Sources read" block per `artifact-ingestion.md` covers this
68
+ citation automatically when a new-skill PR references the standards list.
69
+
70
+ ## Override path
71
+
72
+ Rare case — bassclef wants to deliberately shadow a harness built-in:
73
+
74
+ 1. Add a note to the skill's SKILL.md frontmatter:
75
+ `reserved_name_override: "<name> — rationale"`
76
+ 2. Commit with `SKIP_RESERVED_NAMES=1 git commit ...`
77
+ 3. Call out the override in the PR body
78
+
79
+ The override exists because rules should be judgeable. But the friction
80
+ is deliberately high — bypassing the hook requires conscious intent.
81
+
82
+ ## What counts as a "collision"
83
+
84
+ Exact string match, case-insensitive, against the `Name` column of
85
+ `standards/reserved-skill-names.md`. The skill directory name (not the
86
+ slash-command alias, not the frontmatter `name:` field) is what the
87
+ harness resolves; the directory name is what the hook checks.
88
+
89
+ Prefixes and suffixes break collision:
90
+
91
+ | Reserved | Bassclef skill | Collides? |
92
+ |----------|----------------|-----------|
93
+ | `docs` | `docs-generator` | No |
94
+ | `docs` | `docs` | **Yes** |
95
+ | `init` | `init-repo` | No |
96
+ | `review` | `review` | **Yes** |
97
+ | `review` | `pr-review` | No |
98
+
99
+ ## How the list gets updated
100
+
101
+ Process lives in `standards/reserved-skill-names.md` ("Updating this
102
+ list" section). Key constraint: if the list addition would collide
103
+ with an existing bassclef skill, that skill MUST be renamed before
104
+ the list addition merges. No silent shadow.
105
+
106
+ ## Relationship to other rules
107
+
108
+ - `blocked-items.md` — the hook emits `BLOCKED: reserved skill name`;
109
+ this rule's semantics slot into the blocked-items protocol
110
+ - `artifact-ingestion.md` — new-skill PRs read the standards list;
111
+ "Sources read" block cites it
112
+ - `commit-conventions.md` — override commits include `SKIP_RESERVED_NAMES=1`;
113
+ rationale in body
114
+ - `sdlc-gates.md` — collision check fires at pre-commit, before
115
+ bassclef-evolution check
116
+
117
+ ## Retirement condition
118
+
119
+ If Claude Code ships a machine-readable API for the built-in registry
120
+ (e.g., `claude --list-builtins --json`), this rule's mechanical
121
+ enforcement can migrate to a dynamic check. The methodology-level
122
+ rule (agent self-check) stays regardless — it's the first line of
123
+ defense.
@@ -0,0 +1,49 @@
1
+ ---
2
+ tier: lite
3
+ globs: ["prisma/**", "**/schema.prisma", "**/migration*", "alembic/**", "db/migrate/**", "migrations/**", "**/migrations/**"]
4
+ description: Schema management — never apply schema changes without a migration; loads per-ORM sibling
5
+ ---
6
+
7
+ # Schema Management
8
+
9
+ Universal principle: **never apply schema changes without a migration file**. Schema drift between local and prod is a load-bearing failure mode for every ORM. When local is reset (rebuild, fresh clone, CI runner spin-up), unmigrated changes vanish silently and prod diverges from local. The failure surfaces hours or days later as a runtime crash with no obvious cause.
10
+
11
+ The discipline holds across ORMs; the specifics differ. Bassclef's loader reads `tech_stack.orm:` from `.claude/bassclef-configs.jsonc` and loads the matching sibling under `standards/migration-discipline/` for ORM-specific guidance.
12
+
13
+ ## Universal commitments (every ORM)
14
+
15
+ 1. **Never use auto-apply / push tools** that bypass migration files (Prisma `db push`, GORM `AutoMigrate` in production, Django `--fake`, etc.). They feel fast but ship drift.
16
+ 2. **Always create a migration file** when changing the schema. The migration is the audit trail; missing migration = missing audit.
17
+ 3. **Commit the migration with the schema change.** Splitting them across commits is how reviewers miss the migration entirely.
18
+ 4. **Run migrate-deploy in CI**, not `dev` / autogen. Production migrations are explicit, reviewed, and reversible.
19
+ 5. **After merging a schema change**, regenerate the client / model bindings + restart the dev process. Cached clients don't know about new fields.
20
+ 6. **Migration files are immutable once shipped**. Editing a merged migration corrupts history for every other developer.
21
+
22
+ ## Per-ORM siblings
23
+
24
+ | Adopter's `tech_stack.orm` | Sibling loaded |
25
+ |---|---|
26
+ | `prisma` | `standards/migration-discipline/prisma.md` |
27
+ | `sqlalchemy` | `standards/migration-discipline/sqlalchemy.md` (Alembic via SQLAlchemy autogen) |
28
+ | `alembic` | `standards/migration-discipline/alembic.md` (standalone Alembic, non-SQLAlchemy) |
29
+ | `gorm` | `standards/migration-discipline/gorm.md` |
30
+ | `active-record` | `standards/migration-discipline/active-record.md` (Rails migrations) |
31
+ | `drizzle` | `standards/migration-discipline/drizzle.md` *(future — file `/promote` to author)* |
32
+ | `none` or unset | Universal commitments only |
33
+
34
+ When the matching sibling does not exist, the rule fires the universal commitments only and surfaces a `/promote` candidate for the missing sibling.
35
+
36
+ ## Session-start drift check
37
+
38
+ Each ORM's sibling describes its drift-detection mechanism. The session-start hook reads the adopter's `tech_stack.orm:` and runs the matching check. If drift is detected, the agent creates the missing migration before writing any code.
39
+
40
+ ## Tech stack vocabulary
41
+
42
+ The loader reads `tech_stack.orm` shipped in bassclef#1127 (WU-2 of bet 2026-06-18a). Adopters set the value at `/onboard-repo` Phase 2.x. When `tech_stack:` block is absent, the universal commitments still apply; ORM-specific guidance is skipped until the operator declares the stack.
43
+
44
+ ## Refs
45
+
46
+ - Path A pattern from bassclef#1133 (ARCH-T0 stack-leakage audit).
47
+ - WU-5 of bet `docs/iteration-bets/2026-06-18a-public-adopter-leverage-longrun.md` ships this catalog split. Subsumes bassclef#1150 (T18 migration-discipline) — that ticket's scope lands here.
48
+ - Sister Path A: bassclef#1133 WU-10 (new-dependency-check → dependency-discipline catalog, same shape).
49
+ - Reads from bassclef#1127 (tech_stack vocabulary).