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.
Files changed (65) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +166 -0
  3. package/README.md +103 -8
  4. package/RELEASE.md +48 -50
  5. package/SKILL.md +9 -1
  6. package/agents/god-design-reviewer.md +6 -6
  7. package/agents/god-designer.md +1 -1
  8. package/agents/god-executor.md +23 -0
  9. package/agents/god-quality-reviewer.md +12 -1
  10. package/agents/god-spec-reviewer.md +10 -0
  11. package/bin/install.js +137 -655
  12. package/extensions/data-pack/manifest.yaml +1 -1
  13. package/extensions/data-pack/package.json +1 -1
  14. package/extensions/launch-pack/README.md +1 -1
  15. package/extensions/launch-pack/manifest.yaml +1 -1
  16. package/extensions/launch-pack/package.json +1 -1
  17. package/extensions/security-pack/manifest.yaml +1 -1
  18. package/extensions/security-pack/package.json +1 -1
  19. package/fixtures/quick-proof/manifest.json +19 -0
  20. package/fixtures/quick-proof/project/.godpowers/prep/INITIAL-FINDINGS.md +5 -0
  21. package/fixtures/quick-proof/project/.godpowers/state.json +69 -0
  22. package/fixtures/quick-proof/project/README.md +5 -0
  23. package/fixtures/quick-proof/project/package.json +6 -0
  24. package/lib/agent-browser-driver.js +13 -13
  25. package/lib/agent-cache.js +8 -1
  26. package/lib/agent-refs.js +161 -0
  27. package/lib/budget.js +25 -11
  28. package/lib/events.js +11 -4
  29. package/lib/extension-authoring.js +27 -0
  30. package/lib/feature-awareness.js +24 -0
  31. package/lib/fs-async.js +28 -0
  32. package/lib/installer-args.js +99 -0
  33. package/lib/installer-core.js +345 -0
  34. package/lib/installer-files.js +80 -0
  35. package/lib/installer-runtimes.js +112 -0
  36. package/lib/intent.js +111 -16
  37. package/lib/quick-proof.js +153 -0
  38. package/lib/release-surface-sync.js +8 -1
  39. package/lib/repo-surface-sync.js +9 -2
  40. package/lib/review-required.js +2 -1
  41. package/lib/router.js +23 -3
  42. package/lib/skill-surface.js +42 -0
  43. package/lib/state-lock.js +10 -0
  44. package/lib/state.js +101 -8
  45. package/lib/workflow-runner.js +42 -5
  46. package/package.json +7 -3
  47. package/references/HAVE-NOTS.md +4 -3
  48. package/references/orchestration/GOD-MODE-RUNBOOK.md +273 -0
  49. package/routing/god-arch.yaml +1 -1
  50. package/routing/god-build.yaml +1 -1
  51. package/skills/god-add-backlog.md +1 -1
  52. package/skills/god-agent-audit.md +2 -2
  53. package/skills/god-build.md +5 -3
  54. package/skills/god-context-scan.md +2 -3
  55. package/skills/god-design.md +2 -2
  56. package/skills/god-doctor.md +2 -2
  57. package/skills/god-extension-info.md +1 -1
  58. package/skills/god-help.md +4 -3
  59. package/skills/god-mode.md +10 -266
  60. package/skills/god-org-context.md +1 -1
  61. package/skills/god-repair.md +3 -3
  62. package/skills/god-review.md +9 -0
  63. package/skills/god-stories.md +1 -1
  64. package/skills/god-test-extension.md +1 -1
  65. 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. Returns null if not initialized.
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
- return JSON.parse(fs.readFileSync(file, 'utf8'));
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
- * Write state.json to a project. Validates basic structure.
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 write(projectRoot, state) {
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
- * Initialize a new state.json for a project.
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 init(projectRoot, projectName, opts = {}) {
92
- const state = {
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
- return write(projectRoot, state);
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,
@@ -19,9 +19,9 @@
19
19
  *
20
20
  * Public API:
21
21
  * loadByName(workflowName, opts?) -> workflow object
22
- * plan(workflow, ctx?) -> { steps: [...], waves: [...], summary }
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: extractAgent(job.uses),
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
- const m = String(uses).match(/^([a-z][a-z0-9-]*)/);
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.6.24",
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/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-planning-systems.js && node scripts/test-feature-awareness.js && node scripts/test-repo-doc-sync.js && node scripts/test-repo-surface-sync.js && node scripts/test-automation-surface-sync.js && node scripts/test-host-capabilities.js && node scripts/test-extension-authoring.js && node scripts/test-dogfood-runner.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-automation-providers.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/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",
@@ -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: 6
593
+ - Tier 0 Orchestration: 10
594
594
  - Tier 1 PRD: 15
595
- - Tier 1 Architecture: 12
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: 146 named have-nots.**
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.
@@ -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:
@@ -11,7 +11,7 @@ prerequisites:
11
11
  auto-complete: /god-roadmap
12
12
  human-required: true
13
13
  - check: state:tier-2.repo.status == done
14
- auto-complete: /god-roadmap
14
+ auto-complete: /god-repo
15
15
  human-required: true
16
16
 
17
17
  execution:
@@ -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-review-backlog. Captured in .godpowers/backlog/BACKLOG.md.
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/*.md` against the agent contract:
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
- 37 agents audited
53
+ 40 agents audited
54
54
  0 errors, 2 warnings, 90 infos
55
55
 
56
56
  Errors:
@@ -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
- for state drift, or accept the new facts via `/god-checkpoint
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