@thebassclef/lite 1.0.3 → 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 +92 -6
- package/dist/cli.js +92 -6
- 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,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Bassclef core picks luminaries for variant generation via a single LLM call to the configured model provider.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Luminary Matching — Bassclef Core LLM Pick
|
|
7
|
+
|
|
8
|
+
Bassclef core picks luminaries for variant generation via a **single LLM call** to the configured model provider. The model reads the operator's intent paragraph plus a compact catalog summary (slug + primary domain + name) and returns N slugs whose perspective fits the UX + interaction patterns the intent implies.
|
|
9
|
+
|
|
10
|
+
No separate embedding vendor. No second-stage judge. One call, one provider, one model key — the same key the consumer is already using for everything else.
|
|
11
|
+
|
|
12
|
+
Adopters running the optional two-repo pattern (per `standards/operator-private-discipline.md`) who want richer signal (embedding shortlist + LLM judge) layer their own `/extract-intent` skill in their operator-private sibling via `additionalDirectories`. When loaded, that skill takes precedence and bassclef core stays oblivious.
|
|
13
|
+
|
|
14
|
+
## Rule
|
|
15
|
+
|
|
16
|
+
Bassclef core's luminary picker uses:
|
|
17
|
+
|
|
18
|
+
- The operator's intent text (from `InputArtifact.intent` or a paragraph supplied at dispatch)
|
|
19
|
+
- The catalog at `state/luminary-implementations/*.json` (slug + primary_domain + name only)
|
|
20
|
+
- The configured model provider (`config/model-routing.yaml`)
|
|
21
|
+
|
|
22
|
+
It does NOT use:
|
|
23
|
+
|
|
24
|
+
- Separate embedding APIs
|
|
25
|
+
- Keyword/regex/grep scoring as the primary path
|
|
26
|
+
- Pre-computed embeddings cache
|
|
27
|
+
|
|
28
|
+
## When matching fires
|
|
29
|
+
|
|
30
|
+
Any composer or skill that needs to ground variant generation in named luminaries:
|
|
31
|
+
|
|
32
|
+
- `/launch` Phase 3.5 — variants pre-grounded
|
|
33
|
+
- `/stage` Phase 3.5 — same
|
|
34
|
+
- `/riff-prototypes` — when invoked standalone (no upstream grounding artifact)
|
|
35
|
+
- `/luminary recommend` — when LLM picker is available
|
|
36
|
+
|
|
37
|
+
The picker fires once per intent. Variant generation in Phase 4 reads its output and assigns luminaries to the N luminary-driven variants. The Anthropic baseline always lands regardless.
|
|
38
|
+
|
|
39
|
+
## Adapter — `lib/luminary-pick.sh`
|
|
40
|
+
|
|
41
|
+
The adapter exposes:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
luminary_pick "<intent text>" <N> <output_json_path> # full pipeline
|
|
45
|
+
luminary_pick_status # report LIVE or OFFLINE
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Output JSON shape:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"matched_luminaries": ["alan-cooper", "edward-tufte", "jakob-nielsen"],
|
|
53
|
+
"rationale": "Cooper for goal-directed flows; Tufte for data density; Nielsen for findability.",
|
|
54
|
+
"picker_version": "bassclef-llm-pick-1.0"
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Modes
|
|
59
|
+
|
|
60
|
+
| Mode | Trigger | Behavior |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| **LIVE** | `ANTHROPIC_API_KEY` set | Single LLM call; returns matched slugs |
|
|
63
|
+
| **OFFLINE** | Key missing or LLM call fails | Picker refuses; downstream falls back to `/luminary recommend` signal scoring |
|
|
64
|
+
|
|
65
|
+
## Fallback path
|
|
66
|
+
|
|
67
|
+
If the LLM picker refuses or errors:
|
|
68
|
+
|
|
69
|
+
1. Composer logs the refusal
|
|
70
|
+
2. Falls back to `/luminary recommend` signal scoring (keyword + Garrett-plane + primary-domain coverage)
|
|
71
|
+
3. Continues with variant generation against the signal-scored picks
|
|
72
|
+
|
|
73
|
+
Operator can also opt into the signal-scoring path explicitly via `/riff-prototypes --use-signal-scoring` to skip the LLM call entirely.
|
|
74
|
+
|
|
75
|
+
## Operator-private override (optional two-repo pattern)
|
|
76
|
+
|
|
77
|
+
Adopters running the optional two-repo pattern (per `standards/operator-private-discipline.md`) can layer their own `/extract-intent` skill — operator-private substrate that ships richer signal (embedding shortlist + LLM judge) — via `additionalDirectories` injection. When that skill is present:
|
|
78
|
+
|
|
79
|
+
- `/launch`, `/stage`, `/riff-prototypes` prefer the operator-private `extracted_intent_grounding.matched_luminaries`
|
|
80
|
+
- bassclef-core's `/pick-luminaries` becomes a fallback path
|
|
81
|
+
- bassclef core stays oblivious to whether the operator-private override is loaded
|
|
82
|
+
|
|
83
|
+
This is the SENTINEL_bassclef_pattern: the operator-private sibling is a superset of bassclef-core. Operators load both and get the upgraded experience; cold adopters load only bassclef and get the LLM-pick default.
|
|
84
|
+
|
|
85
|
+
## Composes with
|
|
86
|
+
|
|
87
|
+
- `lib/luminary-pick.sh` — the adapter
|
|
88
|
+
- `.claude/skills/pick-luminaries/SKILL.md` — operator-callable wrapper
|
|
89
|
+
- `state/luminary-implementations/*.json` — catalog manifest
|
|
90
|
+
- `config/model-routing.yaml` — provider selection
|
|
91
|
+
- `/launch` Phase 3.5 + `/stage` Phase 3.5 + `/riff-prototypes` — consumers
|
|
92
|
+
|
|
93
|
+
## Override + escape hatches
|
|
94
|
+
|
|
95
|
+
- `/riff-prototypes --luminaries=<slug1>,<slug2>,...` — operator pin (skips picker entirely)
|
|
96
|
+
- `/riff-prototypes --use-signal-scoring` — skip LLM pick; use `/luminary recommend` signal scoring
|
|
97
|
+
- `LUMINARY_PICK_MODEL=<id>` — override the default Haiku-4-5 model
|
|
98
|
+
|
|
99
|
+
## Sources read
|
|
100
|
+
|
|
101
|
+
- bassclef#476 LR8.10/8.11 — luminary catalog + traceability
|
|
102
|
+
- bassclef#944 — Voyage matcher excision; replaces ADR-017's two-vendor pipeline with this LLM-pick approach
|
|
103
|
+
- docs/iteration-bets/2026-06-13a-cold-adopter-unboxing-arc.md — parent goal (WU-3)
|
|
104
|
+
- `standards/model-routing-discipline.md` — provider selection mechanism this adapter uses
|
|
105
|
+
|
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: "Auto-generated. Do not hand-edit. Re-run via: bash scripts/luminary-problem-patterns-aggregate.sh"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Luminary problem-pattern catalog
|
|
7
|
+
|
|
8
|
+
**Auto-generated.** Do not hand-edit. Re-run via:
|
|
9
|
+
```
|
|
10
|
+
bash scripts/luminary-problem-patterns-aggregate.sh
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This index reads every `.claude/luminaries/*.md` file's frontmatter and
|
|
14
|
+
extracts the `solves_problems_brownfield`, `solves_problems_greenfield`,
|
|
15
|
+
and `anti_patterns` arrays. The agent reads this index when running
|
|
16
|
+
`/luminary recommend` against a plain-English problem statement.
|
|
17
|
+
|
|
18
|
+
## Coverage
|
|
19
|
+
|
|
20
|
+
- **20 / 77** luminaries have problem-pattern frontmatter
|
|
21
|
+
- Backfill tracker: `docs/luminary-problem-pattern-backfill.md`
|
|
22
|
+
|
|
23
|
+
## Catalog (alphabetical by slug)
|
|
24
|
+
|
|
25
|
+
### Aarron Walter (`aarron-walter`)
|
|
26
|
+
|
|
27
|
+
- **Domain:** ux | **Depth:** full
|
|
28
|
+
|
|
29
|
+
**Solves (brownfield — existing UI):**
|
|
30
|
+
- Existing product feels functional but cold — users complete tasks without engagement
|
|
31
|
+
- Microcopy is generic; brand voice doesn't come through
|
|
32
|
+
- Empty states, error states, and waiting states feel like dead ends instead of moments
|
|
33
|
+
|
|
34
|
+
**Solves (greenfield — 0→1 design):**
|
|
35
|
+
- Designing a new consumer product where personality should differentiate from day one
|
|
36
|
+
- Building microcopy + tone-of-voice as core design elements, not decoration
|
|
37
|
+
- Planning a product where emotional engagement matters as much as task completion
|
|
38
|
+
- Designing empty/error/waiting states as moments of brand expression in a fresh build
|
|
39
|
+
|
|
40
|
+
**Anti-patterns (when NOT to channel):**
|
|
41
|
+
- Regulated, clinical, or compliance-heavy surfaces — Walter is too playful
|
|
42
|
+
- Power-tool or data-dense surfaces where personality slows the user down
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Abby Covert (`abby-covert`)
|
|
47
|
+
|
|
48
|
+
- **Domain:** ux | **Depth:** stub
|
|
49
|
+
|
|
50
|
+
**Solves (brownfield — existing UI):**
|
|
51
|
+
- Content exists but users can't make sense of how it relates
|
|
52
|
+
- Labels are inconsistent across surfaces; same thing has different names
|
|
53
|
+
- Information architecture is a mess but team can't see it
|
|
54
|
+
|
|
55
|
+
**Solves (greenfield — 0→1 design):**
|
|
56
|
+
- Starting a content-heavy or knowledge-base product where taxonomy must precede screens
|
|
57
|
+
- Designing IA before any UI for a multi-domain app
|
|
58
|
+
- Building a sense-making system where labeling discipline is a first-class concern
|
|
59
|
+
- Designing a product where 'naming things consistently' will be a recurring discipline
|
|
60
|
+
|
|
61
|
+
**Anti-patterns (when NOT to channel):**
|
|
62
|
+
- Single-screen or single-task tools
|
|
63
|
+
- Pure visual or motion work
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### Alan Cooper (`alan-cooper`)
|
|
68
|
+
|
|
69
|
+
- **Domain:** ux | **Depth:** full
|
|
70
|
+
|
|
71
|
+
**Solves (brownfield — existing UI):**
|
|
72
|
+
- Existing UI exposes the system's structure when users want their workflow
|
|
73
|
+
- Power users keep retracing the same multi-step path through the current UI
|
|
74
|
+
- Persona research surfaces a goal but the existing UI optimizes for novice exploration
|
|
75
|
+
- App is feature-rich but each user wants only one slice for their job
|
|
76
|
+
|
|
77
|
+
**Solves (greenfield — 0→1 design):**
|
|
78
|
+
- Designing a workflow-heavy app for returning users with named goals
|
|
79
|
+
- Building a product where personas + scenarios should drive the UI before any screen sketch
|
|
80
|
+
- Planning a tool for power users who need their job-specific slice surfaced from day one
|
|
81
|
+
- Mid-complexity product where personas keep early design decisions grounded in real users
|
|
82
|
+
|
|
83
|
+
**Anti-patterns (when NOT to channel):**
|
|
84
|
+
- Truly simple consumer apps — Cooper overweights workflow modeling
|
|
85
|
+
- First-launch novelty experiences — goal-directed assumes a returning user
|
|
86
|
+
- Pure marketing or storytelling surfaces
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Anthropic frontend-design skill — BASELINE COMPOSES-WITH, NOT A LUMINARY
|
|
91
|
+
|
|
92
|
+
Anthropic's `frontend-design` skill is the implicit baseline default adopters get from plain Claude. Bassclef's authoring skills (`/frontend-design`, `/riff-prototypes`, `/launch`, `/visual-review`) declare `composes_baseline: anthropic-frontend-design` in their frontmatter and extend the baseline with luminary-pair commitment, design tokens, and visual-review discipline.
|
|
93
|
+
|
|
94
|
+
This baseline is not a luminary catalog entry; it ships with the upstream skill catalog Anthropic publishes. Bassclef extends; bassclef does not author the baseline. Adopters firing plain Claude (no bassclef substrate) inherit the baseline's typography + color + motion + spatial-composition guidance for free.
|
|
95
|
+
|
|
96
|
+
See `.claude/skills/frontend-design/SKILL.md` for bassclef's baseline composition declaration and the specific extensions bassclef adds.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### Apple Human Interface Guidelines (HIG) (`apple-hig`)
|
|
101
|
+
|
|
102
|
+
- **Domain:** visual | **Depth:** stub
|
|
103
|
+
|
|
104
|
+
**Solves (brownfield — existing UI):**
|
|
105
|
+
- Existing app fights iOS / macOS conventions instead of feeling native
|
|
106
|
+
- Design has too many ideas competing for attention; restraint would clarify
|
|
107
|
+
- Brand identity is overpowering platform conventions in the current UI
|
|
108
|
+
- Polish is missing — corners, transitions, depth feel cheap
|
|
109
|
+
|
|
110
|
+
**Solves (greenfield — 0→1 design):**
|
|
111
|
+
- Designing an app for one specific Apple platform where native fit is a value
|
|
112
|
+
- Building a product where restraint and platform conventions matter more than expression
|
|
113
|
+
- Planning a polished consumer app on iOS / macOS / iPadOS
|
|
114
|
+
- Designing for a platform whose users expect HIG-shaped affordances by default
|
|
115
|
+
|
|
116
|
+
**Anti-patterns (when NOT to channel):**
|
|
117
|
+
- Cross-platform brand-led design where native fit isn't the goal
|
|
118
|
+
- Highly differentiated brand surfaces — Apple HIG forces convention over voice
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### BJ Fogg (`bj-fogg`)
|
|
123
|
+
|
|
124
|
+
- **Domain:** ux | **Depth:** stub
|
|
125
|
+
|
|
126
|
+
**Solves (brownfield — existing UI):**
|
|
127
|
+
- Users sign up but don't return; existing onboarding doesn't form a habit
|
|
128
|
+
- Notifications fire but don't drive the right action
|
|
129
|
+
- Existing onboarding tour overwhelms instead of landing a tiny first success
|
|
130
|
+
|
|
131
|
+
**Solves (greenfield — 0→1 design):**
|
|
132
|
+
- Designing a behavior-change product (fitness, habit, learning) where motivation × ability × trigger must align
|
|
133
|
+
- Building an onboarding flow that lands a tiny first success on day one
|
|
134
|
+
- Planning a product whose retention will depend on habit formation
|
|
135
|
+
- Designing notification logic where the right trigger fires the right action from launch
|
|
136
|
+
|
|
137
|
+
**Anti-patterns (when NOT to channel):**
|
|
138
|
+
- Power-tool surfaces where the user already has motivation
|
|
139
|
+
- B2B or compliance-heavy surfaces where behavior change isn't the goal
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
### Brad Frost (`brad-frost`)
|
|
144
|
+
|
|
145
|
+
- **Domain:** visual | **Depth:** full
|
|
146
|
+
|
|
147
|
+
**Solves (brownfield — existing UI):**
|
|
148
|
+
- Existing component library is a flat dump with gaps in mid-level molecules and organisms
|
|
149
|
+
- Designers and engineers describe components inconsistently
|
|
150
|
+
- Pattern library exists but doesn't compose into actual pages
|
|
151
|
+
|
|
152
|
+
**Solves (greenfield — 0→1 design):**
|
|
153
|
+
- Designing a fresh design system from atoms upward
|
|
154
|
+
- Building a component hierarchy that will scale across many surfaces
|
|
155
|
+
- Planning a system where pattern composition is a first-class discipline from day one
|
|
156
|
+
- Designing a token + component + template + page taxonomy for a new product
|
|
157
|
+
|
|
158
|
+
**Anti-patterns (when NOT to channel):**
|
|
159
|
+
- Single-screen prototypes — atomic design is for systems
|
|
160
|
+
- Marketing one-offs or campaign pages
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### Dieter Rams (`dieter-rams`)
|
|
165
|
+
|
|
166
|
+
- **Domain:** visual | **Depth:** full
|
|
167
|
+
|
|
168
|
+
**Solves (brownfield — existing UI):**
|
|
169
|
+
- Existing design has accumulated features and visual elements that don't earn their place
|
|
170
|
+
- Each component does too much; honest functional expression would simplify
|
|
171
|
+
- Aesthetic feels dated because of decoration, not because of underlying function
|
|
172
|
+
|
|
173
|
+
**Solves (greenfield — 0→1 design):**
|
|
174
|
+
- Designing a product where less-but-better is the explicit value
|
|
175
|
+
- Building a tool whose visual identity should follow function, not lead it
|
|
176
|
+
- Planning a long-lived product where ruthless reduction will be a recurring discipline
|
|
177
|
+
- Designing a fresh product where every element must justify its presence from day one
|
|
178
|
+
|
|
179
|
+
**Anti-patterns (when NOT to channel):**
|
|
180
|
+
- Maximalist or expressive brand surfaces
|
|
181
|
+
- Storytelling or narrative-driven surfaces
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
### Don Norman (`don-norman`)
|
|
186
|
+
|
|
187
|
+
- **Domain:** ux | **Depth:** full
|
|
188
|
+
|
|
189
|
+
**Solves (brownfield — existing UI):**
|
|
190
|
+
- Users keep clicking the wrong thing or missing a button; affordances are unclear
|
|
191
|
+
- Interface error messages punish the user rather than help them recover
|
|
192
|
+
- Mental model and system model have diverged — users predict wrong outcomes
|
|
193
|
+
- Mode visibility is missing; users don't know what state they're in
|
|
194
|
+
|
|
195
|
+
**Solves (greenfield — 0→1 design):**
|
|
196
|
+
- Designing a new control surface where affordance language must be self-evident from first encounter
|
|
197
|
+
- Building a tool whose error model should help users recover, not punish
|
|
198
|
+
- Planning a product where mappings between control and effect must feel natural from day one
|
|
199
|
+
- Designing a system where visibility of state is a first-class concern
|
|
200
|
+
|
|
201
|
+
**Anti-patterns (when NOT to channel):**
|
|
202
|
+
- Designs whose primary value is delight or emotional resonance — Norman optimizes for clarity, not joy
|
|
203
|
+
- Highly abstract or conceptual UIs where direct manipulation isn't the model
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### Edward Tufte (`edward-tufte`)
|
|
208
|
+
|
|
209
|
+
- **Domain:** visual | **Depth:** full
|
|
210
|
+
|
|
211
|
+
**Solves (brownfield — existing UI):**
|
|
212
|
+
- UI shows many numbers or trends in compressed space and legibility is breaking down
|
|
213
|
+
- Dashboard has accumulated decoration and chart-junk; signal is buried
|
|
214
|
+
- Multi-dimensional data displays are letting one dimension drown out others
|
|
215
|
+
- Users decode the chart before understanding the message
|
|
216
|
+
|
|
217
|
+
**Solves (greenfield — 0→1 design):**
|
|
218
|
+
- Planning a dashboard, financial report, or analytics UI that must show dense data clearly from day one
|
|
219
|
+
- Designing a surface where multiple quantitative dimensions need to coexist without one drowning the others
|
|
220
|
+
- Building a tool for domain experts who read data faster than narrative
|
|
221
|
+
- Need small multiples or sparklines as the main display element in the new design
|
|
222
|
+
|
|
223
|
+
**Anti-patterns (when NOT to channel):**
|
|
224
|
+
- Sparse, narrative-heavy surfaces — Tufte over-compresses
|
|
225
|
+
- Consumer-emotional or marketing surfaces — Tufte reads as cold
|
|
226
|
+
- First-time onboarding flows — density assumes domain familiarity
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
### Ellen Lupton (`ellen-lupton`)
|
|
231
|
+
|
|
232
|
+
- **Domain:** visual | **Depth:** full
|
|
233
|
+
|
|
234
|
+
**Solves (brownfield — existing UI):**
|
|
235
|
+
- Page reads as a wall of undifferentiated text
|
|
236
|
+
- Visual hierarchy is broken — every element claims equal importance
|
|
237
|
+
- Typography is inconsistent across pages or feels chosen by accident
|
|
238
|
+
- Reading rhythm is broken by mis-set line height, measure, or contrast
|
|
239
|
+
|
|
240
|
+
**Solves (greenfield — 0→1 design):**
|
|
241
|
+
- Designing a content-heavy product where reading rhythm is core to the experience
|
|
242
|
+
- Setting type scale and hierarchy from scratch for a new brand or system
|
|
243
|
+
- Planning a long-form or editorial surface where typeface choice carries voice
|
|
244
|
+
- Building a fresh product where brand voice should come through in the typeface from day one
|
|
245
|
+
|
|
246
|
+
**Anti-patterns (when NOT to channel):**
|
|
247
|
+
- Pure data-density surfaces — Tufte is a better fit than Lupton
|
|
248
|
+
- Engineering-internal tools where readability beats voice
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### Erika Hall (`erika-hall`)
|
|
253
|
+
|
|
254
|
+
- **Domain:** ux | **Depth:** full
|
|
255
|
+
|
|
256
|
+
**Solves (brownfield — existing UI):**
|
|
257
|
+
- Team is shipping based on assumptions, not evidence about users
|
|
258
|
+
- Research is happening but findings don't reach decisions
|
|
259
|
+
- Discovery work is being skipped because of velocity pressure
|
|
260
|
+
|
|
261
|
+
**Solves (greenfield — 0→1 design):**
|
|
262
|
+
- Starting a new product and need contextual inquiry to ground the thesis
|
|
263
|
+
- Designing discovery research before any UI is sketched
|
|
264
|
+
- Building a research practice into the team's discipline from day one
|
|
265
|
+
- Designing a product where 'we don't know what users actually do' is the first risk to retire
|
|
266
|
+
|
|
267
|
+
**Anti-patterns (when NOT to channel):**
|
|
268
|
+
- Late-stage refinement work where research is already done
|
|
269
|
+
- Engineering-only surfaces where users aren't directly relevant
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### Google Material Design (`google-material`)
|
|
274
|
+
|
|
275
|
+
- **Domain:** visual | **Depth:** stub
|
|
276
|
+
|
|
277
|
+
**Solves (brownfield — existing UI):**
|
|
278
|
+
- Existing component library lacks systematic spacing, color, type tokens
|
|
279
|
+
- Cross-platform consistency is breaking; surfaces look like different products
|
|
280
|
+
- Theming and dynamic color aren't working across user preferences
|
|
281
|
+
|
|
282
|
+
**Solves (greenfield — 0→1 design):**
|
|
283
|
+
- Designing a multi-surface system where systematic tokens and density tiers are needed from the start
|
|
284
|
+
- Building cross-platform consistency without bespoke per-platform polish
|
|
285
|
+
- Planning a product where theming + accessibility are core, not retrofitted
|
|
286
|
+
- Designing component density tiers (compact / standard / comfortable) into the system from day one
|
|
287
|
+
|
|
288
|
+
**Anti-patterns (when NOT to channel):**
|
|
289
|
+
- Highly distinctive brand surfaces — Material genericizes
|
|
290
|
+
- Premium or differentiated visual identity work
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
### Jakob Nielsen (`jakob-nielsen`)
|
|
295
|
+
|
|
296
|
+
- **Domain:** ux | **Depth:** stub
|
|
297
|
+
|
|
298
|
+
**Solves (brownfield — existing UI):**
|
|
299
|
+
- Existing UI needs structured expert evaluation against usability heuristics
|
|
300
|
+
- Usability violations are happening but team has no checklist to catch them
|
|
301
|
+
- Standardization across the product matters but discipline is loose
|
|
302
|
+
|
|
303
|
+
**Solves (greenfield — 0→1 design):**
|
|
304
|
+
- Building a new product and want heuristic review baked into the design discipline
|
|
305
|
+
- Designing checkpoints where heuristic evaluation can fire before user testing
|
|
306
|
+
- Planning a product where standardization across surfaces will be a measurable goal
|
|
307
|
+
- Setting up an evaluation framework for a product about to launch
|
|
308
|
+
|
|
309
|
+
**Anti-patterns (when NOT to channel):**
|
|
310
|
+
- Generative or first-pass design — Nielsen evaluates, doesn't ideate
|
|
311
|
+
- Brand or emotional surfaces where heuristics miss the point
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
### Jenifer Tidwell (`jenifer-tidwell`)
|
|
316
|
+
|
|
317
|
+
- **Domain:** ux | **Depth:** full
|
|
318
|
+
|
|
319
|
+
**Solves (brownfield — existing UI):**
|
|
320
|
+
- Common interaction in current UI is being reinvented when proven patterns exist
|
|
321
|
+
- Designer is choosing novel solutions where well-known answers are better
|
|
322
|
+
- Existing design lacks shared vocabulary for interaction choices across team
|
|
323
|
+
|
|
324
|
+
**Solves (greenfield — 0→1 design):**
|
|
325
|
+
- Composing a new app from proven interaction patterns instead of inventing each one
|
|
326
|
+
- Need a vocabulary to communicate interaction choices to engineering on a fresh build
|
|
327
|
+
- Building complex flows; want to compose from named patterns first, novel last
|
|
328
|
+
- Designing a multi-flow product where interaction patterns must be consistent from day one
|
|
329
|
+
|
|
330
|
+
**Anti-patterns (when NOT to channel):**
|
|
331
|
+
- Bleeding-edge novel interactions — Tidwell catalogs proven patterns, not invents new ones
|
|
332
|
+
- Pure visual or brand-driven surfaces
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
### Jesse James Garrett (`jesse-james-garrett`)
|
|
337
|
+
|
|
338
|
+
- **Domain:** ux | **Depth:** full
|
|
339
|
+
|
|
340
|
+
**Solves (brownfield — existing UI):**
|
|
341
|
+
- Project mixes strategy, scope, structure, skeleton, and surface decisions in one conversation
|
|
342
|
+
- Surface decisions are over-determining structural choices in the existing UI
|
|
343
|
+
- Team can't agree on which decisions belong at which level
|
|
344
|
+
|
|
345
|
+
**Solves (greenfield — 0→1 design):**
|
|
346
|
+
- Starting a multi-surface product where the five planes should sequence design decisions
|
|
347
|
+
- Building a UX strategy that decomposes work into orderable layers from day one
|
|
348
|
+
- Planning a product where strategy precedes scope precedes structure precedes skeleton precedes surface
|
|
349
|
+
- Designing a multi-month product where UX governance needs explicit decision-tier vocabulary
|
|
350
|
+
|
|
351
|
+
**Anti-patterns (when NOT to channel):**
|
|
352
|
+
- Tactical UI fixes where the five planes is overhead
|
|
353
|
+
- Single-page or single-screen work
|
|
354
|
+
- - **Strategy** — user needs + product objectives. What success means.
|
|
355
|
+
- - **Scope** — functional specifications + content requirements. What
|
|
356
|
+
- - **Structure** — interaction design + information architecture. How
|
|
357
|
+
- - **Skeleton** — interface design, navigation design, information
|
|
358
|
+
- - **Surface** — sensory design (visual, auditory). How it looks and
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
### Luke Wroblewski (`luke-wroblewski`)
|
|
363
|
+
|
|
364
|
+
- **Domain:** ux | **Depth:** stub
|
|
365
|
+
|
|
366
|
+
**Solves (brownfield — existing UI):**
|
|
367
|
+
- Existing form has many fields and abandonment is high
|
|
368
|
+
- Mobile experience is desktop-first squeezed into small screens
|
|
369
|
+
- Input types, validation, and progressive disclosure aren't optimized for thumbs
|
|
370
|
+
|
|
371
|
+
**Solves (greenfield — 0→1 design):**
|
|
372
|
+
- Designing a mobile-first product where forms are core to the value
|
|
373
|
+
- Planning input surfaces where progressive disclosure must be designed from the start
|
|
374
|
+
- Building for mobile users where thumb-zone economy matters
|
|
375
|
+
- Designing form flows where staged input (now / later / never-asked) is a first-class concern
|
|
376
|
+
|
|
377
|
+
**Anti-patterns (when NOT to channel):**
|
|
378
|
+
- Read-only data display — Wroblewski is for input
|
|
379
|
+
- Desktop-power-tool surfaces where mobile isn't primary
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
### Peter Morville (`peter-morville`)
|
|
384
|
+
|
|
385
|
+
- **Domain:** ux | **Depth:** full
|
|
386
|
+
|
|
387
|
+
**Solves (brownfield — existing UI):**
|
|
388
|
+
- Users can't find content that exists in the product
|
|
389
|
+
- Information architecture has no consistent labeling or hierarchy
|
|
390
|
+
- Search returns results but not the RIGHT results
|
|
391
|
+
- Navigation grew organically and now no one knows the full structure
|
|
392
|
+
|
|
393
|
+
**Solves (greenfield — 0→1 design):**
|
|
394
|
+
- Designing a content-heavy product where findability will be core from day one
|
|
395
|
+
- Planning the IA before screens for a multi-section app
|
|
396
|
+
- Building search + browse surfaces where wayfinding is a first-class concern
|
|
397
|
+
- Designing a product for an audience where findability matters more than discoverability
|
|
398
|
+
|
|
399
|
+
**Anti-patterns (when NOT to channel):**
|
|
400
|
+
- Single-screen tools or focused workflows — Morville is for multi-page IA
|
|
401
|
+
- Brand or marketing surfaces where wayfinding isn't the job
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
### Sophia V. Prater (`sophia-prater`)
|
|
406
|
+
|
|
407
|
+
- **Domain:** ux | **Depth:** full
|
|
408
|
+
|
|
409
|
+
**Solves (brownfield — existing UI):**
|
|
410
|
+
- Existing multi-entity app where users mentally model objects but UI exposes screens or processes
|
|
411
|
+
- Same entity appears in many flows but isn't unified as a concept
|
|
412
|
+
- Navigation doesn't reflect the domain's noun structure
|
|
413
|
+
|
|
414
|
+
**Solves (greenfield — 0→1 design):**
|
|
415
|
+
- Designing a CRUD-heavy or domain-rich product where entity relationships should drive the UI
|
|
416
|
+
- Planning IA from the domain model first, not from process flows
|
|
417
|
+
- Building an app where users will mentally manipulate objects and the UI should match from day one
|
|
418
|
+
- Designing a multi-entity product where consistent entity expression matters across surfaces
|
|
419
|
+
|
|
420
|
+
**Anti-patterns (when NOT to channel):**
|
|
421
|
+
- Process-driven workflows where actions matter more than objects
|
|
422
|
+
- Single-entity tools or marketing surfaces
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
### Steve Krug (`steve-krug`)
|
|
427
|
+
|
|
428
|
+
- **Domain:** ux | **Depth:** stub
|
|
429
|
+
|
|
430
|
+
**Solves (brownfield — existing UI):**
|
|
431
|
+
- Existing interface forces users to read or think more than the task warrants
|
|
432
|
+
- User testing keeps surfacing the same friction points but team can't see them
|
|
433
|
+
- Self-evident affordances are missing in the current UI; users hesitate before every click
|
|
434
|
+
- Navigation, labels, and structure aren't immediately obvious
|
|
435
|
+
|
|
436
|
+
**Solves (greenfield — 0→1 design):**
|
|
437
|
+
- Designing a consumer or low-engagement product where 'don't make me think' is the bar
|
|
438
|
+
- Building a new public-facing surface where usability is the core differentiator
|
|
439
|
+
- Planning a tool that needs to be self-evident from first encounter
|
|
440
|
+
- Designing a product whose audience will not invest effort to learn the interface
|
|
441
|
+
|
|
442
|
+
**Anti-patterns (when NOT to channel):**
|
|
443
|
+
- Power-user tools where complexity is the value
|
|
444
|
+
- Domain-expert surfaces where 'don't make me think' undersells the user
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## How `/luminary recommend` consumes this
|
|
449
|
+
|
|
450
|
+
The agent reads this aggregate as one of its signal sources when ranking
|
|
451
|
+
luminaries against an operator's plain-English problem statement. The
|
|
452
|
+
modality of the operator's input (brownfield refactor vs greenfield
|
|
453
|
+
concept) determines which array is matched:
|
|
454
|
+
|
|
455
|
+
- Operator input mentions "existing UI", "current product", "today's
|
|
456
|
+
app" → match against `solves_problems_brownfield` arrays
|
|
457
|
+
- Operator input mentions "designing", "planning", "building",
|
|
458
|
+
"0→1", "from scratch" → match against `solves_problems_greenfield`
|
|
459
|
+
arrays
|
|
460
|
+
- Ambiguous input → match against both, weighted by signal strength
|
|
461
|
+
|
|
462
|
+
`anti_patterns` always subtract from a luminary's score when the
|
|
463
|
+
operator's input matches an entry — regardless of modality.
|
|
464
|
+
|
|
465
|
+
## Schema (per luminary file)
|
|
466
|
+
|
|
467
|
+
```yaml
|
|
468
|
+
solves_problems_brownfield:
|
|
469
|
+
- "Plain-English symptom statement (~80 chars)"
|
|
470
|
+
- "..."
|
|
471
|
+
solves_problems_greenfield:
|
|
472
|
+
- "Plain-English opportunity statement (~80 chars)"
|
|
473
|
+
- "..."
|
|
474
|
+
anti_patterns:
|
|
475
|
+
- "When NOT to channel (Welch INSTEAD-block)"
|
|
476
|
+
- "..."
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
All three fields are optional during backfill (LR6 onward). A luminary
|
|
480
|
+
with no problem-pattern frontmatter doesn't appear in this aggregate
|
|
481
|
+
but remains in the catalog for `/luminary` browsing.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: The ActiveRecord sibling of .claude/rules/schema-management.md.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ActiveRecord (Rails) — migration discipline
|
|
7
|
+
|
|
8
|
+
The ActiveRecord sibling of `.claude/rules/schema-management.md`. Loads when adopter's `tech_stack.orm` is `active-record`.
|
|
9
|
+
|
|
10
|
+
## Non-negotiable rule
|
|
11
|
+
|
|
12
|
+
**NEVER edit `db/schema.rb` (or `db/structure.sql`) by hand.** Those files are derived artifacts — Rails regenerates them after every migration. Hand-editing them ships drift the moment another developer runs `rails db:migrate`.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
|
|
16
|
+
1. Generate the migration: `rails generate migration DescriptiveName field:type field:type`
|
|
17
|
+
2. Review the generated file in `db/migrate/` — Rails generators are good but not infallible; manual edits often required for:
|
|
18
|
+
- Foreign keys + cascading deletes
|
|
19
|
+
- Add-index on large tables (`algorithm: :concurrently` for Postgres)
|
|
20
|
+
- Compound conditions on `add_column` (`null: false, default: ...`)
|
|
21
|
+
3. Apply locally: `rails db:migrate`
|
|
22
|
+
4. Commit the migration file AND the regenerated `db/schema.rb` (or `db/structure.sql`)
|
|
23
|
+
5. On deploy, CI runs `rails db:migrate`
|
|
24
|
+
|
|
25
|
+
## After DB reset
|
|
26
|
+
|
|
27
|
+
1. `rails db:setup` (runs migrations + seeds)
|
|
28
|
+
2. Or `rails db:create db:migrate db:seed`
|
|
29
|
+
|
|
30
|
+
## After merging a branch with schema changes
|
|
31
|
+
|
|
32
|
+
1. `rails db:migrate` — apply pending migrations
|
|
33
|
+
2. Restart the Rails server — ActiveRecord caches schema metadata at boot
|
|
34
|
+
3. Run the test suite (`bundle exec rspec` or `rails test`) — schema-coupled tests catch missed migrations
|
|
35
|
+
|
|
36
|
+
## Drift check
|
|
37
|
+
|
|
38
|
+
`rails db:migrate:status` lists every migration + its applied/pending state. Pending migrations = drift.
|
|
39
|
+
|
|
40
|
+
## Common pitfalls
|
|
41
|
+
|
|
42
|
+
- **`change_column` is one-way unless you write a reversible block** — manual `up` + `down` methods needed for non-reversible changes
|
|
43
|
+
- **Large-table migrations block writes** — use `strong_migrations` gem to lint; index changes especially need `add_index :table, :col, algorithm: :concurrently` on Postgres
|
|
44
|
+
- **`rake db:reset` in dev hides production migrations** — only re-runs from schema.rb; doesn't re-test migration files end-to-end
|
|
45
|
+
|
|
46
|
+
## Sources
|
|
47
|
+
|
|
48
|
+
- Rails Guides — Active Record Migrations (https://guides.rubyonrails.org/active_record_migrations.html)
|
|
49
|
+
- strong_migrations gem (https://github.com/ankane/strong_migrations)
|
|
50
|
+
- Rails discipline ported from Prisma shape; ActiveRecord's auto-regenerated schema.rb is the Ruby-ecosystem equivalent of Prisma client regeneration.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: The Alembic sibling of .claude/rules/schema-management.md for adopters using Alembic without SQLAlchemy ORM models (raw SQL migrations against a Python codebase).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Alembic (standalone) — migration discipline
|
|
7
|
+
|
|
8
|
+
The Alembic sibling of `.claude/rules/schema-management.md` for adopters using Alembic **without** SQLAlchemy ORM models (raw SQL migrations against a Python codebase). Loads when adopter's `tech_stack.orm` is `alembic`.
|
|
9
|
+
|
|
10
|
+
For Alembic + SQLAlchemy autogen, see `sqlalchemy.md`.
|
|
11
|
+
|
|
12
|
+
## Non-negotiable rule
|
|
13
|
+
|
|
14
|
+
**NEVER apply DDL outside an Alembic revision.** Direct `psql` / `mysql` / `sqlite3` DDL in production bypasses the migration audit trail.
|
|
15
|
+
|
|
16
|
+
## Workflow
|
|
17
|
+
|
|
18
|
+
1. Author a migration: `alembic revision -m "descriptive_name"` (no `--autogenerate` — you write the SQL by hand)
|
|
19
|
+
2. Edit the generated file in `versions/` — populate `upgrade()` + `downgrade()` with `op.execute(text("..."))` or `op.create_table(...)` calls
|
|
20
|
+
3. Apply locally: `alembic upgrade head`
|
|
21
|
+
4. Test the downgrade path: `alembic downgrade -1`, then `alembic upgrade head`
|
|
22
|
+
5. Commit the migration file
|
|
23
|
+
6. On deploy, CI runs `alembic upgrade head`
|
|
24
|
+
|
|
25
|
+
## After merging a branch with schema changes
|
|
26
|
+
|
|
27
|
+
1. `alembic upgrade head` — apply pending migrations locally
|
|
28
|
+
2. Verify DB shape matches expectations (Alembic doesn't model anything; the schema lives in DDL)
|
|
29
|
+
|
|
30
|
+
## Drift check
|
|
31
|
+
|
|
32
|
+
Alembic doesn't auto-detect drift in standalone mode. The session-start hook compares `alembic current` against the latest revision in `versions/`. If they diverge, prompt to upgrade.
|
|
33
|
+
|
|
34
|
+
## Common pitfalls
|
|
35
|
+
|
|
36
|
+
- **Writing migrations that read application data** — migrations should be idempotent and avoid coupling to app-side queries; data backfills go in separate scripts
|
|
37
|
+
- **Skipping downgrade implementation** — rollback path is mandatory for prod-grade work
|
|
38
|
+
- **Out-of-order revisions** — when parallel branches both create revisions from the same parent, merge with `alembic merge`
|
|
39
|
+
|
|
40
|
+
## Sources
|
|
41
|
+
|
|
42
|
+
- Alembic docs (https://alembic.sqlalchemy.org/en/latest/)
|
|
43
|
+
- Standalone-Alembic discipline adapted from Prisma migration shape; the universal commitments are the same.
|