@rathnasgala2/schemas 2.11.0 → 2.12.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 (407) hide show
  1. package/README.md +164 -56
  2. package/THIRD_PARTY_LICENSES.json +79 -106
  3. package/diagnostics/diagnostic-map.json +443 -405
  4. package/diagnostics/diagnostic-map.public-runtime-origins.json +5 -0
  5. package/docs/catalogs/schema-inventory.json +33 -54
  6. package/examples/valid/adapter-capability/rules.json +11 -0
  7. package/examples/valid/artifact-manifest/rules.json +156 -177
  8. package/examples/valid/build-input/rules.json +67 -63
  9. package/examples/valid/build-provenance/rules.json +151 -172
  10. package/examples/valid/deployment-intent/rules.json +152 -148
  11. package/examples/valid/deployment-observation/rules.json +24 -20
  12. package/examples/valid/deployment-receipt/rules.json +152 -148
  13. package/examples/valid/navigation/rules.json +2 -4
  14. package/examples/valid/theme-contract/rules.json +4 -1
  15. package/fixtures/boundary/adapter-capability/rules.json +16 -0
  16. package/fixtures/boundary/artifact-manifest/rules.json +195 -202
  17. package/fixtures/boundary/build-input/rules.json +99 -86
  18. package/fixtures/boundary/build-provenance/rules.json +193 -202
  19. package/fixtures/boundary/deployment-intent/rules.json +186 -140
  20. package/fixtures/boundary/deployment-observation/rules.json +68 -18
  21. package/fixtures/boundary/deployment-receipt/rules.json +186 -140
  22. package/fixtures/boundary/navigation/rules.json +2 -17
  23. package/fixtures/boundary/theme-contract/rules.json +34 -0
  24. package/fixtures/invalid/adapter-capability/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  25. package/fixtures/invalid/adapter-capability/UTF8_BYTE_LENGTH_INVALID/cases.json +11 -0
  26. package/fixtures/invalid/artifact-manifest/ASCII_BYTE_LENGTH_INVALID/cases.json +13 -0
  27. package/fixtures/invalid/artifact-manifest/INTEGER_RANGE_INVALID/cases.json +24 -0
  28. package/fixtures/invalid/artifact-manifest/REQUEST_FIELD_UNKNOWN/cases.json +19 -19
  29. package/fixtures/invalid/artifact-manifest/SCHEMA_CONSTANT_INVALID/cases.json +48 -48
  30. package/fixtures/invalid/artifact-manifest/SCHEMA_ENUM_INVALID/cases.json +11 -11
  31. package/fixtures/invalid/artifact-manifest/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  32. package/fixtures/invalid/artifact-manifest/SCHEMA_NEGATED_RULE_MATCHED/cases.json +0 -11
  33. package/fixtures/invalid/artifact-manifest/SCHEMA_PATTERN_INVALID/cases.json +0 -22
  34. package/fixtures/invalid/artifact-manifest/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +1105 -1105
  35. package/fixtures/invalid/artifact-manifest/SCHEMA_STRING_TOO_LONG/cases.json +4 -6
  36. package/fixtures/invalid/artifact-manifest/SCHEMA_STRING_TOO_SHORT/cases.json +9 -11
  37. package/fixtures/invalid/artifact-manifest/SCHEMA_TYPE_INVALID/cases.json +22 -31
  38. package/fixtures/invalid/artifact-manifest/UTF8_BYTE_LENGTH_INVALID/cases.json +0 -11
  39. package/fixtures/invalid/build-input/INTEGER_RANGE_INVALID/cases.json +13 -0
  40. package/fixtures/invalid/build-input/REQUEST_FIELD_UNKNOWN/cases.json +32 -32
  41. package/fixtures/invalid/build-input/SCHEMA_CONSTANT_INVALID/cases.json +11 -11
  42. package/fixtures/invalid/build-input/SCHEMA_ENUM_INVALID/cases.json +11 -11
  43. package/fixtures/invalid/build-input/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +78 -78
  44. package/fixtures/invalid/build-input/SCHEMA_TYPE_INVALID/cases.json +51 -18
  45. package/fixtures/invalid/build-provenance/ASCII_BYTE_LENGTH_INVALID/cases.json +13 -0
  46. package/fixtures/invalid/build-provenance/INTEGER_RANGE_INVALID/cases.json +22 -0
  47. package/fixtures/invalid/build-provenance/REQUEST_FIELD_UNKNOWN/cases.json +56 -56
  48. package/fixtures/invalid/build-provenance/SCHEMA_CONSTANT_INVALID/cases.json +37 -37
  49. package/fixtures/invalid/build-provenance/SCHEMA_ENUM_INVALID/cases.json +11 -11
  50. package/fixtures/invalid/build-provenance/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  51. package/fixtures/invalid/build-provenance/SCHEMA_NEGATED_RULE_MATCHED/cases.json +0 -11
  52. package/fixtures/invalid/build-provenance/SCHEMA_PATTERN_INVALID/cases.json +0 -22
  53. package/fixtures/invalid/build-provenance/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +927 -927
  54. package/fixtures/invalid/build-provenance/SCHEMA_STRING_TOO_LONG/cases.json +9 -11
  55. package/fixtures/invalid/build-provenance/SCHEMA_STRING_TOO_SHORT/cases.json +8 -10
  56. package/fixtures/invalid/build-provenance/SCHEMA_TYPE_INVALID/cases.json +20 -25
  57. package/fixtures/invalid/build-provenance/UTF8_BYTE_LENGTH_INVALID/cases.json +0 -11
  58. package/fixtures/invalid/deployment-intent/INTEGER_RANGE_INVALID/cases.json +24 -0
  59. package/fixtures/invalid/deployment-intent/REQUEST_FIELD_UNKNOWN/cases.json +30 -30
  60. package/fixtures/invalid/deployment-intent/SCHEMA_CONSTANT_INVALID/cases.json +41 -41
  61. package/fixtures/invalid/deployment-intent/SCHEMA_ENUM_INVALID/cases.json +11 -11
  62. package/fixtures/invalid/deployment-intent/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  63. package/fixtures/invalid/deployment-intent/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +1209 -1209
  64. package/fixtures/invalid/deployment-intent/SCHEMA_STRING_TOO_LONG/cases.json +9 -0
  65. package/fixtures/invalid/deployment-intent/SCHEMA_STRING_TOO_SHORT/cases.json +9 -0
  66. package/fixtures/invalid/deployment-intent/SCHEMA_TYPE_INVALID/cases.json +22 -20
  67. package/fixtures/invalid/deployment-observation/INTEGER_RANGE_INVALID/cases.json +24 -0
  68. package/fixtures/invalid/deployment-observation/REQUEST_FIELD_UNKNOWN/cases.json +16 -16
  69. package/fixtures/invalid/deployment-observation/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  70. package/fixtures/invalid/deployment-observation/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +39 -39
  71. package/fixtures/invalid/deployment-observation/SCHEMA_STRING_TOO_LONG/cases.json +11 -0
  72. package/fixtures/invalid/deployment-observation/SCHEMA_STRING_TOO_SHORT/cases.json +11 -0
  73. package/fixtures/invalid/deployment-observation/SCHEMA_TYPE_INVALID/cases.json +11 -11
  74. package/fixtures/invalid/deployment-receipt/INTEGER_RANGE_INVALID/cases.json +24 -0
  75. package/fixtures/invalid/deployment-receipt/REQUEST_FIELD_UNKNOWN/cases.json +70 -70
  76. package/fixtures/invalid/deployment-receipt/SCHEMA_CONSTANT_INVALID/cases.json +36 -36
  77. package/fixtures/invalid/deployment-receipt/SCHEMA_ENUM_INVALID/cases.json +11 -11
  78. package/fixtures/invalid/deployment-receipt/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  79. package/fixtures/invalid/deployment-receipt/SCHEMA_REQUIRED_FIELD_MISSING/cases.json +1304 -1304
  80. package/fixtures/invalid/deployment-receipt/SCHEMA_STRING_TOO_LONG/cases.json +9 -0
  81. package/fixtures/invalid/deployment-receipt/SCHEMA_STRING_TOO_SHORT/cases.json +9 -0
  82. package/fixtures/invalid/deployment-receipt/SCHEMA_TYPE_INVALID/cases.json +22 -20
  83. package/fixtures/invalid/navigation/SCHEMA_ARRAY_TOO_LONG/cases.json +0 -15
  84. package/fixtures/invalid/navigation/SCHEMA_CONSTANT_INVALID/cases.json +11 -0
  85. package/fixtures/invalid/navigation/SCHEMA_TYPE_INVALID/cases.json +0 -11
  86. package/fixtures/invalid/theme-contract/INTEGER_RANGE_INVALID/cases.json +11 -0
  87. package/fixtures/invalid/theme-contract/SCHEMA_FORMAT_INVALID/cases.json +0 -9
  88. package/fixtures/invalid/theme-contract/SCHEMA_STRING_TOO_LONG/cases.json +9 -0
  89. package/fixtures/invalid/theme-contract/SCHEMA_STRING_TOO_SHORT/cases.json +9 -0
  90. package/fixtures/manifest.json +3217 -2930
  91. package/fixtures/unknown-field/adapter-capability/rules.json +2 -0
  92. package/fixtures/unknown-field/artifact-manifest/rules.json +111 -114
  93. package/fixtures/unknown-field/build-input/rules.json +36 -32
  94. package/fixtures/unknown-field/build-provenance/rules.json +111 -114
  95. package/fixtures/unknown-field/deployment-intent/rules.json +109 -105
  96. package/fixtures/unknown-field/deployment-observation/rules.json +24 -20
  97. package/fixtures/unknown-field/deployment-receipt/rules.json +109 -105
  98. package/fixtures/unknown-field/navigation/rules.json +1 -3
  99. package/fixtures/unknown-field/theme-contract/rules.json +3 -0
  100. package/generated/browser/runtime-origins-validator-core.d.mts +10 -0
  101. package/generated/browser/runtime-origins-validator-core.mjs +35 -0
  102. package/generated/browser/validator-core.d.mts +10 -0
  103. package/generated/browser/validator-core.mjs +80 -0
  104. package/generated/typescript/contracts/artifact-manifest.d.ts +49 -48
  105. package/generated/typescript/contracts/build-input.d.ts +15 -15
  106. package/generated/typescript/contracts/build-provenance.d.ts +51 -50
  107. package/generated/typescript/contracts/deployment-intent.d.ts +6 -6
  108. package/generated/typescript/contracts/deployment-observation.d.ts +1 -1
  109. package/generated/typescript/contracts/deployment-receipt.d.ts +5 -5
  110. package/generated/typescript/contracts/navigation.d.ts +1 -1
  111. package/generated/typescript/index.js +11 -37
  112. package/openapi/http-catalog.json +2 -2
  113. package/openapi/openapi.yaml +18 -10
  114. package/package.json +19 -16
  115. package/sbom.cdx.json +23 -23
  116. package/schemas/adapter-capability.schema.json +5 -1
  117. package/schemas/appearance.schema.json +1 -1
  118. package/schemas/artifact-manifest.schema.json +15 -18
  119. package/schemas/build-input.schema.json +18 -11
  120. package/schemas/build-provenance.schema.json +15 -18
  121. package/schemas/deployment-intent.schema.json +13 -8
  122. package/schemas/deployment-observation.schema.json +10 -5
  123. package/schemas/deployment-receipt.schema.json +12 -7
  124. package/schemas/navigation.schema.json +5 -26
  125. package/schemas/theme-contract.schema.json +4 -2
  126. package/src/index.js +2 -2
  127. package/src/internal/browser-schema-validator.js +43 -0
  128. package/src/internal/format-validators.js +1 -1
  129. package/src/internal/gala-keywords.js +148 -0
  130. package/src/internal/validator-core.js +244 -108
  131. package/src/runtime-origins.js +18 -18
  132. package/types/index.d.ts +2 -2
  133. package/types/internal/browser-schema-validator.d.ts +16 -0
  134. package/types/internal/format-validators.d.ts +1 -1
  135. package/types/internal/gala-keywords.d.ts +68 -0
  136. package/types/internal/validator-core.d.ts +80 -1
  137. package/compatibility/compatibility.json +0 -594
  138. package/generated/java/src/main/java/io/gala/schema/generated/GalaSchemaRegistry.java +0 -67
  139. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityAdapterConfigurationCapabilities.java +0 -24
  140. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityAdapterIdentity.java +0 -20
  141. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityCapabilityDecision.java +0 -62
  142. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityCredentialEgressProfile.java +0 -35
  143. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityDestinationIdentity.java +0 -25
  144. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityDestinationProviderCoordinates.java +0 -19
  145. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityDocument.java +0 -52
  146. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityFilesystemProviderLimits.java +0 -32
  147. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityGithubActionsOidcOriginCatalog.java +0 -25
  148. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityHttpProviderLimits.java +0 -72
  149. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemAllowlist.java +0 -21
  150. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemAllowlistEntry.java +0 -28
  151. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemCapabilityEvidence.java +0 -42
  152. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemControlPublication.java +0 -26
  153. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemControlRow.java +0 -44
  154. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemFailureEvidence.java +0 -40
  155. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemObservationEvidence.java +0 -40
  156. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemPlatform.java +0 -25
  157. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemProbeSummary.java +0 -32
  158. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemProbeTranscript.java +0 -25
  159. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemReplacement.java +0 -22
  160. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityLocalFilesystemSurfaceIdentity.java +0 -20
  161. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityManagedExecutionBudget.java +0 -26
  162. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityPagesOidcCredentialEgress.java +0 -30
  163. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderCallClassBinding.java +0 -22
  164. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderCredentialEgress.java +0 -26
  165. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderCredentialHeader.java +0 -24
  166. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderDerivedHeader.java +0 -18
  167. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderFixedHeader.java +0 -18
  168. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilityProviderRequestTemplate.java +0 -39
  169. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilitySpacesControlPlaneBinding.java +0 -32
  170. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilitySpacesControlPlaneRequest.java +0 -26
  171. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilitySpacesControlPlaneRequestCatalog.java +0 -31
  172. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilitySpacesControlPlaneResponseCatalog.java +0 -20
  173. package/generated/java/src/main/java/io/gala/schema/generated/model/AdapterCapabilitySpacesWebsiteConfiguration.java +0 -24
  174. package/generated/java/src/main/java/io/gala/schema/generated/model/AppearanceColorMode.java +0 -19
  175. package/generated/java/src/main/java/io/gala/schema/generated/model/AppearanceDocument.java +0 -37
  176. package/generated/java/src/main/java/io/gala/schema/generated/model/AppearanceExtensionMap.java +0 -15
  177. package/generated/java/src/main/java/io/gala/schema/generated/model/AppearanceSemanticTokens.java +0 -15
  178. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestActionPinEvidence.java +0 -20
  179. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestArtifactLicenseConclusion.java +0 -21
  180. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestAssertedWorkload.java +0 -44
  181. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestBuildSandboxEvidence.java +0 -38
  182. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestDocument.java +0 -73
  183. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestFinding.java +0 -22
  184. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestAsset.java +0 -24
  185. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestCompositionIdentity.java +0 -25
  186. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestExcludedInput.java +0 -22
  187. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestIncludedSource.java +0 -22
  188. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestRedirect.java +0 -24
  189. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestRoute.java +0 -28
  190. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestSourceIdentity.java +0 -26
  191. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestManifestValidationEvidence.java +0 -22
  192. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestMeasurement.java +0 -20
  193. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestPackageIdentity.java +0 -22
  194. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestRenderPolicyIdentity.java +0 -20
  195. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestReproducibleBuildRecord.java +0 -56
  196. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestWorkflowCarrierEvidence.java +0 -26
  197. package/generated/java/src/main/java/io/gala/schema/generated/model/ArtifactManifestWorkflowFileEvidence.java +0 -26
  198. package/generated/java/src/main/java/io/gala/schema/generated/model/AuthorDocument.java +0 -33
  199. package/generated/java/src/main/java/io/gala/schema/generated/model/AuthorExtensionMap.java +0 -15
  200. package/generated/java/src/main/java/io/gala/schema/generated/model/AuthorLocalizedAuthor.java +0 -20
  201. package/generated/java/src/main/java/io/gala/schema/generated/model/AuthorSocialLink.java +0 -19
  202. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputAdapterIdentity.java +0 -20
  203. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputAppearanceNormalized.java +0 -33
  204. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputAuthorNormalized.java +0 -31
  205. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputBuildPackages.java +0 -25
  206. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputColorMode.java +0 -19
  207. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputContentBuildRecord.java +0 -33
  208. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputContentFrontmatterNormalized.java +0 -44
  209. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputDestinationCapabilityProfile.java +0 -20
  210. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputDocument.java +0 -51
  211. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputLocalizedAuthor.java +0 -20
  212. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputModuleBuildSelection.java +0 -15
  213. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputNavigationItem.java +0 -23
  214. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputNavigationLeaf.java +0 -22
  215. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputNavigationNormalized.java +0 -21
  216. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputPackageIdentity.java +0 -22
  217. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputPublicationNormalized.java +0 -39
  218. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputRenderPolicyIdentity.java +0 -20
  219. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputRenderableBody.java +0 -26
  220. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputRepositorySnapshot.java +0 -22
  221. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputResolvedFile.java +0 -18
  222. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputResolvedMedia.java +0 -20
  223. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputSemanticTokens.java +0 -15
  224. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildInputSocialLink.java +0 -19
  225. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceActionPinEvidence.java +0 -20
  226. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceArtifactLicenseConclusion.java +0 -21
  227. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceAssertedWorkload.java +0 -44
  228. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceBuildSandboxEvidence.java +0 -38
  229. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceDocument.java +0 -69
  230. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceFinding.java +0 -22
  231. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestAsset.java +0 -24
  232. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestCompositionIdentity.java +0 -25
  233. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestExcludedInput.java +0 -22
  234. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestIncludedSource.java +0 -22
  235. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestRedirect.java +0 -24
  236. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestRoute.java +0 -28
  237. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestSourceIdentity.java +0 -26
  238. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceManifestValidationEvidence.java +0 -22
  239. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceMeasurement.java +0 -20
  240. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenancePackageIdentity.java +0 -22
  241. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceRenderPolicyIdentity.java +0 -20
  242. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceReproducibleBuildRecord.java +0 -56
  243. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceWorkflowCarrierEvidence.java +0 -26
  244. package/generated/java/src/main/java/io/gala/schema/generated/model/BuildProvenanceWorkflowFileEvidence.java +0 -26
  245. package/generated/java/src/main/java/io/gala/schema/generated/model/ContentFrontmatterDocument.java +0 -50
  246. package/generated/java/src/main/java/io/gala/schema/generated/model/ContentFrontmatterExtensionMap.java +0 -15
  247. package/generated/java/src/main/java/io/gala/schema/generated/model/ContentFrontmatterMediaRef.java +0 -20
  248. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentActivationBasis.java +0 -20
  249. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentActivationDetectionObservation.java +0 -33
  250. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentActivationDetectionPlan.java +0 -44
  251. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentActivationDetectionProbe.java +0 -52
  252. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentAdapterIdentity.java +0 -20
  253. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentCancellationFinalizationEvidence.java +0 -41
  254. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDeadlineFinalizationEvidence.java +0 -39
  255. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDeadlineFinalizationStream.java +0 -22
  256. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDeploymentPolicyDecision.java +0 -75
  257. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDestinationIdentity.java +0 -25
  258. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDestinationMutationAuthority.java +0 -36
  259. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDestinationProviderCoordinates.java +0 -19
  260. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentDocument.java +0 -136
  261. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentExpectedRedirectHop.java +0 -23
  262. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentObservedVerificationHeader.java +0 -19
  263. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPackageIdentity.java +0 -22
  264. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPagesInterveningRunAttempt.java +0 -20
  265. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPagesReconciliationCommand.java +0 -48
  266. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPagesReconciliationRecovery.java +0 -41
  267. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPagesRunAttemptGapProof.java +0 -27
  268. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPublicGenerationMarkerPayload.java +0 -24
  269. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentPublicProbeObservation.java +0 -54
  270. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentRecognizedPriorRouteContract.java +0 -30
  271. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentRenderPolicyIdentity.java +0 -20
  272. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentReproducibleBuildRecord.java +0 -56
  273. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentSupersessionFinalizationEvidence.java +0 -45
  274. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentVerificationHeaderExpectation.java +0 -18
  275. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentIntentVerificationPlanTarget.java +0 -52
  276. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationActivationDetectionObservation.java +0 -33
  277. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationActivationDetectionProbe.java +0 -52
  278. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationAdapterIdentity.java +0 -20
  279. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationCancellationFinalizationEvidence.java +0 -41
  280. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationDeadlineFinalizationEvidence.java +0 -39
  281. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationDeadlineFinalizationStream.java +0 -22
  282. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationDestinationIdentity.java +0 -25
  283. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationDestinationProviderCoordinates.java +0 -19
  284. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationDocument.java +0 -57
  285. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationExpectedRedirectHop.java +0 -23
  286. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationObservedVerificationHeader.java +0 -19
  287. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationPackageIdentity.java +0 -22
  288. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationPublicProbeObservation.java +0 -54
  289. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationRecognizedPriorRouteContract.java +0 -30
  290. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationRenderPolicyIdentity.java +0 -20
  291. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationSupersessionFinalizationEvidence.java +0 -45
  292. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationVerificationHeaderExpectation.java +0 -18
  293. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentObservationVerificationPlanTarget.java +0 -52
  294. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptActivationBasis.java +0 -20
  295. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptActivationDetectionObservation.java +0 -33
  296. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptActivationDetectionPlan.java +0 -44
  297. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptActivationDetectionProbe.java +0 -52
  298. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptAdapterIdentity.java +0 -20
  299. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptCancellationFinalizationEvidence.java +0 -41
  300. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeadlineFinalizationEvidence.java +0 -39
  301. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeadlineFinalizationStream.java +0 -22
  302. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentAttempt.java +0 -38
  303. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentFailure.java +0 -24
  304. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentObservation.java +0 -53
  305. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentPolicyDecision.java +0 -75
  306. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentStageEvidence.java +0 -36
  307. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentStageInput.java +0 -26
  308. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentStageObservationEvidenceReference.java +0 -18
  309. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDeploymentStageResult.java +0 -31
  310. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDestinationIdentity.java +0 -25
  311. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDestinationMutationAuthority.java +0 -36
  312. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDestinationProviderCoordinates.java +0 -19
  313. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptDocument.java +0 -105
  314. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptExpectedRedirectHop.java +0 -23
  315. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptFinding.java +0 -22
  316. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptObservedVerificationHeader.java +0 -19
  317. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPackageIdentity.java +0 -22
  318. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPagesInterveningRunAttempt.java +0 -20
  319. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPagesReconciliationCommand.java +0 -48
  320. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPagesReconciliationRecovery.java +0 -41
  321. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPagesRunAttemptGapProof.java +0 -27
  322. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPublicGenerationMarkerPayload.java +0 -24
  323. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptPublicProbeObservation.java +0 -54
  324. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptRecognizedPriorRouteContract.java +0 -30
  325. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptRenderPolicyIdentity.java +0 -20
  326. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptReproducibleBuildRecord.java +0 -56
  327. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptSupersessionFinalizationEvidence.java +0 -45
  328. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptVerificationHeaderExpectation.java +0 -18
  329. package/generated/java/src/main/java/io/gala/schema/generated/model/DeploymentReceiptVerificationPlanTarget.java +0 -52
  330. package/generated/java/src/main/java/io/gala/schema/generated/model/EventEnvelopeDocument.java +0 -46
  331. package/generated/java/src/main/java/io/gala/schema/generated/model/EventEnvelopeRegisteredEventPayload.java +0 -26
  332. package/generated/java/src/main/java/io/gala/schema/generated/model/LockDependencyEdge.java +0 -18
  333. package/generated/java/src/main/java/io/gala/schema/generated/model/LockDocument.java +0 -39
  334. package/generated/java/src/main/java/io/gala/schema/generated/model/LockLockedPackage.java +0 -26
  335. package/generated/java/src/main/java/io/gala/schema/generated/model/LockLockedTemplate.java +0 -28
  336. package/generated/java/src/main/java/io/gala/schema/generated/model/LockPackageIdentity.java +0 -22
  337. package/generated/java/src/main/java/io/gala/schema/generated/model/NavigationDocument.java +0 -25
  338. package/generated/java/src/main/java/io/gala/schema/generated/model/NavigationExtensionMap.java +0 -15
  339. package/generated/java/src/main/java/io/gala/schema/generated/model/NavigationNavigationItem.java +0 -23
  340. package/generated/java/src/main/java/io/gala/schema/generated/model/NavigationNavigationLeaf.java +0 -23
  341. package/generated/java/src/main/java/io/gala/schema/generated/model/ProblemDocument.java +0 -37
  342. package/generated/java/src/main/java/io/gala/schema/generated/model/ProblemFieldError.java +0 -18
  343. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicGenerationMarkerDocument.java +0 -24
  344. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicRuntimeOriginsDocument.java +0 -44
  345. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicationDocument.java +0 -41
  346. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicationExtensionMap.java +0 -15
  347. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicationFooterCard.java +0 -23
  348. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicationPublicationProfile.java +0 -18
  349. package/generated/java/src/main/java/io/gala/schema/generated/model/PublicationSocialLink.java +0 -19
  350. package/generated/java/src/main/java/io/gala/schema/generated/model/RepositoryAssetRoot.java +0 -16
  351. package/generated/java/src/main/java/io/gala/schema/generated/model/RepositoryContentRoot.java +0 -23
  352. package/generated/java/src/main/java/io/gala/schema/generated/model/RepositoryDocument.java +0 -41
  353. package/generated/java/src/main/java/io/gala/schema/generated/model/RepositoryExtensionMap.java +0 -15
  354. package/generated/java/src/main/java/io/gala/schema/generated/model/RepositoryGeneratedRoot.java +0 -20
  355. package/generated/java/src/main/java/io/gala/schema/generated/model/TemplateCompositionDocument.java +0 -18
  356. package/generated/java/src/main/java/io/gala/schema/generated/model/ThemeContractDocument.java +0 -53
  357. package/generated/java/src/main/java/io/gala/schema/generated/model/ThemeContractPassiveAsset.java +0 -24
  358. package/generated/java/src/main/java/io/gala/schema/generated/model/ThemeContractThemeBudgets.java +0 -20
  359. package/generated/java/src/main/java/io/gala/schema/generated/model/ThemeContractThemeToken.java +0 -22
  360. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/adapter-capability.schema.json +0 -2689
  361. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/appearance.schema.json +0 -226
  362. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/artifact-manifest.schema.json +0 -1063
  363. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/author.schema.json +0 -231
  364. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/build-input.schema.json +0 -866
  365. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/build-provenance.schema.json +0 -937
  366. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/content-frontmatter.schema.json +0 -241
  367. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/deployment-intent.schema.json +0 -2067
  368. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/deployment-observation.schema.json +0 -1654
  369. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/deployment-receipt.schema.json +0 -5546
  370. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/event-envelope.schema.json +0 -195
  371. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/lock.schema.json +0 -326
  372. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/navigation.schema.json +0 -229
  373. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/problem.schema.json +0 -194
  374. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/public-generation-marker.schema.json +0 -142
  375. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/public-runtime-origins.schema.json +0 -183
  376. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/publication.schema.json +0 -248
  377. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/repository.schema.json +0 -219
  378. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/template-composition.schema.json +0 -133
  379. package/generated/java/src/main/resources/io/gala/schema/generated/schemas/theme-contract.schema.json +0 -850
  380. package/generated/typescript/validator-core.cjs +0 -17
  381. package/openapi/generator/spring.json +0 -22
  382. package/openapi/generator/typescript-fetch.json +0 -19
  383. package/openapi/source/authentication.yaml +0 -557
  384. package/openapi/source/callbacks.yaml +0 -332
  385. package/openapi/source/components.yaml +0 -5670
  386. package/openapi/source/github.yaml +0 -351
  387. package/openapi/source/internal.yaml +0 -71
  388. package/openapi/source/membership-invitations.yaml +0 -203
  389. package/openapi/source/organizations.yaml +0 -11144
  390. package/openapi/source/root.yaml +0 -20
  391. package/openapi/source/self.yaml +0 -1940
  392. package/openapi/source/session.yaml +0 -308
  393. package/openapi/source/workloads.yaml +0 -744
  394. package/src/internal/build-artifact-semantics.js +0 -4391
  395. package/src/internal/deployment-record-semantics.js +0 -7567
  396. package/src/internal/deployment-stage-semantics.js +0 -1207
  397. package/src/internal/http-problem-contract.js +0 -35
  398. package/src/internal/managed-evidence-journal.js +0 -160
  399. package/src/internal/public-runtime-origins.js +0 -143
  400. package/src/internal/theme-composition-semantics.js +0 -2441
  401. package/types/internal/build-artifact-semantics.d.ts +0 -77
  402. package/types/internal/deployment-record-semantics.d.ts +0 -313
  403. package/types/internal/deployment-stage-semantics.d.ts +0 -108
  404. package/types/internal/http-problem-contract.d.ts +0 -4
  405. package/types/internal/managed-evidence-journal.d.ts +0 -26
  406. package/types/internal/public-runtime-origins.d.ts +0 -22
  407. package/types/internal/theme-composition-semantics.d.ts +0 -143
