@zigrivers/scaffold 3.19.0 → 3.20.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.
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAmB1C,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,QAAA,MAAM,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAyH3E,CAAA;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AA4B1C,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAkCD,QAAA,MAAM,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,CAyL3E,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -2,6 +2,9 @@ import fs from 'node:fs';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { execFileSync } from 'node:child_process';
5
+ import { createRequire } from 'node:module';
6
+ const require = createRequire(import.meta.url);
7
+ const pkg = require('../../../package.json');
5
8
  import { findProjectRoot } from '../middleware/project-root.js';
6
9
  import { resolveOutputMode } from '../middleware/output-mode.js';
7
10
  import { createOutputContext } from '../output/context.js';
@@ -11,9 +14,34 @@ import { loadConfig } from '../../config/loader.js';
11
14
  import { guardSteplessCommand } from '../guards.js';
12
15
  import { StatePathResolver } from '../../state/state-path-resolver.js';
13
16
  import { ensureV3Migration } from '../../state/ensure-v3-migration.js';
14
- import { generateDashboardData, generateHtml } from '../../dashboard/generator.js';
17
+ import { generateDashboardData, generateHtml, generateMultiServiceDashboardData, generateMultiServiceHtml, } from '../../dashboard/generator.js';
15
18
  import { discoverMetaPrompts } from '../../core/assembly/meta-prompt-loader.js';
16
19
  import { getPackagePipelineDir, atomicWriteFile } from '../../utils/fs.js';
