@wowok/agent-mcp 3.1.2 → 3.1.4

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 (544) hide show
  1. package/dist/config/config-audit.spec.d.ts +1 -0
  2. package/dist/config/config-audit.spec.js +1 -0
  3. package/dist/config/exposure.d.ts +108 -0
  4. package/dist/config/exposure.js +1 -0
  5. package/dist/config/index.d.ts +2 -0
  6. package/dist/config/index.js +1 -1
  7. package/dist/config/judgment.d.ts +1228 -0
  8. package/dist/config/judgment.js +1 -0
  9. package/dist/config/judgment.spec.d.ts +1 -0
  10. package/dist/config/judgment.spec.js +1 -0
  11. package/dist/config/rule-engine.d.ts +299 -0
  12. package/dist/config/rule-engine.js +1 -0
  13. package/dist/config/rule-engine.spec.d.ts +1 -0
  14. package/dist/config/rule-engine.spec.js +1 -0
  15. package/dist/config/runtime.js +1 -1
  16. package/dist/config/severity.d.ts +7 -0
  17. package/dist/config/severity.js +1 -0
  18. package/dist/customer/index.d.ts +3 -9
  19. package/dist/customer/index.js +1 -1
  20. package/dist/customer/industry-risks.d.ts +3 -17
  21. package/dist/customer/industry-risks.js +1 -1
  22. package/dist/customer/order-monitor.d.ts +3 -1
  23. package/dist/customer/order-monitor.js +1 -1
  24. package/dist/customer/types.d.ts +1 -165
  25. package/dist/customer/types.js +1 -1
  26. package/dist/customer/user-preferences.d.ts +0 -49
  27. package/dist/customer/user-preferences.js +1 -1
  28. package/dist/evaluation/acceptance.d.ts +1 -0
  29. package/dist/evaluation/acceptance.js +1 -1
  30. package/dist/evaluation/arbitration-game.js +1 -1
  31. package/dist/evaluation/architecture.spec.d.ts +1 -0
  32. package/dist/evaluation/architecture.spec.js +1 -0
  33. package/dist/evaluation/builtins/demand-match.js +1 -1
  34. package/dist/evaluation/builtins/graph-service.d.ts +16 -0
  35. package/dist/evaluation/builtins/graph-service.js +1 -0
  36. package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
  37. package/dist/evaluation/builtins/graph-service.spec.js +1 -0
  38. package/dist/evaluation/builtins/index.d.ts +1 -1
  39. package/dist/evaluation/builtins/index.js +1 -1
  40. package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
  41. package/dist/evaluation/builtins/purity.spec.js +1 -0
  42. package/dist/evaluation/engine.js +1 -1
  43. package/dist/evaluation/facets/catalog.d.ts +19 -0
  44. package/dist/evaluation/facets/catalog.js +1 -0
  45. package/dist/evaluation/game-strategy.d.ts +2 -2
  46. package/dist/evaluation/game-strategy.js +1 -1
  47. package/dist/evaluation/guard-scan.d.ts +10 -0
  48. package/dist/evaluation/guard-scan.js +1 -0
  49. package/dist/evaluation/match-operation.d.ts +2 -2
  50. package/dist/evaluation/match-operation.js +1 -1
  51. package/dist/evaluation/standards.d.ts +9 -0
  52. package/dist/evaluation/standards.js +1 -0
  53. package/dist/evaluation/standards.spec.d.ts +1 -0
  54. package/dist/evaluation/standards.spec.js +1 -0
  55. package/dist/evaluation/types.d.ts +11 -1
  56. package/dist/experience/realtime-feedback.js +1 -1
  57. package/dist/extensions/business-modules.js +1 -1
  58. package/dist/extensions/custom-registry-file.js +1 -1
  59. package/dist/extensions/index.d.ts +1 -1
  60. package/dist/extensions/index.js +1 -1
  61. package/dist/extensions/industry-audit.spec.d.ts +1 -0
  62. package/dist/extensions/industry-audit.spec.js +1 -0
  63. package/dist/extensions/industry-layers.d.ts +14 -5
  64. package/dist/extensions/industry-layers.js +1 -1
  65. package/dist/extensions/industry-pack.d.ts +2 -0
  66. package/dist/extensions/industry-pack.js +1 -1
  67. package/dist/extensions/mode-evaluator.js +1 -1
  68. package/dist/extensions/modes.js +1 -1
  69. package/dist/graph/onchain/analyze.d.ts +16 -1
  70. package/dist/graph/onchain/analyze.js +1 -1
  71. package/dist/graph/onchain/analyze.spec.js +1 -1
  72. package/dist/graph/onchain/dataplane.d.ts +1 -1
  73. package/dist/graph/onchain/dataplane.js +1 -1
  74. package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
  75. package/dist/graph/onchain/edge-batch.spec.js +1 -0
  76. package/dist/graph/onchain/edge-schema.d.ts +11 -2
  77. package/dist/graph/onchain/edge-schema.js +1 -1
  78. package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
  79. package/dist/graph/onchain/entity-profile.spec.js +1 -0
  80. package/dist/graph/onchain/event-history.spec.d.ts +1 -0
  81. package/dist/graph/onchain/event-history.spec.js +1 -0
  82. package/dist/graph/onchain/expand.js +1 -1
  83. package/dist/graph/onchain/exploration.d.ts +28 -0
  84. package/dist/graph/onchain/exploration.js +1 -0
  85. package/dist/graph/onchain/exploration.spec.d.ts +1 -0
  86. package/dist/graph/onchain/exploration.spec.js +1 -0
  87. package/dist/graph/onchain/exposure.d.ts +18 -0
  88. package/dist/graph/onchain/exposure.js +1 -0
  89. package/dist/graph/onchain/exposure.spec.d.ts +1 -0
  90. package/dist/graph/onchain/exposure.spec.js +1 -0
  91. package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
  92. package/dist/graph/onchain/extract-deep.spec.js +1 -0
  93. package/dist/graph/onchain/extract.d.ts +11 -3
  94. package/dist/graph/onchain/extract.js +1 -1
  95. package/dist/graph/onchain/facet-projection.d.ts +99 -0
  96. package/dist/graph/onchain/facet-projection.js +1 -0
  97. package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
  98. package/dist/graph/onchain/facet-projection.spec.js +1 -0
  99. package/dist/graph/onchain/facts.d.ts +103 -0
  100. package/dist/graph/onchain/facts.js +1 -0
  101. package/dist/graph/onchain/facts.spec.d.ts +1 -0
  102. package/dist/graph/onchain/facts.spec.js +1 -0
  103. package/dist/graph/onchain/field-manifest.d.ts +29 -0
  104. package/dist/graph/onchain/field-manifest.js +1 -0
  105. package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
  106. package/dist/graph/onchain/field-manifest.spec.js +1 -0
  107. package/dist/graph/onchain/fixtures.d.ts +80 -0
  108. package/dist/graph/onchain/fixtures.js +1 -0
  109. package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
  110. package/dist/graph/onchain/fixtures.spec.js +1 -0
  111. package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
  112. package/dist/graph/onchain/graph-policy.spec.js +1 -0
  113. package/dist/graph/onchain/index.d.ts +14 -2
  114. package/dist/graph/onchain/index.js +1 -1
  115. package/dist/graph/onchain/interest.js +1 -1
  116. package/dist/graph/onchain/interest.spec.js +1 -1
  117. package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
  118. package/dist/graph/onchain/label-lint.spec.js +1 -0
  119. package/dist/graph/onchain/names.d.ts +23 -0
  120. package/dist/graph/onchain/names.js +1 -0
  121. package/dist/graph/onchain/names.spec.d.ts +1 -0
  122. package/dist/graph/onchain/names.spec.js +1 -0
  123. package/dist/graph/onchain/onchain.spec.js +1 -1
  124. package/dist/graph/onchain/policy.d.ts +8 -0
  125. package/dist/graph/onchain/policy.js +1 -0
  126. package/dist/graph/onchain/proposal-graph.d.ts +11 -0
  127. package/dist/graph/onchain/proposal-graph.js +1 -0
  128. package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
  129. package/dist/graph/onchain/proposal-graph.spec.js +1 -0
  130. package/dist/graph/onchain/sdk-batch.d.ts +5 -1
  131. package/dist/graph/onchain/sdk-batch.js +1 -1
  132. package/dist/graph/onchain/strategy.d.ts +16 -0
  133. package/dist/graph/onchain/strategy.js +1 -1
  134. package/dist/graph/onchain/strategy.spec.js +1 -1
  135. package/dist/graph/onchain/synthesis.d.ts +20 -0
  136. package/dist/graph/onchain/synthesis.js +1 -0
  137. package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
  138. package/dist/graph/onchain/synthesis.spec.js +1 -0
  139. package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
  140. package/dist/graph/onchain/table-ledger.spec.js +1 -0
  141. package/dist/graph/onchain/types.d.ts +57 -7
  142. package/dist/graph/onchain/viewport.d.ts +1 -0
  143. package/dist/graph/onchain/viewport.js +1 -1
  144. package/dist/harness/index.d.ts +1 -5
  145. package/dist/harness/index.js +1 -1
  146. package/dist/harness/verify.d.ts +6 -1
  147. package/dist/harness/verify.js +1 -1
  148. package/dist/index.js +1 -1
  149. package/dist/keeper/keeper.spec.js +1 -1
  150. package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
  151. package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
  152. package/dist/knowledge/allocation-ledger.js +1 -1
  153. package/dist/knowledge/allocation-puzzle.d.ts +1 -1
  154. package/dist/knowledge/allocation-puzzle.js +1 -1
  155. package/dist/knowledge/allocation-risk.d.ts +4 -3
  156. package/dist/knowledge/allocation-risk.js +1 -1
  157. package/dist/knowledge/allocation-templates.js +1 -1
  158. package/dist/knowledge/arb-risk.d.ts +6 -6
  159. package/dist/knowledge/arb-risk.js +1 -1
  160. package/dist/knowledge/arbitration-ledger.d.ts +4 -4
  161. package/dist/knowledge/arbitration-ledger.js +1 -1
  162. package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
  163. package/dist/knowledge/arbitration-puzzle.js +1 -1
  164. package/dist/knowledge/arbitration-risk.d.ts +4 -3
  165. package/dist/knowledge/arbitration-risk.js +1 -1
  166. package/dist/knowledge/arbitration-templates.js +1 -1
  167. package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
  168. package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
  169. package/dist/knowledge/baselines/judgment-baselines.json +289 -0
  170. package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
  171. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
  172. package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
  173. package/dist/knowledge/baselines/risk-cases.js +1 -0
  174. package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
  175. package/dist/knowledge/baselines/rules/allocation.json +492 -0
  176. package/dist/knowledge/baselines/rules/arb.json +155 -0
  177. package/dist/knowledge/baselines/rules/arbitration.json +366 -0
  178. package/dist/knowledge/baselines/rules/bridge.json +197 -0
  179. package/dist/knowledge/baselines/rules/contact.json +152 -0
  180. package/dist/knowledge/baselines/rules/demand.json +158 -0
  181. package/dist/knowledge/baselines/rules/graph.json +453 -0
  182. package/dist/knowledge/baselines/rules/guard.json +981 -0
  183. package/dist/knowledge/baselines/rules/machine.json +706 -0
  184. package/dist/knowledge/baselines/rules/order.json +549 -0
  185. package/dist/knowledge/baselines/rules/payment.json +205 -0
  186. package/dist/knowledge/baselines/rules/permission.json +330 -0
  187. package/dist/knowledge/baselines/rules/personal.json +139 -0
  188. package/dist/knowledge/baselines/rules/progress.json +346 -0
  189. package/dist/knowledge/baselines/rules/proof.json +158 -0
  190. package/dist/knowledge/baselines/rules/registrar.json +159 -0
  191. package/dist/knowledge/baselines/rules/repository.json +244 -0
  192. package/dist/knowledge/baselines/rules/resource.json +117 -0
  193. package/dist/knowledge/baselines/rules/reward.json +471 -0
  194. package/dist/knowledge/baselines/rules/service.json +595 -0
  195. package/dist/knowledge/baselines/rules/treasury.json +440 -0
  196. package/dist/knowledge/baselines/rules/util.json +101 -0
  197. package/dist/knowledge/bridge-risk.d.ts +6 -6
  198. package/dist/knowledge/bridge-risk.js +1 -1
  199. package/dist/knowledge/builtin-templates.d.ts +26 -0
  200. package/dist/knowledge/builtin-templates.js +1 -0
  201. package/dist/knowledge/contact-risk.d.ts +6 -6
  202. package/dist/knowledge/contact-risk.js +1 -1
  203. package/dist/knowledge/contract-invariants.d.ts +1 -0
  204. package/dist/knowledge/contract-invariants.js +1 -1
  205. package/dist/knowledge/demand-risk.d.ts +6 -6
  206. package/dist/knowledge/demand-risk.js +1 -1
  207. package/dist/knowledge/event-semantics.js +1 -1
  208. package/dist/knowledge/facts-sync.spec.d.ts +1 -0
  209. package/dist/knowledge/facts-sync.spec.js +1 -0
  210. package/dist/knowledge/getting-started.js +1 -1
  211. package/dist/knowledge/guard-design-patterns.js +1 -1
  212. package/dist/knowledge/guard-eval.d.ts +15 -0
  213. package/dist/knowledge/guard-eval.js +1 -0
  214. package/dist/knowledge/guard-eval.spec.d.ts +1 -0
  215. package/dist/knowledge/guard-eval.spec.js +1 -0
  216. package/dist/knowledge/guard-field-cognition.d.ts +1 -1
  217. package/dist/knowledge/guard-field-cognition.js +1 -1
  218. package/dist/knowledge/guard-ledger.js +1 -1
  219. package/dist/knowledge/guard-lint.d.ts +1 -1
  220. package/dist/knowledge/guard-lint.js +1 -1
  221. package/dist/knowledge/guard-risk.d.ts +7 -19
  222. package/dist/knowledge/guard-risk.js +1 -1
  223. package/dist/knowledge/guard-templates.js +1 -1
  224. package/dist/knowledge/guard-translation.js +1 -1
  225. package/dist/knowledge/index.d.ts +51 -45
  226. package/dist/knowledge/index.js +1 -1
  227. package/dist/knowledge/industry-registry.js +1 -1
  228. package/dist/knowledge/industry-rule-node.d.ts +7 -0
  229. package/dist/knowledge/industry-rule-node.js +1 -0
  230. package/dist/knowledge/industry-strategy.js +1 -1
  231. package/dist/knowledge/jsonrpc-enum.js +1 -1
  232. package/dist/knowledge/machine-ledger.js +1 -1
  233. package/dist/knowledge/machine-risk.d.ts +4 -7
  234. package/dist/knowledge/machine-risk.js +1 -1
  235. package/dist/knowledge/machine-templates.js +1 -1
  236. package/dist/knowledge/machine-translation.js +1 -1
  237. package/dist/knowledge/migration-preflight.js +1 -1
  238. package/dist/knowledge/operation-dictionary.js +1 -1
  239. package/dist/knowledge/order-ledger.js +1 -1
  240. package/dist/knowledge/order-puzzle.d.ts +3 -3
  241. package/dist/knowledge/order-puzzle.js +1 -1
  242. package/dist/knowledge/order-risk.d.ts +7 -12
  243. package/dist/knowledge/order-risk.js +1 -1
  244. package/dist/knowledge/order-templates.js +1 -1
  245. package/dist/knowledge/passport-ledger.js +1 -1
  246. package/dist/knowledge/passport-templates.js +1 -1
  247. package/dist/knowledge/payment-risk.d.ts +8 -7
  248. package/dist/knowledge/payment-risk.js +1 -1
  249. package/dist/knowledge/payment-tracker.js +1 -1
  250. package/dist/knowledge/permission-ledger.js +1 -1
  251. package/dist/knowledge/permission-puzzle.d.ts +12 -12
  252. package/dist/knowledge/permission-puzzle.js +1 -1
  253. package/dist/knowledge/permission-risk.d.ts +4 -10
  254. package/dist/knowledge/permission-risk.js +1 -1
  255. package/dist/knowledge/permission-templates.js +1 -1
  256. package/dist/knowledge/personal-risk.d.ts +6 -6
  257. package/dist/knowledge/personal-risk.js +1 -1
  258. package/dist/knowledge/progress-ledger.js +1 -1
  259. package/dist/knowledge/progress-puzzle.d.ts +2 -2
  260. package/dist/knowledge/progress-puzzle.js +1 -1
  261. package/dist/knowledge/progress-risk.d.ts +4 -3
  262. package/dist/knowledge/progress-risk.js +1 -1
  263. package/dist/knowledge/progress-templates.js +1 -1
  264. package/dist/knowledge/proof-risk.d.ts +6 -6
  265. package/dist/knowledge/proof-risk.js +1 -1
  266. package/dist/knowledge/puzzle-projections.d.ts +11 -0
  267. package/dist/knowledge/puzzle-projections.js +1 -0
  268. package/dist/knowledge/recipient-constraint.d.ts +20 -1
  269. package/dist/knowledge/recipient-constraint.js +1 -1
  270. package/dist/knowledge/registrar-risk.d.ts +6 -6
  271. package/dist/knowledge/registrar-risk.js +1 -1
  272. package/dist/knowledge/repository-risk.d.ts +7 -7
  273. package/dist/knowledge/repository-risk.js +1 -1
  274. package/dist/knowledge/resource-risk.d.ts +6 -6
  275. package/dist/knowledge/resource-risk.js +1 -1
  276. package/dist/knowledge/reward-ledger.d.ts +1 -1
  277. package/dist/knowledge/reward-ledger.js +1 -1
  278. package/dist/knowledge/reward-puzzle.d.ts +2 -2
  279. package/dist/knowledge/reward-puzzle.js +1 -1
  280. package/dist/knowledge/reward-risk.d.ts +5 -6
  281. package/dist/knowledge/reward-risk.js +1 -1
  282. package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
  283. package/dist/knowledge/rule-node-analyzers.js +1 -0
  284. package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
  285. package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
  286. package/dist/knowledge/rule-outcome.d.ts +5 -0
  287. package/dist/knowledge/rule-outcome.js +1 -0
  288. package/dist/knowledge/safety-rules.js +1 -1
  289. package/dist/knowledge/scenario-modes.d.ts +2 -2
  290. package/dist/knowledge/scenario-modes.js +1 -1
  291. package/dist/knowledge/scenario-topology.js +1 -1
  292. package/dist/knowledge/service-allocator-audit-node.js +1 -1
  293. package/dist/knowledge/service-ledger.js +1 -1
  294. package/dist/knowledge/service-puzzle.d.ts +2 -2
  295. package/dist/knowledge/service-puzzle.js +1 -1
  296. package/dist/knowledge/service-risk-node.js +1 -1
  297. package/dist/knowledge/service-risk.d.ts +4 -4
  298. package/dist/knowledge/service-risk.js +1 -1
  299. package/dist/knowledge/service-templates.js +1 -1
  300. package/dist/knowledge/strategy-manuals.d.ts +1 -1
  301. package/dist/knowledge/strategy-manuals.js +1 -1
  302. package/dist/knowledge/template-loader.d.ts +84 -0
  303. package/dist/knowledge/template-loader.js +1 -0
  304. package/dist/knowledge/template-loader.spec.d.ts +1 -0
  305. package/dist/knowledge/template-loader.spec.js +1 -0
  306. package/dist/knowledge/template-registry.js +1 -1
  307. package/dist/knowledge/template-scanner.d.ts +17 -0
  308. package/dist/knowledge/template-scanner.js +1 -0
  309. package/dist/knowledge/template-scanner.spec.d.ts +1 -0
  310. package/dist/knowledge/template-scanner.spec.js +1 -0
  311. package/dist/knowledge/tools-reference.js +1 -1
  312. package/dist/knowledge/treasury-ledger.d.ts +1 -1
  313. package/dist/knowledge/treasury-ledger.js +1 -1
  314. package/dist/knowledge/treasury-puzzle.d.ts +3 -3
  315. package/dist/knowledge/treasury-puzzle.js +1 -1
  316. package/dist/knowledge/treasury-risk.d.ts +6 -4
  317. package/dist/knowledge/treasury-risk.js +1 -1
  318. package/dist/knowledge/treasury-templates.js +1 -1
  319. package/dist/knowledge/util-risk.d.ts +6 -6
  320. package/dist/knowledge/util-risk.js +1 -1
  321. package/dist/knowledge/workflow-guidance.d.ts +4 -0
  322. package/dist/knowledge/workflow-guidance.js +1 -1
  323. package/dist/knowledge/workspace-lists.js +1 -1
  324. package/dist/monitor/MonitorLoop.js +1 -1
  325. package/dist/participation/arbitrator-interest.js +1 -1
  326. package/dist/participation/radar-core.js +1 -1
  327. package/dist/persona/analyzer.js +1 -1
  328. package/dist/persona/bridge.js +1 -1
  329. package/dist/persona/facet-profile.d.ts +33 -0
  330. package/dist/persona/facet-profile.js +1 -0
  331. package/dist/persona/index.js +1 -1
  332. package/dist/persona/model.d.ts +2 -1
  333. package/dist/persona/model.js +1 -1
  334. package/dist/persona/persona-audit.spec.d.ts +1 -0
  335. package/dist/persona/persona-audit.spec.js +1 -0
  336. package/dist/persona/topology-focus.d.ts +2 -2
  337. package/dist/persona/topology-focus.js +1 -1
  338. package/dist/persona/types.d.ts +14 -0
  339. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  340. package/dist/playbooks/service-build/facet-money.d.ts +33 -0
  341. package/dist/playbooks/service-build/facet-money.js +1 -0
  342. package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
  343. package/dist/playbooks/service-build/facet-money.spec.js +1 -0
  344. package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
  345. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  346. package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
  347. package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
  348. package/dist/playbooks/service-build/migration-planner.js +1 -0
  349. package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
  350. package/dist/playbooks/service-build/object-panorama.js +1 -1
  351. package/dist/playbooks/service-build/participation-radar.js +1 -1
  352. package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
  353. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  354. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  355. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  356. package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
  357. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  358. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  359. package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
  360. package/dist/playbooks/service-build/service-panorama.js +1 -1
  361. package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
  362. package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
  363. package/dist/playbooks/service-build/topology-query.d.ts +13 -2
  364. package/dist/playbooks/service-build/topology-query.js +1 -1
  365. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  366. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  367. package/dist/relationship/registry.js +1 -1
  368. package/dist/review/arb.d.ts +0 -2
  369. package/dist/review/arb.js +1 -1
  370. package/dist/review/machine.js +1 -1
  371. package/dist/review/order.d.ts +0 -1
  372. package/dist/review/order.js +1 -1
  373. package/dist/review/service.js +1 -1
  374. package/dist/review/types.d.ts +7 -0
  375. package/dist/role/profiles.js +1 -1
  376. package/dist/rules.d.ts +1 -2
  377. package/dist/rules.js +1 -1
  378. package/dist/safety/confirm-gate.js +1 -1
  379. package/dist/schema/benchmark-migration/index.d.ts +207 -0
  380. package/dist/schema/benchmark-migration/index.js +1 -0
  381. package/dist/schema/call/allocation.d.ts +1 -1
  382. package/dist/schema/call/allocation.js +1 -1
  383. package/dist/schema/call/arbitration.d.ts +1 -1
  384. package/dist/schema/call/arbitration.js +1 -1
  385. package/dist/schema/call/base.d.ts +3374 -670
  386. package/dist/schema/call/base.js +1 -1
  387. package/dist/schema/call/contact.d.ts +1 -1
  388. package/dist/schema/call/demand.d.ts +1 -1
  389. package/dist/schema/call/guard.d.ts +3 -3
  390. package/dist/schema/call/handler.js +1 -1
  391. package/dist/schema/call/machine.d.ts +5 -5
  392. package/dist/schema/call/order.d.ts +3 -3
  393. package/dist/schema/call/payment.js +1 -1
  394. package/dist/schema/call/permission-handler.d.ts +1 -1
  395. package/dist/schema/call/permission-handler.js +1 -1
  396. package/dist/schema/call/permission.d.ts +16 -16
  397. package/dist/schema/call/permission.js +1 -1
  398. package/dist/schema/call/personal.d.ts +8 -8
  399. package/dist/schema/call/personal.js +1 -1
  400. package/dist/schema/call/progress.d.ts +3 -3
  401. package/dist/schema/call/receipt.d.ts +28 -0
  402. package/dist/schema/call/receipt.js +1 -0
  403. package/dist/schema/call/repository.d.ts +11 -11
  404. package/dist/schema/call/repository.js +1 -1
  405. package/dist/schema/call/reward.d.ts +1 -1
  406. package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
  407. package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
  408. package/dist/schema/call/semantic.d.ts +5 -2
  409. package/dist/schema/call/semantic.js +1 -1
  410. package/dist/schema/call/service.d.ts +7 -7
  411. package/dist/schema/call/service.js +1 -1
  412. package/dist/schema/call/treasury.d.ts +1 -1
  413. package/dist/schema/call/treasury.js +1 -1
  414. package/dist/schema/common/index.d.ts +6 -6
  415. package/dist/schema/common/index.js +1 -1
  416. package/dist/schema/config/index.d.ts +50 -1
  417. package/dist/schema/config/index.js +1 -1
  418. package/dist/schema/evaluation/index.d.ts +307 -213
  419. package/dist/schema/evaluation/index.js +1 -1
  420. package/dist/schema/goal/index.d.ts +6 -6
  421. package/dist/schema/goal/planning.d.ts +17 -17
  422. package/dist/schema/goal/planning.js +1 -1
  423. package/dist/schema/index.d.ts +1 -1
  424. package/dist/schema/index.js +1 -1
  425. package/dist/schema/industry-pack/index.d.ts +1 -1
  426. package/dist/schema/interaction/index.d.ts +1 -1
  427. package/dist/schema/keeper/index.d.ts +1 -1
  428. package/dist/schema/local/index.js +1 -1
  429. package/dist/schema/messenger/index.d.ts +26 -26
  430. package/dist/schema/operations.d.ts +59 -43
  431. package/dist/schema/operations.js +1 -1
  432. package/dist/schema/persona/index.d.ts +4732 -24
  433. package/dist/schema/persona/index.js +1 -1
  434. package/dist/schema/query/bi.d.ts +830 -10
  435. package/dist/schema/query/bi.js +1 -1
  436. package/dist/schema/query/index.d.ts +44 -44
  437. package/dist/schema/query/index.js +1 -1
  438. package/dist/schema/schema-version.js +1 -1
  439. package/dist/schema/workflow/index.d.ts +1 -1
  440. package/dist/schema/workspace/index.d.ts +2 -2
  441. package/dist/schema-query-impl/index.d.ts +9 -0
  442. package/dist/schema-query-impl/index.js +1 -1
  443. package/dist/schemas/account_operation.output.json +1 -1
  444. package/dist/schemas/benchmark_migration_operation.output.json +793 -0
  445. package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
  446. package/dist/schemas/bridge_operation.output.json +1 -1
  447. package/dist/schemas/bridge_operation.schema.json +5 -5
  448. package/dist/schemas/config_operation.output.json +252 -0
  449. package/dist/schemas/config_operation.schema.json +21 -1
  450. package/dist/schemas/evaluation_operation.output.json +702 -162
  451. package/dist/schemas/evaluation_operation.schema.json +0 -429
  452. package/dist/schemas/goal_operation.schema.json +8 -8
  453. package/dist/schemas/guard2file.schema.json +1 -1
  454. package/dist/schemas/index.json +7 -7
  455. package/dist/schemas/keeper_operation.output.json +1 -1
  456. package/dist/schemas/local_history_operation.output.json +1 -1
  457. package/dist/schemas/local_info_operation.output.json +1 -1
  458. package/dist/schemas/local_mark_operation.output.json +1 -1
  459. package/dist/schemas/machineNode2file.schema.json +1 -1
  460. package/dist/schemas/messenger_operation.output.json +1 -1
  461. package/dist/schemas/messenger_operation.schema.json +24 -12
  462. package/dist/schemas/monitor_events.output.json +1 -1
  463. package/dist/schemas/monitor_subscription.output.json +1 -1
  464. package/dist/schemas/onchain_events.output.json +2 -2
  465. package/dist/schemas/onchain_operations.output.json +6359 -3724
  466. package/dist/schemas/onchain_operations.schema.json +191 -141
  467. package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
  468. package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
  469. package/dist/schemas/onchain_operations_contact.schema.json +7 -5
  470. package/dist/schemas/onchain_operations_demand.schema.json +7 -5
  471. package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
  472. package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
  473. package/dist/schemas/onchain_operations_guard.schema.json +5 -3
  474. package/dist/schemas/onchain_operations_machine.schema.json +22 -18
  475. package/dist/schemas/onchain_operations_order.schema.json +11 -7
  476. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  477. package/dist/schemas/onchain_operations_permission.schema.json +19 -11
  478. package/dist/schemas/onchain_operations_personal.schema.json +16 -10
  479. package/dist/schemas/onchain_operations_progress.schema.json +11 -7
  480. package/dist/schemas/onchain_operations_proof.schema.json +5 -3
  481. package/dist/schemas/onchain_operations_repository.schema.json +12 -8
  482. package/dist/schemas/onchain_operations_reward.schema.json +11 -9
  483. package/dist/schemas/onchain_operations_service.schema.json +28 -22
  484. package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
  485. package/dist/schemas/onchain_table_data.output.json +88 -88
  486. package/dist/schemas/persona_operation.output.json +15875 -1
  487. package/dist/schemas/persona_operation.schema.json +3056 -478
  488. package/dist/schemas/query_toolkit.output.json +1325 -212
  489. package/dist/schemas/query_toolkit.schema.json +60 -2
  490. package/dist/schemas/workflow_operation.schema.json +4 -2
  491. package/dist/strategy/metrics.js +1 -1
  492. package/dist/strategy/scorecard.js +1 -1
  493. package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
  494. package/dist/tools/handlers/benchmark-migration.js +1 -0
  495. package/dist/tools/handlers/bridge.js +1 -1
  496. package/dist/tools/handlers/config.js +1 -1
  497. package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
  498. package/dist/tools/handlers/dispatch-expectations.js +1 -0
  499. package/dist/tools/handlers/evaluation.js +1 -1
  500. package/dist/tools/handlers/industry-pack.js +1 -1
  501. package/dist/tools/handlers/onchain.js +1 -1
  502. package/dist/tools/handlers/query.js +1 -1
  503. package/dist/tools/handlers/schema-query.js +1 -1
  504. package/dist/tools/index.js +1 -1
  505. package/dist/tools/move-fn-index.gen.d.ts +3 -0
  506. package/dist/tools/move-fn-index.gen.js +1 -0
  507. package/dist/tools/registry/business.js +1 -1
  508. package/dist/tools/registry/config.js +1 -1
  509. package/dist/tools/registry/evaluation.d.ts +2 -0
  510. package/dist/tools/registry/evaluation.js +1 -0
  511. package/dist/tools/registry/onchain.js +1 -1
  512. package/dist/tools/registry/query.js +1 -1
  513. package/dist/tools/sanitize-output.d.ts +3 -0
  514. package/dist/tools/sanitize-output.js +1 -0
  515. package/dist/tools/sanitize-output.spec.d.ts +1 -0
  516. package/dist/tools/sanitize-output.spec.js +1 -0
  517. package/dist/tools/shared.d.ts +0 -1
  518. package/dist/tools/shared.js +1 -1
  519. package/dist/tools/wrap.js +1 -1
  520. package/package.json +9 -3
  521. package/dist/customer/customer-advice.d.ts +0 -32
  522. package/dist/customer/customer-advice.js +0 -1
  523. package/dist/customer/info-puzzle.d.ts +0 -146
  524. package/dist/customer/info-puzzle.js +0 -1
  525. package/dist/customer/order-strategy.d.ts +0 -17
  526. package/dist/customer/order-strategy.js +0 -1
  527. package/dist/customer/preorder-compare.d.ts +0 -24
  528. package/dist/customer/preorder-compare.js +0 -1
  529. package/dist/customer/reminder-system.d.ts +0 -42
  530. package/dist/customer/reminder-system.js +0 -1
  531. package/dist/customer/risk-assessment.d.ts +0 -13
  532. package/dist/customer/risk-assessment.js +0 -1
  533. package/dist/evaluation/builtins/service-risk.d.ts +0 -7
  534. package/dist/evaluation/builtins/service-risk.js +0 -1
  535. package/dist/knowledge/trust-metrics.d.ts +0 -66
  536. package/dist/knowledge/trust-metrics.js +0 -1
  537. package/dist/schema/trust/index.d.ts +0 -334
  538. package/dist/schema/trust/index.js +0 -1
  539. package/dist/schemas/trust_score.output.json +0 -847
  540. package/dist/schemas/trust_score.schema.json +0 -364
  541. package/dist/tools/handlers/trust.d.ts +0 -16
  542. package/dist/tools/handlers/trust.js +0 -1
  543. package/dist/tools/registry/trust.d.ts +0 -2
  544. package/dist/tools/registry/trust.js +0 -1
