godpowers 1.6.21 → 1.6.22

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 CHANGED
@@ -7,6 +7,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.6.22] - 2026-05-16
11
+
12
+ Dogfooding, host guarantees, extension authoring, and suite release dry-runs.
13
+
14
+ ### Added
15
+ - Added `lib/dogfood-runner.js`, `/god-dogfood`, and `npx godpowers dogfood`
16
+ for deterministic messy-repo dogfood scenarios.
17
+ - Added `fixtures/dogfood/` scenarios for half-migrated GSD import,
18
+ degraded and full host guarantees, extension scaffolding, and Mode D suite
19
+ release dry-run planning.
20
+ - Added `lib/host-capabilities.js` and dashboard host guarantee reporting for
21
+ full, degraded, and unknown runtime capability states.
22
+ - Added compact dashboard rendering with `npx godpowers status --brief`.
23
+ - Added `lib/extension-authoring.js` and
24
+ `npx godpowers extension-scaffold --name=@scope/pack --output=.`.
25
+ - Added Mode D suite release dry-run planning through
26
+ `suiteState.planRelease`.
27
+
28
+ ### Changed
29
+ - Release-surface sync now requires dogfood, host capability, and extension
30
+ authoring test gates.
31
+ - Repo-surface sync now checks dogfood runner presence, test wiring, and
32
+ required fixture manifests.
33
+ - Package payload checks now include dogfood fixtures and the new runtime
34
+ helpers.
35
+ - README, architecture, reference, release checklist, and runtime docs now
36
+ document dogfood, host guarantees, extension authoring, and suite dry-runs.
37
+
38
+ ### Guardrails
39
+ - Dogfood runs copy fixtures into temporary directories before executing.
40
+ - Host capability detection does not require network access.
41
+ - Extension scaffolding does not overwrite existing files unless requested.
42
+ - Suite release dry-runs return planned writes and impacted dependents without
43
+ mutating sibling repositories.
44
+
10
45
  ## [1.6.21] - 2026-05-16
11
46
 
