@astrale-os/kernel-dsl 1.0.0-beta.2 → 1.0.0-beta.20

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 (307) hide show
  1. package/dist/v1/addressing/class-key.js +3 -3
  2. package/dist/v1/addressing/definition-ref.js +21 -37
  3. package/dist/v1/addressing/domain-dependency.d.ts +0 -6
  4. package/dist/v1/addressing/domain-dependency.js +1 -6
  5. package/dist/v1/addressing/key.d.ts +4 -1
  6. package/dist/v1/addressing/key.js +23 -3
  7. package/dist/v1/addressing/ordering.d.ts +2 -0
  8. package/dist/v1/addressing/ordering.js +4 -0
  9. package/dist/v1/addressing/patterns.d.ts +1 -1
  10. package/dist/v1/addressing/patterns.js +2 -6
  11. package/dist/v1/builder/callable/authoring.d.ts +11 -5
  12. package/dist/v1/builder/callable/authoring.js +2 -0
  13. package/dist/v1/builder/class/authoring.d.ts +94 -224
  14. package/dist/v1/builder/class/authoring.js +31 -33
  15. package/dist/v1/builder/class/handle.d.ts +27 -0
  16. package/dist/v1/builder/class/handle.js +1 -0
  17. package/dist/v1/builder/class/input.d.ts +159 -0
  18. package/dist/v1/builder/class/projection.d.ts +129 -0
  19. package/dist/v1/builder/class/projection.js +1 -0
  20. package/dist/v1/builder/class/property.d.ts +3 -9
  21. package/dist/v1/builder/class/property.js +1 -0
  22. package/dist/v1/builder/core/authoring.d.ts +1 -1
  23. package/dist/v1/builder/index.d.ts +5 -2
  24. package/dist/v1/builder/lowering/callable.js +1 -0
  25. package/dist/v1/builder/lowering/class.d.ts +9 -1
  26. package/dist/v1/builder/lowering/class.js +62 -17
  27. package/dist/v1/builder/lowering/policy.js +2 -0
  28. package/dist/v1/builder/lowering/property-keys.d.ts +27 -0
  29. package/dist/v1/builder/lowering/property-keys.js +108 -0
  30. package/dist/v1/builder/lowering/schema/compile.js +11 -6
  31. package/dist/v1/builder/lowering/schema/context.d.ts +9 -1
  32. package/dist/v1/builder/lowering/schema/context.js +36 -4
  33. package/dist/v1/builder/lowering/schema/lifetime.d.ts +11 -0
  34. package/dist/v1/builder/lowering/schema/lifetime.js +55 -0
  35. package/dist/v1/builder/lowering/value/path.d.ts +1 -1
  36. package/dist/v1/builder/lowering/value/path.js +2 -4
  37. package/dist/v1/builder/lowering/value/zod.js +1 -3
  38. package/dist/v1/builder/policy/authoring.d.ts +85 -5
  39. package/dist/v1/builder/policy/authoring.js +107 -68
  40. package/dist/v1/builder/schema/define.d.ts +0 -1
  41. package/dist/v1/builder/schema/diagnostic.d.ts +3 -2
  42. package/dist/v1/builder/schema/diagnostic.js +5 -10
  43. package/dist/v1/builder/schema/input.d.ts +1 -1
  44. package/dist/v1/builder/schema/projection/callable.d.ts +7 -5
  45. package/dist/v1/builder/schema/projection/class.d.ts +118 -15
  46. package/dist/v1/builder/schema/projection/core-input.d.ts +2 -1
  47. package/dist/v1/builder/schema/projection/identity.d.ts +2 -1
  48. package/dist/v1/builder/schema/projection/model.d.ts +4 -2
  49. package/dist/v1/builder/schema/projection/property.d.ts +1 -1
  50. package/dist/v1/builder/schema/projection/resolved-class.d.ts +2 -1
  51. package/dist/v1/builder/schema/projection.d.ts +1 -1
  52. package/dist/v1/builder/value/full-match.d.ts +0 -1
  53. package/dist/v1/builder/value/full-match.js +0 -1
  54. package/dist/v1/builder/value/path-metadata.d.ts +1 -1
  55. package/dist/v1/builder/value/path.d.ts +1 -1
  56. package/dist/v1/bundle/codec.js +11 -13
  57. package/dist/v1/bundle/diagnostic.d.ts +2 -0
  58. package/dist/v1/bundle/diagnostic.js +9 -7
  59. package/dist/v1/bundle/model.js +1 -1
  60. package/dist/v1/bundle/structure.js +4 -6
  61. package/dist/v1/compiled/admission/accept.js +4 -10
  62. package/dist/v1/compiled/admission/closure.js +2 -2
  63. package/dist/v1/compiled/admission/diagnostic.d.ts +1 -1
  64. package/dist/v1/compiled/admission/diagnostic.js +1 -3
  65. package/dist/v1/compiled/admission/revision.d.ts +9 -1
  66. package/dist/v1/compiled/admission/revision.js +6 -3
  67. package/dist/v1/compiled/admission/semantics/class.d.ts +4 -1
  68. package/dist/v1/compiled/admission/semantics/class.js +37 -12
  69. package/dist/v1/compiled/admission/semantics/core.d.ts +1 -24
  70. package/dist/v1/compiled/admission/semantics/core.js +56 -24
  71. package/dist/v1/compiled/admission/semantics/edge.d.ts +2 -4
  72. package/dist/v1/compiled/admission/semantics/edge.js +6 -65
  73. package/dist/v1/compiled/admission/semantics/policy/callable.js +0 -2
  74. package/dist/v1/compiled/admission/semantics/policy/contracts.d.ts +5 -20
  75. package/dist/v1/compiled/admission/semantics/policy/contracts.js +8 -21
  76. package/dist/v1/compiled/admission/semantics/policy/parity.js +40 -43
  77. package/dist/v1/compiled/admission/semantics/policy/pattern.d.ts +4 -1
  78. package/dist/v1/compiled/admission/semantics/policy/pattern.js +4 -16
  79. package/dist/v1/compiled/admission/semantics/policy/typing.d.ts +2 -24
  80. package/dist/v1/compiled/admission/semantics/policy/typing.js +19 -201
  81. package/dist/v1/compiled/admission/wire/callable.js +11 -1
  82. package/dist/v1/compiled/admission/wire/class.js +73 -21
  83. package/dist/v1/compiled/admission/wire/policy.d.ts +4 -3
  84. package/dist/v1/compiled/admission/wire/policy.js +8 -7
  85. package/dist/v1/compiled/compiler/compile.js +8 -8
  86. package/dist/v1/compiled/diagnostic.js +2 -3
  87. package/dist/v1/compiled/loader/load.d.ts +3 -2
  88. package/dist/v1/compiled/loader/load.js +11 -45
  89. package/dist/v1/domain/create.js +5 -6
  90. package/dist/v1/domain/model/domain.d.ts +2 -7
  91. package/dist/v1/domain/model/input.d.ts +2 -1
  92. package/dist/v1/domain/namespace/member-collection.js +4 -6
  93. package/dist/v1/domain/projection/classes.js +4 -1
  94. package/dist/v1/domain/validation/create.d.ts +6 -3
  95. package/dist/v1/domain/validation/create.js +21 -69
  96. package/dist/v1/index.d.ts +2 -1
  97. package/dist/v1/language/.spec/schemas/draft-2020-12.schema.json +462 -0
  98. package/dist/v1/language/.spec/schemas/value-schema.schema.json +22 -0
  99. package/dist/v1/language/callable/admission.d.ts +15 -0
  100. package/dist/v1/language/callable/admission.js +43 -0
  101. package/dist/v1/language/callable/model/callable.d.ts +10 -0
  102. package/dist/v1/language/callable/resolved.d.ts +16 -3
  103. package/dist/v1/language/class/inheritance.d.ts +36 -5
  104. package/dist/v1/language/class/inheritance.js +87 -1
  105. package/dist/v1/language/class/lifetime.d.ts +50 -11
  106. package/dist/v1/language/class/lifetime.js +89 -20
  107. package/dist/v1/language/class/model/class.d.ts +45 -9
  108. package/dist/v1/language/class/model/edge.d.ts +31 -2
  109. package/dist/v1/language/class/model/property.d.ts +16 -7
  110. package/dist/v1/language/class/property-values.js +2 -4
  111. package/dist/v1/language/class/unique.d.ts +143 -0
  112. package/dist/v1/language/class/unique.js +264 -0
  113. package/dist/v1/language/core/facts.d.ts +85 -0
  114. package/dist/v1/language/core/facts.js +116 -0
  115. package/dist/v1/language/definition/metadata.d.ts +5 -0
  116. package/dist/v1/language/definition/metadata.js +7 -0
  117. package/dist/v1/language/freeze.d.ts +5 -0
  118. package/dist/v1/{schema/canonical → language}/freeze.js +4 -0
  119. package/dist/v1/language/index.d.ts +7 -2
  120. package/dist/v1/language/index.js +5 -1
  121. package/dist/v1/language/limits.d.ts +64 -0
  122. package/dist/v1/language/limits.js +60 -0
  123. package/dist/v1/language/policy/analysis/branches.d.ts +8 -0
  124. package/dist/v1/language/policy/analysis/branches.js +2 -1
  125. package/dist/v1/language/policy/analysis/budgets.d.ts +45 -12
  126. package/dist/v1/language/policy/analysis/budgets.js +133 -19
  127. package/dist/v1/language/policy/analysis/checks.js +3 -2
  128. package/dist/v1/language/policy/analysis/typing.d.ts +51 -0
  129. package/dist/v1/language/policy/analysis/typing.js +455 -0
  130. package/dist/v1/language/policy/model/policy.d.ts +49 -9
  131. package/dist/v1/language/policy/model/policy.js +14 -0
  132. package/dist/v1/language/policy/normalization/normalize.d.ts +6 -6
  133. package/dist/v1/language/policy/normalization/normalize.js +22 -21
  134. package/dist/v1/language/validation/diagnostic.d.ts +15 -1
  135. package/dist/v1/language/validation/diagnostic.js +21 -0
  136. package/dist/v1/language/validation/rule.d.ts +45 -0
  137. package/dist/v1/language/validation/rule.js +109 -0
  138. package/dist/v1/language/value/compile/fields.js +4 -8
  139. package/dist/v1/language/value/evaluate/program.d.ts +2 -1
  140. package/dist/v1/language/value/evaluate/program.js +2 -2
  141. package/dist/v1/language/value/evaluate/validate.d.ts +2 -2
  142. package/dist/v1/language/value/evaluate/validate.js +6 -2
  143. package/dist/v1/language/value/evaluate/validity.optimization.d.ts +14 -0
  144. package/dist/v1/language/value/evaluate/validity.optimization.js +342 -0
  145. package/dist/v1/language/value/inclusion/arrays.d.ts +3 -0
  146. package/dist/v1/language/value/inclusion/arrays.js +85 -0
  147. package/dist/v1/language/value/inclusion/assertions.d.ts +18 -0
  148. package/dist/v1/language/value/inclusion/assertions.js +29 -0
  149. package/dist/v1/language/value/inclusion/combinators.d.ts +3 -0
  150. package/dist/v1/language/value/inclusion/combinators.js +67 -0
  151. package/dist/v1/language/value/inclusion/equivalence.d.ts +4 -0
  152. package/dist/v1/language/value/inclusion/equivalence.js +74 -0
  153. package/dist/v1/language/value/inclusion/evidence.d.ts +34 -0
  154. package/dist/v1/language/value/inclusion/evidence.js +138 -0
  155. package/dist/v1/language/value/inclusion/includes.d.ts +17 -0
  156. package/dist/v1/language/value/inclusion/includes.js +25 -719
  157. package/dist/v1/language/value/inclusion/keywords.d.ts +5 -0
  158. package/dist/v1/language/value/inclusion/keywords.js +31 -0
  159. package/dist/v1/language/value/inclusion/kinds.d.ts +17 -0
  160. package/dist/v1/language/value/inclusion/kinds.js +57 -0
  161. package/dist/v1/language/value/inclusion/location.d.ts +24 -0
  162. package/dist/v1/language/value/inclusion/location.js +63 -0
  163. package/dist/v1/language/value/inclusion/numbers.d.ts +3 -0
  164. package/dist/v1/language/value/inclusion/numbers.js +41 -0
  165. package/dist/v1/language/value/inclusion/objects.d.ts +3 -0
  166. package/dist/v1/language/value/inclusion/objects.js +190 -0
  167. package/dist/v1/language/value/inclusion/strings.d.ts +3 -0
  168. package/dist/v1/language/value/inclusion/strings.js +29 -0
  169. package/dist/v1/language/value/inclusion/types.d.ts +3 -0
  170. package/dist/v1/language/value/inclusion/types.js +11 -0
  171. package/dist/v1/language/value/ordering.d.ts +14 -0
  172. package/dist/v1/language/value/ordering.js +86 -9
  173. package/dist/v1/language/value/profile/canonicalize.js +6 -5
  174. package/dist/v1/language/value/profile/json.validate.d.ts +3 -1
  175. package/dist/v1/language/value/profile/json.validate.js +3 -2
  176. package/dist/v1/language/value/profile/meta-schema.compiled.js +4 -1
  177. package/dist/v1/language/value/profile/rules.js +17 -43
  178. package/dist/v1/language/value/profile/validate.js +1 -10
  179. package/dist/v1/language/value/profile/vocabulary.d.ts +35 -2
  180. package/dist/v1/language/value/profile/vocabulary.js +52 -5
  181. package/dist/v1/language/value/reference/closure.js +3 -4
  182. package/dist/v1/language/value/reference/recursion.js +2 -22
  183. package/dist/v1/language/value/reference/registry.index.d.ts +2 -0
  184. package/dist/v1/language/value/reference/registry.index.js +33 -16
  185. package/dist/v1/language/value/regexp/ast.js +6 -7
  186. package/dist/v1/language/value/regexp/compile.d.ts +5 -11
  187. package/dist/v1/language/value/regexp/compile.js +14 -12
  188. package/dist/v1/language/value/regexp/syntax.js +3 -2
  189. package/dist/v1/language/value/syntax/keywords.d.ts +3 -3
  190. package/dist/v1/language/value/syntax/keywords.js +4 -20
  191. package/dist/v1/language/value/syntax/node-path/validate.js +2 -3
  192. package/dist/v1/language/value/syntax/pointer.d.ts +2 -0
  193. package/dist/v1/language/value/syntax/pointer.js +5 -2
  194. package/dist/v1/language/value/syntax/walk.d.ts +2 -0
  195. package/dist/v1/language/value/syntax/walk.js +19 -20
  196. package/dist/v1/schema/.spec/schemas/domain-schema.schema.json +2519 -0
  197. package/dist/v1/schema/admission/accept.js +3 -14
  198. package/dist/v1/schema/admission/callable.d.ts +21 -0
  199. package/dist/v1/schema/admission/callable.js +96 -0
  200. package/dist/v1/schema/analysis/class.js +33 -15
  201. package/dist/v1/schema/canonical/revision.js +4 -4
  202. package/dist/v1/schema/compatibility/api.d.ts +2 -1
  203. package/dist/v1/schema/compatibility/api.js +1 -0
  204. package/dist/v1/schema/compatibility/comparators/callables.js +1 -1
  205. package/dist/v1/schema/compatibility/comparators/classes.d.ts +9 -4
  206. package/dist/v1/schema/compatibility/comparators/classes.js +29 -8
  207. package/dist/v1/schema/compatibility/comparators/index.d.ts +1 -1
  208. package/dist/v1/schema/compatibility/comparators/members.js +1 -1
  209. package/dist/v1/schema/compatibility/comparators/values.js +2 -2
  210. package/dist/v1/schema/compatibility/coordinate.js +3 -3
  211. package/dist/v1/schema/compatibility/diff.js +2 -4
  212. package/dist/v1/schema/compatibility/extension.d.ts +11 -0
  213. package/dist/v1/schema/compatibility/extension.js +22 -0
  214. package/dist/v1/schema/compatibility/fields.d.ts +20 -4
  215. package/dist/v1/schema/compatibility/fields.js +13 -3
  216. package/dist/v1/schema/compatibility/meaning/footprint.js +16 -50
  217. package/dist/v1/schema/compatibility/model.d.ts +17 -5
  218. package/dist/v1/schema/compatibility/report.js +1 -1
  219. package/dist/v1/schema/compatibility/scope.d.ts +2 -0
  220. package/dist/v1/schema/compatibility/scope.js +4 -1
  221. package/dist/v1/schema/compatibility/structure/index.js +6 -4
  222. package/dist/v1/schema/compatibility/structure/requirements.js +57 -58
  223. package/dist/v1/schema/compatibility/versioning/index.js +1 -1
  224. package/dist/v1/schema/compatibility/versioning/surface.d.ts +1 -1
  225. package/dist/v1/schema/compatibility/versioning/surface.js +30 -2
  226. package/dist/v1/schema/compatibility/walk.d.ts +17 -0
  227. package/dist/v1/schema/compatibility/walk.js +41 -0
  228. package/dist/v1/schema/diagnostic.d.ts +17 -3
  229. package/dist/v1/schema/diagnostic.js +14 -11
  230. package/dist/v1/schema/index.d.ts +10 -1
  231. package/dist/v1/schema/index.js +4 -0
  232. package/dist/v1/schema/model/schema.d.ts +20 -1
  233. package/dist/v1/schema/model/schema.js +1 -1
  234. package/dist/v1/schema/normalization/domain.d.ts +2 -0
  235. package/dist/v1/schema/normalization/domain.js +29 -9
  236. package/dist/v1/schema/resolution/closure.js +2 -1
  237. package/dist/v1/schema/resolution/context.js +13 -13
  238. package/dist/v1/schema/resolution/domain.d.ts +5 -0
  239. package/dist/v1/schema/resolution/domain.js +2 -2
  240. package/dist/v1/schema/resolution/origins.js +3 -2
  241. package/dist/v1/schema/rule.d.ts +26 -0
  242. package/dist/v1/schema/rule.js +440 -0
  243. package/dist/v1/schema/validation/callable.d.ts +35 -2
  244. package/dist/v1/schema/validation/callable.js +65 -9
  245. package/dist/v1/schema/validation/class.d.ts +6 -2
  246. package/dist/v1/schema/validation/class.js +127 -104
  247. package/dist/v1/schema/validation/core.js +90 -168
  248. package/dist/v1/schema/validation/domain.js +4 -13
  249. package/dist/v1/schema/validation/domain.json-schema.d.ts +15 -0
  250. package/dist/v1/schema/validation/domain.json-schema.js +197 -0
  251. package/dist/v1/schema/validation/domain.route.d.ts +6 -1
  252. package/dist/v1/schema/validation/domain.route.js +18 -0
  253. package/dist/v1/schema/validation/domain.structure.d.ts +7780 -0
  254. package/dist/v1/schema/validation/domain.structure.js +398 -147
  255. package/dist/v1/schema/validation/json.json-schema.d.ts +40 -0
  256. package/dist/v1/schema/validation/json.json-schema.js +46 -0
  257. package/dist/v1/schema/validation/policy/budgets.d.ts +33 -2
  258. package/dist/v1/schema/validation/policy/budgets.js +87 -121
  259. package/dist/v1/schema/validation/policy/context.d.ts +6 -5
  260. package/dist/v1/schema/validation/policy/context.js +7 -10
  261. package/dist/v1/schema/validation/policy/objects.d.ts +1 -1
  262. package/dist/v1/schema/validation/policy/objects.js +6 -14
  263. package/dist/v1/schema/validation/policy/references.js +11 -27
  264. package/dist/v1/schema/validation/policy/typing.d.ts +3 -18
  265. package/dist/v1/schema/validation/policy/typing.js +22 -356
  266. package/dist/v1/schema/validation/policy/uses.d.ts +40 -3
  267. package/dist/v1/schema/validation/policy/uses.js +66 -89
  268. package/dist/v1/schema/validation/policy/validate.js +5 -5
  269. package/dist/v1/schema/validation/value-api.d.ts +22 -0
  270. package/dist/v1/schema/validation/value-api.js +34 -1
  271. package/dist/v1/schema/validation/value.d.ts +3 -0
  272. package/dist/v1/schema/validation/value.js +9 -17
  273. package/dist/v1/schema/validation/value.json-schema.d.ts +49 -0
  274. package/dist/v1/schema/validation/value.json-schema.js +137 -0
  275. package/dist/v1/schema/validation/view.js +4 -8
  276. package/dist/value/canonical.d.ts +6 -0
  277. package/dist/value/canonical.js +36 -0
  278. package/dist/value/decode.d.ts +7 -0
  279. package/dist/value/decode.js +159 -9
  280. package/dist/value/index.d.ts +1 -1
  281. package/dist/value/json.d.ts +2 -2
  282. package/dist/value/json.js +2 -2
  283. package/dist/value/types.d.ts +6 -0
  284. package/dist/value/unicode.d.ts +2 -1
  285. package/dist/value/unicode.js +2 -0
  286. package/package.json +8 -1
  287. package/dist/v1/builder/lowering/core-properties.d.ts +0 -10
  288. package/dist/v1/builder/lowering/core-properties.js +0 -76
  289. package/dist/v1/compiled/admission/semantics/cardinality.d.ts +0 -5
  290. package/dist/v1/compiled/admission/semantics/cardinality.js +0 -113
  291. package/dist/v1/compiled/admission/semantics/policy/equality.d.ts +0 -8
  292. package/dist/v1/compiled/admission/semantics/policy/equality.js +0 -27
  293. package/dist/v1/compiled/admission/semantics/policy/measure.d.ts +0 -9
  294. package/dist/v1/compiled/admission/semantics/policy/measure.js +0 -81
  295. package/dist/v1/compiled/admission/semantics/policy/variants.d.ts +0 -10
  296. package/dist/v1/compiled/admission/semantics/policy/variants.js +0 -65
  297. package/dist/v1/language/class/index.d.ts +0 -8
  298. package/dist/v1/language/class/index.js +0 -1
  299. package/dist/v1/language/core/index.d.ts +0 -2
  300. package/dist/v1/language/value/index.d.ts +0 -11
  301. package/dist/v1/language/value/index.js +0 -8
  302. package/dist/v1/schema/canonical/domain.d.ts +0 -3
  303. package/dist/v1/schema/canonical/domain.digest.d.ts +0 -3
  304. package/dist/v1/schema/canonical/domain.digest.js +0 -5
  305. package/dist/v1/schema/canonical/domain.js +0 -5
  306. package/dist/v1/schema/canonical/freeze.d.ts +0 -1
  307. /package/dist/v1/{language/core/index.js → builder/class/input.js} +0 -0
