@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.
- package/dist/cli.cjs +65 -0
- package/dist/cli.js +65 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- 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.
|