godpowers 3.0.1 → 3.11.0

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 (67) hide show
  1. package/CHANGELOG.md +255 -2
  2. package/README.md +31 -14
  3. package/RELEASE.md +21 -33
  4. package/SKILL.md +71 -112
  5. package/bin/install.js +44 -0
  6. package/fixtures/gate/harden-pass/.godpowers/state.json +26 -0
  7. package/lib/README.md +1 -0
  8. package/lib/artifact-map.js +2 -1
  9. package/lib/cli-dispatch.js +449 -3
  10. package/lib/command-families.js +10 -2
  11. package/lib/evidence/.provenance.json +45 -0
  12. package/lib/evidence-import.js +147 -0
  13. package/lib/evidence.js +908 -0
  14. package/lib/gate.js +26 -15
  15. package/lib/install-profiles.js +4 -1
  16. package/lib/installer-args.js +241 -1
  17. package/lib/quarterback.js +183 -0
  18. package/lib/surface-profile.js +168 -0
  19. package/lib/work-report.js +137 -0
  20. package/package.json +2 -2
  21. package/references/orchestration/GOD-MODE-RUNBOOK.md +9 -14
  22. package/references/orchestration/GOD-ORCHESTRATOR-RUNBOOK.md +40 -82
  23. package/references/shared/DASHBOARD-CONTRACT.md +66 -29
  24. package/references/shared/README.md +1 -1
  25. package/routing/god-demo.yaml +35 -0
  26. package/routing/god-first-run.yaml +34 -0
  27. package/routing/god-surface.yaml +39 -0
  28. package/routing/recipes/try-safely.yaml +26 -0
  29. package/skills/god-agent-audit.md +5 -6
  30. package/skills/god-archaeology.md +5 -6
  31. package/skills/god-audit.md +6 -7
  32. package/skills/god-automation-setup.md +6 -7
  33. package/skills/god-automation-status.md +6 -7
  34. package/skills/god-context-scan.md +7 -8
  35. package/skills/god-demo.md +53 -0
  36. package/skills/god-design-impact.md +5 -6
  37. package/skills/god-discuss.md +5 -6
  38. package/skills/god-docs.md +5 -10
  39. package/skills/god-doctor.md +8 -9
  40. package/skills/god-dogfood.md +7 -10
  41. package/skills/god-explore.md +5 -7
  42. package/skills/god-first-run.md +64 -0
  43. package/skills/god-harden.md +5 -2
  44. package/skills/god-help.md +77 -51
  45. package/skills/god-hygiene.md +5 -6
  46. package/skills/god-lifecycle.md +11 -13
  47. package/skills/god-list-assumptions.md +7 -8
  48. package/skills/god-locate.md +7 -8
  49. package/skills/god-map-codebase.md +5 -6
  50. package/skills/god-migrate.md +6 -15
  51. package/skills/god-next.md +16 -17
  52. package/skills/god-preflight.md +7 -8
  53. package/skills/god-progress.md +7 -8
  54. package/skills/god-reconcile.md +5 -6
  55. package/skills/god-reconstruct.md +5 -7
  56. package/skills/god-refactor.md +6 -7
  57. package/skills/god-roadmap-check.md +6 -7
  58. package/skills/god-scan.md +5 -9
  59. package/skills/god-spike.md +5 -6
  60. package/skills/god-standards.md +5 -6
  61. package/skills/god-status.md +12 -10
  62. package/skills/god-surface.md +61 -0
  63. package/skills/god-sync.md +4 -8
  64. package/skills/god-tech-debt.md +5 -6
  65. package/skills/god-test-runtime.md +4 -8
  66. package/skills/god-version.md +1 -1
  67. package/skills/god.md +53 -52
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Runtime surface profile preview and apply helper.
3
+ */
4
+
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+
8
+ const { resolveRuntime, runtimeKeys } = require('./installer-runtimes');
9
+ const profiles = require('./install-profiles');
10
+ const installer = require('./installer-core');
11
+
12
+ function availableSkillNames(srcDir) {
13
+ const skillsDir = path.join(srcDir, 'skills');
14
+ if (!fs.existsSync(skillsDir)) return [];
15
+ return fs.readdirSync(skillsDir)
16
+ .filter((file) => /^god.*\.md$/.test(file))
17
+ .map((file) => path.basename(file, '.md'))
18
+ .sort();
19
+ }
20
+
21
+ function isRuntimeSkillName(name) {
22
+ return name === 'god' || name.startsWith('god-');
23
+ }
24
+
25
+ function installedSkillNames(runtime) {
26
+ const skillsDir = path.join(runtime.configDir, runtime.skillsDir);
27
+ if (!fs.existsSync(skillsDir)) return [];
28
+ const names = [];
29
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
30
+ if (entry.isDirectory()) {
31
+ const skillFile = path.join(skillsDir, entry.name, 'SKILL.md');
32
+ if (fs.existsSync(skillFile) && isRuntimeSkillName(entry.name)) {
33
+ names.push(entry.name);
34
+ }
35
+ continue;
36
+ }
37
+ if (entry.isFile() && entry.name.endsWith('.md')) {
38
+ const name = path.basename(entry.name, '.md');
39
+ if (isRuntimeSkillName(name)) names.push(name);
40
+ }
41
+ }
42
+ return [...new Set(names)].sort();
43
+ }
44
+
45
+ function currentProfile(runtime) {
46
+ const marker = path.join(runtime.configDir, 'GODPOWERS_PROFILE');
47
+ if (!fs.existsSync(marker)) return 'unknown';
48
+ const text = fs.readFileSync(marker, 'utf8').trim();
49
+ return text || 'unknown';
50
+ }
51
+
52
+ function targetRuntimeKeys(opts = {}) {
53
+ if (opts.all) return runtimeKeys();
54
+ if (opts.runtimes && opts.runtimes.length > 0) return opts.runtimes.slice();
55
+ return runtimeKeys().filter((key) => {
56
+ const runtime = resolveRuntime(key, opts);
57
+ return runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'));
58
+ });
59
+ }
60
+
61
+ function diffSkills(selected, installed) {
62
+ const selectedSet = new Set(selected);
63
+ const installedSet = new Set(installed);
64
+ return {
65
+ add: selected.filter((name) => !installedSet.has(name)),
66
+ remove: installed.filter((name) => !selectedSet.has(name))
67
+ };
68
+ }
69
+
70
+ function plan(srcDir = path.resolve(__dirname, '..'), opts = {}) {
71
+ const profileList = profiles.normalizeProfiles(opts.profile || 'core');
72
+ const profile = profileList.join(',');
73
+ const available = availableSkillNames(srcDir);
74
+ const selected = [...profiles.selectedSkillNames(profile, available)].sort();
75
+ const keys = targetRuntimeKeys(opts);
76
+ const targets = keys.map((key) => {
77
+ const runtime = resolveRuntime(key, opts);
78
+ const installed = runtime ? installedSkillNames(runtime) : [];
79
+ const diff = diffSkills(selected, installed);
80
+ return {
81
+ key,
82
+ name: runtime ? runtime.name : key,
83
+ configDir: runtime ? runtime.configDir : null,
84
+ skillsDir: runtime ? path.join(runtime.configDir, runtime.skillsDir) : null,
85
+ installed: Boolean(runtime && fs.existsSync(path.join(runtime.configDir, 'GODPOWERS_VERSION'))),
86
+ currentProfile: runtime ? currentProfile(runtime) : 'unknown',
87
+ currentCount: installed.length,
88
+ selectedCount: selected.length,
89
+ add: diff.add,
90
+ remove: diff.remove
91
+ };
92
+ });
93
+
94
+ return {
95
+ profile,
96
+ description: profiles.describeProfiles(profile),
97
+ mode: opts.apply ? 'apply' : 'dry-run',
98
+ selectedCount: selected.length,
99
+ availableCount: available.length,
100
+ targets
101
+ };
102
+ }
103
+
104
+ function apply(srcDir = path.resolve(__dirname, '..'), opts = {}) {
105
+ const keys = targetRuntimeKeys(opts);
106
+ if (keys.length === 0) {
107
+ throw new Error('surface apply requires an installed runtime, --all, or an explicit runtime flag');
108
+ }
109
+ const results = [];
110
+ for (const key of keys) {
111
+ const ok = installer.installForRuntime(key, srcDir, { ...opts, profile: opts.profile || 'core' });
112
+ results.push({ key, ok });
113
+ }
114
+ return results;
115
+ }
116
+
117
+ function renderList(items, max = 6) {
118
+ if (!items || items.length === 0) return 'none';
119
+ const shown = items.slice(0, max).join(', ');
120
+ const remaining = items.length - max;
121
+ return remaining > 0 ? `${shown}, and ${remaining} more` : shown;
122
+ }
123
+
124
+ function render(report) {
125
+ const lines = [
126
+ 'Godpowers Surface',
127
+ '',
128
+ `Profile: ${report.description}`,
129
+ `Mode: ${report.mode}`,
130
+ `Selected commands: ${report.selectedCount} of ${report.availableCount}`,
131
+ '',
132
+ 'Runtime targets:'
133
+ ];
134
+
135
+ if (report.targets.length === 0) {
136
+ lines.push(' none detected. Pass --claude, --codex, or --all.');
137
+ } else {
138
+ for (const target of report.targets) {
139
+ lines.push(` - ${target.name}: current ${target.currentProfile}, selected ${target.selectedCount} commands`);
140
+ lines.push(` Path: ${target.skillsDir}`);
141
+ lines.push(` Add: ${renderList(target.add)}`);
142
+ lines.push(` Remove: ${renderList(target.remove)}`);
143
+ }
144
+ }
145
+
146
+ lines.push('');
147
+ lines.push('Next commands:');
148
+ if (report.targets.length === 0) {
149
+ lines.push('- godpowers surface --profile=core --codex --global --dry-run: Preview the core surface for Codex.');
150
+ } else if (report.mode === 'dry-run') {
151
+ const first = report.targets[0];
152
+ lines.push(`- godpowers surface --profile=${report.profile} --${first.key} --global --apply: Apply this profile to ${first.name}.`);
153
+ } else {
154
+ lines.push('- /god-help: Open the compact help view after the surface switch.');
155
+ }
156
+ lines.push('- /god-help all: Show the complete catalog when you need every command.');
157
+
158
+ return lines.join('\n');
159
+ }
160
+
161
+ module.exports = {
162
+ availableSkillNames,
163
+ installedSkillNames,
164
+ targetRuntimeKeys,
165
+ plan,
166
+ apply,
167
+ render
168
+ };
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Work report: the chat play-by-play (Phase 3 visibility gene).
3
+ *
4
+ * Rebound from Mythify's build_work_report: cursor-based, reads the evidence
5
+ * ledger, surfaces an "Attention" section for reds, and advances a cursor
6
+ * unless --peek. The cursor lives at .godpowers/ledger/reports/cursor.json so a
7
+ * fresh session can emit only what is new since the last report.
8
+ *
9
+ * Read-mostly: report() reads the ledger and, unless peek is set, advances the
10
+ * report cursor. It never mutates state.json.
11
+ *
12
+ * @typedef {Object} WorkReport
13
+ * @property {string} since "last" or "all".
14
+ * @property {boolean} peek Whether the cursor was left unadvanced.
15
+ * @property {Object[]} records The ledger records in the window, oldest first.
16
+ * @property {Object[]} attention Executed records that did not verify (reds).
17
+ * @property {{ total: number, passed: number, failed: number, attested: number }} summary
18
+ * @property {{ previous: string|null, next: string|null }} cursor
19
+ */
20
+
21
+ const fs = require('fs');
22
+ const path = require('path');
23
+
24
+ const atomic = require('./atomic-write');
25
+ const evidence = require('./evidence');
26
+
27
+ function reportsDir(projectRoot) {
28
+ return path.join(projectRoot, '.godpowers', 'ledger', 'reports');
29
+ }
30
+
31
+ function cursorPath(projectRoot) {
32
+ return path.join(reportsDir(projectRoot), 'cursor.json');
33
+ }
34
+
35
+ function readCursor(projectRoot) {
36
+ try {
37
+ return JSON.parse(fs.readFileSync(cursorPath(projectRoot), 'utf8'));
38
+ } catch (_) {
39
+ return {};
40
+ }
41
+ }
42
+
43
+ function writeCursor(projectRoot, cursor) {
44
+ fs.mkdirSync(reportsDir(projectRoot), { recursive: true });
45
+ atomic.writeJsonAtomic(cursorPath(projectRoot), cursor);
46
+ }
47
+
48
+ function summarize(window) {
49
+ const executed = window.filter((r) => r && r.kind === 'executed');
50
+ return {
51
+ total: window.length,
52
+ passed: executed.filter((r) => r.verified).length,
53
+ failed: executed.filter((r) => !r.verified).length,
54
+ attested: window.filter((r) => r && r.kind === 'attested').length
55
+ };
56
+ }
57
+
58
+ /**
59
+ * Build the work report for records since the last cursor (or all records).
60
+ *
61
+ * @param {{ since?: string, peek?: boolean, projectRoot?: string }} [opts]
62
+ * @returns {WorkReport}
63
+ */
64
+ function report(opts = {}) {
65
+ const projectRoot = path.resolve(opts.projectRoot || process.cwd());
66
+ const since = opts.since === 'all' ? 'all' : 'last';
67
+ const peek = Boolean(opts.peek);
68
+
69
+ const records = evidence.read(projectRoot); // oldest first (append order)
70
+ const cursor = readCursor(projectRoot);
71
+ const lastTs = cursor.lastTs || null;
72
+
73
+ const window = since === 'all'
74
+ ? records.slice()
75
+ : records.filter((r) => r && r.timestamp && (!lastTs || r.timestamp > lastTs));
76
+
77
+ const attention = window.filter((r) => r && r.kind === 'executed' && !r.verified);
78
+ const newest = window.length ? window[window.length - 1].timestamp : lastTs;
79
+
80
+ if (!peek && newest && newest !== lastTs) {
81
+ writeCursor(projectRoot, { lastTs: newest });
82
+ }
83
+
84
+ return {
85
+ since,
86
+ peek,
87
+ records: window,
88
+ attention,
89
+ summary: summarize(window),
90
+ cursor: { previous: lastTs, next: newest || null }
91
+ };
92
+ }
93
+
94
+ function describeRecord(record) {
95
+ const label = record.claim || record.command || '(unlabeled)';
96
+ if (record.kind === 'attested') {
97
+ return ` ATTESTED ${record.substep || '-'} ${label}`;
98
+ }
99
+ const verdict = record.verified ? 'PASS' : 'FAIL';
100
+ return ` ${verdict} ${record.substep || '-'} exit ${record.exit_code} ${label}`;
101
+ }
102
+
103
+ function render(result) {
104
+ const lines = [];
105
+ lines.push('Godpowers Work Report');
106
+ lines.push('');
107
+ if (result.records.length === 0) {
108
+ lines.push(result.since === 'all'
109
+ ? 'No verification records yet.'
110
+ : 'Nothing new since the last report.');
111
+ return lines.join('\n');
112
+ }
113
+ lines.push(`Since: ${result.since}${result.peek ? ' (peek, cursor not advanced)' : ''}`);
114
+ lines.push('');
115
+ lines.push('Play-by-play:');
116
+ for (const record of result.records) {
117
+ lines.push(describeRecord(record));
118
+ }
119
+ if (result.attention.length > 0) {
120
+ lines.push('');
121
+ lines.push('Attention (unverified):');
122
+ for (const record of result.attention) {
123
+ lines.push(describeRecord(record));
124
+ }
125
+ }
126
+ const s = result.summary;
127
+ lines.push('');
128
+ lines.push(`Summary: ${s.passed} passed, ${s.failed} failed, ${s.attested} attested (${s.total} record(s))`);
129
+ return lines.join('\n');
130
+ }
131
+
132
+ module.exports = {
133
+ report,
134
+ render,
135
+ reportsDir,
136
+ cursorPath
137
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "godpowers",
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.",
3
+ "version": "3.11.0",
4
+ "description": "AI-powered development system: 120 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
  },
