@hyperscale0/hsx 1.0.0 → 2.0.1

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 (166) hide show
  1. package/CHANGELOG.md +28 -4
  2. package/README.md +58 -38
  3. package/dist/src/ast.d.ts +4 -2
  4. package/dist/src/ast.d.ts.map +1 -1
  5. package/dist/src/cli.d.ts +1 -1
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/compile.d.ts +8 -2
  8. package/dist/src/compile.d.ts.map +1 -1
  9. package/dist/src/compile.js +8 -1
  10. package/dist/src/compile.js.map +1 -1
  11. package/dist/src/cost.d.ts +3 -1
  12. package/dist/src/cost.d.ts.map +1 -1
  13. package/dist/src/cost.js +124 -94
  14. package/dist/src/cost.js.map +1 -1
  15. package/dist/src/diagnostics.d.ts.map +1 -1
  16. package/dist/src/diagnostics.js +96 -5
  17. package/dist/src/diagnostics.js.map +1 -1
  18. package/dist/src/emit.d.ts +3 -1
  19. package/dist/src/emit.d.ts.map +1 -1
  20. package/dist/src/emit.js +27 -10
  21. package/dist/src/emit.js.map +1 -1
  22. package/dist/src/format.js.map +1 -1
  23. package/dist/src/index.d.ts +2 -2
  24. package/dist/src/index.d.ts.map +1 -1
  25. package/dist/src/index.js +1 -1
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/ir.d.ts.map +1 -1
  28. package/dist/src/lex.d.ts.map +1 -1
  29. package/dist/src/lsp/server.js.map +1 -1
  30. package/dist/src/modules.js +7 -3
  31. package/dist/src/modules.js.map +1 -1
  32. package/dist/src/parse.js +3 -3
  33. package/dist/src/parse.js.map +1 -1
  34. package/dist/src/std-bundle.js +41 -41
  35. package/dist/src/std-bundle.js.map +1 -1
  36. package/dist/src/std-library.js +2 -2
  37. package/dist/src/typecheck.d.ts.map +1 -1
  38. package/dist/src/typecheck.js +948 -157
  39. package/dist/src/typecheck.js.map +1 -1
  40. package/dist/src/version.d.ts +1 -1
  41. package/dist/src/version.js +1 -1
  42. package/docs/README.md +10 -1
  43. package/docs/assets/hsx.svg +18 -0
  44. package/docs/guide/01-first-program.md +1 -1
  45. package/docs/guide/02-money.md +1 -1
  46. package/docs/guide/03-instruments.md +44 -3
  47. package/docs/guide/04-lifecycles.md +18 -3
  48. package/docs/guide/05-fees-and-splits.md +2 -2
  49. package/docs/guide/06-schedules.md +1 -1
  50. package/docs/guide/07-composition.md +8 -2
  51. package/docs/guide/08-writing-a-module.md +13 -2
  52. package/docs/guide/09-cost.md +3 -3
  53. package/docs/guide/10-diagnostics.md +1 -1
  54. package/docs/llms-full.txt +473 -190
  55. package/docs/llms.txt +2 -2
  56. package/docs/playground.md +4 -3
  57. package/docs/reference/cli.md +2 -2
  58. package/docs/reference/diagnostics.md +243 -37
  59. package/docs/reference/grammar.md +2 -2
  60. package/docs/reference/std/advance.md +2 -2
  61. package/docs/reference/std/cancellable_booking.md +10 -10
  62. package/docs/reference/std/captured_payment.md +14 -14
  63. package/docs/reference/std/conditional_disbursement.md +3 -3
  64. package/docs/reference/std/credit_facility.md +2 -2
  65. package/docs/reference/std/held_payment.md +37 -33
  66. package/docs/reference/std/instant_transfer.md +8 -8
  67. package/docs/reference/std/metered.md +2 -2
  68. package/docs/reference/std/pooled_split.md +2 -2
  69. package/docs/reference/std/premium_forward.md +13 -13
  70. package/docs/reference/std/reconciled_payout.md +2 -2
  71. package/docs/reference/std/recurring_collection.md +2 -2
  72. package/docs/reference/std/rotating_pool.md +2 -2
  73. package/docs/reference/std/scheduled.md +18 -18
  74. package/docs/reference/std/security_deposit.md +14 -14
  75. package/docs/reference/std/settlement_batch.md +2 -2
  76. package/docs/reference/std/swap.md +18 -18
  77. package/docs/reference/std/threshold_pool.md +2 -2
  78. package/docs/reference/std/weighted_distribution.md +2 -2
  79. package/docs/reference/types.md +1 -1
  80. package/docs/reference/udl-output.md +1 -1
  81. package/examples/01-first-program/README.md +1 -1
  82. package/examples/01-first-program/tip-jar.hsx +1 -1
  83. package/examples/02-imports-and-archetypes/photo-booth.hsx +1 -1
  84. package/examples/03-diagnostics/corner-shop-fixed.hsx +1 -1
  85. package/examples/03-diagnostics/corner-shop.hsx +1 -1
  86. package/examples/04-complete-product/study-hall.hsx +1 -1
  87. package/examples/05-watch-club/README.md +0 -3
  88. package/examples/05-watch-club/watch-club.hsx +1 -1
  89. package/examples/README.md +35 -4
  90. package/examples/advance/advance.hsx +1 -1
  91. package/examples/advance/advance.udl +16 -11
  92. package/examples/cancellable_booking/cancellable_booking.hsx +1 -1
  93. package/examples/cancellable_booking/cancellable_booking.udl +13 -11
  94. package/examples/captured_payment/captured_payment.hsx +1 -1
  95. package/examples/captured_payment/captured_payment.udl +10 -7
  96. package/examples/conditional_disbursement/conditional_disbursement.hsx +1 -1
  97. package/examples/conditional_disbursement/conditional_disbursement.udl +7 -5
  98. package/examples/cost-table.json +1542 -382
  99. package/examples/credit_facility/credit_facility.hsx +1 -1
  100. package/examples/credit_facility/credit_facility.udl +26 -19
  101. package/examples/held_payment/held_payment.hsx +1 -1
  102. package/examples/held_payment/held_payment.udl +61 -15
  103. package/examples/instant_transfer/instant_transfer.hsx +1 -1
  104. package/examples/instant_transfer/instant_transfer.udl +17 -11
  105. package/examples/metered/metered.hsx +1 -1
  106. package/examples/metered/metered.udl +8 -6
  107. package/examples/pooled_split/pooled_split.hsx +1 -1
  108. package/examples/pooled_split/pooled_split.udl +16 -13
  109. package/examples/premium_forward/premium_forward.hsx +1 -1
  110. package/examples/premium_forward/premium_forward.udl +22 -16
  111. package/examples/reconciled_payout/reconciled_payout.hsx +1 -1
  112. package/examples/reconciled_payout/reconciled_payout.udl +4 -2
  113. package/examples/recurring_collection/recurring_collection.hsx +1 -1
  114. package/examples/recurring_collection/recurring_collection.udl +20 -15
  115. package/examples/rotating_pool/rotating_pool.hsx +1 -1
  116. package/examples/rotating_pool/rotating_pool.udl +92 -82
  117. package/examples/scheduled/scheduled.hsx +1 -1
  118. package/examples/scheduled/scheduled.udl +15 -10
  119. package/examples/security_deposit/security_deposit.hsx +1 -1
  120. package/examples/security_deposit/security_deposit.udl +19 -5
  121. package/examples/settlement_batch/settlement_batch.hsx +1 -1
  122. package/examples/swap/swap.hsx +1 -1
  123. package/examples/swap/swap.udl +34 -28
  124. package/examples/threshold_pool/threshold_pool.hsx +1 -1
  125. package/examples/threshold_pool/threshold_pool.udl +14 -12
  126. package/examples/weighted_distribution/weighted_distribution.hsx +1 -1
  127. package/examples/weighted_distribution/weighted_distribution.udl +6 -4
  128. package/package.json +6 -5
  129. package/skills/hsx/SKILL.md +26 -26
  130. package/src/ast.ts +4 -2
  131. package/src/cli.ts +4 -4
  132. package/src/compile.ts +14 -3
  133. package/src/cost.ts +176 -104
  134. package/src/diagnostics.ts +99 -4
  135. package/src/emit.ts +32 -18
  136. package/src/index.ts +2 -1
  137. package/src/modules.ts +9 -3
  138. package/src/parse.ts +3 -3
  139. package/src/std-bundle.ts +41 -41
  140. package/src/std-library.ts +2 -2
  141. package/src/typecheck.ts +1251 -235
  142. package/src/version.ts +1 -1
  143. package/std/SEMANTICS.md +12 -3
  144. package/std/{settlements → money_flows}/advance.hsx +1 -1
  145. package/std/{settlements → money_flows}/cancellable_booking.hsx +4 -3
  146. package/std/{settlements → money_flows}/captured_payment.hsx +35 -6
  147. package/std/{settlements → money_flows}/conditional_disbursement.hsx +17 -16
  148. package/std/{settlements → money_flows}/credit_facility.hsx +1 -2
  149. package/std/{settlements → money_flows}/held_payment.hsx +61 -25
  150. package/std/money_flows/index.hsx +3 -0
  151. package/std/{settlements → money_flows}/instant_transfer.hsx +2 -3
  152. package/std/{settlements → money_flows}/metered.hsx +1 -1
  153. package/std/{settlements → money_flows}/pooled_split.hsx +3 -3
  154. package/std/{settlements → money_flows}/premium_forward.hsx +22 -23
  155. package/std/{settlements → money_flows}/reconciled_payout.hsx +3 -3
  156. package/std/{settlements → money_flows}/recurring_collection.hsx +1 -1
  157. package/std/{settlements → money_flows}/rotating_pool.hsx +8 -6
  158. package/std/{settlements → money_flows}/scheduled.hsx +22 -27
  159. package/std/{settlements → money_flows}/security_deposit.hsx +38 -14
  160. package/std/{settlements → money_flows}/settlement_batch.hsx +3 -3
  161. package/std/{settlements → money_flows}/swap.hsx +41 -16
  162. package/std/{settlements → money_flows}/threshold_pool.hsx +5 -5
  163. package/std/{settlements → money_flows}/weighted_distribution.hsx +6 -6
  164. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  165. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  166. package/std/settlements/index.hsx +0 -3
