@hyperscale0/udl 1.0.0-rc.1 → 1.0.123

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 (234) hide show
  1. package/CHANGELOG.md +5 -211
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +14 -106
  5. package/dist/canonical.d.ts.map +1 -1
  6. package/dist/canonical.js +1 -29
  7. package/dist/canonical.js.map +1 -1
  8. package/dist/diagnostics.d.ts +13 -165
  9. package/dist/diagnostics.d.ts.map +1 -1
  10. package/dist/diagnostics.js +33 -157
  11. package/dist/diagnostics.js.map +1 -1
  12. package/dist/field-value.d.ts +5 -0
  13. package/dist/field-value.d.ts.map +1 -0
  14. package/dist/field-value.js +85 -0
  15. package/dist/field-value.js.map +1 -0
  16. package/dist/finance.d.ts +10 -53
  17. package/dist/finance.d.ts.map +1 -1
  18. package/dist/finance.js +252 -536
  19. package/dist/finance.js.map +1 -1
  20. package/dist/index.d.ts +9 -13
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/json.d.ts +2 -0
  25. package/dist/json.d.ts.map +1 -0
  26. package/dist/json.js +30 -0
  27. package/dist/json.js.map +1 -0
  28. package/dist/limits.d.ts +3 -28
  29. package/dist/limits.d.ts.map +1 -1
  30. package/dist/limits.js +5 -31
  31. package/dist/limits.js.map +1 -1
  32. package/dist/object-contract.d.ts +140 -0
  33. package/dist/object-contract.d.ts.map +1 -0
  34. package/dist/object-contract.js +314 -0
  35. package/dist/object-contract.js.map +1 -0
  36. package/dist/object-semantics-schema.d.ts +5710 -0
  37. package/dist/object-semantics-schema.d.ts.map +1 -0
  38. package/dist/object-semantics-schema.js +119 -0
  39. package/dist/object-semantics-schema.js.map +1 -0
  40. package/dist/object-semantics.d.ts +6 -0
  41. package/dist/object-semantics.d.ts.map +1 -0
  42. package/dist/object-semantics.js +279 -0
  43. package/dist/object-semantics.js.map +1 -0
  44. package/dist/object-structures.d.ts +4 -0
  45. package/dist/object-structures.d.ts.map +1 -0
  46. package/dist/object-structures.js +134 -0
  47. package/dist/object-structures.js.map +1 -0
  48. package/dist/reporting-validation.d.ts +8 -0
  49. package/dist/reporting-validation.d.ts.map +1 -0
  50. package/dist/reporting-validation.js +252 -0
  51. package/dist/reporting-validation.js.map +1 -0
  52. package/dist/reporting.d.ts +477 -0
  53. package/dist/reporting.d.ts.map +1 -0
  54. package/dist/reporting.js +169 -0
  55. package/dist/reporting.js.map +1 -0
  56. package/dist/schema.d.ts +5572 -2710
  57. package/dist/schema.d.ts.map +1 -1
  58. package/dist/schema.js +444 -1121
  59. package/dist/schema.js.map +1 -1
  60. package/dist/validation.d.ts +10 -73
  61. package/dist/validation.d.ts.map +1 -1
  62. package/dist/validation.js +1109 -2569
  63. package/dist/validation.js.map +1 -1
  64. package/docs/assets/brand/manifest.json +30 -0
  65. package/docs/assets/brand/udl-horizontal-white.svg +1 -0
  66. package/docs/assets/brand/udl-horizontal.svg +1 -0
  67. package/docs/assets/brand/udl-stacked-white.svg +1 -0
  68. package/docs/assets/brand/udl-stacked.svg +1 -0
  69. package/docs/assets/udl.svg +11 -0
  70. package/package.json +13 -22
  71. package/spec/README.md +300 -172
  72. package/spec/cars.udl.json +249 -0
  73. package/spec/udl.schema.json +3066 -2242
  74. package/src/canonical.ts +1 -35
  75. package/src/diagnostics.ts +76 -209
  76. package/src/field-value.ts +87 -0
  77. package/src/finance.ts +327 -832
  78. package/src/index.ts +18 -95
  79. package/src/json.ts +34 -0
  80. package/src/limits.ts +5 -31
  81. package/src/object-contract.ts +559 -0
  82. package/src/object-semantics-schema.ts +148 -0
  83. package/src/object-semantics.ts +378 -0
  84. package/src/object-structures.ts +255 -0
  85. package/src/reporting-validation.ts +383 -0
  86. package/src/reporting.ts +178 -0
  87. package/src/schema.ts +510 -1277
  88. package/src/validation.ts +1630 -4545
  89. package/LICENSE +0 -661
  90. package/LICENSING.md +0 -51
  91. package/TRADEMARKS.md +0 -35
  92. package/conformance/README.md +0 -82
  93. package/conformance/evolution/action-contract.expected.json +0 -10
  94. package/conformance/evolution/action-contract.live.udl +0 -44
  95. package/conformance/evolution/action-contract.next.udl +0 -45
  96. package/conformance/evolution/product-identity.expected.json +0 -10
  97. package/conformance/evolution/product-identity.live.udl +0 -55
  98. package/conformance/evolution/product-identity.next.udl +0 -55
  99. package/conformance/evolution/version-required.expected.json +0 -10
  100. package/conformance/evolution/version-required.live.udl +0 -55
  101. package/conformance/evolution/version-required.next.udl +0 -58
  102. package/conformance/invalid/action-without-transition.expected.json +0 -10
  103. package/conformance/invalid/action-without-transition.udl +0 -60
  104. package/conformance/invalid/agent-description-too-long.expected.json +0 -10
  105. package/conformance/invalid/agent-description-too-long.udl +0 -57
  106. package/conformance/invalid/blank-title.expected.json +0 -10
  107. package/conformance/invalid/blank-title.udl +0 -54
  108. package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
  109. package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
  110. package/conformance/invalid/depth-budget.expected.json +0 -10
  111. package/conformance/invalid/depth-budget.udl +0 -49
  112. package/conformance/invalid/duplicate-subject.expected.json +0 -10
  113. package/conformance/invalid/duplicate-subject.udl +0 -230
  114. package/conformance/invalid/forged-effects.expected.json +0 -10
  115. package/conformance/invalid/forged-effects.udl +0 -76
  116. package/conformance/invalid/format-version.expected.json +0 -10
  117. package/conformance/invalid/format-version.udl +0 -54
  118. package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
  119. package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
  120. package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
  121. package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
  122. package/conformance/invalid/invalid-check-duration.expected.json +0 -10
  123. package/conformance/invalid/invalid-check-duration.udl +0 -219
  124. package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
  125. package/conformance/invalid/invalid-dial-anchor.udl +0 -219
  126. package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
  127. package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
  128. package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
  129. package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
  130. package/conformance/invalid/invalid-remainder.expected.json +0 -10
  131. package/conformance/invalid/invalid-remainder.udl +0 -220
  132. package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
  133. package/conformance/invalid/invalid-schema-keyword.udl +0 -220
  134. package/conformance/invalid/invalid-utf8.expected.json +0 -10
  135. package/conformance/invalid/invalid-utf8.udl +0 -1
  136. package/conformance/invalid/malformed-json.expected.json +0 -10
  137. package/conformance/invalid/malformed-json.udl +0 -1
  138. package/conformance/invalid/missing-create-action.expected.json +0 -10
  139. package/conformance/invalid/missing-create-action.udl +0 -48
  140. package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
  141. package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
  142. package/conformance/invalid/missing-exception-contract.expected.json +0 -14
  143. package/conformance/invalid/missing-exception-contract.udl +0 -2523
  144. package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
  145. package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
  146. package/conformance/invalid/not-an-object.expected.json +0 -10
  147. package/conformance/invalid/not-an-object.udl +0 -1
  148. package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
  149. package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
  150. package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
  151. package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
  152. package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
  153. package/conformance/invalid/quote-named-reference-gate.udl +0 -50
  154. package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
  155. package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
  156. package/conformance/invalid/unknown-key.expected.json +0 -10
  157. package/conformance/invalid/unknown-key.udl +0 -55
  158. package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
  159. package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
  160. package/conformance/invalid/unknown-required-field.expected.json +0 -10
  161. package/conformance/invalid/unknown-required-field.udl +0 -220
  162. package/conformance/invalid/unreachable-state.expected.json +0 -10
  163. package/conformance/invalid/unreachable-state.udl +0 -55
  164. package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
  165. package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
  166. package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
  167. package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
  168. package/conformance/valid/agent-description.expected.json +0 -6
  169. package/conformance/valid/agent-description.udl +0 -66
  170. package/conformance/valid/cards.expected.json +0 -6
  171. package/conformance/valid/cards.udl +0 -1579
  172. package/conformance/valid/commerce-escrow.expected.json +0 -6
  173. package/conformance/valid/commerce-escrow.udl +0 -1512
  174. package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
  175. package/conformance/valid/compiled-crowdfunding.udl +0 -1843
  176. package/conformance/valid/compiled-watch-club.expected.json +0 -6
  177. package/conformance/valid/compiled-watch-club.udl +0 -2486
  178. package/conformance/valid/complete-contract.expected.json +0 -6
  179. package/conformance/valid/complete-contract.udl +0 -218
  180. package/conformance/valid/effect-signatures.expected.json +0 -6
  181. package/conformance/valid/effect-signatures.udl +0 -75
  182. package/conformance/valid/hand-edited.expected.json +0 -6
  183. package/conformance/valid/hand-edited.udl +0 -1
  184. package/conformance/valid/insured-car-marketplace.expected.json +0 -6
  185. package/conformance/valid/insured-car-marketplace.udl +0 -1050
  186. package/conformance/valid/insured-travel.expected.json +0 -6
  187. package/conformance/valid/insured-travel.udl +0 -3469
  188. package/conformance/valid/minimal.expected.json +0 -6
  189. package/conformance/valid/minimal.udl +0 -54
  190. package/conformance/valid/protection.expected.json +0 -6
  191. package/conformance/valid/protection.udl +0 -1551
  192. package/conformance/valid/string-escaping.expected.json +0 -6
  193. package/conformance/valid/string-escaping.udl +0 -54
  194. package/dist/check-profiles.d.ts +0 -57
  195. package/dist/check-profiles.d.ts.map +0 -1
  196. package/dist/check-profiles.js +0 -62
  197. package/dist/check-profiles.js.map +0 -1
  198. package/dist/cli.d.ts +0 -3
  199. package/dist/cli.d.ts.map +0 -1
  200. package/dist/cli.js +0 -184
  201. package/dist/cli.js.map +0 -1
  202. package/dist/effects.d.ts +0 -41
  203. package/dist/effects.d.ts.map +0 -1
  204. package/dist/effects.js +0 -110
  205. package/dist/effects.js.map +0 -1
  206. package/dist/evolution.d.ts +0 -120
  207. package/dist/evolution.d.ts.map +0 -1
  208. package/dist/evolution.js +0 -567
  209. package/dist/evolution.js.map +0 -1
  210. package/dist/parser.d.ts +0 -4
  211. package/dist/parser.d.ts.map +0 -1
  212. package/dist/parser.js +0 -44
  213. package/dist/parser.js.map +0 -1
  214. package/docs/README.md +0 -14
  215. package/docs/guide/01-a-document.md +0 -37
  216. package/docs/guide/02-money-steps.md +0 -23
  217. package/docs/guide/03-laws.md +0 -18
  218. package/docs/guide/04-fees-and-remainder.md +0 -15
  219. package/docs/guide/05-checks-updates-dials.md +0 -7
  220. package/docs/guide/06-effects.md +0 -11
  221. package/docs/guide/07-evolution.md +0 -11
  222. package/docs/guide/08-implementing.md +0 -13
  223. package/docs/llms-full.txt +0 -1241
  224. package/docs/llms.txt +0 -14
  225. package/docs/reference/canonical.md +0 -16
  226. package/docs/reference/clauses.md +0 -986
  227. package/docs/reference/cli.md +0 -22
  228. package/docs/reference/diagnostics.md +0 -32
  229. package/skills/udl/SKILL.md +0 -28
  230. package/src/check-profiles.ts +0 -80
  231. package/src/cli.ts +0 -196
  232. package/src/effects.ts +0 -163
  233. package/src/evolution.ts +0 -965
  234. package/src/parser.ts +0 -58
