odd-studio 3.3.7 → 3.3.9

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/README.md CHANGED
@@ -27,22 +27,19 @@ ODD Studio is the companion tool to **The ODD Way to Build Software with Agentic
27
27
  Add the following into Terminal inside your project folder, NOT your system root folder.
28
28
 
29
29
  ```bash
30
- npx odd-studio init my-project
31
- cd my-project
30
+ npx odd-studio init
32
31
  ```
33
32
 
34
33
  ### For OpenCode (with Ollama / local models)
35
34
 
36
35
  ```bash
37
- npx odd-studio init my-project --agent opencode
38
- cd my-project
36
+ npx odd-studio init --agent opencode
39
37
  ```
40
38
 
41
39
  ### For Codex
42
40
 
43
41
  ```bash
44
- npx odd-studio init my-project --agent codex
45
- cd my-project
42
+ npx odd-studio init --agent codex
46
43
  ```
47
44
 
48
45
  In Codex, start ODD with a natural-language kickoff such as `use ODD`, `start ODD`, or `begin ODD`.
@@ -58,15 +55,13 @@ npx odd-studio upgrade --agent codex
58
55
  ### For Claude Code and OpenCode on the same machine
59
56
 
60
57
  ```bash
61
- npx odd-studio init my-project --agent both
62
- cd my-project
58
+ npx odd-studio init --agent both
63
59
  ```
64
60
 
65
61
  ### For every supported agent on the same machine
66
62
 
67
63
  ```bash
68
- npx odd-studio init my-project --agent all
69
- cd my-project
64
+ npx odd-studio init --agent all
70
65
  ```
71
66
 
72
67
  Everything is installed into your project folder. Nothing is written to your home directory or installed globally.
@@ -228,7 +223,7 @@ The AI proposes the stack based on your outcomes. You approve it based on conseq
228
223
 
229
224
  ## Project structure
230
225
 
231
- After `npx odd-studio init my-project`, your project looks like this:
226
+ After `npx odd-studio init`, your project looks like this:
232
227
 
233
228
  ```
234
229
  my-project/
@@ -325,7 +320,6 @@ npx odd-studio export # Instructions for exporting the Sessio
325
320
  Run from inside your existing ODD project:
326
321
 
327
322
  ```bash
328
- cd my-project
329
323
  npx odd-studio@latest upgrade