20
+ /**
21
+ * Write HTML to the requested path (or a tmpfile), then optionally open it in
22
+ * the system browser. Shared between single-service and multi-service modes.
23
+ * Calls process.exit(0) on success.
24
+ */
25
+ function writeAndOpenDashboard(html, argv, output) {
26
+ const outputPath = argv.output ?? path.join(os.tmpdir(), `scaffold-dashboard-${Date.now()}.html`);
27
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
28
+ atomicWriteFile(outputPath, html);
29
+ if (!argv['no-open']) {
30
+ let opener = 'xdg-open';
31
+ if (process.platform === 'darwin')
32
+ opener = 'open';
33
+ if (process.platform === 'win32')
34
+ opener = 'start';
35
+ try {
36
+ execFileSync(opener, [outputPath]);
37
+ }
38
+ catch {
39
+ // Ignore errors when opening browser
40
+ }
41
+ }
42
+ output.success(`Dashboard generated: ${outputPath}`);
43
+ process.exit(0);
44
+ }
17
45
  const dashboardCommand = {
18
46
  command: 'dashboard',
19
47
  describe: 'Open pipeline dashboard in browser',
@@ -57,7 +85,73 @@ const dashboardCommand = {
57
85
  guardSteplessCommand(config ?? {}, service, { commandName: 'dashboard', output });
58
86
  if (process.exitCode === 2)
59
87
  return;
60
- // 4. Load state
88
+ // Multi-service mode: config has services[] AND no --service flag.
89
+ // Iterate per-service, render aggregate bird's-eye dashboard.
90
+ const configuredServices = config?.project?.services;
91
+ const isMultiServiceMode = !service && Array.isArray(configuredServices) && configuredServices.length > 0;
92
+ if (isMultiServiceMode) {
93
+ // Load meta-prompts ONCE and share across all services.
94
+ const metaPrompts = discoverMetaPrompts(getPackagePipelineDir(projectRoot));
95
+ // Methodology resolution: prefer config.methodology.preset; else fall back to
96
+ // the first loaded service state's config_methodology; else 'unknown'.
97
+ const configMethodology = config?.methodology?.preset;
98
+ const loadedServices = [];
99
+ let fallbackStateMethodology;
100
+ for (const svc of configuredServices) {
101
+ const svcResolver = new StatePathResolver(projectRoot, svc.name);
102
+ const svcStateManager = new StateManager(projectRoot, () => [], () => config ?? undefined, svcResolver, new Set(), undefined);
103
+ let svcState;
104
+ try {
105
+ svcState = svcStateManager.loadState();
106
+ if (!fallbackStateMethodology) {
107
+ fallbackStateMethodology = svcState.config_methodology;
108
+ }
109
+ }
110
+ catch (err) {
111
+ // Only convert missing-state-file into a skeleton; re-throw anything
112
+ // else (corrupt JSON, schema-version mismatch, permission errors) so
113
+ // the user sees the real error instead of a confusing 0% row.
114
+ // Codex/Claude MMR P2: bare catch collapsed every failure mode.
115
+ const code = err?.code;
116
+ if (code !== 'STATE_MISSING')
117
+ throw err;
118
+ // Skeleton state: empty steps (total=0) renders as "Not started" in
119
+ // the multi-service template, distinct from "Complete".
120
+ svcState = {
121
+ 'schema-version': 3,
122
+ 'scaffold-version': pkg.version,
123
+ init_methodology: configMethodology ?? 'unknown',
124
+ config_methodology: configMethodology ?? 'unknown',
125
+ 'init-mode': 'greenfield',
126
+ created: new Date().toISOString(),
127
+ in_progress: null,
128
+ steps: {},
129
+ next_eligible: [],
130
+ 'extra-steps': [],
131
+ };
132
+ }
133
+ loadedServices.push({
134
+ name: svc.name,
135
+ projectType: svc.projectType,
136
+ state: svcState,
137
+ metaPrompts,
138
+ });
139
+ }
140
+ const methodology = configMethodology ?? fallbackStateMethodology ?? 'unknown';
141
+ const dashboardData = generateMultiServiceDashboardData({
142
+ services: loadedServices,
143
+ methodology,
144
+ });
145
+ if (argv['json-only']) {
146
+ output.result(dashboardData);
147
+ process.exit(0);
148
+ return;
149
+ }
150
+ const html = generateMultiServiceHtml(dashboardData);
151
+ writeAndOpenDashboard(html, argv, output);
152
+ return;
153
+ }
154
+ // 4. Load state (single-service / global scope)
61
155
  const pathResolver = new StatePathResolver(projectRoot, service);
62
156
  const stateManager = new StateManager(projectRoot, () => [], () => config ?? undefined, pathResolver,
63
157
  // Empty Set (truthy) so StateManager.saveState's `isServiceScoped && globalSteps`
@@ -94,30 +188,9 @@ const dashboardCommand = {
94
188
  process.exit(0);
95
189
  return;
96
190
  }
97
- // 9. Generate HTML
191
+ // 9. Generate HTML + write + open
98
192
  const html = generateHtml(dashboardData);
99
- // 10. Determine output path
100
- const outputPath = argv.output ?? path.join(os.tmpdir(), `scaffold-dashboard-${Date.now()}.html`);
101
- // 11. Create parent directory if needed and write file
102
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
103
- atomicWriteFile(outputPath, html);
104
- // 12. Open in browser (unless --no-open)
105
- if (!argv['no-open']) {
106
- let opener = 'xdg-open';
107
- if (process.platform === 'darwin')
108
- opener = 'open';
109
- if (process.platform === 'win32')
110
- opener = 'start';
111
- try {
112
- execFileSync(opener, [outputPath]);
113
- }
114
- catch {
115
- // Ignore errors when opening browser
116
- }
117
- }
118
- // 13. Report success
119
- output.success(`Dashboard generated: ${outputPath}`);
120
- process.exit(0);
193
+ writeAndOpenDashboard(html, argv, output);
121
194
  },
122
195
  };
123
196
  export default dashboardCommand;
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAiB1E,MAAM,gBAAgB,GAA0D;IAC9E,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,oCAAoC;IAC9C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,KAAK;aACT,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;SACzC,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,KAAK;SACf,CAAC;aACD,MAAM,CAAC,WAAW,EAAE;YACnB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,+BAA+B;YAC5C,OAAO,EAAE,KAAK;SACf,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,8CAA8C;SACzD,CAAC,CAAA;IACN,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oEAAoE;gBACpE,sDAAsD,CACvD,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,OAAM;QACR,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;QAE9C,sEAAsE;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAA;QAClD,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACtC,oBAAoB,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;QACjF,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAM;QAElC,gBAAgB;QAChB,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAChE,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,WAAW,EACX,GAAG,EAAE,CAAC,EAAE,EACR,GAAG,EAAE,CAAC,MAAM,IAAI,SAAS,EACzB,YAAY;QACZ,kFAAkF;QAClF,gFAAgF;QAChF,gFAAgF;QAChF,6EAA6E;QAC7E,IAAI,GAAG,EAAU,EACjB,SAAS,CACV,CAAA;QACD,IAAI,KAAoB,CAAA;QACxB,IAAI,CAAC;YACH,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,qBAAqB;gBAC9B,QAAQ,EAAE,CAAC;gBACX,QAAQ,EAAE,mBAAmB;aAC9B,CAAC,CAAA;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,OAAM;QACR,CAAC;QAED,oBAAoB;QACpB,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,EAAE,EAAE,EAAE,YAAY,CAAC,CAAA;QAC9D,MAAM,WAAW,GACd,MAAgC,EAAE,WAAW,EAAE,MAAM;YACtD,KAAK,CAAC,kBAAkB;YACxB,SAAS,CAAA;QAEX,8CAA8C;QAC9C,MAAM,WAAW,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAA;QAE3E,6BAA6B;QAC7B,MAAM,aAAa,GAAG,qBAAqB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;QAE3F,2CAA2C;QAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,OAAM;QACR,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;QAExC,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAEjG,uDAAuD;QACvD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAEjC,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,IAAI,MAAM,GAAG,UAAU,CAAA;YACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,GAAG,MAAM,CAAA;YAClD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAAE,MAAM,GAAG,OAAO,CAAA;YAClD,IAAI,CAAC;gBACH,YAAY,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,CAAC,OAAO,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;CACF,CAAA;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,108 @@ function makeProjectDir(stateContent) {
38
38
  fs.writeFileSync(path.join(dir, '.scaffold', 'state.json'), state, 'utf8');
39
39
  return dir;
40
40
  }
41
+ /**
42
+ * Create a multi-service project fixture.
43
+ * Writes:
44
+ * - .scaffold/config.yml with `project.services` entries (YAML)
45
+ * - .scaffold/state.json (v3 root, empty steps)
46
+ * - .scaffold/services/{svc}/state.json for each service in `services`
47
+ * If `omitServiceStates` is supplied, those named service state files are NOT
48
+ * written — used to test "broken service" handling.
49
+ */
50
+ function makeMultiServiceProjectDir(opts) {
51
+ const dir = makeTmpDir();
52
+ fs.mkdirSync(path.join(dir, '.scaffold'), { recursive: true });
53
+ // config.yml with services[]
54
+ const yamlServices = opts.services
55
+ .map(s => ` - name: ${s.name}\n projectType: ${s.projectType}\n ${configBlockFor(s.projectType)}`)
56
+ .join('\n');
57
+ const yaml = `version: 2\nmethodology: deep\nplatforms: [claude-code]\nproject:\n services:\n${yamlServices}\n`;
58
+ fs.writeFileSync(path.join(dir, '.scaffold', 'config.yml'), yaml, 'utf8');
59
+ // v3 root state (global steps only; empty here)
60
+ const rootState = JSON.stringify({
61
+ 'schema-version': 3,
62
+ 'scaffold-version': '2.0.0',
63
+ init_methodology: 'deep',
64
+ config_methodology: 'deep',
65
+ 'init-mode': 'greenfield',
66
+ created: '2024-01-01T00:00:00.000Z',
67
+ in_progress: null,
68
+ steps: {},
69
+ next_eligible: [],
70
+ 'extra-steps': [],
71
+ });
72
+ fs.writeFileSync(path.join(dir, '.scaffold', 'state.json'), rootState, 'utf8');
73
+ // per-service state files
74
+ const omit = new Set(opts.omitServiceStates ?? []);
75
+ for (const svc of opts.services) {
76
+ if (omit.has(svc.name))
77
+ continue;
78
+ const svcDir = path.join(dir, '.scaffold', 'services', svc.name);
79
+ fs.mkdirSync(svcDir, { recursive: true });
80
+ const completedSlug = svc.stepCompletedSlug ?? 'create-prd';
81
+ const svcState = JSON.stringify({
82
+ 'schema-version': 3,
83
+ 'scaffold-version': '2.0.0',
84
+ init_methodology: 'deep',
85
+ config_methodology: 'deep',
86
+ 'init-mode': 'greenfield',
87
+ created: '2024-01-01T00:00:00.000Z',
88
+ in_progress: null,
89
+ steps: {
90
+ [completedSlug]: {
91
+ status: 'completed',
92
+ source: 'pipeline',
93
+ at: '2024-01-02T00:00:00.000Z',
94
+ completed_by: 'claude',
95
+ depth: 2,
96
+ produces: ['docs/prd.md'],
97
+ },
98
+ },
99
+ next_eligible: [],
100
+ 'extra-steps': [],
101
+ });
102
+ fs.writeFileSync(path.join(svcDir, 'state.json'), svcState, 'utf8');
103
+ }
104
+ return dir;
105
+ }
106
+ function configBlockFor(projectType) {
107
+ // Minimal valid config blocks per projectType (matching schema coupling rules).
108
+ const indent = ' ';
109
+ switch (projectType) {
110
+ case 'backend':
111
+ return [
112
+ 'backendConfig:',
113
+ `${indent}apiStyle: rest`,
114
+ `${indent}dataStore: [relational]`,
115
+ `${indent}authMechanism: apikey`,
116
+ `${indent}asyncMessaging: none`,
117
+ `${indent}deployTarget: container`,
118
+ `${indent}domain: fintech`,
119
+ ].join('\n');
120
+ case 'library':
121
+ return [
122
+ 'libraryConfig:',
123
+ `${indent}visibility: internal`,
124
+ `${indent}documentationLevel: api-docs`,
125
+ ].join('\n');
126
+ case 'web-app':
127
+ return [
128
+ 'webAppConfig:',
129
+ `${indent}frontendFramework: react`,
130
+ `${indent}renderingStrategy: ssr`,
131
+ `${indent}stateManagement: none`,
132
+ `${indent}styling: tailwind`,
133
+ `${indent}routing: file-based`,
134
+ `${indent}dataFetching: rest`,
135
+ `${indent}authMechanism: apikey`,
136
+ `${indent}deployTarget: container`,
137
+ `${indent}domain: fintech`,
138
+ ].join('\n');
139
+ default:
140
+ return '';
141
+ }
142
+ }
41
143
  afterEach(() => {
42
144
  for (const d of tmpDirs) {
43
145
  try {
@@ -138,5 +240,113 @@ describe('dashboard command', () => {
138
240
  expect(allOutput).toContain('Dashboard generated');
139
241
  expect(allOutput).toContain(outputPath);
140
242
  });
243
+ describe('multi-service mode', () => {
244
+ it('renders multi-service HTML when services[] is non-empty and --service is not set', async () => {
245
+ const dir = makeMultiServiceProjectDir({
246
+ services: [
247
+ { name: 'svc-a', projectType: 'backend' },
248
+ { name: 'svc-b', projectType: 'library' },
249
+ ],
250
+ });
251
+ const outDir = makeTmpDir();
252
+ const outputPath = path.join(outDir, 'dashboard.html');
253
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
254
+ await expect(runDashboardHandler({ ...BASE_ARGV, output: outputPath })).rejects.toThrow('process.exit(0)');
255
+ expect(fs.existsSync(outputPath)).toBe(true);
256
+ const html = fs.readFileSync(outputPath, 'utf8');
257
+ // Multi-service template marker (service cards, not present in single-service HTML).
258
+ expect(html).toContain('service-card');
259
+ expect(html).toContain('svc-a');
260
+ expect(html).toContain('svc-b');
261
+ });
262
+ it('--service flag bypasses multi-service mode even when services[] exists', async () => {
263
+ const dir = makeMultiServiceProjectDir({
264
+ services: [
265
+ { name: 'svc-a', projectType: 'backend' },
266
+ { name: 'svc-b', projectType: 'library' },
267
+ ],
268
+ });
269
+ const outDir = makeTmpDir();
270
+ const outputPath = path.join(outDir, 'dashboard.html');
271
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
272
+ await expect(runDashboardHandler({ ...BASE_ARGV, output: outputPath, service: 'svc-a' })).rejects.toThrow('process.exit(0)');
273
+ expect(fs.existsSync(outputPath)).toBe(true);
274
+ const html = fs.readFileSync(outputPath, 'utf8');
275
+ // Single-service HTML must NOT contain the multi-service service-card marker.
276
+ expect(html).not.toContain('service-card');
277
+ });
278
+ it('single-project config (no services) uses existing single-service path', async () => {
279
+ // makeProjectDir writes NO config.yml — loadConfig returns null, so services[] is undefined.
280
+ const dir = makeProjectDir();
281
+ const outDir = makeTmpDir();
282
+ const outputPath = path.join(outDir, 'dashboard.html');
283
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
284
+ await expect(runDashboardHandler({ ...BASE_ARGV, output: outputPath })).rejects.toThrow('process.exit(0)');
285
+ const html = fs.readFileSync(outputPath, 'utf8');
286
+ // Single-service HTML should not contain multi-service card markers.
287
+ expect(html).not.toContain('service-card');
288
+ });
289
+ it('--json-only mode emits MultiServiceDashboardData envelope', async () => {
290
+ const dir = makeMultiServiceProjectDir({
291
+ services: [
292
+ { name: 'svc-a', projectType: 'backend' },
293
+ { name: 'svc-b', projectType: 'library' },
294
+ ],
295
+ });
296
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
297
+ await expect(runDashboardHandler({ ...BASE_ARGV, format: 'json', 'json-only': true })).rejects.toThrow('process.exit(0)');
298
+ const allStdout = stdoutWrite.mock.calls.map(c => String(c[0])).join('');
299
+ const parsed = JSON.parse(allStdout);
300
+ expect(parsed.success).toBe(true);
301
+ expect(parsed.data).toHaveProperty('services');
302
+ expect(parsed.data).toHaveProperty('aggregate');
303
+ expect(parsed.data.services).toHaveLength(2);
304
+ expect(parsed.data.aggregate?.totalServices).toBe(2);
305
+ // Must NOT contain single-service-only shape keys.
306
+ expect(parsed.data).not.toHaveProperty('steps');
307
+ expect(parsed.data).not.toHaveProperty('progress');
308
+ expect(parsed.data).not.toHaveProperty('decisions');
309
+ });
310
+ it('missing service state uses empty skeleton state (continues with remaining services)', async () => {
311
+ const dir = makeMultiServiceProjectDir({
312
+ services: [
313
+ { name: 'svc-a', projectType: 'backend' },
314
+ { name: 'svc-b', projectType: 'library' },
315
+ ],
316
+ omitServiceStates: ['svc-b'], // svc-b has no state.json
317
+ });
318
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
319
+ await expect(runDashboardHandler({ ...BASE_ARGV, format: 'json', 'json-only': true })).rejects.toThrow('process.exit(0)');
320
+ const allStdout = stdoutWrite.mock.calls.map(c => String(c[0])).join('');
321
+ const parsed = JSON.parse(allStdout);
322
+ expect(parsed.success).toBe(true);
323
+ expect(parsed.data.services).toHaveLength(2);
324
+ const svcB = parsed.data.services.find(s => s.name === 'svc-b');
325
+ expect(svcB).toBeDefined();
326
+ // Skeleton state = empty steps: total=0, completed=0, percentage=0.
327
+ expect(svcB?.total).toBe(0);
328
+ expect(svcB?.completed).toBe(0);
329
+ expect(svcB?.percentage).toBe(0);
330
+ // svc-a should still have its data intact.
331
+ const svcA = parsed.data.services.find(s => s.name === 'svc-a');
332
+ expect(svcA?.total).toBeGreaterThan(0);
333
+ });
334
+ it('re-throws non-STATE_MISSING errors (corrupt JSON does not become a skeleton — MMR P2 lock)', async () => {
335
+ // Regression guard: earlier bare catch collapsed every failure mode
336
+ // (corrupt JSON, schema-version mismatch, permission errors) into an
337
+ // empty skeleton, hiding real problems behind a 0% row.
338
+ const dir = makeMultiServiceProjectDir({
339
+ services: [
340
+ { name: 'svc-a', projectType: 'backend' },
341
+ { name: 'svc-b', projectType: 'library' },
342
+ ],
343
+ });
344
+ // Corrupt svc-b's state.json — not missing, but parse-broken.
345
+ const svcBPath = path.join(dir, '.scaffold', 'services', 'svc-b', 'state.json');
346
+ fs.writeFileSync(svcBPath, '{ this is not valid json');
347
+ vi.spyOn(projectRootModule, 'findProjectRoot').mockReturnValue(dir);
348
+ await expect(runDashboardHandler({ ...BASE_ARGV, format: 'json', 'json-only': true })).rejects.toThrow(/STATE_PARSE_ERROR|state\.json/i);
349
+ });
350
+ });
141
351
  });
142
352
  //# sourceMappingURL=dashboard.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.test.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.test.ts"],"names":[],"mappings":"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"}
@@ -65,4 +65,61 @@ export interface GeneratorOptions {
65
65
  }
66
66
  export declare function generateDashboardData(opts: GeneratorOptions): DashboardData;
67
67
  export declare function generateHtml(data: DashboardData): string;
68
+ export interface ServiceSummary {
69
+ /** Service id from config (kebab-case). */
70
+ name: string;
71
+ /** Project type — backend / web-app / library / etc. */
72
+ projectType: string;
73
+ /** (completed + skipped) / total, 0-100. */
74
+ percentage: number;
75
+ completed: number;
76
+ skipped: number;
77
+ pending: number;
78
+ inProgress: number;
79
+ total: number;
80
+ /** Lowest-numbered phase with at least one pending or in_progress step. Null if pipeline complete. */
81
+ currentPhaseNumber: number | null;
82
+ /** Display name of the current phase. Null if complete. */
83
+ currentPhaseName: string | null;
84
+ /** state.next_eligible[0] or null. */
85
+ nextEligibleSlug: string | null;
86
+ /** Meta-prompt frontmatter.summary (fallback: description) of the next eligible step. */
87
+ nextEligibleSummary: string | null;
88
+ }
89
+ export interface MultiServiceAggregate {
90
+ totalServices: number;
91
+ /** Mean of service percentages, rounded. 0 for empty input. */
92
+ averagePercentage: number;
93
+ /** Count of services at 100%. */
94
+ servicesComplete: number;
95
+ /**
96
+ * Service count that has reached or passed each phase. A service "reached"
97
+ * phase N if it has any step in phase N that is completed or skipped.
98
+ */
99
+ servicesByPhase: Array<{
100
+ phaseSlug: string;
101
+ phaseName: string;
102
+ phaseNumber: number;
103
+ reachedCount: number;
104
+ }>;
105
+ }
106
+ export interface MultiServiceDashboardData {
107
+ generatedAt: string;
108
+ methodology: string;
109
+ scaffoldVersion: string;
110
+ /** Preserves input order. */
111
+ services: ServiceSummary[];
112
+ aggregate: MultiServiceAggregate;
113
+ }
114
+ export interface MultiServiceGeneratorOptions {
115
+ services: Array<{
116
+ name: string;
117
+ projectType: string;
118
+ state: PipelineState;
119
+ metaPrompts?: Map<string, MetaPromptFile>;
120
+ }>;
121
+ methodology: string;
122
+ }
123
+ export declare function generateMultiServiceDashboardData(opts: MultiServiceGeneratorOptions): MultiServiceDashboardData;
124
+ export declare function generateMultiServiceHtml(data: MultiServiceDashboardData): string;
68
125
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/dashboard/generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAOrF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;IAC3D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACnG;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnG,SAAS,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAA;IACpB,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAC1C;AAyFD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAsC3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAGxD"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/dashboard/generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAOrF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAA;IAC3D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CACnG;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnG,SAAS,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAA;IACpB,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAC1C;AAyFD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAsC3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAGxD;AAID,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,sGAAsG;IACtG,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,sCAAsC;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,yFAAyF;IACzF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAA;IACzB,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,6BAA6B;IAC7B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,SAAS,EAAE,qBAAqB,CAAA;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,aAAa,CAAA;QACpB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;KAC1C,CAAC,CAAA;IACF,WAAW,EAAE,MAAM,CAAA;CACpB;AA8FD,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,4BAA4B,GACjC,yBAAyB,CAgC3B;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAMhF"}