@thebassclef/lite 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +65 -0
- package/dist/cli.js +65 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/agents/architect.md +70 -0
- package/dist/lite/.claude/agents/builder.md +114 -0
- package/dist/lite/.claude/agents/designer.md +156 -0
- package/dist/lite/.claude/agents/reviewer.md +88 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
- package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
- package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
- package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
- package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
- package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
- package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
- package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
- package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
- package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
- package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
- package/dist/lite/.claude/luminaries/don-norman.md +173 -0
- package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
- package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
- package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
- package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
- package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
- package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
- package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
- package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
- package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
- package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
- package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
- package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
- package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
- package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
- package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
- package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
- package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
- package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
- package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
- package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
- package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
- package/dist/lite/.claude/rules/adr-discipline.md +96 -0
- package/dist/lite/.claude/rules/api-conventions.md +115 -0
- package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
- package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
- package/dist/lite/.claude/rules/blocked-items.md +139 -0
- package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
- package/dist/lite/.claude/rules/branching.md +28 -0
- package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
- package/dist/lite/.claude/rules/commit-conventions.md +22 -0
- package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
- package/dist/lite/.claude/rules/context-engineering.md +155 -0
- package/dist/lite/.claude/rules/context-management.md +85 -0
- package/dist/lite/.claude/rules/defensive-bash.md +52 -0
- package/dist/lite/.claude/rules/deferred-actions.md +233 -0
- package/dist/lite/.claude/rules/destructive-operations.md +69 -0
- package/dist/lite/.claude/rules/diagnosis.md +38 -0
- package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
- package/dist/lite/.claude/rules/guardrails.md +73 -0
- package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
- package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
- package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
- package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
- package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
- package/dist/lite/.claude/rules/loop-discipline.md +71 -0
- package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
- package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
- package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
- package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
- package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
- package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
- package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
- package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
- package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
- package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
- package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
- package/dist/lite/.claude/rules/pr-strategy.md +142 -0
- package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
- package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
- package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
- package/dist/lite/.claude/rules/schema-management.md +42 -0
- package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
- package/dist/lite/.claude/rules/security.md +37 -0
- package/dist/lite/.claude/rules/session-artifacts.md +236 -0
- package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
- package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
- package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
- package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
- package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
- package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
- package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
- package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
- package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
- package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
- package/dist/lite/.claude/rules/testing.md +38 -0
- package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
- package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
- package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
- package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
- package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
- package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
- package/dist/lite/.claude/skills/build/SKILL.md +640 -0
- package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
- package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
- package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
- package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
- package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
- package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
- package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
- package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
- package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
- package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
- package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
- package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
- package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
- package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
- package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
- package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
- package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
- package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
- package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
- package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
- package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
- package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
- package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
- package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
- package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
- package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
- package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
- package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
- package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
- package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
- package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
- package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
- package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
- package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
- package/dist/lite/AGENTS.md +79 -0
- package/dist/lite/CLAUDE-lite.md +85 -0
- package/dist/lite/CODE_OF_CONDUCT.md +28 -0
- package/dist/lite/CONTRIBUTING.md +177 -0
- package/dist/lite/README.md +173 -0
- package/dist/lite/SECURITY.md +19 -0
- package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
- package/dist/lite/lib/code-comment-discipline.sh +144 -0
- package/dist/lite/lib/composer-preflight.sh +459 -0
- package/dist/lite/lib/deferred-actions.sh +146 -0
- package/dist/lite/lib/hook-header-parser.sh +61 -0
- package/dist/lite/lib/hook-heartbeat.sh +152 -0
- package/dist/lite/lib/hook-inject.sh +255 -0
- package/dist/lite/lib/hook-installer.sh +195 -0
- package/dist/lite/lib/luminary-pick.sh +96 -0
- package/dist/lite/lib/output-discipline.sh +143 -0
- package/dist/lite/lib/prose-scan-boundary.sh +171 -0
- package/dist/lite/lib/rewrite-check.sh +214 -0
- package/dist/lite/lib/session-rescue.sh +151 -0
- package/dist/lite/lib/source-graph-walker.sh +277 -0
- package/dist/lite/lib/state.sh +1372 -0
- package/dist/lite/lib/telemetry.sh +205 -0
- package/dist/lite/lib/tier-check.sh +187 -0
- package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
- package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
- package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
- package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
- package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
- package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
- package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
- package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
- package/dist/lite/scripts/intent-drift-check.sh +456 -0
- package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
- package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
- package/dist/lite/standards/adr-template.md +86 -0
- package/dist/lite/standards/api-conventions/nextjs.md +84 -0
- package/dist/lite/standards/artifact-composition.md +209 -0
- package/dist/lite/standards/bash-hook-safety.md +246 -0
- package/dist/lite/standards/bassclef-configs-schema.md +232 -0
- package/dist/lite/standards/bassclef-evolution.md +143 -0
- package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
- package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
- package/dist/lite/standards/bassclef-source-config.md +228 -0
- package/dist/lite/standards/branch-stacking.md +408 -0
- package/dist/lite/standards/code-safety-principles.md +176 -0
- package/dist/lite/standards/composer-prerequisites.md +155 -0
- package/dist/lite/standards/deferred-actions-schema.md +204 -0
- package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
- package/dist/lite/standards/dependency-discipline/gem.md +43 -0
- package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
- package/dist/lite/standards/dependency-discipline/npm.md +42 -0
- package/dist/lite/standards/dependency-discipline/pip.md +42 -0
- package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/dist/lite/standards/deployment-topology.md +69 -0
- package/dist/lite/standards/docs-sync-allowlist.md +76 -0
- package/dist/lite/standards/domain-and-dns.md +145 -0
- package/dist/lite/standards/frontend-stack.md +67 -0
- package/dist/lite/standards/frontmatter-schema.md +154 -0
- package/dist/lite/standards/graceful-exit.md +227 -0
- package/dist/lite/standards/hook-idempotency.md +102 -0
- package/dist/lite/standards/hook-injection-discipline.md +202 -0
- package/dist/lite/standards/hook-install-class.md +215 -0
- package/dist/lite/standards/input-handler-interface.md +152 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
- package/dist/lite/standards/lite-manifest.json +2797 -0
- package/dist/lite/standards/luminary-matching.md +105 -0
- package/dist/lite/standards/luminary-problem-patterns.md +481 -0
- package/dist/lite/standards/migration-discipline/active-record.md +50 -0
- package/dist/lite/standards/migration-discipline/alembic.md +43 -0
- package/dist/lite/standards/migration-discipline/gorm.md +50 -0
- package/dist/lite/standards/migration-discipline/prisma.md +53 -0
- package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
- package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
- package/dist/lite/standards/model-routing-discipline.md +160 -0
- package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
- package/dist/lite/standards/opener-discipline.md +96 -0
- package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
- package/dist/lite/standards/persona-schema.md +229 -0
- package/dist/lite/standards/pluggable-luminaries.md +323 -0
- package/dist/lite/standards/pr-body-discipline.md +115 -0
- package/dist/lite/standards/preview-state-schema.md +189 -0
- package/dist/lite/standards/project-directory-layout.md +276 -0
- package/dist/lite/standards/release-tagging.md +137 -0
- package/dist/lite/standards/reserved-skill-names.md +120 -0
- package/dist/lite/standards/scannable-multi-option-output.md +265 -0
- package/dist/lite/standards/sdlc-compliance.md +286 -0
- package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
- package/dist/lite/standards/secrets-lifecycle.md +210 -0
- package/dist/lite/standards/security-scanner-adapter.md +145 -0
- package/dist/lite/standards/session-board.md +256 -0
- package/dist/lite/standards/skill-output-discipline.md +121 -0
- package/dist/lite/standards/state-spine-contract.md +255 -0
- package/dist/lite/standards/state-spine.md +511 -0
- package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
- package/dist/lite/standards/substrate-config-schema.md +267 -0
- package/dist/lite/standards/tech-stack-config.md +109 -0
- package/dist/lite/standards/tier-dependency-analysis.md +167 -0
- package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
- package/dist/lite/standards/tier-tag-schema.md +155 -0
- package/dist/lite/standards/two-layer-config.md +99 -0
- package/dist/lite/standards/use-case-format.md +292 -0
- package/dist/lite/standards/user-story-invest.md +268 -0
- package/dist/lite/standards/velocity-and-appetite.md +229 -0
- package/dist/lite/standards/voice-input-pattern.md +119 -0
- package/dist/lite/standards/whereami-schema.md +301 -0
- package/dist/lite/standards/worktree-management.md +211 -0
- package/dist/lite/standards/writing-guide.md +213 -0
- package/dist/lite/templates/chronicle-template.md +75 -0
- package/dist/lite/templates/deferred-action-template.md +45 -0
- package/dist/lite/templates/memory-proposal-template.md +77 -0
- package/dist/lite/templates/persona-template.md +200 -0
- package/dist/lite/templates/pr-faq.md +45 -0
- package/dist/lite/templates/secret-rotation-template.md +162 -0
- package/dist/lite/templates/spec-template.md +131 -0
- package/dist/lite/templates/use-case-template.md +194 -0
- package/dist/lite/templates/user-story-template.md +107 -0
- package/dist/lite/templates/whereami-template.md +101 -0
- package/package.json +1 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Edward Tufte
|
|
4
|
+
slug: edward-tufte
|
|
5
|
+
claimed_by: [creative-director, designer]
|
|
6
|
+
referenced_by_skills: [frontend-design, visual-review, prototype-variants]
|
|
7
|
+
primary_domain: visual
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "The Visual Display of Quantitative Information (2nd edition)"
|
|
12
|
+
authors: ["Edward Tufte"]
|
|
13
|
+
year: 2001
|
|
14
|
+
url: "https://www.edwardtufte.com/tufte/books_vdqi"
|
|
15
|
+
isbn: "9781930824133"
|
|
16
|
+
methodology_covered:
|
|
17
|
+
- "Data-ink ratio — maximize the ink that represents data; minimize non-data ink"
|
|
18
|
+
- "Chartjunk — non-data ink that obscures rather than clarifies"
|
|
19
|
+
- "Lie factor — visual representation should match the underlying data scale"
|
|
20
|
+
- "Small multiples — series of small similar graphs for comparison"
|
|
21
|
+
- type: book
|
|
22
|
+
title: "Envisioning Information"
|
|
23
|
+
authors: ["Edward Tufte"]
|
|
24
|
+
year: 1990
|
|
25
|
+
url: "https://www.edwardtufte.com/tufte/books_ei"
|
|
26
|
+
isbn: "9780961392116"
|
|
27
|
+
methodology_covered:
|
|
28
|
+
- "Escaping flatland — representing multiple dimensions in two-dimensional space"
|
|
29
|
+
- "Color as data + micro-macro readings + layering and separation"
|
|
30
|
+
- type: book
|
|
31
|
+
title: "Visual Explanations: Images and Quantities, Evidence and Narrative"
|
|
32
|
+
authors: ["Edward Tufte"]
|
|
33
|
+
year: 1997
|
|
34
|
+
url: "https://www.edwardtufte.com/tufte/books_visex"
|
|
35
|
+
isbn: "9780961392123"
|
|
36
|
+
methodology_covered:
|
|
37
|
+
- "Visualizing causality and change over time"
|
|
38
|
+
- "Smallest effective difference — use the minimum visual difference that conveys the distinction"
|
|
39
|
+
- type: book
|
|
40
|
+
title: "Beautiful Evidence"
|
|
41
|
+
authors: ["Edward Tufte"]
|
|
42
|
+
year: 2006
|
|
43
|
+
url: "https://www.edwardtufte.com/tufte/books_be"
|
|
44
|
+
isbn: "9780961392178"
|
|
45
|
+
methodology_covered:
|
|
46
|
+
- "Sparklines — word-sized graphics embedded in running text"
|
|
47
|
+
- "Evidence presentation principles for analytical writing"
|
|
48
|
+
verification_status: verified
|
|
49
|
+
solves_problems_brownfield:
|
|
50
|
+
- "UI shows many numbers or trends in compressed space and legibility is breaking down"
|
|
51
|
+
- "Dashboard has accumulated decoration and chart-junk; signal is buried"
|
|
52
|
+
- "Multi-dimensional data displays are letting one dimension drown out others"
|
|
53
|
+
- "Users decode the chart before understanding the message"
|
|
54
|
+
solves_problems_greenfield:
|
|
55
|
+
- "Planning a dashboard, financial report, or analytics UI that must show dense data clearly from day one"
|
|
56
|
+
- "Designing a surface where multiple quantitative dimensions need to coexist without one drowning the others"
|
|
57
|
+
- "Building a tool for domain experts who read data faster than narrative"
|
|
58
|
+
- "Need small multiples or sparklines as the main display element in the new design"
|
|
59
|
+
anti_patterns:
|
|
60
|
+
- "Sparse, narrative-heavy surfaces — Tufte over-compresses"
|
|
61
|
+
- "Consumer-emotional or marketing surfaces — Tufte reads as cold"
|
|
62
|
+
- "First-time onboarding flows — density assumes domain familiarity"
|
|
63
|
+
description: "\"Above all else, show the data. Maximize the data-ink ratio; every pixel that doesn't represent information is a candidate for removal.\""
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
# Edward Tufte
|
|
67
|
+
|
|
68
|
+
## Signature
|
|
69
|
+
|
|
70
|
+
*"Above all else, show the data. Maximize the data-ink ratio; every pixel that doesn't represent information is a candidate for removal."*
|
|
71
|
+
|
|
72
|
+
Yale statistician and visual communication theorist; author of **The
|
|
73
|
+
Visual Display of Quantitative Information** (1983). The bassclef
|
|
74
|
+
voice on data visualization — the standard against which all chart,
|
|
75
|
+
dashboard, and data-dense UI work is measured.
|
|
76
|
+
|
|
77
|
+
## Core methods
|
|
78
|
+
|
|
79
|
+
- **Data-ink ratio** — The ratio of "ink" (visual weight) representing
|
|
80
|
+
actual data to total ink on the page. Maximize it. Every gridline,
|
|
81
|
+
axis label, border, or color swatch that doesn't represent data is a
|
|
82
|
+
candidate for removal.
|
|
83
|
+
- **Small multiples** — Many small versions of the same chart, aligned
|
|
84
|
+
in a grid, enable comparison at a glance. A single complex chart
|
|
85
|
+
often reads better as 12 small simple ones.
|
|
86
|
+
- **Sparklines** — Word-sized, intense, simple graphics embedded in
|
|
87
|
+
prose or tables. Show trend without dominating layout.
|
|
88
|
+
- **Chartjunk elimination** — Cross-hatching, 3D effects, decorative
|
|
89
|
+
borders, grid backgrounds, redundant legends. All candidates for
|
|
90
|
+
removal. Most "business graphics" are majority chartjunk.
|
|
91
|
+
- **Layering + separation** — Show multiple dimensions in the same
|
|
92
|
+
visualization through layers (color, line weight, opacity) that
|
|
93
|
+
separate clearly rather than blend into noise.
|
|
94
|
+
- **Graphical integrity** — No distortion through truncated axes,
|
|
95
|
+
misleading scales, decoration that implies precision where none
|
|
96
|
+
exists. Graphics should reveal truth, not obscure it.
|
|
97
|
+
|
|
98
|
+
## When to channel this luminary
|
|
99
|
+
|
|
100
|
+
When the product is data-dense and the primary risk is that information
|
|
101
|
+
will be decoration rather than communication. Tufte dominates for
|
|
102
|
+
dashboards, analytics surfaces, financial tables, comparison views,
|
|
103
|
+
time-series data, geographic data. Pair with Lupton for the typographic
|
|
104
|
+
layer of the same dense surfaces.
|
|
105
|
+
|
|
106
|
+
Do NOT channel Tufte for: brand-forward surfaces where information
|
|
107
|
+
density is secondary (use Scher, Ive, Rams), narrative or editorial
|
|
108
|
+
content (Lupton, Bierut), or playful/delightful experiences (Walter,
|
|
109
|
+
Walsh).
|
|
110
|
+
|
|
111
|
+
## Stack translation
|
|
112
|
+
|
|
113
|
+
In React with chart libraries (Recharts, Visx, D3):
|
|
114
|
+
|
|
115
|
+
- **Data-ink** → strip default gridlines, axis decorations, plot
|
|
116
|
+
borders. Add back only what's needed.
|
|
117
|
+
- **Small multiples** → CSS grid of many small charts, shared axis,
|
|
118
|
+
consistent scale. `grid-cols-4` of 12 charts beats one giant chart.
|
|
119
|
+
- **Sparklines** → inline SVG components in table cells; no axis,
|
|
120
|
+
minimal color, 40-80px wide by 20px tall.
|
|
121
|
+
- **No chartjunk** → remove Recharts/Chart.js defaults (legends,
|
|
122
|
+
gridlines, tooltips) and add back only what's essential.
|
|
123
|
+
- **Integrity** → axis starts at zero for magnitude charts; don't
|
|
124
|
+
truncate. Use log scale explicitly and label it. Never stack areas
|
|
125
|
+
to imply a total that isn't.
|
|
126
|
+
|
|
127
|
+
## Anti-patterns it prevents
|
|
128
|
+
|
|
129
|
+
- **3D charts** — three-dimensional representation of 2D data. Adds
|
|
130
|
+
nothing; distorts everything.
|
|
131
|
+
- **Pie charts with many slices** — humans compare bar lengths better
|
|
132
|
+
than angles. Convert to horizontal bar chart.
|
|
133
|
+
- **Decorative dashboards** — dashboards that prioritize visual
|
|
134
|
+
impressiveness over information density. Colors without meaning,
|
|
135
|
+
gauges without data, sparklines as ornament.
|
|
136
|
+
- **Too many axes** — dual-axis charts overlaid without clear
|
|
137
|
+
separation. Viewer can't parse which line belongs to which axis.
|
|
138
|
+
- **Chart redundancy** — the same number shown as a card, in a chart,
|
|
139
|
+
and in a table on the same screen. Pick one.
|
|
140
|
+
- **Default library output** — shipping a Recharts chart without
|
|
141
|
+
styling it. Defaults are chartjunk; strip them.
|
|
142
|
+
|
|
143
|
+
## Worked example
|
|
144
|
+
|
|
145
|
+
For POA's deal-pipeline dashboard:
|
|
146
|
+
|
|
147
|
+
Tufte's approach:
|
|
148
|
+
- **Summary metrics**: large numbers in typographic weight, no
|
|
149
|
+
background cards, minimal chrome. "42 deals / $18M pipeline /
|
|
150
|
+
Q2 close rate 34%."
|
|
151
|
+
- **Stage progression**: small-multiples of each stage's deal count
|
|
152
|
+
over time (6 small line charts in a row, shared time axis).
|
|
153
|
+
- **Deal table**: dense, many rows visible, sparklines in the "age"
|
|
154
|
+
column showing days-in-current-stage.
|
|
155
|
+
- **Colors**: only where they encode data (stage color, alert state).
|
|
156
|
+
No decorative colors.
|
|
157
|
+
|
|
158
|
+
What Tufte would NOT produce: a dashboard with 3D bar charts, gauge
|
|
159
|
+
widgets, "funnel" visualizations with decorative gradients, animated
|
|
160
|
+
transitions that slow comprehension, or sidebars of big colored cards
|
|
161
|
+
that display single numbers with excessive chrome.
|
|
162
|
+
|
|
163
|
+
## Sources
|
|
164
|
+
|
|
165
|
+
- *The Visual Display of Quantitative Information* — Tufte, Graphics
|
|
166
|
+
Press (1983, rev. 2001) — foundational text
|
|
167
|
+
- *Envisioning Information* — Tufte (1990)
|
|
168
|
+
- *Visual Explanations* — Tufte (1997)
|
|
169
|
+
- *Beautiful Evidence* — Tufte (2006)
|
|
170
|
+
- edwardtufte.com — primary site
|
|
171
|
+
|
|
172
|
+
## Related luminaries
|
|
173
|
+
|
|
174
|
+
- **Ellen Lupton** — Lupton + Tufte pair for data-dense typographic
|
|
175
|
+
surfaces. Tufte's data-ink, Lupton's type hierarchy.
|
|
176
|
+
- **Dieter Rams** — Shared restraint philosophy; Rams in physical
|
|
177
|
+
objects, Tufte in information displays.
|
|
178
|
+
- **Jony Ive** — Shared obsessive precision; Tufte at the data layer,
|
|
179
|
+
Ive at the material layer.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Eric Evans
|
|
4
|
+
slug: eric-evans
|
|
5
|
+
claimed_by: [architect]
|
|
6
|
+
referenced_by_skills: [architect-review, decompose, ia-model]
|
|
7
|
+
primary_domain: architecture
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "Domain-Driven Design: Tackling Complexity in the Heart of Software"
|
|
12
|
+
authors: ["Eric Evans"]
|
|
13
|
+
year: 2003
|
|
14
|
+
url: "https://www.domainlanguage.com/ddd/"
|
|
15
|
+
isbn: "9780321125217"
|
|
16
|
+
methodology_covered:
|
|
17
|
+
- "Ubiquitous Language — single language shared by domain experts and developers"
|
|
18
|
+
- "Bounded Contexts — explicit boundaries within which a particular model is defined and applicable"
|
|
19
|
+
- "Aggregates + Aggregate Roots — clusters of associated objects treated as a unit for data changes"
|
|
20
|
+
- "Domain Events + Domain Services + Repositories + Factories"
|
|
21
|
+
- "Strategic Design — Context Mapping + relationships between bounded contexts"
|
|
22
|
+
- type: paper
|
|
23
|
+
title: "Domain-Driven Design Reference (definitions and pattern summaries)"
|
|
24
|
+
authors: ["Eric Evans"]
|
|
25
|
+
year: 2015
|
|
26
|
+
url: "https://www.domainlanguage.com/ddd/reference/"
|
|
27
|
+
methodology_covered:
|
|
28
|
+
- "Free reference document — distilled DDD patterns and definitions"
|
|
29
|
+
- "Quick-lookup vocabulary for ubiquitous-language conversations"
|
|
30
|
+
verification_status: verified
|
|
31
|
+
description: "\"The model is the backbone of the design."
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
# Eric Evans
|
|
35
|
+
|
|
36
|
+
## Signature
|
|
37
|
+
|
|
38
|
+
*"The model is the backbone of the design. Bounded contexts let multiple models coexist without collapsing into mud."*
|
|
39
|
+
|
|
40
|
+
Author of **Domain-Driven Design** (the "blue book," 2003). The
|
|
41
|
+
foundational voice on DDD — modeling complex domains through
|
|
42
|
+
ubiquitous language, bounded contexts, and strategic design.
|
|
43
|
+
|
|
44
|
+
## Core methods
|
|
45
|
+
|
|
46
|
+
- **Ubiquitous Language** — the same vocabulary used by domain experts,
|
|
47
|
+
designers, and developers. Code names match business terms. "Deal"
|
|
48
|
+
in the model IS "Deal" in the code, not "Transaction" or "Record".
|
|
49
|
+
- **Bounded Context** — an explicit boundary within which a particular
|
|
50
|
+
model applies. Multiple models can coexist (e.g., "Deal" in Acquisition
|
|
51
|
+
context vs "Deal" in Finance context) with documented translation
|
|
52
|
+
between them.
|
|
53
|
+
- **Context Map** — the strategic view of how bounded contexts relate
|
|
54
|
+
(Partnership, Shared Kernel, Customer/Supplier, Conformist, Anticorruption
|
|
55
|
+
Layer, Published Language, etc.).
|
|
56
|
+
- **Aggregates + Aggregate Roots** — cluster of domain objects treated
|
|
57
|
+
as a single unit for consistency. Root controls access; small
|
|
58
|
+
aggregates with references by ID between them.
|
|
59
|
+
- **Entities vs Value Objects** — entities have identity that persists
|
|
60
|
+
across state changes; value objects are immutable and defined by
|
|
61
|
+
their attributes (Money, DateRange, Address).
|
|
62
|
+
- **Domain Events** — things that happened in the domain worth
|
|
63
|
+
remembering (DealAdvanced, BrokerAssigned). Captured explicitly,
|
|
64
|
+
often drive integration between bounded contexts.
|
|
65
|
+
|
|
66
|
+
## When to channel this luminary
|
|
67
|
+
|
|
68
|
+
When the primary risk is domain complexity — multiple stakeholder
|
|
69
|
+
viewpoints, technical jargon that hides business meaning, or
|
|
70
|
+
schema-mirror code that ignores how the business thinks. Evans
|
|
71
|
+
dominates for B2B products with specialist users, regulated domains,
|
|
72
|
+
and enterprise integration work. Pair with Vernon (Implementing DDD —
|
|
73
|
+
operational methods) always.
|
|
74
|
+
|
|
75
|
+
Do NOT channel Evans for: CRUD apps with trivial domain logic,
|
|
76
|
+
consumer products where user is not a specialist, or single-bounded-
|
|
77
|
+
context systems small enough to model as one coherent whole.
|
|
78
|
+
|
|
79
|
+
## Stack translation
|
|
80
|
+
|
|
81
|
+
In Next.js + Prisma + TypeScript:
|
|
82
|
+
|
|
83
|
+
- **Ubiquitous Language** → Prisma model names, TypeScript types, React
|
|
84
|
+
component names, URL paths all use the same domain vocabulary as the
|
|
85
|
+
business. No translation layer needed.
|
|
86
|
+
- **Bounded Contexts** → separate domain directories under `lib/` per
|
|
87
|
+
bounded context (`lib/acquisition/`, `lib/finance/`), with explicit
|
|
88
|
+
mapping types at the boundary.
|
|
89
|
+
- **Aggregates** → Prisma's nested transaction boundaries align with
|
|
90
|
+
aggregate roots. A single `prisma.$transaction` should map to one
|
|
91
|
+
aggregate's invariants, not cross aggregates.
|
|
92
|
+
- **Value Objects** → TypeScript branded types for domain concepts
|
|
93
|
+
(`type DealId = string & { __brand: 'DealId' }`) prevent mixing.
|
|
94
|
+
- **Domain Events** → Prisma middleware hooks or explicit event-dispatch
|
|
95
|
+
in services; events drive downstream integration.
|
|
96
|
+
- **Anticorruption Layer** → adapters wrapping external APIs (enrichment
|
|
97
|
+
providers, email services) translate between their model and ours.
|
|
98
|
+
|
|
99
|
+
## Anti-patterns it prevents
|
|
100
|
+
|
|
101
|
+
- **Schema-mirror code** — code vocabulary that matches the database
|
|
102
|
+
table structure instead of the business domain. "UserDealJunction"
|
|
103
|
+
instead of "DealOwnership."
|
|
104
|
+
- **Anemic Domain Model** — objects that hold data without behavior;
|
|
105
|
+
business logic scattered across services. Evans prefers rich
|
|
106
|
+
domain objects with behavior co-located with state.
|
|
107
|
+
- **Big Ball of Mud** — one bounded context that tries to serve
|
|
108
|
+
every viewpoint. Acquisition logic mixed with reporting with
|
|
109
|
+
notifications all in one model.
|
|
110
|
+
- **Transaction Script for non-trivial domains** — procedural code
|
|
111
|
+
orchestrating DB calls; fine for simple CRUD, breaks under
|
|
112
|
+
complex business rules.
|
|
113
|
+
- **Linguistic leakage** — technical terms bleeding into business
|
|
114
|
+
communication ("let's persist the entity"). Ubiquitous Language
|
|
115
|
+
demands business vocabulary in both directions.
|
|
116
|
+
|
|
117
|
+
## Worked example
|
|
118
|
+
|
|
119
|
+
For POA's cross-module work (Acquisition + Communications + Reporting):
|
|
120
|
+
|
|
121
|
+
Evans's approach:
|
|
122
|
+
- **Three bounded contexts**, each with its own model:
|
|
123
|
+
- Acquisition: Deal, Seller, Buyer, Stage, Offer
|
|
124
|
+
- Communications: Thread, Message, Broker, Participant
|
|
125
|
+
- Reporting: DealSnapshot, StageAggregate, SourceMetrics
|
|
126
|
+
- **Context Map** showing relationships:
|
|
127
|
+
- Acquisition → Communications: Customer/Supplier (Communications
|
|
128
|
+
consumes Deal events from Acquisition)
|
|
129
|
+
- Acquisition → Reporting: Published Language (Reporting reads
|
|
130
|
+
read-only snapshots, never mutates Acquisition)
|
|
131
|
+
- **Ubiquitous Language per context** — a "Deal" in Acquisition is not
|
|
132
|
+
the same shape as a "DealSnapshot" in Reporting, and that's correct.
|
|
133
|
+
- **Aggregates**: Deal is aggregate root in Acquisition; Thread is
|
|
134
|
+
aggregate root in Communications. They reference each other by ID.
|
|
135
|
+
- **Domain Events**: `DealAdvanced` event fires from Acquisition, is
|
|
136
|
+
consumed by Communications (sends notifications) and Reporting
|
|
137
|
+
(updates aggregates).
|
|
138
|
+
|
|
139
|
+
What Evans would NOT produce: one Prisma schema where User, Deal,
|
|
140
|
+
Thread, and Report all share tables with "status" columns meaning
|
|
141
|
+
different things in different views. That's the ball of mud he's
|
|
142
|
+
explicitly preventing.
|
|
143
|
+
|
|
144
|
+
## Sources
|
|
145
|
+
|
|
146
|
+
- *Domain-Driven Design: Tackling Complexity in the Heart of Software* —
|
|
147
|
+
Evans, Addison-Wesley (2003) — THE foundational text
|
|
148
|
+
- *Domain-Driven Design Reference* — Evans (2015, free PDF at domainlanguage.com)
|
|
149
|
+
- domainlanguage.com — primary site
|
|
150
|
+
|
|
151
|
+
## Related luminaries
|
|
152
|
+
|
|
153
|
+
- **Vaughn Vernon** — Implementing DDD. Vernon operationalizes Evans
|
|
154
|
+
for teams new to DDD. Pair always.
|
|
155
|
+
- **Martin Fowler** — Patterns of Enterprise Application Architecture
|
|
156
|
+
provides implementation vocabulary for DDD's strategic concepts.
|
|
157
|
+
- **Alistair Cockburn** — Hexagonal Architecture contains bounded
|
|
158
|
+
contexts naturally; aggregates live inside hexagons.
|
|
159
|
+
- **Gregor Hohpe** — EIP's integration patterns operate across
|
|
160
|
+
Evans's context map relationships.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Frederick P. Brooks Jr.
|
|
4
|
+
slug: frederick-brooks
|
|
5
|
+
claimed_by: [orchestrator, architect]
|
|
6
|
+
referenced_by_skills: [sprint, architect-review]
|
|
7
|
+
primary_domain: orchestration
|
|
8
|
+
depth: stub
|
|
9
|
+
description: "\"Adding manpower to a late software project makes it later.\""
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Frederick P. Brooks Jr.
|
|
13
|
+
|
|
14
|
+
## Signature
|
|
15
|
+
|
|
16
|
+
*"Adding manpower to a late software project makes it later."*
|
|
17
|
+
|
|
18
|
+
Author of **The Mythical Man-Month** (1975, 1995). Canonical voice on
|
|
19
|
+
**coordination costs, communication overhead, and why software projects
|
|
20
|
+
fail at scale**. We invoke Brooks whenever the temptation is "throw more
|
|
21
|
+
agents at it."
|
|
22
|
+
|
|
23
|
+
## Core methods
|
|
24
|
+
|
|
25
|
+
- **Brooks's Law** — Adding people to a late project makes it later.
|
|
26
|
+
Onboarding cost + communication overhead > productive output of new
|
|
27
|
+
hires for the duration of the delay.
|
|
28
|
+
- **Communication overhead formula** — n people have n(n-1)/2
|
|
29
|
+
communication pathways. Coordination cost grows quadratically with team
|
|
30
|
+
size.
|
|
31
|
+
- **No silver bullet** — No single development advance will improve
|
|
32
|
+
software productivity by an order of magnitude. Beware grand claims.
|
|
33
|
+
- **Conceptual integrity over democratic design** — A single architect's
|
|
34
|
+
coherent vision beats a committee's compromise. Applies directly to
|
|
35
|
+
multi-agent orchestration: one coordinator, many executors.
|
|
36
|
+
|
|
37
|
+
## Sources
|
|
38
|
+
|
|
39
|
+
- *The Mythical Man-Month: Essays on Software Engineering* — Brooks,
|
|
40
|
+
Addison-Wesley (1975, 20th anniversary ed 1995)
|
|
41
|
+
- *"No Silver Bullet — Essence and Accident in Software Engineering"* —
|
|
42
|
+
Brooks (1986)
|
|
43
|
+
- Turing Award Lecture (1999)
|
|
44
|
+
|
|
45
|
+
## Related luminaries
|
|
46
|
+
|
|
47
|
+
- **Melvin Conway** — Conway's Law and Brooks's Law operate in the same
|
|
48
|
+
domain: organizational structure determines system structure and cost.
|
|
49
|
+
- **Catherine Wu (Anthropic)** — "Underfund on purpose" is Brooks's
|
|
50
|
+
insight applied to agent orchestration: fewer agents, tighter scope.
|
|
@@ -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.
|