@agent-teams/engineering-foundation 1.5.1 → 1.6.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 (65) hide show
  1. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.d.ts +2 -0
  2. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.d.ts.map +1 -0
  3. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.js +16 -0
  4. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.js.map +1 -0
  5. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.d.ts +44 -0
  6. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.d.ts.map +1 -0
  7. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.js +402 -0
  8. package/dist/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.js.map +1 -0
  9. package/dist/capabilities/quality-gate-runner/module.d.ts +1 -0
  10. package/dist/capabilities/quality-gate-runner/module.d.ts.map +1 -1
  11. package/dist/capabilities/quality-gate-runner/module.js +1 -0
  12. package/dist/capabilities/quality-gate-runner/module.js.map +1 -1
  13. package/dist/features/quality-coverage/adapters/configuration.d.ts +1 -1
  14. package/dist/features/quality-coverage/adapters/configuration.d.ts.map +1 -1
  15. package/dist/features/quality-coverage/adapters/configuration.js +8 -1
  16. package/dist/features/quality-coverage/adapters/configuration.js.map +1 -1
  17. package/dist/features/quality-coverage/adapters/consumer-execution.d.ts +11 -1
  18. package/dist/features/quality-coverage/adapters/consumer-execution.d.ts.map +1 -1
  19. package/dist/features/quality-coverage/adapters/consumer-execution.js +134 -2
  20. package/dist/features/quality-coverage/adapters/consumer-execution.js.map +1 -1
  21. package/dist/features/quality-coverage/adapters/oxlint-session.d.ts.map +1 -1
  22. package/dist/features/quality-coverage/adapters/oxlint-session.js +1 -0
  23. package/dist/features/quality-coverage/adapters/oxlint-session.js.map +1 -1
  24. package/dist/features/quality-coverage/adapters/profile-input.d.ts.map +1 -1
  25. package/dist/features/quality-coverage/adapters/profile-input.js +1 -0
  26. package/dist/features/quality-coverage/adapters/profile-input.js.map +1 -1
  27. package/dist/features/quality-coverage/api.d.ts +1 -1
  28. package/dist/features/quality-coverage/api.d.ts.map +1 -1
  29. package/dist/features/quality-coverage/application/check-quality-coverage.d.ts.map +1 -1
  30. package/dist/features/quality-coverage/application/check-quality-coverage.js +4 -1
  31. package/dist/features/quality-coverage/application/check-quality-coverage.js.map +1 -1
  32. package/dist/features/quality-coverage/application/model.d.ts +9 -0
  33. package/dist/features/quality-coverage/application/model.d.ts.map +1 -1
  34. package/dist/features/quality-coverage/application/profile.d.ts +1 -0
  35. package/dist/features/quality-coverage/application/profile.d.ts.map +1 -1
  36. package/dist/features/quality-coverage/application/rules.d.ts +1 -0
  37. package/dist/features/quality-coverage/application/rules.d.ts.map +1 -1
  38. package/dist/features/quality-coverage/application/rules.js +2 -1
  39. package/dist/features/quality-coverage/application/rules.js.map +1 -1
  40. package/dist/features/quality-coverage/application/source-coverage.js +1 -1
  41. package/dist/features/quality-coverage/application/source-coverage.js.map +1 -1
  42. package/dist/features/quality-coverage/schemas.d.ts +1 -1
  43. package/dist/features/quality-coverage/schemas.d.ts.map +1 -1
  44. package/dist/features/quality-coverage/schemas.js +1 -1
  45. package/dist/features/quality-coverage/schemas.js.map +1 -1
  46. package/dist/node-test-cli.d.ts +3 -0
  47. package/dist/node-test-cli.d.ts.map +1 -0
  48. package/dist/node-test-cli.js +4 -0
  49. package/dist/node-test-cli.js.map +1 -0
  50. package/dist/scaffolding/adapters/inbound/authority-scaffold-receipt.js.map +1 -1
  51. package/dist/scaffolding/adapters/node/foundation-scaffold-envelope.d.ts.map +1 -1
  52. package/dist/scaffolding/adapters/node/foundation-scaffold-envelope.js +21 -2
  53. package/dist/scaffolding/adapters/node/foundation-scaffold-envelope.js.map +1 -1
  54. package/dist/scaffolding/adapters/node/legacy-scaffolding-transaction-validation.d.ts.map +1 -1
  55. package/dist/scaffolding/adapters/node/legacy-scaffolding-transaction-validation.js +7 -3
  56. package/dist/scaffolding/adapters/node/legacy-scaffolding-transaction-validation.js.map +1 -1
  57. package/dist/scaffolding/adapters/node/scaffold-transaction-status.d.ts.map +1 -1
  58. package/dist/scaffolding/adapters/node/scaffold-transaction-status.js +2 -2
  59. package/dist/scaffolding/adapters/node/scaffold-transaction-status.js.map +1 -1
  60. package/dist/schema-catalog.d.ts +1 -1
  61. package/dist/schema-catalog.d.ts.map +1 -1
  62. package/dist/schema-ids.d.ts +1 -1
  63. package/dist/schema-ids.d.ts.map +1 -1
  64. package/package.json +6 -4
  65. package/schemas/quality-source-coverage/v2.schema.json +125 -0