@@ -0,0 +1,2519 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.astrale.ai/dsl/v1/domain-schema",
4
+ "title": "V1 DomainSchema",
5
+ "$comment": "Generated from the structure the Kernel enforces; value schemas are in the dialect https://schemas.astrale.ai/dsl/v1/value-schema. Each check JSON Schema cannot state is named under x-astrale-rules, with its stage and the positions it constrains.",
6
+ "x-astrale-rules": {
7
+ "length-in-utf16-code-units": {
8
+ "code": "STRUCTURE_MAXIMUM",
9
+ "stage": "structure",
10
+ "statement": "A maxLength counts UTF-16 code units, where JSON Schema counts code points: a string within the bound in code points and beyond it in code units is refused.",
11
+ "positions": [
12
+ "#/$defs/core-slug",
13
+ "#/$defs/description",
14
+ "#/$defs/domain-name",
15
+ "#/$defs/icon",
16
+ "#/$defs/origin"
17
+ ]
18
+ },
19
+ "portable-json": {
20
+ "code": "DV_JSON_VALUE",
21
+ "stage": "structure",
22
+ "statement": "The document is portable JSON: as text, UTF-8 that parses, within 16,777,216 bytes, with no byte-order mark and no repeated member name; as a value, null, booleans, finite numbers other than negative zero, strings, arrays and plain objects, with no string or member name that holds U+0000 or a lone surrogate or exceeds 1,048,576 bytes of UTF-8, at most 64 nested arrays and objects, and at most 100,000 members and items in all.",
23
+ "positions": [
24
+ "#/$defs/portable-json"
25
+ ]
26
+ },
27
+ "unique-tuple-set": {
28
+ "code": "STRUCTURE_DUPLICATE_ITEM",
29
+ "stage": "structure",
30
+ "statement": "A unique tuple is a set of fields: two tuples naming the same fields in another order are one tuple, repeated.",
31
+ "positions": [
32
+ "#/$defs/edge-class/properties/unique",
33
+ "#/$defs/node-class/properties/unique"
34
+ ]
35
+ },
36
+ "value-blob": {
37
+ "code": "DV_VALUE_SCHEMA",
38
+ "valueCode": "VS_VALUE_KIND",
39
+ "stage": "rule",
40
+ "statement": "A blob is declared only by the whole schema of a Property, exactly as values.blob writes it.",
41
+ "positions": [
42
+ "#/$defs/value-schema/allOf/2/anyOf/1/properties/x-astrale-value-kind"
43
+ ]
44
+ },
45
+ "value-path": {
46
+ "code": "DV_VALUE_SCHEMA",
47
+ "valueCode": "VS_PATH_EXTENSION",
48
+ "stage": "rule",
49
+ "statement": "x-astrale-path annotates only a direct Property of a callable input object, beside exactly the $ref of the graph NodePath schema.",
50
+ "positions": [
51
+ "#/$defs/value-location/anyOf/1/properties/x-astrale-path"
52
+ ]
53
+ },
54
+ "value-recursion": {
55
+ "code": "DV_VALUE_SCHEMA",
56
+ "valueCode": "VS_RECURSION_PRODUCTIVE",
57
+ "stage": "rule",
58
+ "statement": "Every reference cycle of a value schema crosses a keyword that steps into the value: to a member, a member name or an item.",
59
+ "positions": [
60
+ "#/$defs/value-location/anyOf/1/properties/$ref"
61
+ ]
62
+ },
63
+ "value-reference-form": {
64
+ "code": "DV_VALUE_SCHEMA",
65
+ "valueCode": "VS_REFERENCE_FORM",
66
+ "stage": "rule",
67
+ "statement": "A $ref is a JSON Pointer fragment into its own value schema, or the id of the graph NodePath schema beside x-astrale-path.",
68
+ "positions": [
69
+ "#/$defs/value-location/anyOf/1/properties/$ref"
70
+ ]
71
+ },
72
+ "value-reference-resolution": {
73
+ "code": "DV_VALUE_SCHEMA",
74
+ "valueCode": "VS_REFERENCE_RESOLUTION",
75
+ "stage": "context",
76
+ "statement": "A $ref resolves to a location of its own value schema, and x-astrale-path accepts Node Classes of the Domain or of a direct dependency.",
77
+ "positions": [
78
+ "#/$defs/path-annotation/properties/accepts/items",
79
+ "#/$defs/value-location/anyOf/1/properties/$ref"
80
+ ]
81
+ },
82
+ "value-regexp": {
83
+ "code": "DV_VALUE_SCHEMA",
84
+ "valueCode": "VS_REGEX_PORTABLE",
85
+ "stage": "rule",
86
+ "statement": "Every pattern, fullMatch and patternProperties name is an RFC 9485 I-Regexp within the regular-expression limits.",
87
+ "positions": [
88
+ "#/$defs/value-location/anyOf/1/properties/fullMatch",
89
+ "#/$defs/value-location/anyOf/1/properties/pattern",
90
+ "#/$defs/value-location/anyOf/1/properties/patternProperties"
91
+ ]
92
+ }
93
+ },
94
+ "type": "object",
95
+ "properties": {
96
+ "format": {
97
+ "type": "string",
98
+ "const": "astrale.dsl"
99
+ },
100
+ "version": {
101
+ "type": "string",
102
+ "const": "v1"
103
+ },
104
+ "origin": {
105
+ "$ref": "#/$defs/origin"
106
+ },
107
+ "name": {
108
+ "$ref": "#/$defs/domain-name"
109
+ },
110
+ "entrypoint": {
111
+ "$ref": "#/$defs/view-ref"
112
+ },
113
+ "dependencies": {
114
+ "type": "object",
115
+ "propertyNames": {
116
+ "$ref": "#/$defs/dependency-alias"
117
+ },
118
+ "additionalProperties": {
119
+ "$ref": "#/$defs/dependency"
120
+ }
121
+ },
122
+ "classes": {
123
+ "type": "object",
124
+ "propertyNames": {
125
+ "$ref": "#/$defs/name"
126
+ },
127
+ "additionalProperties": {
128
+ "$ref": "#/$defs/class-definition"
129
+ }
130
+ },
131
+ "functions": {
132
+ "type": "object",
133
+ "propertyNames": {
134
+ "$ref": "#/$defs/name"
135
+ },
136
+ "additionalProperties": {
137
+ "$ref": "#/$defs/function-definition"
138
+ }
139
+ },
140
+ "policies": {
141
+ "type": "object",
142
+ "propertyNames": {
143
+ "$ref": "#/$defs/name"
144
+ },
145
+ "additionalProperties": {
146
+ "$ref": "#/$defs/policy-definition"
147
+ }
148
+ },
149
+ "views": {
150
+ "type": "object",
151
+ "propertyNames": {
152
+ "$ref": "#/$defs/name"
153
+ },
154
+ "additionalProperties": {
155
+ "$ref": "#/$defs/view-definition"
156
+ }
157
+ },
158
+ "core": {
159
+ "$ref": "#/$defs/core"
160
+ }
161
+ },
162
+ "required": [
163
+ "format",
164
+ "version",
165
+ "origin",
166
+ "name",
167
+ "dependencies",
168
+ "classes",
169
+ "functions",
170
+ "policies",
171
+ "views",
172
+ "core"
173
+ ],
174
+ "additionalProperties": false,
175
+ "allOf": [
176
+ {
177
+ "$ref": "#/$defs/portable-json"
178
+ }
179
+ ],
180
+ "$defs": {
181
+ "auto": {
182
+ "type": "object",
183
+ "properties": {
184
+ "on": {
185
+ "minItems": 1,
186
+ "type": "array",
187
+ "items": {
188
+ "type": "string",
189
+ "enum": [
190
+ "create",
191
+ "update"
192
+ ]
193
+ },
194
+ "uniqueItems": true
195
+ },
196
+ "set": {
197
+ "type": "string",
198
+ "const": "instant"
199
+ }
200
+ },
201
+ "required": [
202
+ "on",
203
+ "set"
204
+ ],
205
+ "additionalProperties": false
206
+ },
207
+ "binary-input": {
208
+ "type": "object",
209
+ "properties": {
210
+ "mode": {
211
+ "type": "string",
212
+ "const": "binary"
213
+ },
214
+ "metadata": {
215
+ "$ref": "#/$defs/value-schema"
216
+ },
217
+ "maximumBytes": {
218
+ "type": "integer",
219
+ "minimum": 1,
220
+ "maximum": 9007199254740991
221
+ }
222
+ },
223
+ "required": [
224
+ "mode",
225
+ "metadata",
226
+ "maximumBytes"
227
+ ],
228
+ "additionalProperties": false
229
+ },
230
+ "callable-admission": {
231
+ "type": "object",
232
+ "properties": {
233
+ "maxAge": {
234
+ "type": "number"
235
+ }
236
+ },
237
+ "required": [
238
+ "maxAge"
239
+ ],
240
+ "additionalProperties": false
241
+ },
242
+ "callable-execution": {
243
+ "type": "object",
244
+ "properties": {
245
+ "durable": {
246
+ "type": "boolean"
247
+ }
248
+ },
249
+ "required": [
250
+ "durable"
251
+ ],
252
+ "additionalProperties": false
253
+ },
254
+ "callable-output": {
255
+ "oneOf": [
256
+ {
257
+ "type": "object",
258
+ "properties": {
259
+ "mode": {
260
+ "type": "string",
261
+ "const": "value"
262
+ },
263
+ "schema": {
264
+ "$ref": "#/$defs/value-schema"
265
+ }
266
+ },
267
+ "required": [
268
+ "mode",
269
+ "schema"
270
+ ],
271
+ "additionalProperties": false
272
+ },
273
+ {
274
+ "type": "object",
275
+ "properties": {
276
+ "mode": {
277
+ "type": "string",
278
+ "const": "stream"
279
+ },
280
+ "item": {
281
+ "$ref": "#/$defs/value-schema"
282
+ }
283
+ },
284
+ "required": [
285
+ "mode",
286
+ "item"
287
+ ],
288
+ "additionalProperties": false
289
+ },
290
+ {
291
+ "type": "object",
292
+ "properties": {
293
+ "mode": {
294
+ "type": "string",
295
+ "const": "binary"
296
+ }
297
+ },
298
+ "required": [
299
+ "mode"
300
+ ],
301
+ "additionalProperties": false
302
+ }
303
+ ]
304
+ },
305
+ "callable-policy": {
306
+ "anyOf": [
307
+ {
308
+ "type": "boolean",
309
+ "const": true
310
+ },
311
+ {
312
+ "$ref": "#/$defs/policy-check-expr"
313
+ }
314
+ ]
315
+ },
316
+ "class-definition": {
317
+ "oneOf": [
318
+ {
319
+ "$ref": "#/$defs/node-class"
320
+ },
321
+ {
322
+ "$ref": "#/$defs/edge-class"
323
+ }
324
+ ]
325
+ },
326
+ "class-ref": {
327
+ "type": "object",
328
+ "properties": {
329
+ "origin": {
330
+ "$ref": "#/$defs/origin"
331
+ },
332
+ "kind": {
333
+ "type": "string",
334
+ "const": "class"
335
+ },
336
+ "name": {
337
+ "$ref": "#/$defs/name"
338
+ }
339
+ },
340
+ "required": [
341
+ "origin",
342
+ "kind",
343
+ "name"
344
+ ],
345
+ "additionalProperties": false
346
+ },
347
+ "class-rule-check-expr": {
348
+ "anyOf": [
349
+ {
350
+ "type": "object",
351
+ "properties": {
352
+ "sameNode": {
353
+ "type": "object",
354
+ "properties": {
355
+ "left": {
356
+ "$ref": "#/$defs/class-rule-object"
357
+ },
358
+ "right": {
359
+ "$ref": "#/$defs/class-rule-object"
360
+ }
361
+ },
362
+ "required": [
363
+ "left",
364
+ "right"
365
+ ],
366
+ "additionalProperties": false
367
+ }
368
+ },
369
+ "required": [
370
+ "sameNode"
371
+ ],
372
+ "additionalProperties": false
373
+ },
374
+ {
375
+ "type": "object",
376
+ "properties": {
377
+ "check": {
378
+ "$ref": "#/$defs/policy-ref"
379
+ },
380
+ "object": {
381
+ "$ref": "#/$defs/class-rule-object"
382
+ }
383
+ },
384
+ "required": [
385
+ "check",
386
+ "object"
387
+ ],
388
+ "additionalProperties": false
389
+ },
390
+ {
391
+ "type": "object",
392
+ "properties": {
393
+ "allOf": {
394
+ "minItems": 1,
395
+ "type": "array",
396
+ "items": {
397
+ "$ref": "#/$defs/class-rule-check-expr"
398
+ }
399
+ }
400
+ },
401
+ "required": [
402
+ "allOf"
403
+ ],
404
+ "additionalProperties": false
405
+ },
406
+ {
407
+ "type": "object",
408
+ "properties": {
409
+ "anyOf": {
410
+ "minItems": 1,
411
+ "type": "array",
412
+ "items": {
413
+ "$ref": "#/$defs/class-rule-check-expr"
414
+ }
415
+ }
416
+ },
417
+ "required": [
418
+ "anyOf"
419
+ ],
420
+ "additionalProperties": false
421
+ }
422
+ ]
423
+ },
424
+ "class-rule-object": {
425
+ "oneOf": [
426
+ {
427
+ "type": "object",
428
+ "properties": {
429
+ "kind": {
430
+ "type": "string",
431
+ "const": "self"
432
+ }
433
+ },
434
+ "required": [
435
+ "kind"
436
+ ],
437
+ "additionalProperties": false
438
+ },
439
+ {
440
+ "type": "object",
441
+ "properties": {
442
+ "kind": {
443
+ "type": "string",
444
+ "const": "ref"
445
+ },
446
+ "ref": {
447
+ "$ref": "#/$defs/projected-member-ref"
448
+ }
449
+ },
450
+ "required": [
451
+ "kind",
452
+ "ref"
453
+ ],
454
+ "additionalProperties": false
455
+ }
456
+ ]
457
+ },
458
+ "core": {
459
+ "type": "object",
460
+ "properties": {
461
+ "nodes": {
462
+ "type": "object",
463
+ "propertyNames": {
464
+ "$ref": "#/$defs/core-slug"
465
+ },
466
+ "additionalProperties": {
467
+ "$ref": "#/$defs/core-definition"
468
+ }
469
+ },
470
+ "edges": {
471
+ "type": "array",
472
+ "items": {
473
+ "$ref": "#/$defs/core-edge"
474
+ }
475
+ }
476
+ },
477
+ "required": [
478
+ "nodes",
479
+ "edges"
480
+ ],
481
+ "additionalProperties": false
482
+ },
483
+ "core-definition": {
484
+ "type": "object",
485
+ "properties": {
486
+ "ref": {
487
+ "$ref": "#/$defs/core-ref"
488
+ },
489
+ "class": {
490
+ "$ref": "#/$defs/class-ref"
491
+ },
492
+ "properties": {
493
+ "$ref": "#/$defs/property-values"
494
+ }
495
+ },
496
+ "required": [
497
+ "ref",
498
+ "class",
499
+ "properties"
500
+ ],
501
+ "additionalProperties": false
502
+ },
503
+ "core-edge": {
504
+ "type": "object",
505
+ "properties": {
506
+ "class": {
507
+ "$ref": "#/$defs/class-ref"
508
+ },
509
+ "source": {
510
+ "$ref": "#/$defs/core-endpoint"
511
+ },
512
+ "target": {
513
+ "$ref": "#/$defs/core-endpoint"
514
+ },
515
+ "properties": {
516
+ "$ref": "#/$defs/property-values"
517
+ }
518
+ },
519
+ "required": [
520
+ "class",
521
+ "source",
522
+ "target",
523
+ "properties"
524
+ ],
525
+ "additionalProperties": false
526
+ },
527
+ "core-endpoint": {
528
+ "oneOf": [
529
+ {
530
+ "$ref": "#/$defs/method-address"
531
+ },
532
+ {
533
+ "$ref": "#/$defs/class-ref"
534
+ },
535
+ {
536
+ "$ref": "#/$defs/function-ref"
537
+ },
538
+ {
539
+ "$ref": "#/$defs/policy-ref"
540
+ },
541
+ {
542
+ "$ref": "#/$defs/view-ref"
543
+ },
544
+ {
545
+ "$ref": "#/$defs/core-ref"
546
+ },
547
+ {
548
+ "$ref": "#/$defs/domain-endpoint"
549
+ }
550
+ ]
551
+ },
552
+ "core-ref": {
553
+ "type": "object",
554
+ "properties": {
555
+ "origin": {
556
+ "$ref": "#/$defs/origin"
557
+ },
558
+ "kind": {
559
+ "type": "string",
560
+ "const": "core"
561
+ },
562
+ "name": {
563
+ "$ref": "#/$defs/core-slug"
564
+ }
565
+ },
566
+ "required": [
567
+ "origin",
568
+ "kind",
569
+ "name"
570
+ ],
571
+ "additionalProperties": false
572
+ },
573
+ "core-slug": {
574
+ "type": "string",
575
+ "minLength": 1,
576
+ "maxLength": 100,
577
+ "pattern": "^(?=.{1,100}$)[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)*$"
578
+ },
579
+ "create-policy": {
580
+ "anyOf": [
581
+ {
582
+ "type": "boolean",
583
+ "const": true
584
+ },
585
+ {
586
+ "$ref": "#/$defs/create-rule-check-expr"
587
+ }
588
+ ]
589
+ },
590
+ "create-rule-check-expr": {
591
+ "anyOf": [
592
+ {
593
+ "type": "object",
594
+ "properties": {
595
+ "sameNode": {
596
+ "type": "object",
597
+ "properties": {
598
+ "left": {
599
+ "type": "object",
600
+ "properties": {
601
+ "kind": {
602
+ "type": "string",
603
+ "const": "ref"
604
+ },
605
+ "ref": {
606
+ "$ref": "#/$defs/projected-member-ref"
607
+ }
608
+ },
609
+ "required": [
610
+ "kind",
611
+ "ref"
612
+ ],
613
+ "additionalProperties": false
614
+ },
615
+ "right": {
616
+ "type": "object",
617
+ "properties": {
618
+ "kind": {
619
+ "type": "string",
620
+ "const": "ref"
621
+ },
622
+ "ref": {
623
+ "$ref": "#/$defs/projected-member-ref"
624
+ }
625
+ },
626
+ "required": [
627
+ "kind",
628
+ "ref"
629
+ ],
630
+ "additionalProperties": false
631
+ }
632
+ },
633
+ "required": [
634
+ "left",
635
+ "right"
636
+ ],
637
+ "additionalProperties": false
638
+ }
639
+ },
640
+ "required": [
641
+ "sameNode"
642
+ ],
643
+ "additionalProperties": false
644
+ },
645
+ {
646
+ "type": "object",
647
+ "properties": {
648
+ "check": {
649
+ "$ref": "#/$defs/policy-ref"
650
+ },
651
+ "object": {
652
+ "type": "object",
653
+ "properties": {
654
+ "kind": {
655
+ "type": "string",
656
+ "const": "ref"
657
+ },
658
+ "ref": {
659
+ "$ref": "#/$defs/projected-member-ref"
660
+ }
661
+ },
662
+ "required": [
663
+ "kind",
664
+ "ref"
665
+ ],
666
+ "additionalProperties": false
667
+ }
668
+ },
669
+ "required": [
670
+ "check",
671
+ "object"
672
+ ],
673
+ "additionalProperties": false
674
+ },
675
+ {
676
+ "type": "object",
677
+ "properties": {
678
+ "allOf": {
679
+ "minItems": 1,
680
+ "type": "array",
681
+ "items": {
682
+ "$ref": "#/$defs/create-rule-check-expr"
683
+ }
684
+ }
685
+ },
686
+ "required": [
687
+ "allOf"
688
+ ],
689
+ "additionalProperties": false
690
+ },
691
+ {
692
+ "type": "object",
693
+ "properties": {
694
+ "anyOf": {
695
+ "minItems": 1,
696
+ "type": "array",
697
+ "items": {
698
+ "$ref": "#/$defs/create-rule-check-expr"
699
+ }
700
+ }
701
+ },
702
+ "required": [
703
+ "anyOf"
704
+ ],
705
+ "additionalProperties": false
706
+ }
707
+ ]
708
+ },
709
+ "dependency": {
710
+ "type": "object",
711
+ "properties": {
712
+ "origin": {
713
+ "$ref": "#/$defs/origin"
714
+ },
715
+ "revision": {
716
+ "$ref": "#/$defs/revision"
717
+ }
718
+ },
719
+ "required": [
720
+ "origin",
721
+ "revision"
722
+ ],
723
+ "additionalProperties": false
724
+ },
725
+ "dependency-alias": {
726
+ "type": "string",
727
+ "pattern": "^[a-z][A-Za-z0-9]*$",
728
+ "not": {
729
+ "enum": [
730
+ "prototype",
731
+ "constructor"
732
+ ]
733
+ }
734
+ },
735
+ "description": {
736
+ "type": "string",
737
+ "minLength": 1,
738
+ "maxLength": 1000
739
+ },
740
+ "directed-endpoints": {
741
+ "type": "object",
742
+ "properties": {
743
+ "source": {
744
+ "$ref": "#/$defs/directed-source-endpoint"
745
+ },
746
+ "target": {
747
+ "$ref": "#/$defs/directed-target-endpoint"
748
+ }
749
+ },
750
+ "required": [
751
+ "source",
752
+ "target"
753
+ ],
754
+ "additionalProperties": false
755
+ },
756
+ "directed-source-endpoint": {
757
+ "type": "object",
758
+ "properties": {
759
+ "role": {
760
+ "$ref": "#/$defs/name"
761
+ },
762
+ "accepts": {
763
+ "minItems": 1,
764
+ "type": "array",
765
+ "items": {
766
+ "$ref": "#/$defs/class-ref"
767
+ },
768
+ "uniqueItems": true
769
+ },
770
+ "onDelete": {
771
+ "$ref": "#/$defs/edge-lifetime"
772
+ },
773
+ "outgoing": {
774
+ "$ref": "#/$defs/edge-count"
775
+ }
776
+ },
777
+ "required": [
778
+ "role",
779
+ "accepts",
780
+ "outgoing"
781
+ ],
782
+ "additionalProperties": false
783
+ },
784
+ "directed-target-endpoint": {
785
+ "type": "object",
786
+ "properties": {
787
+ "role": {
788
+ "$ref": "#/$defs/name"
789
+ },
790
+ "accepts": {
791
+ "minItems": 1,
792
+ "type": "array",
793
+ "items": {
794
+ "$ref": "#/$defs/class-ref"
795
+ },
796
+ "uniqueItems": true
797
+ },
798
+ "onDelete": {
799
+ "$ref": "#/$defs/edge-lifetime"
800
+ },
801
+ "incoming": {
802
+ "$ref": "#/$defs/edge-count"
803
+ }
804
+ },
805
+ "required": [
806
+ "role",
807
+ "accepts",
808
+ "incoming"
809
+ ],
810
+ "additionalProperties": false
811
+ },
812
+ "domain-endpoint": {
813
+ "type": "object",
814
+ "properties": {
815
+ "kind": {
816
+ "type": "string",
817
+ "const": "domain"
818
+ }
819
+ },
820
+ "required": [
821
+ "kind"
822
+ ],
823
+ "additionalProperties": false
824
+ },
825
+ "domain-name": {
826
+ "type": "string",
827
+ "minLength": 1,
828
+ "maxLength": 100,
829
+ "description": "The display name of the Domain: one trimmed line of text.",
830
+ "pattern": "^(?:[^\\u0000-\\u001f\\u007f-\\u009f\\u0020\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff](?:[^\\u0000-\\u001f\\u007f-\\u009f\\u2028\\u2029]*[^\\u0000-\\u001f\\u007f-\\u009f\\u0020\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff])?)?$"
831
+ },
832
+ "edge-class": {
833
+ "type": "object",
834
+ "properties": {
835
+ "ref": {
836
+ "$ref": "#/$defs/class-ref"
837
+ },
838
+ "kind": {
839
+ "type": "string",
840
+ "const": "edge"
841
+ },
842
+ "abstract": {
843
+ "type": "boolean"
844
+ },
845
+ "inheritance": {
846
+ "type": "string",
847
+ "enum": [
848
+ "open",
849
+ "final"
850
+ ]
851
+ },
852
+ "description": {
853
+ "$ref": "#/$defs/description"
854
+ },
855
+ "extends": {
856
+ "type": "array",
857
+ "items": {
858
+ "$ref": "#/$defs/class-ref"
859
+ },
860
+ "uniqueItems": true
861
+ },
862
+ "properties": {
863
+ "$ref": "#/$defs/edge-property-record"
864
+ },
865
+ "constraints": {
866
+ "$ref": "#/$defs/edge-constraints"
867
+ },
868
+ "unique": {
869
+ "minItems": 1,
870
+ "type": "array",
871
+ "items": {
872
+ "minItems": 1,
873
+ "type": "array",
874
+ "items": {
875
+ "$ref": "#/$defs/edge-unique-field"
876
+ },
877
+ "uniqueItems": true
878
+ },
879
+ "uniqueItems": true
880
+ },
881
+ "orientation": {
882
+ "type": "string",
883
+ "enum": [
884
+ "directed",
885
+ "undirected"
886
+ ]
887
+ },
888
+ "endpoints": {
889
+ "anyOf": [
890
+ {
891
+ "$ref": "#/$defs/directed-endpoints"
892
+ },
893
+ {
894
+ "$ref": "#/$defs/undirected-endpoints"
895
+ }
896
+ ]
897
+ },
898
+ "policies": {
899
+ "type": "object",
900
+ "properties": {
901
+ "read": {
902
+ "$ref": "#/$defs/observation-policy"
903
+ },
904
+ "traverse": {
905
+ "$ref": "#/$defs/observation-policy"
906
+ },
907
+ "create": {
908
+ "$ref": "#/$defs/write-policy"
909
+ },
910
+ "update": {
911
+ "$ref": "#/$defs/write-policy"
912
+ },
913
+ "delete": {
914
+ "$ref": "#/$defs/write-policy"
915
+ }
916
+ },
917
+ "additionalProperties": false
918
+ }
919
+ },
920
+ "required": [
921
+ "ref",
922
+ "kind",
923
+ "abstract",
924
+ "extends",
925
+ "properties",
926
+ "constraints",
927
+ "orientation",
928
+ "endpoints",
929
+ "policies"
930
+ ],
931
+ "additionalProperties": false,
932
+ "if": {
933
+ "properties": {
934
+ "orientation": {
935
+ "const": "undirected"
936
+ }
937
+ },
938
+ "required": [
939
+ "orientation"
940
+ ]
941
+ },
942
+ "then": {
943
+ "properties": {
944
+ "endpoints": {
945
+ "type": "array"
946
+ },
947
+ "unique": false,
948
+ "constraints": {
949
+ "type": "object",
950
+ "properties": {
951
+ "acyclic": false
952
+ }
953
+ }
954
+ }
955
+ },
956
+ "else": {
957
+ "properties": {
958
+ "endpoints": {
959
+ "type": "object"
960
+ }
961
+ }
962
+ }
963
+ },
964
+ "edge-constraints": {
965
+ "type": "object",
966
+ "properties": {
967
+ "noSelf": {
968
+ "type": "boolean",
969
+ "const": true
970
+ },
971
+ "acyclic": {
972
+ "type": "boolean",
973
+ "const": true
974
+ }
975
+ },
976
+ "additionalProperties": false
977
+ },
978
+ "edge-count": {
979
+ "type": "string",
980
+ "enum": [
981
+ "1",
982
+ "0..*",
983
+ "1..*",
984
+ "0..1"
985
+ ]
986
+ },
987
+ "edge-lifetime": {
988
+ "type": "string",
989
+ "enum": [
990
+ "restrict",
991
+ "detach"
992
+ ]
993
+ },
994
+ "edge-property-definition": {
995
+ "type": "object",
996
+ "properties": {
997
+ "schema": {
998
+ "not": {
999
+ "type": "object",
1000
+ "required": [
1001
+ "x-astrale-value-kind"
1002
+ ],
1003
+ "properties": {
1004
+ "x-astrale-value-kind": {
1005
+ "const": "blob"
1006
+ }
1007
+ }
1008
+ },
1009
+ "$ref": "#/$defs/value-schema"
1010
+ },
1011
+ "required": {
1012
+ "type": "boolean"
1013
+ },
1014
+ "auto": {
1015
+ "$ref": "#/$defs/auto"
1016
+ },
1017
+ "immutable": {
1018
+ "type": "string",
1019
+ "enum": [
1020
+ "create",
1021
+ "once"
1022
+ ]
1023
+ },
1024
+ "description": {
1025
+ "$ref": "#/$defs/description"
1026
+ }
1027
+ },
1028
+ "required": [
1029
+ "schema",
1030
+ "required"
1031
+ ],
1032
+ "additionalProperties": false
1033
+ },
1034
+ "edge-property-record": {
1035
+ "type": "object",
1036
+ "propertyNames": {
1037
+ "$ref": "#/$defs/name"
1038
+ },
1039
+ "additionalProperties": {
1040
+ "$ref": "#/$defs/edge-property-definition"
1041
+ }
1042
+ },
1043
+ "edge-unique-field": {
1044
+ "anyOf": [
1045
+ {
1046
+ "type": "string",
1047
+ "const": "source"
1048
+ },
1049
+ {
1050
+ "type": "string",
1051
+ "const": "target"
1052
+ },
1053
+ {
1054
+ "type": "string",
1055
+ "const": "slug"
1056
+ },
1057
+ {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "property": {
1061
+ "$ref": "#/$defs/property-key"
1062
+ }
1063
+ },
1064
+ "required": [
1065
+ "property"
1066
+ ],
1067
+ "additionalProperties": false
1068
+ }
1069
+ ]
1070
+ },
1071
+ "function-definition": {
1072
+ "type": "object",
1073
+ "properties": {
1074
+ "ref": {
1075
+ "$ref": "#/$defs/function-ref"
1076
+ },
1077
+ "description": {
1078
+ "$ref": "#/$defs/description"
1079
+ },
1080
+ "input": {
1081
+ "anyOf": [
1082
+ {
1083
+ "$ref": "#/$defs/binary-input"
1084
+ },
1085
+ {
1086
+ "not": {
1087
+ "type": "object",
1088
+ "required": [
1089
+ "mode"
1090
+ ],
1091
+ "properties": {
1092
+ "mode": {
1093
+ "const": "binary"
1094
+ }
1095
+ }
1096
+ },
1097
+ "$ref": "#/$defs/value-schema"
1098
+ }
1099
+ ]
1100
+ },
1101
+ "output": {
1102
+ "$ref": "#/$defs/callable-output"
1103
+ },
1104
+ "execution": {
1105
+ "$ref": "#/$defs/callable-execution"
1106
+ },
1107
+ "admission": {
1108
+ "$ref": "#/$defs/callable-admission"
1109
+ },
1110
+ "auth": {
1111
+ "type": "string",
1112
+ "enum": [
1113
+ "anonymous",
1114
+ "authenticated",
1115
+ "authorized"
1116
+ ]
1117
+ },
1118
+ "policy": {
1119
+ "$ref": "#/$defs/callable-policy"
1120
+ }
1121
+ },
1122
+ "required": [
1123
+ "ref",
1124
+ "input",
1125
+ "output",
1126
+ "auth"
1127
+ ],
1128
+ "additionalProperties": false,
1129
+ "if": {
1130
+ "properties": {
1131
+ "auth": {
1132
+ "enum": [
1133
+ "anonymous",
1134
+ "authenticated"
1135
+ ]
1136
+ }
1137
+ },
1138
+ "required": [
1139
+ "auth"
1140
+ ]
1141
+ },
1142
+ "then": {
1143
+ "properties": {
1144
+ "policy": false
1145
+ }
1146
+ }
1147
+ },
1148
+ "function-ref": {
1149
+ "type": "object",
1150
+ "properties": {
1151
+ "origin": {
1152
+ "$ref": "#/$defs/origin"
1153
+ },
1154
+ "kind": {
1155
+ "type": "string",
1156
+ "const": "function"
1157
+ },
1158
+ "name": {
1159
+ "$ref": "#/$defs/name"
1160
+ }
1161
+ },
1162
+ "required": [
1163
+ "origin",
1164
+ "kind",
1165
+ "name"
1166
+ ],
1167
+ "additionalProperties": false
1168
+ },
1169
+ "icon": {
1170
+ "type": "string",
1171
+ "minLength": 1,
1172
+ "maxLength": 8000
1173
+ },
1174
+ "incident-endpoint": {
1175
+ "type": "object",
1176
+ "properties": {
1177
+ "role": {
1178
+ "$ref": "#/$defs/name"
1179
+ },
1180
+ "accepts": {
1181
+ "minItems": 1,
1182
+ "type": "array",
1183
+ "items": {
1184
+ "$ref": "#/$defs/class-ref"
1185
+ },
1186
+ "uniqueItems": true
1187
+ },
1188
+ "onDelete": {
1189
+ "$ref": "#/$defs/edge-lifetime"
1190
+ },
1191
+ "incident": {
1192
+ "$ref": "#/$defs/edge-count"
1193
+ }
1194
+ },
1195
+ "required": [
1196
+ "role",
1197
+ "accepts",
1198
+ "incident"
1199
+ ],
1200
+ "additionalProperties": false
1201
+ },
1202
+ "json-value": {
1203
+ "anyOf": [
1204
+ {
1205
+ "type": "null"
1206
+ },
1207
+ {
1208
+ "type": "boolean"
1209
+ },
1210
+ {
1211
+ "type": "number"
1212
+ },
1213
+ {
1214
+ "type": "string"
1215
+ },
1216
+ {
1217
+ "type": "array",
1218
+ "items": {
1219
+ "$ref": "#/$defs/json-value"
1220
+ }
1221
+ },
1222
+ {
1223
+ "type": "object",
1224
+ "propertyNames": {
1225
+ "not": {
1226
+ "const": "__proto__"
1227
+ }
1228
+ },
1229
+ "additionalProperties": {
1230
+ "$ref": "#/$defs/json-value"
1231
+ }
1232
+ }
1233
+ ]
1234
+ },
1235
+ "media-type": {
1236
+ "type": "string",
1237
+ "pattern": "^[a-z0-9][a-z0-9!#$&^_.+-]{0,126}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,126}$"
1238
+ },
1239
+ "method-address": {
1240
+ "type": "object",
1241
+ "properties": {
1242
+ "kind": {
1243
+ "type": "string",
1244
+ "const": "method"
1245
+ },
1246
+ "owner": {
1247
+ "$ref": "#/$defs/class-ref"
1248
+ },
1249
+ "name": {
1250
+ "$ref": "#/$defs/name"
1251
+ }
1252
+ },
1253
+ "required": [
1254
+ "kind",
1255
+ "owner",
1256
+ "name"
1257
+ ],
1258
+ "additionalProperties": false
1259
+ },
1260
+ "method-definition": {
1261
+ "type": "object",
1262
+ "properties": {
1263
+ "description": {
1264
+ "$ref": "#/$defs/description"
1265
+ },
1266
+ "input": {
1267
+ "$ref": "#/$defs/value-schema"
1268
+ },
1269
+ "output": {
1270
+ "$ref": "#/$defs/callable-output"
1271
+ },
1272
+ "execution": {
1273
+ "$ref": "#/$defs/callable-execution"
1274
+ },
1275
+ "admission": {
1276
+ "$ref": "#/$defs/callable-admission"
1277
+ },
1278
+ "auth": {
1279
+ "type": "string",
1280
+ "enum": [
1281
+ "anonymous",
1282
+ "authenticated",
1283
+ "authorized"
1284
+ ]
1285
+ },
1286
+ "policy": {
1287
+ "$ref": "#/$defs/callable-policy"
1288
+ },
1289
+ "static": {
1290
+ "type": "boolean"
1291
+ },
1292
+ "abstract": {
1293
+ "type": "boolean"
1294
+ }
1295
+ },
1296
+ "required": [
1297
+ "input",
1298
+ "output",
1299
+ "auth",
1300
+ "static",
1301
+ "abstract"
1302
+ ],
1303
+ "additionalProperties": false,
1304
+ "if": {
1305
+ "properties": {
1306
+ "auth": {
1307
+ "enum": [
1308
+ "anonymous",
1309
+ "authenticated"
1310
+ ]
1311
+ }
1312
+ },
1313
+ "required": [
1314
+ "auth"
1315
+ ]
1316
+ },
1317
+ "then": {
1318
+ "properties": {
1319
+ "policy": false
1320
+ }
1321
+ }
1322
+ },
1323
+ "method-record": {
1324
+ "type": "object",
1325
+ "propertyNames": {
1326
+ "$ref": "#/$defs/name"
1327
+ },
1328
+ "additionalProperties": {
1329
+ "$ref": "#/$defs/method-definition"
1330
+ }
1331
+ },
1332
+ "name": {
1333
+ "type": "string",
1334
+ "pattern": "^[A-Za-z][A-Za-z0-9_]*$"
1335
+ },
1336
+ "node-class": {
1337
+ "type": "object",
1338
+ "properties": {
1339
+ "ref": {
1340
+ "$ref": "#/$defs/class-ref"
1341
+ },
1342
+ "kind": {
1343
+ "type": "string",
1344
+ "const": "node"
1345
+ },
1346
+ "abstract": {
1347
+ "type": "boolean"
1348
+ },
1349
+ "inheritance": {
1350
+ "type": "string",
1351
+ "enum": [
1352
+ "open",
1353
+ "final"
1354
+ ]
1355
+ },
1356
+ "description": {
1357
+ "$ref": "#/$defs/description"
1358
+ },
1359
+ "extends": {
1360
+ "type": "array",
1361
+ "items": {
1362
+ "$ref": "#/$defs/class-ref"
1363
+ },
1364
+ "uniqueItems": true
1365
+ },
1366
+ "properties": {
1367
+ "$ref": "#/$defs/node-property-record"
1368
+ },
1369
+ "methods": {
1370
+ "$ref": "#/$defs/method-record"
1371
+ },
1372
+ "data": {
1373
+ "type": "object",
1374
+ "properties": {
1375
+ "mediaType": {
1376
+ "$ref": "#/$defs/media-type"
1377
+ }
1378
+ },
1379
+ "required": [
1380
+ "mediaType"
1381
+ ],
1382
+ "additionalProperties": false
1383
+ },
1384
+ "icon": {
1385
+ "$ref": "#/$defs/icon"
1386
+ },
1387
+ "policies": {
1388
+ "type": "object",
1389
+ "properties": {
1390
+ "read": {
1391
+ "$ref": "#/$defs/observation-policy"
1392
+ },
1393
+ "traverse": {
1394
+ "$ref": "#/$defs/observation-policy"
1395
+ },
1396
+ "create": {
1397
+ "$ref": "#/$defs/create-policy"
1398
+ },
1399
+ "update": {
1400
+ "$ref": "#/$defs/write-policy"
1401
+ },
1402
+ "delete": {
1403
+ "$ref": "#/$defs/write-policy"
1404
+ }
1405
+ },
1406
+ "additionalProperties": false
1407
+ },
1408
+ "unique": {
1409
+ "minItems": 1,
1410
+ "type": "array",
1411
+ "items": {
1412
+ "minItems": 1,
1413
+ "type": "array",
1414
+ "items": {
1415
+ "$ref": "#/$defs/property-key"
1416
+ },
1417
+ "uniqueItems": true
1418
+ },
1419
+ "uniqueItems": true
1420
+ }
1421
+ },
1422
+ "required": [
1423
+ "ref",
1424
+ "kind",
1425
+ "abstract",
1426
+ "extends",
1427
+ "properties",
1428
+ "methods",
1429
+ "policies"
1430
+ ],
1431
+ "additionalProperties": false
1432
+ },
1433
+ "node-property-definition": {
1434
+ "type": "object",
1435
+ "properties": {
1436
+ "schema": {
1437
+ "$ref": "#/$defs/value-schema"
1438
+ },
1439
+ "required": {
1440
+ "type": "boolean"
1441
+ },
1442
+ "auto": {
1443
+ "$ref": "#/$defs/auto"
1444
+ },
1445
+ "immutable": {
1446
+ "type": "string",
1447
+ "enum": [
1448
+ "create",
1449
+ "once"
1450
+ ]
1451
+ },
1452
+ "description": {
1453
+ "$ref": "#/$defs/description"
1454
+ },
1455
+ "state": {
1456
+ "$ref": "#/$defs/state-topology"
1457
+ }
1458
+ },
1459
+ "required": [
1460
+ "schema",
1461
+ "required"
1462
+ ],
1463
+ "additionalProperties": false,
1464
+ "allOf": [
1465
+ {
1466
+ "if": {
1467
+ "anyOf": [
1468
+ {
1469
+ "required": [
1470
+ "auto"
1471
+ ]
1472
+ },
1473
+ {
1474
+ "required": [
1475
+ "state"
1476
+ ]
1477
+ }
1478
+ ]
1479
+ },
1480
+ "then": {
1481
+ "properties": {
1482
+ "schema": {
1483
+ "not": {
1484
+ "type": "object",
1485
+ "required": [
1486
+ "x-astrale-value-kind"
1487
+ ],
1488
+ "properties": {
1489
+ "x-astrale-value-kind": {
1490
+ "const": "blob"
1491
+ }
1492
+ }
1493
+ }
1494
+ }
1495
+ }
1496
+ }
1497
+ }
1498
+ ]
1499
+ },
1500
+ "node-property-record": {
1501
+ "type": "object",
1502
+ "propertyNames": {
1503
+ "$ref": "#/$defs/name"
1504
+ },
1505
+ "additionalProperties": {
1506
+ "$ref": "#/$defs/node-property-definition"
1507
+ }
1508
+ },
1509
+ "observation-policy": {
1510
+ "anyOf": [
1511
+ {
1512
+ "type": "boolean",
1513
+ "const": false
1514
+ },
1515
+ {
1516
+ "$ref": "#/$defs/policy-ref"
1517
+ },
1518
+ {
1519
+ "$ref": "#/$defs/class-rule-check-expr"
1520
+ }
1521
+ ]
1522
+ },
1523
+ "origin": {
1524
+ "type": "string",
1525
+ "minLength": 3,
1526
+ "maxLength": 253,
1527
+ "pattern": "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$"
1528
+ },
1529
+ "path-annotation": {
1530
+ "type": "object",
1531
+ "properties": {
1532
+ "target": {
1533
+ "type": "string",
1534
+ "const": "node"
1535
+ },
1536
+ "cardinality": {
1537
+ "type": "string",
1538
+ "const": "one"
1539
+ },
1540
+ "accepts": {
1541
+ "type": "array",
1542
+ "minItems": 1,
1543
+ "uniqueItems": true,
1544
+ "items": {
1545
+ "$ref": "#/$defs/class-ref"
1546
+ }
1547
+ }
1548
+ },
1549
+ "required": [
1550
+ "target",
1551
+ "cardinality",
1552
+ "accepts"
1553
+ ],
1554
+ "additionalProperties": false
1555
+ },
1556
+ "policy-check-expr": {
1557
+ "anyOf": [
1558
+ {
1559
+ "type": "object",
1560
+ "properties": {
1561
+ "sameNode": {
1562
+ "type": "object",
1563
+ "properties": {
1564
+ "left": {
1565
+ "$ref": "#/$defs/policy-check-object"
1566
+ },
1567
+ "right": {
1568
+ "$ref": "#/$defs/policy-check-object"
1569
+ }
1570
+ },
1571
+ "required": [
1572
+ "left",
1573
+ "right"
1574
+ ],
1575
+ "additionalProperties": false
1576
+ }
1577
+ },
1578
+ "required": [
1579
+ "sameNode"
1580
+ ],
1581
+ "additionalProperties": false
1582
+ },
1583
+ {
1584
+ "type": "object",
1585
+ "properties": {
1586
+ "check": {
1587
+ "$ref": "#/$defs/policy-ref"
1588
+ },
1589
+ "object": {
1590
+ "$ref": "#/$defs/policy-check-object"
1591
+ }
1592
+ },
1593
+ "required": [
1594
+ "check",
1595
+ "object"
1596
+ ],
1597
+ "additionalProperties": false
1598
+ },
1599
+ {
1600
+ "type": "object",
1601
+ "properties": {
1602
+ "allOf": {
1603
+ "minItems": 1,
1604
+ "type": "array",
1605
+ "items": {
1606
+ "$ref": "#/$defs/policy-check-expr"
1607
+ }
1608
+ }
1609
+ },
1610
+ "required": [
1611
+ "allOf"
1612
+ ],
1613
+ "additionalProperties": false
1614
+ },
1615
+ {
1616
+ "type": "object",
1617
+ "properties": {
1618
+ "anyOf": {
1619
+ "minItems": 1,
1620
+ "type": "array",
1621
+ "items": {
1622
+ "$ref": "#/$defs/policy-check-expr"
1623
+ }
1624
+ }
1625
+ },
1626
+ "required": [
1627
+ "anyOf"
1628
+ ],
1629
+ "additionalProperties": false
1630
+ }
1631
+ ]
1632
+ },
1633
+ "policy-check-object": {
1634
+ "oneOf": [
1635
+ {
1636
+ "type": "object",
1637
+ "properties": {
1638
+ "kind": {
1639
+ "type": "string",
1640
+ "const": "self"
1641
+ }
1642
+ },
1643
+ "required": [
1644
+ "kind"
1645
+ ],
1646
+ "additionalProperties": false
1647
+ },
1648
+ {
1649
+ "type": "object",
1650
+ "properties": {
1651
+ "kind": {
1652
+ "type": "string",
1653
+ "const": "input"
1654
+ },
1655
+ "field": {
1656
+ "$ref": "#/$defs/name"
1657
+ }
1658
+ },
1659
+ "required": [
1660
+ "kind",
1661
+ "field"
1662
+ ],
1663
+ "additionalProperties": false
1664
+ },
1665
+ {
1666
+ "type": "object",
1667
+ "properties": {
1668
+ "kind": {
1669
+ "type": "string",
1670
+ "const": "ref"
1671
+ },
1672
+ "ref": {
1673
+ "$ref": "#/$defs/projected-member-ref"
1674
+ }
1675
+ },
1676
+ "required": [
1677
+ "kind",
1678
+ "ref"
1679
+ ],
1680
+ "additionalProperties": false
1681
+ }
1682
+ ]
1683
+ },
1684
+ "policy-definition": {
1685
+ "type": "object",
1686
+ "properties": {
1687
+ "ref": {
1688
+ "$ref": "#/$defs/policy-ref"
1689
+ },
1690
+ "expression": {
1691
+ "anyOf": [
1692
+ {
1693
+ "type": "object",
1694
+ "properties": {
1695
+ "match": {
1696
+ "$ref": "#/$defs/policy-pattern-expr"
1697
+ }
1698
+ },
1699
+ "required": [
1700
+ "match"
1701
+ ],
1702
+ "additionalProperties": false
1703
+ },
1704
+ {
1705
+ "type": "object",
1706
+ "properties": {
1707
+ "allOf": {
1708
+ "minItems": 1,
1709
+ "type": "array",
1710
+ "items": {
1711
+ "$ref": "#/$defs/policy-ref"
1712
+ }
1713
+ }
1714
+ },
1715
+ "required": [
1716
+ "allOf"
1717
+ ],
1718
+ "additionalProperties": false
1719
+ },
1720
+ {
1721
+ "type": "object",
1722
+ "properties": {
1723
+ "anyOf": {
1724
+ "minItems": 1,
1725
+ "type": "array",
1726
+ "items": {
1727
+ "$ref": "#/$defs/policy-ref"
1728
+ }
1729
+ }
1730
+ },
1731
+ "required": [
1732
+ "anyOf"
1733
+ ],
1734
+ "additionalProperties": false
1735
+ }
1736
+ ]
1737
+ },
1738
+ "description": {
1739
+ "$ref": "#/$defs/description"
1740
+ }
1741
+ },
1742
+ "required": [
1743
+ "ref",
1744
+ "expression"
1745
+ ],
1746
+ "additionalProperties": false
1747
+ },
1748
+ "policy-pattern-expr": {
1749
+ "anyOf": [
1750
+ {
1751
+ "type": "object",
1752
+ "properties": {
1753
+ "sameNode": {
1754
+ "type": "object",
1755
+ "properties": {
1756
+ "left": {
1757
+ "$ref": "#/$defs/policy-pattern-node"
1758
+ },
1759
+ "right": {
1760
+ "$ref": "#/$defs/policy-pattern-node"
1761
+ }
1762
+ },
1763
+ "required": [
1764
+ "left",
1765
+ "right"
1766
+ ],
1767
+ "additionalProperties": false
1768
+ }
1769
+ },
1770
+ "required": [
1771
+ "sameNode"
1772
+ ],
1773
+ "additionalProperties": false
1774
+ },
1775
+ {
1776
+ "type": "object",
1777
+ "properties": {
1778
+ "source": {
1779
+ "$ref": "#/$defs/policy-pattern-node"
1780
+ },
1781
+ "class": {
1782
+ "$ref": "#/$defs/class-ref"
1783
+ },
1784
+ "target": {
1785
+ "$ref": "#/$defs/policy-pattern-node"
1786
+ },
1787
+ "repeat": {
1788
+ "$ref": "#/$defs/policy-repeat"
1789
+ }
1790
+ },
1791
+ "required": [
1792
+ "source",
1793
+ "class",
1794
+ "target"
1795
+ ],
1796
+ "additionalProperties": false
1797
+ },
1798
+ {
1799
+ "type": "object",
1800
+ "properties": {
1801
+ "exists": {
1802
+ "type": "object",
1803
+ "properties": {
1804
+ "nodes": {
1805
+ "minItems": 1,
1806
+ "maxItems": 4,
1807
+ "type": "array",
1808
+ "items": {
1809
+ "$ref": "#/$defs/policy-variable"
1810
+ }
1811
+ },
1812
+ "where": {
1813
+ "$ref": "#/$defs/policy-pattern-expr"
1814
+ }
1815
+ },
1816
+ "required": [
1817
+ "nodes",
1818
+ "where"
1819
+ ],
1820
+ "additionalProperties": false
1821
+ }
1822
+ },
1823
+ "required": [
1824
+ "exists"
1825
+ ],
1826
+ "additionalProperties": false
1827
+ },
1828
+ {
1829
+ "type": "object",
1830
+ "properties": {
1831
+ "allOf": {
1832
+ "minItems": 1,
1833
+ "type": "array",
1834
+ "items": {
1835
+ "$ref": "#/$defs/policy-pattern-expr"
1836
+ }
1837
+ }
1838
+ },
1839
+ "required": [
1840
+ "allOf"
1841
+ ],
1842
+ "additionalProperties": false
1843
+ },
1844
+ {
1845
+ "type": "object",
1846
+ "properties": {
1847
+ "anyOf": {
1848
+ "minItems": 1,
1849
+ "type": "array",
1850
+ "items": {
1851
+ "$ref": "#/$defs/policy-pattern-expr"
1852
+ }
1853
+ }
1854
+ },
1855
+ "required": [
1856
+ "anyOf"
1857
+ ],
1858
+ "additionalProperties": false
1859
+ }
1860
+ ]
1861
+ },
1862
+ "policy-pattern-node": {
1863
+ "oneOf": [
1864
+ {
1865
+ "type": "object",
1866
+ "properties": {
1867
+ "kind": {
1868
+ "type": "string",
1869
+ "const": "subject"
1870
+ }
1871
+ },
1872
+ "required": [
1873
+ "kind"
1874
+ ],
1875
+ "additionalProperties": false
1876
+ },
1877
+ {
1878
+ "type": "object",
1879
+ "properties": {
1880
+ "kind": {
1881
+ "type": "string",
1882
+ "const": "object"
1883
+ }
1884
+ },
1885
+ "required": [
1886
+ "kind"
1887
+ ],
1888
+ "additionalProperties": false
1889
+ },
1890
+ {
1891
+ "type": "object",
1892
+ "properties": {
1893
+ "kind": {
1894
+ "type": "string",
1895
+ "const": "source"
1896
+ }
1897
+ },
1898
+ "required": [
1899
+ "kind"
1900
+ ],
1901
+ "additionalProperties": false
1902
+ },
1903
+ {
1904
+ "type": "object",
1905
+ "properties": {
1906
+ "kind": {
1907
+ "type": "string",
1908
+ "const": "target"
1909
+ }
1910
+ },
1911
+ "required": [
1912
+ "kind"
1913
+ ],
1914
+ "additionalProperties": false
1915
+ },
1916
+ {
1917
+ "$ref": "#/$defs/policy-pattern-variable"
1918
+ },
1919
+ {
1920
+ "type": "object",
1921
+ "properties": {
1922
+ "kind": {
1923
+ "type": "string",
1924
+ "const": "ref"
1925
+ },
1926
+ "ref": {
1927
+ "$ref": "#/$defs/projected-member-ref"
1928
+ }
1929
+ },
1930
+ "required": [
1931
+ "kind",
1932
+ "ref"
1933
+ ],
1934
+ "additionalProperties": false
1935
+ }
1936
+ ]
1937
+ },
1938
+ "policy-pattern-variable": {
1939
+ "type": "object",
1940
+ "properties": {
1941
+ "kind": {
1942
+ "type": "string",
1943
+ "const": "variable"
1944
+ },
1945
+ "id": {
1946
+ "type": "integer",
1947
+ "minimum": 0,
1948
+ "maximum": 9007199254740991
1949
+ }
1950
+ },
1951
+ "required": [
1952
+ "kind",
1953
+ "id"
1954
+ ],
1955
+ "additionalProperties": false
1956
+ },
1957
+ "policy-ref": {
1958
+ "type": "object",
1959
+ "properties": {
1960
+ "origin": {
1961
+ "$ref": "#/$defs/origin"
1962
+ },
1963
+ "kind": {
1964
+ "type": "string",
1965
+ "const": "policy"
1966
+ },
1967
+ "name": {
1968
+ "$ref": "#/$defs/name"
1969
+ }
1970
+ },
1971
+ "required": [
1972
+ "origin",
1973
+ "kind",
1974
+ "name"
1975
+ ],
1976
+ "additionalProperties": false
1977
+ },
1978
+ "policy-repeat": {
1979
+ "type": "object",
1980
+ "properties": {
1981
+ "min": {
1982
+ "type": "integer",
1983
+ "minimum": 0,
1984
+ "maximum": 3
1985
+ },
1986
+ "max": {
1987
+ "type": "integer",
1988
+ "minimum": 0,
1989
+ "maximum": 3
1990
+ }
1991
+ },
1992
+ "required": [
1993
+ "min",
1994
+ "max"
1995
+ ],
1996
+ "additionalProperties": false
1997
+ },
1998
+ "policy-variable": {
1999
+ "anyOf": [
2000
+ {
2001
+ "type": "object",
2002
+ "properties": {
2003
+ "variable": {
2004
+ "$ref": "#/$defs/policy-pattern-variable"
2005
+ },
2006
+ "class": {
2007
+ "$ref": "#/$defs/class-ref"
2008
+ }
2009
+ },
2010
+ "required": [
2011
+ "variable",
2012
+ "class"
2013
+ ],
2014
+ "additionalProperties": false
2015
+ },
2016
+ {
2017
+ "type": "object",
2018
+ "properties": {
2019
+ "variable": {
2020
+ "$ref": "#/$defs/policy-pattern-variable"
2021
+ },
2022
+ "selector": {
2023
+ "$ref": "#/$defs/policy-variable-selector"
2024
+ }
2025
+ },
2026
+ "required": [
2027
+ "variable",
2028
+ "selector"
2029
+ ],
2030
+ "additionalProperties": false
2031
+ }
2032
+ ]
2033
+ },
2034
+ "policy-variable-selector": {
2035
+ "oneOf": [
2036
+ {
2037
+ "type": "object",
2038
+ "properties": {
2039
+ "kind": {
2040
+ "type": "string",
2041
+ "const": "any"
2042
+ }
2043
+ },
2044
+ "required": [
2045
+ "kind"
2046
+ ],
2047
+ "additionalProperties": false
2048
+ },
2049
+ {
2050
+ "type": "object",
2051
+ "properties": {
2052
+ "kind": {
2053
+ "type": "string",
2054
+ "const": "satisfies"
2055
+ },
2056
+ "class": {
2057
+ "$ref": "#/$defs/class-ref"
2058
+ }
2059
+ },
2060
+ "required": [
2061
+ "kind",
2062
+ "class"
2063
+ ],
2064
+ "additionalProperties": false
2065
+ }
2066
+ ]
2067
+ },
2068
+ "portable-json": {
2069
+ "anyOf": [
2070
+ {
2071
+ "type": "null"
2072
+ },
2073
+ {
2074
+ "type": "boolean"
2075
+ },
2076
+ {
2077
+ "type": "number"
2078
+ },
2079
+ {
2080
+ "$ref": "#/$defs/portable-string"
2081
+ },
2082
+ {
2083
+ "type": "array",
2084
+ "items": {
2085
+ "$ref": "#/$defs/portable-json"
2086
+ }
2087
+ },
2088
+ {
2089
+ "type": "object",
2090
+ "propertyNames": {
2091
+ "$ref": "#/$defs/portable-string"
2092
+ },
2093
+ "additionalProperties": {
2094
+ "$ref": "#/$defs/portable-json"
2095
+ }
2096
+ }
2097
+ ]
2098
+ },
2099
+ "portable-string": {
2100
+ "type": "string",
2101
+ "not": {
2102
+ "pattern": "\u0000"
2103
+ }
2104
+ },
2105
+ "projected-member-ref": {
2106
+ "oneOf": [
2107
+ {
2108
+ "$ref": "#/$defs/method-address"
2109
+ },
2110
+ {
2111
+ "$ref": "#/$defs/class-ref"
2112
+ },
2113
+ {
2114
+ "$ref": "#/$defs/function-ref"
2115
+ },
2116
+ {
2117
+ "$ref": "#/$defs/policy-ref"
2118
+ },
2119
+ {
2120
+ "$ref": "#/$defs/view-ref"
2121
+ },
2122
+ {
2123
+ "$ref": "#/$defs/core-ref"
2124
+ }
2125
+ ]
2126
+ },
2127
+ "property-key": {
2128
+ "type": "string",
2129
+ "pattern": "^(?:([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?:class\\.[A-Za-z][A-Za-z0-9_]*\\.property\\.[A-Za-z][A-Za-z0-9_]*)$"
2130
+ },
2131
+ "property-values": {
2132
+ "type": "object",
2133
+ "propertyNames": {
2134
+ "$ref": "#/$defs/property-key"
2135
+ },
2136
+ "additionalProperties": {
2137
+ "$ref": "#/$defs/json-value"
2138
+ }
2139
+ },
2140
+ "revision": {
2141
+ "type": "string",
2142
+ "pattern": "^sha256:[0-9a-f]{64}$"
2143
+ },
2144
+ "state-topology": {
2145
+ "type": "object",
2146
+ "properties": {
2147
+ "initial": {
2148
+ "type": "string",
2149
+ "minLength": 1
2150
+ },
2151
+ "transitions": {
2152
+ "type": "object",
2153
+ "propertyNames": {
2154
+ "type": "string",
2155
+ "minLength": 1
2156
+ },
2157
+ "additionalProperties": {
2158
+ "type": "object",
2159
+ "propertyNames": {
2160
+ "type": "string",
2161
+ "minLength": 1
2162
+ },
2163
+ "additionalProperties": {
2164
+ "type": "string",
2165
+ "minLength": 1
2166
+ }
2167
+ }
2168
+ }
2169
+ },
2170
+ "required": [
2171
+ "initial",
2172
+ "transitions"
2173
+ ],
2174
+ "additionalProperties": false
2175
+ },
2176
+ "undirected-endpoints": {
2177
+ "type": "array",
2178
+ "prefixItems": [
2179
+ {
2180
+ "$ref": "#/$defs/incident-endpoint"
2181
+ },
2182
+ {
2183
+ "$ref": "#/$defs/incident-endpoint"
2184
+ }
2185
+ ],
2186
+ "minItems": 2,
2187
+ "maxItems": 2
2188
+ },
2189
+ "value-location": {
2190
+ "anyOf": [
2191
+ {
2192
+ "type": "boolean"
2193
+ },
2194
+ {
2195
+ "type": "object",
2196
+ "propertyNames": {
2197
+ "enum": [
2198
+ "$comment",
2199
+ "$defs",
2200
+ "$id",
2201
+ "$ref",
2202
+ "$schema",
2203
+ "additionalProperties",
2204
+ "allOf",
2205
+ "anyOf",
2206
+ "const",
2207
+ "contains",
2208
+ "contentEncoding",
2209
+ "contentMediaType",
2210
+ "contentSchema",
2211
+ "default",
2212
+ "dependentRequired",
2213
+ "dependentSchemas",
2214
+ "deprecated",
2215
+ "description",
2216
+ "else",
2217
+ "enum",
2218
+ "examples",
2219
+ "exclusiveMaximum",
2220
+ "exclusiveMinimum",
2221
+ "format",
2222
+ "fullMatch",
2223
+ "if",
2224
+ "items",
2225
+ "maxContains",
2226
+ "maxItems",
2227
+ "maxLength",
2228
+ "maxProperties",
2229
+ "maximum",
2230
+ "minContains",
2231
+ "minItems",
2232
+ "minLength",
2233
+ "minProperties",
2234
+ "minimum",
2235
+ "multipleOf",
2236
+ "not",
2237
+ "oneOf",
2238
+ "pattern",
2239
+ "patternProperties",
2240
+ "prefixItems",
2241
+ "properties",
2242
+ "propertyNames",
2243
+ "readOnly",
2244
+ "required",
2245
+ "then",
2246
+ "title",
2247
+ "type",
2248
+ "unevaluatedItems",
2249
+ "unevaluatedProperties",
2250
+ "uniqueItems",
2251
+ "writeOnly",
2252
+ "x-astrale-path",
2253
+ "x-astrale-value-kind"
2254
+ ]
2255
+ },
2256
+ "properties": {
2257
+ "$id": false,
2258
+ "$ref": {
2259
+ "type": "string"
2260
+ },
2261
+ "enum": {
2262
+ "type": "array",
2263
+ "uniqueItems": true
2264
+ },
2265
+ "fullMatch": {
2266
+ "type": "string"
2267
+ },
2268
+ "pattern": {
2269
+ "type": "string"
2270
+ },
2271
+ "x-astrale-path": {
2272
+ "$ref": "#/$defs/path-annotation"
2273
+ },
2274
+ "additionalProperties": {
2275
+ "$ref": "#/$defs/value-subschema"
2276
+ },
2277
+ "contains": {
2278
+ "$ref": "#/$defs/value-subschema"
2279
+ },
2280
+ "contentSchema": {
2281
+ "$ref": "#/$defs/value-subschema"
2282
+ },
2283
+ "else": {
2284
+ "$ref": "#/$defs/value-subschema"
2285
+ },
2286
+ "if": {
2287
+ "$ref": "#/$defs/value-subschema"
2288
+ },
2289
+ "items": {
2290
+ "$ref": "#/$defs/value-subschema"
2291
+ },
2292
+ "not": {
2293
+ "$ref": "#/$defs/value-subschema"
2294
+ },
2295
+ "propertyNames": {
2296
+ "$ref": "#/$defs/value-subschema"
2297
+ },
2298
+ "then": {
2299
+ "$ref": "#/$defs/value-subschema"
2300
+ },
2301
+ "unevaluatedItems": {
2302
+ "$ref": "#/$defs/value-subschema"
2303
+ },
2304
+ "unevaluatedProperties": {
2305
+ "$ref": "#/$defs/value-subschema"
2306
+ },
2307
+ "allOf": {
2308
+ "type": "array",
2309
+ "items": {
2310
+ "$ref": "#/$defs/value-subschema"
2311
+ }
2312
+ },
2313
+ "anyOf": {
2314
+ "type": "array",
2315
+ "items": {
2316
+ "$ref": "#/$defs/value-subschema"
2317
+ }
2318
+ },
2319
+ "oneOf": {
2320
+ "type": "array",
2321
+ "items": {
2322
+ "$ref": "#/$defs/value-subschema"
2323
+ }
2324
+ },
2325
+ "prefixItems": {
2326
+ "type": "array",
2327
+ "items": {
2328
+ "$ref": "#/$defs/value-subschema"
2329
+ }
2330
+ },
2331
+ "$defs": {
2332
+ "type": "object",
2333
+ "additionalProperties": {
2334
+ "$ref": "#/$defs/value-subschema"
2335
+ }
2336
+ },
2337
+ "dependentSchemas": {
2338
+ "type": "object",
2339
+ "additionalProperties": {
2340
+ "$ref": "#/$defs/value-subschema"
2341
+ }
2342
+ },
2343
+ "patternProperties": {
2344
+ "type": "object",
2345
+ "additionalProperties": {
2346
+ "$ref": "#/$defs/value-subschema"
2347
+ }
2348
+ },
2349
+ "properties": {
2350
+ "type": "object",
2351
+ "additionalProperties": {
2352
+ "$ref": "#/$defs/value-subschema"
2353
+ }
2354
+ }
2355
+ },
2356
+ "if": {
2357
+ "required": [
2358
+ "x-astrale-value-kind"
2359
+ ],
2360
+ "properties": {
2361
+ "x-astrale-value-kind": {
2362
+ "const": "instant"
2363
+ }
2364
+ }
2365
+ },
2366
+ "then": {
2367
+ "required": [
2368
+ "type"
2369
+ ],
2370
+ "properties": {
2371
+ "type": {
2372
+ "const": "string"
2373
+ }
2374
+ }
2375
+ }
2376
+ }
2377
+ ]
2378
+ },
2379
+ "value-schema": {
2380
+ "anyOf": [
2381
+ {
2382
+ "type": "boolean"
2383
+ },
2384
+ {
2385
+ "type": "object",
2386
+ "propertyNames": {
2387
+ "not": {
2388
+ "const": "__proto__"
2389
+ }
2390
+ },
2391
+ "additionalProperties": {
2392
+ "$ref": "#/$defs/json-value"
2393
+ }
2394
+ }
2395
+ ],
2396
+ "description": "A value schema of the dialect https://schemas.astrale.ai/dsl/v1/value-schema. The structure admits any boolean or object; the language admits its keywords.",
2397
+ "allOf": [
2398
+ {
2399
+ "$ref": "https://schemas.astrale.ai/dsl/v1/value-schema"
2400
+ },
2401
+ {
2402
+ "$ref": "#/$defs/value-location"
2403
+ },
2404
+ {
2405
+ "anyOf": [
2406
+ {
2407
+ "type": "boolean"
2408
+ },
2409
+ {
2410
+ "type": "object",
2411
+ "properties": {
2412
+ "$schema": {
2413
+ "const": "https://schemas.astrale.ai/dsl/v1/value-schema"
2414
+ },
2415
+ "x-astrale-value-kind": {
2416
+ "enum": [
2417
+ "instant",
2418
+ "blob"
2419
+ ]
2420
+ }
2421
+ }
2422
+ }
2423
+ ]
2424
+ }
2425
+ ]
2426
+ },
2427
+ "value-subschema": {
2428
+ "allOf": [
2429
+ {
2430
+ "$ref": "#/$defs/value-location"
2431
+ },
2432
+ {
2433
+ "anyOf": [
2434
+ {
2435
+ "type": "boolean"
2436
+ },
2437
+ {
2438
+ "type": "object",
2439
+ "properties": {
2440
+ "$schema": false,
2441
+ "x-astrale-value-kind": {
2442
+ "const": "instant"
2443
+ }
2444
+ }
2445
+ }
2446
+ ]
2447
+ }
2448
+ ]
2449
+ },
2450
+ "view-definition": {
2451
+ "type": "object",
2452
+ "properties": {
2453
+ "ref": {
2454
+ "$ref": "#/$defs/view-ref"
2455
+ },
2456
+ "description": {
2457
+ "$ref": "#/$defs/description"
2458
+ },
2459
+ "target": {
2460
+ "$ref": "#/$defs/view-target"
2461
+ }
2462
+ },
2463
+ "required": [
2464
+ "ref",
2465
+ "target"
2466
+ ],
2467
+ "additionalProperties": false
2468
+ },
2469
+ "view-ref": {
2470
+ "type": "object",
2471
+ "properties": {
2472
+ "origin": {
2473
+ "$ref": "#/$defs/origin"
2474
+ },
2475
+ "kind": {
2476
+ "type": "string",
2477
+ "const": "view"
2478
+ },
2479
+ "name": {
2480
+ "$ref": "#/$defs/name"
2481
+ }
2482
+ },
2483
+ "required": [
2484
+ "origin",
2485
+ "kind",
2486
+ "name"
2487
+ ],
2488
+ "additionalProperties": false
2489
+ },
2490
+ "view-target": {
2491
+ "type": "object",
2492
+ "properties": {
2493
+ "kind": {
2494
+ "type": "string",
2495
+ "const": "domain"
2496
+ }
2497
+ },
2498
+ "required": [
2499
+ "kind"
2500
+ ],
2501
+ "additionalProperties": false,
2502
+ "description": "Every View targets its owning Domain."
2503
+ },
2504
+ "write-policy": {
2505
+ "anyOf": [
2506
+ {
2507
+ "type": "boolean",
2508
+ "const": true
2509
+ },
2510
+ {
2511
+ "$ref": "#/$defs/policy-ref"
2512
+ },
2513
+ {
2514
+ "$ref": "#/$defs/class-rule-check-expr"
2515
+ }
2516
+ ]
2517
+ }
2518
+ }
2519
+ }