@deftai/directive 0.62.0 → 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 (97) 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 +0 -1
  5. package/dist/orchestration-cli/coverage-map.js +1 -1
  6. package/dist/{policy-parity.d.ts → policy-fixtures.d.ts} +1 -3
  7. package/dist/{policy-parity.js → policy-fixtures.js} +4 -100
  8. package/dist/{release-e2e-parity.d.ts → release-e2e-fixtures.d.ts} +1 -3
  9. package/dist/release-e2e-fixtures.js +38 -0
  10. package/dist/{story-ready-parity.d.ts → story-ready-fixtures.d.ts} +1 -3
  11. package/dist/{story-ready-parity.js → story-ready-fixtures.js} +4 -121
  12. package/dist/{triage-aux-a-parity.d.ts → triage-aux-a-fixtures.d.ts} +1 -3
  13. package/dist/{triage-aux-a-parity.js → triage-aux-a-fixtures.js} +3 -73
  14. package/dist/{triage-aux-b-parity.d.ts → triage-aux-b-fixtures.d.ts} +1 -3
  15. package/dist/triage-aux-b-fixtures.js +167 -0
  16. package/dist/{triage-bootstrap-parity.d.ts → triage-bootstrap-fixtures.d.ts} +1 -3
  17. package/dist/{triage-bootstrap-parity.js → triage-bootstrap-fixtures.js} +4 -91
  18. package/dist/{triage-classify-parity.d.ts → triage-classify-fixtures.d.ts} +1 -3
  19. package/dist/{triage-classify-parity.js → triage-classify-fixtures.js} +4 -94
  20. package/dist/{triage-queue-parity.d.ts → triage-queue-fixtures.d.ts} +1 -3
  21. package/dist/{triage-queue-parity.js → triage-queue-fixtures.js} +4 -86
  22. package/dist/{triage-scope-parity.d.ts → triage-scope-fixtures.d.ts} +1 -3
  23. package/dist/{triage-scope-parity.js → triage-scope-fixtures.js} +4 -91
  24. package/dist/{vbrief-preflight-parity.d.ts → vbrief-preflight-fixtures.d.ts} +1 -3
  25. package/dist/vbrief-preflight-fixtures.js +79 -0
  26. package/dist/{wip-cap-parity.d.ts → wip-cap-fixtures.d.ts} +1 -3
  27. package/dist/{wip-cap-parity.js → wip-cap-fixtures.js} +4 -91
  28. package/package.json +4 -15
  29. package/dist/cache-parity.d.ts +0 -36
  30. package/dist/cache-parity.js +0 -165
  31. package/dist/codebase-parity.d.ts +0 -31
  32. package/dist/codebase-parity.js +0 -303
  33. package/dist/doc-cli-parity.d.ts +0 -29
  34. package/dist/doc-cli-parity.js +0 -159
  35. package/dist/doctor-parity.d.ts +0 -42
  36. package/dist/doctor-parity.js +0 -157
  37. package/dist/intake-parity.d.ts +0 -30
  38. package/dist/intake-parity.js +0 -203
  39. package/dist/lifecycle-packs-parity.d.ts +0 -30
  40. package/dist/lifecycle-packs-parity.js +0 -377
  41. package/dist/orchestration-parity.d.ts +0 -38
  42. package/dist/orchestration-parity.js +0 -364
  43. package/dist/parity.d.ts +0 -36
  44. package/dist/parity.js +0 -176
  45. package/dist/platform-parity.d.ts +0 -26
  46. package/dist/platform-parity.js +0 -309
  47. package/dist/pr-closing-keywords-parity.d.ts +0 -45
  48. package/dist/pr-closing-keywords-parity.js +0 -259
  49. package/dist/pr-merge-readiness-parity.d.ts +0 -44
  50. package/dist/pr-merge-readiness-parity.js +0 -296
  51. package/dist/pr-monitor-parity.d.ts +0 -44
  52. package/dist/pr-monitor-parity.js +0 -283
  53. package/dist/pr-protected-issues-parity.d.ts +0 -41
  54. package/dist/pr-protected-issues-parity.js +0 -220
  55. package/dist/pr-wait-mergeable-parity.d.ts +0 -45
  56. package/dist/pr-wait-mergeable-parity.js +0 -340
  57. package/dist/release-e2e-parity.js +0 -114
  58. package/dist/release-parity.d.ts +0 -40
  59. package/dist/release-parity.js +0 -226
  60. package/dist/release-publish-parity.d.ts +0 -36
  61. package/dist/release-publish-parity.js +0 -138
  62. package/dist/release-rollback-parity.d.ts +0 -37
  63. package/dist/release-rollback-parity.js +0 -161
  64. package/dist/render-parity.d.ts +0 -36
  65. package/dist/render-parity.js +0 -385
  66. package/dist/scm-parity.d.ts +0 -39
  67. package/dist/scm-parity.js +0 -181
  68. package/dist/scope-lifecycle-parity.d.ts +0 -35
  69. package/dist/scope-lifecycle-parity.js +0 -177
  70. package/dist/session-parity.d.ts +0 -39
  71. package/dist/session-parity.js +0 -262
  72. package/dist/slice-parity.d.ts +0 -36
  73. package/dist/slice-parity.js +0 -304
  74. package/dist/swarm-parity.d.ts +0 -28
  75. package/dist/swarm-parity.js +0 -327
  76. package/dist/triage-actions-parity.d.ts +0 -36
  77. package/dist/triage-actions-parity.js +0 -357
  78. package/dist/triage-aux-b-parity.js +0 -308
  79. package/dist/triage-summary-parity.d.ts +0 -50
  80. package/dist/triage-summary-parity.js +0 -306
  81. package/dist/validate-content-parity.d.ts +0 -33
  82. package/dist/validate-content-parity.js +0 -356
  83. package/dist/vbrief-activate-parity.d.ts +0 -39
  84. package/dist/vbrief-activate-parity.js +0 -216
  85. package/dist/vbrief-build-parity.d.ts +0 -28
  86. package/dist/vbrief-build-parity.js +0 -399
  87. package/dist/vbrief-preflight-parity.js +0 -163
  88. package/dist/vbrief-reconcile-parity.d.ts +0 -23
  89. package/dist/vbrief-reconcile-parity.js +0 -609
  90. package/dist/vbrief-validate-parity.d.ts +0 -27
  91. package/dist/vbrief-validate-parity.js +0 -122
  92. package/dist/vbrief-validation-parity.d.ts +0 -28
  93. package/dist/vbrief-validation-parity.js +0 -645
  94. package/dist/verify-env-parity.d.ts +0 -28
  95. package/dist/verify-env-parity.js +0 -272
  96. package/dist/verify-source-parity.d.ts +0 -26
  97. 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