@thebassclef/lite 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +85 -4
- package/dist/cli.cjs +1610 -0
- package/dist/cli.js +1587 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +51 -3
- package/substrate/.bassclef/lite-manifest.json +1794 -0
- package/substrate/.claude/agents/architect.md +70 -0
- package/substrate/.claude/agents/builder.md +114 -0
- package/substrate/.claude/agents/designer.md +156 -0
- package/substrate/.claude/agents/reviewer.md +88 -0
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
- package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
- package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
- package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
- package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
- package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
- package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
- package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +452 -0
- package/substrate/.claude/hooks/session-end.sh +433 -0
- package/substrate/.claude/hooks/session-reflection.sh +303 -0
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
- package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
- package/substrate/.claude/hooks/state-validate.sh +271 -0
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
- package/substrate/.claude/hooks/temperance-gate.sh +147 -0
- package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +434 -0
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
- package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
- package/substrate/.claude/luminaries/alan-cooper.md +170 -0
- package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
- package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/substrate/.claude/luminaries/ash-maurya.md +121 -0
- package/substrate/.claude/luminaries/bill-buxton.md +210 -0
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
- package/substrate/.claude/luminaries/don-norman.md +173 -0
- package/substrate/.claude/luminaries/edward-tufte.md +179 -0
- package/substrate/.claude/luminaries/eric-evans.md +160 -0
- package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
- package/substrate/.claude/luminaries/gang-of-four.md +157 -0
- package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
- package/substrate/.claude/luminaries/karl-popper.md +132 -0
- package/substrate/.claude/luminaries/kent-beck.md +168 -0
- package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
- package/substrate/.claude/luminaries/martin-fowler.md +164 -0
- package/substrate/.claude/luminaries/michael-feathers.md +125 -0
- package/substrate/.claude/luminaries/michael-nygard.md +118 -0
- package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
- package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/substrate/.claude/luminaries/sophia-prater.md +193 -0
- package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
- package/substrate/.claude/rules/artifact-ingestion.md +179 -0
- package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
- package/substrate/.claude/rules/blocked-items.md +146 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
- package/substrate/.claude/rules/operator-facing-prose.md +196 -0
- package/substrate/.claude/rules/plain-english-discipline.md +154 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
- package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
- package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
- package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +924 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +426 -0
- package/substrate/.claude/skills/luminary/SKILL.md +481 -0
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/substrate/.claude/skills/onboard-repo/SKILL.md +2190 -0
- package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
- package/substrate/.claude/skills/personas/SKILL.md +207 -0
- package/substrate/.claude/skills/promote/SKILL.md +283 -0
- package/substrate/.claude/skills/requirement/SKILL.md +98 -0
- package/substrate/.claude/skills/retro/SKILL.md +117 -0
- package/substrate/.claude/skills/riff/SKILL.md +114 -0
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/substrate/.claude/skills/session-end/SKILL.md +309 -0
- package/substrate/.claude/skills/session-log/SKILL.md +299 -0
- package/substrate/.claude/skills/skills/SKILL.md +228 -0
- package/substrate/.claude/skills/spec/SKILL.md +105 -0
- package/substrate/.claude/skills/sprint/SKILL.md +392 -0
- package/substrate/.claude/skills/stage/SKILL.md +384 -0
- package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/substrate/.claude/skills/temperance/SKILL.md +108 -0
- package/substrate/.claude/skills/use-case/SKILL.md +417 -0
- package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
- package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
- package/substrate/.claude/skills/verify/SKILL.md +160 -0
- package/substrate/.claude/skills/whereami/SKILL.md +307 -0
- package/substrate/AGENTS.md +79 -0
- package/substrate/CLAUDE-lite.md +85 -0
- package/substrate/CODE_OF_CONDUCT.md +28 -0
- package/substrate/CONTRIBUTING.md +177 -0
- package/substrate/README.md +173 -0
- package/substrate/SECURITY.md +19 -0
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/substrate/lib/clean-artifacts-sweep.sh +112 -0
- package/substrate/lib/code-comment-discipline.sh +144 -0
- package/substrate/lib/composer-preflight.sh +459 -0
- package/substrate/lib/hook-inject.sh +255 -0
- package/substrate/lib/luminary-pick.sh +96 -0
- package/substrate/lib/output-discipline.sh +143 -0
- package/substrate/lib/rewrite-check.sh +214 -0
- package/substrate/lib/state.sh +1372 -0
- package/substrate/lib/telemetry.sh +205 -0
- package/substrate/lib/tier-check.sh +138 -0
- package/substrate/lib/tier-dependency-audit.sh +933 -0
- package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
- package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/substrate/scripts/aggregate-telemetry.sh +217 -0
- package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
- package/substrate/scripts/generate-lite-manifest.sh +489 -0
- package/substrate/scripts/generate-tier-manifest.sh +28 -0
- package/substrate/scripts/intent-drift-check.sh +456 -0
- package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
- package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
- package/substrate/standards/bassclef-configs-schema.md +232 -0
- package/substrate/standards/bassclef-evolution.md +143 -0
- package/substrate/standards/bassclef-internal-jargon.md +244 -0
- package/substrate/standards/bassclef-managed-sentinel.md +96 -0
- package/substrate/standards/bassclef-source-config.md +228 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/lite-manifest-schema-changes.md +75 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/ogilvy-writing-rules.md +225 -0
- package/substrate/standards/opener-discipline.md +96 -0
- package/substrate/standards/operator-facing-prose-discipline.md +201 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/tech-stack-config.md +109 -0
- package/substrate/standards/tier-dependency-analysis.md +167 -0
- package/substrate/standards/tier-runtime-deps/lite.md +57 -0
- package/substrate/standards/tier-tag-schema.md +155 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,193 @@
|
|
|
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.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Stephen Toulmin
|
|
4
|
+
slug: stephen-toulmin
|
|
5
|
+
claimed_by: [architect, reviewer, closer]
|
|
6
|
+
referenced_by_skills: [state-a-problem, diagnose, architect-review, promote]
|
|
7
|
+
primary_domain: philosophy
|
|
8
|
+
depth: full
|
|
9
|
+
sources:
|
|
10
|
+
- type: book
|
|
11
|
+
title: "The Uses of Argument"
|
|
12
|
+
authors: ["Stephen E. Toulmin"]
|
|
13
|
+
year: 1958
|
|
14
|
+
url: "https://www.cambridge.org/core/books/uses-of-argument/26CF801BC12004587B66778297D5567C"
|
|
15
|
+
isbn: "9780521534833"
|
|
16
|
+
methodology_covered:
|
|
17
|
+
- "Six-part argument model — claim, data, warrant, backing, qualifier, rebuttal"
|
|
18
|
+
- "Field-invariant logical shape distinct from field-dependent standards"
|
|
19
|
+
- "Practical reasoning over formal deduction as the actual shape of argument"
|
|
20
|
+
- type: book
|
|
21
|
+
title: "An Introduction to Reasoning"
|
|
22
|
+
authors: ["Stephen Toulmin", "Richard Rieke", "Allan Janik"]
|
|
23
|
+
year: 1984
|
|
24
|
+
url: "https://www.routledge.com/An-Introduction-to-Reasoning/Toulmin-Rieke-Janik/p/book/9780024211606"
|
|
25
|
+
isbn: "9780024211606"
|
|
26
|
+
methodology_covered:
|
|
27
|
+
- "Applied Toulmin model across disciplines (law, science, ethics, management)"
|
|
28
|
+
- "Argument analysis as diagnostic tool for weak reasoning"
|
|
29
|
+
- "Field-invariant discipline extended with field-dependent examples"
|
|
30
|
+
- type: book
|
|
31
|
+
title: "Human Understanding: The Collective Use and Evolution of Concepts"
|
|
32
|
+
authors: ["Stephen Toulmin"]
|
|
33
|
+
year: 1972
|
|
34
|
+
url: "https://press.princeton.edu/books/paperback/9780691019963/human-understanding"
|
|
35
|
+
isbn: "9780691019963"
|
|
36
|
+
methodology_covered:
|
|
37
|
+
- "Rationality as historical practice, not fixed standard"
|
|
38
|
+
- "Concepts evolve inside disciplines that judge their fitness"
|
|
39
|
+
- "Substrate discipline as living evolving practice"
|
|
40
|
+
verification_status: verified
|
|
41
|
+
description: "\"An argument is a whole organism. Take out one part and the rest collapses.\""
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
# Stephen Toulmin
|
|
45
|
+
|
|
46
|
+
## Signature
|
|
47
|
+
|
|
48
|
+
*"An argument is a whole organism. Take out one part and the rest collapses."*
|
|
49
|
+
|
|
50
|
+
British philosopher (1922-2009). Author of *The Uses of Argument* (Cambridge, 1958) — the book that gave rhetoric, law, science, and now agent substrate a shared vocabulary for what an argument actually IS. The bassclef voice on assertion discipline, claim shape, and argument structure at the reasoning boundary.
|
|
51
|
+
|
|
52
|
+
## Core methods
|
|
53
|
+
|
|
54
|
+
- **The six-part argument** — every real argument has: **claim** (what you assert), **data** (the source that grounds it), **warrant** (the bridge from data to claim), **backing** (why the warrant holds in this field), **qualifier** (how strong the claim is — "usually," "in most cases," "with 95% confidence"), and **rebuttal** (the conditions under which the claim would fail).
|
|
55
|
+
- **Field-invariant vs field-dependent** — the shape (claim/data/warrant) holds across every field. The evidence standards inside each cell vary by field. Physics accepts different data than law; the shape is the same.
|
|
56
|
+
- **Practical reasoning over formal deduction** — real reasoning is about warrant-quality, not syllogism-completeness. A proof from clean premises rarely captures the actual work of a claim.
|
|
57
|
+
- **Argument as diagnostic** — when a claim feels wrong, decompose it into the six parts. The weak part surfaces immediately. Usually it is the warrant.
|
|
58
|
+
|
|
59
|
+
## When to channel this luminary
|
|
60
|
+
|
|
61
|
+
When the primary risk is unverified assertions shipping to operator or adopters. Toulmin dominates for audit authoring, cure recommendations, root-cause diagnoses, ADR bodies, and any operator-facing prose where the agent makes a claim. Pair with Popper (falsifiability sharpens the rebuttal cell) and Peirce (abductive reasoning fills the alternative-consideration gap Toulmin leaves implicit).
|
|
62
|
+
|
|
63
|
+
Pass-through cases (Toulmin adds no value):
|
|
64
|
+
|
|
65
|
+
- Single-sentence status updates. INSTEAD of applying the six-part shape: preserve the update; it carries no claim to decompose.
|
|
66
|
+
- Tool-output relay (test output, git output). INSTEAD of applying the six-part shape: preserve the raw output; the tool IS the source.
|
|
67
|
+
- Operator-quoted text preserved verbatim. INSTEAD of applying the six-part shape: preserve the quote; attribution IS the citation.
|
|
68
|
+
|
|
69
|
+
## Stack translation
|
|
70
|
+
|
|
71
|
+
In bassclef substrate work:
|
|
72
|
+
|
|
73
|
+
- **Audit finding** → claim (the finding) + data (source path with line reference) + warrant (why the source proves the finding) + qualifier (severity + observation count) + rebuttal (what would falsify).
|
|
74
|
+
- **Cure recommendation** → claim (the cure) + data (source chronicle + line) + warrant (why the source shows the class needs this cure) + rebuttal (alternative cures that fit the same data).
|
|
75
|
+
- **Root-cause diagnosis** → claim (the cause) + data (repro + logs) + warrant (why the repro proves causation, not correlation) + qualifier (confidence + N repros).
|
|
76
|
+
- **Turn estimate** → claim (N turns) + data (prior WU turn counts) + warrant (why those WUs match this scope) + qualifier (range not point).
|
|
77
|
+
- **Severity rank** → claim (HIGH/MEDIUM/LOW) + data (audit criteria the rank comes from) + warrant (why this instance meets those criteria).
|
|
78
|
+
|
|
79
|
+
## Anti-patterns it prevents
|
|
80
|
+
|
|
81
|
+
- **Assertion without cited source** — "The hook is broken." No data cell. Falls apart on inspection.
|
|
82
|
+
|
|
83
|
+
INSTEAD: state the hook's file path + the observation that shows it breaks + why the observation supports the claim.
|
|
84
|
+
|
|
85
|
+
- **Assertion pointing at a source but no warrant** — "Per chronicle 2026-06-30." What in the chronicle? Which line? Which claim does it support?
|
|
86
|
+
|
|
87
|
+
INSTEAD: quote the chronicle line + state why the line supports the claim.
|
|
88
|
+
|
|
89
|
+
- **Severity without observation criteria** — "This is HIGH-severity" with no data cell naming the threshold and no warrant naming the measurement.
|
|
90
|
+
|
|
91
|
+
INSTEAD: state the threshold (from an audit doc or standard) + the measurement (from the repro) + why the measurement exceeds the threshold.
|
|
92
|
+
|
|
93
|
+
- **Root cause attribution without qualifier** — "The cause is X" as absolute, when the actual claim is "X fits the data best but two alternatives remain unfalsified."
|
|
94
|
+
|
|
95
|
+
INSTEAD: state the qualifier (confidence + N observations) + name the remaining alternatives.
|
|
96
|
+
|
|
97
|
+
- **Turn estimate without data cell** — a bare number, no prior evidence, no warrant. This is the R8 pattern named at bassclef#559.
|
|
98
|
+
|
|
99
|
+
INSTEAD: state the prior WU turn counts the estimate anchors on + why those WUs match this scope's shape.
|
|
100
|
+
|
|
101
|
+
## Worked example
|
|
102
|
+
|
|
103
|
+
For an audit finding about a hook that appears broken:
|
|
104
|
+
|
|
105
|
+
Toulmin's shape:
|
|
106
|
+
|
|
107
|
+
- **Claim**: The hook `turn-prose-kiss-check.sh` silent-fails under operator install.
|
|
108
|
+
- **Data**: Chronicle `2026-06-27-operator-install-kiss-defect.md` L23; reproduced with `HOME_OVERRIDE=/nowhere echo '{}' | bash .claude/hooks/turn-prose-kiss-check.sh` → exits 0 with no stderr.
|
|
109
|
+
- **Warrant**: The hook sources `standards/bassclef-internal-jargon.md` via SCRIPT_DIR/../../ path. Under operator install, that path does not exist. The hook's `if` check for path existence exits silent.
|
|
110
|
+
- **Qualifier**: HIGH severity. Reproduced across 3 sessions.
|
|
111
|
+
- **Rebuttal**: Falsified if the hook is expected to silent-fail under operator install by design. Checked ADR-035 — install-class: dual commits to firing under both layouts. Falsification test fails; claim holds.
|
|
112
|
+
|
|
113
|
+
Without Toulmin: "The kiss hook is broken." Six words, no evidence, easy to dismiss or accept without inspection. INSTEAD: state the six cells; each cell earns its place.
|
|
114
|
+
|
|
115
|
+
## Sources
|
|
116
|
+
|
|
117
|
+
- *The Uses of Argument* — Toulmin, Cambridge University Press (1958; 2nd ed 2003)
|
|
118
|
+
- *An Introduction to Reasoning* — Toulmin, Rieke, Janik, Macmillan (1979; 2nd ed 1984)
|
|
119
|
+
- *Human Understanding: The Collective Use and Evolution of Concepts* — Toulmin, Princeton University Press (1972)
|
|
120
|
+
- *Return to Reason* — Toulmin, Harvard University Press (2001)
|
|
121
|
+
- Stanford Encyclopedia of Philosophy: entry on Toulmin — plato.stanford.edu/entries/toulmin/
|
|
122
|
+
|
|
123
|
+
## Related luminaries
|
|
124
|
+
|
|
125
|
+
- **Karl Popper** — Popper's falsifiability sharpens the rebuttal cell of Toulmin's model. Toulmin gives the shape; Popper names what would break the claim. Both ship in bet 2026-07-01b WU-2.
|
|
126
|
+
- **Charles Sanders Peirce** — Peirce's abductive reasoning fills the alternative-consideration gap Toulmin leaves implicit. A well-shaped Toulmin argument names ONE claim; Peirce insists on naming multiple candidates before committing. Both ship in bet 2026-07-01b WU-2.
|
|
127
|
+
- **Andrej Karpathy** — Karpathy's context engineering treats the model's context window as finite RAM. Toulmin's argument model is what fills that RAM with claim shape when the operator asks the agent to reason. Together they close the reasoning-boundary discipline surface.
|
|
128
|
+
- **Michael Feathers** — Feathers' characterization tests are the data cell for the substrate-as-system tenet. Toulmin's warrant becomes "the characterization test proves the mechanism ships the claim."
|
|
129
|
+
- **Kent Beck** — Beck's red-green-refactor cycle IS a Toulmin argument at the code layer. Red is the falsifiable claim; green is the passing data; refactor sharpens the warrant.
|
|
130
|
+
|
|
131
|
+
Anchors `.claude/rules/assert-only-after-verify.md` alongside Popper + Peirce. Primary luminary for `/state-a-problem` skill in Problem-section drafting.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Before producing any substantive generative output (canvas, prototype, spec, proposal, rubric, ADR, variant), the agent MUST read the referenced artifacts and enumerate them in…
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Artifact Ingestion — Read Before You Produce
|
|
7
|
+
|
|
8
|
+
Before producing any substantive generative output (canvas, prototype,
|
|
9
|
+
spec, proposal, rubric, ADR, variant), the agent MUST read the
|
|
10
|
+
referenced artifacts and enumerate them in the output.
|
|
11
|
+
|
|
12
|
+
"Pattern-matched on generic X" is a failure, not a shortcut.
|
|
13
|
+
|
|
14
|
+
## When this rule fires
|
|
15
|
+
|
|
16
|
+
Fires on any of the following output types when they reference an
|
|
17
|
+
existing artifact the agent could have read:
|
|
18
|
+
|
|
19
|
+
- **Canvas / spec / ADR** drafts referencing issues, prior canvases,
|
|
20
|
+
chronicles, or memory entries
|
|
21
|
+
- **Prototype or variant** builds referencing prior prototypes,
|
|
22
|
+
design tokens, or luminary files
|
|
23
|
+
- **Iteration proposals** referencing active iteration goals (must
|
|
24
|
+
enumerate every workstream — see `blocked-items.md` for same
|
|
25
|
+
anti-skim shape)
|
|
26
|
+
- **Gate evaluations** (`/verify`, `/architect-review`) referencing
|
|
27
|
+
spec or ADR acceptance criteria
|
|
28
|
+
- **Skills producing derivative content** (`/value-prop` from a ticket,
|
|
29
|
+
`/decompose` from a spec) — must read source, not just the title
|
|
30
|
+
|
|
31
|
+
## Required format: "Sources read" block
|
|
32
|
+
|
|
33
|
+
Every output subject to this rule MUST begin with (or include) a
|
|
34
|
+
block like:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
## Sources read
|
|
38
|
+
|
|
39
|
+
- [path or reference]:[line range if applicable] — [what I took from it]
|
|
40
|
+
- …
|
|
41
|
+
|
|
42
|
+
## What I'm NOT reading (with reason)
|
|
43
|
+
|
|
44
|
+
- [path] — [deliberate exclusion reason, e.g. out of scope, stale]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If no artifacts were read: state "No prior artifacts; producing from
|
|
48
|
+
scratch because [reason]." Silence is not exemption.
|
|
49
|
+
|
|
50
|
+
## Anti-patterns that fire this rule
|
|
51
|
+
|
|
52
|
+
Direct quotes from recent failures:
|
|
53
|
+
|
|
54
|
+
- "I pattern-matched on generic card UI" — built prototype without
|
|
55
|
+
reading existing Norman/Prater variant files (2026-04-13)
|
|
56
|
+
- "I didn't study the existing variants before building" — same
|
|
57
|
+
incident
|
|
58
|
+
- Producing a canvas recommending vendor X without reading memory
|
|
59
|
+
that flagged vendor Y for evaluation (2026-04-13)
|
|
60
|
+
- Proposing iteration scope covering 1 of 4 workstreams without
|
|
61
|
+
enumerating the ones being dropped (2026-04-12)
|
|
62
|
+
- Skipping BLOCKED hook output in favor of answering the user's
|
|
63
|
+
direct question (2026-04-12; third instance in six weeks)
|
|
64
|
+
|
|
65
|
+
Shape across all four: **training priors substituted for explicit
|
|
66
|
+
artifacts the operator had already staged.**
|
|
67
|
+
|
|
68
|
+
## Verification cue for the agent (self-check before output)
|
|
69
|
+
|
|
70
|
+
Before producing the output, ask:
|
|
71
|
+
|
|
72
|
+
1. Did I Read every file path referenced in the prompt or parent
|
|
73
|
+
artifact?
|
|
74
|
+
2. Did I enumerate every workstream / variant / section of the parent
|
|
75
|
+
artifact, including the ones I'm deferring?
|
|
76
|
+
3. Did I check memory for prior evaluations, flagged alternatives, or
|
|
77
|
+
deferred decisions relevant to this output?
|
|
78
|
+
4. Did I consult the active luminary files for guidance (where the
|
|
79
|
+
skill or agent definition lists luminaries)?
|
|
80
|
+
|
|
81
|
+
If any answer is "no," stop. Read first. Then produce.
|
|
82
|
+
|
|
83
|
+
## Session-start branch — read recent strategic artifacts before substantive work
|
|
84
|
+
|
|
85
|
+
Before any branch creation OR substantive PR work in a session, the
|
|
86
|
+
agent MUST Read every strategic artifact (canvas / spec / iteration-bet
|
|
87
|
+
/ ADR / decomposition / roadmap) authored OR substantively modified
|
|
88
|
+
within the last 7 days.
|
|
89
|
+
|
|
90
|
+
**Why this branch exists.** The production-time gate (PreToolUse on
|
|
91
|
+
Write/Edit per `artifact-ingestion-gate.sh`) catches artifact-ingestion
|
|
92
|
+
failures at WRITE time. It does NOT catch the case where an agent runs
|
|
93
|
+
`/sprint`, sees a recently-merged commit in `git log`, treats it as
|
|
94
|
+
background context, and proceeds with substantive work for hours
|
|
95
|
+
before reading the artifact itself. That failure mode was demonstrated
|
|
96
|
+
2026-04-26: 5h triage session opened against canvas-v3 commit listed
|
|
97
|
+
in `/sprint` output without anyone reading the canvas; the canvas
|
|
98
|
+
explicitly named the triage fixes as transition methodology being
|
|
99
|
+
superseded by spine v0. Operator caught it; the cost was 4 PRs of
|
|
100
|
+
short-lifetime work.
|
|
101
|
+
|
|
102
|
+
**Mechanism.** `.claude/hooks/session-reflection.d/70-recent-strategic-artifacts.sh`
|
|
103
|
+
fires at SessionStart, runs `git log --since=7-days --diff-filter=AM`
|
|
104
|
+
restricted to the strategic-artifact path matcher, emits a `🛑 BLOCKED`
|
|
105
|
+
block listing each path + commit date when results are non-empty.
|
|
106
|
+
Window is configurable via `RECENT_STRATEGIC_DAYS` env (default 7);
|
|
107
|
+
0 disables for that session.
|
|
108
|
+
|
|
109
|
+
**Resolution per `.claude/rules/blocked-items.md`.** The agent MUST
|
|
110
|
+
either Read each listed artifact this session OR explicitly defer
|
|
111
|
+
("skip recent-artifacts this session"). Silence is not deferral. The
|
|
112
|
+
default is Read. The marker pattern from sibling production gates is
|
|
113
|
+
NOT used here because session-reflection.d/* fragments only fire once
|
|
114
|
+
per SessionStart by design — re-fire suppression is unnecessary.
|
|
115
|
+
|
|
116
|
+
**Override.** `SKIP_RECENT_ARTIFACTS=1 <command>` (logged to trace) or
|
|
117
|
+
operator-explicit deferral statement.
|
|
118
|
+
|
|
119
|
+
**Strategic-artifact path matcher** (mirrors production-gate matcher
|
|
120
|
+
minus prototypes which have their own approval workflow):
|
|
121
|
+
|
|
122
|
+
- `strategy/canvases/*.md`
|
|
123
|
+
- `docs/specs/*.md`
|
|
124
|
+
- `docs/iteration-bets/*.md`
|
|
125
|
+
- `architecture/decisions/ADR-*.md`
|
|
126
|
+
- `docs/decompositions/*.md`
|
|
127
|
+
- `docs/roadmaps/*.md`
|
|
128
|
+
|
|
129
|
+
Prototypes are deliberately excluded — `prototype-workflow.md` and
|
|
130
|
+
`prototype-production-coupling.md` cover that surface separately.
|
|
131
|
+
|
|
132
|
+
## Why this rule exists
|
|
133
|
+
|
|
134
|
+
Operator was QA-ing agent laziness four times in six hours on
|
|
135
|
+
2026-04-12/13 across two agents. Substrate credibility depends on
|
|
136
|
+
agents doing the homework before producing the output. Without this
|
|
137
|
+
rule, every generated artifact requires operator spot-check against
|
|
138
|
+
sources — which defeats the automation thesis.
|
|
139
|
+
|
|
140
|
+
This rule is enforced by `.claude/hooks/artifact-ingestion-gate.sh`
|
|
141
|
+
(bassclef, 2026-04-13). The hook fires on PreToolUse for Write/Edit
|
|
142
|
+
to matcher paths (canvas, spec, ADR, iteration-bet, prototype html,
|
|
143
|
+
decomposition) and blocks when no "## Sources read" block exists.
|
|
144
|
+
|
|
145
|
+
The rule stands regardless of hook availability — it belongs in every
|
|
146
|
+
session's loaded context, not in an optional gate. The hook is the
|
|
147
|
+
mechanical backstop; the rule is the reasoning.
|
|
148
|
+
|
|
149
|
+
## Consumer-repo installation
|
|
150
|
+
|
|
151
|
+
Bassclef-sync symlinks the hook file into consumer repos automatically.
|
|
152
|
+
To wire it as a gate, add to the consumer repo's `.claude/settings.json`
|
|
153
|
+
under `hooks.PreToolUse`:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"matcher": "Edit|Write",
|
|
158
|
+
"hooks": [
|
|
159
|
+
{ "type": "command", "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/artifact-ingestion-gate.sh" }
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
(If `Edit|Write` matcher already exists with other hooks, append this
|
|
165
|
+
command to its `hooks` array — don't duplicate the matcher entry.)
|
|
166
|
+
|
|
167
|
+
Override: `SKIP_ARTIFACT_INGESTION=1 <tool-call>` (logged to trace).
|
|
168
|
+
|
|
169
|
+
## Relationship to other rules
|
|
170
|
+
|
|
171
|
+
- `blocked-items.md` — same anti-skim shape; blocked items are a
|
|
172
|
+
specific case of artifact-ingestion failure (skipping hook-surfaced
|
|
173
|
+
artifacts)
|
|
174
|
+
- `oo-ad-entry-point.md` — analogous pattern for /decompose
|
|
175
|
+
(evidence required before Construction)
|
|
176
|
+
- `sdlc-gates.md` — pre-build gates; artifact ingestion is the gate
|
|
177
|
+
*before* temperance and diagnosis
|
|
178
|
+
- `substrate-config-schema.md` — reading `substrate.config.md` is
|
|
179
|
+
itself an artifact-ingestion obligation
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: "Plain check: Before I make a claim in this turn, I read the source first and cite it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Assert Only After Verify
|
|
7
|
+
|
|
8
|
+
**Plain check:** Before I make a claim in this turn, I read the source first and cite it. If I cannot cite the source, I do not ship the claim.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Every operator-facing assertion carries at minimum three parts: **My claim** (what you are saying), **Evidence** (the source you read, cited inline), and **Why the evidence supports the claim** (one sentence on why the source supports the claim). Two optional parts sharpen the shape: **Qualifier** (confidence + N observations) and **Rebuttal** (what would falsify the claim). Without My claim + Evidence + Why the evidence supports the claim, the assertion does not ship. This rule closes #559 at the class layer — pairs with the UserPromptSubmit hook at `.claude/hooks/assert-verify-steering.sh` per ADR-035 substrate-as-system tenet.
|
|
13
|
+
|
|
14
|
+
**Vocabulary note (per bet 2026-07-03b WU-4 rename #613):** The working labels are **My claim / Evidence / Why the evidence supports the claim**. Toulmin's original vocabulary (claim / data / warrant) stays as the research citation in `.claude/luminaries/stephen-toulmin.md` — the working vocabulary reads plainer at the moment the operator scans the injected reminder.
|
|
15
|
+
|
|
16
|
+
## When this rule fires
|
|
17
|
+
|
|
18
|
+
Every operator-facing assertion the agent authors:
|
|
19
|
+
|
|
20
|
+
- Audit findings and severity ranks
|
|
21
|
+
- Cure recommendations and root-cause attributions
|
|
22
|
+
- Turn estimates and time budget claims
|
|
23
|
+
- Modal claims (words like "wrong," "broken," "should," "must," "always")
|
|
24
|
+
- Class-level diagnoses ("this is an instance of...")
|
|
25
|
+
- Ticket bodies, PR bodies, commit messages
|
|
26
|
+
- Chronicle entries and journal drafts
|
|
27
|
+
- Scope enumeration from queued tickets (/longrun option composition; /sprint next-work proposals)
|
|
28
|
+
|
|
29
|
+
Pass-through cases (rule does not add ceremony):
|
|
30
|
+
|
|
31
|
+
- Direct tool output relayed to the operator (test output, git output). INSTEAD of citing sources for tool relays: preserve the raw output; the tool IS the source.
|
|
32
|
+
- Operator-quoted text preserved verbatim. INSTEAD of citing external sources for quoted operator text: attribution to the operator IS the citation.
|
|
33
|
+
- Small conversational asides that carry no claim ("switching to main now"). INSTEAD of applying the shape to asides: reserve the discipline for assertions carrying a claim.
|
|
34
|
+
|
|
35
|
+
## What the rule requires
|
|
36
|
+
|
|
37
|
+
Before shipping any operator-facing assertion:
|
|
38
|
+
|
|
39
|
+
1. **My claim** — state the assertion in one sentence
|
|
40
|
+
2. **Evidence** — cite the source read inline. Files by path, tickets by number, git commits by SHA, chronicles by filename, standards by section
|
|
41
|
+
3. **Why the evidence supports the claim** — one sentence on why the cited source supports the claim
|
|
42
|
+
|
|
43
|
+
Optional (sharpen the shape):
|
|
44
|
+
|
|
45
|
+
4. **Qualifier** — confidence + how many observations back the claim (e.g., "3 catches in one session"; "1 chronicle line"; "grep across 62 rules")
|
|
46
|
+
5. **Rebuttal** — what would falsify the claim (per Popper). A claim that cannot be falsified is steering, not truth
|
|
47
|
+
|
|
48
|
+
## Anti-patterns
|
|
49
|
+
|
|
50
|
+
These shapes fail the rule.
|
|
51
|
+
|
|
52
|
+
**Assertion without cited source.** "The hook is broken." No path, no evidence.
|
|
53
|
+
|
|
54
|
+
INSTEAD: "The hook at the named path exits 2 when stdin contains no JSON — reproduced with `echo '' | bash <that-hook-path>`." My claim + Evidence + Why the evidence supports the claim.
|
|
55
|
+
|
|
56
|
+
**Assertion pointing at a source but no warrant.** "Per chronicle 2026-06-30." What in the chronicle? Which line?
|
|
57
|
+
|
|
58
|
+
INSTEAD: "Per chronicle 2026-06-30d L47 — three catches in one session, all naming R8 pattern." The warrant tells the reader what the source says.
|
|
59
|
+
|
|
60
|
+
**Severity rank without observation criteria.** "This is a HIGH-severity finding." What was measured? Against what threshold?
|
|
61
|
+
|
|
62
|
+
INSTEAD: "This is HIGH — audit finding blocks Phase XI Batten Down HIGH-severity discipline per architecture/audits/2026-06-28-adopter-experience.md L23; 2 sibling instances." Evidence + Why the evidence supports the claim.
|
|
63
|
+
|
|
64
|
+
**Root cause attribution without falsifiability.** "The cause is X."
|
|
65
|
+
|
|
66
|
+
INSTEAD: "The cause is X — falsified if removing X does not remove the symptom. Test: [name the test]." Rebuttal is Popper's contribution.
|
|
67
|
+
|
|
68
|
+
**One explanation without alternatives.** "The bug is caused by Y."
|
|
69
|
+
|
|
70
|
+
INSTEAD: "The bug fits Y (my current explanation), Z (alternative — same symptom, different mechanism), and W (third alternative). Reading source [path] to discriminate." Peirce's contribution — abductive reasoning names multiple candidates before committing.
|
|
71
|
+
|
|
72
|
+
**Trusting `gh issue view state` as evidence work is undone.** Scope enumeration surfaces (/longrun option tables, /sprint next-work proposals) that read ticket state alone recommend already-done work. Ticket state and shipped state can diverge — work sometimes lands without the ticket getting closed; tickets sometimes stay OPEN as trackers after cures ship.
|
|
73
|
+
|
|
74
|
+
INSTEAD apply the discipline shape per row of the option table:
|
|
75
|
+
|
|
76
|
+
1. Read the ticket's acceptance criteria (via `gh issue view <N> --json body`)
|
|
77
|
+
2. Grep or read the source the ticket measures against (the file, the counter, the audit output)
|
|
78
|
+
3. If acceptance criteria are met by the current source — close the ticket in the enumeration itself (do not recommend it as scope)
|
|
79
|
+
4. If not met — proceed with a specific measurement in the option row (what's missing, what's the delta, what's the actual turn cost)
|
|
80
|
+
|
|
81
|
+
The catch: bet 2026-07-26d /longrun prep surfaced #884 (MEMORY.md prune) as a 20-40 turn scope option; the ticket's acceptance thresholds were already met by the file on disk. Reading `gh issue view state` returned `OPEN`; reading the file measured against the ticket criteria showed all three thresholds already passed. Operator caught the miss. See `feedback_verify_ticket_source_not_just_state.md`.
|
|
82
|
+
|
|
83
|
+
## The three luminaries anchoring this rule
|
|
84
|
+
|
|
85
|
+
- **Stephen Toulmin** — argument model. Claim + data + warrant is the minimum shape; qualifier + rebuttal sharpen it. From *The Uses of Argument* (1958)
|
|
86
|
+
- **Karl Popper** — falsifiability. A claim that cannot be falsified is not a scientific claim; it is steering language. From *The Logic of Scientific Discovery* (1959)
|
|
87
|
+
- **Charles Sanders Peirce** — abductive reasoning. Multiple explanations fit the same evidence; naming alternatives before committing catches confirmation bias. From "Deduction, Induction, and Hypothesis" (1878)
|
|
88
|
+
|
|
89
|
+
Full luminary files ship in bet 2026-07-01b WU-2 at `.claude/luminaries/{stephen-toulmin,karl-popper,charles-sanders-peirce}.md`.
|
|
90
|
+
|
|
91
|
+
## Why this rule exists
|
|
92
|
+
|
|
93
|
+
Tonight's session surfaced R8 (assertion without verification) five times in ~5 hours (chronicle `2026-07-01c-r8-cascade-audit-retraction-and-cure-prep.md` names catches 16-20). My audit of `/longrun` was itself R8. I filed 5 tickets on unvalidated claims. I inflated turn estimates 3-4x above WU-2 grounding evidence. I attributed a false root cause during `/diagnose`. Operator caught each instance.
|
|
94
|
+
|
|
95
|
+
`#559` named the R8 class in June. `#564` shipped one narrow surface cure (compounding-axis columns) but does not steer reasoning at the origin. Anthropic's UserPromptSubmit hook surface enables reasoning-boundary steering — the plain-English steering (per bassclef#790) proves the mechanism works. Every prompt this session carried the grade-10 reminder; my prose landed at grade 10 without conscious effort. Same physics applies to assertion discipline.
|
|
96
|
+
|
|
97
|
+
The paired hook injects Toulmin's argument shape (labeled in bassclef as My claim + Evidence + Why the evidence supports the claim; Toulmin's original terms are claim + data + warrant per `.claude/luminaries/stephen-toulmin.md`) into every prompt. This rule is the methodology; the hook is the mechanism per ADR-035.
|
|
98
|
+
|
|
99
|
+
## Composes with
|
|
100
|
+
|
|
101
|
+
- `.claude/hooks/assert-verify-steering.sh` — the paired UserPromptSubmit hook this rule commits to
|
|
102
|
+
- `.claude/rules/context-engineering.md` — foundational rule; this rule extends context engineering with argument shape
|
|
103
|
+
- `.claude/rules/plain-english-discipline.md` — sister rule at prose surface; both fire per prompt
|
|
104
|
+
- `.claude/rules/artifact-ingestion.md` — "read before produce" is the data-source discipline this rule extends to assertions
|
|
105
|
+
- `.claude/rules/blocked-items.md` — assertions calling something BLOCKED must cite the block-source
|
|
106
|
+
- `.claude/rules/stuck-signal-diagnostic.md` — assertion of "stuck" requires 3-session data
|
|
107
|
+
- `.claude/luminaries/stephen-toulmin.md` — primary anchor (bet 2026-07-01b WU-2)
|
|
108
|
+
- `.claude/luminaries/karl-popper.md` — supporting anchor (bet 2026-07-01b WU-2)
|
|
109
|
+
- `.claude/luminaries/charles-sanders-peirce.md` — supporting anchor (bet 2026-07-01b WU-2)
|
|
110
|
+
- Memory `feedback_verify_ticket_source_not_just_state.md` — the discipline the scope-enumeration anti-pattern encodes; verify tickets against source before scoping, not `gh` state alone
|
|
111
|
+
- `.claude/skills/longrun/SKILL.md` prep — the surface where the scope-enumeration extension fires (Step 1 pre-flight through Step 1.7)
|
|
112
|
+
- `.claude/skills/sprint/SKILL.md` — sister surface (next-work proposals)
|
|
113
|
+
- ADR-035 substrate-as-system — the tenet this rule operationalizes at reasoning boundary
|
|
114
|
+
|
|
115
|
+
## Override
|
|
116
|
+
|
|
117
|
+
`SKIP_ASSERT_VERIFY_STEERING=1 <command>` on the hook — logged via trace-helper. The rule itself has no per-call override; the shape is minimum baseline. Use only when quoting verbatim external content that contains an unverified claim.
|
|
118
|
+
|
|
119
|
+
INSTEAD of overriding for routine work: cite the source. The cost is a filename + one warrant sentence; the discipline compounds across every future assertion in every consumer repo.
|
|
120
|
+
|
|
121
|
+
## Refs
|
|
122
|
+
|
|
123
|
+
- bassclef-upstream#559 — R8 mechanization umbrella (this rule closes at class level)
|
|
124
|
+
- bassclef-upstream#582 — parent ticket for this rule + hook
|
|
125
|
+
- bassclef-upstream#564 — narrow-surface precedent (compounding-axis columns)
|
|
126
|
+
- ADR-035 substrate-as-system tenet — rule + mechanism paired
|
|
127
|
+
- `chronicle/2026-07-01c-r8-cascade-audit-retraction-and-cure-prep.md` — 5+ R8 catches this session; audit retraction pattern named
|
|
128
|
+
- `chronicle/2026-06-30d-post-session-end-appendix.md` — 5 prior R8 catches
|
|
129
|
+
- `chronicle/2026-07-26d-cures-2-3-5-shipped.md` — surfaced the scope-enumeration miss (#884 already-done recommended as 20-40 turn work); motivates the extension shipped in bet 2026-07-26g
|
|
130
|
+
- bassclef-upstream#916 — this rule's scope-enumeration extension ticket
|
|
131
|
+
- Toulmin — *The Uses of Argument* (Cambridge, 1958)
|
|
132
|
+
- Popper — *The Logic of Scientific Discovery* (Hutchinson, 1959)
|
|
133
|
+
- Peirce — "Deduction, Induction, and Hypothesis" (*Popular Science Monthly*, 1878)
|
|
134
|
+
|
|
135
|
+
## Retirement condition
|
|
136
|
+
|
|
137
|
+
This rule retires only if R8 (assertion without verification) stops reproducing across sessions. The mechanical layer (UserPromptSubmit hook) may evolve — additional detection heuristics, PR-body scan extensions, retroactive audit sweeps — but the discipline of My claim + Evidence + Why the evidence supports the claim (Toulmin's shape) at reasoning origin persists.
|