godpowers 2.7.0 → 3.0.1

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 (115) hide show
  1. package/CHANGELOG.md +43 -1
  2. package/README.md +32 -31
  3. package/RELEASE.md +32 -42
  4. package/SKILL.md +4 -1
  5. package/agents/god-archaeologist.md +11 -0
  6. package/agents/god-architect.md +12 -0
  7. package/agents/god-auditor.md +13 -0
  8. package/agents/god-automation-engineer.md +13 -0
  9. package/agents/god-browser-tester.md +15 -0
  10. package/agents/god-context-writer.md +14 -0
  11. package/agents/god-coordinator.md +14 -0
  12. package/agents/god-debt-assessor.md +11 -0
  13. package/agents/god-debugger.md +13 -0
  14. package/agents/god-deploy-engineer.md +13 -0
  15. package/agents/god-deps-auditor.md +13 -0
  16. package/agents/god-design-reviewer.md +14 -0
  17. package/agents/god-designer.md +15 -0
  18. package/agents/god-docs-writer.md +13 -0
  19. package/agents/god-executor.md +14 -0
  20. package/agents/god-explorer.md +14 -0
  21. package/agents/god-greenfieldifier.md +13 -0
  22. package/agents/god-harden-auditor.md +12 -0
  23. package/agents/god-incident-investigator.md +13 -0
  24. package/agents/god-launch-strategist.md +14 -0
  25. package/agents/god-migration-strategist.md +13 -0
  26. package/agents/god-observability-engineer.md +14 -0
  27. package/agents/god-orchestrator.md +16 -2
  28. package/agents/god-org-context-loader.md +11 -0
  29. package/agents/god-planner.md +11 -0
  30. package/agents/god-pm.md +14 -0
  31. package/agents/god-quality-reviewer.md +12 -0
  32. package/agents/god-reconciler.md +14 -1
  33. package/agents/god-reconstructor.md +16 -0
  34. package/agents/god-repo-scaffolder.md +11 -0
  35. package/agents/god-retrospective.md +11 -0
  36. package/agents/god-roadmap-reconciler.md +42 -87
  37. package/agents/god-roadmap-updater.md +11 -0
  38. package/agents/god-roadmapper.md +12 -0
  39. package/agents/god-spec-reviewer.md +14 -0
  40. package/agents/god-spike-runner.md +13 -0
  41. package/agents/god-stack-selector.md +12 -0
  42. package/agents/god-standards-check.md +13 -0
  43. package/agents/god-storyteller.md +14 -0
  44. package/agents/god-updater.md +14 -0
  45. package/bin/install.js +5 -5
  46. package/extensions/data-pack/manifest.yaml +1 -1
  47. package/extensions/data-pack/package.json +1 -1
  48. package/extensions/launch-pack/manifest.yaml +1 -1
  49. package/extensions/launch-pack/package.json +1 -1
  50. package/extensions/security-pack/manifest.yaml +1 -1
  51. package/extensions/security-pack/package.json +1 -1
  52. package/lib/README.md +3 -0
  53. package/lib/agent-validator.js +67 -2
  54. package/lib/command-families.js +13 -8
  55. package/lib/install-profiles.js +39 -13
  56. package/lib/installer-args.js +1 -1
  57. package/lib/recipe-coverage-sync.js +1 -1
  58. package/lib/release-surface-sync.js +3 -0
  59. package/lib/repo-doc-sync.js +1 -1
  60. package/lib/repo-surface-sync.js +3 -3
  61. package/lib/route-quality-sync.js +2 -2
  62. package/lib/router.js +6 -0
  63. package/package.json +2 -2
  64. package/references/orchestration/GOD-ORCHESTRATOR-RUNBOOK.md +12 -3
  65. package/routing/god-capture.yaml +41 -0
  66. package/routing/god-extend.yaml +47 -0
  67. package/routing/god-fix.yaml +37 -0
  68. package/routing/god-lifecycle.yaml +1 -1
  69. package/routing/god-locate.yaml +1 -1
  70. package/routing/god-plan.yaml +45 -0
  71. package/routing/god-roadmap-check.yaml +2 -2
  72. package/routing/god-ship.yaml +39 -0
  73. package/skills/god-agent-audit.md +12 -9
  74. package/skills/god-arch.md +1 -3
  75. package/skills/god-build.md +1 -3
  76. package/skills/god-capture.md +45 -0
  77. package/skills/god-deploy.md +1 -3
  78. package/skills/god-design.md +9 -3
  79. package/skills/god-doctor.md +1 -1
  80. package/skills/god-extend.md +48 -0
  81. package/skills/god-feature.md +1 -3
  82. package/skills/god-fix.md +43 -0
  83. package/skills/god-harden.md +1 -3
  84. package/skills/god-hotfix.md +1 -3
  85. package/skills/god-launch.md +1 -3
  86. package/skills/god-lifecycle.md +6 -0
  87. package/skills/god-link.md +1 -3
  88. package/skills/god-locate.md +6 -0
  89. package/skills/god-migrate.md +1 -3
  90. package/skills/god-mode.md +5 -0
  91. package/skills/god-observe.md +1 -3
  92. package/skills/god-plan.md +51 -0
  93. package/skills/god-prd.md +1 -3
  94. package/skills/god-reconcile.md +4 -4
  95. package/skills/god-redo.md +1 -3
  96. package/skills/god-refactor.md +1 -3
  97. package/skills/god-repair.md +1 -3
  98. package/skills/god-repo.md +1 -3
  99. package/skills/god-restore.md +1 -3
  100. package/skills/god-roadmap-check.md +5 -3
  101. package/skills/god-roadmap.md +1 -3
  102. package/skills/god-rollback.md +1 -3
  103. package/skills/god-scan.md +1 -3
  104. package/skills/god-ship.md +44 -0
  105. package/skills/god-skip.md +1 -3
  106. package/skills/god-stack.md +1 -3
  107. package/skills/god-status.md +13 -8
  108. package/skills/god-story-build.md +1 -3
  109. package/skills/god-story-close.md +1 -3
  110. package/skills/god-story.md +1 -3
  111. package/skills/god-sync.md +3 -5
  112. package/skills/god-undo.md +1 -3
  113. package/skills/god-update-deps.md +1 -3
  114. package/skills/god-upgrade.md +1 -3
  115. package/skills/god-version.md +1 -1
