@deftai/directive 0.61.2 → 0.63.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 (102) hide show
  1. package/dist/{branch-parity.d.ts → branch-fixtures.d.ts} +1 -3
  2. package/dist/{branch-parity.js → branch-fixtures.js} +3 -110
  3. package/dist/dispatch.d.ts +1 -1
  4. package/dist/dispatch.js +4 -1
  5. package/dist/framework-check-updates.d.ts +10 -0
  6. package/dist/framework-check-updates.js +68 -0
  7. package/dist/install-cli/coverage-map.js +3 -2
  8. package/dist/orchestration-cli/coverage-map.js +1 -1
  9. package/dist/{policy-parity.d.ts → policy-fixtures.d.ts} +1 -3
  10. package/dist/{policy-parity.js → policy-fixtures.js} +4 -100
  11. package/dist/{release-e2e-parity.d.ts → release-e2e-fixtures.d.ts} +1 -3
  12. package/dist/release-e2e-fixtures.js +38 -0
  13. package/dist/{story-ready-parity.d.ts → story-ready-fixtures.d.ts} +1 -3
  14. package/dist/{story-ready-parity.js → story-ready-fixtures.js} +4 -121
  15. package/dist/{triage-aux-a-parity.d.ts → triage-aux-a-fixtures.d.ts} +1 -3
  16. package/dist/{triage-aux-a-parity.js → triage-aux-a-fixtures.js} +3 -73
  17. package/dist/{triage-aux-b-parity.d.ts → triage-aux-b-fixtures.d.ts} +1 -3
  18. package/dist/triage-aux-b-fixtures.js +167 -0
  19. package/dist/{triage-bootstrap-parity.d.ts → triage-bootstrap-fixtures.d.ts} +1 -3
  20. package/dist/{triage-bootstrap-parity.js → triage-bootstrap-fixtures.js} +4 -91
  21. package/dist/{triage-classify-parity.d.ts → triage-classify-fixtures.d.ts} +1 -3
  22. package/dist/{triage-classify-parity.js → triage-classify-fixtures.js} +4 -94
  23. package/dist/{triage-queue-parity.d.ts → triage-queue-fixtures.d.ts} +1 -3
  24. package/dist/{triage-queue-parity.js → triage-queue-fixtures.js} +4 -86
  25. package/dist/{triage-scope-parity.d.ts → triage-scope-fixtures.d.ts} +1 -3
  26. package/dist/{triage-scope-parity.js → triage-scope-fixtures.js} +4 -91
  27. package/dist/umbrella-current-shape.d.ts +9 -0
  28. package/dist/umbrella-current-shape.js +56 -0
  29. package/dist/{vbrief-preflight-parity.d.ts → vbrief-preflight-fixtures.d.ts} +1 -3
  30. package/dist/vbrief-preflight-fixtures.js +79 -0
  31. package/dist/{wip-cap-parity.d.ts → wip-cap-fixtures.d.ts} +1 -3
  32. package/dist/{wip-cap-parity.js → wip-cap-fixtures.js} +4 -91
  33. package/package.json +4 -15
  34. package/dist/cache-parity.d.ts +0 -36
  35. package/dist/cache-parity.js +0 -165
  36. package/dist/codebase-parity.d.ts +0 -31
  37. package/dist/codebase-parity.js +0 -303
  38. package/dist/doc-cli-parity.d.ts +0 -29
  39. package/dist/doc-cli-parity.js +0 -159
  40. package/dist/doctor-parity.d.ts +0 -42
  41. package/dist/doctor-parity.js +0 -157
  42. package/dist/intake-parity.d.ts +0 -30
  43. package/dist/intake-parity.js +0 -203
  44. package/dist/lifecycle-packs-parity.d.ts +0 -30
  45. package/dist/lifecycle-packs-parity.js +0 -377
  46. package/dist/orchestration-parity.d.ts +0 -38
  47. package/dist/orchestration-parity.js +0 -364
  48. package/dist/parity.d.ts +0 -36
  49. package/dist/parity.js +0 -176
  50. package/dist/platform-parity.d.ts +0 -26
  51. package/dist/platform-parity.js +0 -309
  52. package/dist/pr-closing-keywords-parity.d.ts +0 -45
  53. package/dist/pr-closing-keywords-parity.js +0 -259
  54. package/dist/pr-merge-readiness-parity.d.ts +0 -44
  55. package/dist/pr-merge-readiness-parity.js +0 -296
  56. package/dist/pr-monitor-parity.d.ts +0 -44
  57. package/dist/pr-monitor-parity.js +0 -283
  58. package/dist/pr-protected-issues-parity.d.ts +0 -41
  59. package/dist/pr-protected-issues-parity.js +0 -220
  60. package/dist/pr-wait-mergeable-parity.d.ts +0 -45
  61. package/dist/pr-wait-mergeable-parity.js +0 -340
  62. package/dist/release-e2e-parity.js +0 -114
  63. package/dist/release-parity.d.ts +0 -40
  64. package/dist/release-parity.js +0 -226
  65. package/dist/release-publish-parity.d.ts +0 -36
  66. package/dist/release-publish-parity.js +0 -138
  67. package/dist/release-rollback-parity.d.ts +0 -37
  68. package/dist/release-rollback-parity.js +0 -161
  69. package/dist/render-parity.d.ts +0 -36
  70. package/dist/render-parity.js +0 -385
  71. package/dist/scm-parity.d.ts +0 -39
  72. package/dist/scm-parity.js +0 -181
  73. package/dist/scope-lifecycle-parity.d.ts +0 -35
  74. package/dist/scope-lifecycle-parity.js +0 -177
  75. package/dist/session-parity.d.ts +0 -39
  76. package/dist/session-parity.js +0 -262
  77. package/dist/slice-parity.d.ts +0 -36
  78. package/dist/slice-parity.js +0 -304
  79. package/dist/swarm-parity.d.ts +0 -28
  80. package/dist/swarm-parity.js +0 -327
  81. package/dist/triage-actions-parity.d.ts +0 -36
  82. package/dist/triage-actions-parity.js +0 -357
  83. package/dist/triage-aux-b-parity.js +0 -308
  84. package/dist/triage-summary-parity.d.ts +0 -50
  85. package/dist/triage-summary-parity.js +0 -306
  86. package/dist/validate-content-parity.d.ts +0 -33
  87. package/dist/validate-content-parity.js +0 -356
  88. package/dist/vbrief-activate-parity.d.ts +0 -39
  89. package/dist/vbrief-activate-parity.js +0 -216
  90. package/dist/vbrief-build-parity.d.ts +0 -28
  91. package/dist/vbrief-build-parity.js +0 -399
  92. package/dist/vbrief-preflight-parity.js +0 -163
  93. package/dist/vbrief-reconcile-parity.d.ts +0 -23
  94. package/dist/vbrief-reconcile-parity.js +0 -609
  95. package/dist/vbrief-validate-parity.d.ts +0 -27
  96. package/dist/vbrief-validate-parity.js +0 -122
  97. package/dist/vbrief-validation-parity.d.ts +0 -28
  98. package/dist/vbrief-validation-parity.js +0 -645
  99. package/dist/verify-env-parity.d.ts +0 -28
  100. package/dist/verify-env-parity.js +0 -272
  101. package/dist/verify-source-parity.d.ts +0 -26
  102. package/dist/verify-source-parity.js +0 -178
