@thebassclef/lite 1.0.4 → 1.1.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 (275) hide show
  1. package/dist/cli.cjs +65 -0
  2. package/dist/cli.js +65 -0
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.claude/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +1 -1
@@ -0,0 +1,297 @@
1
+ ---
2
+ tier: lite
3
+ name: diagnose
4
+ description: "Diagnose a defect before fixing. Reproduce the failure first (Step 0), then Is/Is Not, then Five Whys, then a Hypothesis. Run before writing any fix code. Lazy diagnosis ships brittle fixes."
5
+ problem: "Bugs get fixed on guesses. The wrong cause gets patched. The class comes back a week later."
6
+ value: "A short trace from failure to root cause. You fix the class once instead of the instance three times."
7
+ inputs: [A failing test or error log, A bug ticket or screenshot]
8
+ outputs: [Reproduce step, Is/Is Not table, Five Whys chain, Hypothesis with a read-only test]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # /diagnose
14
+
15
+ ## What you get
16
+
17
+ Structured defect diagnosis. Run `/diagnose` before writing any fix code. I walk you through 7 steps:
18
+
19
+ - Step 0 — reproduce the failure (RED anchor)
20
+ - Step 1 — gather evidence
21
+ - Step 2 — Is/Is Not table
22
+ - Step 3 — resolution chain across stack layers
23
+ - Step 4 — Five Whys to root cause
24
+ - Step 5 — hypothesis with a read-only test
25
+ - Step 6 — significance check
26
+ - Step 7 — gate marker, then the fix
27
+
28
+ The output separates "I fixed it" from a real cure. Without a repro, "I fixed it" has no counterpart. The repro is the surface every next step operates on.
29
+
30
+ Every diagnosis writes a marker at `state/markers/diagnose/<branch>.marker`. The pre-build-gate hook reads it. Lazy diagnosis ships weak fixes.
31
+
32
+ ## When to use it
33
+
34
+ Any time something is wrong, broken, failing, or behaving unexpectedly. Trigger words:
35
+
36
+ - **Defects**: bug, defect, regression, flaky, intermittent
37
+ - **Failures**: error, fail, crash, panic, exception, abort, SIGKILL, OOM
38
+ - **State**: broken, wrong, corrupt, stale, stuck, hung, hanging, frozen, deadlock
39
+ - **HTTP**: 404, 500, 502, 503, 504, redirect loop, CORS
40
+ - **Performance**: timeout, timed out, slow, degraded, memory leak, high CPU
41
+ - **Availability**: down, dead, unreachable, not responding, connection refused
42
+ - **Behavior**: not working, does not work, will not start, stopped working, blank page, spinner
43
+ - **Data semantic renames** (bassclef#601): before renaming a label / column / enum / UI copy that reflects data, verify the data semantic matches the new name
44
+
45
+ Skip diagnosis only for the three trivial cases in the FAQ — typo, missing env var, off-by-one. Everything else earns the ceremony.
46
+
47
+ ## FAQ
48
+
49
+ ### Why is Step 0 (Reproduce) load-bearing?
50
+
51
+ Without a repro, "I fixed it" has no counterpart "here's the thing it does not do anymore." The repro is the surface every subsequent step operates on. Step 0 writes a Reproduction block with the exact command / URL / action that triggers the failure, observed vs expected, environment, and reproducibility (every time / intermittent / unable).
52
+
53
+ If you cannot reproduce, STOP. You may not be looking at a real defect — you may be looking at operator expectation mismatch, environment drift, or stale cache. Escalate before continuing.
54
+
55
+ ### When can I skip Step 0?
56
+
57
+ Three localized cases: typo (obvious misspelling visible in diff), missing env var (error message names the var), off-by-one (index / boundary, one-character fix). In these cases the repro is implicit in the code change itself. State "Step 0 skipped — [reason]" in your output. Silence is not skip.
58
+
59
+ For all other failures, Step 0 is mandatory.
60
+
61
+ ### What's the Step 0 identifier check?
62
+
63
+ Before naming any external identifier in the Reproduction block — hook filename, npm scope, ticket ID, GitHub org, file path, ADR number — verify the identifier resolves against reality. Hook filenames: `find .claude/hooks -name "<name>.sh"` returns non-empty. Ticket IDs: `gh issue view <N>` returns a title. File paths: `test -f <path>`. ADR numbers: `ls architecture/decisions/ADR-<NNN>-*.md`.
64
+
65
+ Bet 2026-07-04b caught three R8 misses in one session — invented hook name, invented npm scope, invented Chain B shape. All three came from authoring text against a mental model without a read against reality. Tier 0 tests used the invented names as fixture data — self-referential pass. Reading the source once at Step 0 falsifies the class before the ticket ships.
66
+
67
+ Sister to `.claude/rules/assert-only-after-verify.md`.
68
+
69
+ ### What's the Resolution Chain step?
70
+
71
+ If the defect involves behavior that could be produced at multiple layers of a stack, draw the resolution chain BEFORE forming hypotheses. This is the spatial complement to Five Whys (which traces causation over time).
72
+
73
+ Pre-configured chains cover CSS / Layout / Scroll, Auth / Middleware, State Management (React), Config / Environment, Database / ORM, Network / API, Build Pipeline, Module / Import Resolution, Cross-Repo CI Write-Path. Pick the domain chain that matches your defect. Details below the fold.
74
+
75
+ ### What's the significance check?
76
+
77
+ Before fixing, classify the finding — trivial (< 30 min + no new objects + no UI change), moderate, or significant. Trivial goes straight to fix with a note in the commit message. Moderate or significant requires a GitHub issue BEFORE writing fix code, so the scope is tracked.
78
+
79
+ ### When do I run /promote after diagnosis?
80
+
81
+ If the diagnosis reveals a reusable pattern (new resolution chain, diagnostic technique, anti-pattern, trap) that would help in a different repo, run `/promote` with the pattern. Agents don't self-recognize promotable patterns; the pre-commit hook catches file-level changes to `.claude/` but not workflow insights. Step 7 is the self-catch mechanism.
82
+
83
+ Skip promotion for trivial fixes.
84
+
85
+ ## Details below the fold
86
+
87
+ ### Procedure
88
+
89
+ **Step 0 — Reproduce (RED anchor).**
90
+
91
+ ```
92
+ ## Reproduction
93
+ - Repro command / URL / action: [exact sequence]
94
+ - Observed: [what happens — exact error, status, behavior]
95
+ - Expected: [what should happen]
96
+ - Environment: [local / staging / prod / CI]
97
+ - Reproducible?: [every time | intermittent N/M | unable to reproduce]
98
+ ```
99
+
100
+ Then run the Step 0 identifier check (see FAQ) on every external name in the block.
101
+
102
+ **Step 1 — Gather evidence (READ-ONLY — no code changes).**
103
+
104
+ - `git log --oneline -10` — what changed recently?
105
+ - Check logs (application, worker, CI output)
106
+ - Check health endpoints
107
+ - Check browser console errors (ask user for screenshot if needed)
108
+
109
+ **Step 2 — Is / Is Not.**
110
+
111
+ ```
112
+ ## Is / Is Not
113
+ - IS: [what fails — URLs, status codes, error messages]
114
+ - IS NOT: [what still works — narrow the impact]
115
+ - Changed: [recent commits, deploys, config, external services]
116
+ ```
117
+
118
+ **Step 2b — Resolution Chain.**
119
+
120
+ Pick the pre-configured chain for your domain. For each layer:
121
+
122
+ - What does this layer contribute? (transform, filter, override, wrap, proxy)
123
+ - Does it have hidden side effects? (implicit defaults, wrapper elements, middleware)
124
+ - Can it silently override downstream layers? (specificity, precedence, config cascade)
125
+ - Is a library or framework adding a layer you did not write? (READ THE SOURCE)
126
+
127
+ Then identify which layer produces the observed behavior, which SHOULD control it, and whether any intermediate layers silently override or wrap.
128
+
129
+ Skip Resolution Chain if the defect is single-file, obviously a typo / env var / off-by-one, or Is/Is Not already narrows to one layer.
130
+
131
+ **Step 3 — Five Whys.**
132
+
133
+ ```
134
+ ## Five Whys
135
+ 1. Why does [symptom]? → because [X]
136
+ 2. Why [X]? → because [Y]
137
+ 3. Why [Y]? → because [Z]
138
+ 4. Why [Z]? → because [W]
139
+ 5. Why [W]? → ROOT CAUSE: [...]
140
+ ```
141
+
142
+ **Step 4 — Hypothesis + Test.**
143
+
144
+ ```
145
+ ## Hypothesis
146
+ - Cause: [your theory]
147
+ - Test: [a read-only command to verify — NOT a fix]
148
+ - If confirmed: [what you'll change]
149
+ ```
150
+
151
+ **Step 5 — Significance check.**
152
+
153
+ ```
154
+ ## Significance
155
+ - Level: [trivial / moderate / significant]
156
+ - Criteria: [< 30 min + no new objects + no UI change = trivial]
157
+ - UI surface impacted?: [yes/no — if yes, UX translation may be needed]
158
+ - Epic required?: [trivial = no (log in commit), moderate+ = yes]
159
+ ```
160
+
161
+ Moderate or significant → create a GitHub issue BEFORE writing fix code. Trivial → proceed to fix with commit-message note.
162
+
163
+ **Step 6 — Write the gate marker, then fix.**
164
+
165
+ ```bash
166
+ BRANCH=$(git branch --show-current)
167
+ BRANCH_SLUG=$(echo "$BRANCH" | tr '/' '-')
168
+ BRANCH_HASH=$(echo "$BRANCH" | md5 -q 2>/dev/null || echo "$BRANCH" | md5sum 2>/dev/null | cut -d' ' -f1)
169
+ SESSION_ID=${CLAUDE_SESSION_ID:-$$}
170
+
171
+ # Ephemeral flag
172
+ touch "/tmp/claude-diagnosis-done-${SESSION_ID}-${BRANCH_HASH}"
173
+
174
+ # Durable git-tracked marker
175
+ mkdir -p state/markers/diagnose
176
+ date -u +%Y-%m-%dT%H:%M:%SZ > "state/markers/diagnose/${BRANCH_SLUG}.marker"
177
+ git add "state/markers/diagnose/${BRANCH_SLUG}.marker"
178
+ ```
179
+
180
+ Only NOW may you write code. The fix should address the ROOT CAUSE, not the symptom.
181
+
182
+ **Step 7 — Pattern promotion check.**
183
+
184
+ After the fix is confirmed working:
185
+
186
+ - Did this diagnosis reveal a reusable pattern (new resolution chain, diagnostic technique, anti-pattern, or trap)?
187
+ - Would this help in a DIFFERENT repo?
188
+ - If yes → run `/promote` with the pattern, not just the fix.
189
+
190
+ Skip if the fix was trivial.
191
+
192
+ ### Pre-configured resolution chains by domain
193
+
194
+ **CSS / Layout / Scroll**
195
+ ```
196
+ viewport → html → body → layout container → scroll container → target element
197
+ ```
198
+ Per ancestor check: overflow-x / overflow-y, position, display (flex child missing min-w-0?), creates new scroll context?, creates new stacking context?, component library adding hidden wrapper divs? (READ THE SOURCE).
199
+
200
+ Traps: shadcn/Radix wrapping in scroll containers, w-full overriding explicit width, border-collapse clipping box-shadow (Chrome), overflow:clip breaking sticky on iOS, flex children expanding past viewport.
201
+
202
+ **Auth / Middleware**
203
+ ```
204
+ client → proxy/CDN → edge middleware → route middleware → route handler → DB policy → response
205
+ ```
206
+ Per layer check: short-circuit? (redirect, 401), modify the request? (headers, cookies), cache auth state? (stale session, revoked token still cached), which layer enforces tenant isolation?
207
+
208
+ Traps: Next.js middleware running before route handlers, cached sessions surviving token revocation, middleware redirect loops, tenant context resolved at wrong layer.
209
+
210
+ **State Management (React)**
211
+ ```
212
+ server state → cache (React Query/SWR) → global store → context → component state → derived → render
213
+ ```
214
+ Per layer check: is this layer stale?, are multiple layers holding copies?, does a re-render trigger here?, is the update path sync or async?
215
+
216
+ Traps: optimistic UI not rolling back on server error, stale cache surviving a mutation, context re-rendering all consumers, derived state computed from stale inputs.
217
+
218
+ **Config / Environment**
219
+ ```
220
+ hardcoded default → config file → .env → env var → CLI flag → runtime override → framework injection
221
+ ```
222
+ Per layer check: is this layer actually being read? (wrong .env, NODE_ENV mismatch), does higher-precedence layer silently override? (framework defaults), is the value being coerced? (string "false" → truthy in JS).
223
+
224
+ Traps: Next.js/Prisma adding defaults, .env.local overriding .env, Docker not passing env vars, string coercion of booleans.
225
+
226
+ **Database / ORM**
227
+ ```
228
+ application code → ORM query builder → connection pool → DB engine → query planner → indexes → storage
229
+ ```
230
+ Per layer check: is the ORM generating the expected SQL? (log the query), is the connection pool exhausted?, is the query planner using the expected index? (EXPLAIN), is there a transaction holding a lock?
231
+
232
+ Traps: Prisma implicit select (fetching all columns), N+1 queries from relations, connection pool exhaustion from unclosed transactions, migration applied locally but not in prod.
233
+
234
+ **Network / API**
235
+ ```
236
+ client → DNS → CDN/proxy → load balancer → origin server → upstream API → response
237
+ ```
238
+ Per layer check: is the request reaching the origin? (CDN cache, proxy rewrite), is the response being modified? (CORS headers stripped), is there a timeout at this layer? (LB timeout < API response time), is TLS terminating at the right layer?
239
+
240
+ Traps: CDN caching stale responses, proxy rewriting headers, CORS preflight failing at CDN layer, WebSocket connections killed by LB timeout, DNS caching a dead IP.
241
+
242
+ **Build Pipeline**
243
+ ```
244
+ source → preprocessor → TypeScript compiler → bundler → tree-shaking → minifier → output
245
+ ```
246
+ Per layer check: is the source file included in the compilation? (tsconfig includes), is tree-shaking removing code with side effects?, is the bundler resolving the expected module? (duplicate packages), is minification mangling names that are reflected on?
247
+
248
+ Traps: barrel file re-exports defeating tree-shaking, tsconfig paths not matching bundler aliases, package duplicated at different versions in node_modules, CSS modules hashed differently in dev vs prod.
249
+
250
+ **Module / Import Resolution**
251
+ ```
252
+ import statement → tsconfig paths → bundler alias → node_modules → package.json exports → actual file
253
+ ```
254
+ Per layer check: is tsconfig path mapping matching? (baseUrl, paths), is the bundler using different resolution than tsc?, is the package re-exporting from a different version?, are there multiple copies of the same package?
255
+
256
+ Traps: path alias in tsconfig not matching webpack/vite, package using "exports" field that blocks deep imports, monorepo hoisting creating duplicate React instances.
257
+
258
+ **Cross-Repo CI Write-Path (GitHub Actions / shared substrate distribution)**
259
+ ```
260
+ source repo push → Actions trigger → workflow runner → checkout source → cross-repo action → target repo
261
+ ```
262
+ Per layer check: is the workflow trigger firing? (event type, branch filter — check Actions tab), did the runner allocate?, is the cross-repo credential still valid? (PAT expired, GitHub App installation removed), does the credential carry the required target scope?, is the target repo accepting the write? (branch protection, Actions disabled), is the action library on a compatible version?
263
+
264
+ Traps: PAT silently expires without CI failure signal (step reports "success" but opened zero PRs); fine-grained PAT scope reduced after creation; GitHub App installation removed from ONE target while others still work (silent matrix partial-fail); peter-evans/create-pull-request returning no-op when target branch already exists; target repo added branch protection after PAT creation; cross-repo rate limits; `add-paths:` filter silently excluding the intended file; `delete-branch: true` racing with a fresh open; auto-merge stalled waiting on required checks that never ran because Actions was disabled at target.
265
+
266
+ Specific to bassclef substrate distribution: if `BASSCLEF_CONSUMER_WRITE_TOKEN` fails, the publish half (S3 upload) still succeeds because it uses different credentials — the pipeline is half-broken, surfaces only when consumers sync and hit a stale pin. Origin: bassclef#222, 2026-04-20.
267
+
268
+ ### Anti-patterns
269
+
270
+ - Guessing-and-retrying with different parameters
271
+ - Silently working around an error instead of understanding it
272
+ - Fixing the symptom without tracing to root cause
273
+ - Skipping diagnosis because "it's obvious" — it's usually not
274
+ - Fixing at one layer without mapping the full resolution chain — each fix addresses the wrong layer, creating a whack-a-mole pattern that compounds over multiple commits. Origin: POA sticky columns — 16 commits because each attempt fixed one CSS layer without seeing the full containment chain.
275
+ - Assuming the layer you wrote is the only layer involved. Libraries and frameworks routinely add intermediate layers (wrapper divs, middleware, config defaults) that silently override your code. READ THE SOURCE.
276
+
277
+ ### Output discipline
278
+
279
+ Per bassclef#790 (operator-facing-prose discipline): /diagnose output (Step 0 repro, Is/Is Not table, Five Whys, Hypothesis, Resolution Chain) surfaces shorthand (WU-N, F-X.Y, ADR-NNN, #NNN, LF-N) with a plain-language gloss at first mention per response. See `standards/operator-facing-prose-discipline.md` for format examples.
280
+
281
+ Per bassclef#790 Rule 2: any /diagnose SKILL.md edit applies a /kiss pass to the whole file in the same change.
282
+
283
+ ### Refs
284
+
285
+ - `.claude/rules/assert-only-after-verify.md` — Step 0 identifier check sister discipline
286
+ - `.claude/rules/blocked-items.md` — substrate-defect promotion mandatory trigger
287
+ - `.claude/rules/stuck-signal-diagnostic.md` — stuck-counter path that surfaces substrate defects
288
+ - `.claude/hooks/pre-build-gate.sh` — reads the diagnose marker on fix/ branches
289
+ - `.claude/skills/promote/SKILL.md` — pattern promotion downstream skill
290
+ - bet 2026-07-04b — R8 identifier-check parent
291
+ - bet 2026-07-04c WU-4 — Step 0 identifier check shipped
292
+ - bassclef#601 — data semantic rename trigger
293
+ - bassclef#790 — operator-facing-prose discipline
294
+
295
+ ## Output discipline
296
+
297
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,90 @@
1
+ ---
2
+ tier: lite
3
+ name: feynman
4
+ description: "Explain a technical concept in plain English \u2014 Feynman style. For CTO-vettable sidebars in journal entries or standalone micro-posts."
5
+ problem: "Technical concepts get explained with jargon. Non-technical readers stop reading."
6
+ value: "Explains a technical concept in plain English \u2014 Feynman style. For CTO-vettable sidebars in journal entries."
7
+ inputs: [A concept name or paragraph text]
8
+ outputs: [Feynman-style explanation, Analogy anchors, Grade-8 prose]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Feynman — Plain-English Technical Explanation
14
+
15
+ Explain a technical concept so that:
16
+ - A PE operating partner understands why it matters economically
17
+ - A CTO confirms it's technically precise
18
+ - A board member can repeat the core idea in their own words
19
+
20
+ Named after Richard Feynman's principle: if you can't explain it simply,
21
+ you don't understand it well enough.
22
+
23
+ ## When to use
24
+
25
+ - Flagged by /journal as `[FEYNMAN: concept]`
26
+ - User asks "explain X simply" or "feynman this"
27
+ - A post references a technical concept that needs unpacking for
28
+ non-technical senior leaders while remaining CTO-credible
29
+
30
+ ## Method
31
+
32
+ ### Step 1: State what it does in one sentence
33
+
34
+ No jargon. No analogies yet. Just the function.
35
+
36
+ "Temperance is a mandatory pause that forces the system to justify
37
+ its approach before executing."
38
+
39
+ ### Step 2: Explain why it exists — the failure it prevents
40
+
41
+ Connect to a real failure mode that the audience recognizes.
42
+
43
+ "It exists because autonomous systems optimize for throughput. Without
44
+ a pause, the system will retry failed approaches faster rather than
45
+ understanding why they failed — the same pattern that causes large
46
+ engineering organizations to ship broken features faster instead of
47
+ fixing the root cause."
48
+
49
+ ### Step 3: Give the analogy (optional — only if it clarifies)
50
+
51
+ Pick an analogy from the audience's world:
52
+
53
+ - PE: "It's the investment committee memo before deploying capital"
54
+ - Enterprise: "It's the pre-flight checklist — not bureaucracy, but
55
+ the minimum discipline that prevents expensive mistakes"
56
+ - Board: "It's the governance gate between strategy approval and execution"
57
+
58
+ ### Step 4: State the technical precision (for the CTO)
59
+
60
+ One sentence that a technical reviewer would nod at.
61
+
62
+ "Implemented as a pre-execution checklist that evaluates five dimensions:
63
+ simplicity, blast radius, verification cost, reversibility, and whether
64
+ the system is treating symptoms or root causes."
65
+
66
+ ## Output format
67
+
68
+ ```markdown
69
+ ### [Concept Name]
70
+
71
+ **What it does**: [one sentence, no jargon]
72
+
73
+ **Why it exists**: [the failure it prevents, in operating terms]
74
+
75
+ **Analogy**: [from the audience's world — PE, enterprise, or board]
76
+
77
+ **Technical precision**: [one sentence a CTO would verify]
78
+ ```
79
+
80
+ ## Rules
81
+
82
+ - Never more than 4 sentences total for the core explanation
83
+ - The analogy must come from enterprise/PE/board — not academia, not startups
84
+ - If the concept doesn't need all 4 parts, drop the analogy
85
+ - The explanation must be accurate enough that a CTO wouldn't correct it
86
+ - Avoid "it's like..." phrasing — state what it IS, then use analogy only to illuminate
87
+
88
+ ## Output discipline
89
+
90
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,105 @@
1
+ ---
2
+ tier: lite
3
+ name: howdoi
4
+ description: "Search bassclef skills and rules for an adopter goal \u2014 LLM-assisted. Two modes \u2014 search (top matches) and compose (matches plus suggested chains). Ranks by semantic fit and cites what each match does."
5
+ problem: "Adopters know what they want to do but not which bassclef skill or rule fits."
6
+ value: "One question in. A short list of the skills and rules that match your goal."
7
+ inputs: [A one-sentence goal in plain English]
8
+ outputs: [Ranked list of matching skills and rules, One-line reason per match]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ modes: [search, compose]
12
+ composes_baseline: [ash-maurya, alan-cooper]
13
+ ---
14
+
15
+ # /howdoi
16
+
17
+ ## What you get
18
+
19
+ Ask "how do I add auth?" or "how do I test my API?" or "which skill drafts a value prop?". I grep bassclef's skills, rules, and standards for your keywords, use Claude to rank the top 3 matches, and explain what each returns and why it matches. In `compose` mode, I also suggest 1-3 skill chains when your goal spans multiple skills.
20
+
21
+ Modeled on the Python `howdoi` CLI (github.com/gleitz/howdoi) which searches Stack Overflow from the terminal — same shape, adapted to bassclef.
22
+
23
+ ## When to use it
24
+
25
+ Any time you know what you want but have not identified the skill yet. New adopters use it for signup-time questions ("how do I add auth?"). Returning adopters use it to recall a skill name ("which skill drafts a value prop again?"). Mid-flow, run it when you finish one skill and need to pick the next ("I just ran /decompose — what's next?").
26
+
27
+ Skip it when the intent is obvious. If you already know the skill name, run the skill directly. `/howdoi` earns its cost on ambiguous intents.
28
+
29
+ ## FAQ
30
+
31
+ ### What's the difference between search and compose?
32
+
33
+ `search` (default) returns the top 3 matches with a one-line explanation of what each does. `compose` returns the same top 3 plus 1-3 suggested chains when the goal spans multiple skills. Use `search` when you want a single skill; use `compose` when you're planning a workflow.
34
+
35
+ ### How does the ranking work?
36
+
37
+ Two stages. Stage 1 greps `.claude/skills/*/SKILL.md`, `.claude/rules/*.md`, and `standards/*.md` for keywords Claude extracts from your intent (3-5 keywords). Grep returns up to 20 candidates. Stage 2 asks Claude to score each candidate 0-10 for semantic fit against your intent. Top 3 come back with a one-line why-it-matched.
38
+
39
+ Grep is the fast filter; Claude is the semantic ranker.
40
+
41
+ ### What if the top match is wrong?
42
+
43
+ Read the top 3, not just #1. Each match carries a one-line what-it-does + why-it-matched. If none fit, rerun `/howdoi` with a different intent phrasing — the ranking is sensitive to how you frame the goal.
44
+
45
+ If you keep missing, file a ticket. The gap probably means either a skill description is too vague or a skill does not yet exist for the goal.
46
+
47
+ ### Does compose mode always suggest chains?
48
+
49
+ No. Compose mode asks Claude "does this intent span multiple skills?" and returns chains only if the answer is yes. Single-skill goals return just the top 3 matches, same shape as search mode.
50
+
51
+ ### Can /howdoi call other skills for me?
52
+
53
+ No. `/howdoi` surfaces matches; you decide what to run. The value is discovery, not dispatch.
54
+
55
+ ## Details below the fold
56
+
57
+ ### Procedure
58
+
59
+ 1. Ask for the intent — one sentence or a paragraph.
60
+ 2. Claude extracts 3-5 keywords (auth, schema, test, deploy, etc.).
61
+ 3. Grep runs across `.claude/skills/*/SKILL.md`, `.claude/rules/*.md`, `standards/*.md`. Up to 20 candidates.
62
+ 4. Claude scores each candidate 0-10 for semantic fit. Returns top 3.
63
+ 5. Format output — match name, path, one-line what-it-does, why-it-matched score.
64
+ 6. In `compose` mode only — Claude checks whether the intent spans multiple skills. If yes, propose 1-3 chains with rationale.
65
+
66
+ ### Output shape
67
+
68
+ ```markdown
69
+ # /howdoi — matches for "<your intent>"
70
+
71
+ ## Top matches
72
+
73
+ 1. **`/skill-name`** (`.claude/skills/skill-name/`) — description. Match: N/10. Why: <why it matched>.
74
+ 2. ...
75
+ 3. ...
76
+
77
+ ## Suggested chains (compose mode only)
78
+
79
+ **Chain A — <name>:**
80
+ `/X` → `/Y` → `/Z`
81
+
82
+ Rationale: <why this sequence fits the goal>.
83
+ ```
84
+
85
+ ### Anti-patterns this skill prevents
86
+
87
+ - Adopter gives up on discovery — grep alone misses semantic matches ("add auth" will not grep-match `/security-review` reliably). INSTEAD: LLM rank surfaces the fit.
88
+ - Wrong-skill invocation — adopter picks a skill that looks close but does something else. INSTEAD: top 3 with what-it-does explanations lets adopter pick with context.
89
+ - Missing composition — adopter picks one skill when the goal needs a chain. INSTEAD: `compose` mode surfaces the chain shape.
90
+ - Over-fitting to grep — grep is a fast filter, not the final answer. INSTEAD: LLM rank considers what each skill actually does.
91
+
92
+ ### Refs
93
+
94
+ - Ticket #654 — this skill's filing (renamed from `/i-want-to` to `/howdoi` 2026-07-07)
95
+ - Ticket #660 — CI/TDD nudge (split from this skill's original scope)
96
+ - Bet 2026-07-07a — this skill's ship vehicle
97
+ - Python `howdoi` CLI — github.com/gleitz/howdoi (naming precedent)
98
+ - `.claude/rules/skill-composition-declarations.md` — the composability discipline this skill surfaces
99
+ - `/skills` — browse-mode alternative to search
100
+ - `.claude/luminaries/ash-maurya.md` — adopter voice framing
101
+ - `.claude/luminaries/alan-cooper.md` — persona-goal anchor
102
+
103
+ ## Output discipline
104
+
105
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,108 @@
1
+ ---
2
+ tier: lite
3
+ name: ia-model
4
+ description: "Build information architecture from an entity inventory plus task flows. Derives nav structure, labeling, and screen map from the domain nouns."
5
+ problem: "Screens get designed before the nouns behind them are named. Nav drifts across pages."
6
+ value: "One entity map that drives every downstream screen. Nav stays clean because the model is clean."
7
+ inputs: [Task flows from spec, Entity inventory from decompose]
8
+ outputs: [Entity model diagram, Navigation shape, Screen inventory]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Information Architecture — Entity-Driven
14
+
15
+ Build the IA from entities and their relationships. For data-heavy operator tools,
16
+ the IA is entity-driven — screens derive from objects, not content hierarchies.
17
+
18
+ ## When to Use
19
+
20
+ - After `/jtbd-tasks` and `/task-scenarios` — you have task flows and stories
21
+ - When navigation feels wrong or pages overlap in purpose
22
+ - When adding a new entity (new database model, new concept)
23
+ - When the user says "I don't know where to find X" or "these pages feel redundant"
24
+ - UX fitness review flags drift (new entities without UI surface, nav doesn't match)
25
+
26
+ ## Method: Object-Oriented UX (OOUX)
27
+
28
+ ### Step 1: Entity Inventory
29
+
30
+ List every object the system represents:
31
+
32
+ | Entity | Attributes | Relationships | UI Surface |
33
+ |--------|-----------|---------------|------------|
34
+ | ... | ... | ... | /path |
35
+
36
+ ### Step 2: Entity Relationship Map
37
+
38
+ Draw the relationships (Mermaid ERD or graph).
39
+
40
+ ### Step 3: Screen Derivation
41
+
42
+ **Each primary entity gets a list view and a detail view.** Secondary entities appear within their parent's views. This is the core OOUX principle.
43
+
44
+ | Entity | List View | Detail View | Appears In |
45
+ |--------|-----------|-------------|------------|
46
+ | ... | /path | /path/[id] | ... |
47
+
48
+ ### Step 4: Navigation Structure
49
+
50
+ Derive nav from the screen map. Apply Peter Morville's IA framework:
51
+ - **Organization**: How are screens grouped?
52
+ - **Labeling**: What do we call each nav item? Match the user's mental model.
53
+ - **Navigation**: Primary nav (always visible) vs secondary (contextual).
54
+ - **Search**: When is filtering better than browsing?
55
+
56
+ ### Step 5: Apply LATCH
57
+
58
+ 5 ways to organize information — pick the right one per context:
59
+ - **L**ocation: geographic grouping
60
+ - **A**lphabet: alphabetical (rarely useful)
61
+ - **T**ime: chronological (recent first)
62
+ - **C**ategory: by type or classification
63
+ - **H**ierarchy: by importance or score
64
+
65
+ ## Output Format
66
+
67
+ ```markdown
68
+ ## Entity Inventory
69
+ [table]
70
+
71
+ ## Entity Map
72
+ [Mermaid diagram]
73
+
74
+ ## Screen Map
75
+ [table: entity → list view, detail view, appears in]
76
+
77
+ ## Navigation Structure
78
+ [primary nav, contextual nav, future nav]
79
+
80
+ ## LATCH Analysis
81
+ [which organization scheme for which context]
82
+
83
+ ## Gap Analysis
84
+ - Entities without UI surfaces
85
+ - Screens without clear entity ownership
86
+ - Nav items that don't map to entities or jobs
87
+ ```
88
+
89
+ ## Component Naming Convention
90
+
91
+ UI components should be **named after domain objects**, not generic UI concepts:
92
+ - `DealCard` not `Card`
93
+ - `ScorePills` not `BadgeGroup`
94
+ - `ThesisFilter` not `TabGroup`
95
+
96
+ ## Next Step
97
+
98
+ Feeds into `/interaction-design` (state diagrams, sequence diagrams).
99
+
100
+ ## References
101
+
102
+ - Sophia Prater, OOUX methodology (ooux.com)
103
+ - Peter Morville & Louis Rosenfeld, *Information Architecture for the World Wide Web*
104
+ - Abby Covert, *How to Make Sense of Any Mess*
105
+
106
+ ## Output discipline
107
+
108
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.