@thebassclef/lite 0.0.1 → 0.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/LICENSE +202 -0
- package/README.md +85 -4
- package/dist/cli.cjs +1610 -0
- package/dist/cli.js +1587 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +51 -3
- package/substrate/.bassclef/lite-manifest.json +1794 -0
- package/substrate/.claude/agents/architect.md +70 -0
- package/substrate/.claude/agents/builder.md +114 -0
- package/substrate/.claude/agents/designer.md +156 -0
- package/substrate/.claude/agents/reviewer.md +88 -0
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
- package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
- package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
- package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
- package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
- package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
- package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
- package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +452 -0
- package/substrate/.claude/hooks/session-end.sh +433 -0
- package/substrate/.claude/hooks/session-reflection.sh +303 -0
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
- package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
- package/substrate/.claude/hooks/state-validate.sh +271 -0
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
- package/substrate/.claude/hooks/temperance-gate.sh +147 -0
- package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +434 -0
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
- package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
- package/substrate/.claude/luminaries/alan-cooper.md +170 -0
- package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
- package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/substrate/.claude/luminaries/ash-maurya.md +121 -0
- package/substrate/.claude/luminaries/bill-buxton.md +210 -0
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
- package/substrate/.claude/luminaries/don-norman.md +173 -0
- package/substrate/.claude/luminaries/edward-tufte.md +179 -0
- package/substrate/.claude/luminaries/eric-evans.md +160 -0
- package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
- package/substrate/.claude/luminaries/gang-of-four.md +157 -0
- package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
- package/substrate/.claude/luminaries/karl-popper.md +132 -0
- package/substrate/.claude/luminaries/kent-beck.md +168 -0
- package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
- package/substrate/.claude/luminaries/martin-fowler.md +164 -0
- package/substrate/.claude/luminaries/michael-feathers.md +125 -0
- package/substrate/.claude/luminaries/michael-nygard.md +118 -0
- package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
- package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/substrate/.claude/luminaries/sophia-prater.md +193 -0
- package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
- package/substrate/.claude/rules/artifact-ingestion.md +179 -0
- package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
- package/substrate/.claude/rules/blocked-items.md +146 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
- package/substrate/.claude/rules/operator-facing-prose.md +196 -0
- package/substrate/.claude/rules/plain-english-discipline.md +154 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
- package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
- package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
- package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +924 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +426 -0
- package/substrate/.claude/skills/luminary/SKILL.md +481 -0
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/substrate/.claude/skills/onboard-repo/SKILL.md +2190 -0
- package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
- package/substrate/.claude/skills/personas/SKILL.md +207 -0
- package/substrate/.claude/skills/promote/SKILL.md +283 -0
- package/substrate/.claude/skills/requirement/SKILL.md +98 -0
- package/substrate/.claude/skills/retro/SKILL.md +117 -0
- package/substrate/.claude/skills/riff/SKILL.md +114 -0
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/substrate/.claude/skills/session-end/SKILL.md +309 -0
- package/substrate/.claude/skills/session-log/SKILL.md +299 -0
- package/substrate/.claude/skills/skills/SKILL.md +228 -0
- package/substrate/.claude/skills/spec/SKILL.md +105 -0
- package/substrate/.claude/skills/sprint/SKILL.md +392 -0
- package/substrate/.claude/skills/stage/SKILL.md +384 -0
- package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/substrate/.claude/skills/temperance/SKILL.md +108 -0
- package/substrate/.claude/skills/use-case/SKILL.md +417 -0
- package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
- package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
- package/substrate/.claude/skills/verify/SKILL.md +160 -0
- package/substrate/.claude/skills/whereami/SKILL.md +307 -0
- package/substrate/AGENTS.md +79 -0
- package/substrate/CLAUDE-lite.md +85 -0
- package/substrate/CODE_OF_CONDUCT.md +28 -0
- package/substrate/CONTRIBUTING.md +177 -0
- package/substrate/README.md +173 -0
- package/substrate/SECURITY.md +19 -0
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/substrate/lib/clean-artifacts-sweep.sh +112 -0
- package/substrate/lib/code-comment-discipline.sh +144 -0
- package/substrate/lib/composer-preflight.sh +459 -0
- package/substrate/lib/hook-inject.sh +255 -0
- package/substrate/lib/luminary-pick.sh +96 -0
- package/substrate/lib/output-discipline.sh +143 -0
- package/substrate/lib/rewrite-check.sh +214 -0
- package/substrate/lib/state.sh +1372 -0
- package/substrate/lib/telemetry.sh +205 -0
- package/substrate/lib/tier-check.sh +138 -0
- package/substrate/lib/tier-dependency-audit.sh +933 -0
- package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
- package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/substrate/scripts/aggregate-telemetry.sh +217 -0
- package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
- package/substrate/scripts/generate-lite-manifest.sh +489 -0
- package/substrate/scripts/generate-tier-manifest.sh +28 -0
- package/substrate/scripts/intent-drift-check.sh +456 -0
- package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
- package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
- package/substrate/standards/bassclef-configs-schema.md +232 -0
- package/substrate/standards/bassclef-evolution.md +143 -0
- package/substrate/standards/bassclef-internal-jargon.md +244 -0
- package/substrate/standards/bassclef-managed-sentinel.md +96 -0
- package/substrate/standards/bassclef-source-config.md +228 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/lite-manifest-schema-changes.md +75 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/ogilvy-writing-rules.md +225 -0
- package/substrate/standards/opener-discipline.md +96 -0
- package/substrate/standards/operator-facing-prose-discipline.md +201 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/tech-stack-config.md +109 -0
- package/substrate/standards/tier-dependency-analysis.md +167 -0
- package/substrate/standards/tier-runtime-deps/lite.md +57 -0
- package/substrate/standards/tier-tag-schema.md +155 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Gang of Four (Gamma, Helm, Johnson, Vlissides)
|
|
4
|
+
slug: gang-of-four
|
|
5
|
+
claimed_by: [builder]
|
|
6
|
+
referenced_by_skills: [pattern-review, decompose, architect-review]
|
|
7
|
+
primary_domain: engineering
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "Design Patterns: Elements of Reusable Object-Oriented Software"
|
|
12
|
+
authors: ["Erich Gamma", "Richard Helm", "Ralph Johnson", "John Vlissides"]
|
|
13
|
+
year: 1994
|
|
14
|
+
url: "https://www.pearson.com/en-us/subject-catalog/p/design-patterns-elements-of-reusable-object-oriented-software/P200000009480"
|
|
15
|
+
isbn: "9780201633610"
|
|
16
|
+
methodology_covered:
|
|
17
|
+
- "23 named patterns across Creational, Structural, Behavioral categories"
|
|
18
|
+
- "Program to an interface, not an implementation"
|
|
19
|
+
- "Favor object composition over class inheritance"
|
|
20
|
+
- "Decorator for cross-cutting concerns; Strategy for algorithm variation; Observer for event propagation"
|
|
21
|
+
- "Pattern language as shared vocabulary for design discussion"
|
|
22
|
+
verification_status: verified
|
|
23
|
+
description: "\"Program to an interface, not an implementation."
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Gang of Four (GoF)
|
|
27
|
+
|
|
28
|
+
## Signature
|
|
29
|
+
|
|
30
|
+
*"Program to an interface, not an implementation. Favor object composition over class inheritance."*
|
|
31
|
+
|
|
32
|
+
Authors of **Design Patterns: Elements of Reusable Object-Oriented
|
|
33
|
+
Software** (1994). The bassclef reference for 23 named OO patterns
|
|
34
|
+
across three categories (Creational, Structural, Behavioral). The
|
|
35
|
+
book every serious engineer has read; the patterns every codebase
|
|
36
|
+
implements, named or not.
|
|
37
|
+
|
|
38
|
+
## Core methods
|
|
39
|
+
|
|
40
|
+
### Creational patterns (how objects are made)
|
|
41
|
+
- **Factory Method** — defer instantiation to subclasses
|
|
42
|
+
- **Abstract Factory** — families of related objects
|
|
43
|
+
- **Builder** — step-by-step complex construction
|
|
44
|
+
- **Prototype** — clone existing instances
|
|
45
|
+
- **Singleton** — one shared instance (use sparingly)
|
|
46
|
+
|
|
47
|
+
### Structural patterns (how objects compose)
|
|
48
|
+
- **Adapter** — translate one interface to another
|
|
49
|
+
- **Bridge** — decouple abstraction from implementation
|
|
50
|
+
- **Composite** — tree structures of uniform objects
|
|
51
|
+
- **Decorator** — add behavior without subclassing (critical for
|
|
52
|
+
cross-cutting concerns — see `/decompose` Phase 3)
|
|
53
|
+
- **Facade** — simplified interface to subsystem
|
|
54
|
+
- **Flyweight** — share state for many small objects
|
|
55
|
+
- **Proxy** — placeholder controlling access
|
|
56
|
+
|
|
57
|
+
### Behavioral patterns (how objects collaborate)
|
|
58
|
+
- **Chain of Responsibility** — pass request through handlers
|
|
59
|
+
- **Command** — encapsulate request as object
|
|
60
|
+
- **Interpreter** — language grammar evaluation
|
|
61
|
+
- **Iterator** — sequential access without exposing structure
|
|
62
|
+
- **Mediator** — reduce inter-object coupling
|
|
63
|
+
- **Memento** — capture and restore state
|
|
64
|
+
- **Observer** — notify dependents of state change
|
|
65
|
+
- **State** — behavior varies by internal state
|
|
66
|
+
- **Strategy** — algorithm varies at runtime
|
|
67
|
+
- **Template Method** — skeleton with overridable steps
|
|
68
|
+
- **Visitor** — operations over object structure
|
|
69
|
+
|
|
70
|
+
## When to channel this luminary
|
|
71
|
+
|
|
72
|
+
When the primary risk is reinventing solved structural problems badly.
|
|
73
|
+
GoF dominates for Construction pattern selection, code review, and
|
|
74
|
+
decomposition work. Pair with Fowler (enterprise patterns extend GoF),
|
|
75
|
+
Uncle Bob (SOLID shapes how patterns apply), and Cockburn (Hexagonal
|
|
76
|
+
Architecture places patterns in structural context).
|
|
77
|
+
|
|
78
|
+
Do NOT channel GoF for: trivial code where no pattern applies,
|
|
79
|
+
greenfield work where you should first ask whether the problem is
|
|
80
|
+
really structural, or to justify over-engineering.
|
|
81
|
+
|
|
82
|
+
## Stack translation
|
|
83
|
+
|
|
84
|
+
In Next.js + React + TypeScript:
|
|
85
|
+
|
|
86
|
+
- **Facade** → server actions composing multiple services for a single
|
|
87
|
+
operation (`app/actions/create-deal.ts`).
|
|
88
|
+
- **Adapter** → `lib/adapters/[vendor].ts` wraps external APIs with
|
|
89
|
+
consistent interface.
|
|
90
|
+
- **Strategy** → `IScoringStrategy` with multiple implementations;
|
|
91
|
+
registry selects at runtime.
|
|
92
|
+
- **Decorator** → `ObservedImputer` wraps `IAssociationImputer` for
|
|
93
|
+
tracing; `CachedRepository` wraps `IRepository` for caching. THE
|
|
94
|
+
pattern for cross-cutting concerns per `/decompose` Phase 3.
|
|
95
|
+
- **Observer** → React context + useEffect for subscription; Prisma
|
|
96
|
+
middleware for data-change events.
|
|
97
|
+
- **Factory** → `createClient()` functions that return configured instances.
|
|
98
|
+
- **State** → XState machines for complex UI state (deal-stage wizard).
|
|
99
|
+
- **Template Method** → base classes with abstract steps (rare in
|
|
100
|
+
modern React; prefer composition).
|
|
101
|
+
- **Proxy** → Next.js middleware for auth; SWR for cached API access.
|
|
102
|
+
|
|
103
|
+
## Anti-patterns it prevents
|
|
104
|
+
|
|
105
|
+
- **Pattern invention** — creating novel structural solutions to solved
|
|
106
|
+
problems. Results are always worse than the pattern.
|
|
107
|
+
- **Pattern without need** — using Observer where a simple callback
|
|
108
|
+
works; Strategy where an if-statement works. Pattern overhead without
|
|
109
|
+
variation pressure.
|
|
110
|
+
- **Mis-fit pattern** — applying a pattern whose preconditions don't
|
|
111
|
+
hold. Factory for simple `new` calls. Decorator for behavior that's
|
|
112
|
+
intrinsic (not cross-cutting).
|
|
113
|
+
- **Pattern stacking** — using five patterns where two would suffice.
|
|
114
|
+
Each pattern has cognitive cost.
|
|
115
|
+
- **Inheritance as default structural tool** — GoF's opening principle
|
|
116
|
+
is "favor composition over inheritance." Deep inheritance hierarchies
|
|
117
|
+
are usually wrong.
|
|
118
|
+
|
|
119
|
+
## Worked example
|
|
120
|
+
|
|
121
|
+
For POA's email-imputation facade (per `/decompose` Phase 3):
|
|
122
|
+
|
|
123
|
+
GoF pattern selection:
|
|
124
|
+
- **Facade**: `AssociationImputer` exposes simple interface, hides
|
|
125
|
+
LLM provider complexity
|
|
126
|
+
- **Strategy**: Different providers (Haiku, Gemma) as interchangeable
|
|
127
|
+
implementations of `IAssociationImputer`
|
|
128
|
+
- **Adapter**: `AnthropicAdapter`, `GeminiAdapter` wrap vendor SDKs
|
|
129
|
+
behind common interface
|
|
130
|
+
- **Decorator**: `ObservedImputer` wraps any imputer with Langfuse
|
|
131
|
+
tracing — cross-cutting observability
|
|
132
|
+
- **Proxy**: `CachedImputer` wraps any imputer with recent-result
|
|
133
|
+
caching — cross-cutting performance
|
|
134
|
+
- **Chain of Responsibility** (future): multiple imputers in fallback
|
|
135
|
+
chain — Haiku first, Gemma on low confidence, human review on very
|
|
136
|
+
low confidence
|
|
137
|
+
|
|
138
|
+
What GoF would NOT produce: one concrete `HaikuImputer` class with
|
|
139
|
+
observability, caching, error handling, and provider logic all
|
|
140
|
+
intertwined. That's the anti-pattern `/decompose` evolution was
|
|
141
|
+
built to prevent.
|
|
142
|
+
|
|
143
|
+
## Sources
|
|
144
|
+
|
|
145
|
+
- *Design Patterns: Elements of Reusable Object-Oriented Software* —
|
|
146
|
+
Gamma, Helm, Johnson, Vlissides, Addison-Wesley (1994)
|
|
147
|
+
- No primary website (the book is the source)
|
|
148
|
+
|
|
149
|
+
## Related luminaries
|
|
150
|
+
|
|
151
|
+
- **Robert C. Martin** — SOLID principles guide pattern application.
|
|
152
|
+
- **Martin Fowler** — PoEAA extends GoF patterns to enterprise context.
|
|
153
|
+
- **Erich Gamma** individually — co-author, later led VS Code.
|
|
154
|
+
- **Christopher Alexander** — "A Pattern Language" (architecture, 1977)
|
|
155
|
+
inspired the software pattern movement.
|
|
156
|
+
- **Head First Design Patterns** (Freeman, Robson) — accessible entry
|
|
157
|
+
to GoF for learners.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Jason Fried / DHH (David Heinemeier Hansson)
|
|
4
|
+
slug: jason-fried-dhh
|
|
5
|
+
claimed_by: [shaper]
|
|
6
|
+
referenced_by_skills: [canvas, sprint]
|
|
7
|
+
primary_domain: shaping
|
|
8
|
+
depth: stub
|
|
9
|
+
description: "\"It doesn't have to be crazy at work.\""
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Jason Fried / DHH
|
|
13
|
+
|
|
14
|
+
## Signature
|
|
15
|
+
|
|
16
|
+
*"It doesn't have to be crazy at work."*
|
|
17
|
+
|
|
18
|
+
Basecamp founders; the philosophical foundation behind Shape Up. Canonical
|
|
19
|
+
voices on **calm, independent, opinionated product work** — small teams
|
|
20
|
+
shipping polished software on a rhythm, without the manufactured urgency
|
|
21
|
+
of startup culture.
|
|
22
|
+
|
|
23
|
+
## Core methods
|
|
24
|
+
|
|
25
|
+
- **Appetite over estimation** (later operationalized by Singer as Shape Up) —
|
|
26
|
+
Fixed time, variable scope. Don't estimate; bet.
|
|
27
|
+
- **Six-week cycles + two-week cool-down** — Deliberately slow cadence.
|
|
28
|
+
Reject agile theater of weekly sprints.
|
|
29
|
+
- **Interruption is the enemy** — Long uninterrupted time is the actual
|
|
30
|
+
productivity multiplier. Meetings, chat, "quick syncs" destroy it.
|
|
31
|
+
- **Opinionated software** — Products that make choices for users reduce
|
|
32
|
+
decision fatigue. Neutrality is a design failure.
|
|
33
|
+
|
|
34
|
+
## Sources
|
|
35
|
+
|
|
36
|
+
- *Rework* — Fried, Hansson, Crown Business (2010)
|
|
37
|
+
- *It Doesn't Have to Be Crazy at Work* — Fried, Hansson, Harper Business (2018)
|
|
38
|
+
- *Getting Real* — 37signals (2006), free online at gettingreal.37signals.com
|
|
39
|
+
- basecamp.com/books — all 37signals/Basecamp books free
|
|
40
|
+
|
|
41
|
+
## Related luminaries
|
|
42
|
+
|
|
43
|
+
- **Ryan Singer** — Singer operationalized Fried/DHH's philosophy into
|
|
44
|
+
Shape Up; they are the underlying philosophy, he is the method.
|
|
45
|
+
- **Catherine Wu (Anthropic)** — "Underfund on purpose" echoes Fried/DHH's
|
|
46
|
+
appetite discipline.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Jesse James Garrett
|
|
4
|
+
slug: jesse-james-garrett
|
|
5
|
+
claimed_by: [designer]
|
|
6
|
+
referenced_by_skills: [ia-model, canvas, spec]
|
|
7
|
+
primary_domain: ux
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "The Elements of User Experience: User-Centered Design for the Web and Beyond (2nd edition)"
|
|
12
|
+
authors: ["Jesse James Garrett"]
|
|
13
|
+
year: 2010
|
|
14
|
+
url: "https://www.pearson.com/en-us/subject-catalog/p/elements-of-user-experience-the-user-centered-design-for-the-web-and-beyond/P200000009272"
|
|
15
|
+
isbn: "9780321683687"
|
|
16
|
+
methodology_covered:
|
|
17
|
+
- "Five planes of UX — Strategy, Scope, Structure, Skeleton, Surface"
|
|
18
|
+
- "Decisions sequence from abstract (strategy) to concrete (surface)"
|
|
19
|
+
- "Each plane constrains the next; clarity at one plane prevents thrashing at others"
|
|
20
|
+
- "Information architecture as a structural-plane concern, distinct from skeleton (wireframe) or surface (visual)"
|
|
21
|
+
verification_status: verified
|
|
22
|
+
solves_problems_brownfield:
|
|
23
|
+
- "Project mixes strategy, scope, structure, skeleton, and surface decisions in one conversation"
|
|
24
|
+
- "Surface decisions are over-determining structural choices in the existing UI"
|
|
25
|
+
- "Team can't agree on which decisions belong at which level"
|
|
26
|
+
solves_problems_greenfield:
|
|
27
|
+
- "Starting a multi-surface product where the five planes should sequence design decisions"
|
|
28
|
+
- "Building a UX strategy that decomposes work into orderable layers from day one"
|
|
29
|
+
- "Planning a product where strategy precedes scope precedes structure precedes skeleton precedes surface"
|
|
30
|
+
- "Designing a multi-month product where UX governance needs explicit decision-tier vocabulary"
|
|
31
|
+
anti_patterns:
|
|
32
|
+
- "Tactical UI fixes where the five planes is overhead"
|
|
33
|
+
- "Single-page or single-screen work"
|
|
34
|
+
description: "\"Every user experience has five planes: strategy, scope, structure, skeleton, surface."
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
# Jesse James Garrett
|
|
38
|
+
|
|
39
|
+
## Signature
|
|
40
|
+
|
|
41
|
+
*"Every user experience has five planes: strategy, scope, structure, skeleton, surface. Skip one and the next collapses."*
|
|
42
|
+
|
|
43
|
+
Co-founder of Adaptive Path; author of **The Elements of User Experience**.
|
|
44
|
+
Coiner of **Ajax** (2005). The bassclef framework for thinking about UX
|
|
45
|
+
as a layered set of decisions that must be made in sequence — each plane
|
|
46
|
+
constrains the next.
|
|
47
|
+
|
|
48
|
+
## Core methods
|
|
49
|
+
|
|
50
|
+
- **The Five Planes of UX** — From bottom (abstract) to top (concrete):
|
|
51
|
+
- **Strategy** — user needs + product objectives. What success means.
|
|
52
|
+
- **Scope** — functional specifications + content requirements. What
|
|
53
|
+
the product contains.
|
|
54
|
+
- **Structure** — interaction design + information architecture. How
|
|
55
|
+
it's organized.
|
|
56
|
+
- **Skeleton** — interface design, navigation design, information
|
|
57
|
+
design. Where things are placed.
|
|
58
|
+
- **Surface** — sensory design (visual, auditory). How it looks and
|
|
59
|
+
feels.
|
|
60
|
+
- **Bottom-up sequence** — Each plane must be resolved before the plane
|
|
61
|
+
above it. Surface decisions made before strategy produce pretty
|
|
62
|
+
products that serve no one.
|
|
63
|
+
- **Plane consistency** — Decisions on one plane must cohere across that
|
|
64
|
+
plane. An app with two incompatible IAs (one by section, one by
|
|
65
|
+
feature) has a structure-plane failure.
|
|
66
|
+
- **Abstract-to-concrete progression** — Planes move from invisible
|
|
67
|
+
decisions (strategy) to visible output (surface). A team skipping
|
|
68
|
+
straight to surface design has no grounding for why.
|
|
69
|
+
|
|
70
|
+
## When to channel this luminary
|
|
71
|
+
|
|
72
|
+
When the biggest risk is getting the layers out of sequence — jumping to
|
|
73
|
+
visual design before structure is resolved, or committing to scope
|
|
74
|
+
before strategy is clear. Garrett dominates in project planning and
|
|
75
|
+
SDLC-flow work: ensuring the right decisions happen in the right order.
|
|
76
|
+
Think: new-product definition, UX audits of existing products, pedagogy
|
|
77
|
+
for designers or teams new to systematic UX.
|
|
78
|
+
|
|
79
|
+
Do NOT channel Garrett for: tactical interaction design decisions (use
|
|
80
|
+
Norman, Tidwell), object-modeling (use Prater), visual polish (use
|
|
81
|
+
Lupton, Ive).
|
|
82
|
+
|
|
83
|
+
## Stack translation
|
|
84
|
+
|
|
85
|
+
Garrett's planes map directly onto the bassclef SDLC:
|
|
86
|
+
|
|
87
|
+
- **Strategy plane** → `/canvas` (Thesis stage) + iteration bet framing
|
|
88
|
+
- **Scope plane** → `/canvas` (Shape stage) + `/spec` + feature list
|
|
89
|
+
- **Structure plane** → `/ia-model` + `/jtbd-tasks` + `/task-scenarios`
|
|
90
|
+
- **Skeleton plane** → `/interaction-design` + `/decompose` (responsibility)
|
|
91
|
+
- **Surface plane** → `/frontend-design` + `/visual-review` + design tokens
|
|
92
|
+
|
|
93
|
+
The bassclef UX translation chain (JTBD → HTA → IA → Interaction Design)
|
|
94
|
+
is Garrett's structure plane made operational. `/riff-prototypes`
|
|
95
|
+
skips to skeleton/surface only when the lower planes are resolved.
|
|
96
|
+
|
|
97
|
+
## Anti-patterns it prevents
|
|
98
|
+
|
|
99
|
+
- **Surface-first design** — starting with visual mockups before
|
|
100
|
+
structure or scope is settled. Produces beautiful products that fail
|
|
101
|
+
strategy tests.
|
|
102
|
+
- **Premature plane commitment** — locking visual design before
|
|
103
|
+
interaction design is complete. Forces structure decisions to fit
|
|
104
|
+
pre-made mockups.
|
|
105
|
+
- **Plane-skipping** — jumping from strategy to surface, or scope to
|
|
106
|
+
skeleton. Missing planes leave load-bearing decisions implicit.
|
|
107
|
+
- **Plane inconsistency** — a strategy plane that says "operator tool"
|
|
108
|
+
paired with a surface plane that says "consumer SaaS." Reveals
|
|
109
|
+
uncoordinated decisions.
|
|
110
|
+
- **Deliverable confusion** — treating wireframes (skeleton) as final
|
|
111
|
+
design, or treating mockups (surface) as structure. Each plane has
|
|
112
|
+
its own deliverables and can't substitute.
|
|
113
|
+
|
|
114
|
+
## Worked example
|
|
115
|
+
|
|
116
|
+
For POA's deal pipeline feature planning, Garrett's five planes produce:
|
|
117
|
+
|
|
118
|
+
1. **Strategy**: Operator needs efficient pipeline management; product
|
|
119
|
+
objective is reducing time-to-close. Success = X% faster deal
|
|
120
|
+
throughput.
|
|
121
|
+
2. **Scope**: Functional = deal CRUD, stage transitions, broker
|
|
122
|
+
association, note logging, search, export. Content = deal types,
|
|
123
|
+
stage definitions, standard fields, extension fields.
|
|
124
|
+
3. **Structure**: Interaction = stage-transition flow, note-logging
|
|
125
|
+
flow, broker-assignment flow. IA = object-first nav (Deals, Brokers,
|
|
126
|
+
Sellers) with facets (stage, source, age).
|
|
127
|
+
4. **Skeleton**: List-detail pattern for deals; right-rail for
|
|
128
|
+
secondary info; sticky stage-progress at top of detail view;
|
|
129
|
+
collapsed sections for enrichment data.
|
|
130
|
+
5. **Surface**: Design tokens (colors, typography, spacing); dense
|
|
131
|
+
table view; status chips per stage; hover states and transitions.
|
|
132
|
+
|
|
133
|
+
Each plane's output is input to the next. Skipping directly from
|
|
134
|
+
Strategy to Surface (shopping for a pretty template) would produce a
|
|
135
|
+
product that looks great and serves no specific operator workflow.
|
|
136
|
+
|
|
137
|
+
## Sources
|
|
138
|
+
|
|
139
|
+
- *The Elements of User Experience: User-Centered Design for the Web
|
|
140
|
+
and Beyond* — Garrett, New Riders (1st ed 2002, 2nd ed 2010)
|
|
141
|
+
- *"Ajax: A New Approach to Web Applications"* — Garrett, Adaptive
|
|
142
|
+
Path essay (2005) that coined the term
|
|
143
|
+
- jjg.net — Garrett's primary site (maintains classic Elements diagram)
|
|
144
|
+
|
|
145
|
+
## Related luminaries
|
|
146
|
+
|
|
147
|
+
- **Sophia Prater** — OOUX lives at Garrett's structure plane. Not a
|
|
148
|
+
replacement; a specific method for that plane.
|
|
149
|
+
- **Alan Cooper** — Goal-Directed Design operates across planes but
|
|
150
|
+
grounds in strategy (user goals) and scope (task lists).
|
|
151
|
+
- **Peter Morville** — IA work is structure-plane; Morville + Garrett
|
|
152
|
+
pair naturally.
|
|
153
|
+
- **Ellen Lupton** — Typography is surface-plane; don't invoke until
|
|
154
|
+
skeleton is resolved.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: John Ousterhout
|
|
4
|
+
slug: john-ousterhout
|
|
5
|
+
claimed_by: [architect, reviewer, builder]
|
|
6
|
+
referenced_by_skills: [pattern-review, decompose]
|
|
7
|
+
primary_domain: engineering
|
|
8
|
+
depth: stub
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "A Philosophy of Software Design"
|
|
12
|
+
authors: ["John Ousterhout"]
|
|
13
|
+
year: 2021
|
|
14
|
+
edition: "2nd"
|
|
15
|
+
url: "https://web.stanford.edu/~ouster/cgi-bin/aposd.php"
|
|
16
|
+
isbn: "9781732102217"
|
|
17
|
+
methodology_covered:
|
|
18
|
+
- "Deep modules — small interface hiding complex implementation"
|
|
19
|
+
- "Complexity is incremental — small drips add up; resist each one"
|
|
20
|
+
- "Define errors out of existence — design APIs so error conditions cannot occur"
|
|
21
|
+
- "Comments encode design decisions the code itself cannot"
|
|
22
|
+
- "Strategic vs tactical programming — invest in design over short-term wins"
|
|
23
|
+
- "Information hiding — modules expose only what callers need; the rest stays internal"
|
|
24
|
+
- type: course
|
|
25
|
+
title: "Stanford CS 190 — Software Design Studio"
|
|
26
|
+
authors: ["John Ousterhout"]
|
|
27
|
+
year: 2018
|
|
28
|
+
url: "https://web.stanford.edu/class/cs190/"
|
|
29
|
+
methodology_covered:
|
|
30
|
+
- "Source course where the principles in A Philosophy of Software Design were developed and tested"
|
|
31
|
+
verification_status: verified
|
|
32
|
+
description: "\"Complexity is anything that makes software hard to understand or modify."
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# John Ousterhout
|
|
36
|
+
|
|
37
|
+
## Signature
|
|
38
|
+
|
|
39
|
+
*"Complexity is anything that makes software hard to understand or modify. The goal of software design is to reduce complexity."*
|
|
40
|
+
|
|
41
|
+
Stanford professor. Creator of the Tcl scripting language and Raft consensus protocol. Author of **A Philosophy of Software Design** (2018, 2nd ed 2021), the modern SENTINEL_bassclef_text on simplicity, deep modules, and complexity-as-incremental-drift. Pairs with Beck (TDD) and Fowler (refactoring tactics): Beck asks "is it tested?", Fowler asks "how do I restructure it?", Ousterhout asks "is it the right shape in the first place?"
|
|
42
|
+
|
|
43
|
+
## Discipline anchor
|
|
44
|
+
|
|
45
|
+
**Design judgment + complexity-as-enemy.** Ousterhout supplies the WHY-to-refactor framing that Beck and Fowler leave to the engineer's judgment.
|
|
46
|
+
INSTEAD: Beck owns the red-green-refactor cycle; Fowler owns the catalog of refactorings; Ousterhout owns the design-quality lens that tells you whether the shape you're refactoring toward is actually better. Without this lens, refactors can shuffle complexity without reducing it.
|
|
47
|
+
|
|
48
|
+
This luminary fires on architectural-judgment moments — picking module boundaries, naming interfaces, deciding whether to split a class, evaluating whether a comment is doing real work or restating the code.
|
|
49
|
+
INSTEAD of citing Ousterhout for test mechanics, refactoring tactics, or pattern catalog selection: route those concerns to Beck, Fowler, and GoF respectively.
|
|
50
|
+
|
|
51
|
+
## Key principles
|
|
52
|
+
|
|
53
|
+
- **Deep modules** — A module is deep when it has a small interface and a large, complex implementation hidden behind it. Shallow modules push knowledge to callers and produce a system where understanding the whole requires understanding every part. When tempted to split a class for "smaller files," ask: does the split produce TWO deep modules, or TWO shallow ones?
|
|
54
|
+
INSTEAD of defaulting to file-size as the splitting metric: use interface-shape as the metric. Two deep modules from a split is a win; two shallow modules from a split is a regression even if the line count drops.
|
|
55
|
+
|
|
56
|
+
- **Complexity is incremental** — Complexity accumulates one small decision at a time. A single special case, a single dependency, a single inconsistency feels harmless. Sum across a session, a release, a year — that's how systems become unmaintainable. The discipline is to resist each small drip rather than promise to clean up the puddle later.
|
|
57
|
+
INSTEAD of deferring cleanup to a future refactor: refuse the small drip at the moment it appears. Future-refactor cleanups almost never happen; the cost of resisting at write-time is the cheapest moment.
|
|
58
|
+
|
|
59
|
+
- **Define errors out of existence** — Design APIs so error conditions cannot occur, rather than designing APIs that throw errors and asking every caller to handle them. The classic example: `unset` on a variable that does not exist is an error in older shells.
|
|
60
|
+
INSTEAD: the right shape is for `unset` to be idempotent. Applied to bassclef: hooks that BLOCK on missing artifacts are weaker than hooks that bootstrap the artifact when absent, where bootstrapping is safe.
|
|
61
|
+
|
|
62
|
+
- **Comments encode design decisions code cannot** — Code says what it does. Comments must say what the code cannot — the WHY (invariant), the WHAT-IF (alternative considered and rejected), the WATCH-OUT (subtle constraint a future reader will miss).
|
|
63
|
+
INSTEAD of comments that restate code: write comments that record decisions. This principle is load-bearing for bassclef's `bassclef-configs.jsonc` discipline: inline comments are the adopter-discovery surface, not exhaust.
|
|
64
|
+
|
|
65
|
+
## When to cite this luminary
|
|
66
|
+
|
|
67
|
+
Cite `@luminary john-ousterhout` when:
|
|
68
|
+
|
|
69
|
+
- **Reviewing module boundaries** (`/pattern-review`) — is this class deep or shallow? Would splitting it make two deep modules or two shallow ones?
|
|
70
|
+
- **Decomposing responsibilities** (`/decompose` GRASP audit) — does each responsibility assignment produce a deep module, or push complexity to callers?
|
|
71
|
+
- **Designing bassclef-configs.jsonc or other adopter-edit surfaces** — inline comments must encode WHY-to-pick and WHEN-to-pick, not restate the field name. This is "comments-as-design" applied to substrate configuration.
|
|
72
|
+
- **Evaluating whether complexity is essential or accidental** — when a feature feels harder to ship than it should, ask whether the difficulty is in the problem domain (essential) or in how earlier decisions shaped the code (accidental). Accidental complexity is the refactor signal.
|
|
73
|
+
|
|
74
|
+
When the question is test mechanics, refactoring step-by-step, design-pattern selection, distributed-systems scalability, or algorithmic complexity, route elsewhere.
|
|
75
|
+
INSTEAD: cite Beck (test mechanics), Fowler (refactoring tactics), GoF (pattern selection), Kleppmann (Phase C, scalability anchor), Bentley (Phase C, Big-O practical discipline).
|
|
76
|
+
|
|
77
|
+
## Composes with
|
|
78
|
+
|
|
79
|
+
- **Kent Beck** — TDD makes deep modules testable. Tests verify that the interface is actually small; without tests, deep modules look the same as shallow ones from outside.
|
|
80
|
+
- **Martin Fowler** — Refactoring tactics serve Ousterhout's design judgment. Fowler tells you HOW to extract a method; Ousterhout tells you WHETHER the extraction produces a deeper module or shuffles complexity.
|
|
81
|
+
- **Gang of Four** — Design patterns are deep-module exemplars when applied well. The Decorator pattern is a deep module; the over-applied Visitor pattern is often shallow because it pushes traversal logic to callers.
|
|
82
|
+
- **Michael Feathers** (bassclef luminary catalog) — Characterization testing makes it safe to refactor toward deeper modules in legacy code where the original boundaries are unclear.
|
|
83
|
+
|
|
84
|
+
## Refs
|
|
85
|
+
|
|
86
|
+
- bassclef#1036 — this luminary's filing ticket
|
|
87
|
+
- bassclef#867 — anchor-luminary verification pattern (stub-tier shape this entry follows)
|
|
88
|
+
- bassclef#1037 — sibling ticket; testing-tier-config primitive (Ousterhout's comments-as-design framing anchors the Tier 0 vs Tier 3 comment rules)
|
|
89
|
+
- bassclef#478 — `@pattern` annotation discipline (analog for `@luminary` citation discipline)
|
|
90
|
+
|
|
91
|
+
## Stub-to-full
|
|
92
|
+
|
|
93
|
+
This is a stub entry per bassclef#867 verification pattern — frontmatter plus 4-section body grounded in primary source. Full body (worked examples in bassclef's own substrate, anti-patterns catalog, signature stack-translation paragraph) is deferred to a luminary-authoring follow-on bet.
|
|
94
|
+
INSTEAD of blocking citation on full-body completion: the stub is sufficient for `/pattern-review` and `/decompose` to invoke the lens today; the full entry deepens worked examples in a later pass.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Karl Popper
|
|
4
|
+
slug: karl-popper
|
|
5
|
+
claimed_by: [architect, reviewer, closer]
|
|
6
|
+
referenced_by_skills: [diagnose, architect-review, promote, state-a-problem]
|
|
7
|
+
primary_domain: philosophy
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "The Logic of Scientific Discovery"
|
|
12
|
+
authors: ["Karl R. Popper"]
|
|
13
|
+
year: 1959
|
|
14
|
+
original_year: 1935
|
|
15
|
+
url: "https://www.routledge.com/The-Logic-of-Scientific-Discovery/Popper/p/book/9780415278447"
|
|
16
|
+
isbn: "9780415278447"
|
|
17
|
+
methodology_covered:
|
|
18
|
+
- "Falsifiability as demarcation criterion for scientific claims"
|
|
19
|
+
- "Bold conjectures + severe tests as the actual method"
|
|
20
|
+
- "Verification is impossible; falsification is decisive"
|
|
21
|
+
- type: book
|
|
22
|
+
title: "Conjectures and Refutations: The Growth of Scientific Knowledge"
|
|
23
|
+
authors: ["Karl R. Popper"]
|
|
24
|
+
year: 1963
|
|
25
|
+
url: "https://www.routledge.com/Conjectures-and-Refutations-The-Growth-of-Scientific-Knowledge/Popper/p/book/9780415285940"
|
|
26
|
+
isbn: "9780415285940"
|
|
27
|
+
methodology_covered:
|
|
28
|
+
- "Knowledge grows by refutation, not confirmation"
|
|
29
|
+
- "Better theories forbid more; the more a theory forbids the better"
|
|
30
|
+
- "All observation is theory-laden; there is no view from nowhere"
|
|
31
|
+
- type: book
|
|
32
|
+
title: "The Open Society and Its Enemies"
|
|
33
|
+
authors: ["Karl R. Popper"]
|
|
34
|
+
year: 1945
|
|
35
|
+
url: "https://press.princeton.edu/books/paperback/9780691158136/the-open-society-and-its-enemies"
|
|
36
|
+
isbn: "9780691158136"
|
|
37
|
+
methodology_covered:
|
|
38
|
+
- "Piecemeal social engineering over utopian planning"
|
|
39
|
+
- "Institutions that expose leaders to falsification"
|
|
40
|
+
- "Critical rationalism as social discipline"
|
|
41
|
+
verification_status: verified
|
|
42
|
+
description: "\"Good tests kill flawed theories; we remain alive to guess again.\""
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
# Karl Popper
|
|
46
|
+
|
|
47
|
+
## Signature
|
|
48
|
+
|
|
49
|
+
*"Good tests kill flawed theories; we remain alive to guess again."*
|
|
50
|
+
|
|
51
|
+
Austrian-British philosopher (1902-1994). Author of *The Logic of Scientific Discovery* (Hutchinson, 1935 German / 1959 English) and *Conjectures and Refutations* (1963). The bassclef voice on falsifiability, hypothesis testing, and the discipline that a claim which cannot be falsified is steering language, not truth.
|
|
52
|
+
|
|
53
|
+
## Core methods
|
|
54
|
+
|
|
55
|
+
- **Falsifiability as demarcation** — a claim is scientific to the extent that it can be shown wrong. Unfalsifiable claims may be inspiring; they are not knowledge. In substrate work: an assertion with no rebuttal cell is either a definition or an act of faith.
|
|
56
|
+
- **Conjectures and refutations** — knowledge grows by making bold conjectures and then trying hard to break them. The bolder the claim, the more the world it forbids, the more informative it is when it survives testing.
|
|
57
|
+
- **The severity of tests** — a test that could have refuted the claim but did not is severe. A test the claim was designed to pass is weak. Testing is not a formality; it is the entire epistemic engine.
|
|
58
|
+
- **Piecemeal engineering** — for social + technical systems, small changes that can be reverted are better than sweeping redesigns that cannot. The value is not the change itself; it is the reversibility.
|
|
59
|
+
- **All observation is theory-laden** — there is no raw data. Every observation runs through the framework the observer brings. This is why the warrant matters, not just the data.
|
|
60
|
+
|
|
61
|
+
## When to channel this luminary
|
|
62
|
+
|
|
63
|
+
When the primary risk is root-cause claims, cure recommendations, or diagnostic assertions shipping without stated conditions for being wrong. Popper dominates for `/diagnose` output (root-cause hypotheses), audit findings (severity claims), cure recommendations (why THIS cure, not another), and any assertion the operator will act on. Pair with Toulmin (Popper's rebuttal cell IS Toulmin's rebuttal cell) and Peirce (Peirce names the alternatives; Popper says test each).
|
|
64
|
+
|
|
65
|
+
Pass-through cases (Popper adds no value):
|
|
66
|
+
|
|
67
|
+
- Pure definition claims ("this is what we call X"). INSTEAD of falsification testing: preserve the definition; it is a naming act, not a knowledge claim.
|
|
68
|
+
- Aesthetic preference statements. INSTEAD of falsification testing: preserve the preference; it is Peirce's pragmatic-maxim category, not Popper's.
|
|
69
|
+
- Operator-authored directives. INSTEAD of falsification testing: honor the directive; operator preference is a starting point for inquiry, not a hypothesis to be falsified.
|
|
70
|
+
|
|
71
|
+
## Stack translation
|
|
72
|
+
|
|
73
|
+
In bassclef substrate work:
|
|
74
|
+
|
|
75
|
+
- **`/diagnose` output** → hypothesis + falsification test. What repro would show the hypothesis is wrong? Write it before writing the fix.
|
|
76
|
+
- **Audit finding severity** → what evidence would demote HIGH to MEDIUM? Name it. If nothing would demote it, the severity is either a definition or a decree.
|
|
77
|
+
- **Cure recommendation** → what evidence would show this cure does not close the class? Name the test. If no test would falsify, the cure is faith not analysis.
|
|
78
|
+
- **Turn estimate** → the estimate is a prediction. What actuals would falsify it? Grounding estimates in prior WU turn counts is Popper's discipline — the prior WUs are the tests the estimate survives.
|
|
79
|
+
- **Root-cause claim** → the cause is the hypothesis. Removing it should remove the symptom. If removal does not remove the symptom, the cause was wrong. Test before shipping.
|
|
80
|
+
|
|
81
|
+
## Anti-patterns it prevents
|
|
82
|
+
|
|
83
|
+
- **Unfalsifiable severity** — "This is HIGH-severity because it matters." No evidence would demote it. Not a claim.
|
|
84
|
+
|
|
85
|
+
INSTEAD: state the criteria that would demote the finding. If none exist, the finding is a decree, not evidence.
|
|
86
|
+
|
|
87
|
+
- **Root-cause attribution without repro** — "The cause is X" with no test that would show removing X does not remove the symptom.
|
|
88
|
+
|
|
89
|
+
INSTEAD: state the repro that would falsify. Run it. Ship the fix only after the test discriminates.
|
|
90
|
+
|
|
91
|
+
- **Cure recommendation without a losing condition** — "This cure closes the class" with no criterion that would show it does not.
|
|
92
|
+
|
|
93
|
+
INSTEAD: state the observation that would show the class still reproduces after the cure. That IS the acceptance test.
|
|
94
|
+
|
|
95
|
+
- **Confirmation-only diagnosis** — running only the test the hypothesis passes.
|
|
96
|
+
|
|
97
|
+
INSTEAD: run the severest test the hypothesis could survive. If it survives that, it is stronger than a test that was designed to pass.
|
|
98
|
+
|
|
99
|
+
- **Sweeping redesign** — replacing a hook, a rule, or a substrate primitive with a cleaner version, all at once, no reversibility path.
|
|
100
|
+
|
|
101
|
+
INSTEAD: ship the smallest reversible change. Piecemeal engineering ships smaller changes with revert paths.
|
|
102
|
+
|
|
103
|
+
## Worked example
|
|
104
|
+
|
|
105
|
+
For a claim that a hook is dead-letter:
|
|
106
|
+
|
|
107
|
+
Popper's discipline:
|
|
108
|
+
|
|
109
|
+
- **Conjecture**: The hook `X.sh` is dead-letter — it exists on disk but is not wired in `.claude/settings.json`. Its checks do not fire.
|
|
110
|
+
- **Severe test**: Deliberately trigger the condition the hook is supposed to catch. Author a file that violates the hook's stated rule; attempt to write it. If the write succeeds without the hook firing, the conjecture is confirmed. If the hook fires and blocks the write, the conjecture is falsified.
|
|
111
|
+
- **Result**: Wrote the violating file. Write succeeded. No BLOCK message. The hook did not fire. Conjecture survives; hook is dead-letter.
|
|
112
|
+
- **What would falsify**: A BLOCK message appearing in the write attempt. It did not appear.
|
|
113
|
+
|
|
114
|
+
Without Popper's discipline the diagnosis would read "the hook seems broken" — no test, no falsification criterion, no way to distinguish "actually broken" from "I did not trigger it right." INSTEAD: state the conjecture, name the severe test, run it, report the result.
|
|
115
|
+
|
|
116
|
+
## Sources
|
|
117
|
+
|
|
118
|
+
- *The Logic of Scientific Discovery* — Popper, Hutchinson (1935 German original; 1959 English translation; Routledge reprint)
|
|
119
|
+
- *Conjectures and Refutations: The Growth of Scientific Knowledge* — Popper, Routledge (1963)
|
|
120
|
+
- *The Open Society and Its Enemies* — Popper, Routledge (1945; Princeton reissue 2020)
|
|
121
|
+
- *Objective Knowledge: An Evolutionary Approach* — Popper, Oxford University Press (1972)
|
|
122
|
+
- Stanford Encyclopedia of Philosophy: entry on Popper — plato.stanford.edu/entries/popper/
|
|
123
|
+
|
|
124
|
+
## Related luminaries
|
|
125
|
+
|
|
126
|
+
- **Stephen Toulmin** — Toulmin's argument model gives the shape (claim/data/warrant); Popper sharpens the rebuttal cell. A Toulmin argument without the rebuttal cell is a Popperian pseudo-claim. Both ship in bet 2026-07-01b WU-2.
|
|
127
|
+
- **Charles Sanders Peirce** — Peirce's abductive reasoning names multiple hypotheses; Popper says test each one severely. Peirce fills the alternatives; Popper says which alternative survives. Both ship in bet 2026-07-01b WU-2.
|
|
128
|
+
- **W. Edwards Deming** — Deming's PDCA cycle is Popper's conjecture-and-refutation applied to management. Plan (conjecture), Do (test), Check (see if the test broke the plan), Act (revise).
|
|
129
|
+
- **Michael Feathers** — Feathers' characterization tests are severe tests for legacy code. Without characterization tests, refactoring is unfalsifiable — no test would show the refactor broke behavior.
|
|
130
|
+
- **Kent Beck** — Beck's TDD is Popper at the code layer. The red test is the severe test the claim must survive to become green. TDD without a red step is unfalsifiable design.
|
|
131
|
+
|
|
132
|
+
Anchors `.claude/rules/assert-only-after-verify.md` alongside Toulmin + Peirce. Primary luminary for `/diagnose` skill in root-cause hypothesis testing.
|