@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
@@ -1,8 +1,8 @@
1
- import type { PublicApiCompatibilityPolicy } from "../../../application/model/public-api.js";
1
+ import type { PublicApiCapabilityPolicy } from "../../../application/model/growth-configuration.js";
2
2
  import type { PublicApiSchemaAssertion } from "../../schema-validation.js";
3
3
  export interface PublicApiConfigurationDependencies {
4
4
  readonly readYaml: (consumerRoot: string, configPath: string, phase: string, signal?: AbortSignal) => Promise<unknown>;
5
5
  readonly assertSchema: PublicApiSchemaAssertion;
6
6
  }
7
- export declare function loadCapabilityConfig(dependencies: PublicApiConfigurationDependencies, consumerRoot: string, configPath: string, signal?: AbortSignal): Promise<PublicApiCompatibilityPolicy>;
7
+ export declare function loadCapabilityConfig(dependencies: PublicApiConfigurationDependencies, consumerRoot: string, configPath: string, signal?: AbortSignal): Promise<PublicApiCapabilityPolicy>;
8
8
  //# sourceMappingURL=load-capability-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-capability-config.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvH,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;CACjD;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,kCAAkC,EAChD,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAKvC"}
1
+ {"version":3,"file":"load-capability-config.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AACpG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvH,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;CACjD;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,kCAAkC,EAChD,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAgBpC"}
@@ -1,8 +1,19 @@
1
- import { readConfigurationHeader, parseCapabilityConfig } from "./parse-capability-config.js";
1
+ import { readPublicApiConfigurationHeader, mapPublicApiConfiguration, assertGrowthReportDestination } from "./parse-growth-config.js";
2
2
  export async function loadCapabilityConfig(dependencies, consumerRoot, configPath, signal) {
3
3
  const input = await dependencies.readYaml(consumerRoot, configPath, "public-api-compatibility-config", signal);
4
- const root = readConfigurationHeader(input);
5
- await dependencies.assertSchema("package-public-api-compatibility/v1", input, "public-api-compatibility-config");
6
- return parseCapabilityConfig(root);
4
+ const root = readPublicApiConfigurationHeader(input);
5
+ const schema = root["schemaVersion"] === 1 ? "package-public-api-compatibility/v1" : "package-public-api-compatibility/v2";
6
+ await dependencies.assertSchema(schema, input, "public-api-compatibility-config");
7
+ const policy = mapPublicApiConfiguration(root, configPath);
8
+ if (policy.schemaVersion === 2) {
9
+ const phase = "public-api-compatibility-config";
10
+ const governance = await dependencies.readYaml(consumerRoot, policy.compatibility.governanceConfigPath, phase, signal);
11
+ await dependencies.assertSchema("governance-architecture-decisions/v1", governance, phase);
12
+ // Read only the public schema's path projection. Governance still owns all
13
+ // lifecycle and approval policy; none of these paths confer authority.
14
+ const paths = governance;
15
+ assertGrowthReportDestination(policy.sdkGrowth.reportPath, [...paths.adrRoots, paths.index.path, paths.acceptedBaselinePath]);
16
+ }
17
+ return policy;
7
18
  }
8
19
  //# sourceMappingURL=load-capability-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-capability-config.js","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAO9F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAAgD,EAChD,YAAoB,EACpB,UAAkB,EAClB,MAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,iCAAiC,EAAE,MAAM,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,YAAY,CAAC,YAAY,CAAC,qCAAqC,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC;IACjH,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"load-capability-config.js","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/load-capability-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAOtI,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAAgD,EAChD,YAAoB,EACpB,UAAkB,EAClB,MAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,iCAAiC,EAAE,MAAM,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,qCAAqC,CAAC;IAC3H,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,iCAAiC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,iCAAiC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,oBAAqB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACxH,MAAM,YAAY,CAAC,YAAY,CAAC,sCAAsC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3F,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,KAAK,GAAG,UAAoG,CAAC;QACnH,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PublicApiCapabilityPolicy } from "../../../application/model/growth-configuration.js";
