@deftai/directive 0.55.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 (261) hide show
  1. package/dist/bin.d.ts +3 -0
  2. package/dist/bin.js +5 -0
  3. package/dist/branch-parity.d.ts +47 -0
  4. package/dist/branch-parity.js +263 -0
  5. package/dist/cache-parity.d.ts +36 -0
  6. package/dist/cache-parity.js +165 -0
  7. package/dist/cache.d.ts +4 -0
  8. package/dist/cache.js +10 -0
  9. package/dist/capacity-backfill.d.ts +3 -0
  10. package/dist/capacity-backfill.js +9 -0
  11. package/dist/capacity-show.d.ts +3 -0
  12. package/dist/capacity-show.js +9 -0
  13. package/dist/check.d.ts +10 -0
  14. package/dist/check.js +60 -0
  15. package/dist/cli-router/index.d.ts +8 -0
  16. package/dist/cli-router/index.js +37 -0
  17. package/dist/cli-router/route-argv.d.ts +32 -0
  18. package/dist/cli-router/route-argv.js +226 -0
  19. package/dist/codebase-default-extractor.d.ts +3 -0
  20. package/dist/codebase-default-extractor.js +9 -0
  21. package/dist/codebase-map-fresh.d.ts +3 -0
  22. package/dist/codebase-map-fresh.js +9 -0
  23. package/dist/codebase-map.d.ts +3 -0
  24. package/dist/codebase-map.js +9 -0
  25. package/dist/codebase-parity.d.ts +30 -0
  26. package/dist/codebase-parity.js +294 -0
  27. package/dist/codebase-projection-registry.d.ts +3 -0
  28. package/dist/codebase-projection-registry.js +9 -0
  29. package/dist/codebase-provider.d.ts +3 -0
  30. package/dist/codebase-provider.js +9 -0
  31. package/dist/content-validate-cli/validate-links.d.ts +11 -0
  32. package/dist/content-validate-cli/validate-links.js +37 -0
  33. package/dist/content-validate-cli/validate-strategy-output.d.ts +13 -0
  34. package/dist/content-validate-cli/validate-strategy-output.js +56 -0
  35. package/dist/content-validate-cli/verify-capacity.d.ts +12 -0
  36. package/dist/content-validate-cli/verify-capacity.js +54 -0
  37. package/dist/dispatch.d.ts +26 -0
  38. package/dist/dispatch.js +569 -0
  39. package/dist/doctor-parity.d.ts +38 -0
  40. package/dist/doctor-parity.js +151 -0
  41. package/dist/doctor.d.ts +3 -0
  42. package/dist/doctor.js +10 -0
  43. package/dist/gates-cli/_helpers.d.ts +18 -0
  44. package/dist/gates-cli/_helpers.js +71 -0
  45. package/dist/index.d.ts +11 -0
  46. package/dist/index.js +15 -0
  47. package/dist/init-cli/constants.d.ts +5 -0
  48. package/dist/init-cli/constants.js +5 -0
  49. package/dist/init-cli/init.d.ts +3 -0
  50. package/dist/init-cli/init.js +11 -0
  51. package/dist/init-cli/resolve-binary.d.ts +34 -0
  52. package/dist/init-cli/resolve-binary.js +78 -0
  53. package/dist/init-cli/run-deft-install.d.ts +23 -0
  54. package/dist/init-cli/run-deft-install.js +71 -0
  55. package/dist/init-cli/update.d.ts +3 -0
  56. package/dist/init-cli/update.js +11 -0
  57. package/dist/install-cli/coverage-map.d.ts +14 -0
  58. package/dist/install-cli/coverage-map.js +111 -0
  59. package/dist/intake-parity.d.ts +30 -0
  60. package/dist/intake-parity.js +203 -0
  61. package/dist/lifecycle-cli/coverage-map.d.ts +16 -0
  62. package/dist/lifecycle-cli/coverage-map.js +254 -0
  63. package/dist/lifecycle-cli/helpers.d.ts +8 -0
  64. package/dist/lifecycle-cli/helpers.js +20 -0
  65. package/dist/lifecycle-packs-parity.d.ts +30 -0
  66. package/dist/lifecycle-packs-parity.js +377 -0
  67. package/dist/orchestration-cli/coverage-map.d.ts +21 -0
  68. package/dist/orchestration-cli/coverage-map.js +225 -0
  69. package/dist/orchestration-cli/helpers.d.ts +11 -0
  70. package/dist/orchestration-cli/helpers.js +35 -0
  71. package/dist/orchestration-parity.d.ts +38 -0
  72. package/dist/orchestration-parity.js +364 -0
  73. package/dist/parity.d.ts +36 -0
  74. package/dist/parity.js +176 -0
  75. package/dist/platform-parity.d.ts +26 -0
  76. package/dist/platform-parity.js +309 -0
  77. package/dist/policy-parity.d.ts +35 -0
  78. package/dist/policy-parity.js +214 -0
  79. package/dist/policy.d.ts +27 -0
  80. package/dist/policy.js +316 -0
  81. package/dist/pr-closing-keywords-parity.d.ts +45 -0
  82. package/dist/pr-closing-keywords-parity.js +259 -0
  83. package/dist/pr-closing-keywords.d.ts +3 -0
  84. package/dist/pr-closing-keywords.js +10 -0
  85. package/dist/pr-merge-readiness-parity.d.ts +44 -0
  86. package/dist/pr-merge-readiness-parity.js +296 -0
  87. package/dist/pr-merge-readiness.d.ts +3 -0
  88. package/dist/pr-merge-readiness.js +10 -0
  89. package/dist/pr-monitor-parity.d.ts +44 -0
  90. package/dist/pr-monitor-parity.js +283 -0
  91. package/dist/pr-monitor.d.ts +3 -0
  92. package/dist/pr-monitor.js +10 -0
  93. package/dist/pr-protected-issues-parity.d.ts +41 -0
  94. package/dist/pr-protected-issues-parity.js +220 -0
  95. package/dist/pr-protected-issues.d.ts +3 -0
  96. package/dist/pr-protected-issues.js +10 -0
  97. package/dist/pr-wait-mergeable-parity.d.ts +45 -0
  98. package/dist/pr-wait-mergeable-parity.js +340 -0
  99. package/dist/pr-wait-mergeable.d.ts +3 -0
  100. package/dist/pr-wait-mergeable.js +10 -0
  101. package/dist/preflight-cache.d.ts +16 -0
  102. package/dist/preflight-cache.js +106 -0
  103. package/dist/preflight-gh.d.ts +12 -0
  104. package/dist/preflight-gh.js +188 -0
  105. package/dist/probe-session.d.ts +3 -0
  106. package/dist/probe-session.js +10 -0
  107. package/dist/release-e2e-parity.d.ts +31 -0
  108. package/dist/release-e2e-parity.js +114 -0
  109. package/dist/release-e2e.d.ts +3 -0
  110. package/dist/release-e2e.js +10 -0
  111. package/dist/release-parity.d.ts +40 -0
  112. package/dist/release-parity.js +223 -0
  113. package/dist/release-publish-parity.d.ts +36 -0
  114. package/dist/release-publish-parity.js +138 -0
  115. package/dist/release-publish.d.ts +3 -0
  116. package/dist/release-publish.js +10 -0
  117. package/dist/release-rollback-parity.d.ts +37 -0
  118. package/dist/release-rollback-parity.js +161 -0
  119. package/dist/release-rollback.d.ts +3 -0
  120. package/dist/release-rollback.js +10 -0
  121. package/dist/release.d.ts +3 -0
  122. package/dist/release.js +10 -0
  123. package/dist/render-cli/deft-ts-runner.d.ts +20 -0
  124. package/dist/render-cli/deft-ts-runner.js +35 -0
  125. package/dist/render-cli/prd-render-cli.d.ts +2 -0
  126. package/dist/render-cli/prd-render-cli.js +7 -0
  127. package/dist/render-cli/project-render-cli.d.ts +2 -0
  128. package/dist/render-cli/project-render-cli.js +6 -0
  129. package/dist/render-cli/spec-render-cli.d.ts +2 -0
  130. package/dist/render-cli/spec-render-cli.js +6 -0
  131. package/dist/render-cli/spec-validate-cli.d.ts +2 -0
  132. package/dist/render-cli/spec-validate-cli.js +6 -0
  133. package/dist/render-parity.d.ts +35 -0
  134. package/dist/render-parity.js +383 -0
  135. package/dist/scm-parity.d.ts +39 -0
  136. package/dist/scm-parity.js +181 -0
  137. package/dist/scope-lifecycle-parity.d.ts +35 -0
  138. package/dist/scope-lifecycle-parity.js +177 -0
  139. package/dist/scope-lifecycle.d.ts +4 -0
  140. package/dist/scope-lifecycle.js +29 -0
  141. package/dist/session-parity.d.ts +39 -0
  142. package/dist/session-parity.js +260 -0
  143. package/dist/slice-parity.d.ts +36 -0
  144. package/dist/slice-parity.js +304 -0
  145. package/dist/slice.d.ts +4 -0
  146. package/dist/slice.js +29 -0
  147. package/dist/story-ready-parity.d.ts +49 -0
  148. package/dist/story-ready-parity.js +254 -0
  149. package/dist/subagent-monitor.d.ts +3 -0
  150. package/dist/subagent-monitor.js +10 -0
  151. package/dist/swarm-parity.d.ts +28 -0
  152. package/dist/swarm-parity.js +326 -0
  153. package/dist/toolchain-check.d.ts +3 -0
  154. package/dist/toolchain-check.js +14 -0
  155. package/dist/triage-actions-parity.d.ts +33 -0
  156. package/dist/triage-actions-parity.js +201 -0
  157. package/dist/triage-actions.d.ts +17 -0
  158. package/dist/triage-actions.js +144 -0
  159. package/dist/triage-aux-a-parity.d.ts +35 -0
  160. package/dist/triage-aux-a-parity.js +172 -0
  161. package/dist/triage-aux-b-parity.d.ts +32 -0
  162. package/dist/triage-aux-b-parity.js +308 -0
  163. package/dist/triage-bootstrap-parity.d.ts +44 -0
  164. package/dist/triage-bootstrap-parity.js +226 -0
  165. package/dist/triage-bootstrap.d.ts +24 -0
  166. package/dist/triage-bootstrap.js +172 -0
  167. package/dist/triage-bulk.d.ts +17 -0
  168. package/dist/triage-bulk.js +154 -0
  169. package/dist/triage-classify-parity.d.ts +40 -0
  170. package/dist/triage-classify-parity.js +227 -0
  171. package/dist/triage-classify.d.ts +13 -0
  172. package/dist/triage-classify.js +76 -0
  173. package/dist/triage-help.d.ts +3 -0
  174. package/dist/triage-help.js +10 -0
  175. package/dist/triage-queue-parity.d.ts +59 -0
  176. package/dist/triage-queue-parity.js +363 -0
  177. package/dist/triage-queue.d.ts +17 -0
  178. package/dist/triage-queue.js +174 -0
  179. package/dist/triage-reconcile.d.ts +11 -0
  180. package/dist/triage-reconcile.js +76 -0
  181. package/dist/triage-refresh.d.ts +7 -0
  182. package/dist/triage-refresh.js +37 -0
  183. package/dist/triage-scope-drift.d.ts +12 -0
  184. package/dist/triage-scope-drift.js +117 -0
  185. package/dist/triage-scope-parity.d.ts +34 -0
  186. package/dist/triage-scope-parity.js +218 -0
  187. package/dist/triage-scope.d.ts +4 -0
  188. package/dist/triage-scope.js +29 -0
  189. package/dist/triage-smoketest.d.ts +3 -0
  190. package/dist/triage-smoketest.js +43 -0
  191. package/dist/triage-subscribe.d.ts +15 -0
  192. package/dist/triage-subscribe.js +157 -0
  193. package/dist/triage-summary-parity.d.ts +50 -0
  194. package/dist/triage-summary-parity.js +306 -0
  195. package/dist/triage-summary.d.ts +14 -0
  196. package/dist/triage-summary.js +77 -0
  197. package/dist/triage-welcome.d.ts +12 -0
  198. package/dist/triage-welcome.js +78 -0
  199. package/dist/ts-check-lane.d.ts +9 -0
  200. package/dist/ts-check-lane.js +49 -0
  201. package/dist/validate-content-parity.d.ts +33 -0
  202. package/dist/validate-content-parity.js +356 -0
  203. package/dist/vbrief-activate-parity.d.ts +39 -0
  204. package/dist/vbrief-activate-parity.js +216 -0
  205. package/dist/vbrief-activate.d.ts +3 -0
  206. package/dist/vbrief-activate.js +7 -0
  207. package/dist/vbrief-build-parity.d.ts +28 -0
  208. package/dist/vbrief-build-parity.js +399 -0
  209. package/dist/vbrief-build.d.ts +3 -0
  210. package/dist/vbrief-build.js +8 -0
  211. package/dist/vbrief-preflight-parity.d.ts +34 -0
  212. package/dist/vbrief-preflight-parity.js +163 -0
  213. package/dist/vbrief-preflight.d.ts +12 -0
  214. package/dist/vbrief-preflight.js +58 -0
  215. package/dist/vbrief-reconcile-parity.d.ts +22 -0
  216. package/dist/vbrief-reconcile-parity.js +600 -0
  217. package/dist/vbrief-reconcile.d.ts +3 -0
  218. package/dist/vbrief-reconcile.js +7 -0
  219. package/dist/vbrief-validate-parity.d.ts +27 -0
  220. package/dist/vbrief-validate-parity.js +122 -0
  221. package/dist/vbrief-validate.d.ts +3 -0
  222. package/dist/vbrief-validate.js +8 -0
  223. package/dist/vbrief-validation-parity.d.ts +28 -0
  224. package/dist/vbrief-validation-parity.js +645 -0
  225. package/dist/vbrief-validation.d.ts +3 -0
  226. package/dist/vbrief-validation.js +8 -0
  227. package/dist/verify-branch.d.ts +14 -0
  228. package/dist/verify-branch.js +81 -0
  229. package/dist/verify-encoding.d.ts +15 -0
  230. package/dist/verify-encoding.js +86 -0
  231. package/dist/verify-env-parity.d.ts +28 -0
  232. package/dist/verify-env-parity.js +272 -0
  233. package/dist/verify-hooks-installed.d.ts +10 -0
  234. package/dist/verify-hooks-installed.js +48 -0
  235. package/dist/verify-investigation.d.ts +3 -0
  236. package/dist/verify-investigation.js +10 -0
  237. package/dist/verify-judgment-gates.d.ts +3 -0
  238. package/dist/verify-judgment-gates.js +10 -0
  239. package/dist/verify-no-task-runtime.d.ts +3 -0
  240. package/dist/verify-no-task-runtime.js +16 -0
  241. package/dist/verify-session-ritual.d.ts +13 -0
  242. package/dist/verify-session-ritual.js +78 -0
  243. package/dist/verify-source-cli/rule-ownership-lint.d.ts +12 -0
  244. package/dist/verify-source-cli/rule-ownership-lint.js +61 -0
  245. package/dist/verify-source-cli/verify-content-manifest.d.ts +12 -0
  246. package/dist/verify-source-cli/verify-content-manifest.js +61 -0
  247. package/dist/verify-source-cli/verify-scm-boundary.d.ts +13 -0
  248. package/dist/verify-source-cli/verify-scm-boundary.js +66 -0
  249. package/dist/verify-source-cli/verify-stubs.d.ts +11 -0
  250. package/dist/verify-source-cli/verify-stubs.js +27 -0
  251. package/dist/verify-source-parity.d.ts +26 -0
  252. package/dist/verify-source-parity.js +178 -0
  253. package/dist/verify-story-ready.d.ts +16 -0
  254. package/dist/verify-story-ready.js +138 -0
  255. package/dist/verify-tools.d.ts +13 -0
  256. package/dist/verify-tools.js +67 -0
  257. package/dist/verify-wip-cap.d.ts +13 -0
  258. package/dist/verify-wip-cap.js +62 -0
  259. package/dist/wip-cap-parity.d.ts +39 -0
  260. package/dist/wip-cap-parity.js +209 -0
  261. package/package.json +50 -0
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ export interface JsonGateOutput {
3
+ readonly exitCode: number;
4
+ readonly ready: boolean;
5
+ readonly vbriefPath: string;
6
+ readonly message: string;
7
+ readonly rawJson: string;
8
+ }
9
+ export interface ParityCaseResult {
10
+ readonly name: string;
11
+ readonly ok: boolean;
12
+ readonly pythonExit: number;
13
+ readonly tsExit: number;
14
+ readonly exitMismatch: boolean;
15
+ readonly messageMismatch: boolean;
16
+ readonly readyMismatch: boolean;
17
+ }
18
+ export interface ParityResult {
19
+ readonly ok: boolean;
20
+ readonly cases: ParityCaseResult[];
21
+ }
22
+ /** Fixture corpus: [label, folder, file content]. */
23
+ export declare const PARITY_FIXTURES: ReadonlyArray<readonly [string, string, string]>;
24
+ /** Parse the structured `--json` stdout payload. */
25
+ export declare function parseJsonOutput(stdout: string, exitCode: number): JsonGateOutput;
26
+ /** Diff two gate JSON outputs for one fixture case. */
27
+ export declare function diffOutputs(name: string, python: JsonGateOutput, ts: JsonGateOutput): ParityCaseResult;
28
+ /** Build temp fixture files; returns map of label -> absolute path. */
29
+ export declare function buildFixtures(root: string): Map<string, string>;
30
+ /** Run both gates against all fixtures and diff them. */
31
+ export declare function runParity(): ParityResult;
32
+ /** Render a human-readable parity report (exported for unit tests). */
33
+ export declare function renderReport(result: ParityResult): string;
34
+ //# sourceMappingURL=vbrief-preflight-parity.d.ts.map
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Golden-output parity harness (#1721): writes temp fixture vBRIEFs, runs BOTH
4
+ * the Python oracle (`scripts/preflight_implementation.py`) and the ported TS
5
+ * gate with session-ritual bypassed, and diffs structured JSON + exit codes.
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
+ /** Fixture corpus: [label, folder, file content]. */
15
+ export const PARITY_FIXTURES = [
16
+ ["active_running", "active", JSON.stringify({ plan: { status: "running" } })],
17
+ ["pending", "pending", JSON.stringify({ plan: { status: "running" } })],
18
+ ["proposed", "proposed", JSON.stringify({ plan: { status: "running" } })],
19
+ ["malformed_json", "active", "{bad json"],
20
+ ["wrong_status", "active", JSON.stringify({ plan: { status: "pending" } })],
21
+ ["missing_plan_status", "active", JSON.stringify({ plan: {} })],
22
+ ];
23
+ /** Parse the structured `--json` stdout payload. */
24
+ export function parseJsonOutput(stdout, exitCode) {
25
+ const trimmed = stdout.trim();
26
+ let payload;
27
+ try {
28
+ payload = JSON.parse(trimmed);
29
+ }
30
+ catch {
31
+ throw new Error(`Expected JSON output but got: ${trimmed.length > 0 ? trimmed : "(empty)"}`);
32
+ }
33
+ return {
34
+ exitCode,
35
+ ready: payload.ready,
36
+ vbriefPath: payload.vbrief_path,
37
+ message: payload.message,
38
+ rawJson: trimmed,
39
+ };
40
+ }
41
+ /** Diff two gate JSON outputs for one fixture case. */
42
+ export function diffOutputs(name, python, ts) {
43
+ const exitMismatch = python.exitCode !== ts.exitCode;
44
+ const readyMismatch = python.ready !== ts.ready;
45
+ const messageMismatch = python.message !== ts.message;
46
+ return {
47
+ name,
48
+ ok: !exitMismatch && !readyMismatch && !messageMismatch,
49
+ pythonExit: python.exitCode,
50
+ tsExit: ts.exitCode,
51
+ exitMismatch,
52
+ readyMismatch,
53
+ messageMismatch,
54
+ };
55
+ }
56
+ function runCapture(cmd, args, cwd, env) {
57
+ try {
58
+ const stdout = execFileSync(cmd, args, {
59
+ cwd,
60
+ encoding: "utf8",
61
+ env: { ...process.env, ...env },
62
+ stdio: ["ignore", "pipe", "pipe"],
63
+ });
64
+ return { status: 0, stdout, stderr: "" };
65
+ }
66
+ catch (err) {
67
+ const e = err;
68
+ return {
69
+ status: typeof e.status === "number" ? e.status : 2,
70
+ stdout: typeof e.stdout === "string" ? e.stdout : "",
71
+ stderr: typeof e.stderr === "string" ? e.stderr : "",
72
+ };
73
+ }
74
+ }
75
+ /** Build temp fixture files; returns map of label -> absolute path. */
76
+ export function buildFixtures(root) {
77
+ const paths = new Map();
78
+ for (const [label, folder, content] of PARITY_FIXTURES) {
79
+ const dir = join(root, folder);
80
+ mkdirSync(dir, { recursive: true });
81
+ const file = join(dir, `${label}.vbrief.json`);
82
+ writeFileSync(file, content, { encoding: "utf8" });
83
+ paths.set(label, file);
84
+ }
85
+ return paths;
86
+ }
87
+ function resolveDeftRoot() {
88
+ if (process.env.DEFT_ROOT !== undefined && process.env.DEFT_ROOT.length > 0) {
89
+ return resolve(process.env.DEFT_ROOT);
90
+ }
91
+ return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
92
+ }
93
+ /** Run both gates against all fixtures and diff them. */
94
+ export function runParity() {
95
+ const deftRoot = resolveDeftRoot();
96
+ const root = mkdtempSync(join(tmpdir(), "deft-vbrief-preflight-parity-"));
97
+ try {
98
+ const fixtures = buildFixtures(root);
99
+ const cases = [];
100
+ for (const [label] of PARITY_FIXTURES) {
101
+ const fixturePath = fixtures.get(label);
102
+ if (fixturePath === undefined) {
103
+ throw new Error(`missing fixture path for ${label}`);
104
+ }
105
+ const py = runCapture("uv", [
106
+ "run",
107
+ "python",
108
+ join(deftRoot, "scripts", "preflight_implementation.py"),
109
+ "--vbrief-path",
110
+ fixturePath,
111
+ "--json",
112
+ ], deftRoot, { DEFT_SESSION_RITUAL_SKIP: "1" });
113
+ const ts = runCapture("node", [
114
+ join(deftRoot, "packages", "cli", "dist", "vbrief-preflight.js"),
115
+ "--vbrief-path",
116
+ fixturePath,
117
+ "--json",
118
+ ], deftRoot);
119
+ cases.push(diffOutputs(label, parseJsonOutput(py.stdout, py.status), parseJsonOutput(ts.stdout, ts.status)));
120
+ }
121
+ return { ok: cases.every((c) => c.ok), cases };
122
+ }
123
+ finally {
124
+ rmSync(root, { recursive: true, force: true });
125
+ }
126
+ }
127
+ /** Render a human-readable parity report (exported for unit tests). */
128
+ export function renderReport(result) {
129
+ if (result.ok) {
130
+ return `vbrief_preflight parity: CLEAN -- Python and TS agree on ${result.cases.length} fixture(s).`;
131
+ }
132
+ const lines = ["vbrief_preflight parity: DIVERGENCE"];
133
+ for (const c of result.cases.filter((x) => !x.ok)) {
134
+ lines.push(` case ${c.name}:`);
135
+ if (c.exitMismatch) {
136
+ lines.push(` exit mismatch: python=${c.pythonExit} ts=${c.tsExit}`);
137
+ }
138
+ if (c.readyMismatch) {
139
+ lines.push(" ready mismatch");
140
+ }
141
+ if (c.messageMismatch) {
142
+ lines.push(" message mismatch");
143
+ }
144
+ }
145
+ return lines.join("\n");
146
+ }
147
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
148
+ try {
149
+ const result = runParity();
150
+ if (result.ok) {
151
+ process.stdout.write(`${renderReport(result)}\n`);
152
+ process.exit(0);
153
+ }
154
+ process.stderr.write(`${renderReport(result)}\n`);
155
+ process.exit(1);
156
+ }
157
+ catch (err) {
158
+ const msg = String(err).replace(/\r?\n/g, " ");
159
+ process.stderr.write(`vbrief_preflight parity: harness error -- ${msg}\n`);
160
+ process.exit(2);
161
+ }
162
+ }
163
+ //# sourceMappingURL=vbrief-preflight-parity.js.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ vbriefPath: string | null;
4
+ emitJson: boolean;
5
+ error?: string;
6
+ }
7
+ /** Parse vbrief-preflight CLI args, mirroring the Python argparse surface (#810). */
8
+ export declare function parseArgs(argv: string[]): ParsedArgs;
9
+ /** Run the gate and return the process exit code (parse errors -> 2). */
10
+ export declare function run(argv: string[]): number;
11
+ export {};
12
+ //# sourceMappingURL=vbrief-preflight.d.ts.map
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { emitJson, evaluate } from "@deftai/directive-core/preflight";
4
+ /** Parse vbrief-preflight CLI args, mirroring the Python argparse surface (#810). */
5
+ export function parseArgs(argv) {
6
+ const parsed = {
7
+ vbriefPath: null,
8
+ emitJson: false,
9
+ };
10
+ for (let i = 0; i < argv.length; i += 1) {
11
+ const arg = argv[i];
12
+ if (arg === "--json") {
13
+ parsed.emitJson = true;
14
+ }
15
+ else if (arg === "--vbrief-path") {
16
+ const value = argv[i + 1];
17
+ if (value === undefined) {
18
+ return { ...parsed, error: "argument --vbrief-path: expected one argument" };
19
+ }
20
+ parsed.vbriefPath = value;
21
+ i += 1;
22
+ }
23
+ else if (arg?.startsWith("--vbrief-path=")) {
24
+ parsed.vbriefPath = arg.slice("--vbrief-path=".length);
25
+ }
26
+ else {
27
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
28
+ }
29
+ }
30
+ if (parsed.vbriefPath === null) {
31
+ return { ...parsed, error: "the following arguments are required: --vbrief-path" };
32
+ }
33
+ return parsed;
34
+ }
35
+ /** Run the gate and return the process exit code (parse errors -> 2). */
36
+ export function run(argv) {
37
+ const args = parseArgs(argv);
38
+ if (args.error !== undefined) {
39
+ process.stderr.write(`preflight_implementation: ${args.error}\n`);
40
+ return 2;
41
+ }
42
+ const vbriefPath = args.vbriefPath;
43
+ const result = evaluate(vbriefPath);
44
+ if (args.emitJson) {
45
+ process.stdout.write(`${emitJson(vbriefPath, result.exitCode, result.message)}\n`);
46
+ }
47
+ else if (result.exitCode === 0) {
48
+ process.stdout.write(`${result.message}\n`);
49
+ }
50
+ else {
51
+ process.stderr.write(`${result.message}\n`);
52
+ }
53
+ return result.exitCode;
54
+ }
55
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
56
+ process.exit(run(process.argv.slice(2)));
57
+ }
58
+ //# sourceMappingURL=vbrief-preflight.js.map
@@ -0,0 +1,22 @@
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 ParityResult {
9
+ readonly ok: boolean;
10
+ readonly scenarios: Array<{
11
+ readonly name: string;
12
+ readonly exitMismatch: boolean;
13
+ readonly pythonExit: number;
14
+ readonly tsExit: number;
15
+ readonly outputMismatch: boolean;
16
+ readonly pythonOutput: string;
17
+ readonly tsOutput: string;
18
+ }>;
19
+ }
20
+ export declare function runParity(): ParityResult;
21
+ export declare function renderReport(result: ParityResult): string;
22
+ //# sourceMappingURL=vbrief-reconcile-parity.d.ts.map