@thebassclef/lite 0.1.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +238 -127
  2. package/dist/cli.js +240 -129
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/dist/lite/.claude/settings.json +212 -0
  8. package/dist/lite/CLAUDE.md +41 -0
  9. package/dist/lite/gitignore +58 -0
  10. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  11. package/dist/lite/whereami.md +24 -0
  12. package/package.json +8 -2
  13. package/substrate/.bassclef/lite-manifest.json +0 -2701
  14. package/substrate/.claude/agents/architect.md +0 -70
  15. package/substrate/.claude/agents/builder.md +0 -114
  16. package/substrate/.claude/agents/designer.md +0 -156
  17. package/substrate/.claude/agents/reviewer.md +0 -88
  18. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +0 -357
  19. package/substrate/.claude/hooks/assert-verify-steering.sh +0 -77
  20. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +0 -215
  21. package/substrate/.claude/hooks/bassclef-sync.sh +0 -634
  22. package/substrate/.claude/hooks/compound-noun-scrub.sh +0 -292
  23. package/substrate/.claude/hooks/kiss-expansion-inject.sh +0 -69
  24. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  25. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -492
  26. package/substrate/.claude/hooks/plain-english-steering.sh +0 -156
  27. package/substrate/.claude/hooks/post-skill-friction-check.sh +0 -177
  28. package/substrate/.claude/hooks/post-skill-telemetry.sh +0 -62
  29. package/substrate/.claude/hooks/pre-build-gate.sh +0 -511
  30. package/substrate/.claude/hooks/pre-commit-gate.sh +0 -451
  31. package/substrate/.claude/hooks/session-end.sh +0 -433
  32. package/substrate/.claude/hooks/session-reflection.sh +0 -303
  33. package/substrate/.claude/hooks/skill-body-grade-gate.sh +0 -219
  34. package/substrate/.claude/hooks/skill-body-intent-drift.sh +0 -107
  35. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  36. package/substrate/.claude/hooks/state-validate.sh +0 -271
  37. package/substrate/.claude/hooks/substrate-clarity-gate.sh +0 -1110
  38. package/substrate/.claude/hooks/temperance-gate.sh +0 -147
  39. package/substrate/.claude/hooks/testing-tier-enforce.sh +0 -233
  40. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +0 -219
  41. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +0 -463
  42. package/substrate/.claude/hooks/vocabulary-migration-check.sh +0 -171
  43. package/substrate/.claude/hooks/whereami-utc-gate.sh +0 -142
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,211 +0,0 @@
1
- ---
2
- tier: lite
3
- description: When the agent presents options the operator must pick from or evaluate, the whole proposal opens with a full pitch (claim + 3 reasons) and each option lands as a tweet (claim +…
4
- ---
5
-
6
- # Plan Enumeration Needs Value-Props
7
-
8
- When the agent presents options the operator must pick from or evaluate,
9
- the whole proposal opens with a full pitch (claim + 3 reasons) and each
10
- option lands as a tweet (claim + sharpener). **Bare names aren't options.**
11
- Names are labels; each label needs a value-prop attached.
12
-
13
- ## Why this rule exists
14
-
15
- Operator scans on mobile + multi-pane desktop. Bare-name enumeration
16
- ("Option A. WU-2", "Option B. #334", "Option C. WU-5") forces the
17
- operator to ask "what's WU-2?" — a follow-up turn that wouldn't be
18
- needed if the value-prop sat next to the name.
19
-
20
- Caught 2026-04-27e during /longrun prep — operator: "you need to land
21
- value props for each scope choice you propose going forward...we
22
- probably need to constrain/hook that in some way."
23
-
24
- The /value-prop skill already provides four compression modes (flash,
25
- tweet, brief, verbose). This rule wires them into how the agent
26
- presents enumerations, so plan output is scannable in one read.
27
-
28
- ## When this rule fires
29
-
30
- Any agent output that enumerates options for the operator — "Pick A or
31
- B," "scope choices for this /longrun," "which approach do you want,"
32
- "three sizes:" — fires this rule.
33
-
34
- Specific surfaces:
35
-
36
- - `/longrun` (prep + checkpoint) — scope choices for the session
37
- - `/sprint` — next-work options
38
- - `/whats-the-plan` — chains of skills the agent intends to run
39
- - `/shape` — tier alternatives (quick / light / medium / full)
40
- - `/kiss` — bucket enumerations (MUST / SHOULD / COULD)
41
- - `/stage` — variant alternatives presented to operator
42
- - Any ad-hoc agent output where the operator picks among options
43
-
44
- Does NOT fire on:
45
-
46
- - Single-action replies (no options to pick from)
47
- - Tool-output relays (commit messages, test output)
48
- - Status reports without choice points (e.g., "shipped X")
49
- - Code content (diffs, file contents)
50
-
51
- ## What the rule requires
52
-
53
- ### The whole proposal opens with a full pitch
54
-
55
- Per `/value-prop` verbose mode: **claim + 3 reasons (why-it-matters)**.
56
-
57
- ```markdown
58
- **The /longrun (full pitch):**
59
-
60
- Make bassclef's roadmap state machine-readable so /sprint and /longrun
61
- stop reconstructing scope from chronicles + git log.
62
-
63
- **Why it matters:**
64
-
65
- 1. First-turn orientation drops from "read three chronicles + git log
66
- + open PRs + guess" to one read.
67
- 2. Two parallel sessions can't double-claim work — atomic claim/release
68
- lands as a primitive.
69
- 3. Operator stops manually clearing rescue files every session.
70
- ```
71
-
72
- Three reasons, plain language, scannable.
73
-
74
- ### Each option lands as a tweet
75
-
76
- Per `/value-prop` tweet mode: **claim + sharpener, ≤280 chars**.
77
-
78
- ```markdown
79
- **Pick one:**
80
-
81
- - **A. WU-2 + WU-3 (~50t)** — Roadmap state becomes machine-readable.
82
- Two parallel sessions can't pick the same work by accident. Claim/
83
- release primitives ship.
84
-
85
- - **B. A + #334 (~70t)** — Plus a save-time check that catches agents
86
- skipping the roadmap. Read-side and write-side determinism in one shot.
87
-
88
- - **C. Through WU-5 (~100t)** — Plus /sprint and /longrun actually use
89
- the new reading. End-to-end this session.
90
- ```
91
-
92
- Each option's value-prop sits next to its name. Operator reads, picks.
93
-
94
- ### Bare names aren't options
95
-
96
- These are NOT acceptable enumeration shapes:
97
-
98
- ```markdown
99
- Pick:
100
- - A
101
- - B
102
- - C
103
- ```
104
-
105
- ```markdown
106
- Pick:
107
- - WU-2
108
- - #334
109
- - WU-5
110
- ```
111
-
112
- ```markdown
113
- Three options: WU-A, WU-B, WU-C.
114
- ```
115
-
116
- Each option needs a value-prop. If the value-prop is so obvious it
117
- doesn't need stating, the option probably isn't worth enumerating.
118
-
119
- ## What the rule allows
120
-
121
- - **Plain language preferred** (composes with `/kiss words` — folds in what was the standalone `/grade10words` skill per bassclef#340).
122
- - **Tables when the options share a comparable axis** — e.g., "Tier / Estimate / Buys you" — but each row still needs the value-prop column populated.
123
- - **Skipping the full pitch when the options are presented in passing** — e.g., "Want me to ship A, B, or C?" mid-conversation. The full pitch is for proposal moments; the tweet-per-option discipline still applies.
124
- - **Inline alternatives** — "I'll ship X (or Y if you'd rather; Y trades speed for safety)" is fine; the alternative carries its sharpener inline.
125
-
126
- ## Anti-patterns
127
-
128
- Direct quotes from sessions where this rule was missing:
129
-
130
- - "Pick one: A, B, or C" — three letters, no content
131
- - "WU-2 + WU-3 (~50t)" alone in a list — bare cost without value
132
- - "We could do this or that" without naming what each buys
133
- - "Three sizes — pick by how much determinism you want" without saying which size buys what
134
-
135
- ## How the rule composes with existing skills
136
-
137
- - `/value-prop` is the primitive — flash/tweet/brief/verbose modes the
138
- rule references directly.
139
-
140
- INSTEAD of reinventing the format inline: call the skill. The four
141
- compression modes already exist; reuse them.
142
- - `/kiss words` (bassclef#340 folded the planned `/grade10words` into `/kiss`) — substitutes plain language for jargon. Composes orthogonally; an option's tweet should already be in plain language by default.
143
- - `/feynman` — explanation skill. NOT a substitute for tweet-per-
144
- option; /feynman is for "explain this concept," not "present these
145
- choices."
146
-
147
- ## Verification cue (self-check before output)
148
-
149
- Before presenting an enumeration, ask:
150
-
151
- 1. Did I open with a claim + 3 reasons (full pitch)?
152
- 2. Does each option carry a tweet (claim + sharpener)?
153
- 3. Are any options just labels / IDs / bare names?
154
- 4. Plain language? Or am I using "atomic" / "load-bearing" / "blast radius" without justifying?
155
-
156
- If any answer is wrong, rewrite before posting.
157
-
158
- ## Eat-our-own-dogfood
159
-
160
- Every PR body that ships a bassclef-evolution change uses this format
161
- when it presents alternatives ("Out of scope," "Acceptance," "Test
162
- plan"). Each line earns its place; bare bullet enumerations get
163
- upgraded to tweets.
164
-
165
- Iteration-goal docs follow the same discipline in their "Steps
166
- enumerated" section.
167
-
168
- ## Relationship to other rules
169
-
170
- - `feedback_lead_with_flash.md` (memory) — the operator-feedback
171
- precedent; this rule codifies it as substrate
172
- - `visual-hierarchy.md` — long agent output uses tables/headers/HRs;
173
- this rule adds the value-prop content discipline that makes the
174
- hierarchy useful
175
- - `artifact-ingestion.md` — "Sources read" block discipline; this rule
176
- is the analogous "options presented" discipline
177
- - `commit-conventions.md` — commit message format; this rule applies
178
- to PR bodies, agent dialogue, and skill outputs (not commits — those
179
- have their own format)
180
- - `sdlc-gates.md` — methodology-level gates; this rule fires before
181
- any plan-presentation moment
182
-
183
- ## Enforcement
184
-
185
- Methodology-level. The rule loads into every session via
186
- `additionalDirectories`. Agents self-check before posting an enumeration.
187
-
188
- If post-observation shows agents repeatedly presenting bare-name
189
- enumerations, a future hook could grep agent output for option-list
190
- shapes and BLOCK if value-prop content is missing — but the first line
191
- of defense is the rule loading into every session.
192
-
193
- ## Override path
194
-
195
- `SKIP_PLAN_ENUMERATION_RULE=1 <command>` — logged to trace per existing
196
- bassclef hook idiom. Use only when the enumeration is genuinely
197
- stylistic / casual ("want coffee or tea?") and the value-prop discipline
198
- would be ceremony.
199
-
200
- INSTEAD of using the override for production decisions: write the
201
- value-prop. Production scope choices always carry weight worth
202
- articulating.
203
-
204
- ## Retirement condition
205
-
206
- If observed across 6 months with zero operator corrections of
207
- enumeration formatting, this rule is correctly calibrated. If the
208
- operator stops asking "what does X buy me?" entirely, the rule has
209
- done its job.
210
-
211
- Closes bassclef#339.
@@ -1,317 +0,0 @@
1
- ---
2
- tier: lite
3
- description: Every PR body opens with a ## Problem section drafted by /state-a-problem brief + --- + ## Goal.
4
- ---
5
-
6
- # PR Body Shape Contract
7
-
8
- Every PR body opens with a `## Problem` section drafted by `/state-a-problem brief` + `---` + `## Goal`. Detail comes AFTER. Operators and reviewers scan on mobile and multi-pane desktop. Without a problem-grounded opener, readers re-derive the reason for the PR every time. The skill is the contract. Hand-rolling reproduces the failure pattern bet 25k closed (see `docs/iteration-bets/2026-06-25k-discipline-visibility-and-pr-body-scrub-fix.md` § WU-1 L66 diagnosis).
9
-
10
- This rule closes two gaps:
11
-
12
- - **Mechanical.** Bassclef enforces what NOT to include in PR bodies (jargon BLOCK list + operator-private paths + strategic framing via `pr-body-scrub-check.sh`). No prior contract said what MUST appear at the opener.
13
- - **Methodology.** The prior Flash + Tweet pair (bassclef#906) was solution-framed twice — neither stated user pain. bassclef#1178 retires the pair at PR + issue surfaces and replaces both with a single `## Problem` section that centers user pain before solution.
14
-
15
- Sister to `.claude/rules/github-issue-flash-tweet.md` at the issue surface.
16
-
17
- ## Why this rule exists
18
-
19
- `/diagnose` on 2026-06-10 surfaced two root causes for PR body drift:
20
-
21
- - **Root cause A** — no PR body shape contract. Authors improvised the first section name ("Goal", "What this PR ships", "What this PR delivers"). Sample drift across 12 recent PRs: 5 with explicit `## Goal`; 7 in other shapes.
22
- - **Root cause B** — the `/kiss` substitution table and the PR-body-scrub hook JARGON_TERMS list used different word sets. Closed by bassclef#907 (single source of truth in `standards/bassclef-internal-jargon.md`).
23
-
24
- V1 of this rule (bassclef#906) addressed Root cause A with Flash + Tweet + Goal. Operator observation on 2026-06-18 surfaced the gap. Flash and Tweet were both solution-framed. Neither stated user pain. Three UX research frameworks (NN/g, UX Design Institute, OpinionX) converge on a stable problem statement template (Who / What / When / Why-now / Outcome). bassclef#1178 retires Flash + Tweet at PR + issue surfaces and replaces both with a single `## Problem` section drafted by `/state-a-problem brief`.
25
-
26
- The shape contract still does what V1 did — gives readers a clean entry. The entry is now grounded in the problem, not in the solution claim.
27
-
28
- ## Format contract
29
-
30
- Every PR body MUST open with:
31
-
32
- ```markdown
33
- **Problem (≤500 chars):** <Who + What + When + Why now + Outcome — framework implicit; drafted by /state-a-problem brief>
34
-
35
- ---
36
-
37
- ## Goal
38
-
39
- <What this PR ships, in one paragraph. Why now.>
40
-
41
- ## Evidence
42
-
43
- - Source: <file path, ticket number, commit SHA — what backs the claim>
44
- - Warrant: <one sentence tying the source to the claim>
45
- ```
46
-
47
- Format rules:
48
-
49
- - **Problem label is bold and enclosed in `**`** — a visual scan handle, not body prose
50
- - **Length limit enforced** — Problem ≤500 chars (matches `/state-a-problem brief` mode cap)
51
- - **Plain language** — no bassclef jargon in the Problem section. The Problem section is the FIRST place a reader meets the work. Jargon here destroys orientation. `/state-a-problem` runs `/kiss --grade10` inline by default so the rule is hard to violate
52
- - **Horizontal rule** (`---`) separates Problem from the structured body
53
- - **`## Goal` is the first section after the rule** — not `## Summary`, not `## What this PR ships`, not `## Why this matters`. Goal is the agreed label
54
- - **`## Evidence` follows Goal** — cites the source that backs the claim in Goal. Per `.claude/rules/assert-only-after-verify.md` — every operator-facing assertion carries source + warrant. Per `standards/opener-discipline.md` — the three-block opener extends to PR body via Problem + Goal + Evidence
55
- - **One paragraph per** — Problem is 3-4 sentences; Goal is one paragraph; Evidence is one bullet source + one bullet warrant
56
-
57
- ## Required sections (in order)
58
-
59
- After Problem + `---`:
60
-
61
- | Section | Required? | Purpose |
62
- |---|---|---|
63
- | `## Goal` | **MUST** | One paragraph. What this PR ships. Why now |
64
- | `## Evidence` | **MUST** | Source + warrant per `.claude/rules/assert-only-after-verify.md`. Cites what backs the Goal claim |
65
- | `## Summary` | MUST when scope >1 file | Bullet list of substantive changes |
66
- | `## Test plan` | MUST | Checklist of how reviewer verifies |
67
- | `## Out of scope` | SHOULD | What this PR explicitly does NOT do |
68
- | `## /temperance + /luminary + /loop discipline` | **MUST under /longrun dispatch** | The three-skill cycle this PR ran (see below) |
69
- | `## Refs` | SHOULD | Issue numbers, related PRs, source chronicles |
70
-
71
- Other sections (Bundle justification, Inventory findings, Migration notes) appear between Goal and Test plan as needed. Drop sections that do not apply (e.g., Out of scope on a doc-only PR).
72
-
73
- ## /temperance + /luminary + /loop discipline section (per bassclef-upstream#366)
74
-
75
- Every PR authored under `/longrun` dispatch MUST carry a section with the literal header `## /temperance + /luminary + /loop discipline`. The section makes the per-PR cycle named in `.claude/rules/loop-discipline.md` visible at PR review time.
76
-
77
- The header string is fixed and case-sensitive. The hook `pr-body-loop-discipline-check.sh` greps for it exactly. The section body names three things, one per bullet:
78
-
79
- - **/temperance** fired at `<surface>`. Scope decision answer in one line. Drift trigger in one line.
80
- - **/luminary** primary lens `<luminary-slug>` — one line on what the lens caught. Supporting lenses optional.
81
- - **/loop** iteration count `<N>`. Outcome — RED then GREEN, OR rework cycle if any.
82
-
83
- The fixed shape lets the grep check pass cleanly. It also gives readers a scannable three-line surface to verify discipline at PR review.
84
-
85
- Why this section exists: bets 25h + 25i + 25j ran the discipline floor. Markers landed under `state/markers/temperance/`, `state/markers/luminary/`, and `state/markers/loop/` per branch. But the PR bodies stayed silent. The operator caught the gap mid-goal 25j: "I'm not seeing /luminary listed for PR review and /loop iteration through to closure." The mechanical floor was correct. The visible bar was missing. This section closes the bar the moment a reader scans the PR.
86
-
87
- Forward-only enforcement. Already-merged PRs stay as is. Trivial-fix PRs under 3 files MAY skip the section per the Problem-section exception below.
88
-
89
- ## What NOT to do
90
-
91
- - **Don't open with a section header** before Problem. INSTEAD: Problem is the headline. Section headers come after the `---` rule.
92
- - **Don't fall back to Flash + Tweet** — the V1 shape was solution-framed twice; neither stated user pain. INSTEAD: draft the Problem section via `/state-a-problem brief` mode. The skill produces the contract. The Who/What/When/Why-now/Outcome framework is implicit in the sentence shape it returns.
93
- - **Don't replace `## Goal` with synonyms.** INSTEAD: `## Goal` is the bassclef first section label after Problem. Reviewers and substrate-coherence checks grep for it.
94
- - **Don't bury the claim in `## Why this is needed` or `## Context` before Goal.** INSTEAD: the claim is the Problem + Goal pair. Context goes after.
95
- - **Don't use bassclef jargon in Problem or Goal.** INSTEAD: substitute plain English per `.claude/rules/plain-english-discipline.md` and `standards/bassclef-internal-jargon.md`. `/state-a-problem` runs `/kiss --grade10` inline by default. Hand-rolled drafts run `/kiss --grade10` separately before push.
96
-
97
- ## Trivial-fix exception
98
-
99
- PRs with scope under 3 files AND no new SKILL.md AND no new rule MAY skip the Problem section. Trivial fixes (typo, env-var, off-by-one, one-line) often have no user-pain framing worth a section. The shape contract still requires `## Goal` as the opener in that case.
100
-
101
- The CI shape check skips the Problem requirement when the touched-file count is under 3 AND no SKILL.md or rule file is in the change.
102
-
103
- ## Ticket-close keyword discipline (bassclef#974)
104
-
105
- When PR title carries `feat(#NNN):` or `fix(#NNN):` pattern, the body MUST include a `Closes #NNN` (or `Fixes #NNN` / `Resolves #NNN`) keyword. GitHub auto-closes tickets only when the closing keyword appears in the PR body — title alone does not trigger the close. Without the keyword, tickets stay open even after PRs merge, and the state-spine drifts from shipping reality.
106
-
107
- Per whereami#28b diagnose — of the last 20 merged PRs at 2026-07-29, only 4 carried a closing keyword in the body. 16 shipped work but left the ticket open (including #934 and #935 which required manual backfill during Session 28b).
108
-
109
- The `Refs` section is a good home for the keyword. Example:
110
-
111
- ```markdown
112
- ## Refs
113
-
114
- - Closes bassclef#123 (parent ticket — this PR ships the acceptance)
115
- - Refs bassclef#456 (related context — not closed by this PR)
116
- ```
117
-
118
- Use `Refs` for context-only tickets that survive this PR. Use `Closes` / `Fixes` / `Resolves` for tickets whose acceptance criteria this PR satisfies fully.
119
-
120
- When a PR intentionally does NOT close its referenced ticket — for example, when the title cites a parent umbrella ticket but only ships one step — use `Refs #NNN` in the body and add a line explaining scope. Do NOT drop the closing keyword silently; document the choice.
121
-
122
- **Mechanical layer.** `pr-body-scrub-check.sh` Rule 7 fires as ADVISORY in V1. Reads `$PR_TITLE` env var passed by `pre-gh-pr-body-scrub.sh` wrapper. Extracts `feat|fix(#NNN)` pattern from title. Checks body for `(Closes|Fixes|Resolves)\s+#NNN`. Emits stderr note when missing. Exit 0 (does not block). Advisory in V1 while adopters get used to the discipline; may flip to blocking after calibration.
123
-
124
- ## Vocabulary discipline at authoring time (bassclef#915)
125
-
126
- Per bassclef#915 V1: PR body authoring is a `/kiss` surface. Before invoking `gh pr create` (or `gh pr edit --body-file`), the agent runs `/kiss` words discipline against the body. It substitutes BLOCK and ADVISE-PHRASE terms from `standards/bassclef-internal-jargon.md`.
127
-
128
- - **BLOCK terms** — substitute per `/kiss --grade10` table; PR-body-scrub Rule 1 catches what slips
129
- - **ADVISE terms** — substitute per `/kiss --grade10` table; PR-body-scrub does not block on these
130
- - **ADVISE-PHRASE terms** — substitute or rephrase; PR-body-scrub Rule 5 emits advisory CI annotations on hits (does not block)
131
- - **ALLOW terms** (reserved per bassclef#763 — substrate, bassclef, cameo, Studio, Band, bandleader) — preserve
132
-
133
- V2 pre-push hook for `/kiss`-on-PR-body authoring ships per bassclef#1176 (PR #1179 merged 2026-06-18). Local PreToolUse Bash hook scrubs PR body before `gh pr create` reaches GitHub.
134
-
135
- ## When this rule fires
136
-
137
- Every NEW PR body authored via:
138
-
139
- - `gh pr create` — local PreToolUse hook fires (bassclef#1176); CI hook fires as backstop (bassclef#739)
140
- - `gh pr edit` (body rewrite) — same shape contract applies
141
- - Manual operator authoring via GitHub web UI — `.github/pull_request_template.md` auto-fills the shape; operator amends
142
-
143
- Existing PRs are NOT retroactively backfilled. Forward-only enforcement keeps the discipline visible at the PR-creation surface where it lands.
144
-
145
- ## Mechanical enforcement
146
-
147
- V1 shipped methodology + `.github/pull_request_template.md` template + the rule (bassclef#906). V2 shipped local + CI Bash-matcher hooks for jargon scrub (bassclef#1176 + bassclef#1177). V3 (this bassclef#1178 amendment) ships:
148
-
149
- - Shape contract enforces `## Problem` opener at feature-scope PRs
150
- - `pr-body-scrub-check.sh` extended with a shape check that flags a missing `## Problem` section on feature-scope PRs
151
- - `/state-a-problem brief` skill drafts the section (runs `/kiss --grade10` inline by default)
152
- - `.github/pull_request_template.md` template updated to show the Problem-section shape
153
-
154
- V4 (bassclef#974) ships Rule 7 — ticket-close keyword advisory. Local + CI hook layers extended:
155
-
156
- - `pre-gh-pr-body-scrub.sh` extracts PR title, passes as `$PR_TITLE` env var
157
- - `pr-body-scrub-check.sh` Rule 7 checks title-vs-body correlation for closing keyword
158
- - 4 new Tier 0 tests pin behavior (Tests 27-30 in `.claude/hooks/tests/pre-gh-pr-body-scrub.test.sh`)
159
- - Advisory in V1; V2 may flip to BLOCK after calibration
160
-
161
- ## Override path
162
-
163
- `SKIP_PR_BODY_SHAPE=1 <command>` — for genuinely-not-PR-body cases (e.g., release-tag PRs, automated bot PRs, dependabot updates where the bot controls the body format). Logged via trace-helper.
164
-
165
- INSTEAD of overriding for tight scope: write the Problem section. Three sentences carrying the framework cost less than reviewer re-derivation.
166
-
167
- ## Worked examples
168
-
169
- ### Anti-pattern (Root cause A — what NOT to do)
170
-
171
- ```markdown
172
- ## Summary
173
-
174
- Add `/longrun` skill for autonomous long-running sessions...
175
-
176
- ## Why this is needed
177
-
178
- Recurring pattern observed over March-April 2026 sessions...
179
- ```
180
-
181
- Reviewer reads title → "Summary" header → 3 paragraphs to find the claim. Claim is buried. User pain stays unstated.
182
-
183
- ### Anti-pattern (V1 Flash + Tweet — superseded by bassclef#1178)
184
-
185
- ```markdown
186
- **Flash (≤180 chars):** Add `/longrun` skill — autonomous sessions paced by checkpoints and closeout discipline.
187
-
188
- **Tweet (≤280 chars):** Sessions over 50 turns drift without checkpoints. `/longrun` adds prep / checkpoint / closeout modes.
189
- ```
190
-
191
- Better than no shape. But solution-framed twice. Reader still does not know WHY this work exists — only WHAT it does.
192
-
193
- ### Conformant pattern (bassclef#1178 — Problem opener)
194
-
195
- ```markdown
196
- **Problem (≤500 chars):** Today autonomous sessions over 50 turns drift without structured checkpoints — operators return mid-session to mid-stream context, no anchor on what shipped, what's blocked, or what's next. The /longrun skill adds prep / checkpoint / closeout modes that pace the session against named phase boundaries. The change we want is sessions over 50 turns that return clean state every time, not a context-archaeology task on every wake.
197
-
198
- ---
199
-
200
- ## Goal
201
-
202
- Ship `/longrun` skill so autonomous sessions running >50 turns or across compaction boundaries have substrate-enforced pacing.
203
-
204
- ## Summary
205
-
206
- - New `.claude/skills/longrun/SKILL.md` with three modes
207
- - ...
208
- ```
209
-
210
- Reviewer gets user pain → solution → diff in 60 seconds. Detail follows for those who want depth.
211
-
212
- ## Composes with
213
-
214
- - `.claude/skills/state-a-problem/SKILL.md` — drafts the Problem section in brief mode (≤500 chars); runs `/kiss --grade10` inline by default
215
- - `.claude/rules/github-issue-flash-tweet.md` (bassclef#484 — amended by bassclef#1178) — sister rule at issue-body surface
216
- - `.claude/rules/plain-english-discipline.md` (bassclef#790) — plain language requirement for Problem and Goal
217
- - `standards/pr-body-discipline.md` (bassclef#787) — scrub discipline at same surface
218
- - `.claude/rules/operator-facing-prose.md` (bassclef#790) — operator-facing prose discipline
219
- - `.claude/hooks/pr-body-scrub-check.sh` — sibling mechanical surface (CI hook); extended in bassclef#1178 with shape check
220
- - `.claude/hooks/pre-gh-pr-body-scrub.sh` — local pre-push hook (bassclef#1176)
221
- - `.github/pull_request_template.md` — auto-fill at PR-creation surface; updated for the Problem shape
222
- - bassclef#915 — phrase-shaped advisory perimeter (sister at vocabulary surface)
223
- - bassclef#907 — `/kiss` overhaul (single source of truth wordlist)
224
-
225
- ## Distinct from
226
-
227
- - `commit-conventions.md` — commit messages have a separate format; this rule applies to PR BODIES, not commits
228
- - `iteration-bet-brief-completeness.md` — that's about delegation briefs (handoff content); this is about the PR-creation surface
229
- - `pattern-annotation.md` — that's source-code annotation discipline; orthogonal
230
-
231
- ## Sources read
232
-
233
- - bassclef#906 — V1 parent ticket (Flash + Tweet + Goal shape; superseded at the opener)
234
- - bassclef#1178 — V3 amendment (Problem section + `/state-a-problem` skill)
235
- - bassclef#484 (`.claude/rules/github-issue-flash-tweet.md`) — sister discipline at issue surface
236
- - bassclef#787 (`standards/pr-body-discipline.md`) — sister discipline at scrub surface
237
- - bassclef#907 — `/kiss` overhaul (closes Root cause B)
238
- - bassclef#915 — phrase-shaped advisory perimeter
239
- - bassclef#1176 — V2 local PR-body scrub hook (PR #1179 merged 2026-06-18)
240
- - bassclef#1177 — V2 extends to gh issue + commit messages (PR #1180 merged 2026-06-18)
241
- - 2026-06-10 chronicle — V1 /diagnose finding
242
- - 2026-06-18 chronicle `chronicle/2026-06-18-v2-issue-and-commit-scrub.md` — V3 operator observation
243
- - NN/g, UX Design Institute, OpinionX problem-statement frameworks — the templates `/state-a-problem` synthesizes
244
-
245
- ## Closes
246
-
247
- - V1 of bassclef#906 — Flash + Tweet + Goal shape
248
- - V2 of bassclef#906 — local + CI scrub at the opener (bassclef#1176 + bassclef#1177)
249
- - V3 of bassclef#906 — Problem section opener replacing Flash + Tweet (bassclef#1178 — this amendment)
250
-
251
- ## Section-level DON'T / INSTEAD catalog (bassclef#1241)
252
-
253
- The catalog rows below encode authoring-time discipline per section. The wordlist scrub hook is the FLOOR. This catalog is the BAR. Apply the per-section catalog before the body ships rather than relying on the hook to catch what slipped past you.
254
-
255
- The catalog was drafted from two PR-authoring failures on 2026-06-19 (one wordlist-bypass via curl, one wordlist-as-bar drift). See bassclef#1241 for the source incidents.
256
-
257
- ### Problem section
258
-
259
- Composes with `/state-a-problem brief`. Catalog rows below apply per-sentence inside the Problem block.
260
-
261
- | Don't | INSTEAD |
262
- |---|---|
263
- | Name script line numbers for internal mechanics ("L17 structural --execute gate") | Name the user-visible behavior ("the --execute flag is what makes it run") |
264
- | Third-person self-reference ("the operator can...", "the agent has no...") | Address the operator directly ("you can...", "I do not know your...") |
265
- | Bassclef-invented compounds (`discovery surface`, `registry shape`, `local-only discipline`, `Pattern-B'd`, `wiki-as-we-go discipline`, `source-of-truth`, `narrative moment`) | Plain restatement of what the compound names ("the screens the operator sees", "the file structure", "this rule that keeps chronicles local", "moved", "this rule that says check the wiki at every closeout", "the authoritative answer", "story worth telling") |
266
- | Buzz adjectives (`substantive`, `comprehensive`, `robust`, `leverage`) | Concrete data ("25-line block", "13/13 tests pass") |
267
- | Bassclef-internal nouns without gloss (`deferred-action`, `INFORM`, `Pattern B`) at first mention | First-mention gloss ("deferred-action file (the next session sees it as a TODO)") |
268
- | Nested parentheticals (`X (which is Y (per Z))`) | Split into separate sentences |
269
-
270
- ### Goal section
271
-
272
- | Don't | INSTEAD |
273
- |---|---|
274
- | Methodology references the reader doesn't carry ("Phase 14 of the chain") | Name what ships and why now |
275
- | Multi-clause noun-piles ("substantive N-line block documenting A, B, C, D, and E") | Split into a bullet list |
276
- | Quote the rule's title as if it were the goal ("Apply bassclef#790 Rule 2 meta-discipline") | Name what the operator sees after merge ("/longrun's skill body reads in plain English") |
277
-
278
- ### Summary section
279
-
280
- | Don't | INSTEAD |
281
- |---|---|
282
- | Invented compound verbs (`Pattern-B'd`, `scrubbed-and-shipped`) | Plain English ("moved to completed/", "rewrote and pushed") |
283
- | Code-fenced literals used as if prose (`` `_comment` replaced with substantive block ``) | Plain restatement ("Added a 25-line comment header that documents...") |
284
- | Restate the goal doc verbatim | Pick the 3-5 changes that matter to a reviewer |
285
-
286
- ### Test plan section
287
-
288
- | Don't | INSTEAD |
289
- |---|---|
290
- | Assertions in bassclef-internal idiom ("Deferred-action surfaces at next session-start as INFORM") | Observable behavior ("Next session-start banner shows this under 'Info' (not 'Blocked')") |
291
- | Tense the reviewer can't verify without running ("hook fires clean") | What the reviewer can grep / run (`jq .pseudonyms[].pseudonym` returns `Falcon`) |
292
-
293
- ### Out of scope section
294
-
295
- | Don't | INSTEAD |
296
- |---|---|
297
- | Third-person reference ("the agent cannot author...") | Direct ("I can't author entries — only you know your codenames") |
298
- | Defer-and-justify in the same line | Split: "X — not in this PR. Y — already tracked at #N" |
299
-
300
- ### Refs section
301
-
302
- | Don't | INSTEAD |
303
- |---|---|
304
- | Long bassclef-internal qualifiers in parentheses | One-line ref per line, plain |
305
-
306
- ### Section-cross-cutting rules
307
-
308
- | Don't | INSTEAD |
309
- |---|---|
310
- | Repeat literal filenames in title and body Summary together | Plain title; filenames in body where they're grep-anchored |
311
- | Mix `skillname` and `/skillname` for the same skill | Use `/skillname` consistently when referencing the skill; plain filename when referencing the file |
312
- | Use bassclef-internal verbs (`flip`, `Pattern-B'd`, `seed` as noun) | Plain verbs (`update`, `move`, `set up`) |
313
- | Drop session-invented shorthand (`Bucket 2a`, `Path B`, `S2`, `Option F`, `LR-1`) without an appositive on first mention per section | Gloss inline: `Bucket 2a (audit files with no tier tag at all)`; `S2 (Session 2 — Traceability Phase 1)`; per `.claude/rules/operator-facing-prose.md` Rule 1 extended per bassclef-upstream#1267 |
314
-
315
- ## Retirement condition
316
-
317
- If observed across 6 months with zero operator-flagged shape drift on the Problem section, this rule is correctly calibrated. If `## Problem` first-section drift returns above 10% of sampled feature-scope PRs, the V3 CI shape check escalates from advisory to blocking. The catalog rows ship without an a-priori retirement condition — they encode discipline that survives any future skill or hook build.