@@ -1,5 +1,5 @@
1
1
  program swap_example "Swap example"
2
- import { swap } from "std/settlements"
2
+ import { swap } from "std/money_flows"
3
3
  party buyer: business
4
4
  party seller: business
5
5
  settlement exchange = swap {
@@ -43,8 +43,8 @@
43
43
  "path": "fields.buyerAmount"
44
44
  },
45
45
  "currency": {
46
- "from": "instance",
47
- "path": "fields.currency"
46
+ "from": "const",
47
+ "value": "SAR"
48
48
  },
49
49
  "destinationAccountId": {
50
50
  "from": "instance",
@@ -84,8 +84,8 @@
84
84
  "path": "fields.sellerAmount"
85
85
  },
86
86
  "currency": {
87
- "from": "instance",
88
- "path": "fields.currency"
87
+ "from": "const",
88
+ "value": "SAR"
89
89
  },
90
90
  "destinationAccountId": {
91
91
  "from": "instance",
@@ -131,8 +131,8 @@
131
131
  {
132
132
  "bind": {
133
133
  "currency": {
134
- "from": "instance",
135
- "path": "fields.currency"
134
+ "from": "const",
135
+ "value": "SAR"
136
136
  },
137
137
  "owner.id": {
138
138
  "from": "instance",
@@ -160,7 +160,7 @@
160
160
  "summary": "Create a exchange atomic trade"
161
161
  },
162
162
  "dispute": {
163
- "agentDescription": "Claw back a released trade inside its dispute window. Both cross-payment reservations void and both principals return from escrow in one batch. The trade must be released and the clawback moment must not have passed. Either trading party may call it.",
163
+ "agentDescription": "Claw back a released trade inside its dispute window. Both cross-payment reservations void and both principals return from escrow in one batch. The trade must be released and the clawback moment must not have passed. The dispute port's declared parties may call it.",
164
164
  "deadline": {
165
165
  "field": "clawbackAt"
166
166
  },
@@ -232,8 +232,8 @@
232
232
  "path": "fields.buyerAmount"
233
233
  },
234
234
  "currency": {
235
- "from": "instance",
236
- "path": "fields.currency"
235
+ "from": "const",
236
+ "value": "SAR"
237
237
  },
238
238
  "destinationAccountId": {
239
239
  "from": "instance",
@@ -277,8 +277,8 @@
277
277
  "path": "fields.sellerAmount"
278
278
  },
279
279
  "currency": {
280
- "from": "instance",
281
- "path": "fields.currency"
280
+ "from": "const",
281
+ "value": "SAR"
282
282
  },
283
283
  "destinationAccountId": {
284
284
  "from": "instance",
@@ -356,8 +356,8 @@
356
356
  "path": "fields.buyerAmount"
357
357
  },
358
358
  "currency": {
359
- "from": "instance",
360
- "path": "fields.currency"
359
+ "from": "const",
360
+ "value": "SAR"
361
361
  },
362
362
  "destinationAccountId": {
363
363
  "from": "instance",
@@ -397,8 +397,8 @@
397
397
  "path": "fields.sellerAmount"
398
398
  },
399
399
  "currency": {
400
- "from": "instance",
401
- "path": "fields.currency"
400
+ "from": "const",
401
+ "value": "SAR"
402
402
  },
403
403
  "destinationAccountId": {
404
404
  "from": "instance",
@@ -438,8 +438,8 @@
438
438
  "path": "fields.buyerFee"
439
439
  },
440
440
  "currency": {
441
- "from": "instance",
442
- "path": "fields.currency"
441
+ "from": "const",
442
+ "value": "SAR"
443
443
  },
444
444
  "destinationAccountId": {
445
445
  "from": "instance",
@@ -479,8 +479,8 @@
479
479
  "path": "fields.sellerFee"
480
480
  },
481
481
  "currency": {
482
- "from": "instance",
483
- "path": "fields.currency"
482
+ "from": "const",
483
+ "value": "SAR"
484
484
  },
485
485
  "destinationAccountId": {
486
486
  "from": "instance",
@@ -515,6 +515,7 @@
515
515
  }
516
516
  ],
517
517
  "publicAction": "fundExchange",
518
+ "sandboxFailurePoint": "funding",
518
519
  "steps": [],
519
520
  "summary": "Fund both trade sides and collect on-top fees atomically"
520
521
  },
@@ -566,7 +567,7 @@
566
567
  "summary": "Post both trade reservations when the clawback window matures"
567
568
  },
