@opensip-cli/fitness 0.1.10 → 0.1.12

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 (214) hide show
  1. package/README.md +4 -2
  2. package/dist/__tests__/check-utils.test.js +11 -0
  3. package/dist/__tests__/check-utils.test.js.map +1 -1
  4. package/dist/__tests__/fit-execute-opts.test.js +35 -1
  5. package/dist/__tests__/fit-execute-opts.test.js.map +1 -1
  6. package/dist/__tests__/public-api.test.js +7 -2
  7. package/dist/__tests__/public-api.test.js.map +1 -1
  8. package/dist/__tests__/tool.test.js +18 -9
  9. package/dist/__tests__/tool.test.js.map +1 -1
  10. package/dist/check-utils/check-authoring-helpers.d.ts +14 -0
  11. package/dist/check-utils/check-authoring-helpers.d.ts.map +1 -0
  12. package/dist/check-utils/check-authoring-helpers.js +18 -0
  13. package/dist/check-utils/check-authoring-helpers.js.map +1 -0
  14. package/dist/check-utils/index.d.ts +1 -0
  15. package/dist/check-utils/index.d.ts.map +1 -1
  16. package/dist/check-utils/index.js +1 -0
  17. package/dist/check-utils/index.js.map +1 -1
  18. package/dist/check-utils/test-helpers.d.ts.map +1 -1
  19. package/dist/check-utils/test-helpers.js +0 -1
  20. package/dist/check-utils/test-helpers.js.map +1 -1
  21. package/dist/cli/__tests__/fit-fail-closed.test.d.ts +8 -0
  22. package/dist/cli/__tests__/fit-fail-closed.test.d.ts.map +1 -0
  23. package/dist/cli/__tests__/fit-fail-closed.test.js +200 -0
  24. package/dist/cli/__tests__/fit-fail-closed.test.js.map +1 -0
  25. package/dist/cli/__tests__/fit-modes-live.test.js +33 -3
  26. package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -1
  27. package/dist/cli/__tests__/fit-runner.test.d.ts +5 -0
  28. package/dist/cli/__tests__/fit-runner.test.d.ts.map +1 -0
  29. package/dist/cli/__tests__/fit-runner.test.js +145 -0
  30. package/dist/cli/__tests__/fit-runner.test.js.map +1 -0
  31. package/dist/cli/__tests__/report-data.test.js +37 -2
  32. package/dist/cli/__tests__/report-data.test.js.map +1 -1
  33. package/dist/cli/fit/__tests__/envelope-view-table.test.d.ts +2 -0
  34. package/dist/cli/fit/__tests__/envelope-view-table.test.d.ts.map +1 -0
  35. package/dist/cli/fit/__tests__/envelope-view-table.test.js +64 -0
  36. package/dist/cli/fit/__tests__/envelope-view-table.test.js.map +1 -0
  37. package/dist/cli/fit/__tests__/fit-export-command-spec.test.js +5 -2
  38. package/dist/cli/fit/__tests__/fit-export-command-spec.test.js.map +1 -1
  39. package/dist/cli/fit/check-loader.d.ts.map +1 -1
  40. package/dist/cli/fit/check-loader.js +28 -25
  41. package/dist/cli/fit/check-loader.js.map +1 -1
  42. package/dist/cli/fit/envelope-view.d.ts +1 -3
  43. package/dist/cli/fit/envelope-view.d.ts.map +1 -1
  44. package/dist/cli/fit/envelope-view.js +1 -7
  45. package/dist/cli/fit/envelope-view.js.map +1 -1
  46. package/dist/cli/fit/fit-aux-command-specs.d.ts +4 -4
  47. package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -1
  48. package/dist/cli/fit/fit-aux-command-specs.js +13 -15
  49. package/dist/cli/fit/fit-aux-command-specs.js.map +1 -1
  50. package/dist/cli/fit/fit-command-spec.d.ts +3 -3
  51. package/dist/cli/fit/fit-command-spec.d.ts.map +1 -1
  52. package/dist/cli/fit/fit-command-spec.js +5 -9
  53. package/dist/cli/fit/fit-command-spec.js.map +1 -1
  54. package/dist/cli/fit/load-outcome.d.ts +24 -0
  55. package/dist/cli/fit/load-outcome.d.ts.map +1 -0
  56. package/dist/cli/fit/load-outcome.js +203 -0
  57. package/dist/cli/fit/load-outcome.js.map +1 -0
  58. package/dist/cli/fit/resolved-fitness-config.d.ts.map +1 -1
  59. package/dist/cli/fit/resolved-fitness-config.js +2 -6
  60. package/dist/cli/fit/resolved-fitness-config.js.map +1 -1
  61. package/dist/cli/fit/result-builders.d.ts.map +1 -1
  62. package/dist/cli/fit/result-builders.js +3 -4
  63. package/dist/cli/fit/result-builders.js.map +1 -1
  64. package/dist/cli/fit-modes.d.ts.map +1 -1
  65. package/dist/cli/fit-modes.js +51 -19
  66. package/dist/cli/fit-modes.js.map +1 -1
  67. package/dist/cli/fit-runner-progress.d.ts +0 -2
  68. package/dist/cli/fit-runner-progress.d.ts.map +1 -1
  69. package/dist/cli/fit-runner-progress.js +0 -3
  70. package/dist/cli/fit-runner-progress.js.map +1 -1
  71. package/dist/cli/fit-runner.d.ts +1 -34
  72. package/dist/cli/fit-runner.d.ts.map +1 -1
  73. package/dist/cli/fit-runner.js +90 -241
  74. package/dist/cli/fit-runner.js.map +1 -1
  75. package/dist/cli/fit-worker.d.ts.map +1 -1
  76. package/dist/cli/fit-worker.js +0 -1
  77. package/dist/cli/fit-worker.js.map +1 -1
  78. package/dist/cli/fit.d.ts +1 -0
  79. package/dist/cli/fit.d.ts.map +1 -1
  80. package/dist/cli/fit.js +6 -0
  81. package/dist/cli/fit.js.map +1 -1
  82. package/dist/cli/report-data.d.ts.map +1 -1
  83. package/dist/cli/report-data.js +0 -1
  84. package/dist/cli/report-data.js.map +1 -1
  85. package/dist/framework/__tests__/define-check.test.js +0 -1
  86. package/dist/framework/__tests__/define-check.test.js.map +1 -1
  87. package/dist/framework/__tests__/define-regex-list-check.test.js +15 -0
  88. package/dist/framework/__tests__/define-regex-list-check.test.js.map +1 -1
  89. package/dist/framework/__tests__/scope-registry.test.js +2 -0
  90. package/dist/framework/__tests__/scope-registry.test.js.map +1 -1
  91. package/dist/framework/abortable-exec.d.ts.map +1 -1
  92. package/dist/framework/abortable-exec.js +0 -1
  93. package/dist/framework/abortable-exec.js.map +1 -1
  94. package/dist/framework/check-config.d.ts +0 -8
  95. package/dist/framework/check-config.d.ts.map +1 -1
  96. package/dist/framework/check-config.js +0 -1
  97. package/dist/framework/check-config.js.map +1 -1
  98. package/dist/framework/constants.d.ts.map +1 -1
  99. package/dist/framework/constants.js +0 -1
  100. package/dist/framework/constants.js.map +1 -1
  101. package/dist/framework/define-check.d.ts.map +1 -1
  102. package/dist/framework/define-check.js +0 -3
  103. package/dist/framework/define-check.js.map +1 -1
  104. package/dist/framework/define-regex-list-check.d.ts +6 -0
  105. package/dist/framework/define-regex-list-check.d.ts.map +1 -1
  106. package/dist/framework/define-regex-list-check.js +4 -0
  107. package/dist/framework/define-regex-list-check.js.map +1 -1
  108. package/dist/framework/execution-context.d.ts.map +1 -1
  109. package/dist/framework/execution-context.js +0 -2
  110. package/dist/framework/execution-context.js.map +1 -1
  111. package/dist/framework/file-accessor.d.ts.map +1 -1
  112. package/dist/framework/file-accessor.js +0 -4
  113. package/dist/framework/file-accessor.js.map +1 -1
  114. package/dist/framework/file-cache.d.ts +1 -0
  115. package/dist/framework/file-cache.d.ts.map +1 -1
  116. package/dist/framework/file-cache.js +1 -4
  117. package/dist/framework/file-cache.js.map +1 -1
  118. package/dist/framework/ignore-processing.d.ts.map +1 -1
  119. package/dist/framework/ignore-processing.js +0 -2
  120. package/dist/framework/ignore-processing.js.map +1 -1
  121. package/dist/framework/import-graph.d.ts.map +1 -1
  122. package/dist/framework/import-graph.js +0 -1
  123. package/dist/framework/import-graph.js.map +1 -1
  124. package/dist/framework/parse-cache.d.ts.map +1 -1
  125. package/dist/framework/parse-cache.js +0 -1
  126. package/dist/framework/parse-cache.js.map +1 -1
  127. package/dist/framework/scope-registry.d.ts.map +1 -1
  128. package/dist/framework/scope-registry.js +7 -1
  129. package/dist/framework/scope-registry.js.map +1 -1
  130. package/dist/framework/severity-mapping.d.ts.map +1 -1
  131. package/dist/framework/severity-mapping.js +0 -1
  132. package/dist/framework/severity-mapping.js.map +1 -1
  133. package/dist/identity.d.ts +11 -0
  134. package/dist/identity.d.ts.map +1 -0
  135. package/dist/identity.js +11 -0
  136. package/dist/identity.js.map +1 -0
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +1 -1
  140. package/dist/index.js.map +1 -1
  141. package/dist/persistence/session-replay.d.ts.map +1 -1
  142. package/dist/persistence/session-replay.js +7 -28
  143. package/dist/persistence/session-replay.js.map +1 -1
  144. package/dist/plugins/loader.d.ts.map +1 -1
  145. package/dist/plugins/loader.js +2 -1
  146. package/dist/plugins/loader.js.map +1 -1
  147. package/dist/recipes/__tests__/execution-branches.test.d.ts.map +1 -1
  148. package/dist/recipes/__tests__/execution-branches.test.js +0 -1
  149. package/dist/recipes/__tests__/execution-branches.test.js.map +1 -1
  150. package/dist/recipes/__tests__/service.test.d.ts.map +1 -1
  151. package/dist/recipes/__tests__/service.test.js +0 -1
  152. package/dist/recipes/__tests__/service.test.js.map +1 -1
  153. package/dist/recipes/built-in-recipes.d.ts.map +1 -1
  154. package/dist/recipes/built-in-recipes.js +0 -1
  155. package/dist/recipes/built-in-recipes.js.map +1 -1
  156. package/dist/recipes/check-resolution.d.ts.map +1 -1
  157. package/dist/recipes/check-resolution.js +0 -1
  158. package/dist/recipes/check-resolution.js.map +1 -1
  159. package/dist/recipes/check-result-processor.d.ts.map +1 -1
  160. package/dist/recipes/check-result-processor.js +0 -1
  161. package/dist/recipes/check-result-processor.js.map +1 -1
  162. package/dist/recipes/registry.d.ts.map +1 -1
  163. package/dist/recipes/registry.js +0 -1
  164. package/dist/recipes/registry.js.map +1 -1
  165. package/dist/recipes/service-adhoc.d.ts +24 -0
  166. package/dist/recipes/service-adhoc.d.ts.map +1 -0
  167. package/dist/recipes/service-adhoc.js +53 -0
  168. package/dist/recipes/service-adhoc.js.map +1 -0
  169. package/dist/recipes/service-check-resolution.d.ts +18 -0
  170. package/dist/recipes/service-check-resolution.d.ts.map +1 -0
  171. package/dist/recipes/service-check-resolution.js +65 -0
  172. package/dist/recipes/service-check-resolution.js.map +1 -0
  173. package/dist/recipes/service-prepare.d.ts +23 -0
  174. package/dist/recipes/service-prepare.d.ts.map +1 -0
  175. package/dist/recipes/service-prepare.js +30 -0
  176. package/dist/recipes/service-prepare.js.map +1 -0
  177. package/dist/recipes/service-prewarm.d.ts +12 -0
  178. package/dist/recipes/service-prewarm.d.ts.map +1 -0
  179. package/dist/recipes/service-prewarm.js +25 -0
  180. package/dist/recipes/service-prewarm.js.map +1 -0
  181. package/dist/recipes/service-session.d.ts +17 -0
  182. package/dist/recipes/service-session.d.ts.map +1 -0
  183. package/dist/recipes/service-session.js +78 -0
  184. package/dist/recipes/service-session.js.map +1 -0
  185. package/dist/recipes/service.d.ts +2 -19
  186. package/dist/recipes/service.d.ts.map +1 -1
  187. package/dist/recipes/service.js +23 -219
  188. package/dist/recipes/service.js.map +1 -1
  189. package/dist/scaffold/index.d.ts +3 -0
  190. package/dist/scaffold/index.d.ts.map +1 -0
  191. package/dist/scaffold/index.js +3 -0
  192. package/dist/scaffold/index.js.map +1 -0
  193. package/dist/scope-augmentation.d.ts +11 -0
  194. package/dist/scope-augmentation.d.ts.map +1 -1
  195. package/dist/signalers/loader.d.ts.map +1 -1
  196. package/dist/signalers/loader.js +0 -3
  197. package/dist/signalers/loader.js.map +1 -1
  198. package/dist/targets/loader.d.ts.map +1 -1
  199. package/dist/targets/loader.js +0 -3
  200. package/dist/targets/loader.js.map +1 -1
  201. package/dist/targets/target-registry.d.ts.map +1 -1
  202. package/dist/targets/target-registry.js +0 -1
  203. package/dist/targets/target-registry.js.map +1 -1
  204. package/dist/tool.d.ts.map +1 -1
  205. package/dist/tool.js +12 -16
  206. package/dist/tool.js.map +1 -1
  207. package/dist/types/severity.d.ts.map +1 -1
  208. package/dist/types/severity.js +0 -2
  209. package/dist/types/severity.js.map +1 -1
  210. package/package.json +27 -16
  211. package/dist/cli/fit-runner-views.d.ts +0 -33
  212. package/dist/cli/fit-runner-views.d.ts.map +0 -1
  213. package/dist/cli/fit-runner-views.js +0 -92
  214. package/dist/cli/fit-runner-views.js.map +0 -1
