@agent-teams/engineering-foundation 1.3.2 → 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.
Files changed (155) hide show
  1. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.d.ts +2 -2
  2. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.d.ts.map +1 -1
  3. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.js +15 -4
  4. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.js.map +1 -1
  5. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.d.ts +8 -0
  6. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.d.ts.map +1 -0
  7. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.js +54 -0
  8. package/dist/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.js.map +1 -0
  9. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.d.ts +18 -0
  10. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.d.ts.map +1 -0
  11. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.js +194 -0
  12. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.js.map +1 -0
  13. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.d.ts +15 -0
  14. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.d.ts.map +1 -0
  15. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.js +173 -0
  16. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.js.map +1 -0
  17. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.d.ts +10 -0
  18. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.d.ts.map +1 -0
  19. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.js +238 -0
  20. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-report-writer.js.map +1 -0
  21. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.d.ts +4 -0
  22. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.d.ts.map +1 -0
  23. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.js +15 -0
  24. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/workspace-growth-reader.js.map +1 -0
  25. package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.d.ts +1 -6
  26. package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.d.ts.map +1 -1
  27. package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.js +7 -1
  28. package/dist/capabilities/public-api-compatibility/adapters/outbound/governance/governance-accepted-decision-evidence-acl.js.map +1 -1
  29. package/dist/capabilities/public-api-compatibility/adapters/schema-validation.d.ts +1 -1
  30. package/dist/capabilities/public-api-compatibility/adapters/schema-validation.d.ts.map +1 -1
  31. package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.d.ts +54 -0
  32. package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.d.ts.map +1 -0
  33. package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.js +2 -0
  34. package/dist/capabilities/public-api-compatibility/application/model/growth-admission-context.js.map +1 -0
  35. package/dist/capabilities/public-api-compatibility/application/model/growth-admission.d.ts +77 -0
  36. package/dist/capabilities/public-api-compatibility/application/model/growth-admission.d.ts.map +1 -0
  37. package/dist/capabilities/public-api-compatibility/application/model/growth-admission.js +3 -0
  38. package/dist/capabilities/public-api-compatibility/application/model/growth-admission.js.map +1 -0
  39. package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.d.ts +16 -0
  40. package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.d.ts.map +1 -0
  41. package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.js +2 -0
  42. package/dist/capabilities/public-api-compatibility/application/model/growth-configuration.js.map +1 -0
  43. package/dist/capabilities/public-api-compatibility/application/model/growth-observation.d.ts +119 -0
  44. package/dist/capabilities/public-api-compatibility/application/model/growth-observation.d.ts.map +1 -0
  45. package/dist/capabilities/public-api-compatibility/application/model/growth-observation.js +19 -0
  46. package/dist/capabilities/public-api-compatibility/application/model/growth-observation.js.map +1 -0
  47. package/dist/capabilities/public-api-compatibility/application/model/growth-report.d.ts +47 -0
  48. package/dist/capabilities/public-api-compatibility/application/model/growth-report.d.ts.map +1 -0
  49. package/dist/capabilities/public-api-compatibility/application/model/growth-report.js +2 -0
  50. package/dist/capabilities/public-api-compatibility/application/model/growth-report.js.map +1 -0
  51. package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.d.ts +18 -0
  52. package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.d.ts.map +1 -0
  53. package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.js +2 -0
  54. package/dist/capabilities/public-api-compatibility/application/model/growth-workspace.js.map +1 -0
  55. package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.d.ts +22 -0
  56. package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.d.ts.map +1 -0
  57. package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.js +114 -0
  58. package/dist/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.js.map +1 -0
  59. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.d.ts +13 -0
  60. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.d.ts.map +1 -0
  61. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.js +162 -0
  62. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.js.map +1 -0
  63. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.d.ts +20 -0
  64. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.d.ts.map +1 -0
  65. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.js +73 -0
  66. package/dist/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.js.map +1 -0
  67. package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.d.ts +15 -0
  68. package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.d.ts.map +1 -0
  69. package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.js +130 -0
  70. package/dist/capabilities/public-api-compatibility/application/policies/normalize-growth-observation.js.map +1 -0
  71. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.d.ts +17 -0
  72. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.d.ts.map +1 -0
  73. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.js +124 -0
  74. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-package.js.map +1 -0
  75. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.d.ts +7 -0
  76. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.d.ts.map +1 -0
  77. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.js +109 -0
  78. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-report.js.map +1 -0
  79. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.d.ts +11 -0
  80. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.d.ts.map +1 -0
  81. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.js +53 -0
  82. package/dist/capabilities/public-api-compatibility/application/policies/project-growth-resolution.js.map +1 -0
  83. package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.d.ts +26 -0
  84. package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.d.ts.map +1 -0
  85. package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.js +63 -0
  86. package/dist/capabilities/public-api-compatibility/application/policies/retain-growth-compatibility.js.map +1 -0
  87. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.d.ts +5 -0
  88. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.d.ts.map +1 -0
  89. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.js +86 -0
  90. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-decision.js.map +1 -0
  91. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.d.ts +5 -0
  92. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.d.ts.map +1 -0
  93. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.js +51 -0
  94. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-execution.js.map +1 -0
  95. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.d.ts +4 -0
  96. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.d.ts.map +1 -0
  97. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.js +125 -0
  98. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-observation.js.map +1 -0
  99. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.d.ts +5 -0
  100. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.d.ts.map +1 -0
  101. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.js +156 -0
  102. package/dist/capabilities/public-api-compatibility/application/policies/validate-growth-report.js.map +1 -0
  103. package/dist/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.d.ts +5 -0
  104. package/dist/capabilities/public-api-compatibility/application/ports/accepted-decision-evidence.d.ts.map +1 -1
  105. package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts +9 -0
  106. package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.d.ts.map +1 -0
  107. package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.js +2 -0
  108. package/dist/capabilities/public-api-compatibility/application/ports/growth-input-context.js.map +1 -0
  109. package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.d.ts +6 -0
  110. package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.d.ts.map +1 -0
  111. package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.js +2 -0
  112. package/dist/capabilities/public-api-compatibility/application/ports/growth-observation.js.map +1 -0
  113. package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts +22 -0
  114. package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.d.ts.map +1 -0
  115. package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.js +11 -0
  116. package/dist/capabilities/public-api-compatibility/application/ports/growth-report-writer.js.map +1 -0
  117. package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.d.ts +7 -0
  118. package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.d.ts.map +1 -0
  119. package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.js +2 -0
  120. package/dist/capabilities/public-api-compatibility/application/ports/growth-workspace.js.map +1 -0
  121. package/dist/capabilities/public-api-compatibility/application/rules.d.ts +8 -0
  122. package/dist/capabilities/public-api-compatibility/application/rules.d.ts.map +1 -1
  123. package/dist/capabilities/public-api-compatibility/application/rules.js +1 -0
  124. package/dist/capabilities/public-api-compatibility/application/rules.js.map +1 -1
  125. package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts +32 -0
  126. package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.d.ts.map +1 -0
  127. package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.js +81 -0
  128. package/dist/capabilities/public-api-compatibility/application/use-cases/admit-sdk-growth.js.map +1 -0
  129. package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts +21 -0
  130. package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.d.ts.map +1 -0
  131. package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.js +61 -0
  132. package/dist/capabilities/public-api-compatibility/application/use-cases/check-sdk-growth.js.map +1 -0
  133. package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.d.ts +22 -0
  134. package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.d.ts.map +1 -0
  135. package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.js +89 -0
  136. package/dist/capabilities/public-api-compatibility/application/use-cases/observe-sdk-growth.js.map +1 -0
  137. package/dist/capabilities/public-api-compatibility/module.d.ts.map +1 -1
  138. package/dist/capabilities/public-api-compatibility/module.js +33 -1
  139. package/dist/capabilities/public-api-compatibility/module.js.map +1 -1
  140. package/dist/capabilities/public-api-compatibility/schemas.d.ts +1 -1
  141. package/dist/capabilities/public-api-compatibility/schemas.d.ts.map +1 -1
  142. package/dist/capabilities/public-api-compatibility/schemas.js +2 -1
  143. package/dist/capabilities/public-api-compatibility/schemas.js.map +1 -1
  144. package/dist/features/quality-coverage/adapters/consumer-toolchain.js +1 -1
  145. package/dist/features/quality-coverage/adapters/profile-input.d.ts.map +1 -1
  146. package/dist/features/quality-coverage/adapters/profile-input.js +4 -1
  147. package/dist/features/quality-coverage/adapters/profile-input.js.map +1 -1
  148. package/dist/features/quality-coverage/application/source-coverage.js +1 -1
  149. package/dist/features/quality-coverage/application/source-coverage.js.map +1 -1
  150. package/dist/schema-catalog.d.ts +1 -1
  151. package/dist/schema-catalog.d.ts.map +1 -1
  152. package/dist/schema-ids.d.ts +1 -1
  153. package/dist/schema-ids.d.ts.map +1 -1
  154. package/package.json +2 -1
  155. package/schemas/package-public-api-compatibility/v2.schema.json +263 -0
@@ -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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"}
@@ -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;CACnD;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;KAC/B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACvC;AAED,YAAY,EAAE,kCAAkC,EAAE,MAAM,mDAAmD,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"}
@@ -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
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=growth-input-context.js.map
@@ -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
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=growth-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-observation.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/ports/growth-observation.ts"],"names":[],"mappings":""}
@@ -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
@@ -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
@@ -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
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=growth-workspace.js.map
@@ -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;;;;;;;EAkCzC,CAAC;AAEH,eAAO,MAAM,oCAAoC,EAAE,WAAW,CAC5D,MAAM,EACN,kCAAkC,CAInC,CAAC"}
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"}
@@ -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
@@ -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
@@ -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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"}
@@ -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
@@ -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
@@ -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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"}