@wowok/agent-mcp 3.2.4 → 3.2.7

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 (252) hide show
  1. package/dist/chain-semantics/field-capability.js +1 -1
  2. package/dist/chain-semantics/freeze-map.js +1 -1
  3. package/dist/chain-semantics/object-graph.js +1 -1
  4. package/dist/communication/wts-attestation.js +1 -1
  5. package/dist/composition/audit.js +1 -1
  6. package/dist/composition/blueprint-view.d.ts +64 -0
  7. package/dist/composition/blueprint-view.js +1 -0
  8. package/dist/composition/compile.d.ts +3 -2
  9. package/dist/composition/compile.js +1 -1
  10. package/dist/composition/inflight.d.ts +17 -0
  11. package/dist/composition/inflight.js +1 -0
  12. package/dist/config/config-audit.spec.js +1 -1
  13. package/dist/customer/account-events.js +1 -1
  14. package/dist/customer/order-monitor.js +1 -1
  15. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  16. package/dist/evaluation/engine.js +1 -1
  17. package/dist/experience/realtime-feedback.js +1 -1
  18. package/dist/extensions/constraint-registry.d.ts +6 -1
  19. package/dist/extensions/constraint-registry.js +1 -1
  20. package/dist/extensions/index.d.ts +1 -1
  21. package/dist/extensions/index.js +1 -1
  22. package/dist/extensions/industry-pack.d.ts +6 -0
  23. package/dist/extensions/industry-pack.js +1 -1
  24. package/dist/extensions/mode-evaluator.d.ts +3 -2
  25. package/dist/extensions/mode-evaluator.js +1 -1
  26. package/dist/extensions/modes.js +1 -1
  27. package/dist/extensions/registry.d.ts +1 -2
  28. package/dist/extensions/registry.js +1 -1
  29. package/dist/graph/onchain/analyze.js +1 -1
  30. package/dist/graph/onchain/analyze.spec.js +1 -1
  31. package/dist/graph/onchain/anti-cheat.d.ts +32 -2
  32. package/dist/graph/onchain/anti-cheat.js +1 -1
  33. package/dist/graph/onchain/anti-cheat.spec.js +1 -1
  34. package/dist/graph/onchain/expand.js +1 -1
  35. package/dist/graph/onchain/exposure.js +1 -1
  36. package/dist/graph/onchain/extract.js +1 -1
  37. package/dist/graph/onchain/facts.js +1 -1
  38. package/dist/graph/onchain/graph-policy.spec.js +1 -1
  39. package/dist/graph/onchain/index.d.ts +2 -2
  40. package/dist/graph/onchain/index.js +1 -1
  41. package/dist/graph/onchain/project-relationship.js +1 -1
  42. package/dist/graph/onchain/table-ledger.spec.js +1 -1
  43. package/dist/graph/onchain/types.d.ts +3 -0
  44. package/dist/harness/recover.js +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/knowledge/arbitration-venue-order.d.ts +25 -0
  47. package/dist/knowledge/arbitration-venue-order.js +1 -0
  48. package/dist/knowledge/audit-rules.d.ts +12 -0
  49. package/dist/knowledge/audit-rules.js +1 -1
  50. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
  51. package/dist/knowledge/baselines/rules/allocation.json +5 -5
  52. package/dist/knowledge/baselines/rules/arb.json +1 -1
  53. package/dist/knowledge/baselines/rules/graph.json +81 -0
  54. package/dist/knowledge/baselines/rules/guard.json +9 -9
  55. package/dist/knowledge/baselines/rules/machine.json +5 -5
  56. package/dist/knowledge/baselines/rules/order.json +1 -1
  57. package/dist/knowledge/baselines/rules/plan.json +80 -2
  58. package/dist/knowledge/builtin-templates.d.ts +18 -2
  59. package/dist/knowledge/builtin-templates.js +1 -1
  60. package/dist/knowledge/discount-threshold.js +1 -1
  61. package/dist/knowledge/entity-recipient-guard.js +1 -1
  62. package/dist/knowledge/event-semantics.js +1 -1
  63. package/dist/knowledge/getting-started.js +1 -1
  64. package/dist/knowledge/guard-bindings.js +1 -1
  65. package/dist/knowledge/guard-design-patterns.js +1 -1
  66. package/dist/knowledge/guard-field-cognition.js +1 -1
  67. package/dist/knowledge/guard-ledger.js +1 -1
  68. package/dist/knowledge/guard-lint.d.ts +1 -0
  69. package/dist/knowledge/guard-lint.js +1 -1
  70. package/dist/knowledge/guard-node-gates.d.ts +4 -0
  71. package/dist/knowledge/guard-node-gates.js +1 -0
  72. package/dist/knowledge/guard-puzzle.js +1 -1
  73. package/dist/knowledge/guard-risk.js +1 -1
  74. package/dist/knowledge/guard-submission-prompt.d.ts +1 -0
  75. package/dist/knowledge/guard-submission-prompt.js +1 -1
  76. package/dist/knowledge/guard-templates.d.ts +2 -1
  77. package/dist/knowledge/guard-templates.js +1 -1
  78. package/dist/knowledge/guard-translation.js +1 -1
  79. package/dist/knowledge/index.d.ts +2 -2
  80. package/dist/knowledge/index.js +1 -1
  81. package/dist/knowledge/industry-generalizer.js +1 -1
  82. package/dist/knowledge/industry-registry.js +1 -1
  83. package/dist/knowledge/jsonrpc-enum.js +1 -1
  84. package/dist/knowledge/machine-topology.d.ts +6 -0
  85. package/dist/knowledge/machine-topology.js +1 -1
  86. package/dist/knowledge/order-ledger.js +1 -1
  87. package/dist/knowledge/reputation-rules.d.ts +3 -9
  88. package/dist/knowledge/reputation-rules.js +1 -1
  89. package/dist/knowledge/safety-rules.d.ts +10 -1
  90. package/dist/knowledge/safety-rules.js +1 -1
  91. package/dist/knowledge/scenario-modes.d.ts +2 -4
  92. package/dist/knowledge/scenario-modes.js +1 -1
  93. package/dist/knowledge/service-ledger.js +1 -1
  94. package/dist/knowledge/service-templates.js +1 -1
  95. package/dist/knowledge/settlement-semantics.d.ts +1 -0
  96. package/dist/knowledge/settlement-semantics.js +1 -0
  97. package/dist/knowledge/template-loader.d.ts +29 -2
  98. package/dist/knowledge/template-loader.js +1 -1
  99. package/dist/knowledge/template-registry.js +1 -1
  100. package/dist/knowledge/template-scanner.d.ts +14 -0
  101. package/dist/knowledge/template-scanner.js +1 -1
  102. package/dist/knowledge/template-validation.d.ts +2 -0
  103. package/dist/knowledge/template-validation.js +1 -0
  104. package/dist/knowledge/tools-reference.js +1 -1
  105. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  106. package/dist/knowledge/workflow-guidance.js +1 -1
  107. package/dist/monitor/MonitorLoop.js +1 -1
  108. package/dist/participation/allocation-advice.js +1 -1
  109. package/dist/participation/customer-interest.js +1 -1
  110. package/dist/participation/radar-core.d.ts +6 -1
  111. package/dist/participation/radar-core.js +1 -1
  112. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  113. package/dist/playbooks/service-build/game-theory.d.ts +2 -2
  114. package/dist/playbooks/service-build/game-theory.js +1 -1
  115. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  116. package/dist/playbooks/service-build/merchant-guide.d.ts +79 -13
  117. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  118. package/dist/playbooks/service-build/migration-planner.d.ts +7 -0
  119. package/dist/playbooks/service-build/migration-planner.js +1 -1
  120. package/dist/playbooks/service-build/mode-actions.js +1 -1
  121. package/dist/playbooks/service-build/object-panorama.js +1 -1
  122. package/dist/playbooks/service-build/participation-radar.js +1 -1
  123. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  124. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  125. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  126. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.d.ts +1 -0
  127. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -0
  128. package/dist/playbooks/service-build/reverse-mapping.d.ts +24 -0
  129. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  130. package/dist/playbooks/service-build/risk-aggregator.d.ts +1 -1
  131. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  132. package/dist/playbooks/service-build/service-panorama.js +1 -1
  133. package/dist/playbooks/service-build/service-quote.js +1 -1
  134. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  135. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  136. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  137. package/dist/relationship/derivation.d.ts +1 -0
  138. package/dist/review/index.js +1 -1
  139. package/dist/runtime/instance-registry.d.ts +8 -0
  140. package/dist/runtime/instance-registry.js +1 -0
  141. package/dist/safety/confirm-gate.js +1 -1
  142. package/dist/schema/benchmark-migration/index.d.ts +14 -0
  143. package/dist/schema/benchmark-migration/index.js +1 -1
  144. package/dist/schema/call/arbitration.js +1 -1
  145. package/dist/schema/call/base.d.ts +109 -0
  146. package/dist/schema/call/base.js +1 -1
  147. package/dist/schema/call/bridge.d.ts +14 -0
  148. package/dist/schema/call/contact.js +1 -1
  149. package/dist/schema/call/error-codes.d.ts +1 -1
  150. package/dist/schema/call/error-codes.js +1 -1
  151. package/dist/schema/call/guard.d.ts +7 -0
  152. package/dist/schema/call/guard.js +1 -1
  153. package/dist/schema/call/handler.js +1 -1
  154. package/dist/schema/call/machine.d.ts +7 -0
  155. package/dist/schema/call/machine.js +1 -1
  156. package/dist/schema/call/payment.js +1 -1
  157. package/dist/schema/call/permission-handler.js +1 -1
  158. package/dist/schema/call/progress.d.ts +46 -0
  159. package/dist/schema/call/progress.js +1 -1
  160. package/dist/schema/call/semantic.js +1 -1
  161. package/dist/schema/call/service.d.ts +22 -8
  162. package/dist/schema/call/service.js +1 -1
  163. package/dist/schema/common/index.js +1 -1
  164. package/dist/schema/goal/index.d.ts +11 -0
  165. package/dist/schema/goal/planning.d.ts +32 -1
  166. package/dist/schema/goal/planning.js +1 -1
  167. package/dist/schema/industry-pack/index.d.ts +40 -0
  168. package/dist/schema/industry-pack/index.js +1 -1
  169. package/dist/schema/keeper/index.d.ts +13 -0
  170. package/dist/schema/local/index.d.ts +75 -0
  171. package/dist/schema/local/index.js +1 -1
  172. package/dist/schema/messenger/index.d.ts +17 -0
  173. package/dist/schema/messenger/index.js +1 -1
  174. package/dist/schema/operations.d.ts +46 -2
  175. package/dist/schema/operations.js +1 -1
  176. package/dist/schema/query/bi.d.ts +64 -0
  177. package/dist/schema/query/bi.js +1 -1
  178. package/dist/schema/query/index.d.ts +94 -0
  179. package/dist/schema/query/index.js +1 -1
  180. package/dist/schema/schema-version.d.ts +1 -1
  181. package/dist/schema/schema-version.js +1 -1
  182. package/dist/schema/utils/permission-machine-check.js +1 -1
  183. package/dist/schema/workspace/index.d.ts +1 -1
  184. package/dist/schema-query-impl/index.js +1 -1
  185. package/dist/schemas/account_operation.output.json +45 -0
  186. package/dist/schemas/benchmark_migration_operation.output.json +24 -4
  187. package/dist/schemas/benchmark_migration_operation.schema.json +70 -0
  188. package/dist/schemas/bridge_operation.output.json +45 -0
  189. package/dist/schemas/goal_operation.schema.json +79 -1
  190. package/dist/schemas/guard2file.output.json +6 -1
  191. package/dist/schemas/guard2file.schema.json +9 -0
  192. package/dist/schemas/index.json +1 -1
  193. package/dist/schemas/industry_pack_operation.output.json +91 -0
  194. package/dist/schemas/industry_pack_operation.schema.json +19 -1
  195. package/dist/schemas/keeper_operation.output.json +44 -0
  196. package/dist/schemas/local_cache_operation.output.json +45 -0
  197. package/dist/schemas/local_history_operation.output.json +45 -0
  198. package/dist/schemas/local_info_operation.output.json +45 -0
  199. package/dist/schemas/local_mark_operation.output.json +45 -0
  200. package/dist/schemas/machineNode2file.output.json +6 -1
  201. package/dist/schemas/machineNode2file.schema.json +9 -0
  202. package/dist/schemas/messenger_operation.output.json +52 -0
  203. package/dist/schemas/monitor_events.output.json +44 -0
  204. package/dist/schemas/monitor_subscription.output.json +44 -0
  205. package/dist/schemas/onchain_events.output.json +44 -0
  206. package/dist/schemas/onchain_operations.output.json +133 -0
  207. package/dist/schemas/onchain_operations.schema.json +110 -18
  208. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -1
  209. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  210. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  211. package/dist/schemas/onchain_operations_machine.schema.json +2 -2
  212. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  213. package/dist/schemas/onchain_operations_progress.schema.json +57 -0
  214. package/dist/schemas/onchain_operations_service.schema.json +44 -10
  215. package/dist/schemas/onchain_table_data.output.json +81 -13
  216. package/dist/schemas/onchain_table_data.schema.json +21 -21
  217. package/dist/schemas/query_toolkit.output.json +218 -9
  218. package/dist/schemas/query_toolkit.schema.json +50 -26
  219. package/dist/schemas/wowok_buildin_info.output.json +80 -1
  220. package/dist/schemas/wowok_buildin_info.schema.json +1 -1
  221. package/dist/tools/handlers/benchmark-migration.d.ts +3 -13
  222. package/dist/tools/handlers/benchmark-migration.js +1 -1
  223. package/dist/tools/handlers/config.js +1 -1
  224. package/dist/tools/handlers/file-export.js +1 -1
  225. package/dist/tools/handlers/industry-pack.js +1 -1
  226. package/dist/tools/handlers/messenger.js +1 -1
  227. package/dist/tools/handlers/onchain.js +1 -1
  228. package/dist/tools/handlers/query.js +1 -1
  229. package/dist/tools/handlers/review-chain.d.ts +22 -0
  230. package/dist/tools/handlers/review-chain.js +1 -0
  231. package/dist/tools/registry/agent.js +1 -1
  232. package/dist/tools/registry/business.js +1 -1
  233. package/dist/tools/registry/config.js +1 -1
  234. package/dist/tools/registry/evaluation.js +1 -1
  235. package/dist/tools/registry/files.js +1 -1
  236. package/dist/tools/registry/identity.js +1 -1
  237. package/dist/tools/registry/local.js +1 -1
  238. package/dist/tools/registry/messenger.js +1 -1
  239. package/dist/tools/registry/monitor.js +1 -1
  240. package/dist/tools/registry/onchain.js +1 -1
  241. package/dist/tools/registry/query.js +1 -1
  242. package/dist/tools/rules-hook.js +1 -1
  243. package/dist/tools/runtime-health.d.ts +10 -0
  244. package/dist/tools/runtime-health.js +1 -0
  245. package/dist/tools/upgrade-check.d.ts +10 -1
  246. package/dist/tools/upgrade-check.js +1 -1
  247. package/dist/tools/wip-deploy-assist.js +1 -1
  248. package/dist/tools/wrap.d.ts +3 -0
  249. package/dist/tools/wrap.js +1 -1
  250. package/package.json +2 -2
  251. package/dist/playbooks/service-build/semantic-graph.d.ts +0 -99
  252. package/dist/playbooks/service-build/semantic-graph.js +0 -1