@@ -0,0 +1,2 @@
1
+ export declare function runProcessMandatoryNodeTests(): Promise<void>;
2
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.ts"],"names":[],"mappings":"AAGA,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAWlE"}
@@ -0,0 +1,16 @@
1
+ import { resolve } from "node:path";
2
+ import { runNodeTestExecution } from "./runner.js";
3
+ export async function runProcessMandatoryNodeTests() {
4
+ try {
5
+ const args = process.argv.slice(2);
6
+ if (args.length < 4 || args[0] !== '--contract' || args[2] !== '--') {
7
+ throw new Error('Usage: agent-teams-node-test --contract <relative JSON path> -- <selected entry files...>');
8
+ }
9
+ await runNodeTestExecution({ root: resolve('.'), contractPath: args[1] ?? '', files: args.slice(3) });
10
+ }
11
+ catch (error) {
12
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
13
+ process.exitCode = 1;
14
+ }
15
+ }
16
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { run } from "node:test";
2
+ type Identity = {
3
+ file: string;
4
+ names: string[];
5
+ kind: "suite" | "test";
6
+ };
7
+ type Exception = Identity & {
8
+ status: "omitted" | "skipped" | "todo";
9
+ reason: string;
10
+ applicability: {
11
+ platforms: string[];
12
+ };
13
+ };
14
+ type Event = {
15
+ type: string;
16
+ data?: Record<string, unknown>;
17
+ };
18
+ type Selected = {
19
+ absolute: string;
20
+ file: string;
21
+ };
22
+ export declare function validateNodeTestContract(input: unknown): {
23
+ required: Map<string, Identity>;
24
+ exceptions: Map<string, Exception>;
25
+ };
26
+ export declare function evaluateNodeTestEvents(events: Event[], contract: unknown, selectedFiles: Selected[], platform?: NodeJS.Platform): {
27
+ protectedCount: number;
28
+ observedCount: number;
29
+ selectedFileCount: number;
30
+ };
31
+ export declare function assertSupportedNodeTestRuntime(version?: string): void;
32
+ export declare function runNodeTestExecution({ root, files, contractPath, runOptions, output }: {
33
+ root?: string;
34
+ files: string[];
35
+ contractPath: string;
36
+ runOptions?: NonNullable<Parameters<typeof run>[0]>;
37
+ output?: NodeJS.WritableStream;
38
+ }): Promise<{
39
+ protectedCount: number;
40
+ observedCount: number;
41
+ selectedFileCount: number;
42
+ }>;
43
+ export {};
44
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,CAAC;AAC1E,KAAK,SAAS,GAAG,QAAQ,GAAG;IAAE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IACnF,aAAa,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAC3C,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAC9D,KAAK,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA2EnD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GACrD;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAAE,CAoBxE;AAoMD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,QAAQ,kBAAmB,GAC/H;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAe7E;AAED,wBAAgB,8BAA8B,CAAC,OAAO,SAAwB,GAAG,IAAI,CAMpF;AAED,wBAAsB,oBAAoB,CAAC,EAAE,IAAoB,EAAE,KAAK,EAAE,YAAY,EAAE,UAAe,EAAE,MAAuB,EAAE,EAChI;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC,CAyB3H"}
@@ -0,0 +1,402 @@
1
+ import { constants, lstat, open, realpath } from "node:fs/promises";
2
+ import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { run } from "node:test";
4
+ const platforms = new Set(["darwin", "linux", "win32"]);
5
+ const identityKey = (file, names) => JSON.stringify([file, names]);
6
+ function fail(message) { throw new Error(`Node test execution contract: ${message}`); }
7
+ function fileSnapshot(stat) {
8
+ return [stat.dev, stat.ino, stat.mode, stat.size, stat.mtimeNs, stat.ctimeNs].join(":");
9
+ }
10
+ async function readContractFile(path) {
11
+ // Keep the verified inode open while reading. NOFOLLOW blocks a final
12
+ // symlink on POSIX; NONBLOCK prevents a FIFO from hanging before fstat.
13
+ const flags = process.platform === "win32" ? 0 : constants.O_NOFOLLOW | constants.O_NONBLOCK;
14
+ const handle = await open(path, constants.O_RDONLY | flags).catch((error) => {
15
+ if (record(error) && error.code === "ELOOP") {
16
+ fail("contract must be a real regular file");
17
+ }
18
+ throw error;
19
+ });
20
+ try {
21
+ const opened = await handle.stat({ bigint: true });
22
+ if (!opened.isFile() ||
23
+ await realpath(path) !== path || fileSnapshot(await lstat(path, { bigint: true })) !== fileSnapshot(opened)) {
24
+ fail("contract must be a real regular file");
25
+ }
26
+ const content = await handle.readFile("utf8");
27
+ if (fileSnapshot(await handle.stat({ bigint: true })) !== fileSnapshot(opened) ||
28
+ await realpath(path) !== path || fileSnapshot(await lstat(path, { bigint: true })) !== fileSnapshot(opened)) {
29
+ fail("contract changed while reading");
30
+ }
31
+ return content;
32
+ }
33
+ finally {
34
+ await handle.close();
35
+ }
36
+ }
37
+ function record(value) {
38
+ return value !== null && typeof value === "object" && !Array.isArray(value);
39
+ }
40
+ function exactKeys(value, fields) {
41
+ return record(value) && Object.keys(value).toSorted().join("\0") === fields.toSorted().join("\0");
42
+ }
43
+ function identity(value, label) {
44
+ if (!exactKeys(value, ["file", "names", "kind"])) {
45
+ fail(`${label} has invalid fields`);
46
+ }
47
+ const item = value;
48
+ if (typeof item.file !== "string" || item.file.length === 0 || item.file.includes("\\") ||
49
+ item.file.startsWith("/") || item.file.includes("\0") || item.file !== item.file.normalize("NFC") ||
50
+ item.file.split("/").some((part) => part === "" || part === "." || part === ".." || part.includes(":"))) {
51
+ fail(`${label}.file must be a normalized relative entry path`);
52
+ }
53
+ if (!Array.isArray(item.names) || item.names.length === 0 ||
54
+ item.names.some((name) => typeof name !== "string" || name.length === 0 || name.includes("\0"))) {
55
+ fail(`${label}.names must contain full nonempty ancestry`);
56
+ }
57
+ if (item.kind !== "suite" && item.kind !== "test") {
58
+ fail(`${label}.kind must be suite or test`);
59
+ }
60
+ return item;
61
+ }
62
+ function checkedException(raw, index, required) {
63
+ if (!exactKeys(raw, ["file", "names", "kind", "status", "reason", "applicability"])) {
64
+ fail(`exceptions[${index}] has invalid fields`);
65
+ }
66
+ const item = raw;
67
+ const checked = identity({ file: item.file, names: item.names, kind: item.kind }, `exceptions[${index}]`);
68
+ const key = identityKey(checked.file, checked.names);
69
+ if (required.get(key)?.kind !== checked.kind) {
70
+ fail(`ambiguous exception ${key}`);
71
+ }
72
+ if (!["omitted", "skipped", "todo"].includes(item.status) ||
73
+ typeof item.reason !== "string" || item.reason.trim().length < 12 ||
74
+ !exactKeys(item.applicability, ["platforms"]) || !Array.isArray(item.applicability.platforms) ||
75
+ item.applicability.platforms.length === 0 || item.applicability.platforms.length >= platforms.size ||
76
+ new Set(item.applicability.platforms).size !== item.applicability.platforms.length ||
77
+ item.applicability.platforms.some((platform) => !platforms.has(platform))) {
78
+ fail(`exception ${key} needs exact status, reviewed reason, and platform subset`);
79
+ }
80
+ return item;
81
+ }
82
+ export function validateNodeTestContract(input) {
83
+ if (!exactKeys(input, ["schemaVersion", "required", "exceptions"])) {
84
+ fail("invalid contract fields");
85
+ }
86
+ const data = input;
87
+ if (data.schemaVersion !== 1 || !Array.isArray(data.required) || data.required.length === 0 ||
88
+ !Array.isArray(data.exceptions)) {
89
+ fail("expected version 1 and a nonempty mandatory inventory");
90
+ }
91
+ const required = new Map();
92
+ for (const [index, raw] of data.required.entries()) {
93
+ const item = identity(raw, `required[${index}]`);
94
+ const key = identityKey(item.file, item.names);
95
+ if (required.has(key)) {
96
+ fail(`duplicate required identity ${key}`);
97
+ }
98
+ required.set(key, item);
99
+ }
100
+ const exceptions = new Map();
101
+ for (const [index, raw] of data.exceptions.entries()) {
102
+ const item = checkedException(raw, index, required);
103
+ const key = identityKey(item.file, item.names);
104
+ if (exceptions.has(key)) {
105
+ fail(`ambiguous exception ${key}`);
106
+ }
107
+ exceptions.set(key, item);
108
+ }
109
+ return { required, exceptions };
110
+ }
111
+ async function selectFiles(root, files) {
112
+ if (!Array.isArray(files) || files.length === 0) {
113
+ fail("selected files must be nonempty");
114
+ }
115
+ const selected = [];
116
+ const seen = new Set();
117
+ for (const path of files) {
118
+ if (typeof path !== "string" || path.length === 0) {
119
+ fail("selected file must be a path");
120
+ }
121
+ const absolute = resolve(root, path);
122
+ const file = relative(root, absolute).split(sep).join("/");
123
+ if (!file || file.startsWith("../") || isAbsolute(file) || file.includes("\\") ||
124
+ file !== file.normalize("NFC") || seen.has(file)) {
125
+ fail(`invalid selected file ${path}`);
126
+ }
127
+ seen.add(file);
128
+ if (!(await lstat(absolute)).isFile() || await realpath(absolute) !== absolute) {
129
+ fail(`selected file is not a real entry file: ${file}`);
130
+ }
131
+ selected.push({ absolute, file });
132
+ }
133
+ return selected;
134
+ }
135
+ function checkEvent(data, label) {
136
+ if (typeof data.entryFile !== "string" || !Number.isSafeInteger(data.testId) || data.testId < 1 ||
137
+ !Number.isSafeInteger(data.parentId) || data.parentId < 0 ||
138
+ typeof data.name !== "string" || data.name.length === 0) {
139
+ fail(`malformed ${label} event`);
140
+ }
141
+ }
142
+ function directiveActive(data, name) {
143
+ if (data === undefined || !Object.hasOwn(data, name)) {
144
+ return false;
145
+ }
146
+ const value = data[name];
147
+ if (typeof value === "string") {
148
+ return true;
149
+ }
150
+ if (typeof value === "boolean") {
151
+ return value;
152
+ }
153
+ fail(`malformed ${name} directive`);
154
+ }
155
+ function checkDirectives(data) {
156
+ const skipped = directiveActive(data, "skip");
157
+ const todo = directiveActive(data, "todo");
158
+ if (directiveActive(data, "expectFailure")) {
159
+ fail("expected failure cannot qualify as passing test execution");
160
+ }
161
+ if (skipped && todo) {
162
+ fail("conflicting skip and todo directives");
163
+ }
164
+ }
165
+ function collectSummary(data, evidence) {
166
+ if (data.entryFile === undefined) {
167
+ if (evidence.finalSummary !== undefined || typeof data.success !== "boolean") {
168
+ fail("duplicate or malformed final summary");
169
+ }
170
+ evidence.finalSummary = data.success;
171
+ return;
172
+ }
173
+ if (typeof data.entryFile !== "string" || !evidence.selected.has(data.entryFile) ||
174
+ evidence.summaries.has(data.entryFile) || typeof data.success !== "boolean") {
175
+ fail("malformed, duplicate, or foreign file summary");
176
+ }
177
+ evidence.summaries.set(data.entryFile, data.success);
178
+ }
179
+ function collectResult(event, data, evidence) {
180
+ checkEvent(data, event.type);
181
+ if (!evidence.selected.has(data.entryFile)) {
182
+ fail("event belongs to an unselected file");
183
+ }
184
+ const key = `${String(data.entryFile)}\0${String(data.testId)}`;
185
+ if (event.type === "test:enqueue") {
186
+ if (evidence.entries.has(key) || (data.type !== "test" && data.type !== "suite")) {
187
+ fail("duplicate or malformed enqueue");
188
+ }
189
+ evidence.entries.set(key, { file: data.entryFile, name: data.name,
190
+ kind: data.type, id: data.testId, parentId: data.parentId, enqueue: data });
191
+ return;
192
+ }
193
+ const entry = evidence.entries.get(key);
194
+ if (entry === undefined) {
195
+ fail("result lacks matching registration");
196
+ }
197
+ if (entry.name !== data.name || entry.parentId !== data.parentId) {
198
+ fail("result does not match registration");
199
+ }
200
+ if (event.type === "test:complete") {
201
+ if (entry.complete || !record(data.details) || data.details.type !== entry.kind ||
202
+ typeof data.details.passed !== "boolean") {
203
+ fail("duplicate or malformed completion");
204
+ }
205
+ entry.complete = data;
206
+ return;
207
+ }
208
+ if (entry.result || !record(data.details) || data.details.type !== entry.kind) {
209
+ fail("duplicate or malformed result");
210
+ }
211
+ entry.result = event;
212
+ }
213
+ function collectEvent(event, evidence) {
214
+ const data = event.data;
215
+ if (record(data)) {
216
+ checkDirectives(data);
217
+ }
218
+ if (event.type === "test:summary") {
219
+ if (!record(data)) {
220
+ fail("malformed summary");
221
+ }
222
+ if (directiveActive(data, "skip") || directiveActive(data, "todo")) {
223
+ fail("directive outside a test identity");
224
+ }
225
+ collectSummary(data, evidence);
226
+ return;
227
+ }
228
+ if (!["test:enqueue", "test:complete", "test:pass", "test:fail"].includes(event.type)) {
229
+ if (record(data) && (directiveActive(data, "skip") || directiveActive(data, "todo"))) {
230
+ fail("directive outside a test identity");
231
+ }
232
+ return;
233
+ }
234
+ if (!record(data)) {
235
+ fail(`malformed ${event.type} event`);
236
+ }
237
+ if (data.entryFile === undefined) {
238
+ // The Node runner's outer file wrapper is not a test identity.
239
+ if (typeof data.file !== "string" || !evidence.selected.has(data.file) ||
240
+ data.name !== data.file || data.parentId !== 0) {
241
+ fail(`unattributed ${event.type} event`);
242
+ }
243
+ if (directiveActive(data, "skip") || directiveActive(data, "todo")) {
244
+ fail("directive outside a test identity");
245
+ }
246
+ if (event.type === "test:fail") {
247
+ fail(`failed entry file: ${data.file}`);
248
+ }
249
+ return;
250
+ }
251
+ collectResult(event, data, evidence);
252
+ }
253
+ function fullNames(entry, entries) {
254
+ const names = [entry.name];
255
+ const visited = new Set([entry.id]);
256
+ let parentId = entry.parentId;
257
+ while (parentId !== 0) {
258
+ if (visited.has(parentId)) {
259
+ fail("cyclic ancestry");
260
+ }
261
+ visited.add(parentId);
262
+ const parent = entries.get(`${entry.file}\0${parentId}`);
263
+ if (parent === undefined) {
264
+ fail("missing test or suite ancestry");
265
+ }
266
+ names.unshift(parent.name);
267
+ parentId = parent.parentId;
268
+ }
269
+ return names;
270
+ }
271
+ function observedEntries(entries) {
272
+ const observed = new Map();
273
+ for (const entry of entries.values()) {
274
+ if (!entry.complete || !entry.result) {
275
+ fail("registered identity lacks completion and result");
276
+ }
277
+ const key = identityKey(entry.file, fullNames(entry, entries));
278
+ if (observed.has(key)) {
279
+ fail(`ambiguous duplicate identity ${key}`);
280
+ }
281
+ observed.set(key, entry);
282
+ if (entry.result.type === "test:fail" || entry.complete.details.passed !== true) {
283
+ fail(`failed test execution: ${key}`);
284
+ }
285
+ outcomeOf(entry, entry.kind);
286
+ }
287
+ return observed;
288
+ }
289
+ function outcomeOf(entry, kind) {
290
+ if (entry === undefined) {
291
+ return "omitted";
292
+ }
293
+ if (entry.kind !== kind) {
294
+ return "wrong-kind";
295
+ }
296
+ const skipped = directiveActive(entry.enqueue, "skip") ||
297
+ directiveActive(entry.result?.data, "skip") || directiveActive(entry.complete, "skip");
298
+ const todo = directiveActive(entry.enqueue, "todo") ||
299
+ directiveActive(entry.result?.data, "todo") || directiveActive(entry.complete, "todo");
300
+ if (skipped && todo) {
301
+ fail("conflicting skip and todo directives");
302
+ }
303
+ if (skipped) {
304
+ return "skipped";
305
+ }
306
+ if (todo) {
307
+ return "todo";
308
+ }
309
+ return "passed";
310
+ }
311
+ function requireExecutedAncestors(item, absolute, observed, key) {
312
+ for (let length = 1; length < item.names.length; length++) {
313
+ const ancestor = observed.get(identityKey(absolute, item.names.slice(0, length)));
314
+ if (ancestor && outcomeOf(ancestor, ancestor.kind) !== "passed") {
315
+ fail(`required identity has an unexecuted ancestor: ${key}`);
316
+ }
317
+ }
318
+ }
319
+ function countProtected(required, exceptions, selectedFiles, observed, platform) {
320
+ let count = 0;
321
+ const failures = [];
322
+ for (const [key, item] of required) {
323
+ const absolute = selectedFiles.find((file) => file.file === item.file)?.absolute;
324
+ if (absolute === undefined) {
325
+ continue;
326
+ }
327
+ count++;
328
+ requireExecutedAncestors(item, absolute, observed, key);
329
+ const outcome = outcomeOf(observed.get(identityKey(absolute, item.names)), item.kind);
330
+ if (outcome === "passed") {
331
+ continue;
332
+ }
333
+ const exception = exceptions.get(key);
334
+ if (exception?.status === outcome && exception.applicability.platforms.includes(platform)) {
335
+ continue;
336
+ }
337
+ failures.push(`${key}: ${outcome}`);
338
+ }
339
+ if (count === 0) {
340
+ fail("selection contains no mandatory identities");
341
+ }
342
+ if (failures.length > 0) {
343
+ fail(`required execution failed: ${failures.join("; ")}`);
344
+ }
345
+ return count;
346
+ }
347
+ export function evaluateNodeTestEvents(events, contract, selectedFiles, platform = process.platform) {
348
+ const { required, exceptions } = validateNodeTestContract(contract);
349
+ const selected = new Set(selectedFiles.map((item) => item.absolute));
350
+ if (selected.size !== selectedFiles.length || selected.size === 0) {
351
+ fail("invalid selected file evidence");
352
+ }
353
+ const evidence = { selected, entries: new Map(), summaries: new Map() };
354
+ for (const event of events) {
355
+ collectEvent(event, evidence);
356
+ }
357
+ if (evidence.finalSummary === undefined || evidence.summaries.size !== selected.size) {
358
+ fail("missing final or file summary");
359
+ }
360
+ const observed = observedEntries(evidence.entries);
361
+ const protectedCount = countProtected(required, exceptions, selectedFiles, observed, platform);
362
+ if (!evidence.finalSummary || [...evidence.summaries.values()].some((success) => !success)) {
363
+ fail("test summary reports unsuccessful execution");
364
+ }
365
+ return { protectedCount, observedCount: observed.size, selectedFileCount: selected.size };
366
+ }
367
+ export function assertSupportedNodeTestRuntime(version = process.versions.node) {
368
+ const [major, minor, patch] = version.split(".").map(Number);
369
+ if (major !== 24 || minor === undefined || !Number.isSafeInteger(minor) || minor < 21 ||
370
+ patch === undefined || !Number.isSafeInteger(patch) || patch < 0) {
371
+ fail("requires Node >=24.21.0 <25");
372
+ }
373
+ }
374
+ export async function runNodeTestExecution({ root = process.cwd(), files, contractPath, runOptions = {}, output = process.stdout }) {
375
+ assertSupportedNodeTestRuntime();
376
+ // Canonicalize a root alias (for example macOS /var -> /private/var) before
377
+ // checking entry files. Individual entry-file symlinks remain forbidden.
378
+ const absoluteRoot = await realpath(resolve(root));
379
+ const selected = await selectFiles(absoluteRoot, files);
380
+ if (typeof contractPath !== "string" || contractPath.length === 0 || isAbsolute(contractPath) ||
381
+ contractPath.includes("\\") || contractPath.split("/").some((part) => part === "" || part === "." || part === "..")) {
382
+ fail("contract path must be a normalized relative file");
383
+ }
384
+ const absoluteContract = resolve(absoluteRoot, contractPath);
385
+ const contract = JSON.parse(await readContractFile(absoluteContract));
386
+ const { required } = validateNodeTestContract(contract);
387
+ if (!selected.some((file) => [...required.values()].some((item) => item.file === file.file))) {
388
+ fail("selection contains no mandatory identities");
389
+ }
390
+ const events = [];
391
+ for await (const event of run({ ...runOptions, cwd: absoluteRoot, files: selected.map((file) => file.absolute), concurrency: 1 })) {
392
+ const observed = event;
393
+ events.push(observed);
394
+ if (observed.type === "test:fail") {
395
+ output.write(`FAIL ${String(observed.data?.name)}\n`);
396
+ }
397
+ }
398
+ const result = evaluateNodeTestEvents(events, contract, selected);
399
+ output.write(`Mandatory Node tests: ${result.protectedCount} required identities completed or exactly excepted\n`);
400
+ return result;
401
+ }
402
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../../src/capabilities/quality-gate-runner/adapters/inbound/node-test-execution/runner.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export { QUALITY_GATE_RUNNER_RULES_BY_ID };
5
5
  export declare function createQualityGateRunnerCapability(input: {
6
6
  readonly assertSchema: QualityGateConfigurationDependencies["assertSchema"];
7
7
  }): CapabilityDefinition;
