godpowers 2.1.1 → 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.
@@ -50,6 +50,13 @@ Answer each with EVIDENCE from the code:
50
50
  - Did the executor add future options, broad configurability, or generic
51
51
  interfaces that the current slice does not need?
52
52
 
53
+ 6. **Is each planned requirement id annotated in the code?**
54
+ - For each PRD requirement id listed in the slice plan (its `Requirements:`
55
+ field): does the code carry the corresponding `// Implements: P-...`
56
+ annotation that god-executor follows?
57
+ - A planned requirement id with no annotation is a finding, because the
58
+ deliverable ledger derives requirement status from those annotations.
59
+
53
60
  ## Output
54
61
 
55
62
  Return verdict to orchestrator:
@@ -75,6 +82,7 @@ Return verdict to orchestrator:
75
82
  - No scope creep without justification
76
83
  - Every touched file has request-trace evidence
77
84
  - No speculative flexibility or unrelated cleanup entered the diff
85
+ - Every planned requirement id carries its `// Implements: P-...` annotation
78
86
 
79
87
  If FAIL: orchestrator returns the slice to god-executor with the failures.
80
88
  If PASS: orchestrator spawns god-quality-reviewer next.
@@ -33,6 +33,7 @@ title: "Short noun phrase"
33
33
  status: pending
34
34
  owner: <name>
35
35
  deps: []
36
+ requirement: P-MUST-01 # optional; the PRD requirement id this story decomposes
36
37
  created: <ISO date>
37
38
  ---
38
39
 
@@ -61,6 +62,10 @@ As a [persona], I want [capability] so that [outcome].
61
62
  1. Read PRD.md and ARCH.md for context.
62
63
  2. If `--with-stories` from /god-feature: decompose the feature spec