@@ -10,8 +10,8 @@ Show:
10
10
  - detected resume or project mode in plain language
11
11
  - a compact "Next step" card before each visible phase or tier sub-step
12
12
  - a compact "Step result" card after each visible phase or tier sub-step
13
- - every auto-invoked command, agent, and local runtime helper using an
14
- `Auto-invoked:` or `Sync status:` card
13
+ - concise notes for automatic work that changes artifacts, review items, or
14
+ recommendations, with details written to logs
15
15
  - plain-language workflow names. Say "project run" or "workflow" instead of
16
16
  unexplained "arc" in visible output
17
17
  - PRD and roadmap visibility in status and closeout blocks when artifacts
@@ -19,9 +19,8 @@ Show:
19
19
  - short progress updates for phases, commands, validations, and file edits
20
20
  - concise validation summaries instead of full command noise when possible
21
21
  - final changed paths, validation results, and completion or pause status
22
- - final Godpowers Dashboard from disk, including phase, tier, step, progress,
23
- planning visibility, proactive checks, open items, worktree/index state, and
24
- recommended next action
22
+ - final compact action brief from disk, with `/god-status --full` offered for
23
+ the complete dashboard
25
24
 
26
25
  Hide:
27
26
  - raw spawn input
@@ -272,15 +271,11 @@ Periodic hygiene:
272
271
  Open items:
