get-research-done 1.1.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 +21 -0
- package/README.md +560 -0
- package/agents/grd-architect.md +789 -0
- package/agents/grd-codebase-mapper.md +738 -0
- package/agents/grd-critic.md +1065 -0
- package/agents/grd-debugger.md +1203 -0
- package/agents/grd-evaluator.md +948 -0
- package/agents/grd-executor.md +784 -0
- package/agents/grd-explorer.md +2063 -0
- package/agents/grd-graduator.md +484 -0
- package/agents/grd-integration-checker.md +423 -0
- package/agents/grd-phase-researcher.md +641 -0
- package/agents/grd-plan-checker.md +745 -0
- package/agents/grd-planner.md +1386 -0
- package/agents/grd-project-researcher.md +865 -0
- package/agents/grd-research-synthesizer.md +256 -0
- package/agents/grd-researcher.md +2361 -0
- package/agents/grd-roadmapper.md +605 -0
- package/agents/grd-verifier.md +778 -0
- package/bin/install.js +1294 -0
- package/commands/grd/add-phase.md +207 -0
- package/commands/grd/add-todo.md +193 -0
- package/commands/grd/architect.md +283 -0
- package/commands/grd/audit-milestone.md +277 -0
- package/commands/grd/check-todos.md +228 -0
- package/commands/grd/complete-milestone.md +136 -0
- package/commands/grd/debug.md +169 -0
- package/commands/grd/discuss-phase.md +86 -0
- package/commands/grd/evaluate.md +1095 -0
- package/commands/grd/execute-phase.md +339 -0
- package/commands/grd/explore.md +258 -0
- package/commands/grd/graduate.md +323 -0
- package/commands/grd/help.md +482 -0
- package/commands/grd/insert-phase.md +227 -0
- package/commands/grd/insights.md +231 -0
- package/commands/grd/join-discord.md +18 -0
- package/commands/grd/list-phase-assumptions.md +50 -0
- package/commands/grd/map-codebase.md +71 -0
- package/commands/grd/new-milestone.md +721 -0
- package/commands/grd/new-project.md +1008 -0
- package/commands/grd/pause-work.md +134 -0
- package/commands/grd/plan-milestone-gaps.md +295 -0
- package/commands/grd/plan-phase.md +525 -0
- package/commands/grd/progress.md +364 -0
- package/commands/grd/quick-explore.md +236 -0
- package/commands/grd/quick.md +309 -0
- package/commands/grd/remove-phase.md +349 -0
- package/commands/grd/research-phase.md +200 -0
- package/commands/grd/research.md +681 -0
- package/commands/grd/resume-work.md +40 -0
- package/commands/grd/set-profile.md +106 -0
- package/commands/grd/settings.md +136 -0
- package/commands/grd/update.md +172 -0
- package/commands/grd/verify-work.md +219 -0
- package/get-research-done/config/default.json +15 -0
- package/get-research-done/references/checkpoints.md +1078 -0
- package/get-research-done/references/continuation-format.md +249 -0
- package/get-research-done/references/git-integration.md +254 -0
- package/get-research-done/references/model-profiles.md +73 -0
- package/get-research-done/references/planning-config.md +94 -0
- package/get-research-done/references/questioning.md +141 -0
- package/get-research-done/references/tdd.md +263 -0
- package/get-research-done/references/ui-brand.md +160 -0
- package/get-research-done/references/verification-patterns.md +612 -0
- package/get-research-done/templates/DEBUG.md +159 -0
- package/get-research-done/templates/UAT.md +247 -0
- package/get-research-done/templates/archive-reason.md +195 -0
- package/get-research-done/templates/codebase/architecture.md +255 -0
- package/get-research-done/templates/codebase/concerns.md +310 -0
- package/get-research-done/templates/codebase/conventions.md +307 -0
- package/get-research-done/templates/codebase/integrations.md +280 -0
- package/get-research-done/templates/codebase/stack.md +186 -0
- package/get-research-done/templates/codebase/structure.md +285 -0
- package/get-research-done/templates/codebase/testing.md +480 -0
- package/get-research-done/templates/config.json +35 -0
- package/get-research-done/templates/context.md +283 -0
- package/get-research-done/templates/continue-here.md +78 -0
- package/get-research-done/templates/critic-log.md +288 -0
- package/get-research-done/templates/data-report.md +173 -0
- package/get-research-done/templates/debug-subagent-prompt.md +91 -0
- package/get-research-done/templates/decision-log.md +58 -0
- package/get-research-done/templates/decision.md +138 -0
- package/get-research-done/templates/discovery.md +146 -0
- package/get-research-done/templates/experiment-readme.md +104 -0
- package/get-research-done/templates/graduated-script.md +180 -0
- package/get-research-done/templates/iteration-summary.md +234 -0
- package/get-research-done/templates/milestone-archive.md +123 -0
- package/get-research-done/templates/milestone.md +115 -0
- package/get-research-done/templates/objective.md +271 -0
- package/get-research-done/templates/phase-prompt.md +567 -0
- package/get-research-done/templates/planner-subagent-prompt.md +117 -0
- package/get-research-done/templates/project.md +184 -0
- package/get-research-done/templates/requirements.md +231 -0
- package/get-research-done/templates/research-project/ARCHITECTURE.md +204 -0
- package/get-research-done/templates/research-project/FEATURES.md +147 -0
- package/get-research-done/templates/research-project/PITFALLS.md +200 -0
- package/get-research-done/templates/research-project/STACK.md +120 -0
- package/get-research-done/templates/research-project/SUMMARY.md +170 -0
- package/get-research-done/templates/research.md +529 -0
- package/get-research-done/templates/roadmap.md +202 -0
- package/get-research-done/templates/scorecard.json +113 -0
- package/get-research-done/templates/state.md +287 -0
- package/get-research-done/templates/summary.md +246 -0
- package/get-research-done/templates/user-setup.md +311 -0
- package/get-research-done/templates/verification-report.md +322 -0
- package/get-research-done/workflows/complete-milestone.md +756 -0
- package/get-research-done/workflows/diagnose-issues.md +231 -0
- package/get-research-done/workflows/discovery-phase.md +289 -0
- package/get-research-done/workflows/discuss-phase.md +433 -0
- package/get-research-done/workflows/execute-phase.md +657 -0
- package/get-research-done/workflows/execute-plan.md +1844 -0
- package/get-research-done/workflows/list-phase-assumptions.md +178 -0
- package/get-research-done/workflows/map-codebase.md +322 -0
- package/get-research-done/workflows/resume-project.md +307 -0
- package/get-research-done/workflows/transition.md +556 -0
- package/get-research-done/workflows/verify-phase.md +628 -0
- package/get-research-done/workflows/verify-work.md +596 -0
- package/hooks/dist/grd-check-update.js +61 -0
- package/hooks/dist/grd-statusline.js +84 -0
- package/package.json +47 -0
- package/scripts/audit-help-commands.sh +115 -0
- package/scripts/build-hooks.js +42 -0
- package/scripts/verify-all-commands.sh +246 -0
- package/scripts/verify-architect-warning.sh +35 -0
- package/scripts/verify-insights-mode.sh +40 -0
- package/scripts/verify-quick-mode.sh +20 -0
- package/scripts/verify-revise-data-routing.sh +139 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Claude Code Statusline - GRD 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)
|
|
22
|
+
let ctx = '';
|
|
23
|
+
if (remaining != null) {
|
|
24
|
+
const rem = Math.round(remaining);
|
|
25
|
+
const used = Math.max(0, Math.min(100, 100 - rem));
|
|
26
|
+
|
|
27
|
+
// Build progress bar (10 segments)
|
|
28
|
+
const filled = Math.floor(used / 10);
|
|
29
|
+
const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);
|
|
30
|
+
|
|
31
|
+
// Color based on usage
|
|
32
|
+
if (used < 50) {
|
|
33
|
+
ctx = ` \x1b[32m${bar} ${used}%\x1b[0m`;
|
|
34
|
+
} else if (used < 65) {
|
|
35
|
+
ctx = ` \x1b[33m${bar} ${used}%\x1b[0m`;
|
|
36
|
+
} else if (used < 80) {
|
|
37
|
+
ctx = ` \x1b[38;5;208m${bar} ${used}%\x1b[0m`;
|
|
38
|
+
} else {
|
|
39
|
+
ctx = ` \x1b[5;31m💀 ${bar} ${used}%\x1b[0m`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Current task from todos
|
|
44
|
+
let task = '';
|
|
45
|
+
const homeDir = os.homedir();
|
|
46
|
+
const todosDir = path.join(homeDir, '.claude', 'todos');
|
|
47
|
+
if (session && fs.existsSync(todosDir)) {
|
|
48
|
+
const files = fs.readdirSync(todosDir)
|
|
49
|
+
.filter(f => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
|
|
50
|
+
.map(f => ({ name: f, mtime: fs.statSync(path.join(todosDir, f)).mtime }))
|
|
51
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
52
|
+
|
|
53
|
+
if (files.length > 0) {
|
|
54
|
+
try {
|
|
55
|
+
const todos = JSON.parse(fs.readFileSync(path.join(todosDir, files[0].name), 'utf8'));
|
|
56
|
+
const inProgress = todos.find(t => t.status === 'in_progress');
|
|
57
|
+
if (inProgress) task = inProgress.activeForm || '';
|
|
58
|
+
} catch (e) {}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// GRD update available?
|
|
63
|
+
let grdUpdate = '';
|
|
64
|
+
const cacheFile = path.join(homeDir, '.claude', 'cache', 'grd-update-check.json');
|
|
65
|
+
if (fs.existsSync(cacheFile)) {
|
|
66
|
+
try {
|
|
67
|
+
const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
|
|
68
|
+
if (cache.update_available) {
|
|
69
|
+
grdUpdate = '\x1b[33m⬆ /grd:update\x1b[0m │ ';
|
|
70
|
+
}
|
|
71
|
+
} catch (e) {}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Output
|
|
75
|
+
const dirname = path.basename(dir);
|
|
76
|
+
if (task) {
|
|
77
|
+
process.stdout.write(`${grdUpdate}\x1b[2m${model}\x1b[0m │ \x1b[1m${task}\x1b[0m │ \x1b[2m${dirname}\x1b[0m${ctx}`);
|
|
78
|
+
} else {
|
|
79
|
+
process.stdout.write(`${grdUpdate}\x1b[2m${model}\x1b[0m │ \x1b[2m${dirname}\x1b[0m${ctx}`);
|
|
80
|
+
}
|
|
81
|
+
} catch (e) {
|
|
82
|
+
// Silent fail - don't break statusline on parse errors
|
|
83
|
+
}
|
|
84
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "get-research-done",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "A recursive, agentic framework for ML research with hypothesis-driven experimentation for Claude Code by Ulmentflam.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"get-research-done": "bin/install.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"commands",
|
|
11
|
+
"get-research-done",
|
|
12
|
+
"agents",
|
|
13
|
+
"hooks/dist",
|
|
14
|
+
"scripts"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"claude",
|
|
18
|
+
"claude-code",
|
|
19
|
+
"ai",
|
|
20
|
+
"research",
|
|
21
|
+
"ml",
|
|
22
|
+
"machine-learning",
|
|
23
|
+
"meta-prompting",
|
|
24
|
+
"context-engineering",
|
|
25
|
+
"hypothesis-driven"
|
|
26
|
+
],
|
|
27
|
+
"author": "Ulmentflam",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/ulmentflam/get-research-done.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/ulmentflam/get-research-done",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/ulmentflam/get-research-done/issues"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=16.7.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"esbuild": "^0.27.2"
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build:hooks": "node scripts/build-hooks.js",
|
|
45
|
+
"prepublishOnly": "npm run build:hooks"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Audit help.md documentation coverage
|
|
3
|
+
# Usage: ./scripts/audit-help-commands.sh
|
|
4
|
+
|
|
5
|
+
COMMANDS_DIR=".claude/commands/grd"
|
|
6
|
+
HELP_FILE="$COMMANDS_DIR/help.md"
|
|
7
|
+
|
|
8
|
+
echo "=== GRD Command Coverage Audit ==="
|
|
9
|
+
echo ""
|
|
10
|
+
|
|
11
|
+
# Check help.md exists
|
|
12
|
+
if [ ! -f "$HELP_FILE" ]; then
|
|
13
|
+
echo "ERROR: $HELP_FILE not found"
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Count actual command files (excluding help itself)
|
|
18
|
+
ACTUAL_COUNT=$(ls "$COMMANDS_DIR"/*.md 2>/dev/null | grep -v help.md | wc -l | tr -d ' ')
|
|
19
|
+
echo "Command files found: $ACTUAL_COUNT"
|
|
20
|
+
|
|
21
|
+
# Count documented commands in help.md (looking for /grd: pattern)
|
|
22
|
+
DOCUMENTED_COUNT=$(grep -oE '/grd:[a-z-]+' "$HELP_FILE" | sort -u | wc -l | tr -d ' ')
|
|
23
|
+
echo "Unique commands in help.md: $DOCUMENTED_COUNT"
|
|
24
|
+
echo ""
|
|
25
|
+
|
|
26
|
+
# V1.1 commands that MUST be documented
|
|
27
|
+
echo "=== V1.1 Command Verification ==="
|
|
28
|
+
|
|
29
|
+
V11_COMMANDS=(
|
|
30
|
+
"quick-explore"
|
|
31
|
+
"insights"
|
|
32
|
+
"new-study"
|
|
33
|
+
"complete-study"
|
|
34
|
+
"scope-study"
|
|
35
|
+
"plan-study"
|
|
36
|
+
"run-study"
|
|
37
|
+
"validate-study"
|
|
38
|
+
"audit-study"
|
|
39
|
+
"plan-study-gaps"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
V11_PASS=0
|
|
43
|
+
V11_FAIL=0
|
|
44
|
+
|
|
45
|
+
for cmd in "${V11_COMMANDS[@]}"; do
|
|
46
|
+
if grep -q "/grd:$cmd" "$HELP_FILE"; then
|
|
47
|
+
echo " [PASS] /grd:$cmd documented"
|
|
48
|
+
((V11_PASS++))
|
|
49
|
+
else
|
|
50
|
+
echo " [FAIL] /grd:$cmd NOT in help.md"
|
|
51
|
+
((V11_FAIL++))
|
|
52
|
+
fi
|
|
53
|
+
done
|
|
54
|
+
|
|
55
|
+
echo ""
|
|
56
|
+
echo "V1.1 commands: $V11_PASS passed, $V11_FAIL failed"
|
|
57
|
+
echo ""
|
|
58
|
+
|
|
59
|
+
# Deprecated commands that should NOT appear
|
|
60
|
+
echo "=== Deprecated Commands (should NOT appear) ==="
|
|
61
|
+
|
|
62
|
+
DEPRECATED=(
|
|
63
|
+
"new-milestone"
|
|
64
|
+
"complete-milestone"
|
|
65
|
+
"discuss-phase"
|
|
66
|
+
"execute-phase"
|
|
67
|
+
"verify-work"
|
|
68
|
+
"audit-milestone"
|
|
69
|
+
"plan-milestone-gaps"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
DEP_PASS=0
|
|
73
|
+
DEP_FAIL=0
|
|
74
|
+
|
|
75
|
+
for cmd in "${DEPRECATED[@]}"; do
|
|
76
|
+
if grep -q "/grd:$cmd" "$HELP_FILE"; then
|
|
77
|
+
echo " [FAIL] /grd:$cmd still in help.md (should be removed)"
|
|
78
|
+
((DEP_FAIL++))
|
|
79
|
+
else
|
|
80
|
+
echo " [PASS] /grd:$cmd not in help.md"
|
|
81
|
+
((DEP_PASS++))
|
|
82
|
+
fi
|
|
83
|
+
done
|
|
84
|
+
|
|
85
|
+
echo ""
|
|
86
|
+
echo "Deprecated check: $DEP_PASS passed, $DEP_FAIL failed"
|
|
87
|
+
echo ""
|
|
88
|
+
|
|
89
|
+
# Command file coverage (optional - commands with files but not documented)
|
|
90
|
+
echo "=== Command File Coverage ==="
|
|
91
|
+
|
|
92
|
+
UNDOCUMENTED=0
|
|
93
|
+
for file in "$COMMANDS_DIR"/*.md; do
|
|
94
|
+
[ "$file" = "$COMMANDS_DIR/help.md" ] && continue
|
|
95
|
+
cmd=$(basename "$file" .md)
|
|
96
|
+
if ! grep -q "/grd:$cmd" "$HELP_FILE"; then
|
|
97
|
+
echo " [WARN] $cmd has file but not documented in help.md"
|
|
98
|
+
((UNDOCUMENTED++))
|
|
99
|
+
fi
|
|
100
|
+
done
|
|
101
|
+
|
|
102
|
+
if [ $UNDOCUMENTED -eq 0 ]; then
|
|
103
|
+
echo " All command files are documented"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
echo ""
|
|
107
|
+
echo "=== Summary ==="
|
|
108
|
+
TOTAL_FAIL=$((V11_FAIL + DEP_FAIL))
|
|
109
|
+
if [ $TOTAL_FAIL -eq 0 ]; then
|
|
110
|
+
echo "AUDIT PASSED: All v1.1 commands documented, no deprecated commands found"
|
|
111
|
+
exit 0
|
|
112
|
+
else
|
|
113
|
+
echo "AUDIT FAILED: $TOTAL_FAIL issues found"
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Copy GRD hooks to dist for installation.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const HOOKS_DIR = path.join(__dirname, '..', 'hooks');
|
|
10
|
+
const DIST_DIR = path.join(HOOKS_DIR, 'dist');
|
|
11
|
+
|
|
12
|
+
// Hooks to copy (pure Node.js, no bundling needed)
|
|
13
|
+
const HOOKS_TO_COPY = [
|
|
14
|
+
'grd-check-update.js',
|
|
15
|
+
'grd-statusline.js'
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
function build() {
|
|
19
|
+
// Ensure dist directory exists
|
|
20
|
+
if (!fs.existsSync(DIST_DIR)) {
|
|
21
|
+
fs.mkdirSync(DIST_DIR, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Copy hooks to dist
|
|
25
|
+
for (const hook of HOOKS_TO_COPY) {
|
|
26
|
+
const src = path.join(HOOKS_DIR, hook);
|
|
27
|
+
const dest = path.join(DIST_DIR, hook);
|
|
28
|
+
|
|
29
|
+
if (!fs.existsSync(src)) {
|
|
30
|
+
console.warn(`Warning: ${hook} not found, skipping`);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
console.log(`Copying ${hook}...`);
|
|
35
|
+
fs.copyFileSync(src, dest);
|
|
36
|
+
console.log(` → ${dest}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
console.log('\nBuild complete.');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
build();
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Comprehensive GRD command verification
|
|
3
|
+
# Checks: help.md coverage, file structure, agent/workflow references
|
|
4
|
+
# Usage: ./scripts/verify-all-commands.sh
|
|
5
|
+
|
|
6
|
+
COMMANDS_DIR=".claude/commands/grd"
|
|
7
|
+
AGENTS_DIR=".claude/agents"
|
|
8
|
+
WORKFLOWS_DIR=".claude/get-research-done/workflows"
|
|
9
|
+
HELP_FILE="$COMMANDS_DIR/help.md"
|
|
10
|
+
|
|
11
|
+
# Built-in Claude Code agent types (not custom agent files)
|
|
12
|
+
BUILTIN_AGENTS="general-purpose|Explore|Plan|Bash"
|
|
13
|
+
|
|
14
|
+
echo "═══════════════════════════════════════════════════════════════"
|
|
15
|
+
echo " GRD Command Verification Suite"
|
|
16
|
+
echo "═══════════════════════════════════════════════════════════════"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
TOTAL_PASS=0
|
|
20
|
+
TOTAL_FAIL=0
|
|
21
|
+
TOTAL_WARN=0
|
|
22
|
+
|
|
23
|
+
# ─────────────────────────────────────────────────────────────────
|
|
24
|
+
# SECTION 1: Help.md Documentation Coverage
|
|
25
|
+
# ─────────────────────────────────────────────────────────────────
|
|
26
|
+
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
27
|
+
echo "│ Section 1: Help.md Documentation Coverage │"
|
|
28
|
+
echo "└─────────────────────────────────────────────────────────────┘"
|
|
29
|
+
echo ""
|
|
30
|
+
|
|
31
|
+
if [ ! -f "$HELP_FILE" ]; then
|
|
32
|
+
echo "ERROR: $HELP_FILE not found"
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
HELP_PASS=0
|
|
37
|
+
HELP_FAIL=0
|
|
38
|
+
|
|
39
|
+
for file in "$COMMANDS_DIR"/*.md; do
|
|
40
|
+
[ "$file" = "$COMMANDS_DIR/help.md" ] && continue
|
|
41
|
+
cmd=$(basename "$file" .md)
|
|
42
|
+
|
|
43
|
+
if grep -q "/grd:$cmd" "$HELP_FILE"; then
|
|
44
|
+
echo " [PASS] /grd:$cmd documented"
|
|
45
|
+
((HELP_PASS++))
|
|
46
|
+
else
|
|
47
|
+
echo " [FAIL] /grd:$cmd NOT documented in help.md"
|
|
48
|
+
((HELP_FAIL++))
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
51
|
+
|
|
52
|
+
echo ""
|
|
53
|
+
echo " Summary: $HELP_PASS documented, $HELP_FAIL missing"
|
|
54
|
+
TOTAL_PASS=$((TOTAL_PASS + HELP_PASS))
|
|
55
|
+
TOTAL_FAIL=$((TOTAL_FAIL + HELP_FAIL))
|
|
56
|
+
|
|
57
|
+
# ─────────────────────────────────────────────────────────────────
|
|
58
|
+
# SECTION 2: Command File Structure Validation
|
|
59
|
+
# ─────────────────────────────────────────────────────────────────
|
|
60
|
+
echo ""
|
|
61
|
+
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
62
|
+
echo "│ Section 2: Command File Structure Validation │"
|
|
63
|
+
echo "└─────────────────────────────────────────────────────────────┘"
|
|
64
|
+
echo ""
|
|
65
|
+
|
|
66
|
+
STRUCT_PASS=0
|
|
67
|
+
STRUCT_FAIL=0
|
|
68
|
+
STRUCT_WARN=0
|
|
69
|
+
|
|
70
|
+
for file in "$COMMANDS_DIR"/*.md; do
|
|
71
|
+
[ "$file" = "$COMMANDS_DIR/help.md" ] && continue
|
|
72
|
+
cmd=$(basename "$file" .md)
|
|
73
|
+
issues=""
|
|
74
|
+
warnings=""
|
|
75
|
+
|
|
76
|
+
# Check file is not empty
|
|
77
|
+
if [ ! -s "$file" ]; then
|
|
78
|
+
issues="$issues empty-file"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Check for description (should have some content describing the command)
|
|
82
|
+
line_count=$(wc -l < "$file" | tr -d ' ')
|
|
83
|
+
if [ "$line_count" -lt 5 ]; then
|
|
84
|
+
warnings="$warnings short-file($line_count lines)"
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Check for XML-style tags (common structure elements)
|
|
88
|
+
has_objective=$(grep -c '<objective>\|<purpose>' "$file" 2>/dev/null || echo "0")
|
|
89
|
+
has_context=$(grep -c '<context>\|<execution_context>' "$file" 2>/dev/null || echo "0")
|
|
90
|
+
has_process=$(grep -c '<process>\|<tasks>\|<steps>' "$file" 2>/dev/null || echo "0")
|
|
91
|
+
|
|
92
|
+
# Commands should have at least objective/purpose
|
|
93
|
+
if [ "$has_objective" -eq 0 ] && [ "$has_context" -eq 0 ]; then
|
|
94
|
+
# Check for alternative structures (some commands use different formats)
|
|
95
|
+
has_any_structure=$(grep -cE '^##|^<[a-z_]+>' "$file" 2>/dev/null || echo "0")
|
|
96
|
+
if [ "$has_any_structure" -lt 2 ]; then
|
|
97
|
+
warnings="$warnings minimal-structure"
|
|
98
|
+
fi
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# Report results
|
|
102
|
+
if [ -n "$issues" ]; then
|
|
103
|
+
echo " [FAIL] $cmd:$issues"
|
|
104
|
+
((STRUCT_FAIL++))
|
|
105
|
+
elif [ -n "$warnings" ]; then
|
|
106
|
+
echo " [WARN] $cmd:$warnings"
|
|
107
|
+
((STRUCT_WARN++))
|
|
108
|
+
else
|
|
109
|
+
echo " [PASS] $cmd: valid structure"
|
|
110
|
+
((STRUCT_PASS++))
|
|
111
|
+
fi
|
|
112
|
+
done
|
|
113
|
+
|
|
114
|
+
echo ""
|
|
115
|
+
echo " Summary: $STRUCT_PASS valid, $STRUCT_WARN warnings, $STRUCT_FAIL invalid"
|
|
116
|
+
TOTAL_PASS=$((TOTAL_PASS + STRUCT_PASS))
|
|
117
|
+
TOTAL_FAIL=$((TOTAL_FAIL + STRUCT_FAIL))
|
|
118
|
+
TOTAL_WARN=$((TOTAL_WARN + STRUCT_WARN))
|
|
119
|
+
|
|
120
|
+
# ─────────────────────────────────────────────────────────────────
|
|
121
|
+
# SECTION 3: Agent Reference Validation
|
|
122
|
+
# ─────────────────────────────────────────────────────────────────
|
|
123
|
+
echo ""
|
|
124
|
+
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
125
|
+
echo "│ Section 3: Agent Reference Validation │"
|
|
126
|
+
echo "└─────────────────────────────────────────────────────────────┘"
|
|
127
|
+
echo ""
|
|
128
|
+
|
|
129
|
+
AGENT_PASS=0
|
|
130
|
+
AGENT_FAIL=0
|
|
131
|
+
AGENT_WARN=0
|
|
132
|
+
|
|
133
|
+
for file in "$COMMANDS_DIR"/*.md; do
|
|
134
|
+
[ "$file" = "$COMMANDS_DIR/help.md" ] && continue
|
|
135
|
+
cmd=$(basename "$file" .md)
|
|
136
|
+
|
|
137
|
+
# Extract agent references from subagent_type="..." patterns only
|
|
138
|
+
# More precise regex to avoid matching prose text
|
|
139
|
+
agent_refs=$(grep -oE 'subagent_type\s*[=:]\s*"[a-zA-Z-]+"' "$file" 2>/dev/null | \
|
|
140
|
+
sed 's/subagent_type[[:space:]]*[=:][[:space:]]*"//' | \
|
|
141
|
+
sed 's/"$//' | \
|
|
142
|
+
sort -u)
|
|
143
|
+
|
|
144
|
+
if [ -z "$agent_refs" ]; then
|
|
145
|
+
# No agent references - might be a simple command
|
|
146
|
+
echo " [INFO] $cmd: no agent references (may be orchestrator-only)"
|
|
147
|
+
continue
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
for agent in $agent_refs; do
|
|
151
|
+
# Check if it's a built-in agent type
|
|
152
|
+
if echo "$agent" | grep -qE "^($BUILTIN_AGENTS)$"; then
|
|
153
|
+
echo " [PASS] $cmd → $agent (built-in agent type)"
|
|
154
|
+
((AGENT_PASS++))
|
|
155
|
+
continue
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Check if agent file exists
|
|
159
|
+
if [ -f "$AGENTS_DIR/$agent.md" ]; then
|
|
160
|
+
echo " [PASS] $cmd → $agent (exists)"
|
|
161
|
+
((AGENT_PASS++))
|
|
162
|
+
else
|
|
163
|
+
echo " [FAIL] $cmd → $agent (NOT FOUND in $AGENTS_DIR/)"
|
|
164
|
+
((AGENT_FAIL++))
|
|
165
|
+
fi
|
|
166
|
+
done
|
|
167
|
+
done
|
|
168
|
+
|
|
169
|
+
echo ""
|
|
170
|
+
echo " Summary: $AGENT_PASS valid refs, $AGENT_FAIL invalid refs"
|
|
171
|
+
TOTAL_PASS=$((TOTAL_PASS + AGENT_PASS))
|
|
172
|
+
TOTAL_FAIL=$((TOTAL_FAIL + AGENT_FAIL))
|
|
173
|
+
|
|
174
|
+
# ─────────────────────────────────────────────────────────────────
|
|
175
|
+
# SECTION 4: Workflow Reference Validation
|
|
176
|
+
# ─────────────────────────────────────────────────────────────────
|
|
177
|
+
echo ""
|
|
178
|
+
echo "┌─────────────────────────────────────────────────────────────┐"
|
|
179
|
+
echo "│ Section 4: Workflow Reference Validation │"
|
|
180
|
+
echo "└─────────────────────────────────────────────────────────────┘"
|
|
181
|
+
echo ""
|
|
182
|
+
|
|
183
|
+
WORKFLOW_PASS=0
|
|
184
|
+
WORKFLOW_FAIL=0
|
|
185
|
+
|
|
186
|
+
for file in "$COMMANDS_DIR"/*.md; do
|
|
187
|
+
[ "$file" = "$COMMANDS_DIR/help.md" ] && continue
|
|
188
|
+
cmd=$(basename "$file" .md)
|
|
189
|
+
|
|
190
|
+
# Extract workflow references (@...workflows/... or workflows/...)
|
|
191
|
+
workflow_refs=$(grep -oE 'workflows/[a-z-]+\.md|workflows/[a-z-]+' "$file" 2>/dev/null | \
|
|
192
|
+
sed 's/workflows\///' | \
|
|
193
|
+
sed 's/\.md$//' | \
|
|
194
|
+
sort -u)
|
|
195
|
+
|
|
196
|
+
if [ -z "$workflow_refs" ]; then
|
|
197
|
+
continue
|
|
198
|
+
fi
|
|
199
|
+
|
|
200
|
+
for workflow in $workflow_refs; do
|
|
201
|
+
# Check multiple possible locations
|
|
202
|
+
found=0
|
|
203
|
+
for dir in ".claude/get-research-done/workflows" ".claude/get-shit-done/workflows" ".claude/workflows"; do
|
|
204
|
+
if [ -f "$dir/$workflow.md" ]; then
|
|
205
|
+
echo " [PASS] $cmd → $workflow (exists in $dir)"
|
|
206
|
+
((WORKFLOW_PASS++))
|
|
207
|
+
found=1
|
|
208
|
+
break
|
|
209
|
+
fi
|
|
210
|
+
done
|
|
211
|
+
|
|
212
|
+
if [ $found -eq 0 ]; then
|
|
213
|
+
echo " [FAIL] $cmd → $workflow (NOT FOUND)"
|
|
214
|
+
((WORKFLOW_FAIL++))
|
|
215
|
+
fi
|
|
216
|
+
done
|
|
217
|
+
done
|
|
218
|
+
|
|
219
|
+
echo ""
|
|
220
|
+
echo " Summary: $WORKFLOW_PASS valid refs, $WORKFLOW_FAIL invalid refs"
|
|
221
|
+
TOTAL_PASS=$((TOTAL_PASS + WORKFLOW_PASS))
|
|
222
|
+
TOTAL_FAIL=$((TOTAL_FAIL + WORKFLOW_FAIL))
|
|
223
|
+
|
|
224
|
+
# ─────────────────────────────────────────────────────────────────
|
|
225
|
+
# FINAL SUMMARY
|
|
226
|
+
# ─────────────────────────────────────────────────────────────────
|
|
227
|
+
echo ""
|
|
228
|
+
echo "═══════════════════════════════════════════════════════════════"
|
|
229
|
+
echo " FINAL SUMMARY"
|
|
230
|
+
echo "═══════════════════════════════════════════════════════════════"
|
|
231
|
+
echo ""
|
|
232
|
+
echo " Total Checks:"
|
|
233
|
+
echo " PASS: $TOTAL_PASS"
|
|
234
|
+
echo " WARN: $TOTAL_WARN"
|
|
235
|
+
echo " FAIL: $TOTAL_FAIL"
|
|
236
|
+
echo ""
|
|
237
|
+
|
|
238
|
+
if [ $TOTAL_FAIL -eq 0 ]; then
|
|
239
|
+
echo " ✓ VERIFICATION PASSED"
|
|
240
|
+
echo ""
|
|
241
|
+
exit 0
|
|
242
|
+
else
|
|
243
|
+
echo " ✗ VERIFICATION FAILED ($TOTAL_FAIL issues)"
|
|
244
|
+
echo ""
|
|
245
|
+
exit 1
|
|
246
|
+
fi
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Document architect warning verification (manual observation required)
|
|
3
|
+
# Usage: ./scripts/verify-architect-warning.sh
|
|
4
|
+
|
|
5
|
+
echo "=== Architect Warning Verification ==="
|
|
6
|
+
echo ""
|
|
7
|
+
echo "This test requires manual observation of architect output."
|
|
8
|
+
echo ""
|
|
9
|
+
echo "Test Procedure:"
|
|
10
|
+
echo "1. Ensure only quick-explore was run (DATA_REPORT.md has Quick header)"
|
|
11
|
+
echo "2. Run: /grd:architect"
|
|
12
|
+
echo "3. Observe output for warning about data depth"
|
|
13
|
+
echo ""
|
|
14
|
+
echo "Expected Warning Patterns (look for any of these):"
|
|
15
|
+
echo " - 'Quick Explore' data may be insufficient"
|
|
16
|
+
echo " - quick-explore only provides basic"
|
|
17
|
+
echo " - run full /grd:explore for"
|
|
18
|
+
echo " - data reconnaissance not completed"
|
|
19
|
+
echo " - WARNING: No DATA_REPORT.md"
|
|
20
|
+
echo ""
|
|
21
|
+
echo "Verification:"
|
|
22
|
+
echo " If warning appears: TEST PASSED"
|
|
23
|
+
echo " If no warning and architect proceeds: TEST FAILED"
|
|
24
|
+
echo ""
|
|
25
|
+
|
|
26
|
+
# Check current DATA_REPORT.md status as helper
|
|
27
|
+
if [ -f ".planning/DATA_REPORT.md" ]; then
|
|
28
|
+
if head -30 ".planning/DATA_REPORT.md" | grep -qi "Quick Explore"; then
|
|
29
|
+
echo "Current state: DATA_REPORT.md has Quick Explore header (correct setup)"
|
|
30
|
+
else
|
|
31
|
+
echo "Current state: DATA_REPORT.md is NOT Quick mode (wrong setup for this test)"
|
|
32
|
+
fi
|
|
33
|
+
else
|
|
34
|
+
echo "Current state: No DATA_REPORT.md (architect will warn about missing file)"
|
|
35
|
+
fi
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verify Insights mode produced both output files
|
|
3
|
+
# Usage: ./scripts/verify-insights-mode.sh [planning-dir]
|
|
4
|
+
|
|
5
|
+
PLANNING_DIR="${1:-.planning}"
|
|
6
|
+
|
|
7
|
+
PASS=0
|
|
8
|
+
FAIL=0
|
|
9
|
+
|
|
10
|
+
# Check DATA_REPORT.md exists
|
|
11
|
+
if [ -f "$PLANNING_DIR/DATA_REPORT.md" ]; then
|
|
12
|
+
echo "PASS: DATA_REPORT.md exists"
|
|
13
|
+
((PASS++))
|
|
14
|
+
else
|
|
15
|
+
echo "FAIL: DATA_REPORT.md not found"
|
|
16
|
+
((FAIL++))
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Check INSIGHTS_SUMMARY.md exists
|
|
20
|
+
if [ -f "$PLANNING_DIR/INSIGHTS_SUMMARY.md" ]; then
|
|
21
|
+
echo "PASS: INSIGHTS_SUMMARY.md exists"
|
|
22
|
+
((PASS++))
|
|
23
|
+
else
|
|
24
|
+
echo "FAIL: INSIGHTS_SUMMARY.md not found"
|
|
25
|
+
((FAIL++))
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Check INSIGHTS_SUMMARY.md has expected sections
|
|
29
|
+
if [ -f "$PLANNING_DIR/INSIGHTS_SUMMARY.md" ]; then
|
|
30
|
+
if grep -qi "TL;DR\|5 Things to Know\|What This Means" "$PLANNING_DIR/INSIGHTS_SUMMARY.md"; then
|
|
31
|
+
echo "PASS: INSIGHTS_SUMMARY.md has expected sections"
|
|
32
|
+
((PASS++))
|
|
33
|
+
else
|
|
34
|
+
echo "WARN: INSIGHTS_SUMMARY.md may be missing expected sections"
|
|
35
|
+
fi
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
echo ""
|
|
39
|
+
echo "Summary: $PASS passed, $FAIL failed"
|
|
40
|
+
[ $FAIL -eq 0 ] && exit 0 || exit 1
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verify DATA_REPORT.md contains Quick Explore Mode header
|
|
3
|
+
# Usage: ./scripts/verify-quick-mode.sh [path-to-data-report]
|
|
4
|
+
|
|
5
|
+
DATA_REPORT="${1:-.planning/DATA_REPORT.md}"
|
|
6
|
+
|
|
7
|
+
if [ ! -f "$DATA_REPORT" ]; then
|
|
8
|
+
echo "ERROR: $DATA_REPORT not found"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
# Check for Quick Explore header in first 30 lines
|
|
13
|
+
if head -30 "$DATA_REPORT" | grep -qi "Quick Explore"; then
|
|
14
|
+
echo "PASS: Quick Explore header found"
|
|
15
|
+
exit 0
|
|
16
|
+
else
|
|
17
|
+
echo "FAIL: Quick Explore header not found in first 30 lines"
|
|
18
|
+
echo "Hint: This file may be from full explore mode"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|