@hyperscale0/udl 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +5 -1
  3. package/conformance/invalid/invalid-journeys.expected.json +3 -19
  4. package/conformance/invalid/invalid-journeys.udl +47 -49
  5. package/conformance/valid/attested.expected.json +6 -0
  6. package/conformance/valid/attested.udl +251 -0
  7. package/conformance/valid/hand-edited.expected.json +1 -1
  8. package/conformance/valid/hand-edited.udl +1 -1
  9. package/conformance/valid/minimal.expected.json +1 -1
  10. package/conformance/valid/minimal.udl +0 -15
  11. package/conformance/valid/vocabulary.expected.json +6 -0
  12. package/conformance/valid/vocabulary.udl +1999 -0
  13. package/dist/allocation.d.ts +60 -0
  14. package/dist/allocation.d.ts.map +1 -0
  15. package/dist/allocation.js +177 -0
  16. package/dist/allocation.js.map +1 -0
  17. package/dist/diagnostics.d.ts +1 -31
  18. package/dist/diagnostics.d.ts.map +1 -1
  19. package/dist/diagnostics.js +0 -30
  20. package/dist/diagnostics.js.map +1 -1
  21. package/dist/distribution.d.ts +15 -0
  22. package/dist/distribution.d.ts.map +1 -0
  23. package/dist/distribution.js +49 -0
  24. package/dist/distribution.js.map +1 -0
  25. package/dist/effects.d.ts +0 -6
  26. package/dist/effects.d.ts.map +1 -1
  27. package/dist/effects.js +84 -22
  28. package/dist/effects.js.map +1 -1
  29. package/dist/evolution.d.ts +12 -0
  30. package/dist/evolution.d.ts.map +1 -1
  31. package/dist/evolution.js +42 -1
  32. package/dist/evolution.js.map +1 -1
  33. package/dist/finance.d.ts +18 -1
  34. package/dist/finance.d.ts.map +1 -1
  35. package/dist/finance.js +158 -27
  36. package/dist/finance.js.map +1 -1
  37. package/dist/index.d.ts +9 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +6 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/instrument-references.d.ts +5 -0
  42. package/dist/instrument-references.d.ts.map +1 -0
  43. package/dist/instrument-references.js +69 -0
  44. package/dist/instrument-references.js.map +1 -0
  45. package/dist/limits.d.ts +3 -3
  46. package/dist/limits.d.ts.map +1 -1
  47. package/dist/limits.js +3 -7
  48. package/dist/limits.js.map +1 -1
  49. package/dist/reference.d.ts +3 -0
  50. package/dist/reference.d.ts.map +1 -0
  51. package/dist/reference.js +28 -0
  52. package/dist/reference.js.map +1 -0
  53. package/dist/schema.d.ts +1232 -83
  54. package/dist/schema.d.ts.map +1 -1
  55. package/dist/schema.js +398 -60
  56. package/dist/schema.js.map +1 -1
  57. package/dist/validation.d.ts +27 -1
  58. package/dist/validation.d.ts.map +1 -1
  59. package/dist/validation.js +327 -187
  60. package/dist/validation.js.map +1 -1
  61. package/dist/vocabulary.d.ts +23 -0
  62. package/dist/vocabulary.d.ts.map +1 -0
  63. package/dist/vocabulary.js +965 -0
  64. package/dist/vocabulary.js.map +1 -0
  65. package/docs/README.md +5 -1
  66. package/docs/funding-custody.md +165 -0
  67. package/docs/guide/09-schedules-and-allocation.md +130 -0
  68. package/docs/llms-full.txt +623 -101
  69. package/docs/llms.txt +1 -1
  70. package/docs/piece-plans.md +148 -0
  71. package/docs/reference/clauses.md +451 -63
  72. package/docs/reference/cli.md +3 -1
  73. package/docs/reference/diagnostics.md +33 -38
  74. package/package.json +5 -6
  75. package/spec/udl.schema.json +1095 -118
  76. package/src/allocation.ts +259 -0
  77. package/src/diagnostics.ts +0 -32
  78. package/src/distribution.ts +61 -0
  79. package/src/effects.ts +116 -22
  80. package/src/evolution.ts +63 -3
  81. package/src/finance.ts +218 -24
  82. package/src/index.ts +31 -3
  83. package/src/instrument-references.ts +98 -0
  84. package/src/limits.ts +3 -7
  85. package/src/reference.ts +31 -0
  86. package/src/schema.ts +417 -66
  87. package/src/validation.ts +452 -243
  88. package/src/vocabulary.ts +1508 -0
