@dynamicalsystems/idl-conformance 0.12.0 → 0.13.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 (146) hide show
  1. package/assets/vectors/dsg.extension.release_1/accept/compute-release.json +8 -0
  2. package/assets/vectors/dsg.extension.release_1/accept/noncompute-release-without-fake-compute.json +8 -0
  3. package/assets/vectors/dsg.extension.release_1/accept/signature-binds-canonical-body.json +9 -0
  4. package/assets/vectors/dsg.extension.release_1/digest/canonical-envelope.json +8 -0
  5. package/assets/vectors/dsg.extension.release_1/reject/component-dependency-cycle.json +9 -0
  6. package/assets/vectors/dsg.extension.release_1/reject/compute-requires-job-class.json +9 -0
  7. package/assets/vectors/dsg.extension.release_1/reject/duplicate-component-id-with-different-body.json +9 -0
  8. package/assets/vectors/dsg.extension.release_1/reject/missing-component-dependency.json +9 -0
  9. package/assets/vectors/dsg.extension.release_1/reject/mutable-release-status-forbidden.json +8 -0
  10. package/assets/vectors/dsg.extension.release_1/reject/noncompute-cannot-claim-artifact.json +8 -0
  11. package/assets/vectors/dsg.extension.release_1/reject/signature-rejects-altered-signature.json +9 -0
  12. package/assets/vectors/dsg.extension.release_1/reject/signature-rejects-substituted-body-digest.json +9 -0
  13. package/assets/vectors/dsg.extension.release_1/reject/signature-rejects-wrong-key.json +9 -0
  14. package/assets/vectors/dsg.organization.release_1/accept/activeSet-valid.json +8 -0
  15. package/assets/vectors/dsg.organization.release_1/accept/admission-revoked.json +8 -0
  16. package/assets/vectors/dsg.organization.release_1/accept/admission-superseded.json +8 -0
  17. package/assets/vectors/dsg.organization.release_1/accept/admission-suspended.json +8 -0
  18. package/assets/vectors/dsg.organization.release_1/accept/admissionRecord-valid.json +8 -0
  19. package/assets/vectors/dsg.organization.release_1/accept/available-catalog-pins-semantic-documents.json +8 -0
  20. package/assets/vectors/dsg.organization.release_1/accept/boundAttestation-valid.json +8 -0
  21. package/assets/vectors/dsg.organization.release_1/accept/build-lock-complete.json +9 -0
  22. package/assets/vectors/dsg.organization.release_1/accept/catalog-valid.json +8 -0
  23. package/assets/vectors/dsg.organization.release_1/accept/dependencyLock-valid.json +8 -0
  24. package/assets/vectors/dsg.organization.release_1/accept/import-pending.json +8 -0
  25. package/assets/vectors/dsg.organization.release_1/accept/import-refused.json +8 -0
  26. package/assets/vectors/dsg.organization.release_1/accept/import-staged.json +8 -0
  27. package/assets/vectors/dsg.organization.release_1/accept/import-verified.json +8 -0
  28. package/assets/vectors/dsg.organization.release_1/accept/memberObservation-valid.json +8 -0
  29. package/assets/vectors/dsg.organization.release_1/accept/organizationBuild-valid.json +8 -0
  30. package/assets/vectors/dsg.organization.release_1/accept/organizationRelease-valid.json +8 -0
  31. package/assets/vectors/dsg.organization.release_1/accept/refused-admission-without-invented-approval.json +8 -0
  32. package/assets/vectors/dsg.organization.release_1/accept/releaseEligibility-valid.json +8 -0
  33. package/assets/vectors/dsg.organization.release_1/accept/releaseStatusObservation-valid.json +8 -0
  34. package/assets/vectors/dsg.organization.release_1/accept/resolved-typed-dependency-closure.json +8 -0
  35. package/assets/vectors/dsg.organization.release_1/accept/retired-release-remains-executable-in-current-active-set.json +9 -0
  36. package/assets/vectors/dsg.organization.release_1/digest/canonical-envelope.json +8 -0
  37. package/assets/vectors/dsg.organization.release_1/reject/activation-requires-authority.json +8 -0
  38. package/assets/vectors/dsg.organization.release_1/reject/admission-requires-decision-authority.json +8 -0
  39. package/assets/vectors/dsg.organization.release_1/reject/available-catalog-cannot-carry-unavailable-reason.json +8 -0
  40. package/assets/vectors/dsg.organization.release_1/reject/build-cannot-contain-attestation.json +8 -0
  41. package/assets/vectors/dsg.organization.release_1/reject/build-cannot-contain-authority.json +8 -0
  42. package/assets/vectors/dsg.organization.release_1/reject/build-cannot-self-reference.json +8 -0
  43. package/assets/vectors/dsg.organization.release_1/reject/build-lock-extra-entry.json +9 -0
  44. package/assets/vectors/dsg.organization.release_1/reject/build-lock-mismatched-entry.json +9 -0
  45. package/assets/vectors/dsg.organization.release_1/reject/build-lock-omitted-entry.json +9 -0
  46. package/assets/vectors/dsg.organization.release_1/reject/build-lock-reordered-entries.json +9 -0
  47. package/assets/vectors/dsg.organization.release_1/reject/catalog-rejects-mismatched-active-set.json +9 -0
  48. package/assets/vectors/dsg.organization.release_1/reject/duplicate-release-member-id.json +9 -0
  49. package/assets/vectors/dsg.organization.release_1/reject/lock-cannot-contain-unreachable-entry.json +9 -0
  50. package/assets/vectors/dsg.organization.release_1/reject/lock-cannot-have-dependency-cycle.json +9 -0
  51. package/assets/vectors/dsg.organization.release_1/reject/lock-cannot-omit-transitive-member.json +9 -0
  52. package/assets/vectors/dsg.organization.release_1/reject/lock-requires-deterministic-entry-order.json +9 -0
  53. package/assets/vectors/dsg.organization.release_1/reject/negative-member-needs-reason.json +8 -0
  54. package/assets/vectors/dsg.organization.release_1/reject/pending-import-cannot-carry-terminal-disposition.json +8 -0
  55. package/assets/vectors/dsg.organization.release_1/reject/ready-member-needs-evidence.json +8 -0
  56. package/assets/vectors/dsg.organization.release_1/reject/refused-admission-cannot-approve-use.json +8 -0
  57. package/assets/vectors/dsg.organization.release_1/reject/release-requires-exact-member-subject.json +8 -0
  58. package/assets/vectors/dsg.organization.release_1/reject/release-status-is-separate-observation.json +8 -0
  59. package/assets/vectors/dsg.organization.release_1/reject/retired-release-needs-current-active-set.json +9 -0
  60. package/assets/vectors/dsg.organization.release_1/reject/retired-release-refuses-new-activate.json +9 -0
  61. package/assets/vectors/dsg.organization.release_1/reject/retired-release-refuses-new-admit.json +9 -0
  62. package/assets/vectors/dsg.organization.release_1/reject/retired-release-refuses-new-import.json +9 -0
  63. package/assets/vectors/dsg.organization.release_1/reject/retired-release-refuses-new-resolve.json +9 -0
  64. package/assets/vectors/dsg.organization.release_1/reject/retired-release-refuses-new-select.json +9 -0
  65. package/assets/vectors/dsg.organization.release_1/reject/revoked-release-refuses-existing-execution.json +9 -0
  66. package/assets/vectors/dsg.organization.release_1/reject/stale-trust-view-cannot-restore-release.json +9 -0
  67. package/assets/vectors/dsg.organization.release_1/reject/verified-import-cannot-be-missing.json +8 -0
  68. package/assets/vectors/dsg.organization.source_3/accept/source-capabilitySelection.json +8 -0
  69. package/assets/vectors/dsg.organization.source_3/accept/source-dependencyLock.json +8 -0
  70. package/assets/vectors/dsg.organization.source_3/accept/source-organization.json +8 -0
  71. package/assets/vectors/dsg.organization.source_3/accept/source-profile.json +8 -0
  72. package/assets/vectors/dsg.organization.source_3/accept/source-project.json +8 -0
  73. package/assets/vectors/dsg.organization.source_3/accept/source-releaseDeclaration.json +8 -0
  74. package/assets/vectors/dsg.organization.source_3/accept/source-releaseMember.json +8 -0
  75. package/assets/vectors/dsg.organization.source_3/digest/canonical-envelope.json +8 -0
  76. package/assets/vectors/dsg.organization.source_3/reject/overlay-path-cannot-escape.json +8 -0
  77. package/assets/vectors/dsg.organization.source_3/reject/source-cannot-grant-authority.json +8 -0
  78. package/assets/vectors/dsg.organization.source_3/reject/source-members-use-paths.json +8 -0
  79. package/assets/vectors/dsg.run.execution-binding_1/accept/authorization-allows-unexpired-idempotent-replay.json +9 -0
  80. package/assets/vectors/dsg.run.execution-binding_1/accept/authorization-binds-consumed-lease.json +9 -0
  81. package/assets/vectors/dsg.run.execution-binding_1/accept/binding-separates-metadata-and-executable.json +8 -0
  82. package/assets/vectors/dsg.run.execution-binding_1/accept/provider-uses-platform-manifest.json +9 -0
  83. package/assets/vectors/dsg.run.execution-binding_1/digest/canonical-envelope.json +8 -0
  84. package/assets/vectors/dsg.run.execution-binding_1/reject/archive-digest-cannot-replace-executable-manifest.json +9 -0
  85. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-expired-checked-time.json +9 -0
  86. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-jointly-altered-generation.json +9 -0
  87. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-accepted-generation.json +9 -0
  88. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-case.json +9 -0
  89. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-envelope.json +9 -0
  90. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-generation.json +9 -0
  91. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-law.json +9 -0
  92. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-operation.json +9 -0
  93. package/assets/vectors/dsg.run.execution-binding_1/reject/authorization-rejects-wrong-reservation.json +9 -0
  94. package/assets/vectors/dsg.run.execution-binding_1/reject/binding-requires-provider-manifest-digest.json +8 -0
  95. package/assets/vectors/dsg.run.execution-binding_1/reject/config-digest-cannot-replace-executable-manifest.json +9 -0
  96. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-cross-workflow-catalog.json +9 -0
  97. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-gpu-seconds-over-class.json +9 -0
  98. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-installation-mismatch.json +9 -0
  99. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-missing-execute-approval.json +9 -0
  100. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-non-execute-eligibility.json +9 -0
  101. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-parallelism-over-class.json +9 -0
  102. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-refused-admission.json +9 -0
  103. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-release-mismatch.json +9 -0
  104. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-revoked-eligibility.json +9 -0
  105. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-run-seconds-over-class.json +9 -0
  106. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-stale-trust-view.json +9 -0
  107. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-wrong-active-set.json +9 -0
  108. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-wrong-admission.json +9 -0
  109. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-wrong-execute-binding.json +9 -0
  110. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-wrong-inline-digest.json +9 -0
  111. package/assets/vectors/dsg.run.execution-binding_1/reject/envelope-rejects-wrong-selection.json +9 -0
  112. package/assets/vectors/dsg.run.execution-binding_1/reject/index-digest-cannot-replace-executable-manifest.json +9 -0
  113. package/assets/vectors/dsg.run.execution-binding_1/reject/job-class-cannot-substitute-artifact.json +9 -0
  114. package/assets/vectors/dsg.run.execution-binding_1/reject/metadata-bytes-must-match-reference.json +9 -0
  115. package/assets/vectors/dsg.run.execution-binding_1/reject/metadata-digest-cannot-replace-executable-manifest.json +9 -0
  116. package/assets/vectors/dsg.run.execution-binding_1/reject/operation-binding-rejects-wrong-operation.json +9 -0
  117. package/assets/vectors/dsg.run.execution-binding_1/reject/operation-binding-rejects-wrong-target.json +9 -0
  118. package/assets/vectors/dsg.run.job-class_1/accept/class-pins-one-way-artifact-binding.json +8 -0
  119. package/assets/vectors/dsg.run.job-class_1/digest/canonical-envelope.json +8 -0
  120. package/assets/vectors/dsg.run.job-class_1/reject/class-requires-exact-artifact.json +8 -0
  121. package/assets/vectors/dsg.run.workload-artifact_1/accept/archive-hash-is-detached-provenance.json +8 -0
  122. package/assets/vectors/dsg.run.workload-artifact_1/accept/oci-metadata-types-digest-roles.json +8 -0
  123. package/assets/vectors/dsg.run.workload-artifact_1/accept/single-platform-image-without-index.json +8 -0
  124. package/assets/vectors/dsg.run.workload-artifact_1/digest/canonical-envelope.json +8 -0
  125. package/assets/vectors/dsg.run.workload-artifact_1/reject/archive-hash-is-not-semantic-executable-field.json +8 -0
  126. package/assets/vectors/dsg.run.workload-artifact_1/reject/artifact-cannot-refer-back-to-class.json +8 -0
  127. package/assets/vectors/dsg.run.workload-artifact_1/reject/digest-bearing-repository.json +8 -0
  128. package/assets/vectors/dsg.run.workload-artifact_1/reject/index-media-type-cannot-be-executable-manifest.json +8 -0
  129. package/assets/vectors/dsg.run.workload-artifact_1/reject/malformed-repository.json +8 -0
  130. package/assets/vectors/dsg.run.workload-artifact_1/reject/missing-repository.json +8 -0
  131. package/assets/vectors/dsg.run.workload-artifact_1/reject/scheme-bearing-repository.json +8 -0
  132. package/assets/vectors/dsg.run.workload-artifact_1/reject/tag-bearing-repository.json +8 -0
  133. package/checklist.json +7 -1
  134. package/dist/cli.cjs +1 -1
  135. package/dist/cli.mjs +1 -1
  136. package/dist/index.cjs +1 -1
  137. package/dist/index.d.cts.map +1 -1
  138. package/dist/index.d.mts.map +1 -1
  139. package/dist/index.mjs +1 -1
  140. package/dist/{reference-adapter-DDCyFCeV.mjs → reference-adapter-BJ-RkYd3.mjs} +253 -3
  141. package/dist/reference-adapter-BJ-RkYd3.mjs.map +1 -0
  142. package/dist/{reference-adapter-B9dycZns.cjs → reference-adapter-C6kR4r8N.cjs} +250 -0
  143. package/package.json +2 -2
  144. package/src/reference-adapter.ts +2 -0
  145. package/src/release-semantics.ts +488 -0
  146. package/dist/reference-adapter-DDCyFCeV.mjs.map +0 -1