@@ -1,377 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Golden-output parity harness (#1787 s2): runs BOTH the frozen Python oracles
4
- * (`packs_slice`, `quarantine_ext`, `_lifecycle_hygiene`, `_event_detect`) and
5
- * the ported TS lifecycle/packs modules over shared fixtures, cache-off.
6
- *
7
- * Exit codes: 0 parity / 1 divergence / 2 harness setup error.
8
- */
9
- import { execFileSync } from "node:child_process";
10
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
11
- import { tmpdir } from "node:os";
12
- import { dirname, join, resolve } from "node:path";
13
- import { fileURLToPath } from "node:url";
14
- import { eventDetect, lifecycleHygiene } from "@deftai/directive-core/lifecycle";
15
- import { packsSlice, quarantineExt } from "@deftai/directive-core/packs";
16
- const NOW_ISO = "2026-06-01T12:00:00.000Z";
17
- function runCapture(cmd, args, cwd, env = {}) {
18
- const merged = {
19
- ...process.env,
20
- DEFT_CACHE_DISABLE: "1",
21
- PYTHONUTF8: "1",
22
- ...env,
23
- };
24
- for (const key of Object.keys(merged)) {
25
- if (merged[key] === undefined)
26
- delete merged[key];
27
- }
28
- try {
29
- const stdout = execFileSync(cmd, args, {
30
- cwd,
31
- encoding: "utf8",
32
- env: merged,
33
- stdio: ["ignore", "pipe", "pipe"],
34
- });
35
- return { status: 0, stdout, stderr: "" };
36
- }
37
- catch (err) {
38
- const e = err;
39
- return {
40
- status: typeof e.status === "number" ? e.status : 2,
41
- stdout: typeof e.stdout === "string" ? e.stdout : "",
42
- stderr: typeof e.stderr === "string" ? e.stderr : "",
43
- };
44
- }
45
- }
46
- function resolveDeftRoot() {
47
- if (process.env.DEFT_ROOT !== undefined && process.env.DEFT_ROOT.length > 0) {
48
- return resolve(process.env.DEFT_ROOT);
49
- }
50
- return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
51
- }
52
- function runPythonScript(deftRoot, script) {
53
- return runCapture("uv", ["run", "python", "-c", script], deftRoot);
54
- }
55
- function writeJson(path, data) {
56
- writeFileSync(path, `${JSON.stringify(data)}\n`, { encoding: "utf8" });
57
- }
58
- function makeLifecycle(root) {
59
- for (const folder of ["proposed", "pending", "active", "completed", "cancelled"]) {
60
- mkdirSync(join(root, "vbrief", folder), { recursive: true });
61
- }
62
- }
63
- function writeFixturePack(repo) {
64
- const schema = {
65
- "x-sliceRegistry": {
66
- recent: {
67
- path: "lessons",
68
- filters: ["since"],
69
- description: "Lessons dated on or after --since.",
70
- },
71
- "by-tag": {
72
- path: "lessons",
73
- filters: ["tag"],
74
- description: "Lessons carrying any requested --tag.",
75
- },
76
- },
77
- "x-display": {
78
- heading: "title",
79
- fields: [],
80
- body: "body",
81
- noun: "lessons",
82
- },
83
- };
84
- const source = {
85
- pack: "lessons-pack-0.1",
86
- version: "0.1",
87
- lessons: [
88
- {
89
- id: "old-windows",
90
- title: "Old Windows Lesson (2026-03)",
91
- date: "2026-03",
92
- issue_refs: [],
93
- tags: ["windows", "encoding"],
94
- source: "PR #1",
95
- body: "Body about cp1252.",
96
- },
97
- {
98
- id: "mid-swarm",
99
- title: "Mid Swarm Lesson (2026-05)",
100
- date: "2026-05",
101
- issue_refs: ["#42"],
102
- tags: ["swarm"],
103
- source: null,
104
- body: "Body about a swarm cohort.",
105
- },
106
- ],
107
- };
108
- const packDir = join(repo, "packs", "lessons");
109
- mkdirSync(packDir, { recursive: true });
110
- mkdirSync(join(repo, "vbrief", "schemas"), { recursive: true });
111
- writeJson(join(packDir, "lessons-pack-0.1.json"), source);
112
- writeJson(join(repo, "vbrief", "schemas", "lessons-pack.schema.json"), schema);
113
- }
114
- function writeStrandedEpic(repo) {
115
- makeLifecycle(repo);
116
- const old = "2026-04-01T00:00:00Z";
117
- writeJson(join(repo, "vbrief", "active", "2026-04-01-epic.vbrief.json"), {
118
- vBRIEFInfo: { version: "0.6" },
119
- plan: {
120
- title: "OAuth Epic",
121
- status: "running",
122
- updated: old,
123
- metadata: { kind: "epic" },
124
- references: [
125
- { type: "x-vbrief/plan", uri: "completed/2026-04-01-child-a.vbrief.json" },
126
- { type: "x-vbrief/plan", uri: "active/2026-04-01-child-b.vbrief.json" },
127
- ],
128
- items: [],
129
- },
130
- });
131
- writeJson(join(repo, "vbrief", "completed", "2026-04-01-child-a.vbrief.json"), {
132
- vBRIEFInfo: { version: "0.6" },
133
- plan: { title: "Child A", status: "completed", updated: old, items: [] },
134
- });
135
- writeJson(join(repo, "vbrief", "active", "2026-04-01-child-b.vbrief.json"), {
136
- vBRIEFInfo: { version: "0.6" },
137
- plan: { title: "Child B", status: "running", updated: old, items: [] },
138
- });
139
- writeJson(join(repo, "vbrief", "PROJECT-DEFINITION.vbrief.json"), {
140
- vBRIEFInfo: { version: "0.6" },
141
- plan: {
142
- title: "Project",
143
- status: "running",
144
- items: [],
145
- policy: {
146
- capacityAllocation: {
147
- epicStrandedDays: 30,
148
- epicStalenessDays: 14,
149
- },
150
- },
151
- },
152
- });
153
- }
154
- function writeAgentsMdStale(_deftRoot, repo) {
155
- writeFileSync(join(repo, "AGENTS.md"), "Read skills/deft-directive-build/SKILL.md for build work.\n", { encoding: "utf8" });
156
- }
157
- const QUARANTINE_FIXTURE = `# Normal section
158
-
159
- ## STEP 1: Do evil
160
-
161
- Follow these instructions.
162
-
163
- ## Benign heading
164
-
165
- Safe content.
166
- `;
167
- export const PARITY_CASES = [
168
- {
169
- name: "packs-list-packs",
170
- setup(_deftRoot, repo) {
171
- writeFixturePack(repo);
172
- },
173
- runPython(deftRoot, repo) {
174
- const script = `import sys
175
- from pathlib import Path
176
- root = Path(${JSON.stringify(deftRoot)})
177
- repo = Path(${JSON.stringify(repo)}).resolve()
178
- sys.path.insert(0, str(root / "scripts"))
179
- import packs_slice
180
- packs_slice.REPO_ROOT = repo
181
- payload = packs_slice.list_packs(repo / "packs", repo / "vbrief" / "schemas")
182
- print(packs_slice.format_list_packs_text(payload), end="")
183
- raise SystemExit(0)`;
184
- const cap = runPythonScript(deftRoot, script);
185
- return { exitCode: cap.status, stdout: cap.stdout, stderr: cap.stderr };
186
- },
187
- runTs(_deftRoot, repo) {
188
- const payload = packsSlice.listPacks(join(repo, "packs"), join(repo, "vbrief", "schemas"), repo);
189
- const stdout = packsSlice.formatListPacksText(payload);
190
- return { exitCode: 0, stdout, stderr: "" };
191
- },
192
- },
193
- {
194
- name: "packs-slice-recent-since",
195
- setup(_deftRoot, repo) {
196
- writeFixturePack(repo);
197
- },
198
- runPython(deftRoot, repo) {
199
- const script = `import sys
200
- from pathlib import Path
201
- root = Path(${JSON.stringify(deftRoot)})
202
- repo = Path(${JSON.stringify(repo)}).resolve()
203
- sys.path.insert(0, str(root / "scripts"))
204
- import packs_slice
205
- packs_slice.REPO_ROOT = repo
206
- packs_slice.PACK_REGISTRY["lessons"] = {
207
- "source": repo / "packs" / "lessons" / "lessons-pack-0.1.json",
208
- "schema": repo / "vbrief" / "schemas" / "lessons-pack.schema.json",
209
- }
210
- source_path = repo / "packs" / "lessons" / "lessons-pack-0.1.json"
211
- schema_path = repo / "vbrief" / "schemas" / "lessons-pack.schema.json"
212
- registry = packs_slice.load_registry(schema_path)
213
- data = packs_slice.load_source(source_path)
214
- result = packs_slice.slice_pack(data["pack"], "recent", registry, data, source_path, since="2026-05")
215
- display = packs_slice.load_display(schema_path)
216
- print(packs_slice.format_slice_text(result, display), end="")
217
- raise SystemExit(0)`;
218
- const cap = runPythonScript(deftRoot, script);
219
- return { exitCode: cap.status, stdout: cap.stdout, stderr: cap.stderr };
220
- },
221
- runTs(_deftRoot, repo) {
222
- const source = join(repo, "packs", "lessons", "lessons-pack-0.1.json");
223
- const schema = join(repo, "vbrief", "schemas", "lessons-pack.schema.json");
224
- const registry = packsSlice.loadRegistry(schema);
225
- const data = packsSlice.loadSource(source);
226
- const result = packsSlice.slicePack(String(data.pack ?? "lessons"), "recent", registry, data, source, { since: "2026-05", repoRoot: repo });
227
- const display = packsSlice.loadDisplay(schema);
228
- return { exitCode: 0, stdout: packsSlice.formatSliceText(result, display), stderr: "" };
229
- },
230
- },
231
- {
232
- name: "quarantine-ext-heading",
233
- runPython(deftRoot) {
234
- const script = `import sys
235
- from pathlib import Path
236
- root = Path(${JSON.stringify(deftRoot)})
237
- sys.path.insert(0, str(root / "scripts"))
238
- import quarantine_ext
239
- text = ${JSON.stringify(QUARANTINE_FIXTURE)}
240
- sys.stdout.write(quarantine_ext.quarantine_body(text))
241
- raise SystemExit(0)`;
242
- const cap = runPythonScript(deftRoot, script);
243
- return { exitCode: cap.status, stdout: cap.stdout, stderr: cap.stderr };
244
- },
245
- runTs() {
246
- const stdout = quarantineExt.quarantineBody(QUARANTINE_FIXTURE);
247
- return { exitCode: 0, stdout, stderr: "" };
248
- },
249
- },
250
- {
251
- name: "lifecycle-stranded-nudge",
252
- setup(_deftRoot, repo) {
253
- writeStrandedEpic(repo);
254
- },
255
- runPython(deftRoot, repo) {
256
- const script = `import sys
257
- from datetime import datetime, UTC
258
- from pathlib import Path
259
- root = Path(${JSON.stringify(deftRoot)})
260
- repo = Path(${JSON.stringify(repo)})
261
- sys.path.insert(0, str(root / "scripts"))
262
- import _lifecycle_hygiene as lifecycle_hygiene
263
- now = datetime.fromisoformat(${JSON.stringify(NOW_ISO)}.replace("Z", "+00:00"))
264
- nudges = lifecycle_hygiene.detect_lifecycle_nudges(repo, now=now)
265
- lines = [n.message for n in nudges if n.kind == "stranded"]
266
- print("\\n".join(lines))
267
- raise SystemExit(0)`;
268
- const cap = runPythonScript(deftRoot, script);
269
- return { exitCode: cap.status, stdout: cap.stdout, stderr: cap.stderr };
270
- },
271
- runTs(_deftRoot, repo) {
272
- const now = new Date(NOW_ISO);
273
- const nudges = lifecycleHygiene.detectLifecycleNudges(repo, { now });
274
- const lines = nudges.filter((n) => n.kind === "stranded").map((n) => n.message);
275
- return { exitCode: 0, stdout: `${lines.join("\n")}\n`, stderr: "" };
276
- },
277
- },
278
- {
279
- name: "event-detect-agents-md-stale",
280
- setup(deftRoot, repo) {
281
- writeAgentsMdStale(deftRoot, repo);
282
- },
283
- runPython(deftRoot, repo) {
284
- const script = `import json, sys
285
- from pathlib import Path
286
- root = Path(${JSON.stringify(deftRoot)})
287
- repo = Path(${JSON.stringify(repo)})
288
- sys.path.insert(0, str(root / "scripts"))
289
- import _event_detect as event_detect
290
- payload = event_detect.detect_agents_md_stale(repo, framework_root=root)
291
- print(json.dumps(payload, sort_keys=True) if payload else "null")
292
- raise SystemExit(0)`;
293
- const cap = runPythonScript(deftRoot, script);
294
- return { exitCode: cap.status, stdout: cap.stdout, stderr: cap.stderr };
295
- },
296
- runTs(deftRoot, repo) {
297
- eventDetect.clearRegistryCache();
298
- const payload = eventDetect.detectAgentsMdStale(repo, { frameworkRoot: deftRoot });
299
- const stdout = payload === null ? "null\n" : `${JSON.stringify(payload, Object.keys(payload).sort())}\n`;
300
- return { exitCode: 0, stdout, stderr: "" };
301
- },
302
- },
303
- ];
304
- export function normalizeOutput(text) {
305
- return text.replace(/\r\n/g, "\n");
306
- }
307
- export function diffCase(python, ts, caseName) {
308
- const pyOut = normalizeOutput(python.stdout);
309
- const tsOut = normalizeOutput(ts.stdout);
310
- const pyErr = normalizeOutput(python.stderr);
311
- const tsErr = normalizeOutput(ts.stderr);
312
- return {
313
- caseName,
314
- exitMismatch: python.exitCode !== ts.exitCode,
315
- stdoutMismatch: pyOut !== tsOut,
316
- stderrMismatch: pyErr !== tsErr,
317
- pythonExit: python.exitCode,
318
- tsExit: ts.exitCode,
319
- };
320
- }
321
- export function runParity() {
322
- const deftRoot = resolveDeftRoot();
323
- const diffs = [];
324
- for (const testCase of PARITY_CASES) {
325
- const pyRepo = mkdtempSync(join(tmpdir(), "deft-lp-parity-py-"));
326
- const tsRepo = mkdtempSync(join(tmpdir(), "deft-lp-parity-ts-"));
327
- try {
328
- if (testCase.setup !== undefined) {
329
- testCase.setup(deftRoot, pyRepo);
330
- testCase.setup(deftRoot, tsRepo);
331
- }
332
- const python = testCase.runPython(deftRoot, pyRepo);
333
- const ts = testCase.runTs(deftRoot, tsRepo);
334
- diffs.push(diffCase(python, ts, testCase.name));
335
- }
336
- finally {
337
- rmSync(pyRepo, { recursive: true, force: true });
338
- rmSync(tsRepo, { recursive: true, force: true });
339
- }
340
- }
341
- const ok = diffs.every((d) => !d.exitMismatch && !d.stdoutMismatch && !d.stderrMismatch);
342
- return { ok, diffs };
343
- }
344
- export function renderReport(result) {
345
- if (result.ok) {
346
- return `lifecycle-packs parity: CLEAN -- Python and TS agree on ${PARITY_CASES.length} case(s).`;
347
- }
348
- const lines = ["lifecycle-packs parity: DIVERGENCE"];
349
- for (const d of result.diffs) {
350
- if (d.exitMismatch || d.stdoutMismatch || d.stderrMismatch) {
351
- lines.push(` case: ${d.caseName}`);
352
- if (d.exitMismatch)
353
- lines.push(` exit: python=${d.pythonExit} ts=${d.tsExit}`);
354
- if (d.stdoutMismatch)
355
- lines.push(" stdout mismatch");
356
- if (d.stderrMismatch)
357
- lines.push(" stderr mismatch");
358
- }
359
- }
360
- return lines.join("\n");
361
- }
362
- if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
363
- try {
364
- const result = runParity();
365
- if (result.ok) {
366
- process.stdout.write(`${renderReport(result)}\n`);
367
- process.exit(0);
368
- }
369
- process.stderr.write(`${renderReport(result)}\n`);
370
- process.exit(1);
371
- }
372
- catch (err) {
373
- process.stderr.write(`lifecycle-packs parity: harness error -- ${String(err)}\n`);
374
- process.exit(2);
375
- }
376
- }
377
- //# sourceMappingURL=lifecycle-packs-parity.js.map
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env node
2
- export interface ScenarioResult {
3
- readonly name: string;
4
- readonly exitCode: number;
5
- readonly stdout: string;
6
- readonly stderr: string;
7
- }
8
- export interface ParityScenario {
9
- readonly name: string;
10
- readonly module: "subagent_monitor" | "probe_session" | "verify_investigation" | "verify_judgment_gates";
11
- readonly argv: readonly string[];
12
- readonly setup?: (root: string) => void;
13
- }
14
- export interface ParityResult {
15
- readonly ok: boolean;
16
- readonly scenarios: Array<{
17
- readonly name: string;
18
- readonly exitMismatch: boolean;
19
- readonly pythonExit: number;
20
- readonly tsExit: number;
21
- readonly stdoutMismatch: boolean;
22
- readonly stderrMismatch: boolean;
23
- readonly pythonStdout: string;
24
- readonly tsStdout: string;
25
- readonly pythonStderr: string;
26
- readonly tsStderr: string;
27
- }>;
28
- }
29
- export declare const PARITY_SCENARIOS: readonly ParityScenario[];
30
- export declare function normaliseHarnessNoise(text: string): string;
31
- export declare function diffParity(python: ScenarioResult, ts: ScenarioResult): {
32
- exitMismatch: boolean;
33
- stdoutMismatch: boolean;
34
- stderrMismatch: boolean;
35
- };
36
- export declare function runParity(): ParityResult;
37
- export declare function renderReport(result: ParityResult): string;
38
- //# sourceMappingURL=orchestration-parity.d.ts.map