2
+ export declare function readPublicApiConfigurationHeader(input: unknown): Record<string, unknown>;
3
+ /** Invoked only after the selected closed JSON schema validates the raw data. */
4
+ export declare function mapPublicApiConfiguration(root: Record<string, unknown>, configPath?: string): PublicApiCapabilityPolicy;
5
+ /** Protect both descendants and ancestors: a destination cannot replace a
6
+ * directory that owns an input, even when the final file does not exist yet. */
7
+ export declare function assertGrowthReportDestination(destination: string, protectedPaths: readonly string[]): void;
8
+ //# sourceMappingURL=parse-growth-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-growth-config.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAA6B,MAAM,oDAAoD,CAAC;AAG/H,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASxF;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,yBAAyB,CA4BvH;AAED;gFACgF;AAChF,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAI1G"}
@@ -0,0 +1,54 @@
1
+ import { configurationInputError, assertConfigurationRepositoryPath } from "../../../application/configuration-input.js";
2
+ import { parseCapabilityConfig } from "./parse-capability-config.js";
3
+ export function readPublicApiConfigurationHeader(input) {
4
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
5
+ configurationInputError("public API compatibility config must be an object.");
6
+ }
7
+ const root = input;
8
+ if (root["schemaVersion"] !== 1 && root["schemaVersion"] !== 2) {
9
+ configurationInputError("schemaVersion must be 1 or 2.");
10
+ }
11
+ return root;
12
+ }
13
+ /** Invoked only after the selected closed JSON schema validates the raw data. */
14
+ export function mapPublicApiConfiguration(root, configPath) {
15
+ if (root["schemaVersion"] === 1) {
16
+ return parseCapabilityConfig(root);
17
+ }
18
+ const { sdkGrowth: rawGrowth, ...legacy } = root;
19
+ const compatibility = parseCapabilityConfig({ ...legacy, schemaVersion: 1 });
20
+ const growth = structuredClone(rawGrowth);
21
+ const paths = [growth.comparison.trustedBasePath, growth.decisionsPath,
22
+ ...growth.comparison.released.map((entry) => entry.kind === "released" ? entry.observationPath : entry.trustedHistoryPath)];
23
+ for (const path of [...paths, growth.reportPath, compatibility.changesetDirectory, compatibility.governanceConfigPath,
24
+ ...compatibility.packages.flatMap((pkg) => [pkg.packageRoot, pkg.manifestPath, pkg.tsconfigPath, ...pkg.entrypoints.map((entry) => entry.declarationEntryPoint)])]) {
25
+ assertConfigurationRepositoryPath(path);
26
+ if (path.length > 300 || path.trim() !== path || path.trim().length === 0 || /^[a-z]:/iu.test(path) || /[\0*?{}[\]]/u.test(path)) {
27
+ configurationInputError("SDK paths must be normalized nonempty repository-relative regular-file paths.");
28
+ }
29
+ }
30
+ assertGrowthReportDestination(growth.reportPath, [
31
+ ...paths, ...(configPath === undefined ? [] : [configPath]),
32
+ "package.json", "tsconfig.json", "tsconfig.base.json", "pnpm-workspace.yaml", "pnpm-lock.yaml", "package-lock.json",
33
+ "npm-shrinkwrap.json", "yarn.lock", "bun.lock", "bun.lockb",
34
+ "architecture", ".git", ".github", "node_modules", ".npmrc", ".yarnrc.yml", ".pnp.cjs", ".pnp.loader.mjs",
35
+ "foundation.config.yaml", "foundation.config.json", "src", "scripts", "tests", compatibility.changesetDirectory, compatibility.governanceConfigPath,
36
+ compatibility.acceptedDecisionBaselinePath,
37
+ ...compatibility.packages.flatMap((pkg) => [pkg.packageRoot, pkg.manifestPath, pkg.tsconfigPath,
38
+ pkg.releasedBaselinePath, ...pkg.entrypoints.map((entry) => entry.declarationEntryPoint)])
39
+ ].filter((path) => path !== undefined));
40
+ const names = growth.comparison.released.map((entry) => entry.packageName);
41
+ if (new Set(names).size !== names.length) {
42
+ configurationInputError("SDK released package identities must be unique.");
43
+ }
44
+ return Object.freeze({ schemaVersion: 2, compatibility, sdkGrowth: Object.freeze({ ...growth, comparison: Object.freeze({ ...growth.comparison,
45
+ released: Object.freeze([...growth.comparison.released].toSorted((a, b) => a.packageName < b.packageName ? -1 : a.packageName > b.packageName ? 1 : 0)) }) }) });
46
+ }
47
+ /** Protect both descendants and ancestors: a destination cannot replace a
48
+ * directory that owns an input, even when the final file does not exist yet. */
49
+ export function assertGrowthReportDestination(destination, protectedPaths) {
50
+ if (protectedPaths.some((path) => destination === path || destination.startsWith(`${path}/`) || path.startsWith(`${destination}/`))) {
51
+ configurationInputError("SDK report path overlaps a protected input, governance, baseline, lockfile or package path.");
52
+ }
53
+ }
54
+ //# sourceMappingURL=parse-growth-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-growth-config.js","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/inbound/configuration/parse-growth-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { GrowthInputContextPort } from "../../../application/ports/growth-input-context.js";
2
+ import type { PublicApiCompatibilityPolicy } from "../../../application/model/public-api.js";
3
+ import type { PublicApiRepository } from "../../../application/ports/public-api-repository.js";
4
+ import type { ChangeFingerprint } from "../../../application/ports/change-fingerprint.js";
5
+ import type { AcceptedDecisionEvidencePort } from "../../../application/ports/accepted-decision-evidence.js";
6
+ import type { PublicApiSchemaAssertion } from "../../schema-validation.js";
7
+ /** Files establish content observations only. No disk record can establish
8
+ * retained-history, initial-unreleased or owner authority before S3. */
9
+ export declare function createFilesystemGrowthInputContext(input: {
10
+ readonly consumerRoot: string;
11
+ readonly policy: PublicApiCompatibilityPolicy;
12
+ }, dependencies: {
13
+ readonly repository: PublicApiRepository;
14
+ readonly acceptedDecisionEvidence: AcceptedDecisionEvidencePort;
15
+ readonly fingerprint: ChangeFingerprint;
16
+ readonly assertSchema: PublicApiSchemaAssertion;
17
+ }): GrowthInputContextPort;
18
+ //# 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/adapters/outbound/filesystem/growth-input-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAIjG,OAAO,KAAK,EAAE,4BAA4B,EAAqB,MAAM,0CAA0C,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0DAA0D,CAAC;AAG7G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AA8E3E;wEACwE;AACxE,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C,EAAE,YAAY,EAAE;IACf,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,wBAAwB,EAAE,4BAA4B,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;CACjD,GAAG,sBAAsB,CA0EzB"}
@@ -0,0 +1,194 @@
1
+ import { GrowthObservationUnavailableError } from "../../../application/model/growth-observation.js";
2
+ import { growthObservationReference, growthUniqueSorted, normalizeGrowthObservation } from "../../../application/policies/normalize-growth-observation.js";
3
+ import { configurationInputError } from "../../../application/configuration-input.js";
4
+ import { mapReleasedBaseline } from "./public-api-baseline-mapper.js";
5
+ import { auditRead } from "./public-api-audit-inputs.js";
6
+ function unavailable(reason) { return { status: "unavailable", reasons: [reason] }; }
7
+ function available(value) { return { status: "available", value }; }
8
+ function historicalObservation(value, missingReason) {
9
+ if (value === undefined) {
10
+ return unavailable(missingReason);
11
+ }
12
+ try {
13
+ return available(normalizeGrowthObservation(value));
14
+ }
15
+ catch (error) {
16
+ if (!(error instanceof GrowthObservationUnavailableError)) {
17
+ throw error;
18
+ }
19
+ return unavailable(error.reason);
20
+ }
21
+ }
22
+ /** Native JSON parsing owns syntax; this iterative token walk preserves object-key
23
+ * occurrences (including escaped spellings) before any semantic validation. */
24
+ function parseContextJson(text) {
25
+ const value = JSON.parse(text);
26
+ const objects = [];
27
+ for (let index = 0; index < text.length; index += 1) {
28
+ const token = text[index];
29
+ if (token === "{") {
30
+ objects.push(new Set());
31
+ }
32
+ else if (token === "[") {
33
+ objects.push(undefined);
34
+ }
35
+ else if (token === "}" || token === "]") {
36
+ objects.pop();
37
+ }
38
+ else if (token === '"') {
39
+ const start = index;
40
+ for (index += 1; index < text.length; index += 1) {
41
+ if (text[index] === "\\") {
42
+ index += 1;
43
+ }
44
+ else if (text[index] === '"') {
45
+ break;
46
+ }
47
+ }
48
+ let next = index + 1;
49
+ while ([" ", "\t", "\r", "\n"].includes(text[next] ?? "")) {
50
+ next += 1;
51
+ }
52
+ if (text[next] === ":") {
53
+ const key = JSON.parse(text.slice(start, index + 1));
54
+ const keys = objects.at(-1);
55
+ if (keys?.has(key) === true) {
56
+ configurationInputError("SDK context input contains duplicate JSON object keys.");
57
+ }
58
+ keys?.add(key);
59
+ }
60
+ }
61
+ }
62
+ return value;
63
+ }
64
+ /** The shared audit reader predates typed failures. Match only its exact known
65
+ * input failures, inside the read boundary; dependency defects still propagate. */
66
+ function inputUnavailableReason(error, path) {
67
+ if (!(error instanceof Error)) {
68
+ return;
69
+ }
70
+ if (error.message === "Audit input file budget exhausted." || error.message === "Audit input byte budget exhausted.") {
71
+ return "growth-input-budget-exhausted";
72
+ }
73
+ if ("code" in error && ["ENOENT", "ENOTDIR", "EACCES", "EPERM", "EIO", "ESTALE", "EBUSY", "EMFILE", "ENFILE"].includes(String(error.code))) {
74
+ return error.code === "ENOENT" ? undefined : "growth-input-unavailable";
75
+ }
76
+ if (error.message === `Audit input changed: ${path}.` || error.message === `Audit input is not a regular file: ${path}.`) {
77
+ return "growth-input-unavailable";
78
+ }
79
+ return;
80
+ }
81
+ function rejectVerifiedClaims(input) {
82
+ const pending = [input];
83
+ while (pending.length > 0) {
84
+ const value = pending.pop();
85
+ if (value !== null && typeof value === "object") {
86
+ if ("status" in value && value.status === "verified") {
87
+ configurationInputError("SDK filesystem inputs cannot contain verified authority claims.");
88
+ }
89
+ for (const nested of Object.values(value)) {
90
+ pending.push(nested);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ function closed(input, fields) {
96
+ if (input === null || typeof input !== "object" || Array.isArray(input)
97
+ || Object.keys(input).length !== fields.length || fields.some((field) => !Object.hasOwn(input, field))) {
98
+ configurationInputError(`SDK context requires exactly: ${fields.join(", ")}.`);
99
+ }
100
+ return input;
101
+ }
102
+ /** Files establish content observations only. No disk record can establish
103
+ * retained-history, initial-unreleased or owner authority before S3. */
104
+ export function createFilesystemGrowthInputContext(input, dependencies) {
105
+ const { consumerRoot, policy } = structuredClone(input);
106
+ return {
107
+ async read(rawRequest, cancellation) {
108
+ const request = structuredClone(rawRequest);
109
+ const unavailableReasons = new Map();
110
+ const historicalBudget = { bytes: 0, files: 0 }, candidateBudget = { bytes: 0, files: 0 };
111
+ async function json(path, budget) {
112
+ cancellation.throwIfCancelled();
113
+ let bytes;
114
+ try {
115
+ bytes = await auditRead(consumerRoot, path, budget);
116
+ }
117
+ catch (error) {
118
+ cancellation.throwIfCancelled();
119
+ const reason = inputUnavailableReason(error, path);
120
+ if (reason !== undefined) {
121
+ unavailableReasons.set(path, reason);
122
+ return undefined;
123
+ }
124
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
125
+ return undefined;
126
+ }
127
+ throw error;
128
+ }
129
+ cancellation.throwIfCancelled();
130
+ let value;
131
+ try {
132
+ value = parseContextJson(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
133
+ }
134
+ catch (error) {
135
+ if (error instanceof SyntaxError || error instanceof TypeError) {
136
+ configurationInputError("SDK context input must be valid UTF-8 JSON.");
137
+ }
138
+ throw error;
139
+ }
140
+ rejectVerifiedClaims(value);
141
+ return value;
142
+ }
143
+ const base = await json(request.trustedBasePath, historicalBudget);
144
+ const trustedBase = historicalObservation(base, unavailableReasons.get(request.trustedBasePath) ?? "growth-base-file-missing");
145
+ const decisions = await json(request.decisionsPath, candidateBudget);
146
+ if (decisions !== undefined && !Array.isArray(decisions)) {
147
+ configurationInputError("SDK decisions must be a JSON array.");
148
+ }
149
+ const released = [];
150
+ for (const row of growthUniqueSorted(request.released, (entry) => entry.packageName)) {
151
+ cancellation.throwIfCancelled();
152
+ const selected = policy.packages.find((pkg) => pkg.packageName === row.packageName)
153
+ ?? configurationInputError(`SDK release package has no compatibility policy: ${row.packageName}.`);
154
+ const releaseEvidence = available(await dependencies.repository.readReleaseEvidence(consumerRoot, policy.changesetDirectory, selected, cancellation.signal));
155
+ if (row.kind === "initial-unreleased") {
156
+ const raw = await json(row.trustedHistoryPath, historicalBudget);
157
+ if (raw !== undefined) {
158
+ const history = closed(raw, ["historyDigest"]);
159
+ if (typeof history["historyDigest"] !== "string" || !/^sha256:[a-f0-9]{64}$/u.test(history["historyDigest"])) {
160
+ configurationInputError("SDK historyDigest must be a SHA-256 identity.");
161
+ }
162
+ }
163
+ released.push({ packageName: row.packageName, policy: selected, releaseEvidence,
164
+ evidence: { kind: "initial-unreleased", history: unavailable(unavailableReasons.get(row.trustedHistoryPath) ?? "growth-initial-history-unverified") } });
165
+ continue;
166
+ }
167
+ const raw = await json(row.observationPath, historicalBudget);
168
+ const pair = raw === undefined ? undefined : closed(raw, ["typed", "artifact"]);
169
+ const missingReason = unavailableReasons.get(row.observationPath) ?? "growth-released-file-missing";
170
+ async function branch(kind) {
171
+ if (pair === undefined) {
172
+ return unavailable(missingReason);
173
+ }
174
+ await dependencies.assertSchema("package-public-api-baseline/v1", pair[kind], "sdk-growth-released-context");
175
+ return available(mapReleasedBaseline(pair[kind], selected));
176
+ }
177
+ released.push({ packageName: row.packageName, policy: selected, releaseEvidence,
178
+ evidence: { kind: "released", typed: await branch("typed"), artifact: await branch("artifact") } });
179
+ }
180
+ const accepted = policy.governanceConfigPath === undefined ? { acceptedDecisionIds: [], acceptedDecisionPaths: [] }
181
+ : await dependencies.acceptedDecisionEvidence.readAcceptedDecisionEvidence({ consumerRoot,
182
+ baselinePath: policy.acceptedDecisionBaselinePath, governanceConfigPath: policy.governanceConfigPath,
183
+ ...(cancellation.signal === undefined ? {} : { signal: cancellation.signal }) });
184
+ cancellation.throwIfCancelled();
185
+ return { trustedBase,
186
+ trustedBaseReference: trustedBase.status === "available" ? available(growthObservationReference(trustedBase.value, dependencies.fingerprint)) : unavailable("growth-base-reference-missing"),
187
+ retainedHistory: unavailable("growth-retained-history-unverified"), released, decisions: decisions ?? [],
188
+ acceptedBreakingDecisions: { acceptedDecisionIds: accepted.acceptedDecisionIds, acceptedDecisionPaths: accepted.acceptedDecisionPaths,
189
+ growthDecisionAuthority: unavailable("growth-owner-authority-unverified") },
190
+ authority: { status: "unverified", reasons: ["growth-filesystem-authority-unverified", ...(decisions === undefined ? [unavailableReasons.get(request.decisionsPath) ?? "growth-decisions-file-missing"] : [])] } };
191
+ }
192
+ };
193
+ }
194
+ //# sourceMappingURL=growth-input-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-input-context.js","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-input-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { GrowthWorkspaceReader } from "../../../application/ports/growth-workspace.js";
2
+ import type { PublicApiFileReader } from "../../../application/ports/public-api-evidence.js";
3
+ import type { GrowthInvocation } from "../../../application/model/growth-observation.js";
4
+ /** Command-boundary identity of the actual source checkpoint and selected build
5
+ * inputs. These byte identities carry no archive qualification or CI authority. */
6
+ export declare function readGrowthInvocation(consumerRoot: string, inventory: Awaited<ReturnType<GrowthWorkspaceReader["read"]>>, dependencies: {
7
+ readonly files: PublicApiFileReader;
8
+ readonly runGit: (args: readonly string[], signal?: AbortSignal) => Promise<{
9
+ readonly exitCode: number;
10
+ readonly stdout: string;
11
+ }>;
12
+ }, signal?: AbortSignal): Promise<GrowthInvocation>;
13
+ /** Early destination validation; publication revalidates under its own fence. */
14
+ export declare function assertGrowthDestination(root: string, path: string): Promise<void>;
15
+ //# sourceMappingURL=growth-invocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-invocation.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAM5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,KAAK,EAAgB,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AASvG;mFACmF;AACnF,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;IAC5I,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmElD;AAwBD,iFAAiF;AACjF,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvF"}
@@ -0,0 +1,173 @@
1
+ import { configurationInputError } from "../../../application/configuration-input.js";
2
+ import { createHash } from "node:crypto";
3
+ import { readFile, readdir, lstat, realpath } from "node:fs/promises";
4
+ import { resolve, join } from "node:path";
5
+ import { Extractor } from "@microsoft/api-extractor";
6
+ import { assertNotCancelled, publicApiInputError, publicApiFileFailure } from "../../../application/policies/public-api-evidence-errors.js";
7
+ import { growthCanonicalJson, normalizeGrowthInvocation } from "../../../application/policies/normalize-growth-observation.js";
8
+ const digest = (bytes) => `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
9
+ function unavailable(reason) {
10
+ publicApiInputError("SDK_GROWTH_EVIDENCE_INCOMPLETE", reason, "sdk-growth-evidence");
11
+ }
12
+ /** Command-boundary identity of the actual source checkpoint and selected build
13
+ * inputs. These byte identities carry no archive qualification or CI authority. */
14
+ export async function readGrowthInvocation(consumerRoot, inventory, dependencies, signal) {
15
+ assertNotCancelled(signal);
16
+ const git = async (args) => {
17
+ try {
18
+ const result = await dependencies.runGit(["-C", consumerRoot, ...args], signal);
19
+ if (result.exitCode !== 0) {
20
+ unavailable("Source Git checkpoint is unavailable or changed.");
21
+ }
22
+ return result.stdout.trim();
23
+ }
24
+ catch (error) {
25
+ assertNotCancelled(signal);
26
+ if (error !== null && typeof error === "object" && "code" in error && (typeof error.code === "number" || error.code === "ENOENT")) {
27
+ unavailable("Source Git checkpoint is unavailable or changed; observe a committed source with its built inputs.");
28
+ }
29
+ throw error;
30
+ }
31
+ };
32
+ // The workspace metadata manifest has no package directory. Keep it in the
33
+ // topology digest; a root export requires a separately bounded source scope.
34
+ const packageDirectories = inventory.packages.filter((pkg) => pkg.rootPath !== ".");
35
+ if (inventory.packages.some((pkg) => pkg.rootPath === "." && pkg.exportSurface.explicit)) {
36
+ unavailable("Root-package exports require an explicit bounded source/report separation.");
37
+ }
38
+ const sourceCommit = await git(["rev-parse", "--verify", "HEAD"]);
39
+ const sourceTree = await git(["rev-parse", "--verify", "HEAD^{tree}"]);
40
+ await git(["diff", "--quiet", "HEAD", "--"]);
41
+ if (packageDirectories.length > 0 && await git(["ls-files", "--others", "--exclude-standard", "--", ...packageDirectories.map((pkg) => pkg.rootPath)])) {
42
+ unavailable("Uncommitted package inputs cannot bind a Git source tree.");
43
+ }
44
+ let total = 0;
45
+ const input = async (path) => {
46
+ try {
47
+ const bytes = await dependencies.files.read({ root: consumerRoot, candidate: resolve(consumerRoot, path), maxBytes: 32 * 1024 * 1024 });
48
+ total += bytes.byteLength;
49
+ if (total > 32 * 1024 * 1024) {
50
+ unavailable("SDK invocation input byte budget exhausted.");
51
+ }
52
+ return { path, digest: digest(bytes) };
53
+ }
54
+ catch (error) {
55
+ const failure = publicApiFileFailure(error);
56
+ if (failure !== undefined) {
57
+ unavailable(`SDK invocation input ${path} is ${failure}.`);
58
+ }
59
+ throw error;
60
+ }
61
+ };
62
+ const workspace = await input("pnpm-workspace.yaml");
63
+ const manifests = await Promise.all(inventory.packages.map((pkg) => input(pkg.manifestPath)));
64
+ const buildPaths = [];
65
+ async function buildFiles(path) {
66
+ for (const entry of await readdir(resolve(consumerRoot, path), { withFileTypes: true })) {
67
+ if (entry.name === "node_modules" || entry.name === ".git") {
68
+ continue;
69
+ }
70
+ const child = `${path}/${entry.name}`;
71
+ if (entry.isDirectory()) {
72
+ await buildFiles(child);
73
+ }
74
+ else {
75
+ buildPaths.push(child);
76
+ }
77
+ if (buildPaths.length > 4096) {
78
+ unavailable("SDK invocation input file budget exhausted.");
79
+ }
80
+ }
81
+ }
82
+ for (const pkg of packageDirectories) {
83
+ await buildFiles(pkg.rootPath);
84
+ }
85
+ const build = await Promise.all(buildPaths.toSorted().map(input));
86
+ const lock = await input("pnpm-lock.yaml");
87
+ const manifestBytes = await readFile(new URL("../../../../../../package.json", import.meta.url));
88
+ const toolManifest = JSON.parse(manifestBytes.toString("utf8"));
89
+ const toolArtifactDigest = await distributionDigest(await realpath(new URL("../../../../../../", import.meta.url)), dependencies.files, signal);
90
+ assertNotCancelled(signal);
91
+ if (await git(["rev-parse", "--verify", "HEAD"]) !== sourceCommit) {
92
+ unavailable("Source checkpoint changed during observation.");
93
+ }
94
+ await git(["diff", "--quiet", "HEAD", "--"]);
95
+ return normalizeGrowthInvocation({ repository: await git(["rev-parse", "--show-toplevel"]), sourceCommit, sourceTree,
96
+ topologyDigest: digest(growthCanonicalJson({ workspace, manifests: manifests.toSorted((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0) })),
97
+ lockDigest: lock.digest, toolchainDigest: digest(growthCanonicalJson({ node: process.version, extractor: Extractor.version, lock: lock.digest })),
98
+ artifactDigests: [digest(growthCanonicalJson(build))],
99
+ tool: { version: toolManifest.version, artifactDigest: toolArtifactDigest, extractorVersion: Extractor.version } });
100
+ }
101
+ async function distributionDigest(root, reader, signal) {
102
+ const files = [];
103
+ let total = 0;
104
+ async function capture(path) {
105
+ assertNotCancelled(signal);
106
+ const bytes = await reader.read({ root, candidate: join(root, path), maxBytes: 32 * 1024 * 1024 });
107
+ total += bytes.byteLength;
108
+ if (total > 32 * 1024 * 1024 || files.length >= 4096) {
109
+ unavailable("SDK checker distribution identity budget exhausted.");
110
+ }
111
+ files.push({ path, digest: digest(bytes) });
112
+ }
113
+ async function visit(path) {
114
+ for (const entry of await readdir(join(root, path), { withFileTypes: true })) {
115
+ const child = `${path}/${entry.name}`;
116
+ if (entry.isDirectory()) {
117
+ await visit(child);
118
+ }
119
+ else {
120
+ await capture(child);
121
+ }
122
+ }
123
+ }
124
+ await capture("package.json");
125
+ await visit("dist");
126
+ await visit("schemas");
127
+ return digest(growthCanonicalJson(files.toSorted((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0)));
128
+ }
129
+ /** Early destination validation; publication revalidates under its own fence. */
130
+ export async function assertGrowthDestination(root, path) {
131
+ const segments = path.split("/");
132
+ if (path.length === 0 || path.startsWith("/") || segments.some(segment => segment === "." || segment === "..")) {
133
+ configurationInputError("SDK report destination must be repository-relative and normalized.");
134
+ }
135
+ let current = resolve(root);
136
+ const directories = [current];
137
+ for (const segment of segments.slice(0, -1)) {
138
+ current = join(current, segment);
139
+ directories.push(current);
140
+ }
141
+ for (const directory of directories) {
142
+ let entry;
143
+ try {
144
+ entry = await lstat(directory);
145
+ }
146
+ catch (error) {
147
+ if (error instanceof Error && "code" in error && (error.code === "ENOENT" || error.code === "ENOTDIR")) {
148
+ configurationInputError("SDK report parents must exist as real directories.");
149
+ }
150
+ throw error;
151
+ }
152
+ // The path is assembled from the validated repository-relative config.
153
+ // lstat on every parent is the portable identity check: it rejects links
154
+ // and reparse entries without comparing platform-specific realpath spelling
155
+ // (`/private` on macOS, `\\?\\` and case on Windows).
156
+ if (!entry.isDirectory() || entry.isSymbolicLink()) {
157
+ configurationInputError("SDK report parents must be real contained directories.");
158
+ }
159
+ }
160
+ try {
161
+ const entry = await lstat(join(root, path));
162
+ if (!entry.isFile() || entry.isSymbolicLink() || entry.nlink !== 1) {
163
+ configurationInputError("SDK report destination must be a distinct regular file.");
164
+ }
165
+ }
166
+ catch (error) {
167
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
168
+ return;
169
+ }
170
+ throw error;
171
+ }
172
+ }
173
+ //# sourceMappingURL=growth-invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-invocation.js","sourceRoot":"","sources":["../../../../../../src/capabilities/public-api-compatibility/adapters/outbound/filesystem/growth-invocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as filesystem from "node:fs/promises";
2
+ import type { GrowthReportWriter } from "../../../application/ports/growth-report-writer.js";
3
+ type ReportFilesystem = Pick<typeof filesystem, "lstat" | "open" | "rename" | "unlink">;
4
+ /** Cooperative writers share an exclusive fence. No stale-lock takeover, durable
5
+ * journal or trust claim. Parent directories must already exist. Node cannot
6
+ * protect path lookup against a hostile process replacing directory ancestors;
7
+ * the caller owns isolation from non-cooperating writers (S3). */
8
+ export declare function createFilesystemGrowthReportWriter(consumerRoot: string, fs?: ReportFilesystem): GrowthReportWriter;
9
+ export {};
10
+ //# 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/adapters/outbound/filesystem/growth-report-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAI/C,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAE3G,KAAK,gBAAgB,GAAG,IAAI,CAAC,OAAO,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAiCxF;;;kEAGkE;AAClE,wBAAgB,kCAAkC,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,GAAE,gBAA6B,GAAG,kBAAkB,CAyI9H"}