12
47
  Dashboard compression, trace guardrails, and suite release readiness.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/aihxp/godpowers/actions/workflows/ci.yml/badge.svg)](https://github.com/aihxp/godpowers/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
- [![Version](https://img.shields.io/badge/version-1.6.21-blue)](CHANGELOG.md)
5
+ [![Version](https://img.shields.io/badge/version-1.6.22-blue)](CHANGELOG.md)
6
6
  [![npm](https://img.shields.io/npm/v/godpowers.svg)](https://www.npmjs.com/package/godpowers)
7
7
 
8
8
  **Ship fast. Ship right. Ship everything. Ship accountably.**
@@ -12,14 +12,15 @@ 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.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.
15
+ Version 1.6.22 turns the last "needs more outside use" gaps into executable
16
+ surface area. Godpowers now ships a messy-repo dogfood runner, dashboard host
17
+ guarantee reporting, compact dashboard output, extension scaffolding, and
18
+ Mode D suite release dry-run planning.
19
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
+ The dashboard now starts with an action brief and a host guarantee line: the
21
+ next command, why it is recommended, whether the project is ready, the first
22
+ blockers that need attention, and whether the current host can provide full,
23
+ degraded, or unknown runtime guarantees.
23
24
 
24
25
  It fuses four disciplines into one unified workflow:
25
26
 
@@ -120,7 +121,10 @@ runtime that can execute Node:
120
121
  ```bash
121
122
  npx godpowers status --project=.
122
123
  npx godpowers next --project=.
124
+ npx godpowers status --project=. --brief
123
125
  npx godpowers status --project=. --json
126
+ npx godpowers dogfood
127
+ npx godpowers extension-scaffold --name=@godpowers/my-pack --output=.
124
128
  ```
125
129
 
126
130
  ### Slash Commands
@@ -145,6 +149,7 @@ npx godpowers status --project=. --json
145
149
  | `/god-status` | Re-derive state from disk | (built-in) |
146
150
  | `/god-automation-status` | Show host automation provider support | (built-in) |
147
151
  | `/god-automation-setup` | Prepare opt-in automation setup | (built-in) |
152
+ | `/god-dogfood` | Run messy-repo dogfood scenarios for release and autonomy readiness | (built-in) |
148
153
  | `/god-migrate` | Detect GSD, BMAD, and Superpowers context; import and sync back | god-greenfieldifier when needed |
149
154
  | `/god-preflight` | Read-only intake audit before project-run readiness and pillars | god-auditor |
150
155
  | `/god-audit` | Score artifacts against have-nots | god-auditor |
@@ -212,6 +217,17 @@ npx godpowers automation-status --project=.
212
217
  npx godpowers automation-setup --project=.
213
218
  ```
214
219
 
220
+ Godpowers can dogfood itself against shipped messy-repo fixtures:
221
+
222
+ ```bash
223
+ npx godpowers dogfood
224
+ ```
225
+
226
+ The dogfood suite covers a half-migrated GSD project, full and degraded host
227
+ guarantee detection, extension scaffold validation, and a Mode D suite release
228
+ dry-run. `/god-dogfood` reports failures with scoped specialist ownership
229
+ rather than treating fixture checks as silent background work.
230
+
215
231
  Automation setup is opt-in. The installer does not create schedules, routines,
216
232
  background agents, API triggers, or CI workflows. Safe starting templates are
217
233
  read-only status, checkpoint, review queue, hygiene, and release readiness
@@ -362,7 +378,7 @@ Pi. T3 Code inherits from the underlying agent (Codex / Claude / OpenCode).
362
378
 
363
379
  - [Getting Started](docs/getting-started.md)
364
380
  - [Concepts](docs/concepts.md)
365
- - [Command reference (all 109 skills + 40 agents)](docs/reference.md)
381
+ - [Command reference (all 110 skills + 40 agents)](docs/reference.md)
366
382
  - [Feature awareness](docs/feature-awareness.md)
367
383
  - [Repository documentation sync](docs/repo-doc-sync.md)
368
384
  - [Repository surface sync](docs/repo-surface-sync.md)
package/RELEASE.md CHANGED
@@ -1,15 +1,15 @@
1
- # Godpowers 1.6.21 Release
1
+ # Godpowers 1.6.22 Release
2
2
 
3
3
  Date: 2026-05-16
4
4
 
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.
5
+ Godpowers 1.6.22 turns the remaining "needs more real use" risks into
6
+ executable surfaces. It adds deterministic messy-repo dogfooding, dashboard
7
+ host guarantees, compact status output, extension authoring scaffolds, and
8
+ Mode D suite release dry-run planning.
9
9
 
10
10
  ## What is stable
11
11
 
12
- - 109 slash commands
12
+ - 110 slash commands
13
13
  - 40 specialist agents
14
14
  - 13 executable workflows
15
15
  - 40 intent recipes
@@ -28,21 +28,24 @@ dogfood, extension publish, Mode D suite, and installer smoke gates.
28
28
  - Repository surface sync checks
29
29
  - Route quality, recipe coverage, and release surface sync checks
30
30
  - Dashboard action briefs for next-step compression
31
+ - Dashboard host guarantees for full, degraded, and unknown runtime capability
31
32
  - Agent-spawn trace event guardrails
32
33
  - Mode D suite readiness checks
34
+ - Messy-repo dogfood scenarios
35
+ - Extension authoring scaffold helper
36
+ - Mode D suite release dry-run planner
33
37
 
34
38
  ## What is new
35
39
 
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`.
40
+ - Added `lib/dogfood-runner.js`, `/god-dogfood`, and CLI `dogfood`.
41
+ - Added dogfood fixtures for half-migrated GSD import and sync-back, full and
42
+ degraded host guarantees, extension scaffold validation, and suite release
43
+ dry-run planning.
44
+ - Added `lib/host-capabilities.js` and dashboard host guarantee reporting.
45
+ - Added compact dashboard output through `--brief`.
46
+ - Added `lib/extension-authoring.js` and CLI `extension-scaffold`.
47
+ - Added `suiteState.planRelease` for Mode D dependent impact planning before
48
+ mutation.
46
49
 
47
50
  ## Automation surface behavior
48
51
 
@@ -59,6 +62,9 @@ For a Godpowers repository, the helper checks:
59
62
  - release checklist policy names the current sync guards
60
63
  - release gates include dogfood, extension publish, Mode D suite, and installer
61
64
  smoke checks
65
+ - dogfood fixtures cover migration, host guarantees, extension authoring, and
66
+ suite release dry-runs
67
+ - host guarantees are visible in dashboard and compact dashboard output
62
68
 
63
69
  Detection is read-only by default. Applying sync writes logs and leaves
64
70
  judgment-heavy rewrites to scoped specialists.
@@ -77,11 +83,16 @@ Godpowers recommends scoped specialists only when judgment is needed:
77
83
  - `god-roadmap-reconciler` for workflow or recipe lifecycle drift
78
84
  - `god-coordinator` for extension pack drift
79
85
  - `god-docs-writer` for release prose drift
86
+ - `god-greenfieldifier` for dogfood migration failures
87
+ - `god-context-writer` for host capability failures
80
88
 
81
89
  ## Validation
82
90
 
83
91
  Release validation includes:
84
92
 
93
+ - `node scripts/test-dogfood-runner.js`
94
+ - `node scripts/test-host-capabilities.js`
95
+ - `node scripts/test-extension-authoring.js`
85
96
  - `node scripts/test-repo-surface-sync.js`
86
97
  - `node scripts/test-automation-surface-sync.js`
87
98
  - `node scripts/test-repo-doc-sync.js`
@@ -97,5 +108,5 @@ Release validation includes:
97
108
  - `git diff --check`
98
109
  - `npm run release:check`
99
110
 
100
- The `v1.6.21` tag should point to the release commit that matches the npm
101
- `godpowers@1.6.21` package.
111
+ The `v1.6.22` tag should point to the release commit that matches the npm
112
+ `godpowers@1.6.22` package.
package/bin/install.js CHANGED
@@ -303,6 +303,12 @@ function parseArgs(argv) {
303
303
  command: null,
304
304
  project: process.cwd(),
305
305
  json: false,
306
+ brief: false,
307
+ extensionName: null,
308
+ extensionOutput: process.cwd(),
309
+ extensionSkill: null,
310
+ extensionAgent: null,
311
+ extensionWorkflow: null,
306
312
  runtimes: [],
307
313
  global: false,
308
314
  local: false,
@@ -318,11 +324,16 @@ function parseArgs(argv) {
318
324
  case 'next':
319
325
  case 'automation-status':
320
326
  case 'automation-setup':
327
+ case 'dogfood':
328
+ case 'extension-scaffold':
321
329
  opts.command = arg;
322
330
  break;
323
331
  case '--json':
324
332
  opts.json = true;
325
333
  break;
334
+ case '--brief':
335
+ opts.brief = true;
336
+ break;
326
337
  case '--project':
327
338
  if (args[i + 1]) {
328
339
  opts.project = path.resolve(args[i + 1]);
@@ -351,6 +362,16 @@ function parseArgs(argv) {
351
362
  default:
352
363
  if (arg.startsWith('--project=')) {
353
364
  opts.project = path.resolve(arg.slice('--project='.length));
365
+ } else if (arg.startsWith('--name=')) {
366
+ opts.extensionName = arg.slice('--name='.length);
367
+ } else if (arg.startsWith('--output=')) {
368
+ opts.extensionOutput = path.resolve(arg.slice('--output='.length));
369
+ } else if (arg.startsWith('--skill=')) {
370
+ opts.extensionSkill = arg.slice('--skill='.length);
371
+ } else if (arg.startsWith('--agent=')) {
372
+ opts.extensionAgent = arg.slice('--agent='.length);
373
+ } else if (arg.startsWith('--workflow=')) {
374
+ opts.extensionWorkflow = arg.slice('--workflow='.length);
354
375
  } else if (arg.startsWith('--') && RUNTIMES[arg.slice(2)]) {
355
376
  opts.runtimes.push(arg.slice(2));
356
377
  }
@@ -575,10 +596,18 @@ function showHelp() {
575
596
  log(' next Show the dashboard and recommended next command');
576
597
  log(' automation-status Show host automation provider support');
577
598
  log(' automation-setup Show an opt-in automation setup plan');
599
+ log(' dogfood Run built-in messy-repo dogfood scenarios');
600
+ log(' extension-scaffold Create a publishable extension pack skeleton');
578
601
  log('');
579
602
  log('Options:');
580
603
  log(' --project=<path> Project root for status, next, or automation commands');
581
604
  log(' --json Emit JSON for status, next, or automation commands');
605
+ log(' --brief Render a compact dashboard for status or next');
606
+ log(' --name=<scope/name> Extension package name for extension-scaffold');
607
+ log(' --output=<path> Extension output root for extension-scaffold');
608
+ log(' --skill=<name> Extension skill name for extension-scaffold');
609
+ log(' --agent=<name> Extension agent name for extension-scaffold');
610
+ log(' --workflow=<name> Extension workflow name for extension-scaffold');
582
611
  log(' -g, --global Install globally (to config directory)');
583
612
  log(' -l, --local Install locally (to current directory)');
584
613
  log(' --claude Install for Claude Code');
@@ -605,6 +634,8 @@ function showHelp() {
605
634
  log(' npx godpowers next --project=.');
606
635
  log(' npx godpowers automation-status --project=.');
607
636
  log(' npx godpowers automation-setup --project=.');
637
+ log(' npx godpowers dogfood');
638
+ log(' npx godpowers extension-scaffold --name=@godpowers/my-pack --output=.');
608
639
  log(' npx godpowers --claude --global');
609
640
  log(' npx godpowers --all');
610
641
  log(' npx godpowers --codex --cursor');
@@ -630,7 +661,7 @@ function runDashboardCommand(opts) {
630
661
  if (opts.json) {
631
662
  console.log(JSON.stringify(result, null, 2));
632
663
  } else {
633
- console.log(dashboard.render(result));
664
+ console.log(dashboard.render(result, { brief: opts.brief }));
634
665
  if (opts.command === 'next') {
635
666
  console.log('');
636
667
  console.log('Suggested next command:');
@@ -639,6 +670,45 @@ function runDashboardCommand(opts) {
639
670
  }
640
671
  }
641
672
 
673
+ function runDogfoodCommand(opts) {
674
+ const dogfood = require('../lib/dogfood-runner');
675
+ const result = dogfood.runAll();
676
+ if (opts.json) {
677
+ console.log(JSON.stringify(result, null, 2));
678
+ } else {
679
+ console.log(dogfood.render(result));
680
+ }
681
+ if (result.status !== 'pass') process.exit(1);
682
+ }
683
+
684
+ function runExtensionScaffoldCommand(opts) {
685
+ const authoring = require('../lib/extension-authoring');
686
+ if (!opts.extensionName) {
687
+ error('extension-scaffold requires --name=@scope/package');
688
+ process.exit(1);
689
+ }
690
+ const result = authoring.scaffold(opts.extensionOutput, {
691
+ name: opts.extensionName,
692
+ skill: opts.extensionSkill || undefined,
693
+ agent: opts.extensionAgent || undefined,
694
+ workflow: opts.extensionWorkflow || undefined,
695
+ runtimeVersion: VERSION
696
+ });
697
+ if (opts.json) {
698
+ console.log(JSON.stringify(result, null, 2));
699
+ } else {
700
+ success(`Scaffolded ${result.name} at ${result.path}`);
701
+ if (result.written.length > 0) {
702
+ log(`Wrote ${result.written.length} file(s): ${result.written.join(', ')}`);
703
+ }
704
+ if (result.validation.length > 0) {
705
+ warn(`Validation warnings: ${result.validation.join('; ')}`);
706
+ } else {
707
+ success('Extension manifest validates');
708
+ }
709
+ }
710
+ }
711
+
642
712
  // ---------------------------------------------------------------------------
643
713
  // Main
644
714
  // ---------------------------------------------------------------------------
@@ -661,6 +731,16 @@ function main() {
661
731
  return;
662
732
  }
663
733
 
734
+ if (opts.command === 'dogfood') {
735
+ runDogfoodCommand(opts);
736
+ return;
737
+ }
738
+
739
+ if (opts.command === 'extension-scaffold') {
740
+ runExtensionScaffoldCommand(opts);
741
+ return;
742
+ }
743
+
664
744
  console.log(BANNER);
665
745
 
666
746
  const srcDir = path.resolve(__dirname, '..');
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "Extension authoring scaffold",
3
+ "kind": "extension-authoring",
4
+ "extensionName": "@godpowers/dogfood-pack",
5
+ "expectedFiles": [
6
+ "manifest.yaml",
7
+ "package.json",
8
+ "README.md",
9
+ "skills/god-dogfood-extension.md",
10
+ "agents/god-dogfood-agent.md",
11
+ "workflows/dogfood-workflow.yaml"
12
+ ]
13
+ }
@@ -0,0 +1,5 @@
1
+ # Project
2
+
3
+ ## Users
4
+
5
+ - [ ] Operators need a planning import that keeps prior state visible.
@@ -0,0 +1,5 @@
1
+ # Requirements
2
+
3
+ ## Functional Requirements
4
+
5
+ - [ ] Import prior requirements into Godpowers preparation context.
@@ -0,0 +1,5 @@
1
+ # Roadmap
2
+
3
+ ## Phase 1
4
+
5
+ - [ ] Migrate the project without deleting GSD files.
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "Half migrated GSD project",
3
+ "kind": "planning-migration",
4
+ "actions": [
5
+ "import-planning-context",
6
+ "sync-back"
7
+ ],
8
+ "expectedSystems": [
9
+ "gsd"
10
+ ],
11
+ "expectedFiles": [
12
+ ".godpowers/prep/IMPORTED-CONTEXT.md",
13
+ ".godpowers/prd/PRD.md",
14
+ ".planning/GODPOWERS-SYNC.md"
15
+ ]
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Host guarantee degraded mode",
3
+ "kind": "host-capabilities",
4
+ "expectedLevel": "degraded"
5
+ }
@@ -0,0 +1,2 @@
1
+ name = "god-orchestrator"
2
+ description = "Fixture agent metadata."
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "Host guarantee full mode",
3
+ "kind": "host-capabilities",
4
+ "expectedLevel": "full"
5
+ }
@@ -0,0 +1,9 @@
1
+ name: dogfood-suite
2
+ siblings:
3
+ - repo-a
4
+ - repo-b
5
+ version-table:
6
+ repo-a:
7
+ repo-a: 1.2.3
8
+ repo-b:
9
+ repo-b: 1.2.3
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Mode D suite release dry-run",
3
+ "kind": "suite-release",
4
+ "repo": "repo-a",
5
+ "version": "1.2.4",
6
+ "expectedImpacted": 1
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "repo-a",
3
+ "version": "1.2.3"
4
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "repo-b",
3
+ "version": "1.2.3",
4
+ "dependencies": {
5
+ "repo-a": "^1.2.3"
6
+ }
7
+ }
package/lib/README.md CHANGED
@@ -13,11 +13,13 @@ package-level integrations.
13
13
  | `intent.js` | Read and validate `intent.yaml` from project roots or `.godpowers/`. |
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
+ | `host-capabilities.js` | Detect host guarantees for shell, git, npm, agent spawning, extension authoring, and suite dry-runs. |
16
17
  | `repo-doc-sync.js` | Detect and refresh mechanical repository documentation surfaces. |
17
18
  | `repo-surface-sync.js` | Detect structural drift across commands, routes, packages, agents, workflows, recipes, extensions, and release policy. |
18
19
  | `route-quality-sync.js` | Detect symbolic route spawns, unresolved agent targets, and unapproved contextual route exits. |
19
20
  | `recipe-coverage-sync.js` | Detect missing high-frequency intent recipe coverage. |
20
21
  | `release-surface-sync.js` | Detect release-facing drift across badges, release notes, changelog, package checks, and release checklist policy. |
22
+ | `dogfood-runner.js` | Run deterministic messy-repo scenarios against migration, host, extension, and suite release behavior. |
21
23
  | `budget.js` | Read and enforce configured budget controls. |
22
24
  | `cost-tracker.js` | Track token and cost estimates from event streams. |
23
25
 
@@ -68,6 +70,7 @@ package-level integrations.
68
70
  | `skillui-bridge.js` | Bridge skill metadata into UI surfaces. |
69
71
  | `impeccable-bridge.js` | Bridge runtime checks into impeccable quality workflows. |
70
72
  | `extensions.js` | Load and validate extension packs. |
73
+ | `extension-authoring.js` | Scaffold publishable extension packs with manifest, package, README, skill, agent, and workflow files. |
71
74
 
72
75
  ## Repository and graph helpers
73
76
 
package/lib/dashboard.js CHANGED
@@ -14,6 +14,7 @@ const router = require('./router');
14
14
  const automationProviders = require('./automation-providers');
15
15
  const repoDocSync = require('./repo-doc-sync');
16
16
  const repoSurfaceSync = require('./repo-surface-sync');
17
+ const hostCapabilities = require('./host-capabilities');
17
18
 
18
19
  const GOD_DIR = '.godpowers';
19
20
  const PRD_PATH = '.godpowers/prd/PRD.md';
@@ -168,6 +169,7 @@ function proactiveChecks(projectRoot, changedFiles = []) {
168
169
  const repoSurfaceStatus = repoSurface.status === 'fresh'
169
170
  ? 'fresh'
170
171
  : `${repoSurface.stale.length} stale, suggest /god-doctor`;
172
+ const host = hostCapabilities.detect(projectRoot);
171
173
 
172
174
  return {
173
175
  checkpoint,
@@ -175,6 +177,7 @@ function proactiveChecks(projectRoot, changedFiles = []) {
175
177
  sync,
176
178
  docs: repoDocsStatus,
177
179
  repoSurface: repoSurfaceStatus,
180
+ host: hostCapabilities.summary(host),
178
181
  runtime: 'not-applicable',
179
182
  automation: automationSummary(projectRoot),
180
183
  security: sensitiveChanged ? 'sensitive files changed, suggest /god-harden' : 'clear',
@@ -234,6 +237,7 @@ function compute(projectRoot, opts = {}) {
234
237
  completionBasis: 'missing .godpowers/state.json'
235
238
  },
236
239
  proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
240
+ host: hostCapabilities.detect(projectRoot, opts.host || {}),
237
241
  next,
238
242
  openItems: ['No .godpowers/state.json found']
239
243
  };
@@ -263,6 +267,7 @@ function compute(projectRoot, opts = {}) {
263
267
  index: git.index,
264
268
  planning: planningVisibility(projectRoot, progress),
265
269
  proactive: proactiveChecks(projectRoot, git.entries.map(statusPath)),
270
+ host: hostCapabilities.detect(projectRoot, opts.host || {}),
266
271
  next,
267
272
  openItems
268
273
  };
@@ -277,6 +282,7 @@ function actionBrief(dashboard) {
277
282
  for (const [label, value] of [
278
283
  ['Repo surface', proactive.repoSurface],
279
284
  ['Docs', proactive.docs],
285
+ ['Host', proactive.host],
280
286
  ['Reviews', proactive.reviews],
281
287
  ['Sync', proactive.sync],
282
288
  ['Security', proactive.security],
@@ -285,6 +291,7 @@ function actionBrief(dashboard) {
285
291
  ]) {
286
292
  if (!value) continue;
287
293
  if (value === 'fresh' || value === 'none' || value === 'clear' || value === 'not-applicable') continue;
294
+ if (/^full on /.test(value)) continue;
288
295
  if (/^available via /.test(value)) continue;
289
296
  blockers.push(`${label}: ${value}`);
290
297
  }
@@ -299,7 +306,7 @@ function actionBrief(dashboard) {
299
306
  };
300
307
  }
301
308
 
302
- function render(dashboard) {
309
+ function render(dashboard, opts = {}) {
303
310
  const current = dashboard.current || {};
304
311
  const planning = dashboard.planning || {};
305
312
  const proactive = dashboard.proactive || {};
@@ -311,6 +318,26 @@ function render(dashboard) {
311
318
  ? dashboard.openItems
312
319
  : ['none'];
313
320
  const brief = dashboard.actionBrief || actionBrief(dashboard);
321
+ if (opts.mode === 'brief' || opts.brief === true) {
322
+ return [
323
+ 'Godpowers Dashboard',
324
+ '',
325
+ 'Action brief:',
326
+ ` Next: ${brief.recommended}`,
327
+ ` Why: ${brief.reason}`,
328
+ ` Readiness: ${brief.confidence}`,
329
+ ` Attention: ${brief.blockers && brief.blockers.length > 0 ? brief.blockers.join('; ') : 'none'}${brief.overflow ? `; ${brief.overflow} more` : ''}`,
330
+ ` Host guarantees: ${dashboard.host ? hostCapabilities.summary(dashboard.host) : proactive.host || 'unknown'}`,
331
+ '',
332
+ 'Current status:',
333
+ ` State: ${dashboard.state}`,
334
+ ` Progress: ${progress.percent || 0}% workflow progress (${progress.completed || 0} of ${progress.total || 0} tracked steps complete)`,
335
+ '',
336
+ 'Next:',
337
+ ` Recommended: ${next.command || 'describe the next intent'}`,
338
+ ` Why: ${next.reason || 'No route was computed.'}`
339
+ ].join('\n');
340
+ }
314
341
 
315
342
  return [
316
343
  'Godpowers Dashboard',
@@ -330,6 +357,7 @@ function render(dashboard) {
330
357
  ` Why: ${brief.reason}`,
331
358
  ` Readiness: ${brief.confidence}`,
332
359
  ` Attention: ${brief.blockers && brief.blockers.length > 0 ? brief.blockers.join('; ') : 'none'}${brief.overflow ? `; ${brief.overflow} more` : ''}`,
360
+ ` Host guarantees: ${dashboard.host ? hostCapabilities.summary(dashboard.host) : proactive.host || 'unknown'}`,
333
361
  '',
334
362
  'Planning visibility:',
335
363
  ` PRD: ${prd.status || 'missing'}${prd.path ? ` ${prd.path}` : ''}`,
@@ -343,6 +371,7 @@ function render(dashboard) {
343
371
  ` Sync: ${proactive.sync || 'unknown'}`,
344
372
  ` Docs: ${proactive.docs || 'unknown'}`,
345
373
  ` Repo surface: ${proactive.repoSurface || 'unknown'}`,
374
+ ` Host: ${proactive.host || 'unknown'}`,
346
375
  ` Runtime: ${proactive.runtime || 'unknown'}`,
347
376
  ` Automation: ${proactive.automation || 'unknown'}`,
348
377
  ` Security: ${proactive.security || 'unknown'}`,