8
+ export { runProcessMandatoryNodeTests } from "./adapters/inbound/node-test-execution/command.js";
8
9
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/capabilities/quality-gate-runner/module.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAOzE,OAAO,EAAyB,KAAK,oCAAoC,EAAE,MAAM,8DAA8D,CAAC;AAGhJ,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAE3C,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,QAAQ,CAAC,YAAY,EAAE,oCAAoC,CAAC,cAAc,CAAC,CAAC;CAC7E,GAAG,oBAAoB,CAmCvB"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/capabilities/quality-gate-runner/module.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAOzE,OAAO,EAAyB,KAAK,oCAAoC,EAAE,MAAM,8DAA8D,CAAC;AAGhJ,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAE3C,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,QAAQ,CAAC,YAAY,EAAE,oCAAoC,CAAC,cAAc,CAAC,CAAC;CAC7E,GAAG,oBAAoB,CAmCvB;AAED,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC"}
@@ -36,4 +36,5 @@ export function createQualityGateRunnerCapability(input) {
36
36
  }
37
37
  });
38
38
  }
39
+ export { runProcessMandatoryNodeTests } from "./adapters/inbound/node-test-execution/command.js";
39
40
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/capabilities/quality-gate-runner/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAGjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,4EAA4E,CAAC;AAClI,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EACL,gCAAgC,EAChC,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAA6C,MAAM,8DAA8D,CAAC;AAChJ,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAE3C,MAAM,UAAU,iCAAiC,CAAC,KAEjD;IACC,MAAM,MAAM,GAAG,IAAI,oCAAoC,CAAC,wBAAwB,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,aAAa;QACjB,mBAAmB,EAAE,gCAAgC;QACrD,KAAK,CAAC,GAAG,CAAC,UAAgC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,EAClE,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,MAAM,CAClB,CAAC;gBACF,OAAO,gBAAgB,CAAC;oBACtB,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,WAAW,EAAE,MAAM,wBAAwB,CACzC;wBACE,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,MAAM;wBACN,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;qBAC1E,EACD,MAAM,CACP;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,uBAAuB,CAAC;oBAC7B,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,KAAK;oBACL,KAAK,EAAE,+BAA+B;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/capabilities/quality-gate-runner/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAGjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,oCAAoC,EAAE,MAAM,4EAA4E,CAAC;AAClI,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wDAAwD,CAAC;AAClG,OAAO,EACL,gCAAgC,EAChC,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAA6C,MAAM,8DAA8D,CAAC;AAChJ,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAEhF,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAE3C,MAAM,UAAU,iCAAiC,CAAC,KAEjD;IACC,MAAM,MAAM,GAAG,IAAI,oCAAoC,CAAC,wBAAwB,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,aAAa;QACjB,mBAAmB,EAAE,gCAAgC;QACrD,KAAK,CAAC,GAAG,CAAC,UAAgC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,EAClE,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,MAAM,CAClB,CAAC;gBACF,OAAO,gBAAgB,CAAC;oBACtB,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,WAAW,EAAE,MAAM,wBAAwB,CACzC;wBACE,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,MAAM;wBACN,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;qBAC1E,EACD,MAAM,CACP;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,uBAAuB,CAAC;oBAC7B,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,KAAK;oBACL,KAAK,EAAE,+BAA+B;iBACvC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import type { QualityConfigurationReader } from "./consumer-observations.js";
2
- export declare function createQualityConfigurationReader(read: QualityConfigurationReader["read"], assertSchema: (id: "quality-source-coverage/v1", value: unknown, phase: string) => Promise<void>): QualityConfigurationReader;
2
+ export declare function createQualityConfigurationReader(read: QualityConfigurationReader["read"], assertSchema: (id: "quality-source-coverage/v1" | "quality-source-coverage/v2", value: unknown, phase: string) => Promise<void>): QualityConfigurationReader;
3
3
  //# sourceMappingURL=configuration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,EACxC,YAAY,EAAE,CAAC,EAAE,EAAE,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC/F,0BAA0B,CAE5B"}
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,0BAA0B,CAAC,MAAM,CAAC,EACxC,YAAY,EAAE,CAAC,EAAE,EAAE,4BAA4B,GAAG,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC9H,0BAA0B,CAS5B"}
@@ -1,4 +1,11 @@
1
1
  export function createQualityConfigurationReader(read, assertSchema) {
2
- return { read, assertProfile: (value) => assertSchema("quality-source-coverage/v1", value, "quality-profile") };
2
+ return {
3
+ read,
4
+ assertProfile: (value) => {
5
+ const version = typeof value === "object" && value !== null && !Array.isArray(value)
6
+ ? value["schemaVersion"] : undefined;
7
+ return assertSchema(version === 2 ? "quality-source-coverage/v2" : "quality-source-coverage/v1", value, "quality-profile");
8
+ }
9
+ };
3
10
  }