@@ -0,0 +1,8 @@
1
+ {
2
+ "profile": "dsg.run.workload-artifact/1",
3
+ "shape": "workloadArtifact",
4
+ "name": "tag-bearing-repository",
5
+ "verdict": "reject",
6
+ "rule": "tag-bearing-repository",
7
+ "bytes": "eyJwcm9maWxlIjoiZHNnLnJ1bi53b3JrbG9hZC1hcnRpZmFjdC8xIiwic2NoZW1hVmVyc2lvbiI6MSwia2luZCI6Indvcmtsb2FkLWFydGlmYWN0IiwiaWQiOiJwcm9iZSIsImZvcm1hdCI6Im9jaS1pbWFnZSIsInNvdXJjZSI6eyJyZXBvc2l0b3J5IjoiaHR0cHM6Ly9leGFtcGxlLmludmFsaWQvd29ya2xvYWRzLmdpdCIsInJldmlzaW9uIjoiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSIsInNvdXJjZURpZ2VzdCI6ImY3NTAwMDFlYjY0NDc0YTJlYWI3YmU1ZmY0M2YwNWVkZDA2MzUwNGE4YzQyN2Q4YmU2ZjEzNzM0NzM2YWRjM2UifSwiaW5kZXgiOnsic2hhMjU2IjoiNWM0YjZkY2UyOTg2MjgxMDQ1ZmVlZGNkMWM0N2M4MWVmY2M3NGUzYTM4MjVhY2E2ZjI0Yjk4NWI3YTlhYjljMSIsIm1lZGlhVHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vY2kuaW1hZ2UuaW5kZXgudjEranNvbiJ9LCJleGVjdXRhYmxlIjp7InBsYXRmb3JtIjp7Im9zIjoibGludXgiLCJhcmNoaXRlY3R1cmUiOiJhbWQ2NCJ9LCJtYW5pZmVzdCI6eyJzaGEyNTYiOiI2M2E2M2IwYzkzOTdkYmI4NTUxMGFiODIxN2Q4NTkzNzNmZjE1Mjk4N2E1MzVkYTAzODY1MzA3YzczODM2NGE5IiwibWVkaWFUeXBlIjoiYXBwbGljYXRpb24vdm5kLm9jaS5pbWFnZS5tYW5pZmVzdC52MStqc29uIn0sImNvbmZpZyI6eyJzaGEyNTYiOiI0N2FiN2ZlZGNjNWM3MzJhZmY0NTljYTBlM2ZlZDNlOGFmMDViZDUxNzY4NzgwOWQ0OGM2ZDE1OWE0NjU2YWNmIiwibWVkaWFUeXBlIjoiYXBwbGljYXRpb24vdm5kLm9jaS5pbWFnZS5jb25maWcudjEranNvbiJ9LCJyZXBvc2l0b3J5IjoidXMtY2VudHJhbDEtZG9ja2VyLnBrZy5kZXYvZHNnLXJ1bi93b3JrbG9hZHMvZ3B1LXByb2JlOmxhdGVzdCJ9LCJlbnRyeXBvaW50IjpbInB5dGhvbiIsIi1jIiwicHJpbnQoJ29rJykiXX0="
8
+ }
package/checklist.json CHANGED
@@ -18,6 +18,12 @@
18
18
  "dsg.core.refusal/2": 11,