@@ -0,0 +1,60 @@
1
+ export type AllocationBucketKey = "principal" | "profit" | "cost" | "fine";
2
+ export interface AllocationBalance {
3
+ readonly key: AllocationBucketKey;
4
+ readonly assessmentId: string;
5
+ readonly destinationAccountId: string;
6
+ readonly amount: bigint;
7
+ readonly consumed: bigint;
8
+ }
9
+ export interface AllocationSlice {
10
+ readonly id: string;
11
+ readonly dueAt: string;
12
+ readonly position: number;
13
+ readonly paid: boolean;
14
+ readonly buckets: readonly AllocationBalance[];
15
+ }
16
+ export interface AllocationInput {
17
+ readonly asOf: string;
18
+ readonly earningRule: "per_slice_on_due" | "on_disbursement";
19
+ readonly mode: "payment" | "payoff" | "write_off";
20
+ readonly payment?: bigint | undefined;
21
+ readonly assessmentId?: string;
22
+ readonly slices: readonly AllocationSlice[];
23
+ }
24
+ export interface AllocationPosting {
25
+ readonly sliceId: string;
26
+ readonly assessmentId: string;
27
+ readonly bucket: AllocationBucketKey;
28
+ readonly destinationAccountId: string;
29
+ readonly amount: bigint;
30
+ }
31
+ export interface AllocationCancellation {
32
+ readonly sliceId: string;
33
+ readonly assessmentId: string;
34
+ readonly bucket: AllocationBucketKey;
35
+ readonly amount: bigint;
36
+ readonly reason: "unearned_profit" | "write_off";
37
+ }
38
+ /** Plan from locked balances. The engine owns identity claims and atomic posting. */
39
+ export declare function planAllocation(contract: {
40
+ readonly buckets: readonly {
41
+ readonly key: AllocationBucketKey;
42
+ }[];
43
+ }, input: AllocationInput): {
44
+ postings: AllocationPosting[];
45
+ cancellations: AllocationCancellation[];
46
+ amount: bigint;
47
+ };
48
+ /** Reverse recorded postings once, without reopening the consumed assessment. */
49
+ export declare function planAllocationRefund(postings: readonly AllocationPosting[], originalPayer: string, refundedAssessments: readonly string[], assessmentId?: string): {
50
+ assessmentId: string;
51
+ amount: bigint;
52
+ sourceAccountId: string;
53
+ destinationAccountId: string;
54
+ }[];
55
+ /** Evaluate a slice gate from the same locked consumption balances used to allocate. */
56
+ export declare function matchesAllocationConsumption(clause: {
57
+ readonly buckets: readonly AllocationBucketKey[];
58
+ readonly check: "settled" | "outstanding";
59
+ }, slice: AllocationSlice): boolean;
60
+ //# sourceMappingURL=allocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocation.d.ts","sourceRoot":"","sources":["../src/allocation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAChD;AACD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,iBAAiB,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAAC;CAClD;AAcD,qFAAqF;AACrF,wBAAgB,cAAc,CAC5B,QAAQ,EAAE;IACR,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAA;KAAE,EAAE,CAAC;CACpE,EACD,KAAK,EAAE,eAAe;cA4HK,iBAAiB,EAAE;;;EAoB/C;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EACtC,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,YAAY,CAAC,EAAE,MAAM;;;;;IA2BtB;AAED,wFAAwF;AACxF,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE;IACN,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAAC;CAC3C,EACD,KAAK,EAAE,eAAe,GACrB,OAAO,CAgBT"}
@@ -0,0 +1,177 @@
1
+ function clock(value) {
2
+ if (!/^\d{4}-\d\d-\d\d(?:T\d\d:\d\d:\d\d(?:\.\d+)?Z)?$/.test(value))
3
+ throw new Error("allocation needs an authoritative UTC time");
4
+ const result = Date.parse(value);
5
+ if (!Number.isFinite(result) ||
6
+ new Date(`${value.slice(0, 10)}T00:00:00Z`).toISOString().slice(0, 10) !==
7
+ value.slice(0, 10))
8
+ throw new Error("invalid allocation time");
9
+ return result;
10
+ }
11
+ /** Plan from locked balances. The engine owns identity claims and atomic posting. */
12
+ export function planAllocation(contract, input) {
13
+ const priority = contract.buckets.map((bucket) => bucket.key);
14
+ const keys = new Set(priority);
15
+ if (priority.length < 2 ||
16
+ priority.length > 4 ||
17
+ keys.size !== priority.length ||
18
+ !keys.has("principal") ||
19
+ !keys.has("profit") ||
20
+ priority.some((key) => !["principal", "profit", "cost", "fine"].includes(key)))
21
+ throw new Error("invalid allocation priority");
22
+ if (!["per_slice_on_due", "on_disbursement"].includes(input.earningRule) ||
23
+ !["payment", "payoff", "write_off"].includes(input.mode))
24
+ throw new Error("invalid earning rule or allocation mode");
25
+ if (!input.slices.length || input.slices.length > 366)
26
+ throw new Error("allocation requires 1 to 366 slices");
27
+ if (input.assessmentId !== undefined &&
28
+ (input.mode !== "payment" || !input.assessmentId))
29
+ throw new Error("assessment selection requires payment mode");
30
+ const asOf = clock(input.asOf);
31
+ if (input.mode === "write_off"
32
+ ? input.payment !== undefined
33
+ : input.payment === undefined
34
+ ? input.mode !== "payoff" && input.assessmentId === undefined
35
+ : typeof input.payment !== "bigint" ||
36
+ input.payment < 0n ||
37
+ (input.mode === "payment" && input.payment === 0n))
38
+ throw new Error("invalid allocation payment");
39
+ const ids = new Set();
40
+ const positions = new Set();
41
+ const assessments = new Set();
42
+ const slices = input.slices
43
+ .map((slice) => {
44
+ const due = clock(slice.dueAt);
45
+ if (!slice.id ||
46
+ ids.has(slice.id) ||
47
+ !Number.isInteger(slice.position) ||
48
+ slice.position < 1 ||
49
+ positions.has(slice.position) ||
50
+ typeof slice.paid !== "boolean" ||
51
+ slice.buckets.length > 256)
52
+ throw new Error("invalid or duplicate slice");
53
+ ids.add(slice.id);
54
+ positions.add(slice.position);
55
+ for (const balance of slice.buckets) {
56
+ if (!keys.has(balance.key) ||
57
+ !balance.assessmentId ||
58
+ assessments.has(balance.assessmentId) ||
59
+ !balance.destinationAccountId ||
60
+ typeof balance.amount !== "bigint" ||
61
+ typeof balance.consumed !== "bigint" ||
62
+ balance.amount < 0n ||
63
+ balance.consumed < 0n ||
64
+ balance.consumed > balance.amount)
65
+ throw new Error("invalid or duplicate assessment balance");
66
+ assessments.add(balance.assessmentId);
67
+ }
68
+ return { slice, due };
69
+ })
70
+ .sort((a, b) => a.due - b.due || a.slice.position - b.slice.position);
71
+ const candidates = [];
72
+ const cancellations = [];
73
+ for (const { slice, due } of slices) {
74
+ const earned = input.earningRule === "on_disbursement" || due <= asOf || slice.paid;
75
+ for (const key of priority) {
76
+ // Multiple assessed charges of one kind have a deterministic identity order.
77
+ const balances = slice.buckets
78
+ .filter((balance) => balance.key === key)
79
+ .sort((a, b) => a.assessmentId < b.assessmentId
80
+ ? -1
81
+ : a.assessmentId > b.assessmentId
82
+ ? 1
83
+ : 0);
84
+ for (const balance of balances) {
85
+ const amount = balance.amount - balance.consumed;
86
+ if (input.assessmentId !== undefined &&
87
+ balance.assessmentId !== input.assessmentId)
88
+ continue;
89
+ if (amount === 0n)
90
+ continue;
91
+ const unearned = key === "profit" && !earned;
92
+ if (input.mode === "write_off" ||
93
+ (input.mode === "payoff" && unearned)) {
94
+ cancellations.push({
95
+ sliceId: slice.id,
96
+ assessmentId: balance.assessmentId,
97
+ bucket: key,
98
+ amount,
99
+ reason: unearned ? "unearned_profit" : "write_off",
100
+ });
101
+ }
102
+ else {
103
+ candidates.push({
104
+ sliceId: slice.id,
105
+ assessmentId: balance.assessmentId,
106
+ bucket: key,
107
+ destinationAccountId: balance.destinationAccountId,
108
+ amount,
109
+ });
110
+ }
111
+ }
112
+ }
113
+ }
114
+ const outstanding = candidates.reduce((sum, row) => sum + row.amount, 0n);
115
+ if (input.mode === "write_off")
116
+ return { postings: [], cancellations, amount: 0n };
117
+ if (input.assessmentId !== undefined && !assessments.has(input.assessmentId))
118
+ throw new Error("assessment is not in the allocation");
119
+ const payment = input.payment ?? outstanding;
120
+ if (input.mode === "payment" && payment === 0n)
121
+ throw new Error("assessment already consumed");
122
+ if (payment > outstanding ||
123
+ (input.mode === "payoff" && payment !== outstanding))
124
+ throw new Error("payment does not match outstanding allocation");
125
+ let remaining = payment;
126
+ const postings = [];
127
+ for (const candidate of candidates) {
128
+ const amount = candidate.amount < remaining ? candidate.amount : remaining;
129
+ if (amount > 0n)
130
+ postings.push({ ...candidate, amount });
131
+ remaining -= amount;
132
+ if (remaining === 0n)
133
+ break;
134
+ }
135
+ return { postings, cancellations, amount: payment };
136
+ }
137
+ /** Reverse recorded postings once, without reopening the consumed assessment. */
138
+ export function planAllocationRefund(postings, originalPayer, refundedAssessments, assessmentId) {
139
+ if (!originalPayer || postings.length > 366 * 256)
140
+ throw new Error("invalid allocation receipt");
141
+ const selected = postings.filter((row) => assessmentId === undefined || row.assessmentId === assessmentId);
142
+ if (!selected.length)
143
+ throw new Error("assessment has no recorded allocation");
144
+ const seen = new Set();
145
+ return selected.map((row) => {
146
+ if (row.amount <= 0n ||
147
+ !row.destinationAccountId ||
148
+ !row.assessmentId ||
149
+ seen.has(row.assessmentId) ||
150
+ refundedAssessments.includes(row.assessmentId))
151
+ throw new Error("assessment already refunded or invalid receipt");
152
+ seen.add(row.assessmentId);
153
+ return {
154
+ assessmentId: row.assessmentId,
155
+ amount: row.amount,
156
+ sourceAccountId: row.destinationAccountId,
157
+ destinationAccountId: originalPayer,
158
+ };
159
+ });
160
+ }
161
+ /** Evaluate a slice gate from the same locked consumption balances used to allocate. */
162
+ export function matchesAllocationConsumption(clause, slice) {
163
+ if (!clause.buckets.length ||
164
+ new Set(clause.buckets).size !== clause.buckets.length)
165
+ throw new Error("allocation gate needs distinct buckets");
166
+ const settled = clause.buckets
167
+ .map((key) => {
168
+ const rows = slice.buckets.filter((bucket) => bucket.key === key);
169
+ for (const row of rows)
170
+ if (row.consumed < 0n || row.consumed > row.amount || row.amount < 0n)
171
+ throw new Error("invalid consumption");
172
+ return rows.every((row) => row.consumed === row.amount);
173
+ })
174
+ .every(Boolean);
175
+ return clause.check === "settled" ? settled : !settled;
176
+ }
177
+ //# sourceMappingURL=allocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocation.js","sourceRoot":"","sources":["../src/allocation.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export type UdlIssueCategory = "invalid_evolution" | "invalid_json" | "invalid_semantics" | "invalid_shape" | "invalid_utf8" | "resource_limit";
2
- export type UdlDiagnosticFamily = "admission" | "document" | "evolution" | "finance" | "gates" | "journey" | "lifecycle" | "schema";
2
+ export type UdlDiagnosticFamily = "admission" | "document" | "evolution" | "finance" | "gates" | "lifecycle" | "schema";
3
3
  declare const diagnosticDefinitions: {
4
4
  readonly UDL1001: {
5
5
  readonly category: "invalid_utf8";
@@ -169,36 +169,6 @@ declare const diagnosticDefinitions: {
169
169
  readonly title: "Unsupported JSON Schema";
170
170
  readonly fix: "Use only the sealed UDL JSON Schema subset.";
171
171
  };
172
- readonly journey_unknown_operation: {
173
- readonly category: "invalid_semantics";
174
- readonly family: "journey";
175
- readonly title: "Journey operation is not in the composition";
176
- readonly fix: "Name an operation in the composition closure.";
177
- };
178
- readonly journey_unknown_example: {
179
- readonly category: "invalid_semantics";
180
- readonly family: "journey";
181
- readonly title: "Journey example does not exist";
182
- readonly fix: "Name an authored example on the journey operation.";
183
- };
184
- readonly journey_invalid_transition: {
185
- readonly category: "invalid_semantics";
186
- readonly family: "journey";
187
- readonly title: "Journey lifecycle transition is invalid";
188
- readonly fix: "Order the steps so each action starts from the state produced by earlier steps.";
189
- };
190
- readonly journey_unbound_reference: {
191
- readonly category: "invalid_semantics";
192
- readonly family: "journey";
193
- readonly title: "Journey reference is unbound or has the wrong kind";
194
- readonly fix: "Bind every reference input to an earlier step that creates the required kind.";
195
- };
196
- readonly journey_duplicate_step_id: {
197
- readonly category: "invalid_semantics";
198
- readonly family: "journey";
199
- readonly title: "Journey step id is duplicated";
200
- readonly fix: "Give every named step in the journey a unique id.";
201
- };
202
172
  readonly UDL7001: {
203
173
  readonly category: "invalid_evolution";
204
174
  readonly family: "evolution";
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -167,36 +167,6 @@ const diagnosticDefinitions = {
167
167
  title: "Unsupported JSON Schema",
168
168
  fix: "Use only the sealed UDL JSON Schema subset.",
169
169
  },
170
- journey_unknown_operation: {
171
- category: "invalid_semantics",
172
- family: "journey",
173
- title: "Journey operation is not in the composition",
174
- fix: "Name an operation in the composition closure.",
175
- },
176
- journey_unknown_example: {
177
- category: "invalid_semantics",
178
- family: "journey",
179
- title: "Journey example does not exist",
180
- fix: "Name an authored example on the journey operation.",
181
- },
182
- journey_invalid_transition: {
183
- category: "invalid_semantics",
184
- family: "journey",
185
- title: "Journey lifecycle transition is invalid",
186
- fix: "Order the steps so each action starts from the state produced by earlier steps.",
187
- },
188
- journey_unbound_reference: {
189
- category: "invalid_semantics",
190
- family: "journey",
191
- title: "Journey reference is unbound or has the wrong kind",
192
- fix: "Bind every reference input to an earlier step that creates the required kind.",
193
- },
194
- journey_duplicate_step_id: {
195
- category: "invalid_semantics",
196
- family: "journey",
197
- title: "Journey step id is duplicated",
198
- fix: "Give every named step in the journey a unique id.",
199
- },
200
170
  UDL7001: {
201
171
  category: "invalid_evolution",
202
172
  family: "evolution",
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { UdlAction } from "./schema.js";
2
+ /** Arithmetic only. The host resolves and consumes the receipt and snapshot under locks. */
3
+ export declare function distributeReceiptAmounts(clause: NonNullable<UdlAction["receiptDistribution"]>, principal: bigint, profit: bigint, tickets: readonly {
4
+ readonly id: string;
5
+ readonly weight: bigint;
6
+ }[]): {
7
+ fee: bigint;
8
+ vat: bigint;
9
+ residual: bigint;
10
+ shares: {
11
+ id: string;
12
+ amount: bigint;
13
+ }[];
14
+ };
15
+ //# sourceMappingURL=distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../src/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,4FAA4F;AAC5F,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,EACrD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE;;;;;;;;EAqDrE"}
@@ -0,0 +1,49 @@
1
+ /** Arithmetic only. The host resolves and consumes the receipt and snapshot under locks. */
2
+ export function distributeReceiptAmounts(clause, principal, profit, tickets) {
3
+ if (principal < 0n || profit < 0n || tickets.length === 0)
4
+ throw new Error("distribution requires nonnegative receipt amounts and tickets");
5
+ if (new Set(tickets.map((ticket) => ticket.id)).size !== tickets.length ||
6
+ tickets.some((ticket) => ticket.weight <= 0n))
7
+ throw new Error("snapshot tickets must have unique identities and positive weights");
8
+ const loss = clause.mode === "loss";
9
+ if (loss && (profit !== 0n || clause.feeBps !== 0 || clause.vatBps !== 0))
10
+ throw new Error("loss allocation contains only principal and no fees");
11
+ const totalWeight = tickets.reduce((sum, ticket) => sum + ticket.weight, 0n);
12
+ const fee = (profit * BigInt(clause.feeBps)) / 10000n;
13
+ const vat = (fee * BigInt(clause.vatBps)) / 10000n;
14
+ const amount = principal + profit - fee - vat;
15
+ if (amount < 0n)
16
+ throw new Error("fee and VAT exceed the receipt");
17
+ const shares = tickets.map((ticket) => ({
18
+ id: ticket.id,
19
+ amount: (amount * ticket.weight) / totalWeight,
20
+ }));
21
+ let residual = amount - shares.reduce((sum, share) => sum + share.amount, 0n);
22
+ if (loss) {
23
+ // A loss cannot be paid to a residual cash beneficiary. Largest remainder
24
+ // assigns every lost minor unit to an investor, with identity breaking ties.
25
+ const ordered = tickets
26
+ .map((ticket, index) => ({
27
+ index,
28
+ id: ticket.id,
29
+ remainder: (amount * ticket.weight) % totalWeight,
30
+ }))
31
+ .sort((a, b) => a.remainder === b.remainder
32
+ ? a.id < b.id
33
+ ? -1
34
+ : a.id > b.id
35
+ ? 1
36
+ : 0
37
+ : a.remainder > b.remainder
38
+ ? -1
39
+ : 1);
40
+ for (const ticket of ordered) {
41
+ if (residual === 0n)
42
+ break;
43
+ shares[ticket.index].amount += 1n;
44
+ residual -= 1n;
45
+ }
46
+ }
47
+ return { fee, vat, residual, shares };
48
+ }
49
+ //# sourceMappingURL=distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../src/distribution.ts"],"names":[],"mappings":"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"}
package/dist/effects.d.ts CHANGED
@@ -29,12 +29,6 @@ interface Movement {
29
29
  readonly bind?: Readonly<Record<string, unknown>>;
30
30
  readonly operation: string;
31
31
  }
32
- /**
33
- * Maps a UDL money operation to the meter and pricing class that owns it.
34
- * Internal-transfer endpoint bindings are product accounts by construction.
35
- * External collection, deposit, and payout operations carry their role in the
36
- * operation family because their remote endpoint is not a UDL account binding.
37
- */
38
32
  export declare function movementClass(move: Movement): UdlMovementClass;
39
33
  /** Derive the ABI effect rows declared by the action-clause vocabulary. */
40
34
  export declare function deriveUdlActionEffects(action: Readonly<Record<string, unknown>>, vocabulary: readonly ActionClauseDescriptor[]): DerivedUdlEffects;
@@ -1 +1 @@
1
- {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}
package/dist/effects.js CHANGED
@@ -15,6 +15,22 @@ function boundPath(move, endpoint) {
15
15
  * External collection, deposit, and payout operations carry their role in the
16
16
  * operation family because their remote endpoint is not a UDL account binding.
17
17
  */
18
+ /**
19
+ * The typed kind of an instance ref a call binding may name. Refs exist only
20
+ * through step and move captures on the same instrument; a capture of a leaf's
21
+ * `accountId` output is an account, every other capture is opaque text.
22
+ */
23
+ function capturedRefKind(instrument, refName) {
24
+ for (const action of Object.values(instrument.actions)) {
25
+ for (const step of [...action.steps, ...action.moves]) {
26
+ const output = step.capture?.[refName];
27
+ if (output !== undefined) {
28
+ return output === "accountId" ? "account" : "text";
29
+ }
30
+ }
31
+ }
32
+ return undefined;
33
+ }
18
34
  export function movementClass(move) {
19
35
  if (move.operation.startsWith("internal_transfer.")) {
20
36
  const source = boundPath(move, "sourceAccountId");
@@ -55,6 +71,11 @@ export function deriveUdlActionEffects(action, vocabulary) {
55
71
  object?.operation !== "internal_transfer.reserve") {
56
72
  continue;
57
73
  }
74
+ if (descriptor.kind === "moves" &&
75
+ ((clause.target === "allocate" && object?.mode === "write_off") ||
76
+ (clause.target === "receiptDistribution" &&
77
+ object?.mode === "loss")))
78
+ continue;
58
79
  const suffix = effectSignatureSuffix(descriptor, object);
59
80
  if (!suffix)
60
81
  continue;
@@ -78,7 +99,24 @@ function actionClauseValue(action, target) {
78
99
  const [head, tail] = target.split(".");
79
100
  if (!head)
80
101
  return undefined;
81
- const value = action[head];
102
+ const value = head === "transitionsRefs"
103
+ ? [
104
+ ...(Array.isArray(action.transitionsRefs)
105
+ ? action.transitionsRefs
106
+ : []),
107
+ ...(Array.isArray(action.requiresRefs)
108
+ ? action.requiresRefs
109
+ : []).flatMap((gate) => {
110
+ const requirement = recordValue(gate);
111
+ const attests = recordValue(requirement?.attests);
112
+ return attests
113
+ ? [{ field: requirement?.field, action: attests.consume }]
114
+ : [];
115
+ }),
116
+ ]
117
+ : action[head];
118
+ if (head === "transitionsRefs" && Array.isArray(value) && value.length === 0)
119
+ return undefined;
82
120
  if (!tail)
83
121
  return value;
84
122
  return recordValue(value)?.[tail];
@@ -131,6 +169,25 @@ function encodeOriginPathKey(originPath) {
131
169
  const parts = originPath.map((seg) => `${seg.length}_${seg}`);
132
170
  return `k_${parts.join("_")}`;
133
171
  }
172
+ function sameEffectSignatures(left, right) {
173
+ const count = (effects) => {
174
+ const counts = new Map();
175
+ for (const eff of effects) {
176
+ const key = `${eff.kind}:${eff.signature}`;
177
+ counts.set(key, (counts.get(key) ?? 0) + 1);
178
+ }
179
+ return counts;
180
+ };
181
+ const leftCounts = count(left);
182
+ const rightCounts = count(right);
183
+ if (leftCounts.size !== rightCounts.size)
184
+ return false;
185
+ for (const [key, n] of leftCounts) {
186
+ if (rightCounts.get(key) !== n)
187
+ return false;
188
+ }
189
+ return true;
190
+ }
134
191
  function expectedLeafEffects(step) {
135
192
  if (step.operation === "internal_transfer.reserve") {
136
193
  const moveClass = movementClass(step);
@@ -558,6 +615,23 @@ export function resolveUdlActionPlans(instrument) {
558
615
  path: parts[1],
559
616
  };
560
617
  }
618
+ if (parts[1] === "refs") {
619
+ if (parts.length !== 3) {
620
+ issues.push(issue("UDL2011", leafPath, `invalid trailing member access on instance ref: ${rawBind}`));
621
+ return undefined;
622
+ }
623
+ const refName = parts[2];
624
+ const captured = capturedRefKind(instrument, refName);
625
+ if (!captured) {
626
+ issues.push(issue("UDL2011", leafPath, `referenced ref ${refName} is not captured by any step or move on instrument`));
627
+ return undefined;
628
+ }
629
+ return {
630
+ binding: { from: "instance", path: `refs.${refName}` },
631
+ kind: captured,
632
+ path: `refs.${refName}`,
633
+ };
634
+ }
561
635
  issues.push(issue("UDL2011", leafPath, `invalid or trailing member access on instance reference: ${rawBind}`));
562
636
  return undefined;
563
637
  }
@@ -749,31 +823,19 @@ export function resolveUdlActionPlans(instrument) {
749
823
  }
750
824
  consumedSources.add(holdKey);
751
825
  }
826
+ // A library leaf is written once and expanded under several callers,
827
+ // so its declaration names the operation's generic class (the class
828
+ // with no bindings). Each expansion then carries the class its
829
+ // resolved bindings select, exactly as an inline move would: a buyer
830
+ // funding escrow is a pay-in, the same leaf paying out is internal.
752
831
  const expectedEffects = expectedLeafEffects(step);
753
- const actualCounts = new Map();
754
- for (const eff of leaf.effects) {
755
- const key = `${eff.kind}:${eff.signature}`;
756
- actualCounts.set(key, (actualCounts.get(key) ?? 0) + 1);
757
- }
758
- const expectedCounts = new Map();
759
- for (const eff of expectedEffects) {
760
- const key = `${eff.kind}:${eff.signature}`;
761
- expectedCounts.set(key, (expectedCounts.get(key) ?? 0) + 1);
762
- }
763
- let effectsMatch = actualCounts.size === expectedCounts.size;
764
- if (effectsMatch) {
765
- for (const [k, count] of actualCounts.entries()) {
766
- if (expectedCounts.get(k) !== count) {
767
- effectsMatch = false;
768
- break;
769
- }
770
- }
771
- }
772
- if (!effectsMatch) {
832
+ const genericEffects = expectedLeafEffects({ ...step, bind: {} });
833
+ if (!sameEffectSignatures(leaf.effects, expectedEffects) &&
834
+ !sameEffectSignatures(leaf.effects, genericEffects)) {
773
835
  issues.push(issue("UDL2013", `${leafPath}.effects`, `declared leaf effects do not match expected effects for operation ${leaf.operation}`));
774
836
  }
775
837
  expandedLeaves.push({
776
- effects: leaf.effects,
838
+ effects: expectedEffects,
777
839
  evidence: leaf.evidence,
778
840
  originPath,
779
841
  step,