4
11
  //# sourceMappingURL=configuration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/configuration.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gCAAgC,CAC9C,IAAwC,EACxC,YAAgG;IAEhG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,4BAA4B,EAAE,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;AAClH,CAAC"}
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/configuration.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gCAAgC,CAC9C,IAAwC,EACxC,YAA+H;IAE/H,OAAO;QACL,IAAI;QACJ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAClF,CAAC,CAAE,KAAiC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,OAAO,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,4BAA4B,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC7H,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type ManagedProcessExecutor, type QualityFileReader, type QualityObservationPorts, type QualityToolProvider } from "../api.js";
1
+ import { type ManagedProcessExecutor, type QualityFileReader, type QualityObservationPorts, type QualityToolProvider, type ExplicitUnknownFinding } from "../api.js";
2
2
  import type { QualityConfigurationReader } from "./consumer-observations.js";
3
3
  /** Bind one invocation to consumer-local tools and the module-owned compiler projects. */
4
4
  export declare function createQualityToolProvider(input: {
@@ -9,4 +9,14 @@ export declare function createQualityToolProvider(input: {
9
9
  readonly nodeExecutable: string;
10
10
  readonly environment: Readonly<Record<string, string | undefined>>;
11
11
  }): QualityToolProvider;
12
+ type Finding = ExplicitUnknownFinding;
13
+ /** OXC objects end here. Only normalized findings enter application policy. */
14
+ export declare function inspectExplicitUnknown(input: {
15
+ readonly consumerRoot: string;
16
+ readonly paths: readonly string[];
17
+ readonly admissionValue?: unknown;
18
+ readonly read: QualityFileReader;
19
+ readonly signal?: AbortSignal;
20
+ }): Promise<readonly Finding[]>;
21
+ export {};
12
22
  //# sourceMappingURL=consumer-execution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consumer-execution.d.ts","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/consumer-execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EACnD,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EACvD,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAK7E,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACpE,GAAG,mBAAmB,CA+BtB"}
1
+ {"version":3,"file":"consumer-execution.d.ts","sourceRoot":"","sources":["../../../../src/features/quality-coverage/adapters/consumer-execution.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EACnD,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EACpF,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAK7E,0FAA0F;AAC1F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CACpE,GAAG,mBAAmB,CA6CtB;AAED,KAAK,OAAO,GAAG,sBAAsB,CAAC;AAiFtC,+EAA+E;AAC/E,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,GAAG,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CA2B9B"}