273
272
  1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
274
273
 
275
- Next:
276
- Recommended: <single safest command or decision>
277
- Why: <one sentence tied to disk state>
278
-
279
- Proposition:
280
- 1. Review status: /god-status
281
- 2. Continue work: /god-next or describe the next intent
282
- 3. Commit release-ready changes: stage only the intended files, then commit
283
- 4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
274
+ Next commands:
275
+ - /god-status --full: Review the complete dashboard and proactive checks.
276
+ - /god-next: Continue with the safest state-derived next step.
277
+ - stage only the intended files, then commit: Commit release-ready changes.
278
+ - provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
284
279
  ```
285
280
 
286
281
  If the run edited code but did not stage or commit, the completion block must
@@ -243,20 +243,20 @@ Use this trigger map:
243
243
 
244
244
  | Trigger | Auto action | Visibility |
245
245
  |---|---|---|
246
- | `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` | `Auto-invoked:` local runtime only |
247
- | code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout | `Sync status:` |
248
- | durable artifact truth changed | run Pillars sync plan | `Auto-invoked:` local runtime only |
249
- | AI tool instruction files changed | spawn or dry-run `god-context-writer` | `Auto-invoked:` |
250
- | `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` | closeout proposition |
246
+ | `state.json` or `PROGRESS.md` changed | refresh `.godpowers/CHECKPOINT.md` | log detail, concise note only when recommendation changes |
247
+ | code or artifact files changed | run lightweight reverse-sync or spawn `god-updater` for workflow closeout | concise sync note and log path |
248
+ | durable artifact truth changed | run Pillars sync plan | log detail, concise note only when pillar edits are proposed |
249
+ | AI tool instruction files changed | spawn or dry-run `god-context-writer` | concise note when files change |
250
+ | `REVIEW-REQUIRED.md` gains entries | suggest `/god-review-changes` | `Next commands:` |
251
251
  | `DESIGN.md` or `PRODUCT.md` changed | spawn `god-design-reviewer` | gate card before propagation |
252
- | docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` | `Auto-invoked:` or proposition |
252
+ | docs and code both changed | spawn `god-docs-writer` in drift-check mode when current workflow owns docs, otherwise suggest `/god-docs` | concise note or `Next commands:` |
253
253
  | frontend-visible files changed and a known URL exists | spawn `god-browser-tester` inside build, design, launch, harden, or explicit runtime workflows | runtime status card |
