godpowers 1.6.10 → 1.6.12
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/CHANGELOG.md +70 -0
- package/README.md +30 -5
- package/RELEASE.md +63 -69
- package/SKILL.md +144 -3
- package/agents/god-coordinator.md +1 -1
- package/agents/god-orchestrator.md +125 -14
- package/agents/god-updater.md +51 -2
- package/bin/install.js +53 -3
- package/lib/dashboard.js +296 -0
- package/package.json +2 -2
- package/skills/god-arch.md +1 -1
- package/skills/god-audit.md +1 -1
- package/skills/god-debug.md +1 -1
- package/skills/god-deploy.md +1 -1
- package/skills/god-docs.md +22 -0
- package/skills/god-harden.md +1 -1
- package/skills/god-launch.md +1 -1
- package/skills/god-mode.md +40 -11
- package/skills/god-next.md +79 -3
- package/skills/god-observe.md +1 -1
- package/skills/god-party.md +1 -1
- package/skills/god-prd.md +1 -1
- package/skills/god-repo.md +1 -1
- package/skills/god-review-changes.md +17 -0
- package/skills/god-review.md +1 -1
- package/skills/god-roadmap.md +1 -1
- package/skills/god-scan.md +24 -0
- package/skills/god-stack.md +1 -1
- package/skills/god-status.md +72 -11
- package/skills/god-sync.md +34 -1
- package/skills/god-test-runtime.md +26 -0
package/lib/dashboard.js
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Godpowers Dashboard
|
|
3
|
+
*
|
|
4
|
+
* Shared executable status engine for /god-status, /god-next, /god-sync,
|
|
5
|
+
* /god-scan, and /god-mode closeouts. Disk state is authoritative.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const cp = require('child_process');
|
|
11
|
+
|
|
12
|
+
const state = require('./state');
|
|
13
|
+
const router = require('./router');
|
|
14
|
+
|
|
15
|
+
const GOD_DIR = '.godpowers';
|
|
16
|
+
const PRD_PATH = '.godpowers/prd/PRD.md';
|
|
17
|
+
const ROADMAP_PATH = '.godpowers/roadmap/ROADMAP.md';
|
|
18
|
+
const CHECKPOINT_PATH = '.godpowers/CHECKPOINT.md';
|
|
19
|
+
const SYNC_LOG_PATH = '.godpowers/SYNC-LOG.md';
|
|
20
|
+
const REVIEW_PATH = '.godpowers/REVIEW-REQUIRED.md';
|
|
21
|
+
|
|
22
|
+
function exists(projectRoot, relPath) {
|
|
23
|
+
return fs.existsSync(path.join(projectRoot, relPath));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function readText(projectRoot, relPath) {
|
|
27
|
+
const file = path.join(projectRoot, relPath);
|
|
28
|
+
if (!fs.existsSync(file)) return '';
|
|
29
|
+
return fs.readFileSync(file, 'utf8');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function mtimeMs(projectRoot, relPath) {
|
|
33
|
+
const file = path.join(projectRoot, relPath);
|
|
34
|
+
if (!fs.existsSync(file)) return null;
|
|
35
|
+
return fs.statSync(file).mtimeMs;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function artifactStatus(projectRoot, relPath) {
|
|
39
|
+
return exists(projectRoot, relPath) ? 'done' : 'missing';
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function currentPhase(progress) {
|
|
43
|
+
const current = progress && progress.current;
|
|
44
|
+
if (!current) {
|
|
45
|
+
return {
|
|
46
|
+
phase: 'Complete',
|
|
47
|
+
tierKey: null,
|
|
48
|
+
tierNumber: null,
|
|
49
|
+
tierTotal: 0,
|
|
50
|
+
tierOrdinal: 0,
|
|
51
|
+
tierCount: 0,
|
|
52
|
+
tierLabel: 'Complete',
|
|
53
|
+
stepLabel: 'Complete',
|
|
54
|
+
stepNumber: 0,
|
|
55
|
+
totalSteps: progress ? progress.total : 0
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const tierNumbers = (progress.tiers || [])
|
|
60
|
+
.map(tier => tier.tierNumber)
|
|
61
|
+
.filter(n => Number.isFinite(n))
|
|
62
|
+
.sort((a, b) => a - b);
|
|
63
|
+
const tierTotal = tierNumbers.length > 0 ? Math.max(...tierNumbers) : current.tierNumber;
|
|
64
|
+
const tierOrdinal = tierNumbers.indexOf(current.tierNumber) + 1;
|
|
65
|
+
const tierCount = tierNumbers.length || (Number.isFinite(current.tierNumber) ? current.tierNumber + 1 : 0);
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
phase: current.tierLabel,
|
|
69
|
+
tierKey: current.tierKey,
|
|
70
|
+
tierNumber: current.tierNumber,
|
|
71
|
+
tierTotal,
|
|
72
|
+
tierOrdinal: tierOrdinal > 0 ? tierOrdinal : 1,
|
|
73
|
+
tierCount,
|
|
74
|
+
tierLabel: current.tierLabel,
|
|
75
|
+
stepLabel: current.subStepLabel,
|
|
76
|
+
stepNumber: current.ordinal,
|
|
77
|
+
totalSteps: progress.total
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function worktree(projectRoot) {
|
|
82
|
+
try {
|
|
83
|
+
const out = cp.execFileSync('git', ['status', '--porcelain'], {
|
|
84
|
+
cwd: projectRoot,
|
|
85
|
+
encoding: 'utf8',
|
|
86
|
+
stdio: ['ignore', 'pipe', 'ignore']
|
|
87
|
+
});
|
|
88
|
+
return parseGitStatus(out);
|
|
89
|
+
} catch (e) {
|
|
90
|
+
return { worktree: 'unknown', index: 'unknown', entries: [] };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function parseGitStatus(out) {
|
|
95
|
+
if (!out || !out.trim()) {
|
|
96
|
+
return { worktree: 'clean', index: 'untouched', entries: [] };
|
|
97
|
+
}
|
|
98
|
+
const entries = out.split(/\r?\n/).filter(Boolean);
|
|
99
|
+
const staged = entries.filter(line => line[0] !== ' ' && line[0] !== '?');
|
|
100
|
+
const unstaged = entries.filter(line => line[1] !== ' ' || line.startsWith('??'));
|
|
101
|
+
let worktreeState = 'modified files unstaged';
|
|
102
|
+
if (staged.length > 0 && unstaged.length > 0) worktreeState = 'mixed';
|
|
103
|
+
else if (staged.length > 0) worktreeState = 'staged changes';
|
|
104
|
+
return {
|
|
105
|
+
worktree: worktreeState,
|
|
106
|
+
index: staged.length > 0 ? staged.map(statusPath).join(', ') : 'untouched',
|
|
107
|
+
entries
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function statusPath(line) {
|
|
112
|
+
if (line.startsWith('?? ')) return line.slice(3);
|
|
113
|
+
return line.length > 3 ? line.slice(3) : line.trim();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function reviewCount(projectRoot) {
|
|
117
|
+
const text = readText(projectRoot, REVIEW_PATH);
|
|
118
|
+
if (!text.trim()) return 0;
|
|
119
|
+
const unchecked = (text.match(/\[\s\]\s*(?:TODO|PENDING|OPEN|REVIEW|BLOCKER|[Pp][0-3])/g) || []).length;
|
|
120
|
+
if (unchecked > 0) return unchecked;
|
|
121
|
+
const headings = (text.match(/^###\s+/gm) || []).length;
|
|
122
|
+
return headings;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function hasRecentPath(projectRoot, relPath, maxAgeMs) {
|
|
126
|
+
const modified = mtimeMs(projectRoot, relPath);
|
|
127
|
+
if (!modified) return false;
|
|
128
|
+
return Date.now() - modified <= maxAgeMs;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function proactiveChecks(projectRoot, changedFiles = []) {
|
|
132
|
+
const oneDay = 24 * 60 * 60 * 1000;
|
|
133
|
+
const thirtyDays = 30 * oneDay;
|
|
134
|
+
const reviews = reviewCount(projectRoot);
|
|
135
|
+
|
|
136
|
+
const checkpoint = exists(projectRoot, CHECKPOINT_PATH)
|
|
137
|
+
? (hasRecentPath(projectRoot, CHECKPOINT_PATH, oneDay) ? 'fresh' : 'stale')
|
|
138
|
+
: 'missing';
|
|
139
|
+
|
|
140
|
+
const sync = exists(projectRoot, SYNC_LOG_PATH)
|
|
141
|
+
? (hasRecentPath(projectRoot, SYNC_LOG_PATH, oneDay) ? 'fresh' : 'stale, suggest /god-sync')
|
|
142
|
+
: 'missing, suggest /god-sync';
|
|
143
|
+
|
|
144
|
+
const hygieneFresh = exists(projectRoot, CHECKPOINT_PATH)
|
|
145
|
+
&& hasRecentPath(projectRoot, CHECKPOINT_PATH, thirtyDays);
|
|
146
|
+
|
|
147
|
+
const pkgChanged = changedFiles.some(file => [
|
|
148
|
+
'package.json',
|
|
149
|
+
'package-lock.json',
|
|
150
|
+
'pnpm-lock.yaml',
|
|
151
|
+
'yarn.lock'
|
|
152
|
+
].includes(file));
|
|
153
|
+
const sensitiveChanged = changedFiles.some(file => matchesAnyPrefix(file, [
|
|
154
|
+
'.env.example',
|
|
155
|
+
'SECURITY.md',
|
|
156
|
+
'.github/workflows',
|
|
157
|
+
'auth',
|
|
158
|
+
'security'
|
|
159
|
+
]));
|
|
160
|
+
|
|
161
|
+
return {
|
|
162
|
+
checkpoint,
|
|
163
|
+
reviews: reviews > 0 ? `${reviews} pending, suggest /god-review-changes` : 'none',
|
|
164
|
+
sync,
|
|
165
|
+
docs: 'fresh',
|
|
166
|
+
runtime: 'not-applicable',
|
|
167
|
+
security: sensitiveChanged ? 'sensitive files changed, suggest /god-harden' : 'clear',
|
|
168
|
+
dependencies: pkgChanged ? 'dependency files changed, suggest /god-update-deps' : 'clear',
|
|
169
|
+
hygiene: hygieneFresh ? 'fresh' : 'stale, suggest /god-hygiene'
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function matchesAnyPrefix(file, prefixes) {
|
|
174
|
+
return prefixes.some(prefix => file === prefix || file.startsWith(`${prefix}/`));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function planningVisibility(projectRoot, progress) {
|
|
178
|
+
const prd = artifactStatus(projectRoot, PRD_PATH);
|
|
179
|
+
const roadmap = artifactStatus(projectRoot, ROADMAP_PATH);
|
|
180
|
+
const phase = currentPhase(progress);
|
|
181
|
+
return {
|
|
182
|
+
prd: { status: prd, path: prd === 'done' ? PRD_PATH : null },
|
|
183
|
+
roadmap: { status: roadmap, path: roadmap === 'done' ? ROADMAP_PATH : null },
|
|
184
|
+
currentMilestone: phase.stepLabel ? `${phase.phase} / ${phase.stepLabel}` : phase.phase,
|
|
185
|
+
completion: `${progress.percent}% based on state.json tracked steps`
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function compute(projectRoot, opts = {}) {
|
|
190
|
+
const s = state.read(projectRoot);
|
|
191
|
+
const git = opts.git === false ? { worktree: 'not-checked', index: 'not-checked', entries: [] } : worktree(projectRoot);
|
|
192
|
+
|
|
193
|
+
if (!s) {
|
|
194
|
+
const next = { command: '/god-init', reason: 'No Godpowers project initialized' };
|
|
195
|
+
return {
|
|
196
|
+
state: 'not initialized',
|
|
197
|
+
mode: null,
|
|
198
|
+
lifecycle: 'pre-init',
|
|
199
|
+
progress: { percent: 0, completed: 0, total: 0, currentStep: 0, current: null, tiers: [] },
|
|
200
|
+
current: currentPhase(null),
|
|
201
|
+
worktree: git.worktree,
|
|
202
|
+
index: git.index,
|
|
203
|
+
planning: {
|
|
204
|
+
prd: { status: 'missing', path: null },
|
|
205
|
+
roadmap: { status: 'missing', path: null },
|
|
206
|
+
currentMilestone: 'Project initialization',
|
|
207
|
+
completion: '0% based on missing state.json'
|
|
208
|
+
},
|
|
209
|
+
proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
|
|
210
|
+
next,
|
|
211
|
+
openItems: ['No .godpowers/state.json found']
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const progress = state.progressSummary(s);
|
|
216
|
+
const current = currentPhase(progress);
|
|
217
|
+
const next = router.suggestNext(projectRoot);
|
|
218
|
+
const openItems = [];
|
|
219
|
+
const drift = state.detectDrift(projectRoot);
|
|
220
|
+
|
|
221
|
+
if (drift.length > 0) openItems.push(`${drift.length} artifact drift item(s), suggest /god-repair`);
|
|
222
|
+
if (next && next.blocker) openItems.push(`${next.blocker} blocks next route`);
|
|
223
|
+
if (reviewCount(projectRoot) > 0) openItems.push('pending review items');
|
|
224
|
+
if (openItems.length === 0) openItems.push('none');
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
state: progress.remaining === 0 ? 'complete' : 'in progress',
|
|
228
|
+
mode: s.mode || s['mode-announced-as'] || null,
|
|
229
|
+
lifecycle: s['lifecycle-phase'] || 'in-arc',
|
|
230
|
+
progress,
|
|
231
|
+
current,
|
|
232
|
+
worktree: git.worktree,
|
|
233
|
+
index: git.index,
|
|
234
|
+
planning: planningVisibility(projectRoot, progress),
|
|
235
|
+
proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
|
|
236
|
+
next,
|
|
237
|
+
openItems
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function render(dashboard) {
|
|
242
|
+
const current = dashboard.current || {};
|
|
243
|
+
const planning = dashboard.planning || {};
|
|
244
|
+
const proactive = dashboard.proactive || {};
|
|
245
|
+
const next = dashboard.next || {};
|
|
246
|
+
const progress = dashboard.progress || {};
|
|
247
|
+
const prd = planning.prd || {};
|
|
248
|
+
const roadmap = planning.roadmap || {};
|
|
249
|
+
const openItems = dashboard.openItems && dashboard.openItems.length > 0
|
|
250
|
+
? dashboard.openItems
|
|
251
|
+
: ['none'];
|
|
252
|
+
|
|
253
|
+
return [
|
|
254
|
+
'Godpowers Dashboard',
|
|
255
|
+
'',
|
|
256
|
+
'Current status:',
|
|
257
|
+
` State: ${dashboard.state}`,
|
|
258
|
+
` Phase: ${current.phase || 'unknown'}${current.tierNumber !== null && current.tierNumber !== undefined ? ` (tier ${current.tierOrdinal} of ${current.tierCount}, internal ${current.tierKey || `tier-${current.tierNumber}`})` : ''}`,
|
|
259
|
+
` Step: ${current.stepLabel || 'unknown'}${current.stepNumber ? ` (step ${current.stepNumber} of ${current.totalSteps})` : ''}`,
|
|
260
|
+
` Progress: ${progress.percent || 0}% (${progress.completed || 0} of ${progress.total || 0} steps complete)`,
|
|
261
|
+
` Worktree: ${dashboard.worktree}`,
|
|
262
|
+
` Index: ${dashboard.index}`,
|
|
263
|
+
'',
|
|
264
|
+
'Planning visibility:',
|
|
265
|
+
` PRD: ${prd.status || 'missing'}${prd.path ? ` ${prd.path}` : ''}`,
|
|
266
|
+
` Roadmap: ${roadmap.status || 'missing'}${roadmap.path ? ` ${roadmap.path}` : ''}`,
|
|
267
|
+
` Current milestone: ${planning.currentMilestone || 'unknown'}`,
|
|
268
|
+
` Completion: ${planning.completion || 'unknown'}`,
|
|
269
|
+
'',
|
|
270
|
+
'Proactive checks:',
|
|
271
|
+
` Checkpoint: ${proactive.checkpoint || 'unknown'}`,
|
|
272
|
+
` Reviews: ${proactive.reviews || 'unknown'}`,
|
|
273
|
+
` Sync: ${proactive.sync || 'unknown'}`,
|
|
274
|
+
` Docs: ${proactive.docs || 'unknown'}`,
|
|
275
|
+
` Runtime: ${proactive.runtime || 'unknown'}`,
|
|
276
|
+
` Security: ${proactive.security || 'unknown'}`,
|
|
277
|
+
` Dependencies: ${proactive.dependencies || 'unknown'}`,
|
|
278
|
+
` Hygiene: ${proactive.hygiene || 'unknown'}`,
|
|
279
|
+
'',
|
|
280
|
+
'Open items:',
|
|
281
|
+
...openItems.map((item, index) => ` ${index + 1}. ${item}`),
|
|
282
|
+
'',
|
|
283
|
+
'Next:',
|
|
284
|
+
` Recommended: ${next.command || 'describe the next intent'}`,
|
|
285
|
+
` Why: ${next.reason || 'No route was computed.'}`
|
|
286
|
+
].join('\n');
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
module.exports = {
|
|
290
|
+
compute,
|
|
291
|
+
render,
|
|
292
|
+
worktree,
|
|
293
|
+
parseGitStatus,
|
|
294
|
+
proactiveChecks,
|
|
295
|
+
planningVisibility
|
|
296
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.12",
|
|
4
4
|
"description": "AI-powered development system: 106 slash commands and 39 specialist agents that take a project from raw idea to hardened production. Runs inside Claude Code, Codex, Cursor, Windsurf, Gemini, and 10+ other AI coding tools.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"godpowers": "./bin/install.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
-
"test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && npm run test:e2e && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
|
|
9
|
+
"test": "node scripts/validate-skills.js && node scripts/test-doc-surface-counts.js && bash scripts/smoke.sh && node scripts/test-runtime.js && node scripts/test-router.js && node scripts/test-recipes.js && node scripts/test-context-writer.js && node scripts/test-pillars.js && node scripts/test-artifact-linter.js && node scripts/test-artifact-diff.js && node scripts/test-design-foundation.js && node scripts/test-linkage.js && node scripts/test-impact.js && node scripts/test-reverse-sync.js && node scripts/test-integration.js && node scripts/test-cross-artifact.js && node scripts/test-awesome-design.js && node scripts/test-skillui-bridge.js && node scripts/test-runtime-verification.js && node scripts/test-agent-browser.js && node scripts/test-mode-d.js && node scripts/test-runtime-heuristics.js && node scripts/test-agent-validator.js && node scripts/test-story-validator.js && node scripts/test-state.js && node scripts/test-dashboard.js && node scripts/test-intent.js && node scripts/test-events.js && node scripts/test-golden-artifacts.js && node scripts/test-install-smoke.js && node scripts/test-checkpoint.js && node scripts/test-extensions.js && node scripts/test-event-reader.js && node scripts/test-state-lock.js && node scripts/test-cost-saver.js && node scripts/test-budget-onoff.js && node scripts/test-workflow-runner.js && npm run test:e2e && node scripts/test-otel-exporter.js && node scripts/test-extensions-publish.js",
|
|
10
10
|
"prepublishOnly": "npm test",
|
|
11
11
|
"validate-skills": "node scripts/validate-skills.js",
|
|
12
12
|
"test:surface": "node scripts/test-doc-surface-counts.js",
|
package/skills/god-arch.md
CHANGED
package/skills/god-audit.md
CHANGED
package/skills/god-debug.md
CHANGED
package/skills/god-deploy.md
CHANGED
package/skills/god-docs.md
CHANGED
|
@@ -48,6 +48,28 @@ Update log: .godpowers/docs/UPDATE-LOG.md
|
|
|
48
48
|
Suggested next: /god-status or continue with feature work
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
+
## Proactive docs drift
|
|
52
|
+
|
|
53
|
+
Godpowers may invoke docs work proactively in two ways:
|
|
54
|
+
|
|
55
|
+
| Trigger | Action | Guardrail |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| Docs changed after code changed | Spawn `god-docs-writer` in drift-check mode when current workflow owns docs | Do not invent new docs scope |
|
|
58
|
+
| Code changed after docs that claim current behavior | Suggest `/god-docs` or spawn drift-check inside `/god-mode`, `/god-feature`, `/god-refactor`, or `/god-sync` closeout | Verify claims against code before editing |
|
|
59
|
+
| `REVIEW-REQUIRED.md` contains docs drift items | Suggest `/god-review-changes` first | Do not auto-clear review items |
|
|
60
|
+
|
|
61
|
+
When auto-invoked, show:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
Auto-invoked:
|
|
65
|
+
Trigger: docs and code changed in the same workflow
|
|
66
|
+
Agent: god-docs-writer
|
|
67
|
+
Local syncs:
|
|
68
|
+
+ docs-drift-check: <N claims checked, N drift items>
|
|
69
|
+
Artifacts: .godpowers/docs/UPDATE-LOG.md or no-op
|
|
70
|
+
Log: .godpowers/docs/UPDATE-LOG.md
|
|
71
|
+
```
|
|
72
|
+
|
|
51
73
|
## Have-Nots
|
|
52
74
|
|
|
53
75
|
Docs FAIL if:
|
package/skills/god-harden.md
CHANGED
package/skills/god-launch.md
CHANGED
package/skills/god-mode.md
CHANGED
|
@@ -125,7 +125,7 @@ workflow.
|
|
|
125
125
|
unresolved Critical harden findings. These are release-truth gates, not
|
|
126
126
|
preference pauses.
|
|
127
127
|
|
|
128
|
-
6. Spawn the **god-orchestrator** agent via
|
|
128
|
+
6. Spawn the **god-orchestrator** agent via the host platform's native agent spawning mechanism with only a
|
|
129
129
|
display-safe payload:
|
|
130
130
|
- Name the project root.
|
|
131
131
|
- Name the invocation flags.
|
|
@@ -137,7 +137,7 @@ workflow.
|
|
|
137
137
|
hidden routing rules, or detailed instructions in the spawn message.
|
|
138
138
|
Assume the host UI may display the raw spawn message to the user.
|
|
139
139
|
|
|
140
|
-
7. Keep the spawn payload display-safe. Do not echo or summarize raw
|
|
140
|
+
7. Keep the spawn payload display-safe. Do not echo or summarize raw spawn input,
|
|
141
141
|
"Hard instructions", hidden orchestration rules, agent prompts, file
|
|
142
142
|
loadout lists, or internal routing payloads into the user-visible transcript.
|
|
143
143
|
The visible transcript may say only what phase is running, what durable state
|
|
@@ -169,6 +169,8 @@ Show:
|
|
|
169
169
|
- detected resume or project mode in plain language
|
|
170
170
|
- a compact "Next step" card before each visible phase or tier sub-step
|
|
171
171
|
- a compact "Step result" card after each visible phase or tier sub-step
|
|
172
|
+
- every auto-invoked command, agent, and local runtime helper using an
|
|
173
|
+
`Auto-invoked:` or `Sync status:` card
|
|
172
174
|
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
173
175
|
unexplained "arc" in visible output
|
|
174
176
|
- PRD and roadmap visibility in status and closeout blocks when artifacts
|
|
@@ -176,11 +178,12 @@ Show:
|
|
|
176
178
|
- short progress updates for phases, commands, validations, and file edits
|
|
177
179
|
- concise validation summaries instead of full command noise when possible
|
|
178
180
|
- final changed paths, validation results, and completion or pause status
|
|
179
|
-
- final
|
|
180
|
-
|
|
181
|
+
- final Godpowers Dashboard from disk, including phase, tier, step, progress,
|
|
182
|
+
planning visibility, proactive checks, open items, worktree/index state, and
|
|
183
|
+
recommended next action
|
|
181
184
|
|
|
182
185
|
Hide:
|
|
183
|
-
- raw
|
|
186
|
+
- raw spawn input
|
|
184
187
|
- "Hard instructions" sections
|
|
185
188
|
- spawned-agent prompt text
|
|
186
189
|
- detailed handoff file contents
|
|
@@ -200,11 +203,11 @@ missing them, synthesize them from disk state before continuing.
|
|
|
200
203
|
|
|
201
204
|
Before work starts:
|
|
202
205
|
|
|
203
|
-
```
|
|
206
|
+
```text
|
|
204
207
|
Next step
|
|
205
|
-
|
|
206
|
-
Tier: <tier-number> <tier-label>
|
|
208
|
+
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
207
209
|
Step: <sub-step-label>
|
|
210
|
+
Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
|
|
208
211
|
Why this now: <one sentence>
|
|
209
212
|
What will happen:
|
|
210
213
|
1. <observable action>
|
|
@@ -214,11 +217,11 @@ Expected output: <artifact path or verification result>
|
|
|
214
217
|
|
|
215
218
|
After work completes or pauses:
|
|
216
219
|
|
|
217
|
-
```
|
|
220
|
+
```text
|
|
218
221
|
Step result
|
|
219
|
-
|
|
220
|
-
Tier: <tier-number> <tier-label>
|
|
222
|
+
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
221
223
|
Step: <sub-step-label>
|
|
224
|
+
Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
|
|
222
225
|
Result: <done | blocked | failed | skipped | imported>
|
|
223
226
|
What happened:
|
|
224
227
|
1. <observable action completed>
|
|
@@ -294,6 +297,21 @@ Under `--yolo`, the sync step auto-applies (no pause). Under
|
|
|
294
297
|
`--conservative`, it pauses for confirmation. Under `--with-hygiene`,
|
|
295
298
|
it runs alongside the hygiene pass.
|
|
296
299
|
|
|
300
|
+
Display this before the final completion block:
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
Sync status:
|
|
304
|
+
Trigger: /god-mode final sync
|
|
305
|
+
Agent: god-updater spawned
|
|
306
|
+
Local syncs:
|
|
307
|
+
+ reverse-sync: <counts and result>
|
|
308
|
+
+ pillars-sync: <counts and result>
|
|
309
|
+
+ checkpoint-sync: <created, updated, no-op, or skipped>
|
|
310
|
+
+ context-refresh: <spawned, no-op, or skipped>
|
|
311
|
+
Artifacts: <changed files or no-op>
|
|
312
|
+
Log: .godpowers/SYNC-LOG.md
|
|
313
|
+
```
|
|
314
|
+
|
|
297
315
|
The sync step also reconciles native Pillars context. When `.godpowers`
|
|
298
316
|
artifacts create or change durable project truth, Godpowers maps those changes
|
|
299
317
|
to relevant pillar files through `lib/pillars.planArtifactSync`. Default mode
|
|
@@ -315,6 +333,17 @@ When orchestrator returns "complete", display:
|
|
|
315
333
|
```
|
|
316
334
|
Godpowers project run complete.
|
|
317
335
|
|
|
336
|
+
Sync status:
|
|
337
|
+
Trigger: /god-mode final sync
|
|
338
|
+
Agent: god-updater spawned
|
|
339
|
+
Local syncs:
|
|
340
|
+
+ reverse-sync: <counts and result>
|
|
341
|
+
+ pillars-sync: <counts and result>
|
|
342
|
+
+ checkpoint-sync: <created, updated, no-op, or skipped>
|
|
343
|
+
+ context-refresh: <spawned, no-op, or skipped>
|
|
344
|
+
Artifacts: <changed files or no-op>
|
|
345
|
+
Log: .godpowers/SYNC-LOG.md
|
|
346
|
+
|
|
318
347
|
Current status:
|
|
319
348
|
State: complete
|
|
320
349
|
Progress: <pct>% (<done> of <total> steps complete; current step <n> of <total>)
|
package/skills/god-next.md
CHANGED
|
@@ -22,6 +22,9 @@ Before reading routing data or calling runtime modules, resolve the Godpowers ru
|
|
|
22
22
|
1. If `<projectRoot>/lib/router.js` exists, use the repository checkout runtime at `<projectRoot>`.
|
|
23
23
|
2. Otherwise use the installed bundle at `<tool-config-dir>/godpowers-runtime`, where `<tool-config-dir>` is the directory that contains this installed skill, such as `~/.claude`, `~/.codex`, `~/.cursor`, `~/.windsurf`, or `~/.gemini`.
|
|
24
24
|
3. Read routing definitions from `<runtimeRoot>/routing/*.yaml` and recipes from `<runtimeRoot>/routing/recipes/*.yaml`.
|
|
25
|
+
4. For status output, load `<runtimeRoot>/lib/dashboard.js` and call
|
|
26
|
+
`dashboard.compute(projectRoot)`. Use `dashboard.render(result)` for the
|
|
27
|
+
shared dashboard section before adding route-specific detail.
|
|
25
28
|
|
|
26
29
|
## Three modes of invocation
|
|
27
30
|
|
|
@@ -168,6 +171,42 @@ Planning visibility:
|
|
|
168
171
|
Completion: <pct>% <basis from state.json or PROGRESS.md>
|
|
169
172
|
```
|
|
170
173
|
|
|
174
|
+
## Proactive Sweep
|
|
175
|
+
|
|
176
|
+
Before returning a suggestion, run the proactive auto-invoke policy from the
|
|
177
|
+
master skill against disk state. This is read-only unless a Level 2 local helper
|
|
178
|
+
has a direct trigger.
|
|
179
|
+
|
|
180
|
+
Check these signals:
|
|
181
|
+
- `.godpowers/CHECKPOINT.md` missing, stale, or conflicting with `state.json`
|
|
182
|
+
- `.godpowers/REVIEW-REQUIRED.md` contains pending entries
|
|
183
|
+
- `.godpowers/SYNC-LOG.md` missing after code or artifact edits
|
|
184
|
+
- docs changed after code changed, or code changed after docs that claim
|
|
185
|
+
current behavior
|
|
186
|
+
- frontend-visible files changed and a known local, preview, staging, or
|
|
187
|
+
production URL is evidenced
|
|
188
|
+
- security-sensitive files changed
|
|
189
|
+
- dependency files changed
|
|
190
|
+
- full project run completed and hygiene has not run recently
|
|
191
|
+
|
|
192
|
+
Display the result:
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
Proactive checks:
|
|
196
|
+
Checkpoint: <fresh | refreshed | stale, suggest /god-locate>
|
|
197
|
+
Reviews: <none | N pending, suggest /god-review-changes>
|
|
198
|
+
Sync: <fresh | suggest /god-sync | local linkage scan ran>
|
|
199
|
+
Docs: <fresh | suggest /god-docs | drift-check spawned>
|
|
200
|
+
Runtime: <not-applicable | suggest /god-test-runtime | browser test spawned>
|
|
201
|
+
Security: <clear | suggest /god-harden>
|
|
202
|
+
Dependencies: <clear | suggest /god-update-deps>
|
|
203
|
+
Hygiene: <fresh | suggest /god-hygiene>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Do not auto-run Level 3 agents from standalone `/god-next` unless the user
|
|
207
|
+
explicitly asked it to continue work. In standalone mode, Level 3 items become
|
|
208
|
+
the recommended command or a proposition option.
|
|
209
|
+
|
|
171
210
|
## Process for Mode 4 (intent-based)
|
|
172
211
|
|
|
173
212
|
```
|
|
@@ -297,11 +336,31 @@ recommending archaeology, reconstruction, project-run readiness, pillars, or ref
|
|
|
297
336
|
|
|
298
337
|
## Output Format
|
|
299
338
|
|
|
300
|
-
|
|
339
|
+
`/god-next` must emit the same Godpowers Dashboard shape used by
|
|
340
|
+
`/god-status`, then add routing detail and the proposition block.
|
|
341
|
+
Prefer the executable `lib/dashboard.js` output over manually recomputing the
|
|
342
|
+
same fields. If the module is unavailable, say
|
|
343
|
+
`Dashboard engine: unavailable, manual scan used`.
|
|
344
|
+
|
|
345
|
+
```text
|
|
301
346
|
Godpowers Next
|
|
302
347
|
|
|
303
|
-
|
|
304
|
-
|
|
348
|
+
Godpowers Dashboard
|
|
349
|
+
|
|
350
|
+
Current status:
|
|
351
|
+
State: proposal
|
|
352
|
+
Phase: [plain-language phase] (tier [human ordinal] of [human total])
|
|
353
|
+
Step: [current step label] (step [n] of [total steps])
|
|
354
|
+
Progress: [pct]% ([done] of [total] steps complete)
|
|
355
|
+
Worktree: [clean | modified files unstaged | staged changes | mixed]
|
|
356
|
+
Index: [untouched | staged files listed]
|
|
357
|
+
|
|
358
|
+
Planning visibility:
|
|
359
|
+
PRD: [done | pending | missing | deferred] [path when present]
|
|
360
|
+
Roadmap: [done | pending | missing | deferred] [path when present]
|
|
361
|
+
Current milestone: [roadmap milestone, phase, tier, or next planning gate]
|
|
362
|
+
Completion: [pct]% [basis from state.json, PROGRESS.md, or artifacts]
|
|
363
|
+
|
|
305
364
|
Suggested next: [/god-X]
|
|
306
365
|
|
|
307
366
|
Why: [one-line reason]
|
|
@@ -321,6 +380,23 @@ Previous tier had standards failures. Address before proceeding:
|
|
|
321
380
|
- [failure 1]
|
|
322
381
|
- [failure 2]
|
|
323
382
|
Suggested: /god-redo [tier] OR /god-skip [tier] --reason="..."
|
|
383
|
+
|
|
384
|
+
Proactive checks:
|
|
385
|
+
Checkpoint: [fresh | refreshed | missing | stale]
|
|
386
|
+
Reviews: [none | N pending, suggest /god-review-changes]
|
|
387
|
+
Sync: [fresh | missing | stale | local helper ran | suggest /god-sync]
|
|
388
|
+
Docs: [fresh | possible drift, suggest /god-docs]
|
|
389
|
+
Runtime: [not-applicable | known URL, suggest /god-test-runtime | no known URL, defer deployed verification]
|
|
390
|
+
Security: [clear | sensitive files changed, suggest /god-harden]
|
|
391
|
+
Dependencies: [clear | dependency files changed, suggest /god-update-deps]
|
|
392
|
+
Hygiene: [fresh | stale, suggest /god-hygiene]
|
|
393
|
+
|
|
394
|
+
Open items:
|
|
395
|
+
1. [missing prerequisite, blocker, pending review, or none]
|
|
396
|
+
|
|
397
|
+
Next:
|
|
398
|
+
Recommended: [/god-X or exact user decision]
|
|
399
|
+
Why: [one sentence tied to disk state]
|
|
324
400
|
```
|
|
325
401
|
|
|
326
402
|
## Proposition Closeout
|
package/skills/god-observe.md
CHANGED
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
# /god-observe
|
|
11
11
|
|
|
12
|
-
Spawn the **god-observability-engineer** agent in a fresh context via
|
|
12
|
+
Spawn the **god-observability-engineer** agent in a fresh context via the host platform's native agent spawning mechanism.
|
|
13
13
|
|
|
14
14
|
## Setup
|
|
15
15
|
|
package/skills/god-party.md
CHANGED
|
@@ -30,7 +30,7 @@ Get multiple specialist perspectives on a single question.
|
|
|
30
30
|
- Harden auditor (god-harden-auditor) - security implications
|
|
31
31
|
- Launch strategist (god-launch-strategist) - go-to-market implications
|
|
32
32
|
|
|
33
|
-
3. Spawn each selected persona IN PARALLEL via
|
|
33
|
+
3. Spawn each selected persona IN PARALLEL via the host platform's native agent spawning mechanism:
|
|
34
34
|
- Each gets fresh context
|
|
35
35
|
- Each receives ONLY the question and the relevant artifact subset
|
|
36
36
|
- Each is instructed: respond as your specialist, do not soften or hedge
|
package/skills/god-prd.md
CHANGED
package/skills/god-repo.md
CHANGED