critical-gate 2.0.1 → 2.1.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/README.md +163 -0
- package/dist/cli.d.ts +7 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +469 -20
- package/dist/cli.js.map +1 -1
- package/dist/config/critical-gate-config.d.ts +41 -0
- package/dist/config/critical-gate-config.d.ts.map +1 -1
- package/dist/config/critical-gate-config.js +193 -4
- package/dist/config/critical-gate-config.js.map +1 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/learning-policy.d.ts +9 -0
- package/dist/config/learning-policy.d.ts.map +1 -0
- package/dist/config/learning-policy.js +34 -0
- package/dist/config/learning-policy.js.map +1 -0
- package/dist/detectors/api-surface-detector.d.ts.map +1 -1
- package/dist/detectors/api-surface-detector.js +123 -5
- package/dist/detectors/api-surface-detector.js.map +1 -1
- package/dist/detectors/confidence-calibration.d.ts +11 -0
- package/dist/detectors/confidence-calibration.d.ts.map +1 -0
- package/dist/detectors/confidence-calibration.js +53 -0
- package/dist/detectors/confidence-calibration.js.map +1 -0
- package/dist/detectors/existing-solution-detector.js +6 -0
- package/dist/detectors/existing-solution-detector.js.map +1 -1
- package/dist/detectors/expected-companions-detector.d.ts.map +1 -1
- package/dist/detectors/expected-companions-detector.js +208 -10
- package/dist/detectors/expected-companions-detector.js.map +1 -1
- package/dist/detectors/index.d.ts +1 -0
- package/dist/detectors/index.d.ts.map +1 -1
- package/dist/detectors/index.js +1 -0
- package/dist/detectors/index.js.map +1 -1
- package/dist/detectors/intent-verification-detector.d.ts.map +1 -1
- package/dist/detectors/intent-verification-detector.js +64 -1
- package/dist/detectors/intent-verification-detector.js.map +1 -1
- package/dist/detectors/reason-chain.d.ts +4 -0
- package/dist/detectors/reason-chain.d.ts.map +1 -0
- package/dist/detectors/reason-chain.js +102 -0
- package/dist/detectors/reason-chain.js.map +1 -0
- package/dist/detectors/repair-contract.d.ts +4 -0
- package/dist/detectors/repair-contract.d.ts.map +1 -0
- package/dist/detectors/repair-contract.js +45 -0
- package/dist/detectors/repair-contract.js.map +1 -0
- package/dist/detectors/repository-intelligence-detector.d.ts.map +1 -1
- package/dist/detectors/repository-intelligence-detector.js +17 -4
- package/dist/detectors/repository-intelligence-detector.js.map +1 -1
- package/dist/detectors/rewrite-detector.d.ts.map +1 -1
- package/dist/detectors/rewrite-detector.js +5 -2
- package/dist/detectors/rewrite-detector.js.map +1 -1
- package/dist/detectors/runner.d.ts +1 -0
- package/dist/detectors/runner.d.ts.map +1 -1
- package/dist/detectors/runner.js +50 -3
- package/dist/detectors/runner.js.map +1 -1
- package/dist/detectors/secret-path-detector.js +1 -1
- package/dist/detectors/secret-path-detector.js.map +1 -1
- package/dist/detectors/test-weakening-detector.d.ts.map +1 -1
- package/dist/detectors/test-weakening-detector.js +188 -39
- package/dist/detectors/test-weakening-detector.js.map +1 -1
- package/dist/detectors/types.d.ts +2 -0
- package/dist/detectors/types.d.ts.map +1 -1
- package/dist/diff/git-diff-reader.d.ts +1 -0
- package/dist/diff/git-diff-reader.d.ts.map +1 -1
- package/dist/diff/git-diff-reader.js +6 -3
- package/dist/diff/git-diff-reader.js.map +1 -1
- package/dist/diff/path-classifier.d.ts.map +1 -1
- package/dist/diff/path-classifier.js +9 -1
- package/dist/diff/path-classifier.js.map +1 -1
- package/dist/frameworks/detect.d.ts +11 -0
- package/dist/frameworks/detect.d.ts.map +1 -0
- package/dist/frameworks/detect.js +29 -0
- package/dist/frameworks/detect.js.map +1 -0
- package/dist/frameworks/index.d.ts +5 -0
- package/dist/frameworks/index.d.ts.map +1 -0
- package/dist/frameworks/index.js +4 -0
- package/dist/frameworks/index.js.map +1 -0
- package/dist/frameworks/packs.d.ts +3 -0
- package/dist/frameworks/packs.d.ts.map +1 -0
- package/dist/frameworks/packs.js +146 -0
- package/dist/frameworks/packs.js.map +1 -0
- package/dist/frameworks/path-patterns.d.ts +3 -0
- package/dist/frameworks/path-patterns.d.ts.map +1 -0
- package/dist/frameworks/path-patterns.js +16 -0
- package/dist/frameworks/path-patterns.js.map +1 -0
- package/dist/frameworks/types.d.ts +15 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +2 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/intent/diff-coherence-score.d.ts +13 -0
- package/dist/intent/diff-coherence-score.d.ts.map +1 -0
- package/dist/intent/diff-coherence-score.js +125 -0
- package/dist/intent/diff-coherence-score.js.map +1 -0
- package/dist/intent/index.d.ts +2 -0
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +2 -0
- package/dist/intent/index.js.map +1 -1
- package/dist/intent/intent-core.d.ts.map +1 -1
- package/dist/intent/intent-core.js +17 -1
- package/dist/intent/intent-core.js.map +1 -1
- package/dist/intent/intent-model.d.ts.map +1 -1
- package/dist/intent/intent-model.js +39 -2
- package/dist/intent/intent-model.js.map +1 -1
- package/dist/intent/task-intent-quality.d.ts +4 -0
- package/dist/intent/task-intent-quality.d.ts.map +1 -0
- package/dist/intent/task-intent-quality.js +98 -0
- package/dist/intent/task-intent-quality.js.map +1 -0
- package/dist/knowledge/history-index.d.ts.map +1 -1
- package/dist/knowledge/history-index.js +10 -3
- package/dist/knowledge/history-index.js.map +1 -1
- package/dist/knowledge/index.d.ts +2 -1
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +1 -0
- package/dist/knowledge/index.js.map +1 -1
- package/dist/knowledge/normal-change-model.d.ts +8 -0
- package/dist/knowledge/normal-change-model.d.ts.map +1 -0
- package/dist/knowledge/normal-change-model.js +121 -0
- package/dist/knowledge/normal-change-model.js.map +1 -0
- package/dist/knowledge/solution-index.d.ts.map +1 -1
- package/dist/knowledge/solution-index.js +43 -3
- package/dist/knowledge/solution-index.js.map +1 -1
- package/dist/knowledge/types.d.ts +11 -0
- package/dist/knowledge/types.d.ts.map +1 -1
- package/dist/reporters/index.d.ts +4 -1
- package/dist/reporters/index.d.ts.map +1 -1
- package/dist/reporters/index.js +6 -0
- package/dist/reporters/index.js.map +1 -1
- package/dist/reporters/markdown-reporter.d.ts.map +1 -1
- package/dist/reporters/markdown-reporter.js +67 -0
- package/dist/reporters/markdown-reporter.js.map +1 -1
- package/dist/reporters/pr-comment-reporter.d.ts +3 -0
- package/dist/reporters/pr-comment-reporter.d.ts.map +1 -0
- package/dist/reporters/pr-comment-reporter.js +105 -0
- package/dist/reporters/pr-comment-reporter.js.map +1 -0
- package/dist/reporters/repair-contract.d.ts +3 -0
- package/dist/reporters/repair-contract.d.ts.map +1 -0
- package/dist/reporters/repair-contract.js +25 -0
- package/dist/reporters/repair-contract.js.map +1 -0
- package/dist/reporters/repair-reporter.d.ts.map +1 -1
- package/dist/reporters/repair-reporter.js +19 -1
- package/dist/reporters/repair-reporter.js.map +1 -1
- package/dist/reporters/reviewer-checklist.d.ts +10 -0
- package/dist/reporters/reviewer-checklist.d.ts.map +1 -0
- package/dist/reporters/reviewer-checklist.js +112 -0
- package/dist/reporters/reviewer-checklist.js.map +1 -0
- package/dist/repository/api-snapshot.d.ts +41 -0
- package/dist/repository/api-snapshot.d.ts.map +1 -0
- package/dist/repository/api-snapshot.js +219 -0
- package/dist/repository/api-snapshot.js.map +1 -0
- package/dist/repository/index.d.ts +2 -0
- package/dist/repository/index.d.ts.map +1 -1
- package/dist/repository/index.js +2 -0
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/monorepo.d.ts +7 -0
- package/dist/repository/monorepo.d.ts.map +1 -0
- package/dist/repository/monorepo.js +189 -0
- package/dist/repository/monorepo.js.map +1 -0
- package/dist/schema/gate-result.schema.d.ts +272 -0
- package/dist/schema/gate-result.schema.d.ts.map +1 -1
- package/dist/schema/gate-result.schema.js +148 -1
- package/dist/schema/gate-result.schema.js.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/types.d.ts +63 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,33 @@
|
|
|
1
|
+
export declare const CRITICAL_GATE_CONFIG_FILE = ".critical-gate.json";
|
|
2
|
+
export interface AcceptedFindingRule {
|
|
3
|
+
id: string;
|
|
4
|
+
reason: string;
|
|
5
|
+
createdAt: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ExpectedSupportFileRule {
|
|
8
|
+
id: string;
|
|
9
|
+
whenChanged: string;
|
|
10
|
+
allow: string[];
|
|
11
|
+
reason: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface LearningConfig {
|
|
15
|
+
acceptedFindings?: AcceptedFindingRule[];
|
|
16
|
+
expectedSupportFiles?: ExpectedSupportFileRule[];
|
|
17
|
+
}
|
|
18
|
+
export interface DetectorPolicyOverride {
|
|
19
|
+
detector: string;
|
|
20
|
+
mode: "blocking" | "observation";
|
|
21
|
+
reason: string;
|
|
22
|
+
}
|
|
23
|
+
export interface CriticalGatePolicy {
|
|
24
|
+
failOn?: "blocker" | "high" | "medium";
|
|
25
|
+
detectorOverrides?: DetectorPolicyOverride[];
|
|
26
|
+
expectedCompanions?: ExpectedSupportFileRule[];
|
|
27
|
+
allowedSupportFiles?: ExpectedSupportFileRule[];
|
|
28
|
+
}
|
|
1
29
|
export interface CriticalGateConfig {
|
|
30
|
+
frameworkPacks?: string[];
|
|
2
31
|
patternAliases?: Record<string, string>;
|
|
3
32
|
featureRoots?: string[];
|
|
4
33
|
serviceRoots?: string[];
|
|
@@ -7,7 +36,10 @@ export interface CriticalGateConfig {
|
|
|
7
36
|
rollout?: {
|
|
8
37
|
observationDetectors?: string[];
|
|
9
38
|
blockingDetectors?: string[];
|
|
39
|
+
failOn?: "blocker" | "high" | "medium";
|
|
10
40
|
};
|
|
41
|
+
policy?: CriticalGatePolicy;
|
|
42
|
+
learning?: LearningConfig;
|
|
11
43
|
}
|
|
12
44
|
export interface LoadCriticalGateConfigResult {
|
|
13
45
|
config: CriticalGateConfig;
|
|
@@ -17,5 +49,14 @@ export interface ConfigReader {
|
|
|
17
49
|
exists?: (path: string) => boolean;
|
|
18
50
|
readFile?: (path: string) => string;
|
|
19
51
|
}
|
|
52
|
+
export interface ConfigWriter {
|
|
53
|
+
writeFile?: (path: string, content: string) => void;
|
|
54
|
+
}
|
|
55
|
+
export declare function getConfiguredFailOn(config: CriticalGateConfig): "blocker" | "high" | "medium" | undefined;
|
|
56
|
+
export declare function getPolicyObservationDetectors(config: CriticalGateConfig): string[] | undefined;
|
|
57
|
+
export declare function getPolicyBlockingDetectors(config: CriticalGateConfig): string[] | undefined;
|
|
58
|
+
export declare function getConfiguredExpectedSupportFiles(config: CriticalGateConfig): ExpectedSupportFileRule[] | undefined;
|
|
20
59
|
export declare function loadCriticalGateConfig(root: string, reader?: ConfigReader): LoadCriticalGateConfigResult;
|
|
60
|
+
export declare function updateCriticalGateConfig(root: string, updater: (config: CriticalGateConfig) => CriticalGateConfig, io?: ConfigReader & ConfigWriter): CriticalGateConfig;
|
|
61
|
+
export declare function createDefaultPolicyConfig(now: Date): CriticalGateConfig;
|
|
21
62
|
//# sourceMappingURL=critical-gate-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical-gate-config.d.ts","sourceRoot":"","sources":["../../src/config/critical-gate-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;QAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"critical-gate-config.d.ts","sourceRoot":"","sources":["../../src/config/critical-gate-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
export const CRITICAL_GATE_CONFIG_FILE = ".critical-gate.json";
|
|
4
|
+
export function getConfiguredFailOn(config) {
|
|
5
|
+
return config.policy?.failOn ?? config.rollout?.failOn;
|
|
6
|
+
}
|
|
7
|
+
export function getPolicyObservationDetectors(config) {
|
|
8
|
+
const policyObservation = config.policy?.detectorOverrides
|
|
9
|
+
?.filter((override) => override.mode === "observation")
|
|
10
|
+
.map((override) => override.detector);
|
|
11
|
+
return mergeUnique(config.rollout?.observationDetectors, policyObservation);
|
|
12
|
+
}
|
|
13
|
+
export function getPolicyBlockingDetectors(config) {
|
|
14
|
+
const policyBlocking = config.policy?.detectorOverrides
|
|
15
|
+
?.filter((override) => override.mode === "blocking")
|
|
16
|
+
.map((override) => override.detector);
|
|
17
|
+
return mergeUnique(config.rollout?.blockingDetectors, policyBlocking);
|
|
18
|
+
}
|
|
19
|
+
export function getConfiguredExpectedSupportFiles(config) {
|
|
20
|
+
return mergeRules(config.learning?.expectedSupportFiles, config.policy?.expectedCompanions, config.policy?.allowedSupportFiles);
|
|
21
|
+
}
|
|
3
22
|
export function loadCriticalGateConfig(root, reader = {}) {
|
|
4
|
-
const path = join(root,
|
|
23
|
+
const path = join(root, CRITICAL_GATE_CONFIG_FILE);
|
|
5
24
|
const exists = reader.exists ?? existsSync;
|
|
6
25
|
const readFile = reader.readFile ?? ((filePath) => readFileSync(filePath, "utf8"));
|
|
7
26
|
if (!exists(path)) {
|
|
@@ -29,16 +48,66 @@ function validateConfig(value) {
|
|
|
29
48
|
}
|
|
30
49
|
return {
|
|
31
50
|
config: {
|
|
51
|
+
frameworkPacks: readStringArray(value, "frameworkPacks", warnings),
|
|
32
52
|
patternAliases: readStringRecord(value, "patternAliases", warnings),
|
|
33
53
|
featureRoots: readStringArray(value, "featureRoots", warnings),
|
|
34
54
|
serviceRoots: readStringArray(value, "serviceRoots", warnings),
|
|
35
55
|
validatorRoots: readStringArray(value, "validatorRoots", warnings),
|
|
36
56
|
excludePatterns: readStringArray(value, "excludePatterns", warnings),
|
|
37
|
-
rollout: readRolloutConfig(value, warnings)
|
|
57
|
+
rollout: readRolloutConfig(value, warnings),
|
|
58
|
+
policy: readPolicyConfig(value, warnings),
|
|
59
|
+
learning: readLearningConfig(value, warnings)
|
|
38
60
|
},
|
|
39
61
|
warnings
|
|
40
62
|
};
|
|
41
63
|
}
|
|
64
|
+
export function updateCriticalGateConfig(root, updater, io = {}) {
|
|
65
|
+
const path = join(root, CRITICAL_GATE_CONFIG_FILE);
|
|
66
|
+
const exists = io.exists ?? existsSync;
|
|
67
|
+
const readFile = io.readFile ?? ((filePath) => readFileSync(filePath, "utf8"));
|
|
68
|
+
const writeFile = io.writeFile ??
|
|
69
|
+
((filePath, content) => writeFileSync(filePath, content, "utf8"));
|
|
70
|
+
const current = exists(path) ? validateConfig(JSON.parse(readFile(path))).config : {};
|
|
71
|
+
const updated = updater(current);
|
|
72
|
+
writeFile(path, `${JSON.stringify(updated, null, 2)}\n`);
|
|
73
|
+
return updated;
|
|
74
|
+
}
|
|
75
|
+
export function createDefaultPolicyConfig(now) {
|
|
76
|
+
return {
|
|
77
|
+
policy: {
|
|
78
|
+
failOn: "high",
|
|
79
|
+
detectorOverrides: [
|
|
80
|
+
{
|
|
81
|
+
detector: "expected-companions",
|
|
82
|
+
mode: "observation",
|
|
83
|
+
reason: "Companion rules are useful guidance during rollout but should not block yet."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
expectedCompanions: [
|
|
87
|
+
{
|
|
88
|
+
id: "source-test-companion",
|
|
89
|
+
whenChanged: "src/**/*.ts",
|
|
90
|
+
allow: ["tests/**/*.test.ts", "src/**/*.test.ts"],
|
|
91
|
+
reason: "Source changes commonly require corresponding behavior tests.",
|
|
92
|
+
createdAt: now.toISOString()
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
allowedSupportFiles: [
|
|
96
|
+
{
|
|
97
|
+
id: "docs-for-config",
|
|
98
|
+
whenChanged: ".github/workflows/**",
|
|
99
|
+
allow: ["docs/**/*.md", "README.md", "CHANGELOG.md"],
|
|
100
|
+
reason: "CI or workflow changes may include visible operational documentation.",
|
|
101
|
+
createdAt: now.toISOString()
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
learning: {
|
|
106
|
+
acceptedFindings: [],
|
|
107
|
+
expectedSupportFiles: []
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
42
111
|
function readRolloutConfig(value, warnings) {
|
|
43
112
|
const rawValue = value.rollout;
|
|
44
113
|
if (rawValue === undefined) {
|
|
@@ -50,9 +119,97 @@ function readRolloutConfig(value, warnings) {
|
|
|
50
119
|
}
|
|
51
120
|
return {
|
|
52
121
|
observationDetectors: readStringArray(rawValue, "observationDetectors", warnings),
|
|
53
|
-
blockingDetectors: readStringArray(rawValue, "blockingDetectors", warnings)
|
|
122
|
+
blockingDetectors: readStringArray(rawValue, "blockingDetectors", warnings),
|
|
123
|
+
failOn: readFailOn(rawValue, "rollout.failOn", warnings)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function readPolicyConfig(value, warnings) {
|
|
127
|
+
const rawValue = value.policy;
|
|
128
|
+
if (rawValue === undefined) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
if (!isRecord(rawValue)) {
|
|
132
|
+
warnings.push("policy must be an object.");
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
failOn: readFailOn(rawValue, "policy.failOn", warnings),
|
|
137
|
+
detectorOverrides: readDetectorPolicyOverrides(rawValue, warnings),
|
|
138
|
+
expectedCompanions: readSupportRules(rawValue, "expectedCompanions", warnings),
|
|
139
|
+
allowedSupportFiles: readSupportRules(rawValue, "allowedSupportFiles", warnings)
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function readLearningConfig(value, warnings) {
|
|
143
|
+
const rawValue = value.learning;
|
|
144
|
+
if (rawValue === undefined) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
if (!isRecord(rawValue)) {
|
|
148
|
+
warnings.push("learning must be an object.");
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
acceptedFindings: readAcceptedFindings(rawValue, warnings),
|
|
153
|
+
expectedSupportFiles: readSupportRules(rawValue, "expectedSupportFiles", warnings)
|
|
54
154
|
};
|
|
55
155
|
}
|
|
156
|
+
function readAcceptedFindings(value, warnings) {
|
|
157
|
+
const rawValue = value.acceptedFindings;
|
|
158
|
+
if (rawValue === undefined) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
if (!Array.isArray(rawValue)) {
|
|
162
|
+
warnings.push("learning.acceptedFindings must be an array.");
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
const entries = rawValue.filter(isAcceptedFindingRule);
|
|
166
|
+
if (entries.length !== rawValue.length) {
|
|
167
|
+
warnings.push("learning.acceptedFindings entries require id, reason, and createdAt strings.");
|
|
168
|
+
}
|
|
169
|
+
return entries;
|
|
170
|
+
}
|
|
171
|
+
function readSupportRules(value, key, warnings) {
|
|
172
|
+
const rawValue = value[key];
|
|
173
|
+
if (rawValue === undefined) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
if (!Array.isArray(rawValue)) {
|
|
177
|
+
warnings.push(`${key} must be an array.`);
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
180
|
+
const entries = rawValue.filter(isExpectedSupportFileRule);
|
|
181
|
+
if (entries.length !== rawValue.length) {
|
|
182
|
+
warnings.push(`${key} entries require id, whenChanged, allow, reason, and createdAt strings.`);
|
|
183
|
+
}
|
|
184
|
+
return entries;
|
|
185
|
+
}
|
|
186
|
+
function readDetectorPolicyOverrides(value, warnings) {
|
|
187
|
+
const rawValue = value.detectorOverrides;
|
|
188
|
+
if (rawValue === undefined) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
if (!Array.isArray(rawValue)) {
|
|
192
|
+
warnings.push("policy.detectorOverrides must be an array.");
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
const entries = rawValue.filter(isDetectorPolicyOverride);
|
|
196
|
+
if (entries.length !== rawValue.length) {
|
|
197
|
+
warnings.push("policy.detectorOverrides entries require detector, mode, and reason strings.");
|
|
198
|
+
}
|
|
199
|
+
return entries;
|
|
200
|
+
}
|
|
201
|
+
function readFailOn(value, key, warnings) {
|
|
202
|
+
const property = key.split(".").at(-1) ?? key;
|
|
203
|
+
const rawValue = value[property];
|
|
204
|
+
if (rawValue === undefined) {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
if (rawValue !== "blocker" && rawValue !== "high" && rawValue !== "medium") {
|
|
208
|
+
warnings.push(`${key} must be blocker, high, or medium.`);
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
return rawValue;
|
|
212
|
+
}
|
|
56
213
|
function readStringArray(value, key, warnings) {
|
|
57
214
|
const rawValue = value[key];
|
|
58
215
|
if (rawValue === undefined) {
|
|
@@ -78,4 +235,36 @@ function readStringRecord(value, key, warnings) {
|
|
|
78
235
|
function isRecord(value) {
|
|
79
236
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
80
237
|
}
|
|
238
|
+
function mergeUnique(...entries) {
|
|
239
|
+
const merged = entries.flatMap((entry) => entry ?? []);
|
|
240
|
+
return merged.length === 0 ? undefined : [...new Set(merged)];
|
|
241
|
+
}
|
|
242
|
+
function mergeRules(...entries) {
|
|
243
|
+
const merged = new Map();
|
|
244
|
+
for (const entry of entries.flatMap((rules) => rules ?? [])) {
|
|
245
|
+
merged.set(entry.id, entry);
|
|
246
|
+
}
|
|
247
|
+
return merged.size === 0 ? undefined : [...merged.values()];
|
|
248
|
+
}
|
|
249
|
+
function isAcceptedFindingRule(value) {
|
|
250
|
+
return (isRecord(value) &&
|
|
251
|
+
typeof value.id === "string" &&
|
|
252
|
+
typeof value.reason === "string" &&
|
|
253
|
+
typeof value.createdAt === "string");
|
|
254
|
+
}
|
|
255
|
+
function isExpectedSupportFileRule(value) {
|
|
256
|
+
return (isRecord(value) &&
|
|
257
|
+
typeof value.id === "string" &&
|
|
258
|
+
typeof value.whenChanged === "string" &&
|
|
259
|
+
Array.isArray(value.allow) &&
|
|
260
|
+
value.allow.every((entry) => typeof entry === "string") &&
|
|
261
|
+
typeof value.reason === "string" &&
|
|
262
|
+
typeof value.createdAt === "string");
|
|
263
|
+
}
|
|
264
|
+
function isDetectorPolicyOverride(value) {
|
|
265
|
+
return (isRecord(value) &&
|
|
266
|
+
typeof value.detector === "string" &&
|
|
267
|
+
(value.mode === "blocking" || value.mode === "observation") &&
|
|
268
|
+
typeof value.reason === "string");
|
|
269
|
+
}
|
|
81
270
|
//# sourceMappingURL=critical-gate-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"critical-gate-config.js","sourceRoot":"","sources":["../../src/config/critical-gate-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"critical-gate-config.js","sourceRoot":"","sources":["../../src/config/critical-gate-config.ts"],"names":[],"mappings":"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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { loadCriticalGateConfig, type ConfigReader, type CriticalGateConfig, type LoadCriticalGateConfigResult } from "./critical-gate-config.js";
|
|
1
|
+
export { CRITICAL_GATE_CONFIG_FILE, createDefaultPolicyConfig, getConfiguredExpectedSupportFiles, getConfiguredFailOn, getPolicyBlockingDetectors, getPolicyObservationDetectors, loadCriticalGateConfig, updateCriticalGateConfig, type AcceptedFindingRule, type ConfigReader, type ConfigWriter, type CriticalGateConfig, type CriticalGatePolicy, type DetectorPolicyOverride, type ExpectedSupportFileRule, type LearningConfig, type LoadCriticalGateConfigResult } from "./critical-gate-config.js";
|
|
2
|
+
export { applyLearningPolicy, type ApplyLearningPolicyResult } from "./learning-policy.js";
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,iCAAiC,EACjC,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { loadCriticalGateConfig } from "./critical-gate-config.js";
|
|
1
|
+
export { CRITICAL_GATE_CONFIG_FILE, createDefaultPolicyConfig, getConfiguredExpectedSupportFiles, getConfiguredFailOn, getPolicyBlockingDetectors, getPolicyObservationDetectors, loadCriticalGateConfig, updateCriticalGateConfig } from "./critical-gate-config.js";
|
|
2
|
+
export { applyLearningPolicy } from "./learning-policy.js";
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,iCAAiC,EACjC,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,EAC7B,sBAAsB,EACtB,wBAAwB,EAUzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAkC,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DiffFile, Finding } from "../schema/index.js";
|
|
2
|
+
import type { LearningConfig } from "./critical-gate-config.js";
|
|
3
|
+
export interface ApplyLearningPolicyResult {
|
|
4
|
+
findings: Finding[];
|
|
5
|
+
appliedAcceptedFindings: string[];
|
|
6
|
+
appliedExpectedSupportRules: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function applyLearningPolicy(findings: Finding[], files: DiffFile[], learning: LearningConfig | undefined): ApplyLearningPolicyResult;
|
|
9
|
+
//# sourceMappingURL=learning-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-policy.d.ts","sourceRoot":"","sources":["../../src/config/learning-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,2BAA2B,EAAE,MAAM,EAAE,CAAC;CACvC;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,QAAQ,EAAE,EACjB,QAAQ,EAAE,cAAc,GAAG,SAAS,GACnC,yBAAyB,CAyB3B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { matchesPathPattern } from "../frameworks/index.js";
|
|
2
|
+
export function applyLearningPolicy(findings, files, learning) {
|
|
3
|
+
const acceptedIds = new Set(learning?.acceptedFindings?.map((entry) => entry.id) ?? []);
|
|
4
|
+
const appliedAcceptedFindings = [];
|
|
5
|
+
const appliedExpectedSupportRules = [];
|
|
6
|
+
const filtered = findings.filter((finding) => {
|
|
7
|
+
if (acceptedIds.has(finding.id)) {
|
|
8
|
+
appliedAcceptedFindings.push(finding.id);
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const supportRule = findMatchingSupportRule(finding, files, learning);
|
|
12
|
+
if (supportRule !== undefined) {
|
|
13
|
+
appliedExpectedSupportRules.push(supportRule);
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
findings: filtered,
|
|
20
|
+
appliedAcceptedFindings: [...new Set(appliedAcceptedFindings)],
|
|
21
|
+
appliedExpectedSupportRules: [...new Set(appliedExpectedSupportRules)]
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function findMatchingSupportRule(finding, files, learning) {
|
|
25
|
+
if (!finding.tags.includes("scope")) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const evidencePaths = finding.evidence
|
|
29
|
+
.map((evidence) => evidence.path)
|
|
30
|
+
.filter((path) => path !== undefined);
|
|
31
|
+
return learning?.expectedSupportFiles?.find((rule) => files.some((file) => matchesPathPattern(rule.whenChanged, file.path)) &&
|
|
32
|
+
evidencePaths.some((path) => rule.allow.some((allowed) => matchesPathPattern(allowed, path))))?.id;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=learning-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning-policy.js","sourceRoot":"","sources":["../../src/config/learning-policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ5D,MAAM,UAAU,mBAAmB,CACjC,QAAmB,EACnB,KAAiB,EACjB,QAAoC;IAEpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACxF,MAAM,uBAAuB,GAAa,EAAE,CAAC;IAC7C,MAAM,2BAA2B,GAAa,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEtE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,uBAAuB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC9D,2BAA2B,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,2BAA2B,CAAC,CAAC;KACvE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAgB,EAChB,KAAiB,EACjB,QAAoC;IAEpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ;SACnC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SAChC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAExD,OAAO,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CACzC,CAAC,IAAI,EAAE,EAAE,CACP,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAChG,EAAE,EAAE,CAAC;AACR,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-surface-detector.d.ts","sourceRoot":"","sources":["../../src/detectors/api-surface-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-surface-detector.d.ts","sourceRoot":"","sources":["../../src/detectors/api-surface-detector.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsC3C,eAAO,MAAM,kBAAkB,EAAE,QAuBhC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { API_SURFACE_SNAPSHOT_PATH, findSnapshotExport, hasApiSnapshotEvidence } from "../repository/index.js";
|
|
1
2
|
const apiTaskTerms = [
|
|
2
3
|
"api",
|
|
3
4
|
"public api",
|
|
@@ -10,16 +11,26 @@ const apiTaskTerms = [
|
|
|
10
11
|
"public surface"
|
|
11
12
|
];
|
|
12
13
|
const documentationPathPattern = /(^|\/)(docs?|adr|changelog|changesets?)\/|(^|\/)(CHANGELOG|README|ADR)[^/]*\.md$/i;
|
|
14
|
+
const contractEvidencePathPattern = /(^|\/)(changesets?|migrations?|docs?|adr)\/|(^|\/)(CHANGELOG|MIGRATION|README|ADR)[^/]*\.md$/i;
|
|
13
15
|
const exportDeclarationPattern = /^\s*export\s+(?:async\s+)?(?:declare\s+)?(?:function|class|interface|type|enum|const|let|var)\s+([A-Za-z_$][\w$]*)/;
|
|
14
16
|
const namedExportPattern = /^\s*export\s*\{([^}]+)\}/;
|
|
15
17
|
const defaultExportPattern = /^\s*export\s+default\s+/;
|
|
16
18
|
export const apiSurfaceDetector = {
|
|
17
19
|
name: "api-surface",
|
|
18
|
-
run: ({ task, diff }) => {
|
|
20
|
+
run: ({ task, diff, context }) => {
|
|
21
|
+
const snapshot = context?.apiSurfaceSnapshot;
|
|
22
|
+
const snapshotSignals = snapshot !== undefined && !hasContractChangeEvidence(diff.files)
|
|
23
|
+
? extractSnapshotSignals(diff.files, snapshot)
|
|
24
|
+
: [];
|
|
19
25
|
if (hasVisibleApiAcknowledgement(task.text, diff.files)) {
|
|
20
|
-
return
|
|
26
|
+
return snapshotSignals.map(toFinding);
|
|
21
27
|
}
|
|
22
|
-
|
|
28
|
+
const snapshotSignalKeys = new Set(snapshotSignals.map((signal) => `${signal.path}:${signal.symbol ?? "unknown"}`));
|
|
29
|
+
const lineSignals = diff.files
|
|
30
|
+
.filter(isSourceFile)
|
|
31
|
+
.flatMap(extractSignals)
|
|
32
|
+
.filter((signal) => !snapshotSignalKeys.has(`${signal.path}:${signal.symbol ?? "unknown"}`));
|
|
33
|
+
return [...snapshotSignals, ...lineSignals].map(toFinding);
|
|
23
34
|
}
|
|
24
35
|
};
|
|
25
36
|
function isSourceFile(file) {
|
|
@@ -28,7 +39,12 @@ function isSourceFile(file) {
|
|
|
28
39
|
function hasVisibleApiAcknowledgement(taskText, files) {
|
|
29
40
|
const normalizedTask = taskText.toLowerCase();
|
|
30
41
|
return (apiTaskTerms.some((term) => normalizedTask.includes(term)) ||
|
|
31
|
-
files.some((file) => documentationPathPattern.test(file.path)
|
|
42
|
+
files.some((file) => documentationPathPattern.test(file.path) ||
|
|
43
|
+
file.path.replace(/\\/g, "/") === API_SURFACE_SNAPSHOT_PATH));
|
|
44
|
+
}
|
|
45
|
+
function hasContractChangeEvidence(files) {
|
|
46
|
+
return (hasApiSnapshotEvidence(files) ||
|
|
47
|
+
files.some((file) => contractEvidencePathPattern.test(file.path)));
|
|
32
48
|
}
|
|
33
49
|
function extractSignals(file) {
|
|
34
50
|
return file.hunks.flatMap((hunk) => hunk.lines.flatMap((line) => {
|
|
@@ -60,6 +76,107 @@ function extractSignals(file) {
|
|
|
60
76
|
];
|
|
61
77
|
}));
|
|
62
78
|
}
|
|
79
|
+
function extractSnapshotSignals(files, snapshot) {
|
|
80
|
+
return files.filter(isSourceFile).flatMap((file) => {
|
|
81
|
+
const changedExports = getChangedExports(file);
|
|
82
|
+
const signals = [];
|
|
83
|
+
for (const removed of changedExports.removed) {
|
|
84
|
+
const snapshotExport = findSnapshotExport(snapshot, file.path, removed.symbol ?? "unknown");
|
|
85
|
+
if (snapshotExport === undefined) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const matchingAddition = changedExports.added.find((added) => added.symbol === removed.symbol);
|
|
89
|
+
if (matchingAddition !== undefined &&
|
|
90
|
+
matchingAddition.content.trim() !== removed.content.trim()) {
|
|
91
|
+
signals.push({
|
|
92
|
+
id: "signature-change",
|
|
93
|
+
title: "Public API signature changed",
|
|
94
|
+
message: "The diff changes a snapshotted public API signature without changelog, changeset, migration, or snapshot evidence.",
|
|
95
|
+
repair: "Confirm this public contract change and add a snapshot update plus changelog, changeset, migration note, or keep the previous signature.",
|
|
96
|
+
severity: "high",
|
|
97
|
+
confidence: 0.92,
|
|
98
|
+
path: file.path,
|
|
99
|
+
lineNumber: matchingAddition.lineNumber ?? removed.lineNumber,
|
|
100
|
+
symbol: removed.symbol,
|
|
101
|
+
content: matchingAddition.content,
|
|
102
|
+
data: {
|
|
103
|
+
signal: "signature-change",
|
|
104
|
+
snapshotSignature: snapshotExport.signature,
|
|
105
|
+
previousSignature: removed.content.trim()
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
signals.push({
|
|
111
|
+
id: "removed-export",
|
|
112
|
+
title: "Snapshotted public export removed",
|
|
113
|
+
message: "The diff removes an export recorded in the public API snapshot without changelog, changeset, migration, or snapshot evidence.",
|
|
114
|
+
repair: "Restore the export or include a snapshot update plus changelog, changeset, or migration note for the public contract change.",
|
|
115
|
+
severity: "high",
|
|
116
|
+
confidence: 0.94,
|
|
117
|
+
path: file.path,
|
|
118
|
+
lineNumber: removed.lineNumber,
|
|
119
|
+
symbol: removed.symbol,
|
|
120
|
+
content: removed.content,
|
|
121
|
+
data: {
|
|
122
|
+
signal: "snapshot-removed-export",
|
|
123
|
+
snapshotSignature: snapshotExport.signature
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
for (const added of changedExports.added) {
|
|
128
|
+
if (!snapshot.entrypoints.includes(file.path)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (findSnapshotExport(snapshot, file.path, added.symbol ?? "unknown") !== undefined) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
signals.push({
|
|
135
|
+
id: "added-export",
|
|
136
|
+
title: "Public API added outside snapshot",
|
|
137
|
+
message: "The diff adds an export to a snapshotted public entrypoint without snapshot or release-note evidence.",
|
|
138
|
+
repair: "Update the public API snapshot and add changelog, changeset, or migration evidence, or keep the export internal.",
|
|
139
|
+
severity: "medium",
|
|
140
|
+
confidence: 0.88,
|
|
141
|
+
path: file.path,
|
|
142
|
+
lineNumber: added.lineNumber,
|
|
143
|
+
symbol: added.symbol,
|
|
144
|
+
content: added.content,
|
|
145
|
+
data: {
|
|
146
|
+
signal: "snapshot-added-export"
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return signals;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function getChangedExports(file) {
|
|
154
|
+
const added = [];
|
|
155
|
+
const removed = [];
|
|
156
|
+
for (const hunk of file.hunks) {
|
|
157
|
+
for (const line of hunk.lines) {
|
|
158
|
+
if (line.kind !== "add" && line.kind !== "delete") {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const exportInfo = getExportInfo(line);
|
|
162
|
+
if (exportInfo === undefined) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const entry = {
|
|
166
|
+
symbol: exportInfo.symbol,
|
|
167
|
+
lineNumber: line.kind === "add" ? line.newLineNumber : line.oldLineNumber,
|
|
168
|
+
content: line.content.trim()
|
|
169
|
+
};
|
|
170
|
+
if (line.kind === "add") {
|
|
171
|
+
added.push(entry);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
removed.push(entry);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return { added, removed };
|
|
179
|
+
}
|
|
63
180
|
function getExportInfo(line) {
|
|
64
181
|
const declaredExport = exportDeclarationPattern.exec(line.content);
|
|
65
182
|
if (declaredExport !== null) {
|
|
@@ -100,7 +217,8 @@ function toFinding(signal) {
|
|
|
100
217
|
symbol: signal.symbol,
|
|
101
218
|
message: signal.content.trim(),
|
|
102
219
|
data: {
|
|
103
|
-
signal: signal.id
|
|
220
|
+
signal: signal.id,
|
|
221
|
+
...signal.data
|
|
104
222
|
}
|
|
105
223
|
}
|
|
106
224
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-surface-detector.js","sourceRoot":"","sources":["../../src/detectors/api-surface-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api-surface-detector.js","sourceRoot":"","sources":["../../src/detectors/api-surface-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Finding } from "../schema/index.js";
|
|
2
|
+
export type ConfidenceBand = "low" | "medium" | "high" | "very-high";
|
|
3
|
+
export interface FindingConfidenceCalibration {
|
|
4
|
+
band: ConfidenceBand;
|
|
5
|
+
minimumBlockingConfidence: number;
|
|
6
|
+
blockingEligible: boolean;
|
|
7
|
+
reason: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function calibrateFindingConfidence(finding: Finding): FindingConfidenceCalibration;
|
|
10
|
+
export declare function getConfidenceBand(confidence: number): ConfidenceBand;
|
|
11
|
+
//# sourceMappingURL=confidence-calibration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confidence-calibration.d.ts","sourceRoot":"","sources":["../../src/detectors/confidence-calibration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAErE,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,cAAc,CAAC;IACrB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,4BAA4B,CAgBzF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAcpE"}
|