@@ -1 +1 @@
1
- export const ORDER_FIELDS=[{'move_name':'id','sdk_name':'id','move_type':'UID','mutability_layer':0x1,'description':'Order\x20unique\x20ID'},{'move_name':'items','sdk_name':'items','move_type':'vector<SaleItem>','mutability_layer':0x1,'description':'Purchased\x20items\x20(created-immutable)'},{'move_name':'discount','sdk_name':'discount','move_type':'Option<address>','mutability_layer':0x1,'description':'Discount\x20object\x20address\x20(created-immutable)'},{'move_name':'progress','sdk_name':'progress','move_type':'Option<address>','mutability_layer':0x2,'description':'Progress\x20object\x20address\x20(one-time-set\x20when\x20the\x20Progress\x20binds)'},{'move_name':'machine','sdk_name':'machine','move_type':'Option<address>','mutability_layer':0x1,'description':'Machine\x20snapshot\x20copied\x20from\x20service.machine\x20at\x20buy\x20time'},{'move_name':'amount','sdk_name':'amount','move_type':'u64','mutability_layer':0x1,'description':'Order\x20amount\x20in\x20MIST\x20(created-immutable)'},{'move_name':'owner','sdk_name':'builder','move_type':'address','mutability_layer':0x4,'description':'Order\x20owner\x20/\x20buyer.\x20Mutable\x20at\x20ANY\x20time\x20via\x20an\x20ownership\x20transfer\x20(L1,\x20E_NOT_THE_OWNER).\x20⚠️\x20SDK\x20field\x20name\x20is\x20\x27builder\x27\x20(only\x20naming\x20deviation\x20in\x2022\x20objects)'},{'move_name':'service','sdk_name':'service','move_type':'address','mutability_layer':0x1,'description':'Service\x20object\x20address\x20(created-immutable,\x20reference\x20only)'},{'move_name':'dispute','sdk_name':'dispute','move_type':'vector<address>','mutability_layer':0x4,'description':'Arb\x20object\x20addresses\x20(append-only,\x20max\x2010,\x20frozen\x20when\x20claimed_by\x20set)'},{'move_name':'agent','sdk_name':'agent','move_type':'vector<address>','mutability_layer':0x4,'description':'Agent\x20addresses\x20(max\x2010\x20distinct\x20per\x20call\x20—\x20input\x20deduped\x20on-chain;\x20setting\x20the\x20list\x20REPLACES\x20it\x20at\x20any\x20time,\x20no\x20progress\x20freeze)'},{'move_name':'allocation','sdk_name':'allocation','move_type':'Option<address>','mutability_layer':0x2,'description':'Allocation\x20object\x20address\x20(one-time-set\x20when\x20the\x20Allocation\x20binds)'},{'move_name':'claimed_by','sdk_name':'claimed_by','move_type':'Option<address>','mutability_layer':0x2,'description':'Claimed\x20Arb\x20object\x20address\x20(one-time,\x20irreversible;\x20blocks\x20new\x20disputes)'},{'move_name':'required_info','sdk_name':'required_info','move_type':'Option<address>','mutability_layer':0x4,'description':'Contact\x20(recipient)\x20or\x20WTS\x20Proof\x20(delivery\x20proof);\x20owner-only'},{'move_name':'time','sdk_name':'time','move_type':'u64','mutability_layer':0x1,'description':'Creation\x20timestamp\x20(clock::timestamp_ms)'}];export const ORDER_STATES=['CREATED','IN_PROGRESS','DISPUTED','CLAIMED','COMPLETED','CANCELLED'];export const ORDER_STATE_TRANSITIONS=[{'from':'CREATED','to':'IN_PROGRESS','trigger':'buy\x20(with\x20machine)\x20→\x20the\x20Progress\x20object\x20is\x20set\x20at\x20creation'},{'from':'CREATED','to':'DISPUTED','trigger':'arb_confirm\x20→\x20dispute()\x20appends\x20Arb\x20address'},{'from':'CREATED','to':'COMPLETED','trigger':'Progress\x20reaches\x20terminal\x20(no\x20machine\x20path)\x20or\x20manual'},{'from':'IN_PROGRESS','to':'DISPUTED','trigger':'arb_confirm\x20→\x20dispute()\x20appends\x20Arb\x20address'},{'from':'IN_PROGRESS','to':'COMPLETED','trigger':'Progress\x20reaches\x20terminal\x20node'},{'from':'IN_PROGRESS','to':'CANCELLED','trigger':'Progress\x20reaches\x20cancel\x20node'},{'from':'DISPUTED','to':'CLAIMED','trigger':'arb_claim_compensation\x20→\x20compensate()\x20sets\x20claimed_by'},{'from':'DISPUTED','to':'COMPLETED','trigger':'Arb\x20resolution\x20+\x20Progress\x20terminal'},{'from':'DISPUTED','to':'CANCELLED','trigger':'Arb\x20resolution\x20=\x20cancel'}];export const ORDER_LIFECYCLE_EVENTS=[{'name':'NewOrderEvent','trigger':'buy\x20flow\x20phase\x205\x20(the\x20order\x20record\x20is\x20created)','emit_source':'order\x20creation\x20inside\x20the\x20buy\x20transaction','actually_emitted':!![],'fields':['object','service','progress','discount','allocation','amount']},{'name':'OrderCompletedEvent','trigger':'Progress\x20reaches\x20terminal','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','completion_time']},{'name':'OrderCancelledEvent','trigger':'Progress\x20reaches\x20cancel','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','cancel_reason']},{'name':'OrderAdvancedEvent','trigger':'order.progress\x20forward','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','from_node','to_node']},{'name':'OrderDisputeAppendedEvent','trigger':'arb_confirm\x20→\x20dispute()','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','arb']},{'name':'OrderClaimedEvent','trigger':'arb_claim_compensation\x20→\x20compensate()','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','arb','claimed_by']},{'name':'OwnerChangedEvent','trigger':'ownership\x20transfer\x20/\x20transfer_to','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','old_owner','new_owner']},{'name':'AgentSetEvent','trigger':'setting\x20the\x20agent\x20list','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','agent_list']},{'name':'RequiredInfoUpdatedEvent','trigger':'updating\x20required_info','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','required_info']},{'name':'AllocationBoundEvent','trigger':'allocation\x20binding','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','allocation']},{'name':'ProgressBoundEvent','trigger':'progress\x20binding','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','progress']}];export const ORDER_PERMISSION_MATRIX=[{'operation':'owner_receive\x20/\x20receive','move_function':'receive\x20CoinWrapper\x20/\x20receive\x20Receiving\x20object','layer':'L4_object_gated','aborts_with':'EPAYMENT_NOT_MATCH','notes':'Gated\x20by\x20Receiving\x20existence,\x20NOT\x20by\x20an\x20owner\x20assert:\x20the\x20allocation\x20payout\x20must\x20have\x20run\x20and\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address.\x20No\x20owner\x20assert\x20—\x20funds\x20ALWAYS\x20go\x20to\x20order.owner\x20regardless\x20of\x20caller.\x20Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH).'},{'operation':'transfer_to\x20(ownership\x20transfer)','move_function':'transfer\x20the\x20order\x20to\x20a\x20new\x20owner','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER','notes':'Irreversible.\x20New\x20owner\x20takes\x20over\x20ALL\x20permissions.\x20NOT\x20frozen\x20after\x20progress\x20binding.'},{'operation':'agent\x20(set\x20agent\x20list)','move_function':'set\x20the\x20agent\x20list\x20(replaces\x20all)','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER,\x20E_MAX_AGENT_COUNT','notes':'REPLACES\x20the\x20whole\x20agent\x20list\x20(not\x20append).\x20Max\x2010\x20distinct\x20agents\x20(assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push).\x20NOT\x20frozen\x20after\x20progress\x20binding.'},{'operation':'update\x20required_info','move_function':'set\x20or\x20clear\x20required_info\x20(Contact\x20/\x20WTS\x20Proof)','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER','notes':'Owner-only.\x20Agent\x20CANNOT\x20update\x20required_info.'},{'operation':'progress\x20(advance)','move_function':'(progress::operate)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION','notes':'Both\x20owner\x20and\x20agent\x20can\x20advance\x20Progress.'},{'operation':'arb_confirm','move_function':'(file\x20for\x20arbitration)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH,\x20E_ORDER_ALREADY_CLAIMED','notes':'Both\x20can\x20file\x20arbitration.\x20confirmed=true\x20additionally\x20asserts\x20claimed_by\x20is\x20none.\x20Irreversible.'},{'operation':'arb_objection','move_function':'(object\x20to\x20the\x20arbitration\x20ruling)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION,\x20E_ORDER_ALREADY_CLAIMED,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH','notes':'Both\x20can\x20object\x20to\x20Arb\x20ruling.\x20Requires\x20Arb\x20status\x20==\x20Arbirated.\x20Irreversible.'},{'operation':'arb_claim_compensation','move_function':'(claim\x20the\x20compensation)','layer':'L4_object_gated','aborts_with':'E_ORDER_SERVICE_NOT_MATCH,\x20E_ARBITRATION_ARB_NOT_MATCH,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH,\x20E_COMPENSATION_NOT_MATCH,\x20E_ORDER_ALREADY_CLAIMED','notes':'No\x20op-permission\x20assert\x20—\x20gated\x20by\x20Arb\x20status\x20(must\x20be\x20Arbirated,\x20ruling\x20final).\x20Compensation\x20is\x20paid\x20to\x20the\x20order\x20owner\x20(permissionless\x20keeper\x20—\x20the\x20sender\x20never\x20receives).\x20Sets\x20claimed_by\x20—\x20one-time,\x20irreversible.\x20After\x20the\x20claim\x20the\x20order\x20seals:\x20the\x20owner\x20receive\x20entries\x20abort\x20(E_ORDER_ALREADY_CLAIMED),\x20so\x20any\x20escrow\x20balance\x20left\x20on\x20the\x20order\x20becomes\x20unclaimable;\x20the\x20provider\x20release\x20track\x20(direct\x20transfer)\x20stays\x20usable.'},{'operation':'progress\x20binding\x20(package-only)','move_function':'bind\x20the\x20Progress\x20object\x20(package\x20write-back)','layer':'L3_package_only','aborts_with':'E_PROGRESS_ALREADY_SPECIFIED','notes':'Progress\x20module\x20writes\x20back.\x20No\x20external\x20access.'},{'operation':'allocation\x20binding\x20(package-only)','move_function':'bind\x20the\x20Allocation\x20object\x20(package\x20write-back)','layer':'L3_package_only','aborts_with':'E_ALLOCATION_ALREADY_SPECIFIED','notes':'Allocation\x20module\x20writes\x20back.\x20No\x20external\x20access.'},{'operation':'dispute\x20(package-only)','move_function':'dispute','layer':'L3_package_only','aborts_with':'E_ORDER_ALREADY_CLAIMED,\x20E_MAX_DISPUTE_COUNT','notes':'Arbitration\x20module\x20appends\x20Arb\x20address.'},{'operation':'compensate\x20(package-only)','move_function':'compensate','layer':'L3_package_only','aborts_with':'E_ORDER_ALREADY_CLAIMED','notes':'Arbitration\x20module\x20sets\x20claimed_by.\x20Irreversible.'}];export const ORDER_SCENES=[{'id':'order_create','name':'Create\x20order\x20via\x20a\x20service\x20purchase\x20(composite\x20creation)','operation_field':'object','move_entry':'buy\x20flow:\x20order\x20record\x20created\x20inside\x20the\x20service\x20purchase\x20transaction','permission_layer':'L3_package_only','reversibility':'irreversible','governed_operations':['buy\x20(items,\x20discount,\x20machine_forward?,\x20named_order?)','order\x20record\x20creation\x20(package-only)','allocation\x20creation\x20+\x20binding\x20(if\x20order_allocators\x20configured)','progress\x20creation\x20+\x20binding\x20(if\x20machine\x20configured)','order\x20record\x20created\x20+\x20NewOrderEvent\x20emitted'],'common_patterns':['Composite\x20creation:\x20Order\x20+\x20Allocation\x20+\x20Progress\x20in\x20one\x20transaction','Service.machine\x20is\x20SNAPSHOTTED\x20to\x20order.machine\x20(not\x20a\x20reference)','owner\x20=\x20tx_context::sender\x20(buyer);\x20agent\x20=\x20[]\x20initially','Allotment\x206\x20phases\x20are\x20atomic\x20—\x20any\x20failure\x20rolls\x20back\x20fully'],'related_risks':['R-O-1-05','R-O-2-01','R-O-4-01','R-O-5-01'],'recommended_templates':['T-O-01','T-O-02','T-O-03']},{'id':'order_advance','name':'Advance\x20Progress\x20(forward/hold)','operation_field':'progress','move_entry':'progress::operate\x20(via\x20order.progress\x20delegation)','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['progress.operation.next_node_name\x20+\x20forward','progress.op\x20(next/hold/unhold/adminUnhold)','progress.message\x20(optional)'],'common_patterns':['Both\x20owner\x20and\x20agent\x20can\x20advance\x20—\x20agent\x20enables\x20third-party\x20logistics','Node\x20transition\x20is\x20irreversible\x20(no\x20backward\x20movement)','Forward.guard\x20may\x20require\x20Guard\x20submission'],'related_risks':['R-O-3-02','R-O-4-03','R-O-5-03'],'recommended_templates':['T-O-02']},{'id':'order_set_agent','name':'Set\x20agent\x20list\x20(owner-only,\x20replaces\x20entire\x20list)','operation_field':'agent','move_entry':'set\x20the\x20agent\x20list\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'reversible','governed_operations':['set\x20the\x20agent\x20list\x20(overwrites\x20entire\x20agent\x20list)'],'common_patterns':['Setting\x20the\x20agent\x20list\x20REPLACES\x20the\x20whole\x20list\x20—\x20agents\x20omitted\x20from\x20the\x20new\x20list\x20silently\x20lose\x20access\x20(old\x20agent\x20role\x20records\x20are\x20removed\x20from\x20EntityOrders)','Max\x2010\x20distinct\x20agents\x20per\x20call\x20(E_MAX_AGENT_COUNT,\x20assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push)','Can\x20be\x20called\x20at\x20ANY\x20time\x20—\x20NOT\x20frozen\x20after\x20Progress\x20binding','Agents\x20can\x20operate\x20the\x20order\x20(L2\x20ops)\x20but\x20CANNOT\x20change\x20owner\x20or\x20required_info\x20(L1\x20ops)'],'related_risks':['R-O-1-04','R-O-3-01','R-O-4-02'],'recommended_templates':['T-O-03']},{'id':'order_required_info','name':'Update\x20required_info\x20(Contact\x20or\x20WTS\x20Proof)','operation_field':'required_info','move_entry':'update\x20required_info\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'reversible','governed_operations':['update\x20required_info\x20(set\x20Contact\x20or\x20WTS\x20Proof\x20address)','required_info\x20=\x20null\x20(clear)'],'common_patterns':['Contact\x20object\x20=\x20recipient\x20info\x20(shipping\x20address)','WTS\x20Proof\x20object\x20=\x20delivery\x20proof\x20(via\x20Wowok\x20Messenger)','Owner-only\x20—\x20agent\x20CANNOT\x20update\x20required_info'],'related_risks':['R-O-3-02'],'recommended_templates':['T-O-01']},{'id':'order_arb_confirm','name':'Apply\x20for\x20arbitration\x20compensation','operation_field':'arb_confirm','move_entry':'arb_confirm\x20flow\x20(confirm\x20/\x20description\x20/\x20proposition)','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['arb_confirm.confirm\x20(true=confirm\x20materials,\x20false=deny)','arb_confirm.description\x20(compensation\x20application\x20description)','arb_confirm.proposition\x20(compensation\x20claims\x20list)'],'common_patterns':['Triggers\x20Arb\x20→\x20dispute()\x20appends\x20Arb\x20to\x20order.dispute','Both\x20owner\x20and\x20agent\x20can\x20file\x20—\x20agent\x20useful\x20for\x20representative\x20cases','Once\x20filed,\x20the\x20Arb\x20process\x20is\x20irreversible'],'related_risks':['R-O-3-03','R-O-4-04','R-O-5-04'],'recommended_templates':['T-O-04']},{'id':'order_arb_objection','name':'Object\x20to\x20arbitration\x20result','operation_field':'arb_objection','move_entry':'objection\x20to\x20the\x20arbitration\x20ruling','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['arb_objection.objection\x20(reason\x20for\x20re-arbitration)'],'common_patterns':['Requires\x20Arb\x20status\x20=\x20Arbitrated\x20(after\x20ruling)','Triggers\x20re-arbitration\x20flow','Both\x20owner\x20and\x20agent\x20can\x20object'],'related_risks':['R-O-3-03','R-O-4-04'],'recommended_templates':['T-O-04']},{'id':'order_arb_claim_compensation','name':'Claim\x20compensation\x20(sets\x20claimed_by,\x20irreversible)','operation_field':'arb_claim_compensation','move_entry':'claim\x20compensation\x20→\x20the\x20order\x20is\x20claimed\x20and\x20compensation\x20paid','permission_layer':'L4_object_gated','reversibility':'irreversible','governed_operations':['arb_claim_compensation.arb\x20(the\x20ruled\x20Arb\x20object)','compensate()\x20sets\x20order.claimed_by\x20=\x20arb'],'common_patterns':['⚠️\x20ONE-TIME,\x20IRREVERSIBLE\x20—\x20claimed_by\x20cannot\x20be\x20reset','After\x20claim,\x20NO\x20new\x20disputes\x20can\x20be\x20filed\x20and\x20the\x20order\x20rejects\x20all\x20further\x20payout\x20claims\x20(owner\x20receive\x20aborts\x20E_ORDER_ALREADY_CLAIMED)','Requires\x20Arb\x20status\x20=\x20Arbitrated\x20(ruling\x20final\x20—\x20no\x20op-permission\x20assert)','Compensation\x20is\x20paid\x20to\x20the\x20order\x20owner\x20(permissionless\x20keeper\x20—\x20the\x20sender\x20never\x20receives)'],'related_risks':['R-O-3-03','R-O-4-04','R-O-5-04'],'recommended_templates':['T-O-06']},{'id':'order_receive','name':'Receive\x20payment\x20(Receiving-gated,\x20funds\x20to\x20owner)','operation_field':'receive','move_entry':'receive\x20payment\x20(coin\x20or\x20Receiving\x20object)','permission_layer':'L4_object_gated','reversibility':'reversible','governed_operations':['receive\x20CoinWrapper\x20(unwrap\x20and\x20forward\x20to\x20owner)','receive\x20arbitrary\x20Receiving<K>\x20object'],'common_patterns':['⚠️\x20Gated\x20by\x20Receiving\x20existence:\x20the\x20allocation\x20payout\x20must\x20have\x20run\x20and\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address\x20—\x20without\x20it\x20the\x20call\x20cannot\x20even\x20be\x20constructed','Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH\x20on\x20mismatch)','No\x20owner\x20assert\x20—\x20funds\x20are\x20ALWAYS\x20forwarded\x20to\x20order.owner\x20regardless\x20of\x20caller','Can\x20be\x20called\x20multiple\x20times\x20(e.g.\x20partial\x20refunds)','Receives\x20are\x20unwrapped\x20(CoinWrapper\x20→\x20Coin)\x20and\x20transferred\x20to\x20owner\x20address'],'related_risks':['R-O-3-01','R-O-4-05'],'recommended_templates':['T-O-05']},{'id':'order_transfer','name':'Transfer\x20order\x20ownership\x20(irreversible)','operation_field':'transfer_to','move_entry':'transfer\x20the\x20order\x20to\x20a\x20new\x20owner\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'irreversible','governed_operations':['transfer_to\x20(new\x20owner\x20address)'],'common_patterns':['⚠️\x20IRREVERSIBLE\x20—\x20new\x20owner\x20takes\x20over\x20ALL\x20permissions','Only\x20owner\x20can\x20transfer','Can\x20be\x20called\x20even\x20after\x20Progress\x20binding\x20(unlike\x20setting\x20the\x20agent\x20list)','New\x20owner\x20becomes\x20the\x20sole\x20receiver\x20of\x20future\x20payments'],'related_risks':['R-O-3-01','R-O-4-06'],'recommended_templates':['T-O-05']},{'id':'order_dispute_append','name':'Append\x20Arb\x20to\x20dispute\x20list\x20(package-only)','operation_field':'lifecycle','move_entry':'append\x20Arb\x20to\x20the\x20dispute\x20list\x20(package-only)','permission_layer':'L3_package_only','reversibility':'append_only','governed_operations':['dispute(arb)\x20—\x20append\x20Arb\x20address\x20to\x20order.dispute'],'common_patterns':['Called\x20by\x20the\x20Arbitration\x20module\x20when\x20a\x20dispute\x20is\x20filed,\x20NOT\x20by\x20external\x20users','Max\x2010\x20Arb\x20addresses\x20(MAX_DISPUTE_COUNT)','Frozen\x20when\x20claimed_by\x20is\x20set\x20(E_ORDER_ALREADY_CLAIMED)','Duplicate\x20Arb\x20addresses\x20are\x20silently\x20skipped'],'related_risks':['R-O-1-03','R-O-3-03','R-O-5-04'],'recommended_templates':['T-O-04']}];export const ORDER_AUDIT_FORMULAS={'status_inference':'if\x20claimed_by\x20!=\x20null:\x20CLAIMED;\x20'+'elif\x20progress\x20!=\x20null:\x20query\x20Progress\x20→\x20terminal?\x20COMPLETED\x20:\x20cancel?\x20CANCELLED\x20:\x20IN_PROGRESS;\x20'+'elif\x20dispute.length\x20>\x200:\x20DISPUTED;\x20'+'else:\x20CREATED','amount_check':'order.amount\x20=\x20sum(items[].price\x20*\x20items[].quantity)\x20-\x20discount_value','fund_balance':'order.amount\x20=\x20allocation_distributed\x20+\x20compensation_paid\x20+\x20refund_amount','dispute_constraint':'dispute.length\x20<=\x20MAX_DISPUTE_COUNT\x20(10);\x20frozen\x20when\x20claimed_by.is_some()','agent_constraint':'agent.length\x20<=\x20MAX_AGENT_COUNT\x20(doc=10,\x20⚠️\x20actual=11\x20due\x20to\x20<=\x20bug\x20in\x20the\x20agent-set\x20implementation)'};export const ORDER_LEDGER_VERSION='1.0.0';export function getScenesByOperationField(a){return ORDER_SCENES['filter'](b=>b['operation_field']===a);}export function findSceneById(a){return ORDER_SCENES['find'](b=>b['id']===a);}export function findSceneByMoveEntry(a){return ORDER_SCENES['find'](b=>b['move_entry']['includes'](a));}export function getScenesByPermissionLayer(a){return ORDER_SCENES['filter'](b=>b['permission_layer']===a);}export function getScenesByReversibility(a){return ORDER_SCENES['filter'](b=>b['reversibility']===a);}export function getFieldDef(a){return ORDER_FIELDS['find'](b=>b['move_name']===a);}export function getMutableFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x4);}export function getImmutableFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x1);}export function getFrozenAfterProgressFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x3);}export function getOneTimeSetFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x2);}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['buy','order_create'],['purchase','order_create'],['advance','order_advance'],['forward','order_advance'],['progress','order_advance'],['set\x20agent','order_set_agent'],['agent','order_set_agent'],['required_info','order_required_info'],['recipient','order_required_info'],['arb\x20confirm','order_arb_confirm'],['apply\x20arbitration','order_arb_confirm'],['apply\x20compensation','order_arb_confirm'],['objection','order_arb_objection'],['object','order_arb_objection'],['claim\x20compensation','order_arb_claim_compensation'],['claim','order_arb_claim_compensation'],['receive','order_receive'],['collect','order_receive'],['withdraw','order_receive'],['transfer','order_transfer'],['transfer\x20ownership','order_transfer'],['handover','order_transfer']];for(const [d,e]of c){if(b['includes'](d['toLowerCase']()))return findSceneById(e);}return undefined;}export function getEmittedEvents(){return ORDER_LIFECYCLE_EVENTS['filter'](a=>a['actually_emitted']);}export function getInferredEvents(){return ORDER_LIFECYCLE_EVENTS['filter'](a=>!a['actually_emitted']);}export function getOrderScenesCount(){return ORDER_SCENES['length'];}export function sdkToMoveField(a){const b=ORDER_FIELDS['find'](c=>c['sdk_name']===a);return b?.['move_name'];}export function moveToSdkField(a){const b=ORDER_FIELDS['find'](c=>c['move_name']===a);return b?.['sdk_name'];}
1
+ export const ORDER_FIELDS=[{'move_name':'id','sdk_name':'id','move_type':'UID','mutability_layer':0x1,'description':'Order\x20unique\x20ID'},{'move_name':'items','sdk_name':'items','move_type':'vector<SaleItem>','mutability_layer':0x1,'description':'Purchased\x20items\x20(created-immutable)'},{'move_name':'discount','sdk_name':'discount','move_type':'Option<address>','mutability_layer':0x1,'description':'Discount\x20object\x20address\x20(created-immutable)'},{'move_name':'progress','sdk_name':'progress','move_type':'Option<address>','mutability_layer':0x2,'description':'Progress\x20object\x20address\x20(one-time-set\x20when\x20the\x20Progress\x20binds)'},{'move_name':'machine','sdk_name':'machine','move_type':'Option<address>','mutability_layer':0x1,'description':'Machine\x20snapshot\x20copied\x20from\x20service.machine\x20at\x20buy\x20time'},{'move_name':'amount','sdk_name':'amount','move_type':'u64','mutability_layer':0x1,'description':'Order\x20amount\x20in\x20MIST\x20(created-immutable)'},{'move_name':'owner','sdk_name':'builder','move_type':'address','mutability_layer':0x4,'description':'Order\x20owner\x20/\x20buyer.\x20Mutable\x20at\x20ANY\x20time\x20via\x20an\x20ownership\x20transfer\x20(L1,\x20E_NOT_THE_OWNER).\x20⚠️\x20SDK\x20field\x20name\x20is\x20\x27builder\x27\x20(only\x20naming\x20deviation\x20in\x2022\x20objects)'},{'move_name':'service','sdk_name':'service','move_type':'address','mutability_layer':0x1,'description':'Service\x20object\x20address\x20(created-immutable,\x20reference\x20only)'},{'move_name':'dispute','sdk_name':'dispute','move_type':'vector<address>','mutability_layer':0x4,'description':'Arb\x20object\x20addresses\x20(append-only,\x20max\x2010,\x20frozen\x20when\x20claimed_by\x20set)'},{'move_name':'agent','sdk_name':'agent','move_type':'vector<address>','mutability_layer':0x4,'description':'Agent\x20addresses\x20(max\x2010\x20distinct\x20per\x20call\x20—\x20input\x20deduped\x20on-chain;\x20setting\x20the\x20list\x20REPLACES\x20it\x20at\x20any\x20time,\x20no\x20progress\x20freeze)'},{'move_name':'allocation','sdk_name':'allocation','move_type':'Option<address>','mutability_layer':0x2,'description':'Allocation\x20object\x20address\x20(one-time-set\x20when\x20the\x20Allocation\x20binds)'},{'move_name':'claimed_by','sdk_name':'claimed_by','move_type':'Option<address>','mutability_layer':0x2,'description':'Claimed\x20Arb\x20object\x20address\x20(one-time,\x20irreversible;\x20blocks\x20new\x20disputes)'},{'move_name':'required_info','sdk_name':'required_info','move_type':'Option<address>','mutability_layer':0x4,'description':'Contact\x20(recipient)\x20or\x20WTS\x20Proof\x20(delivery\x20proof);\x20owner-only'},{'move_name':'time','sdk_name':'time','move_type':'u64','mutability_layer':0x1,'description':'Creation\x20timestamp\x20(clock::timestamp_ms)'}];export const ORDER_STATES=['CREATED','IN_PROGRESS','DISPUTED','CLAIMED','COMPLETED','CANCELLED'];export const ORDER_STATE_TRANSITIONS=[{'from':'CREATED','to':'IN_PROGRESS','trigger':'buy\x20(with\x20machine)\x20→\x20the\x20Progress\x20object\x20is\x20set\x20at\x20creation'},{'from':'CREATED','to':'DISPUTED','trigger':'arb_confirm\x20→\x20dispute()\x20appends\x20Arb\x20address'},{'from':'CREATED','to':'COMPLETED','trigger':'Progress\x20reaches\x20terminal\x20(no\x20machine\x20path)\x20or\x20manual'},{'from':'IN_PROGRESS','to':'DISPUTED','trigger':'arb_confirm\x20→\x20dispute()\x20appends\x20Arb\x20address'},{'from':'IN_PROGRESS','to':'COMPLETED','trigger':'Progress\x20reaches\x20terminal\x20node'},{'from':'IN_PROGRESS','to':'CANCELLED','trigger':'Progress\x20reaches\x20cancel\x20node'},{'from':'DISPUTED','to':'CLAIMED','trigger':'arb_claim_compensation\x20→\x20compensate()\x20sets\x20claimed_by'},{'from':'DISPUTED','to':'COMPLETED','trigger':'Arb\x20resolution\x20+\x20Progress\x20terminal'},{'from':'DISPUTED','to':'CANCELLED','trigger':'Arb\x20resolution\x20=\x20cancel'}];export const ORDER_LIFECYCLE_EVENTS=[{'name':'NewOrderEvent','trigger':'buy\x20flow\x20phase\x205\x20(the\x20order\x20record\x20is\x20created)','emit_source':'order\x20creation\x20inside\x20the\x20buy\x20transaction','actually_emitted':!![],'fields':['object','service','progress','discount','allocation','amount']},{'name':'OrderCompletedEvent','trigger':'Progress\x20reaches\x20terminal','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','completion_time']},{'name':'OrderCancelledEvent','trigger':'Progress\x20reaches\x20cancel','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','cancel_reason']},{'name':'OrderAdvancedEvent','trigger':'order.progress\x20forward','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','from_node','to_node']},{'name':'OrderDisputeAppendedEvent','trigger':'arb_confirm\x20→\x20dispute()','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','arb']},{'name':'OrderClaimedEvent','trigger':'arb_claim_compensation\x20→\x20compensate()','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','arb','claimed_by']},{'name':'OwnerChangedEvent','trigger':'ownership\x20transfer\x20/\x20transfer_to','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','old_owner','new_owner']},{'name':'AgentSetEvent','trigger':'setting\x20the\x20agent\x20list','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','agent_list']},{'name':'RequiredInfoUpdatedEvent','trigger':'updating\x20required_info','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','required_info']},{'name':'AllocationBoundEvent','trigger':'allocation\x20binding','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','allocation']},{'name':'ProgressBoundEvent','trigger':'progress\x20binding','emit_source':'(not\x20implemented)','actually_emitted':![],'fields':['order','progress']}];export const ORDER_PERMISSION_MATRIX=[{'operation':'owner_receive\x20/\x20receive','move_function':'receive\x20CoinWrapper\x20/\x20receive\x20Receiving\x20object','layer':'L4_object_gated','aborts_with':'EPAYMENT_NOT_MATCH','notes':'Gated\x20by\x20Receiving\x20existence,\x20NOT\x20by\x20an\x20owner\x20assert:\x20the\x20allocation\x20payout\x20must\x20have\x20run\x20and\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address.\x20No\x20owner\x20assert\x20—\x20funds\x20ALWAYS\x20go\x20to\x20order.owner\x20regardless\x20of\x20caller.\x20Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH).'},{'operation':'transfer_to\x20(ownership\x20transfer)','move_function':'transfer\x20the\x20order\x20to\x20a\x20new\x20owner','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER','notes':'Irreversible.\x20New\x20owner\x20takes\x20over\x20ALL\x20permissions.\x20NOT\x20frozen\x20after\x20progress\x20binding.'},{'operation':'agent\x20(set\x20agent\x20list)','move_function':'set\x20the\x20agent\x20list\x20(replaces\x20all)','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER,\x20E_MAX_AGENT_COUNT','notes':'REPLACES\x20the\x20whole\x20agent\x20list\x20(not\x20append).\x20Max\x2010\x20distinct\x20agents\x20(assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push).\x20NOT\x20frozen\x20after\x20progress\x20binding.'},{'operation':'update\x20required_info','move_function':'set\x20or\x20clear\x20required_info\x20(Contact\x20/\x20WTS\x20Proof)','layer':'L1_owner_only','aborts_with':'E_NOT_THE_OWNER','notes':'Owner-only.\x20Agent\x20CANNOT\x20update\x20required_info.'},{'operation':'progress\x20(advance)','move_function':'(progress::operate)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION','notes':'Both\x20owner\x20and\x20agent\x20can\x20advance\x20Progress.'},{'operation':'arb_confirm','move_function':'(file\x20for\x20arbitration)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH,\x20E_ORDER_ALREADY_CLAIMED','notes':'Both\x20can\x20file\x20arbitration.\x20confirmed=true\x20additionally\x20asserts\x20claimed_by\x20is\x20none.\x20Irreversible.'},{'operation':'arb_objection','move_function':'(object\x20to\x20the\x20arbitration\x20ruling)','layer':'L2_owner_or_agent','aborts_with':'E_NOT_OP_PERMISSION,\x20E_ORDER_ALREADY_CLAIMED,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH','notes':'Both\x20can\x20object\x20to\x20Arb\x20ruling.\x20Requires\x20Arb\x20status\x20==\x20Arbirated.\x20Irreversible.'},{'operation':'arb_claim_compensation','move_function':'(claim\x20the\x20compensation)','layer':'L4_object_gated','aborts_with':'E_ORDER_SERVICE_NOT_MATCH,\x20E_ARBITRATION_ARB_NOT_MATCH,\x20E_STATUS_NOT_MATCH,\x20E_ARB_ORDER_NOT_MATCH,\x20E_COMPENSATION_NOT_MATCH,\x20E_ORDER_ALREADY_CLAIMED','notes':'No\x20op-permission\x20assert\x20—\x20gated\x20by\x20Arb\x20status\x20(must\x20be\x20Arbirated,\x20ruling\x20final).\x20Compensation\x20is\x20paid\x20to\x20the\x20order\x20owner\x20(permissionless\x20keeper\x20—\x20the\x20sender\x20never\x20receives).\x20Sets\x20claimed_by\x20—\x20one-time,\x20irreversible.\x20The\x20claim\x20does\x20NOT\x20seal\x20the\x20order:\x20the\x20owner\x20receive\x20entries\x20are\x20deliberately\x20ungated\x20(order.move:213-234),\x20so\x20any\x20escrow\x20balance\x20left\x20on\x20the\x20order\x20stays\x20claimable\x20unless\x20the\x20refund\x20allocator\x27s\x20guard\x20is\x20gated\x20on\x20order.claimed_by\x20some==false;\x20the\x20provider\x20release\x20track\x20(direct\x20transfer)\x20stays\x20usable.'},{'operation':'progress\x20binding\x20(package-only)','move_function':'bind\x20the\x20Progress\x20object\x20(package\x20write-back)','layer':'L3_package_only','aborts_with':'E_PROGRESS_ALREADY_SPECIFIED','notes':'Progress\x20module\x20writes\x20back.\x20No\x20external\x20access.'},{'operation':'allocation\x20binding\x20(package-only)','move_function':'bind\x20the\x20Allocation\x20object\x20(package\x20write-back)','layer':'L3_package_only','aborts_with':'E_ALLOCATION_ALREADY_SPECIFIED','notes':'Allocation\x20module\x20writes\x20back.\x20No\x20external\x20access.'},{'operation':'dispute\x20(package-only)','move_function':'dispute','layer':'L3_package_only','aborts_with':'E_ORDER_ALREADY_CLAIMED,\x20E_MAX_DISPUTE_COUNT','notes':'Arbitration\x20module\x20appends\x20Arb\x20address.'},{'operation':'compensate\x20(package-only)','move_function':'compensate','layer':'L3_package_only','aborts_with':'E_ORDER_ALREADY_CLAIMED','notes':'Arbitration\x20module\x20sets\x20claimed_by.\x20Irreversible.'}];export const ORDER_SCENES=[{'id':'order_create','name':'Create\x20order\x20via\x20a\x20service\x20purchase\x20(composite\x20creation)','operation_field':'object','move_entry':'buy\x20flow:\x20order\x20record\x20created\x20inside\x20the\x20service\x20purchase\x20transaction','permission_layer':'L3_package_only','reversibility':'irreversible','governed_operations':['buy\x20(items,\x20discount,\x20machine_forward?,\x20named_order?)','order\x20record\x20creation\x20(package-only)','allocation\x20creation\x20+\x20binding\x20(if\x20order_allocators\x20configured)','progress\x20creation\x20+\x20binding\x20(if\x20machine\x20configured)','order\x20record\x20created\x20+\x20NewOrderEvent\x20emitted'],'common_patterns':['Composite\x20creation:\x20Order\x20+\x20Allocation\x20+\x20Progress\x20in\x20one\x20transaction','Service.machine\x20is\x20SNAPSHOTTED\x20to\x20order.machine\x20(not\x20a\x20reference)','owner\x20=\x20tx_context::sender\x20(buyer);\x20agent\x20=\x20[]\x20initially','Allotment\x206\x20phases\x20are\x20atomic\x20—\x20any\x20failure\x20rolls\x20back\x20fully'],'related_risks':['R-O-1-05','R-O-2-01','R-O-4-01','R-O-5-01'],'recommended_templates':['T-O-01','T-O-02','T-O-03']},{'id':'order_advance','name':'Advance\x20Progress\x20(forward/hold)','operation_field':'progress','move_entry':'progress::operate\x20(via\x20order.progress\x20delegation)','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['progress.operation.next_node_name\x20+\x20forward','progress.op\x20(next/hold/unhold/adminUnhold)','progress.message\x20(optional)'],'common_patterns':['Both\x20owner\x20and\x20agent\x20can\x20advance\x20—\x20agent\x20enables\x20third-party\x20logistics','Node\x20transition\x20is\x20irreversible\x20(no\x20backward\x20movement)','Forward.guard\x20may\x20require\x20Guard\x20submission'],'related_risks':['R-O-3-02','R-O-4-03','R-O-5-03'],'recommended_templates':['T-O-02']},{'id':'order_set_agent','name':'Set\x20agent\x20list\x20(owner-only,\x20replaces\x20entire\x20list)','operation_field':'agent','move_entry':'set\x20the\x20agent\x20list\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'reversible','governed_operations':['set\x20the\x20agent\x20list\x20(overwrites\x20entire\x20agent\x20list)'],'common_patterns':['Setting\x20the\x20agent\x20list\x20REPLACES\x20the\x20whole\x20list\x20—\x20agents\x20omitted\x20from\x20the\x20new\x20list\x20silently\x20lose\x20access\x20(old\x20agent\x20role\x20records\x20are\x20removed\x20from\x20EntityOrders)','Max\x2010\x20distinct\x20agents\x20per\x20call\x20(E_MAX_AGENT_COUNT,\x20assert\x20length\x20<\x20MAX_AGENT_COUNT\x20before\x20each\x20push)','Can\x20be\x20called\x20at\x20ANY\x20time\x20—\x20NOT\x20frozen\x20after\x20Progress\x20binding','Agents\x20can\x20operate\x20the\x20order\x20(L2\x20ops)\x20but\x20CANNOT\x20change\x20owner\x20or\x20required_info\x20(L1\x20ops)'],'related_risks':['R-O-1-04','R-O-3-01','R-O-4-02'],'recommended_templates':['T-O-03']},{'id':'order_required_info','name':'Update\x20required_info\x20(Contact\x20or\x20WTS\x20Proof)','operation_field':'required_info','move_entry':'update\x20required_info\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'reversible','governed_operations':['update\x20required_info\x20(set\x20Contact\x20or\x20WTS\x20Proof\x20address)','required_info\x20=\x20null\x20(clear)'],'common_patterns':['Contact\x20object\x20=\x20recipient\x20info\x20(shipping\x20address)','WTS\x20Proof\x20object\x20=\x20delivery\x20proof\x20(via\x20Wowok\x20Messenger)','Owner-only\x20—\x20agent\x20CANNOT\x20update\x20required_info'],'related_risks':['R-O-3-02'],'recommended_templates':['T-O-01']},{'id':'order_arb_confirm','name':'Apply\x20for\x20arbitration\x20compensation','operation_field':'arb_confirm','move_entry':'arb_confirm\x20flow\x20(confirm\x20/\x20description\x20/\x20proposition)','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['arb_confirm.confirm\x20(true=confirm\x20materials,\x20false=deny)','arb_confirm.description\x20(compensation\x20application\x20description)','arb_confirm.proposition\x20(compensation\x20claims\x20list)'],'common_patterns':['Triggers\x20Arb\x20→\x20dispute()\x20appends\x20Arb\x20to\x20order.dispute','Both\x20owner\x20and\x20agent\x20can\x20file\x20—\x20agent\x20useful\x20for\x20representative\x20cases','Once\x20filed,\x20the\x20Arb\x20process\x20is\x20irreversible'],'related_risks':['R-O-3-03','R-O-4-04','R-O-5-04'],'recommended_templates':['T-O-04']},{'id':'order_arb_objection','name':'Object\x20to\x20arbitration\x20result','operation_field':'arb_objection','move_entry':'objection\x20to\x20the\x20arbitration\x20ruling','permission_layer':'L2_owner_or_agent','reversibility':'irreversible','governed_operations':['arb_objection.objection\x20(reason\x20for\x20re-arbitration)'],'common_patterns':['Requires\x20Arb\x20status\x20=\x20Arbitrated\x20(after\x20ruling)','Triggers\x20re-arbitration\x20flow','Both\x20owner\x20and\x20agent\x20can\x20object'],'related_risks':['R-O-3-03','R-O-4-04'],'recommended_templates':['T-O-04']},{'id':'order_arb_claim_compensation','name':'Claim\x20compensation\x20(sets\x20claimed_by,\x20irreversible)','operation_field':'arb_claim_compensation','move_entry':'claim\x20compensation\x20→\x20the\x20order\x20is\x20claimed\x20and\x20compensation\x20paid','permission_layer':'L4_object_gated','reversibility':'irreversible','governed_operations':['arb_claim_compensation.arb\x20(the\x20ruled\x20Arb\x20object)','compensate()\x20sets\x20order.claimed_by\x20=\x20arb'],'common_patterns':['⚠️\x20ONE-TIME,\x20IRREVERSIBLE\x20—\x20claimed_by\x20cannot\x20be\x20reset','After\x20claim,\x20NO\x20new\x20disputes\x20can\x20be\x20filed\x20and\x20the\x20order\x20rejects\x20all\x20further\x20payout\x20claims\x20(owner\x20receive\x20aborts\x20E_ORDER_ALREADY_CLAIMED)','Requires\x20Arb\x20status\x20=\x20Arbitrated\x20(ruling\x20final\x20—\x20no\x20op-permission\x20assert)','Compensation\x20is\x20paid\x20to\x20the\x20order\x20owner\x20(permissionless\x20keeper\x20—\x20the\x20sender\x20never\x20receives)'],'related_risks':['R-O-3-03','R-O-4-04','R-O-5-04'],'recommended_templates':['T-O-06']},{'id':'order_receive','name':'Receive\x20payment\x20(Receiving-gated,\x20funds\x20to\x20owner)','operation_field':'receive','move_entry':'receive\x20payment\x20(coin\x20or\x20Receiving\x20object)','permission_layer':'L4_object_gated','reversibility':'reversible','governed_operations':['receive\x20CoinWrapper\x20(unwrap\x20and\x20forward\x20to\x20owner)','receive\x20arbitrary\x20Receiving<K>\x20object'],'common_patterns':['⚠️\x20Gated\x20by\x20Receiving\x20existence:\x20the\x20allocation\x20payout\x20must\x20have\x20run\x20and\x20created\x20a\x20Receiving\x20at\x20the\x20caller\x27s\x20address\x20—\x20without\x20it\x20the\x20call\x20cannot\x20even\x20be\x20constructed','Receiving\x20must\x20match\x20the\x20Payment\x20object\x20(EPAYMENT_NOT_MATCH\x20on\x20mismatch)','No\x20owner\x20assert\x20—\x20funds\x20are\x20ALWAYS\x20forwarded\x20to\x20order.owner\x20regardless\x20of\x20caller','Can\x20be\x20called\x20multiple\x20times\x20(e.g.\x20partial\x20refunds)','Receives\x20are\x20unwrapped\x20(CoinWrapper\x20→\x20Coin)\x20and\x20transferred\x20to\x20owner\x20address'],'related_risks':['R-O-3-01','R-O-4-05'],'recommended_templates':['T-O-05']},{'id':'order_transfer','name':'Transfer\x20order\x20ownership\x20(irreversible)','operation_field':'transfer_to','move_entry':'transfer\x20the\x20order\x20to\x20a\x20new\x20owner\x20(owner-only)','permission_layer':'L1_owner_only','reversibility':'irreversible','governed_operations':['transfer_to\x20(new\x20owner\x20address)'],'common_patterns':['⚠️\x20IRREVERSIBLE\x20—\x20new\x20owner\x20takes\x20over\x20ALL\x20permissions','Only\x20owner\x20can\x20transfer','Can\x20be\x20called\x20even\x20after\x20Progress\x20binding\x20(unlike\x20setting\x20the\x20agent\x20list)','New\x20owner\x20becomes\x20the\x20sole\x20receiver\x20of\x20future\x20payments'],'related_risks':['R-O-3-01','R-O-4-06'],'recommended_templates':['T-O-05']},{'id':'order_dispute_append','name':'Append\x20Arb\x20to\x20dispute\x20list\x20(package-only)','operation_field':'lifecycle','move_entry':'append\x20Arb\x20to\x20the\x20dispute\x20list\x20(package-only)','permission_layer':'L3_package_only','reversibility':'append_only','governed_operations':['dispute(arb)\x20—\x20append\x20Arb\x20address\x20to\x20order.dispute'],'common_patterns':['Called\x20by\x20the\x20Arbitration\x20module\x20when\x20a\x20dispute\x20is\x20filed,\x20NOT\x20by\x20external\x20users','Max\x2010\x20Arb\x20addresses\x20(MAX_DISPUTE_COUNT)','Frozen\x20when\x20claimed_by\x20is\x20set\x20(E_ORDER_ALREADY_CLAIMED)','Duplicate\x20Arb\x20addresses\x20are\x20silently\x20skipped'],'related_risks':['R-O-1-03','R-O-3-03','R-O-5-04'],'recommended_templates':['T-O-04']}];export const ORDER_AUDIT_FORMULAS={'status_inference':'if\x20claimed_by\x20!=\x20null:\x20CLAIMED;\x20'+'elif\x20progress\x20!=\x20null:\x20query\x20Progress\x20→\x20terminal?\x20COMPLETED\x20:\x20cancel?\x20CANCELLED\x20:\x20IN_PROGRESS;\x20'+'elif\x20dispute.length\x20>\x200:\x20DISPUTED;\x20'+'else:\x20CREATED','amount_check':'order.amount\x20=\x20sum(items[].price\x20*\x20items[].quantity)\x20-\x20discount_value','fund_balance':'order.amount\x20=\x20allocation_distributed\x20+\x20compensation_paid\x20+\x20refund_amount','dispute_constraint':'dispute.length\x20<=\x20MAX_DISPUTE_COUNT\x20(10);\x20frozen\x20when\x20claimed_by.is_some()','agent_constraint':'agent.length\x20<=\x20MAX_AGENT_COUNT\x20(doc=10,\x20⚠️\x20actual=11\x20due\x20to\x20<=\x20bug\x20in\x20the\x20agent-set\x20implementation)'};export const ORDER_LEDGER_VERSION='1.0.0';export function getScenesByOperationField(a){return ORDER_SCENES['filter'](b=>b['operation_field']===a);}export function findSceneById(a){return ORDER_SCENES['find'](b=>b['id']===a);}export function findSceneByMoveEntry(a){return ORDER_SCENES['find'](b=>b['move_entry']['includes'](a));}export function getScenesByPermissionLayer(a){return ORDER_SCENES['filter'](b=>b['permission_layer']===a);}export function getScenesByReversibility(a){return ORDER_SCENES['filter'](b=>b['reversibility']===a);}export function getFieldDef(a){return ORDER_FIELDS['find'](b=>b['move_name']===a);}export function getMutableFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x4);}export function getImmutableFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x1);}export function getFrozenAfterProgressFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x3);}export function getOneTimeSetFields(){return ORDER_FIELDS['filter'](a=>a['mutability_layer']===0x2);}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[['buy','order_create'],['purchase','order_create'],['advance','order_advance'],['forward','order_advance'],['progress','order_advance'],['set\x20agent','order_set_agent'],['agent','order_set_agent'],['required_info','order_required_info'],['recipient','order_required_info'],['arb\x20confirm','order_arb_confirm'],['apply\x20arbitration','order_arb_confirm'],['apply\x20compensation','order_arb_confirm'],['objection','order_arb_objection'],['object','order_arb_objection'],['claim\x20compensation','order_arb_claim_compensation'],['claim','order_arb_claim_compensation'],['receive','order_receive'],['collect','order_receive'],['withdraw','order_receive'],['transfer','order_transfer'],['transfer\x20ownership','order_transfer'],['handover','order_transfer']];for(const [d,e]of c){if(b['includes'](d['toLowerCase']()))return findSceneById(e);}return undefined;}export function getEmittedEvents(){return ORDER_LIFECYCLE_EVENTS['filter'](a=>a['actually_emitted']);}export function getInferredEvents(){return ORDER_LIFECYCLE_EVENTS['filter'](a=>!a['actually_emitted']);}export function getOrderScenesCount(){return ORDER_SCENES['length'];}export function sdkToMoveField(a){const b=ORDER_FIELDS['find'](c=>c['sdk_name']===a);return b?.['move_name'];}export function moveToSdkField(a){const b=ORDER_FIELDS['find'](c=>c['move_name']===a);return b?.['sdk_name'];}
@@ -18,16 +18,10 @@ export interface ReviewStats {
18
18
  count: number;
19
19
  }>;
