@codyswann/lisa 2.310.4 → 2.311.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-readiness-supply-chain-go-assess.d.ts +8 -0
- package/dist/cli/doctor-readiness-supply-chain-go-assess.d.ts.map +1 -0
- package/dist/cli/doctor-readiness-supply-chain-go-assess.js +132 -0
- package/dist/cli/doctor-readiness-supply-chain-go-assess.js.map +1 -0
- package/dist/cli/doctor-readiness-supply-chain-go.d.ts +39 -0
- package/dist/cli/doctor-readiness-supply-chain-go.d.ts.map +1 -0
- package/dist/cli/doctor-readiness-supply-chain-go.js +249 -0
- package/dist/cli/doctor-readiness-supply-chain-go.js.map +1 -0
- package/dist/cli/doctor-readiness-supply-chain.d.ts.map +1 -1
- package/dist/cli/doctor-readiness-supply-chain.js +20 -7
- package/dist/cli/doctor-readiness-supply-chain.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +4 -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/package-lisa/package.lisa.json +2 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReadinessDimensionRecord } from "./doctor-readiness-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Assess Go module dependencies when no JavaScript manifest exists.
|
|
4
|
+
* @param root - Repository root to assess
|
|
5
|
+
* @returns The B5 record, or null when no Go manifest exists
|
|
6
|
+
*/
|
|
7
|
+
export declare function assessGoDependenciesSupplyChainDimension(root: string): Promise<ReadinessDimensionRecord | null>;
|
|
8
|
+
//# sourceMappingURL=doctor-readiness-supply-chain-go-assess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain-go-assess.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain-go-assess.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AA+F5E;;;;GAIG;AACH,wBAAsB,wCAAwC,CAC5D,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CA6C1C"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go module B5 readiness record construction.
|
|
3
|
+
* @module cli/doctor-readiness-supply-chain-go-assess
|
|
4
|
+
*/
|
|
5
|
+
import { informationalFindings } from "./doctor-readiness-shared.js";
|
|
6
|
+
import { DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID, MAX_EVIDENCE_LINES, SUPPLY_CHAIN_BLOCKER_ID, } from "./doctor-readiness-supply-chain-constants.js";
|
|
7
|
+
import { findGoAuditGate, findGoLockfile, isFloatingGoSpec, readGoManifest, } from "./doctor-readiness-supply-chain-go.js";
|
|
8
|
+
const GO_MOD = "go.mod";
|
|
9
|
+
const GO_SUM = "go.sum";
|
|
10
|
+
/**
|
|
11
|
+
* Build the rubric-shaped B5 finding from evidence lines.
|
|
12
|
+
* @param violations - Evidence lines
|
|
13
|
+
* @returns The B5 finding
|
|
14
|
+
*/
|
|
15
|
+
function supplyChainFinding(violations) {
|
|
16
|
+
const shown = violations.slice(0, MAX_EVIDENCE_LINES);
|
|
17
|
+
const overflow = violations.length - shown.length;
|
|
18
|
+
return {
|
|
19
|
+
blocker: SUPPLY_CHAIN_BLOCKER_ID,
|
|
20
|
+
invariant_violated: "belief that the owned surface still works rests on a repeatable install " +
|
|
21
|
+
"and a standing audit, not on hope",
|
|
22
|
+
evidence: shown.join(" | ") +
|
|
23
|
+
(overflow > 0
|
|
24
|
+
? ` | (+${overflow} further finding(s) of the same kind)`
|
|
25
|
+
: ""),
|
|
26
|
+
why_proof_missed: "the test suite proves things about the code in the tree it happened to " +
|
|
27
|
+
"install, so a tree that drifts — or one carrying a known advisory nobody " +
|
|
28
|
+
"checks for — still reports green",
|
|
29
|
+
root_correction: "commit a module checksum file, name a version for every module " +
|
|
30
|
+
"requirement, and run a Go dependency audit on every push",
|
|
31
|
+
machinery_to_remove: [
|
|
32
|
+
"manual dependency review with no standing module checksum and audit gate",
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build a stated-reason SKIP record.
|
|
38
|
+
* @param reason - Why the dimension was not assessed
|
|
39
|
+
* @returns The SKIP dimension record
|
|
40
|
+
*/
|
|
41
|
+
function skipRecord(reason) {
|
|
42
|
+
return {
|
|
43
|
+
id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
|
|
44
|
+
status: "SKIP",
|
|
45
|
+
findings: [{ reason, skip: true }],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build B5 evidence lines for a Go module project.
|
|
50
|
+
* @param specs - Go module requirements under assessment
|
|
51
|
+
* @param lockfile - Committed checksum file path, or null when absent
|
|
52
|
+
* @param auditGate - Audit gate path, or null when absent
|
|
53
|
+
* @returns Evidence lines for B5 violations
|
|
54
|
+
*/
|
|
55
|
+
function goSupplyChainViolations(specs, lockfile, auditGate) {
|
|
56
|
+
if (specs.length === 0) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
return [
|
|
60
|
+
...(lockfile === null
|
|
61
|
+
? [
|
|
62
|
+
`\`${GO_MOD}\` declares ${specs.length} Go module requirement(s) ` +
|
|
63
|
+
`but no \`${GO_SUM}\` is committed — two module downloads can ` +
|
|
64
|
+
"resolve to different transitive checksums, so what was " +
|
|
65
|
+
"validated is not provably what gets installed",
|
|
66
|
+
]
|
|
67
|
+
: []),
|
|
68
|
+
...specs
|
|
69
|
+
.filter(spec => isFloatingGoSpec(spec.spec))
|
|
70
|
+
.map(spec => `\`${GO_MOD}\` module \`${spec.name}\` names no pinned version, so ` +
|
|
71
|
+
"Go may resolve a branch or latest module state rather than a " +
|
|
72
|
+
"version any run intentionally chose"),
|
|
73
|
+
...(auditGate === null
|
|
74
|
+
? [
|
|
75
|
+
"no Go dependency-audit gate was found anywhere — no " +
|
|
76
|
+
"`govulncheck`/`osv-scanner` step in `.github/workflows/*.yml`, " +
|
|
77
|
+
"none in a git hook, and no `dependabot.yml` gomod entry or Go " +
|
|
78
|
+
"Renovate manager — so a newly disclosed advisory in this module " +
|
|
79
|
+
"tree would never be noticed by anything",
|
|
80
|
+
]
|
|
81
|
+
: []),
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Assess Go module dependencies when no JavaScript manifest exists.
|
|
86
|
+
* @param root - Repository root to assess
|
|
87
|
+
* @returns The B5 record, or null when no Go manifest exists
|
|
88
|
+
*/
|
|
89
|
+
export async function assessGoDependenciesSupplyChainDimension(root) {
|
|
90
|
+
const go = await readGoManifest(root);
|
|
91
|
+
if (go.kind === "absent") {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
if (go.specs.length === 0) {
|
|
95
|
+
return skipRecord("`go.mod` was found but declares no module requirements, so this " +
|
|
96
|
+
"repository owns no Go third-party surface a confidence model could " +
|
|
97
|
+
"cover; supply-chain confidence is not established either way");
|
|
98
|
+
}
|
|
99
|
+
const lockfile = await findGoLockfile(root);
|
|
100
|
+
const auditGate = await findGoAuditGate(root);
|
|
101
|
+
const violations = goSupplyChainViolations(go.specs, lockfile, auditGate);
|
|
102
|
+
const observations = [
|
|
103
|
+
...(lockfile === null ? [] : [`Go checksum file in use: \`${lockfile}\`.`]),
|
|
104
|
+
...(auditGate === null
|
|
105
|
+
? []
|
|
106
|
+
: [`Go dependency-audit gate declared in \`${auditGate}\`.`]),
|
|
107
|
+
];
|
|
108
|
+
if (violations.length > 0) {
|
|
109
|
+
return {
|
|
110
|
+
id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
|
|
111
|
+
status: "FAIL",
|
|
112
|
+
findings: [
|
|
113
|
+
supplyChainFinding(violations),
|
|
114
|
+
...informationalFindings(observations),
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
|
|
120
|
+
status: "PASS",
|
|
121
|
+
findings: [
|
|
122
|
+
{
|
|
123
|
+
evidence: `Inspected ${go.specs.length} Go module requirement(s) in ` +
|
|
124
|
+
"`go.mod`: each module names a pinned version, `go.sum` is " +
|
|
125
|
+
"committed, and a Go dependency-audit gate is declared.",
|
|
126
|
+
checked: [SUPPLY_CHAIN_BLOCKER_ID],
|
|
127
|
+
},
|
|
128
|
+
...informationalFindings(observations),
|
|
129
|
+
],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=doctor-readiness-supply-chain-go-assess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain-go-assess.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain-go-assess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** One Go module requirement flattened from `go.mod`. */
|
|
2
|
+
export interface GoDependencySpec {
|
|
3
|
+
readonly manifestPath: "go.mod";
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly spec: string | null;
|
|
6
|
+
}
|
|
7
|
+
/** What reading a Go module manifest established. */
|
|
8
|
+
export type GoManifestOutcome = {
|
|
9
|
+
readonly kind: "absent";
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: "ok";
|
|
12
|
+
readonly manifestPath: "go.mod";
|
|
13
|
+
readonly specs: readonly GoDependencySpec[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Read the Go module dependency manifest when no JavaScript manifest exists.
|
|
17
|
+
* @param root - Repository root
|
|
18
|
+
* @returns Parsed Go module specs, or absent when this is not a Go module
|
|
19
|
+
*/
|
|
20
|
+
export declare function readGoManifest(root: string): Promise<GoManifestOutcome>;
|
|
21
|
+
/**
|
|
22
|
+
* Find the committed Go module checksum file.
|
|
23
|
+
* @param root - Repository root
|
|
24
|
+
* @returns The checksum file path, or null when none is committed
|
|
25
|
+
*/
|
|
26
|
+
export declare function findGoLockfile(root: string): Promise<string | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Find where the repository audits its Go module dependency tree.
|
|
29
|
+
* @param root - Repository root
|
|
30
|
+
* @returns The repo-relative path of the first Go audit gate found, or null
|
|
31
|
+
*/
|
|
32
|
+
export declare function findGoAuditGate(root: string): Promise<string | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Check whether a Go module requirement spec floats.
|
|
35
|
+
* @param spec - Version/pseudo-version from go.mod
|
|
36
|
+
* @returns True when the spec is absent or branch-like rather than pinned
|
|
37
|
+
*/
|
|
38
|
+
export declare function isFloatingGoSpec(spec: string | null): boolean;
|
|
39
|
+
//# sourceMappingURL=doctor-readiness-supply-chain-go.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain-go.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain-go.ts"],"names":[],"mappings":"AAkDA,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC7C,CAAC;AA+IN;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAM7E;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEzE;AA8CD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAE7D"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Go module scanning for the dependencies/supply-chain readiness producer
|
|
3
|
+
* (B5, PRD #1739, #1896).
|
|
4
|
+
* @module cli/doctor-readiness-supply-chain-go
|
|
5
|
+
*/
|
|
6
|
+
import { readdir } from "node:fs/promises";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
import { readFileOrNull } from "./doctor-readiness-shared.js";
|
|
9
|
+
/** Dependabot ecosystem spelling for Go module dependency updates. */
|
|
10
|
+
const GO_ECOSYSTEM_PATTERN = /package-ecosystem:\s*["']?gomod\b/i;
|
|
11
|
+
/** Commands and scanners that audit Go module dependencies. */
|
|
12
|
+
const GO_AUDIT_GATE_PATTERN = /\b(govulncheck|osv-scanner|snyk|trivy|grype)\b/i;
|
|
13
|
+
/** Renovate manager spelling for Go module dependencies. */
|
|
14
|
+
const RENOVATE_GO_PATTERN = /\b(gomod|golang|go_modules?)\b/i;
|
|
15
|
+
/** Files that may declare an audit gate in their text. */
|
|
16
|
+
const GATE_DIRECTORIES = [
|
|
17
|
+
path.join(".github", "workflows"),
|
|
18
|
+
".husky",
|
|
19
|
+
];
|
|
20
|
+
/** Single-file gate declarations checked by text match. */
|
|
21
|
+
const GATE_FILES = [
|
|
22
|
+
"lefthook.yml",
|
|
23
|
+
"lefthook.yaml",
|
|
24
|
+
".lefthook.yml",
|
|
25
|
+
];
|
|
26
|
+
/** Update bots whose mere presence is a standing confidence model. */
|
|
27
|
+
const UPDATE_BOT_FILES = [
|
|
28
|
+
path.join(".github", "dependabot.yml"),
|
|
29
|
+
path.join(".github", "dependabot.yaml"),
|
|
30
|
+
path.join(".github", "renovate.json"),
|
|
31
|
+
"renovate.json",
|
|
32
|
+
".renovaterc",
|
|
33
|
+
".renovaterc.json",
|
|
34
|
+
];
|
|
35
|
+
/** Go module specs that do not pin a version or pseudo-version. */
|
|
36
|
+
const FLOATING_SPECS = new Set([
|
|
37
|
+
"",
|
|
38
|
+
"latest",
|
|
39
|
+
"main",
|
|
40
|
+
"master",
|
|
41
|
+
"HEAD",
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Whether a repository-relative path exists.
|
|
45
|
+
* @param root - Repository root
|
|
46
|
+
* @param relativePath - Repo-relative path
|
|
47
|
+
* @returns True when the file could be read
|
|
48
|
+
*/
|
|
49
|
+
async function fileExists(root, relativePath) {
|
|
50
|
+
return (await readFileOrNull(root, relativePath)) !== null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* List files directly inside a repository-relative directory.
|
|
54
|
+
* @param root - Repository root
|
|
55
|
+
* @param relativeDir - Repo-relative directory
|
|
56
|
+
* @returns Repo-relative file paths
|
|
57
|
+
*/
|
|
58
|
+
async function listDirectory(root, relativeDir) {
|
|
59
|
+
try {
|
|
60
|
+
const entries = await readdir(path.join(root, relativeDir), {
|
|
61
|
+
withFileTypes: true,
|
|
62
|
+
});
|
|
63
|
+
return entries
|
|
64
|
+
.filter(entry => entry.isFile())
|
|
65
|
+
.map(entry => path.join(relativeDir, entry.name))
|
|
66
|
+
.sort((a, b) => a.localeCompare(b));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Remove a trailing line comment from go.mod syntax.
|
|
74
|
+
* @param line - Raw go.mod line
|
|
75
|
+
* @returns The uncommented prefix
|
|
76
|
+
*/
|
|
77
|
+
function stripGoComment(line) {
|
|
78
|
+
const commentStart = line.indexOf("//");
|
|
79
|
+
return (commentStart === -1 ? line : line.slice(0, commentStart)).trim();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse one module/version pair from a `require` line.
|
|
83
|
+
* @param line - Raw line without the leading `require` keyword
|
|
84
|
+
* @returns A dependency spec, or null for unparsable lines
|
|
85
|
+
*/
|
|
86
|
+
function parseRequireSpec(line) {
|
|
87
|
+
const parts = stripGoComment(line).split(/\s+/u).filter(Boolean);
|
|
88
|
+
const [name, spec] = parts;
|
|
89
|
+
if (name === undefined) {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
manifestPath: "go.mod",
|
|
94
|
+
name,
|
|
95
|
+
spec: spec ?? null,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether a trimmed go.mod line starts a require block.
|
|
100
|
+
* @param line - Trimmed go.mod line
|
|
101
|
+
* @returns True when the line is `require (`
|
|
102
|
+
*/
|
|
103
|
+
function startsRequireBlock(line) {
|
|
104
|
+
return line === "require (" || line === "require(";
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Append a parsed requirement if the line contains one.
|
|
108
|
+
* @param specs - Existing specs
|
|
109
|
+
* @param line - Raw requirement text
|
|
110
|
+
* @returns Specs with the parsed requirement appended when present
|
|
111
|
+
*/
|
|
112
|
+
function appendRequireSpec(specs, line) {
|
|
113
|
+
const spec = parseRequireSpec(line);
|
|
114
|
+
return spec === null ? specs : [...specs, spec];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Parse one go.mod line while tracking whether we are inside a require block.
|
|
118
|
+
* @param state - Current parser state
|
|
119
|
+
* @param rawLine - Raw go.mod line
|
|
120
|
+
* @returns Updated parser state
|
|
121
|
+
*/
|
|
122
|
+
function collectGoSpecLine(state, rawLine) {
|
|
123
|
+
const line = stripGoComment(rawLine);
|
|
124
|
+
if (line === "") {
|
|
125
|
+
return state;
|
|
126
|
+
}
|
|
127
|
+
if (state.inRequireBlock) {
|
|
128
|
+
return line === ")"
|
|
129
|
+
? { inRequireBlock: false, specs: state.specs }
|
|
130
|
+
: {
|
|
131
|
+
inRequireBlock: true,
|
|
132
|
+
specs: appendRequireSpec(state.specs, line),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (startsRequireBlock(line)) {
|
|
136
|
+
return { inRequireBlock: true, specs: state.specs };
|
|
137
|
+
}
|
|
138
|
+
if (line.startsWith("require ")) {
|
|
139
|
+
return {
|
|
140
|
+
inRequireBlock: false,
|
|
141
|
+
specs: appendRequireSpec(state.specs, line.slice("require ".length)),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return state;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Flatten Go module requirements from go.mod.
|
|
148
|
+
* @param source - go.mod source
|
|
149
|
+
* @returns Parsed module requirements
|
|
150
|
+
*/
|
|
151
|
+
function collectGoSpecs(source) {
|
|
152
|
+
return source
|
|
153
|
+
.split(/\r?\n/u)
|
|
154
|
+
.reduce((state, line) => collectGoSpecLine(state, line), { inRequireBlock: false, specs: [] }).specs;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Read the Go module dependency manifest when no JavaScript manifest exists.
|
|
158
|
+
* @param root - Repository root
|
|
159
|
+
* @returns Parsed Go module specs, or absent when this is not a Go module
|
|
160
|
+
*/
|
|
161
|
+
export async function readGoManifest(root) {
|
|
162
|
+
const source = await readFileOrNull(root, "go.mod");
|
|
163
|
+
if (source === null) {
|
|
164
|
+
return { kind: "absent" };
|
|
165
|
+
}
|
|
166
|
+
return { kind: "ok", manifestPath: "go.mod", specs: collectGoSpecs(source) };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Find the committed Go module checksum file.
|
|
170
|
+
* @param root - Repository root
|
|
171
|
+
* @returns The checksum file path, or null when none is committed
|
|
172
|
+
*/
|
|
173
|
+
export async function findGoLockfile(root) {
|
|
174
|
+
return (await fileExists(root, "go.sum")) ? "go.sum" : null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Whether an update-bot config watches Go module dependencies.
|
|
178
|
+
* @param botFile - Repo-relative bot config path
|
|
179
|
+
* @param source - The config's text
|
|
180
|
+
* @returns True when the bot covers Go modules
|
|
181
|
+
*/
|
|
182
|
+
function coversGoTree(botFile, source) {
|
|
183
|
+
return botFile.includes("dependabot")
|
|
184
|
+
? GO_ECOSYSTEM_PATTERN.test(source)
|
|
185
|
+
: RENOVATE_GO_PATTERN.test(source);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Extract a command-shaped line from CI/hook text.
|
|
189
|
+
* @param line - One source line
|
|
190
|
+
* @returns The executable command candidate, or null
|
|
191
|
+
*/
|
|
192
|
+
function executableCommandCandidate(line) {
|
|
193
|
+
const trimmed = line.trim();
|
|
194
|
+
if (trimmed === "" || trimmed.startsWith("#")) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
const commandish = trimmed.startsWith("- ")
|
|
198
|
+
? trimmed.slice(2).trimStart()
|
|
199
|
+
: trimmed;
|
|
200
|
+
if (commandish.toLowerCase().startsWith("run:")) {
|
|
201
|
+
const command = commandish.slice("run:".length).trim();
|
|
202
|
+
return command === "|" || command === ">" ? null : command;
|
|
203
|
+
}
|
|
204
|
+
return commandish;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Whether CI/hook text contains a real Go dependency audit command.
|
|
208
|
+
* @param source - File text
|
|
209
|
+
* @returns True when an executable command audits Go module dependencies
|
|
210
|
+
*/
|
|
211
|
+
function hasGoAuditCommand(source) {
|
|
212
|
+
return source.split(/\r?\n/u).some(line => {
|
|
213
|
+
const command = executableCommandCandidate(line);
|
|
214
|
+
return command !== null && GO_AUDIT_GATE_PATTERN.test(command);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Find where the repository audits its Go module dependency tree.
|
|
219
|
+
* @param root - Repository root
|
|
220
|
+
* @returns The repo-relative path of the first Go audit gate found, or null
|
|
221
|
+
*/
|
|
222
|
+
export async function findGoAuditGate(root) {
|
|
223
|
+
for (const botFile of UPDATE_BOT_FILES) {
|
|
224
|
+
const source = await readFileOrNull(root, botFile);
|
|
225
|
+
if (source !== null && coversGoTree(botFile, source)) {
|
|
226
|
+
return botFile.split(path.sep).join("/");
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const scanned = [
|
|
230
|
+
...(await Promise.all(GATE_DIRECTORIES.map(dir => listDirectory(root, dir)))).flat(),
|
|
231
|
+
...GATE_FILES,
|
|
232
|
+
];
|
|
233
|
+
for (const file of scanned) {
|
|
234
|
+
const source = await readFileOrNull(root, file);
|
|
235
|
+
if (source !== null && hasGoAuditCommand(source)) {
|
|
236
|
+
return file.split(path.sep).join("/");
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check whether a Go module requirement spec floats.
|
|
243
|
+
* @param spec - Version/pseudo-version from go.mod
|
|
244
|
+
* @returns True when the spec is absent or branch-like rather than pinned
|
|
245
|
+
*/
|
|
246
|
+
export function isFloatingGoSpec(spec) {
|
|
247
|
+
return spec === null || FLOATING_SPECS.has(spec.trim());
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=doctor-readiness-supply-chain-go.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain-go.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain-go.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,oCAAoC,CAAC;AAElE,+DAA+D;AAC/D,MAAM,qBAAqB,GAAG,iDAAiD,CAAC;AAEhF,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;AAE9D,0DAA0D;AAC1D,MAAM,gBAAgB,GAAsB;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,QAAQ;CACT,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,GAAsB;IACpC,cAAc;IACd,eAAe;IACf,eAAe;CAChB,CAAC;AAEF,sEAAsE;AACtE,MAAM,gBAAgB,GAAsB;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;IACrC,eAAe;IACf,aAAa;IACb,kBAAkB;CACnB,CAAC;AAEF,mEAAmE;AACnE,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,EAAE;IACF,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;CACP,CAAC,CAAC;AAkBH;;;;;GAKG;AACH,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,YAAoB;IAEpB,OAAO,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE;YAC1D,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,OAAO,OAAO;aACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aAC/B,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;aAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,YAAY,EAAE,QAAQ;QACtB,IAAI;QACJ,IAAI,EAAE,IAAI,IAAI,IAAI;KACnB,CAAC;AACJ,CAAC;AAQD;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,UAAU,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAAkC,EAClC,IAAY;IAEZ,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAA0B,EAC1B,OAAe;IAEf,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,GAAG;YACjB,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;YAC/C,CAAC,CAAC;gBACE,cAAc,EAAE,IAAI;gBACpB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;aAC5C,CAAC;IACR,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;SACrE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,MAAM;SACV,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CACL,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,EAC/C,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CACrC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,MAAc;IACnD,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;QAC9B,CAAC,CAAC,OAAO,CAAC;IACZ,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,OAAO,KAAK,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG;QACd,GAAG,CACD,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CACzE,CAAC,IAAI,EAAE;QACR,GAAG,UAAU;KACd,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,OAAO,IAAI,KAAK,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-supply-chain.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain.ts"],"names":[],"mappings":"AAyDA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AA2KtG;;;;;;;;GAQG;AACH,wBAAsB,sCAAsC,CAC1D,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,wBAAwB,CAAC,CAiEnC"}
|
|
@@ -32,6 +32,7 @@ import { auditExceptionViolations } from "./doctor-readiness-audit-allowlist.js"
|
|
|
32
32
|
import { collectSpecs, findAuditGate, findLockfile, findLockfileInstallGate, readManifest, } from "./doctor-readiness-supply-chain-scan.js";
|
|
33
33
|
import { assessRubyDependenciesSupplyChainDimension } from "./doctor-readiness-supply-chain-ruby-assess.js";
|
|
34
34
|
import { assessPythonDependenciesSupplyChainDimension } from "./doctor-readiness-supply-chain-python-assess.js";
|
|
35
|
+
import { assessGoDependenciesSupplyChainDimension } from "./doctor-readiness-supply-chain-go-assess.js";
|
|
35
36
|
import { DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID, MAX_EVIDENCE_LINES, SUPPLY_CHAIN_BLOCKER_ID, } from "./doctor-readiness-supply-chain-constants.js";
|
|
36
37
|
import { dependencyConfidenceObservations, dependencyConfidenceViolations, installTimeExecutionViolations, } from "./doctor-readiness-supply-chain-evidence.js";
|
|
37
38
|
import { resolveWorkspaceMembers, } from "./doctor-readiness-workspaces.js";
|
|
@@ -162,6 +163,22 @@ function skipRecord(reason) {
|
|
|
162
163
|
findings: [{ reason, skip: true }],
|
|
163
164
|
};
|
|
164
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Try non-JavaScript dependency models after package.json is absent or unreadable.
|
|
168
|
+
* @param root - Project root to assess
|
|
169
|
+
* @returns A non-JS B5 record, or null when no supported manifest exists
|
|
170
|
+
*/
|
|
171
|
+
async function assessNonJavaScriptDependenciesSupplyChainDimension(root) {
|
|
172
|
+
const rubyRecord = await assessRubyDependenciesSupplyChainDimension(root);
|
|
173
|
+
if (rubyRecord !== null) {
|
|
174
|
+
return rubyRecord;
|
|
175
|
+
}
|
|
176
|
+
const pythonRecord = await assessPythonDependenciesSupplyChainDimension(root);
|
|
177
|
+
if (pythonRecord !== null) {
|
|
178
|
+
return pythonRecord;
|
|
179
|
+
}
|
|
180
|
+
return await assessGoDependenciesSupplyChainDimension(root);
|
|
181
|
+
}
|
|
165
182
|
/**
|
|
166
183
|
* Assess the dependencies/supply-chain dimension: B5, "an owned compatibility or
|
|
167
184
|
* security surface has no confidence model". Offline by construction — it reads
|
|
@@ -174,13 +191,9 @@ function skipRecord(reason) {
|
|
|
174
191
|
export async function assessDependenciesSupplyChainDimension(root) {
|
|
175
192
|
const outcome = await readManifest(root);
|
|
176
193
|
if (outcome.kind === "unassessable") {
|
|
177
|
-
const
|
|
178
|
-
if (
|
|
179
|
-
return
|
|
180
|
-
}
|
|
181
|
-
const pythonRecord = await assessPythonDependenciesSupplyChainDimension(root);
|
|
182
|
-
if (pythonRecord !== null) {
|
|
183
|
-
return pythonRecord;
|
|
194
|
+
const nonJavaScriptRecord = await assessNonJavaScriptDependenciesSupplyChainDimension(root);
|
|
195
|
+
if (nonJavaScriptRecord !== null) {
|
|
196
|
+
return nonJavaScriptRecord;
|
|
184
197
|
}
|
|
185
198
|
return skipRecord(outcome.reason);
|
|
186
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-readiness-supply-chain.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doctor-readiness-supply-chain.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EACL,YAAY,EAEZ,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,YAAY,GACb,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,0CAA0C,EAAE,MAAM,gDAAgD,CAAC;AAC5G,OAAO,EAAE,4CAA4C,EAAE,MAAM,kDAAkD,CAAC;AAChH,OAAO,EAAE,wCAAwC,EAAE,MAAM,8CAA8C,CAAC;AACxG,OAAO,EACL,sCAAsC,EACtC,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,gCAAgC,EAChC,8BAA8B,EAC9B,8BAA8B,GAE/B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,sCAAsC,EAAE,MAAM,8CAA8C,CAAC;AAEtG;;;;;;;GAOG;AACH,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,KAAgC,EAChC,SAA6C,EAC7C,UAA4B;IAK5B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,mBAAmB,GACvB,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG;QACb,SAAS;QACT,QAAQ;QACR,mBAAmB;QACnB,KAAK;QACL,UAAU;KACX,CAAC;IACF,OAAO;QACL,UAAU,EAAE;YACV,GAAG,8BAA8B,CAAC,MAAM,CAAC;YACzC,GAAG,8BAA8B,CAAC,SAAS,CAAC;YAC5C,GAAG,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;SAC1C;QACD,YAAY,EAAE;YACZ,GAAG,gCAAgC,CAAC,MAAM,CAAC;YAC3C,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACnE;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,oBAAoB,CAAC,UAA4B;IACxD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAC9B,CAAC,CAAC,+BAA+B,UAAU,CAAC,KAAK,CAAC,IAAI,kBAAkB;YACpE,6DAA6D;QACjE,CAAC,CAAC,uEAAuE;YACrE,gEAAgE;YAChE,yEAAyE,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,UAA6B;IAE7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAClD,OAAO;QACL,OAAO,EAAE,uBAAuB;QAChC,kBAAkB,EAChB,0EAA0E;YAC1E,mCAAmC;QACrC,QAAQ,EACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACjB,CAAC,QAAQ,GAAG,CAAC;gBACX,CAAC,CAAC,QAAQ,QAAQ,uCAAuC;gBACzD,CAAC,CAAC,EAAE,CAAC;QACT,gBAAgB,EACd,yEAAyE;YACzE,2EAA2E;YAC3E,kCAAkC;QACpC,eAAe,EACb,qEAAqE;YACrE,sEAAsE;YACtE,8CAA8C;QAChD,mBAAmB,EAAE;YACnB,0EAA0E;gBACxE,yCAAyC;SAC5C;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,KAAgC;IAC9D,OAAO,IAAI,GAAG,CACZ,KAAK;SACF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;SAC9B,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,KAAK,cAAc,CAAC,CAC3D,CAAC,IAAI,CAAC;AACT,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,KAAgC;IAC7D,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,cAAc,KAAK,CAAC;QACzB,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,iCAAiC,cAAc,mBAAmB;YAChE,aAAa,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,UAA4B;IAC3D,OAAO,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QACvD,CAAC,CAAC,oEAAoE;YAClE,kEAAkE;QACtE,CAAC,CAAC,uDAAuD,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO;QACL,EAAE,EAAE,sCAAsC;QAC1C,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,mDAAmD,CAChE,IAAY;IAEZ,MAAM,UAAU,GAAG,MAAM,0CAA0C,CAAC,IAAI,CAAC,CAAC;IAC1E,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,4CAA4C,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,wCAAwC,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,IAAY;IAEZ,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,MAAM,mBAAmB,GACvB,MAAM,mDAAmD,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;YACjC,OAAO,mBAAmB,CAAC;QAC7B,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG;QAChB,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;QAC5D,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,KAAK,GAAG;QACZ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC;QACjC,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CACrC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CACnD;KACF,CAAC;IACF,MAAM,qBAAqB,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,UAAU,CACf,yEAAyE;YACvE,8DAA8D;YAC9D,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CACxD,IAAI,EACJ,KAAK,EACL,SAAS,EACT,UAAU,CACX,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,sCAAsC;YAC1C,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE;gBACR,kBAAkB,CAAC,UAAU,CAAC;gBAC9B,GAAG,qBAAqB,CAAC,YAAY,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,sCAAsC;QAC1C,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE;YACR;gBACE,QAAQ,EACN,aAAa,KAAK,CAAC,MAAM,yBAAyB;oBAClD,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI;oBACnC,GAAG,uBAAuB,CAAC,UAAU,CAAC,MAAM;oBAC5C,8DAA8D;oBAC9D,gEAAgE;oBAChE,6BAA6B;gBAC/B,OAAO,EAAE,CAAC,uBAAuB,CAAC;aACnC;YACD,GAAG,qBAAqB,CAAC,YAAY,CAAC;SACvC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkjEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkjEpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAy3MjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -1046,7 +1046,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
1046
1046
|
"typescript/github-rulesets/quality-checks.json": "d92599b203071b99b8fac1422b8493d2546138961ef04ba98176bc400af60945",
|
|
1047
1047
|
"typescript/merge/.claude/settings.json": "834e6456cae81f45073bbbb08bf731fef043efb30cae2658cb4a59f17e66d165",
|
|
1048
1048
|
"typescript/merge/.oxlintrc.json": "4debc093acfd263eb81ae15894073ebf098513204f45f40b83fb8fa5353fa1f8",
|
|
1049
|
-
"typescript/package-lisa/package.lisa.json": "
|
|
1049
|
+
"typescript/package-lisa/package.lisa.json": "783e2a0a8d7463f4b32a68dae480f051b1814aa404fcbe10c713468d51727568",
|
|
1050
1050
|
"ui/README.md": "deeb35e767ea5dd2883268835ea3ad21cbad9fa63ec8d8ff5e200f0e2a7d2751",
|
|
1051
1051
|
"ui/index.html": "2d96d36ddf2f973a714d91c3f734aa49fa50415883702e1895f747d8e2e689c2",
|
|
1052
1052
|
});
|
|
@@ -6402,6 +6402,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
6402
6402
|
"src/cli/doctor-readiness-shared.ts": true,
|
|
6403
6403
|
"src/cli/doctor-readiness-supply-chain-constants.ts": true,
|
|
6404
6404
|
"src/cli/doctor-readiness-supply-chain-evidence.ts": true,
|
|
6405
|
+
"src/cli/doctor-readiness-supply-chain-go-assess.ts": true,
|
|
6406
|
+
"src/cli/doctor-readiness-supply-chain-go.ts": true,
|
|
6405
6407
|
"src/cli/doctor-readiness-supply-chain-python-assess.ts": true,
|
|
6406
6408
|
"src/cli/doctor-readiness-supply-chain-python.ts": true,
|
|
6407
6409
|
"src/cli/doctor-readiness-supply-chain-ruby-assess.ts": true,
|
|
@@ -6796,6 +6798,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
6796
6798
|
"tests/unit/cli/doctor-readiness-guardrails.test.ts": true,
|
|
6797
6799
|
"tests/unit/cli/doctor-readiness-journey.test.ts": true,
|
|
6798
6800
|
"tests/unit/cli/doctor-readiness-supply-chain-exceptions.test.ts": true,
|
|
6801
|
+
"tests/unit/cli/doctor-readiness-supply-chain-go.test.ts": true,
|
|
6799
6802
|
"tests/unit/cli/doctor-readiness-supply-chain-install-gate.test.ts": true,
|
|
6800
6803
|
"tests/unit/cli/doctor-readiness-supply-chain-install-scripts.test.ts": true,
|
|
6801
6804
|
"tests/unit/cli/doctor-readiness-supply-chain-precision.test.ts": true,
|