254
- | frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL | proposition |
255
- | security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` | proposition |
256
- | dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` | proposition |
257
- | host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` | proposition |
254
+ | frontend-visible files changed and no known URL exists | suggest `/god-test-runtime` with local URL setup, defer deployed URL | `Next commands:` |
255
+ | security-sensitive files changed | auto-spawn only inside harden, hotfix, launch, or project run; otherwise suggest `/god-harden` | `Next commands:` |
256
+ | dependency files changed | auto-spawn only inside update-deps, hygiene, or approved project run; otherwise suggest `/god-update-deps` | `Next commands:` |
257
+ | host automation support detected and no active templates are recorded | suggest `/god-automation-status` or `/god-automation-setup` | `Next commands:` |
258
258
  | user approves complex automation setup | spawn `god-automation-engineer` | approval card plus setup result |
259
- | full project run complete or hygiene stale | suggest `/god-hygiene` | proposition |
259
+ | full project run complete or hygiene stale | suggest `/god-hygiene` | `Next commands:` |
260
260
 
261
261
  Never use this matrix to auto-run Level 4 actions: deployed staging against a
262
262
  guessed URL, production launch, provider dashboard access, broad dependency
@@ -265,8 +265,8 @@ git stage, commit, push, package, release, publish, schedule creation, routine
265
265
  creation, background agent creation, API trigger creation, or CI workflow
266
266
  creation without explicit user approval.
267
267
 
268
- Every auto action must emit either `Auto-invoked:`, `Sync status:`, or a
269
- proposition explaining why it did not run.
268
+ Every auto action must either log details or emit a concise note when it
269
+ changes artifacts, review items, blockers, or the next recommendation.
270
270
 
271
271
  ## Detection-Driven Tier 1 Routing
272
272
 
@@ -487,12 +487,17 @@ requested or final sign-off begins.
487
487
  5. Spawn the appropriate specialist agent in a fresh context
488
488
  6. Verify their output exists on disk
489
489
  7. Run have-nots check on the artifact and run `standards.gate-command` when configured
490
- 8. If pass: update PROGRESS.md, sync CHECKPOINT.md, run the proactive
490
+ 8. For an executable-gated sub-step (build, deploy, harden), record executed
491
+ evidence with `npx godpowers verify "<cmd>" --substep <tier.substep>` and then
492
+ confirm `npx godpowers can-close --substep <tier.substep> --project=.` exits
493
+ zero before closing. Never advance the sub-step to done while can-close is red.
494
+ 9. If pass and can-close is green: advance the sub-step to done via
495
+ `npx godpowers state advance`, sync CHECKPOINT.md, run the proactive
491
496
  auto-invoke sweep, print the "Step result" card, then move to next sub-step
492
- 9. If fail and repairable: print the failed result card, then enter the
497
+ 10. If fail and repairable: print the failed result card, then enter the
493
498
  autonomous repair loop
494
- 10. If fail and human-only: pause with the smallest needed question
495
- 11. Repeat until all tiers complete and verification is green
499
+ 11. If fail and human-only: pause with the smallest needed question
500
+ 12. Repeat until all tiers complete and verification is green
496
501
  ```
