@thebassclef/lite 0.1.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +431 -135
  2. package/dist/cli.js +433 -137
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
  8. package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
  9. package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
  10. package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
  11. package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
  12. package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
  13. package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
  14. package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
  15. package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
  16. package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
  17. package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
  18. package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
  19. package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
  20. package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
  21. package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
  22. package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
  23. package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
  24. package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
  25. package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
  26. package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
  27. package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
  28. package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
  29. package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
  30. package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
  31. package/dist/lite/.claude/settings.json +212 -0
  32. package/dist/lite/CLAUDE.md +41 -0
  33. package/dist/lite/gitignore +58 -0
  34. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  35. package/dist/lite/whereami.md +24 -0
  36. package/package.json +8 -2
  37. package/substrate/.bassclef/lite-manifest.json +0 -2701
  38. package/substrate/.claude/agents/architect.md +0 -70
  39. package/substrate/.claude/agents/builder.md +0 -114
  40. package/substrate/.claude/agents/designer.md +0 -156
  41. package/substrate/.claude/agents/reviewer.md +0 -88
  42. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  43. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,149 +0,0 @@
1
- ---
2
- tier: lite
3
- description: Universal SDLC gates — pre-build temperance + diagnose, post-build /verify, observed-failure chain. Stack-specific globs live in per-language siblings under standards/sdlc-gates/.
4
- ---
5
-
6
- # SDLC Gates
7
-
8
- Universal SDLC discipline applicable to any stack. The temperance + diagnose + verify chain is language-agnostic; the specific globs that scope the rule to source files live in per-language siblings under `standards/sdlc-gates/`. The loader (future ticket) reads adopter's `tech_stack.lang` from `.claude/bassclef-configs.jsonc` and applies the matching sibling's globs in addition to this rule.
9
-
10
- When no sibling exists for the adopter's language, the universal gates below still apply — the rule fires methodologically even without glob-based file scoping.
11
-
12
- ## Per-stack siblings
13
-
14
- | Adopter's `tech_stack.lang` | Sibling loaded |
15
- |---|---|
16
- | `typescript` | `standards/sdlc-gates/typescript.md` |
17
- | `python` | `standards/sdlc-gates/python.md` *(future — file `/promote` to author)* |
18
- | `ruby` | `standards/sdlc-gates/ruby.md` *(future)* |
19
- | `go` | `standards/sdlc-gates/go.md` *(future)* |
20
- | `none` or unset | universal gates only; no glob-based scoping |
21
-
22
- When the matching sibling does not exist, the universal gates below apply; sibling-specific globs are skipped until the operator declares the stack and a sibling ships.
23
-
24
- ## Pre-Build (before writing code) — HOOK ENFORCED (BLOCKING)
25
-
26
- The `pre-build-gate.sh` hook enforces these as hard blocks (exit 2)
27
- on PreToolUse Edit / Write / MultiEdit. Per bassclef#1060 the gate
28
- flipped from advisory (banner + exit 0) to blocking after an audit
29
- showed 0 of 15 PRs had temperance markers. Methodology-only failed.
30
-
31
- Override paths per gate: `SKIP_TEMPERANCE=1` and `SKIP_DIAGNOSE=1`
32
- (logged via trace-helper).
33
-
34
- 1. **Temperance** — fires at **scope-decision boundaries**, not
35
- per-branch. You must state your approach before the gate clears.
36
- BLOCKS first edit on non-stacked branches until a marker exists
37
- at `state/markers/temperance/<branch-slug>.marker`. Stacked
38
- branches auto-suppress (the scope decision was made at
39
- manifest-write time).
40
-
41
- Scope-decision boundaries (where the gate IS load-bearing):
42
- - Session kickoff (autonomous or `/longrun` start)
43
- - Phase boundary (last WS in a phase transitions to merged →
44
- next phase's premise re-engaged)
45
- - Post-compaction recovery (context just compacted; have I drifted?)
46
- - Scope-drift detection (a WS exceeds time budget × 1.5 → pause and
47
- re-anchor)
48
- - First edit per branch IF branch is NOT declared in any stack
49
- manifest (non-stacked work fallback)
50
-
51
- When the current branch IS declared in a `docs/stacks/*.md` or
52
- `docs/branch-stacks/*.md` manifest, per-branch temperance is
53
- **suppressed** — the scope decision was made at manifest-write
54
- time. Phase-level firings cover the actual decision points.
55
- Per bassclef#272.
56
-
57
- Auto-fire mechanisms (session-kickoff, phase-boundary,
58
- post-compaction, scope-drift detection) ship with the `/longrun`
59
- skill (bassclef#274). Until then, the operator + agent fire
60
- temperance manually at those boundaries.
61
- 2. **Diagnosis** — fires on ALL fix/ branches. You must run /diagnose
62
- (Is/Is Not + Five Whys + Hypothesis) before writing any fix code.
63
- The hook blocks until diagnosis evidence exists.
64
- 3. SDLC checkpoint — spec current? diagrams need updating?
65
- 4. Requirements → tickets — log before coding
66
-
67
- ## Observed failure → temperance → diagnose (MANDATORY)
68
-
69
- Any time you observe a failure — regardless of source — fire this chain:
70
-
71
- 1. Temperance (pause before reacting):
72
- - Is this expected? Is this worth investigating?
73
- - Am I about to brute-force a retry instead of understanding?
74
-
75
- 2. Diagnose (if the failure is real):
76
- - Is / Is Not
77
- - Five Whys to root cause
78
- - Hypothesis + test plan
79
- - THEN fix
80
-
81
- This applies to ALL failure sources:
82
- - Tool output (CI logs, tsc errors, test failures, deploy logs)
83
- - Failures you caused (pushed code → CI broke → fix before moving on)
84
- - User-reported failures (text, screenshots, logs)
85
- - Server logs you read
86
-
87
- Do NOT rely on hooks alone. You are responsible for recognizing failures
88
- in all forms and firing the temperance → diagnose chain yourself.
89
-
90
- ## Post-Build (before committing — EACH task, not batched)
91
-
92
- Run /verify for the change type. Do not batch-build then batch-verify.
93
-
94
- Before committing, ask yourself:
95
- - Did I add or modify an exported function? → It needs a test.
96
- - Did I change query logic or selection behavior? → Test it.
97
- - Can I extract the logic into a pure function? → Do it, then test it.
98
-
99
- "I'll add tests later" is never acceptable.
100
-
101
- INSTEAD: tests ship with the code in the same commit. If the test is
102
- hard to write, that's a signal the implementation needs decomposing —
103
- fix the design first, then the test follows naturally.
104
-
105
- ## Bassclef Evolution Check (non-bassclef repos only)
106
-
107
- Before committing **any methodology or configuration change** in an app repo,
108
- ask: "Is this local or global?"
109
-
110
- ### What triggers the check
111
-
112
- Not just `.claude/` — any change that establishes a pattern other repos
113
- might need:
114
-
115
- | Change | Examples | Why it matters |
116
- |--------|----------|---------------|
117
- | `.claude/` files | skills, rules, hooks, agents | Direct substrate changes |
118
- | `settings.json` | model routing, permission defaults, hook config | Global agent behavior |
119
- | `package.json` scripts | new dev commands, lint configs, build patterns | Workflow conventions |
120
- | Hook scripts | pre-commit, pre-push, CI scripts | Process enforcement |
121
- | Config files | `.eslintrc`, `tsconfig`, `prettier`, `.env.example` | Standards compliance |
122
- | New workflow patterns | testing approaches, deployment scripts, seed patterns | Methodology evolution |
123
-
124
- ### The check
125
-
126
- 1. Is this general (applies to any project) or app-specific?
127
- 2. If general → run `/promote` to create a `bassclef-evolution` issue
128
- 3. Log the promotion and continue with current work.
129
-
130
- INSTEAD of waiting for promotion to merge: file the issue and
131
- keep moving. Promotion lands on its own cadence; current work
132
- doesn't block on it.
133
-
134
- 4. If unsure → promote. It's cheaper to reject a promotion than to
135
- rediscover the pattern later in another repo.
136
-
137
- ### Common miss: settings.json
138
-
139
- Settings changes are the most commonly missed. When an app repo modifies
140
- agent behavior, model routing, permission patterns, or hook configuration
141
- in `settings.json`, that's almost always a global decision wearing local
142
- clothes. The pre-commit hook flags these.
143
-
144
- INSTEAD of dismissing the warning: read the flagged change, decide
145
- local-vs-global, run /promote if global. Warnings are signal, not noise.
146
-
147
- ## Architect Review
148
-
149
- Run /architect-review every 10 commits or before any launch.
@@ -1,37 +0,0 @@
1
- ---
2
- tier: lite
3
- globs: ["**/*.ts", "**/*.tsx", "**/*.json", ".env*", "Dockerfile*", "docker-compose*"]
4
- description: Security scanning — loads when touching source, config, or infra files
5
- ---
6
-
7
- Three-layer security pipeline. All block merge on failure.
8
-
9
- Pipeline order: push → secret scan → lint → typecheck → SAST → dependency audit → test → build → deploy
10
-
11
- Layer 1 — Secret Detection (gitleaks):
12
- Pre-commit hook + CI. Catches API keys, OAuth tokens, AWS creds, private keys.
13
- Never commit .env files, credentials, or API keys.
14
-
15
- Layer 2 — Dependency Vulnerabilities (npm audit):
16
- CI blocks on high-severity CVEs. Uses audit-ci for strict enforcement.
17
-
18
- Layer 3 — SAST (ESLint security plugins + TypeScript compiler):
19
- eslint-plugin-security, @typescript-eslint, eslint-plugin-no-secrets.
20
- Optional: Semgrep for deeper analysis as complexity grows.
21
-
22
- Rules:
23
- - No secrets in code or logs — use environment variables
24
- - Validate all user input at system boundaries
25
- - Use parameterized queries (Prisma handles this)
26
- - OWASP top 10 awareness: XSS, injection, broken auth, SSRF
27
-
28
- Auth matrix (define per project):
29
- - List every route and its required auth level
30
- - Protected routes must check session/token
31
- - Public routes must be explicitly marked as intentionally public
32
- - API routes that modify data require auth — no exceptions
33
-
34
- Tenant isolation (if multi-tenant):
35
- - Every query on tenant-scoped models must include tenant context
36
- - No hardcoded tenant IDs, financial thresholds, or tenant-specific logic
37
- - Tenant context resolved at middleware/boundary, passed through
@@ -1,236 +0,0 @@
1
- ---
2
- tier: lite
3
- globs: ["*"]
4
- description: Session artifacts — chronicle + journal entries at every phase transition and session end
5
- ---
6
-
7
- In ALL configurations (operator-gated, orchestrator-gated, sequential, parallel), these artifacts are mandatory.
8
- They fire regardless of whether /autonomous is active.
9
-
10
- ## Bassclef-side note — telemetry is local-only (bassclef#1205)
11
-
12
- When this rule fires INSIDE bassclef itself (not adopter repos):
13
- chronicles and state markers are written but NOT git-tracked. The paths
14
- `chronicle/` and `state/markers/` are gitignored in bassclef's repo
15
- per bassclef#1205. Iteration telemetry stays on the operator machine
16
- and is destined for bassclef-upstream long-term per memory
17
- `project_bassclef_private_to_bassclef_upstream`.
18
-
19
- INSTEAD of pushing chronicles + markers to bassclef-public: write
20
- them locally for operator continuity, commit only artifacts that
21
- belong in the public substrate (skills, rules, hooks, standards,
22
- ADRs). The brand-team Google Doc push (per the journal step below)
23
- preserves shareable content without coupling bassclef's git history
24
- to specific adopter sessions.
25
-
26
- This applies to bassclef's own repo only; adopter repos keep
27
- chronicles + markers tracked per their own configuration.
28
-
29
- ## Backfill before current (MUST — applies to all artifacts below)
30
-
31
- Before writing ANY session artifact (chronicle, journal entry, release notes):
32
- 1. Check when the last entry was written
33
- 2. Check how many sessions/commits/days are missing since then
34
- 3. If there are gaps: backfill them FIRST, in chronological order (oldest first)
35
- 4. THEN write the current session's artifact
36
-
37
- This prevents out-of-order content in append-only destinations (Google Docs)
38
- and ensures no session is silently skipped.
39
-
40
- ## Chronicle (MUST — every phase transition + session end)
41
-
42
- Before ending any session or completing any phase transition:
43
- 1. Check: when was the last chronicle entry? How many commits since?
44
- 2. If ≥3 commits since last entry: backfill the missing chronicle(s) FIRST
45
- 3. Then write the current session's chronicle
46
- 4. Chronicle location (per `standards/project-directory-layout.md`):
47
- - App repos: `docs/chronicle/`
48
- - Bassclef: `chronicle/` (root level)
49
- - If the directory doesn't exist, create it per the standard.
50
- 5. **Use the bassclef template** — `templates/chronicle-template.md`.
51
- Do NOT invent ad-hoc section structures for "narrative closeouts" or
52
- similar shapes. The /chronicle and /session-end SKILLs both reference
53
- this template; ad-hoc chronicles silently drop the Gate Evidence
54
- section (bassclef#298 root cause).
55
- 6. **Populate the Gate Evidence section** — MUST, not optional. This
56
- is the authoritative input for the 5-session gate-compliance counter.
57
- Auto-populate script is in the template. Skipping it produces the
58
- "0% compliance / no data" failure mode that pre-commit-gate.sh now
59
- blocks mechanically (bassclef#298). Override only if you have an
60
- explicit valid `n/a` reason per `standards/sdlc-compliance.md`
61
- §"Gate skip justifications".
62
- 7. Verify the file exists after writing AND `grep -qiE "^## Gate (E|e)vidence"`
63
- confirms the section is present.
64
-
65
- ## journal entries (SHOULD — session start + every notable decision or handoff)
66
-
67
- ### At session start (SHOULD — backfill before new work)
68
-
69
- Before starting any new work, check for journal entry gaps:
70
- 1. Read the most recent draft in `docs/operator-private/journals/`
71
- 2. Read chronicles since that draft date
72
- 3. If any session produced a notable decision, trade-off, or insight:
73
- backfill drafts NOW, oldest first, push to Google Doc
74
- 4. Then proceed with session work
75
-
76
- This fires at session start, not just session end, because session-end
77
- is where drafts get dropped — the agent runs out of context, the hook
78
- times out, or the session dies. Catching it at the START of the next
79
- session is the safety net.
80
-
81
- ### At session end and handoffs
82
-
83
- At every role handoff, phase transition, or session end, ask:
84
- "Did this session/phase/handoff produce a notable decision, trade-off,
85
- or insight worth sharing?"
86
-
87
- If yes:
88
- 1. Check for gaps: when was the last journal entry? Are there missed
89
- sessions that owed drafts? Backfill those FIRST, oldest to newest.
90
- 2. Create docs/operator-private/journals/ if it doesn't exist
91
- 3. Write draft to docs/operator-private/journals/YYYY-MM-DD.md
92
- 4. Push to Google Doc — push in chronological order (oldest first):
93
- Read the Google Doc ID from `substrate.config.md` field `journal_doc_id`.
94
- If not configured there, check project memory for the doc ID.
95
- If neither exists, skip the push and keep drafts local in docs/operator-private/journals/.
96
- When configured — prefer `--dir` for batch pushes (script sorts by filename):
97
- npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --dir [drafts dir] --doc-id [ID from substrate.config.md]
98
- For single new draft:
99
- npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --file [draft path] --doc-id [ID from substrate.config.md]
100
- To fix out-of-order doc (clear + re-push sorted):
101
- npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --dir [drafts dir] --replace --doc-id [ID from substrate.config.md]
102
- 5. Verify both the local file and Google Doc push succeeded
103
-
104
- High-value moments for journal entries:
105
- - Scope kills (Shaper cutting features)
106
- - Architecture choices (Architect choosing boring tech)
107
- - Process insights (what broke, what worked, what surprised)
108
- - Design pushback (Designer vs PM)
109
- - Quantified results (N agents, M minutes, K artifacts)
110
-
111
- Every draft file MUST include an **audience recommendations table**:
112
-
113
- | Post | Primary audience | Hook strength | Publish priority |
114
- |------|-----------------|--------------|-----------------|
115
-
116
- Target audiences: PE partners, executive search leaders, board-level
117
- operators, CPTOs, technical founders, eng leaders/managers.
118
- Rate hook strength (weak/medium/strong/very strong/strongest).
119
- Recommend a publish sequence with rationale.
120
- Note overlapping posts and recommend which to publish vs hold.
121
-
122
- ## Wiki-as-we-go discipline (SHOULD — at /longrun closeout, per bassclef#1208)
123
-
124
- At every `/longrun closeout`, ask:
125
-
126
- > Did this run produce material surface changes that need a wiki refresh?
127
-
128
- Discriminator list — any YES means wiki-refresh is owed:
129
-
130
- - New, renamed, or retired skill
131
- - New, renamed, or retired hook
132
- - New, renamed, or retired rule
133
- - New, renamed, or retired standard or ADR
134
- - Changes to `/onboard-repo` Phase 2.x discovery surfaces
135
- - New entries in `standards/bassclef-internal-jargon.md` (wordlist amendments)
136
- - New entries in `standards/bassclef-source-consumers.json` (anonymizer registry)
137
-
138
- If yes, either:
139
-
140
- 1. **Add wiki edits to the closeout PR** when the change is small and ships in the same window. Wiki repo is separate; commit + push the wiki-side changes with a cross-ref to the bassclef PR, and note the wiki commit hash in the closeout PR body.
141
- 2. **File a wiki-refresh follow-on ticket** when wiki changes are larger or need separate review. The ticket cites the bassclef PR(s) that introduced the substrate change and the wiki pages that need updating.
142
-
143
- If no, note "no wiki refresh owed" in the closeout chronicle so a future reader sees the question was asked.
144
-
145
- INSTEAD of letting the wiki drift quietly: ask the discriminator question at every closeout. The wiki is the cold-adopter front door; drift there is the most operator-visible failure mode.
146
-
147
- ## Session-rescue + memory-proposal (MUST — abrupt stop safety net)
148
-
149
- When the Stop hook fires with unfinished MUST-tier obligations,
150
- `.claude/hooks/session-end.sh` writes a
151
- `docs/deferred-actions/<ts>-session-rescue.md` entry automatically.
152
- The next session surfaces it as `BLOCKED: deferred-action` via
153
- `60-deferred-actions.sh` and resolves per the entry's Command section.
154
-
155
- ### What the hook checks
156
-
157
- Two signals trigger a rescue write (bassclef #239 hardening, 2026-04-21):
158
-
159
- 1. **Chronicle freshness** — at least one file in `chronicle/` or
160
- `docs/chronicle/` has been written or modified within the last 24
161
- hours. This is **session-relative**, not UTC-calendar-date-relative:
162
- a chronicle dated yesterday written at 23:50 UTC still satisfies
163
- the obligation when the next Stop fires at 00:10 the following day.
164
- 2. **Clean working tree** — `git status --porcelain -u` returns empty,
165
- OR the only uncommitted paths are session-rescue entries the hook
166
- itself wrote on a prior firing (self-output suppression). Real
167
- content (any non-rescue path) still fires rescue.
168
-
169
- Both signals together close the self-amplifying loop that prior
170
- shapes produced (UTC calendar-date check + rescue-entry counting as
171
- uncommitted work → auto-save → Stop → rescue → loop; see
172
- `chronicle/2026-04-21-session-rescue-loop.md`).
173
-
174
- This is additive to the obligations above — chronicle + journal entries
175
- continue to be first-line duties. Rescue is the safety net for cases
176
- where those weren't completed (context exhausted, OS interruption,
177
- sandbox teardown, explicit abort).
178
-
179
- ### Memory proposals from ephemeral sessions
180
-
181
- Mobile and cloud-web sessions cannot write to
182
- `~/.claude/projects/.../memory/` — the operator's real home is
183
- unreachable from the sandbox. When such a session identifies a memory
184
- entry worth adding:
185
-
186
- 1. Copy `templates/memory-proposal-template.md` to
187
- `docs/deferred-actions/<ts>-memory-<topic-slug>.md`
188
- 2. Fill in the target path, proposed frontmatter + body, MEMORY.md
189
- index line
190
- 3. Commit with the session's normal artifact flow
191
-
192
- Next desktop session sees it as `BLOCKED: deferred-action` (requires
193
- `memory-write` capability), reviews, applies verbatim or edits first,
194
- and `git mv`'s to `completed/` per the deferred-actions protocol.
195
-
196
- See `.claude/rules/deferred-actions.md` for the full lifecycle.
197
-
198
- ## Cloud and degraded environments
199
-
200
- In cloud (Claude Code web), CI runners, and fresh clones, the Stop hook
201
- may not fire or may be killed before completing. This is not an excuse
202
- to skip artifacts — it is a reason to be proactive.
203
-
204
- When operating in a cloud or degraded environment:
205
-
206
- 1. **Do not wait for hooks** — invoke /session-end explicitly before ending
207
- the session.
208
-
209
- INSTEAD of assuming the Stop hook will fire: type `/session-end`
210
- yourself when the session is at a natural close. Hooks are unreliable
211
- in cloud / ephemeral / CI environments.
212
- 2. **Must tier first** — write the chronicle and commit locally before
213
- attempting any network operation (push, Google Doc). Network may not
214
- be available or may timeout.
215
- 3. **Journal-entry Google Doc push** — requires a service account key that is
216
- not available in cloud. Write the draft to `docs/operator-private/journals/` and
217
- skip the push step. Note "push pending — service account unavailable"
218
- in the draft frontmatter.
219
- 4. **Stop hook timeout** — if the app repo's `settings.json` has a timeout
220
- on the Stop hook, it MUST be at least 30 seconds (see session-end SKILL.md).
221
- A 5-second timeout will kill `git push` silently.
222
-
223
- INSTEAD of silently accepting a too-short timeout: file a ticket to
224
- fix it. If you discover a timeout shorter than 30s, surface it.
225
- 5. **Graceful degradation order**:
226
- - Chronicle (local, always possible) → commit checkpoint → git push
227
- (may fail) → journal entry local (always possible) → Google Doc push
228
- (may fail in cloud)
229
- - Phase 1 (local artifacts) MUST complete even if Phase 2 (network) fails
230
-
231
- ## This rule exists because
232
-
233
- Agents forget to write session artifacts in long sessions, especially
234
- after context compaction. Putting this in rules/ ensures it loads into
235
- every session at every level. The choreography doc has the full protocol;
236
- this rule is the reminder that fires regardless of mode.
@@ -1,124 +0,0 @@
1
- ---
2
- tier: lite
3
- description: How and when skills declare composes_with (extends another skill) vs depends_on (needs a runtime predecessor) in frontmatter. Closes bassclef#862 Gap 3.
4
- ---
5
-
6
- # Skill composition declarations — `composes_with:` and `depends_on:`
7
-
8
- Two frontmatter fields make skill relationships explicit and machine-checkable. `composes_with:` names skills the current skill builds on. `depends_on:` names what must exist at runtime before the skill can usefully run.
9
-
10
- The substrate-clarity-gate hook reads both fields and catches typos by checking that named targets actually exist on disk. `composes_with:` is strict — a missing target blocks the write. `depends_on:` is advisory in V1.
11
-
12
- ## When this rule fires
13
-
14
- When authoring or editing a skill frontmatter and you need to express:
15
-
16
- - "This skill chains with skill X" → `composes_with:`
17
- - "This skill needs Y to exist or be set first" → `depends_on:`
18
-
19
- Either field is optional. Skills that stand alone need neither.
20
-
21
- ## `composes_with:` — extends another skill's behavior
22
-
23
- Use when the current skill builds on another skill's output, runs another skill as a step, or extends another skill's discipline.
24
-
25
- Format:
26
-
27
- ```yaml
28
- composes_with: [kiss, value-prop]
29
- ```
30
-
31
- Each name must match a `.claude/skills/<name>/SKILL.md` file. The hook BLOCKs the write when a name does not resolve.
32
-
33
- Examples that qualify:
34
-
35
- - `/longrun` composes_with `[temperance, retro, promote, session-end]` — runs these skills at lifecycle points
36
- - `/launch` composes_with `[interpret-input, stage, spec, use-case]` — chains the buildable-plan pipeline
37
- - `/diagnose` composes_with `[temperance]` — fires temperance before diagnostic ceremony
38
-
39
- When `composes_with:` is wrong, the substrate doesn't know the skill maps to a real chain. INSTEAD of listing rough memory of which skills run: list the exact slugs the skill calls.
40
-
41
- ## `depends_on:` — required runtime predecessors
42
-
43
- Use when the skill assumes a predecessor exists at runtime. The predecessor can be a skill, a rule, or a known config block in `.claude/bassclef-configs.jsonc`.
44
-
45
- Format:
46
-
47
- ```yaml
48
- depends_on: [tech_stack, personas]
49
- ```
50
-
51
- V1 enforcement is advisory. The hook warns when a named target does not resolve as a skill, rule, or known config block, but the write passes. V2 may flip to strict once the vocabulary stabilizes.
52
-
53
- Recognized config blocks (V1 list): `tech_stack`, `adopter_defaults`, `plan_tier`, `prose_discipline`, `longrun`, `testing`.
54
-
55
- Examples that qualify:
56
-
57
- - A skill that reads adopter stack metadata depends_on `[tech_stack]`
58
- - A skill that requires persona definitions depends_on `[personas]` (the `/personas` skill must have run)
59
- - A skill that reads adopter overrides depends_on `[adopter_defaults]` (the bassclef-configs block)
60
-
61
- When `depends_on:` is wrong, the skill silently produces empty output instead of telling the operator what is missing. INSTEAD of letting the skill discover its preconditions at runtime: declare them up front.
62
-
63
- ## composes_with vs depends_on — picking one
64
-
65
- | If the relationship is... | Use |
66
- |---|---|
67
- | The current skill runs the other skill as a step | `composes_with:` |
68
- | The current skill extends or chains the other skill's output | `composes_with:` |
69
- | The current skill needs prior session state from another skill | `depends_on:` |
70
- | The current skill reads a config block at runtime | `depends_on:` |
71
- | The current skill assumes a rule is in force | `depends_on:` |
72
-
73
- INSTEAD of listing the same name in both fields: pick the relationship that fires first. A skill that both runs `/value-prop` AND needs `/personas` from a prior session declares `composes_with: [value-prop]` plus `depends_on: [personas]`.
74
-
75
- ## What this rule does NOT cover
76
-
77
- - Source code patterns and design pattern annotations — see `.claude/rules/pattern-annotation.md`
78
- - Frontmatter schema fields other than these two — see `standards/frontmatter-schema.md`
79
- - Adopter onboarding wiring (which adopter-config blocks ship by default) — see `.claude/skills/onboard-repo/SKILL.md`
80
- - Layer 3 traceability manifests that auto-populate from declared values — Phase 4 of bet 2026-06-18a (WU-17/WU-18/WU-19 deferred follow-on)
81
-
82
- ## Mechanical enforcement
83
-
84
- - `composes_with:` value type must be a YAML list of strings. A non-list type or a non-string item BLOCKs the write.
85
- - Each name in `composes_with:` must resolve to `<repo>/.claude/skills/<name>/SKILL.md`. A missing target BLOCKs.
86
- - Each name in `depends_on:` resolves against skills, rules, or known config blocks. A miss emits an ADVISORY notice and passes.
87
- - Substrate root for path resolution is derived from the file being written (everything before `/.claude/`).
88
-
89
- Hook: `.claude/hooks/substrate-clarity-gate.sh` (added in bassclef#862 WU-15).
90
- Tests: `.claude/hooks/tests/substrate-clarity-gate.test.sh` Tests 27–36.
91
-
92
- ## Override
93
-
94
- `SKIP_SUBSTRATE_CLARITY=1 <command>` bypasses the validation and logs the override via trace-helper. INSTEAD of overriding when a target is genuinely missing: file the missing skill first, then add the composes_with entry.
95
-
96
- Override is appropriate when:
97
-
98
- - A migration script edits many skills at once and the target skill ships in the same PR
99
- - Emergency rescue when the hook itself is broken
100
-
101
- ## Composes with
102
-
103
- - `.claude/rules/skill-description-clarity.md` — sister discipline at the frontmatter description surface
104
- - `.claude/rules/state-schema-validation.md` — sister mechanical check at the state-spine surface
105
- - `standards/frontmatter-schema.md` — full frontmatter field catalog
106
-
107
- ## Refs
108
-
109
- - bassclef#862 Gap 3 — declared composition fields
110
- - WU-15 of `docs/iteration-bets/2026-06-18a-public-adopter-leverage-longrun.md` — ships this rule + hook extension
111
- - WU-3 of same bet (bassclef PR #1167) — frontmatter schema validation that recognized these fields
112
- - bassclef#1127 — tech_stack vocabulary; the first recognized config block
113
- - WU-17 / WU-18 / WU-19 (deferred) — Phase 4 manifests that read declared values to build forward/reverse lookups
114
-
115
- ## Sources read
116
-
117
- - `.claude/hooks/substrate-clarity-gate.sh` — current validation passes
118
- - `standards/frontmatter-schema.md` — recognized field catalog
119
- - bassclef#862 issue body — WU-3 + WU-15 framing
120
- - `docs/iteration-bets/2026-06-18a-public-adopter-leverage-longrun.md` — goal doc with WU-15 spec
121
-
122
- ## Retirement condition
123
-
124
- This rule retires when declared composition fields are no longer in the substrate vocabulary. The fields may evolve (Layer 3 manifests may read them differently) but the discipline of declaring relationships at the frontmatter surface persists.