qwen-paul 1.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/bin/install.js +212 -0
- package/package.json +40 -0
- package/src/carl/PAUL +26 -0
- package/src/carl/PAUL.manifest +11 -0
- package/src/commands/add-phase.md +36 -0
- package/src/commands/apply.md +83 -0
- package/src/commands/assumptions.md +37 -0
- package/src/commands/audit.md +57 -0
- package/src/commands/complete-milestone.md +36 -0
- package/src/commands/config.md +175 -0
- package/src/commands/consider-issues.md +41 -0
- package/src/commands/discover.md +48 -0
- package/src/commands/discuss-milestone.md +33 -0
- package/src/commands/discuss.md +34 -0
- package/src/commands/flows.md +73 -0
- package/src/commands/handoff.md +201 -0
- package/src/commands/help.md +525 -0
- package/src/commands/init.md +54 -0
- package/src/commands/map-codebase.md +34 -0
- package/src/commands/milestone.md +34 -0
- package/src/commands/pause.md +44 -0
- package/src/commands/plan-fix.md +216 -0
- package/src/commands/plan.md +36 -0
- package/src/commands/progress.md +138 -0
- package/src/commands/register.md +29 -0
- package/src/commands/remove-phase.md +37 -0
- package/src/commands/research-phase.md +209 -0
- package/src/commands/research.md +47 -0
- package/src/commands/resume.md +49 -0
- package/src/commands/status.md +78 -0
- package/src/commands/unify.md +87 -0
- package/src/commands/verify.md +60 -0
- package/src/references/checkpoints.md +234 -0
- package/src/references/context-management.md +219 -0
- package/src/references/git-strategy.md +206 -0
- package/src/references/loop-phases.md +254 -0
- package/src/references/plan-format.md +263 -0
- package/src/references/quality-principles.md +152 -0
- package/src/references/research-quality-control.md +247 -0
- package/src/references/sonarqube-integration.md +244 -0
- package/src/references/specialized-workflow-integration.md +186 -0
- package/src/references/subagent-criteria.md +179 -0
- package/src/references/tdd.md +219 -0
- package/src/references/work-units.md +161 -0
- package/src/rules/commands.md +108 -0
- package/src/rules/references.md +107 -0
- package/src/rules/style.md +123 -0
- package/src/rules/templates.md +51 -0
- package/src/rules/workflows.md +133 -0
- package/src/templates/CONTEXT.md +88 -0
- package/src/templates/DEBUG.md +164 -0
- package/src/templates/DISCOVERY.md +148 -0
- package/src/templates/HANDOFF.md +77 -0
- package/src/templates/ISSUES.md +93 -0
- package/src/templates/MILESTONES.md +167 -0
- package/src/templates/PLAN.md +328 -0
- package/src/templates/PROJECT.md +219 -0
- package/src/templates/RESEARCH.md +130 -0
- package/src/templates/ROADMAP.md +328 -0
- package/src/templates/SPECIAL-FLOWS.md +70 -0
- package/src/templates/STATE.md +210 -0
- package/src/templates/SUMMARY.md +221 -0
- package/src/templates/UAT-ISSUES.md +139 -0
- package/src/templates/codebase/architecture.md +259 -0
- package/src/templates/codebase/concerns.md +329 -0
- package/src/templates/codebase/conventions.md +311 -0
- package/src/templates/codebase/integrations.md +284 -0
- package/src/templates/codebase/stack.md +190 -0
- package/src/templates/codebase/structure.md +287 -0
- package/src/templates/codebase/testing.md +484 -0
- package/src/templates/config.md +181 -0
- package/src/templates/milestone-archive.md +236 -0
- package/src/templates/milestone-context.md +190 -0
- package/src/templates/paul-json.md +147 -0
- package/src/workflows/apply-phase.md +393 -0
- package/src/workflows/audit-plan.md +344 -0
- package/src/workflows/complete-milestone.md +479 -0
- package/src/workflows/configure-special-flows.md +283 -0
- package/src/workflows/consider-issues.md +172 -0
- package/src/workflows/create-milestone.md +268 -0
- package/src/workflows/debug.md +292 -0
- package/src/workflows/discovery.md +187 -0
- package/src/workflows/discuss-milestone.md +245 -0
- package/src/workflows/discuss-phase.md +231 -0
- package/src/workflows/init-project.md +698 -0
- package/src/workflows/map-codebase.md +459 -0
- package/src/workflows/pause-work.md +259 -0
- package/src/workflows/phase-assumptions.md +181 -0
- package/src/workflows/plan-phase.md +385 -0
- package/src/workflows/quality-gate.md +263 -0
- package/src/workflows/register-manifest.md +107 -0
- package/src/workflows/research.md +241 -0
- package/src/workflows/resume-project.md +200 -0
- package/src/workflows/roadmap-management.md +334 -0
- package/src/workflows/transition-phase.md +368 -0
- package/src/workflows/unify-phase.md +290 -0
- package/src/workflows/verify-work.md +241 -0
package/bin/install.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
const readline = require('readline');
|
|
7
|
+
|
|
8
|
+
// Colors
|
|
9
|
+
const cyan = '\x1b[36m';
|
|
10
|
+
const green = '\x1b[32m';
|
|
11
|
+
const yellow = '\x1b[33m';
|
|
12
|
+
const dim = '\x1b[2m';
|
|
13
|
+
const reset = '\x1b[0m';
|
|
14
|
+
|
|
15
|
+
// Get version from package.json
|
|
16
|
+
const pkg = require('../package.json');
|
|
17
|
+
|
|
18
|
+
const banner = `
|
|
19
|
+
${cyan} \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
20
|
+
\u2588\u2588\u2554\u2550\u2550\u2550\u255d\u2588\u2588\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d
|
|
21
|
+
\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
22
|
+
\u2588\u2588\u2551 \u2588\u2588\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u255d
|
|
23
|
+
\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
24
|
+
\u255a\u2550\u2550\u2550\u2550\u2550\u2550 \u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d${reset}
|
|
25
|
+
|
|
26
|
+
PAUL Framework ${dim}v${pkg.version}${reset}
|
|
27
|
+
Plan-Apply-Unify Loop for Qwen Code
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
// Parse args
|
|
31
|
+
const args = process.argv.slice(2);
|
|
32
|
+
const hasGlobal = args.includes('--global') || args.includes('-g');
|
|
33
|
+
const hasLocal = args.includes('--local') || args.includes('-l');
|
|
34
|
+
|
|
35
|
+
// Parse --config-dir argument
|
|
36
|
+
function parseConfigDirArg() {
|
|
37
|
+
const configDirIndex = args.findIndex(arg => arg === '--config-dir' || arg === '-c');
|
|
38
|
+
if (configDirIndex !== -1) {
|
|
39
|
+
const nextArg = args[configDirIndex + 1];
|
|
40
|
+
if (!nextArg || nextArg.startsWith('-')) {
|
|
41
|
+
console.error(` ${yellow}--config-dir requires a path argument${reset}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
return nextArg;
|
|
45
|
+
}
|
|
46
|
+
const configDirArg = args.find(arg => arg.startsWith('--config-dir=') || arg.startsWith('-c='));
|
|
47
|
+
if (configDirArg) {
|
|
48
|
+
return configDirArg.split('=')[1];
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const explicitConfigDir = parseConfigDirArg();
|
|
53
|
+
|
|
54
|
+
const hasHelp = args.includes('--help') || args.includes('-h');
|
|
55
|
+
|
|
56
|
+
console.log(banner);
|
|
57
|
+
|
|
58
|
+
// Show help if requested
|
|
59
|
+
if (hasHelp) {
|
|
60
|
+
console.log(` ${yellow}Usage:${reset} npx qwen-paul [options]
|
|
61
|
+
|
|
62
|
+
${yellow}Options:${reset}
|
|
63
|
+
${cyan}-g, --global${reset} Install globally (to Qwen config directory)
|
|
64
|
+
${cyan}-l, --local${reset} Install locally (to ./.qwen in current directory)
|
|
65
|
+
${cyan}-c, --config-dir <path>${reset} Specify custom Qwen config directory
|
|
66
|
+
${cyan}-h, --help${reset} Show this help message
|
|
67
|
+
|
|
68
|
+
${yellow}Examples:${reset}
|
|
69
|
+
${dim}# Install to default ~/.qwen directory${reset}
|
|
70
|
+
npx qwen-paul --global
|
|
71
|
+
|
|
72
|
+
${dim}# Install to custom config directory${reset}
|
|
73
|
+
npx qwen-paul --global --config-dir ~/.qwen-custom
|
|
74
|
+
|
|
75
|
+
${dim}# Install to current project only${reset}
|
|
76
|
+
npx qwen-paul --local
|
|
77
|
+
|
|
78
|
+
${yellow}What gets installed:${reset}
|
|
79
|
+
commands/qwen-paul/ - Slash commands (/paul:init, /paul:plan, etc.)
|
|
80
|
+
paul-framework/ - Templates, workflows, references, rules
|
|
81
|
+
`);
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Expand ~ to home directory
|
|
87
|
+
*/
|
|
88
|
+
function expandTilde(filePath) {
|
|
89
|
+
if (filePath && filePath.startsWith('~/')) {
|
|
90
|
+
return path.join(os.homedir(), filePath.slice(2));
|
|
91
|
+
}
|
|
92
|
+
return filePath;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Recursively copy directory, replacing paths in .md files
|
|
97
|
+
*/
|
|
98
|
+
function copyWithPathReplacement(srcDir, destDir, pathPrefix) {
|
|
99
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
100
|
+
|
|
101
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
102
|
+
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
105
|
+
const destPath = path.join(destDir, entry.name);
|
|
106
|
+
|
|
107
|
+
if (entry.isDirectory()) {
|
|
108
|
+
copyWithPathReplacement(srcPath, destPath, pathPrefix);
|
|
109
|
+
} else if (entry.name.endsWith('.md')) {
|
|
110
|
+
// Replace ~/.qwen/ with the appropriate prefix in markdown files
|
|
111
|
+
let content = fs.readFileSync(srcPath, 'utf8');
|
|
112
|
+
content = content.replace(/~\/\.qwen\//g, pathPrefix);
|
|
113
|
+
fs.writeFileSync(destPath, content);
|
|
114
|
+
} else {
|
|
115
|
+
fs.copyFileSync(srcPath, destPath);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Install to the specified directory
|
|
122
|
+
*/
|
|
123
|
+
function install(isGlobal) {
|
|
124
|
+
const src = path.join(__dirname, '..');
|
|
125
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.QWEN_CONFIG_DIR);
|
|
126
|
+
const defaultGlobalDir = configDir || path.join(os.homedir(), '.qwen');
|
|
127
|
+
|
|
128
|
+
const qwenDir = isGlobal
|
|
129
|
+
? defaultGlobalDir
|
|
130
|
+
: path.join(process.cwd(), '.qwen');
|
|
131
|
+
|
|
132
|
+
const locationLabel = isGlobal
|
|
133
|
+
? qwenDir.replace(os.homedir(), '~')
|
|
134
|
+
: qwenDir.replace(process.cwd(), '.');
|
|
135
|
+
|
|
136
|
+
// Path prefix for file references
|
|
137
|
+
const pathPrefix = isGlobal
|
|
138
|
+
? (configDir ? `${qwenDir}/` : '~/.qwen/')
|
|
139
|
+
: './.qwen/';
|
|
140
|
+
|
|
141
|
+
console.log(` Installing to ${cyan}${locationLabel}${reset}\n`);
|
|
142
|
+
|
|
143
|
+
// Create commands directory
|
|
144
|
+
const commandsDir = path.join(qwenDir, 'commands');
|
|
145
|
+
fs.mkdirSync(commandsDir, { recursive: true });
|
|
146
|
+
|
|
147
|
+
// Copy src/commands to commands/qwen-paul
|
|
148
|
+
const commandsSrc = path.join(src, 'src', 'commands');
|
|
149
|
+
const commandsDest = path.join(commandsDir, 'qwen-paul');
|
|
150
|
+
copyWithPathReplacement(commandsSrc, commandsDest, pathPrefix);
|
|
151
|
+
console.log(` ${green}\u2713${reset} Installed commands/qwen-paul`);
|
|
152
|
+
|
|
153
|
+
// Copy src/* (except commands) to paul-framework/
|
|
154
|
+
const skillDest = path.join(qwenDir, 'paul-framework');
|
|
155
|
+
fs.mkdirSync(skillDest, { recursive: true });
|
|
156
|
+
|
|
157
|
+
const srcDirs = ['templates', 'workflows', 'references', 'rules', 'carl'];
|
|
158
|
+
for (const dir of srcDirs) {
|
|
159
|
+
const dirSrc = path.join(src, 'src', dir);
|
|
160
|
+
const dirDest = path.join(skillDest, dir);
|
|
161
|
+
if (fs.existsSync(dirSrc)) {
|
|
162
|
+
copyWithPathReplacement(dirSrc, dirDest, pathPrefix);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
console.log(` ${green}\u2713${reset} Installed paul-framework`);
|
|
166
|
+
|
|
167
|
+
console.log(`
|
|
168
|
+
${green}Done!${reset} Launch Qwen Code and run ${cyan}/paul:help${reset}.
|
|
169
|
+
`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Prompt for install location
|
|
174
|
+
*/
|
|
175
|
+
function promptLocation() {
|
|
176
|
+
const rl = readline.createInterface({
|
|
177
|
+
input: process.stdin,
|
|
178
|
+
output: process.stdout
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.QWEN_CONFIG_DIR);
|
|
182
|
+
const globalPath = configDir || path.join(os.homedir(), '.qwen');
|
|
183
|
+
const globalLabel = globalPath.replace(os.homedir(), '~');
|
|
184
|
+
|
|
185
|
+
console.log(` ${yellow}Where would you like to install?${reset}
|
|
186
|
+
|
|
187
|
+
${cyan}1${reset}) Global ${dim}(${globalLabel})${reset} - available in all projects
|
|
188
|
+
${cyan}2${reset}) Local ${dim}(./.qwen)${reset} - this project only
|
|
189
|
+
`);
|
|
190
|
+
|
|
191
|
+
rl.question(` Choice ${dim}[1]${reset}: `, (answer) => {
|
|
192
|
+
rl.close();
|
|
193
|
+
const choice = answer.trim() || '1';
|
|
194
|
+
const isGlobal = choice !== '2';
|
|
195
|
+
install(isGlobal);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Main
|
|
200
|
+
if (hasGlobal && hasLocal) {
|
|
201
|
+
console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
|
|
202
|
+
process.exit(1);
|
|
203
|
+
} else if (explicitConfigDir && hasLocal) {
|
|
204
|
+
console.error(` ${yellow}Cannot use --config-dir with --local${reset}`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
} else if (hasGlobal) {
|
|
207
|
+
install(true);
|
|
208
|
+
} else if (hasLocal) {
|
|
209
|
+
install(false);
|
|
210
|
+
} else {
|
|
211
|
+
promptLocation();
|
|
212
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qwen-paul",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Plan-Apply-Unify Loop - A structured AI-assisted development framework for Qwen Code",
|
|
5
|
+
"bin": {
|
|
6
|
+
"qwen-paul": "bin/install.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"src/commands",
|
|
11
|
+
"src/templates",
|
|
12
|
+
"src/references",
|
|
13
|
+
"src/workflows",
|
|
14
|
+
"src/rules",
|
|
15
|
+
"src/carl"
|
|
16
|
+
],
|
|
17
|
+
"keywords": [
|
|
18
|
+
"qwen",
|
|
19
|
+
"qwen-code",
|
|
20
|
+
"qwen-cli",
|
|
21
|
+
"ai",
|
|
22
|
+
"planning",
|
|
23
|
+
"structured-development",
|
|
24
|
+
"paul",
|
|
25
|
+
"plan-apply-unify"
|
|
26
|
+
],
|
|
27
|
+
"author": "Chris Kahler (adapted for Qwen by tylergriffin1350)",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/tylergriffin1350/qwen-paul.git"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/tylergriffin1350/qwen-paul/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/tylergriffin1350/qwen-paul#readme",
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=16.7.0"
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/carl/PAUL
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# CARL Domain: PAUL (Plan-Apply-Unify Loop)
|
|
2
|
+
# AI-assisted development workflow. Activates when .paul/ exists in project.
|
|
3
|
+
PAUL_STATE=active
|
|
4
|
+
PAUL_ALWAYS_ON=false
|
|
5
|
+
|
|
6
|
+
# Rule 0: Scope
|
|
7
|
+
PAUL_RULE_0=PAUL governs structured AI development via Plan-Apply-Unify loop. Requires .paul/ directory.
|
|
8
|
+
|
|
9
|
+
# MUST (critical)
|
|
10
|
+
PAUL_RULE_1=LOAD BEFORE EXECUTE: Before ANY /paul:* command, MUST Read the command file (~/.qwen/paul-framework/src/commands/{name}.md) AND its execution_context workflow file. NEVER execute PAUL commands from memory or inference - always load the actual files first. If files cannot be loaded, STOP and inform user.
|
|
11
|
+
PAUL_RULE_2=No implementation code without approved PLAN.md. Research/exploration OK. Violation = stop, request approval.
|
|
12
|
+
PAUL_RULE_3=Every APPLY must be followed by UNIFY. UNIFY reconciles plan vs actual, updates STATE.md, logs decisions.
|
|
13
|
+
PAUL_RULE_4=Respect PLAN.md "Boundaries" / "DO NOT CHANGE" sections. Stop and confirm before modifying protected items.
|
|
14
|
+
PAUL_RULE_5=When blocked: document in STATE.md Blockers, notify human, await approval before workarounds.
|
|
15
|
+
PAUL_RULE_6=At phase transition: VERIFY state consistency (STATE.md, PROJECT.md, ROADMAP.md aligned). Blocking error if misaligned. Re-read full files, check all fields.
|
|
16
|
+
|
|
17
|
+
# SHOULD (quality)
|
|
18
|
+
PAUL_RULE_7=Tasks require verification criteria: <verify>[proof of success]</verify>. No verify = cannot complete.
|
|
19
|
+
PAUL_RULE_8=Log all APPLY deviations: what, why, downstream impact. Audit trail for UNIFY.
|
|
20
|
+
PAUL_RULE_9=Use BDD acceptance criteria: Given [precondition] / When [action] / Then [outcome].
|
|
21
|
+
|
|
22
|
+
# MAY (patterns)
|
|
23
|
+
PAUL_RULE_10=Size tasks for single session (~50% context). Split larger tasks during planning.
|
|
24
|
+
PAUL_RULE_11=One commit per phase at transition. Format: {type}({phase}): {description}. WIP commits optional at pause. Version alignment required at milestone.
|
|
25
|
+
PAUL_RULE_12=Urgent work uses decimal phases (2.1, 2.2). Integers = planned, decimals = interruptions.
|
|
26
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# ============================================================================
|
|
2
|
+
# PAUL - Plan-Apply-Unify Loop (AI-assisted development workflow)
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# Installation:
|
|
5
|
+
# 1. Copy the PAUL domain file to ~/.carl/PAUL (or project .carl/PAUL)
|
|
6
|
+
# 2. Append this block to your ~/.carl/manifest (or project .carl/manifest)
|
|
7
|
+
# ============================================================================
|
|
8
|
+
PAUL_STATE=active
|
|
9
|
+
PAUL_ALWAYS_ON=false
|
|
10
|
+
PAUL_RECALL=paul,plan phase,apply phase,unify phase,PLAN.md,STATE.md,development workflow,vibe coding,ai development,planning framework,.paul/
|
|
11
|
+
# PAUL_EXCLUDE=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paul:add-phase
|
|
3
|
+
description: Add a new phase to current milestone
|
|
4
|
+
argument-hint: "[phase-name]"
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Bash]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<objective>
|
|
9
|
+
Add a new phase to the current milestone's roadmap.
|
|
10
|
+
|
|
11
|
+
**When to use:** Scope expansion during milestone, adding planned work.
|
|
12
|
+
</objective>
|
|
13
|
+
|
|
14
|
+
<execution_context>
|
|
15
|
+
@{~/.qwen/paul-framework/workflows/roadmap-management.md}
|
|
16
|
+
</execution_context>
|
|
17
|
+
|
|
18
|
+
<context>
|
|
19
|
+
$ARGUMENTS
|
|
20
|
+
|
|
21
|
+
@.paul/PROJECT.md
|
|
22
|
+
@.paul/STATE.md
|
|
23
|
+
@.paul/ROADMAP.md
|
|
24
|
+
</context>
|
|
25
|
+
|
|
26
|
+
<process>
|
|
27
|
+
Follow workflow: @{~/.qwen/paul-framework/workflows/roadmap-management.md}
|
|
28
|
+
|
|
29
|
+
Execute: **add-phase** operation
|
|
30
|
+
</process>
|
|
31
|
+
|
|
32
|
+
<success_criteria>
|
|
33
|
+
- [ ] Phase added to ROADMAP.md
|
|
34
|
+
- [ ] Phase directory created
|
|
35
|
+
- [ ] STATE.md updated with new phase
|
|
36
|
+
</success_criteria>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paul:apply
|
|
3
|
+
description: Execute an approved PLAN
|
|
4
|
+
argument-hint: "[plan-path]"
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<objective>
|
|
9
|
+
Execute an approved PLAN.md file, handling checkpoints as they occur.
|
|
10
|
+
|
|
11
|
+
**When to use:** After PLAN phase complete and plan is approved.
|
|
12
|
+
|
|
13
|
+
Executes tasks in sequence, pauses at checkpoints for user input, reports completion.
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<execution_context>
|
|
17
|
+
@{~/.qwen/paul-framework/workflows/apply-phase.md}
|
|
18
|
+
@{~/.qwen/paul-framework/references/checkpoints.md}
|
|
19
|
+
</execution_context>
|
|
20
|
+
|
|
21
|
+
<context>
|
|
22
|
+
Plan path: $ARGUMENTS
|
|
23
|
+
|
|
24
|
+
@.paul/STATE.md
|
|
25
|
+
</context>
|
|
26
|
+
|
|
27
|
+
<process>
|
|
28
|
+
|
|
29
|
+
<step name="validate_plan">
|
|
30
|
+
1. Confirm plan file exists at $ARGUMENTS path
|
|
31
|
+
2. Error if not found: "Plan not found: {path}"
|
|
32
|
+
3. Derive SUMMARY path (replace PLAN.md with SUMMARY.md)
|
|
33
|
+
4. If SUMMARY exists: "Plan already executed. SUMMARY: {path}"
|
|
34
|
+
- Offer: re-execute or exit
|
|
35
|
+
</step>
|
|
36
|
+
|
|
37
|
+
<step name="execute">
|
|
38
|
+
Follow workflow: @{~/.qwen/paul-framework/workflows/apply-phase.md}
|
|
39
|
+
|
|
40
|
+
Execute tasks sequentially. For each task:
|
|
41
|
+
- Read task definition
|
|
42
|
+
- Execute action
|
|
43
|
+
- Run verification
|
|
44
|
+
- Confirm done criteria
|
|
45
|
+
</step>
|
|
46
|
+
|
|
47
|
+
<step name="handle_checkpoints">
|
|
48
|
+
When a checkpoint task is reached:
|
|
49
|
+
|
|
50
|
+
**checkpoint:decision**
|
|
51
|
+
- Present decision context and options
|
|
52
|
+
- Wait for user selection
|
|
53
|
+
- Record decision
|
|
54
|
+
- Continue execution
|
|
55
|
+
|
|
56
|
+
**checkpoint:human-verify**
|
|
57
|
+
- Present what was built
|
|
58
|
+
- Present verification steps
|
|
59
|
+
- Wait for "approved" or issue description
|
|
60
|
+
- If issues: address and re-verify
|
|
61
|
+
- Continue execution
|
|
62
|
+
|
|
63
|
+
**checkpoint:human-action**
|
|
64
|
+
- Present required action
|
|
65
|
+
- Wait for "done" confirmation
|
|
66
|
+
- Continue execution
|
|
67
|
+
</step>
|
|
68
|
+
|
|
69
|
+
<step name="complete">
|
|
70
|
+
After all tasks complete:
|
|
71
|
+
- Report: "APPLY complete. Run /paul:unify to close loop."
|
|
72
|
+
- Show files modified
|
|
73
|
+
- Show SUMMARY path to create
|
|
74
|
+
</step>
|
|
75
|
+
|
|
76
|
+
</process>
|
|
77
|
+
|
|
78
|
+
<success_criteria>
|
|
79
|
+
- [ ] All tasks executed
|
|
80
|
+
- [ ] All checkpoints handled
|
|
81
|
+
- [ ] User informed of completion
|
|
82
|
+
- [ ] Next action clear (run /paul:unify)
|
|
83
|
+
</success_criteria>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paul:assumptions
|
|
3
|
+
description: Surface Claude's assumptions about a phase before planning
|
|
4
|
+
argument-hint: "<phase-number>"
|
|
5
|
+
allowed-tools: [Read, Bash]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<objective>
|
|
9
|
+
Surface Claude's assumptions about a phase to validate understanding before planning.
|
|
10
|
+
|
|
11
|
+
**When to use:** Before planning to catch misconceptions early.
|
|
12
|
+
|
|
13
|
+
**Distinction from /paul:discuss:** This command shows what CLAUDE thinks. The discuss command gathers what USER wants.
|
|
14
|
+
</objective>
|
|
15
|
+
|
|
16
|
+
<execution_context>
|
|
17
|
+
@{~/.qwen/paul-framework/workflows/phase-assumptions.md}
|
|
18
|
+
</execution_context>
|
|
19
|
+
|
|
20
|
+
<context>
|
|
21
|
+
Phase number: $ARGUMENTS (required)
|
|
22
|
+
|
|
23
|
+
@.paul/PROJECT.md
|
|
24
|
+
@.paul/STATE.md
|
|
25
|
+
@.paul/ROADMAP.md
|
|
26
|
+
</context>
|
|
27
|
+
|
|
28
|
+
<process>
|
|
29
|
+
Follow workflow: @{~/.qwen/paul-framework/workflows/phase-assumptions.md}
|
|
30
|
+
</process>
|
|
31
|
+
|
|
32
|
+
<success_criteria>
|
|
33
|
+
- [ ] Assumptions presented across 5 areas
|
|
34
|
+
- [ ] Confidence levels indicated
|
|
35
|
+
- [ ] User can provide corrections
|
|
36
|
+
- [ ] Clear path to planning after validation
|
|
37
|
+
</success_criteria>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paul:audit
|
|
3
|
+
description: Run enterprise-grade architectural audit on current plan
|
|
4
|
+
argument-hint: "[plan-path]"
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Glob, AskUserQuestion]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<objective>
|
|
9
|
+
Run a senior principal engineer + compliance review audit on the current PLAN.md.
|
|
10
|
+
Automatically applies must-have and strongly-recommended findings to the plan.
|
|
11
|
+
Produces an AUDIT.md report in the same phase directory.
|
|
12
|
+
|
|
13
|
+
**When to use:** After PLAN phase complete, before APPLY.
|
|
14
|
+
**Optional:** Only runs when explicitly invoked or suggested by `enterprise_plan_audit` config.
|
|
15
|
+
**Who audits:** Claude performs the audit assuming the role of senior principal engineer + compliance reviewer.
|
|
16
|
+
</objective>
|
|
17
|
+
|
|
18
|
+
<execution_context>
|
|
19
|
+
@{~/.qwen/paul-framework/workflows/audit-plan.md}
|
|
20
|
+
</execution_context>
|
|
21
|
+
|
|
22
|
+
<context>
|
|
23
|
+
Plan path: $ARGUMENTS
|
|
24
|
+
|
|
25
|
+
@.paul/STATE.md
|
|
26
|
+
@.paul/config.md
|
|
27
|
+
</context>
|
|
28
|
+
|
|
29
|
+
<process>
|
|
30
|
+
**Follow workflow: @{~/.qwen/paul-framework/workflows/audit-plan.md}**
|
|
31
|
+
|
|
32
|
+
The workflow implements:
|
|
33
|
+
1. Validate preconditions (PLAN exists, loop at PLAN complete)
|
|
34
|
+
2. Load and parse the PLAN.md
|
|
35
|
+
3. Execute enterprise audit (6-section structured review)
|
|
36
|
+
4. Classify findings (must-have, strongly-recommended, can-safely-defer)
|
|
37
|
+
5. Auto-apply must-have and strongly-recommended findings to PLAN.md
|
|
38
|
+
6. Create AUDIT.md report in phase directory
|
|
39
|
+
7. Update STATE.md with audit completion
|
|
40
|
+
8. Present summary and route to APPLY
|
|
41
|
+
</process>
|
|
42
|
+
|
|
43
|
+
<success_criteria>
|
|
44
|
+
- [ ] PLAN.md audited against enterprise standards
|
|
45
|
+
- [ ] Must-have and strongly-recommended findings applied to PLAN.md
|
|
46
|
+
- [ ] AUDIT.md report created in phase directory
|
|
47
|
+
- [ ] STATE.md updated to reflect audit completion
|
|
48
|
+
- [ ] User presented with next action (run APPLY)
|
|
49
|
+
</success_criteria>
|
|
50
|
+
|
|
51
|
+
<anti_patterns>
|
|
52
|
+
- Don't invent requirements not implied by the plan
|
|
53
|
+
- Don't assume "future phases" will fix gaps
|
|
54
|
+
- Don't say "this is fine for v1" unless justified
|
|
55
|
+
- Don't optimize for politeness over correctness
|
|
56
|
+
- Don't skip applying findings - the whole point is automatic remediation
|
|
57
|
+
</anti_patterns>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paul:complete-milestone
|
|
3
|
+
description: Mark current milestone as complete
|
|
4
|
+
argument-hint: "[version]"
|
|
5
|
+
allowed-tools: [Read, Write, Edit, Bash, Glob]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<objective>
|
|
9
|
+
Complete the current milestone, archive it, and evolve PROJECT.md.
|
|
10
|
+
|
|
11
|
+
**When to use:** All phases in current milestone are complete and verified.
|
|
12
|
+
</objective>
|
|
13
|
+
|
|
14
|
+
<execution_context>
|
|
15
|
+
@{~/.qwen/paul-framework/workflows/complete-milestone.md}
|
|
16
|
+
</execution_context>
|
|
17
|
+
|
|
18
|
+
<context>
|
|
19
|
+
$ARGUMENTS
|
|
20
|
+
|
|
21
|
+
@.paul/PROJECT.md
|
|
22
|
+
@.paul/STATE.md
|
|
23
|
+
@.paul/ROADMAP.md
|
|
24
|
+
@.paul/MILESTONES.md
|
|
25
|
+
</context>
|
|
26
|
+
|
|
27
|
+
<process>
|
|
28
|
+
Follow workflow: @{~/.qwen/paul-framework/workflows/complete-milestone.md}
|
|
29
|
+
</process>
|
|
30
|
+
|
|
31
|
+
<success_criteria>
|
|
32
|
+
- [ ] Milestone archived with summary
|
|
33
|
+
- [ ] PROJECT.md evolved with learnings
|
|
34
|
+
- [ ] Git tag created for version
|
|
35
|
+
- [ ] STATE.md updated to reflect completion
|
|
36
|
+
</success_criteria>
|