@@ -1,1207 +0,0 @@
1
- import { canonicalizeJcs, canonicalizeJcsBytes } from './canonical-jcs.js';
2
- import { ACTIVE_DIGEST_PROFILES } from './digest-profiles.js';
3
- import { validateRfc3339 } from './portable-scalars.js';
4
- import { SemanticValidationError } from './semver.js';
5
-
6
- const DIGEST_PATTERN = /^sha256:[0-9a-f]{64}$/u;
7
- const STABLE_ID_PATTERN =
8
- /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u;
9
- const NONNEGATIVE_INT64_PATTERN = /^(?:0|[1-9][0-9]*)$/u;
10
- const INT64_MAXIMUM = 9_223_372_036_854_775_807n;
11
-
12
- const PROBE_PROFILE = 'gala-local-filesystem-probe-transcript-v2';
13
- const PROBE_PAYLOAD_PROFILE = 'gala-local-filesystem-probe-payload-v2';
14
-
15
- const STAGES = [
16
- 'staging',
17
- 'activation',
18
- 'public-verification',
19
- 'managed-reconciliation',
20
- 'cleanup',
21
- ];
22
- const DESTINATION_CHANGES = ['yes', 'no', 'unknown'];
23
- const TERMINAL_OUTCOMES = ['succeeded', 'failed', 'skipped', 'unknown'];
24
- const ALL_OUTCOMES = ['not-started', 'running', ...TERMINAL_OUTCOMES];
25
- const PROBE_PAYLOAD_SOURCES = ['control', 'race-a', 'race-b'];
26
-
27
- const TRANSCRIPT_KEYS = [
28
- 'profile',
29
- 'initialTarget',
30
- 'replacements',
31
- 'controlPublication',
32
- 'racePublication',
33
- ];
34
- const REPLACEMENT_KEYS = [
35
- 'operationNumber',
36
- 'preparedTarget',
37
- 'renameResult',
38
- 'readerResult',
39
- ];
40
- const CONTROL_PUBLICATION_KEYS = [
41
- 'publisherSource',
42
- 'publicationResult',
43
- 'conflictingSource',
44
- 'conflictingResult',
45
- 'publishedInodeSource',
46
- 'publishedByteSource',
47
- ];
48
- const RACE_PUBLICATION_KEYS = [
49
- 'contenders',
50
- 'winner',
51
- 'publishedInodeSource',
52
- 'publishedByteSource',
53
- ];
54
- const RACE_CONTENDER_KEYS = ['source', 'linkResult'];
55
-
56
- const LOCAL_OBSERVATION_REQUIRED_KEYS = [
57
- 'profile',
58
- 'filesystemEvidenceDigest',
59
- 'rootIdentityDigest',
60
- 'operationId',
61
- 'attemptId',
62
- 'stageAttemptId',
63
- 'observedCurrentState',
64
- 'controlHeadDigest',
65
- 'observedAt',
66
- 'evidenceDigest',
67
- ];
68
- const LOCAL_OBSERVATION_OPTIONAL_KEYS = [
69
- 'expectedGenerationId',
70
- 'observedGenerationId',
71
- 'observedArtifactDigest',
72
- 'observedMarkerDigest',
73
- 'observedFileCount',
74
- 'observedByteCount',
75
- ];
76
- const LOCAL_OBSERVATION_STATE_KEYS = [
77
- 'observedGenerationId',
78
- 'observedArtifactDigest',
79
- 'observedMarkerDigest',
80
- 'observedFileCount',
81
- 'observedByteCount',
82
- ];
83
-
84
- const STAGE_INPUT_KEYS = [
85
- 'profile',
86
- 'intentDigest',
87
- 'destinationMutationAuthority',
88
- 'stageAttemptId',
89
- 'causationId',
90
- 'stage',
91
- ];
92
- const STAGE_RESULT_REQUIRED_KEYS = [
93
- 'profile',
94
- 'stageInput',
95
- 'inputDigest',
96
- 'outcome',
97
- 'destinationChanged',
98
- 'retryable',
99
- 'finalizationObservation',
100
- ];
101
- const STAGE_RESULT_OPTIONAL_KEYS = ['failureCode', 'startedAt', 'completedAt'];
102
- const STAGE_EVIDENCE_REQUIRED_KEYS = [
103
- 'profile',
104
- 'stageInput',
105
- 'inputDigest',
106
- 'outcome',
107
- 'destinationChanged',
108
- 'retryable',
109
- 'observationEvidence',
110
- 'evidenceDigest',
111
- ];
112
- const STAGE_EVIDENCE_OPTIONAL_KEYS = [
113
- 'failureCode',
114
- 'startedAt',
115
- 'completedAt',
116
- 'stageResult',
117
- 'resultDigest',
118
- ];
119
- const OBSERVATION_REFERENCE_KEYS = ['observationId', 'evidenceDigest'];
120
- const ATTEMPT_REQUIRED_KEYS = [
121
- 'attemptId',
122
- 'stageAttemptId',
123
- 'causationId',
124
- 'stage',
125
- 'sequence',
126
- 'outcome',
127
- 'destinationChanged',
128
- 'inputDigest',
129
- 'retryable',
130
- 'evidenceDigest',
131
- ];
132
- const ATTEMPT_OPTIONAL_KEYS = [
133
- 'resultDigest',
134
- 'failureCode',
135
- 'startedAt',
136
- 'completedAt',
137
- ];
138
- const COPIED_RESULT_FIELDS = [
139
- 'outcome',
140
- 'destinationChanged',
141
- 'failureCode',
142
- 'retryable',
143
- 'startedAt',
144
- 'completedAt',
145
- ];
146
-
147
- /**
148
- * @typedef {{ stage: string, code: string, outcome: string, destinationChanges: readonly string[], retryable: boolean }} FailureCatalogRow
149
- */
150
-
151
- /** @type {readonly FailureCatalogRow[]} */
152
- const FAILURE_CATALOG = [
153
- {
154
- stage: 'staging',
155
- code: 'TARGET_CAPABILITY_UNAVAILABLE',
156
- outcome: 'failed',
157
- destinationChanges: ['no'],
158
- retryable: false,
159
- },
160
- {
161
- stage: 'staging',
162
- code: 'ATOMIC_ACTIVATION_UNSUPPORTED',
163
- outcome: 'failed',
164
- destinationChanges: ['no'],
165
- retryable: false,
166
- },
167
- {
168
- stage: 'staging',
169
- code: 'REJECTED',
170
- outcome: 'failed',
171
- destinationChanges: ['no'],
172
- retryable: false,
173
- },
174
- {
175
- stage: 'staging',
176
- code: 'NOT_ATTEMPTED_RETRYABLE',
177
- outcome: 'failed',
178
- destinationChanges: ['no'],
179
- retryable: true,
180
- },
181
- {
182
- stage: 'staging',
183
- code: 'AUTHORIZATION_LOST',
184
- outcome: 'failed',
185
- destinationChanges: ['no'],
186
- retryable: false,
187
- },
188
- {
189
- stage: 'staging',
190
- code: 'RATE_LIMITED',
191
- outcome: 'failed',
192
- destinationChanges: ['no'],
193
- retryable: true,
194
- },
195
- {
196
- stage: 'staging',
197
- code: 'PROVIDER_CONTRACT_VIOLATION',
198
- outcome: 'failed',
199
- destinationChanges: ['no'],
200
- retryable: false,
201
- },
202
- {
203
- stage: 'staging',
204
- code: 'OUTCOME_UNKNOWN_RECONCILING',
205
- outcome: 'unknown',
206
- destinationChanges: ['unknown', 'yes'],
207
- retryable: false,
208
- },
209
- {
210
- stage: 'activation',
211
- code: 'REJECTED',
212
- outcome: 'failed',
213
- destinationChanges: ['no'],
214
- retryable: false,
215
- },
216
- {
217
- stage: 'activation',
218
- code: 'NOT_ATTEMPTED_RETRYABLE',
219
- outcome: 'failed',
220
- destinationChanges: ['no'],
221
- retryable: true,
222
- },
223
- {
224
- stage: 'activation',
225
- code: 'AUTHORIZATION_LOST',
226
- outcome: 'failed',
227
- destinationChanges: ['no'],
228
- retryable: false,
229
- },
230
- {
231
- stage: 'activation',
232
- code: 'RATE_LIMITED',
233
- outcome: 'failed',
234
- destinationChanges: ['no'],
235
- retryable: true,
236
- },
237
- {
238
- stage: 'activation',
239
- code: 'PROVIDER_CONTRACT_VIOLATION',
240
- outcome: 'failed',
241
- destinationChanges: ['no'],
242
- retryable: false,
243
- },
244
- {
245
- stage: 'activation',
246
- code: 'OUTCOME_UNKNOWN_RECONCILING',
247
- outcome: 'unknown',
248
- destinationChanges: ['unknown', 'yes'],
249
- retryable: false,
250
- },
251
- {
252
- stage: 'public-verification',
253
- code: 'PUBLIC_VERIFICATION_INCONCLUSIVE',
254
- outcome: 'unknown',
255
- destinationChanges: ['unknown', 'yes'],
256
- retryable: false,
257
- },
258
- {
259
- stage: 'public-verification',
260
- code: 'PUBLIC_INTEGRITY_MISMATCH',
261
- outcome: 'failed',
262
- destinationChanges: ['unknown', 'yes'],
263
- retryable: false,
264
- },
265
- {
266
- stage: 'managed-reconciliation',
267
- code: 'REJECTED',
268
- outcome: 'failed',
269
- destinationChanges: ['no'],
270
- retryable: false,
271
- },
272
- {
273
- stage: 'managed-reconciliation',
274
- code: 'NOT_ATTEMPTED_RETRYABLE',
275
- outcome: 'unknown',
276
- destinationChanges: ['unknown', 'yes'],
277
- retryable: true,
278
- },
279
- {
280
- stage: 'managed-reconciliation',
281
- code: 'AUTHORIZATION_LOST',
282
- outcome: 'unknown',
283
- destinationChanges: ['unknown', 'yes'],
284
- retryable: false,
285
- },
286
- {
287
- stage: 'managed-reconciliation',
288
- code: 'RATE_LIMITED',
289
- outcome: 'unknown',
290
- destinationChanges: ['unknown', 'yes'],
291
- retryable: true,
292
- },
293
- {
294
- stage: 'managed-reconciliation',
295
- code: 'OUTCOME_UNKNOWN_RECONCILING',
296
- outcome: 'unknown',
297
- destinationChanges: ['unknown', 'yes'],
298
- retryable: false,
299
- },
300
- {
301
- stage: 'managed-reconciliation',
302
- code: 'PROVIDER_CONTRACT_VIOLATION',
303
- outcome: 'failed',
304
- destinationChanges: ['unknown', 'yes'],
305
- retryable: false,
306
- },
307
- {
308
- stage: 'cleanup',
309
- code: 'REJECTED',
310
- outcome: 'failed',
311
- destinationChanges: ['no', 'yes'],
312
- retryable: false,
313
- },
314
- {
315
- stage: 'cleanup',
316
- code: 'NOT_ATTEMPTED_RETRYABLE',
317
- outcome: 'failed',
318
- destinationChanges: ['no', 'yes'],
319
- retryable: true,
320
- },
321
- {
322
- stage: 'cleanup',
323
- code: 'AUTHORIZATION_LOST',
324
- outcome: 'failed',
325
- destinationChanges: ['no', 'yes'],
326
- retryable: false,
327
- },
328
- {
329
- stage: 'cleanup',
330
- code: 'RATE_LIMITED',
331
- outcome: 'failed',
332
- destinationChanges: ['no', 'yes'],
333
- retryable: true,
334
- },
335
- {
336
- stage: 'cleanup',
337
- code: 'OUTCOME_UNKNOWN_RECONCILING',
338
- outcome: 'unknown',
339
- destinationChanges: ['unknown', 'yes'],
340
- retryable: false,
341
- },
342
- {
343
- stage: 'cleanup',
344
- code: 'PROVIDER_CONTRACT_VIOLATION',
345
- outcome: 'failed',
346
- destinationChanges: ['no', 'yes'],
347
- retryable: false,
348
- },
349
- ];
350
-
351
- /**
352
- * Throw an internal assertion failure.
353
- *
354
- * @returns {never} never returns
355
- */
356
- function fail() {
357
- throw new TypeError('DEPLOYMENT_STAGE_ASSERTION_FAILED');
358
- }
359
-
360
- /**
361
- * Throw a stable public semantic diagnostic.
362
- *
363
- * @param {string} code diagnostic code
364
- * @returns {never} never returns
365
- */
366
- function invalid(code) {
367
- throw new SemanticValidationError(code);
368
- }
369
-
370
- /**
371
- * Return a candidate as a plain JSON object.
372
- *
373
- * @param {unknown} value candidate value
374
- * @returns {Record<string, unknown>} plain object
375
- */
376
- function asObject(value) {
377
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
378
- fail();
379
- }
380
- const prototype = Object.getPrototypeOf(value);
381
- if (prototype !== Object.prototype && prototype !== null) fail();
382
- return /** @type {Record<string, unknown>} */ (value);
383
- }
384
-
385
- /**
386
- * Require an exact closed-object member ledger.
387
- *
388
- * @param {unknown} value candidate object
389
- * @param {readonly string[]} required required members
390
- * @param {readonly string[]} [optional] optional members
391
- * @returns {Record<string, unknown>} validated object
392
- */
393
- function assertLedger(value, required, optional = []) {
394
- const object = asObject(value);
395
- const allowed = new Set([...required, ...optional]);
396
- const actual = Object.keys(object);
397
- if (
398
- required.some((key) => !Object.hasOwn(object, key)) ||
399
- actual.some((key) => !allowed.has(key))
400
- ) {
401
- fail();
402
- }
403
- return object;
404
- }
405
-
406
- /**
407
- * Require one exact literal value.
408
- *
409
- * @param {unknown} value candidate value
410
- * @param {unknown} expected required value
411
- * @returns {void}
412
- */
413
- function assertEqual(value, expected) {
414
- if (value !== expected) fail();
415
- }
416
-
417
- /**
418
- * Require one string from a closed catalog.
419
- *
420
- * @param {unknown} value candidate value
421
- * @param {readonly string[]} catalog exact catalog
422
- * @returns {string} validated value
423
- */
424
- function assertCatalog(value, catalog) {
425
- if (typeof value !== 'string' || !catalog.includes(value)) fail();
426
- return value;
427
- }
428
-
429
- /**
430
- * Require one portable tagged SHA-256 digest.
431
- *
432
- * @param {unknown} value candidate value
433
- * @returns {string} validated digest
434
- */
435
- function assertDigest(value) {
436
- if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) fail();
437
- return value;
438
- }
439
-
440
- /**
441
- * Require one lowercase UUIDv7 stable identifier.
442
- *
443
- * @param {unknown} value candidate value
444
- * @returns {string} validated identifier
445
- */
446
- function assertStableId(value) {
447
- if (typeof value !== 'string' || !STABLE_ID_PATTERN.test(value)) fail();
448
- return value;
449
- }
450
-
451
- /**
452
- * Require a boolean.
453
- *
454
- * @param {unknown} value candidate value
455
- * @returns {boolean} validated boolean
456
- */
457
- function assertBoolean(value) {
458
- if (typeof value !== 'boolean') fail();
459
- return value;
460
- }
461
-
462
- /**
463
- * Require an integer in an inclusive range.
464
- *
465
- * @param {unknown} value candidate value
466
- * @param {number} minimum inclusive minimum
467
- * @param {number} maximum inclusive maximum
468
- * @returns {number} validated integer
469
- */
470
- function assertInteger(value, minimum, maximum) {
471
- if (
472
- typeof value !== 'number' ||
473
- !Number.isInteger(value) ||
474
- value < minimum ||
475
- value > maximum
476
- ) {
477
- fail();
478
- }
479
- return value;
480
- }
481
-
482
- /**
483
- * Require one canonical non-negative signed-64-bit decimal string.
484
- *
485
- * @param {unknown} value candidate value
486
- * @returns {string} validated decimal string
487
- */
488
- function assertNonnegativeInt64(value) {
489
- if (
490
- typeof value !== 'string' ||
491
- value.length > 19 ||
492
- !NONNEGATIVE_INT64_PATTERN.test(value) ||
493
- BigInt(value) > INT64_MAXIMUM
494
- ) {
495
- fail();
496
- }
497
- return value;
498
- }
499
-
500
- /**
501
- * Require one canonical Gala timestamp.
502
- *
503
- * @param {unknown} value candidate value
504
- * @returns {string} validated timestamp
505
- */
506
- function assertTimestamp(value) {
507
- if (typeof value !== 'string') fail();
508
- validateRfc3339(value);
509
- return value;
510
- }
511
-
512
- /**
513
- * Require a field to be absent.
514
- *
515
- * @param {Record<string, unknown>} object record
516
- * @param {string} key member name
517
- * @returns {void}
518
- */
519
- function assertAbsent(object, key) {
520
- if (Object.hasOwn(object, key)) fail();
521
- }
522
-
523
- /**
524
- * Require all named fields to be absent.
525
- *
526
- * @param {Record<string, unknown>} object record
527
- * @param {readonly string[]} keys member names
528
- * @returns {void}
529
- */
530
- function assertAllAbsent(object, keys) {
531
- for (const key of keys) assertAbsent(object, key);
532
- }
533
-
534
- /**
535
- * Require all named fields to be present.
536
- *
537
- * @param {Record<string, unknown>} object record
538
- * @param {readonly string[]} keys member names
539
- * @returns {void}
540
- */
541
- function assertAllPresent(object, keys) {
542
- if (keys.some((key) => !Object.hasOwn(object, key))) fail();
543
- }
544
-
545
- /**
546
- * Compare two validated JSON values by their exact RFC 8785 bytes.
547
- *
548
- * @param {unknown} left first value
549
- * @param {unknown} right second value
550
- * @returns {void}
551
- */
552
- function assertJcsEqual(left, right) {
553
- if (canonicalizeJcs(left) !== canonicalizeJcs(right)) fail();
554
- }
555
-
556
- /**
557
- * Require identical presence and value for copied scalar fields.
558
- *
559
- * @param {Record<string, unknown>} left first record
560
- * @param {Record<string, unknown>} right second record
561
- * @param {readonly string[]} keys copied fields
562
- * @returns {void}
563
- */
564
- function assertCopiedFields(left, right, keys) {
565
- for (const key of keys) {
566
- if (
567
- Object.hasOwn(left, key) !== Object.hasOwn(right, key) ||
568
- left[key] !== right[key]
569
- ) {
570
- fail();
571
- }
572
- }
573
- }
574
-
575
- /**
576
- * Compute one digest through the shared named-profile authority.
577
- *
578
- * @param {string} name exact active profile name
579
- * @param {unknown} value complete profile input
580
- * @returns {string} tagged digest
581
- */
582
- function digestNamedProfile(name, value) {
583
- const profile = ACTIVE_DIGEST_PROFILES[name];
584
- if (!profile) throw new TypeError('DIGEST_PROFILE_REQUIRED');
585
- return profile.digest(value);
586
- }
587
-
588
- /**
589
- * Validate the exact credential-free stage input ledger.
590
- *
591
- * The embedded authority's complete schema remains owned by the generated
592
- * contract; this validator reads only the identity fields used by DEC-098's
593
- * cross-record equalities.
594
- *
595
- * @param {unknown} value candidate stage input
596
- * @returns {Record<string, unknown>} validated stage input
597
- */
598
- function validateStageInputInternal(value) {
599
- const input = assertLedger(value, STAGE_INPUT_KEYS);
600
- assertEqual(input.profile, 'gala-deployment-stage-input-v2');
601
- assertDigest(input.intentDigest);
602
- const authority = asObject(input.destinationMutationAuthority);
603
- assertEqual(authority.profile, 'gala-destination-mutation-authority-v2');
604
- assertStableId(authority.operationId);
605
- assertStableId(authority.attemptId);
606
- assertStableId(input.stageAttemptId);
607
- assertStableId(input.causationId);
608
- assertCatalog(input.stage, STAGES);
609
- if (input.stageAttemptId === input.causationId) fail();
610
- canonicalizeJcs(input);
611
- return input;
612
- }
613
-
614
- /**
615
- * Validate one closed observation-evidence reference.
616
- *
617
- * @param {unknown} value candidate reference
618
- * @returns {Record<string, unknown>} validated reference
619
- */
620
- function validateObservationReference(value) {
621
- const reference = assertLedger(value, OBSERVATION_REFERENCE_KEYS);
622
- assertStableId(reference.observationId);
623
- assertDigest(reference.evidenceDigest);
624
- return reference;
625
- }
626
-
627
- /**
628
- * Require a valid managed failure-catalog tuple.
629
- *
630
- * @param {string} stage stage
631
- * @param {string} outcome attempt outcome
632
- * @param {string} destinationChanged cumulative destination mutation
633
- * @param {unknown} failureCode failure code
634
- * @param {boolean} retryable retryability value
635
- * @returns {void}
636
- */
637
- function assertFailureCatalogTuple(
638
- stage,
639
- outcome,
640
- destinationChanged,
641
- failureCode,
642
- retryable,
643
- ) {
644
- if (typeof failureCode !== 'string') fail();
645
- const matched = FAILURE_CATALOG.some(
646
- (row) =>
647
- row.stage === stage &&
648
- row.code === failureCode &&
649
- row.outcome === outcome &&
650
- row.destinationChanges.includes(destinationChanged) &&
651
- row.retryable === retryable,
652
- );
653
- if (!matched) fail();
654
- }
655
-
656
- /**
657
- * Validate outcome, change, failure, retry, and timestamp state.
658
- *
659
- * @param {Record<string, unknown>} record result, evidence, or attempt
660
- * @param {string} stage owning stage
661
- * @returns {string} validated outcome
662
- */
663
- function validateStateFacts(record, stage) {
664
- const outcome = assertCatalog(record.outcome, ALL_OUTCOMES);
665
- const destinationChanged = assertCatalog(
666
- record.destinationChanged,
667
- DESTINATION_CHANGES,
668
- );
669
- const retryable = assertBoolean(record.retryable);
670
-
671
- if (outcome === 'not-started') {
672
- assertEqual(destinationChanged, 'no');
673
- assertEqual(retryable, false);
674
- assertAllAbsent(record, [
675
- 'resultDigest',
676
- 'failureCode',
677
- 'startedAt',
678
- 'completedAt',
679
- ]);
680
- return outcome;
681
- }
682
- if (outcome === 'running') {
683
- assertEqual(retryable, false);
684
- assertAllPresent(record, ['startedAt']);
685
- assertTimestamp(record.startedAt);
686
- assertAllAbsent(record, ['resultDigest', 'failureCode', 'completedAt']);
687
- return outcome;
688
- }
689
- if (outcome === 'skipped') {
690
- assertEqual(destinationChanged, 'no');
691
- assertEqual(retryable, false);
692
- assertAllAbsent(record, ['failureCode', 'startedAt', 'completedAt']);
693
- return outcome;
694
- }
695
- if (outcome === 'succeeded') {
696
- assertCatalog(destinationChanged, ['no', 'yes']);
697
- assertEqual(retryable, false);
698
- assertAbsent(record, 'failureCode');
699
- } else {
700
- assertFailureCatalogTuple(
701
- stage,
702
- outcome,
703
- destinationChanged,
704
- record.failureCode,
705
- retryable,
706
- );
707
- }
708
-
709
- assertAllPresent(record, ['startedAt', 'completedAt']);
710
- const startedAt = assertTimestamp(record.startedAt);
711
- const completedAt = assertTimestamp(record.completedAt);
712
- if (startedAt > completedAt) fail();
713
- return outcome;
714
- }
715
-
716
- /**
717
- * Validate a stage result without remapping its public diagnostic.
718
- *
719
- * @param {unknown} value candidate result
720
- * @returns {Record<string, unknown>} validated result
721
- */
722
- function validateStageResultInternal(value) {
723
- const result = assertLedger(
724
- value,
725
- STAGE_RESULT_REQUIRED_KEYS,
726
- STAGE_RESULT_OPTIONAL_KEYS,
727
- );
728
- assertEqual(result.profile, 'gala-deployment-stage-result-v2');
729
- const input = validateStageInputInternal(result.stageInput);
730
- const inputDigest = assertDigest(result.inputDigest);
731
- assertEqual(inputDigest, computeDeploymentStageInputDigest(input));
732
- const stage = assertCatalog(input.stage, STAGES);
733
- const outcome = validateStateFacts(result, stage);
734
- if (!TERMINAL_OUTCOMES.includes(outcome)) fail();
735
- validateObservationReference(result.finalizationObservation);
736
- return result;
737
- }
738
-
739
- /**
740
- * Sort complete observation references by RFC 8785 UTF-8 bytes.
741
- *
742
- * @param {Record<string, unknown>[]} references observation references
743
- * @returns {Record<string, unknown>[]} sorted copy
744
- */
745
- function sortReferences(references) {
746
- return [...references].sort((left, right) =>
747
- Buffer.compare(canonicalizeJcsBytes(left), canonicalizeJcsBytes(right)),
748
- );
749
- }
750
-
751
- /**
752
- * Validate a complete stage evidence owner without remapping diagnostics.
753
- *
754
- * @param {unknown} value candidate evidence
755
- * @returns {Record<string, unknown>} validated evidence
756
- */
757
- function validateStageEvidenceInternal(value) {
758
- const evidence = assertLedger(
759
- value,
760
- STAGE_EVIDENCE_REQUIRED_KEYS,
761
- STAGE_EVIDENCE_OPTIONAL_KEYS,
762
- );
763
- assertEqual(evidence.profile, 'gala-deployment-stage-evidence-v2');
764
- const input = validateStageInputInternal(evidence.stageInput);
765
- const inputDigest = assertDigest(evidence.inputDigest);
766
- assertEqual(inputDigest, computeDeploymentStageInputDigest(input));
767
- const stage = assertCatalog(input.stage, STAGES);
768
- const outcome = validateStateFacts(evidence, stage);
769
-
770
- if (!Array.isArray(evidence.observationEvidence)) fail();
771
- const observationEvidence = evidence.observationEvidence.map((reference) =>
772
- validateObservationReference(reference),
773
- );
774
- if (observationEvidence.length > 1_000) fail();
775
-
776
- const observationIds = new Set();
777
- let previousBytes;
778
- for (const reference of observationEvidence) {
779
- if (observationIds.has(reference.observationId)) fail();
780
- observationIds.add(reference.observationId);
781
- const bytes = canonicalizeJcsBytes(reference);
782
- if (previousBytes && Buffer.compare(previousBytes, bytes) >= 0) fail();
783
- previousBytes = bytes;
784
- }
785
-
786
- const ownedDigests = new Set([
787
- inputDigest,
788
- evidence.resultDigest,
789
- evidence.evidenceDigest,
790
- ]);
791
- if (
792
- observationEvidence.some((reference) =>
793
- ownedDigests.has(reference.evidenceDigest),
794
- )
795
- ) {
796
- fail();
797
- }
798
-
799
- if (outcome === 'not-started') {
800
- if (observationEvidence.length !== 0) fail();
801
- assertAllAbsent(evidence, ['stageResult', 'resultDigest']);
802
- } else if (outcome === 'running') {
803
- assertAllAbsent(evidence, ['stageResult', 'resultDigest']);
804
- } else {
805
- if (observationEvidence.length === 0) fail();
806
- assertAllPresent(evidence, ['stageResult', 'resultDigest']);
807
- const result = validateStageResultInternal(evidence.stageResult);
808
- assertJcsEqual(result.stageInput, input);
809
- assertEqual(result.inputDigest, inputDigest);
810
- assertCopiedFields(evidence, result, COPIED_RESULT_FIELDS);
811
- const resultDigest = assertDigest(evidence.resultDigest);
812
- assertEqual(resultDigest, computeDeploymentStageResultDigest(result));
813
- const finalization = validateObservationReference(
814
- result.finalizationObservation,
815
- );
816
- if (
817
- !observationEvidence.some(
818
- (reference) =>
819
- canonicalizeJcs(reference) === canonicalizeJcs(finalization),
820
- )
821
- ) {
822
- fail();
823
- }
824
- }
825
-
826
- const evidenceDigest = assertDigest(evidence.evidenceDigest);
827
- assertEqual(evidenceDigest, computeDeploymentStageEvidenceDigest(evidence));
828
- return evidence;
829
- }
830
-
831
- /**
832
- * Validate one enclosing deployment attempt.
833
- *
834
- * @param {unknown} value candidate attempt
835
- * @returns {Record<string, unknown>} validated attempt
836
- */
837
- function validateAttemptInternal(value) {
838
- const attempt = assertLedger(
839
- value,
840
- ATTEMPT_REQUIRED_KEYS,
841
- ATTEMPT_OPTIONAL_KEYS,
842
- );
843
- assertStableId(attempt.attemptId);
844
- assertStableId(attempt.stageAttemptId);
845
- assertStableId(attempt.causationId);
846
- const stage = assertCatalog(attempt.stage, STAGES);
847
- assertInteger(attempt.sequence, 1, 100);
848
- assertDigest(attempt.inputDigest);
849
- assertDigest(attempt.evidenceDigest);
850
- const outcome = validateStateFacts(attempt, stage);
851
- if (TERMINAL_OUTCOMES.includes(outcome)) {
852
- assertDigest(attempt.resultDigest);
853
- }
854
- return attempt;
855
- }
856
-
857
- /**
858
- * Return the exact no-newline payload bytes for one probe source.
859
- *
860
- * @param {string} source `control`, `race-a`, or `race-b`
861
- * @returns {Buffer} exact compact-JCS payload bytes
862
- */
863
- export function createLocalFilesystemProbePayload(source) {
864
- try {
865
- assertCatalog(source, PROBE_PAYLOAD_SOURCES);
866
- return Buffer.from(
867
- `{"profile":"${PROBE_PAYLOAD_PROFILE}","source":"${source}"}`,
868
- 'utf8',
869
- );
870
- } catch {
871
- invalid('LOCAL_FILESYSTEM_PROBE_PAYLOAD_INVALID');
872
- }
873
- }
874
-
875
- /**
876
- * Validate exact local-filesystem probe payload bytes.
877
- *
878
- * @param {unknown} payload exact payload bytes
879
- * @param {string} source expected source
880
- * @returns {void}
881
- */
882
- export function validateLocalFilesystemProbePayload(payload, source) {
883
- try {
884
- if (!(payload instanceof Uint8Array)) fail();
885
- const expected = createLocalFilesystemProbePayload(source);
886
- if (!Buffer.from(payload).equals(expected)) fail();
887
- } catch {
888
- invalid('LOCAL_FILESYSTEM_PROBE_PAYLOAD_INVALID');
889
- }
890
- }
891
-
892
- /**
893
- * Compute the exact DEC-098 local-filesystem probe transcript digest.
894
- *
895
- * @param {unknown} transcript complete transcript
896
- * @returns {string} tagged digest
897
- */
898
- export function computeLocalFilesystemProbeTranscriptDigest(transcript) {
899
- return digestNamedProfile('localFilesystemProbeTranscript', transcript);
900
- }
901
-
902
- /**
903
- * Validate the exact 10,000-operation local-filesystem probe transcript.
904
- *
905
- * @param {unknown} value candidate transcript
906
- * @returns {void}
907
- */
908
- export function validateLocalFilesystemProbeTranscript(value) {
909
- try {
910
- const transcript = assertLedger(value, TRANSCRIPT_KEYS);
911
- assertEqual(transcript.profile, PROBE_PROFILE);
912
- assertEqual(transcript.initialTarget, 'target-a');
913
- if (
914
- !Array.isArray(transcript.replacements) ||
915
- transcript.replacements.length !== 10_000
916
- ) {
917
- fail();
918
- }
919
- for (let index = 0; index < transcript.replacements.length; index += 1) {
920
- const replacement = assertLedger(
921
- transcript.replacements[index],
922
- REPLACEMENT_KEYS,
923
- );
924
- const operationNumber = index + 1;
925
- assertEqual(replacement.operationNumber, operationNumber);
926
- assertEqual(
927
- replacement.preparedTarget,
928
- operationNumber % 2 === 1 ? 'target-b' : 'target-a',
929
- );
930
- assertEqual(replacement.renameResult, 'success');
931
- assertCatalog(replacement.readerResult, ['target-a', 'target-b']);
932
- }
933
-
934
- const control = assertLedger(
935
- transcript.controlPublication,
936
- CONTROL_PUBLICATION_KEYS,
937
- );
938
- assertEqual(control.publisherSource, 'control');
939
- assertEqual(control.publicationResult, 'success');
940
- assertEqual(control.conflictingSource, 'race-a');
941
- assertEqual(control.conflictingResult, 'EEXIST');
942
- assertEqual(control.publishedInodeSource, 'control');
943
- assertEqual(control.publishedByteSource, 'control');
944
-
945
- const race = assertLedger(
946
- transcript.racePublication,
947
- RACE_PUBLICATION_KEYS,
948
- );
949
- if (!Array.isArray(race.contenders) || race.contenders.length !== 2) {
950
- fail();
951
- }
952
- const contenders = race.contenders.map((contender) =>
953
- assertLedger(contender, RACE_CONTENDER_KEYS),
954
- );
955
- assertEqual(contenders[0]?.source, 'race-a');
956
- assertEqual(contenders[1]?.source, 'race-b');
957
- for (const contender of contenders) {
958
- assertCatalog(contender.linkResult, ['success', 'EEXIST']);
959
- }
960
- const successful = contenders.filter(
961
- (contender) => contender.linkResult === 'success',
962
- );
963
- const conflicting = contenders.filter(
964
- (contender) => contender.linkResult === 'EEXIST',
965
- );
966
- if (successful.length !== 1 || conflicting.length !== 1) fail();
967
- const winner = successful[0]?.source;
968
- assertEqual(race.winner, winner);
969
- assertEqual(race.publishedInodeSource, winner);
970
- assertEqual(race.publishedByteSource, winner);
971
-
972
- computeLocalFilesystemProbeTranscriptDigest(transcript);
973
- } catch {
974
- invalid('LOCAL_FILESYSTEM_PROBE_TRANSCRIPT_INVALID');
975
- }
976
- }
977
-
978
- /**
979
- * Compute a local observation evidence self-exclusion digest.
980
- *
981
- * @param {unknown} evidence complete local observation evidence
982
- * @returns {string} tagged digest
983
- */
984
- export function computeLocalFilesystemObservationEvidenceDigest(evidence) {
985
- return digestNamedProfile('localFilesystemObservationEvidence', evidence);
986
- }
987
-
988
- /**
989
- * Validate local observation evidence and its five-field state ledger.
990
- *
991
- * @param {unknown} value candidate evidence
992
- * @returns {void}
993
- */
994
- export function validateLocalFilesystemObservationEvidence(value) {
995
- try {
996
- const evidence = assertLedger(
997
- value,
998
- LOCAL_OBSERVATION_REQUIRED_KEYS,
999
- LOCAL_OBSERVATION_OPTIONAL_KEYS,
1000
- );
1001
- assertEqual(evidence.profile, 'gala-local-directory-observation-v2');
1002
- assertDigest(evidence.filesystemEvidenceDigest);
1003
- assertDigest(evidence.rootIdentityDigest);
1004
- assertStableId(evidence.operationId);
1005
- assertStableId(evidence.attemptId);
1006
- assertStableId(evidence.stageAttemptId);
1007
- if (Object.hasOwn(evidence, 'expectedGenerationId')) {
1008
- assertStableId(evidence.expectedGenerationId);
1009
- }
1010
- const state = assertCatalog(evidence.observedCurrentState, [
1011
- 'absent',
1012
- 'valid',
1013
- 'malformed',
1014
- 'unsafe',
1015
- ]);
1016
- if (state === 'valid') {
1017
- assertAllPresent(evidence, LOCAL_OBSERVATION_STATE_KEYS);
1018
- assertStableId(evidence.observedGenerationId);
1019
- assertDigest(evidence.observedArtifactDigest);
1020
- assertDigest(evidence.observedMarkerDigest);
1021
- assertNonnegativeInt64(evidence.observedFileCount);
1022
- assertNonnegativeInt64(evidence.observedByteCount);
1023
- } else {
1024
- assertAllAbsent(evidence, LOCAL_OBSERVATION_STATE_KEYS);
1025
- }
1026
- assertDigest(evidence.controlHeadDigest);
1027
- assertTimestamp(evidence.observedAt);
1028
- assertEqual(
1029
- assertDigest(evidence.evidenceDigest),
1030
- computeLocalFilesystemObservationEvidenceDigest(evidence),
1031
- );
1032
- } catch {
1033
- invalid('LOCAL_FILESYSTEM_OBSERVATION_EVIDENCE_INVALID');
1034
- }
1035
- }
1036
-
1037
- /**
1038
- * Compute the exact credential-free deployment-stage input digest.
1039
- *
1040
- * @param {unknown} input complete stage input
1041
- * @returns {string} tagged digest
1042
- */
1043
- export function computeDeploymentStageInputDigest(input) {
1044
- return digestNamedProfile('deploymentStageInput', input);
1045
- }
1046
-
1047
- /**
1048
- * Validate one closed deployment-stage input.
1049
- *
1050
- * @param {unknown} input candidate stage input
1051
- * @returns {void}
1052
- */
1053
- export function validateDeploymentStageInput(input) {
1054
- try {
1055
- validateStageInputInternal(input);
1056
- } catch {
1057
- invalid('DEPLOYMENT_STAGE_INPUT_INVALID');
1058
- }
1059
- }
1060
-
1061
- /**
1062
- * Compute the exact normalized deployment-stage result digest.
1063
- *
1064
- * @param {unknown} result complete stage result
1065
- * @returns {string} tagged digest
1066
- */
1067
- export function computeDeploymentStageResultDigest(result) {
1068
- return digestNamedProfile('deploymentStageResult', result);
1069
- }
1070
-
1071
- /**
1072
- * Validate one closed terminal deployment-stage result.
1073
- *
1074
- * @param {unknown} result candidate result
1075
- * @returns {void}
1076
- */
1077
- export function validateDeploymentStageResult(result) {
1078
- try {
1079
- validateStageResultInternal(result);
1080
- } catch {
1081
- invalid('DEPLOYMENT_STAGE_RESULT_INVALID');
1082
- }
1083
- }
1084
-
1085
- /**
1086
- * Compute the complete deployment-stage evidence self-exclusion digest.
1087
- *
1088
- * @param {unknown} evidence complete stage evidence
1089
- * @returns {string} tagged digest
1090
- */
1091
- export function computeDeploymentStageEvidenceDigest(evidence) {
1092
- return digestNamedProfile('deploymentStageEvidence', evidence);
1093
- }
1094
-
1095
- /**
1096
- * Validate one closed deployment-stage evidence owner.
1097
- *
1098
- * Cross-record intent, attempt, and journal-prefix equalities are validated by
1099
- * `validateDeploymentStageRecords`.
1100
- *
1101
- * @param {unknown} evidence candidate evidence
1102
- * @returns {void}
1103
- */
1104
- export function validateDeploymentStageEvidence(evidence) {
1105
- try {
1106
- validateStageEvidenceInternal(evidence);
1107
- } catch {
1108
- invalid('DEPLOYMENT_STAGE_EVIDENCE_INVALID');
1109
- }
1110
- }
1111
-
1112
- /**
1113
- * Validate all DEC-098 equalities for one stage and its already committed
1114
- * observation prefix.
1115
- *
1116
- * `retainedObservations` is the retained joint-evidence-journal order, not a
1117
- * caller-selected or observation-sequence order. This function only consumes
1118
- * committed observations and never constructs a current observation wrapper,
1119
- * which preserves DEC-098's stage digest dependency order.
1120
- *
1121
- * @param {unknown} records related retained records
1122
- * @returns {void}
1123
- */
1124
- export function validateDeploymentStageRecords(records) {
1125
- try {
1126
- const context = assertLedger(asObject(records), [
1127
- 'deploymentIntent',
1128
- 'deploymentAttempt',
1129
- 'deploymentStageEvidence',
1130
- 'retainedObservations',
1131
- ]);
1132
- const evidence = validateStageEvidenceInternal(
1133
- context.deploymentStageEvidence,
1134
- );
1135
- const input = validateStageInputInternal(evidence.stageInput);
1136
- const authority = asObject(input.destinationMutationAuthority);
1137
- const intent = asObject(context.deploymentIntent);
1138
- const attempt = validateAttemptInternal(context.deploymentAttempt);
1139
-
1140
- const operationId = assertStableId(intent.operationId);
1141
- const attemptId = assertStableId(intent.attemptId);
1142
- assertEqual(input.intentDigest, assertDigest(intent.intentDigest));
1143
- assertJcsEqual(
1144
- input.destinationMutationAuthority,
1145
- intent.destinationMutationAuthority,
1146
- );
1147
- assertEqual(authority.operationId, operationId);
1148
- assertEqual(authority.attemptId, attemptId);
1149
- assertEqual(attempt.attemptId, attemptId);
1150
- assertEqual(attempt.stageAttemptId, input.stageAttemptId);
1151
- assertEqual(attempt.causationId, input.causationId);
1152
- assertEqual(attempt.stage, input.stage);
1153
- assertEqual(attempt.inputDigest, evidence.inputDigest);
1154
- assertEqual(attempt.evidenceDigest, evidence.evidenceDigest);
1155
- assertCopiedFields(attempt, evidence, COPIED_RESULT_FIELDS);
1156
-
1157
- const outcome = assertCatalog(evidence.outcome, ALL_OUTCOMES);
1158
- if (TERMINAL_OUTCOMES.includes(outcome)) {
1159
- assertEqual(attempt.resultDigest, evidence.resultDigest);
1160
- } else {
1161
- assertAbsent(attempt, 'resultDigest');
1162
- }
1163
-
1164
- if (!Array.isArray(context.retainedObservations)) fail();
1165
- const observations = context.retainedObservations.map((candidate) => {
1166
- const observation = asObject(candidate);
1167
- assertStableId(observation.observationId);
1168
- assertStableId(observation.stageAttemptId);
1169
- assertDigest(observation.evidenceDigest);
1170
- return observation;
1171
- });
1172
- const retainedIds = new Set();
1173
- for (const observation of observations) {
1174
- if (retainedIds.has(observation.observationId)) fail();
1175
- retainedIds.add(observation.observationId);
1176
- }
1177
-
1178
- let prefix = observations;
1179
- if (TERMINAL_OUTCOMES.includes(outcome)) {
1180
- const result = asObject(evidence.stageResult);
1181
- const finalization = asObject(result.finalizationObservation);
1182
- const finalizationIndex = observations.findIndex(
1183
- (observation) =>
1184
- observation.observationId === finalization.observationId &&
1185
- observation.evidenceDigest === finalization.evidenceDigest,
1186
- );
1187
- if (finalizationIndex < 0) fail();
1188
- const finalObservation = observations[finalizationIndex];
1189
- if (finalObservation?.stageAttemptId !== input.stageAttemptId) fail();
1190
- prefix = observations.slice(0, finalizationIndex + 1);
1191
- }
1192
-
1193
- const expectedReferences = sortReferences(
1194
- prefix
1195
- .filter(
1196
- (observation) => observation.stageAttemptId === input.stageAttemptId,
1197
- )
1198
- .map((observation) => ({
1199
- observationId: observation.observationId,
1200
- evidenceDigest: observation.evidenceDigest,
1201
- })),
1202
- );
1203
- assertJcsEqual(evidence.observationEvidence, expectedReferences);
1204
- } catch {
1205
- invalid('DEPLOYMENT_STAGE_RECORDS_INVALID');
1206
- }
1207
- }