godpowers 2.2.0 → 2.2.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.
- package/CHANGELOG.md +11 -0
- package/README.md +2 -2
- package/RELEASE.md +17 -25
- package/lib/requirements.js +37 -5
- package/lib/reverse-sync.js +10 -1
- package/package.json +1 -1
- package/skills/god-doctor.md +1 -1
- package/skills/god-version.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.2.1] - 2026-05-30
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Made `.godpowers/REQUIREMENTS.md` stable on no-op regenerations by ignoring
|
|
14
|
+
generated timestamp-only changes and removing the extra blank line at EOF.
|
|
15
|
+
- Persisted reverse-sync deliverable summaries into `state.json.deliverables`,
|
|
16
|
+
matching the documented `/god-sync` and reverse-sync behavior.
|
|
17
|
+
- Reconciled the Godpowers self-ledger so the shipped deliverable-progress
|
|
18
|
+
feature is marked done in `.godpowers/roadmap/ROADMAP.md`,
|
|
19
|
+
`.godpowers/REQUIREMENTS.md`, and `.godpowers/state.json`.
|
|
20
|
+
|
|
10
21
|
## [2.2.0] - 2026-05-30
|
|
11
22
|
|
|
12
23
|
### Added
|
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.**
|
|
@@ -21,7 +21,7 @@ Godpowers makes AI coding accountable: every serious run should leave disk
|
|
|
21
21
|
state, artifacts, validation gates, host guarantees, and a next action. Code is
|
|
22
22
|
only one output. The project memory and proof trail matter too.
|
|
23
23
|
|
|
24
|
-
Version 2.2.
|
|
24
|
+
Version 2.2.1 keeps the proof loop executable. `npx godpowers quick-proof
|
|
25
25
|
--project=.` now renders a shipped fixture with real `.godpowers/state.json`,
|
|
26
26
|
computed next action, missing-artifact visibility, and host guarantees. The
|
|
27
27
|
2.0 line also ships a proof transcript, adoption canary harness, published npm
|
package/RELEASE.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# Godpowers 2.2.
|
|
1
|
+
# Godpowers 2.2.1 Release
|
|
2
2
|
|
|
3
3
|
> Status: Ready for release
|
|
4
4
|
> Date: 2026-05-30
|
|
5
5
|
|
|
6
|
-
Godpowers 2.2.
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
Godpowers 2.2.1 is a patch release for the 2.2 deliverable-progress line. It
|
|
7
|
+
keeps the public slash-command surface stable and fixes ledger persistence,
|
|
8
|
+
idempotence, and release-state reconciliation.
|
|
9
9
|
|
|
10
10
|
## What's in this release
|
|
11
11
|
|
|
@@ -16,23 +16,15 @@ surface stable and backward compatible.
|
|
|
16
16
|
|
|
17
17
|
## Highlights
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
requirement ids each slice delivers, `god-executor` stamps `// Implements: P-...`
|
|
29
|
-
annotations, and the spec and quality reviewers verify them.
|
|
30
|
-
- The dashboard (`/god-status`, `/god-next`, `/god-mode` closeout) gains a
|
|
31
|
-
`Deliverable progress` section, and a `whats-done` recipe routes natural
|
|
32
|
-
language like "how far along are we" to `/god-progress`.
|
|
33
|
-
- Documentation reconciled with the shipped surface and version: accurate
|
|
34
|
-
counts and `/god-progress`/`REQUIREMENTS.md` awareness across README,
|
|
35
|
-
ARCHITECTURE, reference, linkage, recipes, and the artifact inventories.
|
|
19
|
+
- `.godpowers/REQUIREMENTS.md` no longer rewrites on timestamp-only no-op
|
|
20
|
+
regenerations, and the generated ledger no longer carries an extra blank line
|
|
21
|
+
at EOF.
|
|
22
|
+
- `lib/reverse-sync.js` now persists deliverable summaries into
|
|
23
|
+
`state.json.deliverables`, matching the documented `/god-sync` behavior.
|
|
24
|
+
- The Godpowers self-ledger now reports the shipped deliverable-progress feature
|
|
25
|
+
as done across roadmap, requirements ledger, and state cache.
|
|
26
|
+
- Regression tests cover no-op ledger writes, state-cache persistence, and
|
|
27
|
+
no-op reverse-sync stability.
|
|
36
28
|
|
|
37
29
|
## Validation
|
|
38
30
|
|
|
@@ -42,14 +34,14 @@ surface stable and backward compatible.
|
|
|
42
34
|
|
|
43
35
|
## Upgrade
|
|
44
36
|
|
|
45
|
-
- `npm install -g godpowers@2.2.
|
|
37
|
+
- `npm install -g godpowers@2.2.1` or `npx godpowers@2.2.1`
|
|
46
38
|
- Re-run `/god-context` in each project to refresh installed runtime metadata
|
|
47
39
|
- No breaking changes; existing `.godpowers/` state is compatible. Projects gain
|
|
48
40
|
a `REQUIREMENTS.md` ledger the next time `/god-progress` or `/god-sync` runs.
|
|
49
41
|
|
|
50
42
|
## Notes
|
|
51
43
|
|
|
52
|
-
- GitHub release creation for `v2.2.
|
|
44
|
+
- GitHub release creation for `v2.2.1`
|
|
53
45
|
- The tag should match the npm package version
|
|
54
|
-
- The `v2.2.
|
|
55
|
-
`godpowers@2.2.
|
|
46
|
+
- The `v2.2.1` tag should point to the release commit that matches the npm
|
|
47
|
+
`godpowers@2.2.1` package.
|
package/lib/requirements.js
CHANGED
|
@@ -363,6 +363,27 @@ function progressBar(done, total, width = 20) {
|
|
|
363
363
|
|
|
364
364
|
const MARK = { done: '[x]', 'in-progress': '[~]', untouched: '[ ]' };
|
|
365
365
|
const INC_MARK = { done: '[x]', building: '[~]', pending: '[ ]' };
|
|
366
|
+
const UPDATED_LINE_RE = /^Updated: .+$/m;
|
|
367
|
+
|
|
368
|
+
function finishLedger(lines) {
|
|
369
|
+
while (lines.length > 0 && lines[lines.length - 1] === '') lines.pop();
|
|
370
|
+
return lines.join('\n');
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function normalizeLedgerTimestamp(content) {
|
|
374
|
+
return String(content).replace(UPDATED_LINE_RE, 'Updated: <timestamp>');
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
function withoutUpdated(value) {
|
|
378
|
+
if (!value || typeof value !== 'object') return value;
|
|
379
|
+
const copy = JSON.parse(JSON.stringify(value));
|
|
380
|
+
delete copy.updated;
|
|
381
|
+
return copy;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function sameIgnoringUpdated(a, b) {
|
|
385
|
+
return JSON.stringify(withoutUpdated(a)) === JSON.stringify(withoutUpdated(b));
|
|
386
|
+
}
|
|
366
387
|
|
|
367
388
|
/**
|
|
368
389
|
* Compact lines for the dashboard "Deliverable progress" section.
|
|
@@ -411,7 +432,7 @@ function renderLedger(derived) {
|
|
|
411
432
|
out.push('No requirements are declared yet. Once the PRD lists MUST/SHOULD/COULD');
|
|
412
433
|
out.push('requirements with stable ids (P-MUST-01, ...), they appear here.');
|
|
413
434
|
out.push('');
|
|
414
|
-
return out
|
|
435
|
+
return finishLedger(out);
|
|
415
436
|
}
|
|
416
437
|
|
|
417
438
|
out.push(`Progress: ${progressBar(s.done, s.total)} done (${s.percent}%) | ${s.inProgress} in progress | ${s.untouched} not started`);
|
|
@@ -469,23 +490,30 @@ function renderLedger(derived) {
|
|
|
469
490
|
out.push('');
|
|
470
491
|
}
|
|
471
492
|
|
|
472
|
-
return out
|
|
493
|
+
return finishLedger(out);
|
|
473
494
|
}
|
|
474
495
|
|
|
475
496
|
function writeLedger(projectRoot, derived) {
|
|
476
497
|
const data = derived || derive(projectRoot);
|
|
477
498
|
const file = path.join(projectRoot, LEDGER_PATH);
|
|
478
499
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
479
|
-
|
|
500
|
+
const rendered = renderLedger(data) + '\n';
|
|
501
|
+
if (fs.existsSync(file)) {
|
|
502
|
+
const current = fs.readFileSync(file, 'utf8');
|
|
503
|
+
if (normalizeLedgerTimestamp(current) === normalizeLedgerTimestamp(rendered)) {
|
|
504
|
+
return LEDGER_PATH;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
fs.writeFileSync(file, rendered);
|
|
480
508
|
return LEDGER_PATH;
|
|
481
509
|
}
|
|
482
510
|
|
|
483
511
|
/**
|
|
484
512
|
* Small cacheable summary for state.json (state.deliverables).
|
|
485
513
|
*/
|
|
486
|
-
function summarizeForState(derived) {
|
|
514
|
+
function summarizeForState(derived, currentSummary = null) {
|
|
487
515
|
const s = derived.summary;
|
|
488
|
-
|
|
516
|
+
const next = {
|
|
489
517
|
updated: derived.updated,
|
|
490
518
|
source: 'PRD + ROADMAP + linkage + build state',
|
|
491
519
|
requirements: {
|
|
@@ -505,6 +533,10 @@ function summarizeForState(derived) {
|
|
|
505
533
|
})),
|
|
506
534
|
gaps: derived.gaps.length
|
|
507
535
|
};
|
|
536
|
+
if (currentSummary && currentSummary.updated && sameIgnoringUpdated(currentSummary, next)) {
|
|
537
|
+
next.updated = currentSummary.updated;
|
|
538
|
+
}
|
|
539
|
+
return next;
|
|
508
540
|
}
|
|
509
541
|
|
|
510
542
|
module.exports = {
|
package/lib/reverse-sync.js
CHANGED
|
@@ -27,6 +27,7 @@ const reviewRequired = require('./review-required');
|
|
|
27
27
|
const impeccable = require('./impeccable-bridge');
|
|
28
28
|
const sourceSync = require('./source-sync');
|
|
29
29
|
const requirements = require('./requirements');
|
|
30
|
+
const state = require('./state');
|
|
30
31
|
|
|
31
32
|
const FENCE_BEGIN = '<!-- godpowers:linkage:begin -->';
|
|
32
33
|
const FENCE_END = '<!-- godpowers:linkage:end -->';
|
|
@@ -321,7 +322,15 @@ function run(projectRoot, opts = {}) {
|
|
|
321
322
|
const derived = requirements.derive(projectRoot);
|
|
322
323
|
if (derived.hasRequirements) {
|
|
323
324
|
requirements.writeLedger(projectRoot, derived);
|
|
324
|
-
|
|
325
|
+
const currentState = state.read(projectRoot);
|
|
326
|
+
requirementsSummary = requirements.summarizeForState(
|
|
327
|
+
derived,
|
|
328
|
+
currentState && currentState.deliverables
|
|
329
|
+
);
|
|
330
|
+
if (currentState) {
|
|
331
|
+
currentState.deliverables = requirementsSummary;
|
|
332
|
+
state.write(projectRoot, currentState);
|
|
333
|
+
}
|
|
325
334
|
}
|
|
326
335
|
} catch (e) {
|
|
327
336
|
requirementsSummary = null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "godpowers",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "AI-powered development system: 111 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/skills/god-doctor.md
CHANGED
|
@@ -50,7 +50,7 @@ GODPOWERS DOCTOR
|
|
|
50
50
|
Install: claude (~/.claude/)
|
|
51
51
|
[OK] 111 skills installed
|
|
52
52
|
[OK] 40 agents installed
|
|
53
|
-
[OK] VERSION matches (2.2.
|
|
53
|
+
[OK] VERSION matches (2.2.1)
|
|
54
54
|
[WARN] routing/god-doctor.yaml exists but skill file did not until now
|
|
55
55
|
|
|
56
56
|
Project: /Users/.../my-project/.godpowers/
|
package/skills/god-version.md
CHANGED
|
@@ -14,7 +14,7 @@ Print version and a short capability summary.
|
|
|
14
14
|
## Output
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
Godpowers v2.2.
|
|
17
|
+
Godpowers v2.2.1
|
|
18
18
|
Install: /Users/.../.claude/ (matches package.json)
|
|
19
19
|
Surface: 111 skills, 40 agents, 13 workflows, 41 recipes
|
|
20
20
|
Schema: intent.v1, state.v1, events.v1, workflow.v1, routing.v1, recipe.v1
|