renn-studio 0.6.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 +22 -0
- package/README.md +36 -0
- package/agents/renn-architect.md +1463 -0
- package/agents/renn-auditor.md +1053 -0
- package/agents/renn-codebase-mapper.md +908 -0
- package/agents/renn-design-reviewer.md +422 -0
- package/agents/renn-designer.md +814 -0
- package/agents/renn-detective.md +1204 -0
- package/agents/renn-integration-checker.md +957 -0
- package/agents/renn-navigator.md +659 -0
- package/agents/renn-plan-reviewer.md +812 -0
- package/agents/renn-project-scout.md +880 -0
- package/agents/renn-runner.md +842 -0
- package/agents/renn-stage-scout.md +705 -0
- package/agents/renn-synthesizer.md +256 -0
- package/bin/install.js +1466 -0
- package/commands/renn.add-stage.md +211 -0
- package/commands/renn.add-todo.md +194 -0
- package/commands/renn.audit-milestone.md +280 -0
- package/commands/renn.audit.md +219 -0
- package/commands/renn.check-todos.md +229 -0
- package/commands/renn.complete-milestone.md +136 -0
- package/commands/renn.continue.md +46 -0
- package/commands/renn.dash.md +308 -0
- package/commands/renn.debug.md +169 -0
- package/commands/renn.design-screens.md +107 -0
- package/commands/renn.design-system.md +100 -0
- package/commands/renn.discuss-stage.md +86 -0
- package/commands/renn.help.md +550 -0
- package/commands/renn.insert-stage.md +231 -0
- package/commands/renn.list-stage-assumptions.md +49 -0
- package/commands/renn.map-codebase.md +72 -0
- package/commands/renn.new-milestone.md +80 -0
- package/commands/renn.pause.md +132 -0
- package/commands/renn.plan-milestone-gaps.md +314 -0
- package/commands/renn.plan-stage.md +118 -0
- package/commands/renn.remove-stage.md +353 -0
- package/commands/renn.research-stage.md +200 -0
- package/commands/renn.restyle.md +98 -0
- package/commands/renn.run-stage.md +343 -0
- package/commands/renn.set-profile.md +116 -0
- package/commands/renn.settings.md +151 -0
- package/commands/renn.ship.md +52 -0
- package/commands/renn.start.md +95 -0
- package/commands/renn.status.md +530 -0
- package/commands/renn.watch.md +51 -0
- package/hooks/dist/renn-check-update.js +67 -0
- package/hooks/dist/renn-statusline.js +96 -0
- package/package.json +89 -0
- package/renn/references/continuation-format.md +249 -0
- package/renn/references/design-artifacts.md +674 -0
- package/renn/references/design-tokens.md +162 -0
- package/renn/references/gates.md +1078 -0
- package/renn/references/git-integration.md +254 -0
- package/renn/references/horsepower-profiles.md +84 -0
- package/renn/references/planning-config.md +189 -0
- package/renn/references/questioning.md +141 -0
- package/renn/references/security-checklist.md +2184 -0
- package/renn/references/tdd.md +263 -0
- package/renn/references/ui-brand.md +189 -0
- package/renn/references/verification-patterns.md +612 -0
- package/renn/templates/DEBUG.md +159 -0
- package/renn/templates/INTEL.md +283 -0
- package/renn/templates/RECAP.md +246 -0
- package/renn/templates/UAT.md +247 -0
- package/renn/templates/architect-prompt.md +119 -0
- package/renn/templates/brief.md +190 -0
- package/renn/templates/codebase/architecture.md +264 -0
- package/renn/templates/codebase/concerns.md +310 -0
- package/renn/templates/codebase/conventions.md +307 -0
- package/renn/templates/codebase/design.md +336 -0
- package/renn/templates/codebase/integrations.md +280 -0
- package/renn/templates/codebase/stack.md +186 -0
- package/renn/templates/codebase/structure.md +295 -0
- package/renn/templates/codebase/testing.md +480 -0
- package/renn/templates/config.json +36 -0
- package/renn/templates/continue-here.md +80 -0
- package/renn/templates/detective-prompt.md +93 -0
- package/renn/templates/milestone-archive.md +123 -0
- package/renn/templates/milestone.md +117 -0
- package/renn/templates/proof.md +326 -0
- package/renn/templates/pulse.md +176 -0
- package/renn/templates/research/architecture.md +206 -0
- package/renn/templates/research/features.md +149 -0
- package/renn/templates/research/pitfalls.md +202 -0
- package/renn/templates/research/recap.md +187 -0
- package/renn/templates/research/stack.md +122 -0
- package/renn/templates/research/ux.md +283 -0
- package/renn/templates/research-lite.md +146 -0
- package/renn/templates/research.md +582 -0
- package/renn/templates/specs.md +233 -0
- package/renn/templates/stage-prompt.md +571 -0
- package/renn/templates/track.md +211 -0
- package/renn/templates/user-setup.md +315 -0
- package/renn/workflows/audit-stage.md +717 -0
- package/renn/workflows/audit-work.md +596 -0
- package/renn/workflows/complete-milestone.md +875 -0
- package/renn/workflows/continue-project.md +306 -0
- package/renn/workflows/design-stage.md +2019 -0
- package/renn/workflows/diagnose-issues.md +231 -0
- package/renn/workflows/initialize-project.md +1039 -0
- package/renn/workflows/list-assumptions.md +178 -0
- package/renn/workflows/map-codebase.md +374 -0
- package/renn/workflows/new-milestone.md +718 -0
- package/renn/workflows/plan-stage.md +810 -0
- package/renn/workflows/research-stage.md +289 -0
- package/renn/workflows/run-plan.md +1844 -0
- package/renn/workflows/run-stage.md +692 -0
- package/renn/workflows/scope-stage.md +546 -0
- package/renn/workflows/ship-project.md +859 -0
- package/renn/workflows/transition.md +556 -0
- package/renn/workflows/watch-project.md +797 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Check for RENN updates in background, write result to cache
|
|
3
|
+
// Called by SessionStart hook - runs once per session
|
|
4
|
+
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const os = require('os');
|
|
8
|
+
const { spawn } = require('child_process');
|
|
9
|
+
|
|
10
|
+
const homeDir = os.homedir();
|
|
11
|
+
const cwd = process.cwd();
|
|
12
|
+
const cacheDir = path.join(homeDir, '.claude', 'cache');
|
|
13
|
+
const cacheFile = path.join(cacheDir, 'renn-update-check.json');
|
|
14
|
+
|
|
15
|
+
// VERSION file locations (check project first, then global)
|
|
16
|
+
const projectVersionFile = path.join(cwd, '.claude', 'renn', 'VERSION');
|
|
17
|
+
const globalVersionFile = path.join(homeDir, '.claude', 'renn', 'VERSION');
|
|
18
|
+
|
|
19
|
+
// Ensure cache directory exists
|
|
20
|
+
if (!fs.existsSync(cacheDir)) {
|
|
21
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Run check in background
|
|
25
|
+
const child = spawn(
|
|
26
|
+
process.execPath,
|
|
27
|
+
[
|
|
28
|
+
'-e',
|
|
29
|
+
`
|
|
30
|
+
const fs = require('fs');
|
|
31
|
+
const { execSync } = require('child_process');
|
|
32
|
+
|
|
33
|
+
const cacheFile = ${JSON.stringify(cacheFile)};
|
|
34
|
+
const projectVersionFile = ${JSON.stringify(projectVersionFile)};
|
|
35
|
+
const globalVersionFile = ${JSON.stringify(globalVersionFile)};
|
|
36
|
+
|
|
37
|
+
let installed = '0.0.0';
|
|
38
|
+
try {
|
|
39
|
+
if (fs.existsSync(projectVersionFile)) {
|
|
40
|
+
installed = fs.readFileSync(projectVersionFile, 'utf8').trim();
|
|
41
|
+
} else if (fs.existsSync(globalVersionFile)) {
|
|
42
|
+
installed = fs.readFileSync(globalVersionFile, 'utf8').trim();
|
|
43
|
+
}
|
|
44
|
+
} catch (e) {}
|
|
45
|
+
|
|
46
|
+
let latest = null;
|
|
47
|
+
try {
|
|
48
|
+
latest = execSync('npm view renn version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
|
|
49
|
+
} catch (e) {}
|
|
50
|
+
|
|
51
|
+
const result = {
|
|
52
|
+
update_available: latest && installed !== latest,
|
|
53
|
+
installed,
|
|
54
|
+
latest: latest || 'unknown',
|
|
55
|
+
checked: Math.floor(Date.now() / 1000)
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
fs.writeFileSync(cacheFile, JSON.stringify(result));
|
|
59
|
+
`,
|
|
60
|
+
],
|
|
61
|
+
{
|
|
62
|
+
stdio: 'ignore',
|
|
63
|
+
windowsHide: true,
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
child.unref();
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Claude Code Statusline - RENN Edition
|
|
3
|
+
// Shows: model | current task | directory | context usage
|
|
4
|
+
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const os = require('os');
|
|
8
|
+
|
|
9
|
+
// Read JSON from stdin
|
|
10
|
+
let input = '';
|
|
11
|
+
process.stdin.setEncoding('utf8');
|
|
12
|
+
process.stdin.on('data', (chunk) => (input += chunk));
|
|
13
|
+
process.stdin.on('end', () => {
|
|
14
|
+
try {
|
|
15
|
+
const data = JSON.parse(input);
|
|
16
|
+
const model = data.model?.display_name || 'Claude';
|
|
17
|
+
const dir = data.workspace?.current_dir || process.cwd();
|
|
18
|
+
const session = data.session_id || '';
|
|
19
|
+
const remaining = data.context_window?.remaining_percentage;
|
|
20
|
+
|
|
21
|
+
// Context window display (shows USED percentage scaled to 80% limit)
|
|
22
|
+
let ctx = '';
|
|
23
|
+
if (remaining != null) {
|
|
24
|
+
const rem = Math.round(remaining);
|
|
25
|
+
const rawUsed = Math.max(0, Math.min(100, 100 - rem));
|
|
26
|
+
const used = Math.min(100, Math.round((rawUsed / 80) * 100));
|
|
27
|
+
|
|
28
|
+
const filled = Math.floor(used / 10);
|
|
29
|
+
const bar = '\u2588'.repeat(filled) + '\u2591'.repeat(10 - filled);
|
|
30
|
+
|
|
31
|
+
if (used < 63) {
|
|
32
|
+
ctx = ` \x1b[32m${bar} ${used}%\x1b[0m`;
|
|
33
|
+
} else if (used < 81) {
|
|
34
|
+
ctx = ` \x1b[33m${bar} ${used}%\x1b[0m`;
|
|
35
|
+
} else if (used < 95) {
|
|
36
|
+
ctx = ` \x1b[38;5;208m${bar} ${used}%\x1b[0m`;
|
|
37
|
+
} else {
|
|
38
|
+
ctx = ` \x1b[5;31m\ud83d\udc80 ${bar} ${used}%\x1b[0m`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Current task from todos
|
|
43
|
+
let task = '';
|
|
44
|
+
const homeDir = os.homedir();
|
|
45
|
+
const todosDir = path.join(homeDir, '.claude', 'todos');
|
|
46
|
+
if (session && fs.existsSync(todosDir)) {
|
|
47
|
+
try {
|
|
48
|
+
const files = fs
|
|
49
|
+
.readdirSync(todosDir)
|
|
50
|
+
.filter((f) => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
|
|
51
|
+
.map((f) => ({ name: f, mtime: fs.statSync(path.join(todosDir, f)).mtime }))
|
|
52
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
53
|
+
|
|
54
|
+
if (files.length > 0) {
|
|
55
|
+
try {
|
|
56
|
+
const todos = JSON.parse(fs.readFileSync(path.join(todosDir, files[0].name), 'utf8'));
|
|
57
|
+
const inProgress = todos.find((t) => t.status === 'in_progress');
|
|
58
|
+
if (inProgress) task = inProgress.activeForm || '';
|
|
59
|
+
} catch (_e) {
|
|
60
|
+
/* ignore parse errors */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
} catch (_e) {
|
|
64
|
+
// Silently fail on file system errors
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// RENN update available?
|
|
69
|
+
let rennUpdate = '';
|
|
70
|
+
const cacheFile = path.join(homeDir, '.claude', 'cache', 'renn-update-check.json');
|
|
71
|
+
if (fs.existsSync(cacheFile)) {
|
|
72
|
+
try {
|
|
73
|
+
const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
|
|
74
|
+
if (cache.update_available) {
|
|
75
|
+
rennUpdate = '\x1b[33m\u2b06 RENN update\x1b[0m \u2502 ';
|
|
76
|
+
}
|
|
77
|
+
} catch (_e) {
|
|
78
|
+
/* ignore parse errors */
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Output
|
|
83
|
+
const dirname = path.basename(dir);
|
|
84
|
+
if (task) {
|
|
85
|
+
process.stdout.write(
|
|
86
|
+
`${rennUpdate}\x1b[2m${model}\x1b[0m \u2502 \x1b[1m${task}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`
|
|
87
|
+
);
|
|
88
|
+
} else {
|
|
89
|
+
process.stdout.write(
|
|
90
|
+
`${rennUpdate}\x1b[2m${model}\x1b[0m \u2502 \x1b[2m${dirname}\x1b[0m${ctx}`
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
} catch (_e) {
|
|
94
|
+
// Silent fail
|
|
95
|
+
}
|
|
96
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "renn-studio",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "Grow ideas into shipped software",
|
|
5
|
+
"bin": {
|
|
6
|
+
"renn": "bin/install.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"commands",
|
|
11
|
+
"renn",
|
|
12
|
+
"agents",
|
|
13
|
+
"hooks/dist"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude",
|
|
17
|
+
"claude-code",
|
|
18
|
+
"ai",
|
|
19
|
+
"agentic",
|
|
20
|
+
"context-engineering",
|
|
21
|
+
"code-execution",
|
|
22
|
+
"gemini",
|
|
23
|
+
"gemini-cli"
|
|
24
|
+
],
|
|
25
|
+
"author": "Ash",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "https://github.com/AshExplained/renn.git"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/AshExplained/renn",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/AshExplained/renn/issues"
|
|
34
|
+
},
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=16.7.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@eslint/js": "^9.39.2",
|
|
40
|
+
"eslint": "^9.39.2",
|
|
41
|
+
"husky": "^9.1.7",
|
|
42
|
+
"lint-staged": "^16.2.7",
|
|
43
|
+
"prettier": "^3.8.1"
|
|
44
|
+
},
|
|
45
|
+
"lint-staged": {
|
|
46
|
+
"*.js": [
|
|
47
|
+
"eslint --fix",
|
|
48
|
+
"prettier --write"
|
|
49
|
+
],
|
|
50
|
+
"*.json": [
|
|
51
|
+
"prettier --write"
|
|
52
|
+
],
|
|
53
|
+
"*.{yml,yaml}": [
|
|
54
|
+
"prettier --write"
|
|
55
|
+
],
|
|
56
|
+
"commands/*.md": [
|
|
57
|
+
"node scripts/validate-markdown.js"
|
|
58
|
+
],
|
|
59
|
+
"agents/*.md": [
|
|
60
|
+
"node scripts/validate-markdown.js"
|
|
61
|
+
],
|
|
62
|
+
"renn/workflows/*.md": [
|
|
63
|
+
"node scripts/validate-markdown.js"
|
|
64
|
+
],
|
|
65
|
+
"renn/references/*.md": [
|
|
66
|
+
"node scripts/validate-markdown.js"
|
|
67
|
+
],
|
|
68
|
+
"renn/templates/**/*.md": [
|
|
69
|
+
"node scripts/validate-markdown.js"
|
|
70
|
+
],
|
|
71
|
+
"hooks/renn-*.js": [
|
|
72
|
+
"eslint --fix",
|
|
73
|
+
"prettier --write"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"scripts": {
|
|
77
|
+
"build:hooks": "node scripts/build-hooks.js",
|
|
78
|
+
"prepublishOnly": "npm run build:hooks",
|
|
79
|
+
"prepare": "husky",
|
|
80
|
+
"lint": "eslint .",
|
|
81
|
+
"lint:fix": "eslint . --fix",
|
|
82
|
+
"format": "prettier --write .",
|
|
83
|
+
"format:check": "prettier --check .",
|
|
84
|
+
"validate": "node scripts/validate-markdown.js",
|
|
85
|
+
"validate:dist": "node scripts/check-dist-sync.js",
|
|
86
|
+
"test": "node --test tests/*.test.js",
|
|
87
|
+
"check": "npm run lint && npm run format:check && npm run validate && npm run validate:dist"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Continuation Format
|
|
2
|
+
|
|
3
|
+
Standard format for presenting next steps after completing a command or workflow.
|
|
4
|
+
|
|
5
|
+
## Core Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ▶ Next Up
|
|
11
|
+
|
|
12
|
+
**{identifier}: {name}** — {one-line description}
|
|
13
|
+
|
|
14
|
+
`{command to copy-paste}`
|
|
15
|
+
|
|
16
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**Also available:**
|
|
21
|
+
- `{alternative option 1}` — description
|
|
22
|
+
- `{alternative option 2}` — description
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Format Rules
|
|
28
|
+
|
|
29
|
+
1. **Always show what it is** — name + description, never just a command path
|
|
30
|
+
2. **Pull context from source** — track.md for stages, run.md `<objective>` for runs
|
|
31
|
+
3. **Command in inline code** — backticks, easy to copy-paste, renders as clickable link
|
|
32
|
+
4. **`/clear` explanation** — always include, keeps it concise but explains why
|
|
33
|
+
5. **"Also available" not "Other options"** — sounds more app-like
|
|
34
|
+
6. **Visual separators** — `---` above and below to make it stand out
|
|
35
|
+
|
|
36
|
+
## Variants
|
|
37
|
+
|
|
38
|
+
### Execute Next Run
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## ▶ Next Up
|
|
44
|
+
|
|
45
|
+
**02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
46
|
+
|
|
47
|
+
`/renn.run-stage 2`
|
|
48
|
+
|
|
49
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
**Also available:**
|
|
54
|
+
- Review run before executing
|
|
55
|
+
- `/renn.list-stage-assumptions 2` — check assumptions
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Execute Final Run in Stage
|
|
61
|
+
|
|
62
|
+
Add note that this is the last run and what comes after:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## ▶ Next Up
|
|
68
|
+
|
|
69
|
+
**02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
70
|
+
<sub>Final run in Stage 2</sub>
|
|
71
|
+
|
|
72
|
+
`/renn.run-stage 2`
|
|
73
|
+
|
|
74
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
**After this completes:**
|
|
79
|
+
- Stage 2 → Stage 3 transition
|
|
80
|
+
- Next: **Stage 3: Core Features** — User dashboard and settings
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Plan a Stage
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## ▶ Next Up
|
|
91
|
+
|
|
92
|
+
**Stage 2: Authentication** — JWT login flow with refresh tokens
|
|
93
|
+
|
|
94
|
+
`/renn.plan-stage 2`
|
|
95
|
+
|
|
96
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
**Also available:**
|
|
101
|
+
- `/renn.discuss-stage 2` — gather context first
|
|
102
|
+
- `/renn.research-stage 2` — investigate unknowns
|
|
103
|
+
- Review track
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Stage Complete, Ready for Next
|
|
109
|
+
|
|
110
|
+
Show completion status before next action:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## ✓ Stage 2 Complete
|
|
116
|
+
|
|
117
|
+
3/3 runs executed
|
|
118
|
+
|
|
119
|
+
## ▶ Next Up
|
|
120
|
+
|
|
121
|
+
**Stage 3: Core Features** — User dashboard, settings, and data export
|
|
122
|
+
|
|
123
|
+
`/renn.plan-stage 3`
|
|
124
|
+
|
|
125
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
**Also available:**
|
|
130
|
+
- `/renn.discuss-stage 3` — gather context first
|
|
131
|
+
- `/renn.research-stage 3` — investigate unknowns
|
|
132
|
+
- Review what Stage 2 built
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Multiple Equal Options
|
|
138
|
+
|
|
139
|
+
When there's no clear primary action:
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## ▶ Next Up
|
|
145
|
+
|
|
146
|
+
**Stage 3: Core Features** — User dashboard, settings, and data export
|
|
147
|
+
|
|
148
|
+
**To plan directly:** `/renn.plan-stage 3`
|
|
149
|
+
|
|
150
|
+
**To discuss context first:** `/renn.discuss-stage 3`
|
|
151
|
+
|
|
152
|
+
**To research unknowns:** `/renn.research-stage 3`
|
|
153
|
+
|
|
154
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Milestone Complete
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 🎉 Milestone v1.0 Complete
|
|
165
|
+
|
|
166
|
+
All 4 stages shipped
|
|
167
|
+
|
|
168
|
+
## ▶ Next Up
|
|
169
|
+
|
|
170
|
+
**Start v1.1** — questioning → research → requirements → track
|
|
171
|
+
|
|
172
|
+
`/renn.new-milestone`
|
|
173
|
+
|
|
174
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Pulling Context
|
|
180
|
+
|
|
181
|
+
### For stages (from track.md):
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
### Stage 2: Authentication
|
|
185
|
+
**Goal**: JWT login flow with refresh tokens
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Extract: `**Stage 2: Authentication** — JWT login flow with refresh tokens`
|
|
189
|
+
|
|
190
|
+
### For runs (from track.md):
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
Runs:
|
|
194
|
+
- [ ] 02.03: Add refresh token rotation
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Or from run.md `<objective>`:
|
|
198
|
+
|
|
199
|
+
```xml
|
|
200
|
+
<objective>
|
|
201
|
+
Add refresh token rotation with sliding expiry window.
|
|
202
|
+
|
|
203
|
+
Purpose: Extend session lifetime without compromising security.
|
|
204
|
+
</objective>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Extract: `**02.03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry`
|
|
208
|
+
|
|
209
|
+
## Anti-Patterns
|
|
210
|
+
|
|
211
|
+
### Don't: Command-only (no context)
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
## To Continue
|
|
215
|
+
|
|
216
|
+
Run `/clear`, then paste:
|
|
217
|
+
/renn.run-stage 2
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
User has no idea what 02.03 is about.
|
|
221
|
+
|
|
222
|
+
### Don't: Missing /clear explanation
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
`/renn.plan-stage 3`
|
|
226
|
+
|
|
227
|
+
Run /clear first.
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Doesn't explain why. User might skip it.
|
|
231
|
+
|
|
232
|
+
### Don't: "Other options" language
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
Other options:
|
|
236
|
+
- Review track
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Sounds like an afterthought. Use "Also available:" instead.
|
|
240
|
+
|
|
241
|
+
### Don't: Fenced code blocks for commands
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
```
|
|
245
|
+
/renn.plan-stage 3
|
|
246
|
+
```
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Fenced blocks inside templates create nesting ambiguity. Use inline backticks instead.
|