@@ -1,106 +1,60 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
1
  /**
3
- * fit-runner — owns the live-view state machine for `opensip fit`.
4
- *
5
- * Layer 5 Phase 3 lifted the fit live view out of `opensip-cli`.
6
- * The state machine (loading → running → done | error), `executeFit`
7
- * orchestration, `reportToCloud` post-call, and the Ink/React render
8
- * tree all live here, in the package that owns the fitness command
9
- * surface. Adding a fourth tool with a live view requires zero CLI
10
- * edits — each tool ships its own renderer and registers it via
11
- * `cli.registerLiveView(key, renderer)`.
12
- *
13
- * Shared presentational primitives (Banner, RunHeader, Spinner, theme
14
- * tokens) come from `@opensip-cli/cli-ui`. Tool-specific render
15
- * pieces (results table, findings block, cloud-report status) live in
16
- * `cli/fit-runner-views.tsx`; they're imported here so this module
17
- * stays focused on the state machine and entry point.
18
- *
19
- * Single exit-code write path: error-result conditions route through the
20
- * supplied `setExitCode` callback (`ToolCliContext.setExitCode`) so the CLI keeps
21
- * its single `process.exitCode` mutator. The findings exit is host-owned
22
- * (ADR-0035: derived from the envelope verdict in `deliverSignals`). The
23
- * historical `process.exitCode = N` writes that lived in FitView are
24
- * gone.
2
+ * fit-runner — live-view entry for `opensip fit` via @opensip-cli/cli-live.
25
3
  */