19
19
  "dsg.core.refusal/3": 15,
20
20
  "dsg.core.google-identity/1": 5,
21
- "dsg.organization.source/2": 2
21
+ "dsg.organization.source/2": 2,
22
+ "dsg.organization.source/3": 11,
23
+ "dsg.extension.release/1": 13,
24
+ "dsg.organization.release/1": 54,
25
+ "dsg.run.job-class/1": 3,
26
+ "dsg.run.workload-artifact/1": 12,
27
+ "dsg.run.execution-binding/1": 39
22
28
  }
23
29
  }
package/dist/cli.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_reference_adapter = require("./reference-adapter-B9dycZns.cjs");
1
+ const require_reference_adapter = require("./reference-adapter-C6kR4r8N.cjs");
2
2
  let node_fs = require("node:fs");
3
3
  let node_path = require("node:path");
4
4
  let node_url = require("node:url");
package/dist/cli.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { n as runVectors, t as referenceAdapter } from "./reference-adapter-DDCyFCeV.mjs";
1
+ import { n as runVectors, t as referenceAdapter } from "./reference-adapter-BJ-RkYd3.mjs";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_reference_adapter = require("./reference-adapter-B9dycZns.cjs");
2
+ const require_reference_adapter = require("./reference-adapter-C6kR4r8N.cjs");
3
3
  exports.referenceAdapter = require_reference_adapter.referenceAdapter;
