@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.
- package/dist/bin.d.ts +3 -0
- package/dist/bin.js +5 -0
- package/dist/branch-parity.d.ts +47 -0
- package/dist/branch-parity.js +263 -0
- package/dist/cache-parity.d.ts +36 -0
- package/dist/cache-parity.js +165 -0
- package/dist/cache.d.ts +4 -0
- package/dist/cache.js +10 -0
- package/dist/capacity-backfill.d.ts +3 -0
- package/dist/capacity-backfill.js +9 -0
- package/dist/capacity-show.d.ts +3 -0
- package/dist/capacity-show.js +9 -0
- package/dist/check.d.ts +10 -0
- package/dist/check.js +60 -0
- package/dist/cli-router/index.d.ts +8 -0
- package/dist/cli-router/index.js +37 -0
- package/dist/cli-router/route-argv.d.ts +32 -0
- package/dist/cli-router/route-argv.js +226 -0
- package/dist/codebase-default-extractor.d.ts +3 -0
- package/dist/codebase-default-extractor.js +9 -0
- package/dist/codebase-map-fresh.d.ts +3 -0
- package/dist/codebase-map-fresh.js +9 -0
- package/dist/codebase-map.d.ts +3 -0
- package/dist/codebase-map.js +9 -0
- package/dist/codebase-parity.d.ts +30 -0
- package/dist/codebase-parity.js +294 -0
- package/dist/codebase-projection-registry.d.ts +3 -0
- package/dist/codebase-projection-registry.js +9 -0
- package/dist/codebase-provider.d.ts +3 -0
- package/dist/codebase-provider.js +9 -0
- package/dist/content-validate-cli/validate-links.d.ts +11 -0
- package/dist/content-validate-cli/validate-links.js +37 -0
- package/dist/content-validate-cli/validate-strategy-output.d.ts +13 -0
- package/dist/content-validate-cli/validate-strategy-output.js +56 -0
- package/dist/content-validate-cli/verify-capacity.d.ts +12 -0
- package/dist/content-validate-cli/verify-capacity.js +54 -0
- package/dist/dispatch.d.ts +26 -0
- package/dist/dispatch.js +569 -0
- package/dist/doctor-parity.d.ts +38 -0
- package/dist/doctor-parity.js +151 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +10 -0
- package/dist/gates-cli/_helpers.d.ts +18 -0
- package/dist/gates-cli/_helpers.js +71 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +15 -0
- package/dist/init-cli/constants.d.ts +5 -0
- package/dist/init-cli/constants.js +5 -0
- package/dist/init-cli/init.d.ts +3 -0
- package/dist/init-cli/init.js +11 -0
- package/dist/init-cli/resolve-binary.d.ts +34 -0
- package/dist/init-cli/resolve-binary.js +78 -0
- package/dist/init-cli/run-deft-install.d.ts +23 -0
- package/dist/init-cli/run-deft-install.js +71 -0
- package/dist/init-cli/update.d.ts +3 -0
- package/dist/init-cli/update.js +11 -0
- package/dist/install-cli/coverage-map.d.ts +14 -0
- package/dist/install-cli/coverage-map.js +111 -0
- package/dist/intake-parity.d.ts +30 -0
- package/dist/intake-parity.js +203 -0
- package/dist/lifecycle-cli/coverage-map.d.ts +16 -0
- package/dist/lifecycle-cli/coverage-map.js +254 -0
- package/dist/lifecycle-cli/helpers.d.ts +8 -0
- package/dist/lifecycle-cli/helpers.js +20 -0
- package/dist/lifecycle-packs-parity.d.ts +30 -0
- package/dist/lifecycle-packs-parity.js +377 -0
- package/dist/orchestration-cli/coverage-map.d.ts +21 -0
- package/dist/orchestration-cli/coverage-map.js +225 -0
- package/dist/orchestration-cli/helpers.d.ts +11 -0
- package/dist/orchestration-cli/helpers.js +35 -0
- package/dist/orchestration-parity.d.ts +38 -0
- package/dist/orchestration-parity.js +364 -0
- package/dist/parity.d.ts +36 -0
- package/dist/parity.js +176 -0
- package/dist/platform-parity.d.ts +26 -0
- package/dist/platform-parity.js +309 -0
- package/dist/policy-parity.d.ts +35 -0
- package/dist/policy-parity.js +214 -0
- package/dist/policy.d.ts +27 -0
- package/dist/policy.js +316 -0
- package/dist/pr-closing-keywords-parity.d.ts +45 -0
- package/dist/pr-closing-keywords-parity.js +259 -0
- package/dist/pr-closing-keywords.d.ts +3 -0
- package/dist/pr-closing-keywords.js +10 -0
- package/dist/pr-merge-readiness-parity.d.ts +44 -0
- package/dist/pr-merge-readiness-parity.js +296 -0
- package/dist/pr-merge-readiness.d.ts +3 -0
- package/dist/pr-merge-readiness.js +10 -0
- package/dist/pr-monitor-parity.d.ts +44 -0
- package/dist/pr-monitor-parity.js +283 -0
- package/dist/pr-monitor.d.ts +3 -0
- package/dist/pr-monitor.js +10 -0
- package/dist/pr-protected-issues-parity.d.ts +41 -0
- package/dist/pr-protected-issues-parity.js +220 -0
- package/dist/pr-protected-issues.d.ts +3 -0
- package/dist/pr-protected-issues.js +10 -0
- package/dist/pr-wait-mergeable-parity.d.ts +45 -0
- package/dist/pr-wait-mergeable-parity.js +340 -0
- package/dist/pr-wait-mergeable.d.ts +3 -0
- package/dist/pr-wait-mergeable.js +10 -0
- package/dist/preflight-cache.d.ts +16 -0
- package/dist/preflight-cache.js +106 -0
- package/dist/preflight-gh.d.ts +12 -0
- package/dist/preflight-gh.js +188 -0
- package/dist/probe-session.d.ts +3 -0
- package/dist/probe-session.js +10 -0
- package/dist/release-e2e-parity.d.ts +31 -0
- package/dist/release-e2e-parity.js +114 -0
- package/dist/release-e2e.d.ts +3 -0
- package/dist/release-e2e.js +10 -0
- package/dist/release-parity.d.ts +40 -0
- package/dist/release-parity.js +223 -0
- package/dist/release-publish-parity.d.ts +36 -0
- package/dist/release-publish-parity.js +138 -0
- package/dist/release-publish.d.ts +3 -0
- package/dist/release-publish.js +10 -0
- package/dist/release-rollback-parity.d.ts +37 -0
- package/dist/release-rollback-parity.js +161 -0
- package/dist/release-rollback.d.ts +3 -0
- package/dist/release-rollback.js +10 -0
- package/dist/release.d.ts +3 -0
- package/dist/release.js +10 -0
- package/dist/render-cli/deft-ts-runner.d.ts +20 -0
- package/dist/render-cli/deft-ts-runner.js +35 -0
- package/dist/render-cli/prd-render-cli.d.ts +2 -0
- package/dist/render-cli/prd-render-cli.js +7 -0
- package/dist/render-cli/project-render-cli.d.ts +2 -0
- package/dist/render-cli/project-render-cli.js +6 -0
- package/dist/render-cli/spec-render-cli.d.ts +2 -0
- package/dist/render-cli/spec-render-cli.js +6 -0
- package/dist/render-cli/spec-validate-cli.d.ts +2 -0
- package/dist/render-cli/spec-validate-cli.js +6 -0
- package/dist/render-parity.d.ts +35 -0
- package/dist/render-parity.js +383 -0
- package/dist/scm-parity.d.ts +39 -0
- package/dist/scm-parity.js +181 -0
- package/dist/scope-lifecycle-parity.d.ts +35 -0
- package/dist/scope-lifecycle-parity.js +177 -0
- package/dist/scope-lifecycle.d.ts +4 -0
- package/dist/scope-lifecycle.js +29 -0
- package/dist/session-parity.d.ts +39 -0
- package/dist/session-parity.js +260 -0
- package/dist/slice-parity.d.ts +36 -0
- package/dist/slice-parity.js +304 -0
- package/dist/slice.d.ts +4 -0
- package/dist/slice.js +29 -0
- package/dist/story-ready-parity.d.ts +49 -0
- package/dist/story-ready-parity.js +254 -0
- package/dist/subagent-monitor.d.ts +3 -0
- package/dist/subagent-monitor.js +10 -0
- package/dist/swarm-parity.d.ts +28 -0
- package/dist/swarm-parity.js +326 -0
- package/dist/toolchain-check.d.ts +3 -0
- package/dist/toolchain-check.js +14 -0
- package/dist/triage-actions-parity.d.ts +33 -0
- package/dist/triage-actions-parity.js +201 -0
- package/dist/triage-actions.d.ts +17 -0
- package/dist/triage-actions.js +144 -0
- package/dist/triage-aux-a-parity.d.ts +35 -0
- package/dist/triage-aux-a-parity.js +172 -0
- package/dist/triage-aux-b-parity.d.ts +32 -0
- package/dist/triage-aux-b-parity.js +308 -0
- package/dist/triage-bootstrap-parity.d.ts +44 -0
- package/dist/triage-bootstrap-parity.js +226 -0
- package/dist/triage-bootstrap.d.ts +24 -0
- package/dist/triage-bootstrap.js +172 -0
- package/dist/triage-bulk.d.ts +17 -0
- package/dist/triage-bulk.js +154 -0
- package/dist/triage-classify-parity.d.ts +40 -0
- package/dist/triage-classify-parity.js +227 -0
- package/dist/triage-classify.d.ts +13 -0
- package/dist/triage-classify.js +76 -0
- package/dist/triage-help.d.ts +3 -0
- package/dist/triage-help.js +10 -0
- package/dist/triage-queue-parity.d.ts +59 -0
- package/dist/triage-queue-parity.js +363 -0
- package/dist/triage-queue.d.ts +17 -0
- package/dist/triage-queue.js +174 -0
- package/dist/triage-reconcile.d.ts +11 -0
- package/dist/triage-reconcile.js +76 -0
- package/dist/triage-refresh.d.ts +7 -0
- package/dist/triage-refresh.js +37 -0
- package/dist/triage-scope-drift.d.ts +12 -0
- package/dist/triage-scope-drift.js +117 -0
- package/dist/triage-scope-parity.d.ts +34 -0
- package/dist/triage-scope-parity.js +218 -0
- package/dist/triage-scope.d.ts +4 -0
- package/dist/triage-scope.js +29 -0
- package/dist/triage-smoketest.d.ts +3 -0
- package/dist/triage-smoketest.js +43 -0
- package/dist/triage-subscribe.d.ts +15 -0
- package/dist/triage-subscribe.js +157 -0
- package/dist/triage-summary-parity.d.ts +50 -0
- package/dist/triage-summary-parity.js +306 -0
- package/dist/triage-summary.d.ts +14 -0
- package/dist/triage-summary.js +77 -0
- package/dist/triage-welcome.d.ts +12 -0
- package/dist/triage-welcome.js +78 -0
- package/dist/ts-check-lane.d.ts +9 -0
- package/dist/ts-check-lane.js +49 -0
- package/dist/validate-content-parity.d.ts +33 -0
- package/dist/validate-content-parity.js +356 -0
- package/dist/vbrief-activate-parity.d.ts +39 -0
- package/dist/vbrief-activate-parity.js +216 -0
- package/dist/vbrief-activate.d.ts +3 -0
- package/dist/vbrief-activate.js +7 -0
- package/dist/vbrief-build-parity.d.ts +28 -0
- package/dist/vbrief-build-parity.js +399 -0
- package/dist/vbrief-build.d.ts +3 -0
- package/dist/vbrief-build.js +8 -0
- package/dist/vbrief-preflight-parity.d.ts +34 -0
- package/dist/vbrief-preflight-parity.js +163 -0
- package/dist/vbrief-preflight.d.ts +12 -0
- package/dist/vbrief-preflight.js +58 -0
- package/dist/vbrief-reconcile-parity.d.ts +22 -0
- package/dist/vbrief-reconcile-parity.js +600 -0
- package/dist/vbrief-reconcile.d.ts +3 -0
- package/dist/vbrief-reconcile.js +7 -0
- package/dist/vbrief-validate-parity.d.ts +27 -0
- package/dist/vbrief-validate-parity.js +122 -0
- package/dist/vbrief-validate.d.ts +3 -0
- package/dist/vbrief-validate.js +8 -0
- package/dist/vbrief-validation-parity.d.ts +28 -0
- package/dist/vbrief-validation-parity.js +645 -0
- package/dist/vbrief-validation.d.ts +3 -0
- package/dist/vbrief-validation.js +8 -0
- package/dist/verify-branch.d.ts +14 -0
- package/dist/verify-branch.js +81 -0
- package/dist/verify-encoding.d.ts +15 -0
- package/dist/verify-encoding.js +86 -0
- package/dist/verify-env-parity.d.ts +28 -0
- package/dist/verify-env-parity.js +272 -0
- package/dist/verify-hooks-installed.d.ts +10 -0
- package/dist/verify-hooks-installed.js +48 -0
- package/dist/verify-investigation.d.ts +3 -0
- package/dist/verify-investigation.js +10 -0
- package/dist/verify-judgment-gates.d.ts +3 -0
- package/dist/verify-judgment-gates.js +10 -0
- package/dist/verify-no-task-runtime.d.ts +3 -0
- package/dist/verify-no-task-runtime.js +16 -0
- package/dist/verify-session-ritual.d.ts +13 -0
- package/dist/verify-session-ritual.js +78 -0
- package/dist/verify-source-cli/rule-ownership-lint.d.ts +12 -0
- package/dist/verify-source-cli/rule-ownership-lint.js +61 -0
- package/dist/verify-source-cli/verify-content-manifest.d.ts +12 -0
- package/dist/verify-source-cli/verify-content-manifest.js +61 -0
- package/dist/verify-source-cli/verify-scm-boundary.d.ts +13 -0
- package/dist/verify-source-cli/verify-scm-boundary.js +66 -0
- package/dist/verify-source-cli/verify-stubs.d.ts +11 -0
- package/dist/verify-source-cli/verify-stubs.js +27 -0
- package/dist/verify-source-parity.d.ts +26 -0
- package/dist/verify-source-parity.js +178 -0
- package/dist/verify-story-ready.d.ts +16 -0
- package/dist/verify-story-ready.js +138 -0
- package/dist/verify-tools.d.ts +13 -0
- package/dist/verify-tools.js +67 -0
- package/dist/verify-wip-cap.d.ts +13 -0
- package/dist/verify-wip-cap.js +62 -0
- package/dist/wip-cap-parity.d.ts +39 -0
- package/dist/wip-cap-parity.js +209 -0
- package/package.json +50 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { evaluate } from "@deftai/directive-core/branch";
|
|
5
|
+
/** Parse verify-branch CLI args, mirroring the Python argparse surface. */
|
|
6
|
+
export function parseArgs(argv) {
|
|
7
|
+
const parsed = {
|
|
8
|
+
projectRoot: ".",
|
|
9
|
+
allowMissingProjectDefinition: false,
|
|
10
|
+
defaultBranches: null,
|
|
11
|
+
quiet: false,
|
|
12
|
+
};
|
|
13
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
14
|
+
const arg = argv[i];
|
|
15
|
+
if (arg === "--allow-missing-project-definition") {
|
|
16
|
+
parsed.allowMissingProjectDefinition = true;
|
|
17
|
+
}
|
|
18
|
+
else if (arg === "--quiet") {
|
|
19
|
+
parsed.quiet = true;
|
|
20
|
+
}
|
|
21
|
+
else if (arg === "--project-root") {
|
|
22
|
+
const value = argv[i + 1];
|
|
23
|
+
if (value === undefined) {
|
|
24
|
+
return { ...parsed, error: "argument --project-root: expected one argument" };
|
|
25
|
+
}
|
|
26
|
+
parsed.projectRoot = value;
|
|
27
|
+
i += 1;
|
|
28
|
+
}
|
|
29
|
+
else if (arg?.startsWith("--project-root=")) {
|
|
30
|
+
parsed.projectRoot = arg.slice("--project-root=".length);
|
|
31
|
+
}
|
|
32
|
+
else if (arg === "--default-branch") {
|
|
33
|
+
const value = argv[i + 1];
|
|
34
|
+
if (value === undefined) {
|
|
35
|
+
return { ...parsed, error: "argument --default-branch: expected one argument" };
|
|
36
|
+
}
|
|
37
|
+
if (parsed.defaultBranches === null) {
|
|
38
|
+
parsed.defaultBranches = [];
|
|
39
|
+
}
|
|
40
|
+
parsed.defaultBranches.push(value);
|
|
41
|
+
i += 1;
|
|
42
|
+
}
|
|
43
|
+
else if (arg?.startsWith("--default-branch=")) {
|
|
44
|
+
if (parsed.defaultBranches === null) {
|
|
45
|
+
parsed.defaultBranches = [];
|
|
46
|
+
}
|
|
47
|
+
parsed.defaultBranches.push(arg.slice("--default-branch=".length));
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return { ...parsed, error: `unrecognized argument: ${arg}` };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
/** Run the gate and return the process exit code. */
|
|
56
|
+
export function run(argv) {
|
|
57
|
+
const args = parseArgs(argv);
|
|
58
|
+
if (args.error !== undefined) {
|
|
59
|
+
process.stderr.write(`preflight_branch: ${args.error}\n`);
|
|
60
|
+
return 2;
|
|
61
|
+
}
|
|
62
|
+
const projectRoot = resolve(args.projectRoot);
|
|
63
|
+
const defaultBranches = args.defaultBranches !== null ? new Set(args.defaultBranches) : undefined;
|
|
64
|
+
const result = evaluate(projectRoot, {
|
|
65
|
+
allowMissingProjectDefinition: args.allowMissingProjectDefinition,
|
|
66
|
+
defaultBranches,
|
|
67
|
+
});
|
|
68
|
+
if (result.exitCode === 0) {
|
|
69
|
+
if (!args.quiet) {
|
|
70
|
+
process.stdout.write(`${result.message}\n`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
process.stderr.write(`${result.message}\n`);
|
|
75
|
+
}
|
|
76
|
+
return result.exitCode;
|
|
77
|
+
}
|
|
78
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
79
|
+
process.exit(run(process.argv.slice(2)));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=verify-branch.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { type ScanMode } from "@deftai/directive-core";
|
|
3
|
+
interface ParsedArgs {
|
|
4
|
+
mode: ScanMode;
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
allowList: string | null;
|
|
7
|
+
quiet: boolean;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Parse the verify-encoding CLI args, mirroring the Python argparse surface. */
|
|
11
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
12
|
+
/** Run the gate and return the process exit code (no side effects on argv parse error -> 2). */
|
|
13
|
+
export declare function run(argv: string[]): number;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=verify-encoding.d.ts.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { evaluate } from "@deftai/directive-core";
|
|
5
|
+
/** Parse the verify-encoding CLI args, mirroring the Python argparse surface. */
|
|
6
|
+
export function parseArgs(argv) {
|
|
7
|
+
const parsed = {
|
|
8
|
+
mode: "all",
|
|
9
|
+
projectRoot: ".",
|
|
10
|
+
allowList: null,
|
|
11
|
+
quiet: false,
|
|
12
|
+
};
|
|
13
|
+
let sawAll = false;
|
|
14
|
+
let sawStaged = false;
|
|
15
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
16
|
+
const arg = argv[i];
|
|
17
|
+
if (arg === "--all") {
|
|
18
|
+
sawAll = true;
|
|
19
|
+
parsed.mode = "all";
|
|
20
|
+
}
|
|
21
|
+
else if (arg === "--staged") {
|
|
22
|
+
sawStaged = true;
|
|
23
|
+
parsed.mode = "staged";
|
|
24
|
+
}
|
|
25
|
+
else if (arg === "--quiet") {
|
|
26
|
+
parsed.quiet = true;
|
|
27
|
+
}
|
|
28
|
+
else if (arg === "--project-root") {
|
|
29
|
+
const value = argv[i + 1];
|
|
30
|
+
if (value === undefined) {
|
|
31
|
+
return { ...parsed, error: "argument --project-root: expected one argument" };
|
|
32
|
+
}
|
|
33
|
+
parsed.projectRoot = value;
|
|
34
|
+
i += 1;
|
|
35
|
+
}
|
|
36
|
+
else if (arg?.startsWith("--project-root=")) {
|
|
37
|
+
parsed.projectRoot = arg.slice("--project-root=".length);
|
|
38
|
+
}
|
|
39
|
+
else if (arg === "--allow-list") {
|
|
40
|
+
const value = argv[i + 1];
|
|
41
|
+
if (value === undefined) {
|
|
42
|
+
return { ...parsed, error: "argument --allow-list: expected one argument" };
|
|
43
|
+
}
|
|
44
|
+
parsed.allowList = value;
|
|
45
|
+
i += 1;
|
|
46
|
+
}
|
|
47
|
+
else if (arg?.startsWith("--allow-list=")) {
|
|
48
|
+
parsed.allowList = arg.slice("--allow-list=".length);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return { ...parsed, error: `unrecognized argument: ${arg}` };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (sawAll && sawStaged) {
|
|
55
|
+
return { ...parsed, error: "argument --staged: not allowed with argument --all" };
|
|
56
|
+
}
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
/** Run the gate and return the process exit code (no side effects on argv parse error -> 2). */
|
|
60
|
+
export function run(argv) {
|
|
61
|
+
const args = parseArgs(argv);
|
|
62
|
+
if (args.error !== undefined) {
|
|
63
|
+
process.stderr.write(`verify_encoding: ${args.error}\n`);
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
const projectRoot = resolve(args.projectRoot);
|
|
67
|
+
const allowListPath = args.allowList !== null ? resolve(args.allowList) : null;
|
|
68
|
+
const result = evaluate(projectRoot, { mode: args.mode, allowListPath });
|
|
69
|
+
if (result.exitCode === 0) {
|
|
70
|
+
if (!args.quiet) {
|
|
71
|
+
process.stdout.write(`${result.message}\n`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
process.stderr.write(`${result.message}\n`);
|
|
76
|
+
}
|
|
77
|
+
return result.exitCode;
|
|
78
|
+
}
|
|
79
|
+
// Only execute when invoked directly as a binary (not when imported in tests).
|
|
80
|
+
// Normalize both sides via fileURLToPath so the guard fires on Windows too,
|
|
81
|
+
// where process.argv[1] is a native backslash path and import.meta.url is a
|
|
82
|
+
// forward-slash file:// URL -- a raw `file://${process.argv[1]}` never matches.
|
|
83
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
84
|
+
process.exit(run(process.argv.slice(2)));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=verify-encoding.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export interface Capture {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly stdout: string;
|
|
5
|
+
readonly stderr: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ParityCase {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly runPython: (deftRoot: string) => Capture;
|
|
10
|
+
readonly runTs: (deftRoot: string) => Capture;
|
|
11
|
+
}
|
|
12
|
+
export interface ParityDiff {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly exitMismatch: boolean;
|
|
15
|
+
readonly stdoutMismatch: boolean;
|
|
16
|
+
readonly stderrMismatch: boolean;
|
|
17
|
+
readonly pythonExit: number;
|
|
18
|
+
readonly tsExit: number;
|
|
19
|
+
}
|
|
20
|
+
export interface ParityResult {
|
|
21
|
+
readonly ok: boolean;
|
|
22
|
+
readonly diffs: ParityDiff[];
|
|
23
|
+
}
|
|
24
|
+
export declare const PARITY_CASES: readonly ParityCase[];
|
|
25
|
+
export declare function diffCase(python: Capture, ts: Capture, name: string): ParityDiff;
|
|
26
|
+
export declare function runParity(deftRoot?: string): ParityResult;
|
|
27
|
+
export declare function renderReport(result: ParityResult): string;
|
|
28
|
+
//# sourceMappingURL=verify-env-parity.d.ts.map
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Golden-output parity harness (#1783 s1): runs BOTH the Python oracles and the
|
|
4
|
+
* ported TS verify-env gates over shared fixtures (cache-off), asserting
|
|
5
|
+
* byte-identical stdout/stderr and exit codes.
|
|
6
|
+
*/
|
|
7
|
+
import { spawnSync } from "node:child_process";
|
|
8
|
+
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { dirname, join, resolve } from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { evaluate as evaluateHooks, formatScanResult, runToolchainCheck, scan, verifyRequiredTools, } from "@deftai/directive-core/verify-env";
|
|
13
|
+
function captureFromRun(exitCode, stdout, stderr) {
|
|
14
|
+
return { exitCode, stdout, stderr };
|
|
15
|
+
}
|
|
16
|
+
function loadModule(name, relPath) {
|
|
17
|
+
return `spec = importlib.util.spec_from_file_location(${JSON.stringify(name)}, root / ${JSON.stringify(relPath)})
|
|
18
|
+
mod = importlib.util.module_from_spec(spec)
|
|
19
|
+
sys.modules[${JSON.stringify(name)}] = mod
|
|
20
|
+
spec.loader.exec_module(mod)`;
|
|
21
|
+
}
|
|
22
|
+
function runPythonScript(deftRoot, script) {
|
|
23
|
+
const code = `import importlib.util, sys\nfrom pathlib import Path\nroot = Path(${JSON.stringify(deftRoot)})\n${script}`;
|
|
24
|
+
const result = spawnSync("uv", ["run", "python", "-c", code], {
|
|
25
|
+
cwd: deftRoot,
|
|
26
|
+
encoding: "utf8",
|
|
27
|
+
env: { ...process.env, DEFT_CACHE_DISABLE: "1", PYTHONUTF8: "1" },
|
|
28
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
exitCode: result.status ?? 2,
|
|
32
|
+
stdout: typeof result.stdout === "string" ? result.stdout : "",
|
|
33
|
+
stderr: typeof result.stderr === "string" ? result.stderr : "",
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function probeWith(available) {
|
|
37
|
+
return (command) => (available.has(command) ? `/usr/bin/${command}` : null);
|
|
38
|
+
}
|
|
39
|
+
function makeNoTaskFixture(deftRoot) {
|
|
40
|
+
const root = mkdtempSync(join(tmpdir(), "deft-verify-env-notask-"));
|
|
41
|
+
mkdirSync(join(root, "scripts"), { recursive: true });
|
|
42
|
+
writeFileSync(join(root, "run"), "#!/usr/bin/env python3\n", "utf8");
|
|
43
|
+
writeFileSync(join(root, "scripts", "probe.py"), 'import subprocess\nimport shutil\nsubprocess.check_output(["task", "check"])\nshutil.which("task")\n', "utf8");
|
|
44
|
+
writeFileSync(join(root, "scripts", "verify_no_task_runtime.py"), readFileSync(join(deftRoot, "scripts", "verify_no_task_runtime.py"), "utf8"), "utf8");
|
|
45
|
+
return root;
|
|
46
|
+
}
|
|
47
|
+
export const PARITY_CASES = [
|
|
48
|
+
{
|
|
49
|
+
name: "verify-tools-clean-linux",
|
|
50
|
+
runPython(deftRoot) {
|
|
51
|
+
return runPythonScript(deftRoot, `${loadModule("verify_tools", "scripts/verify_tools.py")}
|
|
52
|
+
available = {"git","uv","python3","gh","apt-get"}
|
|
53
|
+
def probe(c):
|
|
54
|
+
return f"/usr/bin/{c}" if c in available else None
|
|
55
|
+
lines = []
|
|
56
|
+
result = mod.verify_required_tools(platform_id="linux", probe=probe, output_fn=lines.append)
|
|
57
|
+
for line in lines:
|
|
58
|
+
print(line)
|
|
59
|
+
sys.exit(result.exit_code)`);
|
|
60
|
+
},
|
|
61
|
+
runTs() {
|
|
62
|
+
const lines = [];
|
|
63
|
+
const result = verifyRequiredTools({
|
|
64
|
+
platformId: "linux",
|
|
65
|
+
probe: probeWith(new Set(["git", "uv", "python3", "gh", "apt-get"])),
|
|
66
|
+
outputFn: (line) => {
|
|
67
|
+
lines.push(line);
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
return captureFromRun(result.exitCode, `${lines.join("\n")}\n`, "");
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: "verify-tools-missing-task",
|
|
75
|
+
runPython(deftRoot) {
|
|
76
|
+
return runPythonScript(deftRoot, `${loadModule("verify_tools", "scripts/verify_tools.py")}
|
|
77
|
+
available = {"git","uv","python3","gh","apt-get"}
|
|
78
|
+
def probe(c):
|
|
79
|
+
return f"/usr/bin/{c}" if c in available else None
|
|
80
|
+
lines = []
|
|
81
|
+
result = mod.verify_required_tools(platform_id="linux", include_task=True, probe=probe, output_fn=lines.append)
|
|
82
|
+
for line in lines:
|
|
83
|
+
print(line)
|
|
84
|
+
sys.exit(result.exit_code)`);
|
|
85
|
+
},
|
|
86
|
+
runTs() {
|
|
87
|
+
const lines = [];
|
|
88
|
+
const result = verifyRequiredTools({
|
|
89
|
+
platformId: "linux",
|
|
90
|
+
includeTask: true,
|
|
91
|
+
probe: probeWith(new Set(["git", "uv", "python3", "gh", "apt-get"])),
|
|
92
|
+
outputFn: (line) => {
|
|
93
|
+
lines.push(line);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
return captureFromRun(result.exitCode, `${lines.join("\n")}\n`, "");
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "verify-tools-foundational-git-missing",
|
|
101
|
+
runPython(deftRoot) {
|
|
102
|
+
return runPythonScript(deftRoot, `${loadModule("verify_tools", "scripts/verify_tools.py")}
|
|
103
|
+
available = {"task","uv","python3","gh","apt-get"}
|
|
104
|
+
def probe(c):
|
|
105
|
+
return f"/usr/bin/{c}" if c in available else None
|
|
106
|
+
result = mod.verify_required_tools(platform_id="linux", probe=probe)
|
|
107
|
+
sys.exit(result.exit_code)`);
|
|
108
|
+
},
|
|
109
|
+
runTs() {
|
|
110
|
+
const result = verifyRequiredTools({
|
|
111
|
+
platformId: "linux",
|
|
112
|
+
probe: probeWith(new Set(["task", "uv", "python3", "gh", "apt-get"])),
|
|
113
|
+
});
|
|
114
|
+
return captureFromRun(result.exitCode, "", "");
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "verify-hooks-clean-deft-root",
|
|
119
|
+
runPython(deftRoot) {
|
|
120
|
+
return runPythonScript(deftRoot, `${loadModule("verify_hooks_installed", "scripts/verify_hooks_installed.py")}
|
|
121
|
+
code, msg = mod.evaluate(root)
|
|
122
|
+
print(msg, file=sys.stdout if code == 0 else sys.stderr)
|
|
123
|
+
sys.exit(code)`);
|
|
124
|
+
},
|
|
125
|
+
runTs(deftRoot) {
|
|
126
|
+
const result = evaluateHooks(deftRoot);
|
|
127
|
+
if (result.stream === "stdout") {
|
|
128
|
+
return captureFromRun(result.code, `${result.message}\n`, "");
|
|
129
|
+
}
|
|
130
|
+
return captureFromRun(result.code, "", `${result.message}\n`);
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: "verify-hooks-unset",
|
|
135
|
+
runPython(deftRoot) {
|
|
136
|
+
const fixture = mkdtempSync(join(tmpdir(), "deft-verify-env-hooks-unset-"));
|
|
137
|
+
mkdirSync(fixture, { recursive: true });
|
|
138
|
+
const cap = runPythonScript(deftRoot, `${loadModule("verify_hooks_installed", "scripts/verify_hooks_installed.py")}
|
|
139
|
+
code, msg = mod.evaluate(Path(${JSON.stringify(fixture)}))
|
|
140
|
+
print(msg, file=sys.stdout if code == 0 else sys.stderr)
|
|
141
|
+
sys.exit(code)`);
|
|
142
|
+
rmSync(fixture, { recursive: true, force: true });
|
|
143
|
+
return cap;
|
|
144
|
+
},
|
|
145
|
+
runTs() {
|
|
146
|
+
const fixture = mkdtempSync(join(tmpdir(), "deft-verify-env-hooks-unset-ts-"));
|
|
147
|
+
const result = evaluateHooks(fixture, {
|
|
148
|
+
gitConfigReader: () => ({ hooksPath: null, error: null }),
|
|
149
|
+
});
|
|
150
|
+
rmSync(fixture, { recursive: true, force: true });
|
|
151
|
+
return captureFromRun(result.code, "", `${result.message}\n`);
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "toolchain-empty-path",
|
|
156
|
+
runPython(deftRoot) {
|
|
157
|
+
return runPythonScript(deftRoot, `${loadModule("toolchain_check", "scripts/toolchain-check.py")}
|
|
158
|
+
from unittest.mock import patch
|
|
159
|
+
def fake_run(*args, **kwargs):
|
|
160
|
+
raise FileNotFoundError(args[0][0])
|
|
161
|
+
with patch("subprocess.run", fake_run):
|
|
162
|
+
sys.exit(mod.main())`);
|
|
163
|
+
},
|
|
164
|
+
runTs() {
|
|
165
|
+
const result = runToolchainCheck(() => ({ error: "not-found", message: "" }));
|
|
166
|
+
return captureFromRun(result.exitCode, `${result.lines.join("\n")}\n`, "");
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: "verify-no-task-runtime-clean-deft-root",
|
|
171
|
+
runPython(deftRoot) {
|
|
172
|
+
return runPythonScript(deftRoot, `${loadModule("verify_no_task_runtime", "scripts/verify_no_task_runtime.py")}
|
|
173
|
+
sys.exit(mod.main())`);
|
|
174
|
+
},
|
|
175
|
+
runTs(deftRoot) {
|
|
176
|
+
const findings = scan({ root: deftRoot });
|
|
177
|
+
const formatted = formatScanResult(findings);
|
|
178
|
+
return captureFromRun(formatted.exitCode, formatted.stdout, formatted.stderr);
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "verify-no-task-runtime-findings",
|
|
183
|
+
runPython(deftRoot) {
|
|
184
|
+
const fixture = makeNoTaskFixture(deftRoot);
|
|
185
|
+
const cap = runPythonScript(deftRoot, `${loadModule("verify_no_task_runtime", "scripts/verify_no_task_runtime.py")}
|
|
186
|
+
fixture = Path(${JSON.stringify(fixture)})
|
|
187
|
+
mod.ROOT = fixture
|
|
188
|
+
mod._python_files = lambda: [fixture / "run", fixture / "scripts" / "probe.py"]
|
|
189
|
+
findings = mod.scan()
|
|
190
|
+
if not findings:
|
|
191
|
+
print("No runtime go-task subprocess dependencies found")
|
|
192
|
+
sys.exit(0)
|
|
193
|
+
print("Runtime go-task dependencies found:", file=sys.stderr)
|
|
194
|
+
for finding in findings:
|
|
195
|
+
rel = finding.path.relative_to(mod.ROOT)
|
|
196
|
+
print(f" {rel}:{finding.line}: {finding.message}", file=sys.stderr)
|
|
197
|
+
sys.exit(1)`);
|
|
198
|
+
rmSync(fixture, { recursive: true, force: true });
|
|
199
|
+
return cap;
|
|
200
|
+
},
|
|
201
|
+
runTs(deftRoot) {
|
|
202
|
+
const fixture = makeNoTaskFixture(deftRoot);
|
|
203
|
+
const findings = scan({
|
|
204
|
+
root: fixture,
|
|
205
|
+
pythonFiles: () => [join(fixture, "run"), join(fixture, "scripts", "probe.py")],
|
|
206
|
+
});
|
|
207
|
+
const formatted = formatScanResult(findings);
|
|
208
|
+
rmSync(fixture, { recursive: true, force: true });
|
|
209
|
+
return captureFromRun(formatted.exitCode, formatted.stdout, formatted.stderr);
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
];
|
|
213
|
+
function resolveDeftRoot() {
|
|
214
|
+
if (process.env.DEFT_ROOT !== undefined && process.env.DEFT_ROOT.length > 0) {
|
|
215
|
+
return resolve(process.env.DEFT_ROOT);
|
|
216
|
+
}
|
|
217
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
|
|
218
|
+
}
|
|
219
|
+
export function diffCase(python, ts, name) {
|
|
220
|
+
return {
|
|
221
|
+
name,
|
|
222
|
+
exitMismatch: python.exitCode !== ts.exitCode,
|
|
223
|
+
stdoutMismatch: python.stdout !== ts.stdout,
|
|
224
|
+
stderrMismatch: python.stderr !== ts.stderr,
|
|
225
|
+
pythonExit: python.exitCode,
|
|
226
|
+
tsExit: ts.exitCode,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
export function runParity(deftRoot = resolveDeftRoot()) {
|
|
230
|
+
const diffs = [];
|
|
231
|
+
for (const testCase of PARITY_CASES) {
|
|
232
|
+
diffs.push(diffCase(testCase.runPython(deftRoot), testCase.runTs(deftRoot), testCase.name));
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
ok: diffs.every((d) => !d.exitMismatch && !d.stdoutMismatch && !d.stderrMismatch),
|
|
236
|
+
diffs,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
export function renderReport(result) {
|
|
240
|
+
if (result.ok) {
|
|
241
|
+
return `verify-env parity: CLEAN -- Python and TS agree on ${PARITY_CASES.length} case(s).`;
|
|
242
|
+
}
|
|
243
|
+
const lines = ["verify-env parity: DIVERGENCE"];
|
|
244
|
+
for (const d of result.diffs) {
|
|
245
|
+
if (d.exitMismatch || d.stdoutMismatch || d.stderrMismatch) {
|
|
246
|
+
lines.push(` case: ${d.name}`);
|
|
247
|
+
if (d.exitMismatch)
|
|
248
|
+
lines.push(` exit: python=${d.pythonExit} ts=${d.tsExit}`);
|
|
249
|
+
if (d.stdoutMismatch)
|
|
250
|
+
lines.push(" stdout mismatch");
|
|
251
|
+
if (d.stderrMismatch)
|
|
252
|
+
lines.push(" stderr mismatch");
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return lines.join("\n");
|
|
256
|
+
}
|
|
257
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
258
|
+
try {
|
|
259
|
+
const result = runParity();
|
|
260
|
+
if (result.ok) {
|
|
261
|
+
process.stdout.write(`${renderReport(result)}\n`);
|
|
262
|
+
process.exit(0);
|
|
263
|
+
}
|
|
264
|
+
process.stderr.write(`${renderReport(result)}\n`);
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
process.stderr.write(`verify-env parity: harness error -- ${String(err)}\n`);
|
|
269
|
+
process.exit(2);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=verify-env-parity.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface ParsedArgs {
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
quiet: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
8
|
+
export declare function run(argv: string[]): number;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=verify-hooks-installed.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { evaluate } from "@deftai/directive-core/verify-env";
|
|
5
|
+
export function parseArgs(argv) {
|
|
6
|
+
const parsed = { projectRoot: ".", quiet: false };
|
|
7
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
8
|
+
const arg = argv[i];
|
|
9
|
+
if (arg === "--quiet")
|
|
10
|
+
parsed.quiet = true;
|
|
11
|
+
else if (arg === "--project-root") {
|
|
12
|
+
const value = argv[i + 1];
|
|
13
|
+
if (value === undefined) {
|
|
14
|
+
return { ...parsed, error: "argument --project-root: expected one argument" };
|
|
15
|
+
}
|
|
16
|
+
parsed.projectRoot = value;
|
|
17
|
+
i += 1;
|
|
18
|
+
}
|
|
19
|
+
else if (arg?.startsWith("--project-root=")) {
|
|
20
|
+
parsed.projectRoot = arg.slice("--project-root=".length);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return { ...parsed, error: `unrecognized arguments: ${arg}` };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return parsed;
|
|
27
|
+
}
|
|
28
|
+
export function run(argv) {
|
|
29
|
+
const args = parseArgs(argv);
|
|
30
|
+
if (args.error !== undefined) {
|
|
31
|
+
process.stderr.write(`${args.error}\n`);
|
|
32
|
+
return 2;
|
|
33
|
+
}
|
|
34
|
+
const result = evaluate(resolve(args.projectRoot));
|
|
35
|
+
if (!args.quiet) {
|
|
36
|
+
if (result.stream === "stdout") {
|
|
37
|
+
process.stdout.write(`${result.message}\n`);
|
|
38
|
+
}
|
|
39
|
+
else if (result.stream === "stderr") {
|
|
40
|
+
process.stderr.write(`${result.message}\n`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return result.code;
|
|
44
|
+
}
|
|
45
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
46
|
+
process.exit(run(process.argv.slice(2)));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=verify-hooks-installed.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { cmdVerifyInvestigation } from "@deftai/directive-core/orchestration";
|
|
4
|
+
export function run(argv) {
|
|
5
|
+
return cmdVerifyInvestigation(argv);
|
|
6
|
+
}
|
|
7
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
8
|
+
process.exit(run(process.argv.slice(2)));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=verify-investigation.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { cmdVerifyJudgmentGates } from "@deftai/directive-core/orchestration";
|
|
4
|
+
export function run(argv) {
|
|
5
|
+
return cmdVerifyJudgmentGates(argv);
|
|
6
|
+
}
|
|
7
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
8
|
+
process.exit(run(process.argv.slice(2)));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=verify-judgment-gates.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { formatScanResult, scan } from "@deftai/directive-core/verify-env";
|
|
4
|
+
export function run() {
|
|
5
|
+
const findings = scan();
|
|
6
|
+
const result = formatScanResult(findings);
|
|
7
|
+
if (result.stdout.length > 0)
|
|
8
|
+
process.stdout.write(result.stdout);
|
|
9
|
+
if (result.stderr.length > 0)
|
|
10
|
+
process.stderr.write(result.stderr);
|
|
11
|
+
return result.exitCode;
|
|
12
|
+
}
|
|
13
|
+
if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
|
|
14
|
+
process.exit(run());
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=verify-no-task-runtime.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
interface ParsedArgs {
|
|
3
|
+
projectRoot: string;
|
|
4
|
+
tier: "quick" | "gated";
|
|
5
|
+
emitJson: boolean;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Parse verify-session-ritual CLI args, mirroring scripts/verify_session_ritual.py. */
|
|
9
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
10
|
+
/** Run the gate and return the process exit code. */
|
|
11
|
+
export declare function run(argv: string[]): number;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=verify-session-ritual.d.ts.map
|