godpowers 1.6.24 → 2.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/AGENTS.md +1 -1
- package/CHANGELOG.md +166 -0
- package/README.md +103 -8
- package/RELEASE.md +48 -50
- package/SKILL.md +9 -1
- package/agents/god-design-reviewer.md +6 -6
- package/agents/god-designer.md +1 -1
- package/agents/god-executor.md +23 -0
- package/agents/god-quality-reviewer.md +12 -1
- package/agents/god-spec-reviewer.md +10 -0
- package/bin/install.js +137 -655
- package/extensions/data-pack/manifest.yaml +1 -1
- package/extensions/data-pack/package.json +1 -1
- package/extensions/launch-pack/README.md +1 -1
- package/extensions/launch-pack/manifest.yaml +1 -1
- package/extensions/launch-pack/package.json +1 -1
- package/extensions/security-pack/manifest.yaml +1 -1
- package/extensions/security-pack/package.json +1 -1
- package/fixtures/quick-proof/manifest.json +19 -0
- package/fixtures/quick-proof/project/.godpowers/prep/INITIAL-FINDINGS.md +5 -0
- package/fixtures/quick-proof/project/.godpowers/state.json +69 -0
- package/fixtures/quick-proof/project/README.md +5 -0
- package/fixtures/quick-proof/project/package.json +6 -0
- package/lib/agent-browser-driver.js +13 -13
- package/lib/agent-cache.js +8 -1
- package/lib/agent-refs.js +161 -0
- package/lib/budget.js +25 -11
- package/lib/events.js +11 -4
- package/lib/extension-authoring.js +27 -0
- package/lib/feature-awareness.js +24 -0
- package/lib/fs-async.js +28 -0
- package/lib/installer-args.js +99 -0
- package/lib/installer-core.js +345 -0
- package/lib/installer-files.js +80 -0
- package/lib/installer-runtimes.js +112 -0
- package/lib/intent.js +111 -16
- package/lib/quick-proof.js +153 -0
- package/lib/release-surface-sync.js +8 -1
- package/lib/repo-surface-sync.js +9 -2
- package/lib/review-required.js +2 -1
- package/lib/router.js +23 -3
- package/lib/skill-surface.js +42 -0
- package/lib/state-lock.js +10 -0
- package/lib/state.js +101 -8
- package/lib/workflow-runner.js +42 -5
- package/package.json +7 -3
- package/references/HAVE-NOTS.md +4 -3
- package/references/orchestration/GOD-MODE-RUNBOOK.md +273 -0
- package/routing/god-arch.yaml +1 -1
- package/routing/god-build.yaml +1 -1
- package/skills/god-add-backlog.md +1 -1
- package/skills/god-agent-audit.md +2 -2
- package/skills/god-build.md +5 -3
- package/skills/god-context-scan.md +2 -3
- package/skills/god-design.md +2 -2
- package/skills/god-doctor.md +2 -2
- package/skills/god-extension-info.md +1 -1
- package/skills/god-help.md +4 -3
- package/skills/god-mode.md +10 -266
- package/skills/god-org-context.md +1 -1
- package/skills/god-repair.md +3 -3
- package/skills/god-review.md +9 -0
- package/skills/god-stories.md +1 -1
- package/skills/god-test-extension.md +1 -1
- package/skills/god-version.md +2 -2
package/lib/state.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
const fs = require('fs');
|
|
9
9
|
const path = require('path');
|
|
10
10
|
const crypto = require('crypto');
|
|
11
|
+
const asyncFs = require('./fs-async');
|
|
11
12
|
|
|
12
13
|
const STATE_VERSION = '1.0.0';
|
|
13
14
|
const COMPLETE_STATUSES = new Set(['done', 'imported', 'skipped', 'not-required']);
|
|
@@ -34,6 +35,22 @@ const SUBSTEP_LABELS = {
|
|
|
34
35
|
harden: 'Harden'
|
|
35
36
|
};
|
|
36
37
|
|
|
38
|
+
/**
|
|
39
|
+
* @typedef {Object} GodpowersState
|
|
40
|
+
* @property {string} $schema State schema URL.
|
|
41
|
+
* @property {string} version State schema version.
|
|
42
|
+
* @property {{ name: string, started?: string }} project Project identity.
|
|
43
|
+
* @property {Record<string, Record<string, Object>>} tiers Tier and sub-step state.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @typedef {Object} ProgressStep
|
|
48
|
+
* @property {string} tierKey Tier key such as `tier-1`.
|
|
49
|
+
* @property {string} subStepKey Sub-step key such as `prd`.
|
|
50
|
+
* @property {string} status Sub-step status.
|
|
51
|
+
* @property {number} ordinal One-based step position.
|
|
52
|
+
*/
|
|
53
|
+
|
|
37
54
|
function statePath(projectRoot) {
|
|
38
55
|
return path.join(projectRoot, '.godpowers', 'state.json');
|
|
39
56
|
}
|
|
@@ -57,18 +74,46 @@ function tierComparator(a, b) {
|
|
|
57
74
|
}
|
|
58
75
|
|
|
59
76
|
/**
|
|
60
|
-
* Read state.json from a project.
|
|
77
|
+
* Read state.json from a project.
|
|
78
|
+
*
|
|
79
|
+
* @param {string} projectRoot
|
|
80
|
+
* @returns {GodpowersState|null}
|
|
61
81
|
*/
|
|
62
82
|
function read(projectRoot) {
|
|
63
83
|
const file = statePath(projectRoot);
|
|
64
84
|
if (!fs.existsSync(file)) return null;
|
|
65
|
-
|
|
85
|
+
const raw = fs.readFileSync(file, 'utf8');
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(raw);
|
|
88
|
+
} catch (e) {
|
|
89
|
+
throw new Error(
|
|
90
|
+
`Corrupt state file at ${file}: ${e.message}. ` +
|
|
91
|
+
`Fix the JSON or remove the file to let Godpowers reinitialize it.`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
66
94
|
}
|
|
67
95
|
|
|
68
96
|
/**
|
|
69
|
-
*
|
|
97
|
+
* Async state.json reader for callers that should not block the event loop.
|
|
98
|
+
*
|
|
99
|
+
* @param {string} projectRoot
|
|
100
|
+
* @returns {Promise<GodpowersState|null>}
|
|
70
101
|
*/
|
|
71
|
-
function
|
|
102
|
+
async function readAsync(projectRoot) {
|
|
103
|
+
const file = statePath(projectRoot);
|
|
104
|
+
if (!(await asyncFs.exists(file))) return null;
|
|
105
|
+
const raw = await asyncFs.fs.readFile(file, 'utf8');
|
|
106
|
+
try {
|
|
107
|
+
return JSON.parse(raw);
|
|
108
|
+
} catch (e) {
|
|
109
|
+
throw new Error(
|
|
110
|
+
`Corrupt state file at ${file}: ${e.message}. ` +
|
|
111
|
+
`Fix the JSON or remove the file to let Godpowers reinitialize it.`
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function normalizeForWrite(state) {
|
|
72
117
|
if (!state || typeof state !== 'object') {
|
|
73
118
|
throw new Error('state must be an object');
|
|
74
119
|
}
|
|
@@ -78,6 +123,18 @@ function write(projectRoot, state) {
|
|
|
78
123
|
throw new Error('state.project.name is required');
|
|
79
124
|
}
|
|
80
125
|
if (!state.tiers) state.tiers = {};
|
|
126
|
+
return state;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Write state.json to a project. Validates basic structure.
|
|
131
|
+
*
|
|
132
|
+
* @param {string} projectRoot
|
|
133
|
+
* @param {GodpowersState} state
|
|
134
|
+
* @returns {GodpowersState}
|
|
135
|
+
*/
|
|
136
|
+
function write(projectRoot, state) {
|
|
137
|
+
normalizeForWrite(state);
|
|
81
138
|
|
|
82
139
|
const file = statePath(projectRoot);
|
|
83
140
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
@@ -86,10 +143,19 @@ function write(projectRoot, state) {
|
|
|
86
143
|
}
|
|
87
144
|
|
|
88
145
|
/**
|
|
89
|
-
*
|
|
146
|
+
* Async state.json writer with the same validation contract as write().
|
|
147
|
+
*
|
|
148
|
+
* @param {string} projectRoot
|
|
149
|
+
* @param {GodpowersState} state
|
|
150
|
+
* @returns {Promise<GodpowersState>}
|
|
90
151
|
*/
|
|
91
|
-
function
|
|
92
|
-
|
|
152
|
+
async function writeAsync(projectRoot, state) {
|
|
153
|
+
normalizeForWrite(state);
|
|
154
|
+
return asyncFs.writeJson(statePath(projectRoot), state);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function createInitialState(projectName, opts = {}) {
|
|
158
|
+
return {
|
|
93
159
|
$schema: 'https://godpowers.dev/schema/state.v1.json',
|
|
94
160
|
version: STATE_VERSION,
|
|
95
161
|
project: {
|
|
@@ -128,7 +194,17 @@ function init(projectRoot, projectName, opts = {}) {
|
|
|
128
194
|
'yolo-decisions': [],
|
|
129
195
|
...opts
|
|
130
196
|
};
|
|
131
|
-
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Initialize a new state.json for a project.
|
|
201
|
+
*/
|
|
202
|
+
function init(projectRoot, projectName, opts = {}) {
|
|
203
|
+
return write(projectRoot, createInitialState(projectName, opts));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
async function initAsync(projectRoot, projectName, opts = {}) {
|
|
207
|
+
return writeAsync(projectRoot, createInitialState(projectName, opts));
|
|
132
208
|
}
|
|
133
209
|
|
|
134
210
|
/**
|
|
@@ -147,6 +223,19 @@ function updateSubStep(projectRoot, tierKey, subStepKey, updates) {
|
|
|
147
223
|
return state.tiers[tierKey][subStepKey];
|
|
148
224
|
}
|
|
149
225
|
|
|
226
|
+
async function updateSubStepAsync(projectRoot, tierKey, subStepKey, updates) {
|
|
227
|
+
const state = await readAsync(projectRoot);
|
|
228
|
+
if (!state) throw new Error('state.json not found');
|
|
229
|
+
if (!state.tiers[tierKey]) throw new Error(`Tier not found: ${tierKey}`);
|
|
230
|
+
state.tiers[tierKey][subStepKey] = {
|
|
231
|
+
...(state.tiers[tierKey][subStepKey] || {}),
|
|
232
|
+
...updates,
|
|
233
|
+
updated: new Date().toISOString()
|
|
234
|
+
};
|
|
235
|
+
await writeAsync(projectRoot, state);
|
|
236
|
+
return state.tiers[tierKey][subStepKey];
|
|
237
|
+
}
|
|
238
|
+
|
|
150
239
|
/**
|
|
151
240
|
* Hash a file. Used for artifact-hash tracking.
|
|
152
241
|
*/
|
|
@@ -271,9 +360,13 @@ function renderProgressLine(summary) {
|
|
|
271
360
|
|
|
272
361
|
module.exports = {
|
|
273
362
|
read,
|
|
363
|
+
readAsync,
|
|
274
364
|
write,
|
|
365
|
+
writeAsync,
|
|
275
366
|
init,
|
|
367
|
+
initAsync,
|
|
276
368
|
updateSubStep,
|
|
369
|
+
updateSubStepAsync,
|
|
277
370
|
hashFile,
|
|
278
371
|
detectDrift,
|
|
279
372
|
statePath,
|
package/lib/workflow-runner.js
CHANGED
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Public API:
|
|
21
21
|
* loadByName(workflowName, opts?) -> workflow object
|
|
22
|
-
* plan(workflow, ctx?) ->
|
|
22
|
+
* plan(workflow, ctx?) -> WorkflowPlan
|
|
23
23
|
* writePlan(projectRoot, runId, plan) -> path
|
|
24
|
-
* readPlan(projectRoot, runId) -> plan | null
|
|
24
|
+
* readPlan(projectRoot, runId) -> serialized plan | null
|
|
25
25
|
* listWorkflows(opts?) -> [{ name, version, description, file }]
|
|
26
26
|
*/
|
|
27
27
|
|
|
@@ -29,6 +29,26 @@ const fs = require('fs');
|
|
|
29
29
|
const path = require('path');
|
|
30
30
|
|
|
31
31
|
const parser = require('./workflow-parser');
|
|
32
|
+
const asyncFs = require('./fs-async');
|
|
33
|
+
const agentRefs = require('./agent-refs');
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {Object} WorkflowPlanStep
|
|
37
|
+
* @property {string} jobKey Workflow job key.
|
|
38
|
+
* @property {string} agent Validated agent name.
|
|
39
|
+
* @property {string} agentRange SemVer range declared by the workflow.
|
|
40
|
+
* @property {string} agentContractVersion Runtime agent contract version.
|
|
41
|
+
* @property {string|null} tier Tier label such as `tier-2`.
|
|
42
|
+
* @property {string[]} needs Dependency job keys.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @typedef {Object} WorkflowPlan
|
|
47
|
+
* @property {{ name: string, version: string, description?: string }} workflow
|
|
48
|
+
* @property {WorkflowPlanStep[]} steps
|
|
49
|
+
* @property {string[][]} waves Parallel execution waves.
|
|
50
|
+
* @property {string} summary Human-readable plan summary.
|
|
51
|
+
*/
|
|
32
52
|
|
|
33
53
|
function workflowsDir(opts) {
|
|
34
54
|
if (opts && opts.dir) return opts.dir;
|
|
@@ -102,9 +122,12 @@ function plan(workflow, ctx = {}) {
|
|
|
102
122
|
for (const wave of waves) {
|
|
103
123
|
for (const jobKey of wave) {
|
|
104
124
|
const job = workflow.jobs[jobKey] || {};
|
|
125
|
+
const ref = agentRefs.assertAgentRef(job.uses);
|
|
105
126
|
steps.push({
|
|
106
127
|
jobKey,
|
|
107
|
-
agent:
|
|
128
|
+
agent: ref.agent,
|
|
129
|
+
agentRange: ref.range,
|
|
130
|
+
agentContractVersion: ref.contractVersion,
|
|
108
131
|
tier: job.tier != null ? `tier-${job.tier}` : null,
|
|
109
132
|
needs: parser.normalizeNeeds(job.needs),
|
|
110
133
|
uses: job.uses,
|
|
@@ -133,8 +156,7 @@ function plan(workflow, ctx = {}) {
|
|
|
133
156
|
|
|
134
157
|
function extractAgent(uses) {
|
|
135
158
|
if (!uses) return null;
|
|
136
|
-
|
|
137
|
-
return m ? m[1] : uses;
|
|
159
|
+
return agentRefs.parseAgentRef(uses).agent;
|
|
138
160
|
}
|
|
139
161
|
|
|
140
162
|
function formatSummary(workflow, waves, steps) {
|
|
@@ -169,6 +191,13 @@ function writePlan(projectRoot, runId, planObj) {
|
|
|
169
191
|
return file;
|
|
170
192
|
}
|
|
171
193
|
|
|
194
|
+
async function writePlanAsync(projectRoot, runId, planObj) {
|
|
195
|
+
const file = path.join(projectRoot, '.godpowers', 'runs', runId, 'plan.yaml');
|
|
196
|
+
await asyncFs.fs.mkdir(path.dirname(file), { recursive: true });
|
|
197
|
+
await asyncFs.fs.writeFile(file, serializePlan(planObj));
|
|
198
|
+
return file;
|
|
199
|
+
}
|
|
200
|
+
|
|
172
201
|
function serializePlan(p) {
|
|
173
202
|
// YAML-ish hand-roll, paired with our minimal parser
|
|
174
203
|
const lines = [];
|
|
@@ -214,12 +243,20 @@ function readPlan(projectRoot, runId) {
|
|
|
214
243
|
return fs.readFileSync(file, 'utf8');
|
|
215
244
|
}
|
|
216
245
|
|
|
246
|
+
async function readPlanAsync(projectRoot, runId) {
|
|
247
|
+
const file = path.join(projectRoot, '.godpowers', 'runs', runId, 'plan.yaml');
|
|
248
|
+
if (!(await asyncFs.exists(file))) return null;
|
|
249
|
+
return asyncFs.fs.readFile(file, 'utf8');
|
|
250
|
+
}
|
|
251
|
+
|
|
217
252
|
module.exports = {
|
|
218
253
|
workflowsDir,
|
|
219
254
|
listWorkflows,
|
|
220
255
|
loadByName,
|
|
221
256
|
plan,
|
|
222
257
|
writePlan,
|
|
258
|
+
writePlanAsync,
|
|
223
259
|
readPlan,
|
|
260
|
+
readPlanAsync,
|
|
224
261
|
serializePlan
|
|
225
262
|
};
|
package/package.json
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "AI-powered development system: 110 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
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
-
"test": "node scripts/
|
|
9
|
+
"test": "node scripts/run-tests.js",
|
|
10
10
|
"prepublishOnly": "npm run release:check",
|
|
11
11
|
"validate-skills": "node scripts/validate-skills.js",
|
|
12
12
|
"test:surface": "node scripts/test-doc-surface-counts.js",
|
|
13
|
+
"test:quick-proof": "node scripts/test-quick-proof.js",
|
|
14
|
+
"canary:adoption": "node scripts/run-adoption-canary.js",
|
|
15
|
+
"verify:published-install": "node scripts/verify-published-install.js",
|
|
13
16
|
"smoke": "bash scripts/smoke.sh",
|
|
14
17
|
"test:runtime": "node scripts/test-runtime.js",
|
|
15
18
|
"test:router": "node scripts/test-router.js",
|
|
@@ -21,7 +24,8 @@
|
|
|
21
24
|
"test:e2e": "node tests/integration/full-arc.test.js",
|
|
22
25
|
"test:audit": "npm audit --omit=dev && git diff --check && npm run test:surface",
|
|
23
26
|
"pack:check": "node scripts/check-package-contents.js",
|
|
24
|
-
"release:check": "npm test && npm run test:audit && npm run pack:check"
|
|
27
|
+
"release:check": "npm test && npm run test:audit && npm run pack:check",
|
|
28
|
+
"lint": "node scripts/static-check.js"
|
|
25
29
|
},
|
|
26
30
|
"keywords": [
|
|
27
31
|
"ai",
|
package/references/HAVE-NOTS.md
CHANGED
|
@@ -590,11 +590,12 @@ Updates applied without reading changelog for breaking changes. Fail.
|
|
|
590
590
|
## Reference Tally
|
|
591
591
|
|
|
592
592
|
- Universal: 12
|
|
593
|
-
- Tier 0 Orchestration:
|
|
593
|
+
- Tier 0 Orchestration: 10
|
|
594
594
|
- Tier 1 PRD: 15
|
|
595
|
-
- Tier 1 Architecture:
|
|
595
|
+
- Tier 1 Architecture: 13
|
|
596
596
|
- Tier 1 Roadmap: 10
|
|
597
597
|
- Tier 1 Stack: 5
|
|
598
|
+
- Tier 1 Domain Glossary: 5
|
|
598
599
|
- Tier 2 Repo: 8
|
|
599
600
|
- Tier 2 Build: 12
|
|
600
601
|
- Tier 3 Deploy: 8
|
|
@@ -607,7 +608,7 @@ Updates applied without reading changelog for breaking changes. Fail.
|
|
|
607
608
|
- Workflow Docs: 5
|
|
608
609
|
- Workflow Deps: 6
|
|
609
610
|
|
|
610
|
-
**Total:
|
|
611
|
+
**Total: 156 named have-nots.**
|
|
611
612
|
|
|
612
613
|
Each is grep-testable. Each is a documented failure mode. Together they form
|
|
613
614
|
the mechanical quality definition for Godpowers output.
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# God Mode Runbook
|
|
2
|
+
|
|
3
|
+
This reference contains the detailed transcript, flag, final sync, and completion contracts for `/god-mode`. The skill file remains the dispatch contract and points here for operational templates.
|
|
4
|
+
|
|
5
|
+
## User-Visible Transcript Contract
|
|
6
|
+
|
|
7
|
+
The God Mode transcript is an operator console, not a prompt debugger.
|
|
8
|
+
|
|
9
|
+
Show:
|
|
10
|
+
- detected resume or project mode in plain language
|
|
11
|
+
- a compact "Next step" card before each visible phase or tier sub-step
|
|
12
|
+
- a compact "Step result" card after each visible phase or tier sub-step
|
|
13
|
+
- every auto-invoked command, agent, and local runtime helper using an
|
|
14
|
+
`Auto-invoked:` or `Sync status:` card
|
|
15
|
+
- plain-language workflow names. Say "project run" or "workflow" instead of
|
|
16
|
+
unexplained "arc" in visible output
|
|
17
|
+
- PRD and roadmap visibility in status and closeout blocks when artifacts
|
|
18
|
+
exist or are expected
|
|
19
|
+
- short progress updates for phases, commands, validations, and file edits
|
|
20
|
+
- concise validation summaries instead of full command noise when possible
|
|
21
|
+
- final changed paths, validation results, and completion or pause status
|
|
22
|
+
- final Godpowers Dashboard from disk, including phase, tier, step, progress,
|
|
23
|
+
planning visibility, proactive checks, open items, worktree/index state, and
|
|
24
|
+
recommended next action
|
|
25
|
+
|
|
26
|
+
Hide:
|
|
27
|
+
- raw spawn input
|
|
28
|
+
- "Hard instructions" sections
|
|
29
|
+
- spawned-agent prompt text
|
|
30
|
+
- detailed handoff file contents
|
|
31
|
+
- system, developer, or AGENTS.md rule recitations
|
|
32
|
+
- complete file loadout lists
|
|
33
|
+
- internal routing metadata unless it directly affects a user decision
|
|
34
|
+
|
|
35
|
+
If an internal instruction must influence a pause, translate it into the
|
|
36
|
+
smallest user-facing question. For example, ask for
|
|
37
|
+
`STAGING_APP_URL=<deployed staging origin>` at final sign-off instead of
|
|
38
|
+
exposing the full Shipping Closure Protocol.
|
|
39
|
+
|
|
40
|
+
## Step Cards
|
|
41
|
+
|
|
42
|
+
Relay the orchestrator's step cards when present. If the orchestrator output is
|
|
43
|
+
missing them, synthesize them from disk state before continuing.
|
|
44
|
+
|
|
45
|
+
Before work starts:
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Next step
|
|
49
|
+
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
50
|
+
Step: <sub-step-label>
|
|
51
|
+
Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
|
|
52
|
+
Why this now: <one sentence>
|
|
53
|
+
What will happen:
|
|
54
|
+
1. <observable action>
|
|
55
|
+
2. <observable action>
|
|
56
|
+
Expected output: <artifact path or verification result>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
After work completes or pauses:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
Step result
|
|
63
|
+
Phase: <plain-language phase> (tier <human ordinal> of <human total>)
|
|
64
|
+
Step: <sub-step-label>
|
|
65
|
+
Progress: <pct>% (<done> of <total> steps complete; step <n> of <total>)
|
|
66
|
+
Result: <done | blocked | failed | skipped | imported>
|
|
67
|
+
What happened:
|
|
68
|
+
1. <observable action completed>
|
|
69
|
+
2. <artifact or verification result>
|
|
70
|
+
Next: <next command or pause question>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Pause Format (relay from orchestrator)
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
PAUSE: [one-sentence question]
|
|
77
|
+
|
|
78
|
+
Why only you can answer: [one sentence]
|
|
79
|
+
|
|
80
|
+
| Option | Tradeoff |
|
|
81
|
+
|--------|----------|
|
|
82
|
+
| A: ... | ... |
|
|
83
|
+
| B: ... | ... |
|
|
84
|
+
|
|
85
|
+
Default: If you say "go", I'll pick [X] because [Y].
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Flags
|
|
89
|
+
|
|
90
|
+
### --yolo
|
|
91
|
+
Pass through to orchestrator. Orchestrator picks defaults at every pause point
|
|
92
|
+
and logs decisions to `.godpowers/YOLO-DECISIONS.md`. Pillar sync proposals
|
|
93
|
+
generated from durable Godpowers artifact changes are auto-applied in this
|
|
94
|
+
mode and logged as YOLO decisions.
|
|
95
|
+
|
|
96
|
+
`--yolo` does not skip release-truth gates. If safe sync is unresolved, route
|
|
97
|
+
to `/god-reconcile Release Truth And Safe Sync`. If harden has unresolved
|
|
98
|
+
Critical findings, pause even under `--yolo`.
|
|
99
|
+
|
|
100
|
+
For brownfield and bluefield, `--yolo` still runs `/god-preflight` first when
|
|
101
|
+
`.godpowers/preflight/PREFLIGHT.md` is absent. The orchestrator then follows
|
|
102
|
+
the preflight report's safest recommended route automatically, logging that
|
|
103
|
+
choice to `.godpowers/YOLO-DECISIONS.md`. Preflight may only pause under
|
|
104
|
+
`--yolo` for Critical security findings or a contradiction that makes route
|
|
105
|
+
selection impossible.
|
|
106
|
+
|
|
107
|
+
### --conservative
|
|
108
|
+
Pass through. Orchestrator pauses at every tier boundary.
|
|
109
|
+
|
|
110
|
+
### --from=<tier>
|
|
111
|
+
Pass through. Orchestrator re-derives state from disk and starts from named tier.
|
|
112
|
+
|
|
113
|
+
### --audit
|
|
114
|
+
Pass through. Orchestrator skips building, runs god-auditor on existing artifacts.
|
|
115
|
+
|
|
116
|
+
### --dry-run
|
|
117
|
+
Pass through. Orchestrator plans but writes nothing.
|
|
118
|
+
|
|
119
|
+
### --with-hygiene
|
|
120
|
+
After Launch, run a post-launch hygiene pass: god-auditor + god-deps-auditor +
|
|
121
|
+
god-docs-writer verification. Catches pre-existing CVEs, doc drift, artifact
|
|
122
|
+
quality drift before declaring complete.
|
|
123
|
+
|
|
124
|
+
### --skip-hygiene
|
|
125
|
+
Default. Skip the hygiene pass. Use when iterating quickly.
|
|
126
|
+
|
|
127
|
+
## Mandatory final sync
|
|
128
|
+
|
|
129
|
+
Regardless of flags, `/god-mode` always runs `/god-sync` before declaring
|
|
130
|
+
complete. This ensures all 14 core artifact categories and local sync surfaces
|
|
131
|
+
are in a consistent state:
|
|
132
|
+
|
|
133
|
+
- 10 Tier 0-3 artifacts validated (have-nots passing)
|
|
134
|
+
- 4 capture artifacts noted as `not-yet-created` (graceful handling)
|
|
135
|
+
- repo-doc, repo-surface, feature awareness, source sync-back, host capability,
|
|
136
|
+
checkpoint, Pillars, and context refresh statuses reported
|
|
137
|
+
- SYNC-LOG.md updated with project-run completion entry
|
|
138
|
+
- state.json reflects final tier statuses
|
|
139
|
+
|
|
140
|
+
Under `--yolo`, the sync step auto-applies (no pause). Under
|
|
141
|
+
`--conservative`, it pauses for confirmation. Under `--with-hygiene`,
|
|
142
|
+
it runs alongside the hygiene pass.
|
|
143
|
+
|
|
144
|
+
Display this before the final completion block:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Sync status:
|
|
148
|
+
Trigger: /god-mode final sync
|
|
149
|
+
Agent: god-updater spawned
|
|
150
|
+
Local syncs:
|
|
151
|
+
+ feature-awareness: <recorded runtime features, refreshed context, or no-op>
|
|
152
|
+
+ reverse-sync: <counts and result>
|
|
153
|
+
+ repo-doc-sync: <refreshed repo docs, recommended god-docs-writer, or no-op>
|
|
154
|
+
+ repo-surface-sync: <checked structural surfaces, recommended scoped agents, or no-op>
|
|
155
|
+
+ pillars-sync: <counts and result>
|
|
156
|
+
+ checkpoint-sync: <created, updated, no-op, or skipped>
|
|
157
|
+
+ context-refresh: <spawned, no-op, or skipped>
|
|
158
|
+
Artifacts: <changed files or no-op>
|
|
159
|
+
Log: .godpowers/SYNC-LOG.md
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The sync step also reconciles native Pillars context. When `.godpowers`
|
|
163
|
+
artifacts create or change durable project truth, Godpowers maps those changes
|
|
164
|
+
to relevant pillar files through `lib/pillars.planArtifactSync`. Default mode
|
|
165
|
+
proposes pillar updates for review. `--yolo` applies them immediately and logs
|
|
166
|
+
the action to `.godpowers/YOLO-DECISIONS.md`.
|
|
167
|
+
|
|
168
|
+
When `/god-mode` resumes an existing `.godpowers` project, it auto-invokes
|
|
169
|
+
`lib/feature-awareness.run(projectRoot)` before the final sync report. This
|
|
170
|
+
keeps upgraded projects aware of new runtime features, current context fences,
|
|
171
|
+
and migration routes without rewriting user artifacts.
|
|
172
|
+
|
|
173
|
+
The mandatory final sync also receives repo documentation sync through
|
|
174
|
+
`/god-sync`. This keeps README badges, release surfaces, contribution guidance,
|
|
175
|
+
security policy checks, and Pillars context planning arc-ready before the
|
|
176
|
+
project run is declared complete.
|
|
177
|
+
|
|
178
|
+
The mandatory final sync also receives repo surface sync through `/god-sync`.
|
|
179
|
+
This keeps routes, packages, agent handoffs, workflow metadata, recipe routes,
|
|
180
|
+
extension packs, and release policy checks aligned before the project run is
|
|
181
|
+
declared complete.
|
|
182
|
+
|
|
183
|
+
If `/god-mode` resumes an existing `.godpowers` project that lacks Pillars,
|
|
184
|
+
it Pillar-izes the project before continuing. Existing `.godpowers` artifacts
|
|
185
|
+
become managed source references in the relevant `agents/*.md` files.
|
|
186
|
+
|
|
187
|
+
The sync step is what closes the loop between greenfield project-run creation and
|
|
188
|
+
the comprehensive 14-artifact reconciliation system. See
|
|
189
|
+
`docs/greenfield-coverage.md` for what's created when.
|
|
190
|
+
|
|
191
|
+
## Completion
|
|
192
|
+
|
|
193
|
+
When orchestrator returns "complete", display:
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
Godpowers project run complete.
|
|
197
|
+
|
|
198
|
+
Sync status:
|
|
199
|
+
Trigger: /god-mode final sync
|
|
200
|
+
Agent: god-updater spawned
|
|
201
|
+
Local syncs:
|
|
202
|
+
+ feature-awareness: <recorded runtime features, refreshed context, or no-op>
|
|
203
|
+
+ reverse-sync: <counts and result>
|
|
204
|
+
+ repo-doc-sync: <refreshed repo docs, recommended god-docs-writer, or no-op>
|
|
205
|
+
+ repo-surface-sync: <checked structural surfaces, recommended scoped agents, or no-op>
|
|
206
|
+
+ pillars-sync: <counts and result>
|
|
207
|
+
+ checkpoint-sync: <created, updated, no-op, or skipped>
|
|
208
|
+
+ context-refresh: <spawned, no-op, or skipped>
|
|
209
|
+
Artifacts: <changed files or no-op>
|
|
210
|
+
Log: .godpowers/SYNC-LOG.md
|
|
211
|
+
|
|
212
|
+
Current status:
|
|
213
|
+
State: complete
|
|
214
|
+
Progress: <pct>% (<done> of <total> steps complete; current step <n> of <total>)
|
|
215
|
+
Worktree: <clean | modified files unstaged | staged changes | mixed>
|
|
216
|
+
Index: <untouched | staged files listed>
|
|
217
|
+
|
|
218
|
+
Planning visibility:
|
|
219
|
+
PRD: <done | pending | missing | deferred> <artifact path when present>
|
|
220
|
+
Roadmap: <done | pending | missing | deferred> <artifact path when present>
|
|
221
|
+
Current milestone: <roadmap milestone, tier, or next planning gate when known>
|
|
222
|
+
Completion: <pct>% <brief basis, for example done steps over total tracked steps>
|
|
223
|
+
|
|
224
|
+
Artifacts on disk:
|
|
225
|
+
+ PRD .godpowers/prd/PRD.md
|
|
226
|
+
+ Architecture .godpowers/arch/ARCH.md
|
|
227
|
+
+ Roadmap .godpowers/roadmap/ROADMAP.md
|
|
228
|
+
+ Stack .godpowers/stack/DECISION.md
|
|
229
|
+
+ Repo .godpowers/repo/AUDIT.md
|
|
230
|
+
+ Build .godpowers/build/STATE.md
|
|
231
|
+
+ Deploy .godpowers/deploy/STATE.md
|
|
232
|
+
+ Observe .godpowers/observe/STATE.md
|
|
233
|
+
+ Launch .godpowers/launch/STATE.md
|
|
234
|
+
+ Harden .godpowers/harden/FINDINGS.md
|
|
235
|
+
|
|
236
|
+
Built. Tested. Shipped. Hardened.
|
|
237
|
+
|
|
238
|
+
Project is now in STEADY STATE. From here, use these workflows:
|
|
239
|
+
|
|
240
|
+
Adding features: /god-feature
|
|
241
|
+
Production bugs: /god-hotfix
|
|
242
|
+
Code cleanup: /god-refactor
|
|
243
|
+
Research questions: /god-spike
|
|
244
|
+
Post-incident: /god-postmortem
|
|
245
|
+
Framework upgrades: /god-upgrade
|
|
246
|
+
Documentation: /god-docs
|
|
247
|
+
Dependency updates: /god-update-deps
|
|
248
|
+
|
|
249
|
+
Periodic hygiene:
|
|
250
|
+
Quality audit: /god-audit
|
|
251
|
+
Health check: /god-hygiene
|
|
252
|
+
|
|
253
|
+
Open items:
|
|
254
|
+
1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
|
|
255
|
+
|
|
256
|
+
Next:
|
|
257
|
+
Recommended: <single safest command or decision>
|
|
258
|
+
Why: <one sentence tied to disk state>
|
|
259
|
+
|
|
260
|
+
Proposition:
|
|
261
|
+
1. Review status: /god-status
|
|
262
|
+
2. Continue work: /god-next or describe the next intent
|
|
263
|
+
3. Commit release-ready changes: stage only the intended files, then commit
|
|
264
|
+
4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
If the run edited code but did not stage or commit, the completion block must
|
|
268
|
+
say so. If unrelated or pre-existing worktree changes are present, do not imply
|
|
269
|
+
the worktree is clean. Recommend a scoped review or explicit staging path.
|
|
270
|
+
|
|
271
|
+
If the run is a focused brownfield/refactor workflow rather than a full greenfield
|
|
272
|
+
project run, adapt the same closeout shape and replace "Project is now in STEADY
|
|
273
|
+
STATE" with the actual disk-derived lifecycle and next route.
|
package/routing/god-arch.yaml
CHANGED
|
@@ -31,7 +31,7 @@ execution:
|
|
|
31
31
|
standards:
|
|
32
32
|
substitution-test: true
|
|
33
33
|
three-label-test: true
|
|
34
|
-
have-nots: [A-01, A-02, A-03, A-04, A-05, A-06, A-07, A-08, A-09, A-10, A-11, A-12]
|
|
34
|
+
have-nots: [A-01, A-02, A-03, A-04, A-05, A-06, A-07, A-08, A-09, A-10, A-11, A-12, A-13]
|
|
35
35
|
gate-on-failure: pause-for-user
|
|
36
36
|
|
|
37
37
|
success-path:
|
package/routing/god-build.yaml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: god-add-backlog
|
|
3
3
|
description: |
|
|
4
4
|
Add an idea to the backlog. Less urgent than a todo. Reviewed periodically
|
|
5
|
-
via /god-
|
|
5
|
+
via /god-add-backlog list. Captured in .godpowers/backlog/BACKLOG.md.
|
|
6
6
|
|
|
7
7
|
Triggers on: "god add backlog", "/god-add-backlog", "backlog this", "for later"
|
|
8
8
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: god-agent-audit
|
|
3
3
|
description: |
|
|
4
|
-
Validates every `agents
|
|
4
|
+
Validates every `agents/god-*.md` against the agent contract:
|
|
5
5
|
required frontmatter, recommended sections (Have-Nots, Inputs,
|
|
6
6
|
Outputs, Handoff), hand-off targets exist, no dual-ownership of
|
|
7
7
|
output paths. Lenient by design: most issues are warnings; only
|
|
@@ -50,7 +50,7 @@ opportunities, not failures.
|
|
|
50
50
|
```
|
|
51
51
|
Agent audit
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
40 agents audited
|
|
54
54
|
0 errors, 2 warnings, 90 infos
|
|
55
55
|
|
|
56
56
|
Errors:
|
package/skills/god-build.md
CHANGED
|
@@ -39,12 +39,14 @@ For each slice in the wave (parallel):
|
|
|
39
39
|
- The slice plan only (not the whole PLAN.md)
|
|
40
40
|
- Relevant ARCH context for this slice
|
|
41
41
|
- Stack DECISION
|
|
42
|
-
2. Wait for executor to complete (TDD enforced)
|
|
42
|
+
2. Wait for executor to complete (TDD and request-trace discipline enforced)
|
|
43
43
|
3. Spawn **god-spec-reviewer** in fresh context (independent of executor)
|
|
44
|
-
- If FAIL: return slice to god-executor with findings
|
|
44
|
+
- If FAIL: return slice to god-executor with findings, including any
|
|
45
|
+
scope creep or request-trace failures
|
|
45
46
|
- If PASS: proceed to stage 2
|
|
46
47
|
4. Spawn **god-quality-reviewer** in fresh context (independent)
|
|
47
|
-
- If FAIL: return slice to god-executor with findings
|
|
48
|
+
- If FAIL: return slice to god-executor with findings, including any
|
|
49
|
+
overcomplication, speculative abstraction, or unrelated cleanup
|
|
48
50
|
- If PASS: commit the slice atomically
|
|
49
51
|
5. Update `.godpowers/build/STATE.md`
|
|
50
52
|
|
|
@@ -60,9 +60,8 @@ called drifts.
|
|
|
60
60
|
last 3 events)
|
|
61
61
|
- **info**: claim mentions facts not in CHECKPOINT held-facts
|
|
62
62
|
(might be new, worth recording)
|
|
63
|
-
6. Suggested actions: `/god-locate` to re-orient, `/god-repair`
|
|
64
|
-
|
|
65
|
-
--record-facts`.
|
|
63
|
+
6. Suggested actions: `/god-locate` to re-orient, or `/god-repair`
|
|
64
|
+
to reconcile state drift and record the new facts.
|
|
66
65
|
|
|
67
66
|
### Output
|
|
68
67
|
|