godpowers 1.6.20 → 1.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +11 -8
- package/RELEASE.md +26 -20
- package/lib/dashboard.js +43 -2
- package/lib/release-surface-sync.js +24 -0
- package/lib/repo-surface-sync.js +70 -0
- package/lib/route-quality-sync.js +31 -4
- package/package.json +1 -1
- package/routing/god-init.yaml +1 -1
- package/routing/god-roadmap-update.yaml +1 -1
- package/routing/god-sync.yaml +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.6.21] - 2026-05-16
|
|
11
|
+
|
|
12
|
+
Dashboard compression, trace guardrails, and suite release readiness.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Added dashboard action briefs so `/god-status`, `/god-next`, and CLI status
|
|
16
|
+
output show the recommended command, reason, readiness, and top blockers
|
|
17
|
+
before the detailed check list.
|
|
18
|
+
- Added release-surface checks that verify dogfood, extension publish, Mode D
|
|
19
|
+
suite, and installer smoke tests remain wired into the release gate.
|
|
20
|
+
- Added repo-surface suite readiness checks for Mode D helper, docs, tests,
|
|
21
|
+
and suite command route coverage.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Route-quality sync now requires every agent-spawning route to declare both
|
|
25
|
+
`agent.start` and `agent.end` trace events.
|
|
26
|
+
- `/god-init`, `/god-roadmap-update`, and `/god-sync` route metadata now
|
|
27
|
+
declare the missing `agent.start` trace event.
|
|
28
|
+
|
|
29
|
+
### Guardrails
|
|
30
|
+
- Spawn observability, release dogfooding, extension readiness, suite
|
|
31
|
+
readiness, and onboarding compression are now checked by executable tests
|
|
32
|
+
instead of remaining documentation-only goals.
|
|
33
|
+
|
|
10
34
|
## [1.6.20] - 2026-05-16
|
|
11
35
|
|
|
12
36
|
Automation surface closeout and release guardrails.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/aihxp/godpowers/actions/workflows/ci.yml)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](CHANGELOG.md)
|
|
6
6
|
[](https://www.npmjs.com/package/godpowers)
|
|
7
7
|
|
|
8
8
|
**Ship fast. Ship right. Ship everything. Ship accountably.**
|
|
@@ -12,11 +12,14 @@ idea to hardened production. It runs as **slash commands inside your AI coding
|
|
|
12
12
|
tool** (Claude Code, Codex, Cursor, etc.) that orchestrate **specialist agents**
|
|
13
13
|
in fresh contexts to do the work.
|
|
14
14
|
|
|
15
|
-
Version 1.6.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
Version 1.6.21 sharpens the daily operating loop. Godpowers now shows a compact
|
|
16
|
+
action brief in dashboard output, enforces trace events for every
|
|
17
|
+
agent-spawning route, and keeps dogfood, extension publish, Mode D suite, and
|
|
18
|
+
installer smoke gates wired into release readiness.
|
|
19
|
+
|
|
20
|
+
The dashboard now starts with an action brief: the next command, why it is
|
|
21
|
+
recommended, whether the project is ready, and the first blockers that need
|
|
22
|
+
attention. Detailed proactive checks remain below the brief for auditability.
|
|
20
23
|
|
|
21
24
|
It fuses four disciplines into one unified workflow:
|
|
22
25
|
|
|
@@ -107,8 +110,8 @@ You can also ask any time:
|
|
|
107
110
|
```
|
|
108
111
|
|
|
109
112
|
This reads `.godpowers/PROGRESS.md`, scans disk, reconciles any drift, and
|
|
110
|
-
suggests the next logical command
|
|
111
|
-
when you open a new session in a Godpowers project.
|
|
113
|
+
suggests the next logical command with a compact action brief. The SessionStart
|
|
114
|
+
hook does the same thing when you open a new session in a Godpowers project.
|
|
112
115
|
|
|
113
116
|
The same status engine is available from the installer CLI for humans, CI,
|
|
114
117
|
Codex, Claude, Cursor, Gemini, OpenCode, Windsurf, Antigravity, and any host
|
package/RELEASE.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
# Godpowers 1.6.
|
|
1
|
+
# Godpowers 1.6.21 Release
|
|
2
2
|
|
|
3
3
|
Date: 2026-05-16
|
|
4
4
|
|
|
5
|
-
Godpowers 1.6.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
current.
|
|
5
|
+
Godpowers 1.6.21 sharpens the daily operating loop after the automation
|
|
6
|
+
surface closeout. It adds dashboard action briefs, requires agent-spawning
|
|
7
|
+
routes to declare trace events, and expands release readiness checks across
|
|
8
|
+
dogfood, extension publish, Mode D suite, and installer smoke gates.
|
|
10
9
|
|
|
11
10
|
## What is stable
|
|
12
11
|
|
|
@@ -28,21 +27,22 @@ current.
|
|
|
28
27
|
- Repository documentation sync checks
|
|
29
28
|
- Repository surface sync checks
|
|
30
29
|
- Route quality, recipe coverage, and release surface sync checks
|
|
30
|
+
- Dashboard action briefs for next-step compression
|
|
31
|
+
- Agent-spawn trace event guardrails
|
|
32
|
+
- Mode D suite readiness checks
|
|
31
33
|
|
|
32
34
|
## What is new
|
|
33
35
|
|
|
34
|
-
- Added `lib/
|
|
35
|
-
- Added `
|
|
36
|
-
|
|
37
|
-
- Added
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
surface sync as known runtime features.
|
|
45
|
-
- Package contents checks now require all three new sync helpers.
|
|
36
|
+
- Added `Action brief` output to `lib/dashboard.js` and CLI status rendering.
|
|
37
|
+
- Added route-quality enforcement for `agent.start` and `agent.end` trace
|
|
38
|
+
event declarations on agent-spawning routes.
|
|
39
|
+
- Added repo-surface Mode D suite readiness checks for suite helper presence,
|
|
40
|
+
suite command skill and routing coverage, roadmap documentation, and release
|
|
41
|
+
test wiring.
|
|
42
|
+
- Added release-surface checks for dogfood, extension publish, Mode D suite,
|
|
43
|
+
and installer smoke tests.
|
|
44
|
+
- Updated `/god-init`, `/god-roadmap-update`, and `/god-sync` route metadata
|
|
45
|
+
to declare `agent.start`.
|
|
46
46
|
|
|
47
47
|
## Automation surface behavior
|
|
48
48
|
|
|
@@ -50,12 +50,15 @@ For a Godpowers repository, the helper checks:
|
|
|
50
50
|
|
|
51
51
|
- every routed specialist spawn resolves to a real agent or built-in runtime
|
|
52
52
|
owner
|
|
53
|
+
- every agent-spawning route declares `agent.start` and `agent.end`
|
|
53
54
|
- every durable-writing route declares standards coverage or an approved
|
|
54
55
|
exemption
|
|
55
56
|
- high-frequency work has discoverable intent recipes
|
|
56
57
|
- release-facing version surfaces agree with `package.json`
|
|
57
58
|
- package content checks require load-bearing runtime helper files
|
|
58
59
|
- release checklist policy names the current sync guards
|
|
60
|
+
- release gates include dogfood, extension publish, Mode D suite, and installer
|
|
61
|
+
smoke checks
|
|
59
62
|
|
|
60
63
|
Detection is read-only by default. Applying sync writes logs and leaves
|
|
61
64
|
judgment-heavy rewrites to scoped specialists.
|
|
@@ -84,6 +87,9 @@ Release validation includes:
|
|
|
84
87
|
- `node scripts/test-repo-doc-sync.js`
|
|
85
88
|
- `node scripts/test-feature-awareness.js`
|
|
86
89
|
- `node scripts/test-dashboard.js`
|
|
90
|
+
- `node scripts/test-mode-d.js`
|
|
91
|
+
- `node scripts/test-extensions-publish.js`
|
|
92
|
+
- `node scripts/test-install-smoke.js`
|
|
87
93
|
- `node scripts/test-context-writer.js`
|
|
88
94
|
- `node scripts/test-planning-systems.js`
|
|
89
95
|
- `node scripts/test-doc-surface-counts.js`
|
|
@@ -91,5 +97,5 @@ Release validation includes:
|
|
|
91
97
|
- `git diff --check`
|
|
92
98
|
- `npm run release:check`
|
|
93
99
|
|
|
94
|
-
The `v1.6.
|
|
95
|
-
`godpowers@1.6.
|
|
100
|
+
The `v1.6.21` tag should point to the release commit that matches the npm
|
|
101
|
+
`godpowers@1.6.21` package.
|
package/lib/dashboard.js
CHANGED
|
@@ -217,7 +217,7 @@ function compute(projectRoot, opts = {}) {
|
|
|
217
217
|
|
|
218
218
|
if (!s) {
|
|
219
219
|
const next = { command: '/god-init', reason: 'No Godpowers project initialized' };
|
|
220
|
-
|
|
220
|
+
const result = {
|
|
221
221
|
source: 'runtime dashboard (lib/dashboard.js)',
|
|
222
222
|
state: 'not initialized',
|
|
223
223
|
mode: null,
|
|
@@ -237,6 +237,8 @@ function compute(projectRoot, opts = {}) {
|
|
|
237
237
|
next,
|
|
238
238
|
openItems: ['No .godpowers/state.json found']
|
|
239
239
|
};
|
|
240
|
+
result.actionBrief = actionBrief(result);
|
|
241
|
+
return result;
|
|
240
242
|
}
|
|
241
243
|
|
|
242
244
|
const progress = state.progressSummary(s);
|
|
@@ -250,7 +252,7 @@ function compute(projectRoot, opts = {}) {
|
|
|
250
252
|
if (reviewCount(projectRoot) > 0) openItems.push('pending review items');
|
|
251
253
|
if (openItems.length === 0) openItems.push('none');
|
|
252
254
|
|
|
253
|
-
|
|
255
|
+
const result = {
|
|
254
256
|
source: 'runtime dashboard (lib/dashboard.js)',
|
|
255
257
|
state: progress.remaining === 0 ? 'complete' : 'in progress',
|
|
256
258
|
mode: s.mode || s['mode-announced-as'] || null,
|
|
@@ -264,6 +266,37 @@ function compute(projectRoot, opts = {}) {
|
|
|
264
266
|
next,
|
|
265
267
|
openItems
|
|
266
268
|
};
|
|
269
|
+
result.actionBrief = actionBrief(result);
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function actionBrief(dashboard) {
|
|
274
|
+
const proactive = dashboard.proactive || {};
|
|
275
|
+
const next = dashboard.next || {};
|
|
276
|
+
const blockers = [];
|
|
277
|
+
for (const [label, value] of [
|
|
278
|
+
['Repo surface', proactive.repoSurface],
|
|
279
|
+
['Docs', proactive.docs],
|
|
280
|
+
['Reviews', proactive.reviews],
|
|
281
|
+
['Sync', proactive.sync],
|
|
282
|
+
['Security', proactive.security],
|
|
283
|
+
['Dependencies', proactive.dependencies],
|
|
284
|
+
['Hygiene', proactive.hygiene]
|
|
285
|
+
]) {
|
|
286
|
+
if (!value) continue;
|
|
287
|
+
if (value === 'fresh' || value === 'none' || value === 'clear' || value === 'not-applicable') continue;
|
|
288
|
+
if (/^available via /.test(value)) continue;
|
|
289
|
+
blockers.push(`${label}: ${value}`);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
const recommended = next.command || 'describe the next intent';
|
|
293
|
+
return {
|
|
294
|
+
recommended,
|
|
295
|
+
reason: next.reason || 'No route was computed.',
|
|
296
|
+
confidence: blockers.length === 0 ? 'ready' : 'needs attention',
|
|
297
|
+
blockers: blockers.slice(0, 3),
|
|
298
|
+
overflow: Math.max(0, blockers.length - 3)
|
|
299
|
+
};
|
|
267
300
|
}
|
|
268
301
|
|
|
269
302
|
function render(dashboard) {
|
|
@@ -277,6 +310,7 @@ function render(dashboard) {
|
|
|
277
310
|
const openItems = dashboard.openItems && dashboard.openItems.length > 0
|
|
278
311
|
? dashboard.openItems
|
|
279
312
|
: ['none'];
|
|
313
|
+
const brief = dashboard.actionBrief || actionBrief(dashboard);
|
|
280
314
|
|
|
281
315
|
return [
|
|
282
316
|
'Godpowers Dashboard',
|
|
@@ -291,6 +325,12 @@ function render(dashboard) {
|
|
|
291
325
|
` Worktree: ${dashboard.worktree}`,
|
|
292
326
|
` Index: ${dashboard.index}`,
|
|
293
327
|
'',
|
|
328
|
+
'Action brief:',
|
|
329
|
+
` Next: ${brief.recommended}`,
|
|
330
|
+
` Why: ${brief.reason}`,
|
|
331
|
+
` Readiness: ${brief.confidence}`,
|
|
332
|
+
` Attention: ${brief.blockers && brief.blockers.length > 0 ? brief.blockers.join('; ') : 'none'}${brief.overflow ? `; ${brief.overflow} more` : ''}`,
|
|
333
|
+
'',
|
|
294
334
|
'Planning visibility:',
|
|
295
335
|
` PRD: ${prd.status || 'missing'}${prd.path ? ` ${prd.path}` : ''}`,
|
|
296
336
|
` Roadmap: ${roadmap.status || 'missing'}${roadmap.path ? ` ${roadmap.path}` : ''}`,
|
|
@@ -325,5 +365,6 @@ module.exports = {
|
|
|
325
365
|
parseGitStatus,
|
|
326
366
|
proactiveChecks,
|
|
327
367
|
automationSummary,
|
|
368
|
+
actionBrief,
|
|
328
369
|
planningVisibility
|
|
329
370
|
};
|
|
@@ -17,6 +17,14 @@ const REQUIRED_PACKAGE_GUARDS = [
|
|
|
17
17
|
'lib/release-surface-sync.js'
|
|
18
18
|
];
|
|
19
19
|
|
|
20
|
+
const REQUIRED_RELEASE_TESTS = [
|
|
21
|
+
'scripts/test-automation-surface-sync.js',
|
|
22
|
+
'scripts/test-repo-surface-sync.js',
|
|
23
|
+
'scripts/test-extensions-publish.js',
|
|
24
|
+
'scripts/test-mode-d.js',
|
|
25
|
+
'scripts/test-install-smoke.js'
|
|
26
|
+
];
|
|
27
|
+
|
|
20
28
|
function read(projectRoot, relPath) {
|
|
21
29
|
const file = path.join(projectRoot, relPath);
|
|
22
30
|
if (!fs.existsSync(file)) return '';
|
|
@@ -100,6 +108,21 @@ function detect(projectRoot) {
|
|
|
100
108
|
);
|
|
101
109
|
}
|
|
102
110
|
|
|
111
|
+
const scriptsText = JSON.stringify(pkg.scripts || {});
|
|
112
|
+
for (const required of REQUIRED_RELEASE_TESTS) {
|
|
113
|
+
const ok = scriptsText.includes(required);
|
|
114
|
+
addCheck(
|
|
115
|
+
checks,
|
|
116
|
+
`release-test-${required.replace(/[^a-z0-9]+/gi, '-')}`,
|
|
117
|
+
ok ? 'fresh' : 'stale',
|
|
118
|
+
'package.json',
|
|
119
|
+
ok
|
|
120
|
+
? `Release gate includes ${required}.`
|
|
121
|
+
: `Release gate does not include ${required}.`,
|
|
122
|
+
{ spawn: ok ? null : 'god-auditor' }
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
103
126
|
const stale = checks.filter((check) => check.status !== 'fresh');
|
|
104
127
|
return {
|
|
105
128
|
status: stale.length === 0 ? 'fresh' : 'stale',
|
|
@@ -147,6 +170,7 @@ function summary(report) {
|
|
|
147
170
|
module.exports = {
|
|
148
171
|
LOG_PATH,
|
|
149
172
|
REQUIRED_PACKAGE_GUARDS,
|
|
173
|
+
REQUIRED_RELEASE_TESTS,
|
|
150
174
|
detect,
|
|
151
175
|
run,
|
|
152
176
|
summary
|
package/lib/repo-surface-sync.js
CHANGED
|
@@ -357,6 +357,75 @@ function extensionChecks(projectRoot) {
|
|
|
357
357
|
return checks;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
+
function suiteChecks(projectRoot) {
|
|
361
|
+
const checks = [];
|
|
362
|
+
const pkg = readJson(projectRoot, 'package.json') || {};
|
|
363
|
+
const scriptsText = JSON.stringify(pkg.scripts || {});
|
|
364
|
+
const roadmap = read(projectRoot, 'docs/ROADMAP.md');
|
|
365
|
+
const suiteCommands = [
|
|
366
|
+
'god-suite-init',
|
|
367
|
+
'god-suite-status',
|
|
368
|
+
'god-suite-sync',
|
|
369
|
+
'god-suite-patch',
|
|
370
|
+
'god-suite-release'
|
|
371
|
+
];
|
|
372
|
+
|
|
373
|
+
addCheck(
|
|
374
|
+
checks,
|
|
375
|
+
'suite',
|
|
376
|
+
'suite-runtime-helper',
|
|
377
|
+
exists(projectRoot, 'lib/suite-state.js') ? 'fresh' : 'stale',
|
|
378
|
+
'lib/suite-state.js',
|
|
379
|
+
exists(projectRoot, 'lib/suite-state.js')
|
|
380
|
+
? 'Mode D suite state helper exists.'
|
|
381
|
+
: 'Mode D suite state helper is missing.',
|
|
382
|
+
{ spawn: exists(projectRoot, 'lib/suite-state.js') ? null : 'god-coordinator' }
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
addCheck(
|
|
386
|
+
checks,
|
|
387
|
+
'suite',
|
|
388
|
+
'suite-test-gate',
|
|
389
|
+
scriptsText.includes('scripts/test-mode-d.js') ? 'fresh' : 'stale',
|
|
390
|
+
'package.json',
|
|
391
|
+
scriptsText.includes('scripts/test-mode-d.js')
|
|
392
|
+
? 'Release gate includes Mode D suite tests.'
|
|
393
|
+
: 'Release gate does not include Mode D suite tests.',
|
|
394
|
+
{ spawn: scriptsText.includes('scripts/test-mode-d.js') ? null : 'god-coordinator' }
|
|
395
|
+
);
|
|
396
|
+
|
|
397
|
+
addCheck(
|
|
398
|
+
checks,
|
|
399
|
+
'suite',
|
|
400
|
+
'suite-docs',
|
|
401
|
+
roadmap.includes('Mode D') ? 'fresh' : 'stale',
|
|
402
|
+
'docs/ROADMAP.md',
|
|
403
|
+
roadmap.includes('Mode D')
|
|
404
|
+
? 'Roadmap documents Mode D suite support.'
|
|
405
|
+
: 'Roadmap does not document Mode D suite support.',
|
|
406
|
+
{ spawn: roadmap.includes('Mode D') ? null : 'god-coordinator' }
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
for (const command of suiteCommands) {
|
|
410
|
+
const skill = `skills/${command}.md`;
|
|
411
|
+
const route = `routing/${command}.yaml`;
|
|
412
|
+
const ok = exists(projectRoot, skill) && exists(projectRoot, route);
|
|
413
|
+
addCheck(
|
|
414
|
+
checks,
|
|
415
|
+
'suite',
|
|
416
|
+
`suite-command-${command}`,
|
|
417
|
+
ok ? 'fresh' : 'stale',
|
|
418
|
+
skill,
|
|
419
|
+
ok
|
|
420
|
+
? `/${command} has skill and routing metadata.`
|
|
421
|
+
: `/${command} is missing a skill or route.`,
|
|
422
|
+
{ spawn: ok ? null : 'god-coordinator' }
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return checks;
|
|
427
|
+
}
|
|
428
|
+
|
|
360
429
|
function releasePolicyChecks(projectRoot) {
|
|
361
430
|
const checks = [];
|
|
362
431
|
const docs = repoDocSync.detect(projectRoot);
|
|
@@ -393,6 +462,7 @@ function detect(projectRoot) {
|
|
|
393
462
|
...agentChecks(projectRoot),
|
|
394
463
|
...workflowRecipeChecks(projectRoot),
|
|
395
464
|
...extensionChecks(projectRoot),
|
|
465
|
+
...suiteChecks(projectRoot),
|
|
396
466
|
...releasePolicyChecks(projectRoot),
|
|
397
467
|
...routeQualitySync.detect(projectRoot).checks,
|
|
398
468
|
...recipeCoverageSync.detect(projectRoot).checks,
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Route quality sync.
|
|
3
3
|
*
|
|
4
4
|
* Detects disconnected route automation surfaces: symbolic spawn tokens,
|
|
5
|
-
* unresolved agent targets, contextual exits without an approved reason,
|
|
6
|
-
*
|
|
7
|
-
* parallel spawns.
|
|
5
|
+
* unresolved agent targets, contextual exits without an approved reason,
|
|
6
|
+
* missing standards coverage, and agent-spawn routes without trace events.
|
|
8
7
|
*/
|
|
9
8
|
|
|
10
9
|
const fs = require('fs');
|
|
@@ -141,14 +140,16 @@ function detect(projectRoot) {
|
|
|
141
140
|
let unresolvedCount = 0;
|
|
142
141
|
let contextualExitCount = 0;
|
|
143
142
|
let standardsExemptCount = 0;
|
|
143
|
+
let traceEventMissingCount = 0;
|
|
144
144
|
|
|
145
145
|
for (const routePath of routes) {
|
|
146
146
|
const route = parseRoute(projectRoot, routePath);
|
|
147
147
|
const command = route.metadata && route.metadata.command
|
|
148
148
|
? route.metadata.command
|
|
149
149
|
: `/${path.basename(routePath, '.yaml')}`;
|
|
150
|
+
const tokens = spawnTokens(route);
|
|
150
151
|
|
|
151
|
-
for (const token of
|
|
152
|
+
for (const token of tokens) {
|
|
152
153
|
if (!isAtomicSpawn(String(token))) {
|
|
153
154
|
symbolicCount++;
|
|
154
155
|
addCheck(
|
|
@@ -174,6 +175,22 @@ function detect(projectRoot) {
|
|
|
174
175
|
}
|
|
175
176
|
}
|
|
176
177
|
|
|
178
|
+
const agentTokens = tokens
|
|
179
|
+
.map((token) => String(token))
|
|
180
|
+
.filter((token) => /^god-[a-z0-9-]+$/.test(token));
|
|
181
|
+
const events = arr(route.endoff && route.endoff.events).map((event) => String(event));
|
|
182
|
+
if (agentTokens.length > 0 && (!events.includes('agent.start') || !events.includes('agent.end'))) {
|
|
183
|
+
traceEventMissingCount++;
|
|
184
|
+
addCheck(
|
|
185
|
+
checks,
|
|
186
|
+
`missing-trace-events-${command.replace(/[^a-z0-9]+/gi, '-')}`,
|
|
187
|
+
'stale',
|
|
188
|
+
routePath,
|
|
189
|
+
`${command} spawns agents but does not declare both agent.start and agent.end trace events.`,
|
|
190
|
+
{ spawn: 'god-auditor' }
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
177
194
|
const next = route['success-path'] && route['success-path']['next-recommended'];
|
|
178
195
|
const conditionalNext = route['success-path'] && arr(route['success-path']['conditional-next']);
|
|
179
196
|
if (next === 'varies' && conditionalNext.length === 0) {
|
|
@@ -231,6 +248,16 @@ function detect(projectRoot) {
|
|
|
231
248
|
`${standardsExemptCount} durable-writing routes have approved standards exemptions and all other writing routes declare standards.`,
|
|
232
249
|
{ spawn: checks.some((check) => check.id.startsWith('missing-standards-')) ? 'god-auditor' : null }
|
|
233
250
|
);
|
|
251
|
+
addCheck(
|
|
252
|
+
checks,
|
|
253
|
+
'agent-trace-policy',
|
|
254
|
+
traceEventMissingCount === 0 ? 'fresh' : 'stale',
|
|
255
|
+
'routing/',
|
|
256
|
+
traceEventMissingCount === 0
|
|
257
|
+
? 'All agent-spawning routes declare agent.start and agent.end trace events.'
|
|
258
|
+
: `${traceEventMissingCount} agent-spawning routes are missing required trace events.`,
|
|
259
|
+
{ spawn: traceEventMissingCount === 0 ? null : 'god-auditor' }
|
|
260
|
+
);
|
|
234
261
|
|
|
235
262
|
const stale = checks.filter((check) => check.status !== 'fresh');
|
|
236
263
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.21",
|
|
4
4
|
"description": "AI-powered development system: 109 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"
|
package/routing/god-init.yaml
CHANGED
package/routing/god-sync.yaml
CHANGED