package/LICENSING.md DELETED
@@ -1,51 +0,0 @@
1
- # Licensing
2
-
3
- The code in this repository is Copyright 2026 Hyperscale LLC and is licensed
4
- under the GNU Affero General Public License version 3 only
5
- (`AGPL-3.0-only`). The full text is in [`LICENSE`](./LICENSE).
6
-
7
- ## What the AGPL asks of you
8
-
9
- Two obligations matter in practice.
10
-
11
- **If you distribute a copy in object form**, modified or not, you make its
12
- Corresponding Source available under the same license.
13
-
14
- **If you run a modified copy as a network service**, section 13 applies: the
15
- users interacting with it over the network get an offer of the source of the
16
- version you are running. Running UDL unmodified behind your own service does
17
- not trigger this. Changing the parser, the validator, or the canonical
18
- serializer and then serving that change does.
19
-
20
- Using `@hyperscale0/udl` as a library inside your own program is a combined
21
- work under the AGPL. If that does not fit how you ship, take the commercial
22
- license instead.
23
-
24
- ## Commercial license
25
-
26
- Hyperscale LLC sells a commercial license to organisations that cannot accept
27
- the AGPL, for the usual reasons: a proprietary product that links the library,
28
- a hosted service you will not open, a procurement policy that refuses copyleft.
29
- It grants the same code under ordinary commercial terms with no source
30
- obligation.
31
-
32
- Ask through <https://hyperscale0.ai>.
33
-
34
- ## The license covers code, not marks
35
-
36
- "Hyperscale" and "UDL" are trademarks of Hyperscale LLC. A copyright license
37
- says nothing about trademarks in either direction, so
38
- [`TRADEMARKS.md`](./TRADEMARKS.md) draws that boundary.
39
-
40
- ## The format is not the implementation
41
-
42
- UDL the format is separate from this implementation of it. The JSON Schema in
43
- [`spec/`](./spec) and the conformance cases in [`conformance/`](./conformance)
44
- are data describing a format, and anyone may write their own parser, validator,
45
- or serializer against them, in any language, under any license, without
46
- touching this code.
47
-
48
- What you may then say about it is a trademark question, not a copyright one.
49
- [`TRADEMARKS.md`](./TRADEMARKS.md) has the rule: claim compatibility with a UDL
50
- version only when your implementation passes that version's published
51
- conformance cases unmodified.
package/TRADEMARKS.md DELETED
@@ -1,35 +0,0 @@
1
- # Trademarks
2
-
3
- "Hyperscale" and "UDL" are trademarks of Hyperscale LLC.
4
-
5
- The AGPL covers the code in this repository and nothing else. It grants no
6
- rights to the marks, and it never mentions them: a copyright license says
7
- nothing about trademarks either way. This file draws that boundary so nobody
8
- has to guess where it sits.
9
-
10
- What that means in practice:
11
-
12
- - **Yes.** Say your project uses UDL, reads UDL, or is compatible with UDL.
13
- Say it in your README, your docs, your talk, and your package description.
14
- Fork this repository and keep the notices intact.
15
- - **Yes.** Publish a UDL implementation in another language, and name it in a
16
- way that describes what it does: `udl-rs`, `udl-parser`, `python-udl`.
17
- - **No.** Name your project, company, or product in a way that suggests
18
- Hyperscale LLC published it or endorses it. `@hyperscale0/*` on npm and the
19
- `hyperscale0` GitHub organisation are ours.
20
- - **No.** Use the marks or our logo in a way that implies affiliation,
21
- sponsorship, or certification we have not given.
22
-
23
- ## Claiming compatibility
24
-
25
- An independent implementation may say it "implements UDL version X" or "passes
26
- the UDL conformance suite version X" only while it passes the published
27
- conformance cases for that version, unmodified. The cases in
28
- [`conformance/`](./conformance) are the whole test: no skipped case, no edited
29
- expectation, no local fork of the fixtures.
30
-
31
- That claim is a statement about your implementation, so keep the marks out of
32
- its name and off its logo, and do not present it as endorsement or
33
- certification by Hyperscale LLC. We certify nothing; the suite does.
34
-
35
- If you are unsure, open an issue and ask. Nobody has ever regretted asking.
@@ -1,82 +0,0 @@
1
- # The UDL conformance suite
2
-
3
- Every file here is data. An implementation in any language can run the suite
4
- without importing the TypeScript reference implementation.
5
-
6
- ## Layout
7
-
8
- ```
9
- conformance/
10
- valid/<case>.udl
11
- valid/<case>.expected.json
12
- invalid/<case>.udl
13
- invalid/<case>.expected.json
14
- evolution/<case>.live.udl
15
- evolution/<case>.next.udl
16
- evolution/<case>.expected.json
17
- ```
18
-
19
- The runner fails if either half of a case is missing. An evolution case must
20
- have all three named files.
21
-
22
- ## Expected files
23
-
24
- A valid case:
25
-
26
- ```json
27
- {
28
- "canonical": "minimal.udl",
29
- "digest": "c21d198d69e9d4cadb33aaacf37581bb388e4a8964b7fc284606cfa9f65d35bb",
30
- "summary": "The smallest admitted document.",
31
- "verdict": "valid"
32
- }
33
- ```
34
-
35
- `digest` is lowercase SHA-256 over the canonical UTF-8 bytes. A document that
36
- is already canonical names itself.
37
-
38
- An invalid case:
39
-
40
- ```json
41
- {
42
- "issues": [{ "code": "UDL3001", "path": "$.instruments[0].actions" }],
43
- "summary": "Every instrument declares create.",
44
- "verdict": "invalid"
45
- }
46
- ```
47
-
48
- The runner requires a non-blank `summary`. It never compares messages.
49
-
50
- ## Conformance levels
51
-
52
- An implementation claims the highest level it passes.
53
-
54
- 1. Verdict. Admit every `valid/` document and refuse every `invalid/` document.
55
- 2. Canonical bytes. Serialize every valid document byte for byte as its named
56
- canonical file, including the trailing line feed, and match its digest.
57
- 3. Diagnostics. Report every listed code and path for each invalid document.
58
- The implementation may report extra issues.
59
- 4. Evolution. Admit both documents, then compare the live and next definitions.
60
- Report every listed UDL7xxx code and path. The implementation may report
61
- extra issues.
62
-
63
- ## Path grammar
64
-
65
- Issue paths use `$` for the document root, `.name` for an object member, and
66
- `[n]` for a zero-based array index. Evolution paths use the instrument index
67
- from the live document and continue to the changed member, such as
68
- `$.instruments[3].actions.reconcile`. A direct `diffInstrumentEvolution` call
69
- has no document index, so its paths start at `$.instruments`.
70
-
71
- ## Runner exit rule
72
-
73
- The runner exits 0 only if every case at the claimed level passes. A missing
74
- file, malformed expected file, unexpected verdict, byte mismatch, digest
75
- mismatch, or missing issue pair makes it exit nonzero.
76
-
77
- ## Adding a case
78
-
79
- Start from the smallest admitted document that carries the needed clause.
80
- Change one law where possible. Pin codes and paths, never messages. Valid cases
81
- must keep one example of every target in `udlClauseVocabulary`, including
82
- quote, commit, reconcile, checks, updates, dials, effects, and money clauses.
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL7001",
5
- "path": "$.instruments[0].actions.close"
6
- }
7
- ],
8
- "summary": "Evolution identifies the changed action beneath the previous instrument index.",
9
- "verdict": "invalid"
10
- }
@@ -1,44 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": ["close", "create"],
5
- "actions": {
6
- "close": {
7
- "moves": [],
8
- "steps": [],
9
- "summary": "Close the note."
10
- },
11
- "create": {
12
- "moves": [],
13
- "steps": [],
14
- "summary": "File the note."
15
- }
16
- },
17
- "fields": {
18
- "reference": {
19
- "type": "string"
20
- }
21
- },
22
- "id": "note",
23
- "idPrefix": "note",
24
- "lifecycle": {
25
- "initial": "open",
26
- "states": ["open", "closed"],
27
- "transitions": {
28
- "close": {
29
- "from": ["open"],
30
- "to": "closed"
31
- }
32
- }
33
- },
34
- "required": ["reference"],
35
- "summary": "A note a tenant files and later closes.",
36
- "title": "Note"
37
- }
38
- ],
39
- "product": "minimal",
40
- "subjects": [],
41
- "title": "Minimal",
42
- "udl": 1,
43
- "version": 1
44
- }
@@ -1,45 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": ["close", "create"],
5
- "actions": {
6
- "close": {
7
- "eventName": "note.closed",
8
- "moves": [],
9
- "steps": [],
10
- "summary": "Close the note."
11
- },
12
- "create": {
13
- "moves": [],
14
- "steps": [],
15
- "summary": "File the note."
16
- }
17
- },
18
- "fields": {
19
- "reference": {
20
- "type": "string"
21
- }
22
- },
23
- "id": "note",
24
- "idPrefix": "note",
25
- "lifecycle": {
26
- "initial": "open",
27
- "states": ["open", "closed"],
28
- "transitions": {
29
- "close": {
30
- "from": ["open"],
31
- "to": "closed"
32
- }
33
- }
34
- },
35
- "required": ["reference"],
36
- "summary": "A note a tenant files and later closes.",
37
- "title": "Note"
38
- }
39
- ],
40
- "product": "minimal",
41
- "subjects": [],
42
- "title": "Minimal",
43
- "udl": 1,
44
- "version": 2
45
- }
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL7001",
5
- "path": "$.product"
6
- }
7
- ],
8
- "summary": "Evolution refusal for product id changed from minimal to renamed.",
9
- "verdict": "invalid"
10
- }
@@ -1,55 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "moves": [],
11
- "steps": [],
12
- "summary": "Close the note."
13
- },
14
- "create": {
15
- "moves": [],
16
- "steps": [],
17
- "summary": "File the note."
18
- }
19
- },
20
- "fields": {
21
- "reference": {
22
- "type": "string"
23
- }
24
- },
25
- "id": "note",
26
- "idPrefix": "note",
27
- "lifecycle": {
28
- "initial": "open",
29
- "states": [
30
- "open",
31
- "closed"
32
- ],
33
- "transitions": {
34
- "close": {
35
- "from": [
36
- "open"
37
- ],
38
- "to": "closed"
39
- }
40
- }
41
- },
42
- "required": [
43
- "reference"
44
- ],
45
- "summary": "A note a tenant files and later closes.",
46
- "title": "Note"
47
- }
48
- ],
49
- "product": "minimal",
50
- "subjects": [],
51
- "title": "Minimal",
52
- "udl": 1,
53
- "version": 1
54
- }
55
-
@@ -1,55 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "moves": [],
11
- "steps": [],
12
- "summary": "Close the note."
13
- },
14
- "create": {
15
- "moves": [],
16
- "steps": [],
17
- "summary": "File the note."
18
- }
19
- },
20
- "fields": {
21
- "reference": {
22
- "type": "string"
23
- }
24
- },
25
- "id": "note",
26
- "idPrefix": "note",
27
- "lifecycle": {
28
- "initial": "open",
29
- "states": [
30
- "open",
31
- "closed"
32
- ],
33
- "transitions": {
34
- "close": {
35
- "from": [
36
- "open"
37
- ],
38
- "to": "closed"
39
- }
40
- }
41
- },
42
- "required": [
43
- "reference"
44
- ],
45
- "summary": "A note a tenant files and later closes.",
46
- "title": "Note"
47
- }
48
- ],
49
- "product": "renamed",
50
- "subjects": [],
51
- "title": "Minimal",
52
- "udl": 1,
53
- "version": 1
54
- }
55
-
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL7002",
5
- "path": "$.version"
6
- }
7
- ],
8
- "summary": "Evolution refusal for product definition changed without increasing version 1.",
9
- "verdict": "invalid"
10
- }
@@ -1,55 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "moves": [],
11
- "steps": [],
12
- "summary": "Close the note."
13
- },
14
- "create": {
15
- "moves": [],
16
- "steps": [],
17
- "summary": "File the note."
18
- }
19
- },
20
- "fields": {
21
- "reference": {
22
- "type": "string"
23
- }
24
- },
25
- "id": "note",
26
- "idPrefix": "note",
27
- "lifecycle": {
28
- "initial": "open",
29
- "states": [
30
- "open",
31
- "closed"
32
- ],
33
- "transitions": {
34
- "close": {
35
- "from": [
36
- "open"
37
- ],
38
- "to": "closed"
39
- }
40
- }
41
- },
42
- "required": [
43
- "reference"
44
- ],
45
- "summary": "A note a tenant files and later closes.",
46
- "title": "Note"
47
- }
48
- ],
49
- "product": "minimal",
50
- "subjects": [],
51
- "title": "Minimal",
52
- "udl": 1,
53
- "version": 1
54
- }
55
-
@@ -1,58 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "moves": [],
11
- "steps": [],
12
- "summary": "Close the note."
13
- },
14
- "create": {
15
- "moves": [],
16
- "steps": [],
17
- "summary": "File the note."
18
- }
19
- },
20
- "fields": {
21
- "reference": {
22
- "type": "string"
23
- },
24
- "memo": {
25
- "type": "string"
26
- }
27
- },
28
- "id": "note",
29
- "idPrefix": "note",
30
- "lifecycle": {
31
- "initial": "open",
32
- "states": [
33
- "open",
34
- "closed"
35
- ],
36
- "transitions": {
37
- "close": {
38
- "from": [
39
- "open"
40
- ],
41
- "to": "closed"
42
- }
43
- }
44
- },
45
- "required": [
46
- "reference"
47
- ],
48
- "summary": "A note a tenant files and later closes.",
49
- "title": "Note"
50
- }
51
- ],
52
- "product": "minimal",
53
- "subjects": [],
54
- "title": "Minimal",
55
- "udl": 1,
56
- "version": 1
57
- }
58
-
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL3001",
5
- "path": "$.instruments[0].actions.touch"
6
- }
7
- ],
8
- "summary": "Every action but create moves the instance between declared states.",
9
- "verdict": "invalid"
10
- }
@@ -1,60 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "fields": {
5
- "reference": {
6
- "type": "string"
7
- }
8
- },
9
- "id": "note",
10
- "idPrefix": "note",
11
- "lifecycle": {
12
- "initial": "open",
13
- "states": [
14
- "open",
15
- "closed"
16
- ],
17
- "transitions": {
18
- "close": {
19
- "from": [
20
- "open"
21
- ],
22
- "to": "closed"
23
- }
24
- }
25
- },
26
- "required": [
27
- "reference"
28
- ],
29
- "summary": "A note a tenant files and later closes.",
30
- "title": "Note",
31
- "actionOrder": [
32
- "close",
33
- "create",
34
- "touch"
35
- ],
36
- "actions": {
37
- "close": {
38
- "moves": [],
39
- "steps": [],
40
- "summary": "Close the note."
41
- },
42
- "create": {
43
- "moves": [],
44
- "steps": [],
45
- "summary": "File the note."
46
- },
47
- "touch": {
48
- "moves": [],
49
- "steps": [],
50
- "summary": "Touch the note."
51
- }
52
- }
53
- }
54
- ],
55
- "product": "minimal",
56
- "subjects": [],
57
- "title": "Minimal",
58
- "udl": 1,
59
- "version": 1
60
- }
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL1003",
5
- "path": "$.instruments[0].actions.create.agentDescription"
6
- }
7
- ],
8
- "summary": "Agent-facing prose is capped at 400 characters so a tool list stays inside a client's pick budget.",
9
- "verdict": "invalid"
10
- }
@@ -1,57 +0,0 @@
1
- {
2
- "instruments": [
3
- {
4
- "actionOrder": [
5
- "close",
6
- "create"
7
- ],
8
- "actions": {
9
- "close": {
10
- "agentDescription": "Close a note that has already been filed. Takes the note id and nothing else, and moves no money.",
11
- "moves": [],
12
- "steps": [],
13
- "summary": "Close the note."
14
- },
15
- "create": {
16
- "agentDescription": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
17
- "moves": [],
18
- "steps": [],
19
- "summary": "File the note."
20
- }
21
- },
22
- "agentDescription": "A filed note. Read it to recover the reference an operator recorded, and close it when the matter it tracks is settled.",
23
- "fields": {
24
- "reference": {
25
- "type": "string"
26
- }
27
- },
28
- "id": "note",
29
- "idPrefix": "note",
30
- "lifecycle": {
31
- "initial": "open",
32
- "states": [
33
- "open",
34
- "closed"
35
- ],
36
- "transitions": {
37
- "close": {
38
- "from": [
39
- "open"
40
- ],
41
- "to": "closed"
42
- }
43
- }
44
- },
45
- "required": [
46
- "reference"
47
- ],
48
- "summary": "A note a tenant files and later closes.",
49
- "title": "Note"
50
- }
51
- ],
52
- "product": "minimal",
53
- "subjects": [],
54
- "title": "Minimal",
55
- "udl": 1,
56
- "version": 1
57
- }
@@ -1,10 +0,0 @@
1
- {
2
- "issues": [
3
- {
4
- "code": "UDL1003",
5
- "path": "$.title"
6
- }
7
- ],
8
- "summary": "Whitespace is not a title. JSON Schema cannot express this check, so it lives here.",
9
- "verdict": "invalid"
10
- }