@agent-teams/engineering-foundation 1.3.3 → 1.4.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/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.d.ts +2 -2
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.js +15 -4
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.d.ts +8 -0
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.js +54 -0
- package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.d.ts +18 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.js +194 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.d.ts +15 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.js +173 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.d.ts +10 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.js +238 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.d.ts +4 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.js +15 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.d.ts +1 -6
- package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.js +7 -1
- package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/schema-validation.d.ts +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/schema-validation.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.d.ts +54 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission.d.ts +77 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission.js +3 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-admission.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.d.ts +16 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-observation.d.ts +119 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-observation.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-observation.js +19 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-observation.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-report.d.ts +47 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-report.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-report.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-report.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.d.ts +18 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.d.ts +22 -0
- package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.js +114 -0
- package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.d.ts +13 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.js +162 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.d.ts +20 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.js +73 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.d.ts +15 -0
- package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.js +130 -0
- package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.d.ts +17 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.js +124 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.d.ts +7 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.js +109 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.d.ts +11 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.js +53 -0
- package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.d.ts +26 -0
- package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.js +63 -0
- package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.js +86 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.js +51 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.d.ts +4 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.js +125 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.js +156 -0
- package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts +9 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.d.ts +6 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts +22 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.js +11 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.d.ts +7 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/rules.d.ts +8 -0
- package/dist/capabilities/public-api-compatibility/application/rules.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/rules.js +1 -0
- package/dist/capabilities/public-api-compatibility/application/rules.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts +32 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.js +81 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts +21 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.js +61 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.d.ts +22 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.js +89 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/module.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/module.js +33 -1
- package/dist/capabilities/public-api-compatibility/module.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/schemas.d.ts +1 -1
- package/dist/capabilities/public-api-compatibility/schemas.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/schemas.js +2 -1
- package/dist/capabilities/public-api-compatibility/schemas.js.map +1 -1
- package/dist/features/quality-coverage/adapters/consumer-toolchain.js +1 -1
- package/dist/features/quality-coverage/application/source-coverage.js +1 -1
- package/dist/features/quality-coverage/application/source-coverage.js.map +1 -1
- package/dist/schema-catalog.d.ts +1 -1
- package/dist/schema-catalog.d.ts.map +1 -1
- package/dist/schema-ids.d.ts +1 -1
- package/dist/schema-ids.d.ts.map +1 -1
- package/package.json +2 -1
- package/schemas/package-public-api-compatibility/v2.schema.json +263 -0
package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { GrowthObservationInvariantError, growthDimensions } from "../model/growth-observation.js";
|
|
2
|
+
import { growthReportPhases } from "../model/growth-report.js";
|
|
3
|
+
import { growthTransitionFingerprint } from "./compare-growth-surfaces.js";
|
|
4
|
+
import { growthCanonicalJson, growthUniqueSorted } from "./normalize-growth-observation.js";
|
|
5
|
+
function invalid() { throw new GrowthObservationInvariantError("invalid-growth-report"); }
|
|
6
|
+
function closed(value, keys) {
|
|
7
|
+
if (value === null || typeof value !== "object" || Array.isArray(value) || Object.keys(value).length !== keys.length || keys.some((key) => !Object.hasOwn(value, key))) {
|
|
8
|
+
invalid();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function text(value) { if (typeof value !== "string" || !value.trim() || value.length > 4096) {
|
|
12
|
+
invalid();
|
|
13
|
+
} }
|
|
14
|
+
function digest(value) { if (typeof value !== "string" || !/^sha256:[a-f0-9]{64}$/u.test(value)) {
|
|
15
|
+
invalid();
|
|
16
|
+
} }
|
|
17
|
+
function oneOf(value, choices) { if (typeof value !== "string" || !choices.includes(value)) {
|
|
18
|
+
invalid();
|
|
19
|
+
} }
|
|
20
|
+
function reasons(values) {
|
|
21
|
+
if (!Array.isArray(values) || values.length === 0) {
|
|
22
|
+
invalid();
|
|
23
|
+
}
|
|
24
|
+
const normalized = values.map((value) => { text(value); return value; });
|
|
25
|
+
return growthUniqueSorted(normalized, (value) => value);
|
|
26
|
+
}
|
|
27
|
+
function evidence(input, normalize) {
|
|
28
|
+
oneOf(input.status, ["available", "unavailable"]);
|
|
29
|
+
if (input.status === "available") {
|
|
30
|
+
closed(input, ["status", "value"]);
|
|
31
|
+
return { status: "available", value: normalize(input.value) };
|
|
32
|
+
}
|
|
33
|
+
closed(input, ["status", "reasons"]);
|
|
34
|
+
return { status: "unavailable", reasons: reasons(input.reasons) };
|
|
35
|
+
}
|
|
36
|
+
function reference(value) {
|
|
37
|
+
closed(value, ["sourceCommit", "sourceTree", "surfaceDigest", "topologyDigest", "lockDigest", "toolchainDigest", "artifactDigests"]);
|
|
38
|
+
if (!/^[a-f0-9]{40}$/u.test(value.sourceCommit) || !/^[a-f0-9]{40}$/u.test(value.sourceTree)) {
|
|
39
|
+
invalid();
|
|
40
|
+
}
|
|
41
|
+
[value.surfaceDigest, value.topologyDigest, value.lockDigest, value.toolchainDigest, ...value.artifactDigests].forEach(digest);
|
|
42
|
+
return { ...value, artifactDigests: growthUniqueSorted(value.artifactDigests, (entry) => entry) };
|
|
43
|
+
}
|
|
44
|
+
function comparison(value, fingerprint) {
|
|
45
|
+
oneOf(value.status, ["complete", "incomplete"]);
|
|
46
|
+
closed(value, value.status === "complete" ? ["status", "before", "after", "transitions"] : ["status", "reasons", "findings"]);
|
|
47
|
+
const rows = value.status === "complete" ? value.transitions : value.findings;
|
|
48
|
+
for (const row of rows) {
|
|
49
|
+
closed(row, ["coordinate", "before", "after", "policyVersion", "fingerprint"]);
|
|
50
|
+
oneOf(row.policyVersion, ["foundation:sdk-growth:policy:1"]);
|
|
51
|
+
if (growthTransitionFingerprint(row, fingerprint) !== row.fingerprint) {
|
|
52
|
+
invalid();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
growthUniqueSorted(rows, (row) => row.fingerprint);
|
|
56
|
+
const ordered = growthUniqueSorted(rows, (row) => growthCanonicalJson(row.coordinate));
|
|
57
|
+
if (value.status === "complete") {
|
|
58
|
+
digest(value.before);
|
|
59
|
+
digest(value.after);
|
|
60
|
+
return { ...value, transitions: ordered };
|
|
61
|
+
}
|
|
62
|
+
return { ...value, reasons: reasons(value.reasons), findings: ordered };
|
|
63
|
+
}
|
|
64
|
+
/** Validate the complete closed artifact before serialization/publication. */
|
|
65
|
+
export function validateGrowthReport(report, fingerprint) {
|
|
66
|
+
closed(report, ["contractRevision", "policyVersion", "repository", "trustedBase", "candidate", "released", "tool", "authority", "coverage", "trustedBaseComparison", "releasedComparison", "transitionReceipts", "phases", "verdict", "releaseEligible"]);
|
|
67
|
+
oneOf(report.contractRevision, ["foundation:sdk-growth:c0:5"]);
|
|
68
|
+
oneOf(report.policyVersion, ["foundation:sdk-growth:policy:1"]);
|
|
69
|
+
text(report.repository);
|
|
70
|
+
closed(report.tool, ["version", "artifactDigest", "extractorVersion"]);
|
|
71
|
+
text(report.tool.version);
|
|
72
|
+
text(report.tool.extractorVersion);
|
|
73
|
+
digest(report.tool.artifactDigest);
|
|
74
|
+
const trustedBase = evidence(report.trustedBase, reference), candidate = evidence(report.candidate, reference);
|
|
75
|
+
const released = growthUniqueSorted(report.released, (row) => row.packageName).map((row) => {
|
|
76
|
+
closed(row, ["packageName", "evidence"]);
|
|
77
|
+
text(row.packageName);
|
|
78
|
+
oneOf(row.evidence.kind, ["released", "initial-unreleased"]);
|
|
79
|
+
if (row.evidence.kind === "released") {
|
|
80
|
+
closed(row.evidence, ["kind", "observation"]);
|
|
81
|
+
return { ...row, evidence: { kind: "released", observation: evidence(row.evidence.observation, reference) } };
|
|
82
|
+
}
|
|
83
|
+
closed(row.evidence, ["kind", "history"]);
|
|
84
|
+
return { ...row, evidence: { kind: "initial-unreleased", history: evidence(row.evidence.history, (value) => { digest(value); return value; }) } };
|
|
85
|
+
});
|
|
86
|
+
const authority = validateAuthority(report.authority);
|
|
87
|
+
const coverage = growthUniqueSorted(report.coverage, (row) => row.packageName).map((row) => {
|
|
88
|
+
closed(row, ["packageName", "classification", "dimensions"]);
|
|
89
|
+
text(row.packageName);
|
|
90
|
+
oneOf(row.classification, ["governed", "private-only"]);
|
|
91
|
+
const dimensions = growthUniqueSorted(row.dimensions, (entry) => entry.dimension).map((entry) => {
|
|
92
|
+
closed(entry, ["dimension", "status", "reasons"]);
|
|
93
|
+
oneOf(entry.dimension, growthDimensions);
|
|
94
|
+
oneOf(entry.status, ["complete", "limited", "unsupported", "unavailable"]);
|
|
95
|
+
return { ...entry, reasons: entry.status === "complete" && entry.reasons.length === 0 ? [] : reasons(entry.reasons) };
|
|
96
|
+
});
|
|
97
|
+
if (dimensions.length !== growthDimensions.length) {
|
|
98
|
+
invalid();
|
|
99
|
+
}
|
|
100
|
+
return { ...row, dimensions };
|
|
101
|
+
});
|
|
102
|
+
const trustedBaseComparison = comparison(report.trustedBaseComparison, fingerprint), releasedComparison = comparison(report.releasedComparison, fingerprint);
|
|
103
|
+
if (report.phases.length !== growthReportPhases.length) {
|
|
104
|
+
invalid();
|
|
105
|
+
}
|
|
106
|
+
report.phases.forEach((phase, index) => { closed(phase, ["name", "status"]); if (phase.name !== growthReportPhases[index]) {
|
|
107
|
+
invalid();
|
|
108
|
+
} oneOf(phase.status, ["complete", "failed", "unavailable"]); });
|
|
109
|
+
oneOf(report.verdict, ["admitted", "rejected", "incomplete"]);
|
|
110
|
+
if (typeof report.releaseEligible !== "boolean") {
|
|
111
|
+
invalid();
|
|
112
|
+
}
|
|
113
|
+
const incomplete = trustedBase.status !== "available" || candidate.status !== "available" || authority.status !== "verified"
|
|
114
|
+
|| trustedBaseComparison.status !== "complete" || releasedComparison.status !== "complete" || report.phases.some((phase) => phase.status === "unavailable")
|
|
115
|
+
|| coverage.length === 0 || coverage.some((row) => row.dimensions.some((entry) => entry.status !== "complete"));
|
|
116
|
+
if (incomplete && report.verdict !== "incomplete") {
|
|
117
|
+
invalid();
|
|
118
|
+
}
|
|
119
|
+
if (report.verdict !== "admitted" && (report.transitionReceipts.length !== 0 || report.releaseEligible)) {
|
|
120
|
+
invalid();
|
|
121
|
+
}
|
|
122
|
+
const transitionReceipts = growthUniqueSorted(report.transitionReceipts, (row) => growthCanonicalJson([row.before, row.after])).map((row) => {
|
|
123
|
+
closed(row, ["before", "after", "decisions", "transitions", "trustedRunRef"]);
|
|
124
|
+
digest(row.before);
|
|
125
|
+
digest(row.after);
|
|
126
|
+
text(row.trustedRunRef);
|
|
127
|
+
row.decisions.forEach(digest);
|
|
128
|
+
row.transitions.forEach(digest);
|
|
129
|
+
const transitions = growthUniqueSorted(row.transitions, (value) => value), decisions = growthUniqueSorted(row.decisions, (value) => value);
|
|
130
|
+
if (authority.status !== "verified" || row.trustedRunRef !== authority.runRef || trustedBaseComparison.status !== "complete"
|
|
131
|
+
|| row.before !== trustedBaseComparison.before || row.after !== trustedBaseComparison.after
|
|
132
|
+
|| growthCanonicalJson(transitions) !== growthCanonicalJson(trustedBaseComparison.transitions.map((entry) => entry.fingerprint).toSorted())) {
|
|
133
|
+
invalid();
|
|
134
|
+
}
|
|
135
|
+
return { ...row, transitions, decisions };
|
|
136
|
+
});
|
|
137
|
+
if (report.verdict === "admitted" && (transitionReceipts.length !== 1 || report.phases.some((phase) => phase.status !== "complete"))) {
|
|
138
|
+
invalid();
|
|
139
|
+
}
|
|
140
|
+
return { ...report, trustedBase, candidate, released, authority, coverage, trustedBaseComparison, releasedComparison, transitionReceipts };
|
|
141
|
+
}
|
|
142
|
+
function validateAuthority(input) {
|
|
143
|
+
const authority = input.status === "verified" ? input : { ...input, reasons: reasons(input.reasons) };
|
|
144
|
+
if (authority.status === "verified") {
|
|
145
|
+
closed(authority, ["status", "workflowRef", "runRef", "receiptDigest"]);
|
|
146
|
+
text(authority.workflowRef);
|
|
147
|
+
text(authority.runRef);
|
|
148
|
+
digest(authority.receiptDigest);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
oneOf(authority.status, ["unverified"]);
|
|
152
|
+
closed(authority, ["status", "reasons"]);
|
|
153
|
+
}
|
|
154
|
+
return authority;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=validate-growth-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-growth-report.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/validate-growth-report.ts"],"names":[],"mappings":"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"}
|
package/dist/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { GrowthDecision, GrowthDecisionAuthority } from "../model/growth-admission.js";
|
|
2
|
+
import type { GrowthEvidence } from "../model/growth-observation.js";
|
|
1
3
|
export interface AcceptedDecisionEvidence {
|
|
2
4
|
readonly acceptedDecisionIds: readonly `ADR-${string}`[];
|
|
3
5
|
/** Immutable repository paths from the same validated governance baseline. */
|
|
4
6
|
readonly acceptedDecisionPaths: readonly string[];
|
|
7
|
+
/** Additive S2 evidence; omission is unavailable, never acceptance by ID. */
|
|
8
|
+
readonly growthDecisionAuthority?: GrowthEvidence<readonly GrowthDecisionAuthority[]>;
|
|
5
9
|
}
|
|
6
10
|
/**
|
|
7
11
|
* Consumer-owned approval evidence. Architecture-decision governance owns
|
|
@@ -14,6 +18,7 @@ export interface AcceptedDecisionEvidencePort {
|
|
|
14
18
|
readonly baselinePath: string;
|
|
15
19
|
readonly governanceConfigPath: string;
|
|
16
20
|
readonly signal?: AbortSignal;
|
|
21
|
+
readonly growthDecisions?: readonly GrowthDecision[];
|
|
17
22
|
}): Promise<AcceptedDecisionEvidence>;
|
|
18
23
|
}
|
|
19
24
|
export type { AcceptedArchitectureDecisionReader } from "../../../governance-architecture-decisions/api.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accepted-decision-evidence.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,OAAO,MAAM,EAAE,EAAE,CAAC;IACzD,8EAA8E;IAC9E,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"accepted-decision-evidence.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,OAAO,MAAM,EAAE,EAAE,CAAC;IACzD,8EAA8E;IAC9E,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,6EAA6E;IAC7E,QAAQ,CAAC,uBAAuB,CAAC,EAAE,cAAc,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAAC;CACvF;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,4BAA4B,CAAC,KAAK,EAAE;QAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;KACtD,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACvC;AAED,YAAY,EAAE,kCAAkC,EAAE,MAAM,mDAAmD,CAAC"}
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GrowthCancellation } from "../model/growth-observation.js";
|
|
2
|
+
import type { GrowthContextRequest, GrowthInputContext } from "../model/growth-admission-context.js";
|
|
3
|
+
/** Input evidence only. Candidate/config files never establish verified
|
|
4
|
+
* authority. Future trusted composition supplies independently verified context;
|
|
5
|
+
* current S1 records alone cannot fill missing retained or initial history. */
|
|
6
|
+
export interface GrowthInputContextPort {
|
|
7
|
+
read(request: GrowthContextRequest, cancellation: GrowthCancellation): Promise<GrowthInputContext>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=growth-input-context.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-input-context.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-input-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAErG;;+EAE+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACpG"}
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-input-context.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-input-context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GrowthCancellation, GrowthInvocation, GrowthObservationExecution } from "../model/growth-observation.js";
|
|
2
|
+
/** Internal S1 boundary. No release, decision or activation authority. */
|
|
3
|
+
export interface GrowthObservationPort {
|
|
4
|
+
observe(invocation: GrowthInvocation, cancellation: GrowthCancellation): Promise<GrowthObservationExecution>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=growth-observation.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-observation.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-observation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEvH,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC9G"}
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-observation.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-observation.ts"],"names":[],"mappings":""}
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GrowthCancellation, GrowthDigest } from "../model/growth-observation.js";
|
|
2
|
+
export type { GrowthDigest } from "../model/growth-observation.js";
|
|
3
|
+
/** One replaceable report slot, not a release baseline or authority receipt.
|
|
4
|
+
* The writer observes and fences the preimage when caller CAS is omitted.
|
|
5
|
+
* Explicit null requires an absent slot; a digest requires those bytes.
|
|
6
|
+
* Identical bytes replay successfully even with a stale caller preimage. */
|
|
7
|
+
export interface GrowthReportWriter {
|
|
8
|
+
write(request: {
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly contents: string;
|
|
11
|
+
readonly expectedPreimage?: GrowthDigest | null;
|
|
12
|
+
}, cancellation: GrowthCancellation): Promise<{
|
|
13
|
+
readonly status: "published" | "replayed";
|
|
14
|
+
readonly digest: GrowthDigest;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export declare class GrowthReportWriteError extends Error {
|
|
18
|
+
readonly kind: "conflict" | "io" | "uncertain";
|
|
19
|
+
readonly reason: string;
|
|
20
|
+
constructor(kind: "conflict" | "io" | "uncertain", reason: string, options?: ErrorOptions);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=growth-report-writer.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-report-writer.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-report-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACvF,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE;;;4EAG4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,OAAO,EAAE;QACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;KACjD,EAAE,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAAC;QAC1C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;KAC/B,CAAC,CAAC;CACJ;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,WAAW;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAnF,YAAqB,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,WAAW,EAAW,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAG1G;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class GrowthReportWriteError extends Error {
|
|
2
|
+
kind;
|
|
3
|
+
reason;
|
|
4
|
+
constructor(kind, reason, options) {
|
|
5
|
+
super(reason, options);
|
|
6
|
+
this.kind = kind;
|
|
7
|
+
this.reason = reason;
|
|
8
|
+
this.name = "GrowthReportWriteError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=growth-report-writer.js.map
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-report-writer.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-report-writer.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC1B,IAAI;IAA4C,MAAM;IAA3E,YAAqB,IAAqC,EAAW,MAAc,EAAE,OAAsB;QACzG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;oBADJ,IAAI;sBAA4C,MAAM;QAEzE,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GrowthWorkspacePackage } from "../model/growth-workspace.js";
|
|
2
|
+
export interface GrowthWorkspaceReader {
|
|
3
|
+
read(consumerRoot: string, workspaceManifestPath: string, signal?: AbortSignal): Promise<{
|
|
4
|
+
readonly packages: readonly GrowthWorkspacePackage[];
|
|
5
|
+
}>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=growth-workspace.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-workspace.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAA;KAAE,CAAC,CAAC;CACpJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth-workspace.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-workspace.ts"],"names":[],"mappings":""}
|
|
@@ -8,6 +8,14 @@ export interface PublicApiCompatibilityRuleMetadata {
|
|
|
8
8
|
readonly requiresArchitectureReview: boolean;
|
|
9
9
|
}
|
|
10
10
|
export declare const PUBLIC_API_COMPATIBILITY_RULES: Readonly<{
|
|
11
|
+
sdkGrowthReport: Readonly<{
|
|
12
|
+
id: string;
|
|
13
|
+
rationale: string;
|
|
14
|
+
remediation: string;
|
|
15
|
+
documentation: string;
|
|
16
|
+
requiresArchitectureReview: boolean;
|
|
17
|
+
severity: "info";
|
|
18
|
+
}>;
|
|
11
19
|
baselineToolMismatch: PublicApiCompatibilityRuleMetadata;
|
|
12
20
|
baselineVersionMismatch: PublicApiCompatibilityRuleMetadata;
|
|
13
21
|
breakingChangeNotApproved: PublicApiCompatibilityRuleMetadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/public-api-compatibility/application/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAGxF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAkBD,eAAO,MAAM,8BAA8B
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/public-api-compatibility/application/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AAGxF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAkBD,eAAO,MAAM,8BAA8B;;YAxB5B,MAAM;mBAEC,MAAM;qBACJ,MAAM;uBACJ,MAAM;oCACO,OAAO;kBAsBwE,MAAM;;;;;;;;EAkC1H,CAAC;AAEH,eAAO,MAAM,oCAAoC,EAAE,WAAW,CAC5D,MAAM,EACN,kCAAkC,CAInC,CAAC"}
|
|
@@ -10,6 +10,7 @@ function rule(suffix, rationale, remediation, requiresArchitectureReview = false
|
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
12
|
export const PUBLIC_API_COMPATIBILITY_RULES = Object.freeze({
|
|
13
|
+
sdkGrowthReport: Object.freeze({ ...rule("sdk-growth-report", "SDK growth reports preserve exact transitions and incomplete evidence without granting release authority.", "Inspect the exact SDK report; supply qualified evidence through the separately trusted integration."), severity: "info" }),
|
|
13
14
|
baselineToolMismatch: rule("baseline-tool-mismatch", "API surfaces produced by different extractor versions are not directly comparable evidence.", "Regenerate the released baseline only through the release workflow after reviewing the tool upgrade.", true),
|
|
14
15
|
baselineVersionMismatch: rule("baseline-version-mismatch", "The released API baseline must identify the currently versioned package release.", "Promote the current surface during the version release workflow."),
|
|
15
16
|
breakingChangeNotApproved: rule("breaking-change-not-approved", "A breaking public API change needs an explicit accepted architecture decision.", "Approve the reported fingerprint in an ADR-backed breaking-change entry.", true),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/capabilities/public-api-compatibility/application/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAWrF,SAAS,IAAI,CACX,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,0BAA0B,GAAG,KAAK;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,oCAAoC,MAAM,EAAE;QAChD,QAAQ,EAAE,OAAO;QACjB,SAAS;QACT,WAAW;QACX,aAAa,EAAE,+CAA+C;QAC9D,0BAA0B;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,oBAAoB,EAAE,IAAI,CACxB,wBAAwB,EACxB,6FAA6F,EAC7F,sGAAsG,EACtG,IAAI,CACL;IACD,uBAAuB,EAAE,IAAI,CAC3B,2BAA2B,EAC3B,kFAAkF,EAClF,kEAAkE,CACnE;IACD,yBAAyB,EAAE,IAAI,CAC7B,8BAA8B,EAC9B,gFAAgF,EAChF,0EAA0E,EAC1E,IAAI,CACL;IACD,mBAAmB,EAAE,IAAI,CACvB,uBAAuB,EACvB,4FAA4F,EAC5F,8DAA8D,EAC9D,IAAI,CACL;IACD,qBAAqB,EAAE,IAAI,CACzB,wBAAwB,EACxB,2EAA2E,EAC3E,kEAAkE,CACnE;IACD,gBAAgB,EAAE,IAAI,CACpB,mBAAmB,EACnB,oEAAoE,EACpE,2CAA2C,CAC5C;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAG7C,oBAAoB,CACtB,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CACzF,CAAC"}
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/capabilities/public-api-compatibility/application/rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAWrF,SAAS,IAAI,CACX,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,0BAA0B,GAAG,KAAK;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,oCAAoC,MAAM,EAAE;QAChD,QAAQ,EAAE,OAAO;QACjB,SAAS;QACT,WAAW;QACX,aAAa,EAAE,+CAA+C;QAC9D,0BAA0B;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1D,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAC1D,2GAA2G,EAC3G,qGAAqG,CAAC,EAAE,QAAQ,EAAE,MAAe,EAAE,CAAC;IACtI,oBAAoB,EAAE,IAAI,CACxB,wBAAwB,EACxB,6FAA6F,EAC7F,sGAAsG,EACtG,IAAI,CACL;IACD,uBAAuB,EAAE,IAAI,CAC3B,2BAA2B,EAC3B,kFAAkF,EAClF,kEAAkE,CACnE;IACD,yBAAyB,EAAE,IAAI,CAC7B,8BAA8B,EAC9B,gFAAgF,EAChF,0EAA0E,EAC1E,IAAI,CACL;IACD,mBAAmB,EAAE,IAAI,CACvB,uBAAuB,EACvB,4FAA4F,EAC5F,8DAA8D,EAC9D,IAAI,CACL;IACD,qBAAqB,EAAE,IAAI,CACzB,wBAAwB,EACxB,2EAA2E,EAC3E,kEAAkE,CACnE;IACD,gBAAgB,EAAE,IAAI,CACpB,mBAAmB,EACnB,oEAAoE,EACpE,2CAA2C,CAC5C;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAG7C,oBAAoB,CACtB,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CACzF,CAAC"}
|
package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { GrowthAdmissionResult, GrowthComparison } from "../model/growth-admission.js";
|
|
2
|
+
import type { GrowthContextRequest, GrowthInputContext } from "../model/growth-admission-context.js";
|
|
3
|
+
import type { GrowthCancellation, GrowthInvocation, GrowthObservationExecution } from "../model/growth-observation.js";
|
|
4
|
+
import type { ChangeFingerprint } from "../ports/change-fingerprint.js";
|
|
5
|
+
import type { GrowthObservationPort } from "../ports/growth-observation.js";
|
|
6
|
+
import type { GrowthInputContextPort } from "../ports/growth-input-context.js";
|
|
7
|
+
import type { GrowthReleaseCompatibilityResult } from "../policies/evaluate-growth-release-compatibility.js";
|
|
8
|
+
export interface SdkGrowthAdmissionExecution {
|
|
9
|
+
readonly observation: GrowthObservationExecution;
|
|
10
|
+
readonly baseReference: GrowthInputContext["trustedBaseReference"];
|
|
11
|
+
readonly baseSurface: GrowthInputContext["trustedBase"];
|
|
12
|
+
readonly authority: GrowthInputContext["authority"];
|
|
13
|
+
readonly admission: GrowthAdmissionResult;
|
|
14
|
+
readonly decisionDigests: readonly import("../model/growth-observation.js").GrowthDigest[];
|
|
15
|
+
readonly comparison: GrowthComparison;
|
|
16
|
+
readonly compatibility: GrowthReleaseCompatibilityResult;
|
|
17
|
+
readonly released: GrowthInputContext["released"];
|
|
18
|
+
}
|
|
19
|
+
/** Internal S2 use case. One S1 observation is authoritative for both
|
|
20
|
+
* comparisons. Persistence and command mapping remain outside this policy.
|
|
21
|
+
* The context boundary owns external verification; unavailable retained history
|
|
22
|
+
* is never reconstructed from a candidate or an empty v1 baseline. */
|
|
23
|
+
export declare function admitSdkGrowth(input: {
|
|
24
|
+
readonly invocation: GrowthInvocation;
|
|
25
|
+
readonly context: GrowthContextRequest;
|
|
26
|
+
readonly cancellation: GrowthCancellation;
|
|
27
|
+
}, dependencies: {
|
|
28
|
+
readonly observation: GrowthObservationPort;
|
|
29
|
+
readonly context: GrowthInputContextPort;
|
|
30
|
+
readonly fingerprint: ChangeFingerprint;
|
|
31
|
+
}): Promise<SdkGrowthAdmissionExecution>;
|
|
32
|
+
//# sourceMappingURL=admit-sdk-growth.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admit-sdk-growth.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AACrG,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEvH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAI/E,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAmC7G,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,SAAS,OAAO,gCAAgC,EAAE,YAAY,EAAE,CAAC;IAC3F,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACzD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;CACnD;AAED;;;sEAGsE;AACtE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;CAC3C,EAAE,YAAY,EAAE;IACf,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;CACzC,GAAG,OAAO,CAAC,2BAA2B,CAAC,CA8BvC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { GrowthObservationInvariantError } from "../model/growth-observation.js";
|
|
2
|
+
import { compareGrowthSurfaces } from "../policies/compare-growth-surfaces.js";
|
|
3
|
+
import { evaluateGrowthAdmission } from "../policies/evaluate-growth-admission.js";
|
|
4
|
+
import { evaluateGrowthReleaseCompatibility } from "../policies/evaluate-growth-release-compatibility.js";
|
|
5
|
+
import { growthCanonicalJson, growthObservationReference, growthUniqueSorted, normalizeGrowthInvocation } from "../policies/normalize-growth-observation.js";
|
|
6
|
+
import { assertGrowthEvidence, validateGrowthExecution } from "../policies/validate-growth-execution.js";
|
|
7
|
+
function trustedReasons(context, fingerprint) {
|
|
8
|
+
assertGrowthEvidence(context.trustedBase);
|
|
9
|
+
assertGrowthEvidence(context.trustedBaseReference);
|
|
10
|
+
assertGrowthEvidence(context.retainedHistory);
|
|
11
|
+
const reasons = [];
|
|
12
|
+
if (context.authority.status === "verified" && !/^sha256:[a-f0-9]{64}$/u.test(context.authority.receiptDigest)) {
|
|
13
|
+
throw new GrowthObservationInvariantError("growth-authority-receipt-invalid");
|
|
14
|
+
}
|
|
15
|
+
if (context.retainedHistory.status === "available" && !/^sha256:[a-f0-9]{64}$/u.test(context.retainedHistory.value.receiptDigest)) {
|
|
16
|
+
throw new GrowthObservationInvariantError("growth-history-receipt-invalid");
|
|
17
|
+
}
|
|
18
|
+
if (context.authority.status !== "verified") {
|
|
19
|
+
reasons.push("growth-authority-unverified");
|
|
20
|
+
}
|
|
21
|
+
if (context.trustedBase.status !== "available" || context.trustedBaseReference.status !== "available") {
|
|
22
|
+
reasons.push("growth-trusted-base-reference-unavailable");
|
|
23
|
+
return reasons;
|
|
24
|
+
}
|
|
25
|
+
const reference = growthObservationReference(context.trustedBase.value, fingerprint);
|
|
26
|
+
if (growthCanonicalJson(reference) !== growthCanonicalJson(context.trustedBaseReference.value)) {
|
|
27
|
+
throw new GrowthObservationInvariantError("growth-trusted-base-reference-mismatch");
|
|
28
|
+
}
|
|
29
|
+
if (context.retainedHistory.status !== "available") {
|
|
30
|
+
reasons.push("growth-retained-history-unavailable");
|
|
31
|
+
}
|
|
32
|
+
else if (context.retainedHistory.value.targetSurfaceDigest !== reference.surfaceDigest) {
|
|
33
|
+
reasons.push("growth-retained-history-target-mismatch");
|
|
34
|
+
}
|
|
35
|
+
return reasons;
|
|
36
|
+
}
|
|
37
|
+
function releaseScopeReasons(context, execution) {
|
|
38
|
+
if (context.trustedBase.status !== "available" || execution.surface.status !== "available") {
|
|
39
|
+
return ["growth-release-topology-unavailable"];
|
|
40
|
+
}
|
|
41
|
+
const packages = [...new Set([...context.trustedBase.value.coverage, ...execution.surface.value.coverage].map((row) => row.packageName))].toSorted();
|
|
42
|
+
const released = growthUniqueSorted(context.released, (row) => row.packageName).map((row) => row.packageName);
|
|
43
|
+
return growthCanonicalJson(packages) === growthCanonicalJson(released) ? [] : ["growth-release-topology-mismatch"];
|
|
44
|
+
}
|
|
45
|
+
/** Internal S2 use case. One S1 observation is authoritative for both
|
|
46
|
+
* comparisons. Persistence and command mapping remain outside this policy.
|
|
47
|
+
* The context boundary owns external verification; unavailable retained history
|
|
48
|
+
* is never reconstructed from a candidate or an empty v1 baseline. */
|
|
49
|
+
export async function admitSdkGrowth(input, dependencies) {
|
|
50
|
+
const cancellation = input.cancellation;
|
|
51
|
+
cancellation.throwIfCancelled();
|
|
52
|
+
const invocation = structuredClone(normalizeGrowthInvocation(input.invocation));
|
|
53
|
+
const request = structuredClone(input.context);
|
|
54
|
+
try {
|
|
55
|
+
const execution = structuredClone(await dependencies.observation.observe(structuredClone(invocation), cancellation));
|
|
56
|
+
cancellation.throwIfCancelled();
|
|
57
|
+
validateGrowthExecution(execution, invocation);
|
|
58
|
+
const context = structuredClone(await dependencies.context.read(request, cancellation));
|
|
59
|
+
cancellation.throwIfCancelled();
|
|
60
|
+
const reasons = [...trustedReasons(context, dependencies.fingerprint), ...releaseScopeReasons(context, execution)];
|
|
61
|
+
const observedComparison = compareGrowthSurfaces({ trustedBefore: context.trustedBase, candidateAfter: execution.surface }, dependencies.fingerprint);
|
|
62
|
+
const comparison = reasons.length === 0 ? observedComparison : {
|
|
63
|
+
status: "incomplete",
|
|
64
|
+
reasons: growthUniqueSorted([...reasons, ...(observedComparison.status === "incomplete" ? observedComparison.reasons : [])], (reason) => reason),
|
|
65
|
+
findings: observedComparison.status === "complete" ? observedComparison.transitions : observedComparison.findings
|
|
66
|
+
};
|
|
67
|
+
const compatibility = evaluateGrowthReleaseCompatibility({ current: execution.compatibilitySnapshots, released: context.released,
|
|
68
|
+
extractorVersion: invocation.tool.extractorVersion, acceptedDecisions: context.acceptedBreakingDecisions }, dependencies.fingerprint);
|
|
69
|
+
const ownerEvidence = context.acceptedBreakingDecisions.growthDecisionAuthority;
|
|
70
|
+
const authority = context.authority.status === "verified" && ownerEvidence?.status === "available" ? ownerEvidence.value : [];
|
|
71
|
+
const admission = evaluateGrowthAdmission({ comparison, decisions: context.decisions, authority, compatibility: compatibility.status }, dependencies.fingerprint);
|
|
72
|
+
cancellation.throwIfCancelled();
|
|
73
|
+
return { observation: execution, baseReference: context.trustedBaseReference, baseSurface: context.trustedBase, authority: context.authority,
|
|
74
|
+
admission, decisionDigests: growthUniqueSorted(authority.map((entry) => entry.decisionDigest), (entry) => entry), comparison, compatibility, released: context.released };
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
cancellation.throwIfCancelled();
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=admit-sdk-growth.js.map
|
package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admit-sdk-growth.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.ts"],"names":[],"mappings":"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"}
|
package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { GrowthCancellation, GrowthInvocation } from "../model/growth-observation.js";
|
|
2
|
+
import type { CapabilityReport } from "../../../../features/validation-reporting/api.js";
|
|
3
|
+
import type { SdkGrowthCapabilityPolicy } from "../model/growth-configuration.js";
|
|
4
|
+
import type { GrowthInputContextPort } from "../ports/growth-input-context.js";
|
|
5
|
+
import type { GrowthReportWriter } from "../ports/growth-report-writer.js";
|
|
6
|
+
import type { PublicApiRepository } from "../ports/public-api-repository.js";
|
|
7
|
+
import { createGrowthObservation } from "./observe-sdk-growth.js";
|
|
8
|
+
/** Existing capability route, one S1 execution and the unchanged release
|
|
9
|
+
* comparator. Persistence owns the final cancellation boundary. */
|
|
10
|
+
export declare function checkSdkGrowth(input: {
|
|
11
|
+
readonly consumerRoot: string;
|
|
12
|
+
readonly policy: SdkGrowthCapabilityPolicy;
|
|
13
|
+
readonly invocation: GrowthInvocation;
|
|
14
|
+
readonly signal?: AbortSignal;
|
|
15
|
+
}, dependencies: Parameters<typeof createGrowthObservation>[1] & {
|
|
16
|
+
readonly context: GrowthInputContextPort;
|
|
17
|
+
readonly writer: GrowthReportWriter;
|
|
18
|
+
readonly repository: PublicApiRepository;
|
|
19
|
+
readonly readInvocation: (cancellation: GrowthCancellation) => Promise<GrowthInvocation>;
|
|
20
|
+
}): Promise<CapabilityReport>;
|
|
21
|
+
//# sourceMappingURL=check-sdk-growth.d.ts.map
|
package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-sdk-growth.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AACzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAGlE;mEACmE;AACnE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG;IAC/D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,CAAC,YAAY,EAAE,kBAAkB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1F,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+C5B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { validateGrowthReport } from "../policies/validate-growth-report.js";
|
|
2
|
+
import { projectGrowthReport } from "../policies/project-growth-report.js";
|
|
3
|
+
import { GrowthObservationInvariantError } from "../model/growth-observation.js";
|
|
4
|
+
import { assertNotCancelled, capabilityReport } from "../../../../features/validation-reporting/api.js";
|
|
5
|
+
import { GrowthReportWriteError } from "../ports/growth-report-writer.js";
|
|
6
|
+
import { growthCanonicalJson } from "../policies/normalize-growth-observation.js";
|
|
7
|
+
import { createGrowthObservation } from "./observe-sdk-growth.js";
|
|
8
|
+
import { admitSdkGrowth } from "./admit-sdk-growth.js";
|
|
9
|
+
/** Existing capability route, one S1 execution and the unchanged release
|
|
10
|
+
* comparator. Persistence owns the final cancellation boundary. */
|
|
11
|
+
export async function checkSdkGrowth(input, dependencies) {
|
|
12
|
+
const cancellation = { ...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
13
|
+
throwIfCancelled() { assertNotCancelled(input.signal); } };
|
|
14
|
+
cancellation.throwIfCancelled();
|
|
15
|
+
const config = structuredClone(input.policy);
|
|
16
|
+
const invocation = structuredClone(input.invocation);
|
|
17
|
+
const subjects = [];
|
|
18
|
+
for (const policy of config.compatibility.packages) {
|
|
19
|
+
const release = await dependencies.repository.readReleaseEvidence(input.consumerRoot, config.compatibility.changesetDirectory, policy, input.signal);
|
|
20
|
+
subjects.push({ policy, packageVersion: release.packageVersion });
|
|
21
|
+
}
|
|
22
|
+
const observation = createGrowthObservation({ consumerRoot: input.consumerRoot,
|
|
23
|
+
workspaceManifestPath: "pnpm-workspace.yaml", subjects }, dependencies);
|
|
24
|
+
const execution = await admitSdkGrowth({ invocation, context: { ...config.sdkGrowth.comparison, decisionsPath: config.sdkGrowth.decisionsPath }, cancellation }, { observation, context: dependencies.context, fingerprint: dependencies.fingerprint });
|
|
25
|
+
const finalInvocation = await dependencies.readInvocation(cancellation);
|
|
26
|
+
if (growthCanonicalJson(finalInvocation) !== growthCanonicalJson(invocation)) {
|
|
27
|
+
throw new GrowthObservationInvariantError("growth-execution-inputs-changed");
|
|
28
|
+
}
|
|
29
|
+
const payload = validateGrowthReport(projectGrowthReport(execution, dependencies.fingerprint), dependencies.fingerprint);
|
|
30
|
+
let publication;
|
|
31
|
+
try {
|
|
32
|
+
publication = await dependencies.writer.write({ path: config.sdkGrowth.reportPath,
|
|
33
|
+
contents: `${growthCanonicalJson(payload)}\n` }, cancellation);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (!(error instanceof GrowthReportWriteError)) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
return capabilityReport({ capabilityId: "package.public-api-compatibility", capabilityConfigSchemaVersion: 2, outcome: "failed",
|
|
40
|
+
problem: { code: `SDK_GROWTH_REPORT_${error.kind.toUpperCase()}`, message: error.reason,
|
|
41
|
+
phase: "sdk-growth-report-publication", retryable: error.kind === "uncertain" } });
|
|
42
|
+
}
|
|
43
|
+
const status = payload.verdict;
|
|
44
|
+
return capabilityReport({ capabilityId: "package.public-api-compatibility", capabilityConfigSchemaVersion: 2,
|
|
45
|
+
outcome: status === "admitted" ? "passed" : status === "rejected" ? "violations" : "invalid-input",
|
|
46
|
+
...(status === "incomplete" ? { problem: { code: "SDK_GROWTH_EVIDENCE_INCOMPLETE", message: "SDK evidence is incomplete; no trusted admission or release authority is established.",
|
|
47
|
+
phase: "sdk-growth-evidence", retryable: false } } : {}),
|
|
48
|
+
diagnostics: [...execution.compatibility.diagnostics, ...execution.admission.diagnostics.map((diagnostic) => ({
|
|
49
|
+
ruleId: `package.public-api-compatibility.${diagnostic.code}`, severity: "error",
|
|
50
|
+
subject: diagnostic.subject, message: diagnostic.code, location: { path: config.sdkGrowth.decisionsPath }, relatedLocations: [],
|
|
51
|
+
evidence: [], remediation: diagnostic.remediation, requiresArchitectureReview: false
|
|
52
|
+
})), {
|
|
53
|
+
ruleId: "package.public-api-compatibility.sdk-growth-report", severity: "info", subject: payload.repository,
|
|
54
|
+
message: `SDK growth ${status}; report ${publication.digest}.`, location: { path: config.sdkGrowth.reportPath }, relatedLocations: [],
|
|
55
|
+
evidence: [{ kind: "sdk-growth-report-path", value: config.sdkGrowth.reportPath }, { kind: "sdk-growth-report-digest", value: publication.digest },
|
|
56
|
+
{ kind: "sdk-growth-contract-revision", value: payload.contractRevision }],
|
|
57
|
+
remediation: "Inspect the SDK report's exact transitions, decision diagnostics and incomplete reasons. Filesystem inputs never establish trusted authority.",
|
|
58
|
+
requiresArchitectureReview: false
|
|
59
|
+
}] });
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=check-sdk-growth.js.map
|
package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-sdk-growth.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.ts"],"names":[],"mappings":"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"}
|