568
569
  "release": {
569
- "agentDescription": "Reserve each side's principal for the other side and start the dispute window. The trade must be funded. Money is reserved, not settled. It posts on its own when the window matures, and dispute unwinds it before then. Either trading party may call it.",
570
+ "agentDescription": "Reserve each side's principal for the other side and start the dispute window. The trade must be funded. Money is reserved, not settled. It posts on its own when the window matures, and dispute unwinds it before then. The release port's declared parties may call it.",
570
571
  "effects": {
571
572
  "decides": [
572
573
  {
@@ -603,8 +604,8 @@
603
604
  "path": "fields.buyerAmount"
604
605
  },
605
606
  "currency": {
606
- "from": "instance",
607
- "path": "fields.currency"
607
+ "from": "const",
608
+ "value": "SAR"
608
609
  },
609
610
  "destinationAccountId": {
610
611
  "from": "instance",
@@ -648,8 +649,8 @@
648
649
  "path": "fields.sellerAmount"
649
650
  },
650
651
  "currency": {
651
- "from": "instance",
652
- "path": "fields.currency"
652
+ "from": "const",
653
+ "value": "SAR"
653
654
  },
654
655
  "destinationAccountId": {
655
656
  "from": "instance",
@@ -694,6 +695,7 @@
694
695
  ]
695
696
  },
696
697
  "publicAction": "releaseExchange",
698
+ "sandboxFailurePoint": "release",
697
699
  "setsAt": {
698
700
  "field": "clawbackAt",
699
701
  "offset": "P7D"
@@ -744,12 +746,14 @@
744
746
  "buyerAmount": {
745
747
  "description": "Side A amount in SAR minor units, held against the whole trade",
746
748
  "pattern": "^[1-9][0-9]{0,17}$",
747
- "type": "string"
749
+ "type": "string",
750
+ "x-hyperscale-currency": "SAR"
748
751
  },
749
752
  "buyerFee": {
750
753
  "description": "Immutable exact buyer service fee in SAR minor units",
751
754
  "pattern": "^[1-9][0-9]{0,17}$",
752
- "type": "string"
755
+ "type": "string",
756
+ "x-hyperscale-currency": "SAR"
753
757
  },
754
758
  "clawbackAt": {
755
759
  "description": "Machine-owned end of the P7D whole-trade dispute window",
@@ -790,12 +794,14 @@
790
794
  "sellerAmount": {
791
795
  "description": "Side B amount in SAR minor units, held against the whole trade",
792
796
  "pattern": "^[1-9][0-9]{0,17}$",
793
- "type": "string"
797
+ "type": "string",
798
+ "x-hyperscale-currency": "SAR"
794
799
  },
795
800
  "sellerFee": {
796
801
  "description": "Immutable exact seller service fee in SAR minor units",
797
802
  "pattern": "^[1-9][0-9]{0,17}$",
798
- "type": "string"
803
+ "type": "string",
804
+ "x-hyperscale-currency": "SAR"
799
805
  }
800
806
  },
801
807
  "id": "exchange",
@@ -1,5 +1,5 @@
1
1
  program capital_pool_example "Capital pool example"
2
- import { threshold_pool } from "std/settlements"
2
+ import { threshold_pool } from "std/money_flows"
3
3
  party contributor: person
4
4
  party company: business
5
5
  settlement round = threshold_pool {
@@ -173,7 +173,8 @@
173
173
  "targetAmount": {
174
174
  "description": "Funding target in SAR minor units",
175
175
  "pattern": "^[1-9][0-9]{0,17}$",
176
- "type": "string"
176
+ "type": "string",
177
+ "x-hyperscale-currency": "SAR"
177
178
  }
178
179
  },
179
180
  "id": "round",
@@ -252,8 +253,8 @@
252
253
  "path": "fields.amount"
253
254
  },
254
255
  "currency": {
255
- "from": "instance",
256
- "path": "fields.currency"
256
+ "from": "const",
257
+ "value": "SAR"
257
258
  },
258
259
  "destinationAccountId": {
259
260
  "from": "instance",
@@ -327,8 +328,8 @@
327
328
  "path": "fields.amount"
328
329
  },
329
330
  "currency": {
330
- "from": "instance",
331
- "path": "fields.currency"
331
+ "from": "const",
332
+ "value": "SAR"
332
333
  },
333
334
  "destinationAccountId": {
334
335
  "from": "instance",
@@ -402,8 +403,8 @@
402
403
  "path": "fields.amount"
403
404
  },
404
405
  "currency": {
405
- "from": "instance",
406
- "path": "fields.currency"
406
+ "from": "const",
407
+ "value": "SAR"
407
408
  },
408
409
  "destinationAccountId": {
409
410
  "from": "instance",
@@ -466,8 +467,8 @@
466
467
  {
467
468
  "bind": {
468
469
  "currency": {
469
- "from": "instance",
470
- "path": "fields.currency"
470
+ "from": "const",
471
+ "value": "SAR"
471
472
  },
472
473
  "owner.id": {
473
474
  "from": "instance",
@@ -518,8 +519,8 @@
518
519
  "path": "fields.amount"
519
520
  },
520
521
  "currency": {
521
- "from": "instance",
522
- "path": "fields.currency"
522
+ "from": "const",
523
+ "value": "SAR"
523
524
  },
524
525
  "destinationAccountId": {
525
526
  "from": "instance",
@@ -576,7 +577,8 @@
576
577
  "amount": {
577
578
  "description": "One whole commitment amount",
578
579
  "pattern": "^[1-9][0-9]{0,17}$",
579
- "type": "string"
580
+ "type": "string",
581
+ "x-hyperscale-currency": "SAR"
580
582
  },
581
583
  "companyAccountId": {
582
584
  "description": "The company account",
@@ -1,5 +1,5 @@
1
1
  program weighted_distribution_example "Weighted distribution example"
2
- import { weighted_distribution } from "std/settlements"
2
+ import { weighted_distribution } from "std/money_flows"
3
3
  party distribution_source: business
4
4
  party recipient: business
5
5
  settlement proceeds = weighted_distribution {
@@ -77,7 +77,8 @@
77
77
  "distributableAmount": {
78
78
  "description": "Distribution pool in SAR minor units",
79
79
  "pattern": "^[1-9][0-9]{0,17}$",
80
- "type": "string"
80
+ "type": "string",
81
+ "x-hyperscale-currency": "SAR"
81
82
  },
82
83
  "distributionSourceAccountId": {
83
84
  "description": "The distribution source account",
@@ -202,8 +203,8 @@
202
203
  "path": "refs.payoutShare"
203
204
  },
204
205
  "currency": {
205
- "from": "instance",
206
- "path": "fields.currency"
206
+ "from": "const",
207
+ "value": "SAR"
207
208
  },
208
209
  "destinationAccountId": {
209
210
  "from": "instance",
@@ -278,7 +279,8 @@
278
279
  "entitlementWeight": {
279
280
  "description": "Stored non-negative entitlement weight",
280
281
  "pattern": "^[1-9][0-9]{0,17}$",
281
- "type": "string"
282
+ "type": "string",
283
+ "x-hyperscale-currency": "SAR"
282
284
  },
283
285
  "proceedsId": {
284
286
  "description": "The exact proceeds",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperscale0/hsx",
3
- "version": "1.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "The strictly typed HSX language: compile total financial programs into canonical UDL.",
5
5
  "keywords": [
6
6
  "hsx",
@@ -85,15 +85,16 @@
85
85
  "typecheck": "tsc -p tsconfig.json"
86
86
  },
87
87
  "dependencies": {
88
- "@hyperscale0/udl": "1.0.0"
88
+ "@hyperscale0/udl": "2.0.1"
89
89
  },
90
90
  "devDependencies": {
91
- "@types/bun": "1.4.0",
92
- "typescript": "6.0.3"
91
+ "bun-types": "1.4.2",
92
+ "typescript": "7.0.2"
93
93
  },
94
94
  "contributors": [
95
95
  "Meshael AlBakaawi",
96
96
  "Amir Ayub",
97
97
  "Sara AlBakaawi"
98
- ]
98
+ ],
99
+ "gitHead": "c675a558defe426bd3d349934fb4f83d211878c9"
99
100
  }
@@ -5,15 +5,15 @@ description: Write, review, and repair HSX programs that compile financial-produ
5
5
 
6
6
  # Write HSX
7
7
 
8
- Use this skill when a task creates or changes an `.hsx` program, chooses a standard-library settlement form, explains an HSX diagnostic, or reviews authored money rules. Do not use it to hand-edit canonical UDL or runtime state.
8
+ Use this skill when a task creates or changes an `.hsx` program, chooses a money flow from the money flows library (open/hsx/std), explains an HSX diagnostic, or reviews authored money rules. Do not use it to hand-edit canonical UDL or runtime state.
9
9
 
10
10
  ## Program shape
11
11
 
12
- One file declares one `program`. Declare parties and assets before using them. Import standard-library instruments from `std/settlements`. Apply each selected instrument as a `settlement`, and declare every decision port it names. A program may also declare general instruments and subjects.
12
+ One file declares one `program`. Declare parties and assets before using them. Import money flows from `std/money_flows`. Apply each selected instrument as a `settlement`, and declare every decision port it names. A program may also declare general instruments and subjects.
13
13
 
14
- Start with [the first-program guide](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/01-first-program.md). Read the generated [grammar](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/grammar.md), [types](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/types.md), and [standard-library pages](https://github.com/hyperscale0/hyperscale-hsx/tree/main/docs/reference/std) for the exact surface.
14
+ Start with [the first-program guide](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/01-first-program.md). Read the generated [grammar](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/grammar.md), [types](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/reference/types.md), and [money flows reference](https://github.com/hyperscale0/hyperscale-hsx/tree/main/docs/reference/std) for the exact surface.
15
15
 
16
- ## Choose a standard instrument
16
+ ## Choose a money flow
17
17
 
18
18
  Choose the module whose lifecycle and money path already match the product. Do not copy its emitted mechanics into a custom instrument.
19
19
 
@@ -35,7 +35,7 @@ Choose the module whose lifecycle and money path already match the product. Do n
35
35
  - `settlement_batch` closes, calculates, approves, instructs, acknowledges, and reconciles a batch.
36
36
  - `swap` exchanges two independently typed sides.
37
37
 
38
- The standard library forms are demonstrated below. The marker before each program lets the repository test read the module list from disk and compile one matching example per module.
38
+ The money flows are demonstrated below. The marker before each program lets the repository test read the module list from disk and compile one matching example per module.
39
39
 
40
40
  ## Diagnostic loop
41
41
 
@@ -54,13 +54,13 @@ Run `hsx check` after each coherent edit. Read the first error code, open the [d
54
54
 
55
55
  The [money](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/02-money.md), [fees and splits](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/05-fees-and-splits.md), [schedules](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/06-schedules.md), and [cost](https://github.com/hyperscale0/hyperscale-hsx/blob/main/docs/guide/09-cost.md) chapters explain these rules.
56
56
 
57
- ## Standard-library witnesses
57
+ ## Money flow witnesses
58
58
 
59
59
  <!-- hsx-brick: advance -->
60
60
 
61
61
  ```hsx
62
62
  program advance_example "Advance example"
63
- import { advance } from "std/settlements"
63
+ import { advance } from "std/money_flows"
64
64
  party funder: business
65
65
  party recipient: business
66
66
  settlement advance_payment = advance {
@@ -78,7 +78,7 @@ settlement advance_payment = advance {
78
78
 
79
79
  ```hsx
80
80
  program cancellable_booking_example "Cancellable booking example"
81
- import { cancellable_booking } from "std/settlements"
81
+ import { cancellable_booking } from "std/money_flows"
82
82
  party guest: person
83
83
  party studio: business
84
84
  settlement studio_session = cancellable_booking {
@@ -97,7 +97,7 @@ settlement studio_session = cancellable_booking {
97
97
 
98
98
  ```hsx
99
99
  program captured_payment_example "Captured payment example"
100
- import { captured_payment } from "std/settlements"
100
+ import { captured_payment } from "std/money_flows"
101
101
  party payer: person
102
102
  party payee: business
103
103
  settlement card_payment = captured_payment {
@@ -123,7 +123,7 @@ port reverse_capture {
123
123
 
124
124
  ```hsx
125
125
  program conditional_disbursement_example "Conditional disbursement example"
126
- import { conditional_disbursement } from "std/settlements"
126
+ import { conditional_disbursement } from "std/money_flows"
127
127
  party source: business
128
128
  party claimant: person
129
129
  settlement claim_payment = conditional_disbursement {
@@ -145,7 +145,7 @@ port approve_claim {
145
145
 
146
146
  ```hsx
147
147
  program credit_facility_example "Credit facility example"
148
- import { credit_facility, scheduled } from "std/settlements"
148
+ import { credit_facility, scheduled } from "std/money_flows"
149
149
  party lender: business
150
150
  party borrower: business
151
151
  party draw_destination: business
@@ -177,7 +177,7 @@ settlement facility = credit_facility {
177
177
 
178
178
  ```hsx
179
179
  program deposit_example "Deposit example"
180
- import { security_deposit } from "std/settlements"
180
+ import { security_deposit } from "std/money_flows"
181
181
  party renter: person
182
182
  party owner: business
183
183
  settlement security_deposit = security_deposit {
@@ -203,7 +203,7 @@ port return_deposit { allowed: [owner] }
203
203
 
204
204
  ```hsx
205
205
  program capital_pool_example "Capital pool example"
206
- import { threshold_pool } from "std/settlements"
206
+ import { threshold_pool } from "std/money_flows"
207
207
  party contributor: person
208
208
  party company: business
209
209
  settlement round = threshold_pool {
@@ -224,7 +224,7 @@ settlement round = threshold_pool {
224
224
 
225
225
  ```hsx
226
226
  program held_payment_example "Held payment example"
227
- import { held_payment } from "std/settlements"
227
+ import { held_payment } from "std/money_flows"
228
228
  party buyer: person
229
229
  party seller: business
230
230
  settlement sale = held_payment {
@@ -242,7 +242,7 @@ port confirm_delivery { allowed: [buyer] }
242
242
 
243
243
  ```hsx
244
244
  program instant_transfer_example "Instant transfer example"
245
- import { instant_transfer } from "std/settlements"
245
+ import { instant_transfer } from "std/money_flows"
246
246
  party customer: person
247
247
  party merchant: business
248
248
  settlement transfer = instant_transfer {
@@ -263,7 +263,7 @@ settlement transfer = instant_transfer {
263
263
 
264
264
  ```hsx
265
265
  program metered_example "Metered example"
266
- import { metered } from "std/settlements"
266
+ import { metered } from "std/money_flows"
267
267
  party customer: business
268
268
  party provider: business
269
269
  settlement usage = metered {
@@ -281,7 +281,7 @@ settlement usage = metered {
281
281
 
282
282
  ```hsx
283
283
  program pooled_split_example "Pooled split example"
284
- import { pooled_split } from "std/settlements"
284
+ import { pooled_split } from "std/money_flows"
285
285
  party payer: business
286
286
  party first_recipient: business
287
287
  party second_recipient: business
@@ -301,7 +301,7 @@ settlement pool = pooled_split {
301
301
 
302
302
  ```hsx
303
303
  program premium_forward_example "Premium forward example"
304
- import { premium_forward } from "std/settlements"
304
+ import { premium_forward } from "std/money_flows"
305
305
  party policyholder: person
306
306
  party carrier: business
307
307
  settlement premium = premium_forward {
@@ -325,7 +325,7 @@ port record_endorsement {
325
325
 
326
326
  ```hsx
327
327
  program reconciled_payout_example "Reconciled payout example"
328
- import { reconciled_payout } from "std/settlements"
328
+ import { reconciled_payout } from "std/money_flows"
329
329
  party treasury: business
330
330
  party supplier: business
331
331
  settlement supplier_payout = reconciled_payout {
@@ -343,7 +343,7 @@ settlement supplier_payout = reconciled_payout {
343
343
 
344
344
  ```hsx
345
345
  program recurring_collection_example "Recurring collection example"
346
- import { recurring_collection, scheduled } from "std/settlements"
346
+ import { recurring_collection, scheduled } from "std/money_flows"
347
347
  party debtor: person
348
348
  party repayment_source: business
349
349
  party recipient: business
@@ -369,7 +369,7 @@ port mandate_evidence {
369
369
 
370
370
  ```hsx
371
371
  program rotating_pool_example "Rotating pool example"
372
- import { rotating_pool } from "std/settlements"
372
+ import { rotating_pool } from "std/money_flows"
373
373
  party member_a: person
374
374
  party member_b: person
375
375
  party member_c: person
@@ -392,7 +392,7 @@ settlement pool = rotating_pool {
392
392
 
393
393
  ```hsx
394
394
  program scheduled_example "Scheduled example"
395
- import { scheduled } from "std/settlements"
395
+ import { scheduled } from "std/money_flows"
396
396
  party payer: business
397
397
  party payee: business
398
398
  settlement installments = scheduled {
@@ -409,7 +409,7 @@ settlement installments = scheduled {
409
409
 
410
410
  ```hsx
411
411
  program settlement_batch_example "Settlement batch example"
412
- import { settlement_batch } from "std/settlements"
412
+ import { settlement_batch } from "std/money_flows"
413
413
  party settlement_account: business
414
414
  party payout_destination: business
415
415
  settlement batch = settlement_batch {
@@ -433,7 +433,7 @@ port acknowledge_payout {
433
433
 
434
434
  ```hsx
435
435
  program swap_example "Swap example"
436
- import { swap } from "std/settlements"
436
+ import { swap } from "std/money_flows"
437
437
  party buyer: business
438
438
  party seller: business
439
439
  settlement exchange = swap {
@@ -457,7 +457,7 @@ port dispute_exchange { allowed: [buyer, seller] }
457
457
 
458
458
  ```hsx
459
459
  program weighted_distribution_example "Weighted distribution example"
460
- import { weighted_distribution } from "std/settlements"
460
+ import { weighted_distribution } from "std/money_flows"
461
461
  party distribution_source: business
462
462
  party recipient: business
463
463
  settlement proceeds = weighted_distribution {
@@ -480,4 +480,4 @@ port snapshot_entitlements {
480
480
 
481
481
  ## Output boundary
482
482
 
483
- Use `compile` or the CLI to obtain canonical UDL, the origin map, and the cost manifest. The engine reads UDL and never HSX. When a task needs direct UDL work, use the UDL skill instead.
483
+ Use `compile` or the Hyperscale CLI to obtain canonical UDL, the origin map, and the cost manifest. The engine reads UDL and never HSX. When a task needs direct UDL work, use the UDL skill instead.
package/src/ast.ts CHANGED
@@ -268,6 +268,8 @@ export type Expr =
268
268
  * and `on_cancel(funded) { ... }` (key + qualifiers + block value).
269
269
  */
270
270
  export interface Entry {
271
+ /** Port dependencies retained through compile-time selection and substitution. */
272
+ readonly conditionPorts?: readonly string[];
271
273
  /** `for item in bound { ... }`, expanded before binding or UDL lowering. */
272
274
  readonly iteration?: {
273
275
  readonly binding: IdentExpr;
@@ -305,7 +307,7 @@ export interface ExposeDecl {
305
307
  readonly span: Span;
306
308
  }
307
309
 
308
- /** `import { held_payment } from "std/settlements"`. */
310
+ /** `import { held_payment } from "std/money_flows"`. */
309
311
  export interface ImportDecl {
310
312
  readonly from: StringExpr;
311
313
  readonly kind: "import";
@@ -347,7 +349,7 @@ export interface PortDecl {
347
349
  readonly span: Span;
348
350
  }
349
351
 
350
- /** `module std.settlements` gives a file its importable module name. */
352
+ /** `module std.money_flows` gives a file its importable module name. */
351
353
  export interface ModuleDecl {
352
354
  readonly kind: "module";
353
355
  readonly name: PathExpr;
package/src/cli.ts CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { fileURLToPath } from "node:url";
14
14
  import { compile, type CompileResult } from "./compile.ts";
15
- import type { UdlCostManifest, UdlCostTable } from "./cost.ts";
15
+ import type { UdlCostManifest, UdlCostTables } from "./cost.ts";
16
16
  import { hsxDiagnostics } from "./diagnostics.ts";
17
17
  import { format } from "./format.ts";
18
18
  import { startLspServer } from "./lsp/server.ts";
@@ -124,7 +124,7 @@ export async function runCli(argv: readonly string[], io: Io): Promise<number> {
124
124
  return OK;
125
125
  }
126
126
 
127
- let costTable: UdlCostTable;
127
+ let costTable: UdlCostTables;
128
128
  try {
129
129
  costTable = await readDefaultCostTable(io);
130
130
  } catch (cause) {
@@ -300,7 +300,7 @@ async function writeOutput(
300
300
  return OK;
301
301
  }
302
302
 
303
- async function readDefaultCostTable(io: Io): Promise<UdlCostTable> {
303
+ async function readDefaultCostTable(io: Io): Promise<UdlCostTables> {
304
304
  const candidates = [
305
305
  fileURLToPath(new URL("../examples/cost-table.json", import.meta.url)),
306
306
  fileURLToPath(new URL("../../examples/cost-table.json", import.meta.url)),
@@ -308,7 +308,7 @@ async function readDefaultCostTable(io: Io): Promise<UdlCostTable> {
308
308
  let lastError: unknown;
309
309
  for (const path of candidates) {
310
310
  try {
311
- return JSON.parse(await io.readFile(path)) as UdlCostTable;
311
+ return JSON.parse(await io.readFile(path)) as UdlCostTables;
312
312
  } catch (cause) {
313
313
  lastError = cause;
314
314
  }
package/src/compile.ts CHANGED
@@ -16,7 +16,7 @@ import { lineColIn, lineIndex } from "./ast.ts";
16
16
  import {
17
17
  buildCostManifest,
18
18
  type UdlCostManifest,
19
- type UdlCostTable,
19
+ type UdlCostTables,
20
20
  } from "./cost.ts";
21
21
  import { lowerGeneralProgram, type OriginMapEntry } from "./emit.ts";
22
22
  import {
@@ -41,6 +41,8 @@ export interface CompileDiagnostic {
41
41
  readonly message: string;
42
42
  /** Source offsets in UTF-16 code units, matching parser and checker spans. */
43
43
  readonly span: { readonly end: number; readonly start: number };
44
+ /** UTF-8 byte span in root source, omitted when referring to an imported module. */
45
+ readonly byteSpan?: { readonly end: number; readonly start: number };
44
46
  readonly code?: string;
45
47
  readonly fix?: string;
46
48
  /** Canonical UDL path when lowering rejected an emitted clause. */
@@ -63,7 +65,8 @@ interface CompileArtifacts {
63
65
 
64
66
  export interface CompileOptions extends HsxCompilerHost {
65
67
  readonly composesCatalogBlueprint?: boolean;
66
- readonly costTable?: UdlCostTable;
68
+ /** One table, or one per billing currency; the program's money fields pick. */
69
+ readonly costTable?: UdlCostTables;
67
70
  }
68
71
 
69
72
  export interface CompileOriginMapEntry {
@@ -113,7 +116,15 @@ export function compile(
113
116
  const position = origin ?? lineColIn(lines, span.start);
114
117
  diagnostics.push({
115
118
  column: position.column,
116
- ...(origin ? { file: origin.moduleName } : {}),
119
+ ...(origin
120
+ ? { file: origin.moduleName }
121
+ : {
122
+ byteSpan: {
123
+ end:
124
+ byteOffsets[span.end] ?? byteOffsets[byteOffsets.length - 1]!,
125
+ start: byteOffsets[span.start] ?? 0,
126
+ },
127
+ }),
117
128
  line: position.line,
118
129
  message,
119
130
  span: { ...span },