26
4
  import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
27
5
  import { tmpdir } from 'node:os';
28
6
  import { join } from 'node:path';
29
- import { Banner, ClockProvider, ErrorMessage, LiveProgress, normalizeBannerSize, ProjectHeader, renderToInk, RunFooterHints, RunHeader, RunSummary, RunTimingProvider, shouldRenderRunFooterHints, shouldRenderRunUnitTable, ThemeProvider, UpdateHint, DEFAULT_RUN_FOOTER_HINTS, viewFindingsGroups, } from '@opensip-cli/cli-ui';
7
+ import { runToolLiveView } from '@opensip-cli/cli-live';
30
8
  import { runOffThreadOrInProcess, currentScope, liveEngineCorrelation, } from '@opensip-cli/core';
31
- import { Box, Static, useApp, render } from 'ink';
32
- import React, { useEffect, useState } from 'react';
33
- import { envelopeToFitRows } from './fit/envelope-view.js';
9
+ import { FITNESS_LAYOUT_KEY } from '../identity.js';
10
+ import { buildFitVerboseDetail, envelopeToFitRows } from './fit/envelope-view.js';
34
11
  import { buildFitnessSessionPayload } from './fit/result-builders.js';
35
- import { checkCountLabel, firstUnitCount, withCheckCountFromProgress, } from './fit-runner-progress.js';
36
- import { ResultsTable, WarningsBlock } from './fit-runner-views.js';
12
+ import { checkCountLabel, withCheckCountFromProgress } from './fit-runner-progress.js';
37
13
  import { ensureChecksLoaded, executeFit, getEnabledCheckCount } from './fit.js';