4
4
  exports.runVectors = require_reference_adapter.runVectors;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/adapter.ts","../src/runner.ts","../src/reference-adapter.ts"],"mappings":";KAIY;WACG;WAAmB;;WACnB;WAAoB;;KAEvB,UAAU,SAAS,gBAAgB,OAAO,eAAe;;;;KAKzD;WACD;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;WAMA;;;;KC1BC;WACD;WACA;WACA;WACA;;KAGC;WACD;WACA;WACA,mBAAmB;;KAGzB;WAAuB,UAAU,SAAS;;;;;iBAK/B,WAAW,SAAS,SAAS,mBAAmB,WAAW,YAAY;;;iBCXvE,oBAAoB"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/adapter.ts","../src/runner.ts","../src/reference-adapter.ts"],"mappings":";KAIY;WACG;WAAmB;;WACnB;WAAoB;;KAEvB,UAAU,SAAS,gBAAgB,OAAO,eAAe;;;;KAKzD;WACD;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;WAMA;;;;KC1BC;WACD;WACA;WACA;WACA;;KAGC;WACD;WACA;WACA,mBAAmB;;KAGzB;WAAuB,UAAU,SAAS;;;;;iBAK/B,WAAW,SAAS,SAAS,mBAAmB,WAAW,YAAY;;;iBCVvE,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/adapter.ts","../src/runner.ts","../src/reference-adapter.ts"],"mappings":";KAIY;WACG;WAAmB;;WACnB;WAAoB;;KAEvB,UAAU,SAAS,gBAAgB,OAAO,eAAe;;;;KAKzD;WACD;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;WAMA;;;;KC1BC;WACD;WACA;WACA;WACA;;KAGC;WACD;WACA;WACA,mBAAmB;;KAGzB;WAAuB,UAAU,SAAS;;;;;iBAK/B,WAAW,SAAS,SAAS,mBAAmB,WAAW,YAAY;;;iBCXvE,oBAAoB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/adapter.ts","../src/runner.ts","../src/reference-adapter.ts"],"mappings":";KAIY;WACG;WAAmB;;WACnB;WAAoB;;KAEvB,UAAU,SAAS,gBAAgB,OAAO,eAAe;;;;KAKzD;WACD;WACA;WACA;WACA;WACA;WACA;;;;;WAKA;;;;;;WAMA;;;;KC1BC;WACD;WACA;WACA;WACA;;KAGC;WACD;WACA;WACA,mBAAmB;;KAGzB;WAAuB,UAAU,SAAS;;;;;iBAK/B,WAAW,SAAS,SAAS,mBAAmB,WAAW,YAAY;;;iBCVvE,oBAAoB"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { n as runVectors, t as referenceAdapter } from "./reference-adapter-DDCyFCeV.mjs";
