@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.
Files changed (152) 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/application/source-coverage.js +1 -1
  146. package/dist/features/quality-coverage/application/source-coverage.js.map +1 -1
  147. package/dist/schema-catalog.d.ts +1 -1
  148. package/dist/schema-catalog.d.ts.map +1 -1
  149. package/dist/schema-ids.d.ts +1 -1
  150. package/dist/schema-ids.d.ts.map +1 -1
  151. package/package.json +2 -1
  152. package/schemas/package-public-api-compatibility/v2.schema.json +263 -0
@@ -0,0 +1,119 @@
1
+ import type { PublicApiSnapshot } from "./public-api.js";
2
+ export type GrowthDigest = `sha256:${string}`;
3
+ export type GrowthEvidence<T> = {
4
+ readonly status: "available";
5
+ readonly value: T;
6
+ } | {
7
+ readonly status: "unavailable";
8
+ readonly reasons: readonly string[];
9
+ };
10
+ export interface GrowthInvocation {
11
+ readonly repository: string;
12
+ readonly sourceCommit: string;
13
+ readonly sourceTree: string;
14
+ readonly topologyDigest: GrowthDigest;
15
+ readonly lockDigest: GrowthDigest;
16
+ readonly toolchainDigest: GrowthDigest;
17
+ readonly artifactDigests: readonly GrowthDigest[];
18
+ readonly tool: {
19
+ readonly version: string;
20
+ readonly artifactDigest: GrowthDigest;
21
+ readonly extractorVersion: string;
22
+ };
23
+ }
24
+ export interface GrowthCancellation {
25
+ readonly signal?: AbortSignal;
26
+ throwIfCancelled(): void;
27
+ }
28
+ export type GrowthResolutionStep = {
29
+ readonly condition: string;
30
+ } | {
31
+ readonly index: number;
32
+ };
33
+ export type GrowthResolutionTree = {
34
+ readonly kind: "target";
35
+ readonly target: string;
36
+ } | {
37
+ readonly kind: "null";
38
+ } | {
39
+ readonly kind: "conditions";
40
+ readonly entries: readonly {
41
+ readonly condition: string;
42
+ readonly value: GrowthResolutionTree;
43
+ }[];
44
+ } | {
45
+ readonly kind: "fallbacks";
46
+ readonly entries: readonly GrowthResolutionTree[];
47
+ };
48
+ export interface GrowthCoordinate {
49
+ readonly packageName: string;
50
+ readonly exportPath: string;
51
+ readonly resolutionBranch: readonly GrowthResolutionStep[];
52
+ readonly subject: {
53
+ readonly kind: "typed";
54
+ readonly canonicalReference: string;
55
+ } | {
56
+ readonly kind: "export-branch";
57
+ } | {
58
+ readonly kind: "bin";
59
+ readonly name: string;
60
+ } | {
61
+ readonly kind: "data" | "wildcard-member";
62
+ readonly member: string;
63
+ } | {
64
+ readonly kind: "package";
65
+ };
66
+ }
67
+ export declare const growthDimensions: readonly ["topology", "resolution", "typed", "reachable", "runtime", "bin", "data", "wildcard", "packed", "decision"];
68
+ export interface GrowthCoverage {
69
+ readonly packageName: string;
70
+ readonly classification: "governed" | "private-only";
71
+ readonly dimensions: readonly {
72
+ readonly dimension: typeof growthDimensions[number];
73
+ readonly status: "complete" | "limited" | "unsupported" | "unavailable";
74
+ readonly reasons: readonly string[];
75
+ }[];
76
+ }
77
+ export interface GrowthSurfaceObservation extends GrowthInvocation {
78
+ readonly contractRevision: "foundation:sdk-growth:c0:5";
79
+ readonly observationVersion: "foundation:sdk-growth:observation:1";
80
+ readonly coverage: readonly GrowthCoverage[];
81
+ readonly entries: readonly {
82
+ readonly coordinate: GrowthCoordinate;
83
+ readonly value: {
84
+ readonly state: "absent";
85
+ } | {
86
+ readonly state: "present";
87
+ readonly digest: GrowthDigest;
88
+ };
89
+ }[];
90
+ }
91
+ export interface GrowthCompatibilityPackage {
92
+ readonly packageName: string;
93
+ readonly typed: {
94
+ readonly kind: "typed";
95
+ readonly snapshot: GrowthEvidence<PublicApiSnapshot>;
96
+ };
97
+ readonly artifact: {
98
+ readonly kind: "artifact";
99
+ readonly snapshot: GrowthEvidence<PublicApiSnapshot>;
100
+ };
101
+ }
102
+ export interface GrowthObservationExecution {
103
+ readonly identity: GrowthInvocation;
104
+ readonly surface: GrowthEvidence<GrowthSurfaceObservation>;
105
+ readonly compatibilitySnapshots: readonly GrowthCompatibilityPackage[];
106
+ }
107
+ export declare class GrowthObservationInvariantError extends Error {
108
+ readonly reason: string;
109
+ constructor(reason: string);
110
+ }
111
+ /** Expected observation limits retain compatibility evidence but no growth equality. */
112
+ export declare class GrowthObservationUnavailableError extends Error {
113
+ readonly reason: string;
114
+ constructor(reason: string);
115
+ }
116
+ export type GrowthObservationReference = Pick<GrowthInvocation, "sourceCommit" | "sourceTree" | "topologyDigest" | "lockDigest" | "toolchainDigest" | "artifactDigests"> & {
117
+ readonly surfaceDigest: GrowthDigest;
118
+ };
119
+ //# 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/model/growth-observation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export const growthDimensions = ["topology", "resolution", "typed", "reachable", "runtime", "bin", "data", "wildcard", "packed", "decision"];
2
+ export class GrowthObservationInvariantError extends Error {
3
+ reason;
4
+ constructor(reason) {
5
+ super(reason);
6
+ this.reason = reason;
7
+ this.name = "GrowthObservationInvariantError";
8
+ }
9
+ }
10
+ /** Expected observation limits retain compatibility evidence but no growth equality. */
11
+ export class GrowthObservationUnavailableError extends Error {
12
+ reason;
13
+ constructor(reason) {
14
+ super(reason);
15
+ this.reason = reason;
16
+ this.name = "GrowthObservationUnavailableError";
17
+ }
18
+ }
19
+ //# sourceMappingURL=growth-observation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-observation.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/model/growth-observation.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AA8BtJ,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,MAAM,CAAS;IACxB,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAChD,CAAC;CACF;AAED,wFAAwF;AACxF,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IACjD,MAAM,CAAS;IACxB,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,47 @@
1
+ import type { GrowthComparison } from "./growth-admission.js";
2
+ import type { GrowthCoverage, GrowthDigest, GrowthEvidence, GrowthInvocation, GrowthObservationReference } from "./growth-observation.js";
3
+ export declare const growthReportPhases: readonly ["topology", "observation", "packed", "decision", "trusted-base", "released", "authority"];
4
+ export interface GrowthReport {
5
+ readonly contractRevision: "foundation:sdk-growth:c0:5";
6
+ readonly policyVersion: "foundation:sdk-growth:policy:1";
7
+ readonly repository: string;
8
+ readonly trustedBase: GrowthEvidence<GrowthObservationReference>;
9
+ readonly candidate: GrowthEvidence<GrowthObservationReference>;
10
+ readonly released: readonly {
11
+ readonly packageName: string;
12
+ readonly evidence: {
13
+ readonly kind: "released";
14
+ readonly observation: GrowthEvidence<GrowthObservationReference>;
15
+ } | {
16
+ readonly kind: "initial-unreleased";
17
+ readonly history: GrowthEvidence<GrowthDigest>;
18
+ };
19
+ }[];
20
+ readonly tool: GrowthInvocation["tool"];
21
+ readonly authority: {
22
+ readonly status: "verified";
23
+ readonly workflowRef: string;
24
+ readonly runRef: string;
25
+ readonly receiptDigest: GrowthDigest;
26
+ } | {
27
+ readonly status: "unverified";
28
+ readonly reasons: readonly string[];
29
+ };
30
+ readonly coverage: readonly GrowthCoverage[];
31
+ readonly trustedBaseComparison: GrowthComparison;
32
+ readonly releasedComparison: GrowthComparison;
33
+ readonly transitionReceipts: readonly {
34
+ readonly before: GrowthDigest;
35
+ readonly after: GrowthDigest;
36
+ readonly decisions: readonly GrowthDigest[];
37
+ readonly transitions: readonly GrowthDigest[];
38
+ readonly trustedRunRef: string;
39
+ }[];
40
+ readonly phases: readonly {
41
+ readonly name: typeof growthReportPhases[number];
42
+ readonly status: "complete" | "failed" | "unavailable";
43
+ }[];
44
+ readonly verdict: "admitted" | "rejected" | "incomplete";
45
+ readonly releaseEligible: boolean;
46
+ }
47
+ //# sourceMappingURL=growth-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-report.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/model/growth-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1I,eAAO,MAAM,kBAAkB,YAAI,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAU,CAAC;AACtI,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EACzE;YAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;YAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAA;SAAE,GAC/F;YAAE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAChG,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,SAAS,EACd;QAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAA;KAAE,GAC5H;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;IAC3E,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACjD,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;QAClG,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAC;QAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjI,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAA;KAAE,EAAE,CAAC;IACzI,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACzD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export const growthReportPhases = ["topology", "observation", "packed", "decision", "trusted-base", "released", "authority"];
2
+ //# sourceMappingURL=growth-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-report.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/model/growth-report.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAU,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** Policy-facing, inert export evidence; condition and fallback order is semantic. */
2
+ export type GrowthExportTarget = string | null | readonly GrowthExportTarget[] | {
3
+ readonly [condition: string]: GrowthExportTarget;
4
+ };
5
+ export interface GrowthWorkspacePackage {
6
+ readonly name: string;
7
+ readonly rootPath: string;
8
+ readonly manifestPath: string;
9
+ readonly moduleType: "commonjs" | "module";
10
+ readonly exportSurface: {
11
+ readonly explicit: boolean;
12
+ readonly entries: readonly {
13
+ readonly subpath: string;
14
+ readonly target?: GrowthExportTarget;
15
+ }[];
16
+ };
17
+ }
18
+ //# 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/model/growth-workspace.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,kBAAkB,EAAE,GAAG;IAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAAA;CAAE,CAAC;AACtI,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAA;SAAE,EAAE,CAAC;KACjG,CAAC;CACH"}
@@ -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/model/growth-workspace.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import type { GrowthCoordinate, GrowthDigest, GrowthEvidence, GrowthSurfaceObservation } from "../model/growth-observation.js";
2
+ import type { GrowthComparison, GrowthValueRef } from "../model/growth-admission.js";
3
+ import type { ChangeFingerprint } from "../ports/change-fingerprint.js";
4
+ export declare function hashGrowthPayload(payload: unknown, fingerprint: ChangeFingerprint): GrowthDigest;
5
+ /** Policy semantics are part of the domain-separated payload, not the digest
6
+ * adapter. Admission selects the supported version; this primitive can prove
7
+ * that another semantics version has a different identity. */
8
+ export declare function growthTransitionFingerprint(input: {
9
+ readonly coordinate: GrowthCoordinate;
10
+ readonly before: GrowthValueRef;
11
+ readonly after: GrowthValueRef;
12
+ readonly policyVersion: string;
13
+ }, fingerprint: ChangeFingerprint): GrowthDigest;
14
+ export declare function growthGroupFingerprint(transitions: readonly GrowthDigest[], fingerprint: ChangeFingerprint, policyVersion?: string): GrowthDigest;
15
+ /** Compare immutable S1 aggregates, never a reference, decision, path or count.
16
+ * Missing entries imply absence only when the entire comparison side proves
17
+ * complete observation. Partial evidence can retain explicit two-sided facts. */
18
+ export declare function compareGrowthSurfaces(input: {
19
+ readonly trustedBefore: GrowthEvidence<GrowthSurfaceObservation>;
20
+ readonly candidateAfter: GrowthEvidence<GrowthSurfaceObservation>;
21
+ }, fingerprint: ChangeFingerprint): GrowthComparison;
22
+ //# sourceMappingURL=compare-growth-surfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-growth-surfaces.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/H,OAAO,KAAK,EAAE,gBAAgB,EAAoB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOxE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,GAAG,YAAY,CAIhG;AASD;;8DAE8D;AAC9D,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,EAAE,WAAW,EAAE,iBAAiB,GAAG,YAAY,CAS/C;AACD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,EAAE,WAAW,EAAE,iBAAiB,EACzG,aAAa,GAAE,MAA4B,GAAG,YAAY,CAO3D;AAgCD;;iFAEiF;AACjF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;IACjE,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;CACnE,EAAE,WAAW,EAAE,iBAAiB,GAAG,gBAAgB,CAiBnD"}
@@ -0,0 +1,114 @@
1
+ import { GrowthObservationInvariantError } from "../model/growth-observation.js";
2
+ import { growthPolicyVersion } from "../model/growth-admission.js";
3
+ import { growthCanonicalJson, growthObservationDigest, growthUniqueSorted, normalizeGrowthObservation } from "./normalize-growth-observation.js";
4
+ import { assertGrowthCoordinateShape } from "./validate-growth-observation.js";
5
+ function assertDigest(value) {
6
+ if (!/^sha256:[a-f0-9]{64}$/u.test(value)) {
7
+ throw new GrowthObservationInvariantError("invalid-growth-digest");
8
+ }
9
+ }
10
+ export function hashGrowthPayload(payload, fingerprint) {
11
+ const digest = `sha256:${fingerprint.sha256(growthCanonicalJson(payload))}`;
12
+ assertDigest(digest);
13
+ return digest;
14
+ }
15
+ function validateValue(value) {
16
+ if (value.state === "present") {
17
+ if (Object.keys(value).length !== 2) {
18
+ throw new GrowthObservationInvariantError("invalid-growth-value");
19
+ }
20
+ assertDigest(value.digest);
21
+ }
22
+ else if (value.state !== "absent" || Object.keys(value).length !== 1) {
23
+ throw new GrowthObservationInvariantError("invalid-growth-value");
24
+ }
25
+ }
26
+ /** Policy semantics are part of the domain-separated payload, not the digest
27
+ * adapter. Admission selects the supported version; this primitive can prove
28
+ * that another semantics version has a different identity. */
29
+ export function growthTransitionFingerprint(input, fingerprint) {
30
+ assertGrowthCoordinateShape(input.coordinate);
31
+ validateValue(input.before);
32
+ validateValue(input.after);
33
+ if (input.policyVersion.trim().length === 0) {
34
+ throw new GrowthObservationInvariantError("invalid-growth-policy-version");
35
+ }
36
+ if (growthCanonicalJson(input.before) === growthCanonicalJson(input.after)) {
37
+ throw new GrowthObservationInvariantError("growth-transition-no-change");
38
+ }
39
+ return hashGrowthPayload({ domain: "foundation:sdk-growth:transition:1", policyVersion: input.policyVersion,
40
+ coordinate: input.coordinate, before: input.before, after: input.after }, fingerprint);
41
+ }
42
+ export function growthGroupFingerprint(transitions, fingerprint, policyVersion = growthPolicyVersion) {
43
+ if (transitions.length > 100_000 || policyVersion.trim().length === 0) {
44
+ throw new GrowthObservationInvariantError("invalid-growth-group");
45
+ }
46
+ transitions.forEach(assertDigest);
47
+ return hashGrowthPayload({ domain: "foundation:sdk-growth:group:1", policyVersion,
48
+ transitions: growthUniqueSorted(transitions, (value) => value) }, fingerprint);
49
+ }
50
+ function incompleteReasons(observation, side) {
51
+ if (observation.coverage.length === 0) {
52
+ return [`${side}:topology-unavailable`];
53
+ }
54
+ return observation.coverage.flatMap((row) => [
55
+ ...(row.classification === "private-only" ? [`${side}:${row.packageName}:private-classification-unqualified`] : []),
56
+ ...row.dimensions
57
+ .filter((entry) => entry.dimension !== "decision" && entry.status !== "complete")
58
+ .map((entry) => `${side}:${row.packageName}:${entry.dimension}:${entry.status}`)
59
+ ]);
60
+ }
61
+ function deriveTransitions(before, after, beforeComplete, afterComplete, fingerprint) {
62
+ const left = new Map(before.entries.map((entry) => [growthCanonicalJson(entry.coordinate), entry]));
63
+ const right = new Map(after.entries.map((entry) => [growthCanonicalJson(entry.coordinate), entry]));
64
+ const keys = [...new Set([...left.keys(), ...right.keys()])].toSorted();
65
+ const transitions = [];
66
+ for (const key of keys) {
67
+ const previous = left.get(key), candidate = right.get(key);
68
+ if ((previous === undefined && !beforeComplete) || (candidate === undefined && !afterComplete)) {
69
+ continue;
70
+ }
71
+ const coordinate = previous?.coordinate ?? candidate?.coordinate;
72
+ if (coordinate === undefined) {
73
+ throw new GrowthObservationInvariantError("growth-coordinate-unavailable");
74
+ }
75
+ const beforeValue = previous?.value ?? { state: "absent" };
76
+ const afterValue = candidate?.value ?? { state: "absent" };
77
+ if (growthCanonicalJson(beforeValue) === growthCanonicalJson(afterValue)) {
78
+ continue;
79
+ }
80
+ if (transitions.length === 100_000) {
81
+ return undefined;
82
+ }
83
+ const transition = { coordinate, before: beforeValue, after: afterValue, policyVersion: growthPolicyVersion };
84
+ transitions.push({ ...transition, fingerprint: growthTransitionFingerprint(transition, fingerprint) });
85
+ }
86
+ growthUniqueSorted(transitions, (transition) => transition.fingerprint);
87
+ return transitions;
88
+ }
89
+ /** Compare immutable S1 aggregates, never a reference, decision, path or count.
90
+ * Missing entries imply absence only when the entire comparison side proves
91
+ * complete observation. Partial evidence can retain explicit two-sided facts. */
92
+ export function compareGrowthSurfaces(input, fingerprint) {
93
+ if (input.trustedBefore.status !== "available" || input.candidateAfter.status !== "available") {
94
+ return { status: "incomplete", reasons: ["growth-observation-unavailable:retain-trusted-and-candidate-aggregates"], findings: [] };
95
+ }
96
+ const before = normalizeGrowthObservation(input.trustedBefore.value);
97
+ const after = normalizeGrowthObservation(input.candidateAfter.value);
98
+ const beforeReasons = incompleteReasons(before, "before"), afterReasons = incompleteReasons(after, "after");
99
+ const reasons = [...beforeReasons, ...afterReasons];
100
+ if (before.repository !== after.repository || before.tool.extractorVersion !== after.tool.extractorVersion
101
+ || before.tool.version !== after.tool.version || before.tool.artifactDigest !== after.tool.artifactDigest) {
102
+ reasons.push("growth-observer-or-repository-mismatch");
103
+ return { status: "incomplete", reasons: growthUniqueSorted(reasons, (value) => value), findings: [] };
104
+ }
105
+ const transitions = deriveTransitions(before, after, beforeReasons.length === 0, afterReasons.length === 0, fingerprint);
106
+ if (transitions === undefined) {
107
+ return { status: "incomplete", reasons: ["growth-transition-budget-exhausted"], findings: [] };
108
+ }
109
+ if (reasons.length !== 0) {
110
+ return { status: "incomplete", reasons: growthUniqueSorted(reasons, (value) => value), findings: transitions };
111
+ }
112
+ return { status: "complete", before: growthObservationDigest(before, fingerprint), after: growthObservationDigest(after, fingerprint), transitions };
113
+ }
114
+ //# sourceMappingURL=compare-growth-surfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-growth-surfaces.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/compare-growth-surfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { GrowthAdmissionResult, GrowthComparison, GrowthDecision, GrowthDecisionAuthority } from "../model/growth-admission.js";
2
+ import type { GrowthDigest } from "../model/growth-observation.js";
3
+ import type { ChangeFingerprint } from "../ports/change-fingerprint.js";
4
+ export declare function growthDecisionDigest(decision: GrowthDecision, fingerprint: ChangeFingerprint): GrowthDigest;
5
+ /** Exact PR admission only. The independent released policy's failure is final;
6
+ * authority must bind the entire normalized decision, not merely its ID. */
7
+ export declare function evaluateGrowthAdmission(input: {
8
+ readonly comparison: GrowthComparison;
9
+ readonly decisions: readonly unknown[];
10
+ readonly authority: readonly GrowthDecisionAuthority[];
11
+ readonly compatibility: "complete" | "rejected" | "incomplete";
12
+ }, fingerprint: ChangeFingerprint): GrowthAdmissionResult;
13
+ //# sourceMappingURL=evaluate-growth-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-growth-admission.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA6B,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,uBAAuB,EAAoB,MAAM,8BAA8B,CAAC;AAElL,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAaxE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,GAAG,YAAY,CAE3G;AA6ED;4EAC4E;AAC5E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;CAChE,EAAE,WAAW,EAAE,iBAAiB,GAAG,qBAAqB,CAqCxD"}
@@ -0,0 +1,162 @@
1
+ import { growthPolicyVersion } from "../model/growth-admission.js";
2
+ import { GrowthObservationInvariantError } from "../model/growth-observation.js";
3
+ import { compareGrowthStrings, growthCanonicalJson, growthUniqueSorted } from "./normalize-growth-observation.js";
4
+ import { growthGroupFingerprint, growthTransitionFingerprint, hashGrowthPayload } from "./compare-growth-surfaces.js";
5
+ import { isGrowthDecision } from "./validate-growth-decision.js";
6
+ /** One decision normalization for both exact matching and evidence binding. */
7
+ function normalizeGrowthDecision(value) {
8
+ if (!isGrowthDecision(value)) {
9
+ throw new GrowthObservationInvariantError("growth-decision-malformed");
10
+ }
11
+ return { ...value,
12
+ transitions: growthUniqueSorted(value.transitions, (entry) => entry),
13
+ coordinates: growthUniqueSorted(value.coordinates, growthCanonicalJson),
14
+ consumerEvidenceRefs: growthUniqueSorted(value.consumerEvidenceRefs, growthCanonicalJson) };
15
+ }
16
+ export function growthDecisionDigest(decision, fingerprint) {
17
+ return hashGrowthPayload({ domain: "foundation:sdk-growth:decision:1", payload: normalizeGrowthDecision(decision) }, fingerprint);
18
+ }
19
+ function validateTransitions(transitions, fingerprint) {
20
+ if (transitions.length > 100_000) {
21
+ throw new GrowthObservationInvariantError("growth-transition-budget-exhausted");
22
+ }
23
+ const result = growthUniqueSorted(transitions, (entry) => growthCanonicalJson(entry.coordinate));
24
+ growthUniqueSorted(result, (entry) => entry.fingerprint);
25
+ for (const entry of result) {
26
+ if (entry.policyVersion !== growthPolicyVersion || entry.fingerprint !== growthTransitionFingerprint(entry, fingerprint)) {
27
+ throw new GrowthObservationInvariantError("growth-transition-fingerprint-mismatch");
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ function exactDecisionDiagnostics(decision, actual, claimed, fingerprint) {
33
+ const diagnostics = [];
34
+ const add = (code, subject, remediation) => { diagnostics.push({ code, subject, remediation }); };
35
+ const subject = decision.decisionId;
36
+ if (decision.transitions.some((entry) => !actual.has(entry))) {
37
+ add("growth-decision-stale", subject, "Reapprove the exact observed before/after transitions; remove stale or extra transition claims.");
38
+ }
39
+ const selected = decision.transitions.flatMap((entry) => { const value = actual.get(entry); return value === undefined ? [] : [value]; });
40
+ const coordinates = growthUniqueSorted(selected.map((entry) => entry.coordinate), growthCanonicalJson);
41
+ if (growthCanonicalJson(coordinates) !== growthCanonicalJson(decision.coordinates)) {
42
+ add("growth-decision-coordinate-mismatch", subject, "Make coordinates equal exactly the decision's observed transition coordinate set.");
43
+ }
44
+ if (growthGroupFingerprint(decision.transitions, fingerprint) !== decision.changeFingerprint) {
45
+ add("growth-decision-fingerprint-mismatch", subject, "Bind approval to the group digest of the exact sorted atomic fingerprints and current policy version.");
46
+ }
47
+ if (decision.transitions.some((entry) => claimed.has(entry))) {
48
+ add("growth-decision-overlap", subject, "Assign each transition to exactly one decision.");
49
+ }
50
+ return diagnostics;
51
+ }
52
+ function decisionBudgetExhausted() {
53
+ return { status: "incomplete", admittedTransitions: [], releaseEligible: false,
54
+ diagnostics: [{ code: "growth-decision-budget-exhausted", subject: "decisions",
55
+ remediation: "Supply at most 10000 decisions and 100000 total transition claims." }] };
56
+ }
57
+ /** Count raw claims before validation, without copying or visiting claim elements. */
58
+ function withinDecisionBudget(rawDecisions) {
59
+ if (rawDecisions.length > 10_000) {
60
+ return false;
61
+ }
62
+ let remaining = 100_000;
63
+ for (const raw of rawDecisions) {
64
+ if (raw !== null && typeof raw === "object" && "transitions" in raw && Array.isArray(raw.transitions)) {
65
+ if (raw.transitions.length > remaining) {
66
+ return false;
67
+ }
68
+ remaining -= raw.transitions.length;
69
+ }
70
+ }
71
+ return true;
72
+ }
73
+ /** Normalize the full bounded set before claims; duplicate IDs have no authority. */
74
+ function prepareDecisions(rawDecisions, diagnostics) {
75
+ if (!withinDecisionBudget(rawDecisions)) {
76
+ return undefined;
77
+ }
78
+ const decisions = [];
79
+ const counts = new Map();
80
+ for (const raw of rawDecisions) {
81
+ let decision;
82
+ try {
83
+ decision = normalizeGrowthDecision(raw);
84
+ }
85
+ catch {
86
+ diagnostics.push({ code: "growth-decision-malformed", subject: "decision",
87
+ remediation: "Supply a closed decision with unique transitions, coordinates, consumer evidence, owner and rationale." });
88
+ continue;
89
+ }
90
+ decisions.push(decision);
91
+ counts.set(decision.decisionId, (counts.get(decision.decisionId) ?? 0) + 1);
92
+ }
93
+ for (const [id, occurrences] of counts) {
94
+ if (occurrences > 1) {
95
+ diagnostics.push({ code: "growth-decision-duplicate", subject: id,
96
+ remediation: "Use one exact decision record per decision ID." });
97
+ }
98
+ }
99
+ return decisions.filter((decision) => counts.get(decision.decisionId) === 1)
100
+ .toSorted((left, right) => compareGrowthStrings(left.decisionId, right.decisionId));
101
+ }
102
+ /** Exact PR admission only. The independent released policy's failure is final;
103
+ * authority must bind the entire normalized decision, not merely its ID. */
104
+ export function evaluateGrowthAdmission(input, fingerprint) {
105
+ const diagnostics = [];
106
+ const add = (code, subject, remediation) => {
107
+ diagnostics.push({ code, subject, remediation });
108
+ };
109
+ let incomplete = input.comparison.status === "incomplete" || input.compatibility === "incomplete";
110
+ if (incomplete) {
111
+ add("growth-comparison-incomplete", "comparison", "Supply complete trusted-base, candidate and released compatibility evidence; do not substitute empty baselines.");
112
+ }
113
+ if (input.compatibility === "rejected") {
114
+ add("growth-compatibility-rejected", "released", "Satisfy the existing release compatibility, SemVer and removal obligations independently of growth admission.");
115
+ }
116
+ const transitions = validateTransitions(input.comparison.status === "complete" ? input.comparison.transitions : input.comparison.findings, fingerprint);
117
+ const actual = new Map(transitions.map((entry) => [entry.fingerprint, entry]));
118
+ const claimed = new Set(), admitted = new Set();
119
+ const decisions = prepareDecisions(input.decisions, diagnostics);
120
+ if (decisions === undefined) {
121
+ return decisionBudgetExhausted();
122
+ }
123
+ const authorities = growthUniqueSorted(input.authority, (entry) => entry.decisionId);
124
+ for (const decision of decisions) {
125
+ const subject = decision.decisionId;
126
+ const exactDiagnostics = exactDecisionDiagnostics(decision, actual, claimed, fingerprint);
127
+ diagnostics.push(...exactDiagnostics);
128
+ let valid = exactDiagnostics.length === 0;
129
+ for (const entry of decision.transitions) {
130
+ claimed.add(entry);
131
+ }
132
+ const authority = authorities.find((entry) => entry.decisionId === subject);
133
+ if (authority?.ownerRef !== decision.ownerRef || authority.decisionDigest !== growthDecisionDigest(decision, fingerprint)) {
134
+ add("growth-owner-evidence-unavailable", subject, "Supply independently validated owner evidence binding this complete decision and its exact transitions.");
135
+ incomplete = true;
136
+ valid = false;
137
+ }
138
+ if (valid) {
139
+ for (const entry of decision.transitions) {
140
+ admitted.add(entry);
141
+ }
142
+ }
143
+ }
144
+ for (const transition of transitions) {
145
+ if (!claimed.has(transition.fingerprint)) {
146
+ add("growth-transition-unadmitted", transition.fingerprint, "Provide an owner-approved decision for this exact coordinate, before value and after value.");
147
+ }
148
+ }
149
+ const ordered = diagnostics.toSorted((left, right) => {
150
+ const a = growthCanonicalJson(left), b = growthCanonicalJson(right);
151
+ return compareGrowthStrings(a, b);
152
+ });
153
+ const status = admissionStatus(incomplete, ordered);
154
+ return { status, admittedTransitions: status === "admitted" ? growthUniqueSorted([...admitted], (entry) => entry) : [], diagnostics: ordered, releaseEligible: false };
155
+ }
156
+ function admissionStatus(incomplete, diagnostics) {
157
+ if (incomplete) {
158
+ return "incomplete";
159
+ }
160
+ return diagnostics.length === 0 ? "admitted" : "rejected";
161
+ }
162
+ //# sourceMappingURL=evaluate-growth-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-growth-admission.js","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/evaluate-growth-admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { FoundationDiagnostic } from "../../../../features/validation-reporting/api.js";
2
+ import type { GrowthCompatibilityPackage } from "../model/growth-observation.js";
3
+ import type { GrowthReleasedPackage } from "../model/growth-admission-context.js";
4
+ import type { AcceptedDecisionEvidence } from "../ports/accepted-decision-evidence.js";
5
+ import type { ChangeFingerprint } from "../ports/change-fingerprint.js";
6
+ export interface GrowthReleaseCompatibilityResult {
7
+ readonly status: "complete" | "rejected" | "incomplete";
8
+ readonly diagnostics: readonly FoundationDiagnostic[];
9
+ readonly reasons: readonly string[];
10
+ }
11
+ /** Existing v1 comparator and SemVer policy on each original snapshot branch.
12
+ * Initial-unreleased history is retained, but current S1 has no admitted proof
13
+ * permitting a synthesized empty v1 baseline; that branch stays incomplete. */
14
+ export declare function evaluateGrowthReleaseCompatibility(input: {
15
+ readonly current: readonly GrowthCompatibilityPackage[];
16
+ readonly released: readonly GrowthReleasedPackage[];
17
+ readonly extractorVersion: string;
18
+ readonly acceptedDecisions: AcceptedDecisionEvidence;
19
+ }, fingerprint: ChangeFingerprint): GrowthReleaseCompatibilityResult;
20
+ //# sourceMappingURL=evaluate-growth-release-compatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate-growth-release-compatibility.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/public-api-compatibility/application/policies/evaluate-growth-release-compatibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAC7F,OAAO,KAAK,EAAE,0BAA0B,EAAkB,MAAM,gCAAgC,CAAC;AAEjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAKxE,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAiBD;;+EAE+E;AAC/E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,OAAO,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;CACtD,EAAE,WAAW,EAAE,iBAAiB,GAAG,gCAAgC,CA+BnE"}