497
502
 
498
503
  ## Specialist Agent Routing
@@ -640,18 +645,6 @@ After Launch completes, write a transition message:
640
645
  ```text
641
646
  Godpowers project run complete.
642
647
 
643
- Godpowers Dashboard
644
-
645
- Source: runtime dashboard (lib/dashboard.js)
646
-
647
- Current status:
648
- State: complete
649
- Phase: <plain-language phase> (tier <human ordinal> of <human total>)
650
- Step: <sub-step label> (step <n> of <total steps>)
651
- Progress: <pct>% workflow progress (<done> of <total> tracked steps complete)
652
- Worktree: <clean | modified files unstaged | staged changes | mixed>
653
- Index: <untouched | staged files listed>
654
-
655
648
  Action brief:
656
649
  Next: <one command or user decision>
657
650
  Why: <one sentence tied to disk state>
@@ -659,17 +652,6 @@ Action brief:
659
652
  Attention: <none or top blockers>
660
653
  Host guarantees: <full | degraded | unknown>
661
654
 
662
- Planning visibility:
663
- PRD: <done | pending | missing | deferred> <artifact path when present>
664
- Roadmap: <done | pending | missing | deferred> <artifact path when present>
665
- Current milestone: <roadmap milestone, tier, or next planning gate when known>
666
- Completion basis: <state.json, PROGRESS.md, artifacts, or audit score source>
667
-
668
- Deliverable progress:
669
- Requirements: <done>/<total> done (<pct>%); <in-progress> in progress, <untouched> not started
670
- Increments: <done> done, <building> building, <pending> pending
671
- Ledger: .godpowers/REQUIREMENTS.md
672
-
673
655
  What changed:
674
656
  1. <highest-signal user-visible change>
675
657
  2. <highest-signal user-visible change>
@@ -677,22 +659,6 @@ What changed:
677
659
  Validation:
678
660
  + <command>: <result>
679
661
 
680
- Proactive checks:
681
- Checkpoint: <fresh | refreshed | stale>
682
- Reviews: <none | N pending, suggest /god-review-changes>
683
- Sync: <fresh | suggested | local helper ran>
684
- Docs: <fresh | suggested | drift-check spawned>
685
- Repo surface: <fresh | stale, suggest /god-doctor>
686
- Host: <full | degraded | unknown>
687
- Dogfood: <not-run | pass | fail | suggest /god-dogfood>
688
- Runtime: <not-applicable | suggested | browser test spawned>
689
- Security: <clear | suggested | harden spawned>
690
- Dependencies: <clear | suggested | deps audit spawned>
691
- Hygiene: <fresh | suggest /god-hygiene>
692
-
693
- Open items:
694
- 1. <none, or deployed staging deferred, pending review, unstaged files, etc.>
695
-
696
662
  Project is now in steady state. From here, ongoing work uses these workflows:
697
663
 
698
664
  Adding features: /god-feature
@@ -709,21 +675,18 @@ Periodic hygiene:
709
675
  Health check: /god-hygiene (combines audit + deps + docs)
710
676
  Deliverable status: /god-progress (requirements + increments done/left)
711
677
 
712
- Next:
713
- Recommended: <single safest command or decision>
714
- Why: <one sentence tied to disk state>
715
-
716
- Proposition:
717
- 1. Review status: /god-status (pipeline) or /god-progress (deliverables)
718
- 2. Continue work: /god-next or describe the next intent
719
- 3. Commit release-ready changes: stage only the intended files, then commit
720
- 4. Run deployed staging: provide STAGING_APP_URL=<deployed staging origin> when needed
678
+ Next commands:
679
+ - /god-status --full: Review the complete dashboard and proactive checks.
680
+ - /god-progress: Review deliverable progress.
681
+ - /god-next: Continue with the safest state-derived next step.
682
+ - provide STAGING_APP_URL=<deployed staging origin>: Run deployed staging when needed.
721
683
  ```