1
+ import { n as runVectors, t as referenceAdapter } from "./reference-adapter-BJ-RkYd3.mjs";
2
2
  export { referenceAdapter, runVectors };
@@ -1,8 +1,8 @@
1
1
  import { readFileSync, readdirSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- import { createHash } from "node:crypto";
3
+ import { createHash, createPublicKey, verify } from "node:crypto";
4
4
  import { jcsStringify } from "@dynamicalsystems/orn-schemas";
5
- import { EVENT_LINE_PREFIX, EVENT_PROFILE, EventSchema, PROFILES } from "@dynamicalsystems/idl";
5
+ import { AcceptedSchema, ActiveSetSchema, AdmissionRecordSchema, CatalogSchema, DependencyLockSchema, DispatchLeaseSchema, EVENT_LINE_PREFIX, EVENT_PROFILE, EventSchema, ExecutionRequestEnvelopeSchema, ExtensionReleaseSchema, ExtensionReleaseSignatureSchema, OrganizationBuildSchema, OrganizationReleaseSchema, PROFILES, Reference, ReleaseEligibilitySchema, UtcSecond, closed } from "@dynamicalsystems/idl";
6
6
  //#region src/runner.ts
7
7
  /** Runs every vector under `assetsDir` through the adapter. The checklist
8
8
  * is the coverage floor: a profile listed there with fewer vectors on disk
@@ -1430,6 +1430,255 @@ function streamDigest(bytes) {
1430
1430
  }
1431
1431
  }
1432
1432
  //#endregion
1433
+ //#region src/release-semantics.ts
1434
+ function digest(value) {
1435
+ return createHash("sha256").update(jcsStringify(value)).digest("hex");
1436
+ }
1437
+ function same(a, b) {
1438
+ return a.orn === b.orn && a.sha256 === b.sha256;
1439
+ }
1440
+ function unique(values) {
1441
+ return new Set(values).size === values.length;
1442
+ }
1443
+ function ordered(values) {
1444
+ return values.every((value, index) => index === 0 || values[index - 1] < value);
1445
+ }
1446
+ function graphError(entries, roots) {
1447
+ if (!unique(entries.map((entry) => entry.id))) return "duplicate-member-id";
1448
+ const byId = new Map(entries.map((entry) => [entry.id, entry]));
1449
+ const visiting = /* @__PURE__ */ new Set();
1450
+ const visited = /* @__PURE__ */ new Set();
1451
+ function visit(id) {
1452
+ if (visiting.has(id)) return "dependency-cycle";
1453
+ if (visited.has(id)) return;
1454
+ const entry = byId.get(id);
1455
+ if (!entry) return "unresolved-dependency";
1456
+ visiting.add(id);
1457
+ for (const dependency of entry.dependsOn) {
1458
+ const error = visit(dependency);
1459
+ if (error) return error;
1460
+ }
1461
+ visiting.delete(id);
1462
+ visited.add(id);
1463
+ }
1464
+ for (const root of roots) {
1465
+ const error = visit(root);
1466
+ if (error) return error;
1467
+ }
1468
+ return visited.size === entries.length ? void 0 : "extraneous-lock-entry";
1469
+ }
1470
+ function parse(schema, refine) {
1471
+ return (bytes) => {
1472
+ let value;
1473
+ try {
1474
+ value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
1475
+ } catch (error) {
1476
+ return {
1477
+ ok: false,
1478
+ reason: `not UTF-8 JSON: ${String(error)}`
1479
+ };
1480
+ }
1481
+ if (!Check(schema, value)) {
1482
+ const error = Errors(schema, value).First();
1483
+ return {
1484
+ ok: false,
1485
+ reason: `${error?.path ?? ""}: ${error?.message ?? "schema mismatch"}`
1486
+ };
1487
+ }
1488
+ const error = refine(value);
1489
+ return error ? {
1490
+ ok: false,
1491
+ reason: error
1492
+ } : { ok: true };
1493
+ };
1494
+ }
1495
+ const ExecutionIdentityContext = ExecutionRequestEnvelopeSchema;
1496
+ const ExecutionAuthorizationContext = closed({
1497
+ request: ExecutionRequestEnvelopeSchema,
1498
+ lease: DispatchLeaseSchema,
1499
+ accepted: AcceptedSchema,
1500
+ checkedAt: UtcSecond
1501
+ });
1502
+ const ReleaseSignatureContext = closed({
1503
+ release: ExtensionReleaseSchema,
1504
+ signature: ExtensionReleaseSignatureSchema
1505
+ });
1506
+ const OrganizationBuildContext = closed({
1507
+ build: OrganizationBuildSchema,
1508
+ dependencyLock: DependencyLockSchema
1509
+ });
1510
+ const ReleaseEligibilityContext = closed({
1511
+ eligibility: ReleaseEligibilitySchema,
1512
+ currentActiveSet: Reference,
1513
+ activeSet: ActiveSetSchema
1514
+ });
1515
+ function releaseSemanticAdapters() {
1516
+ return {
1517
+ "dsg.organization.release/1#dependencyLock": parse(DependencyLockSchema, (lock) => {
1518
+ if (!ordered(lock.roots) || !ordered(lock.entries.map((entry) => entry.id))) return "unsorted-lock";
1519
+ for (const entry of lock.entries) {
1520
+ if (!ordered(entry.dependsOn) || !ordered(entry.selectedMemberIds)) return "unsorted-lock";
1521
+ if (entry.kind === "extension-release" && !entry.reference.orn.startsWith("orn:dsg.core.extension.release:")) return "wrong-release-space";
1522
+ if (entry.kind === "workload-artifact" && !entry.reference.orn.startsWith("orn:dsg.core.extension.workload-artifact:")) return "wrong-artifact-space";
1523
+ }
1524
+ return graphError(lock.entries, lock.roots);
1525
+ }),
1526
+ "dsg.extension.release/1#semantic.signatureBinding": parse(ReleaseSignatureContext, ({ release, signature }) => {
1527
+ const bodySha256 = digest(release);
1528
+ if (signature.bodySha256 !== bodySha256 || signature.release.sha256 !== bodySha256) return "signature-body-digest-mismatch";
1529
+ if (signature.release.orn !== release.releaseOrn || signature.publisher !== release.publisher) return "signature-identity-mismatch";
1530
+ try {
1531
+ const publicKey = createPublicKey({
1532
+ key: Buffer.concat([Buffer.from("302a300506032b6570032100", "hex"), Buffer.from(signature.publicKey, "hex")]),
1533
+ format: "der",
1534
+ type: "spki"
1535
+ });
1536
+ if (!verify(null, Buffer.from(jcsStringify(release), "utf8"), publicKey, Buffer.from(signature.signature, "hex"))) return "invalid-release-signature";
1537
+ } catch {
1538
+ return "invalid-release-signature";
1539
+ }
1540
+ }),
1541
+ "dsg.extension.release/1#release": parse(ExtensionReleaseSchema, (release) => {
1542
+ if (release.releaseOrn !== `orn:dsg.core.extension.release:${release.namespace}/${release.name}@${release.version}`) return "release-name-mismatch";
1543
+ if (!unique(release.dependencies.map((dependency) => dependency.id))) return "duplicate-dependency-id";
1544
+ const error = graphError(release.components, release.components.map((component) => component.id));
1545
+ if (error) return error;
1546
+ const kinds = new Set(release.components.map((component) => component.kind));
1547
+ if (release.compute && (!kinds.has("job-class") || !kinds.has("workload-artifact"))) return "missing-compute-component";
1548
+ for (const component of release.components) if (component.kind === "workload-artifact" && !component.reference.orn.startsWith("orn:dsg.core.extension.workload-artifact:")) return "wrong-artifact-space";
1549
+ }),
1550
+ "dsg.organization.release/1#organizationBuild": parse(OrganizationBuildSchema, (build) => {
1551
+ const orderedBy = (values, key) => ordered(values.map(key));
1552
+ if (!orderedBy(build.sourceDocuments, (document) => document.path)) return "unsorted-source-closure";
1553
+ if (!orderedBy(build.projects, (project) => project.id) || !orderedBy(build.selections, (selection) => selection.id) || build.selections.some((selection) => !orderedBy(selection.members, (member) => member.id)) || !orderedBy(build.components, (component) => [
1554
+ component.extensionRelease.orn,
1555
+ component.extensionRelease.sha256,
1556
+ component.memberId
1557
+ ].join("\0")) || !orderedBy(build.typedReleases, (release) => release.id) || !orderedBy(build.instructions, (reference) => `${reference.orn}\0${reference.sha256}`) || !orderedBy(build.handling, (reference) => `${reference.orn}\0${reference.sha256}`) || !orderedBy(build.releaseDeclarations, (reference) => `${reference.orn}\0${reference.sha256}`) || !orderedBy(build.releaseMembers, (member) => member.id)) return "unsorted-build";
1558
+ if (!unique(build.projects.map((project) => project.id)) || !unique(build.selections.map((selection) => selection.id)) || !unique(build.releaseMembers.map((member) => member.id))) return "duplicate-member-id";
1559
+ const components = /* @__PURE__ */ new Map();
1560
+ for (const component of build.components) {
1561
+ const key = `${component.extensionRelease.orn}\0${component.extensionRelease.sha256}\0${component.memberId}`;
1562
+ if (components.has(key)) return "duplicate-component-id";
1563
+ components.set(key, component);
1564
+ }
1565
+ for (const selection of build.selections) {
1566
+ if (!unique(selection.members.map((member) => member.id))) return "duplicate-member-id";
1567
+ for (const member of selection.members) {
1568
+ const component = components.get(`${selection.extensionRelease.orn}\0${selection.extensionRelease.sha256}\0${member.id}`);
1569
+ if (!component || component.kind !== member.kind || !same(component.reference, member.reference)) return "selected-component-mismatch";
1570
+ }
1571
+ }
1572
+ }),
1573
+ "dsg.organization.release/1#semantic.organizationBuild": parse(OrganizationBuildContext, ({ build, dependencyLock }) => {
1574
+ if (build.dependencyLock.sha256 !== digest(dependencyLock)) return "dependency-lock-digest-mismatch";
1575
+ if (jcsStringify(build.typedReleases) !== jcsStringify(dependencyLock.entries)) return "typed-release-lock-mismatch";
1576
+ }),
1577
+ "dsg.organization.release/1#organizationRelease": parse(OrganizationReleaseSchema, (release) => unique(release.members.map((member) => member.id)) ? void 0 : "duplicate-member-id"),
1578
+ "dsg.organization.release/1#admissionRecord": parse(AdmissionRecordSchema, (admission) => {
1579
+ if (!unique(admission.components.map((component) => component.id))) return "duplicate-member-id";
1580
+ if (admission.status === "admitted" && !unique(admission.approvedUses.map((use) => use.use))) return "duplicate-approved-use";
1581
+ }),
1582
+ "dsg.organization.release/1#activeSet": parse(ActiveSetSchema, (activeSet) => {
1583
+ if (!unique(activeSet.members.map((member) => `${member.selectionId}\0${member.memberId}`))) return "duplicate-active-member";
1584
+ for (const member of activeSet.members) if (!unique(member.components.map((component) => component.id))) return "duplicate-member-id";
1585
+ }),
1586
+ "dsg.organization.release/1#catalog": parse(CatalogSchema, (catalog) => {
1587
+ if (!unique(catalog.entries.map((entry) => entry.id))) return "duplicate-catalog-entry";
1588
+ for (const entry of catalog.entries) {
1589
+ if (!same(entry.activeSet, catalog.activeSet)) return "catalog-active-set-mismatch";
1590
+ if (entry.jobClass === null !== (entry.workloadArtifact === null)) return "incomplete-compute-provenance";
1591
+ }
1592
+ }),
1593
+ "dsg.organization.release/1#releaseEligibility": parse(ReleaseEligibilitySchema, (eligibility) => {
1594
+ if (!same(eligibility.release, eligibility.observation.subject)) return "status-subject-mismatch";
1595
+ if (!same(eligibility.trustView, eligibility.observation.trustView)) return "stale-trust-view";
1596
+ if (eligibility.observation.status === "revoked") return "release-revoked";
1597
+ if (eligibility.observation.status === "retired" && (eligibility.operation !== "execute" || eligibility.activeSet === null)) return "release-retired";
1598
+ }),
1599
+ "dsg.organization.release/1#semantic.releaseEligibility": parse(ReleaseEligibilityContext, ({ eligibility, currentActiveSet, activeSet }) => {
1600
+ if (!same(eligibility.release, eligibility.observation.subject)) return "status-subject-mismatch";
1601
+ if (!same(eligibility.trustView, eligibility.observation.trustView)) return "stale-trust-view";
1602
+ if (eligibility.observation.status === "revoked") return "release-revoked";
1603
+ if (eligibility.observation.status !== "retired") return;
1604
+ if (eligibility.operation !== "execute" || eligibility.activeSet === null) return "release-retired";
1605
+ if (!same(eligibility.activeSet, currentActiveSet) || currentActiveSet.sha256 !== digest(activeSet)) return "inactive-set";
1606
+ if (!activeSet.members.some((member) => same(member.extensionRelease, eligibility.release))) return "release-not-active";
1607
+ }),
1608
+ "dsg.run.execution-binding/1#semantic.executionAuthorization": parse(ExecutionAuthorizationContext, ({ request, lease, accepted, checkedAt }) => {
1609
+ if (accepted.generation !== request.operation.expectedGeneration + 1) return "accepted-generation-mismatch";
1610
+ if (accepted.operationId !== request.operation.operationId) return "accepted-operation-mismatch";
1611
+ if (accepted.planDigest !== request.operation.planDigest) return "accepted-plan-mismatch";
1612
+ const { operation, binding } = request;
1613
+ if (!same(binding.reservation, operation.reservation)) return "binding-reservation-mismatch";
1614
+ if (lease.operationId !== operation.operationId) return "lease-operation-mismatch";
1615
+ if (lease.generation !== accepted.generation) return "lease-generation-mismatch";
1616
+ if (lease.caseOrn !== operation.case.orn) return "lease-case-mismatch";
1617
+ if (lease.envelopeSha256 !== digest(operation)) return "lease-envelope-mismatch";
1618
+ if (lease.lawSha256 !== operation.document.law.bundle.sha256) return "lease-law-mismatch";
1619
+ if (!same(lease.reservation, binding.reservation)) return "lease-reservation-mismatch";
1620
+ if (Date.parse(lease.expiresAt) <= Date.parse(lease.consumedAt)) return "invalid-dispatch-lease-window";
1621
+ if (Date.parse(checkedAt) >= Date.parse(lease.expiresAt)) return "expired-dispatch-lease";
1622
+ }),
1623
+ "dsg.run.execution-binding/1#semantic.executionIdentity": parse(ExecutionIdentityContext, ({ binding, operation, jobClass, workloadArtifact: artifact, workloadArtifactProvenance: provenance, admission, activeSet, releaseEligibility, selection, catalogEntry }) => {
1624
+ if (releaseEligibility.operation !== "execute") return "eligibility-operation-mismatch";
1625
+ if (releaseEligibility.observation.status === "revoked") return "release-revoked";
1626
+ if (!same(releaseEligibility.observation.subject, releaseEligibility.release)) return "eligibility-subject-mismatch";
1627
+ if (!same(releaseEligibility.observation.trustView, releaseEligibility.trustView)) return "eligibility-observation-trust-mismatch";
1628
+ if (releaseEligibility.observation.status === "retired" && (releaseEligibility.operation !== "execute" || releaseEligibility.activeSet === null || !same(releaseEligibility.activeSet, binding.activeSet))) return "release-retired";
1629
+ if (binding.selection.sha256 !== digest(selection)) return "selection-digest-mismatch";
1630
+ if (selection.id !== catalogEntry.selectionId || selection.id !== admission.selectionId) return "selection-id-mismatch";
1631
+ if (!same(selection.extensionRelease, binding.extensionRelease) || !same(catalogEntry.extensionRelease, binding.extensionRelease)) return "selection-release-mismatch";
1632
+ if (catalogEntry.availability !== "available") return "catalog-entry-unavailable";
1633
+ if (!same(catalogEntry.activeSet, binding.activeSet) || !same(catalogEntry.workflow, binding.workflow) || catalogEntry.jobClass === null || !same(catalogEntry.jobClass, binding.jobClass) || catalogEntry.workloadArtifact === null || !same(catalogEntry.workloadArtifact, binding.workloadArtifact)) return "catalog-binding-mismatch";
1634
+ if (!same(releaseEligibility.release, binding.extensionRelease)) return "eligibility-release-mismatch";
1635
+ if (!same(releaseEligibility.trustView, binding.trustView)) return "eligibility-trust-view-mismatch";
1636
+ if (releaseEligibility.activeSet === null || !same(releaseEligibility.activeSet, binding.activeSet)) return "eligibility-active-set-mismatch";
1637
+ if (admission.status !== "admitted") return "admission-refused";
1638
+ if (!admission.approvedUses.some((approved) => approved.use === "execute" && same(approved.binding, binding.jobClass))) return "execution-use-not-approved";
1639
+ if (operation.document.resources.maxRunSeconds > jobClass.bounds.maxRunSeconds) return "run-seconds-exceed-class";
1640
+ if (operation.document.resources.maxGpuSeconds > jobClass.bounds.maxGpuSeconds) return "gpu-seconds-exceed-class";
1641
+ if (operation.document.resources.maxParallelism > jobClass.bounds.maxParallelism) return "parallelism-exceeds-class";
1642
+ if (binding.admission.sha256 !== digest(admission)) return "admission-digest-mismatch";
1643
+ if (binding.activeSet.sha256 !== digest(activeSet)) return "active-set-digest-mismatch";
1644
+ if (binding.installation !== admission.installation || binding.installation !== activeSet.installation) return "installation-mismatch";
1645
+ if (!same(binding.organizationBuild, admission.build) || !same(binding.organizationBuild, activeSet.build)) return "organization-build-mismatch";
1646
+ if (!same(binding.organizationRelease, admission.release) || !same(binding.organizationRelease, activeSet.release)) return "organization-release-mismatch";
1647
+ if (!same(binding.extensionRelease, admission.extensionRelease)) return "admission-release-mismatch";
1648
+ const activeMember = activeSet.members.find((member) => same(member.admission, binding.admission) && same(member.extensionRelease, binding.extensionRelease));
1649
+ if (!activeMember) return "release-not-active";
1650
+ if (activeMember.selectionId !== selection.id || activeMember.memberId !== catalogEntry.memberId) return "active-member-identity-mismatch";
1651
+ const selectedComponents = selection.members.map((component) => component.reference);
1652
+ const activeComponents = activeMember.components.map((component) => component.reference);
1653
+ const admittedComponents = admission.components.map((component) => component.reference);
1654
+ for (const required of [
1655
+ binding.workflow,
1656
+ binding.jobClass,
1657
+ binding.workloadArtifact,
1658
+ binding.eventCatalog
1659
+ ]) {
1660
+ if (!selectedComponents.some((component) => same(component, required))) return "selected-component-mismatch";
1661
+ if (!activeComponents.some((component) => same(component, required))) return "active-component-mismatch";
1662
+ if (!admittedComponents.some((component) => same(component, required))) return "admitted-component-mismatch";
1663
+ }
1664
+ if (binding.operation.sha256 !== digest(operation)) return "operation-digest-mismatch";
1665
+ if (!same(binding.target, operation.document.placement)) return "operation-target-mismatch";
1666
+ if (!same(binding.jobClass, operation.document.classContract)) return "operation-job-class-mismatch";
1667
+ if (!same(binding.workloadArtifact, operation.document.workload)) return "operation-workload-mismatch";
1668
+ if (!same(binding.law, operation.document.law.bundle)) return "operation-law-mismatch";
1669
+ if (binding.workloadArtifact.sha256 !== digest(artifact)) return "artifact-metadata-digest-mismatch";
1670
+ if (binding.jobClass.sha256 !== digest(jobClass)) return "job-class-digest-mismatch";
1671
+ if (!same(jobClass.workloadArtifact, binding.workloadArtifact)) return "job-class-artifact-mismatch";
1672
+ if (!same(jobClass.eventCatalog, binding.eventCatalog)) return "event-catalog-mismatch";
1673
+ if (!same(provenance.artifact, binding.workloadArtifact)) return "provenance-subject-mismatch";
1674
+ if (jcsStringify(provenance.source) !== jcsStringify(artifact.source)) return "source-provenance-mismatch";
1675
+ if (binding.executableManifestSha256 !== artifact.executable.manifest.sha256) return "wrong-executable-digest-role";
1676
+ if (artifact.executable.platform.os !== "linux" || artifact.executable.platform.architecture !== "amd64") return "unsupported-executable-platform";
1677
+ if (!jobClass.platforms.includes(`${artifact.executable.platform.os}/${artifact.executable.platform.architecture}`)) return "job-class-platform-mismatch";
1678
+ })
1679
+ };
1680
+ }
1681
+ //#endregion
1433
1682
  //#region src/reference-adapter.ts
1434
1683
  function referenceAdapter() {
1435
1684
  const adapter = {};
@@ -1468,9 +1717,10 @@ function referenceAdapter() {
1468
1717
  };
1469
1718
  }
1470
1719
  adapter[`${EVENT_PROFILE}#digest.streamSeal`] = streamDigest;
1720
+ Object.assign(adapter, releaseSemanticAdapters());
1471
1721
  return adapter;
1472
1722
  }
1473
1723
  //#endregion
1474
1724
  export { runVectors as n, referenceAdapter as t };
1475
1725
 
1476
- //# sourceMappingURL=reference-adapter-DDCyFCeV.mjs.map
1726
+ //# sourceMappingURL=reference-adapter-BJ-RkYd3.mjs.map