odd-studio 1.0.1 → 2.0.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/package.json +1 -1
- package/skill/SKILL.md +36 -11
- package/skill/docs/build/build-protocol.md +47 -469
- package/skill/docs/chapters/chapter-1.md +31 -0
- package/skill/docs/chapters/chapter-10.md +31 -0
- package/skill/docs/chapters/chapter-11.md +35 -0
- package/skill/docs/chapters/chapter-12.md +39 -0
- package/skill/docs/chapters/chapter-13.md +31 -0
- package/skill/docs/chapters/chapter-14.md +31 -0
- package/skill/docs/chapters/chapter-15.md +35 -0
- package/skill/docs/chapters/chapter-16.md +33 -0
- package/skill/docs/chapters/chapter-17.md +35 -0
- package/skill/docs/chapters/chapter-18.md +31 -0
- package/skill/docs/chapters/chapter-2.md +27 -0
- package/skill/docs/chapters/chapter-3.md +27 -0
- package/skill/docs/chapters/chapter-4.md +37 -0
- package/skill/docs/chapters/chapter-5.md +29 -0
- package/skill/docs/chapters/chapter-6.md +31 -0
- package/skill/docs/chapters/chapter-7.md +35 -0
- package/skill/docs/chapters/chapter-8.md +31 -0
- package/skill/docs/chapters/chapter-9.md +33 -0
- package/skill/docs/kb/odd-kb.md +28 -22
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -176,6 +176,22 @@ Initialise the ruflo swarm for parallel build execution. See the full Ruflo Swar
|
|
|
176
176
|
|
|
177
177
|
---
|
|
178
178
|
|
|
179
|
+
### `*agent`
|
|
180
|
+
|
|
181
|
+
Create a custom agent for a domain-specific concern. The domain expert describes what they need in plain language. ODD Studio configures the agent, assigns it to the swarm, and includes its reports in the verification output alongside the QA agent's report.
|
|
182
|
+
|
|
183
|
+
Common use cases: brand voice (flag text that does not match the platform's tone), compliance (check every outcome against a regulatory standard), accessibility (review every screen against WCAG).
|
|
184
|
+
|
|
185
|
+
The domain expert does not write agent code. They describe the concern:
|
|
186
|
+
|
|
187
|
+
> "Every piece of text a customer sees should sound like it comes from a small, friendly independent bookshop. Flag anything that sounds corporate or uses jargon."
|
|
188
|
+
|
|
189
|
+
ODD Studio creates the agent from that description. It runs on every relevant outcome and reports in domain language.
|
|
190
|
+
|
|
191
|
+
After collecting the description, call `mcp__ruflo__agent_spawn` with the custom role and the domain expert's description as instructions. Confirm the agent is active and will run during the next `*build` or `*swarm` session.
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
179
195
|
### `*export`
|
|
180
196
|
|
|
181
197
|
Generate the IDE Session Brief. This is a standalone document that a developer or AI coding agent can use to execute a build session without needing to ask planning questions.
|
|
@@ -199,16 +215,24 @@ After writing the file, display: "Your Session Brief has been written to docs/se
|
|
|
199
215
|
Load coaching content from chapter n of the ODD methodology book. Route to the appropriate file in `docs/chapters/`. If the chapter file does not exist, explain what that chapter covers conceptually and offer to explore it through dialogue.
|
|
200
216
|
|
|
201
217
|
Chapter reference:
|
|
202
|
-
- Chapter 1:
|
|
203
|
-
- Chapter 2:
|
|
204
|
-
- Chapter 3:
|
|
205
|
-
- Chapter 4:
|
|
206
|
-
- Chapter 5:
|
|
207
|
-
- Chapter 6:
|
|
208
|
-
- Chapter 7:
|
|
209
|
-
- Chapter 8:
|
|
210
|
-
- Chapter 9:
|
|
211
|
-
- Chapter 10:
|
|
218
|
+
- Chapter 1: It's All About Clarity
|
|
219
|
+
- Chapter 2: The Right Division of Labour
|
|
220
|
+
- Chapter 3: Features Aren't Enough
|
|
221
|
+
- Chapter 4: Outcomes Should Be Specific
|
|
222
|
+
- Chapter 5: Personas Are Load-Bearing
|
|
223
|
+
- Chapter 6: Every Outcome Has a Contract
|
|
224
|
+
- Chapter 7: Design the Outcome Twice
|
|
225
|
+
- Chapter 8: The Master Implementation Plan
|
|
226
|
+
- Chapter 9: Start from Zero
|
|
227
|
+
- Chapter 10: The Build Protocol
|
|
228
|
+
- Chapter 11: Verification Is Your Job
|
|
229
|
+
- Chapter 12: Building One Outcome
|
|
230
|
+
- Chapter 13: Concurrent Outcomes and the Swarm
|
|
231
|
+
- Chapter 14: The Things That Scare You
|
|
232
|
+
- Chapter 15: Good Interfaces Are Specified, Not Designed
|
|
233
|
+
- Chapter 16: Managing Change
|
|
234
|
+
- Chapter 17: The Swarm in Depth
|
|
235
|
+
- Chapter 18: Conclusion
|
|
212
236
|
|
|
213
237
|
---
|
|
214
238
|
|
|
@@ -245,7 +269,8 @@ Display this reference:
|
|
|
245
269
|
| `*contracts` | Map contracts with Theo |
|
|
246
270
|
| `*phase-plan` | Build the Master Implementation Plan with Rachel |
|
|
247
271
|
| `*ui` | Load UI excellence principles |
|
|
248
|
-
| `*swarm` |
|
|
272
|
+
| `*swarm` | Build all independent outcomes in the current phase simultaneously |
|
|
273
|
+
| `*agent` | Create a custom agent for a domain-specific concern |
|
|
249
274
|
| `*export` | Generate IDE Session Brief |
|
|
250
275
|
| `*chapter [n]` | Load methodology coaching for chapter n |
|
|
251
276
|
| `*why` | Explain why the current step matters |
|
|
@@ -1,532 +1,110 @@
|
|
|
1
1
|
# ODD Studio — Build Protocol
|
|
2
2
|
|
|
3
|
-
The Build Protocol is the discipline that turns a well-written ODD plan into working software.
|
|
4
|
-
|
|
5
|
-
The protocol has 4 levels. They nest: sessions contain phases, phases contain outcomes, phases end with integration. You apply the right level at the right moment — you do not skip levels and you do not invent your own steps.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Level 1 — Session Protocol
|
|
10
|
-
|
|
11
|
-
### Why sessions need a protocol
|
|
12
|
-
|
|
13
|
-
Claude Code does not remember yesterday. Every time you open a new conversation, you are talking to someone who has never heard of your project. If you start typing "can you add the approval button to the teacher dashboard", you will get a response from someone who does not know what approval means in your domain, what the teacher dashboard is, or what state the code is in.
|
|
14
|
-
|
|
15
|
-
The Session Protocol solves this. It takes 3 minutes to run and saves 15 minutes of confused AI behaviour.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
### Step 1 — Re-orient Claude Code at the start of every session
|
|
20
|
-
|
|
21
|
-
Open Claude Code. Before you describe any work, paste this block and fill in the blanks:
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
I am continuing work on [PROJECT NAME].
|
|
25
|
-
|
|
26
|
-
This is an Outcome-Driven Development project. My ODD plan is in [PATH TO PLAN FILE].
|
|
27
|
-
|
|
28
|
-
Please read the plan now so you understand the domain, the personas, the outcomes, and the contracts.
|
|
29
|
-
|
|
30
|
-
My last session note is below. Read it carefully.
|
|
31
|
-
|
|
32
|
-
[PASTE YOUR LAST HANDOVER NOTE HERE]
|
|
33
|
-
|
|
34
|
-
The code is in [PATH TO CODEBASE]. The current state is:
|
|
35
|
-
- Last completed outcome: [OUTCOME NAME OR "none"]
|
|
36
|
-
- Current phase: [PHASE NAME]
|
|
37
|
-
- Outstanding issues: [DESCRIBE IN DOMAIN LANGUAGE OR "none"]
|
|
38
|
-
|
|
39
|
-
Before we build anything, confirm you have read the plan and the handover note.
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Do not skip the confirmation step. If Claude Code summarises what it read and the summary is wrong, correct it before proceeding.
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
### Step 2 — Restore session state with Ruflo
|
|
47
|
-
|
|
48
|
-
If you are using Ruflo for swarm coordination (recommended for phases with 3+ outcomes), restore state immediately after re-orienting:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
Restore the Ruflo session state for this project using:
|
|
52
|
-
- mcp__ruflo__session_restore with session key 'odd-[project-name]-session'
|
|
53
|
-
- mcp__ruflo__memory_retrieve with key 'odd-project-state'
|
|
54
|
-
|
|
55
|
-
Report back what you find.
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Ruflo memory persists between sessions. It stores what agents built, what contracts were published, and what decisions were made. Claude Code reads this and resumes from where the swarm left off.
|
|
59
|
-
|
|
60
|
-
If `memory_retrieve` returns nothing, the project is starting fresh or state was not saved. Proceed with your handover note as the source of truth.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
### Step 3 — The handover note system
|
|
65
|
-
|
|
66
|
-
At the end of every session, you write a handover note. It takes 15 seconds. It saves the next session from 15 minutes of confusion.
|
|
67
|
-
|
|
68
|
-
**The handover note template:**
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
SESSION NOTE — [DATE] [TIME]
|
|
72
|
-
|
|
73
|
-
Completed this session:
|
|
74
|
-
- [List outcomes or sub-tasks completed, in plain language]
|
|
75
|
-
|
|
76
|
-
State of the code:
|
|
77
|
-
- Last committed outcome: [OUTCOME NAME]
|
|
78
|
-
- Uncommitted work: [DESCRIBE OR "none"]
|
|
79
|
-
- Build is: passing / broken / partially broken
|
|
80
|
-
|
|
81
|
-
Open issues:
|
|
82
|
-
- [Describe any problem that was not resolved, in domain language]
|
|
83
|
-
- [Example: "The fee calculation rounds to the wrong decimal in the invoice preview"]
|
|
84
|
-
|
|
85
|
-
Next session should start with:
|
|
86
|
-
- [The first thing to do, described clearly]
|
|
87
|
-
- [Any Claude Code instruction that needs to be given immediately]
|
|
88
|
-
|
|
89
|
-
Anything Claude Code needs to know:
|
|
90
|
-
- [Rules discovered during this session, e.g. "Do not use server actions for the invoice endpoint — use API routes instead"]
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Save this note as a text file in your project folder (e.g. `/docs/session-notes/2026-03-17.md`). You will paste the relevant note into your session start template every time.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
### Step 4 — Close a session cleanly
|
|
98
|
-
|
|
99
|
-
Before you close Claude Code, do three things in order:
|
|
100
|
-
|
|
101
|
-
**1. Commit what works.**
|
|
102
|
-
|
|
103
|
-
Ask Claude Code:
|
|
104
|
-
```
|
|
105
|
-
Commit everything that is currently verified and working. Use the format:
|
|
106
|
-
"Outcome [N] [name] — verified"
|
|
107
|
-
or if mid-outcome:
|
|
108
|
-
"WIP: [describe what is done in plain language]"
|
|
109
|
-
|
|
110
|
-
Do not commit broken code without labelling it WIP.
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**2. Write your handover note.**
|
|
114
|
-
|
|
115
|
-
Fill in the template above. Do not skip this. You will not remember tomorrow what you know now.
|
|
116
|
-
|
|
117
|
-
**3. Save state to Ruflo.**
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
Save the current project state to Ruflo memory using:
|
|
121
|
-
- mcp__ruflo__memory_store with key 'odd-project-state'
|
|
122
|
-
|
|
123
|
-
Include: last completed outcome, current phase, any open issues, and the file path of today's session note.
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Level 2 — Phase Protocol
|
|
129
|
-
|
|
130
|
-
### What a phase is
|
|
131
|
-
|
|
132
|
-
A phase is a group of outcomes that, taken together, produce a coherent capability. The Session Protocol tells you how to start and stop. The Phase Protocol tells you how to build a group of outcomes without the pieces colliding.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### Step 1 — Verify previous phase dependencies
|
|
137
|
-
|
|
138
|
-
Before building anything in this phase, ask:
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
Read the ODD plan. List every contract this phase depends on that was built in a previous phase.
|
|
142
|
-
|
|
143
|
-
For each contract, verify:
|
|
144
|
-
1. Does the code or database schema for this contract exist?
|
|
145
|
-
2. Does it match what the plan specifies?
|
|
146
|
-
|
|
147
|
-
Report back as a table: Contract | Exists | Matches Plan | Gap (if any)
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Do not start building until every dependency is confirmed. If a contract is missing or wrong, fix it before proceeding. A phase built on a false assumption will require expensive rework.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
### Step 2 — Identify shared infrastructure for this phase
|
|
155
|
-
|
|
156
|
-
Look at the outcomes in this phase. Some will share infrastructure: the same database table, the same authentication check, the same email provider, the same API endpoint.
|
|
157
|
-
|
|
158
|
-
If you try to build each outcome independently, two agents will build the same table differently. They will not connect. This is the "two architects, one door" problem.
|
|
159
|
-
|
|
160
|
-
Ask:
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
Read the outcomes in Phase [N]. Identify all shared infrastructure:
|
|
164
|
-
- Shared database tables or schemas
|
|
165
|
-
- Shared API endpoints
|
|
166
|
-
- Shared authentication logic
|
|
167
|
-
- Shared email or notification services
|
|
168
|
-
- Shared UI components used by multiple outcomes
|
|
169
|
-
|
|
170
|
-
List each shared item and which outcomes use it.
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
### Step 3 — Brief the Coordinator agent
|
|
176
|
-
|
|
177
|
-
When using Ruflo for a phase with multiple outcomes, the Coordinator agent runs first. Its job is to read all the outcome contracts and publish shared technical contracts before any building begins.
|
|
178
|
-
|
|
179
|
-
Initialise the swarm:
|
|
180
|
-
|
|
181
|
-
```
|
|
182
|
-
Initialise a Ruflo swarm for Phase [N] of [PROJECT NAME]:
|
|
183
|
-
mcp__ruflo__swarm_init with topology hierarchical and max-agents 6
|
|
184
|
-
|
|
185
|
-
Then spawn a Coordinator agent:
|
|
186
|
-
mcp__ruflo__agent_spawn with type hierarchical-coordinator and name "phase-[N]-coordinator"
|
|
187
|
-
|
|
188
|
-
Brief the Coordinator with:
|
|
189
|
-
- The ODD plan (attach file path)
|
|
190
|
-
- The list of outcomes in this phase
|
|
191
|
-
- The list of shared infrastructure identified above
|
|
192
|
-
- The instruction: "Read all outcome contracts. Publish shared technical contracts — database schemas, API shapes, component interfaces — to Ruflo memory before any other agent begins work."
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
Wait for the Coordinator to confirm contracts are published before proceeding to parallel building.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
### Step 4 — Verify shared infrastructure before building outcomes
|
|
200
|
-
|
|
201
|
-
After the Coordinator has published contracts:
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
Retrieve the shared contracts from Ruflo:
|
|
205
|
-
mcp__ruflo__memory_retrieve with key 'odd-phase-[N]-contracts'
|
|
206
|
-
|
|
207
|
-
Confirm the contracts match the ODD plan. If anything is missing or wrong, correct it now.
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Then proceed to Level 3 for each outcome.
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
### Step 5 — After all outcomes: run Integration Protocol
|
|
215
|
-
|
|
216
|
-
When all outcomes in the phase are individually verified, run Level 4. Do not skip it. Individual outcomes that pass their own verification steps can still fail to connect.
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Level 3 — Outcome Protocol
|
|
221
|
-
|
|
222
|
-
### Step 1 — Decide whether to stage the build
|
|
223
|
-
|
|
224
|
-
Some outcomes are simple: one screen, one action, one data change. Build them in one shot.
|
|
225
|
-
|
|
226
|
-
Some outcomes involve more than 2 context shifts. A context shift is any moment where the work moves from one layer to another: from database to API, from API to UI, from UI to email notification, from one persona's view to another's.
|
|
227
|
-
|
|
228
|
-
**Rule: if an outcome has more than 2 context shifts, stage the build.**
|
|
229
|
-
|
|
230
|
-
Staging means you build in sub-steps and verify each one before moving to the next. You tell Claude Code:
|
|
231
|
-
|
|
232
|
-
```
|
|
233
|
-
Build this outcome in stages. First build only the data layer. Verify it. Then build the API layer. Verify it. Then build the UI.
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
This is slower but it is almost always faster overall — because a bug found at the UI layer that originates in the data layer requires rebuilding everything above it.
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
### Step 2 — Give Claude Code the full outcome brief
|
|
241
|
-
|
|
242
|
-
Paste all 6 fields of the outcome directly into Claude Code. Do not paraphrase. Do not summarise. The exact language in the outcome document is the specification.
|
|
243
|
-
|
|
244
|
-
```
|
|
245
|
-
Build the following outcome. Do not begin until you have read all 6 fields.
|
|
246
|
-
|
|
247
|
-
OUTCOME NAME: [name]
|
|
248
|
-
PERSONA: [persona name and description]
|
|
249
|
-
TRIGGER: [what causes this outcome to begin]
|
|
250
|
-
EXPERIENCE: [what the persona does and sees, in full]
|
|
251
|
-
CONTRACTS CONSUMED: [list of contracts this outcome uses as inputs]
|
|
252
|
-
CONTRACTS EXPOSED: [list of contracts this outcome produces as outputs]
|
|
253
|
-
|
|
254
|
-
Stack: Next.js App Router, TypeScript, Tailwind CSS v4, shadcn/ui, Framer Motion, PostgreSQL/Prisma, NextAuth.js.
|
|
255
|
-
|
|
256
|
-
Build the full outcome. Use the domain language throughout — file names, variable names, component names must reflect the domain, not generic terms.
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
### Step 3 — Ruflo parallel building
|
|
262
|
-
|
|
263
|
-
For outcomes that are large enough to benefit from parallelism, spawn 3 agents simultaneously after the Coordinator has published contracts:
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
Spawn three agents in parallel:
|
|
267
|
-
|
|
268
|
-
1. Backend agent (mcp__ruflo__agent_spawn, type coder, name "outcome-[N]-backend"):
|
|
269
|
-
Brief: "Implement the data layer for Outcome [N] per the shared contracts. Build: Prisma schema, database migrations, API routes or server actions. Use domain language for all names."
|
|
270
|
-
|
|
271
|
-
2. UI agent (mcp__ruflo__agent_spawn, type coder, name "outcome-[N]-ui"):
|
|
272
|
-
Brief: "Implement the UI for Outcome [N] per the shared contracts and the full outcome walkthrough. Use shadcn/ui components, Tailwind CSS v4, Framer Motion for interactions. Mobile-first. WCAG 2.1 AA."
|
|
273
|
-
|
|
274
|
-
3. QA agent (mcp__ruflo__agent_spawn, type tester, name "outcome-[N]-qa"):
|
|
275
|
-
Brief: "Write verification tests for Outcome [N]. Follow the walkthrough exactly. Return results in domain language — describe failures as '[persona] cannot [action]', not as error codes."
|
|
276
|
-
|
|
277
|
-
Sync state between agents using mcp__ruflo__coordination_sync.
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
Wait for all three agents to return before running the shape check.
|
|
281
|
-
|
|
282
|
-
---
|
|
283
|
-
|
|
284
|
-
### Step 4 — Shape check
|
|
285
|
-
|
|
286
|
-
Before running a full verification walkthrough, do a fast shape check:
|
|
287
|
-
|
|
288
|
-
```
|
|
289
|
-
Check the shape of what was built for Outcome [N]:
|
|
290
|
-
1. List all files created or modified.
|
|
291
|
-
2. Confirm file names use domain language (not generic names like "form.tsx" or "handler.ts").
|
|
292
|
-
3. Confirm a test file exists for this outcome.
|
|
293
|
-
4. Confirm the Prisma schema (if applicable) uses domain field names.
|
|
294
|
-
|
|
295
|
-
Return: Pass / Needs fix for each item, with specific details.
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
Fix shape issues before verifying behaviour. A correctly-shaped codebase is far easier to debug.
|
|
3
|
+
The Build Protocol is the discipline that turns a well-written ODD plan into working software. ODD Studio handles all the mechanics — context, contracts, phase tracking, re-briefing, committing. The domain expert does one thing: verify that what was built is right for real users, and describe failures in plain language.
|
|
299
4
|
|
|
300
5
|
---
|
|
301
6
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
The walkthrough in your outcome document is the script for verification. Run it literally, step by step. Do not improvise.
|
|
305
|
-
|
|
306
|
-
For each step in the walkthrough:
|
|
7
|
+
## The Session Rhythm
|
|
307
8
|
|
|
308
|
-
|
|
309
|
-
Verify Step [N]: [copy the step text from the outcome document]
|
|
310
|
-
|
|
311
|
-
Expected: [what should happen]
|
|
312
|
-
Actual: [what actually happened]
|
|
313
|
-
Result: Pass / Fail / Missing
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
Run every step even if an earlier step fails. Collect all failures before asking Claude Code to fix anything.
|
|
9
|
+
Every build session follows the same three steps. The tool manages continuity between sessions through ruflo memory. The domain expert never re-briefs the AI, tracks state manually, or writes handover notes.
|
|
317
10
|
|
|
318
11
|
---
|
|
319
12
|
|
|
320
|
-
### Step
|
|
321
|
-
|
|
322
|
-
This is where most non-technical builders struggle. They describe failures using technical terms they do not fully understand, and Claude Code misdiagnoses the problem.
|
|
323
|
-
|
|
324
|
-
**Bad failure description:**
|
|
325
|
-
"The API is returning a 500 error on the POST endpoint and the state is not updating."
|
|
326
|
-
|
|
327
|
-
**Good failure description:**
|
|
328
|
-
"When the mentor clicks Approve on a student's application, nothing changes on screen. The application stays in Pending. If I refresh the page, the application is still Pending — so the approval did not save. The success message appeared briefly but then disappeared."
|
|
13
|
+
### Step 1 — Open the project
|
|
329
14
|
|
|
330
|
-
|
|
331
|
-
- What persona performed the action
|
|
332
|
-
- What the action was in domain terms
|
|
333
|
-
- What should have changed
|
|
334
|
-
- What actually changed (or did not)
|
|
335
|
-
- Whether the problem is display-only or persisted to data
|
|
15
|
+
Type `/odd`.
|
|
336
16
|
|
|
337
|
-
|
|
17
|
+
ODD Studio reads the full project state from ruflo memory — personas, outcomes, contracts, phase order, verification status. It reports exactly where the build stands and what comes next. If the last session ended three days ago or three weeks ago, the state is the same. The domain expert does not need to remember anything.
|
|
338
18
|
|
|
339
19
|
---
|
|
340
20
|
|
|
341
|
-
### Step
|
|
21
|
+
### Step 2 — Build
|
|
342
22
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
Fixes frequently introduce new problems. A fix to the approval logic may break the notification email. A fix to the UI display may break the mobile layout. You will not catch these if you only re-run the failed step.
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
### Step 8 — Commit when verified
|
|
350
|
-
|
|
351
|
-
```
|
|
352
|
-
Commit this outcome. Message format:
|
|
353
|
-
"Outcome [N] [name] — verified"
|
|
354
|
-
|
|
355
|
-
Include all files related to this outcome. Do not include files from other outcomes in the same commit.
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
Save state to Ruflo:
|
|
359
|
-
|
|
360
|
-
```
|
|
361
|
-
mcp__ruflo__memory_store with key 'odd-build-state'
|
|
362
|
-
Include: outcome [N] complete, contracts exposed, date, any decisions made during build.
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
---
|
|
23
|
+
For a single outcome: type `*build`.
|
|
366
24
|
|
|
367
|
-
|
|
25
|
+
For multiple independent outcomes in the current phase: type `*swarm`.
|
|
368
26
|
|
|
369
|
-
|
|
27
|
+
ODD Studio briefs the build AI with the full six-field specification, the relevant contracts, and the context from previous outcomes. The domain expert waits. The build takes minutes.
|
|
370
28
|
|
|
371
|
-
|
|
29
|
+
The domain expert does not re-brief the AI, paste context, identify shared infrastructure, or check dependencies. ODD Studio handles all of that from ruflo memory.
|
|
372
30
|
|
|
373
31
|
---
|
|
374
32
|
|
|
375
|
-
###
|
|
33
|
+
### Step 3 — Verify
|
|
376
34
|
|
|
377
|
-
|
|
35
|
+
When ODD Studio reports the build is complete, the verification checklist is on screen.
|
|
378
36
|
|
|
379
|
-
|
|
380
|
-
Handshake test: Outcome [A] → Outcome [B]
|
|
37
|
+
Follow each step in order. Follow them as the persona — not as yourself reviewing a system, but as the specific person in the specific situation the outcome was written for.
|
|
381
38
|
|
|
382
|
-
|
|
39
|
+
**Record each step: pass / fail / missing.**
|
|
383
40
|
|
|
384
|
-
|
|
385
|
-
1. Perform the action in Outcome A that produces the contract data.
|
|
386
|
-
2. Navigate to Outcome B.
|
|
387
|
-
3. Confirm the data produced in Outcome A is visible and correct in Outcome B.
|
|
41
|
+
**Verify the failure paths.** These are not optional. They are where the AI made assumptions — what to show when the event is full, what to do when payment fails, what happens when the session expires. The happy path is what the AI builds most reliably. The failure paths are where assumptions accumulate.
|
|
388
42
|
|
|
389
|
-
|
|
390
|
-
Actual: [what appeared]
|
|
391
|
-
Result: Pass / Fail
|
|
392
|
-
```
|
|
43
|
+
**An outcome is verified when every step passes on a single complete run** — not when each step has passed at some point across multiple attempts.
|
|
393
44
|
|
|
394
45
|
---
|
|
395
46
|
|
|
396
|
-
###
|
|
47
|
+
### Describing failures
|
|
397
48
|
|
|
398
|
-
|
|
49
|
+
When a step fails, describe it in domain language — what the person sees, what should happen instead. Not technical causes. Not error codes.
|
|
399
50
|
|
|
400
|
-
|
|
401
|
-
|
|
51
|
+
**Good descriptions:**
|
|
52
|
+
- "The confirmation email arrives but there is no calendar invitation. I cannot add the event to my calendar from the email."
|
|
53
|
+
- "When I try to book an event that already has no remaining places, the booking goes through without any warning."
|
|
54
|
+
- "After I cancel my booking, my account still shows it as upcoming. It only disappears when I refresh the page."
|
|
402
55
|
|
|
403
|
-
|
|
404
|
-
1. How does the entity enter this outcome?
|
|
405
|
-
2. What changes to it?
|
|
406
|
-
3. How does it leave this outcome?
|
|
407
|
-
4. Is the data consistent at every stage?
|
|
408
|
-
|
|
409
|
-
Report any inconsistency.
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
---
|
|
413
|
-
|
|
414
|
-
### Cross-persona check
|
|
415
|
-
|
|
416
|
-
If your phase involves more than one persona, verify that each persona sees what they should see and cannot see what they should not:
|
|
417
|
-
|
|
418
|
-
```
|
|
419
|
-
Cross-persona check for Phase [N]:
|
|
420
|
-
|
|
421
|
-
For each persona:
|
|
422
|
-
1. Log in as this persona (or simulate their session).
|
|
423
|
-
2. Confirm they can see everything the plan specifies they should see.
|
|
424
|
-
3. Confirm they cannot see data belonging to other personas.
|
|
425
|
-
4. Confirm they cannot perform actions reserved for other personas.
|
|
426
|
-
|
|
427
|
-
Report as: Persona | Can see [X] | Cannot see [Y] | Pass/Fail
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
---
|
|
431
|
-
|
|
432
|
-
### Fix failures and re-run
|
|
433
|
-
|
|
434
|
-
Describe any integration failures in domain language (same rule as outcome failures). Ask Claude Code to fix them. Then re-run the handshake tests for every outcome affected by the fix — not just the test that failed.
|
|
56
|
+
Collect all failures from the verification run and send them in a single message. ODD Studio re-briefs the AI with the failures and triggers a fix. After the fix, re-verify from step one — all steps, not just the ones that failed.
|
|
435
57
|
|
|
436
58
|
---
|
|
437
59
|
|
|
438
|
-
###
|
|
439
|
-
|
|
440
|
-
```
|
|
441
|
-
Commit Phase [N] completion. Message format:
|
|
442
|
-
"Phase [N] [name] — integrated and verified"
|
|
60
|
+
### Confirming
|
|
443
61
|
|
|
444
|
-
|
|
445
|
-
```
|
|
62
|
+
When all steps pass on a single complete run, type `confirm`.
|
|
446
63
|
|
|
447
|
-
|
|
448
|
-
```
|
|
449
|
-
mcp__ruflo__memory_store with key 'odd-phase-[N]-complete'
|
|
450
|
-
Include: all outcomes completed, contracts exposed by this phase, integration test results.
|
|
451
|
-
```
|
|
64
|
+
ODD Studio commits the verified state, updates ruflo memory, and presents the next outcome. The domain expert did not write a commit message, update a status file, or identify what comes next. The tool handled all of that.
|
|
452
65
|
|
|
453
66
|
---
|
|
454
67
|
|
|
455
|
-
##
|
|
68
|
+
## Integration Protocol
|
|
456
69
|
|
|
457
|
-
|
|
70
|
+
After all outcomes in a phase are individually verified, ODD Studio runs the Integration Protocol automatically. The domain expert does not initiate this — the post-phase hook triggers it when the last outcome in the phase is confirmed.
|
|
458
71
|
|
|
459
|
-
|
|
72
|
+
Three checks run:
|
|
460
73
|
|
|
461
|
-
|
|
74
|
+
**Handshake check.** For each pair of outcomes that share a contract, confirm the data passing between them is correct in domain terms. Does the organiser's view show the correct customer details from the booking? Does the refund outcome have access to the payment details the booking outcome recorded?
|
|
462
75
|
|
|
463
|
-
|
|
464
|
-
This is not the correct build. Here is what I expected:
|
|
76
|
+
**Data flow trace.** Follow one entity — a customer, a booking, an event — through every outcome in the phase. Confirm the data is consistent. The customer's name should be the same everywhere. The booking reference should appear wherever it should appear.
|
|
465
77
|
|
|
466
|
-
|
|
467
|
-
Action: [what they do]
|
|
468
|
-
Expected result: [what should appear, step by step]
|
|
78
|
+
**Cross-persona check.** Confirm each persona sees what they should see and cannot access what they should not. Navigate as a customer to a page that should only be accessible to an organiser. Confirm it is blocked.
|
|
469
79
|
|
|
470
|
-
|
|
471
|
-
[Describe what you see on screen or in the code]
|
|
472
|
-
|
|
473
|
-
Please read the outcome document again in full, then rebuild to match it exactly.
|
|
474
|
-
```
|
|
80
|
+
When all three checks pass, the phase is complete. ODD Studio marks it so, updates ruflo memory, and confirms which phase is next.
|
|
475
81
|
|
|
476
82
|
---
|
|
477
83
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
Before asking Claude Code to fix the new breakage, understand what changed:
|
|
84
|
+
## Handling failures
|
|
481
85
|
|
|
482
|
-
|
|
483
|
-
Something that was working is now broken. Before making any changes:
|
|
86
|
+
### Verification failure
|
|
484
87
|
|
|
485
|
-
|
|
486
|
-
2. Run git diff HEAD~1 to show what changed in the last commit.
|
|
487
|
-
3. Tell me in plain language what files changed and what the changes were.
|
|
88
|
+
A step fails. Describe what you see and what should happen instead. One message for all failures. ODD Studio routes the fix to the AI and triggers re-verification.
|
|
488
89
|
|
|
489
|
-
|
|
490
|
-
```
|
|
90
|
+
### Specification gap
|
|
491
91
|
|
|
492
|
-
|
|
92
|
+
Verification reveals not a specific failure but a wrong assumption about what the outcome should do — a case that was never specified, a requirement that was invisible until the system was working.
|
|
493
93
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
### "The AI keeps making the same mistake"
|
|
497
|
-
|
|
498
|
-
If Claude Code makes the same mistake twice, the solution is a rule in CLAUDE.md, not repeated correction.
|
|
94
|
+
This is not a verification failure. It is a specification gap. Type `*outcome` to open the relevant outcome and update the field that was wrong. ODD Studio saves the updated specification to ruflo memory and re-briefs the AI with the corrected version. Then rebuild and re-verify.
|
|
499
95
|
|
|
500
|
-
|
|
501
|
-
```
|
|
502
|
-
You have now made this mistake twice: [describe the mistake in domain language].
|
|
96
|
+
### When something is consistently wrong
|
|
503
97
|
|
|
504
|
-
|
|
505
|
-
The rule should describe the correct approach, not just forbid the wrong one.
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
Then add the rule to CLAUDE.md. Claude Code reads this file at the start of every session.
|
|
98
|
+
If the same outcome fails verification repeatedly, the most likely cause is a specification problem — a walkthrough that left a case ambiguous, a verification step that cannot actually be passed as written. Return to `*outcome`, update the specification, and rebuild from the corrected version.
|
|
509
99
|
|
|
510
100
|
---
|
|
511
101
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
This is the "two architects, one door" problem. It happens when parallel agents build overlapping things without agreeing on the shared interface first.
|
|
102
|
+
## Red flags
|
|
515
103
|
|
|
516
|
-
The
|
|
104
|
+
**"The build looks fine."** Fine is not verified. Fine means a visual scan was performed. An outcome that looks fine has not had its failure paths tested.
|
|
517
105
|
|
|
518
|
-
|
|
519
|
-
Two outcomes do not connect at [the seam point — e.g. the student record].
|
|
106
|
+
**"I tested the main flow."** The happy path was checked. The failure paths — where the AI made assumptions — were not.
|
|
520
107
|
|
|
521
|
-
|
|
522
|
-
1. Show me exactly how Outcome A produces this data (the shape of what it writes or returns).
|
|
523
|
-
2. Show me exactly how Outcome B expects to receive this data (the shape it reads).
|
|
524
|
-
3. Identify the difference.
|
|
525
|
-
4. Write a shared contract definition that both can conform to.
|
|
526
|
-
5. Update both outcomes to use this shared contract.
|
|
527
|
-
```
|
|
108
|
+
**Describing failures in technical language.** "The API returns a 500 error" is a technical description. "When I try to book, the page shows a generic error message instead of telling me the event is full" is a domain description. Use the second.
|
|
528
109
|
|
|
529
|
-
|
|
530
|
-
```
|
|
531
|
-
mcp__ruflo__memory_store with key 'odd-contract-[contract-name]'
|
|
532
|
-
```
|
|
110
|
+
**Skipping verification steps.** A step skipped because it seems fine is a step that has not been verified. The outcome is verified when all steps pass on the same complete run.
|