@openmixer/plugin-qualify 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +17 -0
  2. package/dist/clap-qualify.js +8 -10
  3. package/dist/clap-qualify.js.map +1 -1
  4. package/dist/cost-fields.d.ts +46 -0
  5. package/dist/cost-fields.js +46 -0
  6. package/dist/cost-fields.js.map +1 -0
  7. package/dist/hosting-codes.d.ts +2 -0
  8. package/dist/hosting-codes.js +2 -0
  9. package/dist/hosting-codes.js.map +1 -1
  10. package/dist/hosting-suitability.d.ts +15 -2
  11. package/dist/hosting-suitability.js +44 -12
  12. package/dist/hosting-suitability.js.map +1 -1
  13. package/dist/index.d.ts +2 -0
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/measure-host.d.ts +21 -0
  17. package/dist/measure-host.js +124 -0
  18. package/dist/measure-host.js.map +1 -0
  19. package/dist/measurement/cli.d.ts +47 -7
  20. package/dist/measurement/cli.js +117 -9
  21. package/dist/measurement/cli.js.map +1 -1
  22. package/dist/measurement/format.d.ts +5 -0
  23. package/dist/measurement/format.js +2 -0
  24. package/dist/measurement/format.js.map +1 -1
  25. package/dist/measurement/vocabulary.d.ts +7 -2
  26. package/dist/measurement/vocabulary.js +9 -3
  27. package/dist/measurement/vocabulary.js.map +1 -1
  28. package/dist/qualify-declarations.d.ts +43 -5
  29. package/dist/qualify-declarations.js +44 -5
  30. package/dist/qualify-declarations.js.map +1 -1
  31. package/dist/tool-paths.d.ts +11 -0
  32. package/dist/tool-paths.js +18 -1
  33. package/dist/tool-paths.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/clap-qualify.ts +6 -11
  36. package/src/cost-fields.ts +72 -0
  37. package/src/hosting-codes.ts +2 -0
  38. package/src/hosting-suitability.ts +58 -12
  39. package/src/index.ts +2 -0
  40. package/src/measure-host.ts +112 -0
  41. package/src/measurement/cli.ts +146 -15
  42. package/src/measurement/format.ts +7 -0
  43. package/src/measurement/vocabulary.ts +10 -3
  44. package/src/qualify-declarations.ts +49 -5
  45. package/src/tool-paths.ts +29 -1
  46. package/tools/benchmark.py +126 -6
  47. package/tools/lv2-measure.mjs +76 -9