package/bin/install.js CHANGED
@@ -95,7 +95,7 @@ function showHelp() {
95
95
  log(' --codebuddy Install for CodeBuddy');
96
96
  log(' --pi Install for Pi');
97
97
  log(' --all Install for all 15 runtimes');
98
- log(' --profile=<name> Install profile: core, builder, maintainer, suite, or full');
98
+ log(' --profile=<name> Install profile: core, builder, maintainer, suite, or full (default: core)');
99
99
  log(' --minimal Alias for --profile=core');
100
100
  log(' -u, --uninstall Uninstall Godpowers');
101
101
  log(' -h, --help Show this help message');
@@ -166,15 +166,15 @@ function runInstall(opts, srcDir) {
166
166
  log('');
167
167
  log(`\x1b[36mProfile:\x1b[0m ${describeProfiles(opts.profile)}`);
168
168
  log(`\x1b[36mInstalled:\x1b[0m`);
169
- log(` ${surface.skills} slash commands (try: /god-mode, /god-next, /god-status, /god-progress)`);
169
+ log(` ${surface.skills} slash commands (try: /god, /god-plan, /god-status, /god-mode)`);
170
170
  log(` ${surface.agents} specialist agents`);
171
171
  log(' Templates and references for artifact discipline');
172
172
  log('');
173
173
  log(`\x1b[36mNext steps:\x1b[0m`);
174
174
  log(' 1. Open your AI coding tool in any project directory');
175
- log(` 2. Type: \x1b[36m/god-mode\x1b[0m for the full autonomous project run`);
176
- log(` Or: \x1b[36m/god-next\x1b[0m to see what to run next`);
177
- log(` Or: \x1b[36m/god-init\x1b[0m to start a new project`);
175
+ log(` 2. Type: \x1b[36m/god\x1b[0m for the front door`);
176
+ log(` Or: \x1b[36m/god-plan\x1b[0m to start planning`);
177
+ log(` Or: \x1b[36m/god-mode\x1b[0m for the full autonomous project run`);
178
178
  log('');
179
179
  log(`\x1b[36mDocs:\x1b[0m ${identity.HOMEPAGE_URL}`);
180
180
  log('');
@@ -9,7 +9,7 @@ metadata:
9
9
  without SLOs, ETL without idempotency.
10
10
 
11
11
  engines:
12
- godpowers: ">=2.0.0 <3.0.0"
12
+ godpowers: ">=2.0.0 <4.0.0"
13
13
 
14
14
  provides:
15
15
  agents:
@@ -37,6 +37,6 @@
37
37
  "README.md"
38
38
  ],
39
39
  "peerDependencies": {
40
- "godpowers": ">=2.0.0 <3.0.0"
40
+ "godpowers": ">=2.0.0 <4.0.0"
41
41
  }
42
42
  }
@@ -9,7 +9,7 @@ metadata:
9
9
  god-launch-strategist with channel expertise.
10
10
 
11
11
  engines:
12
- godpowers: ">=2.0.0 <3.0.0"
12
+ godpowers: ">=2.0.0 <4.0.0"
13
13
 
14
14
  provides:
15
15
  agents:
@@ -36,6 +36,6 @@
36
36
  "README.md"
37
37
  ],
38
38
  "peerDependencies": {
39
- "godpowers": ">=2.0.0 <3.0.0"
39
+ "godpowers": ">=2.0.0 <4.0.0"
40
40
  }
41
41
  }
@@ -8,7 +8,7 @@ metadata:
8
8
  Layers on top of god-harden-auditor with regulation-specific checks.
9
9
 
10
10
  engines:
11
- godpowers: ">=2.0.0 <3.0.0"
11
+ godpowers: ">=2.0.0 <4.0.0"
12
12
 
13
13
  provides:
14
14
  agents:
@@ -37,6 +37,6 @@
37
37
  "README.md"
38
38
  ],
39
39
  "peerDependencies": {
40
- "godpowers": ">=2.0.0 <3.0.0"
40
+ "godpowers": ">=2.0.0 <4.0.0"
41
41
  }
42
42
  }
package/lib/README.md CHANGED
@@ -59,8 +59,10 @@ package-level integrations.
59
59
 
60
60
  | Module | Purpose |
61
61
  |--------|---------|
62
+ | `artifact-map.js` | Centralize canonical artifact paths for dashboards, gates, and helpers. |
62
63
  | `artifact-linter.js` | Check artifacts for required labels, evidence, and domain precision. |
63
64
  | `artifact-diff.js` | Compare artifact changes for review and release workflows. |
65
+ | `gate.js` | Run executable artifact gates for Phase 1 tier completion checks. |
64
66
  | `have-nots-validator.js` | Check artifacts against known failure modes. |
65
67
  | `meta-linter.js` | Validate Godpowers documentation and skill metadata. |
66
68
  | `story-validator.js` | Validate story artifacts and story lifecycle state. |
@@ -108,6 +110,7 @@ package-level integrations.
108
110
  | `installer-core.js` | Install and uninstall the Godpowers surface for each runtime. |
109
111
  | `installer-files.js` | File-copy helpers shared by the installer and its tests. |
110
112
  | `installer-args.js` | Parse `bin/install.js` arguments and subcommands. |
113
+ | `cli-dispatch.js` | Dispatch local CLI helper commands such as status, quick-proof, gate, dogfood, and extension-scaffold. |
111
114
  | `install-profiles.js` | Select smaller role-specific slash-command install surfaces. |
112
115
  | `installer-runtimes.js` | Map supported runtimes to their config directories. |
113
116
  | `package-identity.js` | Centralize package name, version, repository, docs, and command identity. |
@@ -22,6 +22,7 @@ const frontmatter = require('./frontmatter');
22
22
 
23
23
  const REQUIRED_FRONTMATTER = ['name', 'description'];
24
24
  const RECOMMENDED_FRONTMATTER = ['tools'];
25
+ const STRUCTURED_CONTRACT_FRONTMATTER = ['inputs', 'outputs', 'gates', 'handoff'];
25
26
  const RECOMMENDED_SECTIONS = ['Have-Nots', 'Inputs', 'Outputs', 'Handoff'];
26
27
 
27
28
  /**
@@ -68,6 +69,7 @@ function parseAgentFile(filePath) {
68
69
  */
