godpowers 3.0.1 → 3.11.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/CHANGELOG.md +255 -2
- package/README.md +31 -14
- package/RELEASE.md +21 -33
- package/SKILL.md +71 -112
- package/bin/install.js +44 -0
- package/fixtures/gate/harden-pass/.godpowers/state.json +26 -0
- package/lib/README.md +1 -0
- package/lib/artifact-map.js +2 -1
- package/lib/cli-dispatch.js +449 -3
- package/lib/command-families.js +10 -2
- package/lib/evidence/.provenance.json +45 -0
- package/lib/evidence-import.js +147 -0
- package/lib/evidence.js +908 -0
- package/lib/gate.js +26 -15
- package/lib/install-profiles.js +4 -1
- package/lib/installer-args.js +241 -1
- package/lib/quarterback.js +183 -0
- package/lib/surface-profile.js +168 -0
- package/lib/work-report.js +137 -0
- package/package.json +2 -2
- package/references/orchestration/GOD-MODE-RUNBOOK.md +9 -14
- package/references/orchestration/GOD-ORCHESTRATOR-RUNBOOK.md +40 -82
- package/references/shared/DASHBOARD-CONTRACT.md +66 -29
- package/references/shared/README.md +1 -1
- package/routing/god-demo.yaml +35 -0
- package/routing/god-first-run.yaml +34 -0
- package/routing/god-surface.yaml +39 -0
- package/routing/recipes/try-safely.yaml +26 -0
- package/skills/god-agent-audit.md +5 -6
- package/skills/god-archaeology.md +5 -6
- package/skills/god-audit.md +6 -7
- package/skills/god-automation-setup.md +6 -7
- package/skills/god-automation-status.md +6 -7
- package/skills/god-context-scan.md +7 -8
- package/skills/god-demo.md +53 -0
- package/skills/god-design-impact.md +5 -6
- package/skills/god-discuss.md +5 -6
- package/skills/god-docs.md +5 -10
- package/skills/god-doctor.md +8 -9
- package/skills/god-dogfood.md +7 -10
- package/skills/god-explore.md +5 -7
- package/skills/god-first-run.md +64 -0
- package/skills/god-harden.md +5 -2
- package/skills/god-help.md +77 -51
- package/skills/god-hygiene.md +5 -6
- package/skills/god-lifecycle.md +11 -13
- package/skills/god-list-assumptions.md +7 -8
- package/skills/god-locate.md +7 -8
- package/skills/god-map-codebase.md +5 -6
- package/skills/god-migrate.md +6 -15
- package/skills/god-next.md +16 -17
- package/skills/god-preflight.md +7 -8
- package/skills/god-progress.md +7 -8
- package/skills/god-reconcile.md +5 -6
- package/skills/god-reconstruct.md +5 -7
- package/skills/god-refactor.md +6 -7
- package/skills/god-roadmap-check.md +6 -7
- package/skills/god-scan.md +5 -9
- package/skills/god-spike.md +5 -6
- package/skills/god-standards.md +5 -6
- package/skills/god-status.md +12 -10
- package/skills/god-surface.md +61 -0
- package/skills/god-sync.md +4 -8
- package/skills/god-tech-debt.md +5 -6
- package/skills/god-test-runtime.md +4 -8
- package/skills/god-version.md +1 -1
- package/skills/god.md +53 -52
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime surface profile preview and apply helper.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
const { resolveRuntime, runtimeKeys } = require('./installer-runtimes');
|
|
9
|
+
const profiles = require('./install-profiles');
|
|
10
|
+
const installer = require('./installer-core');
|
|
11
|
+
|
|
12
|
+
function availableSkillNames(srcDir) {
|
|
13
|
+
const skillsDir = path.join(srcDir, 'skills');
|
|
14
|
+
if (!fs.existsSync(skillsDir)) return [];
|
|
15
|
+
return fs.readdirSync(skillsDir)
|
|
16
|
+
.filter((file) => /^god.*\.md$/.test(file))
|
|
17
|
+
.map((file) => path.basename(file, '.md'))
|
|
18
|
+
.sort();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isRuntimeSkillName(name) {
|
|
22
|
+
return name === 'god' || name.startsWith('god-');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function installedSkillNames(runtime) {
|
|
26
|
+
const skillsDir = path.join(runtime.configDir, runtime.skillsDir);
|
|
27
|
+
if (!fs.existsSync(skillsDir)) return [];
|
|
28
|
+
const names = [];
|
|
29
|
+
for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
const skillFile = path.join(skillsDir, entry.name, 'SKILL.md');
|
|
32
|
+
if (fs.existsSync(skillFile) && isRuntimeSkillName(entry.name)) {
|
|
33
|
+
names.push(entry.name);
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
38
|
+
const name = path.basename(entry.name, '.md');
|
|
39
|
+
if (isRuntimeSkillName(name)) names.push(name);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return [...new Set(names)].sort();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function currentProfile(runtime) {
|
|
46
|
+
const marker = path.join(runtime.configDir, 'GODPOWERS_PROFILE');
|
|
47
|
+
if (!fs.existsSync(marker)) return 'unknown';
|
|
48
|
+
const text = fs.readFileSync(marker, 'utf8').trim();
|
|
49
|
+
return text || 'unknown';
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function targetRuntimeKeys(opts = {}) {
|
|
53
|
+
if (opts.all) return runtimeKeys();
|
|
54
|
+
if (opts.runtimes && opts.runtimes.length > 0) return opts.runtimes.slice();
|
|
55
|
+
return runtimeKeys().filter((key) => {
|
|
56
|
+
const runtime = resolveRuntime(key, opts);
|
|
57
|
+
return runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function diffSkills(selected, installed) {
|
|
62
|
+
const selectedSet = new Set(selected);
|
|
63
|
+
const installedSet = new Set(installed);
|
|
64
|
+
return {
|
|
65
|
+
add: selected.filter((name) => !installedSet.has(name)),
|
|
66
|
+
remove: installed.filter((name) => !selectedSet.has(name))
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function plan(srcDir = path.resolve(__dirname, '..'), opts = {}) {
|
|
71
|
+
const profileList = profiles.normalizeProfiles(opts.profile || 'core');
|
|
72
|
+
const profile = profileList.join(',');
|
|
73
|
+
const available = availableSkillNames(srcDir);
|
|
74
|
+
const selected = [...profiles.selectedSkillNames(profile, available)].sort();
|
|
75
|
+
const keys = targetRuntimeKeys(opts);
|
|
76
|
+
const targets = keys.map((key) => {
|
|
77
|
+
const runtime = resolveRuntime(key, opts);
|
|
78
|
+
const installed = runtime ? installedSkillNames(runtime) : [];
|
|
79
|
+
const diff = diffSkills(selected, installed);
|
|
80
|
+
return {
|
|
81
|
+
key,
|
|
82
|
+
name: runtime ? runtime.name : key,
|
|
83
|
+
configDir: runtime ? runtime.configDir : null,
|
|
84
|
+
skillsDir: runtime ? path.join(runtime.configDir, runtime.skillsDir) : null,
|
|
85
|
+
installed: Boolean(runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'))),
|
|
86
|
+
currentProfile: runtime ? currentProfile(runtime) : 'unknown',
|
|
87
|
+
currentCount: installed.length,
|
|
88
|
+
selectedCount: selected.length,
|
|
89
|
+
add: diff.add,
|
|
90
|
+
remove: diff.remove
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
profile,
|
|
96
|
+
description: profiles.describeProfiles(profile),
|
|
97
|
+
mode: opts.apply ? 'apply' : 'dry-run',
|
|
98
|
+
selectedCount: selected.length,
|
|
99
|
+
availableCount: available.length,
|
|
100
|
+
targets
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function apply(srcDir = path.resolve(__dirname, '..'), opts = {}) {
|
|
105
|
+
const keys = targetRuntimeKeys(opts);
|
|
106
|
+
if (keys.length === 0) {
|
|
107
|
+
throw new Error('surface apply requires an installed runtime, --all, or an explicit runtime flag');
|
|
108
|
+
}
|
|
109
|
+
const results = [];
|
|
110
|
+
for (const key of keys) {
|
|
111
|
+
const ok = installer.installForRuntime(key, srcDir, { ...opts, profile: opts.profile || 'core' });
|
|
112
|
+
results.push({ key, ok });
|
|
113
|
+
}
|
|
114
|
+
return results;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function renderList(items, max = 6) {
|
|
118
|
+
if (!items || items.length === 0) return 'none';
|
|
119
|
+
const shown = items.slice(0, max).join(', ');
|
|
120
|
+
const remaining = items.length - max;
|
|
121
|
+
return remaining > 0 ? `${shown}, and ${remaining} more` : shown;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function render(report) {
|
|
125
|
+
const lines = [
|
|
126
|
+
'Godpowers Surface',
|
|
127
|
+
'',
|
|
128
|
+
`Profile: ${report.description}`,
|
|
129
|
+
`Mode: ${report.mode}`,
|
|
130
|
+
`Selected commands: ${report.selectedCount} of ${report.availableCount}`,
|
|
131
|
+
'',
|
|
132
|
+
'Runtime targets:'
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
if (report.targets.length === 0) {
|
|
136
|
+
lines.push(' none detected. Pass --claude, --codex, or --all.');
|
|
137
|
+
} else {
|
|
138
|
+
for (const target of report.targets) {
|
|
139
|
+
lines.push(` - ${target.name}: current ${target.currentProfile}, selected ${target.selectedCount} commands`);
|
|
140
|
+
lines.push(` Path: ${target.skillsDir}`);
|
|
141
|
+
lines.push(` Add: ${renderList(target.add)}`);
|
|
142
|
+
lines.push(` Remove: ${renderList(target.remove)}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
lines.push('');
|
|
147
|
+
lines.push('Next commands:');
|
|
148
|
+
if (report.targets.length === 0) {
|
|
149
|
+
lines.push('- godpowers surface --profile=core --codex --global --dry-run: Preview the core surface for Codex.');
|
|
150
|
+
} else if (report.mode === 'dry-run') {
|
|
151
|
+
const first = report.targets[0];
|
|
152
|
+
lines.push(`- godpowers surface --profile=${report.profile} --${first.key} --global --apply: Apply this profile to ${first.name}.`);
|
|
153
|
+
} else {
|
|
154
|
+
lines.push('- /god-help: Open the compact help view after the surface switch.');
|
|
155
|
+
}
|
|
156
|
+
lines.push('- /god-help all: Show the complete catalog when you need every command.');
|
|
157
|
+
|
|
158
|
+
return lines.join('\n');
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
module.exports = {
|
|
162
|
+
availableSkillNames,
|
|
163
|
+
installedSkillNames,
|
|
164
|
+
targetRuntimeKeys,
|
|
165
|
+
plan,
|
|
166
|
+
apply,
|
|
167
|
+
render
|
|
168
|
+
};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work report: the chat play-by-play (Phase 3 visibility gene).
|
|
3
|
+
*
|
|
4
|
+
* Rebound from Mythify's build_work_report: cursor-based, reads the evidence
|
|
5
|
+
* ledger, surfaces an "Attention" section for reds, and advances a cursor
|
|
6
|
+
* unless --peek. The cursor lives at .godpowers/ledger/reports/cursor.json so a
|
|
7
|
+
* fresh session can emit only what is new since the last report.
|
|
8
|
+
*
|
|
9
|
+
* Read-mostly: report() reads the ledger and, unless peek is set, advances the
|
|
10
|
+
* report cursor. It never mutates state.json.
|
|
11
|
+
*
|
|
12
|
+
* @typedef {Object} WorkReport
|
|
13
|
+
* @property {string} since "last" or "all".
|
|
14
|
+
* @property {boolean} peek Whether the cursor was left unadvanced.
|
|
15
|
+
* @property {Object[]} records The ledger records in the window, oldest first.
|
|
16
|
+
* @property {Object[]} attention Executed records that did not verify (reds).
|
|
17
|
+
* @property {{ total: number, passed: number, failed: number, attested: number }} summary
|
|
18
|
+
* @property {{ previous: string|null, next: string|null }} cursor
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
|
|
24
|
+
const atomic = require('./atomic-write');
|
|
25
|
+
const evidence = require('./evidence');
|
|
26
|
+
|
|
27
|
+
function reportsDir(projectRoot) {
|
|
28
|
+
return path.join(projectRoot, '.godpowers', 'ledger', 'reports');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function cursorPath(projectRoot) {
|
|
32
|
+
return path.join(reportsDir(projectRoot), 'cursor.json');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function readCursor(projectRoot) {
|
|
36
|
+
try {
|
|
37
|
+
return JSON.parse(fs.readFileSync(cursorPath(projectRoot), 'utf8'));
|
|
38
|
+
} catch (_) {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function writeCursor(projectRoot, cursor) {
|
|
44
|
+
fs.mkdirSync(reportsDir(projectRoot), { recursive: true });
|
|
45
|
+
atomic.writeJsonAtomic(cursorPath(projectRoot), cursor);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function summarize(window) {
|
|
49
|
+
const executed = window.filter((r) => r && r.kind === 'executed');
|
|
50
|
+
return {
|
|
51
|
+
total: window.length,
|
|
52
|
+
passed: executed.filter((r) => r.verified).length,
|
|
53
|
+
failed: executed.filter((r) => !r.verified).length,
|
|
54
|
+
attested: window.filter((r) => r && r.kind === 'attested').length
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Build the work report for records since the last cursor (or all records).
|
|
60
|
+
*
|
|
61
|
+
* @param {{ since?: string, peek?: boolean, projectRoot?: string }} [opts]
|
|
62
|
+
* @returns {WorkReport}
|
|
63
|
+
*/
|
|
64
|
+
function report(opts = {}) {
|
|
65
|
+
const projectRoot = path.resolve(opts.projectRoot || process.cwd());
|
|
66
|
+
const since = opts.since === 'all' ? 'all' : 'last';
|
|
67
|
+
const peek = Boolean(opts.peek);
|
|
68
|
+
|
|
69
|
+
const records = evidence.read(projectRoot); // oldest first (append order)
|
|
70
|
+
const cursor = readCursor(projectRoot);
|
|
71
|
+
const lastTs = cursor.lastTs || null;
|
|
72
|
+
|
|
73
|
+
const window = since === 'all'
|
|
74
|
+
? records.slice()
|
|
75
|
+
: records.filter((r) => r && r.timestamp && (!lastTs || r.timestamp > lastTs));
|
|
76
|
+
|
|
77
|
+
const attention = window.filter((r) => r && r.kind === 'executed' && !r.verified);
|
|
78
|
+
const newest = window.length ? window[window.length - 1].timestamp : lastTs;
|
|
79
|
+
|
|
80
|
+
if (!peek && newest && newest !== lastTs) {
|
|
81
|
+
writeCursor(projectRoot, { lastTs: newest });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
since,
|
|
86
|
+
peek,
|
|
87
|
+
records: window,
|
|
88
|
+
attention,
|
|
89
|
+
summary: summarize(window),
|
|
90
|
+
cursor: { previous: lastTs, next: newest || null }
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function describeRecord(record) {
|
|
95
|
+
const label = record.claim || record.command || '(unlabeled)';
|
|
96
|
+
if (record.kind === 'attested') {
|
|
97
|
+
return ` ATTESTED ${record.substep || '-'} ${label}`;
|
|
98
|
+
}
|
|
99
|
+
const verdict = record.verified ? 'PASS' : 'FAIL';
|
|
100
|
+
return ` ${verdict} ${record.substep || '-'} exit ${record.exit_code} ${label}`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function render(result) {
|
|
104
|
+
const lines = [];
|
|
105
|
+
lines.push('Godpowers Work Report');
|
|
106
|
+
lines.push('');
|
|
107
|
+
if (result.records.length === 0) {
|
|
108
|
+
lines.push(result.since === 'all'
|
|
109
|
+
? 'No verification records yet.'
|
|
110
|
+
: 'Nothing new since the last report.');
|
|
111
|
+
return lines.join('\n');
|
|
112
|
+
}
|
|
113
|
+
lines.push(`Since: ${result.since}${result.peek ? ' (peek, cursor not advanced)' : ''}`);
|
|
114
|
+
lines.push('');
|
|
115
|
+
lines.push('Play-by-play:');
|
|
116
|
+
for (const record of result.records) {
|
|
117
|
+
lines.push(describeRecord(record));
|
|
118
|
+
}
|
|
119
|
+
if (result.attention.length > 0) {
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push('Attention (unverified):');
|
|
122
|
+
for (const record of result.attention) {
|
|
123
|
+
lines.push(describeRecord(record));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const s = result.summary;
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push(`Summary: ${s.passed} passed, ${s.failed} failed, ${s.attested} attested (${s.total} record(s))`);
|
|
129
|
+
return lines.join('\n');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = {
|
|
133
|
+
report,
|
|
134
|
+
render,
|
|
135
|
+
reportsDir,
|
|
136
|
+
cursorPath
|
|
137
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "3.0
|
|
4
|
-
"description": "AI-powered development system:
|
|
3
|
+
"version": "3.11.0",
|
|
4
|
+
"description": "AI-powered development system: 120 slash commands and 40 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
|
},
|
|
@@ -10,8 +10,8 @@ Show:
|
|
|
10
10
|
- detected resume or project mode in plain language
|
|
11
11
|
- a compact "Next step" card before each visible phase or tier sub-step
|
|
12
12
|
- a compact "Step result" card after each visible phase or tier sub-step
|
|
13
|
-
-
|
|
14
|
-
|
|
13
|
+
- concise notes for automatic work that changes artifacts, review items, or
|
|
14
|
+
recommendations, with details written to logs
|
|
15
15
|
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
16
16
|
unexplained "arc" in visible output
|
|
17
17
|
- PRD and roadmap visibility in status and closeout blocks when artifacts
|
|
@@ -19,9 +19,8 @@ Show:
|
|
|
19
19
|
- short progress updates for phases, commands, validations, and file edits
|
|
20
20
|
- concise validation summaries instead of full command noise when possible
|
|
21
21
|
- final changed paths, validation results, and completion or pause status
|
|
22
|
-
- final
|
|
23
|
-
|
|
24
|
-
recommended next action
|
|
22
|
+
- final compact action brief from disk, with `/god-status --full` offered for
|
|
23
|
+
the complete dashboard
|
|
25
24
|
|
|
26
25
|
Hide:
|
|
27
26
|
- raw spawn input
|
|
@@ -272,15 +271,11 @@ Periodic hygiene:
|
|
|
272
271
|
Open items:
|
|
273
272
|
1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
|
|
274
273
|
|
|
275
|
-
Next:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
1. Review status: /god-status
|
|
281
|
-
2. Continue work: /god-next or describe the next intent
|
|
282
|
-
3. Commit release-ready changes: stage only the intended files, then commit
|
|
283
|
-
4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
|
|
274
|
+
Next commands:
|
|
275
|
+
- /god-status --full: Review the complete dashboard and proactive checks.
|
|
276
|
+
- /god-next: Continue with the safest state-derived next step.
|
|
277
|
+
- stage only the intended files, then commit: Commit release-ready changes.
|
|
278
|
+
- provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
|
|
284
279
|
```
|
|
285
280
|
|
|
286
281
|
If the run edited code but did not stage or commit, the completion block must
|
|
@@ -243,20 +243,20 @@ Use this trigger map:
|
|
|
243
243
|
|
|
244
244
|
| Trigger | Auto action | Visibility |
|
|
245
245
|
|---|---|---|
|
|
246
|
-
| `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` |
|
|
247
|
-
| code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout |
|
|
248
|
-
| durable artifact truth changed | run Pillars sync plan |
|
|
249
|
-
| AI tool instruction files changed | spawn or dry-run `god-context-writer` |
|
|
250
|
-
| `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` |
|
|
246
|
+
| `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` | log detail, concise note only when recommendation changes |
|
|
247
|
+
| code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout | concise sync note and log path |
|
|
248
|
+
| durable artifact truth changed | run Pillars sync plan | log detail, concise note only when pillar edits are proposed |
|
|
249
|
+
| AI tool instruction files changed | spawn or dry-run `god-context-writer` | concise note when files change |
|
|
250
|
+
| `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` | `Next commands:` |
|
|
251
251
|
| `DESIGN.md` or `PRODUCT.md` changed | spawn `god-design-reviewer` | gate card before propagation |
|
|
252
|
-
| docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` |
|
|
252
|
+
| docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` | concise note or `Next commands:` |
|
|
253
253
|
| frontend-visible files changed and a known URL exists | spawn `god-browser-tester` inside build, design, launch, harden, or explicit runtime workflows | runtime status card |
|
|
254
|
-
| frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL |
|
|
255
|
-
| security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` |
|
|
256
|
-
| dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` |
|
|
257
|
-
| host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` |
|
|
254
|
+
| frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL | `Next commands:` |
|
|
255
|
+
| security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` | `Next commands:` |
|
|
256
|
+
| dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` | `Next commands:` |
|
|
257
|
+
| host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` | `Next commands:` |
|
|
258
258
|
| user approves complex automation setup | spawn `god-automation-engineer` | approval card plus setup result |
|
|
259
|
-
| full project run complete or hygiene stale | suggest `/god-hygiene` |
|
|
259
|
+
| full project run complete or hygiene stale | suggest `/god-hygiene` | `Next commands:` |
|
|
260
260
|
|
|
261
261
|
Never use this matrix to auto-run Level 4 actions: deployed staging against a
|
|
262
262
|
guessed URL, production launch, provider dashboard access, broad dependency
|
|
@@ -265,8 +265,8 @@ git stage, commit, push, package, release, publish, schedule creation, routine
|
|
|
265
265
|
creation, background agent creation, API trigger creation, or CI workflow
|
|
266
266
|
creation without explicit user approval.
|
|
267
267
|
|
|
268
|
-
Every auto action must
|
|
269
|
-
|
|
268
|
+
Every auto action must either log details or emit a concise note when it
|
|
269
|
+
changes artifacts, review items, blockers, or the next recommendation.
|
|
270
270
|
|
|
271
271
|
## Detection-Driven Tier 1 Routing
|
|
272
272
|
|
|
@@ -487,12 +487,17 @@ requested or final sign-off begins.
|
|
|
487
487
|
5. Spawn the appropriate specialist agent in a fresh context
|
|
488
488
|
6. Verify their output exists on disk
|
|
489
489
|
7. Run have-nots check on the artifact and run `standards.gate-command` when configured
|
|
490
|
-
8.
|
|
490
|
+
8. For an executable-gated sub-step (build, deploy, harden), record executed
|
|
491
|
+
evidence with `npx godpowers verify "<cmd>" --substep <tier.substep>` and then
|
|
492
|
+
confirm `npx godpowers can-close --substep <tier.substep> --project=.` exits
|
|
493
|
+
zero before closing. Never advance the sub-step to done while can-close is red.
|
|
494
|
+
9. If pass and can-close is green: advance the sub-step to done via
|
|
495
|
+
`npx godpowers state advance`, sync CHECKPOINT.md, run the proactive
|
|
491
496
|
auto-invoke sweep, print the "Step result" card, then move to next sub-step
|
|
492
|
-
|
|
497
|
+
10. If fail and repairable: print the failed result card, then enter the
|
|
493
498
|
autonomous repair loop
|
|
494
|
-
|
|
495
|
-
|
|
499
|
+
11. If fail and human-only: pause with the smallest needed question
|
|
500
|
+
12. Repeat until all tiers complete and verification is green
|
|
496
501
|
```
|
|
497
502
|
|
|
498
503
|
## Specialist Agent Routing
|
|
@@ -640,18 +645,6 @@ After Launch completes, write a transition message:
|
|
|
640
645
|
```text
|
|
641
646
|
Godpowers project run complete.
|
|
642
647
|
|
|
643
|
-
Godpowers Dashboard
|
|
644
|
-
|
|
645
|
-
Source: runtime dashboard (lib/dashboard.js)
|
|
646
|
-
|
|
647
|
-
Current status:
|
|
648
|
-
State: complete
|
|
649
|
-
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
650
|
-
Step: <sub-step label> (step <n> of <total steps>)
|
|
651
|
-
Progress: <pct>% workflow progress (<done> of <total> tracked steps complete)
|
|
652
|
-
Worktree: <clean | modified files unstaged | staged changes | mixed>
|
|
653
|
-
Index: <untouched | staged files listed>
|
|
654
|
-
|
|
655
648
|
Action brief:
|
|
656
649
|
Next: <one command or user decision>
|
|
657
650
|
Why: <one sentence tied to disk state>
|
|
@@ -659,17 +652,6 @@ Action brief:
|
|
|
659
652
|
Attention: <none or top blockers>
|
|
660
653
|
Host guarantees: <full | degraded | unknown>
|
|
661
654
|
|
|
662
|
-
Planning visibility:
|
|
663
|
-
PRD: <done | pending | missing | deferred> <artifact path when present>
|
|
664
|
-
Roadmap: <done | pending | missing | deferred> <artifact path when present>
|
|
665
|
-
Current milestone: <roadmap milestone, tier, or next planning gate when known>
|
|
666
|
-
Completion basis: <state.json, PROGRESS.md, artifacts, or audit score source>
|
|
667
|
-
|
|
668
|
-
Deliverable progress:
|
|
669
|
-
Requirements: <done>/<total> done (<pct>%); <in-progress> in progress, <untouched> not started
|
|
670
|
-
Increments: <done> done, <building> building, <pending> pending
|
|
671
|
-
Ledger: .godpowers/REQUIREMENTS.md
|
|
672
|
-
|
|
673
655
|
What changed:
|
|
674
656
|
1. <highest-signal user-visible change>
|
|
675
657
|
2. <highest-signal user-visible change>
|
|
@@ -677,22 +659,6 @@ What changed:
|
|
|
677
659
|
Validation:
|
|
678
660
|
+ <command>: <result>
|
|
679
661
|
|
|
680
|
-
Proactive checks:
|
|
681
|
-
Checkpoint: <fresh | refreshed | stale>
|
|
682
|
-
Reviews: <none | N pending, suggest /god-review-changes>
|
|
683
|
-
Sync: <fresh | suggested | local helper ran>
|
|
684
|
-
Docs: <fresh | suggested | drift-check spawned>
|
|
685
|
-
Repo surface: <fresh | stale, suggest /god-doctor>
|
|
686
|
-
Host: <full | degraded | unknown>
|
|
687
|
-
Dogfood: <not-run | pass | fail | suggest /god-dogfood>
|
|
688
|
-
Runtime: <not-applicable | suggested | browser test spawned>
|
|
689
|
-
Security: <clear | suggested | harden spawned>
|
|
690
|
-
Dependencies: <clear | suggested | deps audit spawned>
|
|
691
|
-
Hygiene: <fresh | suggest /god-hygiene>
|
|
692
|
-
|
|
693
|
-
Open items:
|
|
694
|
-
1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
|
|
695
|
-
|
|
696
662
|
Project is now in steady state. From here, ongoing work uses these workflows:
|
|
697
663
|
|
|
698
664
|
Adding features: /god-feature
|
|
@@ -709,21 +675,18 @@ Periodic hygiene:
|
|
|
709
675
|
Health check: /god-hygiene (combines audit + deps + docs)
|
|
710
676
|
Deliverable status: /god-progress (requirements + increments done/left)
|
|
711
677
|
|
|
712
|
-
Next:
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
1. Review status: /god-status (pipeline) or /god-progress (deliverables)
|
|
718
|
-
2. Continue work: /god-next or describe the next intent
|
|
719
|
-
3. Commit release-ready changes: stage only the intended files, then commit
|
|
720
|
-
4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
|
|
678
|
+
Next commands:
|
|
679
|
+
- /god-status --full: Review the complete dashboard and proactive checks.
|
|
680
|
+
- /god-progress: Review deliverable progress.
|
|
681
|
+
- /god-next: Continue with the safest state-derived next step.
|
|
682
|
+
- provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
|
|
721
683
|
```
|
|
722
684
|
|
|
723
685
|
Generate the dashboard with `lib/dashboard.compute(projectRoot)` and
|
|
724
|
-
`lib/dashboard.render(result)` when the runtime bundle is
|
|
725
|
-
runtime module cannot be loaded,
|
|
726
|
-
`
|
|
686
|
+
`lib/dashboard.render(result, { brief: true })` when the runtime bundle is
|
|
687
|
+
available. If the runtime module cannot be loaded, use a manual disk scan
|
|
688
|
+
quietly and suggest `/god-doctor` only when the fallback changes the next
|
|
689
|
+
recommendation.
|
|
727
690
|
|
|
728
691
|
The dashboard `Progress` line is workflow progress only. Audit scores,
|
|
729
692
|
remediation scores, hygiene scores, and launch-readiness scores must be labeled
|
|
@@ -847,15 +810,14 @@ Show:
|
|
|
847
810
|
- concise phase status
|
|
848
811
|
- before each visible tier/sub-step, a short "what will happen" card
|
|
849
812
|
- after each visible tier/sub-step, a short "what happened" card
|
|
850
|
-
-
|
|
851
|
-
|
|
813
|
+
- concise notes for automatic work that changes artifacts, review items, or
|
|
814
|
+
recommendations, with details written to logs
|
|
852
815
|
- durable state detected from disk
|
|
853
816
|
- commands being run and whether they passed or failed
|
|
854
817
|
- scoped file changes
|
|
855
818
|
- final validation summary
|
|
856
|
-
- final
|
|
857
|
-
|
|
858
|
-
worktree/index state, and recommended next action
|
|
819
|
+
- final compact action brief from disk, with `/god-status --full` offered for
|
|
820
|
+
the complete dashboard
|
|
859
821
|
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
860
822
|
unexplained "arc" in visible output
|
|
861
823
|
- PRD and roadmap visibility when those artifacts exist or are expected
|
|
@@ -878,21 +840,17 @@ user-facing question. Do not expose the rule itself. Example: ask for
|
|
|
878
840
|
`STAGING_APP_URL=<deployed staging origin>` at final sign-off rather than
|
|
879
841
|
showing the Shipping Closure Protocol.
|
|
880
842
|
|
|
881
|
-
###
|
|
843
|
+
### Automatic Work Notes
|
|
882
844
|
|
|
883
845
|
Every automatic step that mutates state, writes artifacts, validates gates, or
|
|
884
|
-
spawns an agent must leave
|
|
846
|
+
spawns an agent must leave an accountable trace in logs. Show a concise note in
|
|
847
|
+
the transcript only when artifacts changed, review items were created, blockers
|
|
848
|
+
appeared, or the recommendation changed.
|
|
885
849
|
|
|
886
850
|
Use this shape:
|
|
887
851
|
|
|
888
852
|
```
|
|
889
|
-
|
|
890
|
-
Trigger: <event that caused the automatic step>
|
|
891
|
-
Agent: <agent name, or none, local runtime only>
|
|
892
|
-
Local syncs:
|
|
893
|
-
+ <helper>: <result>
|
|
894
|
-
Artifacts: <changed files, no-op, or deferred>
|
|
895
|
-
Log: <path, or none>
|
|
853
|
+
Synced project artifacts after the change. Details were written to .godpowers/SYNC-LOG.md.
|
|
896
854
|
```
|
|
897
855
|
|
|
898
856
|
Required auto-invoked cards:
|