@thebassclef/lite 0.0.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +85 -4
  3. package/dist/cli.cjs +1612 -0
  4. package/dist/cli.js +1589 -0
  5. package/dist/index.cjs +4 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +4 -0
  8. package/package.json +51 -3
  9. package/substrate/.bassclef/lite-manifest.json +2701 -0
  10. package/substrate/.claude/agents/architect.md +70 -0
  11. package/substrate/.claude/agents/builder.md +114 -0
  12. package/substrate/.claude/agents/designer.md +156 -0
  13. package/substrate/.claude/agents/reviewer.md +88 -0
  14. package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
  15. package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
  16. package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
  17. package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
  18. package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
  19. package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
  20. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  21. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
  22. package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
  23. package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
  24. package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
  25. package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
  26. package/substrate/.claude/hooks/pre-commit-gate.sh +451 -0
  27. package/substrate/.claude/hooks/session-end.sh +433 -0
  28. package/substrate/.claude/hooks/session-reflection.sh +303 -0
  29. package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
  30. package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
  31. package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
  32. package/substrate/.claude/hooks/state-validate.sh +271 -0
  33. package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
  34. package/substrate/.claude/hooks/temperance-gate.sh +147 -0
  35. package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
  36. package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
  37. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +463 -0
  38. package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
  39. package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
  40. package/substrate/.claude/luminaries/alan-cooper.md +170 -0
  41. package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
  42. package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
  43. package/substrate/.claude/luminaries/ash-maurya.md +121 -0
  44. package/substrate/.claude/luminaries/bill-buxton.md +210 -0
  45. package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
  46. package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
  47. package/substrate/.claude/luminaries/don-norman.md +173 -0
  48. package/substrate/.claude/luminaries/edward-tufte.md +179 -0
  49. package/substrate/.claude/luminaries/eric-evans.md +160 -0
  50. package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
  51. package/substrate/.claude/luminaries/gang-of-four.md +157 -0
  52. package/substrate/.claude/luminaries/glenford-myers.md +230 -0
  53. package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
  54. package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
  55. package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
  56. package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
  57. package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
  58. package/substrate/.claude/luminaries/karl-popper.md +132 -0
  59. package/substrate/.claude/luminaries/kent-beck.md +168 -0
  60. package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
  61. package/substrate/.claude/luminaries/martin-fowler.md +164 -0
  62. package/substrate/.claude/luminaries/michael-feathers.md +125 -0
  63. package/substrate/.claude/luminaries/michael-nygard.md +118 -0
  64. package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
  65. package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
  66. package/substrate/.claude/luminaries/sophia-prater.md +193 -0
  67. package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
  68. package/substrate/.claude/luminaries/tony-hoare.md +170 -0
  69. package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
  70. package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
  71. package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
  72. package/substrate/.claude/rules/adr-discipline.md +120 -0
  73. package/substrate/.claude/rules/api-conventions.md +125 -0
  74. package/substrate/.claude/rules/artifact-ingestion.md +179 -0
  75. package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
  76. package/substrate/.claude/rules/blocked-items.md +146 -0
  77. package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
  78. package/substrate/.claude/rules/branching.md +28 -0
  79. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
  80. package/substrate/.claude/rules/commit-conventions.md +22 -0
  81. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
  82. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
  83. package/substrate/.claude/rules/context-engineering.md +202 -0
  84. package/substrate/.claude/rules/context-management.md +85 -0
  85. package/substrate/.claude/rules/defensive-bash.md +68 -0
  86. package/substrate/.claude/rules/deferred-actions.md +233 -0
  87. package/substrate/.claude/rules/destructive-operations.md +69 -0
  88. package/substrate/.claude/rules/diagnosis.md +38 -0
  89. package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
  90. package/substrate/.claude/rules/guardrails.md +73 -0
  91. package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
  92. package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
  93. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
  94. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
  95. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
  96. package/substrate/.claude/rules/loop-discipline.md +81 -0
  97. package/substrate/.claude/rules/manual-prod-approval.md +100 -0
  98. package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
  99. package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
  100. package/substrate/.claude/rules/new-dependency-check.md +51 -0
  101. package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
  102. package/substrate/.claude/rules/operator-facing-prose.md +196 -0
  103. package/substrate/.claude/rules/option-label-discipline.md +108 -0
  104. package/substrate/.claude/rules/pattern-annotation.md +100 -0
  105. package/substrate/.claude/rules/plain-english-discipline.md +156 -0
  106. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
  107. package/substrate/.claude/rules/pr-body-shape.md +317 -0
  108. package/substrate/.claude/rules/pr-strategy.md +167 -0
  109. package/substrate/.claude/rules/pr-title-shape.md +161 -0
  110. package/substrate/.claude/rules/prototype-workflow.md +65 -0
  111. package/substrate/.claude/rules/reserved-skill-names.md +123 -0
  112. package/substrate/.claude/rules/schema-management.md +49 -0
  113. package/substrate/.claude/rules/sdlc-gates.md +149 -0
  114. package/substrate/.claude/rules/security.md +37 -0
  115. package/substrate/.claude/rules/session-artifacts.md +236 -0
  116. package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
  117. package/substrate/.claude/rules/skill-description-clarity.md +247 -0
  118. package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
  119. package/substrate/.claude/rules/state-schema-validation.md +162 -0
  120. package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
  121. package/substrate/.claude/rules/substrate-config-schema.md +98 -0
  122. package/substrate/.claude/rules/test-list-discipline.md +175 -0
  123. package/substrate/.claude/rules/test-sufficiency.md +210 -0
  124. package/substrate/.claude/rules/testing-tier-config.md +145 -0
  125. package/substrate/.claude/rules/testing.md +38 -0
  126. package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
  127. package/substrate/.claude/rules/visual-hierarchy.md +437 -0
  128. package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
  129. package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
  130. package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
  131. package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
  132. package/substrate/.claude/skills/build/SKILL.md +640 -0
  133. package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
  134. package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
  135. package/substrate/.claude/skills/decompose/SKILL.md +280 -0
  136. package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
  137. package/substrate/.claude/skills/feynman/SKILL.md +90 -0
  138. package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
  139. package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
  140. package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
  141. package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
  142. package/substrate/.claude/skills/journal/SKILL.md +209 -0
  143. package/substrate/.claude/skills/kiss/SKILL.md +449 -0
  144. package/substrate/.claude/skills/launch/SKILL.md +915 -0
  145. package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
  146. package/substrate/.claude/skills/longrun/SKILL.md +463 -0
  147. package/substrate/.claude/skills/luminary/SKILL.md +481 -0
  148. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  149. package/substrate/.claude/skills/onboard-repo/SKILL.md +1624 -0
  150. package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
  151. package/substrate/.claude/skills/personas/SKILL.md +207 -0
  152. package/substrate/.claude/skills/promote/SKILL.md +283 -0
  153. package/substrate/.claude/skills/requirement/SKILL.md +98 -0
  154. package/substrate/.claude/skills/retro/SKILL.md +117 -0
  155. package/substrate/.claude/skills/riff/SKILL.md +114 -0
  156. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  157. package/substrate/.claude/skills/session-end/SKILL.md +309 -0
  158. package/substrate/.claude/skills/session-log/SKILL.md +299 -0
  159. package/substrate/.claude/skills/skills/SKILL.md +228 -0
  160. package/substrate/.claude/skills/spec/SKILL.md +105 -0
  161. package/substrate/.claude/skills/sprint/SKILL.md +392 -0
  162. package/substrate/.claude/skills/stage/SKILL.md +384 -0
  163. package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
  164. package/substrate/.claude/skills/temperance/SKILL.md +108 -0
  165. package/substrate/.claude/skills/use-case/SKILL.md +417 -0
  166. package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
  167. package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
  168. package/substrate/.claude/skills/verify/SKILL.md +160 -0
  169. package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
  170. package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
  171. package/substrate/.claude/skills/whereami/SKILL.md +307 -0
  172. package/substrate/AGENTS.md +79 -0
  173. package/substrate/CLAUDE-lite.md +85 -0
  174. package/substrate/CODE_OF_CONDUCT.md +28 -0
  175. package/substrate/CONTRIBUTING.md +177 -0
  176. package/substrate/README.md +173 -0
  177. package/substrate/SECURITY.md +19 -0
  178. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  179. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  180. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  181. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  182. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  183. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  184. package/substrate/lib/clean-artifacts-sweep.sh +112 -0
  185. package/substrate/lib/code-comment-discipline.sh +144 -0
  186. package/substrate/lib/composer-preflight.sh +459 -0
  187. package/substrate/lib/hook-inject.sh +255 -0
  188. package/substrate/lib/luminary-pick.sh +96 -0
  189. package/substrate/lib/output-discipline.sh +143 -0
  190. package/substrate/lib/prose-scan-boundary.sh +171 -0
  191. package/substrate/lib/rewrite-check.sh +214 -0
  192. package/substrate/lib/state.sh +1372 -0
  193. package/substrate/lib/telemetry.sh +205 -0
  194. package/substrate/lib/tier-check.sh +187 -0
  195. package/substrate/lib/tier-dependency-audit.sh +1088 -0
  196. package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
  197. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  198. package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
  199. package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
  200. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  201. package/substrate/scripts/aggregate-telemetry.sh +217 -0
  202. package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
  203. package/substrate/scripts/generate-lite-manifest.sh +505 -0
  204. package/substrate/scripts/generate-tier-manifest.sh +28 -0
  205. package/substrate/scripts/intent-drift-check.sh +456 -0
  206. package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
  207. package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
  208. package/substrate/standards/adr-template.md +86 -0
  209. package/substrate/standards/api-conventions/nextjs.md +84 -0
  210. package/substrate/standards/artifact-composition.md +209 -0
  211. package/substrate/standards/bash-hook-safety.md +246 -0
  212. package/substrate/standards/bassclef-configs-schema.md +232 -0
  213. package/substrate/standards/bassclef-evolution.md +143 -0
  214. package/substrate/standards/bassclef-internal-jargon.md +244 -0
  215. package/substrate/standards/bassclef-managed-sentinel.md +96 -0
  216. package/substrate/standards/bassclef-source-config.md +228 -0
  217. package/substrate/standards/branch-stacking.md +408 -0
  218. package/substrate/standards/code-safety-principles.md +176 -0
  219. package/substrate/standards/composer-prerequisites.md +155 -0
  220. package/substrate/standards/deferred-actions-schema.md +204 -0
  221. package/substrate/standards/dependency-discipline/cargo.md +39 -0
  222. package/substrate/standards/dependency-discipline/gem.md +43 -0
  223. package/substrate/standards/dependency-discipline/go-mod.md +41 -0
  224. package/substrate/standards/dependency-discipline/npm.md +42 -0
  225. package/substrate/standards/dependency-discipline/pip.md +42 -0
  226. package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
  227. package/substrate/standards/deployment-topology.md +69 -0
  228. package/substrate/standards/docs-sync-allowlist.md +76 -0
  229. package/substrate/standards/domain-and-dns.md +145 -0
  230. package/substrate/standards/frontend-stack.md +67 -0
  231. package/substrate/standards/frontmatter-schema.md +154 -0
  232. package/substrate/standards/graceful-exit.md +227 -0
  233. package/substrate/standards/hook-idempotency.md +102 -0
  234. package/substrate/standards/hook-injection-discipline.md +202 -0
  235. package/substrate/standards/hook-install-class.md +215 -0
  236. package/substrate/standards/input-handler-interface.md +152 -0
  237. package/substrate/standards/lite-manifest-schema-changes.md +135 -0
  238. package/substrate/standards/luminary-matching.md +105 -0
  239. package/substrate/standards/luminary-problem-patterns.md +481 -0
  240. package/substrate/standards/migration-discipline/active-record.md +50 -0
  241. package/substrate/standards/migration-discipline/alembic.md +43 -0
  242. package/substrate/standards/migration-discipline/gorm.md +50 -0
  243. package/substrate/standards/migration-discipline/prisma.md +53 -0
  244. package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
  245. package/substrate/standards/mobile-ephemeral-session.md +167 -0
  246. package/substrate/standards/model-routing-discipline.md +160 -0
  247. package/substrate/standards/ogilvy-writing-rules.md +225 -0
  248. package/substrate/standards/opener-discipline.md +96 -0
  249. package/substrate/standards/operator-facing-prose-discipline.md +201 -0
  250. package/substrate/standards/persona-schema.md +229 -0
  251. package/substrate/standards/pluggable-luminaries.md +323 -0
  252. package/substrate/standards/pr-body-discipline.md +115 -0
  253. package/substrate/standards/preview-state-schema.md +189 -0
  254. package/substrate/standards/project-directory-layout.md +276 -0
  255. package/substrate/standards/release-tagging.md +137 -0
  256. package/substrate/standards/reserved-skill-names.md +120 -0
  257. package/substrate/standards/scannable-multi-option-output.md +261 -0
  258. package/substrate/standards/sdlc-compliance.md +286 -0
  259. package/substrate/standards/sdlc-gates/typescript.md +57 -0
  260. package/substrate/standards/secrets-lifecycle.md +210 -0
  261. package/substrate/standards/security-scanner-adapter.md +145 -0
  262. package/substrate/standards/session-board.md +256 -0
  263. package/substrate/standards/skill-output-discipline.md +90 -0
  264. package/substrate/standards/state-spine-contract.md +255 -0
  265. package/substrate/standards/state-spine.md +511 -0
  266. package/substrate/standards/steering-hints/kiss-words.md +11 -0
  267. package/substrate/standards/substrate-config-schema.md +267 -0
  268. package/substrate/standards/tech-stack-config.md +109 -0
  269. package/substrate/standards/tier-dependency-analysis.md +167 -0
  270. package/substrate/standards/tier-runtime-deps/lite.md +57 -0
  271. package/substrate/standards/tier-tag-schema.md +155 -0
  272. package/substrate/standards/two-layer-config.md +99 -0
  273. package/substrate/standards/use-case-format.md +292 -0
  274. package/substrate/standards/user-story-invest.md +268 -0
  275. package/substrate/standards/velocity-and-appetite.md +229 -0
  276. package/substrate/standards/voice-input-pattern.md +119 -0
  277. package/substrate/standards/whereami-schema.md +301 -0
  278. package/substrate/standards/worktree-management.md +211 -0
  279. package/substrate/standards/writing-guide.md +213 -0
  280. package/substrate/templates/chronicle-template.md +75 -0
  281. package/substrate/templates/deferred-action-template.md +45 -0
  282. package/substrate/templates/memory-proposal-template.md +77 -0
  283. package/substrate/templates/persona-template.md +200 -0
  284. package/substrate/templates/pr-faq.md +45 -0
  285. package/substrate/templates/secret-rotation-template.md +162 -0
  286. package/substrate/templates/spec-template.md +131 -0
  287. package/substrate/templates/use-case-template.md +194 -0
  288. package/substrate/templates/user-story-template.md +107 -0
  289. package/substrate/templates/whereami-template.md +101 -0
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: requirement
3
+ description: "Produce Cockburn use cases plus INVEST user stories for a feature in one pass. Sam writes formal use cases for a spec. Louis writes INVEST stories for a backlog. You get both from one operator input. Combines /use-case + /user-stories."
4
+ problem: "Features get built from a one-line ticket. Corners get cut. Acceptance drifts from what the persona needs."
5
+ value: "Cockburn use cases plus INVEST user stories in one pass. Written for a Sam-style persona."
6
+ inputs: [A feature name or ticket ref]
7
+ outputs: [Fully-dressed use cases, INVEST user stories with acceptance criteria]
8
+ tier: lite
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ modes: [both, use-case-only, story-only]
12
+ composes_with: [use-case, user-stories, personas]
13
+ ---
14
+
15
+ # /requirement — Cockburn use cases + INVEST stories in one pass
16
+
17
+ ## What you get
18
+
19
+ You describe a feature in a paragraph. `/requirement` returns two artifacts.
20
+
21
+ <!-- FKGL-EXEMPT: structured shape enumeration; the parentheticals name the artifact fields -->
22
+ - One Cockburn-style use case (main success scenario + extensions + preconditions + postconditions)
23
+ - One or more INVEST-shape user stories (Independent + Negotiable + Valuable + Estimable + Small + Testable)
24
+ <!-- /FKGL-EXEMPT -->
25
+
26
+ You pick which one lands. Or both.
27
+
28
+ ## When to use
29
+
30
+ Type `/requirement` when a feature needs both a spec and a backlog item. Common cases:
31
+
32
+ - New feature under `/longrun` scope — spec first, stories second
33
+ - Ticket in the queue that needs shape — story alone is thin; add the use case for edge cases
34
+ - Adopter demo — Louis wants a story for the pitch; Sam wants a use case for the build
35
+
36
+ ## When NOT to use
37
+
38
+ - Only a bug fix — INSTEAD go to `/diagnose` at lite
39
+ - Pure architecture decision — INSTEAD go to `/spec` at lite
40
+ - Formal system contract only — INSTEAD go to `/use-case` at lite
41
+
42
+ ## Cluster shape
43
+
44
+ `/requirement` sits inside the /longrun cluster as a strategy helper. Its own cluster:
45
+
46
+ - Upstream: `/personas` names who the feature is for. `/state-a-problem` frames the pain.
47
+ - Downstream: `/spec` bundles use case + stories into a buildable spec.
48
+ - Helpers: `/use-case` writes Cockburn shape. `/user-stories` writes INVEST shape.
49
+
50
+ ## Composes
51
+
52
+ `/requirement` combines 2 single-purpose skills. Both stay at lite for direct dispatch.
53
+
54
+ <!-- FKGL-EXEMPT: structured shape names -->
55
+ - `/use-case` — Cockburn scenarios; main success plus numbered extensions
56
+ - `/user-stories` — INVEST shape; per-story acceptance list
57
+ <!-- /FKGL-EXEMPT -->
58
+
59
+ Per canvas `docs/canvases/2026-08-02-porcelain-plumbing-reframe.md` — Cockburn plus Beck consensus: shape names matter. `/requirement` combines without hiding the single-purpose skills. Sam and Louis can still call each one directly when they want one shape only.
60
+
61
+ ## Modes
62
+
63
+ - `both` (default) — writes both a use case and INVEST stories
64
+ - `use-case-only` — dispatches `/use-case` alone; skips story authoring
65
+ - `story-only` — dispatches `/user-stories` alone; skips use case authoring
66
+
67
+ ## Procedure
68
+
69
+ 1. Parse the operator's feature paragraph. Extract the actor, the goal, the pain point.
70
+ 2. Load persona context via `/personas`. Default to operator when personas are not defined.
71
+ 3. If mode is `both` or `use-case-only`: dispatch `/use-case`. Author `docs/use-cases/UC-<slug>.md`.
72
+ 4. If mode is `both` or `story-only`: dispatch `/user-stories`. Author `docs/user-stories/<slug>.md`.
73
+ 5. Cross-link: the use case cites the stories. The stories cite the use case.
74
+ 6. Print artifact paths to the operator.
75
+
76
+ ## What lands on disk
77
+
78
+ - One use case at `docs/use-cases/UC-<slug>.md` (unless mode is `story-only`)
79
+ - One or more stories at `docs/user-stories/<slug>.md` (unless mode is `use-case-only`)
80
+ - Cross-references between the two
81
+
82
+ ## Rules
83
+
84
+ - MUST cite the persona the feature is for (Sam or Louis or a project persona).
85
+ - MUST cross-link the use case and the stories.
86
+ - MUST match Cockburn shape for use cases. MUST match INVEST shape for stories.
87
+ - MAY skip stories or use case per mode.
88
+
89
+ ## Refs
90
+
91
+ - Canvas `docs/canvases/2026-08-02-porcelain-plumbing-reframe.md`
92
+ - Ticket #1050 + comment 5160626302 (Cockburn + Beck consensus)
93
+ - Goal doc `docs/iteration-bets/2026-08-04g-porcelain-plumbing-reframe.md`
94
+ - `.claude/skills/use-case/SKILL.md` — atomic Cockburn shape
95
+ - `.claude/skills/user-stories/SKILL.md` — atomic INVEST shape
96
+ - `.claude/skills/personas/SKILL.md` — persona load
97
+ - @luminary alistair-cockburn
98
+ - @luminary kent-beck
@@ -0,0 +1,117 @@
1
+ ---
2
+ tier: lite
3
+ name: retro
4
+ description: "Reflect at session close. Names what worked, what didn't, and what to change next time. Feeds candidate follow-on tickets."
5
+ problem: "Sessions end and the lessons vanish. What worked and what broke \u2014 nowhere written."
6
+ value: "A short retro that names what to keep and what to change next session."
7
+ inputs: [Optional session or goal ref]
8
+ outputs: [Kept and Changed and Learned sections, Follow-on ticket candidates]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Retro — Session Retrospective
14
+
15
+ Reflect on the current session and capture learnings.
16
+
17
+ ## Runs at every tier — deep module
18
+
19
+ This skill uses only mechanical inputs. It reads `git log`. It reads files. The agent reflects on the session. No paid API. No LLM call beyond the agent's own turn output.
20
+
21
+ Same procedure runs at lite, standard, and ultra. Lite adopters get the full retrospective. Per canvas 2026-07-19-bassclef-lite Q6 Option E.
22
+
23
+ Closes bassclef-upstream#1383 (sister flip to `/roadmap-reconcile`).
24
+
25
+ ## Steps
26
+
27
+ 1. Review what was accomplished this session:
28
+ - `git log --oneline --since="today"` for commits
29
+ - Check for modified files and new artifacts
30
+ 2. Identify:
31
+ - What went well (approaches that worked, decisions validated)
32
+ - What was harder than expected (and why)
33
+ - What should change for next session
34
+ 3. List substrate observations from this session (see next section).
35
+ 4. Check for open threads that need to carry forward.
36
+
37
+ ## Substrate observations — file each as /promote (bassclef-web#96)
38
+
39
+ Before writing the retro, list what came up. Categories:
40
+
41
+ - Missing skill or hook that would have helped
42
+ - Hook fires wrong OR misses when it should fire
43
+ - Rule gap or drift
44
+ - Prereq surprise — a skill assumed X existed; it did not
45
+ - Adopter-visible friction (Sam or Louis lens)
46
+
47
+ For each observation, run three steps:
48
+
49
+ 1. **Dedup check.** Run `gh issue list --repo <current-repo> --state open --label bassclef-evolution --search "<close-title-match>"`. When a match exists, comment on it. Do not file a new ticket.
50
+ 2. **File /promote.** When no match, dispatch `/promote` with pre-filled title + body. The operator reviews before submit. The ticket lands with `bassclef-evolution` label in the current repo. Bassclef pulls via session-reflection hook per memory `feedback_promote_files_locally_not_upstream`.
51
+ 3. **Record disposition.** Append a line to the marker file at `state/markers/retro-substrate/<session-id>.marker`. Use the session-id from `state/markers/session-timing/`. Fall back to `YYYY-MM-DD-<slug>` when that is missing.
52
+
53
+ Marker format:
54
+
55
+ ```
56
+ # Retro substrate observations — <session-id>
57
+ - date: YYYY-MM-DD
58
+ - session: <session-id>
59
+ - observations:
60
+ - promoted: <one-line title> — filed as <repo>#<ticket>
61
+ - deferred: <one-line title> — <reason>
62
+ - rejected: <one-line title> — <reason>
63
+ - dedup: <one-line title> — commented on <repo>#<ticket>
64
+ ```
65
+
66
+ Silence in this section is not deferral. List observations OR state "no substrate observations this session" explicitly.
67
+
68
+ ## Output
69
+
70
+ When a session log exists for today, append a `## Retrospective` section to it.
71
+ When no session log exists, create one first via `/session-log` format. Then add the retro.
72
+
73
+ <!-- FKGL-EXEMPT: markdown template exemplar; adopter copies verbatim -->
74
+ ```markdown
75
+ ## Retrospective
76
+
77
+ ### Went well
78
+ - ...
79
+
80
+ ### Harder than expected
81
+ - ...
82
+
83
+ ### Change for next time
84
+ - ...
85
+
86
+ ### Substrate observations promoted
87
+ - <title> — filed as <repo>#<ticket>
88
+ - <title> — dedup: commented on <repo>#<ticket>
89
+ - (or: "no substrate observations this session")
90
+
91
+ ### Open threads for next session
92
+ - ...
93
+
94
+ ### Bassclef promotes this session
95
+ - agent-self-proposed: N
96
+ - agent-user-proposed: M
97
+ - total: N plus M
98
+
99
+ When M is much larger than N, the agent missed patterns the operator caught. When N is high but bassclef closes none, the agent files too broadly.
100
+ ```
101
+ <!-- /FKGL-EXEMPT -->
102
+
103
+ **Proposer counting**: count bassclef-evolution issues from session
104
+ date window:
105
+
106
+ ```bash
107
+ gh issue list --label bassclef-evolution --state all \
108
+ --search "created:>=$(date -v-1d +%Y-%m-%d) created:<=$(date +%Y-%m-%d)" \
109
+ --json number,title,labels | jq '[.[] | {n: .number, t: .title,
110
+ kind: (if (.labels | map(.name) | index("agent-user-proposed")) then
111
+ "user" elif (.labels | map(.name) | index("agent-self-proposed"))
112
+ then "self" else "unlabeled" end)}]'
113
+ ```
114
+
115
+ ## Output discipline
116
+
117
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: riff
3
+ description: "Produce 2-3 clickable mock alternatives for a UI surface. Each mock uses a different luminary lens. Louis picks a marketing variant. Sam picks a direction before building. Combines /interpret-input + /luminary + /stage + /visual-review."
4
+ problem: "Design directions get one variant and no comparison. Operator picks blind. Rework is huge."
5
+ value: "Two or three clickable mocks per UI surface. Each mock pins a different luminary lens."
6
+ inputs: [A UI surface intent or design goal]
7
+ outputs: [2-3 clickable mock variants, Luminary lens per variant]
8
+ tier: lite
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ composes_with: [interpret-input, luminary, visual-review]
12
+ ---
13
+
14
+ # /riff — Vary a UI surface by luminary lens
15
+
16
+ ## What you get
17
+
18
+ You get 2-3 clickable mock alternatives for a UI surface. Each mock uses a different luminary lens. You pick the one that fits.
19
+
20
+ Louis picks a marketing variant. Sam picks a direction before building.
21
+
22
+ ## When to use
23
+
24
+ Type `/riff` when you have a UI or marketing surface. You want 2-3 options before building.
25
+
26
+ - Marketing page — try 3 luminary lenses on the same headline
27
+ - App feature UI — pick between minimal, dense, or modal
28
+ - Landing page hero — bake off options before design lock-in
29
+
30
+ ## When NOT to use
31
+
32
+ - Single-variant work — INSTEAD go to `/frontend-design` at standard
33
+ - Full prototype pipeline with direct step control — INSTEAD use `/stage` at standard
34
+ - Buildable spec plus variants — INSTEAD use `/launch` at standard
35
+
36
+ ## Tier gate
37
+
38
+ `/visual-review` and `/stage` ship at `tier: standard`. Lite adopters get graceful degrade — variants ship without the review check; the pipeline dispatches directly. Resolve tier via `lib/tier-check.sh`.
39
+
40
+ Per canvas 2026-07-19-bassclef-lite Q6 Option E — one SKILL.md file, same name in both tiers, body carries runtime tier awareness with graceful degrade.
41
+
42
+ ## Tier and dispatch
43
+
44
+ `/riff` sits at bassclef lite. It is a porcelain verb — Git's word for the small set of verbs a user types. Sam or Louis types `/riff` and the pipeline runs underneath.
45
+
46
+ The plumbing (Git's word for the deeper steps a verb runs) sits at standard tier. When lite adopters type `/riff`, the skill dispatches:
47
+
48
+ 1. `/interpret-input` — parse the operator's input
49
+ 2. `/luminary` picker — pick 2-3 lenses that fit the intent
50
+ 3. Per lens: author a static HTML mock
51
+ 4. Assemble a gallery — one page listing every variant with screenshots and luminary tags
52
+ 5. `/visual-review` — screenshot each variant and check against luminary discipline
53
+
54
+ Standard adopters can bypass `/riff`. They invoke `/stage` directly for the full pipeline with more control. Ultra adopters get `/pick-luminaries` cosine plus judge for tighter lens matching.
55
+
56
+ ## Cluster shape
57
+
58
+ `/riff` sits inside the /longrun cluster. It is a helper for marketing and UI direction work. Its own cluster:
59
+
60
+ - Upstream: `/interpret-input` parses input into an artifact
61
+ - Downstream: picked variant flows into `/build` at standard or `/launch` at standard
62
+ - Helpers: `/luminary` picks lenses. `/visual-review` checks each variant. `/frontend-design` is Anthropic's baseline.
63
+
64
+ ## Consolidates
65
+
66
+ `/riff` consolidates 2 prior skills at the lite entry:
67
+
68
+ - `/stage` — prototype pipeline. Stays at standard so you can call each step directly.
69
+ - `/riff-prototypes` — deprecated per ADR-020 in favor of `/stage`. Absorbed here at lite.
70
+
71
+ Per canvas `docs/canvases/2026-08-02-porcelain-plumbing-reframe.md` — 10 of 10 luminaries agreed on the reframe.
72
+
73
+ ## Procedure
74
+
75
+ 1. Parse the operator's input via `/interpret-input`. Output: normalized InputArtifact.
76
+ 2. Pick 2-3 luminary lenses. Either operator-named or via `/luminary` picker.
77
+ 3. For each lens: author a static HTML mock. Path: `docs/prototypes/YYYY-MM-DD-riff-<slug>-variant-N/index.html`. Stubbed data. Include a `<h2>` naming the lens.
78
+ 4. Screenshot each variant via Playwright MCP. Save under `.playwright-mcp/`.
79
+ 5. Assemble a gallery page. Link every variant. Show screenshots inline. Show luminary tags.
80
+ 6. Run `/visual-review` on each variant. Report findings per variant.
81
+ 7. Present the gallery URL to the operator. Operator picks. Picked variant flows into `/build` or `/launch` at standard.
82
+
83
+ ## Baseline composition
84
+
85
+ `/riff` builds on top of Anthropic's `frontend-design` defaults. Adopters firing plain Claude get those defaults. `/riff` adds luminary discipline. It also adds bassclef design tokens.
86
+
87
+ ## What lands on disk
88
+
89
+ - One HTML mock per variant under `docs/prototypes/`
90
+ - One screenshot per variant under `.playwright-mcp/`
91
+ - One gallery page linking every variant
92
+ - One PR to a feature branch (not main)
93
+
94
+ ## Rules
95
+
96
+ - MUST produce a PR. Push to a feature branch, not main.
97
+ - MUST run on a feature branch.
98
+ - MUST screenshot every variant via Playwright MCP. BLOCK if MCP not enabled.
99
+ - MUST tag each variant with its luminary lens in the HTML.
100
+ - MUST report per-variant `/visual-review` findings with the gallery link.
101
+
102
+ ## Refs
103
+
104
+ - Canvas `docs/canvases/2026-08-02-porcelain-plumbing-reframe.md`
105
+ - Ticket #1050 + comment 5160626302
106
+ - ADR-020 (prototype skill family consolidation)
107
+ - Goal doc `docs/iteration-bets/2026-08-04g-porcelain-plumbing-reframe.md`
108
+ - `.claude/skills/stage/SKILL.md` — atomic pipeline at standard
109
+ - `.claude/skills/frontend-design/SKILL.md` — Anthropic baseline
110
+ - `.claude/skills/visual-review/SKILL.md` — per-variant review
111
+ - `.claude/skills/luminary/SKILL.md` — lens picker
112
+ - `.claude/luminaries/bill-buxton.md` — variant discipline anchor
113
+ - @luminary bill-buxton
114
+ - @luminary alan-cooper
@@ -0,0 +1,163 @@
1
+ ---
2
+ tier: lite
3
+ name: roadmap-reconcile
4
+ description: "Audit canvas LR-N tables and roadmap entries against recent chronicles, merged PRs, and freshly-filed tickets. Surface drift via --dry-run. Apply edits with --apply. Runs at /longrun prep and /sprint as pre-flight."
5
+ problem: "Canvas roadmap tables get stale. Shipped work sits marked pending. Sequencing drifts from reality."
6
+ value: "Diffs the roadmap against merged PRs plus fresh session logs. Applies edits so the canvas matches reality."
7
+ inputs: [Optional --dry-run or --apply flag, Roadmap path or canvas ref]
8
+ outputs: [Diff report of drift, Applied edits when --apply, Status per row]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # /roadmap-reconcile — True up canvases against shipping reality
14
+
15
+ ## Runs at every tier — deep module (per canvas 2026-07-19-bassclef-lite Q6 Option E)
16
+
17
+ This skill uses only mechanical inputs — `git log`, `gh pr list`, `gh issue list`, grep across canvas + goal doc files. No paid API. No LLM dispatch. Same procedure runs identically at lite, standard, and ultra. Lite adopters get the full drift check.
18
+
19
+ The `lib/tier-check.sh` gate reads adopter tier from `.claude/bassclef-configs.jsonc`. This skill's body has no tier branch — one procedure serves every reader. Future extension (LLM-based semantic drift) would add a tier branch at the point of divergence; today no branch is needed.
20
+
21
+ Closes bassclef-upstream#1383.
22
+
23
+ The recurring substrate primitive that closes the stale-canvas trap. As operator ideates in a session, surfaces shift; the canvases holding LR-N sequencing tables stay frozen at the last commit. Without reconciliation, /longrun prep reads pre-detour next-goals and dispatches against work that's no longer on the critical path.
24
+
25
+ This skill enumerates roadmap surfaces, diffs them against shipping reality (chronicles + PRs + tickets), and produces edits — inline by default, or as a dry-run report for operator review.
26
+
27
+ INSTEAD of relying on operator-and-agent ad-hoc canvas review at every prep: dispatch this skill as a pre-flight gate; it returns either "no drift" (proceed) or a specific diff (resolve before scope commit).
28
+
29
+ ## When to invoke
30
+
31
+ - **Auto at /longrun prep Step 0.5**: dry-run mode runs before scope confirmation; surfaces drift; operator confirms reconciled state before WU-0
32
+ - **Auto at /sprint**: dry-run output appended to /sprint surface so operator sees roadmap drift alongside ticket-level orientation
33
+ - **Standalone**: operator dispatches `/roadmap-reconcile` after a substantive ideation session that didn't land in canvas updates yet
34
+ - **Composer fallback**: any composer detecting ticket-vs-canvas drift can dispatch this skill instead of failing silently
35
+
36
+ ## Procedure
37
+
38
+ 1. **Enumerate roadmap surfaces:**
39
+ - Substrate canvases under `strategy/canvases/` — grep for `LR-N` rows in Stage 3 build sequence + Operator priorities tables
40
+ - Typed roadmap entities under `docs/roadmaps/*.md` — read via `state_roadmap_get` accessor when present (per bassclef#337, #480 once shipped)
41
+ - Active iteration goal under `docs/iteration-bets/` — extract `next_bet:` field
42
+ - Whereami `next_bet:` field at `docs/whereami.md`
43
+ 2. **Read shipping reality:**
44
+ - `git log --since=14days --pretty=oneline -- 'chronicle/*.md' 'docs/chronicle/*.md'` — sessions that shipped
45
+ - `gh pr list --state all --json number,title,state,mergedAt --limit 30` — PR truth
46
+ - `gh issue list --state open --search 'created:>=2-weeks-ago' --json number,title,labels,body` — recently filed tickets
47
+ - `git log --since=14days --pretty=format:'%h %s' -- 'docs/iteration-bets/*.md'` — bets opened or closed
48
+ 3. **Build a diff** — for each LR-N row in canvas tables:
49
+ - Status mismatch: canvas says "in progress" but a CLOSED goal ships its scope, OR canvas says "next" but a bet's already opened
50
+ - Sequencing mismatch: a recently-filed ticket names itself as "blocking LR-N+1" or "load-bearing for LR-N" but doesn't appear in any LR-row
51
+ - Reference rot: canvas references a ticket that's been closed or superseded
52
+ 4. **Produce output:**
53
+ - **--dry-run mode (default at /longrun prep + /sprint):** markdown diff report — what's stale, what to edit, what to add
54
+ - **--apply mode (operator opt-in):** inline edits to canvas files via Edit tool; commit with `docs(roadmap): reconcile <slug>`
55
+ - **--json mode:** structured output for downstream skills/hooks
56
+ 5. **Surface output** to caller (operator or composer); caller decides resolve / defer / amend.
57
+
58
+ ## What NOT to do
59
+
60
+ - **Don't fabricate LR-N rows for tickets that aren't ready to be sequenced.** INSTEAD: surface the ticket as "candidate for next sequencing decision" without inserting; operator decides at /longrun prep.
61
+ - **Don't auto-apply edits without --apply opt-in.** INSTEAD: --dry-run is the default; operator reviews the diff before any canvas write.
62
+ - **Don't reach inside canvas Stage 1/2 (Thesis, Shape) content.** INSTEAD: only edit Stage 3 build sequences + Operator priorities tables + status overlays; the upstream thesis stays operator-owned.
63
+ - **Don't reconcile against draft tickets or WIP goals.** INSTEAD: filter to merged PRs + closed/active goals; tickets in `draft` state or PRs in `draft` are noise.
64
+ - **Don't run during /longrun execution mid-step.** INSTEAD: only at prep + closeout windows; mid-execution reconciliation creates scope-drift triggers.
65
+
66
+ ## Output format (--dry-run)
67
+
68
+ ```markdown
69
+ ## /roadmap-reconcile dry-run — <timestamp>
70
+
71
+ ### Surfaces enumerated
72
+
73
+ - canvas: strategy/canvases/2026-05-03-bassclef-platform-primitive.md (8 LR-N rows)
74
+ - canvas: strategy/canvases/2026-05-04-hud-on-brownfield-repo.md (10-step build sequence)
75
+ - typed roadmap: <path> OR (none — bassclef#480 not yet shipped)
76
+ - whereami next_bet: 2026-05-XX-LR6-your-app-refactor-dispatch
77
+
78
+ ### Drift detected
79
+
80
+ **Canvas <path>:**
81
+ - LR-N row <N> says "in progress" but goal <slug> is CLOSED (per chronicle <ref>); should be "✅ shipped"
82
+ - LR-N row <N+1> references bassclef#XXX which has been closed as superseded; should reference replacement #YYY
83
+ - bassclef#ZZZ filed 3 days ago names itself as "blocks LR-N+2"; doesn't appear in canvas table
84
+
85
+ **Whereami next_bet:**
86
+ - Names LR6 = POA dispatch; canvas Operator priorities row also says LR6 = POA dispatch — aligned
87
+
88
+ ### Recommended edits
89
+
90
+ 1. Update canvas <path> Operator priorities row N: status → "✅ shipped 2026-05-04"
91
+ 2. Update canvas <path> Stage 3 row M: replace "#XXX" with "#YYY"
92
+ 3. Insert new row in canvas <path> at LR-N+2: "#ZZZ — <description from ticket>"
93
+
94
+ ### To apply
95
+
96
+ `/roadmap-reconcile --apply` (operator-confirms before commit)
97
+ ```
98
+
99
+ ## Output format (--json)
100
+
101
+ ```json
102
+ {
103
+ "timestamp": "2026-05-04T...",
104
+ "surfaces": [
105
+ {"type": "canvas", "path": "...", "rows": 8},
106
+ {"type": "typed-roadmap", "path": null, "note": "bassclef#480 not yet shipped"}
107
+ ],
108
+ "drift": [
109
+ {
110
+ "surface": "canvas:strategy/canvases/...",
111
+ "row": "LR-4",
112
+ "claim": "in progress",
113
+ "reality": "shipped",
114
+ "evidence": "chronicle/2026-05-04d-...md",
115
+ "edit": "row LR-4 status: shipped"
116
+ }
117
+ ]
118
+ }
119
+ ```
120
+
121
+ ## Acceptance
122
+
123
+ - SKILL.md scaffolds with verb-first description (≤280 chars; per `.claude/rules/skill-description-clarity.md`)
124
+ - Tests in `scripts/tests/roadmap-reconcile.test.sh` cover:
125
+ - Enumeration: skill detects all canvas LR-N tables in `strategy/canvases/`
126
+ - Drift detection: stale canvas + recent shipped chronicle → drift surfaces
127
+ - Drift detection: freshly-filed ticket marked as "blocks LR-N" → drift surfaces
128
+ - Output formats: --dry-run produces markdown; --json produces valid JSON
129
+ - Negative test: clean roadmap (no drift) → "no drift" output
130
+ - Integration: /longrun prep SKILL.md procedure adds Step 0.5 reference
131
+ - Integration: /sprint SKILL.md composes-with table updated
132
+
133
+ ## Composes with
134
+
135
+ - `/longrun prep` (composes-into Step 0.5) — pre-flight reconciliation gate
136
+ - `/sprint` (composes-into output) — surface drift alongside ticket-level orientation
137
+ - `/whats-the-plan` (referenced) — declares the chain; this skill refreshes the plan source
138
+ - `/promote` — when reconciliation surfaces a missing typed roadmap entity, file as substrate-evolution ticket (mirrors LR4 WU-0 → bassclef#480 pattern)
139
+ - `state_roadmap_get` accessor — read at Step 1 once bassclef#480 ships; until then, canvas-grep is the surface
140
+
141
+ ## Distinct from
142
+
143
+ - `/sprint` — ticket-level (what's next on the backlog); this is goal-level (what's next in the sequenced roadmap)
144
+ - `/whereami` — point-in-time snapshot reader; this skill EDITS the source canvases that whereami summarizes
145
+ - `/promote` — files new tickets when patterns surface; this skill updates how filed tickets are sequenced
146
+
147
+ ## Sources read
148
+
149
+ - bassclef#479 (ticket body) — procedure spec
150
+ - `strategy/canvases/2026-05-03-bassclef-platform-primitive.md` — Operator priorities table is the load-bearing surface
151
+ - `strategy/canvases/2026-05-04-hud-on-brownfield-repo.md` — Stage 3 build sequence is the second load-bearing surface
152
+ - `docs/iteration-bets/2026-05-04d-catalog-substrate-roadmap-reconnect.md` WU-0 — manual instance this skill automates
153
+ - `chronicle/2026-05-04d-catalog-substrate-roadmap-reconnect.md` — discoveries section names the meta-loop pattern
154
+ - bassclef#480 (ticket body) — typed roadmap entity gap; this skill bridges to it
155
+ - `.claude/rules/blocked-items.md` — drift surfaces follow the BLOCKED protocol when /longrun prep can't proceed without resolution
156
+
157
+ ## Closes
158
+
159
+ Filed in iteration-goal `2026-05-04e-LR5-enforcement-and-content` (LR5) WU-1. Closes bassclef#479. The skill itself is the substrate primitive that retires the manual-WU-0 pattern from LR4 onward.
160
+
161
+ ## Output discipline
162
+
163
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.