63
64
  into 3-7 stories (don't exceed 10).
65
+ - When a story decomposes a specific PRD functional requirement, reference
66
+ that requirement id (set `requirement: P-MUST-01` in the frontmatter, or
67
+ mention it in the acceptance criteria) so the story traces back to the PRD
68
+ requirement and the deliverable ledger.
64
69
  3. Determine next ID number:
65
70
  - List `.godpowers/stories/<feature-slug>/STORY-*.md`
66
71
  - Use max + 1, zero-padded to 3 digits
@@ -113,6 +113,11 @@ After feature work, every artifact that was impacted needs to reflect reality.
113
113
  - Surfaces drift + impeccable findings to `REVIEW-REQUIRED.md`
114
114
  - Update `state.json.linkage` with current `coverage-pct`, `orphan-count`,
115
115
  `drift-count`, `review-required-items`
116
+ - Refresh deliverable tracking from the updated linkage map:
117
+ - Call `lib/requirements.writeLedger(projectRoot)` to regenerate
118
+ `.godpowers/REQUIREMENTS.md`
119
+ - Cache the summary into `state.json.deliverables` via
120
+ `lib/requirements.summarizeForState`
116
121
  - Emit events: `linkage.snapshot`, `drift.detected` (per finding),
117
122
  `review-required.populated`
118
123
  - Report counts in the final sync status:
@@ -121,6 +126,7 @@ After feature work, every artifact that was impacted needs to reflect reality.
121
126
  - fenced footers updated
122
127
  - drift findings
123
128
  - REVIEW-REQUIRED.md items created
129
+ - requirement coverage: `<done>/<total> done` and any gaps
124
130
 
125
131
  ### Repository documentation sync
126
132
  - Call `lib/repo-doc-sync.run(projectRoot, { changedFiles })` when the runtime
package/bin/install.js CHANGED
@@ -248,7 +248,7 @@ function runInstall(opts, srcDir) {
248
248
  log(`\x1b[32mDone!\x1b[0m Installed Godpowers v${VERSION} for ${installed} runtime(s).`);
249
249
  log('');
250
250
  log(`\x1b[36mInstalled:\x1b[0m`);
251
- log(` ${surface.skills} slash commands (try: /god-mode, /god-next, /god-status)`);
251
+ log(` ${surface.skills} slash commands (try: /god-mode, /god-next, /god-status, /god-progress)`);
252
252
  log(` ${surface.agents} specialist agents`);
253
253
  log(' Templates and references for artifact discipline');
254
254
  log('');
@@ -80,6 +80,7 @@ Next step: run /god-next (it inspects disk state and proposes the next command)
80
80
  Or: /god-mode for the full autonomous project run
81
81
  Or: /god-help to see the catalog
82
82
  Or: /god-status for the full project snapshot
83
+ Or: /god-progress for deliverable progress (requirements done / left)
83
84
  Or: /god-context refresh after installing a newer Godpowers runtime
84
85
 
85
86
  Disk state is authoritative. Conversation memory is not.
package/lib/dashboard.js CHANGED
@@ -10,6 +10,7 @@ const path = require('path');
10
10
  const cp = require('child_process');
11
11
 
12
12
  const state = require('./state');
13
+ const requirements = require('./requirements');
13
14
  const router = require('./router');
14
15
  const automationProviders = require('./automation-providers');
15
16
  const repoDocSync = require('./repo-doc-sync');
@@ -239,6 +240,7 @@ function compute(projectRoot, opts = {}) {
239
240
  proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
240
241
  host: hostCapabilities.detect(projectRoot, opts.host || {}),
241
242
  next,
243
+ deliverables: { hasRequirements: false },
242
244
  openItems: ['No .godpowers/state.json found']
243
245
  };
244
246
  result.actionBrief = actionBrief(result);
@@ -251,6 +253,14 @@ function compute(projectRoot, opts = {}) {
251
253
  const openItems = [];
252
254
  const drift = state.detectDrift(projectRoot);
253
255
 
256
+ const buildSub = s.tiers && s.tiers['tier-2'] && s.tiers['tier-2'].build;
257
+ const deliverables = requirements.derive(projectRoot, {
258
+ buildComplete: Boolean(buildSub && state.isCompleteStatus(buildSub.status))
259
+ });
260
+ if (deliverables.gaps.length > 0) {
261
+ openItems.push(`${deliverables.gaps.length} requirement(s) in a done increment with no linked code, see ${requirements.LEDGER_PATH}`);
262
+ }
263
+
254
264
  if (drift.length > 0) openItems.push(`${drift.length} artifact drift item(s), suggest /god-repair`);
255
265
  if (next && next.blocker) openItems.push(`${next.blocker} blocks next route`);
256
266
  if (reviewCount(projectRoot) > 0) openItems.push('pending review items');
@@ -269,6 +279,7 @@ function compute(projectRoot, opts = {}) {
269
279
  proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
270
280
  host: hostCapabilities.detect(projectRoot, opts.host || {}),
271
281
  next,
282
+ deliverables,
272
283
  openItems
273
284
  };
274
285
  result.actionBrief = actionBrief(result);
@@ -314,6 +325,11 @@ function render(dashboard, opts = {}) {
314
325
  const progress = dashboard.progress || {};
315
326
  const prd = planning.prd || {};
316
327
  const roadmap = planning.roadmap || {};
328
+ const deliverables = dashboard.deliverables || { hasRequirements: false };
329
+ const deliverableLines = requirements.renderProgressLines(deliverables);
330
+ const deliverableBrief = deliverables.hasRequirements
331
+ ? ` Requirements: ${requirements.progressBar(deliverables.summary.done, deliverables.summary.total)} done (${deliverables.summary.percent}%)`
332
+ : null;
317
333
  const openItems = dashboard.openItems && dashboard.openItems.length > 0
318
334
  ? dashboard.openItems
319
335
  : ['none'];
@@ -332,6 +348,7 @@ function render(dashboard, opts = {}) {
332
348
  'Current status:',
333
349
  ` State: ${dashboard.state}`,
334
350
  ` Progress: ${progress.percent || 0}% workflow progress (${progress.completed || 0} of ${progress.total || 0} tracked steps complete)`,
351
+ ...(deliverableBrief ? [deliverableBrief] : []),
335
352
  '',
336
353
  'Next:',
337
354
  ` Recommended: ${next.command || 'describe the next intent'}`,
@@ -365,6 +382,9 @@ function render(dashboard, opts = {}) {
365
382
  ` Current milestone: ${planning.currentMilestone || 'unknown'}`,
366
383
  ` Completion basis: ${planning.completionBasis || planning.completion || 'unknown'}`,
367
384
  '',
385
+ 'Deliverable progress:',
386
+ ...deliverableLines,
387
+ '',
368
388
  'Proactive checks:',
369
389
  ` Checkpoint: ${proactive.checkpoint || 'unknown'}`,
370
390
  ` Reviews: ${proactive.reviews || 'unknown'}`,
@@ -118,6 +118,12 @@ const FEATURES = [
118
118
  since: '1.6.22',
119
119
  commands: ['/god-suite-release'],
120
120
  description: 'Plan Mode D suite releases with impacted dependents and planned writes before mutation.'
121
+ },
122
+ {
123
+ id: 'deliverable-progress-tracking',
124
+ since: '2.2.0',
125
+ commands: ['/god-progress', '/god-status', '/god-sync'],
126
+ description: 'Track which PRD requirements and roadmap increments are done, in progress, or not started, derived from the linkage map and surfaced in the .godpowers/REQUIREMENTS.md ledger.'
121
127
  }
122
128
  ];
123
129