@thebassclef/lite 0.1.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/dist/cli.cjs +431 -135
  2. package/dist/cli.js +433 -137
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/lite/.bassclef-source.json +10 -0
  7. package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
  8. package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
  9. package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
  10. package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
  11. package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
  12. package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
  13. package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
  14. package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
  15. package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
  16. package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
  17. package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
  18. package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
  19. package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
  20. package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
  21. package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
  22. package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
  23. package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
  24. package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
  25. package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
  26. package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
  27. package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
  28. package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
  29. package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
  30. package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
  31. package/dist/lite/.claude/settings.json +212 -0
  32. package/dist/lite/CLAUDE.md +41 -0
  33. package/dist/lite/gitignore +58 -0
  34. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  35. package/dist/lite/whereami.md +24 -0
  36. package/package.json +8 -2
  37. package/substrate/.bassclef/lite-manifest.json +0 -2701
  38. package/substrate/.claude/agents/architect.md +0 -70
  39. package/substrate/.claude/agents/builder.md +0 -114
  40. package/substrate/.claude/agents/designer.md +0 -156
  41. package/substrate/.claude/agents/reviewer.md +0 -88
  42. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  43. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,164 +0,0 @@
1
- ---
2
- tier: lite
3
- name: Robert C. Martin (Uncle Bob)
4
- slug: robert-c-martin
5
- claimed_by: [architect, builder, reviewer]
6
- referenced_by_skills: [pattern-review, decompose, architect-review]
7
- primary_domain: engineering
8
- depth: full
9
- sources:
10
- - type: book
11
- title: "Clean Code: A Handbook of Agile Software Craftsmanship"
12
- authors: ["Robert C. Martin"]
13
- year: 2008
14
- url: "https://www.pearson.com/en-us/subject-catalog/p/clean-code-a-handbook-of-agile-software-craftsmanship/P200000009044"
15
- isbn: "9780132350884"
16
- methodology_covered:
17
- - "Functions should do one thing and do it well"
18
- - "Meaningful names + small functions + no comments needed"
19
- - "Code smells inventory + remediation patterns"
20
- - "Boy Scout rule — leave the code cleaner than you found it"
21
- - type: book
22
- title: "Clean Architecture: A Craftsman's Guide to Software Structure and Design"
23
- authors: ["Robert C. Martin"]
24
- year: 2017
25
- url: "https://www.pearson.com/en-us/subject-catalog/p/clean-architecture-a-craftsmans-guide-to-software-structure-and-design/P200000009454"
26
- isbn: "9780134494166"
27
- methodology_covered:
28
- - "The Dependency Rule — source code dependencies always point inward"
29
- - "Business rules never import frameworks, UI, or databases"
30
- - "Boundaries between layers minimize ripple effects from external changes"
31
- - type: book
32
- title: "Agile Software Development: Principles, Patterns, and Practices"
33
- authors: ["Robert C. Martin"]
34
- year: 2002
35
- url: "https://www.pearson.com/en-us/subject-catalog/p/agile-software-development-principles-patterns-and-practices/P200000009250"
36
- isbn: "9780135974445"
37
- methodology_covered:
38
- - "SOLID principles — Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion"
39
- - "Original codification of the SOLID acronym and each principle"
40
- - type: book
41
- title: "The Clean Coder: A Code of Conduct for Professional Programmers"
42
- authors: ["Robert C. Martin"]
43
- year: 2011
44
- url: "https://www.pearson.com/en-us/subject-catalog/p/clean-coder-the-a-code-of-conduct-for-professional-programmers/P200000009422"
45
- isbn: "9780137081073"
46
- methodology_covered:
47
- - "Professional discipline — saying no, estimating honestly, practicing"
48
- - "Programming as profession with codes of conduct"
49
- verification_status: verified
50
- description: "\"Architecture is about intent, not frameworks."
51
- ---
52
-
53
- # Robert C. Martin (Uncle Bob)
54
-
55
- ## Signature
56
-
57
- *"Architecture is about intent, not frameworks. The only way to go fast is to go well."*
58
-
59
- Author of **Clean Code**, **Clean Architecture**, and **Clean Coder**.
60
- Coined SOLID. The bassclef voice on code quality as a continuous
61
- practice, not an end-of-project polish. We invoke Martin for SOLID,
62
- boundaries, testability, and functions that do one thing.
63
-
64
- ## Core methods
65
-
66
- - **SOLID principles** — Single Responsibility, Open/Closed, Liskov
67
- Substitution, Interface Segregation, Dependency Inversion. Five
68
- rules for OO design that survive decades of reapplication.
69
- - **Clean Architecture / Dependency Rule** — Source-code dependencies
70
- always point inward toward higher-level policy. Business rules don't
71
- know about frameworks, UI, or databases. Frameworks are plugins.
72
- - **Boundaries as architecture** — Architecture's job is defining which
73
- parts of the system are volatile and which are stable, and drawing
74
- boundaries between them. Boundaries allow deferral of decisions.
75
- - **Functions do one thing** — Small, single-purpose functions with
76
- descriptive names. Longest function should fit on a screen.
77
- - **Tests as first-class design constraint** — Code not written for
78
- testability produces code that can't be tested. TDD is the practice
79
- that enforces this discipline from the start.
80
-
81
- ## When to channel this luminary
82
-
83
- When the primary risk is code entropy — the product works today but
84
- becomes unmaintainable tomorrow. Martin dominates for long-lived
85
- codebases, teams that rotate, and systems that will be extended over
86
- years. Pair with Fowler (refactoring, patterns) and Beck (TDD,
87
- XP practices) for the engineering-quality triad.
88
-
89
- Do NOT channel Martin for: throwaway prototypes, one-off scripts,
90
- pure research code where cleanup isn't the point.
91
-
92
- ## Stack translation
93
-
94
- In Next.js + Prisma + TypeScript:
95
-
96
- - **Single Responsibility** → one component per concern; extract
97
- `useXHook` when a component has multiple reasons to change.
98
- - **Open/Closed** → extend via props/config, not by modifying existing
99
- components. Strategy pattern for varying behavior.
100
- - **Liskov** → interface contracts respected across implementations.
101
- React component prop types that subtypes must honor.
102
- - **Interface Segregation** → component prop types that don't force
103
- consumers to provide unneeded props. Split large prop types into
104
- focused ones.
105
- - **Dependency Inversion** → depend on interfaces, not concrete
106
- services. Facade pattern + interface → enables test stubs and
107
- provider swaps (see `/decompose` Phase 1 Interface Registry).
108
- - **Clean Architecture** → business logic in `lib/services/`;
109
- adapters in `lib/adapters/`; controllers in `app/api/` + `app/actions/`;
110
- frameworks stay at the edges.
111
-
112
- ## Anti-patterns it prevents
113
-
114
- - **God components** — one component doing validation + business logic
115
- + DB call + side effects. Violates Single Responsibility.
116
- - **Framework coupling in business logic** — Prisma imports in
117
- domain-logic files, React hooks in pure computation. Violates
118
- Dependency Rule.
119
- - **Feature envy** — a class/component that reaches into another's
120
- internals. Signal the responsibility is mis-assigned.
121
- - **Untested code** — if it's not covered, it's broken by default.
122
- Covered code is the minimum bar.
123
- - **Clever code** — concise-but-unreadable constructs. Clean Code
124
- requires clarity over brevity.
125
-
126
- ## Worked example
127
-
128
- For POA's deal-scoring system:
129
-
130
- Martin's approach:
131
- - `ScoringService` (Pure Fabrication per GRASP + SRP per SOLID) —
132
- orchestrates scoring, doesn't own score data
133
- - `IScoringStrategy` interface — Open/Closed: new scoring rules as
134
- new classes, not edits to existing code
135
- - `WeightedScorer` / `BooleanScorer` / `MLScorer` — concrete strategies
136
- - `ScoringController` as a thin server action — no business logic,
137
- just wires strategy + service + response
138
- - All of the above: unit tested. The service mocks the strategy; the
139
- strategy is tested in isolation; the controller is tested with
140
- service stub.
141
-
142
- What Martin would NOT produce: a 400-line server action that directly
143
- queries Prisma, applies scoring math inline, sends notifications, and
144
- logs telemetry. That's every SOLID principle violated in one route.
145
-
146
- ## Sources
147
-
148
- - *Clean Code* — Martin, Prentice Hall (2008)
149
- - *Clean Architecture* — Martin, Prentice Hall (2017)
150
- - *The Clean Coder* — Martin (2011)
151
- - *Agile Software Development: Principles, Patterns, and Practices* — Martin (2002)
152
- - cleancoders.com — video series
153
- - blog.cleancoder.com
154
-
155
- ## Related luminaries
156
-
157
- - **Martin Fowler** — Shared rigor; Fowler provides patterns + refactoring,
158
- Martin provides principles. Pair always.
159
- - **Kent Beck** — TDD discipline Martin endorses; Beck operational,
160
- Martin principles.
161
- - **Alistair Cockburn** — Hexagonal Architecture is a specific
162
- implementation of Clean Architecture's boundary rule.
163
- - **Gang of Four** — Martin recommends GoF patterns as implementation
164
- vocabulary for SOLID principles.
@@ -1,194 +0,0 @@
1
- ---
2
- tier: lite
3
- name: Jerome Saltzer & Michael Schroeder
4
- slug: saltzer-schroeder
5
- claimed_by: [architect, reviewer, builder, security-auditor]
6
- referenced_by_skills: [security-review, architect-review, pattern-review, diagnose]
7
- primary_domain: security
8
- depth: full
9
- sources:
10
- - type: paper
11
- title: "The Protection of Information in Computer Systems"
12
- authors: ["Jerome H. Saltzer", "Michael D. Schroeder"]
13
- year: 1975
14
- edition: "Proceedings of the IEEE, vol. 63, no. 9, pp. 1278-1308"
15
- url: "https://www.cs.virginia.edu/~evans/cs551/saltzer/"
16
- methodology_covered:
17
- - "Eight design principles for secure systems — economy of mechanism, fail-safe defaults, complete mediation, open design, separation of privilege, least privilege, least common mechanism, psychological acceptability"
18
- - "The model of protected objects and authorized subjects; access matrix as the conceptual base"
19
- - "Capability and ACL implementations of the access matrix"
20
- - "Authentication vs authorization as separate concerns"
21
- - type: paper
22
- title: "Computer Security in the Real World"
23
- authors: ["Butler W. Lampson"]
24
- year: 2004
25
- url: "https://www.microsoft.com/en-us/research/publication/computer-security-in-the-real-world/"
26
- methodology_covered:
27
- - "Modern reframing of the 1975 principles for distributed systems"
28
- - "Gold standard — authenticate, authorize, audit — three legs every protection scheme requires"
29
- verification_status: verified
30
- description: "\"The principles are intended to guide the design of protection mechanisms..."
31
- ---
32
-
33
- # Jerome Saltzer & Michael Schroeder
34
-
35
- ## Signature
36
-
37
- *"The principles are intended to guide the design of protection mechanisms... they do not by themselves guarantee security, but they make insecurity easier to spot."*
38
-
39
- MIT computer scientists. Their 1975 paper articulated eight design principles for secure systems that remain SENTINEL_the_bassclef_reference fifty years later. The principles predate the public internet, predate the web, predate every modern threat model — and still hold because they are about the *shape* of protection mechanisms, not the threats they defend against. When a new attack class lands, the analysis tool that maps it back to which principle was violated is almost always Saltzer & Schroeder.
40
-
41
- The principles pair with later work: Lampson's "gold standard" (authenticate, authorize, audit) extends complete mediation; Anderson's *Security Engineering* puts every principle through industrial worked examples; OWASP's top-10 is a downstream symptom catalog whose root causes the principles name.
42
-
43
- ## Discipline anchor
44
-
45
- **Designing protection mechanisms whose failure modes are visible at write-time.**
46
-
47
- Saltzer & Schroeder fire on every moment a substrate component touches access, authority, scope, default behavior, or trust boundaries.
48
- INSTEAD of waiting for an exploit to surface a missing check: the principles ask, at write-time, whether the mechanism's shape *makes* insecurity possible. Code that violates a principle is a defect even if no exploit has yet been demonstrated; code that conforms is a defense against threats the author did not foresee.
49
-
50
- This luminary anchors the security lens for:
51
- - `/security-review` — checks PRs against the 8 principles
52
- - `/architect-review` — system-level design reviews look for principle violations at architectural boundaries
53
- - `/pattern-review` — pattern selection (e.g., Decorator for logging, Strategy for auth) gets the principle lens
54
-
55
- For usability-first questions, route to `@luminary don-norman` (cognitive load of mode prompts).
56
- INSTEAD of citing Saltzer & Schroeder there: cite Norman. For API ergonomics, route to `@luminary john-ousterhout` (deep modules); for test mechanics, route to `@luminary kent-beck`.
57
-
58
- ## The eight principles
59
-
60
- ### 1. Economy of mechanism
61
-
62
- Keep the design as small and simple as possible. Protection mechanisms are inspected for correctness by reasoning about their behavior; the smaller and simpler the mechanism, the more reliable the inspection.
63
-
64
- Clever checks that require careful reasoning to verify carry inspection cost forever.
65
- INSTEAD of building one: build a check that any reviewer can read once and accept.
66
-
67
- **Bassclef example.** `.claude/rules/destructive-operations.md` instructs agents to pause before any state-modifying command. The rule is one page. A sophisticated heuristic engine would carry hidden states.
68
- INSTEAD: a short rule + a hard list of trigger verbs. Small mechanism; correctness inspectable in a single read.
69
-
70
- ### 2. Fail-safe defaults
71
-
72
- Base access decisions on permission rather than exclusion. The default situation is *lack of access*; the protection scheme identifies conditions under which access is permitted.
73
-
74
- The shape "permit by default, deny on explicit refusal" produces a permanent risk surface — every new code path or branch type opens an unintended hole.
75
- INSTEAD: deny by default, permit on explicit authorization.
76
-
77
- **Bassclef example — the failure that motivated this luminary.** PR #1058's original auto-save design committed to whatever branch was active by default; the safety check was a list of refused branches (main, master, spike). Adding a new branch type (e.g., release/, hotfix/) silently worked — auto-save would commit there too. The default was "save" and the exceptions were "refuse." That violates fail-safe defaults.
78
- INSTEAD: auto-save should DENY by default; an explicit allowlist (chore/, scratch/, feature/, fix/) permits. A new branch type is denied until explicitly added. The author of the new branch is forced to make the decision visible.
79
-
80
- ### 3. Complete mediation
81
-
82
- Every access to every object must be checked for authority. The mechanism must intercept every attempt without exception.
83
-
84
- A "check at the boundary and trust internal callers" shape produces a permanent silent-bypass surface — any internal path that skips the boundary skips the check.
85
- INSTEAD: check at every access. The cost of one extra check is small; the cost of one missed check can be the whole system.
86
-
87
- **Bassclef example.** `.claude/hooks/state-validate.sh` fires on every Edit / Write / MultiEdit to a state-spine path. Validating only at "official" entry points leaves alternative tool paths unmediated.
88
- INSTEAD: the hook intercepts every write regardless of which tool made it. An agent that writes via a less-common tool path does not slip past the validator.
89
-
90
- ### 4. Open design
91
-
92
- The protection mechanism's design should not depend on attacker ignorance of mechanism. Security through obscurity is weak; security through inspectable, public, well-reasoned design is strong.
93
-
94
- "They will not know about this hidden flag" is a fragile assumption that erodes on the first leak.
95
- INSTEAD: publish the flag, document the threat model, and rely on the mechanism (e.g., cryptographic key separation) for the actual protection.
96
-
97
- **Bassclef example.** Bassclef's hooks, rules, and skills are all readable in the repo. Hiding which checks fire when would produce ambiguity about safety state.
98
- INSTEAD: hooks announce themselves in chronicle, in BLOCKED banners, in trace logs. An agent that knows every hook's trigger condition cannot evade them by accident; the safety is in the hook firing on the trigger, not in the trigger being secret.
99
-
100
- ### 5. Separation of privilege
101
-
102
- A protection mechanism that requires two independent checks is stronger than one that requires a single check. (The classic two-key safe analog.)
103
-
104
- A single-signature unlock shape produces a single point of compromise.
105
- INSTEAD: require operator confirmation AND a CI passing AND a manual approval gate.
106
-
107
- **Bassclef example.** Production deploys require GitHub Environment with `required_reviewers` (per `.claude/rules/manual-prod-approval.md`) AND the deploy-guard.sh hook firing AND `gh pr merge` from an operator account. Three independent checks. A single compromise (e.g., agent's GitHub token) cannot deploy to production by itself.
108
-
109
- ### 6. Least privilege
110
-
111
- Every program and every user of the system should operate using the least set of privileges necessary to complete the job.
112
-
113
- Granting "read + write + delete + admin" because it is easier produces a permanent blast-radius surface.
114
- INSTEAD: grant only what the specific operation requires. A read-only operation gets a read-only credential. A write to one path gets write access to that path only.
115
-
116
- **Bassclef example — the failure that motivated this luminary.** PR #1058's original auto-save design granted auto-save the privilege to commit to *every* branch the agent visited. Auto-save needs the privilege to checkpoint work-in-progress on chore + scratch branches.
117
- INSTEAD: scope auto-save to the branches that actually need it; deny everywhere else.
118
-
119
- Bassclef token discipline (per memory `feedback_never_paste_tokens_in_chat`) applies the same principle.
120
- INSTEAD of granting broad-scope tokens for narrow-scope work: use fine-grained PATs with minimal target-repo scope rather than full-org admin tokens.
121
-
122
- ### 7. Least common mechanism
123
-
124
- Minimize the amount of mechanism shared by multiple users (or programs). Shared mechanisms are potential information paths and attack surfaces.
125
-
126
- "One big config file for all secrets" produces cross-purpose attack surface.
127
- INSTEAD: separate per-purpose stores. For multi-tenant systems: isolate per-tenant where the cost is reasonable rather than running one daemon for every tenant.
128
-
129
- **Bassclef example.** `state/markers/temperance/` writes per-branch marker files instead of a single shared marker. A single global "temperance fired this session" flag would carry cross-scope trust.
130
- INSTEAD: per-branch markers isolate the trust decision to its scope. A marker on branch A cannot grant temperance approval to branch B.
131
-
132
- ### 8. Psychological acceptability
133
-
134
- Human interface to the protection mechanism must be designed for ease of use. If users find the mechanism annoying or confusing, they will work around it.
135
-
136
- "Secure but unusable" produces operator workarounds — the most cryptographically perfect protection scheme is worthless if operators bypass it.
137
- INSTEAD: secure AND usable.
138
-
139
- **Bassclef example.** The `SKIP_*=1` override pattern across bassclef's hooks (e.g., `SKIP_TEMPERANCE=1`, `SKIP_DIAGNOSE=1`) provides an escape valve for cases where the gate is wrong. "Hard block with no override" produces operators who disable hooks entirely.
140
- INSTEAD: hard block with a logged override. Operators bypass per-call when they understand the trade-off, and the trace surfaces the bypass.
141
-
142
- Override usage is signal, not failure.
143
- INSTEAD of treating override usage as failure: track override frequency. If a hook is overridden >10% of the time, the hook is mistargeted — psychological acceptability is failing and the hook needs redesign.
144
-
145
- ## Stack translation — applying the principles to bassclef's bash hooks
146
-
147
- Bassclef's hooks are bash scripts under `.claude/hooks/*.sh`. The eight principles map directly to bash hook authoring:
148
-
149
- | Principle | Bash hook discipline |
150
- |---|---|
151
- | **Economy of mechanism** | Hook body ≤200 lines for inspectability; helpers in `lib/*.sh` so the hook reads top-to-bottom |
152
- | **Fail-safe defaults** | `set -euo pipefail` at top of every hook — undefined variables and pipe failures FAIL rather than passing silently |
153
- | **Complete mediation** | PreToolUse hooks fire on every matching tool call, not "first call per session" |
154
- | **Open design** | Hook trigger conditions documented in `docs/hooks-index.md`; BLOCKED banners name the path the hook reads |
155
- | **Separation of privilege** | Destructive hooks (e.g., deploy-guard.sh) check operator confirmation AND state-spine signal AND env var — three independent conditions |
156
- | **Least privilege** | Hooks `cd` to repo root only when needed; `git` commands scope to specific paths; file modes scoped to minimum-needed (644 for data, 755 for executables) |
157
- | **Least common mechanism** | Per-hook test files (`.claude/hooks/tests/<name>.test.sh`); per-hook trace context; no shared global state between hooks |
158
- | **Psychological acceptability** | `SKIP_<HOOK>=1` per-call override; logged via trace-helper; operator-bypass is per-call, surface-visible |
159
-
160
- This translation block is the substrate-internal reference for Phase X-3 (`standards/bash-hook-safety.md` + `.claude/rules/defensive-bash.md`). The standard codifies the discipline; this luminary names the principles the discipline implements.
161
-
162
- ## When to cite this luminary
163
-
164
- Cite `@luminary saltzer-schroeder` when:
165
-
166
- - **Reviewing protection mechanisms** (`/security-review`, `/architect-review`) — does this default deny or permit? Is mediation complete? Is privilege minimal?
167
- - **Designing default behaviors** — particularly when a default determines whether dangerous-by-default or safe-by-default applies (the auto-save case is the SENTINEL_bassclef_example)
168
- - **Adding override paths** — does the override get logged? Is the trade-off named? Is the override scope per-call or per-session?
169
- - **Authoring hooks** — bash hook safety (Phase X-3) instantiates the principles; the luminary names what the hook discipline is implementing
170
- - **Diagnosing security regressions** — `/diagnose` reaches for this luminary when the failure surface involves trust boundaries, default behavior, scope creep, or missed checks
171
- - **Designing tenant isolation** — least common mechanism + least privilege apply to multi-tenant systems directly
172
-
173
- For threat-model authoring (analyzing what attackers can do given the protection mechanisms), route to Schneier — separate luminary candidate; Phase X+ follow-on.
174
- INSTEAD of stretching Saltzer & Schroeder into threat modeling: cite Schneier when the catalog lands.
175
-
176
- For cryptographic primitive selection — out of bassclef's anchor catalog today.
177
-
178
- ## Composes with
179
-
180
- - **John Ousterhout** — Deep modules + define errors out of existence overlap with economy-of-mechanism + complete-mediation. Ousterhout's design judgment frames WHEN to apply Saltzer & Schroeder.
181
- - **Kent Beck** — Tests for protection mechanisms verify the default behavior matches the design intent. A test that asserts "auto-save refuses main" is the mechanical guarantee fail-safe-defaults specifies.
182
- - **Don Norman** — Psychological acceptability is the same surface as Norman's cognitive-load principle for system design. The operator-facing behavior of a security mechanism IS its UX.
183
- INSTEAD of treating them as separate concerns: Norman's lens applies directly to override design + BLOCKED banner phrasing + hook-error message clarity.
184
- - **Edward Tufte** — When protection mechanisms produce telemetry (e.g., trace logs of overrides), Tufte's information-design discipline anchors how that telemetry surfaces to operators.
185
-
186
- ## Refs
187
-
188
- - bassclef#1058 — concrete failure (auto-save scope hole) that surfaced the need for this luminary at the substrate
189
- - bassclef#1060 / PR #1061 — temperance mechanical block (sibling discipline-becomes-mechanical pattern; complete-mediation in action)
190
- - `.claude/rules/destructive-operations.md` — agent self-assessment rule that this luminary anchors
191
- - `.claude/rules/security.md` — existing rule scoped to `.ts/.tsx/.json/.env/Dockerfile`; bash extension is Phase X-3
192
- - `docs/iteration-bets/2026-06-17a-secure-coding-foundations-longrun.md` Phase X scope
193
- - `standards/code-safety-principles.md` (Phase X-2) — language-agnostic principles document this luminary anchors
194
- - `standards/bash-hook-safety.md` (Phase X-3) — bash-specific instantiation of the stack-translation table above
@@ -1,193 +0,0 @@
1
- ---
2
- tier: lite
3
- name: Sophia V. Prater
4
- slug: sophia-prater
5
- claimed_by: [designer]
6
- referenced_by_skills: [ia-model, prototype-variants, interaction-design]
7
- primary_domain: ux
8
- depth: full
9
- verification_status: verified
10
- sources:
11
- - type: article
12
- title: "Object-Oriented UX"
13
- authors: ["Sophia V. Prater"]
14
- year: 2016
15
- url: "https://alistapart.com/article/object-oriented-ux/"
16
- methodology_covered: ["OOUX methodology introduction", "objects vs tasks framing", "object-first IA"]
17
- - type: website
18
- title: "ooux.com — Object-Oriented UX"
19
- authors: ["Sophia V. Prater"]
20
- url: "https://ooux.com"
21
- methodology_covered: ["ORCA process (Objects/Relationships/CTAs/Attributes)", "OOUX certification and training"]
22
- - type: course
23
- title: "OOUX Certified Course"
24
- authors: ["Sophia V. Prater"]
25
- url: "https://ooux.com/learn"
26
- methodology_covered: ["Full ORCA process methodology", "object inventory technique", "system model alignment"]
27
- solves_problems_brownfield:
28
- - "Existing multi-entity app where users mentally model objects but UI exposes screens or processes"
29
- - "Same entity appears in many flows but isn't unified as a concept"
30
- - "Navigation doesn't reflect the domain's noun structure"
31
- solves_problems_greenfield:
32
- - "Designing a CRUD-heavy or domain-rich product where entity relationships should drive the UI"
33
- - "Planning IA from the domain model first, not from process flows"
34
- - "Building an app where users will mentally manipulate objects and the UI should match from day one"
35
- - "Designing a multi-entity product where consistent entity expression matters across surfaces"
36
- anti_patterns:
37
- - "Process-driven workflows where actions matter more than objects"
38
- - "Single-entity tools or marketing surfaces"
39
- description: "\"Objects first, then actions. Never the reverse.\""
40
- ---
41
-
42
- # Sophia V. Prater
43
-
44
- ## Signature
45
-
46
- *"Objects first, then actions. Never the reverse."*
47
-
48
- The interface should mirror the user's mental model of the domain — not
49
- the database schema that powers it. Complexity in data-heavy products is
50
- a symptom of letting system structure leak into the UI. Structure the
51
- content first, rigorously, and the interface follows.
52
-
53
- ## Core methods
54
-
55
- - **ORCA process** — Objects, Relationships, CTAs, Attributes. The four-step
56
- method for structuring messy domains before any wireframe. Apply when a
57
- spec has 5+ entities with non-trivial relationships or when a domain
58
- has regulatory/data-density pressure. [ref:2]
59
-
60
- - **Mental model vs system model** — Before accepting any information
61
- architecture, ask: "Does this match how the *user* thinks about this
62
- domain, or how the *database* stores it?" They are rarely the same.
63
- Schema-mirror UIs pass code review but fail in the wild. [ref:1]
64
-
65
- - **Progressive disclosure for data density** — Stratify information by
66
- user journey stage. Data novices should see the core "heavy" nouns at
67
- first glance; power users get the full attribute surface on demand.
68
- Visual weight encodes priority; collapsed sections encode optionality.
69
-
70
- - **Componentized content** — Build a structured object model first, then
71
- derive UI components from objects (not from feature lists). Each object
72
- gets a detail view; relationships drive navigation; attributes map to
73
- field-level components. This is what makes OOUX modular under scale.
74
-
75
- ## When to channel this luminary
76
-
77
- When the domain is **data-heavy and relationally complex** — multiple
78
- entities with non-trivial relationships, regulatory or compliance density,
79
- or a user population that spans novice-to-power-user ranges. Prater
80
- dominates when the biggest risk is that the interface will mirror the
81
- schema instead of the user's mental model. Think: deal pipelines,
82
- compliance dashboards, clinical records, logistics systems, financial
83
- portfolios.
84
-
85
- Do NOT channel Prater for simple CRUD apps, single-entity workflows, or
86
- consumer-facing surfaces where entity structure is irrelevant to the user.
87
-
88
- ## Stack translation
89
-
90
- In our Next.js + Prisma + React stack, ORCA maps concretely:
91
-
92
- - **Objects** → Prisma models (Deal, Broker, Seller, Buyer, Listing).
93
- Prater's object inventory is essentially the domain-driven subset of
94
- the Prisma schema.
95
- - **Relationships** → Prisma relations (`@relation`) and `/ia-model`
96
- entity diagrams. Every relation is a potential navigation path.
97
- - **CTAs** → server actions (`src/app/actions/`) + route handlers
98
- (`src/app/api/`). Each CTA is an action the user can take on an object.
99
- - **Attributes** → field-level visibility rules. Not every attribute
100
- belongs on every screen — progressive disclosure means the detail view
101
- shows priority attributes first, secondary attributes behind expansion.
102
-
103
- The IA step in `/ia-model` IS Prater's ORCA. When we say "entity inventory
104
- + task flows," we're describing ORCA without naming it. The `/decompose`
105
- skill inherits this: its Responsibility Matrix is downstream of ORCA's
106
- object inventory.
107
-
108
- ## Anti-patterns it prevents
109
-
110
- - **Schema-mirror UI** — The biggest data-heavy failure: the UI exposes
111
- join tables, foreign keys, and normalization artifacts as navigation.
112
- Users see "Deal-Broker Junction Records" instead of "Deals this broker
113
- touched." Prater's mental-vs-system-model check catches this.
114
-
115
- - **Attribute flood** — Detail views that dump every field without
116
- hierarchy. 47 fields in a grid, no prioritization, no progressive
117
- disclosure. Users scan and bounce. Prater's visual-weight layering
118
- forces a priority decision per field.
119
-
120
- - **Feature-first navigation** — Primary nav organized by feature ("Deals,"
121
- "Search," "Import," "Reports") instead of by object ("Deals, Brokers,
122
- Sellers"). Features multiply and the nav collapses under its own
123
- weight. Object-first nav scales with the domain, not the feature set.
124
-
125
- - **Task-flow-only IA** — Designing only for the happy path, ignoring
126
- that users need to browse, compare, and navigate across objects. Prater
127
- insists on both: task flows AND object structure. Task flows without
128
- object structure produce funnel interfaces that break on sideways use.
129
-
130
- - **Monolithic list-detail pattern** — Every entity gets the same "list
131
- → detail → edit" treatment regardless of its role in the mental model.
132
- Prater's componentized content says: the list-detail pattern is one of
133
- several, not the default. Some objects are better as graphs, timelines,
134
- or maps.
135
-
136
- ## Worked example
137
-
138
- For a POA deal pipeline (our primary Five Pandas surface), applying Prater
139
- looks like this:
140
-
141
- 1. **Objects inventory**: Deal, Broker, Seller, Buyer, Listing Source
142
- (BizBuySell, LoopNet, direct), Stage (Discovery, Valuation, LOI, etc.),
143
- Note, Attachment. Not tables. Not features. Nouns.
144
-
145
- 2. **Relationships**: A Deal has one Seller, zero-or-more Brokers, one
146
- Source, passes through ordered Stages, accumulates Notes and
147
- Attachments. Each relation is a potential nav path the user might
148
- traverse: "show me everything this broker touched," "show me all deals
149
- in LOI stage," "show me all deals from BizBuySell this month."
150
-
151
- 3. **CTAs per object**: Deal has Advance-Stage, Log-Note, Attach-Document,
152
- Reassign-Broker, Archive. Broker has Log-Interaction, Flag-Inactive.
153
- These become server actions, not buttons-on-a-page.
154
-
155
- 4. **Attributes with priority**: Deal's detail view shows Stage, Seller,
156
- Source, Score above the fold. Financial attributes (asking price, SDE
157
- multiple, cash required) in the next tier. Enrichment data (real
158
- estate, relocatability, expansion potential) collapsed until the user
159
- expands it. Audit fields (created_at, updated_at, last_touched_by)
160
- footer-level.
161
-
162
- What Prater would NOT produce: a left-nav with "Database / Deal-Broker
163
- Relationships" exposed. A detail view dumping all 47 fields in a grid.
164
- A "features" top-level nav. These are all schema-mirror tells.
165
-
166
- ## Sources
167
-
168
- - **ooux.com** — primary site, ORCA method articulated
169
- - **"Object-Oriented UX"** — A List Apart article (2016) introducing OOUX
170
- to a mainstream UX audience
171
- - **"A UX Designer's Guide to OOUX"** — Medium essay series by Prater
172
- - **OOUX Strategist certification course** — Prater's structured
173
- curriculum; the most complete treatment of ORCA as a teachable method
174
- - **Rosenfeld Media OOUX book** — forthcoming; will be canonical reference
175
- when published
176
-
177
- ## Related luminaries
178
-
179
- - **Peter Morville & Louis Rosenfeld** — Findability and IA foundations;
180
- Prater's work builds on their "Information Architecture for the Web"
181
- tradition with a sharper object-orientation focus.
182
- - **Alan Cooper** — Goal-Directed Design shares Prater's "start from
183
- user, not system" orientation; Cooper frames it as goals, Prater as
184
- objects. Complementary, not conflicting.
185
- - **Don Norman** — Affordances and signifiers operate at the interaction
186
- level; Prater operates at the structural level above. Use both: Prater
187
- for IA, Norman for the interaction patterns within each screen.
188
- - **Richard Saul Wurman** — LATCH (Location, Alphabet, Time, Category,
189
- Hierarchy) is a pre-OOUX attempt at content structuring. Prater's ORCA
190
- is a sharper descendant for relational domains.
191
- - **Jenifer Tidwell** — Pattern library sits downstream of OOUX: once
192
- objects are identified, Tidwell's patterns inform how each object's
193
- views are composed.