@@ -0,0 +1,26 @@
1
+ import type { Industry } from "../customer/index.js";
2
+ import type { ModeMachineNode, ModeGuardRef, ModeAllocatorStrategy } from "./scenario-modes.js";
3
+ export interface ArchetypeTemplate {
4
+ id: string;
5
+ industry: Industry;
6
+ variant: string;
7
+ archetype: "leader" | "challenger";
8
+ phase: 1 | 2 | 3;
9
+ machine_shape: ModeMachineNode[];
10
+ guards: ModeGuardRef[];
11
+ allocator: ModeAllocatorStrategy;
12
+ fee_params: Record<string, number | string>;
13
+ trust_mechanisms: string[];
14
+ keeper_dependencies: string[];
15
+ recommended_role: "merchant" | "supplier" | "both";
16
+ role_rationale: string;
17
+ differences: string[];
18
+ user_inputs: string[];
19
+ key_risk: string;
20
+ build_notes: string[];
21
+ }
22
+ export declare const BUILTIN_TEMPLATES_VERSION = 2;
23
+ export declare const BUILTIN_TEMPLATES: ArchetypeTemplate[];
24
+ export declare const TEMPLATE_KEYWORDS: Record<string, string[]>;
25
+ export declare function getBuiltinTemplate(id: string): ArchetypeTemplate | undefined;
26
+ export declare function listBuiltinTemplates(): ArchetypeTemplate[];
@@ -0,0 +1 @@
1
+ export const BUILTIN_TEMPLATES_VERSION=0x2;export const BUILTIN_TEMPLATES=[{'id':'retail/scale-marketplace','industry':'retail','variant':'scale-marketplace','archetype':'leader','phase':0x1,'machine_shape':[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20fully\x20escrowed\x20via\x20the\x20on-chain\x20buy\x20flow;\x20Machine\x20starts\x20here'},{'name':'shipped','role':'Seller/fulfiller\x20ships\x20goods\x20with\x20tracking\x20evidence\x20(fulfiller\x20permission\x20slot)'},{'name':'delivered','role':'Carrier\x20or\x20buyer\x20confirms\x20delivery\x20—\x20buyer-first\x20confirmation'},{'name':'reviewed','role':'Buyer\x20reviews\x20within\x20the\x2014-day\x20review\x20window'},{'name':'completed','role':'Settlement\x20point:\x20no\x20open\x20claims\x20and\x20return\x20window\x20elapsed\x20—\x20settlement\x20Allocator\x20releases\x20funds'},{'name':'return_requested','role':'Buyer\x20requests\x20return\x20within\x20the\x2030-day\x20return\x20window'},{'name':'returned','role':'Return\x20receipt\x20evidenced\x20—\x20triggers\x20refund\x20Allocator\x20to\x20buyer'},{'name':'cancelled','role':'Pre-delivery\x20cancellation\x20—\x20triggers\x20refund\x20Allocator\x20to\x20buyer'}],'guards':[{'template_id':'buy_guard_passport','host':'service','purpose':'Buyer\x20region\x20eligibility\x20and\x20optional\x20buyer\x20Passport\x20gate\x20on\x20purchase'},{'template_id':'ship_guard_wip','host':'machine','purpose':'Shipping\x20evidence\x20(tracking\x20hash)\x20required\x20to\x20ship'},{'template_id':'delivery_confirm_guard_signer','host':'machine','purpose':'Delivery\x20confirmed\x20by\x20buyer-first;\x20carrier\x20only\x20auxiliary\x20evidence\x20—\x20seller\x20can\x20never\x20self-confirm'},{'template_id':'review_window_guard_timelock','host':'machine','purpose':'Review\x20gated\x20to\x20within\x2014\x20days\x20of\x20delivery'},{'template_id':'completion_guard_timelock','host':'machine','purpose':'Settlement\x20gated:\x20no\x20open\x20claims\x20and\x2030\x20days\x20past\x20delivery'},{'template_id':'return_auth_guard_timelock','host':'machine','purpose':'Return\x20request\x20gated\x20to\x20within\x2030\x20days\x20of\x20delivery'},{'template_id':'refund_guard_permission','host':'machine','purpose':'Refund\x20execution\x20requires\x20the\x20refund-executor\x20permission\x20slot\x20or\x20an\x20arbiter'},{'template_id':'settle_guard_timelock','host':'machine','purpose':'Single\x20settlement\x20time-lock\x20merging\x20reserve\x20+\x20settlement\x20cycle\x20+\x20return\x20window\x20into\x20one\x20release\x20point'}],'allocator':{'recipient':'entity','count':0x3,'mode':'rate','description':'Full\x20escrow\x20+\x20single-point\x20settlement:\x20platform\x20fixed\x20fulfillment\x20fee\x20(Amount)\x20+\x20platform\x20commission\x20Rate\x201500\x20+\x20seller\x20Surplus\x20at\x20the\x20settlement\x20point;\x20full\x20refund\x20to\x20buyer\x20(Rate\x2010000)\x20on\x20returned/cancelled;\x20post-settlement\x20claims\x20paid\x20from\x20the\x20compensation\x20fund'},'key_risk':'Settlement\x20uncertainty\x20—\x20sellers\x20need\x20a\x20deterministic\x20release\x20point\x20after\x20reserve\x20+\x20cycle\x20+\x20return\x20window','build_notes':['Full\x20escrow\x20+\x20single-point\x20settlement:\x20funds\x20stay\x20100%\x20in\x20the\x20pool\x20until\x20the\x20settlement\x20time-lock\x20fires','Reserve\x20(7d)\x20+\x20settlement\x20cycle\x20(14d)\x20+\x20return\x20window\x20(30d)\x20merge\x20into\x20ONE\x20settlement\x20time-lock\x20Guard','Disputes\x20go\x20to\x20an\x20independent\x20Arbitration\x20object\x20—\x20never\x20Machine\x20nodes\x20(R-M1-11)','Service\x20Permission\x20and\x20Arbitration\x20Permission\x20must\x20be\x20two\x20separate\x20objects\x20(contract-enforced)','Allocator\x20threshold\x20=\x20minimum\x20payout\x20unit\x20(maps\x20to\x20the\x20$1\x20payout\x20threshold)','Repository\x20evidence\x20chain:\x20tracking\x20hash,\x20delivery\x20scan,\x20WTS\x20message\x20proof,\x20authenticity\x20proof,\x20return\x20receipt','Category-differentiated\x20commission\x20/\x20per-order\x20return\x20policy:\x20every\x20order\x20gets\x20its\x20OWN\x20Allocation\x20(order_allocators\x20is\x20only\x20the\x20template),\x20so\x20add\x20ONE\x20allocator\x20entry\x20per\x20category\x20—\x20each\x20with\x20a\x20category\x20Guard\x20whose\x20relies\x20reference\x20a\x20Repository\x20holding\x20the\x20category\x20rules\x20(commission\x20rate\x20or\x20fixed\x20amount,\x20return\x20window);\x20the\x20Guard\x20validates\x20the\x20differentiated\x20supply\x20(amount\x20or\x20rate)\x20at\x20runtime.\x20No\x20contract\x20change\x20needed'],'fee_params':{'commission_rate_bps':0x5dc,'settlement_days':0xe,'reserve_days':0x7,'return_window_days':0x1e,'dispute_window_days':0x5a,'seller_contact_hours':0x30},'trust_mechanisms':['R1\x20refund\x20path:\x20refund\x20Guard\x20+\x20buyer\x20Rate\x2010000\x20Allocator\x20+\x20dispute\x20compensation\x20channel','R2\x20independent\x20Arbitration\x20with\x20its\x20own\x20Permission\x20(admin\x20=\x20arbitration\x20team)','R3\x20compensation\x20fund\x20>=\x205x\x20claim\x20cap\x20for\x20post-settlement\x20claims','R4\x20buyer-first\x20delivery\x20confirmation\x20—\x20seller\x20self-sign\x20forbidden','R5\x20escrow\x20payment\x20anchored\x20to\x20the\x20order\x20object\x20(anti-recipient-hijack)','R6\x20settlement\x20Allocator\x20carries\x20Surplus\x20so\x20commission\x20Rate\x201500\x20<=\x2010000;\x20refund\x20Allocator\x20Rate\x20=\x2010000','R7\x20all\x20nodes/forwards/Guards\x20configured\x20before\x20publish\x20(publish\x20freezes)','R8\x20customer-service\x20Contact\x20bound\x20to\x20Service\x20and\x20Machine','R9\x20keeper\x20declared\x20for\x20settlement\x20trigger,\x20absence\x20timeout,\x20and\x20window\x20expiry','R10\x20business\x20parameters\x20(claim\x20cap,\x20return\x20window,\x20settlement\x20cycle)\x20embedded\x20as\x20Guard\x20parameters\x20—\x20industry-recommended\x20defaults,\x20merchant-configurable\x20at\x20build\x20time'],'keeper_dependencies':['settlement\x20trigger\x20at\x20the\x20single\x20release\x20point','48h\x20absence\x20auto-loss\x20in\x20arbitration','90-day\x20dispute\x20window\x20expiry','return\x20window\x20expiry'],'recommended_role':'merchant','role_rationale':'Marketplace\x20operator\x20owns\x20the\x20Service\x20and\x20hosts\x20third-party\x20sellers\x20as\x20Permission\x20entities;\x20individual\x20sellers\x20join\x20under\x20the\x20operator\x27s\x20permission\x20slots.','differences':['Scale-first\x20general\x20marketplace:\x20third-party\x20sellers\x20are\x20hosted\x20under\x20the\x20operator\x27s\x20Permission\x20entities,\x20unlike\x20the\x20vertical\x20variant\x20where\x20makers\x20self-fulfill\x20their\x20own\x20storefront\x20Services','Single-point\x20settlement\x20merges\x20reserve\x20+\x20settlement\x20cycle\x20+\x20return\x20window\x20into\x20ONE\x20settlement\x20time-lock\x20(14-day\x20cycle\x20vs\x20the\x20vertical\x20variant\x27s\x200-3\x20day\x20fast\x20settlement)','Post-settlement\x20claims\x20are\x20paid\x20from\x20a\x20compensation\x20fund\x20instead\x20of\x20per-order\x20holds'],'user_inputs':['commission_rate_bps\x20—\x20platform\x20commission\x20in\x20basis\x20points\x20(default\x201500)','settlement_days\x20/\x20reserve_days\x20/\x20return_window_days\x20—\x20the\x20three\x20windows\x20merged\x20into\x20the\x20settlement\x20time-lock','dispute_window_days\x20—\x20post-settlement\x20claim\x20window','Compensation\x20fund\x20size\x20(>=\x205x\x20the\x20claim\x20cap)']},{'id':'retail/vertical-handmade','industry':'retail','variant':'vertical-handmade','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'paid','role':'Entry:\x20order\x20created\x20and\x20fully\x20escrowed;\x20Machine\x20starts\x20here'},{'name':'confirmed','role':'Seller\x20accepts\x20the\x20handmade/custom\x20order\x20before\x20crafting'},{'name':'shipped','role':'Seller\x20ships\x20within\x20processing\x20time\x20with\x20tracking\x20evidence'},{'name':'delivered','role':'Carrier\x20or\x20buyer\x20confirms\x20delivery\x20—\x20buyer-first\x20confirmation'},{'name':'reviewed','role':'Buyer\x20reviews\x20within\x20the\x20case\x20window'},{'name':'completed','role':'Settlement:\x20no\x20open\x20cases\x20and\x20case\x20window\x20elapsed\x20—\x20settlement\x20Allocator\x20releases\x20funds'},{'name':'return_requested','role':'Return\x20request\x20within\x20the\x20seller\x27s\x20policy\x20window'},{'name':'returned','role':'Return\x20received\x20or\x20returnless\x20approval\x20—\x20triggers\x20refund\x20Allocator\x20to\x20buyer'},{'name':'cancelled','role':'Pre-ship\x20cancellation\x20—\x20triggers\x20refund\x20Allocator\x20to\x20buyer'}],'guards':[{'template_id':'buy_guard_passport','host':'service','purpose':'Product\x20policy\x20gate\x20(handmade/vintage/craft/digital\x20categories)\x20+\x20seller\x20verification\x20proof'},{'template_id':'ship_guard_timelock_wip','host':'machine','purpose':'Ship\x20within\x20processing\x20time\x20AND\x20tracking\x20hash\x20non-empty'},{'template_id':'delivery_confirm_guard_signer','host':'machine','purpose':'Delivery\x20confirmed\x20by\x20buyer-first;\x20seller/carrier\x20only\x20auxiliary\x20evidence'},{'template_id':'late_guard_timelock','host':'machine','purpose':'Late-delivery\x20determination\x20(7\x20days\x20past\x20expected\x20date)\x20for\x20on-time-rate\x20statistics'},{'template_id':'return_auth_guard_timelock','host':'machine','purpose':'Return\x20request\x20gated\x20by\x20the\x20seller\x27s\x20return\x20policy\x20window'},{'template_id':'refund_guard_permission','host':'machine','purpose':'Refund\x20execution\x20requires\x20the\x20refund-executor\x20permission\x20slot\x20(protection\x20program\x20executor)'},{'template_id':'settle_guard_timelock','host':'machine','purpose':'Fast\x20settlement\x200-3\x20days\x20after\x20delivery\x20confirmation\x20(challenger\x20lever\x20vs\x20the\x2014-day\x20scale-marketplace\x20cycle)'},{'template_id':'attribution_guard_evidence','host':'machine','purpose':'Off-site\x20attribution\x20channel\x20proof\x20—\x20attributed\x20orders\x20trigger\x20the\x20higher-rate\x20allocator'},{'template_id':'usage_guard_timelock','host':'arbitration','purpose':'Case\x20opening\x20gated:\x20within\x2030\x20days\x20of\x20expected\x20delivery\x20AND\x2048h\x20help\x20request\x20unresolved'}],'allocator':{'recipient':'entity','count':0x3,'mode':'rate','description':'Attribution-first\x20ordering:\x20attributed\x20orders\x20settle\x20at\x20platform\x20Rate\x203920\x20(24.2%\x20base\x20+\x2015%\x20off-site\x20ads),\x20normal\x20orders\x20at\x20Rate\x202420\x20(7580/2420\x20split),\x20seller\x20takes\x20Surplus;\x20full\x20refund\x20to\x20buyer\x20(Rate\x2010000)\x20on\x20returned/cancelled;\x20small\x20claims\x20(<=\x20$250)\x20absorbed\x20by\x20the\x20compensation\x20fund'},'key_risk':'Attribution\x20fee\x20ordering\x20—\x20first-match\x20allocator\x20semantics\x20require\x20the\x20attribution\x20allocator\x20registered\x20BEFORE\x20the\x20normal\x20one','build_notes':['Extra\x20\x27confirmed\x27\x20node\x20vs\x20the\x20scale-marketplace\x20template\x20—\x20handmade/custom\x20orders\x20need\x20seller\x20acceptance\x20before\x20crafting','No\x20independent\x20fulfiller\x20role\x20—\x20sellers\x20self-fulfill','Allocator\x20registration\x20order\x20is\x20critical:\x20first-match\x20semantics\x20mean\x20the\x20attribution\x20allocator\x20must\x20be\x20registered\x20first,\x20or\x20attributed\x20orders\x20hit\x20the\x20normal\x20rate','Fast\x20settlement\x20(0-3\x20days)\x20is\x20the\x20challenger\x20lever\x20against\x20the\x20scale\x20marketplace\x27s\x2014-day\x20cycle','Star-seller\x20tiering\x20goes\x20through\x20Passport,\x20not\x20the\x20Permission\x20entity\x20table\x20(entity\x20capacity\x20is\x20limited)','Disputes\x20go\x20to\x20an\x20independent\x20Arbitration\x20(case\x20mediators)\x20—\x20never\x20Machine\x20nodes\x20(R-M1-11)'],'fee_params':{'base_commission_rate_bps':0x974,'offsite_ads_rate_bps':0x5dc,'attributed_commission_rate_bps':0xf50,'settlement_delay_days':0x1,'protection_cap_usd':0xfa,'processing_time_days':0x3},'trust_mechanisms':['R1\x20refund\x20path:\x20refund\x20Guard\x20+\x20buyer\x20Rate\x2010000\x20Allocator\x20+\x20purchase-protection\x20payout\x20channel','R2\x20independent\x20Arbitration\x20Permission\x20(a\x20testnet\x20shared-Permission\x20lesson\x20hardened\x20into\x20a\x20contract\x20assertion)','R3\x20compensation\x20fund\x20>=\x205x\x20the\x20$250\x20protection\x20cap','R4\x20buyer-first\x20delivery\x20confirmation\x20—\x20self-sign/self-verify\x20forbidden','R5\x20escrow\x20payment\x20anchored\x20to\x20the\x20order\x20object','R6\x20settlement\x20allocators\x20carry\x20Surplus\x20so\x20Rates\x20<=\x2010000;\x20refund\x20Allocator\x20Rate\x20=\x2010000','R7\x20all\x20configuration\x20before\x20publish\x20(publish\x20freezes;\x20return\x20policy\x20cannot\x20vary\x20per\x20listing\x20after\x20publish)','R8\x20customer-service\x20Contact\x20bound\x20to\x20Service\x20and\x20Machine','R9\x20keeper\x20for\x2048h\x20help-request\x20escalation\x20and\x20settlement\x20trigger','R10\x20category\x20policy\x20embedded\x20in\x20the\x20buy\x20guard\x20as\x20immutable\x20parameters'],'keeper_dependencies':['48h\x20help\x20request\x20escalation','settlement\x20trigger\x20after\x20delivery\x20confirmation\x20(0-3\x20day\x20delay)','case\x20window\x20expiry'],'recommended_role':'merchant','role_rationale':'Artisans\x20and\x20vintage\x20sellers\x20run\x20their\x20own\x20storefront\x20Service\x20directly;\x20the\x20vertical-platform\x20variant\x20hosts\x20makers\x20under\x20Permission\x20entities.','differences':['Makers\x20self-fulfill\x20—\x20no\x20independent\x20fulfiller\x20role;\x20a\x20\x27confirmed\x27\x20node\x20lets\x20the\x20seller\x20accept\x20handmade/custom\x20orders\x20before\x20crafting','Fast\x20settlement\x20(0-3\x20days\x20after\x20delivery\x20confirmation)\x20is\x20the\x20challenger\x20lever\x20against\x20the\x20scale\x20marketplace\x27s\x2014-day\x20cycle','Attribution-first\x20allocator\x20ordering:\x20attributed\x20(off-site\x20channel)\x20orders\x20settle\x20at\x20a\x20higher\x20rate\x20—\x20allocator\x20registration\x20order\x20is\x20critical'],'user_inputs':['base_commission_rate_bps\x20/\x20offsite_ads_rate_bps\x20/\x20attributed_commission_rate_bps\x20—\x20the\x20two-tier\x20commission\x20structure','processing_time_days\x20—\x20the\x20ship-within\x20window','protection_cap_usd\x20—\x20purchase-protection\x20cap\x20absorbed\x20by\x20the\x20compensation\x20fund','Seller\x20return-policy\x20window\x20(return_auth_guard_timelock\x20parameter)']},{'id':'freelance/enterprise-talent-market','industry':'freelance','variant':'enterprise-talent-market','archetype':'leader','phase':0x1,'machine_shape':[{'name':'paid','role':'Entry:\x20fixed-price\x20contract\x20signed\x20and\x20fully\x20escrowed;\x20Machine\x20starts\x20here'},{'name':'in_progress','role':'Freelancer\x20accepts\x20(permission\x20slot)\x20and\x20works;\x20revision\x20loop\x20returns\x20here\x20(max\x202\x20rounds,\x20counted\x20off-chain)'},{'name':'delivered','role':'Deliverable\x20submitted\x20with\x20WIP\x20hash\x20evidence\x20(submit-work\x20semantics)'},{'name':'accepted','role':'Client\x20confirms\x20acceptance\x20—\x20manual\x20signature\x20OR\x2014-day\x20timeout\x20(dual-branch\x20guard)'},{'name':'completed','role':'Freelancer\x20withdraws\x20released\x20funds\x20(triple-check\x20withdraw\x20guard)'},{'name':'cancelled','role':'Pre-work\x20cancellation\x20—\x20triggers\x20full\x20refund\x20Allocator\x20to\x20client'}],'guards':[{'template_id':'buy_guard_identity','host':'service','purpose':'Prevent\x20freelancer\x20self-purchase\x20of\x20their\x20own\x20service\x20(Passport-gated\x20purchase\x20once\x20set)'},{'template_id':'deliver_guard_wip','host':'machine','purpose':'WIP\x20hash\x20required\x20on\x20every\x20submission\x20(submit-work\x20evidence)'},{'template_id':'accept_guard_dual','host':'machine','purpose':'Dual-branch\x20acceptance:\x20client\x20signature\x20OR\x2014-day\x20timeout\x20—\x20forward\x20operator\x20left\x20unbound\x20so\x20the\x20keeper\x20can\x20submit\x20the\x20timeout\x20path'},{'template_id':'withdraw_guard_progress','host':'machine','purpose':'Triple-check\x20withdrawal:\x20progress\x20at\x20completed\x20+\x20signer\x20is\x20freelancer\x20+\x20order\x20bound\x20to\x20this\x20service'},{'template_id':'refund_guard_signer','host':'machine','purpose':'Only\x20the\x20client\x20(order\x20owner)\x20can\x20trigger\x20the\x20pre-work\x20cancellation\x20refund'},{'template_id':'dispute_timeout_guard_timelock','host':'machine','purpose':'7-day\x20dispute\x20response\x20timeout\x20for\x20keeper-driven\x20escalation'}],'allocator':{'recipient':'entity','count':0x2,'mode':'rate','description':'Fixed-price\x20split\x20on\x20completed:\x20freelancer\x20Rate\x208460\x20+\x20platform\x20Rate\x201540\x20(parameterizable\x200-1540;\x20a\x200%\x20launch\x20offer\x20is\x20chain-verifiable);\x20full\x20refund\x20to\x20client\x20(Rate\x2010000\x20via\x20order-anchored\x20recipient)\x20on\x20cancelled;\x20multi-milestone\x20=\x20chained\x20Orders\x20each\x20with\x20its\x20own\x20Allocation'},'key_risk':'Client\x20never\x20accepts\x20delivery\x20—\x20the\x2014-day\x20timeout\x20keeper\x20auto-advances\x20acceptance\x20to\x20unblock\x20freelancer\x20payment','build_notes':['The\x20acceptance\x20forward\x20must\x20NOT\x20bind\x20the\x20client\x20as\x20operator\x20—\x20the\x20dual-branch\x20guard\x20carries\x20both\x20the\x20manual\x20(client\x20signature)\x20and\x20timeout\x20(keeper)\x20paths','Every\x20return\x20to\x20delivered\x20refreshes\x20the\x20progress\x20clock\x20—\x20the\x2014-day\x20window\x20resets\x20naturally\x20on\x20re-submission','Refund\x20recipient\x20is\x20the\x20order\x20object\x20(anchored)\x20—\x20the\x20client\x20then\x20claims\x20via\x20the\x20two-step\x20receive\x20flow','Milestones\x20=\x20multiple\x20chained\x20Orders,\x20each\x20with\x20an\x20independent\x20Allocation;\x20leftover\x20balance\x20can\x20be\x20recharged\x20into\x20the\x20next\x20Order\x20pool','Arbitration:\x20independent\x20Permission\x20(arbiter\x20slot),\x20voting\x20guard\x20mandatory\x20(empty\x20=\x20anyone\x20votes\x20with\x20weight\x201),\x20fee\x20near-zero\x20to\x20cover\x20the\x20small-dispute\x20tail\x20the\x20incumbent\x20abandoned','Disputes\x20flow\x20through\x20Arbitration\x20—\x20never\x20Machine\x20nodes\x20(R-M1-11)'],'fee_params':{'commission_rate_bps':0x604,'escrow_release_days':0xe,'dispute_timeout_days':0x7,'arbitration_fee_usd':337.5,'revision_rounds_max':0x2},'trust_mechanisms':['R1\x20dual-track\x20refund:\x20pre-work\x20cancellation\x20Allocator\x20+\x20arbitration-ruled\x20refund','R2\x20independent\x20arbitration\x20Permission\x20enforced\x20by\x20contract\x20assertion','R3\x20compensation\x20fund\x20required\x20before\x20publish\x20whenever\x20the\x20fund\x20is\x20non-zero','R4\x20acceptance\x20gate:\x20client\x20signature\x20or\x20timeout\x20—\x20freelancer\x20can\x20never\x20self-accept','R5\x20order-anchored\x20refund\x20recipient\x20(anti-hijack)','R6\x20Rate\x20sums\x20=\x2010000\x20on\x20every\x20allocator','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x2014-day\x20auto-accept\x20and\x207-day\x20dispute\x20timeout','R10\x20fee\x20parameters\x20expressed\x20as\x20on-chain\x20allocator\x20configuration'],'keeper_dependencies':['14-day\x20acceptance\x20timeout\x20auto-advance','7-day\x20dispute\x20response\x20timeout','arbitration\x20ruling\x20execution\x20(refund\x20path)'],'recommended_role':'supplier','role_rationale':'Freelancers\x20fulfill\x20client\x20demand\x20(demand/sub-order\x20takers\x20in\x20WoWok\x20terms);\x20the\x20marketplace-operator\x20variant\x20flips\x20the\x20role\x20to\x20merchant.','differences':['Commission-based\x20revenue\x20(floating\x20take,\x20capped\x20at\x201540\x20bps)\x20versus\x20the\x20zero-commission\x20variant\x27s\x20fixed\x20contract\x20fee','14-day\x20acceptance\x20timeout\x20keeper\x20unblocks\x20freelancer\x20payment\x20when\x20the\x20client\x20never\x20accepts','Milestones\x20=\x20chained\x20Orders\x20each\x20with\x20an\x20independent\x20Allocation;\x20leftover\x20balance\x20recharges\x20into\x20the\x20next\x20Order\x20pool'],'user_inputs':['commission_rate_bps\x20—\x20platform\x20take\x20(0-1540;\x20a\x200%\x20launch\x20offer\x20is\x20chain-verifiable)','escrow_release_days\x20—\x20the\x20acceptance\x20timeout\x20window','dispute_timeout_days\x20—\x20dispute\x20response\x20timeout','revision_rounds_max\x20—\x20revision\x20loop\x20cap\x20(counted\x20off-chain)','Arbitration\x20fee\x20(near-zero\x20to\x20cover\x20the\x20small-dispute\x20tail)']},{'id':'freelance/creator-zero-commission','industry':'freelance','variant':'creator-zero-commission','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'listed','role':'Entry:\x20service\x20listed\x20(portfolio\x20Repository\x20attached,\x20public\x20URLs\x20only)'},{'name':'contacted','role':'Client\x20initiates\x20contact\x20—\x20negotiation\x20happens\x20on-Machine'},{'name':'ordered','role':'Contract\x20signed\x20and\x20project\x20funds\x20escrowed'},{'name':'in_progress','role':'Freelancer\x20accepts\x20(permission\x20slot)\x20and\x20works'},{'name':'delivered','role':'Deliverable\x20submitted\x20with\x20WIP\x20hash\x20evidence\x20(recommended)'},{'name':'accepted','role':'Client\x20confirms\x20—\x20manual\x20signature\x20OR\x2048-72h\x20timeout\x20(dual-branch\x20guard)'},{'name':'completed','role':'Freelancer\x20withdraws\x20(triple-check\x20withdraw\x20guard)\x20—\x20fixed\x20fee\x20deducted,\x20remainder\x20to\x20freelancer'},{'name':'cancelled','role':'Pre-work\x20cancellation\x20or\x20post-delivery\x20dispute\x20refund\x20—\x20refund\x20Allocator\x20to\x20client'}],'guards':[{'template_id':'buy_guard_identity','host':'service','purpose':'Prevent\x20freelancer\x20self-purchase\x20(Passport-gated\x20purchase\x20once\x20set)'},{'template_id':'withdraw_guard_progress','host':'machine','purpose':'Triple-check\x20withdrawal:\x20progress\x20at\x20completed\x20+\x20signer\x20is\x20freelancer\x20+\x20order\x20bound\x20to\x20this\x20service'},{'template_id':'refund_guard_signer','host':'machine','purpose':'Only\x20the\x20client\x20(order\x20owner)\x20can\x20trigger\x20refunds\x20—\x20dynamic\x20per-order\x20owner\x20query'},{'template_id':'accept_guard_dual','host':'machine','purpose':'Dual-branch\x20acceptance:\x20client\x20signature\x20OR\x2048-72h\x20timeout\x20(value-add\x20over\x20the\x20testnet-validated\x20base\x20topology)'}],'allocator':{'recipient':'entity','count':0x2,'mode':'surplus','description':'0%\x20commission\x20+\x20fixed\x20contract\x20fee:\x20platform\x20Amount\x20(e.g.\x20$29\x20equivalent)\x20deducted\x20first,\x20freelancer\x20takes\x20Surplus\x20on\x20completed;\x20full\x20refund\x20to\x20client\x20(Rate\x2010000\x20via\x20order-anchored\x20recipient)\x20on\x20cancelled\x20—\x20platform-fee\x20refund\x20is\x20a\x20configurable\x20business\x20decision\x20(default:\x20fee\x20deducted\x20at\x20withdrawal,\x20fully\x20on-chain)'},'key_risk':'Platform\x20revenue\x20without\x20commission\x20—\x20the\x20fixed\x20contract\x20fee\x20must\x20be\x20expressed\x20as\x20an\x20Amount\x20allocator\x20entry,\x20never\x20collected\x20off-chain','build_notes':['Pre-payment\x20funnel\x20(listed\x20->\x20contacted\x20->\x20ordered)\x20is\x20the\x20challenger\x20differentiator\x20—\x20negotiation\x20happens\x20on-Machine\x20(testnet-validated\x20topology)','0%\x20commission\x20is\x20chain-verifiable\x20—\x20the\x20allocator\x20split\x20shows\x20the\x20platform\x20takes\x20only\x20the\x20fixed\x20Amount','Minimum\x20contract\x20size\x20guard:\x20order\x20amount\x20should\x20cover\x20the\x20fixed\x20fee\x20(recommended\x20>=\x202x\x20fee\x20so\x20freelancer\x20earnings\x20>=\x20platform\x20fee)','Arbitration\x20is\x20an\x20add-on\x20(native\x20to\x20WoWok)\x20—\x20independent\x20Permission,\x20near-zero\x20fee\x20for\x20the\x20low-ticket\x20dispute\x20range','Portfolio\x20Repository\x20must\x20use\x20public\x20URLs\x20(testnet\x20lesson:\x20never\x20local\x20addresses)','Disputes\x20route\x20to\x20Arbitration\x20—\x20never\x20Machine\x20nodes\x20(R-M1-11)'],'fee_params':{'commission_rate_bps':0x0,'contract_fee_usd':0x1d,'acceptance_timeout_hours':0x30,'min_contract_usd':0x3a},'trust_mechanisms':['R1\x20refund\x20guard\x20restricted\x20to\x20the\x20order\x20owner\x20(cancellation\x20+\x20post-delivery\x20dispute\x20refund)','R2\x20independent\x20arbitration\x20Permission\x20(a\x20testnet\x20shared-Permission\x20critical\x20lesson,\x20contract-enforced)','R3\x20compensation\x20fund\x20optional;\x20when\x20funded,\x20publish\x20requires\x20a\x20mounted\x20Arbitration','R4\x20acceptance\x20dual-branch:\x20client\x20signature\x20or\x20timeout\x20—\x20no\x20self-accept','R5\x20order-anchored\x20refund\x20recipient','R6\x20single\x20Surplus\x20entry\x20+\x20Amount\x20deducted\x20first\x20(fixed\x20fee\x20is\x20native,\x20no\x20off-chain\x20collection)','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keeper\x20for\x20the\x2048-72h\x20acceptance\x20timeout','R10\x20fixed\x20fee\x20expressed\x20on-chain\x20as\x20an\x20Amount\x20allocator\x20entry'],'keeper_dependencies':['48-72h\x20acceptance\x20timeout\x20auto-advance','arbitration\x20ruling\x20refund\x20execution'],'recommended_role':'supplier','role_rationale':'Independent\x20freelancers\x20own\x20their\x20funnel\x20and\x20keep\x20100%\x20of\x20project\x20funds;\x20the\x20fixed\x20fee\x20replaces\x20commission\x20—\x20supplier-first\x20economics.','differences':['0%\x20commission\x20+\x20fixed\x20contract\x20fee\x20as\x20an\x20Amount\x20allocator\x20entry\x20—\x20platform\x20revenue\x20decoupled\x20from\x20GMV','Pre-payment\x20funnel\x20(listed\x20->\x20contacted\x20->\x20ordered):\x20negotiation\x20happens\x20on-Machine\x20before\x20any\x20escrow','Arbitration\x20is\x20a\x20WoWok-native\x20add-on\x20rather\x20than\x20an\x20inherited\x20model\x20component'],'user_inputs':['contract_fee_usd\x20—\x20the\x20fixed\x20per-contract\x20platform\x20fee\x20(Amount\x20allocator\x20entry)','acceptance_timeout_hours\x20—\x20client\x20acceptance\x20window\x20before\x20the\x20keeper\x20advances','min_contract_usd\x20—\x20minimum\x20contract\x20size\x20(recommended\x20>=\x202x\x20the\x20fixed\x20fee)']},{'id':'rental/p2p-shortstay','industry':'rental','variant':'p2p-shortstay','archetype':'leader','phase':0x1,'machine_shape':[{'name':'reserved','role':'Entry:\x20booking\x20request\x20open\x20—\x20unpaid;\x20expires\x20via\x20time-lock\x20if\x20not\x20paid'},{'name':'paid','role':'Guest\x20pays\x20(rent\x20+\x20cleaning\x20+\x20service\x20fees\x20escrowed);\x20cancellation\x20tiers\x20active'},{'name':'checked_in','role':'Check-in\x20at\x20the\x20date-typed\x20time\x20gate\x20(host\x20or\x20keeper\x20advances)'},{'name':'checked_out','role':'Check-out\x20at\x20the\x20date-typed\x20time\x20gate;\x20payout\x20and\x20claim\x20windows\x20open'},{'name':'settled','role':'Payout\x20released\x20to\x20host\x20(checkout\x20+\x2024h)\x20—\x20claim\x20may\x20still\x20open'},{'name':'completed','role':'Review\x20window\x20elapsed\x20—\x20order\x20finalized'},{'name':'guest_cancelled','role':'Guest\x20cancels\x20under\x20one\x20of\x20six\x20policy\x20tiers\x20—\x20per-tier\x20refund\x20Allocator'},{'name':'host_cancelled','role':'Host\x20cancels\x20—\x20full\x20refund\x20Allocator\x20to\x20guest\x20+\x20off-chain\x20demotion'},{'name':'claim_open','role':'Host\x20files\x20a\x20damage\x20claim\x20within\x2014\x20days\x20of\x20checkout\x20(evidence\x20pre+post\x20required)'},{'name':'claim_denied','role':'Claim\x20denied\x20by\x20platform\x20review\x20—\x20guest\x20deposit\x20untouched'}],'guards':[{'template_id':'buy_guard_amount','host':'service','purpose':'Payment\x20amount\x20equals\x20the\x20sum\x20of\x20sale\x20items\x20(rent\x20+\x20cleaning\x20+\x20service\x20fee)'},{'template_id':'request_expire_guard_timelock','host':'machine','purpose':'Unpaid\x20reservation\x20expires\x20after\x2024h\x20(keeper\x20advances)'},{'template_id':'cancel_guard_tier_flexible','host':'machine','purpose':'Tier\x201:\x20full\x20refund\x20until\x2024h\x20before\x20check-in'},{'template_id':'cancel_guard_tier_moderate','host':'machine','purpose':'Tier\x202:\x20full\x20refund\x20until\x205\x20days\x20before\x20check-in'},{'template_id':'cancel_guard_tier_limited','host':'machine','purpose':'Tier\x203:\x20full\x20refund\x20until\x2014\x20days\x20before\x20check-in'},{'template_id':'cancel_guard_tier_firm','host':'machine','purpose':'Tier\x204:\x20full\x20refund\x20until\x2030\x20days\x20before\x20check-in'},{'template_id':'cancel_guard_tier_strict','host':'machine','purpose':'Tier\x205:\x2050%\x20refund\x20at\x207+\x20days\x20before\x20check-in'},{'template_id':'cancel_guard_tier_longstay','host':'machine','purpose':'Tier\x206:\x2028+\x20night\x20long\x20stays,\x2030-day\x20window'},{'template_id':'host_cancel_guard_timelock','host':'machine','purpose':'Host\x20cancellation\x20with\x20tiered\x20penalties\x20(48h/30d\x20boundaries)'},{'template_id':'checkin_guard_timelock','host':'machine','purpose':'Check-in\x20date-typed\x20time\x20gate\x20(e.g.\x2016:00\x20on\x20arrival\x20day)'},{'template_id':'checkout_guard_timelock','host':'machine','purpose':'Check-out\x20date-typed\x20time\x20gate\x20(e.g.\x2011:00\x20on\x20departure\x20day)'},{'template_id':'payout_guard_timelock','host':'machine','purpose':'Payout\x20release\x20at\x20checkout\x20+\x2024h'},{'template_id':'claim_window_guard_evidence','host':'machine','purpose':'Claim\x20opening\x20within\x2014\x20days\x20of\x20checkout,\x20relies\x20on\x20pre-check-in\x20and\x20post-check-out\x20evidence\x20writes'},{'template_id':'guest_response_guard_timelock','host':'machine','purpose':'Guest\x20response\x20window\x20(24h)\x20after\x20a\x20claim\x20is\x20filed'},{'template_id':'review_window_guard_timelock','host':'machine','purpose':'Review\x20window\x20/\x20order\x20finalization\x20at\x20checkout\x20+\x2014d'}],'allocator':{'recipient':'entity','count':0x6,'mode':'rate','description':'Rate-only\x20single\x20Allocation:\x20normal\x20payout\x20host\x20Rate\x208450\x20+\x20platform\x20Rate\x201550\x20at\x20checkout+24h;\x20per-tier\x20cancellation\x20refund\x20splits\x20(guest/host/platform\x20Rates\x20sum\x2010000);\x20host\x20cancellation\x20=\x20full\x20refund\x20to\x20guest\x20(Rate\x2010000);\x20damage\x20claims\x20=\x20fixed-tier\x20Amount\x20to\x20host\x20or\x20arbitration-ruled\x20Amount\x20(capped\x20at\x203x\x20order);\x20Surplus\x20deliberately\x20DISABLED\x20to\x20protect\x20the\x20claim-window\x20balance'},'key_risk':'Damage\x20claims\x20without\x20pre-check-in\x20evidence\x20—\x20host\x20claims\x20fail\x20without\x20the\x20pre+post\x20evidence\x20comparison\x20chain','build_notes':['Six\x20cancellation\x20tiers\x20=\x20six\x20time-lock\x20Guards\x20with\x20per-tier\x20refund\x20allocator\x20splits','Date-typed\x20time-lock\x20Guards\x20are\x20per-order\x20instances\x20(Guards\x20freeze\x20after\x20creation)\x20—\x20the\x20template\x20provides\x20a\x20generator,\x20not\x20shared\x20Guards','Surplus\x20mode\x20is\x20disabled\x20in\x20this\x20template\x20—\x20a\x20withdraw-all\x20entry\x20would\x20drain\x20the\x20claim-window\x20balance','Coverage-program\x20equivalent\x20=\x20compensation\x20fund:\x20publishing\x20with\x20a\x20funded\x20pool\x20requires\x20a\x20mounted\x20Arbitration','Arbitration\x20awards\x20are\x20capped\x20at\x203x\x20the\x20order\x20amount\x20—\x20excess\x20is\x20covered\x20by\x20the\x20compensation\x20fund\x20(recipient\x20hard-bound\x20to\x20the\x20order\x20owner)','Claim\x20escalation\x20goes\x20to\x20Arbitration\x20off-Machine\x20(R-M1-11)\x20—\x20claim_open/claim_denied\x20are\x20business\x20states,\x20not\x20dispute\x20terminals','Check-in/check-out/payout\x20auto-advance\x20needs\x20keepers\x20—\x20time-lock\x20Guards\x20only\x20ALLOW\x20transitions'],'fee_params':{'host_rate_bps':0x2102,'platform_rate_bps':0x60e,'payout_delay_hours':0x18,'claim_window_days':0xe,'review_window_days':0xe,'cancellation_tiers':0x6},'trust_mechanisms':['R1\x20per-tier\x20refund\x20allocators\x20+\x20host-cancel\x20full\x20refund','R2\x20independent\x20arbitration\x20Permission\x20(contract-enforced\x20separation)','R3\x20compensation\x20fund\x20(coverage\x20program)\x20covering\x20award\x20amounts\x20beyond\x20the\x203x\x20cap','R4\x20check-in/out\x20time\x20gates\x20+\x20claim\x20evidence\x20reliance\x20—\x20no\x20self-sign','R5\x20order-anchored\x20payments','R6\x20pure-Rate\x20allocators\x20sum\x2010000;\x20Surplus\x20disabled','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20request\x20expiry,\x20check-in/out,\x20payout,\x20and\x20review\x20windows','R10\x20cancellation\x20policy\x20parameters\x20embedded\x20as\x20immutable\x20Guard\x20tiers'],'keeper_dependencies':['request\x20expiry\x20(24h\x20unpaid)','check-in/check-out\x20time\x20gates','payout\x20release\x20(checkout\x20+\x2024h)','review\x20window\x20completion','claim\x20response\x20window\x20expiry'],'recommended_role':'merchant','role_rationale':'Hosts\x20and\x20property\x20operators\x20own\x20the\x20listing\x20Service;\x20the\x20platform\x20variant\x20hosts\x20many\x20hosts\x20under\x20Permission\x20entities\x20with\x20per-listing\x20Guard\x20instances.','differences':['Light\x20platform:\x20hosts\x20own\x20their\x20listing\x20Services;\x20date-typed\x20time-lock\x20Guards\x20are\x20per-order\x20instances\x20(a\x20generator,\x20not\x20shared\x20Guards)','Six\x20cancellation\x20policy\x20tiers\x20with\x20per-tier\x20refund\x20allocator\x20splits','Damage\x20claims\x20rely\x20on\x20the\x20pre+post\x20evidence\x20comparison\x20chain;\x20Surplus\x20is\x20deliberately\x20disabled\x20to\x20protect\x20the\x20claim-window\x20balance'],'user_inputs':['host_rate_bps\x20/\x20platform_rate_bps\x20—\x20the\x20payout\x20split','payout_delay_hours\x20—\x20payout\x20release\x20delay\x20after\x20checkout','claim_window_days\x20/\x20review_window_days\x20—\x20post-checkout\x20windows','Cancellation\x20tier\x20selection\x20(which\x20of\x20the\x20six\x20tier\x20Guards\x20to\x20mount\x20per\x20listing)']},{'id':'rental/institutional-longstay','industry':'rental','variant':'institutional-longstay','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'deposit_paid','role':'Entry:\x20deposit\x20+\x20first\x20rent\x20+\x20service\x20fee\x20escrowed\x20in\x20a\x20single\x20Allocation\x20(12-month\x20pre-funded\x20pool)'},{'name':'in_use','role':'Handover\x20done\x20(checklist\x20hash\x20written\x20to\x20Repository);\x20tenancy\x20active,\x20monthly\x20releases\x20run'},{'name':'returned','role':'Tenant\x20returns\x20keys\x20(>=\x2015\x20days\x20notice\x20or\x20lease\x20end)'},{'name':'inspected','role':'Verifier\x20inspects\x20within\x2024h\x20(pre+post\x20evidence\x20comparison\x20against\x20the\x20natural-wear\x20table)'},{'name':'completed','role':'Lease\x20finalized\x20—\x20deposit\x20refund\x20Allocator\x20to\x20tenant\x20(3-business-day\x20deadline)'},{'name':'damage_confirmed','role':'Damage\x20confirmed\x20via\x20evidence\x20diff\x20—\x20deposit\x20deduction\x20Allocator\x20(repair\x20cost\x20per\x20public\x20price\x20table)'},{'name':'cancelled','role':'No-fault\x20exit\x20within\x203\x20days\x20of\x20signing\x20—\x20full\x20refund\x20Allocator'},{'name':'early_terminated','role':'Early\x20exit\x20—\x20penalty\x20Allocator\x20(1\x20month\x20rent;\x20halved\x20when\x20re-let)'}],'guards':[{'template_id':'buy_guard_amount','host':'service','purpose':'Deposit\x20+\x20first\x20rent\x20+\x20service\x20fee\x20escrowed\x20on\x20purchase'},{'template_id':'first_pay_deadline_guard_timelock','host':'machine','purpose':'First-payment\x20deadline\x20(20\x20min\x20/\x2048h\x20variants)'},{'template_id':'handover_guard_wip','host':'machine','purpose':'Handover\x20checklist\x20hash\x20written\x20to\x20Repository\x20at\x20move-in'},{'template_id':'return_window_guard_timelock','host':'machine','purpose':'Return\x20request\x20>=\x2015\x20days\x20ahead\x20(or\x20lease\x20end)'},{'template_id':'no_fault_exit_guard_timelock','host':'machine','purpose':'No-fault\x20exit\x20within\x203\x20days\x20of\x20signing\x20—\x20full\x20refund'},{'template_id':'inspect_deadline_guard_timelock','host':'machine','purpose':'Inspection\x20within\x2024h\x20of\x20key\x20return'},{'template_id':'objection_window_guard_timelock','host':'machine','purpose':'Tenant\x20objection\x20window\x2024h\x20after\x20inspection\x20(escalation\x20to\x20Arbitration)'},{'template_id':'refund_deadline_guard_timelock','host':'machine','purpose':'Deposit\x20refund\x20within\x203\x20business\x20days\x20of\x20passing\x20inspection;\x20tenant\x20may\x20self-trigger\x20after\x20expiry'},{'template_id':'monthly_release_guard_timelock','host':'machine','purpose':'TWELVE\x20per-month\x20time-lock\x20Guards\x20(one\x20per\x20rent\x20period)\x20—\x20a\x20single\x20shared\x20Guard\x20would\x20allow\x20same-day\x20double\x20releases'},{'template_id':'damage_guard_wip','host':'machine','purpose':'Damage\x20deduction\x20relies\x20on\x20pre+post\x20evidence\x20comparison;\x20natural-wear\x20table\x20excludes\x20normal\x20aging'},{'template_id':'early_exit_guard_amount','host':'machine','purpose':'Early-exit\x20penalty\x20=\x20100%\x20of\x20one\x20month\x20rent\x20(halved\x20when\x20re-let)'},{'template_id':'lease_end_guard_timelock','host':'machine','purpose':'Lease\x20expiry\x20—\x20triggers\x20the\x20deposit\x20refund\x20path'}],'allocator':{'recipient':'entity','count':0xd,'mode':'amount','description':'Long-term\x20monthly\x20core\x20(single\x20Order\x20+\x20single\x20Allocation\x20pre-funded\x20with\x20deposit\x20+\x2012\x20months\x20rent\x20+\x20fee):\x2012\x20monthly\x20Amount\x20releases\x20(platform\x20fee\x2010%\x20+\x20landlord\x20net)\x20each\x20gated\x20by\x20its\x20own\x20month\x20Guard;\x20deposit\x20refund\x20to\x20tenant\x20at\x20lease\x20end;\x20damage\x20deduction\x20(repair\x20cost\x20to\x20platform\x20+\x20remainder\x20to\x20tenant);\x20early-exit\x20settlement\x20(penalty\x20to\x20platform/landlord\x20+\x20deposit\x20remainder\x20to\x20tenant).\x20Amount\x20mode\x20ONLY\x20—\x20Surplus\x20disabled\x20(would\x20drain\x20future\x20months)'},'key_risk':'Monthly\x20release\x20cadence\x20—\x20a\x20single\x20shared\x20release\x20Guard\x20allows\x20same-day\x20repeated\x20releases;\x20per-month\x20Guards\x20provide\x20the\x20weak\x20cadence\x20gate','build_notes':['threshold\x20=\x20ONE\x20month\x27s\x20rent\x20(not\x20the\x20total)\x20—\x20after\x20the\x2012th\x20release\x20the\x20balance\x20equals\x20exactly\x20one\x20month\x20=\x20threshold,\x20so\x20the\x20final\x20call\x20still\x20passes','All\x20monthly\x20allocators\x20use\x20Amount\x20mode;\x20Surplus\x20is\x20forbidden\x20(a\x20withdraw-all\x20entry\x20would\x20drain\x20future\x20months)','Deposit\x20and\x20rent\x20share\x20one\x20pool\x20but\x20are\x20path-isolated:\x20the\x20deposit\x20appears\x20only\x20in\x20the\x20refund/deduction/early-exit\x20allocators','No-fault\x20exit\x20(<=\x203\x20days)\x20=\x20full\x20refund;\x20the\x20deposit\x20refund\x20deadline\x20(3\x20business\x20days)\x20has\x20a\x20tenant\x20self-trigger\x20fallback\x20after\x20expiry','Deduction\x20pricing\x20must\x20reference\x20the\x20public\x20repair\x20price\x20table\x20(Repository)\x20—\x20eliminates\x20unilateral\x20pricing\x20disputes\x20in\x20arbitration','Deposit-free\x20variant:\x20Passport\x20credit\x20credentials\x20replace\x20the\x20deposit\x20(reputation\x20collateral);\x20the\x20credit\x20line\x20itself\x20stays\x20off-chain','Objections\x20escalate\x20to\x20Arbitration\x20within\x20the\x2024h\x20window\x20(R-M1-11:\x20no\x20dispute\x20nodes)'],'fee_params':{'service_fee_rate_bps':0x3e8,'monthly_allocators':0xc,'deposit_refund_days':0x3,'inspection_deadline_hours':0x18,'objection_window_hours':0x18,'no_fault_exit_days':0x3,'early_exit_penalty_months':0x1},'trust_mechanisms':['R1\x20deposit\x20refund\x20path\x20with\x20deadline\x20+\x20tenant\x20self-trigger\x20fallback;\x20no-fault\x203-day\x20full\x20refund','R2\x20independent\x20arbitration\x20Permission\x20(admin\x20=\x20arbitration\x20party)','R3\x20compensation\x20fund\x20front-pays\x20deposit\x20disputes\x20(award\x20cap\x203x\x20order)','R4\x20inspection\x20by\x20a\x20dedicated\x20verifier\x20role\x20—\x20not\x20the\x20landlord\x20alone','R5\x20order-anchored\x20escrow','R6\x20Amount\x20totals\x20>=\x20threshold;\x20no\x20Surplus\x20anywhere','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20monthly\x20release\x20triggers\x20and\x20refund\x20deadline','R10\x20rent\x20business\x20parameters\x20embedded\x20as\x20Guard\x20constants\x20—\x20industry-recommended\x20defaults,\x20merchant-configurable'],'keeper_dependencies':['monthly\x20rent\x20release\x20trigger\x20(per-month\x20Guard)','inspection\x20deadline\x20expiry','deposit\x20refund\x20deadline\x20(tenant\x20self-trigger\x20fallback)','lease\x20end\x20settlement'],'recommended_role':'merchant','role_rationale':'Centralized\x20long-term\x20rental\x20operators\x20own\x20the\x20lease\x20Service\x20with\x20dedicated\x20staff\x20roles\x20(handover/inspection/finance\x20Permission\x20entities).','differences':['Heavy\x20operations:\x20dedicated\x20staff\x20roles\x20(handover/inspection/finance)\x20as\x20Permission\x20entities\x20under\x20one\x20operator-owned\x20lease\x20Service','12\x20monthly\x20Amount\x20releases\x20each\x20gated\x20by\x20its\x20OWN\x20month\x20Guard\x20—\x20a\x20single\x20shared\x20Guard\x20would\x20allow\x20same-day\x20double\x20releases','Deposit\x20variants:\x20cash\x20deposit\x20or\x20Passport\x20credit\x20credentials\x20(deposit-free;\x20the\x20credit\x20line\x20stays\x20off-chain)'],'user_inputs':['service_fee_rate_bps\x20—\x20platform\x20service\x20fee\x20on\x20each\x20monthly\x20release','monthly_allocators\x20—\x20lease\x20length\x20in\x20months\x20(one\x20release\x20Guard\x20per\x20month)','deposit_refund_days\x20/\x20inspection_deadline_hours\x20/\x20objection_window_hours\x20—\x20the\x20exit-flow\x20windows','no_fault_exit_days\x20/\x20early_exit_penalty_months\x20—\x20exit\x20policy\x20parameters']},{'id':'education/mooc-degree','industry':'education','variant':'mooc-degree','archetype':'leader','phase':0x1,'machine_shape':[{'name':'admitted','role':'Entry:\x20enrollment\x20confirmed\x20and\x20tuition\x20escrowed;\x20Machine\x20starts\x20here'},{'name':'semester_1','role':'Semester\x201\x20—\x20dual-sign\x20completion\x20(institution\x20certifies\x20+\x20student\x20confirms,\x20threshold=2)'},{'name':'semester_2','role':'Semester\x202\x20—\x20dual-sign\x20completion'},{'name':'semester_3','role':'Representative;\x20expand\x20to\x20the\x20real\x20term\x20count\x20(e.g.\x208\x20semesters)\x20at\x20build\x20time'},{'name':'graduation_ready','role':'All\x20terms\x20completed\x20—\x20awaiting\x20degree\x20conferral'},{'name':'graduated','role':'Degree\x20conferred\x20(terminal)\x20—\x20accumulated\x20remainder\x20released\x20via\x20the\x20single\x20Surplus\x20settlement'},{'name':'withdrawn','role':'Student\x20withdraws\x20—\x20per-term\x20pro-rata\x20refund\x20Allocator\x20(R-M1-11\x20compliant)'}],'guards':[{'template_id':'term_complete_guard_dualsign','host':'machine','purpose':'Per-term\x20release:\x20institution\x20advances\x20(permission\x20slot)\x20+\x20student\x20triggers\x20via\x20Passport\x20—\x20dual-sign\x20prevents\x20self-sign\x20(R4)'},{'template_id':'refund_before_guard_progress','host':'machine','purpose':'Pre-start\x20full\x20refund\x20(progress\x20still\x20at\x20admitted)'},{'template_id':'refund_after_guard_segment','host':'machine','purpose':'Post-start\x20pro-rata\x20refund\x20per\x20completed\x20term\x20(enumerated\x20segments,\x20e.g.\x206-8)'},{'template_id':'cert_guard_platform','host':'machine','purpose':'Certificate\x20claim:\x20assessment\x20passed\x20+\x20identity\x20verified\x20+\x20honor\x20code\x20clean\x20(platform-signed)'},{'template_id':'trial_guard_timelock','host':'machine','purpose':'7-day\x20trial\x20window\x20(subscription\x20side-template)'},{'template_id':'refund_window_guard_timelock','host':'machine','purpose':'14-day\x20refund\x20window\x20for\x20single-course\x20/\x20annual\x20plans'},{'template_id':'time_release_guard_timelock','host':'machine','purpose':'Subscription\x20revenue\x20released\x20at\x20month\x20end\x20(side-template)'}],'allocator':{'recipient':'entity','count':0xa,'mode':'amount','description':'Degree\x20tuition\x20split\x20per\x20term:\x20institution\x20Amount\x2060%\x20+\x20platform\x20Amount\x2030%\x20per\x20term\x20(per-term\x20max\x20cap\x20prevents\x20over-release;\x2010%\x20retained);\x20graduation\x20settlement\x20releases\x20the\x20accumulated\x20remainder\x20to\x20the\x20institution\x20via\x20a\x20single\x20Surplus\x20entry;\x20pre-start\x20refund\x20=\x20full\x20Rate\x2010000\x20to\x20student;\x20post-start\x20pro-rata\x20split\x20(institution\x20k/8,\x20student\x20(8-k)/8,\x20Rate\x20sums\x2010000)'},'key_risk':'Institution\x20self-sign\x20on\x20academic\x20completion\x20—\x20dual-sign\x20threshold=2\x20ensures\x20neither\x20institution\x20nor\x20student\x20can\x20unilaterally\x20release\x20term\x20funds','build_notes':['threshold=2\x20dual-sign\x20is\x20the\x20R4\x20adaptation:\x20the\x20institution\x20certifies\x20academics,\x20the\x20student\x20confirms\x20funds\x20—\x20neither\x20side\x20can\x20unilaterally\x20withdraw\x20term\x20payments','Per-term\x20allocators\x20carry\x20a\x20max\x20cap\x20—\x20prevents\x20over-release;\x20the\x20per-term\x20remainder\x20accumulates\x20until\x20the\x20graduation\x20Surplus\x20settlement','Setting\x20lock\x20extended\x20to\x20cover\x20a\x20full\x20term\x20(~120\x20days,\x20add-only)\x20—\x20hedges\x20against\x20unilateral\x20fee-rule\x20changes','Certificate/degree\x20Repository\x20policies\x20freeze\x20on\x20write;\x20refund\x20orchestration\x20must\x20void\x20the\x20certificate\x20BEFORE\x20the\x20refund','Financial\x20aid\x20(scholarships\x20/\x20need-based\x20waivers)\x20=\x20OFF-chain\x20channel:\x20eligibility\x20review\x20and\x20waiver\x20approval\x20stay\x20off-chain;\x20the\x20on-chain\x20Order\x20records\x20only\x20the\x20actually-charged\x20amount\x20—\x20aid\x20never\x20creates\x20zero-amount\x20Orders\x20and\x20does\x20not\x20occupy\x20on-chain\x20objects','Withdrawal\x20refunds\x20route\x20via\x20Allocators\x20(R-M1-11);\x20disputes\x20(refund\x20ratio,\x20grades,\x20certificate\x20revocation)\x20go\x20to\x20Arbitration'],'fee_params':{'platform_fee_rate_bps':0x5dc,'term_count':0x8,'tuition_usd':0x6a98,'term_price_usd':0xd53,'institution_share_bps':0x1770,'platform_share_bps':0xbb8,'setting_lock_days':0x78,'refund_window_days':0xe},'trust_mechanisms':['R1\x20pre-start\x20full\x20refund\x20+\x20post-start\x20pro-rata\x20refund\x20allocators','R2\x20independent\x20arbitration\x20Permission\x20(contract\x20assertion)','R3\x20compensation\x20fund\x20~1%\x20of\x20tuition\x20scale\x20(high\x20ticket)','R4\x20dual-sign\x20term\x20completion\x20(threshold=2)\x20—\x20no\x20self-sign','R5\x20order-anchored\x20refund\x20recipient','R6\x20Amount\x20max\x20caps\x20+\x20Rate\x20sums\x2010000;\x20single\x20Surplus\x20at\x20graduation','R7\x20publish\x20freeze\x20(course\x20revisions\x20=\x20new\x20WIP\x20versions,\x20not\x20Machine\x20edits)','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20subscription\x20expiry\x20and\x20renewal\x20reminders','R10\x20setting\x20lock\x20>=\x20term\x20duration\x20(recommended:\x20covers\x20a\x20full\x20term\x20so\x20mid-term\x20changes\x20need\x20a\x20new\x20WIP\x20version)'],'keeper_dependencies':['subscription\x20expiry\x20(trial/period\x20end)','monthly\x20subscription\x20release','renewal\x20reminder\x20before\x20period\x20end'],'recommended_role':'merchant','role_rationale':'Partner\x20universities/institutions\x20own\x20the\x20degree\x20Service;\x20platform\x20operations\x20and\x20certificate\x20issuance\x20run\x20under\x20dedicated\x20Permission\x20entities.','differences':['Large-ticket\x20tuition\x20escrowed\x20up\x20front\x20and\x20released\x20PER\x20TERM\x20with\x20dual-sign\x20completion\x20(institution\x20certifies\x20+\x20student\x20confirms,\x20threshold=2)','Per-term\x20allocators\x20carry\x20max\x20caps;\x20the\x20accumulated\x20remainder\x20releases\x20at\x20graduation\x20via\x20a\x20single\x20Surplus\x20settlement','Certificate/degree\x20Repository\x20freezes\x20on\x20write\x20—\x20refund\x20orchestration\x20must\x20void\x20the\x20certificate\x20BEFORE\x20the\x20refund'],'user_inputs':['term_count\x20—\x20real\x20number\x20of\x20terms\x20(semester_*\x20nodes\x20expand\x20to\x20match)','tuition_usd\x20/\x20term_price_usd\x20—\x20the\x20tuition\x20structure','institution_share_bps\x20/\x20platform_share_bps\x20—\x20per-term\x20split\x20(remainder\x20retained\x20until\x20graduation)','setting_lock_days\x20—\x20recommended:\x20cover\x20a\x20full\x20term\x20(merchant-configurable)','refund_window_days\x20—\x20single-course\x20/\x20annual\x20plan\x20window']},{'id':'education/live-class-cohort','industry':'education','variant':'live-class-cohort','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'enrolled','role':'Entry:\x20term\x20paid\x20and\x20escrowed\x20(regular-course\x20Service;\x20the\x20trial\x20funnel\x20is\x20a\x20separate\x20Service)'},{'name':'session_1','role':'Session\x201\x20—\x20dual-sign\x20attendance\x20(institution\x20advances\x20+\x20parent\x20signs,\x20threshold=2)'},{'name':'session_2','role':'Session\x202\x20—\x20dual-sign\x20attendance'},{'name':'session_3','role':'Representative;\x20expand\x20to\x20N\x20sessions\x20at\x20build\x20time\x20(merchant\x20sets\x20the\x20real\x20count)'},{'name':'completed_ready','role':'All\x20sessions\x20attended\x20—\x20awaiting\x20finalization'},{'name':'completed','role':'Course\x20finalized\x20(terminal)'},{'name':'withdrawn','role':'Refund\x20requested\x20—\x20pre-start\x20full\x20refund\x20or\x20post-start\x20pro-rata\x20Allocator\x20(R-M1-11\x20compliant)'},{'name':'renewal_window','role':'Renewal\x20window\x20open\x20—\x20next\x20term\x20via\x20a\x20new\x20Order\x20(REUSE\x20pattern,\x20Machine\x20stays\x20a\x20DAG)'}],'guards':[{'template_id':'prepay_cap_guard','host':'service','purpose':'Buy\x20gate\x20(R10,\x20industry-recommended\x20defaults\x20—\x20merchant-configurable):\x20max\x20prepay\x20amount\x205000\x20/\x20max\x2060\x20sessions\x20/\x20max\x203\x20months\x20—\x20on-chain\x20checks\x20Passport-submitted\x20values'},{'template_id':'attendance_guard_dualsign','host':'machine','purpose':'Session\x20release\x20requires\x20the\x20parent\x27s\x20(order\x20owner\x27s)\x20signature\x20—\x20the\x20institution\x20can\x20NOT\x20self-claim;\x20release-sequence\x20lock\x20prevents\x20over-release'},{'template_id':'refund_before_guard_progress','host':'machine','purpose':'Pre-start\x20full\x20refund\x20(progress\x20still\x20at\x20enrolled)'},{'template_id':'refund_after_guard_segment','host':'machine','purpose':'Post-start\x20pro-rata\x20refund:\x20(N-k)/N\x20converted\x20to\x20static\x20Rate\x20segments'},{'template_id':'content_wip_guard','host':'repository','purpose':'Syllabus\x20+\x20material\x20hash\x20commitment\x20written\x20BEFORE\x20course\x20start\x20(anti\x20empty-broadcast\x20/\x20silent\x20substitution)'}],'allocator':{'recipient':'entity','count':0x15,'mode':'amount','description':'Per-session\x20release:\x20institution\x20Amount\x20=\x20term_price\x20/\x20N\x20(e.g.\x205000/20\x20=\x20250)\x20gated\x20by\x20the\x20dual-sign\x20attendance\x20guard\x20with\x20a\x20release-sequence\x20lock;\x20optional\x20platform\x20commission\x20entry;\x20pre-start\x20refund\x20=\x20Rate\x2010000\x20to\x20the\x20order-anchored\x20recipient;\x20post-start\x20pro-rata\x20Rate\x20splits\x20((N-k)*500\x20to\x20parent,\x20k*500\x20to\x20institution,\x20sums\x2010000).\x20No\x20Surplus\x20—\x20integer-division\x20remainder\x20stays\x20in\x20the\x20pool\x20by\x20design'},'key_risk':'Institution\x20self-claiming\x20attendance\x20—\x20release\x20requires\x20the\x20parent\x27s\x20(order\x20owner\x27s)\x20signature;\x20the\x20institution\x20only\x20advances\x20the\x20workflow','build_notes':['Dual-sign\x20attendance:\x20the\x20institution\x20advances\x20the\x20workflow\x20(permission\x20slot)\x20but\x20fund\x20release\x20requires\x20the\x20parent\x27s\x20signature\x20—\x20fixes\x20the\x20classic\x20self-sign\x20bug','Over-release\x20defense:\x20the\x20attendance\x20Guard\x20family\x20adds\x20a\x20release-sequence\x20lock\x20(payment\x20vector\x20length\x20check)\x20—\x20exactly\x20one\x20trigger\x20per\x20session','Business\x20caps\x20(R10,\x20industry-recommended\x20defaults\x20—\x20merchant-configurable):\x20max\x20prepay\x205000\x20/\x2060\x20sessions\x20/\x203\x20months\x20—\x20the\x20on-chain\x20guard\x20checks\x20Passport-submitted\x20values;\x20Sale\x20structure\x20+\x20quote\x20validation\x20enforce\x20the\x20real\x20bounds','Setting\x20lock\x20extended\x20to\x2090\x20days\x20(add-only\x20function;\x20set\x20once)','Session\x20nodes\x20are\x20representative\x20—\x20expand\x20to\x20N\x20at\x20build\x20time;\x2060\x20sessions\x20is\x20about\x2067\x20nodes\x20(two-thirds\x20of\x20the\x20node\x20cap)','Refund\x20segments\x20are\x20static\x20Rate\x20conversions\x20of\x20(N-k)/N;\x20no\x20Surplus\x20(avoids\x20fractional\x20remainder\x20disputes)','Trial\x20funnel\x20is\x20a\x20SEPARATE\x20Service\x20(lead\x20product);\x20coupon\x20handoff\x20via\x20a\x20Discount\x20pointing\x20at\x20the\x20main-course\x20Service'],'fee_params':{'prepay_cap':0x1388,'max_sessions':0x3c,'max_months':0x3,'term_price':0x1388,'session_count':0x14,'per_session_release':0xfa,'setting_lock_days':0x5a,'platform_commission_rate_bps':0x3e8},'trust_mechanisms':['R1\x20pre-start\x20full\x20refund\x20+\x20post-start\x20pro-rata\x20segment\x20refunds','R2\x20independent\x20arbitration\x20Permission\x20(fee\x20<=\x202%\x20of\x20tuition)','R3\x20compensation\x20fund\x20(10x\x20single\x20order)\x20with\x20a\x2090-day\x20locked\x20withdrawal\x20wait','R4\x20parent-signature\x20attendance\x20release\x20—\x20institution\x20self-sign\x20forbidden','R5\x20order-anchored\x20refund\x20recipient\x20(two-step\x20claim)','R6\x20per-session\x20Amount\x20>=\x20threshold\x200;\x20refund\x20Rate\x20sums\x2010000','R7\x20publish\x20freeze\x20(schedule\x20changes\x20=\x20Repository\x20version\x20evidence,\x20not\x20Machine\x20edits)','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20trial\x20expiry\x20and\x20renewal\x20window','R10\x20business\x20prepay\x20caps\x20embedded\x20as\x20buy-guard\x20constants\x20(industry-recommended\x20defaults,\x20merchant-configurable)'],'keeper_dependencies':['trial\x20lesson\x20expiry','renewal\x20window\x20trigger','arbitration\x20ruling\x20refund\x20execution'],'recommended_role':'merchant','role_rationale':'Tutoring\x20institutions\x20own\x20the\x20course\x20Service;\x20the\x20parent\x20is\x20the\x20order\x20owner\x20whose\x20signature\x20gates\x20every\x20session\x20release.','differences':['Per-session\x201/N\x20progressive\x20release\x20—\x20funds\x20unlock\x20only\x20as\x20sessions\x20are\x20attended\x20(anti-runaway\x20protection)','Parent\x20(order\x20owner)\x20signature\x20gates\x20every\x20session\x20release;\x20the\x20institution\x20only\x20advances\x20the\x20workflow','Prepay\x20caps\x20(max\x20amount\x20/\x20sessions\x20/\x20months\x20—\x20industry-recommended\x20defaults,\x20merchant-configurable)\x20embedded\x20in\x20the\x20buy\x20guard;\x20the\x20trial\x20funnel\x20is\x20a\x20separate\x20lead\x20Service'],'user_inputs':['session_count\x20—\x20real\x20session\x20count\x20(session_*\x20nodes\x20expand\x20to\x20N;\x20merchant\x20sets\x20the\x20count)','term_price\x20/\x20per_session_release\x20—\x20the\x20term\x20price\x20and\x20its\x201/N\x20release\x20unit','prepay_cap\x20/\x20max_sessions\x20/\x20max_months\x20—\x20buy-gate\x20constants\x20(industry-recommended\x20defaults,\x20merchant-configurable)','platform_commission_rate_bps\x20—\x20optional\x20platform\x20commission\x20entry']},{'id':'travel/global-ota','industry':'travel','variant':'global-ota','archetype':'leader','phase':0x1,'machine_shape':[{'name':'paid','role':'Entry:\x20booking\x20paid\x20and\x20escrowed;\x20Machine\x20starts\x20here'},{'name':'confirmed','role':'Property/supplier\x20confirms\x20(permission\x20slot);\x2048h\x20confirm\x20timeout\x20releases\x20via\x20keeper'},{'name':'in_stay','role':'Check-in:\x20property\x20submits\x20redemption\x20WIP\x20+\x20buyer\x20confirms\x20(dual\x20confirmation)'},{'name':'completed','role':'Check-out\x20(date\x20gate\x20or\x20buyer\x20confirmation);\x20no-show\x20branch\x20lands\x20here\x20with\x20the\x20charge\x20allocator'},{'name':'reviewed','role':'Buyer\x20submits\x20review\x20—\x20Reward\x20window\x2090\x20days'},{'name':'settled','role':'Settlement\x20Allocator\x20fires\x20(terminal):\x20property\x20net\x20+\x20commission\x20+\x20payment\x20fee'},{'name':'cancelled','role':'Free\x20cancellation\x20(72h\x20pre-check-in)\x20or\x20confirm\x20timeout\x20—\x20refund\x20Allocator\x20to\x20buyer'},{'name':'claim_open','role':'Oversell/walk\x20claim\x20—\x20buyer\x20or\x20support\x20reports;\x20arbitration\x20decides\x20off-Machine'}],'guards':[{'template_id':'free_cancel_guard_timelock','host':'machine','purpose':'Free\x20cancellation\x20before\x20check-in\x20minus\x2072h\x20(0-168h\x20adjustable)\x20—\x20buyer-triggered'},{'template_id':'confirm_timeout_guard_timelock','host':'machine','purpose':'Supplier\x20confirm\x20timeout\x2048h\x20—\x20keeper\x20releases\x20the\x20order'},{'template_id':'check_in_guard_wip','host':'machine','purpose':'Redemption\x20evidence\x20hash\x20compared\x20against\x20the\x20listing\x20commitment;\x20dual\x20confirmation\x20(R4)'},{'template_id':'check_out_guard_timelock','host':'machine','purpose':'Check-out\x20at\x20the\x20departure\x20date\x20gate\x20or\x20buyer\x20confirmation'},{'template_id':'noshow_guard_evidence','host':'machine','purpose':'Property\x20evidences\x20no-show\x20+\x20time\x20gate\x20—\x20triggers\x20the\x20charge\x20allocator'},{'template_id':'settle_guard_timelock','host':'machine','purpose':'Settlement\x20at\x20max(cancel\x20deadline,\x20check-in\x20date)\x20+\x20payout\x20delay'},{'template_id':'ruling_refund_guard_evidence','host':'machine','purpose':'Arbitration\x20ruling\x20evidence\x20triggers\x20the\x20refund\x20allocator'},{'template_id':'review_guard_evidence','host':'reward','purpose':'Review\x20claim\x20condition:\x20progress\x20at\x20completed\x20+\x20review\x20content\x20hash'}],'allocator':{'recipient':'entity','count':0x5,'mode':'rate','description':'Merchant-mode\x20settlement:\x20property\x20Rate\x208400\x20+\x20platform\x20commission\x20Rate\x201500\x20+\x20payment\x20fee\x20Rate\x20100\x20(sum\x2010000)\x20at\x20the\x20settlement\x20point;\x20free\x20cancellation\x20=\x20full\x20refund\x20to\x20the\x20order-anchored\x20recipient;\x20percentage\x20cancellation\x20policies\x20=\x20platform\x20X\x20/\x20buyer\x20(10000-X)\x20splits;\x20no-show\x20approximates\x20a\x20first-night\x20charge\x20by\x20Rate;\x20arbitration-ruled\x20refunds\x20full\x20or\x20partial'},'key_risk':'Oversell\x20walk\x20—\x20buyer-first\x20claim\x20evidence\x20+\x20arbitration\x20ruling\x20refund\x20with\x20compensation-fund\x20front-pay','build_notes':['Merchant\x20mode\x20=\x20funds\x20flow\x20buyer\x20->\x20escrow\x20->\x20property/platform;\x20agent\x20mode\x20(reverse\x20commission)\x20=\x20the\x20commission-DEPOSIT\x20variant:\x20the\x20supplier\x20posts\x20a\x20refundable\x20commission\x20deposit\x20(a\x20separate\x20prepaid\x20Allocation)\x20at\x20onboarding,\x20each\x20order\x20still\x20settles\x20buyer\x20->\x20escrow\x20->\x20supplier\x20net,\x20and\x20the\x20platform\x20draws\x20the\x20accrued\x20commission\x20from\x20the\x20deposit\x20pool\x20on\x20the\x20settlement\x20cadence\x20—\x20no\x20reverse-fund-flow\x20primitive\x20needed','Free-cancellation\x20window\x20(default\x2072h\x20pre-check-in)\x20is\x20a\x20single\x20time-lock\x20Guard\x20—\x20buyer-triggered','Supplier\x20confirm\x20timeout\x20(48h)\x20releases\x20the\x20order\x20via\x20keeper;\x20the\x20property\x20is\x20demoted\x20off-chain','Check-in\x20is\x20dual-confirmation:\x20property\x20submits\x20the\x20redemption\x20WIP\x20+\x20buyer\x20confirms\x20(R4)','Settlement\x20ledger\x20+\x20redemption\x20evidence\x20+\x20walk\x20evidence\x20live\x20in\x20dedicated\x20Repositories\x20with\x20write-guarded\x20policies','Refund\x20recipient\x20is\x20the\x20order\x20object\x20(anchored)\x20—\x20the\x20buyer\x20claims\x20via\x20the\x20two-step\x20receive\x20flow\x20(R5)','Disputes\x20route\x20to\x20Arbitration\x20with\x20an\x20independent\x20Permission\x20(R-M1-11)'],'fee_params':{'property_rate_bps':0x20d0,'commission_rate_bps':0x5dc,'payment_fee_bps':0x64,'free_cancel_hours':0x48,'confirm_timeout_hours':0x30,'review_window_days':0x5a,'preferred_property_rate_bps':0x1fa4},'trust_mechanisms':['R1\x20three\x20refund\x20paths:\x20free\x20cancellation\x20/\x20cancellation\x20policy\x20/\x20arbitration\x20ruling','R2\x20independent\x20arbitration\x20Permission\x20(contract-enforced)','R3\x20compensation\x20fund\x20>=\x205x\x20max\x20order\x20(front-pay\x20+\x20recovery)','R4\x20check-in\x20dual\x20confirmation\x20—\x20property\x20self-sign\x20forbidden','R5\x20order-anchored\x20escrow\x20+\x20refund\x20recipient','R6\x20Rate\x20sums\x20=\x2010000;\x20threshold\x200','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20Contact\x20on\x20Service\x20and\x20Machine','R9\x20keepers\x20for\x20confirm\x20timeout,\x20check-out,\x20and\x20settlement','R10\x20cancellation\x20policy\x20parameters\x20as\x20immutable\x20Guard\x20windows'],'keeper_dependencies':['supplier\x20confirm\x20timeout\x20(48h)','check-out\x20time\x20gate','settlement\x20trigger\x20(payout\x20delay)','review\x20window\x20expiry'],'recommended_role':'merchant','role_rationale':'Property\x20operators\x20and\x20hotel\x20merchants\x20own\x20the\x20booking\x20Service;\x20the\x20platform\x20variant\x20hosts\x20properties\x20under\x20Permission\x20entities\x20with\x20per-property\x20settlement\x20ledgers.','differences':['Merchant-mode\x20settlement\x20(buyer\x20->\x20escrow\x20->\x20property/platform);\x20agent\x20mode\x20(reverse\x20commission)\x20=\x20the\x20commission-deposit\x20variant:\x20supplier\x20posts\x20a\x20refundable\x20deposit\x20Allocation\x20at\x20onboarding,\x20the\x20platform\x20draws\x20accrued\x20commission\x20from\x20it\x20on\x20the\x20settlement\x20cadence','Free-cancellation\x20window\x20+\x20supplier\x20confirm\x20timeout\x20(48h\x20keeper\x20release)\x20shape\x20the\x20pre-stay\x20funnel','Check-in\x20is\x20dual-confirmation:\x20property\x20redemption\x20WIP\x20+\x20buyer\x20confirm\x20(R4)'],'user_inputs':['property_rate_bps\x20/\x20commission_rate_bps\x20/\x20payment_fee_bps\x20—\x20the\x20settlement\x20split\x20(sum\x2010000)','free_cancel_hours\x20—\x20free-cancellation\x20window\x20before\x20check-in','confirm_timeout_hours\x20—\x20supplier\x20confirmation\x20timeout','review_window_days\x20—\x20the\x20review\x20Reward\x20window']},{'id':'travel/destination-experience','industry':'travel','variant':'destination-experience','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'paid','role':'Entry:\x20multi-segment\x20trip\x20paid\x20and\x20escrowed;\x20Machine\x20starts\x20here'},{'name':'segment_D1','role':'Segment\x201\x20redeemed:\x20supplier\x20submits\x20WIP\x20+\x20buyer\x20confirms\x20(dual\x20confirmation)'},{'name':'segment_D2','role':'Segment\x202\x20redeemed\x20(same\x20dual-confirmation\x20pattern)'},{'name':'segment_D3','role':'Segment\x203\x20redeemed\x20—\x20representative;\x20configure\x20per-segment\x20nodes\x20at\x20build\x20time'},{'name':'completed','role':'All\x20segments\x20redeemed'},{'name':'settled','role':'Settlement\x20Allocator\x20fires\x20(terminal)\x20—\x20layer-1\x20pool\x20to\x20platform\x20aggregation'},{'name':'cancelled','role':'Free\x20cancellation\x20(24h\x20pre-use)\x20or\x20tiered\x20cancellation\x20—\x20refund/charge\x20Allocators'}],'guards':[{'template_id':'free_cancel_guard_timelock','host':'machine','purpose':'Free\x20cancellation\x20before\x20use\x20date\x20minus\x2024h\x20(0-168h\x20adjustable)'},{'template_id':'cancel_tier_guard_timelock','host':'machine','purpose':'Four\x20cancellation\x20tiers\x20(7d+\x20/\x203-7d\x20/\x201-3d\x20/\x20same-day)\x20charging\x205%\x20/\x2020%\x20/\x2050%\x20/\x2070%'},{'template_id':'redeem_guard_wip','host':'machine','purpose':'Per-segment\x20redemption\x20WIP:\x20supplier\x20submits\x20+\x20buyer\x20confirms\x20(T+3\x20time-lock\x20fallback)'},{'template_id':'evidence_guard_timelock','host':'machine','purpose':'Force-majeure\x20evidence\x20window\x2048h\x20—\x20expired\x20claims\x20lose\x20standing'},{'template_id':'settle_guard_evidence','host':'machine','purpose':'Settlement\x20when\x20all\x20segments\x20redeemed\x20(or\x20monthly\x20cycle\x20variant)'},{'template_id':'ruling_refund_guard_evidence','host':'machine','purpose':'Arbitration\x20ruling\x20evidence\x20triggers\x20the\x20refund\x20allocator'},{'template_id':'review_guard_evidence','host':'reward','purpose':'Review\x20claim:\x20progress\x20at\x20completed\x20+\x20review\x20content\x20hash'}],'allocator':{'recipient':'entity','count':0x8,'mode':'rate','description':'Two-tier\x20waterfall:\x20layer-1\x20(Service-level,\x20shared\x20by\x20all\x20orders)\x20settles\x20the\x20full\x20amount\x20to\x20the\x20platform\x20pool,\x20refunds\x20free\x20cancellations\x20fully,\x20applies\x20four-tier\x20cancellation\x20charges,\x20and\x20executes\x20arbitration\x20refunds;\x20layer-2\x20(a\x20per-order\x20Allocation\x20created\x20after\x20payment)\x20releases\x20per-segment\x20fixed\x20Amounts\x20to\x20each\x20supplier\x20on\x20redemption,\x20with\x20the\x20platform\x20taking\x20the\x20remainder\x20as\x20a\x20single\x20Surplus\x20entry\x20(commission\x20=\x20order\x20total\x20-\x20segment\x20sums)'},'key_risk':'Per-segment\x20supplier\x20payout\x20under\x20Service-level\x20static\x20rules\x20—\x20the\x20per-order\x20second-layer\x20Allocation\x20bypasses\x20the\x20Service\x20granularity\x20freeze','build_notes':['Core\x20redesign:\x20a\x20Service-level\x20segment\x20Rate\x20allocator\x20fails\x20contract\x20validation\x20—\x20use\x20a\x20per-order\x20layer-2\x20Allocation\x20(publicly\x20creatable\x20after\x20payment)\x20with\x20per-segment\x20Amount\x20entries','Layer-2\x20Amount\x20entries\x20are\x20exact\x20per-segment\x20figures\x20(per-order\x20customization);\x20sequential\x20execution\x20causes\x20no\x20distortion','Platform\x20commission\x20=\x20the\x20pool\x20remainder\x20via\x20a\x20single\x20Surplus\x20entry\x20(no\x20explicit\x20Rate\x20needed)','Instant-confirmation\x20variant\x20(real-time\x20ticketing):\x20paid\x20->\x20confirmed\x20->\x20redeemed\x20->\x20completed\x20(4\x20nodes)','Monthly\x20settlement\x20variant:\x20layer-2\x20recipients\x20=\x20platform\x20Treasury\x20aggregation\x20+\x20supplier-by-month\x20settlement\x20ledger;\x20batch\x20payout\x20via\x20permissioned\x20Treasury\x20withdrawal','Force-majeure\x20evidence\x20window\x20is\x2048h\x20—\x20expired\x20claims\x20lose\x20standing\x20(prevents\x20retroactive\x20evidence)','Disputes\x20route\x20to\x20Arbitration\x20with\x20an\x20independent\x20Permission\x20(R-M1-11)'],'fee_params':{'free_cancel_hours':0x18,'cancel_tier_charges_bps':'500/2000/5000/7000','segment_count':0x3,'evidence_window_hours':0x30},'trust_mechanisms':['R1\x20three\x20refund\x20allocators\x20(free\x20cancellation\x20/\x20tiered\x20balance\x20/\x20arbitration)\x20with\x20order-anchored\x20recipients','R2\x20independent\x20arbitration\x20Permission\x20(structurally\x20eliminates\x20the\x20shared-Permission\x20critical\x20finding)','R3\x20compensation\x20fund\x20>=\x205x\x20max\x20order\x20(guarantee\x20front-pay\x20pool)','R4\x20per-segment\x20dual\x20confirmation:\x20supplier\x20WIP\x20+\x20buyer\x20confirm\x20or\x20T+3\x20fallback','R5\x20both\x20layers\x20anchor\x20payments\x20to\x20the\x20order','R6\x20layer-1\x20Rate\x20sums\x2010000;\x20layer-2\x20Amount\x20+\x20single\x20Surplus','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20Contact\x20on\x20Service\x20and\x20Machine','R9\x20keepers\x20for\x20layer-2\x20Allocation\x20creation,\x20settlement,\x20and\x20evidence\x20windows','R10\x20tiered\x20cancellation\x20parameters\x20as\x20immutable\x20Guard\x20windows'],'keeper_dependencies':['per-order\x20layer-2\x20Allocation\x20creation\x20after\x20payment','settlement\x20trigger\x20(all\x20segments\x20redeemed\x20or\x20monthly\x20cycle)','T+3\x20redemption\x20confirmation\x20fallback','force-majeure\x20evidence\x20window\x20expiry'],'recommended_role':'both','role_rationale':'Experience\x20suppliers\x20fulfill\x20segments\x20as\x20sub-order\x20takers\x20(supplier\x20path);\x20the\x20platform\x20operator\x20runs\x20the\x20two-tier\x20waterfall\x20(merchant\x20path).','differences':['Redemption\x20=\x20the\x20only\x20settlement\x20evidence:\x20per-segment\x20supplier\x20WIP\x20+\x20buyer\x20dual\x20confirmation\x20(T+3\x20time-lock\x20fallback)','Two-tier\x20waterfall:\x20Service-level\x20layer-1\x20pool\x20+\x20a\x20per-order\x20layer-2\x20Allocation\x20for\x20per-segment\x20supplier\x20payouts\x20(bypasses\x20the\x20Service\x20granularity\x20freeze)','Platform\x20commission\x20=\x20the\x20pool\x20remainder\x20via\x20a\x20single\x20Surplus\x20entry\x20(no\x20explicit\x20Rate\x20needed)'],'user_inputs':['segment_count\x20—\x20per-segment\x20nodes\x20expand\x20to\x20the\x20real\x20trip\x20structure','free_cancel_hours\x20—\x20free-cancellation\x20window\x20before\x20use','cancel_tier_charges_bps\x20—\x20the\x20four\x20tiered\x20cancellation\x20charges','evidence_window_hours\x20—\x20force-majeure\x20evidence\x20window']},{'id':'subscription/creator-membership','industry':'subscription','variant':'creator-membership','archetype':'leader','phase':0x1,'machine_shape':[{'name':'subscribed','role':'Entry:\x20fan\x20joins;\x20Machine\x20starts\x20here'},{'name':'charging','role':'Fan\x20signs\x20the\x20period\x20charge\x20(explicit\x20signature\x20—\x20never\x20auto-charged);\x20renewal\x20loop\x20re-enters\x20here'},{'name':'delivering','role':'Payment\x20confirmed;\x20creator\x20produces\x20the\x20period\x20content'},{'name':'delivered','role':'Period\x20content\x20hash\x20submitted\x20(matches\x20the\x20order\x20item\x20commitment)'},{'name':'completed','role':'Fan\x20confirms\x20receipt\x20—\x20period\x20funds\x20releasable\x20(R4:\x20fan-only\x20confirmation)'},{'name':'expired','role':'Period\x20end\x20+\x207-day\x20grace\x20passed\x20without\x20renewal\x20(keeper\x20advances)'},{'name':'cancelled','role':'Fan\x20cancels\x20—\x20next-period\x20effective;\x20pro-rata\x20refund\x20Allocator\x20for\x20unearned\x20periods'}],'guards':[{'template_id':'charge_guard_signer','host':'machine','purpose':'Every\x20charge/renewal\x20requires\x20the\x20subscriber\x27s\x20own\x20signature\x20(signer\x20=\x20order\x20owner)\x20—\x20no\x20third\x20party\x20can\x20renew'},{'template_id':'deliver_guard_wip','host':'machine','purpose':'Per-period\x20content\x20hash\x20required,\x20matching\x20the\x20order\x20item\x20commitment'},{'template_id':'withdraw_guard_progress','host':'machine','purpose':'Release\x20gated\x20by\x20the\x20delivery-confirmed\x20state\x20(state-based\x20release,\x20not\x20a\x20calendar\x20window)'},{'template_id':'refund_guard_signer_progress','host':'machine','purpose':'Refund\x20restricted\x20to\x20the\x20order\x20owner\x20in\x20pre-delivery\x20states'},{'template_id':'cancel_guard_signer','host':'machine','purpose':'Fan\x20cancels\x20anytime;\x20effective\x20next\x20period'},{'template_id':'expire_time_guard_timelock','host':'machine','purpose':'Expiry\x20at\x20period\x20end\x20+\x207-day\x20grace\x20(keeper\x20advances)'},{'template_id':'dispute_window_guard_timelock','host':'arbitration','purpose':'Disputes\x20open\x20within\x2014\x20days\x20of\x20delivery\x20—\x20replaces\x20the\x20legacy\x20calendar\x20freeze\x20window'}],'allocator':{'recipient':'entity','count':0x2,'mode':'rate','description':'0%\x20platform\x20take:\x20per-period\x20release\x20Rate\x2010000\x20to\x20the\x20creator\x20at\x20completed;\x20refund\x20Rate\x2010000\x20to\x20the\x20subscriber\x20(signer\x20locked\x20to\x20the\x20order\x20owner\x20by\x20the\x20refund\x20guard);\x20threshold\x20MUST\x20be\x200\x20(a\x20positive\x20threshold\x20locks\x20small\x20residual\x20balances\x20after\x20partial\x20refunds)'},'key_risk':'Auto-renew\x20trap\x20—\x20every\x20period\x20requires\x20an\x20explicit\x20subscriber\x20signature;\x20keepers\x20may\x20remind\x20and\x20expire\x20but\x20can\x20never\x20charge','build_notes':['Per-period\x20signature\x20renewal\x20collapses\x20the\x20bind-card/auto-charge/retry/grace/drop\x20black\x20box\x20into\x20one\x20mechanism:\x20one\x20explicit\x20subscriber\x20signature\x20per\x20period','Renewal\x20=\x20a\x20single\x20subscriber\x20transaction:\x20next-period\x20payment\x20into\x20the\x20Allocation\x20pool\x20+\x20pool\x20recharge\x20+\x20Machine\x20loop\x20back\x20to\x20charging','The\x20renew\x20forward\x20binds\x20the\x20subscriber\x20as\x20operator;\x20the\x20charge\x20guard\x20checks\x20signer\x20=\x20order\x20owner\x20—\x20no\x20third\x20party\x20(creator/keeper)\x20can\x20renew\x20on\x20the\x20subscriber\x27s\x20behalf','The\x20renewal\x20loop\x20edge\x20is\x20legal:\x20the\x20charging\x20node\x20carries\x20two\x20entry\x20pairs\x20(initial\x20+\x20loop);\x20node\x20revisits\x20are\x20unrestricted','threshold\x20must\x20be\x200\x20—\x20small\x20subscription\x20amounts\x20+\x20partial\x20refunds\x20would\x20otherwise\x20lock\x20the\x20residual\x20below\x20a\x20positive\x20threshold','Long\x20subscriptions\x20(>\x2024\x20periods):\x20prefer\x20per-period\x20new\x20Orders\x20to\x20bound\x20progress-history\x20growth','Disputes\x20route\x20to\x20Arbitration\x20(default\x20open\x20voting)\x20—\x20award\x20cap\x20is\x203x\x20the\x20period\x20amount;\x20multi-period\x20disputes\x20split\x20per\x20period\x20(R-M1-11)','Honor-tier\x20Rewards:\x20claim\x20guard\x20=\x20historical\x20period\x20count\x20>=\x20N','Anti-dark-pattern\x20selling\x20point:\x20\x27explicit\x20signature\x20every\x20period\x20—\x20no\x20silent\x20auto-renewal,\x20no\x20card-on-file\x20black\x20box\x27\x20is\x20a\x20trust\x20differentiator;\x20surface\x20it\x20in\x20the\x20listing\x20WIP\x20promise\x20and\x20onboarding\x20copy'],'fee_params':{'platform_take_bps':0x0,'grace_days':0x7,'dispute_window_days':0xe,'renewal_reminder_days':0x3,'threshold':0x0},'trust_mechanisms':['R1\x20refund\x20allocator\x20(Rate\x2010000\x20to\x20subscriber,\x20signer-locked)','R2\x20independent\x20arbitration\x20Permission\x20(contract-enforced\x20separation)','R3\x20compensation\x20fund\x20with\x20award\x20recipient\x20hard-bound\x20to\x20the\x20order\x20owner','R4\x20receipt\x20confirmation\x20by\x20the\x20subscriber\x20only\x20—\x20creator\x20self-sign\x20forbidden','R5\x20period\x20payments\x20anchored\x20to\x20the\x20order\x20Allocation','R6\x20Rate\x20=\x2010000\x20single\x20recipient;\x20threshold\x200','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20renewal\x20reminders\x20+\x20expiry\x20ONLY\x20(no\x20charge\x20authority)','R10\x20period\x20price\x20embedded\x20in\x20the\x20Sale;\x20no\x20silent\x20auto-charge\x20parameter\x20exists'],'keeper_dependencies':['renewal\x20reminder\x20(period\x20end\x20-\x203\x20days)','expiry\x20trigger\x20(period\x20end\x20+\x20grace)','NO\x20auto-charge\x20authority\x20by\x20design'],'recommended_role':'merchant','role_rationale':'Creators\x20own\x20the\x20subscription\x20Service\x20and\x20keep\x20100%\x20of\x20period\x20funds\x20(0%\x20take);\x20honor\x20tiers\x20are\x20Reward\x20objects\x20on\x20the\x20same\x20Service.','differences':['Tiered\x20membership:\x20honor-tier\x20Reward\x20objects\x20(claim\x20guard\x20=\x20historical\x20period\x20count\x20>=\x20N)\x20layer\x20on\x20top\x20of\x20the\x20base\x20subscription','0%\x20platform\x20take\x20on\x20the\x20base\x20template\x20—\x20revenue\x20extension\x20points\x20are\x20Reward/discount\x20add-ons\x20rather\x20than\x20a\x20take\x20rate','Per-period\x20explicit-signature\x20renewal;\x20keepers\x20remind\x20and\x20expire\x20but\x20can\x20never\x20charge'],'user_inputs':['Period\x20price\x20(embedded\x20in\x20the\x20Sale\x20structure)','grace_days\x20—\x20renewal\x20grace\x20window\x20before\x20expiry','dispute_window_days\x20—\x20dispute\x20opening\x20window\x20after\x20delivery','renewal_reminder_days\x20—\x20keeper\x20reminder\x20lead\x20time','Honor-tier\x20count\x20and\x20per-tier\x20claim\x20thresholds']},{'id':'subscription/direct-fan-subscription','industry':'subscription','variant':'direct-fan-subscription','archetype':'challenger','phase':0x1,'machine_shape':[{'name':'subscribed','role':'Entry:\x20fan\x20joins\x20(age-verified\x20via\x20Passport);\x20Machine\x20starts\x20here'},{'name':'charging','role':'Fan\x20signs\x20the\x20period\x20charge\x20(explicit\x20signature\x20—\x20never\x20auto-charged);\x20renewal\x20loop\x20re-enters\x20here'},{'name':'delivering','role':'Payment\x20confirmed;\x20creator\x20produces\x20the\x20period\x20content\x20/\x20response\x20record'},{'name':'delivered','role':'Period\x20content\x20hash\x20submitted\x20(matches\x20the\x20order\x20item\x20commitment)'},{'name':'completed','role':'Fan\x20confirms\x20receipt\x20—\x20state-machine\x20release\x20replaces\x20the\x20calendar\x20freeze\x20(R4:\x20fan-only\x20confirmation)'},{'name':'expired','role':'Period\x20end\x20+\x207-day\x20grace\x20passed\x20without\x20renewal\x20(keeper\x20advances)'},{'name':'cancelled','role':'Fan\x20cancels\x20—\x20next-period\x20effective;\x20pro-rata\x20refund\x20Allocator'}],'guards':[{'template_id':'buy_guard_age_passport','host':'service','purpose':'Age-verification\x20buy\x20gate\x20(R10):\x20purchase\x20requires\x20a\x20Passport\x20with\x20qualifying\x20age\x20credentials'},{'template_id':'charge_guard_signer','host':'machine','purpose':'Every\x20charge/renewal\x20requires\x20the\x20subscriber\x27s\x20own\x20signature\x20(signer\x20=\x20order\x20owner)'},{'template_id':'deliver_guard_wip','host':'machine','purpose':'Per-period\x20content/response-record\x20hash\x20required,\x20matching\x20the\x20order\x20item\x20commitment'},{'template_id':'withdraw_guard_progress','host':'machine','purpose':'Release\x20gated\x20by\x20the\x20delivery-confirmed\x20state\x20—\x20replaces\x20the\x207/21-day\x20calendar\x20freeze'},{'template_id':'refund_guard_signer_progress','host':'machine','purpose':'Refund\x20restricted\x20to\x20the\x20order\x20owner\x20in\x20pre-delivery\x20states'},{'template_id':'cancel_guard_signer','host':'machine','purpose':'Fan\x20cancels\x20anytime;\x20effective\x20next\x20period'},{'template_id':'expire_time_guard_timelock','host':'machine','purpose':'Expiry\x20at\x20period\x20end\x20+\x207-day\x20grace\x20(keeper\x20advances)'},{'template_id':'dispute_window_guard_timelock','host':'arbitration','purpose':'Dispute\x20window\x20default\x2014\x20days\x20(extendable\x20for\x20new\x20creators\x20as\x20a\x20risk\x20lever)'}],'allocator':{'recipient':'entity','count':0x2,'mode':'rate','description':'0%\x20platform\x20take\x20(the\x20flip\x20of\x20the\x20incumbent\x27s\x2020%):\x20per-period\x20release\x20Rate\x2010000\x20to\x20the\x20creator\x20at\x20completed;\x20refund\x20Rate\x2010000\x20to\x20the\x20subscriber;\x20threshold\x20MUST\x20be\x200\x20for\x20small\x20per-period\x20amounts;\x20tips\x20bypass\x20the\x20Machine\x20entirely\x20(direct\x20payments\x20with\x20no\x20allocation\x20semantics)'},'key_risk':'Chargeback-funded\x20freeze\x20replaced\x20by\x20state-machine\x20release\x20—\x20funds\x20unlock\x20at\x20delivery\x20confirmation,\x20not\x20after\x20a\x20calendar\x20window','build_notes':['State\x20replaces\x20time:\x20release\x20is\x20gated\x20by\x20the\x20delivery-confirmed\x20state,\x20not\x20a\x207/21-day\x20calendar\x20freeze;\x20signature\x20payments\x20eliminate\x20the\x20chargeback\x20category\x20entirely','Age\x20verification\x20(R10):\x20the\x20buy\x20guard\x20requires\x20a\x20Passport\x20with\x20qualifying\x20age\x20credentials;\x20the\x20credential\x20issuer\x20(KYC\x20provider)\x20is\x20off-chain\x20—\x20the\x20only\x20non-on-chain-able\x20link','Creator\x20onboarding\x20=\x20identity\x20Passport\x20+\x20permission\x20grant\x20(verification\x20standards\x20declared\x20in\x20the\x20deployment\x20checklist)','Three\x20sub-templates:\x20pay-per-view\x20(5\x20nodes,\x20its\x20own\x20Service\x20—\x20single\x20Machine\x20binding\x20per\x20Service),\x20paid\x20messaging\x20(subscription\x20skeleton\x20with\x20response-record\x20delivery),\x20tips\x20(direct\x20payment,\x20no\x20Machine)','Paid-messaging\x20response\x20obligations\x20are\x20SOFT\x20clauses:\x20response-time\x20promises\x20are\x20not\x20deterministic,\x20so\x20encode\x20them\x20as\x20written\x20promises\x20in\x20the\x20listing\x20WIP\x20(never\x20as\x20Guards);\x20a\x20missed\x20response\x20is\x20an\x20ordinary\x20dispute\x20and\x20routes\x20to\x20Arbitration','Content\x20compliance\x20boundary:\x20only\x20hashes\x20on-chain;\x20content\x20bodies\x20live\x20off-chain\x20—\x20content\x20governance\x20is\x20structurally\x20out\x20of\x20scope\x20for\x20on-chain\x20objects','Disputes\x20route\x20to\x20Arbitration\x20(open\x20voting\x20default);\x20multi-period\x20disputes\x20split\x20per\x20period\x20(award\x20cap\x203x\x20period\x20amount)','Anti-dark-pattern\x20selling\x20point:\x20every\x20renewal\x20requires\x20the\x20subscriber\x27s\x20explicit\x20signature\x20—\x20surface\x20\x27no\x20silent\x20auto-renewal\x27\x20in\x20the\x20listing\x20WIP\x20promise'],'fee_params':{'platform_take_bps':0x0,'incumbent_take_bps':0x7d0,'dispute_window_days':0xe,'grace_days':0x7,'threshold':0x0},'trust_mechanisms':['R1\x20refund\x20allocator\x20—\x20the\x20platform-level\x20answer\x20to\x20\x27no\x20refund\x20policy\x20+\x20chargeback\x20pass-through\x27','R2\x20independent\x20arbitration\x20Permission\x20(testnet\x20lesson\x20hardened\x20into\x20the\x20contract)','R3\x20compensation\x20fund\x20payout\x20hard-bound\x20to\x20the\x20order\x20owner','R4\x20receipt\x20confirmation\x20by\x20the\x20subscriber\x20only\x20—\x20creator\x20self-sign\x20forbidden','R5\x20period\x20payments\x20anchored\x20to\x20the\x20order\x20Allocation','R6\x20Rate\x20=\x2010000;\x20threshold\x200','R7\x20publish\x20freeze\x20—\x20full\x20configuration\x20before\x20publish','R8\x20customer-service\x20Contact\x20bound','R9\x20keepers\x20for\x20reminders/expiry\x20only\x20(no\x20charge\x20authority)','R10\x20age-verification\x20buy\x20guard\x20(Passport\x20credentials)'],'keeper_dependencies':['renewal\x20reminder\x20(period\x20end\x20-\x203\x20days)','expiry\x20trigger\x20(period\x20end\x20+\x20grace)','NO\x20auto-charge\x20authority\x20by\x20design'],'recommended_role':'merchant','role_rationale':'Creators\x20own\x20the\x20subscription\x20Service\x20with\x200%\x20take;\x20age-verification\x20credentials\x20gate\x20purchases\x20via\x20Passport.','differences':['State-machine\x20release\x20replaces\x20the\x20calendar\x20freeze:\x20funds\x20unlock\x20at\x20delivery\x20confirmation,\x20not\x20after\x20a\x20window;\x20signature\x20payments\x20eliminate\x20the\x20chargeback\x20category','Age-verification\x20buy\x20gate\x20via\x20Passport\x20credentials\x20(R10)\x20—\x20the\x20credential\x20issuer\x20is\x20the\x20only\x20off-chain\x20link','Interaction\x20monetization\x20sub-templates:\x20pay-per-view\x20(own\x20Service),\x20paid\x20messaging\x20(response-record\x20delivery),\x20tips\x20(direct\x20payment,\x20no\x20Machine)'],'user_inputs':['dispute_window_days\x20—\x20extendable\x20for\x20new\x20creators\x20as\x20a\x20risk\x20lever','grace_days\x20—\x20renewal\x20grace\x20window\x20before\x20expiry','Age-credential\x20issuer\x20selection\x20(KYC\x20provider,\x20off-chain)','Sub-template\x20selection:\x20pay-per-view\x20/\x20paid\x20messaging\x20/\x20tips']}];export const TEMPLATE_KEYWORDS={'retail/scale-marketplace':['marketplace','fulfillment','reserve','third-party\x20seller','scale\x20marketplace','a-to-z\x20guarantee'],'retail/vertical-handmade':['handmade','artisan','vintage','craft','custom\x20order','offsite\x20ads','attribution'],'freelance/enterprise-talent-market':['freelance\x20marketplace','talent\x20market','escrow\x20release','revision','acceptance\x20timeout','milestone'],'freelance/creator-zero-commission':['0%\x20commission','zero\x20commission','no\x20commission','fixed\x20contract\x20fee','portfolio\x20funnel'],'rental/p2p-shortstay':['short-term\x20rental','homestay','host','cancellation\x20policy','damage\x20claim','check-in'],'rental/institutional-longstay':['long-term\x20rental','monthly\x20rent','lease','deposit\x20refund','property\x20management'],'education/mooc-degree':['degree','semester','university','certificate','mooc','tuition'],'education/live-class-cohort':['tutoring','k12','session','attendance','prepay\x20cap','trial\x20lesson','live\x20class'],'travel/global-ota':['hotel','room','no-show','walk','merchant\x20mode','accommodation','ota'],'travel/destination-experience':['experience','ticket','multi-segment','redeem','supplier\x20payout','instant\x20confirmation'],'subscription/creator-membership':['creator','membership','per-period','honor\x20tier','fan\x20subscription'],'subscription/direct-fan-subscription':['age\x20verification','pay-per-view','ppv','tip','content\x20subscription']};export function getBuiltinTemplate(a){return BUILTIN_TEMPLATES['find'](b=>b['id']===a);}export function listBuiltinTemplates(){return BUILTIN_TEMPLATES;}
@@ -1,4 +1,5 @@
1
- export type ContactRiskLevel = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "INFO";
1
+ import { type Facts } from "../config/rule-engine.js";
2
+ export type ContactRiskLevel = "critical" | "high" | "medium" | "low" | "info";
2
3
  export type ContactRiskCategory = "structural" | "semantic" | "lifecycle" | "permission" | "cross_object" | "knowledge";