38
- // Theme constants used by tool-specific sub-components below. The shared
39
- // presentational primitives (Banner, RunHeader, Spinner, ErrorMessage)
40
- // pull their colors from cli-ui's ThemeProvider; the tool-specific
41
- // renderers also use useTheme() to stay consistent.
42
14
  const FIT_TOOL_TITLE = 'Fitness Checks';
43
15
  const FIT_TOOL_DESCRIPTION = 'Scanning your codebase for quality, security, and architecture issues.';
44
- // Pool-shape surfaces for the shared <LiveProgress> renderer. fit's checks are a
45
- // dynamic pool (many, counted), not a fixed pipeline — so it renders as one
46
- // spinner + completed/total counter. The synthetic stage id is 'checks'.
47
16
  const FIT_LOADING_SURFACE = { shape: 'pool', label: 'Loading checks...' };
48
17
  const FIT_RUNNING_SURFACE = { shape: 'pool', label: 'Running checks...' };
49
- const NO_PROGRESS = () => {
50
- // The loading phase has no live event stream yet — LiveProgress renders a bare
51
- // animated spinner from a no-op subscription.
52
- };
53
- /**
54
- * Run fit, translating the engine's monotonic (completed, total) callback into
55
- * pool-shape ProgressEvents on the `'checks'` stage. Hoisted to module scope so
56
- * the emit translation isn't a 5th-level nested function inside the runner's
57
- * effect.
58
- */
59
18
  function executeFitWithProgress(args, emit) {
60
19
  emit({ type: 'stage-start', stage: 'checks', label: 'Running checks...' });
61
20
  return executeFit(args, {
62
21
  onProgress: (completed, total) => emit({ type: 'stage-progress', stage: 'checks', completed, total }),
63
22
  });
64
23
  }