69
70
  function validateAgent(agent, opts = {}) {
70
71
  const findings = [];
72
+ const contractSeverity = opts.contractSeverity || 'info';
71
73
 
72
74
  // Required frontmatter
73
75
  for (const field of REQUIRED_FRONTMATTER) {
@@ -93,6 +95,30 @@ function validateAgent(agent, opts = {}) {
93
95
  }
94
96
  }
95
97
 
98
+ // Structured contract frontmatter
99
+ for (const field of STRUCTURED_CONTRACT_FRONTMATTER) {
100
+ const value = agent.frontmatter[field];
101
+ if (!value) {
102
+ findings.push({
103
+ severity: contractSeverity,
104
+ kind: 'missing-contract-frontmatter',
105
+ agent: agent.name,
106
+ field,
107
+ message: `Missing contract frontmatter field: \`${field}\``
108
+ });
109
+ continue;
110
+ }
111
+ if (!Array.isArray(value) || value.length === 0 || value.some(item => typeof item !== 'string' || !item.trim())) {
112
+ findings.push({
113
+ severity: contractSeverity,
114
+ kind: 'invalid-contract-frontmatter',
115
+ agent: agent.name,
116
+ field,
117
+ message: `Contract frontmatter field \`${field}\` must be a non-empty string array.`
118
+ });
119
+ }
120
+ }
121
+
96
122
  // Recommended sections (case-insensitive substring match)
97
123
  const sectionTitles = Object.keys(agent.sections).map(s => s.toLowerCase());
98
124
  for (const section of RECOMMENDED_SECTIONS) {
@@ -114,6 +140,15 @@ function validateAgent(agent, opts = {}) {
114
140
  return findings;
115
141
  }
116
142
 
143
+ function hasStructuredContract(agent) {
144
+ return STRUCTURED_CONTRACT_FRONTMATTER.every(field => {
145
+ const value = agent.frontmatter[field];
146
+ return Array.isArray(value) &&
147
+ value.length > 0 &&
148
+ value.every(item => typeof item === 'string' && item.trim());
149
+ });
150
+ }
151
+
117
152
  /**
118
153
  * Extract claimed hand-off targets (other agents this agent spawns).
119
154
  */
@@ -133,11 +168,33 @@ function findHandoffTargets(agent) {
133
168
  return [...targets];
134
169
  }
135
170
 
171
+ function extractPathClaims(text) {
172
+ const paths = new Set();
173
+ const dotPathRegex = /\.godpowers\/[\w\/.-]+(?:\.(?:md|json|jsonl|yaml))?/g;
174
+ let m;
175
+ while ((m = dotPathRegex.exec(text)) !== null) {
176
+ paths.add(m[0]);
177
+ }
178
+ const rootRegex = /\b[A-Z]+\.md\b/g;
179
+ while ((m = rootRegex.exec(text)) !== null) {
180
+ paths.add(m[0]);
181
+ }
182
+ return [...paths];
183
+ }
184
+
136
185
  /**
137
186
  * Extract output paths the agent claims to write.
138
187
  */
139
188
  function findOutputPaths(agent) {
140
189
  const paths = new Set();
190
+ if (Array.isArray(agent.frontmatter.outputs)) {
191
+ for (const output of agent.frontmatter.outputs) {
192
+ if (typeof output !== 'string') continue;
193
+ for (const out of extractPathClaims(output)) paths.add(out);
194
+ }
195
+ return [...paths];
196
+ }
197
+
141
198
  const text = agent.raw;
142
199
 
143
200
  // .godpowers/*.md or .godpowers/*.json
@@ -218,11 +275,15 @@ function auditAll(projectRoot, opts = {}) {
218
275
  }
219
276
  const files = fs.readdirSync(agentsDir).filter(f => /^god-.*\.md$/.test(f));
220
277
  const agents = files.map(f => parseAgentFile(path.join(agentsDir, f)));
278
+ const structuredContractCount = agents.filter(hasStructuredContract).length;
279
+ const contractWarningThreshold = opts.contractWarningThreshold || 20;
280
+ const contractSeverity = opts.contractSeverity ||
281
+ (structuredContractCount >= contractWarningThreshold ? 'warning' : 'info');
221
282
 
222
283
  const allFindings = [];
223
284
  const results = [];
224
285
  for (const agent of agents) {
225
- const f = validateAgent(agent, opts);
286
+ const f = validateAgent(agent, { ...opts, contractSeverity });
226
287
  results.push({ agent: agent.name, findings: f });
227
288
  allFindings.push(...f);
228
289
  }
@@ -235,7 +296,9 @@ function auditAll(projectRoot, opts = {}) {
235
296
  warnings: allFindings.filter(f => f.severity === 'warning').length,
236
297
  infos: allFindings.filter(f => f.severity === 'info').length,
237
298
  crossFindings,
238
- agentCount: agents.length
299
+ agentCount: agents.length,
300
+ structuredContractCount,
301
+ contractWarningThreshold
239
302
  };
240
303
 
241
304
  return { results, summary, allFindings };
@@ -248,7 +311,9 @@ module.exports = {
248
311
  findOutputPaths,
249
312
  crossValidate,
250
313
  auditAll,
314
+ hasStructuredContract,
251
315
  REQUIRED_FRONTMATTER,
252
316
  RECOMMENDED_FRONTMATTER,
317
+ STRUCTURED_CONTRACT_FRONTMATTER,
253
318
  RECOMMENDED_SECTIONS
254
319
  };
@@ -17,6 +17,7 @@ const COMMAND_FAMILIES = [
17
17
  '/god',
18
18
  '/god-init',
19
19
  '/god-mode',
20
+ '/god-plan',
20
21
  '/god-explore',
21
22
  '/god-discuss',
22
23
  '/god-list-assumptions',
@@ -42,8 +43,6 @@ const COMMAND_FAMILIES = [
42
43
  '/god-status',
43
44
  '/god-next',
44
45
  '/god-progress',
45
- '/god-lifecycle',
46
- '/god-locate',
47
46
  '/god-resume-work',
48
47
  '/god-pause-work'
49
48
  ]
@@ -54,6 +53,7 @@ const COMMAND_FAMILIES = [
54
53
  purpose: 'Plan, implement, test, and ship product work.',
55
54
  commands: [
56
55
  '/god-build',
56
+ '/god-fix',
57
57
  '/god-feature',
58
58
  '/god-story',
59
59
  '/god-stories',
@@ -91,6 +91,7 @@ const COMMAND_FAMILIES = [
91
91
  purpose: 'Deploy, observe, harden, launch, and respond in production.',
92
92
  commands: [
93
93
  '/god-deploy',
94
+ '/god-ship',
94
95
  '/god-observe',
95
96
  '/god-harden',
96
97
  '/god-launch',
@@ -128,6 +129,7 @@ const COMMAND_FAMILIES = [
128
129
  purpose: 'Save thoughts, tasks, backlog items, seeds, and learnings.',
129
130
  commands: [
130
131
  '/god-note',
132
+ '/god-capture',
131
133
  '/god-add-todo',
132
134
  '/god-check-todos',
133
135
  '/god-add-backlog',
@@ -158,6 +160,7 @@ const COMMAND_FAMILIES = [
158
160
  purpose: 'Install, inspect, test, remove, or author extension packs.',
159
161
  commands: [
160
162
  '/god-extension-scaffold',
163
+ '/god-extend',
161
164
  '/god-extension-add',
162
165
  '/god-extension-list',
163
166
  '/god-extension-info',
@@ -204,7 +207,9 @@ const COMMAND_FAMILIES = [
204
207
  purpose: 'Deprecated full-profile commands kept for backward compatibility.',
205
208
  visibility: 'hidden',
206
209
  commands: [
207
- '/god-roadmap-check'
210
+ '/god-roadmap-check',
211
+ '/god-lifecycle',
212
+ '/god-locate'
208
213
  ]
209
214
  }
210
215
  ];
@@ -212,8 +217,8 @@ const COMMAND_FAMILIES = [
212
217
  const STATUS_VIEWS = [
213
218
  { id: 'overview', command: '/god-status', label: 'Overview', purpose: 'Operational state, proactive checks, and blockers.' },
214
219
  { id: 'progress', command: '/god-progress', label: 'Progress', purpose: 'Requirement and roadmap increment completion.' },
215
- { id: 'lifecycle', command: '/god-lifecycle', label: 'Lifecycle', purpose: 'Project phase and fitting workflows.' },
216
- { id: 'locate', command: '/god-locate', label: 'Locate', purpose: 'Resume orientation from checkpoint and disk state.' },
220
+ { id: 'lifecycle', command: '/god-status --lifecycle', label: 'Lifecycle', purpose: 'Project phase and fitting workflows.' },
221
+ { id: 'locate', command: '/god-status --locate', label: 'Locate', purpose: 'Resume orientation from checkpoint and disk state.' },
217
222
  { id: 'next', command: '/god-next', label: 'Next', purpose: 'Single recommended command with reason.' }
218
223
  ];
219
224
 
@@ -275,11 +280,11 @@ const TRIGGER_PRECEDENCE = {
275
280
  reason: 'Progress answers deliverables while status answers operational state.'
276
281
  },
277
282
  'where am i': {
278
- default: '/god-lifecycle',
283
+ default: '/god-status --lifecycle',
279
284
  conditional: [
280
- { command: '/god-locate', when: 'checkpoint-or-handoff-exists', reason: 'Resume artifacts exist on disk.' }
285
+ { command: '/god-status --locate', when: 'checkpoint-or-handoff-exists', reason: 'Resume artifacts exist on disk.' }
281
286
  ],
282
- reason: 'Lifecycle explains the phase while locate orients a resumed session.'
287
+ reason: 'Status flags explain the phase or orient a resumed session.'
283
288
  }
284
289
  };
285
290
 
@@ -2,27 +2,33 @@ const COMMON = [
2
2
  'god',
3
3
  'god-help',
4
4
  'god-version',
5
- 'god-next',
6
- 'god-status',
7
- 'god-progress',
8
- 'god-doctor',
9
- 'god-settings'
5
+ 'god-status'
10
6
  ];
11
7
 
12
8
  const PROFILE_SKILLS = {
13
9
  core: [
14
10
  ...COMMON,
15
11
  'god-init',
12
+ 'god-plan',
16
13
  'god-mode',
17
14
  'god-build',
15
+ 'god-fix',
18
16
  'god-review',
17
+ 'god-ship',
18
+ 'god-audit',
19
+ 'god-capture',
19
20
  'god-sync',
20
- 'god-quick',
21
- 'god-fast'
21
+ 'god-undo',
22
+ 'god-extend'
22
23
  ],
23
24
  builder: [
24
25
  ...COMMON,
26
+ 'god-next',
27
+ 'god-progress',
28
+ 'god-doctor',
29
+ 'god-settings',
25
30
  'god-init',
31
+ 'god-plan',
26
32
  'god-mode',
27
33
  'god-discuss',
28
34
  'god-explore',
@@ -35,6 +41,7 @@ const PROFILE_SKILLS = {
35
41
  'god-stack',
36
42
  'god-repo',
37
43
  'god-build',
44
+ 'god-fix',
38
45
  'god-add-tests',
39
46
  'god-feature',
40
47
  'god-story',
@@ -43,13 +50,28 @@ const PROFILE_SKILLS = {
43
50
  'god-story-verify',
44
51
  'god-story-close',
45
52
  'god-review',
53
+ 'god-ship',
54
+ 'god-audit',
55
+ 'god-capture',
46
56
  'god-test-runtime',
47
57
  'god-sync',
58
+ 'god-undo',
59
+ 'god-extend',
48
60
  'god-quick',
49
61
  'god-fast'
50
62
  ],
51
63
  maintainer: [
52
64
  ...COMMON,
65
+ 'god-next',
66
+ 'god-progress',
67
+ 'god-doctor',
68
+ 'god-settings',
69
+ 'god-audit',
70
+ 'god-fix',
71
+ 'god-ship',
72
+ 'god-capture',
73
+ 'god-undo',
74
+ 'god-extend',
53
75
  'god-hygiene',
54
76
  'god-update-deps',
55
77
  'god-docs',
@@ -61,7 +83,6 @@ const PROFILE_SKILLS = {
61
83
  'god-agent-audit',
62
84
  'god-context',
63
85
  'god-context-scan',
64
- 'god-locate',
65
86
  'god-scan',
66
87
  'god-link',
67
88
  'god-review-changes',
@@ -89,6 +110,12 @@ const PROFILE_SKILLS = {
89
110
  ],
90
111
  suite: [
91
112
  ...COMMON,
113
+ 'god-next',
114
+ 'god-progress',
115
+ 'god-doctor',
116
+ 'god-settings',
117
+ 'god-sync',
118
+ 'god-undo',
92
119
  'god-suite-init',
93
120
  'god-suite-status',
94
121
  'god-suite-sync',
@@ -96,7 +123,6 @@ const PROFILE_SKILLS = {
96
123
  'god-suite-release',
97
124
  'god-workstream',
98
125
  'god-pr-branch',
99
- 'god-sync',
100
126
  'god-reconcile',
101
127
  'god-review',
102
128
  'god-quick',
@@ -105,20 +131,20 @@ const PROFILE_SKILLS = {
105
131
  };
106
132
 
107
133
  const PROFILE_DESCRIPTIONS = {
108
- core: 'front door, status, init, build, review, sync, quick edits',
109
- builder: 'core plus planning, design, stories, and runtime verification',
134
+ core: 'front door, status, verbs, and autonomous compatibility',
135
+ builder: 'core plus planning leaves, stories, and runtime verification',
110
136
  maintainer: 'core plus hygiene, deps, docs, repair, automation, and extensions',
111
137
  suite: 'core plus multi-repo suite and workstream coordination',
112
138
  full: 'all shipped slash commands'
113
139
  };
114
140
 
115
141
  function normalizeProfiles(value) {
116
- if (!value) return ['full'];
142
+ if (!value) return ['core'];
117
143
  const raw = String(value)
118
144
  .split(',')
119
145
  .map(part => part.trim().toLowerCase())
120
146
  .filter(Boolean);
121
- const profiles = raw.length > 0 ? raw : ['full'];
147
+ const profiles = raw.length > 0 ? raw : ['core'];
122
148
  for (const profile of profiles) {
123
149
  if (profile !== 'full' && !PROFILE_SKILLS[profile]) {
124
150
  throw new Error(`Unknown install profile: ${profile}`);
@@ -36,7 +36,7 @@ function parseArgs(argv, cwd = process.cwd()) {
36
36
  all: false,
37
37
  help: false,
38
38
  uninstall: false,
39
- profile: 'full',
39
+ profile: 'core',
40
40
  };
41
41
 
42
42
  for (let i = 0; i < args.length; i++) {
@@ -92,7 +92,7 @@ function detect(projectRoot) {
92
92
  matched.length > 0
93
93
  ? `Recipe coverage exists for ${required.description}.`
94
94
  : `No recipe covers ${required.description} with ${required.commands.join(', ')}.`,
95
- { spawn: matched.length > 0 ? null : 'god-roadmap-reconciler' }
95
+ { spawn: matched.length > 0 ? null : 'god-reconciler' }
96
96
  );
97
97
  }
98
98
 
@@ -12,9 +12,12 @@ const path = require('path');
12
12
  const LOG_PATH = '.godpowers/surface/RELEASE-SURFACE-SYNC.md';
13
13
 
14
14
  const REQUIRED_PACKAGE_GUARDS = [
15
+ 'lib/artifact-map.js',
16
+ 'lib/cli-dispatch.js',
15
17
  'lib/command-families.js',
16
18
  'lib/dogfood-runner.js',
17
19
  'lib/extension-authoring.js',
20
+ 'lib/gate.js',
18
21
  'lib/host-capabilities.js',
19
22
  'lib/route-quality-sync.js',
20
23
  'lib/recipe-coverage-sync.js',
@@ -371,7 +371,7 @@ function adjacentOpportunities() {
371
371
  id: 'workflow-recipe-graph-sync',
372
372
  trigger: '/god-next, /god-mode, /god-doctor',
373
373
  behavior: 'compare workflow YAML, recipes, command flows, and orchestrator guidance',
374
- escalation: 'spawn god-roadmap-reconciler when lifecycle intent is ambiguous'
374
+ escalation: 'spawn god-reconciler when lifecycle intent is ambiguous'
375
375
  },
376
376
  {
377
377
  id: 'extension-pack-sync',
@@ -270,7 +270,7 @@ function workflowRecipeChecks(projectRoot) {
270
270
  hasMetadata ? 'fresh' : 'stale',
271
271
  workflow,
272
272
  hasMetadata ? `${workflow} has metadata.` : `${workflow} is missing parseable metadata.`,
273
- { spawn: hasMetadata ? null : 'god-roadmap-reconciler' }
273
+ { spawn: hasMetadata ? null : 'god-reconciler' }
274
274
  );
275
275
  }
276
276
 
@@ -285,7 +285,7 @@ function workflowRecipeChecks(projectRoot) {
285
285
  hasCommand ? 'fresh' : 'stale',
286
286
  recipe,
287
287
  hasCommand ? `${recipe} includes a slash-command route.` : `${recipe} has no slash-command route.`,
288
- { spawn: hasCommand ? null : 'god-roadmap-reconciler' }
288
+ { spawn: hasCommand ? null : 'god-reconciler' }
289
289
  );
290
290
  }
291
291
 
@@ -297,7 +297,7 @@ function workflowRecipeChecks(projectRoot) {
297
297
  commandFlows.includes('/god-docs') && commandFlows.includes('/god-sync') ? 'fresh' : 'stale',
298
298
  'docs/command-flows.md',
299
299
  'docs/command-flows.md includes core docs and sync flows.',
300
- { spawn: 'god-roadmap-reconciler' }
300
+ { spawn: 'god-reconciler' }
301
301
  );
302
302
  }
303
303
  return checks;
@@ -244,7 +244,7 @@ function detect(projectRoot) {
244
244
  'stale',
245
245
  routePath,
246
246
  `${command} uses contextual next route ${next} without a typed success-path.outcome.`,
247
- { spawn: 'god-roadmap-reconciler' }
247
+ { spawn: 'god-reconciler' }
248
248
  );
249
249
  }
250
250
  }
@@ -297,7 +297,7 @@ function detect(projectRoot) {
297
297
  checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'stale' : 'fresh',
298
298
  'routing/',
299
299
  `${typedOutcomeCount} contextual route exits have typed outcomes and all other next routes are explicit.`,
300
- { spawn: checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'god-roadmap-reconciler' : null }
300
+ { spawn: checks.some((check) => check.id.startsWith('missing-route-outcome-')) ? 'god-reconciler' : null }
301
301
  );
302
302
  addCheck(
303
303
  checks,
package/lib/router.js CHANGED
@@ -264,6 +264,11 @@ function getStandards(command) {
264
264
  return routing.standards;
265
265
  }
266
266
 
267
+ function getGateCommand(command) {
268
+ const standards = getStandards(command);
269
+ return standards && standards['gate-command'] ? standards['gate-command'] : null;
270
+ }
271
+
267
272
  /**
268
273
  * Get the list of agents this command spawns (primary + secondary).
269
274
  */
@@ -403,6 +408,7 @@ module.exports = {
403
408
  getRouteOutcome,
404
409
  getAlternatives,
405
410
  getStandards,
411
+ getGateCommand,
406
412
  getSpawnedAgents,
407
413
  getCommandFamily: commandFamilies.familyForCommand,
408
414
  resolveTrigger: commandFamilies.resolveTrigger,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "godpowers",
3
- "version": "2.7.0",
4
- "description": "AI-powered development system: 112 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.",
3
+ "version": "3.0.1",
4
+ "description": "AI-powered development system: 117 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
  },
@@ -182,6 +182,7 @@ When deciding what to spawn next, query the routing definition:
182
182
  - `execution.spawns` -> primary agent to spawn
183
183
  - `execution.secondary-spawns` -> downstream agents (e.g., reviewers)
184
184
  - `standards.have-nots` -> which have-nots to verify
185
+ - `standards.gate-command` -> executable artifact gate to run after output exists
185
186
  - `success-path.next-recommended` -> what to suggest next
186
187
 
187
188
  Before spawning a command, evaluate `lib/router.js checkPrerequisites(command,
@@ -197,6 +198,12 @@ the routing config has a `standards` section). Standards check uses fresh
197
198
  context, independent of the producing agent, so it catches drift the
198
199
  producing agent's own self-check would miss.
199
200
 
201
+ When `standards.gate-command` is present, run that exact command from the
202
+ project root after the producing tier skill returns and before any downstream
203
+ tier starts. A non-zero exit means the tier is not complete. Report the gate
204
+ output, repair the artifact, and rerun the gate before updating durable state
205
+ to done.
206
+
200
207
  ## Recipe-Driven Decisions (for fuzzy intent)
201
208
 
202
209
  When the user describes intent in plain English instead of running a specific
@@ -217,7 +224,7 @@ with the "why" annotations for each step.
217
224
  This is the third layer of decision support:
218
225
  1. **Routing** (`<runtimeRoot>/routing/<command>.yaml`): structural prerequisites and gates
219
226
  2. **Recipes** (`<runtimeRoot>/routing/recipes/<recipe>.yaml`): scenario-based sequences
220
- 3. **Standards** (god-standards-check): quality gates between stages
227
+ 3. **Standards** (god-standards-check plus standards.gate-command): quality gates between stages
221
228
 
222
229
  ## Proactive Auto-Invoke Matrix
223
230
 
@@ -479,7 +486,7 @@ requested or final sign-off begins.
479
486
  4. Print the "Next step" card from the Step Narration Protocol
480
487
  5. Spawn the appropriate specialist agent in a fresh context
481
488
  6. Verify their output exists on disk
482
- 7. Run have-nots check on the artifact
489
+ 7. Run have-nots check on the artifact and run `standards.gate-command` when configured
483
490
  8. If pass: update PROGRESS.md, sync CHECKPOINT.md, run the proactive
484
491
  auto-invoke sweep, print the "Step result" card, then move to next sub-step
485
492
  9. If fail and repairable: print the failed result card, then enter the
@@ -1256,4 +1263,6 @@ For preflight auto-routing, append:
1256
1263
 
1257
1264
  The canonical have-nots catalog lives at `references/HAVE-NOTS.md` (115 named
1258
1265
  failure modes). When verifying an artifact, run the relevant tier's have-nots
1259
- against it. When in doubt, spawn god-auditor to do the check.
1266
+ against it. When the route has `standards.gate-command`, run that exact command
1267
+ after have-nots and block on any non-zero exit. When in doubt, spawn
1268
+ god-auditor to do the check.
@@ -0,0 +1,41 @@
1
+ apiVersion: godpowers/v1
2
+ kind: CommandRouting
3
+ metadata:
4
+ command: /god-capture
5
+ description: Capture verb dispatcher
6
+ tier: 0
7
+ family: capture
8
+
9
+ prerequisites:
10
+ required: []
11
+
12
+ execution:
13
+ spawns: [built-in]
14
+ context: fresh
15
+ reads:
16
+ - routing/god-note.yaml
17
+ - routing/god-add-todo.yaml
18
+ - routing/god-add-backlog.yaml
19
+ - routing/god-plant-seed.yaml
20
+ writes: []
21
+
22
+ dispatch:
23
+ note: /god-note
24
+ todo: /god-add-todo
25
+ backlog: /god-add-backlog
26
+ seed: /god-plant-seed
27
+
28
+ success-path:
29
+ next-recommended: varies
30
+ outcome:
31
+ type: contextual
32
+ label: Capture dispatch route
33
+ reason: The next route depends on whether the item is a note, todo, backlog item, or seed.
34
+ allowed-next: [/god-note, /god-add-todo, /god-add-backlog, /god-plant-seed]
35
+
36
+ failure-path:
37
+ on-error: /god-doctor
38
+
39
+ endoff:
40
+ state-update: no direct state update; selected leaf command owns state
41
+ events: [agent.start, decision.route, agent.end]