3
4
  export type ContactStakeholder = "creator" | "im_member" | "consumer" | "system";
4
5
  export interface ContactRisk {
@@ -23,10 +24,9 @@ export interface ContactRiskCheckContext {
23
24
  change_status_no_permission?: boolean;
24
25
  constants_synced?: boolean;
25
26
  }
26
- export declare const CONTACT_RISK_RULES: {
27
- rule: ContactRisk;
28
- check: (ctx: ContactRiskCheckContext) => ContactRisk | null;
29
- }[];
27
+ export declare function contactRiskFacts(ctx: ContactRiskCheckContext): Facts;
30
28
  export declare const CONTACT_RISK_VERSION = "1.0.0";
29
+ export declare const CONTACT_RISK_RULES: Array<ContactRisk & {
30
+ trigger?: string;
31
+ }>;
31
32
  export declare function checkContactRisks(ctx: ContactRiskCheckContext): ContactRisk[];
32
- export declare function getContactRiskById(id: string): ContactRisk | undefined;
@@ -1 +1 @@
1
- import{MAX_IM_COUNT}from'@wowok/wowok';const R_C_01={'rule':{'id':'R-CONTACT-01','level':'MEDIUM','category':'permission','title':'change_status\x20has\x20no\x20permission\x20check\x20—\x20IM\x20list\x20pollution\x20risk','description':'change_status\x20lets\x20any\x20IM\x20member\x20self-update\x20their\x20status\x20string\x20without\x20Permission\x20'+'verification\x20(contact.move:32-43).\x20If\x20an\x20attacker\x27s\x20address\x20is\x20added\x20to\x20the\x20ims\x20list\x20'+'(via\x20im_add,\x20which\x20requires\x20permission\x20index\x20453),\x20the\x20attacker\x20can\x20freely\x20pollute\x20'+'their\x20status\x20field\x20(e.g.\x20set\x20status\x20to\x20\x27fraud\x27).\x20The\x20risk\x20is\x20bounded\x20by\x20the\x20im_add\x20'+'permission\x20gate,\x20but\x20a\x20misconfigured\x20Permission\x20could\x20expose\x20the\x20IM\x20list.','affected_stakeholders':['creator','im_member'],'scenario':'Contact\x27s\x20IM\x20list\x20is\x20misconfigured\x20to\x20allow\x20public\x20adds;\x20attacker\x20pollutes\x20status','mitigation':'Restrict\x20permission\x20index\x20453\x20(CONTACT_IM)\x20to\x20trusted\x20guardians.\x20Audit\x20the\x20IM\x20list\x20'+'periodically.\x20Business\x20layer\x20may\x20validate\x20status\x20strings\x20against\x20an\x20allowlist.','auto_fixable':![]},'check':a=>{if(!a['change_status_no_permission'])return null;return{...R_C_01['rule'],'evidence':'change_status_no_permission=true'};}},R_C_02={'rule':{'id':'R-CONTACT-02','level':'LOW','category':'structural','title':'MAX_IM_COUNT='+MAX_IM_COUNT+'\x20is\x20permissive\x20—\x20on-chain\x20storage\x20cost','description':'A\x20single\x20Contact\x20may\x20hold\x20up\x20to\x20MAX_IM_COUNT='+MAX_IM_COUNT+'\x20IM\x20entries\x20(contact.move:14).\x20'+'Aborting\x20with\x20E_IM_COUNT_EXCEEDED\x20(1)\x20only\x20triggers\x20at\x20the\x20boundary.\x20200\x20entries\x20is\x20'+'relatively\x20permissive\x20for\x20a\x20social\x20scenario;\x20loading\x20the\x20full\x20list\x20on\x20every\x20read\x20'+'increases\x20gas\x20and\x20storage\x20cost.','affected_stakeholders':['creator'],'scenario':'Caller\x20adds\x20200\x20IM\x20entries\x20to\x20a\x20single\x20Contact','mitigation':'Business\x20layer\x20should\x20self-limit\x20IM\x20count\x20well\x20below\x20200.\x20For\x20high-volume\x20contact\x20'+'lists,\x20shard\x20across\x20multiple\x20Contact\x20objects\x20and\x20aggregate\x20off-chain.','related_move_error':'E_IM_COUNT_EXCEEDED\x20(1)','auto_fixable':![]},'check':a=>{if(a['im_count']===undefined)return null;if(a['im_count']<MAX_IM_COUNT)return null;return{...R_C_02['rule'],'evidence':'im_count='+a['im_count']+',\x20limit='+MAX_IM_COUNT};}},R_C_03={'rule':{'id':'R-CONTACT-03','level':'MEDIUM','category':'semantic','title':'IM\x20list\x20mutations\x20emit\x20no\x20events\x20—\x20external\x20indexers\x20must\x20poll','description':'im_add\x20/\x20im_remove\x20/\x20im_clear\x20do\x20not\x20emit\x20events\x20(contact.move:70-100).\x20External\x20'+'indexers\x20and\x20notification\x20systems\x20cannot\x20rely\x20on\x20event\x20streams\x20to\x20track\x20IM\x20list\x20'+'changes;\x20they\x20must\x20poll\x20the\x20ims\x20field\x20directly,\x20increasing\x20latency\x20and\x20RPC\x20cost.','affected_stakeholders':['creator','consumer'],'scenario':'Indexer\x20expects\x20an\x20event\x20on\x20im_add\x20but\x20none\x20is\x20emitted;\x20UI\x20fails\x20to\x20refresh','mitigation':'External\x20indexers\x20should\x20poll\x20the\x20Contact.ims\x20field\x20on\x20a\x20cadence.\x20A\x20future\x20version\x20'+'may\x20add\x20IMEvent;\x20until\x20then,\x20do\x20not\x20build\x20critical\x20UX\x20on\x20IM\x20event\x20streams.','auto_fixable':![]},'check':a=>null},R_C_04={'rule':{'id':'R-CONTACT-04','level':'LOW','category':'semantic','title':'location\x20defaults\x20to\x20empty\x20string\x20—\x20may\x20be\x20misread\x20as\x20\x27unset\x27','description':'A\x20freshly\x20created\x20Contact\x20has\x20location=\x22\x22\x20(empty\x20String).\x20The\x20Move\x20type\x20does\x20not\x20'+'distinguish\x20\x27unset\x27\x20from\x20\x27empty\x27,\x20so\x20consumers\x20may\x20misinterpret\x20an\x20empty\x20location\x20'+'as\x20\x27globally\x20applicable\x27\x20or\x20as\x20\x27missing\x20data\x27.','affected_stakeholders':['creator','consumer'],'scenario':'Consumer\x20reads\x20location=\x22\x22\x20and\x20treats\x20the\x20Contact\x20as\x20global\x20when\x20it\x20was\x20never\x20set','mitigation':'Document\x20that\x20empty\x20location\x20means\x20\x27not\x20specified\x27.\x20If\x20a\x20default\x20region\x20is\x20required,\x20'+'set\x20location\x20explicitly\x20at\x20creation\x20time.','auto_fixable':!![]},'check':a=>{if(!a['location_empty'])return null;return{...R_C_04['rule'],'evidence':'location=\x22\x22\x20(empty,\x20default)'};}},R_C_05={'rule':{'id':'R-CONTACT-05','level':'MEDIUM','category':'lifecycle','title':'my_status\x20silently\x20fails\x20for\x20non-IM-members','description':'my_status\x20only\x20updates\x20the\x20caller\x27s\x20status\x20entry\x20if\x20the\x20caller\x20is\x20in\x20the\x20ims\x20list\x20'+'(contact.move:35-42).\x20For\x20a\x20non-IM-member,\x20the\x20call\x20silently\x20succeeds\x20without\x20any\x20'+'state\x20change\x20—\x20there\x20is\x20no\x20abort\x20and\x20no\x20event.\x20Users\x20get\x20no\x20feedback,\x20making\x20it\x20'+'impossible\x20to\x20distinguish\x20\x27status\x20updated\x27\x20from\x20\x27operation\x20ignored\x27.','affected_stakeholders':['im_member'],'scenario':'Non-IM-member\x20calls\x20my_status\x20expecting\x20an\x20error;\x20operation\x20is\x20silently\x20ignored','mitigation':'SDK\x20layer\x20should\x20pre-validate\x20IM\x20membership\x20before\x20submitting\x20my_status\x20and\x20return\x20a\x20'+'clear\x20error.\x20UI\x20should\x20show\x20\x27not\x20an\x20IM\x20member\x27\x20instead\x20of\x20\x27success\x27.','auto_fixable':![]},'check':a=>{if(!a['my_status_from_non_member'])return null;return{...R_C_05['rule'],'evidence':'my_status_from_non_member=true\x20(will\x20be\x20silently\x20ignored)'};}},R_C_06={'rule':{'id':'R-CONTACT-06','level':'LOW','category':'semantic','title':'im_add\x20description\x20uses\x20LONG_NAME\x20(not\x20DESCRIPTION)\x20—\x20different\x20length\x20cap','description':'im_add\x27s\x20description\x20parameter\x20is\x20validated\x20with\x20common::LONG_NAME\x20rather\x20than\x20'+'common::DESCRIPTION\x20(contact.move:70-86).\x20The\x20two\x20validators\x20have\x20different\x20length\x20'+'limits;\x20callers\x20expecting\x20DESCRIPTION\x20semantics\x20may\x20submit\x20overly\x20long\x20strings\x20and\x20'+'hit\x20an\x20unexpected\x20abort.','affected_stakeholders':['creator'],'scenario':'Caller\x20submits\x20an\x20im_add\x20description\x20sized\x20for\x20DESCRIPTION\x20but\x20hits\x20LONG_NAME\x20limit','mitigation':'Document\x20that\x20im_add\x20description\x20uses\x20LONG_NAME\x20validation.\x20SDK\x20should\x20expose\x20the\x20'+'exact\x20limit\x20so\x20callers\x20size\x20their\x20strings\x20correctly.','auto_fixable':![]},'check':a=>{if(!a['im_add_description_uses_long_name'])return null;return{...R_C_06['rule'],'evidence':'im_add\x20description\x20validated\x20with\x20LONG_NAME'};}},R_C_07={'rule':{'id':'R-CONTACT-07','level':'MEDIUM','category':'cross_object','title':'permission_um_set\x20creates\x20Contact\x20↔\x20Permission\x20bidirectional\x20dependency','description':'When\x20Contact\x20is\x20set\x20as\x20a\x20Permission\x27s\x20um\x20via\x20permission_um_set\x20(contact.move:207-209),\x20'+'a\x20bidirectional\x20dependency\x20forms:\x20Permission.um\x20→\x20Contact,\x20and\x20Contact.permission\x20→\x20'+'Permission.\x20Deleting\x20the\x20Contact\x20without\x20first\x20clearing\x20the\x20um\x20reference\x20leaves\x20a\x20'+'dangling\x20pointer\x20in\x20Permission.um.','affected_stakeholders':['creator','consumer'],'scenario':'Contact\x20is\x20deleted\x20while\x20still\x20bound\x20as\x20Permission.um;\x20Permission.um\x20becomes\x20dangling','mitigation':'Document\x20the\x20deletion\x20order:\x20(1)\x20clear\x20Permission.um\x20via\x20permission_um_set(null)\x20'+'first,\x20(2)\x20then\x20delete\x20the\x20Contact.\x20SDK\x20should\x20refuse\x20to\x20delete\x20a\x20Contact\x20that\x20is\x20'+'still\x20bound\x20as\x20a\x20um.','auto_fixable':![]},'check':a=>{if(!a['bound_to_permission_um'])return null;return{...R_C_07['rule'],'evidence':'bound_to_permission_um=true\x20(deletion\x20requires\x20unbinding)'};}},R_C_08={'rule':{'id':'R-CONTACT-08','level':'LOW','category':'knowledge','title':'Knowledge\x20layer\x20&\x20constant\x20sync\x20—\x20RESOLVED','description':'MAX_IM_COUNT\x20is\x20now\x20synced\x20to\x20onchain-constants.ts\x20('+MAX_IM_COUNT+').\x20The\x20MCP\x20'+'Knowledge\x20layer\x20now\x20includes\x20contact-risk.ts.\x20This\x20risk\x20rule\x20is\x20retained\x20for\x20'+'historical\x20audit\x20and\x20to\x20detect\x20future\x20regressions.','affected_stakeholders':['system'],'scenario':'Future\x20regression:\x20someone\x20removes\x20MAX_IM_COUNT\x20from\x20onchain-constants.ts','mitigation':'Run\x20the\x20onchain-constants\x20sync\x20test\x20to\x20detect\x20drift.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_C_08['rule'],'evidence':'constants_synced=false'};}};export const CONTACT_RISK_RULES=[R_C_01,R_C_02,R_C_03,R_C_04,R_C_05,R_C_06,R_C_07,R_C_08];export const CONTACT_RISK_VERSION='1.0.0';export function checkContactRisks(a){const b=[];for(const c of CONTACT_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return!b['find'](e=>e['id']==='R-CONTACT-03')&&b['push'](R_C_03['rule']),b;}export function getContactRiskById(a){return CONTACT_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
1
+ import{MAX_IM_COUNT}from'@wowok/wowok';import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook,interpolate}from'../config/rule-engine.js';export function contactRiskFacts(a){return{'im_count':a['im_count'],'im_count_over_limit':a['im_count']!==undefined&&a['im_count']>=MAX_IM_COUNT,'my_status_from_non_member':a['my_status_from_non_member'],'location_empty':a['location_empty'],'im_add_description_uses_long_name':a['im_add_description_uses_long_name'],'bound_to_permission_um':a['bound_to_permission_um'],'change_status_no_permission':a['change_status_no_permission'],'constants_synced':a['constants_synced'],'always_true':!![],'max_im_count':MAX_IM_COUNT};}const RELATED_MOVE_ERRORS={'R-CONTACT-02':'E_IM_COUNT_EXCEEDED\x20(1)'},AUTO_FIXABLE=new Set(['R-CONTACT-04']);function contactRuleBook(){const a=getJudgmentDoc()['rules']['domains']['contact'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27contact\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToContactRisk(a){const b=RELATED_MOVE_ERRORS[a['rule_id']];return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'semantic','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'',...b===undefined?{}:{'related_move_error':b},'auto_fixable':AUTO_FIXABLE['has'](a['rule_id']),...a['evidence']===undefined?{}:{'evidence':a['evidence']}};}export const CONTACT_RISK_VERSION='1.0.0';export const CONTACT_RISK_RULES=((()=>{const a=factoryRulePack('contact');if(!a)return[];const b=contactRiskFacts({});return a['rules']['map'](d=>{const e=d['cases'][0x0],f=RELATED_MOVE_ERRORS[d['rule_id']];return{'id':d['rule_id'],'level':e['level'],'category':d['dimension']??'semantic','title':interpolate(e['title'],b),'description':interpolate(e['description'],b),'affected_stakeholders':e['stakeholders']??[],'scenario':e['scenario']===undefined?'':interpolate(e['scenario'],b),'mitigation':e['mitigation']===undefined?'':interpolate(e['mitigation'],b),...f===undefined?{}:{'related_move_error':f},'auto_fixable':AUTO_FIXABLE['has'](d['rule_id']),...d['trigger']===undefined?{}:{'trigger':d['trigger']}};});})());export function checkContactRisks(a){const {findings:b}=evaluateRuleBook(contactRuleBook(),contactRiskFacts(a));return b['map'](findingToContactRisk);}
@@ -43,6 +43,7 @@ export interface ExternalAccessMechanism {
43
43
  field: string;
44
44
  actor: string;
45
45
  limit_source: string;
46
+ flow_bound: string;
46
47
  move_anchor: string;
47
48
  }
48
49
  export declare const EXTERNAL_ACCESS_MECHANISMS: ExternalAccessMechanism[];
@@ -1 +1 @@
1
- import{EDGE_SCHEMAS}from'../graph/onchain/index.js';const LOCAL_FIELD_RULES=[{'object_type':'Service','field':'order_allocators','frozen_when':'after\x20publish','forbidden_actions':['set'],'allowed_actions':[],'unfreeze':null,'move_anchor':'service.move\x20order_allocators_set_imp\x20(assert!(!bPublished))'},{'object_type':'Service','field':'sales','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear','update'],'unfreeze':null,'move_anchor':'service.move\x20sales_*_imp\x20/\x20price_*\x20/\x20stock_*\x20(mutable\x20after\x20publish)'},{'object_type':'Service','field':'description','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20description_set_imp'},{'object_type':'Service','field':'location','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20location_set_imp'},{'object_type':'Service','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20pause_imp'},{'object_type':'Machine','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'machine.move\x20pause_imp'},{'object_type':'Treasury','field':'external_deposit_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_deposit_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'external_withdraw_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_withdraw_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'history','frozen_when':'at\x20creation\x20(append-only)','forbidden_actions':['remove','clear','set'],'allowed_actions':['add'],'unfreeze':null,'move_anchor':'treasury.move\x20parent_table::add\x20(withdraw/deposit/receive\x20append\x20only;\x20no\x20delete\x20entry)'},{'object_type':'Allocation','field':'payment_info','frozen_when':'after\x20create\x20(share)','forbidden_actions':['set','remove'],'allowed_actions':[],'unfreeze':null,'move_anchor':'allocation.move\x20create\x20(payment_info\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'}],EDGE_DERIVED_FIELD_RULES=EDGE_SCHEMAS['flatMap'](a=>{if(!a['contract'])return[];const b=a['contract'];return[{'object_type':a['source'],'field':b['field'],'frozen_when':b['frozenWhen'],'forbidden_actions':[...b['forbiddenActions']],'allowed_actions':[...b['allowedActions']],'unfreeze':b['unfreeze'],'move_anchor':b['moveAnchor']}];});export const FIELD_MUTABILITY_RULES=[...EDGE_DERIVED_FIELD_RULES,...LOCAL_FIELD_RULES];export const LOCK_CONSTRAINTS=[{'object_type':'Service','trigger':'after\x20publish\x20(bPublished=true)','locked':'remove\x20/\x20clear\x20of\x20rewards\x20/\x20arbitrations','release':'paused_time\x20present\x20and\x20paused_time\x20+\x20setting_lock_duration\x20<=\x20current\x20clock','move_anchor':'service.move\x20assert_not_published\x20(E_LOCKED_TIME_NOT_ENOUGH)'},{'object_type':'Reward','trigger':'guard_not_added_expiration_time\x20is\x20set\x20(Some)','locked':'add\x20of\x20guards','release':'clock\x20>\x20guard_not_added_expiration_time','move_anchor':'reward.move\x20guard_add_imp\x20(E_GUARD_LOCKED_TIME)'},{'object_type':'Reward','trigger':'guard.expiration_time\x20is\x20set\x20(Some)','locked':'claim','release':'clock\x20<=\x20guard.expiration_time\x20(cannot\x20claim\x20after\x20expiry)','move_anchor':'reward.move\x20claim\x20(E_GUARD_EXPIRED)'}];export const IRREVERSIBLE_OPERATIONS=[{'object_type':'Machine','operation':'publish','reason':'nodes/pairs/forwards\x20frozen\x20forever;\x20cannot\x20be\x20changed\x20again','move_anchor':'machine.move\x20publish_imp'},{'object_type':'Service','operation':'publish','reason':'machine\x20/\x20order_allocators\x20frozen\x20(rewards/arbitrations\x20need\x20pause+lock\x20before\x20remove)','move_anchor':'service.move\x20publish_imp'},{'object_type':'Permission','operation':'transfer','reason':'owner\x20change\x20is\x20irreversible;\x20the\x20old\x20owner\x20permanently\x20loses\x20control','move_anchor':'permission.move\x20transfer'},{'object_type':'Arb','operation':'arbitration\x20(award)','reason':'enters\x20Arbitrated\x20once\x20indemnity\x20is\x20set;\x20the\x20award\x20is\x20irreversible','move_anchor':'arb.move\x20arbitration'},{'object_type':'Arb','operation':'finish\x20/\x20withdraw','reason':'enters\x20terminal\x20state\x20Finished\x20/\x20Withdrawn;\x20state\x20no\x20longer\x20migrates','move_anchor':'arb.move\x20finish\x20/\x20withdraw'},{'object_type':'Payment','operation':'unwrap\x20/\x20transfer','reason':'fund\x20movement\x20is\x20irreversible','move_anchor':'payment.move\x20unwrap_with_check'},{'object_type':'Progress','operation':'task_set','reason':'task\x20is\x20set\x20once\x20and\x20cannot\x20be\x20reset\x20(permanently\x20bound\x20to\x20an\x20order/reward)','move_anchor':'progress.move\x20task_set_imp\x20(E_TASK_ALREADY_SET)'},{'object_type':'Allocation','operation':'create\x20(share)','reason':'allocators\x20/\x20payment_info\x20are\x20frozen\x20after\x20binding;\x20distribution\x20rules\x20cannot\x20change','move_anchor':'allocation.move\x20create'},{'object_type':'Reward','operation':'guard_expiration_time_add','reason':'guard_not_added_expiration_time\x20can\x20only\x20increase\x20(lock\x20cannot\x20be\x20shortened)','move_anchor':'reward.move\x20guard_expiration_time_add_imp\x20(E_GUARD_LOCKED_TIME_NOT_INCREASING)'}];export const STATE_MACHINE_TERMINALS=[{'object_type':'Arb','terminal_states':['Finished','Withdrawn'],'forbidden':'vote\x20/\x20arbitration\x20/\x20feedback\x20/\x20reset\x20(state\x20machine\x20no\x20longer\x20migrates)','move_anchor':'arb.move\x20status\x20state\x20machine\x20(7\x20states)'}];export const NUMERIC_LIMIT_CONSTRAINTS=[{'object_type':'Arb','field':'indemnity','limit':'<=\x20order.amount\x20*\x203\x20(MAX_INDEMNITY_MULTIPLE=3,\x20enforced\x20at\x20award\x20time,\x20not\x20claim\x20time)','move_anchor':'arb.move\x20arbitration\x20(E_INDEMNITY_EXCEEDS_LIMIT)'}];export const EXTERNAL_ACCESS_MECHANISMS=[{'object_type':'Treasury','field':'external_deposit_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64);\x20deposit\x20amount\x20constrained\x20by\x20Guard\x20logic;\x20store_from_id\x20points\x20to\x20the\x20fund\x20source\x20address','move_anchor':'treasury.move\x20external_deposit\x20(no\x20permission::assert)'},{'object_type':'Treasury','field':'external_withdraw_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64)\x20=\x20the\x20withdrawal\x20limit;\x20store_from_id\x20points\x20to\x20the\x20recipient\x20address','move_anchor':'treasury.move\x20external_withdraw\x20(no\x20permission::assert)'}];export function externalAccessOf(a,b){return EXTERNAL_ACCESS_MECHANISMS['find'](d=>d['object_type']===a&&d['field']===b);}export function numericLimitOf(a,b){return NUMERIC_LIMIT_CONSTRAINTS['find'](d=>d['object_type']===a&&d['field']===b);}export function fieldMutabilityOf(a,b){return FIELD_MUTABILITY_RULES['find'](c=>c['object_type']===a&&c['field']===b);}export function isActionForbidden(a,b,c,d){const e=fieldMutabilityOf(a,b);if(!e)return![];if(!d)return![];return e['forbidden_actions']['includes'](c);}export function lockConstraintOf(a){return LOCK_CONSTRAINTS['find'](b=>b['object_type']===a);}
1
+ import{EDGE_SCHEMAS}from'../graph/onchain/index.js';const LOCAL_FIELD_RULES=[{'object_type':'Service','field':'order_allocators','frozen_when':'after\x20publish','forbidden_actions':['set'],'allowed_actions':[],'unfreeze':null,'move_anchor':'service.move\x20order_allocators_set_imp\x20(assert!(!bPublished))'},{'object_type':'Service','field':'sales','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear','update'],'unfreeze':null,'move_anchor':'service.move\x20sales_*_imp\x20/\x20price_*\x20/\x20stock_*\x20(mutable\x20after\x20publish)'},{'object_type':'Service','field':'description','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20description_set_imp'},{'object_type':'Service','field':'location','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20location_set_imp'},{'object_type':'Service','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20pause_imp'},{'object_type':'Machine','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'machine.move\x20pause_imp'},{'object_type':'Treasury','field':'external_deposit_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_deposit_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'external_withdraw_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_withdraw_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'history','frozen_when':'at\x20creation\x20(append-only)','forbidden_actions':['remove','clear','set'],'allowed_actions':['add'],'unfreeze':null,'move_anchor':'treasury.move\x20parent_table::add\x20(withdraw/deposit/receive\x20append\x20only;\x20no\x20delete\x20entry)'},{'object_type':'Allocation','field':'payment_info','frozen_when':'after\x20create\x20(share)','forbidden_actions':['set','remove'],'allowed_actions':[],'unfreeze':null,'move_anchor':'allocation.move\x20create\x20(payment_info\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'}],EDGE_DERIVED_FIELD_RULES=EDGE_SCHEMAS['flatMap'](a=>{if(!a['contract'])return[];const b=a['contract'];return[{'object_type':a['source'],'field':b['field'],'frozen_when':b['frozenWhen'],'forbidden_actions':[...b['forbiddenActions']],'allowed_actions':[...b['allowedActions']],'unfreeze':b['unfreeze'],'move_anchor':b['moveAnchor']}];});export const FIELD_MUTABILITY_RULES=[...EDGE_DERIVED_FIELD_RULES,...LOCAL_FIELD_RULES];export const LOCK_CONSTRAINTS=[{'object_type':'Service','trigger':'after\x20publish\x20(bPublished=true)','locked':'remove\x20/\x20clear\x20of\x20rewards\x20/\x20arbitrations','release':'paused_time\x20present\x20and\x20paused_time\x20+\x20setting_lock_duration\x20<=\x20current\x20clock','move_anchor':'service.move\x20assert_not_published\x20(E_LOCKED_TIME_NOT_ENOUGH)'},{'object_type':'Reward','trigger':'guard_not_added_expiration_time\x20is\x20set\x20(Some)','locked':'add\x20of\x20guards','release':'clock\x20>\x20guard_not_added_expiration_time','move_anchor':'reward.move\x20guard_add_imp\x20(E_GUARD_LOCKED_TIME)'},{'object_type':'Reward','trigger':'guard.expiration_time\x20is\x20set\x20(Some)','locked':'claim','release':'clock\x20<=\x20guard.expiration_time\x20(cannot\x20claim\x20after\x20expiry)','move_anchor':'reward.move\x20claim\x20(E_GUARD_EXPIRED)'}];export const IRREVERSIBLE_OPERATIONS=[{'object_type':'Machine','operation':'publish','reason':'nodes/pairs/forwards\x20frozen\x20forever;\x20cannot\x20be\x20changed\x20again','move_anchor':'machine.move\x20publish_imp'},{'object_type':'Service','operation':'publish','reason':'machine\x20/\x20order_allocators\x20frozen\x20(rewards/arbitrations\x20need\x20pause+lock\x20before\x20remove)','move_anchor':'service.move\x20publish_imp'},{'object_type':'Permission','operation':'transfer','reason':'owner\x20change\x20is\x20irreversible;\x20the\x20old\x20owner\x20permanently\x20loses\x20control','move_anchor':'permission.move\x20transfer'},{'object_type':'Arb','operation':'arbitration\x20(award)','reason':'enters\x20Arbitrated\x20once\x20indemnity\x20is\x20set;\x20the\x20award\x20is\x20irreversible','move_anchor':'arb.move\x20arbitration'},{'object_type':'Arb','operation':'finish\x20/\x20withdraw','reason':'enters\x20terminal\x20state\x20Finished\x20/\x20Withdrawn;\x20state\x20no\x20longer\x20migrates','move_anchor':'arb.move\x20finish\x20/\x20withdraw'},{'object_type':'Payment','operation':'unwrap\x20/\x20transfer','reason':'fund\x20movement\x20is\x20irreversible','move_anchor':'payment.move\x20unwrap_with_check'},{'object_type':'Progress','operation':'task_set','reason':'task\x20is\x20set\x20once\x20and\x20cannot\x20be\x20reset\x20(permanently\x20bound\x20to\x20an\x20order/reward)','move_anchor':'progress.move\x20task_set_imp\x20(E_TASK_ALREADY_SET)'},{'object_type':'Allocation','operation':'create\x20(share)','reason':'allocators\x20/\x20payment_info\x20are\x20frozen\x20after\x20binding;\x20distribution\x20rules\x20cannot\x20change','move_anchor':'allocation.move\x20create'},{'object_type':'Reward','operation':'guard_expiration_time_add','reason':'guard_not_added_expiration_time\x20can\x20only\x20increase\x20(lock\x20cannot\x20be\x20shortened)','move_anchor':'reward.move\x20guard_expiration_time_add_imp\x20(E_GUARD_LOCKED_TIME_NOT_INCREASING)'}];export const STATE_MACHINE_TERMINALS=[{'object_type':'Arb','terminal_states':['Finished','Withdrawn'],'forbidden':'vote\x20/\x20arbitration\x20/\x20feedback\x20/\x20reset\x20(state\x20machine\x20no\x20longer\x20migrates)','move_anchor':'arb.move\x20status\x20state\x20machine\x20(7\x20states)'}];export const NUMERIC_LIMIT_CONSTRAINTS=[{'object_type':'Arb','field':'indemnity','limit':'<=\x20order.amount\x20*\x203\x20(MAX_INDEMNITY_MULTIPLE=3,\x20enforced\x20at\x20award\x20time,\x20not\x20claim\x20time)','move_anchor':'arb.move\x20arbitration\x20(E_INDEMNITY_EXCEEDS_LIMIT)'}];export const EXTERNAL_ACCESS_MECHANISMS=[{'object_type':'Treasury','field':'external_deposit_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64);\x20the\x20deposit\x20amount\x20is\x20constrained\x20by\x20Guard\x20logic;\x20optional\x20store_from_id\x20resolves\x20an\x20address\x20from\x20another\x20submission\x20slot\x20for\x20record-keeping','flow_bound':'the\x20deposited\x20Coin\x20is\x20a\x20transaction\x20argument,\x20so\x20value\x20can\x20only\x20come\x20from\x20the\x20transaction\x20sender','move_anchor':'treasury.move\x20external_deposit\x20(no\x20permission::assert)'},{'object_type':'Treasury','field':'external_withdraw_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64)\x20=\x20the\x20withdrawal\x20amount;\x20optional\x20store_from_id\x20resolves\x20an\x20address\x20from\x20another\x20submission\x20slot\x20for\x20record-keeping\x20(it\x20is\x20NOT\x20the\x20destination)','flow_bound':'recipient\x20is\x20a\x20bare\x20address\x20parameter\x20no\x20guard\x20predicate\x20can\x20constrain;\x20funds\x20release\x20only\x20to\x20the\x20transaction\x20sender\x20—\x20a\x20mismatch\x20aborts\x20with\x20EEXTERNAL_RECIPIENT_NOT_SIGNER\x20(treasury\x20code\x2010).\x20Pay\x20another\x20address\x20via\x20the\x20permissioned\x20withdraw\x20(index\x20254)','move_anchor':'treasury.move\x20external_withdraw\x20assert!(*recipient\x20==\x20tx_context::sender(ctx))'}];export function externalAccessOf(a,b){return EXTERNAL_ACCESS_MECHANISMS['find'](d=>d['object_type']===a&&d['field']===b);}export function numericLimitOf(a,b){return NUMERIC_LIMIT_CONSTRAINTS['find'](d=>d['object_type']===a&&d['field']===b);}export function fieldMutabilityOf(a,b){return FIELD_MUTABILITY_RULES['find'](c=>c['object_type']===a&&c['field']===b);}export function isActionForbidden(a,b,c,d){const e=fieldMutabilityOf(a,b);if(!e)return![];if(!d)return![];return e['forbidden_actions']['includes'](c);}export function lockConstraintOf(a){return LOCK_CONSTRAINTS['find'](b=>b['object_type']===a);}
@@ -1,4 +1,5 @@
1
- export type DemandRiskLevel = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "INFO";
1
+ import { type Facts } from "../config/rule-engine.js";
2
+ export type DemandRiskLevel = "critical" | "high" | "medium" | "low" | "info";
2
3
  export type DemandRiskCategory = "structural" | "semantic" | "lifecycle" | "knowledge";
3
4
  export type DemandStakeholder = "creator" | "presenter" | "consumer" | "system";
4
5
  export interface DemandRisk {
@@ -22,9 +23,8 @@ export interface DemandRiskCheckContext {
22
23
  guards_non_empty?: boolean;
23
24
  constants_synced?: boolean;
24
25
  }
25
- export declare const DEMAND_RISK_RULES: {
26
- rule: DemandRisk;
27
- check: (ctx: DemandRiskCheckContext) => DemandRisk | null;
28
- }[];
26
+ export declare function demandRiskFacts(ctx: DemandRiskCheckContext): Facts;
27
+ export declare const DEMAND_RISK_RULES: Array<DemandRisk & {
28
+ trigger?: string;
29
+ }>;
29
30
  export declare function checkDemandRisks(ctx: DemandRiskCheckContext): DemandRisk[];
30
- export declare function getDemandRiskById(id: string): DemandRisk | undefined;
@@ -1 +1 @@
1
- import{MAX_REWARD_COUNT,MAX_GUARD_COUNT_DEMAND}from'@wowok/wowok';const MAX_FEEDBACK_COUNT=0x14,R_DEM_1_01={'rule':{'id':'R-DEM-01','level':'HIGH','category':'structural','title':'rewards\x20count\x20exceeds\x20MAX_REWARD_COUNT\x20('+MAX_REWARD_COUNT+')','description':'The\x20\x27rewards\x27\x20vector\x20is\x20bounded\x20by\x20MAX_REWARD_COUNT='+MAX_REWARD_COUNT+'\x20(Move\x20source:\x20demand.move:21).\x20'+'Exceeding\x20this\x20limit\x20aborts\x20with\x20E_MAX_REWARD_COUNT_EXCEEDED\x20(1).\x20Each\x20reward\x20is\x20bound\x20via\x20object_linker::affiliation_core,\x20'+'so\x20adding\x20a\x20reward\x20also\x20triggers\x20object_linker::affiliation_core.\x20Use\x20reward_remove/reward_clear\x20to\x20free\x20slots\x20before\x20'+'adding\x20new\x20ones\x20if\x20the\x20limit\x20is\x20reached.','affected_stakeholders':['creator'],'scenario':'Caller\x20calls\x20reward_add\x20when\x2020\x20rewards\x20are\x20already\x20affiliated','mitigation':'Track\x20the\x20current\x20reward\x20count.\x20Before\x20adding\x20a\x20new\x20reward,\x20call\x20reward_remove\x20or\x20reward_clear\x20to\x20'+'free\x20a\x20slot.\x20Consider\x20consolidating\x20rewards\x20into\x20a\x20single\x20Reward\x20object\x20with\x20multiple\x20tiers\x20if\x20the\x20'+'\x20Demand\x20needs\x20to\x20offer\x20more\x20than\x2020\x20distinct\x20reward\x20paths.','related_move_error':'E_MAX_REWARD_COUNT_EXCEEDED\x20(1)','auto_fixable':![]},'check':a=>{if(a['reward_count']===undefined)return null;if(a['reward_count']<=MAX_REWARD_COUNT)return null;return{...R_DEM_1_01['rule'],'evidence':'reward_count='+a['reward_count']+',\x20limit='+MAX_REWARD_COUNT};}},R_DEM_1_02={'rule':{'id':'R-DEM-02','level':'HIGH','category':'structural','title':'guards\x20count\x20exceeds\x20MAX_GUARD_COUNT_DEMAND\x20('+MAX_GUARD_COUNT_DEMAND+')','description':'The\x20\x27guards\x27\x20vector\x20is\x20bounded\x20by\x20MAX_GUARD_COUNT_DEMAND='+MAX_GUARD_COUNT_DEMAND+'\x20(Move\x20source:\x20demand.move:22).\x20'+'Exceeding\x20this\x20limit\x20aborts\x20with\x20E_MAX_GUARD_COUNT_EXCEEDED\x20(2).\x20Each\x20guard\x20carries\x20an\x20optional\x20'+'service_identifier\x20(u8)\x20that\x20routes\x20present_with_passport\x20submissions\x20to\x20a\x20specific\x20Service\x20submission\x20'+'extracted\x20from\x20the\x20Passport.\x20Adding\x20a\x20duplicate\x20guard\x20updates\x20the\x20service_identifier\x20instead\x20of\x20pushing.','affected_stakeholders':['creator','presenter'],'scenario':'Caller\x20calls\x20guard_add\x20when\x2020\x20guards\x20are\x20already\x20affiliated\x20and\x20the\x20address\x20is\x20new','mitigation':'Track\x20the\x20current\x20guard\x20count.\x20Before\x20adding\x20a\x20new\x20guard,\x20call\x20guard_remove\x20or\x20guard_clear.\x20'+'If\x20updating\x20an\x20existing\x20guard\x27s\x20service_identifier,\x20call\x20guard_add\x20with\x20the\x20same\x20address\x20(it\x20updates\x20'+'in\x20place\x20rather\x20than\x20pushing).','related_move_error':'E_MAX_GUARD_COUNT_EXCEEDED\x20(2)','auto_fixable':![]},'check':a=>{if(a['guard_count']===undefined)return null;if(a['guard_count']<=MAX_GUARD_COUNT_DEMAND)return null;return{...R_DEM_1_02['rule'],'evidence':'guard_count='+a['guard_count']+',\x20limit='+MAX_GUARD_COUNT_DEMAND};}},R_DEM_1_03={'rule':{'id':'R-DEM-03','level':'MEDIUM','category':'structural','title':'feedback\x20batch\x20exceeds\x20MAX_FEEDBACK_COUNT\x20('+MAX_FEEDBACK_COUNT+')','description':'The\x20\x27feedback\x27\x20Move\x20function\x20(demand.move:352)\x20updates\x20ONE\x20presenter\x20per\x20call\x20(feedback_imp\x20iterates\x20'+('no\x20vector).\x20The\x20SDK\x20batches\x20multiple\x20feedback\x20calls\x20and\x20caps\x20the\x20batch\x20at\x20MAX_FEEDBACK_COUNT='+MAX_FEEDBACK_COUNT+'\x20')+'(SDK-only\x20limit,\x20NOT\x20in\x20onchain-constants.ts\x20—\x20Move\x20has\x20no\x20aggregate\x20feedback-count\x20check).\x20Exceeding\x20the\x20'+'SDK\x20batch\x20limit\x20causes\x20the\x20SDK\x20to\x20refuse\x20the\x20call\x20before\x20transaction\x20building.\x20Each\x20feedback\x20entry\x20writes\x20'+'a\x20String\x20(bounded\x20by\x20common::DESCRIPTION,\x204000\x20chars)\x20and\x20an\x20optional\x20u8\x20acceptance_score\x20to\x20a\x20presenter\x27s\x20'+'ServiceInfo\x20record.','affected_stakeholders':['creator'],'scenario':'Caller\x20attempts\x20to\x20submit\x2021\x20feedback\x20entries\x20in\x20a\x20single\x20SDK\x20call','mitigation':'Split\x20the\x20feedback\x20batch\x20into\x20chunks\x20of\x20≤\x2020\x20entries.\x20If\x20the\x20Demand\x20has\x20more\x20than\x2020\x20presenters\x20to\x20'+'give\x20feedback\x20on,\x20submit\x20multiple\x20transactions.\x20Consider\x20whether\x20bulk\x20feedback\x20is\x20appropriate\x20—\x20'+'individualized\x20feedback\x20per\x20presenter\x20is\x20often\x20more\x20meaningful.','auto_fixable':![]},'check':a=>{if(a['feedback_count']===undefined)return null;if(a['feedback_count']<=MAX_FEEDBACK_COUNT)return null;return{...R_DEM_1_03['rule'],'evidence':'feedback_count='+a['feedback_count']+',\x20limit='+MAX_FEEDBACK_COUNT};}},R_DEM_2_01={'rule':{'id':'R-DEM-04','level':'HIGH','category':'semantic','title':'present\x20called\x20without\x20passport\x20when\x20guards\x20vector\x20is\x20non-empty','description':'The\x20Move\x20present\x20function\x20(demand.move:100)\x20asserts\x20`vector::is_empty(&self.guards)`\x20and\x20aborts\x20with\x20'+'E_NEED_PASSPORT\x20(3)\x20if\x20the\x20guards\x20vector\x20is\x20non-empty.\x20When\x20guards\x20exist,\x20every\x20presenter\x20MUST\x20go\x20through\x20'+'present_with_passport\x20(or\x20present_service_with_passport),\x20which\x20routes\x20through\x20present_with_passport_imp.\x20'+'That\x20function\x20looks\x20up\x20the\x20specified\x20Guard\x20in\x20the\x20guards\x20vector,\x20calls\x20passport::result_for_guard\x20to\x20'+'verify\x20the\x20Passport,\x20and\x20(if\x20service_identifier\x20is\x20set)\x20extracts\x20the\x20submission\x20address\x20from\x20the\x20Passport.\x20'+'Calling\x20plain\x20`present`\x20on\x20a\x20guarded\x20Demand\x20always\x20aborts\x20—\x20there\x20is\x20no\x20fallback\x20path.','affected_stakeholders':['presenter','creator'],'scenario':'Demand\x20has\x202\x20guards;\x20a\x20presenter\x20calls\x20present()\x20instead\x20of\x20present_with_passport()','mitigation':'Before\x20presenting,\x20query\x20the\x20Demand\x27s\x20guards\x20vector.\x20If\x20non-empty,\x20use\x20present_with_passport\x20and\x20'+'supply\x20a\x20Guard\x20+\x20Passport.\x20The\x20Guard\x20address\x20must\x20already\x20be\x20in\x20the\x20guards\x20vector\x20(otherwise\x20'+'E_GUARD_NOT_FOUND\x20(4)\x20aborts).\x20If\x20service_identifier\x20is\x20set\x20on\x20the\x20matching\x20guard,\x20the\x20submission\x20'+'address\x20is\x20extracted\x20from\x20the\x20Passport\x20—\x20do\x20not\x20pass\x20a\x20separate\x20service\x20parameter.','related_move_error':'E_NEED_PASSPORT\x20(3)','auto_fixable':![]},'check':a=>{if(!a['using_present_without_passport'])return null;if(!a['guards_non_empty'])return null;return{...R_DEM_2_01['rule'],'evidence':'guards_non_empty=true,\x20using\x20present\x20(no\x20passport)'};}},R_DEM_3_01={'rule':{'id':'R-DEM-05','level':'INFO','category':'lifecycle','title':'um_set_imp\x20object-linker\x20dependency\x20leak\x20—\x20RESOLVED\x20(P-DEM-P1-1)','description':'PREVIOUS\x20RISK:\x20um_set_imp\x20(demand.move:139-147)\x20previously\x20set\x20self.um\x20to\x20the\x20new\x20Contact\x20address\x20'+'BEFORE\x20disaffiliating\x20the\x20old\x20um,\x20causing\x20the\x20old\x20Contact\x20to\x20retain\x20a\x20stale\x20object-linker\x20binding\x20record\x20in\x20the\x20'+'object_linker.\x20affiliation_change_core\x20was\x20not\x20called\x20for\x20the\x20old\x20um,\x20leading\x20to\x20an\x20object-linker\x20dependency\x20leak.\x0a\x0a'+'FIX\x20(P-DEM-P1-1):\x20um_set_imp\x20now\x20disaffiliates\x20the\x20old\x20um\x20via\x20object_linker::disaffiliation_core\x20BEFORE\x20setting\x20'+'the\x20new\x20one.\x20The\x20new\x20um\x20is\x20then\x20affiliated\x20via\x20object_linker::affiliation_core.\x20This\x20matches\x20the\x20pattern\x20used\x20'+'by\x20permission_set\x20(which\x20uses\x20affiliation_change_core).\x20um_none_imp\x20also\x20disaffiliates\x20before\x20clearing.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','system'],'scenario':'Future\x20regression:\x20someone\x20reorders\x20um_set_imp\x20to\x20set\x20new\x20before\x20disaffiliating\x20old','mitigation':'Keep\x20the\x20disaffiliate-then-set\x20ordering.\x20The\x20Move\x20invariant:\x20any\x20path\x20that\x20mutates\x20self.um\x20MUST\x20call\x20'+'object_linker::disaffiliation_core\x20on\x20the\x20old\x20value\x20before\x20assigning\x20a\x20new\x20one.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_3_01['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_2_02={'rule':{'id':'R-DEM-06','level':'INFO','category':'semantic','title':'guard_add_imp\x20service_identifier\x20type\x20check\x20skipped\x20on\x20early\x20return\x20—\x20RESOLVED\x20(P-DEM-P1-2)','description':'PREVIOUS\x20RISK:\x20guard_add_imp\x20(demand.move:213-242)\x20previously\x20had\x20the\x20service_identifier\x20type\x20check\x20'+'AFTER\x20the\x20early-return\x20path\x20that\x20updates\x20an\x20existing\x20guard\x27s\x20service_identifier.\x20When\x20a\x20guard\x20with\x20'+'the\x20same\x20address\x20already\x20existed,\x20the\x20function\x20returned\x20before\x20validating\x20the\x20new\x20service_identifier\x20'+'against\x20guard::get_submission_object_type.\x20This\x20allowed\x20setting\x20an\x20invalid\x20service_identifier\x20that\x20'+'would\x20later\x20fail\x20at\x20present_with_passport\x20time\x20with\x20E_INVALID_SERVICE_OBJECT_TYPE\x20(common.move:13).\x0a\x0a'+'FIX\x20(P-DEM-P1-2):\x20The\x20service_identifier\x20type\x20check\x20now\x20runs\x20FIRST\x20(demand.move:218-222),\x20BEFORE\x20the\x20'+'duplicate-detection\x20loop.\x20common::assert_service_object_type\x20is\x20called\x20for\x20any\x20non-None\x20service_identifier,\x20'+'ensuring\x20both\x20the\x20insert\x20and\x20update\x20paths\x20validate\x20the\x20type.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','presenter'],'scenario':'Future\x20regression:\x20someone\x20moves\x20the\x20type\x20check\x20back\x20to\x20after\x20the\x20duplicate-detection\x20loop','mitigation':'Keep\x20the\x20type\x20check\x20at\x20the\x20top\x20of\x20guard_add_imp.\x20The\x20Move\x20invariant:\x20any\x20service_identifier\x20provided\x20'+'to\x20guard_add\x20MUST\x20be\x20validated\x20via\x20guard::get_submission_object_type\x20+\x20common::assert_service_object_type\x20'+'BEFORE\x20any\x20mutation\x20of\x20the\x20guards\x20vector.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_2_02['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_4_01={'rule':{'id':'R-DEM-07','level':'INFO','category':'knowledge','title':'Demand\x20matching\x20must\x20not\x20read\x20non-existent\x20Move\x20fields\x20—\x20RESOLVED\x20(P-DEM-P1-3)','description':'PREVIOUS\x20RISK:\x20the\x20retired\x20demand-matching.ts\x20engine\x20(matchDemand/extractDemandInfo)\x20read\x20fields\x20(tags,\x20'+'maxPrice,\x20scenario,\x20minTrustScore,\x20keywords)\x20that\x20do\x20NOT\x20exist\x20on\x20the\x20Move\x20Demand\x20struct.\x20The\x20Move\x20struct\x20'+'only\x20has:\x20description,\x20location,\x20rewards,\x20guards,\x20presenters,\x20um,\x20permission.\x20This\x20caused\x20the\x20matching\x20'+'engine\x20to\x20silently\x20produce\x20undefined\x20values\x20when\x20fed\x20raw\x20on-chain\x20query\x20results.\x0a\x0a'+'FIX\x20(P-DEM-P1-3):\x20the\x20capability-vector\x20engine\x20(evaluation/builtins/demand-match.ts)\x20enriches\x20via\x20'+'evaluation/extract.ts\x20(extractDemandCapability/extractServiceCapability).\x20Only\x20`location`\x20maps\x20directly\x20'+'to\x20the\x20Move\x20Demand\x20struct;\x20all\x20other\x20signals\x20(industry/tags/keywords/region/trust/price\x20budget)\x20are\x20'+'enriched\x20from\x20description\x20NLP,\x20the\x20industry\x20generalizer,\x20or\x20caller-injected\x20overrides/data\x20sources.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['system'],'scenario':'Future\x20regression:\x20someone\x20removes\x20the\x20enrichment\x20contract\x20docs\x20from\x20evaluation/extract.ts','mitigation':'Keep\x20the\x20enrichment\x20contract\x20in\x20evaluation/extract.ts\x20(non-chain-derivable\x20fields\x20are\x20enriched\x20there,\x20'+'not\x20read\x20as\x20on-chain\x20fact).\x20The\x20matching\x20engine\x20must\x20never\x20query\x20on-chain\x20data\x20directly\x20—\x20it\x20scores\x20'+'over\x20already-enriched\x20capability\x20vectors.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_4_01['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}},R_DEM_4_02={'rule':{'id':'R-DEM-08','level':'INFO','category':'knowledge','title':'permission_set\x20not\x20exposed\x20in\x20SDK\x20—\x20RESOLVED\x20(DE-D-2=A)','description':'PREVIOUS\x20GAP:\x20The\x20Move\x20permission_set\x20function\x20(demand.move:286)\x20was\x20not\x20exposed\x20as\x20a\x20standalone\x20'+'function\x20in\x20the\x20SDK\x27s\x20call/demand.ts.\x20Callers\x20could\x20not\x20change\x20the\x20Permission\x20object\x20bound\x20to\x20a\x20Demand\x20'+'after\x20creation.\x0a\x0a'+'RESOLUTION\x20(DE-D-2=A):\x20permission_set\x20is\x20now\x20exposed\x20via\x20the\x20CallPermission.apply\x20mechanism.\x20The\x20SDK\x20'+'wraps\x20permission_set\x20by\x20routing\x20it\x20through\x20CallPermission,\x20which\x20performs\x20the\x20assert_owner\x20check\x20on\x20the\x20'+'old\x20Permission\x20and\x20updates\x20the\x20Demand\x27s\x20bound\x20permission.\x20object_linker\x27s\x20affiliation_change_core\x20is\x20called\x20'+'to\x20migrate\x20the\x20binding\x20from\x20the\x20old\x20Permission\x20to\x20the\x20new\x20one.\x0a\x0a'+'Permission\x20indices\x20for\x20Demand\x20(demand.move:20):\x20400=DEMAND_NEW,\x20401=DEMAND_DESCRIPTION,\x20402=DEMAND_LOCATION,\x20'+'404=DEMAND_GUARD,\x20405=DEMAND_REWARD,\x20406=DEMAND_FEEDBACK,\x20407=DEMAND_OWNER_RECEIVE,\x20408=DEMAND_UM.\x0a\x0a'+'This\x20rule\x20is\x20retained\x20for\x20historical\x20audit\x20and\x20to\x20detect\x20regressions.','affected_stakeholders':['creator','system'],'scenario':'Future\x20regression:\x20someone\x20removes\x20the\x20CallPermission.apply\x20path\x20for\x20permission_set','mitigation':'Keep\x20permission_set\x20exposed\x20via\x20CallPermission.apply.\x20The\x20Move\x20invariant:\x20permission_set\x20requires\x20'+'permission::assert_owner(old)\x20and\x20MUST\x20call\x20object_linker::affiliation_change_core\x20to\x20migrate\x20the\x20binding.','auto_fixable':![]},'check':a=>{if(a['constants_synced'])return null;return{...R_DEM_4_02['rule'],'evidence':'constants_synced=false\x20(regression\x20check)'};}};export const DEMAND_RISK_RULES=[R_DEM_1_01,R_DEM_1_02,R_DEM_1_03,R_DEM_2_01,R_DEM_3_01,R_DEM_2_02,R_DEM_4_01,R_DEM_4_02];export function checkDemandRisks(a){const b=[];for(const c of DEMAND_RISK_RULES){const d=c['check'](a);if(d)b['push'](d);}return b;}export function getDemandRiskById(a){return DEMAND_RISK_RULES['find'](b=>b['rule']['id']===a)?.['rule'];}
1
+ import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook,interpolate}from'../config/rule-engine.js';import{MAX_REWARD_COUNT,MAX_GUARD_COUNT_DEMAND}from'@wowok/wowok';const MAX_FEEDBACK_COUNT=0x14;export function demandRiskFacts(a){return{'reward_count':a['reward_count'],'reward_count_over_limit':a['reward_count']!==undefined&&a['reward_count']>MAX_REWARD_COUNT,'guard_count':a['guard_count'],'guard_count_over_limit':a['guard_count']!==undefined&&a['guard_count']>MAX_GUARD_COUNT_DEMAND,'feedback_count':a['feedback_count'],'feedback_count_over_limit':a['feedback_count']!==undefined&&a['feedback_count']>MAX_FEEDBACK_COUNT,'using_present_without_passport':a['using_present_without_passport'],'guards_non_empty':a['guards_non_empty'],'constants_synced':a['constants_synced'],'max_reward_count':MAX_REWARD_COUNT,'max_guard_count_demand':MAX_GUARD_COUNT_DEMAND,'max_feedback_count':MAX_FEEDBACK_COUNT};}function demandRuleBook(){const a=getJudgmentDoc()['rules']['domains']['demand'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27demand\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToDemandRisk(a){return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'structural','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],'auto_fixable':![]};}export const DEMAND_RISK_RULES=((()=>{const a=factoryRulePack('demand');if(!a)return[];const b=demandRiskFacts({});return a['rules']['map'](d=>{const e=d['cases'][0x0];return{'id':d['rule_id'],'level':e['level'],'category':d['dimension']??'structural','title':interpolate(e['title'],b),'description':interpolate(e['description'],b),'affected_stakeholders':e['stakeholders']??[],'scenario':e['scenario']===undefined?'':interpolate(e['scenario'],b),'mitigation':e['mitigation']===undefined?'':interpolate(e['mitigation'],b),'auto_fixable':![],...d['trigger']===undefined?{}:{'trigger':d['trigger']}};});})());export function checkDemandRisks(a){const {findings:b}=evaluateRuleBook(demandRuleBook(),demandRiskFacts(a));return b['map'](findingToDemandRisk);}