330
324
  ```
331
325
 
package/bin/odd-studio.js CHANGED
@@ -15,7 +15,7 @@ import { registerUninstall } from './commands/uninstall.js';
15
15
  const __filename = fileURLToPath(import.meta.url);
16
16
  const __dirname = path.dirname(__filename);
17
17
  const require = createRequire(import.meta.url);
18
- const pkg = require('../package.json'); // v3.3.7
18
+ const pkg = require('../package.json'); // v3.3.9
19
19
 
20
20
  const PACKAGE_ROOT = path.resolve(__dirname, '..');
21
21
  const deps = { PACKAGE_ROOT, print };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odd-studio",
3
- "version": "3.3.7",
3
+ "version": "3.3.9",
4
4
  "description": "Outcome-Driven Development planning and build harness for domain experts building serious software with AI.",
5
5
  "author": {
6
6
  "name": "ODD Studio"
@@ -331,6 +331,47 @@ session-save)
331
331
  exit 0
332
332
  ;;
333
333
 
334
+ # ─────────────────────────────────────────────────────────────────────────────
335
+ # PostToolUse: Write|Edit state.json — blocks phase transition without Steps 9, 9b, 9d
336
+ # ─────────────────────────────────────────────────────────────────────────────
337
+ plan-complete-gate)
338
+ [ "$TOOL_NAME" = "Write" ] || [ "$TOOL_NAME" = "Edit" ] || exit 0
339
+
340
+ # Only intercept writes to state.json
341
+ echo "$FILE_PATH" | grep -q 'state\.json' || exit 0
342
+
343
+ # Check if new content changes currentPhase to "build"
344
+ NEW_CONTENT=$(echo "$INPUT" | jq -r '.tool_input.new_string // .tool_input.content // empty')
345
+ echo "$NEW_CONTENT" | grep -qE '"currentPhase"[[:space:]]*:[[:space:]]*"build"' || exit 0
346
+
347
+ # Verify all planning steps are complete
348
+ TECH_STACK=$(echo "$NEW_CONTENT" | grep -oE '"techStackDecided"[[:space:]]*:[[:space:]]*(true|false)' | grep -c 'true' || echo 0)
349
+ DESIGN=$(echo "$NEW_CONTENT" | grep -oE '"designApproachDecided"[[:space:]]*:[[:space:]]*(true|false)' | grep -c 'true' || echo 0)
350
+ ARCH_DOC=$(echo "$NEW_CONTENT" | grep -oE '"architectureDocGenerated"[[:space:]]*:[[:space:]]*(true|false)' | grep -c 'true' || echo 0)
351
+
352
+ if [ "$TECH_STACK" -eq 0 ] || [ "$DESIGN" -eq 0 ] || [ "$ARCH_DOC" -eq 0 ]; then
353
+ echo "" >&2
354
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >&2
355
+ echo "ODD STUDIO [plan-complete-gate]: PHASE TRANSITION BLOCKED" >&2
356
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >&2
357
+ echo "" >&2
358
+ echo " Cannot transition to build phase without completing planning:" >&2
359
+ echo "" >&2
360
+ [ "$TECH_STACK" -eq 0 ] && echo " ❌ Step 9: Technical architecture not decided (techStackDecided)" >&2
361
+ [ "$DESIGN" -eq 0 ] && echo " ❌ Step 9b: Design approach not decided (designApproachDecided)" >&2
362
+ [ "$ARCH_DOC" -eq 0 ] && echo " ❌ Step 9d: Architecture docs not generated (architectureDocGenerated)" >&2
363
+ echo "" >&2
364
+ echo " Run *plan to continue with Rachel (Step 9, 9b, 9d)." >&2
365
+ echo "" >&2
366
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" >&2
367
+ echo "" >&2
368
+ exit 2
369
+ fi
370
+
371
+ # All checks passed — allow the transition
372
+ exit 0
373
+ ;;
374
+
334
375
  # ─────────────────────────────────────────────────────────────────────────────
335
376
  # PostToolUse: mcp__odd-flow__memory_store — creates ready marker
336
377
  # ─────────────────────────────────────────────────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "odd-studio",
3
- "version": "3.3.7",
3
+ "version": "3.3.9",
4
4
  "description": "Outcome-Driven Development for AI coding agents — a planning and build harness for domain experts building serious software with AI. Works with Claude Code, OpenCode, and Codex.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -50,6 +50,20 @@ const GATES = [
50
50
  ],
51
51
  },
52
52
  // ── PostToolUse ─────────────────────────────────────────────────────────
53
+ {
54
+ event: 'PostToolUse',
55
+ matcher: 'Write',
56
+ gates: [
57
+ { name: 'plan-complete-gate', timeout: 5, status: 'ODD plan complete gate...' },
58
+ ],
59
+ },
60
+ {
61
+ event: 'PostToolUse',
62
+ matcher: 'Edit',
63
+ gates: [
64
+ { name: 'plan-complete-gate', timeout: 5, status: 'ODD plan complete gate...' },
65
+ ],
66
+ },
53
67
  {
54
68
  event: 'PostToolUse',
55
69
  matcher: 'Bash',
package/skill/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "odd"
3
- version: "3.3.7"
3
+ version: "3.3.9"
4
4
  description: "Outcome-Driven Development planning and build coach. Use /odd to start or resume an ODD project — building personas, writing outcomes, mapping contracts, creating a Master Implementation Plan, and directing a odd-flow-powered build. Designed for domain experts who are not developers. Works with Claude Code, OpenCode, and Codex."
5
5
  metadata:
6
6
  priority: 10
@@ -96,7 +96,7 @@ Display this when no existing state is found:
96
96
 
97
97
  ---
98
98
 
99
- Welcome to ODD Studio v3.3.7.
99
+ Welcome to ODD Studio v3.3.9.
100
100
 
101
101
  You are about to plan and build something real — using a methodology called Outcome-Driven Development. Before we write a single line of code, we are going to get precise about three things:
102
102
 
@@ -120,7 +120,7 @@ Display this when existing state is found. Replace the bracketed values with act
120
120
 
121
121
  ---
122
122
 
123
- Welcome back to ODD Studio v3.3.7.
123
+ Welcome back to ODD Studio v3.3.9.
124
124
 
125
125
  **Project:** [project.name]
126
126
  **Current Phase:** [state.currentPhase]