@codyswann/lisa 3.47.9 → 3.48.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/cli/doctor-render.d.ts +22 -0
- package/dist/cli/doctor-render.d.ts.map +1 -0
- package/dist/cli/doctor-render.js +27 -0
- package/dist/cli/doctor-render.js.map +1 -0
- package/dist/cli/doctor.d.ts +15 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +2 -9
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/gate-report-cells.d.ts +101 -0
- package/dist/cli/gate-report-cells.d.ts.map +1 -0
- package/dist/cli/gate-report-cells.js +269 -0
- package/dist/cli/gate-report-cells.js.map +1 -0
- package/dist/cli/gate-report-config.d.ts +28 -0
- package/dist/cli/gate-report-config.d.ts.map +1 -0
- package/dist/cli/gate-report-config.js +33 -0
- package/dist/cli/gate-report-config.js.map +1 -0
- package/dist/cli/gate-report-executors.d.ts +62 -0
- package/dist/cli/gate-report-executors.d.ts.map +1 -0
- package/dist/cli/gate-report-executors.js +218 -0
- package/dist/cli/gate-report-executors.js.map +1 -0
- package/dist/cli/gate-report-preview.d.ts +27 -0
- package/dist/cli/gate-report-preview.d.ts.map +1 -0
- package/dist/cli/gate-report-preview.js +286 -0
- package/dist/cli/gate-report-preview.js.map +1 -0
- package/dist/cli/gate-report-registry.d.ts +68 -0
- package/dist/cli/gate-report-registry.d.ts.map +1 -0
- package/dist/cli/gate-report-registry.js +52 -0
- package/dist/cli/gate-report-registry.js.map +1 -0
- package/dist/cli/gate-report-ruleset.d.ts +60 -0
- package/dist/cli/gate-report-ruleset.d.ts.map +1 -0
- package/dist/cli/gate-report-ruleset.js +132 -0
- package/dist/cli/gate-report-ruleset.js.map +1 -0
- package/dist/cli/gate-report-skip-jobs.d.ts +34 -0
- package/dist/cli/gate-report-skip-jobs.d.ts.map +1 -0
- package/dist/cli/gate-report-skip-jobs.js +42 -0
- package/dist/cli/gate-report-skip-jobs.js.map +1 -0
- package/dist/cli/gate-report-summary.d.ts +18 -0
- package/dist/cli/gate-report-summary.d.ts.map +1 -0
- package/dist/cli/gate-report-summary.js +80 -0
- package/dist/cli/gate-report-summary.js.map +1 -0
- package/dist/cli/gate-report-types.d.ts +206 -0
- package/dist/cli/gate-report-types.d.ts.map +1 -0
- package/dist/cli/gate-report-types.js +19 -0
- package/dist/cli/gate-report-types.js.map +1 -0
- package/dist/cli/gate-report.d.ts +35 -0
- package/dist/cli/gate-report.d.ts.map +1 -0
- package/dist/cli/gate-report.js +317 -0
- package/dist/cli/gate-report.js.map +1 -0
- package/dist/cli/ui-github-repo-gh.d.ts +14 -0
- package/dist/cli/ui-github-repo-gh.d.ts.map +1 -1
- package/dist/cli/ui-github-repo-gh.js +6 -1
- package/dist/cli/ui-github-repo-gh.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +20 -1
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/typescript/github-rulesets/quality-checks.json +8 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assemble and write one doctor result.
|
|
3
|
+
*
|
|
4
|
+
* A separate module because the two renderings answer different questions and
|
|
5
|
+
* only one of them can carry the gate report. Human output is a line per check;
|
|
6
|
+
* the machine payload additionally carries a structure whose whole contract is
|
|
7
|
+
* that "not checkable here" is a distinct state, which `DoctorStatus`
|
|
8
|
+
* (`ok | warn | fail`) cannot express. Keeping the split here means neither
|
|
9
|
+
* rendering can quietly acquire the other's shape.
|
|
10
|
+
* @module cli/doctor-render
|
|
11
|
+
*/
|
|
12
|
+
import type { DoctorCheck, DoctorOptions, DoctorResult } from "./doctor.js";
|
|
13
|
+
/**
|
|
14
|
+
* Build the result and write it in the requested form.
|
|
15
|
+
* @param checks - Every doctor check, already run
|
|
16
|
+
* @param resolvedTarget - Absolute project root
|
|
17
|
+
* @param options - Parsed command options
|
|
18
|
+
* @param write - Output sink
|
|
19
|
+
* @returns The result, for callers that consume it directly
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderDoctorResult(checks: DoctorCheck[], resolvedTarget: string, options: DoctorOptions, write: (message: string) => void): Promise<DoctorResult>;
|
|
22
|
+
//# sourceMappingURL=doctor-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-render.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG5E;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EAAE,EACrB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,YAAY,CAAC,CAqBvB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { buildGateReport } from "./gate-report.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the result and write it in the requested form.
|
|
4
|
+
* @param checks - Every doctor check, already run
|
|
5
|
+
* @param resolvedTarget - Absolute project root
|
|
6
|
+
* @param options - Parsed command options
|
|
7
|
+
* @param write - Output sink
|
|
8
|
+
* @returns The result, for callers that consume it directly
|
|
9
|
+
*/
|
|
10
|
+
export async function renderDoctorResult(checks, resolvedTarget, options, write) {
|
|
11
|
+
if (options.json !== true) {
|
|
12
|
+
write(checks
|
|
13
|
+
.map(check => `${check.status.toUpperCase()} ${check.name}: ${check.detail}`)
|
|
14
|
+
.join("\n"));
|
|
15
|
+
return { checks };
|
|
16
|
+
}
|
|
17
|
+
const result = {
|
|
18
|
+
checks,
|
|
19
|
+
gateReport: await buildGateReport({
|
|
20
|
+
projectRoot: resolvedTarget,
|
|
21
|
+
offline: options.offline === true,
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
write(JSON.stringify(result, null, 2));
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=doctor-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-render.js","sourceRoot":"","sources":["../../src/cli/doctor-render.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAqB,EACrB,cAAsB,EACtB,OAAsB,EACtB,KAAgC;IAEhC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1B,KAAK,CACH,MAAM;aACH,GAAG,CACF,KAAK,CAAC,EAAE,CACN,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CACjE;aACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAiB;QAC3B,MAAM;QACN,UAAU,EAAE,MAAM,eAAe,CAAC;YAChC,WAAW,EAAE,cAAc;YAC3B,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;SAClC,CAAC;KACH,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { probeKaneReadiness } from "../core/kane-cli.js";
|
|
2
2
|
import { probeSonarReadiness } from "../core/sonar-integration.js";
|
|
3
|
+
import type { GateReport } from "./gate-report-types.js";
|
|
3
4
|
import { runUpdateCheck } from "./update-check.js";
|
|
4
5
|
/** Status values emitted by Lisa doctor checks. */
|
|
5
6
|
type DoctorStatus = "ok" | "warn" | "fail";
|
|
@@ -12,6 +13,20 @@ export interface DoctorCheck {
|
|
|
12
13
|
/** Machine-readable doctor result. */
|
|
13
14
|
export interface DoctorResult {
|
|
14
15
|
checks: DoctorCheck[];
|
|
16
|
+
/**
|
|
17
|
+
* The deterministic gate report, present only under `--json`.
|
|
18
|
+
*
|
|
19
|
+
* A separate key rather than more `DoctorCheck` rows, because `DoctorStatus`
|
|
20
|
+
* is `ok | warn | fail` and has no unknown state. A report whose central
|
|
21
|
+
* contract is that "not checkable here" is never folded into a pass cannot
|
|
22
|
+
* be expressed in a three-valued shape that lacks it — flattening it would
|
|
23
|
+
* be the exact defect the report exists to detect, committed by the report.
|
|
24
|
+
*
|
|
25
|
+
* It also does not touch the exit code. The report describes what a project
|
|
26
|
+
* has configured, and a project that has configured nothing is the modal
|
|
27
|
+
* consumer, not a failing one.
|
|
28
|
+
*/
|
|
29
|
+
gateReport?: GateReport;
|
|
15
30
|
}
|
|
16
31
|
/** Options parsed for `lisa doctor`. */
|
|
17
32
|
export interface DoctorOptions {
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAmBnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,mDAAmD;AACnD,KAAK,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAO3C,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;CACjD;AAaD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAChD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,CAyBtB;AA4MD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC7C,OAAO,CAAC,YAAY,CAAC,CA2EvB"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -20,6 +20,7 @@ import { checkReusableWorkflowRefs } from "./doctor-reusable-workflow-refs.js";
|
|
|
20
20
|
import { checkWorkerEpoch } from "./doctor-worker-epoch.js";
|
|
21
21
|
import { checkSerializeLegsContract } from "./doctor-serialize-legs-contract.js";
|
|
22
22
|
import { checkApplyFailure } from "./doctor-apply-failure.js";
|
|
23
|
+
import { renderDoctorResult } from "./doctor-render.js";
|
|
23
24
|
import { checkSkipJobsMigration } from "./doctor-skip-jobs-migration.js";
|
|
24
25
|
import { checkTraceabilityGate } from "./doctor-traceability-gate.js";
|
|
25
26
|
import { checkWorktreeHygiene } from "./doctor-worktree-hygiene.js";
|
|
@@ -317,15 +318,7 @@ export async function runDoctor(targetPath, options, dependencies = {}) {
|
|
|
317
318
|
? [await checkRepositoryReadiness(resolvedTarget)]
|
|
318
319
|
: []),
|
|
319
320
|
];
|
|
320
|
-
const result =
|
|
321
|
-
if (options.json) {
|
|
322
|
-
deps.write(JSON.stringify(result, null, 2));
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
deps.write(checks
|
|
326
|
-
.map(check => `${check.status.toUpperCase()} ${check.name}: ${check.detail}`)
|
|
327
|
-
.join("\n"));
|
|
328
|
-
}
|
|
321
|
+
const result = await renderDoctorResult(checks, resolvedTarget, options, deps.write);
|
|
329
322
|
if (checks.some(check => check.status === "fail")) {
|
|
330
323
|
deps.setExitCode(1);
|
|
331
324
|
}
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AACnD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AACjE,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive one (gate, moment) cell — the report's real unit.
|
|
3
|
+
*
|
|
4
|
+
* The pair is the unit rather than the gate because the verdict is genuinely
|
|
5
|
+
* mixed per moment: in this repository `conflict-residue` is bucket A at push
|
|
6
|
+
* and bucket B at pull-request. A gate-shaped row would have to summarise that
|
|
7
|
+
* into a single cell, and every summary of a mixed verdict is a place for a
|
|
8
|
+
* green to hide.
|
|
9
|
+
* @module cli/gate-report-cells
|
|
10
|
+
*/
|
|
11
|
+
import type { GateRegistryModule, RegistryGate, ResolvedGate } from "./gate-report-registry.js";
|
|
12
|
+
import { type HookEvidence } from "./gate-report-executors.js";
|
|
13
|
+
import type { Bucket, ExecutorEvidence, Finding, GateMomentCell, MergeBlock, ProofMode, TaskProvenance } from "./gate-report-types.js";
|
|
14
|
+
/** Everything one moment's cells are derived from. */
|
|
15
|
+
export interface MomentContext {
|
|
16
|
+
/** The moment, `:environment` suffix included. */
|
|
17
|
+
readonly moment: string;
|
|
18
|
+
/** `resolveMoment(..., includeOff: true)` keyed by gate id, or null. */
|
|
19
|
+
readonly resolved: ReadonlyMap<string, ResolvedGate> | null;
|
|
20
|
+
/** Why `resolved` is null, when it is. */
|
|
21
|
+
readonly failure: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** Inputs shared by every cell in the report. */
|
|
24
|
+
export interface CellContext {
|
|
25
|
+
readonly registry: GateRegistryModule;
|
|
26
|
+
readonly gates: Record<string, unknown>;
|
|
27
|
+
readonly hooks: HookEvidence;
|
|
28
|
+
/** `package.json` scripts, or null when it could not be read. */
|
|
29
|
+
readonly scripts: Readonly<Record<string, string>> | null;
|
|
30
|
+
/** The runner a command is built with. */
|
|
31
|
+
readonly runner: string;
|
|
32
|
+
/** The workflow name branch-protection contexts are built from. */
|
|
33
|
+
readonly workflowName: string;
|
|
34
|
+
/** Tier 2: the live ruleset's answer for one expected context. */
|
|
35
|
+
readonly blocksMerge: (moment: string, expectedContext: string | null) => Finding<MergeBlock>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A gate-level `run` override, which applies at every declared moment.
|
|
39
|
+
* @param gates - The gates block
|
|
40
|
+
* @param id - Gate id
|
|
41
|
+
* @returns The task, or null
|
|
42
|
+
*/
|
|
43
|
+
export declare function gateLevelRun(gates: Record<string, unknown>, id: string): string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Which of the four sources supplies this pair's task.
|
|
46
|
+
*
|
|
47
|
+
* Named rather than merely resolved: a per-moment `run` and a gate-level `run`
|
|
48
|
+
* produce identical commands and mean different things, and a registry `taskAt`
|
|
49
|
+
* swap ships to every project while a project `run` does not.
|
|
50
|
+
* @param options - Resolution inputs
|
|
51
|
+
* @param options.entry - The raw per-moment entry
|
|
52
|
+
* @param options.gateRun - A gate-level project `run`
|
|
53
|
+
* @param options.definition - The registry gate
|
|
54
|
+
* @param options.family - The moment's family
|
|
55
|
+
* @returns The winning source and its task
|
|
56
|
+
*/
|
|
57
|
+
export declare function resolveProvenance(options: {
|
|
58
|
+
entry: Record<string, unknown> | null;
|
|
59
|
+
gateRun: string | null;
|
|
60
|
+
definition: RegistryGate | undefined;
|
|
61
|
+
family: string;
|
|
62
|
+
}): {
|
|
63
|
+
task: string | null;
|
|
64
|
+
provenance: TaskProvenance;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Whether `package.json` defines the task the pair resolves to.
|
|
68
|
+
* @param scripts - The scripts block, or null when unreadable
|
|
69
|
+
* @param task - The resolved task
|
|
70
|
+
* @returns A three-state finding, never a defaulted pass
|
|
71
|
+
*/
|
|
72
|
+
export declare function commandExistsFinding(scripts: Readonly<Record<string, string>> | null, task: string | null): Finding<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Classify one pair into a bucket, or decline to.
|
|
75
|
+
*
|
|
76
|
+
* D is never a fallback. "Nothing runs and nothing is declared" requires
|
|
77
|
+
* proving that no executor exists, and in a consumer the CI half of that proof
|
|
78
|
+
* lives in a file the project does not have — so an unclassifiable pair says
|
|
79
|
+
* so instead of being quietly counted as dark.
|
|
80
|
+
* @param options - Classification inputs
|
|
81
|
+
* @param options.active - Whether the declaration puts the gate into service
|
|
82
|
+
* @param options.mode - How the gate is proved
|
|
83
|
+
* @param options.commandExists - Whether the task exists
|
|
84
|
+
* @param options.executors - Executors proved for this pair
|
|
85
|
+
* @returns A bucket, or an explicit refusal
|
|
86
|
+
*/
|
|
87
|
+
export declare function classifyBucket(options: {
|
|
88
|
+
active: boolean;
|
|
89
|
+
mode: ProofMode | null;
|
|
90
|
+
commandExists: Finding<boolean>;
|
|
91
|
+
executors: readonly ExecutorEvidence[];
|
|
92
|
+
}): Finding<Bucket>;
|
|
93
|
+
/**
|
|
94
|
+
* Build one cell.
|
|
95
|
+
* @param context - Report-wide inputs
|
|
96
|
+
* @param momentContext - Per-moment inputs
|
|
97
|
+
* @param id - Gate id
|
|
98
|
+
* @returns The cell
|
|
99
|
+
*/
|
|
100
|
+
export declare function buildCell(context: CellContext, momentContext: MomentContext, id: string): GateMomentCell;
|
|
101
|
+
//# sourceMappingURL=gate-report-cells.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-report-cells.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EACV,MAAM,EAEN,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,UAAU,EACV,SAAS,EACT,cAAc,EACf,MAAM,wBAAwB,CAAC;AAWhC,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5D,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1D,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,CACpB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,IAAI,KAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B;AAgCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,EAAE,EAAE,MAAM,GACT,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAetD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,EAChD,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACxC,GAAG,OAAO,CAAC,MAAM,CAAC,CAclB;AAyBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,EAAE,EAAE,MAAM,GACT,cAAc,CAwDhB"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { executorsFor } from "./gate-report-executors.js";
|
|
2
|
+
/** Levels that put a gate into service. `off` is a declaration, not service. */
|
|
3
|
+
const ACTIVE_LEVELS = new Set(["required", "optional"]);
|
|
4
|
+
/** Every level the settings file may carry, `off` included. */
|
|
5
|
+
const DECLARED_LEVELS = new Set([...ACTIVE_LEVELS, "off"]);
|
|
6
|
+
/** The state of a gate the settings file never mentions at a moment. */
|
|
7
|
+
const UNDECLARED = "not-declared";
|
|
8
|
+
/** Tier 3 is the same refusal everywhere, so it is written once. */
|
|
9
|
+
const TIER_THREE = {
|
|
10
|
+
state: "unknown",
|
|
11
|
+
reason: "determined-by-quality-yml",
|
|
12
|
+
message: "Whether the CI job reads this declaration or runs a hardcoded command is written in quality.yml, which this project does not have — it calls the reusable workflow by ref.",
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The raw per-moment entry the settings file holds for one gate.
|
|
16
|
+
* @param gates - The gates block
|
|
17
|
+
* @param id - Gate id
|
|
18
|
+
* @param moment - Moment key
|
|
19
|
+
* @returns The entry, normalised to an object, or null when absent
|
|
20
|
+
*/
|
|
21
|
+
function rawEntry(gates, id, moment) {
|
|
22
|
+
const gate = gates[id];
|
|
23
|
+
if (typeof gate !== "object" || gate === null)
|
|
24
|
+
return null;
|
|
25
|
+
const raw = gate[moment];
|
|
26
|
+
if (typeof raw === "string")
|
|
27
|
+
return { level: raw };
|
|
28
|
+
if (typeof raw === "object" && raw !== null) {
|
|
29
|
+
return raw;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A gate-level `run` override, which applies at every declared moment.
|
|
35
|
+
* @param gates - The gates block
|
|
36
|
+
* @param id - Gate id
|
|
37
|
+
* @returns The task, or null
|
|
38
|
+
*/
|
|
39
|
+
export function gateLevelRun(gates, id) {
|
|
40
|
+
const gate = gates[id];
|
|
41
|
+
if (typeof gate !== "object" || gate === null)
|
|
42
|
+
return null;
|
|
43
|
+
const run = gate.run;
|
|
44
|
+
return typeof run === "string" ? run : null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Which of the four sources supplies this pair's task.
|
|
48
|
+
*
|
|
49
|
+
* Named rather than merely resolved: a per-moment `run` and a gate-level `run`
|
|
50
|
+
* produce identical commands and mean different things, and a registry `taskAt`
|
|
51
|
+
* swap ships to every project while a project `run` does not.
|
|
52
|
+
* @param options - Resolution inputs
|
|
53
|
+
* @param options.entry - The raw per-moment entry
|
|
54
|
+
* @param options.gateRun - A gate-level project `run`
|
|
55
|
+
* @param options.definition - The registry gate
|
|
56
|
+
* @param options.family - The moment's family
|
|
57
|
+
* @returns The winning source and its task
|
|
58
|
+
*/
|
|
59
|
+
export function resolveProvenance(options) {
|
|
60
|
+
const { entry, gateRun, definition, family } = options;
|
|
61
|
+
const momentRun = entry?.run;
|
|
62
|
+
if (typeof momentRun === "string") {
|
|
63
|
+
return { task: momentRun, provenance: "moment-run" };
|
|
64
|
+
}
|
|
65
|
+
if (gateRun !== null)
|
|
66
|
+
return { task: gateRun, provenance: "gate-run" };
|
|
67
|
+
const swap = definition?.taskAt?.[family];
|
|
68
|
+
if (typeof swap === "string") {
|
|
69
|
+
return { task: swap, provenance: "registry-task-at" };
|
|
70
|
+
}
|
|
71
|
+
if (typeof definition?.task === "string") {
|
|
72
|
+
return { task: definition.task, provenance: "registry-task" };
|
|
73
|
+
}
|
|
74
|
+
return { task: null, provenance: "none" };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether `package.json` defines the task the pair resolves to.
|
|
78
|
+
* @param scripts - The scripts block, or null when unreadable
|
|
79
|
+
* @param task - The resolved task
|
|
80
|
+
* @returns A three-state finding, never a defaulted pass
|
|
81
|
+
*/
|
|
82
|
+
export function commandExistsFinding(scripts, task) {
|
|
83
|
+
if (task === null) {
|
|
84
|
+
return {
|
|
85
|
+
state: "not-applicable",
|
|
86
|
+
reason: "no-task",
|
|
87
|
+
message: "This gate resolves to no task at this moment.",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (scripts === null) {
|
|
91
|
+
return {
|
|
92
|
+
state: "unknown",
|
|
93
|
+
reason: "package-json-unreadable",
|
|
94
|
+
message: "package.json could not be read, so whether this command exists is unknown.",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return { state: "verified", value: Object.hasOwn(scripts, task) };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Classify one pair into a bucket, or decline to.
|
|
101
|
+
*
|
|
102
|
+
* D is never a fallback. "Nothing runs and nothing is declared" requires
|
|
103
|
+
* proving that no executor exists, and in a consumer the CI half of that proof
|
|
104
|
+
* lives in a file the project does not have — so an unclassifiable pair says
|
|
105
|
+
* so instead of being quietly counted as dark.
|
|
106
|
+
* @param options - Classification inputs
|
|
107
|
+
* @param options.active - Whether the declaration puts the gate into service
|
|
108
|
+
* @param options.mode - How the gate is proved
|
|
109
|
+
* @param options.commandExists - Whether the task exists
|
|
110
|
+
* @param options.executors - Executors proved for this pair
|
|
111
|
+
* @returns A bucket, or an explicit refusal
|
|
112
|
+
*/
|
|
113
|
+
export function classifyBucket(options) {
|
|
114
|
+
const { active, mode, commandExists, executors } = options;
|
|
115
|
+
const missingCommand = commandExists.state === "verified" && !commandExists.value;
|
|
116
|
+
if (active && mode === "run" && missingCommand) {
|
|
117
|
+
return { state: "verified", value: "C" };
|
|
118
|
+
}
|
|
119
|
+
if (active && executors.some(entry => entry.kind === "gate-runner")) {
|
|
120
|
+
return { state: "verified", value: "A" };
|
|
121
|
+
}
|
|
122
|
+
if (!active && executors.some(entry => entry.kind !== "gate-runner")) {
|
|
123
|
+
return { state: "verified", value: "B" };
|
|
124
|
+
}
|
|
125
|
+
return TIER_THREE;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The branch-protection context a `required` declaration implies.
|
|
129
|
+
* @param options - Context inputs
|
|
130
|
+
* @param options.level - The declared level
|
|
131
|
+
* @param options.mode - How the gate is proved
|
|
132
|
+
* @param options.awaits - The awaited signal's own name
|
|
133
|
+
* @param options.label - The gate's CI job name
|
|
134
|
+
* @param options.workflowName - The calling workflow's name
|
|
135
|
+
* @returns The expected context, or null
|
|
136
|
+
*/
|
|
137
|
+
function expectedContextFor(options) {
|
|
138
|
+
const { level, mode, awaits, label, workflowName } = options;
|
|
139
|
+
if (level !== "required")
|
|
140
|
+
return null;
|
|
141
|
+
if (mode === "await")
|
|
142
|
+
return awaits;
|
|
143
|
+
return `${workflowName} / ${label}`;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build one cell.
|
|
147
|
+
* @param context - Report-wide inputs
|
|
148
|
+
* @param momentContext - Per-moment inputs
|
|
149
|
+
* @param id - Gate id
|
|
150
|
+
* @returns The cell
|
|
151
|
+
*/
|
|
152
|
+
export function buildCell(context, momentContext, id) {
|
|
153
|
+
const { registry, gates, hooks, scripts, runner, workflowName } = context;
|
|
154
|
+
const { moment, resolved, failure } = momentContext;
|
|
155
|
+
const definition = registry.REGISTRY[id];
|
|
156
|
+
const family = registry.momentFamily(moment);
|
|
157
|
+
const legal = definition?.moments.includes(family) === true;
|
|
158
|
+
const entry = rawEntry(gates, id, moment);
|
|
159
|
+
const gateRun = gateLevelRun(gates, id);
|
|
160
|
+
const { task, provenance } = resolveProvenance({
|
|
161
|
+
entry,
|
|
162
|
+
gateRun,
|
|
163
|
+
definition,
|
|
164
|
+
family,
|
|
165
|
+
});
|
|
166
|
+
const hit = resolved?.get(id);
|
|
167
|
+
const declaration = declarationOf(entry, resolved, failure, id);
|
|
168
|
+
const active = ACTIVE_LEVELS.has(declaration);
|
|
169
|
+
const mode = modeOf(declaration, hit);
|
|
170
|
+
const awaits = hit?.awaits ?? null;
|
|
171
|
+
const cellTask = mode === "await" || mode === "intercept" ? null : task;
|
|
172
|
+
const commandExists = commandExistsFinding(scripts, cellTask);
|
|
173
|
+
const executors = executorsFor(hooks, {
|
|
174
|
+
moment,
|
|
175
|
+
gateId: id,
|
|
176
|
+
task: cellTask,
|
|
177
|
+
declared: active,
|
|
178
|
+
});
|
|
179
|
+
const expectedContext = expectedContextFor({
|
|
180
|
+
level: declaration,
|
|
181
|
+
mode,
|
|
182
|
+
awaits,
|
|
183
|
+
label: definition?.label ?? id,
|
|
184
|
+
workflowName,
|
|
185
|
+
});
|
|
186
|
+
return {
|
|
187
|
+
moment,
|
|
188
|
+
legal,
|
|
189
|
+
declaration,
|
|
190
|
+
mode,
|
|
191
|
+
awaits,
|
|
192
|
+
task: cellTask,
|
|
193
|
+
command: cellCommand(mode, cellTask, runner),
|
|
194
|
+
provenance: cellTask === null ? "none" : provenance,
|
|
195
|
+
commandExists,
|
|
196
|
+
executors,
|
|
197
|
+
expectedContext,
|
|
198
|
+
blocksMerge: context.blocksMerge(moment, expectedContext),
|
|
199
|
+
facadeReadsDeclaration: TIER_THREE,
|
|
200
|
+
bucket: legal
|
|
201
|
+
? classifyBucket({ active, mode, commandExists, executors })
|
|
202
|
+
: {
|
|
203
|
+
state: "not-applicable",
|
|
204
|
+
reason: "moment-illegal",
|
|
205
|
+
message: `The registry does not permit declaring this gate at ${moment}.`,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* What the settings file says, degrading to `not-declared` only when it is.
|
|
211
|
+
* @param entry - The raw per-moment entry
|
|
212
|
+
* @param resolved - Resolved gates at this moment, or null
|
|
213
|
+
* @param failure - Why resolution failed, when it did
|
|
214
|
+
* @param id - Gate id
|
|
215
|
+
* @returns The declaration state
|
|
216
|
+
*/
|
|
217
|
+
function declarationOf(entry, resolved, failure, id) {
|
|
218
|
+
if (resolved !== null)
|
|
219
|
+
return asDeclaration(resolved.get(id)?.level);
|
|
220
|
+
if (failure !== null && entry !== null)
|
|
221
|
+
return asDeclaration(entry.level);
|
|
222
|
+
return UNDECLARED;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Narrow a raw level to a declaration state.
|
|
226
|
+
*
|
|
227
|
+
* Anything that is not one of the three levels is `not-declared` — including a
|
|
228
|
+
* level Lisa does not know, which is a typo rather than a claim.
|
|
229
|
+
* @param level - The raw level
|
|
230
|
+
* @returns The declaration state
|
|
231
|
+
*/
|
|
232
|
+
function asDeclaration(level) {
|
|
233
|
+
return DECLARED_LEVELS.has(level)
|
|
234
|
+
? level
|
|
235
|
+
: UNDECLARED;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* The proof mode for a cell.
|
|
239
|
+
* @param declaration - What the settings file says
|
|
240
|
+
* @param hit - The resolved gate, when resolution succeeded
|
|
241
|
+
* @returns The mode, or null when nothing is declared
|
|
242
|
+
*/
|
|
243
|
+
function modeOf(declaration, hit) {
|
|
244
|
+
if (declaration === UNDECLARED)
|
|
245
|
+
return null;
|
|
246
|
+
if (declaration === "off")
|
|
247
|
+
return "off";
|
|
248
|
+
const mode = hit?.mode;
|
|
249
|
+
if (mode === "run" || mode === "await" || mode === "intercept")
|
|
250
|
+
return mode;
|
|
251
|
+
return "run";
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* The command a cell would run.
|
|
255
|
+
*
|
|
256
|
+
* Built for an undeclared pair too. "What would run here if this were turned
|
|
257
|
+
* on, and does that command exist" is the question a project with zero
|
|
258
|
+
* declarations opened the report to ask.
|
|
259
|
+
* @param mode - Proof mode
|
|
260
|
+
* @param task - Resolved task
|
|
261
|
+
* @param runner - The project's runner
|
|
262
|
+
* @returns The command, or null
|
|
263
|
+
*/
|
|
264
|
+
function cellCommand(mode, task, runner) {
|
|
265
|
+
if (task === null || mode === "off")
|
|
266
|
+
return null;
|
|
267
|
+
return `${runner} ${task}`;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=gate-report-cells.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-report-cells.js","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the settings file for the gate report.
|
|
3
|
+
*
|
|
4
|
+
* Deliberately a separate module so that a refusal is impossible to lose. The
|
|
5
|
+
* registry REFUSES a runner that cannot run a task, and refuses a gates block
|
|
6
|
+
* with an unknown moment key; both throw. Swallowed, either would produce a
|
|
7
|
+
* report indistinguishable from a project that simply declared nothing — which
|
|
8
|
+
* is precisely the reading this report exists to make impossible.
|
|
9
|
+
* @module cli/gate-report-config
|
|
10
|
+
*/
|
|
11
|
+
import type { GateRegistryModule } from "./gate-report-registry.js";
|
|
12
|
+
import type { Finding } from "./gate-report-types.js";
|
|
13
|
+
/** The settings file, parsed, with every failure kept explicit. */
|
|
14
|
+
export interface ParsedConfig {
|
|
15
|
+
readonly gates: Record<string, unknown>;
|
|
16
|
+
readonly runner: string;
|
|
17
|
+
readonly runnerFinding: Finding<string>;
|
|
18
|
+
readonly runnerSource: "declared" | "default" | "unknown";
|
|
19
|
+
readonly problems: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Read `.lisa.config.json`, degrading a refusal into a stated problem.
|
|
23
|
+
* @param registry - The shipped registry
|
|
24
|
+
* @param projectRoot - Project root
|
|
25
|
+
* @returns The parsed config
|
|
26
|
+
*/
|
|
27
|
+
export declare function readConfig(registry: GateRegistryModule, projectRoot: string): ParsedConfig;
|
|
28
|
+
//# sourceMappingURL=gate-report-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-report-config.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,MAAM,GAClB,YAAY,CAwBd"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read `.lisa.config.json`, degrading a refusal into a stated problem.
|
|
3
|
+
* @param registry - The shipped registry
|
|
4
|
+
* @param projectRoot - Project root
|
|
5
|
+
* @returns The parsed config
|
|
6
|
+
*/
|
|
7
|
+
export function readConfig(registry, projectRoot) {
|
|
8
|
+
try {
|
|
9
|
+
const { runner, gates } = registry.readGates(projectRoot);
|
|
10
|
+
return {
|
|
11
|
+
gates,
|
|
12
|
+
runner,
|
|
13
|
+
runnerFinding: { state: "verified", value: runner },
|
|
14
|
+
runnerSource: runner === registry.DEFAULT_RUNNER ? "default" : "declared",
|
|
15
|
+
problems: registry.validateGates(gates),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
20
|
+
return {
|
|
21
|
+
gates: {},
|
|
22
|
+
runner: registry.DEFAULT_RUNNER,
|
|
23
|
+
runnerFinding: {
|
|
24
|
+
state: "unknown",
|
|
25
|
+
reason: "config-unreadable",
|
|
26
|
+
message,
|
|
27
|
+
},
|
|
28
|
+
runnerSource: "unknown",
|
|
29
|
+
problems: [message],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=gate-report-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-report-config.js","sourceRoot":"","sources":["../../src/cli/gate-report-config.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,QAA4B,EAC5B,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO;YACL,KAAK;YACL,MAAM;YACN,aAAa,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE;YACnD,YAAY,EAAE,MAAM,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;YACzE,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,QAAQ,CAAC,cAAc;YAC/B,aAAa,EAAE;gBACb,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,mBAAmB;gBAC3B,OAAO;aACR;YACD,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
|