@@ -0,0 +1,124 @@
1
+ // SPDX-License-Identifier: GPL-3.0-or-later
2
+ // Copyright (C) 2026 Pau Aliagas <linuxnow@gmail.com>
3
+ /**
4
+ * Reading what the measuring host (`lv2_measure`) prints and supervising how long it may take
5
+ * (`2026-09-25-plugin-qualify.md` §2a). Pure functions: the runner spawns, these decide.
6
+ */
7
+ import { isRecord } from "./measurement/guards.js";
8
+ import { SOAK_SWEEP_DB, SOAK_SWEEP_RATIO, SOAK_TIMEOUT_FLOOR_S, SOAK_TIMEOUT_MARGIN } from "./qualify-declarations.js";
9
+ /**
10
+ * Where `text` stops being JSON, scanning ONE value from `i`; returns the index just past the
11
+ * value, or `-(failing index) - 1` when it is not (negative means failure). A tolerant reader
12
+ * has to know the exact offset of the first bad character, which `JSON.parse` does not report
13
+ * portably.
14
+ */
15
+ function scanValue(t, i) {
16
+ const ws = (k) => {
17
+ while (k < t.length && (t[k] === " " || t[k] === "\t" || t[k] === "\r" || t[k] === "\n"))
18
+ k++;
19
+ return k;
20
+ };
21
+ i = ws(i);
22
+ const c = t[i];
23
+ if (c === "{" || c === "[") {
24
+ const close = c === "{" ? "}" : "]";
25
+ let k = ws(i + 1);
26
+ if (t[k] === close)
27
+ return k + 1;
28
+ for (;;) {
29
+ if (c === "{") {
30
+ if (t[k] !== '"')
31
+ return -k - 1;
32
+ const key = scanValue(t, k);
33
+ if (key < 0)
34
+ return key;
35
+ k = ws(key);
36
+ if (t[k] !== ":")
37
+ return -k - 1;
38
+ k++;
39
+ }
40
+ const v = scanValue(t, k);
41
+ if (v < 0)
42
+ return v;
43
+ k = ws(v);
44
+ if (t[k] === close)
45
+ return k + 1;
46
+ if (t[k] !== ",")
47
+ return -k - 1;
48
+ k = ws(k + 1);
49
+ }
50
+ }
51
+ if (c === '"') {
52
+ let k = i + 1;
53
+ while (k < t.length) {
54
+ if (t[k] === "\\")
55
+ k += 2;
56
+ else if (t[k] === '"')
57
+ return k + 1;
58
+ else if (t[k] === "\n")
59
+ return -k - 1;
60
+ else
61
+ k++;
62
+ }
63
+ return -t.length - 1;
64
+ }
65
+ const lit = /^(?:-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null)/.exec(t.slice(i, i + 40));
66
+ return lit === null ? -i - 1 : i + lit[0].length;
67
+ }
68
+ /**
69
+ * The tool's one JSON record out of a stdout a plugin has also printed on (Guitarix:
70
+ * `using block size: 0`, `convolver disabled`, written by the plugin into the middle of the
71
+ * tool's own buffered line). The record is the last `{`-leading line that repairs to one valid
72
+ * object: wherever the text stops being JSON, drop through the end of that line — the
73
+ * plugin's banner — and join what follows. `undefined` when nothing repairs: the caller
74
+ * reports a `parse-error`, never a death.
75
+ */
76
+ export function extractJsonRecord(stdout) {
77
+ const lines = stdout.split("\n");
78
+ let offset = 0;
79
+ const starts = [];
80
+ for (const line of lines) {
81
+ if (line.startsWith("{"))
82
+ starts.push(offset);
83
+ offset += line.length + 1;
84
+ }
85
+ for (const start of starts.reverse()) {
86
+ let text = stdout.slice(start);
87
+ for (let repairs = 0; repairs < 64; repairs++) {
88
+ const end = scanValue(text, 0);
89
+ if (end >= 0) {
90
+ try {
91
+ const parsed = JSON.parse(text.slice(0, end));
92
+ return isRecord(parsed) ? parsed : undefined;
93
+ }
94
+ catch {
95
+ break;
96
+ }
97
+ }
98
+ const bad = -end - 1;
99
+ const eol = text.indexOf("\n", bad);
100
+ if (eol < 0)
101
+ break;
102
+ text = text.slice(0, bad) + text.slice(eol + 1);
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ /**
108
+ * The wall-clock limit for a soak of `soakAudioS` audio seconds, from the calibration soak's
109
+ * measured speed: `wallPerAudio * soakAudioS * SOAK_TIMEOUT_MARGIN + SOAK_TIMEOUT_FLOOR_S`,
110
+ * rounded up. Refuses (throws) on a calibration that measured nothing: a guessed limit is the
111
+ * fixed 900 s again.
112
+ */
113
+ export function soakTimeoutSeconds(calibration, soakAudioS) {
114
+ const { wallSeconds, audioSeconds } = calibration;
115
+ if (!(wallSeconds > 0) || !(audioSeconds > 0) || !(soakAudioS > 0)) {
116
+ throw new Error("soakTimeoutSeconds: calibration measured no speed");
117
+ }
118
+ return Math.ceil((wallSeconds / audioSeconds) * soakAudioS * SOAK_TIMEOUT_MARGIN + SOAK_TIMEOUT_FLOOR_S);
119
+ }
120
+ /** The environment that bounds the host's soak sweep to the declared ranges. */
121
+ export function soakSweepEnv() {
122
+ return { OMX_SWEEP_DB: String(SOAK_SWEEP_DB), OMX_SWEEP_RATIO: String(SOAK_SWEEP_RATIO) };
123
+ }
124
+ //# sourceMappingURL=measure-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measure-host.js","sourceRoot":"","sources":["../src/measure-host.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,13 @@
21
21
  * mildly hazardous thing to start by accident — a plugin can and does crash its host — so it
22
22
  * is gated behind `--run` (or `LV2_MEASURE_RUN=1`), exactly as `benchmark.py` gates itself.
23
23
  * `--dry-run` prints the plan and probes nothing.
24
+ *
25
+ * ## The hosting pass
26
+ *
27
+ * `stability`, `rtSafety` and `features` are measured by the native measurer (`native/lv2-measure.c`,
28
+ * `lv2_measure`), run once per plugin under the interposer, in its own process so a crash is a
29
+ * reading and never the run's end. Its lines are the hosting sweep's, read by `sweep-jsonl.ts`.
30
+ * The plugins are the scan's, or exactly the `--plugins` named, which needs no scan.
24
31
  */
25
32
  import type { MeasurementDocument } from "./format.js";
26
33
  import type { MeasurementHost, LatencyMethod } from "./format.js";
@@ -41,6 +48,8 @@ export interface MeasureOptions {
41
48
  readonly dimensions: readonly MeasurementDimension[];
42
49
  /** An existing prober scan to reuse instead of scanning. */
43
50
  readonly scanPath?: string;
51
+ /** The plugins the hosting pass measures, instead of every plugin the scan finds. */
52
+ readonly plugins?: readonly string[];
44
53
  /** Where intermediates are written. */
45
54
  readonly workDir: string;
46
55
  /** Also sweep latency-bearing controls to find parameter-dependent latency. */
@@ -59,11 +68,15 @@ export interface MeasureOptions {
59
68
  }
60
69
  /** One subprocess the pipeline runs, and what it leaves behind. */
61
70
  export interface PipelineStep {
62
- /** Stable id: `scan` / `latency-declared` / `latency-measured` / `cost`. */
71
+ /** Stable id: `scan` / `latency-declared` / `latency-measured` / `cost` / `hosting`. */
63
72
  readonly id: string;
64
73
  readonly command: string;
65
74
  readonly args: readonly string[];
66
- /** The catalog JSON this step writes — the next step's input. */
75
+ /** Run once per plugin, the plugin's URI before `args` (the hosting pass). */
76
+ readonly perPlugin?: boolean;
77
+ /** Set in the step's environment, over the caller's. */
78
+ readonly env?: Readonly<Record<string, string>>;
79
+ /** The catalog JSON this step writes — the next step's input; the hosting pass's JSONL. */
67
80
  readonly produces: string;
68
81
  /** The dimension this step measures, when it measures one. */
69
82
  readonly dimension?: MeasurementDimension;
@@ -71,8 +84,10 @@ export interface PipelineStep {
71
84
  /** The full plan: the steps, and where the run's artefacts land. */
72
85
  export interface Pipeline {
73
86
  readonly steps: readonly PipelineStep[];
74
- /** The catalog JSON carrying every annotation once the last step has run. */
75
- readonly finalCatalog: string;
87
+ /** The catalog JSON carrying every annotation once the last step has run; absent when nothing is scanned. */
88
+ readonly finalCatalog?: string;
89
+ /** The scan the hosting pass takes its plugins from, when `--plugins` does not name them. */
90
+ readonly hostingScan?: string;
76
91
  /** Where the cost pass writes its machine provenance, when cost is measured. */
77
92
  readonly costProvenance?: string;
78
93
  }
@@ -84,7 +99,28 @@ export interface Pipeline {
84
99
  * ends with one file carrying both — which is also why `finalCatalog` is a property of the
85
100
  * pipeline rather than a fixed name.
86
101
  */
87
- export declare function buildPipeline(options: MeasureOptions): Pipeline;
102
+ export declare function buildPipeline(options: MeasureOptions, native?: HostingTools): Pipeline;
103
+ /** The native measurer and the interposer it runs under, as located for this run. */
104
+ export interface HostingTools {
105
+ readonly tool: string;
106
+ readonly interposer: string;
107
+ }
108
+ /** The plugin URIs of a scan (a flat array of descriptors), in its order, each once. */
109
+ export declare function urisFromScan(scan: unknown): string[];
110
+ /** How one run of the native measurer ended. `signal` is a death, `timedOut` the run killed for its time. */
111
+ export interface HostingRunResult {
112
+ readonly status: number | null;
113
+ readonly signalNumber?: number;
114
+ readonly timedOut?: boolean;
115
+ readonly stdout: string;
116
+ }
117
+ /**
118
+ * One plugin's run of the native measurer as the hosting sweep's JSONL line: the LAST line of its
119
+ * stdout that is a JSON object (a plugin may print its own banner first), with the exit status
120
+ * beside it, a death written as 128 + its signal and a timeout as 124. A run that printed no line
121
+ * is `crashed`, its exit kept: what that exit means is the reader's (`sweep-jsonl.ts`) to say.
122
+ */
123
+ export declare function hostingLine(uri: string, run: HostingRunResult): Record<string, unknown>;
88
124
  /** A parsed command line, or the reason it could not be parsed. */
89
125
  export type ArgParseResult = {
90
126
  readonly ok: true;
@@ -93,6 +129,8 @@ export type ArgParseResult = {
93
129
  readonly ok: false;
94
130
  readonly error: string;
95
131
  };
132
+ /** What `--dimensions` takes: the prober's, and the hosting pass's. */
133
+ export declare const MEASURED_DIMENSIONS: readonly MeasurementDimension[];
96
134
  /**
97
135
  * Parse `lv2-measure`'s command line.
98
136
  *
@@ -143,8 +181,10 @@ export declare function advanceProgress(state: ProgressState, event: ProbeProgre
143
181
  /** Everything {@link assembleDocument} needs beyond the probe output. */
144
182
  export interface AssemblyInput {
145
183
  readonly options: MeasureOptions;
146
- /** The final catalog JSON, already parsed. */
147
- readonly catalog: unknown;
184
+ /** The final catalog JSON, already parsed. Absent when the run measured no prober dimension. */
185
+ readonly catalog?: unknown;
186
+ /** The hosting pass's lines ({@link hostingLine}), one per plugin. Absent when it did not run. */
187
+ readonly hosting?: readonly unknown[];
148
188
  /** The cost pass's provenance JSON, already parsed. Absent on a latency-only run. */
149
189
  readonly costProvenance?: unknown;
150
190
  /** Host facts, for a run whose provenance the cost pass did not write. */
@@ -23,12 +23,22 @@
23
23
  * mildly hazardous thing to start by accident — a plugin can and does crash its host — so it
24
24
  * is gated behind `--run` (or `LV2_MEASURE_RUN=1`), exactly as `benchmark.py` gates itself.
25
25
  * `--dry-run` prints the plan and probes nothing.
26
+ *
27
+ * ## The hosting pass
28
+ *
29
+ * `stability`, `rtSafety` and `features` are measured by the native measurer (`native/lv2-measure.c`,
30
+ * `lv2_measure`), run once per plugin under the interposer, in its own process so a crash is a
31
+ * reading and never the run's end. Its lines are the hosting sweep's, read by `sweep-jsonl.ts`.
32
+ * The plugins are the scan's, or exactly the `--plugins` named, which needs no scan.
26
33
  */
27
34
  import { join } from "node:path";
28
35
  import { buildMeasurementDocument } from "./format.js";
29
36
  import { measuredPluginsFromProbeOutput } from "./probe-json.js";
30
37
  import { buildRun, costMethodFromProbeProvenance, hostFromProbeProvenance } from "./provenance.js";
31
- import { PROBED_DIMENSIONS } from "./vocabulary.js";
38
+ import { measuredPluginsFromSweep } from "./sweep-jsonl.js";
39
+ import { isRecord, nonEmptyString } from "./guards.js";
40
+ import { HOSTING_PASS_DIMENSIONS, PROBED_DIMENSIONS } from "./vocabulary.js";
41
+ import { LV2_HOSTING_BLOCK_FRAMES, LV2_HOSTING_LIFECYCLES, LV2_HOSTING_REPEATS } from "../qualify-declarations.js";
32
42
  /** Name and version this tool stamps into every document it writes. */
33
43
  export const TOOL_NAME = "lv2-measure";
34
44
  /**
@@ -45,12 +55,16 @@ export const TOOL_VERSION = "0.1.0";
45
55
  * ends with one file carrying both — which is also why `finalCatalog` is a property of the
46
56
  * pipeline rather than a fixed name.
47
57
  */
48
- export function buildPipeline(options) {
58
+ export function buildPipeline(options, native) {
49
59
  const steps = [];
50
60
  const benchmark = join(options.toolDir, "benchmark.py");
51
61
  const rates = [...options.rates].sort((a, b) => a - b).join(",");
62
+ const probed = options.dimensions.some((d) => PROBED_DIMENSIONS.includes(d));
63
+ const hosting = options.dimensions.some((d) => HOSTING_PASS_DIMENSIONS.includes(d));
64
+ if (hosting && native === undefined)
65
+ throw new Error("the hosting pass needs the native measurer and the interposer");
52
66
  let current = options.scanPath;
53
- if (current === undefined) {
67
+ if (current === undefined && (probed || options.plugins === undefined)) {
54
68
  current = join(options.workDir, "scan.json");
55
69
  steps.push({
56
70
  id: "scan",
@@ -59,7 +73,8 @@ export function buildPipeline(options) {
59
73
  produces: current,
60
74
  });
61
75
  }
62
- if (options.dimensions.includes("latency")) {
76
+ // a prober dimension always has a scan: --plugins is refused beside one
77
+ if (options.dimensions.includes("latency") && current !== undefined) {
63
78
  // Declared first: the measured pass sizes its capture window from this figure and
64
79
  // computes declaredMismatch against it. Reversing the two silently degrades both.
65
80
  const declared = join(options.workDir, "latency-declared.json");
@@ -92,7 +107,7 @@ export function buildPipeline(options) {
92
107
  current = measured;
93
108
  }
94
109
  let costProvenance;
95
- if (options.dimensions.includes("cost")) {
110
+ if (options.dimensions.includes("cost") && current !== undefined) {
96
111
  costProvenance = join(options.workDir, "cost-provenance.json");
97
112
  const cost = join(options.workDir, "cost.json");
98
113
  steps.push({
@@ -117,12 +132,62 @@ export function buildPipeline(options) {
117
132
  });
118
133
  current = cost;
119
134
  }
135
+ if (hosting && native !== undefined) {
136
+ steps.push({
137
+ id: "hosting",
138
+ command: native.tool,
139
+ args: [
140
+ String(Math.max(...options.rates)),
141
+ String(LV2_HOSTING_BLOCK_FRAMES),
142
+ String(LV2_HOSTING_LIFECYCLES),
143
+ String(LV2_HOSTING_REPEATS),
144
+ ],
145
+ perPlugin: true,
146
+ env: { LD_PRELOAD: native.interposer, OMX_STIM: "noise" },
147
+ produces: join(options.workDir, "hosting.jsonl"),
148
+ });
149
+ }
120
150
  return {
121
151
  steps,
122
- finalCatalog: current,
152
+ ...(probed && current !== undefined ? { finalCatalog: current } : {}),
153
+ ...(hosting && options.plugins === undefined && current !== undefined ? { hostingScan: current } : {}),
123
154
  ...(costProvenance === undefined ? {} : { costProvenance }),
124
155
  };
125
156
  }
157
+ /** The plugin URIs of a scan (a flat array of descriptors), in its order, each once. */
158
+ export function urisFromScan(scan) {
159
+ if (!Array.isArray(scan))
160
+ return [];
161
+ const uris = scan.flatMap((entry) => {
162
+ const uri = isRecord(entry) ? nonEmptyString(entry.uri) : undefined;
163
+ return uri === undefined ? [] : [uri];
164
+ });
165
+ return [...new Set(uris)];
166
+ }
167
+ /**
168
+ * One plugin's run of the native measurer as the hosting sweep's JSONL line: the LAST line of its
169
+ * stdout that is a JSON object (a plugin may print its own banner first), with the exit status
170
+ * beside it, a death written as 128 + its signal and a timeout as 124. A run that printed no line
171
+ * is `crashed`, its exit kept: what that exit means is the reader's (`sweep-jsonl.ts`) to say.
172
+ */
173
+ export function hostingLine(uri, run) {
174
+ const exit = run.timedOut === true ? 124 : run.signalNumber !== undefined ? 128 + run.signalNumber : (run.status ?? 1);
175
+ const last = run.stdout
176
+ .split("\n")
177
+ .filter((line) => line.startsWith("{"))
178
+ .pop();
179
+ if (last !== undefined) {
180
+ try {
181
+ const row = JSON.parse(last);
182
+ if (isRecord(row))
183
+ return { ...row, exit };
184
+ }
185
+ catch {
186
+ return { uri, exit, parseError: true };
187
+ }
188
+ }
189
+ return { uri, exit, crashed: true };
190
+ }
126
191
  function parseRates(text) {
127
192
  const rates = text
128
193
  .split(",")
@@ -130,9 +195,11 @@ function parseRates(text) {
130
195
  .filter((rate) => Number.isFinite(rate) && rate > 0);
131
196
  return rates.length > 0 ? [...new Set(rates)].sort((a, b) => a - b) : undefined;
132
197
  }
198
+ /** What `--dimensions` takes: the prober's, and the hosting pass's. */
199
+ export const MEASURED_DIMENSIONS = [...PROBED_DIMENSIONS, ...HOSTING_PASS_DIMENSIONS];
133
200
  function parseDimensions(text) {
134
201
  const wanted = text.split(",").map((part) => part.trim());
135
- const dimensions = PROBED_DIMENSIONS.filter((d) => wanted.includes(d));
202
+ const dimensions = MEASURED_DIMENSIONS.filter((d) => wanted.includes(d));
136
203
  return dimensions.length === wanted.filter((w) => w.length > 0).length && dimensions.length > 0
137
204
  ? [...dimensions]
138
205
  : undefined;
@@ -149,6 +216,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
149
216
  let rates;
150
217
  let dimensions = PROBED_DIMENSIONS;
151
218
  let scanPath;
219
+ let plugins;
152
220
  let workDir = defaults.workDir;
153
221
  let sweep = false;
154
222
  let costCpu;
@@ -183,7 +251,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
183
251
  const value = next();
184
252
  const parsed = value === undefined ? undefined : parseDimensions(value);
185
253
  if (parsed === undefined) {
186
- return { ok: false, error: `--dimensions accepts ${PROBED_DIMENSIONS.join(",")}` };
254
+ return { ok: false, error: `--dimensions accepts ${MEASURED_DIMENSIONS.join(",")}` };
187
255
  }
188
256
  dimensions = parsed;
189
257
  break;
@@ -195,6 +263,14 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
195
263
  scanPath = value;
196
264
  break;
197
265
  }
266
+ case "--plugins": {
267
+ const value = next();
268
+ const uris = value === undefined ? [] : [...new Set(value.split(",").map((u) => u.trim()).filter((u) => u !== ""))];
269
+ if (uris.length === 0)
270
+ return { ok: false, error: "--plugins needs a comma-separated list of plugin URIs" };
271
+ plugins = uris;
272
+ break;
273
+ }
198
274
  case "--work-dir": {
199
275
  const value = next();
200
276
  if (value === undefined)
@@ -250,6 +326,12 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
250
326
  error: "--rates is required: a measurement with no stated rate is not a measurement",
251
327
  };
252
328
  }
329
+ if (plugins !== undefined && dimensions.some((d) => PROBED_DIMENSIONS.includes(d))) {
330
+ return {
331
+ ok: false,
332
+ error: `--plugins names the hosting pass's plugins; ${PROBED_DIMENSIONS.join(" and ")} measure every plugin the scan finds`,
333
+ };
334
+ }
253
335
  return {
254
336
  ok: true,
255
337
  options: {
@@ -263,6 +345,7 @@ export function parseMeasureArgs(argv, env = {}, defaults) {
263
345
  dryRun,
264
346
  ...(outPath === undefined ? {} : { outPath }),
265
347
  ...(scanPath === undefined ? {} : { scanPath }),
348
+ ...(plugins === undefined ? {} : { plugins }),
266
349
  ...(costCpu === undefined ? {} : { costCpu }),
267
350
  ...(label === undefined ? {} : { label }),
268
351
  },
@@ -331,7 +414,10 @@ export const DEFAULT_LATENCY_BLOCK_FRAMES = 512;
331
414
  * no cost pass do the caller's collected facts stand in.
332
415
  */
333
416
  export function assembleDocument(input) {
334
- const plugins = measuredPluginsFromProbeOutput(input.catalog, input.options.dimensions);
417
+ const probed = input.options.dimensions.filter((d) => PROBED_DIMENSIONS.includes(d));
418
+ const plugins = probed.length > 0 && input.catalog !== undefined ? measuredPluginsFromProbeOutput(input.catalog, probed) : [];
419
+ if (input.hosting !== undefined)
420
+ mergeHosting(plugins, measuredPluginsFromSweep({ measurements: input.hosting }), input.options.dimensions);
335
421
  const costMethod = costMethodFromProbeProvenance(input.costProvenance);
336
422
  const host = hostFromProbeProvenance(input.costProvenance) ?? input.host;
337
423
  const run = buildRun({
@@ -350,4 +436,26 @@ export function assembleDocument(input) {
350
436
  });
351
437
  return buildMeasurementDocument(run, plugins);
352
438
  }
439
+ /**
440
+ * The hosting pass's plugins folded into the prober's, by URI: each keeps the hosting dimensions the
441
+ * run asked for and the pin, and a plugin only the hosting pass measured joins with its own topology.
442
+ */
443
+ function mergeHosting(plugins, hosted, dimensions) {
444
+ for (const h of hosted) {
445
+ const blocks = {
446
+ ...(dimensions.includes("stability") && h.stability !== undefined ? { stability: h.stability } : {}),
447
+ ...(dimensions.includes("rtSafety") && h.rtSafety !== undefined ? { rtSafety: h.rtSafety } : {}),
448
+ ...(dimensions.includes("features") && h.features !== undefined ? { features: h.features } : {}),
449
+ ...(h.integrity === undefined ? {} : { integrity: h.integrity }),
450
+ };
451
+ const at = plugins.findIndex((p) => p.uri === h.uri);
452
+ if (at < 0) {
453
+ plugins.push({ uri: h.uri, ...(h.version === undefined ? {} : { version: h.version }), topology: h.topology, ...blocks });
454
+ }
455
+ else {
456
+ const p = plugins[at];
457
+ plugins[at] = { ...p, ...(p.version === undefined && h.version !== undefined ? { version: h.version } : {}), ...blocks };
458
+ }
459
+ }
460
+ }
353
461
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/measurement/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/measurement/cli.ts"],"names":[],"mappings":"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"}
@@ -278,6 +278,11 @@ export interface SoakAtRate {
278
278
  /** The process died at this rate. Every other field is then absent. */
279
279
  readonly died?: boolean;
280
280
  readonly instantiated?: boolean;
281
+ /** The SUPERVISOR stopped the render at its wall-clock limit: a fact about the harness, never a
282
+ * failure of the plugin (and never `died`). */
283
+ readonly timedOut?: boolean;
284
+ /** The wall-clock limit that cut it, in seconds. */
285
+ readonly timeoutSeconds?: number;
281
286
  readonly seconds?: number;
282
287
  readonly blockFrames?: number;
283
288
  readonly windows?: number;
@@ -428,6 +428,8 @@ export function readSoakAtRate(value) {
428
428
  return {
429
429
  ...optional("died", booleanValue(value.died)),
430
430
  ...optional("instantiated", booleanValue(value.instantiated)),
431
+ ...optional("timedOut", booleanValue(value.timedOut)),
432
+ ...optional("timeoutSeconds", finiteNumber(value.timeoutSeconds)),
431
433
  ...optional("seconds", finiteNumber(value.seconds)),
432
434
  ...optional("blockFrames", positiveNumber(value.blockFrames)),
433
435
  ...optional("windows", finiteNumber(value.windows)),