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.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +560 -0
  3. package/agents/grd-architect.md +789 -0
  4. package/agents/grd-codebase-mapper.md +738 -0
  5. package/agents/grd-critic.md +1065 -0
  6. package/agents/grd-debugger.md +1203 -0
  7. package/agents/grd-evaluator.md +948 -0
  8. package/agents/grd-executor.md +784 -0
  9. package/agents/grd-explorer.md +2063 -0
  10. package/agents/grd-graduator.md +484 -0
  11. package/agents/grd-integration-checker.md +423 -0
  12. package/agents/grd-phase-researcher.md +641 -0
  13. package/agents/grd-plan-checker.md +745 -0
  14. package/agents/grd-planner.md +1386 -0
  15. package/agents/grd-project-researcher.md +865 -0
  16. package/agents/grd-research-synthesizer.md +256 -0
  17. package/agents/grd-researcher.md +2361 -0
  18. package/agents/grd-roadmapper.md +605 -0
  19. package/agents/grd-verifier.md +778 -0
  20. package/bin/install.js +1294 -0
  21. package/commands/grd/add-phase.md +207 -0
  22. package/commands/grd/add-todo.md +193 -0
  23. package/commands/grd/architect.md +283 -0
  24. package/commands/grd/audit-milestone.md +277 -0
  25. package/commands/grd/check-todos.md +228 -0
  26. package/commands/grd/complete-milestone.md +136 -0
  27. package/commands/grd/debug.md +169 -0
  28. package/commands/grd/discuss-phase.md +86 -0
  29. package/commands/grd/evaluate.md +1095 -0
  30. package/commands/grd/execute-phase.md +339 -0
  31. package/commands/grd/explore.md +258 -0
  32. package/commands/grd/graduate.md +323 -0
  33. package/commands/grd/help.md +482 -0
  34. package/commands/grd/insert-phase.md +227 -0
  35. package/commands/grd/insights.md +231 -0
  36. package/commands/grd/join-discord.md +18 -0
  37. package/commands/grd/list-phase-assumptions.md +50 -0
  38. package/commands/grd/map-codebase.md +71 -0
  39. package/commands/grd/new-milestone.md +721 -0
  40. package/commands/grd/new-project.md +1008 -0
  41. package/commands/grd/pause-work.md +134 -0
  42. package/commands/grd/plan-milestone-gaps.md +295 -0
  43. package/commands/grd/plan-phase.md +525 -0
  44. package/commands/grd/progress.md +364 -0
  45. package/commands/grd/quick-explore.md +236 -0
  46. package/commands/grd/quick.md +309 -0
  47. package/commands/grd/remove-phase.md +349 -0
  48. package/commands/grd/research-phase.md +200 -0
  49. package/commands/grd/research.md +681 -0
  50. package/commands/grd/resume-work.md +40 -0
  51. package/commands/grd/set-profile.md +106 -0
  52. package/commands/grd/settings.md +136 -0
  53. package/commands/grd/update.md +172 -0
  54. package/commands/grd/verify-work.md +219 -0
  55. package/get-research-done/config/default.json +15 -0
  56. package/get-research-done/references/checkpoints.md +1078 -0
  57. package/get-research-done/references/continuation-format.md +249 -0
  58. package/get-research-done/references/git-integration.md +254 -0
  59. package/get-research-done/references/model-profiles.md +73 -0
  60. package/get-research-done/references/planning-config.md +94 -0
  61. package/get-research-done/references/questioning.md +141 -0
  62. package/get-research-done/references/tdd.md +263 -0
  63. package/get-research-done/references/ui-brand.md +160 -0
  64. package/get-research-done/references/verification-patterns.md +612 -0
  65. package/get-research-done/templates/DEBUG.md +159 -0
  66. package/get-research-done/templates/UAT.md +247 -0
  67. package/get-research-done/templates/archive-reason.md +195 -0
  68. package/get-research-done/templates/codebase/architecture.md +255 -0
  69. package/get-research-done/templates/codebase/concerns.md +310 -0
  70. package/get-research-done/templates/codebase/conventions.md +307 -0
  71. package/get-research-done/templates/codebase/integrations.md +280 -0
  72. package/get-research-done/templates/codebase/stack.md +186 -0
  73. package/get-research-done/templates/codebase/structure.md +285 -0
  74. package/get-research-done/templates/codebase/testing.md +480 -0
  75. package/get-research-done/templates/config.json +35 -0
  76. package/get-research-done/templates/context.md +283 -0
  77. package/get-research-done/templates/continue-here.md +78 -0
  78. package/get-research-done/templates/critic-log.md +288 -0
  79. package/get-research-done/templates/data-report.md +173 -0
  80. package/get-research-done/templates/debug-subagent-prompt.md +91 -0
  81. package/get-research-done/templates/decision-log.md +58 -0
  82. package/get-research-done/templates/decision.md +138 -0
  83. package/get-research-done/templates/discovery.md +146 -0
  84. package/get-research-done/templates/experiment-readme.md +104 -0
  85. package/get-research-done/templates/graduated-script.md +180 -0
  86. package/get-research-done/templates/iteration-summary.md +234 -0
  87. package/get-research-done/templates/milestone-archive.md +123 -0
  88. package/get-research-done/templates/milestone.md +115 -0
  89. package/get-research-done/templates/objective.md +271 -0
  90. package/get-research-done/templates/phase-prompt.md +567 -0
  91. package/get-research-done/templates/planner-subagent-prompt.md +117 -0
  92. package/get-research-done/templates/project.md +184 -0
  93. package/get-research-done/templates/requirements.md +231 -0
  94. package/get-research-done/templates/research-project/ARCHITECTURE.md +204 -0
  95. package/get-research-done/templates/research-project/FEATURES.md +147 -0
  96. package/get-research-done/templates/research-project/PITFALLS.md +200 -0
  97. package/get-research-done/templates/research-project/STACK.md +120 -0
  98. package/get-research-done/templates/research-project/SUMMARY.md +170 -0
  99. package/get-research-done/templates/research.md +529 -0
  100. package/get-research-done/templates/roadmap.md +202 -0
  101. package/get-research-done/templates/scorecard.json +113 -0
  102. package/get-research-done/templates/state.md +287 -0
  103. package/get-research-done/templates/summary.md +246 -0
  104. package/get-research-done/templates/user-setup.md +311 -0
  105. package/get-research-done/templates/verification-report.md +322 -0
  106. package/get-research-done/workflows/complete-milestone.md +756 -0
  107. package/get-research-done/workflows/diagnose-issues.md +231 -0
  108. package/get-research-done/workflows/discovery-phase.md +289 -0
  109. package/get-research-done/workflows/discuss-phase.md +433 -0
  110. package/get-research-done/workflows/execute-phase.md +657 -0
  111. package/get-research-done/workflows/execute-plan.md +1844 -0
  112. package/get-research-done/workflows/list-phase-assumptions.md +178 -0
  113. package/get-research-done/workflows/map-codebase.md +322 -0
  114. package/get-research-done/workflows/resume-project.md +307 -0
  115. package/get-research-done/workflows/transition.md +556 -0
  116. package/get-research-done/workflows/verify-phase.md +628 -0
  117. package/get-research-done/workflows/verify-work.md +596 -0
  118. package/hooks/dist/grd-check-update.js +61 -0
  119. package/hooks/dist/grd-statusline.js +84 -0
  120. package/package.json +47 -0
  121. package/scripts/audit-help-commands.sh +115 -0
  122. package/scripts/build-hooks.js +42 -0
  123. package/scripts/verify-all-commands.sh +246 -0
  124. package/scripts/verify-architect-warning.sh +35 -0
  125. package/scripts/verify-insights-mode.sh +40 -0
  126. package/scripts/verify-quick-mode.sh +20 -0
  127. 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