odd-studio 2.2.0 → 2.3.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/bin/odd-studio.js
CHANGED
|
@@ -62,7 +62,7 @@ program
|
|
|
62
62
|
console.log(chalk.bold(` Setting up: ${chalk.cyan(resolvedName)}\n`));
|
|
63
63
|
|
|
64
64
|
// 1. Scaffold project structure
|
|
65
|
-
print.step(1,
|
|
65
|
+
print.step(1, 5, 'Creating project structure...');
|
|
66
66
|
const spinner1 = ora({ text: '', indent: 4 }).start();
|
|
67
67
|
try {
|
|
68
68
|
await scaffoldProject(targetDir, resolvedName);
|
|
@@ -76,7 +76,7 @@ program
|
|
|
76
76
|
|
|
77
77
|
// 2. Install /odd skill
|
|
78
78
|
if (!options.skipSkill) {
|
|
79
|
-
print.step(2,
|
|
79
|
+
print.step(2, 5, 'Installing /odd skill into Claude Code...');
|
|
80
80
|
const spinner2 = ora({ text: '', indent: 4 }).start();
|
|
81
81
|
try {
|
|
82
82
|
const result = await installSkill(PACKAGE_ROOT);
|
|
@@ -88,13 +88,13 @@ program
|
|
|
88
88
|
print.info('Manual install: copy ' + chalk.dim('skill/') + ' to ' + chalk.dim('~/.claude/skills/odd/'));
|
|
89
89
|
}
|
|
90
90
|
} else {
|
|
91
|
-
print.step(2,
|
|
91
|
+
print.step(2, 5, 'Skipping skill install (--skip-skill)');
|
|
92
92
|
print.warn('Remember to install the skill manually for /odd to work in Claude Code.');
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
// 3. Setup hooks
|
|
96
96
|
if (!options.skipHooks) {
|
|
97
|
-
print.step(3,
|
|
97
|
+
print.step(3, 5, 'Installing safety hooks into Claude Code settings...');
|
|
98
98
|
const spinner3 = ora({ text: '', indent: 4 }).start();
|
|
99
99
|
try {
|
|
100
100
|
const result = await setupHooks(PACKAGE_ROOT);
|
|
@@ -106,7 +106,7 @@ program
|
|
|
106
106
|
print.info('Manual install: add entries from ' + chalk.dim('hooks/') + ' to ~/.claude/settings.json');
|
|
107
107
|
}
|
|
108
108
|
} else {
|
|
109
|
-
print.step(3,
|
|
109
|
+
print.step(3, 5, 'Skipping hooks (--skip-hooks)');
|
|
110
110
|
print.warn('Safety hooks not installed. Git guardrails and quality gates will not run.');
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -152,8 +152,9 @@ program
|
|
|
152
152
|
if (projectName) {
|
|
153
153
|
console.log(' 1. ' + chalk.cyan(`cd ${projectName}`));
|
|
154
154
|
}
|
|
155
|
-
console.log(' ' + (projectName ? '2' : '1') + '.
|
|
156
|
-
console.log(' ' + (projectName ? '3' : '2') + '.
|
|
155
|
+
console.log(' ' + (projectName ? '2' : '1') + '. Restart Claude Code: ' + chalk.cyan('quit and reopen') + chalk.dim(' (activates ruflo memory + hooks)'));
|
|
156
|
+
console.log(' ' + (projectName ? '3' : '2') + '. Open your project: ' + chalk.cyan('claude .'));
|
|
157
|
+
console.log(' ' + (projectName ? '4' : '3') + '. Start your ODD session: ' + chalk.cyan('/odd'));
|
|
157
158
|
print.blank();
|
|
158
159
|
|
|
159
160
|
console.log(chalk.dim(' ODD Studio implements Outcome-Driven Development.'));
|
package/package.json
CHANGED
package/scripts/postinstall.js
CHANGED
|
@@ -22,6 +22,7 @@ Promise.all([
|
|
|
22
22
|
])
|
|
23
23
|
.then(() => {
|
|
24
24
|
console.log('✓ ODD Studio: /odd skill, safety hooks, and ruflo memory installed into Claude Code');
|
|
25
|
+
console.log(' → Restart Claude Code now to activate ruflo memory and hooks.');
|
|
25
26
|
console.log(' Run: npx odd-studio init [project-name] to scaffold your first project.');
|
|
26
27
|
})
|
|
27
28
|
.catch((e) => {
|
|
@@ -8,7 +8,7 @@ The Build Protocol is the repeating rhythm of every session. It is deliberately
|
|
|
8
8
|
|
|
9
9
|
- **The tool handles the mechanics. You handle the judgment.** ODD Studio loads context from ruflo, reads the contract map, identifies the next outcome to build, briefs the AI, waits for the result, and presents you with a verification checklist. Your job is to follow that checklist as the persona and judge whether the result is correct.
|
|
10
10
|
|
|
11
|
-
- **The session rhythm is: /odd, *build, verify, confirm.** `/odd` loads the skill and restores project state from ruflo. `*build` starts the next outcome. You verify the result against the checklist. `confirm` commits the verified outcome and advances to the next one. That is it.
|
|
11
|
+
- **The session rhythm is: /odd, *build, verify, confirm.** `/odd` loads the skill and restores project state from ruflo. `*build` starts the next outcome. You verify the result against the checklist. `confirm` runs Checkpoint (a security scan of what was just built), commits the verified outcome, and advances to the next one. That is it.
|
|
12
12
|
|
|
13
13
|
- **Re-briefing is automatic.** You do not need to remind the AI what your project is, what has been built, or what comes next. Ruflo stores all of this. ODD Studio reads it at the start of every session. If you find yourself explaining context, something is wrong with the state — not with the process.
|
|
14
14
|
|
|
@@ -22,6 +22,8 @@ The Build Protocol is the repeating rhythm of every session. It is deliberately
|
|
|
22
22
|
|
|
23
23
|
- Building without verifying. Typing `confirm` without following the verification checklist is the fastest way to accumulate hidden defects. Every unverified outcome is a risk to every outcome that depends on it.
|
|
24
24
|
|
|
25
|
+
- Worrying about security implementation. Checkpoint runs automatically when you type `confirm`. It scans for exposed secrets, missing authentication checks, and injection vulnerabilities in what was just built. If it finds something, the build agent fixes it before the commit. You do not need to think about this — it happens in the background.
|
|
26
|
+
|
|
25
27
|
- Batching multiple outcomes into one build. Each outcome has its own verification checklist for a reason. Mixing them makes it impossible to know which outcome caused a failure.
|
|
26
28
|
|
|
27
29
|
## What This Means for You
|
|
@@ -10,6 +10,16 @@ Automated tests confirm the code does what it was told. Verification confirms it
|
|
|
10
10
|
|
|
11
11
|
- **Verification is done as the persona.** You are not checking as yourself — you are checking as the persona in their situation. If the persona is on a phone with limited time, verify on a phone. If the persona is a first-time user, approach the interface as if you have never seen it.
|
|
12
12
|
|
|
13
|
+
## What You Verify vs. What Checkpoint Verifies
|
|
14
|
+
|
|
15
|
+
There are two kinds of correctness in a verified outcome. You are responsible for one. Checkpoint handles the other.
|
|
16
|
+
|
|
17
|
+
**You verify domain correctness.** Does this outcome do what the persona needs it to do? Does the email contain the right information? Does the booking flow make sense to a first-time user? Does the error message explain what went wrong in plain language? Only you can answer these questions. No tool can.
|
|
18
|
+
|
|
19
|
+
**Checkpoint verifies security correctness.** Did the build introduce an exposed credential? Is there a path that bypasses authentication? Could an input be used to extract data it should not be able to reach? Checkpoint scans for these automatically every time you type `confirm`. You do not need to think about them. They are not part of your verification checklist.
|
|
20
|
+
|
|
21
|
+
This division of labour is deliberate. You are good at judging whether something is right for your users. You are not expected to know what an injection vulnerability looks like in code. Checkpoint is good at finding those. Neither replaces the other.
|
|
22
|
+
|
|
13
23
|
## Three Rules of Verification
|
|
14
24
|
|
|
15
25
|
- **Don't skip steps.** Every step in the checklist tests a specific part of the outcome. Skipping a step means that part is unverified. Unverified parts fail in production.
|
|
@@ -16,13 +16,13 @@ No new principles here. Everything has been introduced in earlier chapters. This
|
|
|
16
16
|
|
|
17
17
|
**Step 5: Failure handling.** When you describe a failure, ODD Studio handles the fix. It re-reads the specification, makes the correction, and presents the checklist again. You verify again from the beginning — a partial re-verification does not count.
|
|
18
18
|
|
|
19
|
-
**Step 6: confirm.** When every step passes, you type `confirm`. ODD Studio commits the verified outcome to git, updates ruflo with the new project state, and advances the plan to the next outcome. The cycle is complete.
|
|
19
|
+
**Step 6: confirm.** When every step passes, you type `confirm`. Before committing, ODD Studio runs Checkpoint — a security scan of what was just built. If Checkpoint finds anything, the build agent fixes it quietly and Checkpoint runs again. You see "Checkpoint clear" when it passes. ODD Studio then commits the verified outcome to git, updates ruflo with the new project state, and advances the plan to the next outcome. The cycle is complete.
|
|
20
20
|
|
|
21
21
|
## What You Do vs. What the Tool Does
|
|
22
22
|
|
|
23
23
|
**You do:** verify the result as the persona. Describe failures in domain language. Confirm when satisfied.
|
|
24
24
|
|
|
25
|
-
**The tool does:** load context, brief the AI, run the build, present the checklist, handle fixes, commit, update state.
|
|
25
|
+
**The tool does:** load context, brief the AI, run the build, present the checklist, handle fixes, run Checkpoint, brief the build agent on any security findings, commit, update state.
|
|
26
26
|
|
|
27
27
|
## Red Flags
|
|
28
28
|
|
|
@@ -22,10 +22,40 @@ The feeling that security is "too technical" is understandable but incorrect. Se
|
|
|
22
22
|
|
|
23
23
|
- Security treated as a separate phase. Security outcomes are not an add-on. They belong in the same phase as the outcomes they constrain. The "view grades" permission outcome and the "block unauthorised grade access" prohibition outcome should be built and verified together.
|
|
24
24
|
|
|
25
|
+
## Checkpoint: The Security Layer You Do Not Have to Think About
|
|
26
|
+
|
|
27
|
+
Domain security — who can see what, who can do what — is your responsibility. You specify it as outcomes and verify it as the persona.
|
|
28
|
+
|
|
29
|
+
Implementation security is a different category. It covers things like: a credential accidentally left in the code by the AI, a route that can be reached without authentication because the AI made a wrong assumption, an input field that accepts data it should reject. These are not failures of specification. They are failures of implementation that you would have no way to spot by reading code or clicking through a verification checklist.
|
|
30
|
+
|
|
31
|
+
This is what Checkpoint handles. Every time you type `confirm`, Checkpoint scans what was just built. It looks for exposed secrets, missing authentication checks, unsafe inputs, and known vulnerability patterns. If it finds something, it briefs the build agent with specific fix instructions in plain language. The fix happens, Checkpoint scans again, and the cycle repeats until it is clean. You see one message: "Checkpoint clear." Then the outcome is committed.
|
|
32
|
+
|
|
33
|
+
You do not need to understand what Checkpoint found. You do not need to review the fix. That is not your job. Your job is the domain. Checkpoint's job is the implementation layer.
|
|
34
|
+
|
|
35
|
+
The result is that every committed outcome in your project has been verified twice: once by you for domain correctness, and once by Checkpoint for implementation security. Neither check replaces the other, and neither is optional.
|
|
36
|
+
|
|
37
|
+
## Two Types of Security Work
|
|
38
|
+
|
|
39
|
+
To be precise about the division:
|
|
40
|
+
|
|
41
|
+
**Your security work** (done during outcome writing and verification):
|
|
42
|
+
- Write prohibition outcomes for every permission outcome
|
|
43
|
+
- Verify that the wrong persona cannot access restricted data
|
|
44
|
+
- Verify that direct URL access is blocked, not just hidden
|
|
45
|
+
- Ensure data deletion outcomes exist wherever data is collected
|
|
46
|
+
|
|
47
|
+
**Checkpoint's security work** (done automatically at `confirm`):
|
|
48
|
+
- Detect exposed credentials and secrets in code
|
|
49
|
+
- Detect missing or bypassed authentication checks
|
|
50
|
+
- Detect injection vulnerabilities and unsafe inputs
|
|
51
|
+
- Detect known vulnerability patterns from security databases
|
|
52
|
+
|
|
53
|
+
Do both. Neither is enough alone.
|
|
54
|
+
|
|
25
55
|
## What This Means for You
|
|
26
56
|
|
|
27
57
|
For every outcome that involves access to data or actions restricted to certain personas, write the corresponding prohibition outcome. Then verify both: check that the right persona can do the thing, and check that the wrong persona cannot.
|
|
28
58
|
|
|
29
|
-
You already know who should see what in your system. Write it down in outcome format.
|
|
59
|
+
You already know who should see what in your system. Write it down in outcome format. Checkpoint will handle the rest of the security picture automatically.
|
|
30
60
|
|
|
31
61
|
Next: Chapter 15 shows that interface quality is a specification problem — and gives you five principles to specify it.
|