722
684
 
723
685
  Generate the dashboard with `lib/dashboard.compute(projectRoot)` and
724
- `lib/dashboard.render(result)` when the runtime bundle is available. If the
725
- runtime module cannot be loaded, fall back to a manual disk scan and say
726
- `Dashboard engine: unavailable, manual scan used`.
686
+ `lib/dashboard.render(result, { brief: true })` when the runtime bundle is
687
+ available. If the runtime module cannot be loaded, use a manual disk scan
688
+ quietly and suggest `/god-doctor` only when the fallback changes the next
689
+ recommendation.
727
690
 
728
691
  The dashboard `Progress` line is workflow progress only. Audit scores,
729
692
  remediation scores, hygiene scores, and launch-readiness scores must be labeled
@@ -847,15 +810,14 @@ Show:
847
810
  - concise phase status
848
811
  - before each visible tier/sub-step, a short "what will happen" card
849
812
  - after each visible tier/sub-step, a short "what happened" card
850
- - every auto-invoked command, agent, and local runtime helper using an
851
- `Auto-invoked:` or `Sync status:` card
813
+ - concise notes for automatic work that changes artifacts, review items, or
814
+ recommendations, with details written to logs
852
815
  - durable state detected from disk
853
816
  - commands being run and whether they passed or failed