20
20
  recentTrend: "improving" | "declining" | "stable";
21
+ bidirectionalRate: number | null;
21
22
  }
22
- export interface ReviewRepositorySetup {
23
- repositoryName: string;
24
- guardName: string;
25
- guardRules: string;
26
- setupSteps: string[];
27
- }
28
- export declare const REPUTATION_RULES_VERSION = 1;
29
- export declare function buildReviewRepositorySetup(serviceName: string): ReviewRepositorySetup;
30
- export declare function computeReviewStats(reviews: Review[]): ReviewStats;
23
+ export declare const REPUTATION_RULES_VERSION = 2;
24
+ export declare function computeReviewStats(reviews: Review[], merchantReviews?: Review[]): ReviewStats;
31
25
  export declare function isVerifiedReview(review: Review, orderHistory: Array<{
32
26
  id: string;
33
27
  status: string;
@@ -1 +1 @@
1
- export const REPUTATION_RULES_VERSION=0x1;export function buildReviewRepositorySetup(a){return{'repositoryName':a+'_reviews','guardName':a+'_review_guard','guardRules':'Verify\x20that\x20the\x20submitter\x20has\x20a\x20completed\x20order\x20for\x20this\x20Service\x20(query\x20order\x20history\x20==\x20completed)\x20—\x20anti-review-spam','setupSteps':['1.\x20Create\x20Guard:\x20name=\x27'+a+'_review_guard\x27,\x20rule\x20verifies\x20buyer\x20identity','2.\x20Create\x20Repository:\x20name=\x27'+a+'_reviews\x27,\x20attach\x20Guard','3.\x20Associate\x20Repository\x20with\x20Service:\x20onchain_operations\x20service\x20modify','4.\x20When\x20user\x20submits\x20a\x20review:\x20onchain_operations\x20repository\x20write\x20(Guard\x20auto-validates)','5.\x20Query\x20reviews:\x20onchain_table_data\x20repository\x20query']};}export function computeReviewStats(a){if(a['length']===0x0)return{'total':0x0,'likes':0x0,'dislikes':0x0,'likeRate':0x0,'verifiedCount':0x0,'topTags':[],'recentTrend':'stable'};const b=a['filter'](n=>n['rating']==='like')['length'],c=a['filter'](n=>n['rating']==='dislike')['length'],d=a['filter'](n=>n['verified'])['length'],e=new Map();for(const n of a){if(n['tags'])for(const o of n['tags']){e['set'](o,(e['get'](o)??0x0)+0x1);}}const f=Array['from'](e['entries']())['sort']((p,q)=>q[0x1]-p[0x1])['slice'](0x0,0x5)['map'](([p,q])=>({'tag':p,'count':q})),g=[...a]['sort']((p,q)=>(p['timestamp']??0x0)-(q['timestamp']??0x0)),h=Math['floor'](g['length']/0x2),i=g['slice'](0x0,h),j=g['slice'](h),k=i['length']>0x0?i['filter'](p=>p['rating']==='like')['length']/ i['length']:0.5,l=j['length']>0x0?j['filter'](p=>p['rating']==='like')['length']/j['length']:0.5;let m='stable';if(l>k+0.15)m='improving';else{if(l<k-0.15)m='declining';}return{'total':a['length'],'likes':b,'dislikes':c,'likeRate':b/a['length'],'verifiedCount':d,'topTags':f,'recentTrend':m};}export function isVerifiedReview(a,b){if(!a['orderRef'])return![];const c=b['find'](d=>d['id']===a['orderRef']);return c?.['status']==='completed'||c?.['status']==='success';}export function filterVerifiedReviews(a,b){return a['map'](c=>({...c,'verified':isVerifiedReview(c,b)}));}export function detectReviewManipulation(a){const b=[],c=new Map();for(const g of a){c['set'](g['reviewer'],(c['get'](g['reviewer'])??0x0)+0x1);}const d=Array['from'](c['entries']())['filter'](([,h])=>h>0x1);d['length']>0x0&&b['push'](d['length']+'\x20address(es)\x20submitted\x20multiple\x20reviews');const e=a['every'](h=>h['rating']==='like'),f=a['every'](h=>!h['verified']);e&&a['length']>0x5&&f&&b['push']('All\x20likes\x20but\x20no\x20verified\x20reviews;\x20possible\x20review\x20spam');if(a['length']>0xa){const h=[...a]['sort']((j,k)=>(j['timestamp']??0x0)-(k['timestamp']??0x0)),i=(h[h['length']-0x1]['timestamp']??0x0)-(h[0x0]['timestamp']??0x0);i>0x0&&i<0xe10*0x3e8&&b['push'](a['length']+'\x20reviews\x20submitted\x20within\x201\x20hour;\x20abnormally\x20concentrated\x20timing');}return{'suspicious':b['length']>0x0,'reasons':b};}
1
+ export const REPUTATION_RULES_VERSION=0x2;export function computeReviewStats(a,b){let c=null;if(b!==undefined){const p=new Set(b['map'](s=>s['orderRef'])['filter'](s=>s!=null)),q=a['filter'](s=>s['orderRef']!=null);c=q['length']===0x0?0x0:q['filter'](s=>p['has'](s['orderRef']))['length']/q['length'];}if(a['length']===0x0)return{'total':0x0,'likes':0x0,'dislikes':0x0,'likeRate':0x0,'verifiedCount':0x0,'topTags':[],'recentTrend':'stable','bidirectionalRate':c};const d=a['filter'](s=>s['rating']==='like')['length'],e=a['filter'](s=>s['rating']==='dislike')['length'],f=a['filter'](s=>s['verified'])['length'],g=new Map();for(const s of a){if(s['tags'])for(const u of s['tags']){g['set'](u,(g['get'](u)??0x0)+0x1);}}const h=Array['from'](g['entries']())['sort']((v,w)=>w[0x1]-v[0x1])['slice'](0x0,0x5)['map'](([v,w])=>({'tag':v,'count':w})),i=[...a]['sort']((v,w)=>(v['timestamp']??0x0)-(w['timestamp']??0x0)),j=Math['floor'](i['length']/0x2),k=i['slice'](0x0,j),l=i['slice'](j),m=k['length']>0x0?k['filter'](v=>v['rating']==='like')['length']/k['length']:0.5,n=l['length']>0x0?l['filter'](v=>v['rating']==='like')['length']/l['length']:0.5;let o='stable';if(n>m+0.15)o='improving';else{if(n<m-0.15)o='declining';}return{'total':a['length'],'likes':d,'dislikes':e,'likeRate':d/a['length'],'verifiedCount':f,'topTags':h,'recentTrend':o,'bidirectionalRate':c};}export function isVerifiedReview(a,b){if(!a['orderRef'])return![];const c=b['find'](d=>d['id']===a['orderRef']);return c?.['status']==='completed'||c?.['status']==='success';}export function filterVerifiedReviews(a,b){return a['map'](c=>({...c,'verified':isVerifiedReview(c,b)}));}export function detectReviewManipulation(a){const b=[],c=new Map();for(const g of a){c['set'](g['reviewer'],(c['get'](g['reviewer'])??0x0)+0x1);}const d=Array['from'](c['entries']())['filter'](([,h])=>h>0x1);d['length']>0x0&&b['push'](d['length']+'\x20address(es)\x20submitted\x20multiple\x20reviews');const e=a['every'](h=>h['rating']==='like'),f=a['every'](h=>!h['verified']);e&&a['length']>0x5&&f&&b['push']('All\x20likes\x20but\x20no\x20verified\x20reviews;\x20possible\x20review\x20spam');if(a['length']>0xa){const h=[...a]['sort']((j,k)=>(j['timestamp']??0x0)-(k['timestamp']??0x0)),i=(h[h['length']-0x1]['timestamp']??0x0)-(h[0x0]['timestamp']??0x0);i>0x0&&i<0xe10*0x3e8&&b['push'](a['length']+'\x20reviews\x20submitted\x20within\x201\x20hour;\x20abnormally\x20concentrated\x20timing');}return{'suspicious':b['length']>0x0,'reasons':b};}
@@ -64,6 +64,15 @@ export interface ImmutabilityRule {
64
64
  message: string;
65
65
  }
66
66
  export declare const IMMUTABILITY_RULES: readonly ImmutabilityRule[];
67
+ export interface ProtocolSlotRule {
68
+ rule_id: string;
69
+ slot: number;
70
+ asserted_by: string[];
71
+ required_declaration: string;
72
+ violation: string;
73
+ message: string;
74
+ }
75
+ export declare const PROTOCOL_SLOT_RULES: readonly ProtocolSlotRule[];
67
76
  export type OperationClass = "LOCAL_ONLY" | "ONCHAIN" | "QUERY" | "ENCRYPTED";
68
77
  export declare const OPERATION_TYPE_CLASSIFICATION: Record<OperationClass, readonly string[]>;
69
78
  export interface OperationClassMeta {
@@ -121,4 +130,4 @@ export declare function checkImmutabilityRules(ops: readonly {
121
130
  trigger: "create" | "publish";
122
131
  name?: string;
123
132
  }[]): SafetyRiskItem[];
124
- export declare const SAFETY_RULES_VERSION = 2;
133
+ export declare const SAFETY_RULES_VERSION = 3;
@@ -1 +1 @@
1
- import{formatMist,GasTokenType,MAINNET_BRIDGE_CONFIG,formatUnits,isFundApprovalExempt}from'@wowok/wowok';export const DEFAULT_VALUE_WARNINGS={'defaultAccount':'Using\x20default\x20account\x20(env.account=\x22\x22)','mainnet':'Operating\x20on\x20mainnet\x20—\x20irreversible','replaceExistName':'replaceExistName=true\x20will\x20unbind\x20the\x20existing\x20name\x20(breaking\x20refs):\x20the\x20previously\x20named\x20object\x20stays\x20on-chain\x20but\x20becomes\x20unreachable\x20by\x20name\x20—\x20any\x20funds\x20it\x20holds\x20(e.g.\x20an\x20old\x20Order\x27s\x20Allocation)\x20are\x20orphaned.\x20Re-running\x20a\x20build\x20with\x20the\x20same\x20name\x20creates\x20a\x20SECOND\x20object,\x20not\x20a\x20replacement','defaultToken':'Using\x20default\x20token\x200x2::wow::WOW'};export const DEFAULT_AMOUNT_THRESHOLD=BigInt(0x174876e800);export function getAmountThreshold(){const a=process['env']['WOWOK_AMOUNT_THRESHOLD'];if(!a)return DEFAULT_AMOUNT_THRESHOLD;try{return BigInt(a);}catch{return DEFAULT_AMOUNT_THRESHOLD;}}export const DEFAULT_FUND_COVERAGE_MIN=0x1;export function getFundCoverageMin(){const a=process['env']['WOWOK_FUND_COVERAGE_MIN'];if(a===undefined||a['trim']()==='')return DEFAULT_FUND_COVERAGE_MIN;const b=Number(a);if(!Number['isFinite'](b)||b<0x0)return DEFAULT_FUND_COVERAGE_MIN;return b;}export function formatAmount(a){return formatMist(a);}function bestEffortTokenType(a){return a?.['object']?.['type_parameter']??a?.['type_parameter'];}function describeAmount(a,b){if(!b||b===GasTokenType)try{return formatMist(a);}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+GasTokenType;}return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}function containsReplaceExistName(a,b,c){if(a===null||typeof a!=='object'||b>0x8)return![];const d=a;if(c['has'](d))return![];c['add'](d);if(d['replaceExistName']===!![])return!![];for(const e of Object['values'](d)){if(containsReplaceExistName(e,b+0x1,c))return!![];}return![];}export function collectDefaultWarnings(a,b){const c=[],d=a?.['account'];(d===undefined||d==='')&&c['push'](DEFAULT_VALUE_WARNINGS['defaultAccount']);const e=a?.['network'];e&&/mainnet/i['test'](String(e))&&c['push'](DEFAULT_VALUE_WARNINGS['mainnet']);const f=b?.['namedNew']??b?.['object'];return f&&typeof f==='object'&&f['replaceExistName']===!![]&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),b&&typeof b==='object'&&containsReplaceExistName(b,0x0,new Set())&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),[...new Set(c)];}export const BRIDGE_FUND_OPERATION_TYPES=['cross_chain_wow_to_evm','cross_chain_evm_to_wow','claim_wow_to_evm','resume_transfer','withdraw'];function describeBridgeAmount(a,b,c){if(b==='WOW'||!b&&c==='wow_to_evm')return formatMist(a);const d=MAINNET_BRIDGE_CONFIG?.['tokens']?.['find'](f=>f['symbol']?.['toUpperCase']()===b?.['toUpperCase']()),e=d?c==='wow_to_evm'?d['wowDecimals']:d['evmDecimals']:undefined;if(e===undefined)return a+'\x20raw\x20smallest\x20units\x20of\x20'+(b??'the\x20bridge\x20token');try{return formatUnits(BigInt(a),e)+'\x20'+b;}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}}export const CONFIRMATION_RULES=[{'id':'bridge_fund_movement','when':(a,b,c)=>BRIDGE_FUND_OPERATION_TYPES['includes'](a),'level':'irreversible','preview':(a,b,c)=>{const d=typeof b?.['amount']==='string'?b['amount']:undefined,e=typeof b?.['token']==='string'?b['token']:undefined,f=b?.['withdrawTo']??b?.['recipientWowAddress']??b?.['to']??(a==='claim_wow_to_evm'||a==='resume_transfer'?b?.['transferId']:undefined),g=a==='cross_chain_wow_to_evm'?'wow_to_evm':'evm_side';return{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','amount':d!==undefined?{'value':d,'token':e??(g==='wow_to_evm'?GasTokenType:'ETH'),'human_readable':describeBridgeAmount(d,e,g),'recipient':f}:undefined,'warnings':[...collectDefaultWarnings(c,b),a==='withdraw'?'EVM\x20withdrawal\x20from\x20activeEvmAccount\x20—\x20funds\x20move\x20to\x20an\x20external\x20EVM\x20address;\x20irreversible.':'Cross-chain\x20bridge\x20transfer\x20—\x20funds\x20leave\x20the\x20source\x20chain;\x20recovery\x20(if\x20any)\x20requires\x20the\x20opposite-side\x20claim\x20or\x20resume_transfer,\x20never\x20a\x20rollback.']};},'bypass_on_explicit_intent':[]},{'id':'irreversible_fund_or_verdict','when':(a,b,c)=>{const d=c?.['network'],e=bestEffortTokenType(b)??GasTokenType;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['map'](g=>g?.['amount']?.['balance'])['filter'](g=>typeof g==='string'||typeof g==='number');if(f['length']===b['revenue']['length']&&f['every'](g=>isFundApprovalExempt(d,e,String(g))))return![];return!![];}if(a==='treasury'&&b?.['withdraw']){const g=extractAmount(b);if(g!==null&&isFundApprovalExempt(d,e,g))return![];return!![];}if(a==='payment')return!![];if(a==='arbitration'&&b?.['arbitration']!==undefined)return!![];if(b?.['receive']!==undefined||b?.['owner_receive']!==undefined||b?.['received_coins']!==undefined||b?.['compensation_fund_receive']!==undefined)return!![];if(b?.['alloc_by_guard']!==undefined)return!![];if(a==='reward'&&b?.['claim']!==undefined)return!![];if(a==='service'&&b?.['compensation_fund_withdraw']!==undefined)return!![];if(a==='order'&&b?.['arb_claim_compensation']!==undefined)return!![];if(a==='arbitration'&&(b?.['arb_withdraw']!==undefined||b?.['fees_transfer']!==undefined))return!![];if(a==='treasury'){if(b?.['withdraw'])return!![];return![];}return![];},'level':'irreversible','preview':(a,b,c)=>{let d;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['find'](g=>typeof g?.['amount']?.['balance']==='string'||typeof g?.['amount']?.['balance']==='number');if(f){const g=String(f['amount']['balance']);d={'value':g,'human_readable':describeAmount(g,bestEffortTokenType(b))};}else d={'value':'','human_readable':'entire\x20Coin\x20object(s)\x20(amount\x20resolved\x20by\x20the\x20fund\x20layer)'};}const e=[];return a==='reward'&&b?.['claim']!==undefined&&e['push']('Reward\x20claim\x20—\x20Guard-verified\x20payout\x20splits\x20the\x20pool\x20balance\x20and\x20transfers\x20coins\x20to\x20the\x20claimer;\x20the\x20exact\x20amount\x20is\x20determined\x20by\x20the\x20Reward\x27s\x20guard\x20config.'),a==='service'&&b?.['compensation_fund_withdraw']!==undefined&&e['push']('Compensation\x20fund\x20withdraw\x20—\x20withdraws\x20the\x20ENTIRE\x20compensation_fund\x20into\x20a\x20new\x20Payment\x20owned\x20by\x20\x27'+(b['compensation_fund_withdraw']?.['receipt']??'(recipient)')+'\x27.'),a==='order'&&b?.['arb_claim_compensation']!==undefined&&e['push']('Order\x20compensation\x20claim\x20—\x20splits\x20the\x20Service\x27s\x20compensation_fund\x20and\x20transfers\x20the\x20awarded\x20coins\x20to\x20the\x20caller;\x20irreversible.'),a==='arbitration'&&b?.['arb_withdraw']!==undefined&&e['push']('Arb\x20fee\x20withdraw\x20—\x20sweeps\x20the\x20Arb\x27s\x20fee\x20balance\x20into\x20the\x20Arbitration\x20object\x27s\x20balance.'),a==='arbitration'&&b?.['fees_transfer']!==undefined&&e['push']('Arbitration\x20fees\x20transfer\x20—\x20withdraws\x20the\x20ENTIRE\x20Arbitration\x20balance\x20into\x20a\x20new\x20Payment\x20for\x20the\x20target\x20Allocation/Treasury;\x20irreversible.'),{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),...e],'amount':a==='payment'&&d?{...d,'token':bestEffortTokenType(b)??GasTokenType,'recipient':b?.['revenue']?.[0x0]?.['recipient']}:undefined};},'bypass_on_explicit_intent':[]},{'id':'publish_immutable','when':(a,b,c)=>{if(a==='service'&&(b?.['publish']===!![]||b?.['bPublished']===!![]))return!![];if(a==='machine'&&b?.['publish']===!![])return!![];return![];},'level':'publish','preview':(a,b,c)=>({'level':'publish','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':a==='service'?['machine','order_allocators']:['nodes','pairs','forwards'],'warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['force\x20publish','publish\x20now']},{'id':'amount_sensitive','when':(a,b,c)=>{const d=extractAmount(b);if(d!==null){if(isFundApprovalExempt(c?.['network'],bestEffortTokenType(b)??GasTokenType,d))return![];return!![];}if(a==='service'&&b?.['order_new'])return!![];if(a==='treasury'&&b?.['deposit']?.['coin']?.['coin'])return!![];if(a==='reward'&&b?.['coin_add']?.['coin'])return!![];if(a==='allocation'&&b?.['coin']?.['coin'])return!![];return![];},'level':'amount','preview':(a,b,c)=>{const d=extractAmount(b),e=bestEffortTokenType(b);return{'level':'amount','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','amount':d?{'value':d,'token':e??GasTokenType,'human_readable':describeAmount(d,e)}:{'value':'','token':e??GasTokenType,'human_readable':'entire\x20Coin\x20object\x20(amount\x20resolved\x20on-chain)'},'warnings':collectDefaultWarnings(c,b)};},'bypass_on_explicit_intent':[]},{'id':'default_values','when':(a,b,c)=>{return collectDefaultWarnings(c,b)['length']>0x0;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['use\x20default\x20account','default\x20account\x20is\x20fine','use\x20the\x20default\x20account','default\x20account\x20works\x20fine']},{'id':'guard_create_immutable','when':(a,b,c)=>{if(a==='guard')return!![];return![];},'level':'irreversible','preview':(a,b,c)=>{const d=b?.['table']??[],e=b?.['root'],f=b?.['rely'],g=typeof e==='object'&&e!==null&&'type'in e?e['type']:typeof e==='object'&&e!==null&&'type'in e&&e['type']==='file'?'file':'unknown',h=['table','root'];if(f)h['push']('rely');let i='';try{i=JSON['stringify'](e??{});}catch{i='';}const j=[],k=(Array['isArray'](d)?d:[])['filter'](l=>l&&l['b_submission']===!![]&&String(l['value_type'])['toLowerCase']()==='address');if(k['length']>0x0){const l=/order\.service|progress\.machine|arb\.service|order\.machine/i['test'](i);!l&&j['push']('PRE-LINT\x20R-C3-05:\x20submitted\x20Address\x20slot(s)\x20are\x20not\x20bound\x20to\x20this\x20project\x20in\x20the\x20root\x20(no\x20order.service/progress.machine\x20comparison)\x20—\x20a\x20cross-project\x20object\x20can\x20satisfy\x20this\x20Guard.\x20Add\x20the\x20binding\x20BEFORE\x20confirming:\x20the\x20Guard\x20is\x20immutable\x20after\x20creation'),!/signer/i['test'](i)&&j['push']('PRE-LINT\x20identity:\x20submitted\x20data\x20is\x20not\x20tied\x20to\x20the\x20transaction\x20signer\x20(no\x20context(Signer)\x20clause)\x20—\x20anyone\x20able\x20to\x20trigger\x20the\x20host\x20operation\x20can\x20submit\x20arbitrary\x20values.\x20Add\x20a\x20Signer\x20binding\x20if\x20the\x20submitter\x20must\x20be\x20authorized');}return{'level':'irreversible','operation':a,'object':b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':h,'irreversible':!![],'warnings':[...collectDefaultWarnings(c,b),'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation','Table\x20entries:\x20'+d['length']+'\x20(max\x20256)','Root\x20node\x20type:\x20'+g+'\x20(must\x20return\x20Bool)',...f?['Rely\x20dependencies:\x20'+(f['guards']?.['length']??0x0)+'\x20(max\x204,\x20AND/OR\x20logic)']:[],...j,'To\x20modify\x20later:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind']};},'bypass_on_explicit_intent':[]},{'id':'guard_gen_passport_test','when':(a,b,c)=>{if(a==='gen_passport')return!![];return![];},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['guard'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'gen_passport\x20will\x20consume\x20gas\x20for\x20static\x20testing']}),'bypass_on_explicit_intent':['test\x20guard','testing\x20guard','gen\x20passport','generate\x20passport']},{'id':'progress_advance','when':(a,b,c)=>{if(a!=='progress')return![];return b?.['operate']?.['op']==='next'||b?.['owner_receive']!==undefined;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'Advancing\x20the\x20progress\x20node\x20may\x20release\x20funds\x20per\x20the\x20machine\x20allocation']}),'bypass_on_explicit_intent':[]}];export function resolveOverrideId(a,b){if(a==='publish_immutable'){if(b==='service')return'service.publish';if(b==='machine')return'machine.publish';return undefined;}if(a==='progress_advance')return'node.advance';if(a==='default_values')return'confirm.default_values';if(a==='guard_gen_passport_test')return'confirm.gen_passport_test';return undefined;}export function extractAmount(a,b){if(!a)return null;const d=i=>{if(typeof i==='number')return String(i);if(typeof i==='string'&&i!=='')return i;return null;},e=[a?.['balance'],a?.['amount'],a?.['compensation_fund_add']?.['balance'],a?.['coin_add']?.['balance'],a?.['coin']?.['balance'],a?.['order_new']?.['buy']?.['total_pay']?.['balance'],a?.['dispute']?.['fee']?.['balance'],a?.['fee'],a?.['arbitration']?.['indemnity'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']],f=[];for(const i of e){const j=d(i);if(j!==null)f['push'](j);}if(Array['isArray'](a?.['revenue']))for(const k of a['revenue']){const l=d(k?.['amount']?.['balance']);if(l!==null)f['push'](l);}if(Array['isArray'](a?.['guard_add']))for(const m of a['guard_add']){if(m?.['amount']?.['type']==='Fixed'){const n=d(m['amount']['value']);if(n!==null)f['push'](n);}}if(!b?.['excludeConfigAmounts'])for(const o of[a?.['allocators'],a?.['order_allocators']]){if(!o||typeof o!=='object')continue;const p=d(o['threshold']);if(p!==null)f['push'](p);for(const q of Array['isArray'](o['allocators'])?o['allocators']:[]){if(Array['isArray'](q?.['sharing']))for(const u of q['sharing']){if(u?.['mode']==='Amount'){const w=d(u['sharing']);if(w!==null)f['push'](w);}}const t=d(q?.['max']);if(t!==null)f['push'](t);}}const h=f['filter'](x=>{try{return BigInt(x)!==0x0n;}catch{return!![];}});if(h['length']===0x0)return null;if(h['length']===0x1)return h[0x0];try{return h['reduce']((x,y)=>x+BigInt(y),0x0n)['toString']();}catch{return h[0x0];}}export const OBJECT_REUSE_RULES=[{'rule_id':'REUSE-001','object_type':'permission','recommendation':'strongly_recommended','reason':'Centralized\x20permission\x20control\x20across\x20all\x20services','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Permission\x20to\x20reuse?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-002','object_type':'machine','recommendation':'recommended','reason':'Save\x20design\x20time\x20for\x20similar\x20processes','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Machine\x20whose\x20workflow\x20fits?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-003','object_type':'guard','recommendation':'recommended','reason':'Avoid\x20redundant\x20validation\x20rules','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Guard\x20with\x20matching\x20validation\x20logic?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-004','object_type':'contact','recommendation':'recommended','reason':'Single\x20point\x20of\x20customer-service\x20management','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Contact\x20for\x20customer\x20service?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-005','object_type':'arbitration','recommendation':'always_reuse','reason':'Customers\x20choose\x20from\x20established\x20arbiters;\x20creating\x20a\x20new\x20Arbitration\x20is\x20an\x20operator-level\x20decision','ask_user':'Which\x20existing\x20Arbitration\x20service\x20should\x20disputes\x20route\x20to?\x20Provide\x20the\x20name\x20or\x20ID.'}];export const CREATE_VS_MODIFY_PATTERN={'reuse_form':'string','create_form':'object','resolution_api':'GetObjectExisted','note':'String\x20reference\x20=\x20REUSE\x20(name\x20resolution\x20failure\x20is\x20a\x20hard\x20error);\x20object\x20shape\x20=\x20CREATE\x20(always).'};export const IMMUTABILITY_RULES=[{'rule_id':'IMMUT-001','object_type':'machine','trigger':'publish','immutable_fields':['nodes','pairs','forwards'],'message':'Machine\x20topology\x20is\x20immutable\x20after\x20publish\x20—\x20verify\x20all\x20nodes/forwards\x20via\x20machineNode2file\x20BEFORE\x20publishing'},{'rule_id':'IMMUT-002','object_type':'service','trigger':'publish','immutable_fields':['machine','order_allocators'],'mutable_after':['arbitrations','rewards','sales'],'message':'Service.machine\x20and\x20order_allocators\x20are\x20PERMANENTLY\x20frozen\x20after\x20publish\x20(L1);\x20arbitrations/rewards\x20can\x20still\x20be\x20ADDED\x20but\x20remove/clear\x20is\x20time-locked\x20(L2:\x20pause\x20+\x20setting_lock_duration);\x20sales\x20remains\x20fully\x20modifiable\x20(L3)\x20without\x20pause'},{'rule_id':'IMMUT-003','object_type':'guard','trigger':'create','immutable_fields':['table','root','rely'],'message':'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation.\x20To\x20change:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind'}];export const OPERATION_TYPE_CLASSIFICATION={'LOCAL_ONLY':['account_operation','local_mark_operation','local_info_operation','config_operation'],'ONCHAIN':['onchain_operations','wip_file','bridge_operation','messenger_operation'],'QUERY':['query_toolkit','onchain_table_data','onchain_events','guard2file','machineNode2file','schema_query','wowok_buildin_info'],'ENCRYPTED':['messenger_operation']};export const OPERATION_CLASS_META={'LOCAL_ONLY':{'gas':![],'confirmation_required':![],'note':'Local\x20state\x20only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ONCHAIN':{'gas':!![],'confirmation_required':!![],'note':'On-chain\x20write\x20—\x20gas\x20consumed,\x20explicit\x20user\x20confirmation\x20REQUIRED\x20before\x20execution'},'QUERY':{'gas':![],'confirmation_required':![],'note':'Read-only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ENCRYPTED':{'gas':![],'confirmation_required':![],'note':'Local\x20encryption\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'}};export function classifyTool(a){if(OPERATION_TYPE_CLASSIFICATION['ENCRYPTED']['includes'](a))return'ENCRYPTED';for(const b of['LOCAL_ONLY','ONCHAIN','QUERY']){if(OPERATION_TYPE_CLASSIFICATION[b]['includes'](a))return b;}return undefined;}export const NAMING_CONVENTIONS={'scheme':'<projectPrefix>_<type>_<purpose>_<version>','parts':{'project_prefix':{'example':'shopFunny_','purpose':'Prevents\x20cross-project\x20collisions'},'type_prefix':{'example':'machine_\x20/\x20guard_\x20/\x20service_','purpose':'Clarifies\x20object\x20type'},'purpose_suffix':{'example':'serviceWithdraw','purpose':'Describes\x20function'},'version_suffix':{'example':'_v2','purpose':'Enables\x20iteration\x20without\x20replaceExistName'}},'entry_id':{'pattern':'^<object_type>:<name>$','example':'service:myshop_service'},'replace_exist_name':{'default':![],'false_effect':'Throws\x20error\x20if\x20name\x20is\x20in\x20use\x20—\x20safe\x20default','true_effect':'Existing\x20object/account\x20with\x20the\x20same\x20name\x20is\x20suspended/unbound\x20to\x20free\x20the\x20name','account_default_forbidden':'replaceExistName:true\x20on\x20the\x20default\x20account\x20(name=\x27\x27)\x20is\x20FORBIDDEN\x20—\x20use\x20suspend()\x20explicitly','recommendation':'DISCOURAGED\x20—\x20prefer\x20versioned\x20names\x20(_v1,\x20_v2)\x20for\x20production'},'recommendations':['Always\x20provide\x20tags\x20on\x20object\x20creation\x20for\x20filtering\x20and\x20management','Use\x20names\x20as\x20primary\x20identifiers;\x20use\x20short\x20address\x20form\x20(0x1234...def)\x20only\x20for\x20display','All\x20cross-object\x20references\x20(Guard\x20tables,\x20Service\x20bindings,\x20Machine\x20forwards)\x20use\x20NAMES\x20—\x20resolved\x20per-network\x20at\x20build\x20time']};export function checkObjectReuseRules(a){const b=[];for(const c of a){if(!c['is_new'])continue;const d=OBJECT_REUSE_RULES['find'](e=>e['object_type']===c['object_type']);if(!d)continue;(d['recommendation']==='always_reuse'||d['recommendation']==='strongly_recommended')&&b['push']({'rule_id':d['rule_id'],'severity':d['recommendation']==='always_reuse'?'warn':'info','message':'Creating\x20NEW\x20'+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20—\x20reuse\x20is\x20'+d['recommendation']+':\x20'+d['reason']+'.\x20'+d['ask_user']});}return b;}export function checkImmutabilityRules(a){const b=[];for(const c of a){const d=IMMUTABILITY_RULES['find'](e=>e['object_type']===c['object_type']&&e['trigger']===c['trigger']);if(!d)continue;b['push']({'rule_id':d['rule_id'],'severity':'warn','message':''+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20'+c['trigger']+':\x20'+d['message']+'.\x20Immutable:\x20['+d['immutable_fields']['join'](',\x20')+']'+(d['mutable_after']?'.\x20Still\x20mutable:\x20['+d['mutable_after']['join'](',\x20')+']':'')});}return b;}export const SAFETY_RULES_VERSION=0x2;
1
+ import{formatMist,GasTokenType,MAINNET_BRIDGE_CONFIG,formatUnits,isFundApprovalExempt}from'@wowok/wowok';export const DEFAULT_VALUE_WARNINGS={'defaultAccount':'Using\x20default\x20account\x20(env.account=\x22\x22)','mainnet':'Operating\x20on\x20mainnet\x20—\x20irreversible','replaceExistName':'replaceExistName=true\x20will\x20unbind\x20the\x20existing\x20name\x20(breaking\x20refs):\x20the\x20previously\x20named\x20object\x20stays\x20on-chain\x20but\x20becomes\x20unreachable\x20by\x20name\x20—\x20any\x20funds\x20it\x20holds\x20(e.g.\x20an\x20old\x20Order\x27s\x20Allocation)\x20are\x20orphaned.\x20Re-running\x20a\x20build\x20with\x20the\x20same\x20name\x20creates\x20a\x20SECOND\x20object,\x20not\x20a\x20replacement','defaultToken':'Using\x20default\x20token\x200x2::wow::WOW'};export const DEFAULT_AMOUNT_THRESHOLD=BigInt(0x174876e800);export function getAmountThreshold(){const a=process['env']['WOWOK_AMOUNT_THRESHOLD'];if(!a)return DEFAULT_AMOUNT_THRESHOLD;try{return BigInt(a);}catch{return DEFAULT_AMOUNT_THRESHOLD;}}export const DEFAULT_FUND_COVERAGE_MIN=0x1;export function getFundCoverageMin(){const a=process['env']['WOWOK_FUND_COVERAGE_MIN'];if(a===undefined||a['trim']()==='')return DEFAULT_FUND_COVERAGE_MIN;const b=Number(a);if(!Number['isFinite'](b)||b<0x0)return DEFAULT_FUND_COVERAGE_MIN;return b;}export function formatAmount(a){return formatMist(a);}function bestEffortTokenType(a){return a?.['object']?.['type_parameter']??a?.['type_parameter'];}function describeAmount(a,b){if(!b||b===GasTokenType)try{return formatMist(a);}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+GasTokenType;}return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}function containsReplaceExistName(a,b,c){if(a===null||typeof a!=='object'||b>0x8)return![];const d=a;if(c['has'](d))return![];c['add'](d);if(d['replaceExistName']===!![])return!![];for(const e of Object['values'](d)){if(containsReplaceExistName(e,b+0x1,c))return!![];}return![];}export function collectDefaultWarnings(a,b){const c=[],d=a?.['account'];(d===undefined||d==='')&&c['push'](DEFAULT_VALUE_WARNINGS['defaultAccount']);const e=a?.['network'];e&&/mainnet/i['test'](String(e))&&c['push'](DEFAULT_VALUE_WARNINGS['mainnet']);const f=b?.['namedNew']??b?.['object'];return f&&typeof f==='object'&&f['replaceExistName']===!![]&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),b&&typeof b==='object'&&containsReplaceExistName(b,0x0,new Set())&&c['push'](DEFAULT_VALUE_WARNINGS['replaceExistName']),[...new Set(c)];}export const BRIDGE_FUND_OPERATION_TYPES=['cross_chain_wow_to_evm','cross_chain_evm_to_wow','claim_wow_to_evm','resume_transfer','withdraw'];function describeBridgeAmount(a,b,c){if(b==='WOW'||!b&&c==='wow_to_evm')return formatMist(a);const d=MAINNET_BRIDGE_CONFIG?.['tokens']?.['find'](f=>f['symbol']?.['toUpperCase']()===b?.['toUpperCase']()),e=d?c==='wow_to_evm'?d['wowDecimals']:d['evmDecimals']:undefined;if(e===undefined)return a+'\x20raw\x20smallest\x20units\x20of\x20'+(b??'the\x20bridge\x20token');try{return formatUnits(BigInt(a),e)+'\x20'+b;}catch{return a+'\x20raw\x20smallest\x20units\x20of\x20'+b;}}export const CONFIRMATION_RULES=[{'id':'bridge_fund_movement','when':(a,b,c)=>BRIDGE_FUND_OPERATION_TYPES['includes'](a),'level':'irreversible','preview':(a,b,c)=>{const d=typeof b?.['amount']==='string'?b['amount']:undefined,e=typeof b?.['token']==='string'?b['token']:undefined,f=b?.['withdrawTo']??b?.['recipientWowAddress']??b?.['to']??(a==='claim_wow_to_evm'||a==='resume_transfer'?b?.['transferId']:undefined),g=a==='cross_chain_wow_to_evm'?'wow_to_evm':'evm_side';return{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','amount':d!==undefined?{'value':d,'token':e??(g==='wow_to_evm'?GasTokenType:'ETH'),'human_readable':describeBridgeAmount(d,e,g),'recipient':f}:undefined,'warnings':[...collectDefaultWarnings(c,b),a==='withdraw'?'EVM\x20withdrawal\x20from\x20activeEvmAccount\x20—\x20funds\x20move\x20to\x20an\x20external\x20EVM\x20address;\x20irreversible.':'Cross-chain\x20bridge\x20transfer\x20—\x20funds\x20leave\x20the\x20source\x20chain;\x20recovery\x20(if\x20any)\x20requires\x20the\x20opposite-side\x20claim\x20or\x20resume_transfer,\x20never\x20a\x20rollback.']};},'bypass_on_explicit_intent':[]},{'id':'irreversible_fund_or_verdict','when':(a,b,c)=>{const d=c?.['network'],e=bestEffortTokenType(b)??GasTokenType;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['map'](g=>g?.['amount']?.['balance'])['filter'](g=>typeof g==='string'||typeof g==='number');if(f['length']===b['revenue']['length']&&f['every'](g=>isFundApprovalExempt(d,e,String(g))))return![];return!![];}if(a==='treasury'&&b?.['withdraw']){const g=extractAmount(b);if(g!==null&&isFundApprovalExempt(d,e,g))return![];return!![];}if(a==='payment')return!![];if(a==='arbitration'&&b?.['arbitration']!==undefined)return!![];if(b?.['receive']!==undefined||b?.['owner_receive']!==undefined||b?.['received_coins']!==undefined||b?.['compensation_fund_receive']!==undefined)return!![];if(b?.['alloc_by_guard']!==undefined)return!![];if(a==='reward'&&b?.['claim']!==undefined)return!![];if(a==='service'&&b?.['compensation_fund_withdraw']!==undefined)return!![];if(a==='order'&&b?.['arb_claim_compensation']!==undefined)return!![];if(a==='arbitration'&&(b?.['arb_withdraw']!==undefined||b?.['fees_transfer']!==undefined))return!![];if(a==='treasury'){if(b?.['withdraw'])return!![];return![];}return![];},'level':'irreversible','preview':(a,b,c)=>{let d;if(a==='payment'&&Array['isArray'](b?.['revenue'])&&b['revenue']['length']>0x0){const f=b['revenue']['find'](g=>typeof g?.['amount']?.['balance']==='string'||typeof g?.['amount']?.['balance']==='number');if(f){const g=String(f['amount']['balance']);d={'value':g,'human_readable':describeAmount(g,bestEffortTokenType(b))};}else d={'value':'','human_readable':'entire\x20Coin\x20object(s)\x20(amount\x20resolved\x20by\x20the\x20fund\x20layer)'};}const e=[];return a==='reward'&&b?.['claim']!==undefined&&e['push']('Reward\x20claim\x20—\x20Guard-verified\x20payout\x20splits\x20the\x20pool\x20balance\x20and\x20transfers\x20coins\x20to\x20the\x20claimer;\x20the\x20exact\x20amount\x20is\x20determined\x20by\x20the\x20Reward\x27s\x20guard\x20config.'),a==='service'&&b?.['compensation_fund_withdraw']!==undefined&&e['push']('Compensation\x20fund\x20withdraw\x20—\x20withdraws\x20the\x20ENTIRE\x20compensation_fund\x20into\x20a\x20new\x20Payment\x20owned\x20by\x20\x27'+(b['compensation_fund_withdraw']?.['receipt']??'(recipient)')+'\x27.'),a==='order'&&b?.['arb_claim_compensation']!==undefined&&e['push']('Order\x20compensation\x20claim\x20—\x20splits\x20the\x20Service\x27s\x20compensation_fund\x20and\x20transfers\x20the\x20awarded\x20coins\x20to\x20the\x20caller;\x20irreversible.'),a==='arbitration'&&b?.['arb_withdraw']!==undefined&&e['push']('Arb\x20fee\x20withdraw\x20—\x20sweeps\x20the\x20Arb\x27s\x20fee\x20balance\x20into\x20the\x20Arbitration\x20object\x27s\x20balance.'),a==='arbitration'&&b?.['fees_transfer']!==undefined&&e['push']('Arbitration\x20fees\x20transfer\x20—\x20withdraws\x20the\x20ENTIRE\x20Arbitration\x20balance\x20into\x20a\x20new\x20Payment\x20for\x20the\x20target\x20Allocation/Treasury;\x20irreversible.'),{'level':'irreversible','operation':a,'irreversible':!![],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),...e],'amount':a==='payment'&&d?{...d,'token':bestEffortTokenType(b)??GasTokenType,'recipient':b?.['revenue']?.[0x0]?.['recipient']}:undefined};},'bypass_on_explicit_intent':[]},{'id':'publish_immutable','when':(a,b,c)=>{if(a==='service'&&(b?.['publish']===!![]||b?.['bPublished']===!![]))return!![];if(a==='machine'&&b?.['publish']===!![])return!![];return![];},'level':'publish','preview':(a,b,c)=>({'level':'publish','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':a==='service'?['machine','order_allocators']:['nodes','pairs','forwards'],'warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['force\x20publish','publish\x20now']},{'id':'amount_sensitive','when':(a,b,c)=>{const d=extractAmount(b);if(d!==null){if(isFundApprovalExempt(c?.['network'],bestEffortTokenType(b)??GasTokenType,d))return![];return!![];}if(a==='service'&&b?.['order_new'])return!![];if(a==='treasury'&&b?.['deposit']?.['coin']?.['coin'])return!![];if(a==='reward'&&b?.['coin_add']?.['coin'])return!![];if(a==='allocation'&&b?.['coin']?.['coin'])return!![];return![];},'level':'amount','preview':(a,b,c)=>{const d=extractAmount(b),e=bestEffortTokenType(b);return{'level':'amount','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','amount':d?{'value':d,'token':e??GasTokenType,'human_readable':describeAmount(d,e)}:{'value':'','token':e??GasTokenType,'human_readable':'entire\x20Coin\x20object\x20(amount\x20resolved\x20on-chain)'},'warnings':collectDefaultWarnings(c,b)};},'bypass_on_explicit_intent':[]},{'id':'default_values','when':(a,b,c)=>{return collectDefaultWarnings(c,b)['length']>0x0;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object']??b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','warnings':collectDefaultWarnings(c,b)}),'bypass_on_explicit_intent':['use\x20default\x20account','default\x20account\x20is\x20fine','use\x20the\x20default\x20account','default\x20account\x20works\x20fine']},{'id':'guard_create_immutable','when':(a,b,c)=>{if(a==='guard')return!![];return![];},'level':'irreversible','preview':(a,b,c)=>{const d=b?.['table']??[],e=b?.['root'],f=b?.['rely'],g=typeof e==='object'&&e!==null&&'type'in e?e['type']:typeof e==='object'&&e!==null&&'type'in e&&e['type']==='file'?'file':'unknown',h=['table','root'];if(f)h['push']('rely');let i='';try{i=JSON['stringify'](e??{});}catch{i='';}const j=[],k=(Array['isArray'](d)?d:[])['filter'](l=>l&&l['b_submission']===!![]&&String(l['value_type'])['toLowerCase']()==='address');if(k['length']>0x0){const l=/order\.service|progress\.machine|arb\.service|order\.machine/i['test'](i);!l&&j['push']('PRE-LINT\x20R-C3-05:\x20submitted\x20Address\x20slot(s)\x20are\x20not\x20bound\x20to\x20this\x20project\x20in\x20the\x20root\x20(no\x20order.service/progress.machine\x20comparison)\x20—\x20a\x20cross-project\x20object\x20can\x20satisfy\x20this\x20Guard.\x20Add\x20the\x20binding\x20BEFORE\x20confirming:\x20the\x20Guard\x20is\x20immutable\x20after\x20creation'),!/signer/i['test'](i)&&j['push']('PRE-LINT\x20identity:\x20submitted\x20data\x20is\x20not\x20tied\x20to\x20the\x20transaction\x20signer\x20(no\x20context(Signer)\x20clause)\x20—\x20anyone\x20able\x20to\x20trigger\x20the\x20host\x20operation\x20can\x20submit\x20arbitrary\x20values.\x20Add\x20a\x20Signer\x20binding\x20if\x20the\x20submitter\x20must\x20be\x20authorized');}return{'level':'irreversible','operation':a,'object':b?.['namedNew']?.['name'],'network':c?.['network'],'account':c?.['account']??'','immutable_after':h,'irreversible':!![],'warnings':[...collectDefaultWarnings(c,b),'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation','Table\x20entries:\x20'+d['length']+'\x20(max\x20256)','Root\x20node\x20type:\x20'+g+'\x20(must\x20return\x20Bool)',...f?['Rely\x20dependencies:\x20'+(f['guards']?.['length']??0x0)+'\x20(max\x204,\x20AND/OR\x20logic)']:[],...j,'To\x20modify\x20later:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind']};},'bypass_on_explicit_intent':[]},{'id':'guard_gen_passport_test','when':(a,b,c)=>{if(a==='gen_passport')return!![];return![];},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['guard'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'gen_passport\x20will\x20consume\x20gas\x20for\x20static\x20testing']}),'bypass_on_explicit_intent':['test\x20guard','testing\x20guard','gen\x20passport','generate\x20passport']},{'id':'progress_advance','when':(a,b,c)=>{if(a!=='progress')return![];return b?.['operate']?.['op']==='next'||b?.['owner_receive']!==undefined;},'level':'standard','preview':(a,b,c)=>({'level':'standard','operation':a,'object':b?.['object'],'network':c?.['network'],'account':c?.['account']??'','warnings':[...collectDefaultWarnings(c,b),'Advancing\x20the\x20progress\x20node\x20may\x20release\x20funds\x20per\x20the\x20machine\x20allocation']}),'bypass_on_explicit_intent':[]}];export function resolveOverrideId(a,b){if(a==='publish_immutable'){if(b==='service')return'service.publish';if(b==='machine')return'machine.publish';return undefined;}if(a==='progress_advance')return'node.advance';if(a==='default_values')return'confirm.default_values';if(a==='guard_gen_passport_test')return'confirm.gen_passport_test';return undefined;}export function extractAmount(a,b){if(!a)return null;const d=i=>{if(typeof i==='number')return String(i);if(typeof i==='string'&&i!=='')return i;return null;},e=[a?.['balance'],a?.['amount'],a?.['compensation_fund_add']?.['balance'],a?.['coin_add']?.['balance'],a?.['coin']?.['balance'],a?.['order_new']?.['buy']?.['total_pay']?.['balance'],a?.['dispute']?.['fee']?.['balance'],a?.['fee'],a?.['arbitration']?.['indemnity'],a?.['deposit']?.['coin']?.['balance'],a?.['withdraw']?.['amount']?.['fixed']],f=[];for(const i of e){const j=d(i);if(j!==null)f['push'](j);}if(Array['isArray'](a?.['revenue']))for(const k of a['revenue']){const l=d(k?.['amount']?.['balance']);if(l!==null)f['push'](l);}if(Array['isArray'](a?.['guard_add']))for(const m of a['guard_add']){if(m?.['amount']?.['type']==='Fixed'){const n=d(m['amount']['value']);if(n!==null)f['push'](n);}}if(!b?.['excludeConfigAmounts'])for(const o of[a?.['allocators'],a?.['order_allocators']]){if(!o||typeof o!=='object')continue;const p=d(o['threshold']);if(p!==null)f['push'](p);for(const q of Array['isArray'](o['allocators'])?o['allocators']:[]){if(Array['isArray'](q?.['sharing']))for(const u of q['sharing']){if(u?.['mode']==='Amount'){const w=d(u['sharing']);if(w!==null)f['push'](w);}}const t=d(q?.['max']);if(t!==null)f['push'](t);}}const h=f['filter'](x=>{try{return BigInt(x)!==0x0n;}catch{return!![];}});if(h['length']===0x0)return null;if(h['length']===0x1)return h[0x0];try{return h['reduce']((x,y)=>x+BigInt(y),0x0n)['toString']();}catch{return h[0x0];}}export const OBJECT_REUSE_RULES=[{'rule_id':'REUSE-001','object_type':'permission','recommendation':'strongly_recommended','reason':'Centralized\x20permission\x20control\x20across\x20all\x20services','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Permission\x20to\x20reuse?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-002','object_type':'machine','recommendation':'recommended','reason':'Save\x20design\x20time\x20for\x20similar\x20processes','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Machine\x20whose\x20workflow\x20fits?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-003','object_type':'guard','recommendation':'recommended','reason':'Avoid\x20redundant\x20validation\x20rules','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Guard\x20with\x20matching\x20validation\x20logic?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-004','object_type':'contact','recommendation':'recommended','reason':'Single\x20point\x20of\x20customer-service\x20management','ask_user':'Do\x20you\x20have\x20an\x20existing\x20Contact\x20for\x20customer\x20service?\x20Provide\x20the\x20name\x20or\x20ID.'},{'rule_id':'REUSE-005','object_type':'arbitration','recommendation':'always_reuse','reason':'Customers\x20choose\x20from\x20established\x20arbiters;\x20creating\x20a\x20new\x20Arbitration\x20is\x20an\x20operator-level\x20decision','ask_user':'Which\x20existing\x20Arbitration\x20service\x20should\x20disputes\x20route\x20to?\x20Provide\x20the\x20name\x20or\x20ID.'}];export const CREATE_VS_MODIFY_PATTERN={'reuse_form':'string','create_form':'object','resolution_api':'GetObjectExisted','note':'String\x20reference\x20=\x20REUSE\x20(name\x20resolution\x20failure\x20is\x20a\x20hard\x20error);\x20object\x20shape\x20=\x20CREATE\x20(always).'};export const IMMUTABILITY_RULES=[{'rule_id':'IMMUT-001','object_type':'machine','trigger':'publish','immutable_fields':['nodes','pairs','forwards'],'message':'Machine\x20topology\x20is\x20immutable\x20after\x20publish\x20—\x20verify\x20all\x20nodes/forwards\x20via\x20machineNode2file\x20BEFORE\x20publishing'},{'rule_id':'IMMUT-002','object_type':'service','trigger':'publish','immutable_fields':['machine','order_allocators'],'mutable_after':['arbitrations','rewards','sales'],'message':'Service.machine\x20and\x20order_allocators\x20are\x20PERMANENTLY\x20frozen\x20after\x20publish\x20(L1);\x20arbitrations/rewards\x20can\x20still\x20be\x20ADDED\x20but\x20remove/clear\x20is\x20time-locked\x20(L2:\x20pause\x20+\x20setting_lock_duration);\x20sales\x20remains\x20fully\x20modifiable\x20(L3)\x20without\x20pause'},{'rule_id':'IMMUT-003','object_type':'guard','trigger':'create','immutable_fields':['table','root','rely'],'message':'Guard\x20is\x20CREATE-only\x20and\x20immutable\x20—\x20cannot\x20be\x20edited\x20or\x20deleted\x20after\x20creation.\x20To\x20change:\x20export\x20via\x20guard2file\x20→\x20edit\x20→\x20CREATE\x20new\x20→\x20rebind'}];export const PROTOCOL_SLOT_RULES=[{'rule_id':'TASKBIND-01','slot':0xfe,'asserted_by':['progress::assert_task_binding\x20—\x20every\x20guarded\x20forward\x20of\x20a\x20machine\x20running\x20on\x20an\x20order\x20Progress\x20requires\x20a\x20slot-254\x20passport\x20submission\x20(aborts\x20code\x2011)'],'required_declaration':'{\x20identifier:\x20254,\x20b_submission:\x20true,\x20value_type:\x20\x27Address\x27\x20}\x20—\x20the\x20passing\x20order\x20address\x20is\x20written\x20by\x20order\x20creation','violation':'A\x20Guard\x20bound\x20to\x20a\x20machine\x20forward\x20without\x20this\x20row\x20aborts\x20every\x20forward\x20traversal\x20once\x20an\x20order\x20drives\x20the\x20Progress;\x20the\x20table\x20is\x20frozen\x20at\x20creation,\x20so\x20the\x20path\x20strands\x20permanently.','message':'Any\x20Guard\x20bound\x20on\x20a\x20machine\x20forward\x20MUST\x20declare\x20protocol\x20slot\x20254\x20(task\x20binding)\x20as\x20a\x20b_submission\x20Address\x20row.\x20The\x20compile\x20kernel\x20auto-injects\x20the\x20row\x20for\x20edge-bound\x20guards;\x20guard\x20templates\x20ship\x20it\x20in\x20example_table.'},{'rule_id':'TASKBIND-02','slot':-0x1,'asserted_by':['allocation::assert\x20—\x20each\x20{GuardIdentifier:N}\x20allocator\x20leg\x20requires\x20a\x20passport\x20submission\x20at\x20slot\x20N\x20equal\x20to\x20payment_info.for_object\x20(aborts\x20with\x20funds\x20already\x20escrowed)'],'required_declaration':'{\x20identifier:\x20N,\x20b_submission:\x20true,\x20value_type:\x20\x27Address\x27,\x20object_type:\x20\x27Order\x27\x20}\x20for\x20EVERY\x20slot\x20N\x20named\x20by\x20a\x20GuardIdentifier\x20allocator\x20leg','violation':'A\x20static\x20Address\x20slot\x20in\x20the\x20same\x20position\x20passes\x20creation\x20but\x20fails\x20the\x20same\x20allocation\x20assertion\x20(N-11)\x20—\x20the\x20distribution\x20aborts\x20and\x20escrowed\x20funds\x20stay\x20stranded\x20(amz-7f3a2c91:\x200.98991\x20WOW).','message':'Every\x20allocator\x20{GuardIdentifier:N}\x20leg\x20MUST\x20point\x20at\x20a\x20Guard\x20table\x20slot\x20N\x20declared\x20as\x20a\x20b_submission\x20Address\x20row.\x20The\x20compile\x20kernel\x20blocks\x20publish\x20when\x20the\x20slot\x20is\x20undeclared\x20(GUARD_SLOT_UNKNOWN).'}];export const OPERATION_TYPE_CLASSIFICATION={'LOCAL_ONLY':['account_operation','local_mark_operation','local_info_operation','config_operation'],'ONCHAIN':['onchain_operations','wip_file','bridge_operation','messenger_operation'],'QUERY':['query_toolkit','onchain_table_data','onchain_events','guard2file','machineNode2file','schema_query','wowok_buildin_info'],'ENCRYPTED':['messenger_operation']};export const OPERATION_CLASS_META={'LOCAL_ONLY':{'gas':![],'confirmation_required':![],'note':'Local\x20state\x20only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ONCHAIN':{'gas':!![],'confirmation_required':!![],'note':'On-chain\x20write\x20—\x20gas\x20consumed,\x20explicit\x20user\x20confirmation\x20REQUIRED\x20before\x20execution'},'QUERY':{'gas':![],'confirmation_required':![],'note':'Read-only\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'},'ENCRYPTED':{'gas':![],'confirmation_required':![],'note':'Local\x20encryption\x20—\x20no\x20gas,\x20no\x20confirmation\x20needed'}};export function classifyTool(a){if(OPERATION_TYPE_CLASSIFICATION['ENCRYPTED']['includes'](a))return'ENCRYPTED';for(const b of['LOCAL_ONLY','ONCHAIN','QUERY']){if(OPERATION_TYPE_CLASSIFICATION[b]['includes'](a))return b;}return undefined;}export const NAMING_CONVENTIONS={'scheme':'<projectPrefix>_<type>_<purpose>_<version>','parts':{'project_prefix':{'example':'shopFunny_','purpose':'Prevents\x20cross-project\x20collisions'},'type_prefix':{'example':'machine_\x20/\x20guard_\x20/\x20service_','purpose':'Clarifies\x20object\x20type'},'purpose_suffix':{'example':'serviceWithdraw','purpose':'Describes\x20function'},'version_suffix':{'example':'_v2','purpose':'Enables\x20iteration\x20without\x20replaceExistName'}},'entry_id':{'pattern':'^<object_type>:<name>$','example':'service:myshop_service'},'replace_exist_name':{'default':![],'false_effect':'Throws\x20error\x20if\x20name\x20is\x20in\x20use\x20—\x20safe\x20default','true_effect':'Existing\x20object/account\x20with\x20the\x20same\x20name\x20is\x20suspended/unbound\x20to\x20free\x20the\x20name','account_default_forbidden':'replaceExistName:true\x20on\x20the\x20default\x20account\x20(name=\x27\x27)\x20is\x20FORBIDDEN\x20—\x20use\x20suspend()\x20explicitly','recommendation':'DISCOURAGED\x20—\x20prefer\x20versioned\x20names\x20(_v1,\x20_v2)\x20for\x20production'},'recommendations':['Always\x20provide\x20tags\x20on\x20object\x20creation\x20for\x20filtering\x20and\x20management','Use\x20names\x20as\x20primary\x20identifiers;\x20use\x20short\x20address\x20form\x20(0x1234...def)\x20only\x20for\x20display','All\x20cross-object\x20references\x20(Guard\x20tables,\x20Service\x20bindings,\x20Machine\x20forwards)\x20use\x20NAMES\x20—\x20resolved\x20per-network\x20at\x20build\x20time']};export function checkObjectReuseRules(a){const b=[];for(const c of a){if(!c['is_new'])continue;const d=OBJECT_REUSE_RULES['find'](e=>e['object_type']===c['object_type']);if(!d)continue;(d['recommendation']==='always_reuse'||d['recommendation']==='strongly_recommended')&&b['push']({'rule_id':d['rule_id'],'severity':d['recommendation']==='always_reuse'?'warn':'info','message':'Creating\x20NEW\x20'+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20—\x20reuse\x20is\x20'+d['recommendation']+':\x20'+d['reason']+'.\x20'+d['ask_user']});}return b;}export function checkImmutabilityRules(a){const b=[];for(const c of a){const d=IMMUTABILITY_RULES['find'](e=>e['object_type']===c['object_type']&&e['trigger']===c['trigger']);if(!d)continue;b['push']({'rule_id':d['rule_id'],'severity':'warn','message':''+c['object_type']+(c['name']?'\x20\x22'+c['name']+'\x22':'')+'\x20'+c['trigger']+':\x20'+d['message']+'.\x20Immutable:\x20['+d['immutable_fields']['join'](',\x20')+']'+(d['mutable_after']?'.\x20Still\x20mutable:\x20['+d['mutable_after']['join'](',\x20')+']':'')});}return b;}export const SAFETY_RULES_VERSION=0x3;
@@ -61,9 +61,7 @@ export interface ScenarioMode {
61
61
  industry: string;
62
62
  trust_pattern: string;
63
63
  traits: ScenarioTraits;
64
- machine_shape: ModeMachineNode[];
65
- guards: ModeGuardRef[];
66
- allocator: ModeAllocatorStrategy;
64
+ default_template: string | null;
67
65
  key_risk: string;
68
66
  build_notes?: string[];
69
67
  }
@@ -83,4 +81,4 @@ export declare function getScenarioMode(name: IndustryModeName): ScenarioMode |
83
81
  export declare function listScenarioModes(): ScenarioMode[];
84
82
  export declare function getShippedModes(): ScenarioMode[];
85
83
  export declare function getModeCompositions(name: IndustryModeName): ModeComposition[];
86
- export declare const SCENARIO_MODES_VERSION = 6;
84
+ export declare const SCENARIO_MODES_VERSION = 7;
@@ -1 +1 @@
1
- export const BUYER_ACTION_NODE_RE=/^(reviewed|return_requested|guest_cancelled|withdrawn|charging|cancelled|closed_cancel)$/i;export function unannotatedBuyerActionNodes(a){return a['filter'](b=>!b['operator']&&BUYER_ACTION_NODE_RE['test'](b['name']))['map'](b=>b['name']);}export const SCENARIO_MODES=[{'name':'freelance','phase':0x1,'industry':'Design\x20/\x20dev\x20/\x20consulting\x20/\x20writing','trust_pattern':'Milestone\x20allocation,\x20acceptance\x20gate','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':!![],'long_cycle':!![],'deposit_required':![],'multi_tier_allocation':![]},'machine_shape':[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'kickoff','role':'Scope\x20confirmed;\x20WTS\x20change-request\x20channel\x20opened\x20(scope-creep\x20ledger)'},{'name':'milestone_1_delivering','role':'Provider\x20works\x20on\x20milestone\x201'},{'name':'milestone_1_delivered','role':'Milestone\x201\x20deliverable\x20submitted\x20(WIP\x20hash\x20mandatory)'},{'name':'milestone_1_accepted','role':'Customer\x20signs\x20milestone\x201\x20acceptance\x20—\x20M1\x20funds\x20releasable','operator':'order_payer'},{'name':'milestone_2_delivering','role':'Provider\x20works\x20on\x20milestone\x202'},{'name':'milestone_2_delivered','role':'Milestone\x202\x20deliverable\x20submitted\x20(WIP\x20hash\x20mandatory)'},{'name':'milestone_2_accepted','role':'Customer\x20signs\x20milestone\x202\x20acceptance\x20—\x20M2\x20funds\x20releasable','operator':'order_payer'},{'name':'final_delivering','role':'Provider\x20finalizes\x20remaining\x20scope'},{'name':'final_delivered','role':'Final\x20deliverable\x20submitted\x20(WIP\x20hash\x20mandatory)'},{'name':'completed','role':'Final\x20acceptance\x20signed\x20—\x20remaining\x20escrow\x20released\x20to\x20provider','operator':'order_payer'},{'name':'closed_cancel','role':'Pre-delivery\x20cancellation\x20—\x20triggers\x20refund\x20Allocator\x20(unearned\x20portion)','operator':'order_payer'}],'guards':[{'template_id':'pattern.buy_guard_blocklist','host':'service','purpose':'Customer\x20identity\x20check\x20on\x20purchase'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Both\x20parties\x20confirm\x20scope\x20at\x20kickoff\x20(WTS\x20change-request\x20channel)'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Provider\x20must\x20submit\x20WIP\x20hash\x20for\x20every\x20milestone\x20deliverable'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Only\x20customer\x20can\x20sign\x20milestone/final\x20acceptance'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Only\x20provider\x20can\x20withdraw\x20after\x20each\x20accepted\x20milestone'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Only\x20customer\x20can\x20initiate\x20pre-delivery\x20cancellation'},{'template_id':'tpl_payment_exception_compensation','host':'machine','purpose':'Delivery\x20delay\x20exception\x20compensation\x20via\x20scene-bound\x20Payment\x20(§2.13)'}],'allocator':{'recipient':'signer','count':0x2,'mode':'amount','description':'Per-milestone\x20release:\x20each\x20accepted\x20milestone\x20releases\x20its\x20escrowed\x20amount\x20to\x20provider;\x20final\x20acceptance\x20releases\x20the\x20remainder\x20on\x20completed;\x20pre-delivery\x20cancellation\x20refunds\x20the\x20unearned\x20portion\x20to\x20customer\x20via\x20Allocator\x20(off-Machine\x20fund\x20routing\x20per\x20R-M1-11)'},'key_risk':'Customer\x20never\x20accepts\x20delivery\x20—\x20provider\x20cannot\x20get\x20paid','build_notes':['Use\x20Service\x20`setting_locked_time`\x20to\x20lock\x20rules\x20for\x20the\x20engagement\x20duration','WIP\x20hash\x20on\x20every\x20milestone\x20deliverable\x20is\x20mandatory\x20—\x20protects\x20provider\x20in\x20disputes','Acceptance\x20gate\x20is\x20the\x20trust\x20pivot\x20—\x20both\x20parties\x20must\x20agree\x20on\x20criteria\x20per\x20milestone','Milestones\x20map\x20to\x20deliverable-Guarded\x20forwards;\x20each\x20accepted\x20milestone\x20releases\x20its\x20escrowed\x20slice\x20(allocation.distribute_milestone)','Scope\x20changes\x20are\x20recorded\x20as\x20WTS\x20change-requests\x20at\x20kickoff/throughout\x20—\x20never\x20silent','R-M1-11:\x20no\x20\x27refunded\x27/\x27disputed\x27/\x27arb\x27/\x27cancelled\x27\x20nodes\x20—\x20refunds\x20route\x20via\x20Allocator\x20(to\x20OrderHolder)\x20triggered\x20by\x20\x27closed_cancel\x27,\x20disputes\x20via\x20Arbitration','Payment\x20exception\x20compensation\x20for\x20delivery\x20delays\x20—\x20provider\x20Treasury\x20auto-compensates\x20customer\x20(§2.13)','Project-Catalog\x20orders\x20have\x20NO\x20milestones\x20(single\x20funded\x20order\x20+\x20steps\x20timeline);\x20milestones\x20here\x20model\x20fixed-price\x20CONTRACTS.\x20For\x20catalog-style\x20listings\x20(tiered\x20pricing\x20+\x20add-ons\x20+\x20buyer\x20requirements)\x20use\x20the\x20freelance/catalog-tiers\x20template\x20instead','Time-bound\x20catalog\x20rules\x20(24h\x20instant\x20cancel,\x2048h\x20requirements\x20timeout,\x2014-day\x20auto-accept)\x20need\x20a\x20time\x20Guard\x20PLUS\x20an\x20off-chain\x20keeper\x20per\x20window\x20-\x20Guards\x20take\x20an\x20immutable\x20duration\x20constant']},{'name':'rental','phase':0x1,'industry':'Equipment\x20/\x20vehicle\x20/\x20property\x20rental','trust_pattern':'Deposit\x20escrow,\x20return\x20inspection','traits':{'has_logistics':!![],'communication_heavy':!![],'pure_digital':![],'long_cycle':![],'deposit_required':!![],'multi_tier_allocation':![]},'machine_shape':[{'name':'deposit_paid','role':'Entry:\x20deposit\x20+\x20rent\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'booking_confirmed','role':'Owner\x20confirms\x20availability\x20and\x20handover\x20schedule'},{'name':'handover_out','role':'Owner\x20hands\x20over\x20item,\x20records\x20pre-rental\x20WIP\x20(condition\x20photos)'},{'name':'in_use','role':'Rental\x20period\x20active'},{'name':'overdue','role':'Past\x20due\x20date\x20without\x20return\x20—\x20time-lock\x20Guard\x20(clock)\x20gates\x20late\x20fees'},{'name':'return_requested','role':'Customer\x20initiates\x20return','operator':'order_payer'},{'name':'returned','role':'Item\x20physically\x20returned;\x20post-rental\x20WIP\x20recorded','operator':'order_payer'},{'name':'inspected','role':'Owner\x20inspects\x20returned\x20item\x20(pre+post\x20WIP\x20comparison)'},{'name':'return_approved','role':'No\x20damage\x20—\x20triggers\x20deposit\x20refund\x20Allocator\x20(100%\x20to\x20customer)'},{'name':'damage_confirmed','role':'Damage\x20confirmed\x20via\x20pre+post\x20WIP\x20diff\x20—\x20triggers\x20deposit\x20deduction\x20Allocator'},{'name':'completed','role':'Rental\x20finalized\x20—\x20triggers\x20rent\x20Allocator\x20(rent\x20to\x20owner)'},{'name':'closed_cancel','role':'Pre-handover\x20cancellation\x20—\x20triggers\x20full\x20refund\x20Allocator','operator':'order_payer'}],'guards':[{'template_id':'pattern.verifier_evidence_philosophy','host':'service','purpose':'Verify\x20deposit\x20amount\x20matches\x20listing'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Owner\x20confirms\x20availability\x20and\x20handover\x20schedule'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Handover\x20must\x20record\x20pre-rental\x20WIP\x20(condition\x20photos)'},{'template_id':'pattern.time_lock_progress','host':'machine','purpose':'Overdue\x20state\x20gated\x20by\x20clock\x20time-lock\x20(convert_witness/clock)'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Return\x20must\x20include\x20post-rental\x20WIP'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Only\x20owner\x20can\x20submit\x20inspection\x20result'},{'template_id':'damage_guard_wip','host':'machine','purpose':'Damage\x20claim\x20requires\x20pre+post\x20WIP\x20comparison'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Cancellation\x20refund\x20requires\x20owner\x20permission\x20OR\x20arbiter'},{'template_id':'tpl_payment_exception_compensation','host':'machine','purpose':'Return\x20delay/damage\x20exception\x20compensation\x20via\x20scene-bound\x20Payment\x20(§2.13)'},{'template_id':'tpl_repository_quote_guard_subscription','host':'repository','purpose':'Weather/usage\x20data\x20oracle\x20subscription\x20(§2.11)'}],'allocator':{'recipient':'entity','count':0x4,'mode':'amount','description':'Rent\x20to\x20owner\x20on\x20completed;\x20deposit\x20refund\x20to\x20customer\x20on\x20return_approved;\x20deposit\x20deduction\x20to\x20owner\x20on\x20damage_confirmed;\x20full\x20deposit+rent\x20refund\x20to\x20customer\x20on\x20cancelled\x20(fund\x20routing\x20via\x20Allocator\x20per\x20R-M1-11)'},'key_risk':'Owner\x20claims\x20damage\x20without\x20pre-rental\x20WIP\x20—\x20customer\x20loses\x20deposit\x20unfairly','build_notes':['Pre-rental\x20WIP\x20is\x20non-negotiable\x20—\x20without\x20it,\x20damage\x20claims\x20fail','Deposit\x20must\x20be\x20escrowed,\x20not\x20direct-transferred\x20—\x20enables\x20fair\x20deduction','Inspection\x20gate\x20prevents\x20customer\x20from\x20denying\x20damage','Overdue\x20handling\x20uses\x20a\x20time-lock\x20Guard\x20(clock)\x20—\x20the\x20Guard\x20only\x20ALLOWS\x20the\x20overdue\x20transition;\x20automatic\x20advancement\x20needs\x20an\x20off-chain\x20keeper\x20(see\x20DESIGN-REVIEW\x20C-3)','Extensions\x20are\x20modeled\x20as\x20separate\x20sub-orders\x20(REUSE\x20pattern),\x20not\x20as\x20machine\x20cycles\x20—\x20the\x20Machine\x20stays\x20a\x20DAG','R-M1-11:\x20no\x20\x27deposit_refunded\x27/\x27deposit_deducted\x27/\x27refunded\x27\x20nodes\x20—\x20deposit\x20refund/deduction\x20flows\x20through\x20Allocator\x20triggered\x20by\x20return_approved/damage_confirmed\x20business\x20states','Payment\x20exception\x20compensation\x20for\x20return\x20delays\x20—\x20Treasury\x20withdraws\x20scene-bound\x20Payment\x20(§2.13)','Repository\x20quote_guard\x20for\x20weather/usage\x20data\x20subscription\x20revenue\x20(§2.11)']},{'name':'education','phase':0x2,'industry':'Courses\x20/\x20training\x20/\x20tutoring','trust_pattern':'Periodic\x20release\x20per\x20session,\x20attendance\x20Guard','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':![],'long_cycle':!![],'deposit_required':!![],'multi_tier_allocation':![]},'machine_shape':[{'name':'paid','role':'Entry:\x20enrollment\x20and\x20tuition\x20paid\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'enrolled','role':'Institution\x20confirms\x20enrollment;\x20class\x20Repository\x20record\x20created'},{'name':'session_1','role':'Session\x201\x20delivered\x20—\x20attendance\x20evidence\x20recorded\x20(Repository)'},{'name':'session_2','role':'Session\x202\x20delivered\x20—\x20attendance\x20evidence\x20recorded'},{'name':'session_3','role':'Session\x203\x20delivered\x20(representative;\x20configure\x20N\x20sessions\x20at\x20build\x20time)'},{'name':'assessed','role':'Final\x20assessment\x20/\x20exam\x20submitted\x20(WIP)'},{'name':'certificate_issued','role':'Certificate\x20issued\x20as\x20WIP/Proof\x20deliverable'},{'name':'completed','role':'All\x20sessions\x20delivered\x20and\x20certified\x20—\x20tuition\x20fully\x20released'},{'name':'paused','role':'Student\x20on\x20leave\x20—\x20terminal;\x20resume\x20via\x20a\x20new\x20sub-order\x20(REUSE\x20pattern,\x20keeps\x20the\x20Machine\x20a\x20DAG)'},{'name':'withdrawn','role':'Enrollment\x20cancelled\x20mid-course\x20—\x20triggers\x20unearned-tuition\x20refund\x20Allocator','operator':'order_payer'}],'guards':[{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Institution\x20confirms\x20enrollment\x20and\x20creates\x20class\x20Repository\x20record'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Per-session\x20student\x20attendance\x20signature\x20with\x20session\x20evidence'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Assessment\x20submission\x20requires\x20WIP\x20commitment'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Certificate\x20issuance\x20requires\x20WIP/Proof\x20deliverable'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Institution\x20approval\x20OR\x20arbiter\x20for\x20withdrawal\x20refund'},{'template_id':'tpl_buy_guard_order_holder','host':'service','purpose':'Course\x20module\x20progressive\x20unlock\x20via\x20supply\x20chain\x20sub-orders\x20(§2.12)'}],'allocator':{'recipient':'entity','count':0x2,'mode':'amount','description':'1/N\x20of\x20tuition\x20released\x20per\x20session\x20attendance\x20(per-session\x20release\x20to\x20institution/instructor);\x20unearned\x20portion\x20refunded\x20to\x20student\x20via\x20Allocator\x20on\x20withdrawn\x20(per\x20R-M1-11)'},'key_risk':'Tutoring\x20institutions\x20run\x20away\x20with\x20prepaid\x20tuition','build_notes':['Use\x20Service\x20`setting_locked_time`\x20to\x20lock\x20rules\x20for\x20the\x20entire\x20term\x20(regulatory\x20compliance,\x20>=90d)','Attendance\x20Guard\x20needs\x20WIP\x20hash\x20for\x20session\x20content\x20commitment;\x20attendance\x20evidence\x20lives\x20in\x20the\x20class\x20Repository','Per-session\x20release\x20requires\x20threshold-based\x20trigger\x20—\x20each\x20attended\x20session\x20releases\x201/N','session_1..session_3\x20are\x20representative\x20—\x20configure\x20the\x20real\x20session\x20count\x20(session_N)\x20at\x20build\x20time;\x20each\x20session\x20=\x20one\x20attendance-Guarded\x20forward','Pause/deferral\x20is\x20a\x20terminal\x20node\x20+\x20new\x20sub-order\x20(REUSE\x20pattern)\x20—\x20never\x20a\x20loop\x20back\x20into\x20the\x20session\x20chain\x20(Machine\x20must\x20stay\x20a\x20DAG)','Supply\x20chain\x20sub-orders\x20for\x20course\x20module\x20progressive\x20unlock\x20—\x20each\x20module\x20=\x20sub-service\x20with\x20buy_guard\x20verifying\x20previous\x20module\x20completion\x20(§2.12)','Repository\x20for\x20learning\x20progress\x20collaboration\x20data\x20—\x20progress\x20as\x20key,\x20session\x20data\x20as\x20value\x20(§2.10)']},{'name':'travel','phase':0x2,'industry':'Custom\x20tours\x20/\x20multi-segment\x20trips','trust_pattern':'Multi-tier\x20allocation\x20per\x20segment','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':![],'long_cycle':!![],'deposit_required':!![],'multi_tier_allocation':!![]},'machine_shape':[{'name':'paid','role':'Entry:\x20tour\x20booked\x20and\x20paid\x20(deposit\x20+\x20final)\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'pre_trip','role':'Itinerary\x20confirmed;\x20supplier\x20sub-orders\x20placed\x20(hotel/guide/driver)'},{'name':'segment_D1','role':'Segment\x201\x20(e.g.,\x20hotel\x20check-in)\x20—\x20arrival\x20WIP'},{'name':'segment_D2','role':'Segment\x202\x20(e.g.,\x20guided\x20tour)\x20—\x20arrival\x20WIP'},{'name':'segment_D3','role':'Segment\x203\x20(representative;\x20configure\x20per-day/per-activity\x20nodes\x20at\x20build\x20time)'},{'name':'rescheduled','role':'Weather/force-majeure\x20branch\x20—\x20segment\x20moved\x20to\x20a\x20new\x20date\x20(terminal;\x20new\x20segment\x20via\x20sub-order)'},{'name':'returned','role':'Trip\x20completed,\x20customer\x20returns','operator':'order_payer'},{'name':'completed','role':'All\x20segments\x20delivered,\x20funds\x20released\x20per\x20segment'},{'name':'interrupted','role':'Trip\x20interrupted\x20—\x20triggers\x20refund\x20Allocator\x20(undelivered\x20segments)\x20or\x20Arbitration'}],'guards':[{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Agency\x20confirms\x20itinerary\x20and\x20supplier\x20sub-order\x20placement'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Per-segment\x20arrival\x20WIP\x20(hotel\x20check-in,\x20transport,\x20activity)'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Weather/force-majeure\x20witness\x20(Repository\x20query\x20or\x20convert_witness)\x20gates\x20reschedule\x20branch'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Agency\x20approval\x20OR\x20arbiter\x20for\x20trip\x20interruption'},{'template_id':'tpl_buy_guard_order_holder','host':'service','purpose':'Supply\x20chain\x20sub-orders\x20for\x20tour\x20package\x20segments\x20(§2.12)'},{'template_id':'tpl_payment_exception_compensation','host':'machine','purpose':'Trip\x20delay/segment\x20change\x20exception\x20compensation\x20(§2.13)'},{'template_id':'tpl_repository_quote_guard_subscription','host':'repository','purpose':'Weather/travel\x20data\x20oracle\x20subscription\x20(§2.11)'}],'allocator':{'recipient':'entity','count':0x3,'mode':'amount','description':'Deposit\x2020%\x20to\x20agency,\x20final\x2080%\x20to\x20agency,\x20then\x20agency-side\x20Allocation\x20splits\x20to\x20hotel/guide/driver\x20per\x20segment\x20(per-day\x20release);\x20undelivered\x20segments\x20refunded\x20to\x20customer\x20via\x20Allocator\x20on\x20interrupted\x20(per\x20R-M1-11)'},'key_risk':'Paid\x20in\x20full\x20then\x20service\x20shrinks\x20—\x20multi-tier\x20transparency\x20prevents\x20this','build_notes':['Multi-tier\x20Allocation\x20is\x20WoWok\x27s\x20unique\x20advantage\x20over\x20traditional\x20travel\x20platforms','segment_guard\x20needs\x20standardized\x20WIP\x20templates\x20per\x20segment\x20type\x20(hotel,\x20transport,\x20activity)','Multi-tier\x20waterfall\x20needs\x20guard\x20chaining\x20validation','Weather/force-majeure\x20branches\x20enter\x20reschedule\x20(terminal)\x20or\x20partial-refund\x20interrupted\x20terminal\x20—\x20never\x20loop\x20back\x20into\x20the\x20segment\x20chain\x20(Machine\x20must\x20stay\x20a\x20DAG)','Supplier\x20sub-orders\x20each\x20carry\x20their\x20own\x20machine\x20—\x20hotel/guide/driver\x20fulfill\x20independently\x20(§2.12)','Supply\x20chain\x20sub-orders\x20—\x20each\x20tour\x20segment\x20=\x20sub-service\x20with\x20buy_guard\x20verifying\x20main\x20tour\x20order\x20(§2.12)','Payment\x20exception\x20compensation\x20for\x20flight/segment\x20delays\x20(§2.13)','Repository\x20quote_guard\x20for\x20weather/travel\x20data\x20subscription\x20revenue\x20(§2.11)']},{'name':'subscription','phase':0x3,'industry':'SaaS\x20/\x20content\x20membership\x20/\x20periodic\x20service','trust_pattern':'Periodic\x20charge,\x20cancel\x20Guard','traits':{'has_logistics':![],'communication_heavy':![],'pure_digital':!![],'long_cycle':!![],'deposit_required':![],'multi_tier_allocation':![]},'machine_shape':[{'name':'paid','role':'Entry:\x20subscription\x20paid\x20and\x20active\x20via\x20Service.buy();\x20Machine\x20starts\x20here'},{'name':'active','role':'Subscription\x20active\x20—\x20member\x20access\x20granted'},{'name':'period_1_delivered','role':'Period\x201\x20content\x20delivered\x20(WIP\x20hash)'},{'name':'period_2_delivered','role':'Period\x202\x20content\x20delivered\x20(representative;\x20per-period\x20nodes\x20at\x20build\x20time)'},{'name':'renew_confirmed','role':'Explicit\x20renewal\x20—\x20subscriber\x20confirms\x20next-period\x20charge\x20(no\x20silent\x20auto-renew)','operator':'order_payer'},{'name':'closed_cancel','role':'Subscriber\x20cancels\x20—\x20takes\x20effect\x20next\x20period;\x20pro-rata\x20refund\x20Allocator','operator':'order_payer'},{'name':'expired','role':'Subscription\x20term\x20ends'}],'guards':[{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'User\x20confirms\x20each\x20charge\x20—\x20no\x20auto-renew\x20trap'},{'template_id':'pattern.repository_data_check','host':'machine','purpose':'Creator\x20WIP\x20hash\x20per\x20period\x20—\x20prevents\x20content\x20abandonment'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Renewal\x20requires\x20explicit\x20subscriber\x20confirmation\x20(WTS\x20notice)'},{'template_id':'cancel_guard_signer','host':'machine','purpose':'User\x20cancels\x20anytime,\x20next-period\x20effective'},{'template_id':'tpl_repository_quote_guard_subscription','host':'repository','purpose':'Creator\x20publishes\x20paid\x20data\x20(analytics,\x20market\x20data)\x20with\x20quote_guard\x20subscription\x20(§2.11)'}],'allocator':{'recipient':'entity','count':0x1,'mode':'amount','description':'Each\x20confirmed\x20charge\x20→\x20100%\x20to\x20creator;\x20unearned\x20periods\x20→\x20pro-rata\x20refund\x20to\x20subscriber\x20on\x20cancelled\x20(via\x20Allocator\x20per\x20R-M1-11)'},'key_risk':'Auto-renew\x20trap\x20and\x20platform-takes-30%\x20—\x20WoWok\x20native\x20solution','build_notes':['Pure\x20digital\x20—\x20native\x20WoWok\x20soil','charge_guard\x20needs\x20periodic\x20trigger\x20(off-chain\x20scheduler\x20+\x20on-chain\x20Guard)','Renewal\x20is\x20an\x20explicit\x20buyer-side\x20forward\x20(or\x20a\x20Guard-gated\x20auto-renew\x20WITH\x20WTS\x20notice)\x20—\x20never\x20silent','Cancellation\x20is\x20frictionless\x20and\x20next-period\x20effective;\x20pro-rata\x20refund\x20for\x20unearned\x20periods','Forbid\x20dead-end\x20nodes\x20(prevent\x20lock-in);\x20every\x20state\x20must\x20have\x20a\x20forward\x20or\x20be\x20an\x20intended\x20terminal','Targets\x20indie\x20creators,\x20niche\x20SaaS,\x20paid\x20newsletters','Repository\x20quote_guard\x20for\x20creator\x20data\x20subscription\x20revenue\x20—\x20creators\x20publish\x20paid\x20data,\x20users\x20pay\x20to\x20access\x20(§2.11)']},{'name':'retail','phase':0x1,'industry':'Goods\x20retail\x20/\x20marketplace\x20/\x20e-commerce','trust_pattern':'Escrow\x20+\x20confirm-on-receipt\x20release','traits':{'has_logistics':!![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![]},'machine_shape':[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20paid\x20via\x20the\x20on-chain\x20buy\x20flow;\x20Machine\x20starts\x20here'},{'name':'processing','role':'Merchant\x20prepares\x20order\x20(picking/packing);\x20required_info\x20(shipping\x20address)\x20collected\x20via\x20Messenger'},{'name':'shipped','role':'Merchant\x20ships\x20goods,\x20records\x20shipping\x20WIP\x20(tracking\x20number)'},{'name':'in_transit','role':'Logistics\x20leg\x20active\x20—\x20tracking\x20WIP\x20updates'},{'name':'delivered','role':'Goods\x20delivered\x20to\x20buyer'},{'name':'confirmed','role':'Buyer\x20confirms\x20receipt\x20(confirm\x20gate:\x20only\x20buyer\x20can\x20confirm)','operator':'order_payer'},{'name':'completed','role':'Funds\x20released\x20to\x20merchant'},{'name':'return_requested','role':'Buyer\x20requests\x20return\x20within\x20refund_window\x20(>=7d)','operator':'order_payer'},{'name':'returned','role':'Buyer\x20ships\x20goods\x20back\x20(return\x20WIP:\x20tracking\x20number)\x20—\x20triggers\x20refund\x20Allocator\x20(R-M1-11\x20compliant)','operator':'order_payer'},{'name':'closed_cancel','role':'Pre-ship\x20cancellation\x20—\x20triggers\x20refund\x20Allocator','operator':'order_payer'}],'guards':[{'template_id':'pattern.verifier_evidence_philosophy','host':'service','purpose':'Verify\x20inventory\x20and\x20buyer\x20address\x20on\x20purchase'},{'template_id':'ship_guard_wip','host':'machine','purpose':'Shipping\x20evidence\x20WIP\x20(logistics\x20tracking\x20number)'},{'template_id':'pattern.identity_check_order_holder','host':'machine','purpose':'Only\x20buyer\x20can\x20confirm\x20receipt'},{'template_id':'pattern.time_lock_progress','host':'machine','purpose':'Return\x20request\x20gated\x20by\x20refund_window\x20time-lock\x20(clock)'},{'template_id':'pattern.identity_check_service_provider_dynamic','host':'machine','purpose':'Return\x20&\x20refund\x20requires\x20merchant\x20permission\x20OR\x20arbiter'},{'template_id':'tpl_payment_exception_compensation','host':'machine','purpose':'Logistics\x20delay\x20exception\x20compensation\x20(§2.13)'}],'allocator':{'recipient':'entity','count':0x3,'mode':'rate','description':'Platform\x2010%\x20+\x20Merchant\x2090%\x20(rate-based\x20split)\x20on\x20completed;\x20full\x20refund\x20to\x20buyer\x20on\x20returned/cancelled\x20via\x20refund\x20Allocator'},'key_risk':'Products\x20don\x27t\x20match\x20description\x20—\x20no\x20refund\x20path\x20for\x20returns','build_notes':['Logistics\x20WIP\x20(tracking\x20number)\x20is\x20essential\x20—\x20shipping\x20evidence\x20protects\x20both\x20parties\x20in\x20return\x20disputes','Confirm\x20gate\x20prevents\x20merchant\x20from\x20self-confirming\x20receipt','Refund\x20path\x20must\x20support\x20return-and-exchange\x20flow;\x20refund_window\x20>=\x207d','Return\x20request\x20is\x20time-lock\x20gated\x20—\x20after\x20the\x20window\x20closes,\x20returns\x20need\x20merchant\x20permission\x20or\x20arbitration','Compensation\x20fund\x20covers\x20return/exchange\x20disputes','R-M1-11:\x20no\x20\x27refunded\x27\x20node\x20—\x20refunds\x20route\x20via\x20Allocator\x20triggered\x20by\x20returned/cancelled\x20business\x20states;\x20disputes\x20go\x20to\x20Arbitration']},{'name':'general','phase':0x1,'industry':'Anything\x20not\x20covered\x20/\x20hybrid','trust_pattern':'User-defined\x20from\x20scratch','traits':{'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![]},'machine_shape':[],'guards':[],'allocator':{'recipient':'signer','count':0x0,'mode':'amount','description':'User-defined\x20—\x20no\x20defaults'},'key_risk':'No\x20safety\x20net\x20—\x20user\x20must\x20design\x20all\x20trust\x20mechanisms\x20manually','build_notes':['Escape\x20hatch:\x20any\x20user\x20can\x20switch\x20to\x20general\x20mode\x20at\x20any\x20time','Already-created\x20objects\x20under\x20a\x20previous\x20mode\x20remain\x20on-chain\x20(REUSE\x20pattern)','wowok-machine\x20/\x20wowok-guard\x20/\x20wowok-provider\x20become\x20primary\x20references']}];export function matchScenarioMode(a){const b=a['toLowerCase'](),c=inferScenarioTraits(a),e=SCENARIO_MODES['map'](h=>{let i=0x0,j=0x0;for(const k of Object['keys'](c)){j+=0x1;if(h['traits'][k]===c[k])i+=0x1;}if(h['name']!=='general'){const l=MODE_KEYWORDS[h['name']]??[];for(const m of l){if(b['includes'](m))i+=0.5;}}return{'mode':h,'score':i,'total':j};});let f=e[0x0];for(const h of e){if(h['score']>f['score'])f=h;}const g=f['total']>0x0?Math['min'](0x1,f['score']/f['total']):0x0;return{'mode':f['mode'],'confidence':g};}const MODE_KEYWORDS={'freelance':['freelance','design','develop','consult','write','consulting'],'rental':['rent','rental','lease','borrow','equipment','vehicle','property'],'education':['course','training','tutor','teach','education','class'],'travel':['tour','travel','trip','itinerary','vacation'],'subscription':['subscribe','subscription','membership','saas','newsletter','recurring'],'retail':['retail','shop','store','marketplace','sell\x20goods','ecommerce','e-commerce']};export function inferScenarioTraits(a){const b=a['toLowerCase']();return{'has_logistics':/ship|delivery|equipment|vehicle|physical|goods/['test'](b),'communication_heavy':/consult|discuss|back-and-forth|custom|bespoke|negotiate/['test'](b),'pure_digital':/digital|file|download|online|software|code|design|content/['test'](b),'long_cycle':/month|long-term|engagement|project|semester|period/['test'](b),'deposit_required':/deposit|escrow|prepay|tuition|reserve/['test'](b),'multi_tier_allocation':/tier|segment|multi-|agency|hotel|guide|driver/['test'](b)};}export const MODE_COMPOSITIONS=[{'modes':['freelance','subscription'],'use_case':'Retainer\x20consulting\x20(monthly\x20+\x20milestone)','conflict_resolution':'Allocator:\x20split\x20into\x20retainer\x20(subscription)\x20+\x20milestone\x20(freelance)'},{'modes':['rental','education'],'use_case':'Equipment\x20training\x20rental','conflict_resolution':'Machine:\x20extend\x20rental\x20nodes\x20with\x20attendance\x20gates'},{'modes':['travel','rental'],'use_case':'Tour\x20with\x20equipment','conflict_resolution':'Allocator:\x20segment\x20allocation\x20+\x20deposit\x20escrow\x20side-by-side'}];export function getScenarioMode(a){return SCENARIO_MODES['find'](b=>b['name']===a);}export function listScenarioModes(){return SCENARIO_MODES;}export function getShippedModes(){return SCENARIO_MODES['filter'](a=>a['phase']===0x1);}export function getModeCompositions(a){return MODE_COMPOSITIONS['filter'](b=>b['modes']['includes'](a));}export const SCENARIO_MODES_VERSION=0x6;
1
+ export const BUYER_ACTION_NODE_RE=/^(reviewed|return_requested|guest_cancelled|withdrawn|charging|cancelled|closed_cancel)$/i;export function unannotatedBuyerActionNodes(a){return a['filter'](b=>!b['operator']&&BUYER_ACTION_NODE_RE['test'](b['name']))['map'](b=>b['name']);}export const SCENARIO_MODES=[{'name':'freelance','phase':0x1,'industry':'Design\x20/\x20dev\x20/\x20consulting\x20/\x20writing','trust_pattern':'Milestone\x20allocation,\x20acceptance\x20gate','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':!![],'long_cycle':!![],'deposit_required':![],'multi_tier_allocation':![]},'default_template':'freelance/enterprise-talent-market','key_risk':'Customer\x20never\x20accepts\x20delivery\x20—\x20provider\x20cannot\x20get\x20paid','build_notes':['Use\x20Service\x20`setting_lock_duration`\x20to\x20lock\x20rules\x20for\x20the\x20engagement\x20duration','WIP\x20hash\x20on\x20every\x20milestone\x20deliverable\x20is\x20mandatory\x20—\x20protects\x20provider\x20in\x20disputes','Acceptance\x20gate\x20is\x20the\x20trust\x20pivot\x20—\x20both\x20parties\x20must\x20agree\x20on\x20criteria\x20per\x20milestone','Milestones\x20map\x20to\x20deliverable-Guarded\x20forwards;\x20each\x20accepted\x20milestone\x20releases\x20its\x20escrowed\x20slice\x20(allocation.distribute_milestone)','Scope\x20changes\x20are\x20recorded\x20as\x20WTS\x20change-requests\x20at\x20kickoff/throughout\x20—\x20never\x20silent','R-M1-11:\x20no\x20\x27refunded\x27/\x27disputed\x27/\x27arb\x27/\x27cancelled\x27\x20nodes\x20—\x20refunds\x20route\x20via\x20Allocator\x20(to\x20OrderHolder)\x20triggered\x20by\x20\x27closed_cancel\x27,\x20disputes\x20via\x20Arbitration','Payment\x20exception\x20compensation\x20for\x20delivery\x20delays\x20—\x20provider\x20Treasury\x20auto-compensates\x20customer\x20(§2.13)','Project-Catalog\x20orders\x20have\x20NO\x20milestones\x20(single\x20funded\x20order\x20+\x20steps\x20timeline);\x20milestones\x20here\x20model\x20fixed-price\x20CONTRACTS.\x20For\x20catalog-style\x20listings\x20(tiered\x20pricing\x20+\x20add-ons\x20+\x20buyer\x20requirements)\x20use\x20the\x20freelance/catalog-tiers\x20template\x20instead','Time-bound\x20catalog\x20rules\x20(24h\x20instant\x20cancel,\x2048h\x20requirements\x20timeout,\x2014-day\x20auto-accept)\x20need\x20a\x20time\x20Guard\x20PLUS\x20an\x20off-chain\x20keeper\x20per\x20window\x20-\x20Guards\x20take\x20an\x20immutable\x20duration\x20constant']},{'name':'rental','phase':0x1,'industry':'Equipment\x20/\x20vehicle\x20/\x20property\x20rental','trust_pattern':'Deposit\x20escrow,\x20return\x20inspection','traits':{'has_logistics':!![],'communication_heavy':!![],'pure_digital':![],'long_cycle':![],'deposit_required':!![],'multi_tier_allocation':![]},'default_template':'rental/institutional-longstay','key_risk':'Owner\x20claims\x20damage\x20without\x20pre-rental\x20WIP\x20—\x20customer\x20loses\x20deposit\x20unfairly','build_notes':['Pre-rental\x20WIP\x20is\x20non-negotiable\x20—\x20without\x20it,\x20damage\x20claims\x20fail','Deposit\x20must\x20be\x20escrowed,\x20not\x20direct-transferred\x20—\x20enables\x20fair\x20deduction','Inspection\x20gate\x20prevents\x20customer\x20from\x20denying\x20damage','Overdue\x20handling\x20uses\x20a\x20time-lock\x20Guard\x20(clock)\x20—\x20the\x20Guard\x20only\x20ALLOWS\x20the\x20overdue\x20transition;\x20automatic\x20advancement\x20needs\x20an\x20off-chain\x20keeper\x20(see\x20DESIGN-REVIEW\x20C-3)','Extensions\x20are\x20modeled\x20as\x20separate\x20sub-orders\x20(REUSE\x20pattern),\x20not\x20as\x20machine\x20cycles\x20—\x20the\x20Machine\x20stays\x20a\x20DAG','R-M1-11:\x20no\x20\x27deposit_refunded\x27/\x27deposit_deducted\x27/\x27refunded\x27\x20nodes\x20—\x20deposit\x20refund/deduction\x20flows\x20through\x20Allocator\x20triggered\x20by\x20return_approved/damage_confirmed\x20business\x20states','Payment\x20exception\x20compensation\x20for\x20return\x20delays\x20—\x20Treasury\x20withdraws\x20scene-bound\x20Payment\x20(§2.13)','Repository\x20quote_guard\x20for\x20weather/usage\x20data\x20subscription\x20revenue\x20(§2.11)']},{'name':'education','phase':0x2,'industry':'Courses\x20/\x20training\x20/\x20tutoring','trust_pattern':'Periodic\x20release\x20per\x20session,\x20attendance\x20Guard','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':![],'long_cycle':!![],'deposit_required':!![],'multi_tier_allocation':![]},'default_template':'education/live-class-cohort','key_risk':'Tutoring\x20institutions\x20run\x20away\x20with\x20prepaid\x20tuition','build_notes':['Use\x20Service\x20`setting_lock_duration`\x20to\x20lock\x20rules\x20for\x20the\x20entire\x20term\x20(regulatory\x20compliance,\x20>=90d)','Attendance\x20Guard\x20needs\x20WIP\x20hash\x20for\x20session\x20content\x20commitment;\x20attendance\x20evidence\x20lives\x20in\x20the\x20class\x20Repository','Per-session\x20release\x20requires\x20threshold-based\x20trigger\x20—\x20each\x20attended\x20session\x20releases\x201/N','session_1..session_3\x20are\x20representative\x20—\x20configure\x20the\x20real\x20session\x20count\x20(session_N)\x20at\x20build\x20time;\x20each\x20session\x20=\x20one\x20attendance-Guarded\x20forward','Pause/deferral\x20is\x20a\x20terminal\x20node\x20+\x20new\x20sub-order\x20(REUSE\x20pattern)\x20—\x20never\x20a\x20loop\x20back\x20into\x20the\x20session\x20chain\x20(Machine\x20must\x20stay\x20a\x20DAG)','Supply\x20chain\x20sub-orders\x20for\x20course\x20module\x20progressive\x20unlock\x20—\x20each\x20module\x20=\x20sub-service\x20with\x20buy_guard\x20verifying\x20previous\x20module\x20completion\x20(§2.12)','Repository\x20for\x20learning\x20progress\x20collaboration\x20data\x20—\x20progress\x20as\x20key,\x20session\x20data\x20as\x20value\x20(§2.10)']},{'name':'travel','phase':0x2,'industry':'Custom\x20tours\x20/\x20multi-segment\x20trips','trust_pattern':'Multi-tier\x20allocation\x20per\x20segment','traits':{'has_logistics':![],'communication_heavy':!![],'pure_digital':![],'long_cycle':!![],'deposit_required':!![],'multi_tier_allocation':!![]},'default_template':'travel/destination-experience','key_risk':'Paid\x20in\x20full\x20then\x20service\x20shrinks\x20—\x20multi-tier\x20transparency\x20prevents\x20this','build_notes':['Multi-tier\x20Allocation\x20is\x20WoWok\x27s\x20unique\x20advantage\x20over\x20traditional\x20travel\x20platforms','segment_guard\x20needs\x20standardized\x20WIP\x20templates\x20per\x20segment\x20type\x20(hotel,\x20transport,\x20activity)','Multi-tier\x20waterfall\x20needs\x20guard\x20chaining\x20validation','Weather/force-majeure\x20branches\x20enter\x20reschedule\x20(terminal)\x20or\x20partial-refund\x20interrupted\x20terminal\x20—\x20never\x20loop\x20back\x20into\x20the\x20segment\x20chain\x20(Machine\x20must\x20stay\x20a\x20DAG)','Supplier\x20sub-orders\x20each\x20carry\x20their\x20own\x20machine\x20—\x20hotel/guide/driver\x20fulfill\x20independently\x20(§2.12)','Supply\x20chain\x20sub-orders\x20—\x20each\x20tour\x20segment\x20=\x20sub-service\x20with\x20buy_guard\x20verifying\x20main\x20tour\x20order\x20(§2.12)','Payment\x20exception\x20compensation\x20for\x20flight/segment\x20delays\x20(§2.13)','Repository\x20quote_guard\x20for\x20weather/travel\x20data\x20subscription\x20revenue\x20(§2.11)']},{'name':'subscription','phase':0x3,'industry':'SaaS\x20/\x20content\x20membership\x20/\x20periodic\x20service','trust_pattern':'Periodic\x20charge,\x20cancel\x20Guard','traits':{'has_logistics':![],'communication_heavy':![],'pure_digital':!![],'long_cycle':!![],'deposit_required':![],'multi_tier_allocation':![]},'default_template':'subscription/creator-membership','key_risk':'Auto-renew\x20trap\x20and\x20platform-takes-30%\x20—\x20WoWok\x20native\x20solution','build_notes':['Pure\x20digital\x20—\x20native\x20WoWok\x20soil','charge_guard\x20needs\x20periodic\x20trigger\x20(off-chain\x20scheduler\x20+\x20on-chain\x20Guard)','Renewal\x20is\x20an\x20explicit\x20buyer-side\x20forward\x20(or\x20a\x20Guard-gated\x20auto-renew\x20WITH\x20WTS\x20notice)\x20—\x20never\x20silent','Cancellation\x20is\x20frictionless\x20and\x20next-period\x20effective;\x20pro-rata\x20refund\x20for\x20unearned\x20periods','Forbid\x20dead-end\x20nodes\x20(prevent\x20lock-in);\x20every\x20state\x20must\x20have\x20a\x20forward\x20or\x20be\x20an\x20intended\x20terminal','Targets\x20indie\x20creators,\x20niche\x20SaaS,\x20paid\x20newsletters','Repository\x20quote_guard\x20for\x20creator\x20data\x20subscription\x20revenue\x20—\x20creators\x20publish\x20paid\x20data,\x20users\x20pay\x20to\x20access\x20(§2.11)']},{'name':'retail','phase':0x1,'industry':'Goods\x20retail\x20/\x20marketplace\x20/\x20e-commerce','trust_pattern':'Escrow\x20+\x20confirm-on-receipt\x20release','traits':{'has_logistics':!![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![]},'default_template':'retail/scale-marketplace','key_risk':'Products\x20don\x27t\x20match\x20description\x20—\x20no\x20refund\x20path\x20for\x20returns','build_notes':['Logistics\x20WIP\x20(tracking\x20number)\x20is\x20essential\x20—\x20shipping\x20evidence\x20protects\x20both\x20parties\x20in\x20return\x20disputes','Confirm\x20gate\x20prevents\x20merchant\x20from\x20self-confirming\x20receipt','Refund\x20path\x20must\x20support\x20return-and-exchange\x20flow;\x20refund_window\x20>=\x207d','Return\x20request\x20is\x20time-lock\x20gated\x20—\x20after\x20the\x20window\x20closes,\x20returns\x20need\x20merchant\x20permission\x20or\x20arbitration','Compensation\x20fund\x20covers\x20return/exchange\x20disputes','R-M1-11:\x20no\x20\x27refunded\x27\x20node\x20—\x20refunds\x20route\x20via\x20Allocator\x20triggered\x20by\x20returned/cancelled\x20business\x20states;\x20disputes\x20go\x20to\x20Arbitration']},{'name':'general','phase':0x1,'industry':'Anything\x20not\x20covered\x20/\x20hybrid','trust_pattern':'User-defined\x20from\x20scratch','traits':{'has_logistics':![],'communication_heavy':![],'pure_digital':![],'long_cycle':![],'deposit_required':![],'multi_tier_allocation':![]},'default_template':null,'key_risk':'No\x20safety\x20net\x20—\x20user\x20must\x20design\x20all\x20trust\x20mechanisms\x20manually','build_notes':['Escape\x20hatch:\x20any\x20user\x20can\x20switch\x20to\x20general\x20mode\x20at\x20any\x20time','Already-created\x20objects\x20under\x20a\x20previous\x20mode\x20remain\x20on-chain\x20(REUSE\x20pattern)','wowok-machine\x20/\x20wowok-guard\x20/\x20wowok-provider\x20become\x20primary\x20references']}];export function matchScenarioMode(a){const b=a['toLowerCase'](),c=inferScenarioTraits(a),e=SCENARIO_MODES['map'](h=>{let i=0x0,j=0x0;for(const k of Object['keys'](c)){j+=0x1;if(h['traits'][k]===c[k])i+=0x1;}if(h['name']!=='general'){const l=MODE_KEYWORDS[h['name']]??[];for(const m of l){if(b['includes'](m))i+=0.5;}}return{'mode':h,'score':i,'total':j};});let f=e[0x0];for(const h of e){if(h['score']>f['score'])f=h;}const g=f['total']>0x0?Math['min'](0x1,f['score']/f['total']):0x0;return{'mode':f['mode'],'confidence':g};}const MODE_KEYWORDS={'freelance':['freelance','design','develop','consult','write','consulting'],'rental':['rent','rental','lease','borrow','equipment','vehicle','property'],'education':['course','training','tutor','teach','education','class'],'travel':['tour','travel','trip','itinerary','vacation'],'subscription':['subscribe','subscription','membership','saas','newsletter','recurring'],'retail':['retail','shop','store','marketplace','sell\x20goods','ecommerce','e-commerce']};export function inferScenarioTraits(a){const b=a['toLowerCase']();return{'has_logistics':/ship|delivery|equipment|vehicle|physical|goods/['test'](b),'communication_heavy':/consult|discuss|back-and-forth|custom|bespoke|negotiate/['test'](b),'pure_digital':/digital|file|download|online|software|code|design|content/['test'](b),'long_cycle':/month|long-term|engagement|project|semester|period/['test'](b),'deposit_required':/deposit|escrow|prepay|tuition|reserve/['test'](b),'multi_tier_allocation':/tier|segment|multi-|agency|hotel|guide|driver/['test'](b)};}export const MODE_COMPOSITIONS=[{'modes':['freelance','subscription'],'use_case':'Retainer\x20consulting\x20(monthly\x20+\x20milestone)','conflict_resolution':'Allocator:\x20split\x20into\x20retainer\x20(subscription)\x20+\x20milestone\x20(freelance)'},{'modes':['rental','education'],'use_case':'Equipment\x20training\x20rental','conflict_resolution':'Machine:\x20extend\x20rental\x20nodes\x20with\x20attendance\x20gates'},{'modes':['travel','rental'],'use_case':'Tour\x20with\x20equipment','conflict_resolution':'Allocator:\x20segment\x20allocation\x20+\x20deposit\x20escrow\x20side-by-side'}];export function getScenarioMode(a){return SCENARIO_MODES['find'](b=>b['name']===a);}export function listScenarioModes(){return SCENARIO_MODES;}export function getShippedModes(){return SCENARIO_MODES['filter'](a=>a['phase']===0x1);}export function getModeCompositions(a){return MODE_COMPOSITIONS['filter'](b=>b['modes']['includes'](a));}export const SCENARIO_MODES_VERSION=0x7;