65
- function rememberCheckCount(current, checkCount) {
66
- if (current.phase !== 'running')
67
- return current;
68
- if (current.checkCount === checkCount)
69
- return current;
70
- return { ...current, checkCount };
24
+ function fitRowsToLiveRunTable(rows) {
25
+ return rows.map((row) => ({
26
+ unit: row.check,
27
+ status: row.status,
28
+ errors: row.errors,
29
+ warnings: row.warnings,
30
+ durationMs: row.durationMs,
31
+ validated: row.validated,
32
+ ignored: row.ignored,
33
+ itemType: row.itemType,
34
+ }));
71
35
  }
72
- function FitRunner({ args, setExitCode, onEnvelope, onSession, liveContext, }) {
73
- const { exit } = useApp();
74
- const [state, setState] = useState({ phase: 'loading' });
75
- const rememberProgressTotal = (total) => {
76
- setState((current) => rememberCheckCount(current, total));
77
- };
78
- useEffect(() => {
79
- let cancelled = false;
80
- void (async () => {
81
- // Phase 1: Load checks so the worker has a populated registry. Do not use
82
- // the registry count for the header: it is the available enabled-check
83
- // count, before recipe/config runtime filters such as disabledChecks.
84
- // The authoritative run count arrives on the first progress event.
36
+ export async function renderFitLive(args, contextOrDatastore, options) {
37
+ const liveContext = contextOrDatastore && contextOrDatastore.runSession
38
+ ? contextOrDatastore
39
+ : undefined;
40
+ const recipe = args.tags && args.tags.length > 0 ? `tags: ${args.tags.join(',')}` : (args.recipe ?? 'default');
41
+ let availableCount = 0;
42
+ return runToolLiveView({
43
+ tool: 'fitness',
44
+ meta: { title: FIT_TOOL_TITLE, description: FIT_TOOL_DESCRIPTION },
45
+ surface: FIT_RUNNING_SURFACE,
46
+ loadingSurface: FIT_LOADING_SURFACE,
47
+ verbose: args.verbose === true,
48
+ quiet: args.quiet === true,
49
+ initialShowRunHeader: false,
50
+ projectPath: args.cwd,
51
+ walkedUp: currentScope()?.projectContext?.walkedUp,
52
+ produce: async (emit, helpers) => {
85
53
  await ensureChecksLoaded(args.cwd);
86
- const availableCount = getEnabledCheckCount();
87
- if (cancelled)
88
- return;
89
- // Execute OFF the main process (ADR-0028): fork the CLI to `fit-run-worker`,
90
- // which re-bootstraps the full scope and streams progress + the final result
91
- // over IPC, so this process stays free to animate the spinner + 80ms clock.
92
- // `runOffThreadOrInProcess` falls back to the in-process closure when forking
93
- // is disabled/unavailable (OPENSIP_CLI_NO_WORKER) — identical result either
94
- // way. The worker reads its run spec (the serializable FitOptions) from a
95
- // temp file we clean up after the run settles.
54
+ availableCount = getEnabledCheckCount();
96
55
  const specDir = mkdtempSync(join(tmpdir(), 'fit-worker-'));
97
56
  const specPath = join(specDir, 'spec.json');
98
57
  writeFileSync(specPath, JSON.stringify(args), 'utf8');
99
- // Forward the parent run's correlation bag (composition root, Phase 0) so
100
- // the forked live-engine worker's logs attribute to this run — symmetric to
101
- // the spawn-path shard-runner. The transport injects OPENSIP_RUN_ID from
102
- // currentScope()?.runId (B1); the descriptor omits runId and marks the
103
- // live-engine fork via workerKind.
104
58
  const correlation = liveEngineCorrelation(currentScope()?.correlation);
105
59
  const run = runOffThreadOrInProcess({
106
60
  descriptor: {
@@ -108,10 +62,23 @@ function FitRunner({ args, setExitCode, onEnvelope, onSession, liveContext, }) {
108
62
  argv: ['fit-run-worker', specPath],
109
63
  ...(correlation ? { correlation } : {}),
110
64
  },
111
- inProcess: (emit) => executeFitWithProgress(args, emit),
65
+ inProcess: (workerEmit) => executeFitWithProgress(args, workerEmit),
112
66
  });
113
- const subscribe = withCheckCountFromProgress(run.onProgress, rememberProgressTotal);
114
- setState({ phase: 'running', checkCount: null, availableCount, subscribe });
67
+ const subscribe = withCheckCountFromProgress(run.onProgress, (checkCount) => {
68
+ helpers.setShowRunHeader(true);
69
+ helpers.setHeaderMetadata([
70
+ { label: 'Recipe', value: recipe },
71
+ {
72
+ label: 'Checks',
73
+ value: checkCountLabel({
74
+ running: checkCount,
75
+ available: availableCount,
76
+ verbose: args.verbose === true,
77
+ }),
78
+ },
79
+ ]);
80
+ });
81
+ helpers.setRunning(subscribe);
115
82
  let fitResult;
116
83
  try {
117
84
  fitResult = await run.result;
@@ -119,167 +86,49 @@ function FitRunner({ args, setExitCode, onEnvelope, onSession, liveContext, }) {
119
86
  finally {
120
87
  rmSync(specDir, { recursive: true, force: true });
121
88
  }
122
- if (cancelled)
123
- return;
124
89
  if (fitResult.result.type === 'error') {
125
- setState({ phase: 'error', result: fitResult.result });
126
- setExitCode?.(fitResult.result.exitCode);
127
- setTimeout(() => exit(), 100);
128
- return;
90
+ const err = fitResult.result;
91
+ return {
92
+ kind: 'error',
93
+ message: err.message,
94
+ exitCode: err.exitCode,
95
+ ...(err.suggestion === undefined ? {} : { suggestion: err.suggestion }),
96
+ };
129
97
  }
130
98
  const { result } = fitResult;
131
- const warnings = fitResult.warnings ?? [];
132
- // ADR-0035: the host owns the findings exit. The live renderer returns the
133
- // envelope to `setUpFitLiveView`, which calls `deliverSignals`; the root
134
- // sets the exit from `envelope.verdict.passed` there. No setExitCode here.
135
- // Host-owned persistence (host-owned-run-timing Phase 2): the component no
136
- // longer writes the session. It surfaces the contribution; the host
137
- // completes the lifecycle and persists after `renderLive` resolves.
138
- if (result.envelope) {
139
- onSession?.({
140
- tool: 'fit',
141
- cwd: args.cwd,
142
- recipe: result.envelope.recipe,
143
- score: result.envelope.verdict.score,
144
- passed: result.envelope.verdict.passed,
145
- payload: buildFitnessSessionPayload(result.envelope),
146
- });
147
- }
148
- // Effectful egress (cloud + `--report-to`) lives at the composition root
149
- // now (ADR-0011): `renderFitLive` returns this envelope and the tool's
150
- // `registerLiveView` callback delivers it once the Ink app exits.
151
- onEnvelope?.(result.envelope);
152
- setState({
153
- phase: 'done',
154
- result,
155
- warnings,
156
- checkCount: firstUnitCount(result.envelope),
157
- availableCount,
158
- });
159
- setTimeout(() => exit(), 100);
160
- })();
161
- return () => {
162
- cancelled = true;
163
- };
164
- }, []);
165
- const recipe = args.tags && args.tags.length > 0 ? `tags: ${args.tags.join(',')}` : (args.recipe ?? 'default');
166
- // Banner + RunHeader both live in <Static> so Ink writes them once above the
167
- // dynamic redraw region and never touches those bytes again. The dynamic
168
- // region contains ONLY the things that actually change between frames
169
- // (spinner during loading/running; summary block during done) — small,
170
- // stable-width content that Ink can redraw without its line-clear heuristic
171
- // miscounting and producing overdraw.
172
- //
173
- // Static is incremental: items added in later renders are appended below
174
- // existing static content. We start with just the banner (we don't know
175
- // checkCount yet during loading), and append the header once checkCount is
176
- // known. RunHeader's metadata only changes once (when loading→running), and
177
- // after that it's stable for the rest of the run — perfect Static fit.
178
- const checkCount = state.phase === 'running' || state.phase === 'done' ? state.checkCount : null;
179
- const availableCount = state.phase === 'running' || state.phase === 'done' ? state.availableCount : null;
180
- const staticItems = computeStaticItems(args.quiet === true, checkCount);
181
- // Presentation settings resolved once in the pre-action hook. The live
182
- // view runs inside that scope, so it reads the same banner size + version
183
- // the static path does. `mini` carries the project path in its box, so we
184
- // drop the separate ProjectHeader line for it (matches App.tsx) and pass
185
- // the scope's walkedUp so mini keeps the "(found N levels up)" hint.
186
- const scope = currentScope();
187
- const ui = scope?.ui;
188
- const walkedUp = scope?.projectContext?.walkedUp;
189
- const bannerSize = normalizeBannerSize(ui?.bannerSize);
190
- const showProjectHeader = bannerSize !== 'mini';
191
- const renderStaticItem = (item) => {
192
- if (item === 'banner') {
193
- return (_jsxs(React.Fragment, { children: [_jsx(Banner, { size: bannerSize, version: ui?.version, projectPath: args.cwd, walkedUp: walkedUp, update: ui?.update }), bannerSize === 'mini' && ui?.update !== undefined && _jsx(UpdateHint, {}), showProjectHeader && _jsx(ProjectHeader, { root: args.cwd, walkedUp: walkedUp })] }, item));
194
- }
195
- const metadata = [
196
- { label: 'Recipe', value: recipe },
197
- {
198
- label: 'Checks',
199
- value: checkCountLabel({
200
- running: checkCount ?? 0,
201
- available: availableCount ?? checkCount ?? 0,
202
- verbose: args.verbose === true,
203
- }),
204
- },
205
- ];
206
- return (_jsx(RunHeader, { tool: FIT_TOOL_TITLE, description: FIT_TOOL_DESCRIPTION, metadata: metadata }, item));
207
- };
208
- const staticHeader = _jsx(Static, { items: staticItems, children: renderStaticItem });
209
- switch (state.phase) {
210
- case 'loading': {
211
- return (_jsxs(_Fragment, { children: [staticHeader, _jsx(Box, { paddingTop: 1, children: _jsx(LiveProgress, { surface: FIT_LOADING_SURFACE, subscribe: NO_PROGRESS }) })] }));
212
- }
213
- case 'running': {
214
- return (_jsxs(_Fragment, { children: [staticHeader, _jsx(LiveProgress, { surface: FIT_RUNNING_SURFACE, subscribe: state.subscribe })] }));
215
- }
216
- case 'done': {
217
- const { envelope, verboseDetail } = state.result;
218
- const { summary } = envelope.verdict;
219
- const renderPolicy = { verbose: args.verbose === true };
220
- // Host-owned timing (via provider from liveContext or outer host wrap):
221
- // omit explicit durationMs so RunSummary reads from RunTimingProvider.
222
- // The displayed Duration now matches the value stamped into StoredSession
223
- // by the host RunTimer at record time.
224
- // ADR-0021: the verbose surface is driven by args.verbose alone. The
225
- // detail body renders through the shared viewFindingsGroups producer (same
226
- // path as the static `fit --verbose | cat` render), not the retired local
227
- // FindingsBlock.
228
- const findingsDetail = verboseDetail?.kind === 'findings' && verboseDetail.groups.length > 0
229
- ? verboseDetail
99
+ const envelope = result.envelope;
100
+ const verboseDetail = buildFitVerboseDetail(envelope, { verbose: args.verbose === true });
101
+ const findingsGroups = verboseDetail?.kind === 'findings' && verboseDetail.groups.length > 0
102
+ ? verboseDetail.groups
230
103
  : undefined;
231
- const summaryEl = (_jsx(RunSummary, { passed: envelope.verdict.passed, errors: summary.errors, warnings: summary.warnings }));
232
- const timedSummary = liveContext?.runSession ? (_jsx(RunTimingProvider, { timer: liveContext.runSession.timing, children: summaryEl })) : (summaryEl);
233
- return (_jsxs(_Fragment, { children: [staticHeader, _jsxs(Box, { flexDirection: "column", children: [!args.quiet && shouldRenderRunUnitTable(renderPolicy) && (_jsx(Box, { paddingTop: 1, flexDirection: "column", children: _jsx(ResultsTable, { rows: envelopeToFitRows(envelope) }) })), timedSummary, !args.quiet && state.warnings.length > 0 && (_jsx(WarningsBlock, { warnings: state.warnings })), !args.quiet && findingsDetail !== undefined && (_jsx(Box, { children: renderToInk(viewFindingsGroups(findingsDetail.groups)) })), !args.quiet && shouldRenderRunFooterHints(renderPolicy) && (_jsx(RunFooterHints, { hints: DEFAULT_RUN_FOOTER_HINTS }))] })] }));
234
- }
235
- case 'error': {
236
- return _jsx(ErrorMessage, { message: state.result.message, suggestion: state.result.suggestion });
237
- }
238
- }
239
- }
240
- /**
241
- * Compute the Static items list for the current frame. Items are append-only:
242
- * `'banner'` is present once the run starts; `'header'` joins once checkCount
243
- * is known (after loading). In quiet mode, the list stays empty so the Static
244
- * tree renders nothing.
245
- */
246
- function computeStaticItems(quiet, checkCount) {
247
- if (quiet)
248
- return [];
249
- if (checkCount === null)
250
- return ['banner'];
251
- return ['banner', 'header'];
252
- }
253
- /**
254
- * Render the live `fit` view. Resolves once the underlying Ink app exits with a
255
- * {@link ToolRunCompletion} carrying the run's `envelope` (for root-owned
256
- * egress) and `session` contribution (which the HOST persists after this
257
- * resolves — host-owned-run-timing Phase 2; the component no longer writes the
258
- * session itself).
259
- *
260
- * The fitness tool wires this in via `setUpFitLiveView` / `registerLiveView`.
261
- * `setExitCode` is the single mutator path on `process.exitCode`; the runner
262
- * calls it for error-result outcomes (the findings exit is host-owned via the
263
- * delivered envelope verdict, ADR-0035).
264
- */
265
- export async function renderFitLive(args, contextOrDatastore, options) {
266
- let envelope;
267
- let session;
268
- // A raw DataStore arm is accepted for backward compat but no longer threaded
269
- // (the host owns persistence). Only a LiveViewContext is forwarded.
270
- const liveContext = contextOrDatastore && contextOrDatastore.runSession
271
- ? contextOrDatastore
272
- : undefined;
273
- const app = render(_jsx(ThemeProvider, { children: _jsx(ClockProvider, { children: _jsx(FitRunner, { args: args, setExitCode: options?.setExitCode, onEnvelope: (e) => {
274
- envelope = e;
275
- }, onSession: (c) => {
276
- session = c;
277
- }, liveContext: liveContext }) }) }));
278
- await app.waitUntilExit();
279
- // Trailing newline so shell prompt starts on a new line.
280
- process.stdout.write('\n');
281
- // host-owned-run-timing Phase 3: the host persists the returned session
282
- // contribution after this live renderer resolves.
283
- return { envelope, session };
104
+ return {
105
+ kind: 'done',
106
+ done: {
107
+ summary: {
108
+ passed: envelope.verdict.passed,
109
+ errors: envelope.verdict.summary.errors,
110
+ warnings: envelope.verdict.summary.warnings,
111
+ },
112
+ ...(findingsGroups === undefined ? {} : { verboseFindings: findingsGroups }),
113
+ ...(args.verbose === true
114
+ ? { table: fitRowsToLiveRunTable(envelopeToFitRows(envelope)) }
115
+ : {}),
116
+ warnings: fitResult.warnings ?? [],
117
+ },
118
+ envelope,
119
+ session: {
120
+ tool: FITNESS_LAYOUT_KEY,
121
+ cwd: args.cwd,
122
+ recipe: envelope.recipe,
123
+ score: envelope.verdict.score,
124
+ passed: envelope.verdict.passed,
125
+ payload: buildFitnessSessionPayload(envelope),
126
+ },
127
+ };
128
+ },
129
+ }, {
130
+ setExitCode: options?.setExitCode,
131
+ liveContext,
132
+ });
284
133
  }
285
134
  //# sourceMappingURL=fit-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fit-runner.js","sourceRoot":"","sources":["../../src/cli/fit-runner.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fit-runner.js","sourceRoot":"","sources":["../../src/cli/fit-runner.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fit-worker.d.ts","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAgB3B;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBtE;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,OAAO,EAAE,cAAc,CAiBvE,CAAC"}
1
+ {"version":3,"file":"fit-worker.d.ts","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EAEpB,MAAM,mBAAmB,CAAC;AAgB3B;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBtE;AAED,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,OAAO,EAAE,cAAc,CAiBvE,CAAC"}
@@ -1,4 +1,3 @@
1
- // @fitness-ignore-file detached-promises -- this worker's `send()` helper is synchronous (it calls process.send, which returns immediately); the name-based heuristic mistakes the floating send(...) IPC posts for promise-returning calls. The one genuine async call (executeFit) is awaited.
2
1
  /**
3
2
  * `fit-run-worker <specPath>` — the headless fit run forked by the live view
4
3
  * (ADR-0028). The live runner forks `node <cliScript> fit-run-worker <spec>`;
@@ -1 +1 @@
1
- {"version":3,"file":"fit-worker.js","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA,iSAAiS;AACjS;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EACL,aAAa,GAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAStC,kEAAkE;AAClE,SAAS,IAAI,CAAC,GAAkD;IAC9D,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAe,CAAC;QACtE,IAAI,CAAC;YACH,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE;SAC5E,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;YACvC,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC/B,IAAI,CAAC;gBACH,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;aACrE,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,GAAG,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAyC,aAAa,CAGxF;IACA,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,UAAU;IACtB,WAAW,EACT,6FAA6F;IAC/F,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IAChF,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,YAAY;IACpB,eAAe,EAAE,YAAY;IAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAiB,EAAE;QACxC,MAAM,QAAQ,GAAI,OAAyC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"fit-worker.js","sourceRoot":"","sources":["../../src/cli/fit-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EACL,aAAa,GAId,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAStC,kEAAkE;AAClE,SAAS,IAAI,CAAC,GAAkD;IAC9D,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAe,CAAC;QACtE,IAAI,CAAC;YACH,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE;SAC5E,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;YACvC,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC/B,IAAI,CAAC;gBACH,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;aACrE,CAAC;SACL,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,GAAG,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAyC,aAAa,CAGxF;IACA,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,UAAU;IACtB,WAAW,EACT,6FAA6F;IAC/F,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;IAChF,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,YAAY;IACpB,eAAe,EAAE,YAAY;IAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAiB,EAAE;QACxC,MAAM,QAAQ,GAAI,OAAyC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7E,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
package/dist/cli/fit.d.ts CHANGED
@@ -68,6 +68,7 @@ export declare function executeFit(args: FitOptions, opts?: ExecuteFitOptions):
68
68
  result: RunPresentation;
69
69
  envelope: SignalEnvelope;
70
70
  warnings?: readonly string[];
71
+ runOutcome?: 'degraded';
71
72
  } | {
72
73
  result: ErrorResult;
73
74
  envelope?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkBH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAShC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAMpE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAMN;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACnF;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CACtE,CAgGA"}
1
+ {"version":3,"file":"fit.d.ts","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAuBH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAShC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAMpE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAMN;IACE,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GACD;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,CACtE,CAuGA"}
package/dist/cli/fit.js CHANGED
@@ -26,6 +26,7 @@ import { buildScopeBasedFileMap } from '../framework/scope-resolver.js';
26
26
  import { FitnessRecipeService } from '../recipes/service.js';
27
27
  import { ensureChecksLoaded, getLoadWarnings } from './fit/check-loader.js';
28
28
  import { loadFitConfig, validateLanguagesAgainstAdapters } from './fit/config-loader.js';
29
+ import { fitCommandErrorResult, fitLoadCommandError, fitLoadIsDegraded, } from './fit/load-outcome.js';
29
30
  import { runRecipeOrAdHoc, selectRecipe } from './fit/recipe-selector.js';
30
31
  import { resolvedFitnessConfig } from './fit/resolved-fitness-config.js';
31
32
  import { buildFitEnvelope, buildFitCallbacks, buildFitPresentation, } from './fit/result-builders.js';
@@ -63,6 +64,10 @@ export { getDisplayName, getIcon } from './fit/display-registry.js';
63
64
  export async function executeFit(args, opts = {}) {
64
65
  logger.info({ evt: 'cli.checks.loading', module: 'cli:fit' });
65
66
  await ensureChecksLoaded(args.cwd);
67
+ const loadCommandError = fitLoadCommandError();
68
+ if (loadCommandError !== undefined) {
69
+ return { result: fitCommandErrorResult(loadCommandError) };
70
+ }
66
71
  const checkRegistry = currentCheckRegistry();
67
72
  logger.info({
68
73
  evt: 'cli.checks.loaded',
@@ -146,6 +151,7 @@ export async function executeFit(args, opts = {}) {
146
151
  // warnings ride as a sibling field (not on the presentation): the non-Ink
147
152
  // paths surface them via emitWarningsToStderr, the live runner in its summary.
148
153
  ...(warnings.length > 0 ? { warnings } : {}),
154
+ ...(fitLoadIsDegraded() ? { runOutcome: 'degraded' } : {}),
149
155
  };
150
156
  }
151
157
  //# sourceMappingURL=fit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fit.js","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fit.js","sourceRoot":"","sources":["../../src/cli/fit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAanD,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAC3C;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwCD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkCjG"}
1
+ {"version":3,"file":"report-data.d.ts","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAanD,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAC3C;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAwCD;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkCjG"}
@@ -1,4 +1,3 @@
1
- // @fitness-ignore-file error-handling-quality -- report-data collection is a best-effort UX action: signalers-config load failures degrade gracefully to ungoverned mode (surfaced separately by the fitness run). The CLI composition root owns file-writing and browser launch; this module only contributes fitness's catalog inputs.
2
1
  /**
3
2
  * report-data contribution — fitness's inputs to the cross-tool HTML
4
3
  * report.
@@ -1 +1 @@
1
- {"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA,yUAAyU;AACzU;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAsCvE,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,SAAS,mBAAmB,CAAC,SAA6B;IACxD,OAAO,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,UAAmB;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,wDAAwD;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAgB;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC;IACrD,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAwB,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;YACvB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;YACrC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;YAC7C,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ;YAC/C,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAyB,CAAC,GAAG,qBAAqB,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAC1F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;QAC3B,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI;QACtB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"report-data.js","sourceRoot":"","sources":["../../src/cli/report-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAsCvE,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,SAAS,mBAAmB,CAAC,SAA6B;IACxD,OAAO,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,UAAmB;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;QACnE,wDAAwD;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAgB;IAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC;IACrD,MAAM,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,oBAAoB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAwB,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3E,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;YACvB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;YACrC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe;YAC7C,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI,QAAQ;YAC/C,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAyB,CAAC,GAAG,qBAAqB,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,CAC1F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;QAC3B,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI;QACtB,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,MAAM;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AACzD,CAAC"}
@@ -1,4 +1,3 @@
1
- // @fitness-ignore-file file-length-limit -- behavior fixture suite; related scenarios stay together while covered domains are split into focused tests.
2
1
  import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
3
2
  import { tmpdir } from 'node:os';
4
3
  import { dirname, join } from 'node:path';