854
817
  - scoped file changes
855
818
  - final validation summary
856
- - final Godpowers Dashboard from disk, including phase, tier, step, progress,
857
- lifecycle, planning visibility, proactive checks, open items,
858
- worktree/index state, and recommended next action
819
+ - final compact action brief from disk, with `/god-status --full` offered for
820
+ the complete dashboard
859
821
  - plain-language workflow names. Say "project run" or "workflow" instead of
860
822
  unexplained "arc" in visible output
861
823
  - PRD and roadmap visibility when those artifacts exist or are expected
@@ -878,21 +840,17 @@ user-facing question. Do not expose the rule itself. Example: ask for
878
840
  `STAGING_APP_URL=<deployed staging origin>` at final sign-off rather than
879
841
  showing the Shipping Closure Protocol.
880
842
 
881
- ### Auto-Invoked Work Cards
843
+ ### Automatic Work Notes
882
844
 
883
845
  Every automatic step that mutates state, writes artifacts, validates gates, or
884
- spawns an agent must leave a visible trace in the transcript.
846
+ spawns an agent must leave an accountable trace in logs. Show a concise note in
847
+ the transcript only when artifacts changed, review items were created, blockers
848
+ appeared, or the recommendation changed.
885
849
 
886
850
  Use this shape:
887
851
 
888
852
  ```
889
- Auto-invoked:
890
- Trigger: <event that caused the automatic step>
891
- Agent: <agent name, or none, local runtime only>
892
- Local syncs:
893
- + <helper>: <result>
894
- Artifacts: <changed files, no-op, or deferred>
895
- Log: <path, or none>
853
+ Synced project artifacts after the change. Details were written to .godpowers/SYNC-LOG.md.
896
854
  ```
897
855
 
898
856
  Required auto-invoked cards: