godpowers 1.6.17 → 1.6.20
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 +29 -6
- package/CHANGELOG.md +66 -0
- package/README.md +11 -9
- package/RELEASE.md +51 -37
- package/SKILL.md +17 -1
- package/agents/god-orchestrator.md +6 -1
- package/lib/README.md +4 -0
- package/lib/dashboard.js +17 -4
- package/lib/feature-awareness.js +24 -0
- package/lib/recipe-coverage-sync.js +149 -0
- package/lib/release-surface-sync.js +153 -0
- package/lib/repo-surface-sync.js +524 -0
- package/lib/route-quality-sync.js +286 -0
- package/lib/router.js +4 -1
- package/package.json +2 -2
- package/routing/god-party.yaml +4 -2
- package/routing/god-story-build.yaml +11 -2
- package/routing/recipes/automation-setup.yaml +25 -0
- package/routing/recipes/context-refresh.yaml +26 -0
- package/routing/recipes/release-maintenance.yaml +27 -0
- package/routing/recipes/story-work.yaml +29 -0
- package/skills/god-docs.md +6 -0
- package/skills/god-doctor.md +21 -0
- package/skills/god-mode.md +7 -0
- package/skills/god-next.md +7 -2
- package/skills/god-status.md +11 -3
- package/skills/god-sync.md +15 -4
- package/skills/god-version.md +3 -3
package/AGENTS.md
CHANGED
|
@@ -37,11 +37,34 @@ projects from raw idea to hardened production.
|
|
|
37
37
|
- Every claim must fail the substitution test (swap in a competitor, sentence must break)
|
|
38
38
|
|
|
39
39
|
<!-- pillars:begin -->
|
|
40
|
-
|
|
40
|
+
# Godpowers Project Context
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
This is a Godpowers project. Godpowers uses the Pillars standard as its native project context layer.
|
|
43
|
+
Coding agents read project context from `./agents/*.md` before changing code, while `.godpowers/` remains the Godpowers workflow state and artifact layer.
|
|
44
|
+
|
|
45
|
+
## At the start of any task
|
|
46
|
+
|
|
47
|
+
1. Load every pillar whose frontmatter has `always_load: true`.
|
|
48
|
+
2. Scan remaining pillar frontmatter and select task-relevant primaries from `triggers` and `covers`.
|
|
49
|
+
3. Add each primary pillar direct `must_read_with` dependencies, depth 1 only.
|
|
50
|
+
4. Read every pillar body in the computed load set.
|
|
51
|
+
5. Read `see_also` pillars only when the task explicitly touches that area.
|
|
52
|
+
6. Follow Rules, apply Workflows, heed Watchouts, and ask before deciding open Gaps.
|
|
53
|
+
|
|
54
|
+
## Handling missing pillars
|
|
55
|
+
|
|
56
|
+
| State | Action |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `status: present` | Load and comply. |
|
|
59
|
+
| `status: stub` | Treat the concern as acknowledged but undecided. Ask before making domain decisions. |
|
|
60
|
+
| Name in `excluded:` | Treat as intentionally not applicable. |
|
|
61
|
+
| Relevant but absent | Infer from code, state the assumption, and recommend authoring the pillar. |
|
|
62
|
+
|
|
63
|
+
If `context.md` or `repo.md` is missing, pause and create stubs before continuing.
|
|
64
|
+
|
|
65
|
+
## Excluded pillars
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
excluded: []
|
|
69
|
+
```
|
|
47
70
|
<!-- pillars:end -->
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,72 @@ All notable changes to Godpowers will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.6.20] - 2026-05-16
|
|
11
|
+
|
|
12
|
+
Automation surface closeout and release guardrails.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Added `lib/route-quality-sync.js` to detect symbolic route spawns,
|
|
16
|
+
unresolved agent targets, and unapproved contextual route exits.
|
|
17
|
+
- Added `lib/recipe-coverage-sync.js` to detect missing high-frequency intent
|
|
18
|
+
recipes for release maintenance, docs drift, context refresh, story work, and
|
|
19
|
+
automation setup.
|
|
20
|
+
- Added `lib/release-surface-sync.js` to detect release-facing drift across
|
|
21
|
+
badges, changelog, release notes, package guards, release checklist policy,
|
|
22
|
+
and package lock version.
|
|
23
|
+
- Added recipe routes for release maintenance, context refresh, story work, and
|
|
24
|
+
automation setup.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- `/god-party` routing now uses `built-in` as the primary owner and declares
|
|
28
|
+
selectable specialist personas under `parallel-spawns`.
|
|
29
|
+
- `/god-story-build` routing now uses `god-planner` as primary and declares
|
|
30
|
+
executor plus reviewer agents as secondary spawns.
|
|
31
|
+
- `lib/router.js` now includes conditional `parallel-spawns` in spawned-agent
|
|
32
|
+
resolution.
|
|
33
|
+
- Repo surface sync now includes route-quality, recipe-coverage, and
|
|
34
|
+
release-surface checks.
|
|
35
|
+
|
|
36
|
+
### Guardrails
|
|
37
|
+
- Route quality checks now block symbolic spawn tokens, unresolved specialist
|
|
38
|
+
targets, unapproved contextual exits, and durable-writing routes without
|
|
39
|
+
standards coverage.
|
|
40
|
+
- Release surface checks now require package, lockfile, README badge,
|
|
41
|
+
changelog, release notes, release checklist, and package payload guards to
|
|
42
|
+
agree before publish.
|
|
43
|
+
|
|
44
|
+
## [1.6.19] - 2026-05-16
|
|
45
|
+
|
|
46
|
+
Repository surface sync and status truth closeout.
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
- Added `lib/repo-surface-sync.js` to detect structural drift across command
|
|
50
|
+
routing, package payload rules, agent handoffs, workflow metadata, recipe
|
|
51
|
+
routes, extension packs, and release policy checks.
|
|
52
|
+
- Added `docs/repo-surface-sync.md` with auto-invoke, auto-spawn, and guardrail
|
|
53
|
+
behavior.
|
|
54
|
+
- Added behavioral tests for missing route detection, explicit route stub
|
|
55
|
+
creation, sync logging, package checks, agent handoff checks, and current
|
|
56
|
+
repo freshness.
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
- `/god-sync`, `/god-docs`, `/god-doctor`, `/god-status`, and `/god-mode` now
|
|
60
|
+
document repo surface sync behavior.
|
|
61
|
+
- Dashboard proactive checks now include a repo surface status line.
|
|
62
|
+
- Feature awareness now records `repo-surface-sync` as a known runtime feature.
|
|
63
|
+
- Package contents checks now require `lib/repo-surface-sync.js`.
|
|
64
|
+
- README, release notes, command flows, release checklist, command reference,
|
|
65
|
+
and runtime docs now describe repo surface sync.
|
|
66
|
+
|
|
67
|
+
### Guardrails
|
|
68
|
+
- Detection is read-only by default.
|
|
69
|
+
- Safe apply can create missing routing stubs only when `fixRouting` is
|
|
70
|
+
explicitly enabled.
|
|
71
|
+
- Agent, workflow, recipe, extension, and release-policy ambiguity routes to
|
|
72
|
+
scoped specialists instead of being rewritten blindly.
|
|
73
|
+
|
|
8
74
|
## [1.6.17] - 2026-05-16
|
|
9
75
|
|
|
10
76
|
Autonomous repository documentation sync.
|
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,11 @@ 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.20 closes the automation surface gaps around route quality, recipe
|
|
16
|
+
coverage, and release readiness. Godpowers now checks symbolic route spawns,
|
|
17
|
+
unresolved agent targets, standards coverage for durable-writing routes, missing
|
|
18
|
+
high-frequency recipes, package payload guards, and release-facing version drift
|
|
19
|
+
before closeout.
|
|
20
20
|
|
|
21
21
|
It fuses four disciplines into one unified workflow:
|
|
22
22
|
|
|
@@ -194,12 +194,13 @@ durable `.godpowers` artifacts change project truth. The decision is logged to
|
|
|
194
194
|
`.godpowers/YOLO-DECISIONS.md`.
|
|
195
195
|
|
|
196
196
|
Every completing command now ends with a **Godpowers Dashboard**. It shows the
|
|
197
|
-
current phase, tier, step count,
|
|
197
|
+
current phase, tier, step count, workflow progress, PRD and roadmap visibility,
|
|
198
198
|
recent work, proactive checks, open items, and the single recommended next
|
|
199
199
|
action. `/god-status` and `/god-next` use the same shape so the project never
|
|
200
200
|
ends in a vague "done" state. The dashboard is backed by
|
|
201
|
-
`lib/dashboard.js`,
|
|
202
|
-
|
|
201
|
+
`lib/dashboard.js`, and the rendered output names that source when the runtime
|
|
202
|
+
engine is available. Audit, hygiene, and remediation scores are reported as
|
|
203
|
+
separate scores rather than being reused as workflow progress.
|
|
203
204
|
|
|
204
205
|
Godpowers can also inspect automation support:
|
|
205
206
|
|
|
@@ -361,6 +362,7 @@ Pi. T3 Code inherits from the underlying agent (Codex / Claude / OpenCode).
|
|
|
361
362
|
- [Command reference (all 109 skills + 40 agents)](docs/reference.md)
|
|
362
363
|
- [Feature awareness](docs/feature-awareness.md)
|
|
363
364
|
- [Repository documentation sync](docs/repo-doc-sync.md)
|
|
365
|
+
- [Repository surface sync](docs/repo-surface-sync.md)
|
|
364
366
|
- [Roadmap](docs/ROADMAP.md)
|
|
365
367
|
- [Release Notes](RELEASE.md)
|
|
366
368
|
- [Changelog](CHANGELOG.md)
|
package/RELEASE.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Godpowers 1.6.
|
|
1
|
+
# Godpowers 1.6.20 Release
|
|
2
2
|
|
|
3
3
|
Date: 2026-05-16
|
|
4
4
|
|
|
5
|
-
Godpowers 1.6.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
Godpowers 1.6.20 closes the automation gaps found after repository surface
|
|
6
|
+
sync. It adds dedicated route-quality, recipe-coverage, and release-surface
|
|
7
|
+
checks so Godpowers detects disconnected route spawns, missing intent recipes,
|
|
8
|
+
and stale release-facing documentation before declaring a project or release
|
|
9
|
+
current.
|
|
10
10
|
|
|
11
11
|
## What is stable
|
|
12
12
|
|
|
13
13
|
- 109 slash commands
|
|
14
14
|
- 40 specialist agents
|
|
15
15
|
- 13 executable workflows
|
|
16
|
-
-
|
|
16
|
+
- 40 intent recipes
|
|
17
17
|
- 15-runtime installer
|
|
18
18
|
- Codex installs with generated `god-*.toml` agent metadata files
|
|
19
19
|
- Markdown specialist agent contracts at `<runtime>/agents/god-*.md`
|
|
@@ -25,57 +25,71 @@ status, or god-mode closeout declares the repository current.
|
|
|
25
25
|
- Planning-system migration for GSD, BMAD, and Superpowers
|
|
26
26
|
- Managed sync-back companion files for imported source systems
|
|
27
27
|
- Feature awareness for existing Godpowers projects
|
|
28
|
+
- Repository documentation sync checks
|
|
29
|
+
- Repository surface sync checks
|
|
30
|
+
- Route quality, recipe coverage, and release surface sync checks
|
|
28
31
|
|
|
29
32
|
## What is new
|
|
30
33
|
|
|
31
|
-
- Added `lib/
|
|
32
|
-
- Added `
|
|
33
|
-
- Added `
|
|
34
|
-
- Added
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
34
|
+
- Added `lib/route-quality-sync.js`.
|
|
35
|
+
- Added `lib/recipe-coverage-sync.js`.
|
|
36
|
+
- Added `lib/release-surface-sync.js`.
|
|
37
|
+
- Added `scripts/test-automation-surface-sync.js`.
|
|
38
|
+
- Added release maintenance, context refresh, story work, and automation setup
|
|
39
|
+
recipes.
|
|
40
|
+
- `/god-party` now declares concrete parallel specialist personas.
|
|
41
|
+
- `/god-story-build` now declares planner, executor, and reviewer handoffs
|
|
42
|
+
without symbolic spawn tokens.
|
|
43
|
+
- Feature awareness now records route quality, recipe coverage, and release
|
|
44
|
+
surface sync as known runtime features.
|
|
45
|
+
- Package contents checks now require all three new sync helpers.
|
|
46
|
+
|
|
47
|
+
## Automation surface behavior
|
|
48
|
+
|
|
49
|
+
For a Godpowers repository, the helper checks:
|
|
50
|
+
|
|
51
|
+
- every routed specialist spawn resolves to a real agent or built-in runtime
|
|
52
|
+
owner
|
|
53
|
+
- every durable-writing route declares standards coverage or an approved
|
|
54
|
+
exemption
|
|
55
|
+
- high-frequency work has discoverable intent recipes
|
|
56
|
+
- release-facing version surfaces agree with `package.json`
|
|
57
|
+
- package content checks require load-bearing runtime helper files
|
|
58
|
+
- release checklist policy names the current sync guards
|
|
59
|
+
|
|
60
|
+
Detection is read-only by default. Applying sync writes logs and leaves
|
|
61
|
+
judgment-heavy rewrites to scoped specialists.
|
|
56
62
|
|
|
57
63
|
## Auto-invoke and auto-spawn policy
|
|
58
64
|
|
|
59
|
-
Safe repo
|
|
65
|
+
Safe repo surface sync is local runtime work and must be reported as:
|
|
60
66
|
|
|
61
67
|
```text
|
|
62
68
|
Agent: none, local runtime only
|
|
63
69
|
```
|
|
64
70
|
|
|
65
|
-
Godpowers recommends
|
|
66
|
-
|
|
71
|
+
Godpowers recommends scoped specialists only when judgment is needed:
|
|
72
|
+
|
|
73
|
+
- `god-auditor` for agent contract or handoff drift
|
|
74
|
+
- `god-roadmap-reconciler` for workflow or recipe lifecycle drift
|
|
75
|
+
- `god-coordinator` for extension pack drift
|
|
76
|
+
- `god-docs-writer` for release prose drift
|
|
67
77
|
|
|
68
78
|
## Validation
|
|
69
79
|
|
|
70
80
|
Release validation includes:
|
|
71
81
|
|
|
82
|
+
- `node scripts/test-repo-surface-sync.js`
|
|
83
|
+
- `node scripts/test-automation-surface-sync.js`
|
|
72
84
|
- `node scripts/test-repo-doc-sync.js`
|
|
73
85
|
- `node scripts/test-feature-awareness.js`
|
|
86
|
+
- `node scripts/test-dashboard.js`
|
|
74
87
|
- `node scripts/test-context-writer.js`
|
|
75
88
|
- `node scripts/test-planning-systems.js`
|
|
76
89
|
- `node scripts/test-doc-surface-counts.js`
|
|
77
90
|
- `node scripts/validate-skills.js`
|
|
78
91
|
- `git diff --check`
|
|
92
|
+
- `npm run release:check`
|
|
79
93
|
|
|
80
|
-
The `v1.6.
|
|
81
|
-
`godpowers@1.6.
|
|
94
|
+
The `v1.6.20` tag should point to the release commit that matches the npm
|
|
95
|
+
`godpowers@1.6.20` package.
|
package/SKILL.md
CHANGED
|
@@ -155,6 +155,7 @@ Proactive checks:
|
|
|
155
155
|
Reviews: <none | N pending, suggest /god-review-changes>
|
|
156
156
|
Sync: <fresh | missing | stale | local helper ran | suggest /god-sync>
|
|
157
157
|
Docs: <fresh | N stale, suggest /god-docs | repo-doc-sync ran>
|
|
158
|
+
Repo surface: <fresh | N stale, suggest /god-doctor | repo-surface-sync ran>
|
|
158
159
|
Runtime: <not-applicable | known URL, suggest /god-test-runtime | no known URL, defer deployed verification>
|
|
159
160
|
Automation: <not configured | N active | available via provider, suggest /god-automation-setup>
|
|
160
161
|
Security: <clear | sensitive files changed, suggest /god-harden>
|
|
@@ -214,7 +215,7 @@ Auto-invoked:
|
|
|
214
215
|
Trigger: <what caused this automatic step>
|
|
215
216
|
Agent: <god-updater | god-context-writer | none, local runtime only>
|
|
216
217
|
Local syncs:
|
|
217
|
-
+ <feature-awareness | planning-system-import | reverse-sync | source-sync | repo-doc-sync | pillars-sync | checkpoint-sync | context-refresh>: <result or skipped reason>
|
|
218
|
+
+ <feature-awareness | planning-system-import | reverse-sync | source-sync | repo-doc-sync | repo-surface-sync | route-quality-sync | recipe-coverage-sync | release-surface-sync | pillars-sync | checkpoint-sync | context-refresh>: <result or skipped reason>
|
|
218
219
|
Artifacts: <changed files, no-op, or deferred>
|
|
219
220
|
Log: <SYNC-LOG.md, CHECKPOINT.md, REVIEW-REQUIRED.md, or none>
|
|
220
221
|
```
|
|
@@ -244,6 +245,11 @@ Automatic steps that especially need visible reporting:
|
|
|
244
245
|
`/god-sync`, or `/god-mode`
|
|
245
246
|
- repo documentation sync during `/god-sync`, `/god-docs`, `/god-doctor`,
|
|
246
247
|
`/god-status`, or `/god-mode`
|
|
248
|
+
- repo surface sync during `/god-sync`, `/god-docs`, `/god-doctor`,
|
|
249
|
+
`/god-status`, or `/god-mode`
|
|
250
|
+
- route-quality sync, recipe-coverage sync, and release-surface sync through
|
|
251
|
+
repo-surface sync during `/god-sync`, `/god-docs`, `/god-doctor`,
|
|
252
|
+
`/god-status`, or `/god-mode`
|
|
247
253
|
|
|
248
254
|
### 13. Proactive Auto-Invoke Policy
|
|
249
255
|
Godpowers should be proactive from disk evidence, not from guesswork. Before
|
|
@@ -284,6 +290,13 @@ Run these local runtime helpers automatically when their trigger is present:
|
|
|
284
290
|
`lib/repo-doc-sync.run` during `/god-sync`, `/god-docs`, or `/god-mode`
|
|
285
291
|
when README badges, public surface counts, release docs, contribution docs,
|
|
286
292
|
or security policy may have drifted.
|
|
293
|
+
- `lib/repo-surface-sync.detect` during `/god-status` and `/god-doctor`, and
|
|
294
|
+
`lib/repo-surface-sync.run` during `/god-sync`, `/god-docs`, or
|
|
295
|
+
`/god-mode` when command routing, package payload, agent handoffs, workflow
|
|
296
|
+
metadata, recipe routes, extension packs, or release policy may have drifted.
|
|
297
|
+
- `lib/route-quality-sync.detect`, `lib/recipe-coverage-sync.detect`, and
|
|
298
|
+
`lib/release-surface-sync.detect` through repo-surface sync when route
|
|
299
|
+
spawns, high-frequency recipes, or release-facing surfaces may have drifted.
|
|
287
300
|
- Context refresh dry-run after `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`,
|
|
288
301
|
`.cursor/rules/`, `.windsurfrules`, `.github/copilot-instructions.md`,
|
|
289
302
|
`.clinerules`, `.roo/`, or `.continue/` changes.
|
|
@@ -300,6 +313,9 @@ Spawn these agents only when the trigger is direct and scope is bounded:
|
|
|
300
313
|
- `god-docs-writer` when repo-doc-sync reports narrative drift in
|
|
301
314
|
`CHANGELOG.md`, `RELEASE.md`, `CONTRIBUTING.md`, `SECURITY.md`, or
|
|
302
315
|
`SUPPORT.md` after local mechanical sync has finished.
|
|
316
|
+
- `god-auditor`, `god-roadmap-reconciler`, or `god-coordinator` when
|
|
317
|
+
repo-surface-sync reports structural drift that needs agent contract,
|
|
318
|
+
lifecycle graph, or extension-pack judgment.
|
|
303
319
|
- `god-browser-tester` when frontend-visible files changed and a known local,
|
|
304
320
|
preview, staging, or production URL is evidenced.
|
|
305
321
|
- `god-harden-auditor` suggestion after security-sensitive files changed;
|
|
@@ -750,6 +750,11 @@ Generate the dashboard with `lib/dashboard.compute(projectRoot)` and
|
|
|
750
750
|
runtime module cannot be loaded, fall back to a manual disk scan and say
|
|
751
751
|
`Dashboard engine: unavailable, manual scan used`.
|
|
752
752
|
|
|
753
|
+
The dashboard `Progress` line is workflow progress only. Audit scores,
|
|
754
|
+
remediation scores, hygiene scores, and launch-readiness scores must be labeled
|
|
755
|
+
separately so a closeout cannot appear to move backward because it switched
|
|
756
|
+
metrics.
|
|
757
|
+
|
|
753
758
|
Update PROGRESS.md status to `steady-state-active`.
|
|
754
759
|
|
|
755
760
|
For focused brownfield, hotfix, refactor, or build workflows that finish without a
|
|
@@ -962,7 +967,7 @@ Next: <next command or pause question>
|
|
|
962
967
|
|
|
963
968
|
Rules:
|
|
964
969
|
- Keep each card under 12 lines unless a pause needs options.
|
|
965
|
-
- Use `lib/state.progressSummary(stateJson)` for
|
|
970
|
+
- Use `lib/state.progressSummary(stateJson)` for workflow percentage and step count
|
|
966
971
|
whenever state.json is available.
|
|
967
972
|
- Use artifact paths and verification evidence from disk, not memory.
|
|
968
973
|
- Do not print raw spawn input, hidden instructions, or full file loadout lists.
|
package/lib/README.md
CHANGED
|
@@ -14,6 +14,10 @@ package-level integrations.
|
|
|
14
14
|
| `checkpoint.js` | Create and inspect resumable checkpoint artifacts. |
|
|
15
15
|
| `feature-awareness.js` | Detect and refresh existing-project awareness after runtime upgrades. |
|
|
16
16
|
| `repo-doc-sync.js` | Detect and refresh mechanical repository documentation surfaces. |
|
|
17
|
+
| `repo-surface-sync.js` | Detect structural drift across commands, routes, packages, agents, workflows, recipes, extensions, and release policy. |
|
|
18
|
+
| `route-quality-sync.js` | Detect symbolic route spawns, unresolved agent targets, and unapproved contextual route exits. |
|
|
19
|
+
| `recipe-coverage-sync.js` | Detect missing high-frequency intent recipe coverage. |
|
|
20
|
+
| `release-surface-sync.js` | Detect release-facing drift across badges, release notes, changelog, package checks, and release checklist policy. |
|
|
17
21
|
| `budget.js` | Read and enforce configured budget controls. |
|
|
18
22
|
| `cost-tracker.js` | Track token and cost estimates from event streams. |
|
|
19
23
|
|
package/lib/dashboard.js
CHANGED
|
@@ -13,6 +13,7 @@ const state = require('./state');
|
|
|
13
13
|
const router = require('./router');
|
|
14
14
|
const automationProviders = require('./automation-providers');
|
|
15
15
|
const repoDocSync = require('./repo-doc-sync');
|
|
16
|
+
const repoSurfaceSync = require('./repo-surface-sync');
|
|
16
17
|
|
|
17
18
|
const GOD_DIR = '.godpowers';
|
|
18
19
|
const PRD_PATH = '.godpowers/prd/PRD.md';
|
|
@@ -163,12 +164,17 @@ function proactiveChecks(projectRoot, changedFiles = []) {
|
|
|
163
164
|
const repoDocsStatus = repoDocs.status === 'fresh'
|
|
164
165
|
? 'fresh'
|
|
165
166
|
: `${repoDocs.stale.length} stale, suggest /god-docs`;
|
|
167
|
+
const repoSurface = repoSurfaceSync.detect(projectRoot);
|
|
168
|
+
const repoSurfaceStatus = repoSurface.status === 'fresh'
|
|
169
|
+
? 'fresh'
|
|
170
|
+
: `${repoSurface.stale.length} stale, suggest /god-doctor`;
|
|
166
171
|
|
|
167
172
|
return {
|
|
168
173
|
checkpoint,
|
|
169
174
|
reviews: reviews > 0 ? `${reviews} pending, suggest /god-review-changes` : 'none',
|
|
170
175
|
sync,
|
|
171
176
|
docs: repoDocsStatus,
|
|
177
|
+
repoSurface: repoSurfaceStatus,
|
|
172
178
|
runtime: 'not-applicable',
|
|
173
179
|
automation: automationSummary(projectRoot),
|
|
174
180
|
security: sensitiveChanged ? 'sensitive files changed, suggest /god-harden' : 'clear',
|
|
@@ -200,7 +206,8 @@ function planningVisibility(projectRoot, progress) {
|
|
|
200
206
|
prd: { status: prd, path: prd === 'done' ? PRD_PATH : null },
|
|
201
207
|
roadmap: { status: roadmap, path: roadmap === 'done' ? ROADMAP_PATH : null },
|
|
202
208
|
currentMilestone: phase.stepLabel ? `${phase.phase} / ${phase.stepLabel}` : phase.phase,
|
|
203
|
-
completion: `${progress.percent}%
|
|
209
|
+
completion: `${progress.percent}% workflow progress from .godpowers/state.json tracked steps`,
|
|
210
|
+
completionBasis: '.godpowers/state.json workflow steps'
|
|
204
211
|
};
|
|
205
212
|
}
|
|
206
213
|
|
|
@@ -211,6 +218,7 @@ function compute(projectRoot, opts = {}) {
|
|
|
211
218
|
if (!s) {
|
|
212
219
|
const next = { command: '/god-init', reason: 'No Godpowers project initialized' };
|
|
213
220
|
return {
|
|
221
|
+
source: 'runtime dashboard (lib/dashboard.js)',
|
|
214
222
|
state: 'not initialized',
|
|
215
223
|
mode: null,
|
|
216
224
|
lifecycle: 'pre-init',
|
|
@@ -222,7 +230,8 @@ function compute(projectRoot, opts = {}) {
|
|
|
222
230
|
prd: { status: 'missing', path: null },
|
|
223
231
|
roadmap: { status: 'missing', path: null },
|
|
224
232
|
currentMilestone: 'Project initialization',
|
|
225
|
-
completion: '0%
|
|
233
|
+
completion: '0% workflow progress because .godpowers/state.json is missing',
|
|
234
|
+
completionBasis: 'missing .godpowers/state.json'
|
|
226
235
|
},
|
|
227
236
|
proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
|
|
228
237
|
next,
|
|
@@ -242,6 +251,7 @@ function compute(projectRoot, opts = {}) {
|
|
|
242
251
|
if (openItems.length === 0) openItems.push('none');
|
|
243
252
|
|
|
244
253
|
return {
|
|
254
|
+
source: 'runtime dashboard (lib/dashboard.js)',
|
|
245
255
|
state: progress.remaining === 0 ? 'complete' : 'in progress',
|
|
246
256
|
mode: s.mode || s['mode-announced-as'] || null,
|
|
247
257
|
lifecycle: s['lifecycle-phase'] || 'in-arc',
|
|
@@ -271,11 +281,13 @@ function render(dashboard) {
|
|
|
271
281
|
return [
|
|
272
282
|
'Godpowers Dashboard',
|
|
273
283
|
'',
|
|
284
|
+
`Source: ${dashboard.source || 'manual disk scan'}`,
|
|
285
|
+
'',
|
|
274
286
|
'Current status:',
|
|
275
287
|
` State: ${dashboard.state}`,
|
|
276
288
|
` Phase: ${current.phase || 'unknown'}${current.tierNumber !== null && current.tierNumber !== undefined ? ` (tier ${current.tierOrdinal} of ${current.tierCount}, internal ${current.tierKey || `tier-${current.tierNumber}`})` : ''}`,
|
|
277
289
|
` Step: ${current.stepLabel || 'unknown'}${current.stepNumber ? ` (step ${current.stepNumber} of ${current.totalSteps})` : ''}`,
|
|
278
|
-
` Progress: ${progress.percent || 0}% (${progress.completed || 0} of ${progress.total || 0} steps complete)`,
|
|
290
|
+
` Progress: ${progress.percent || 0}% workflow progress (${progress.completed || 0} of ${progress.total || 0} tracked steps complete)`,
|
|
279
291
|
` Worktree: ${dashboard.worktree}`,
|
|
280
292
|
` Index: ${dashboard.index}`,
|
|
281
293
|
'',
|
|
@@ -283,13 +295,14 @@ function render(dashboard) {
|
|
|
283
295
|
` PRD: ${prd.status || 'missing'}${prd.path ? ` ${prd.path}` : ''}`,
|
|
284
296
|
` Roadmap: ${roadmap.status || 'missing'}${roadmap.path ? ` ${roadmap.path}` : ''}`,
|
|
285
297
|
` Current milestone: ${planning.currentMilestone || 'unknown'}`,
|
|
286
|
-
` Completion: ${planning.completion || 'unknown'}`,
|
|
298
|
+
` Completion basis: ${planning.completionBasis || planning.completion || 'unknown'}`,
|
|
287
299
|
'',
|
|
288
300
|
'Proactive checks:',
|
|
289
301
|
` Checkpoint: ${proactive.checkpoint || 'unknown'}`,
|
|
290
302
|
` Reviews: ${proactive.reviews || 'unknown'}`,
|
|
291
303
|
` Sync: ${proactive.sync || 'unknown'}`,
|
|
292
304
|
` Docs: ${proactive.docs || 'unknown'}`,
|
|
305
|
+
` Repo surface: ${proactive.repoSurface || 'unknown'}`,
|
|
293
306
|
` Runtime: ${proactive.runtime || 'unknown'}`,
|
|
294
307
|
` Automation: ${proactive.automation || 'unknown'}`,
|
|
295
308
|
` Security: ${proactive.security || 'unknown'}`,
|
package/lib/feature-awareness.js
CHANGED
|
@@ -40,6 +40,30 @@ const FEATURES = [
|
|
|
40
40
|
since: '1.6.17',
|
|
41
41
|
commands: ['/god-sync', '/god-docs', '/god-doctor', '/god-status', '/god-mode'],
|
|
42
42
|
description: 'Detect and refresh repository documentation surfaces, release docs, and Pillars planning signals.'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'repo-surface-sync',
|
|
46
|
+
since: '1.6.19',
|
|
47
|
+
commands: ['/god-sync', '/god-docs', '/god-doctor', '/god-status', '/god-mode'],
|
|
48
|
+
description: 'Detect structural drift across routing, packages, agents, workflows, recipes, extensions, and release policy.'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'route-quality-sync',
|
|
52
|
+
since: '1.6.19',
|
|
53
|
+
commands: ['/god-sync', '/god-doctor', '/god-status', '/god-mode'],
|
|
54
|
+
description: 'Detect symbolic route spawns, unresolved agent targets, and unapproved contextual route exits.'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'recipe-coverage-sync',
|
|
58
|
+
since: '1.6.19',
|
|
59
|
+
commands: ['/god-sync', '/god-doctor', '/god-status', '/god-mode'],
|
|
60
|
+
description: 'Detect missing intent recipes for release, docs, context refresh, story work, and automation setup.'
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'release-surface-sync',
|
|
64
|
+
since: '1.6.19',
|
|
65
|
+
commands: ['/god-sync', '/god-docs', '/god-doctor', '/god-status', '/god-mode'],
|
|
66
|
+
description: 'Detect release-facing drift across badges, release notes, changelog, package checks, and release checklist policy.'
|
|
43
67
|
}
|
|
44
68
|
];
|
|
45
69
|
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recipe coverage sync.
|
|
3
|
+
*
|
|
4
|
+
* Keeps fuzzy user intent connected to shipped command routes for the
|
|
5
|
+
* high-frequency areas that users naturally ask for in prose.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
|
|
11
|
+
const recipes = require('./recipes');
|
|
12
|
+
|
|
13
|
+
const LOG_PATH = '.godpowers/surface/RECIPE-COVERAGE-SYNC.md';
|
|
14
|
+
|
|
15
|
+
const REQUIRED_COVERAGE = [
|
|
16
|
+
{
|
|
17
|
+
id: 'release-maintenance',
|
|
18
|
+
description: 'release maintenance',
|
|
19
|
+
commands: ['/god-sync', '/god-docs', '/god-version']
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'docs-drift',
|
|
23
|
+
description: 'documentation drift',
|
|
24
|
+
commands: ['/god-docs']
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'context-refresh',
|
|
28
|
+
description: 'context refresh and feature awareness',
|
|
29
|
+
commands: ['/god-context', '/god-sync', '/god-status']
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'story-work',
|
|
33
|
+
description: 'story creation, build, verify, and close',
|
|
34
|
+
commands: ['/god-story', '/god-story-build', '/god-story-verify', '/god-story-close']
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'automation-setup',
|
|
38
|
+
description: 'automation setup and status',
|
|
39
|
+
commands: ['/god-automation-setup', '/god-automation-status']
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
function read(projectRoot, relPath) {
|
|
44
|
+
const file = path.join(projectRoot, relPath);
|
|
45
|
+
if (!fs.existsSync(file)) return '';
|
|
46
|
+
return fs.readFileSync(file, 'utf8');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function write(projectRoot, relPath, content) {
|
|
50
|
+
const file = path.join(projectRoot, relPath);
|
|
51
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
52
|
+
fs.writeFileSync(file, content);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function addCheck(checks, id, status, relPath, message, opts = {}) {
|
|
56
|
+
checks.push({
|
|
57
|
+
area: 'recipe-coverage',
|
|
58
|
+
id,
|
|
59
|
+
status,
|
|
60
|
+
path: relPath,
|
|
61
|
+
message,
|
|
62
|
+
severity: opts.severity || (status === 'fresh' ? 'info' : 'warning'),
|
|
63
|
+
spawn: opts.spawn || null
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function recipePath(projectRoot, name) {
|
|
68
|
+
const rel = `routing/recipes/${name}.yaml`;
|
|
69
|
+
return fs.existsSync(path.join(projectRoot, rel)) ? rel : 'routing/recipes/';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function detect(projectRoot) {
|
|
73
|
+
recipes.clearCache();
|
|
74
|
+
const checks = [];
|
|
75
|
+
const all = recipes.loadAll();
|
|
76
|
+
const recipeTexts = new Map();
|
|
77
|
+
for (const recipe of all) {
|
|
78
|
+
const name = recipe.metadata && recipe.metadata.name;
|
|
79
|
+
if (!name) continue;
|
|
80
|
+
recipeTexts.set(name, read(projectRoot, `routing/recipes/${name}.yaml`));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
for (const required of REQUIRED_COVERAGE) {
|
|
84
|
+
const matched = [...recipeTexts.entries()].filter(([, text]) =>
|
|
85
|
+
required.commands.every((command) => text.includes(command))
|
|
86
|
+
);
|
|
87
|
+
addCheck(
|
|
88
|
+
checks,
|
|
89
|
+
`coverage-${required.id}`,
|
|
90
|
+
matched.length > 0 ? 'fresh' : 'stale',
|
|
91
|
+
matched.length > 0 ? `routing/recipes/${matched[0][0]}.yaml` : recipePath(projectRoot, required.id),
|
|
92
|
+
matched.length > 0
|
|
93
|
+
? `Recipe coverage exists for ${required.description}.`
|
|
94
|
+
: `No recipe covers ${required.description} with ${required.commands.join(', ')}.`,
|
|
95
|
+
{ spawn: matched.length > 0 ? null : 'god-roadmap-reconciler' }
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const stale = checks.filter((check) => check.status !== 'fresh');
|
|
100
|
+
return {
|
|
101
|
+
status: stale.length === 0 ? 'fresh' : 'stale',
|
|
102
|
+
checks,
|
|
103
|
+
stale
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function appendLog(projectRoot, before, after) {
|
|
108
|
+
const now = new Date().toISOString();
|
|
109
|
+
const lines = [];
|
|
110
|
+
if (fs.existsSync(path.join(projectRoot, LOG_PATH))) {
|
|
111
|
+
lines.push(read(projectRoot, LOG_PATH).replace(/\s*$/, ''));
|
|
112
|
+
lines.push('');
|
|
113
|
+
} else {
|
|
114
|
+
lines.push('# Recipe Coverage Sync Log');
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push('- [DECISION] This file records recipe-coverage sync checks run by Godpowers.');
|
|
117
|
+
lines.push('');
|
|
118
|
+
}
|
|
119
|
+
lines.push(`## ${now}`);
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(`- [DECISION] Recipe coverage status before apply was ${before.status}.`);
|
|
122
|
+
lines.push(`- [DECISION] Recipe coverage status after apply is ${after.status}.`);
|
|
123
|
+
lines.push('');
|
|
124
|
+
write(projectRoot, LOG_PATH, lines.join('\n'));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function run(projectRoot, opts = {}) {
|
|
128
|
+
const before = detect(projectRoot);
|
|
129
|
+
const after = detect(projectRoot);
|
|
130
|
+
if (opts.log !== false) appendLog(projectRoot, before, after);
|
|
131
|
+
return {
|
|
132
|
+
before,
|
|
133
|
+
after,
|
|
134
|
+
applied: [],
|
|
135
|
+
logPath: opts.log === false ? null : LOG_PATH
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function summary(report) {
|
|
140
|
+
return report.status === 'fresh' ? 'fresh' : `${report.stale.length} stale`;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
module.exports = {
|
|
144
|
+
LOG_PATH,
|
|
145
|
+
REQUIRED_COVERAGE,
|
|
146
|
+
detect,
|
|
147
|
+
run,
|
|
148
|
+
summary
|
|
149
|
+
};
|