@wowok/agent-mcp 3.4.3 → 3.4.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 (853) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/build-stamp.js +1 -0
  3. package/dist/chain-semantics/composition-truth.js +1 -1
  4. package/dist/chain-semantics/eval-order.js +1 -1
  5. package/dist/chain-semantics/freeze-map.js +1 -1
  6. package/dist/chain-semantics/fund-flow.js +1 -1
  7. package/dist/chain-semantics/object-graph.js +1 -1
  8. package/dist/composition/audit.js +1 -1
  9. package/dist/composition/compile.js +1 -1
  10. package/dist/composition/emit-phases.js +1 -1
  11. package/dist/composition/generate.js +1 -1
  12. package/dist/composition/guard-fill.js +1 -1
  13. package/dist/composition/input-normalize.js +1 -1
  14. package/dist/composition/materialize.js +1 -1
  15. package/dist/composition/mode-gates.js +1 -1
  16. package/dist/composition/plan.js +1 -1
  17. package/dist/composition/product-card.js +1 -1
  18. package/dist/composition/shape-expand.js +1 -0
  19. package/dist/config/judgment.js +1 -1
  20. package/dist/config/template-params.js +1 -1
  21. package/dist/data/sync/cdc.js +1 -1
  22. package/dist/data/sync/graphql-source.js +1 -1
  23. package/dist/evaluation/engine.js +1 -1
  24. package/dist/experience/realtime-feedback.js +1 -1
  25. package/dist/graph/onchain/expand.js +1 -1
  26. package/dist/graph/onchain/exposure.js +1 -1
  27. package/dist/graph/onchain/sdk-batch.js +1 -1
  28. package/dist/harness/entry-ignite-selfheal.js +1 -0
  29. package/dist/harness/forward-leg-preflight.js +1 -0
  30. package/dist/harness/recover.js +1 -1
  31. package/dist/keeper/detectors.js +1 -1
  32. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  33. package/dist/knowledge/arb-operation-face.js +1 -0
  34. package/dist/knowledge/arbitration-rail-verifier.js +1 -1
  35. package/dist/knowledge/arbitration-templates.js +1 -1
  36. package/dist/knowledge/audit-rules.d.ts +15 -0
  37. package/dist/knowledge/audit-rules.js +1 -1
  38. package/dist/knowledge/baselines/rules/alloc_audit.json.good +310 -0
  39. package/dist/knowledge/baselines/rules/allocation.json.good +568 -0
  40. package/dist/knowledge/baselines/rules/arb.json.good +174 -0
  41. package/dist/knowledge/baselines/rules/arbitration.json.good +393 -0
  42. package/dist/knowledge/baselines/rules/bridge.json.good +197 -0
  43. package/dist/knowledge/baselines/rules/contact.json.good +152 -0
  44. package/dist/knowledge/baselines/rules/demand.json.good +158 -0
  45. package/dist/knowledge/baselines/rules/graph.json.good +534 -0
  46. package/dist/knowledge/baselines/rules/guard.json +18 -5
  47. package/dist/knowledge/baselines/rules/guard.json.good +1192 -0
  48. package/dist/knowledge/baselines/rules/machine.json.good +734 -0
  49. package/dist/knowledge/baselines/rules/oracle.json +1 -1
  50. package/dist/knowledge/baselines/rules/oracle.json.good +120 -0
  51. package/dist/knowledge/baselines/rules/order.json.good +549 -0
  52. package/dist/knowledge/baselines/rules/payment.json.good +205 -0
  53. package/dist/knowledge/baselines/rules/permission.json.good +330 -0
  54. package/dist/knowledge/baselines/rules/personal.json.good +139 -0
  55. package/dist/knowledge/baselines/rules/plan.json +343 -1
  56. package/dist/knowledge/baselines/rules/plan.json.good +1187 -0
  57. package/dist/knowledge/baselines/rules/progress.json.good +364 -0
  58. package/dist/knowledge/baselines/rules/proof.json.good +158 -0
  59. package/dist/knowledge/baselines/rules/registrar.json.good +159 -0
  60. package/dist/knowledge/baselines/rules/repository.json.good +244 -0
  61. package/dist/knowledge/baselines/rules/resource.json.good +117 -0
  62. package/dist/knowledge/baselines/rules/reward.json +10 -10
  63. package/dist/knowledge/baselines/rules/reward.json.good +586 -0
  64. package/dist/knowledge/baselines/rules/service.json.good +595 -0
  65. package/dist/knowledge/baselines/rules/treasury.json.good +440 -0
  66. package/dist/knowledge/baselines/rules/util.json.good +101 -0
  67. package/dist/knowledge/builtin-templates.d.ts +13 -1
  68. package/dist/knowledge/builtin-templates.js +1 -1
  69. package/dist/knowledge/chain-query-registry.js +1 -1
  70. package/dist/knowledge/discount-threshold.js +1 -1
  71. package/dist/knowledge/fee-param-bindings.js +1 -1
  72. package/dist/knowledge/fund-layer.d.ts +2 -0
  73. package/dist/knowledge/fund-layer.js +1 -1
  74. package/dist/knowledge/getting-started.js +1 -1
  75. package/dist/knowledge/guard-binding-table.js +1 -1
  76. package/dist/knowledge/guard-binding-verifier.js +1 -1
  77. package/dist/knowledge/guard-create-preflight.js +1 -0
  78. package/dist/knowledge/guard-field-cognition.js +1 -1
  79. package/dist/knowledge/guard-host-context.js +1 -1
  80. package/dist/knowledge/guard-leg-eval.js +1 -0
  81. package/dist/knowledge/guard-node-gates.js +1 -1
  82. package/dist/knowledge/guard-puzzle.js +1 -1
  83. package/dist/knowledge/guard-quality.js +1 -0
  84. package/dist/knowledge/guard-render.js +1 -1
  85. package/dist/knowledge/guard-risk.js +1 -1
  86. package/dist/knowledge/guard-semantic-walk.js +1 -0
  87. package/dist/knowledge/guard-templates.d.ts +1 -0
  88. package/dist/knowledge/guard-templates.js +1 -1
  89. package/dist/knowledge/guard-translation.js +1 -1
  90. package/dist/knowledge/index.js +1 -1
  91. package/dist/knowledge/industry-registry.js +1 -1
  92. package/dist/knowledge/jsonrpc-enum.js +1 -1
  93. package/dist/knowledge/param-schema.js +1 -1
  94. package/dist/knowledge/param-tiers.js +1 -1
  95. package/dist/knowledge/path-oracle/coverage.js +1 -1
  96. package/dist/knowledge/path-oracle/index.js +1 -1
  97. package/dist/knowledge/path-oracle/products/airbnb.js +1 -0
  98. package/dist/knowledge/path-oracle/products/algora.js +1 -0
  99. package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -0
  100. package/dist/knowledge/path-oracle/products/amazon.js +1 -0
  101. package/dist/knowledge/path-oracle/products/beatstars.js +1 -0
  102. package/dist/knowledge/path-oracle/products/booking-com.js +1 -0
  103. package/dist/knowledge/path-oracle/products/contra.js +1 -0
  104. package/dist/knowledge/path-oracle/products/costco.js +1 -0
  105. package/dist/knowledge/path-oracle/products/coursera.js +1 -0
  106. package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -0
  107. package/dist/knowledge/path-oracle/products/etsy.js +1 -0
  108. package/dist/knowledge/path-oracle/products/food-delivery.js +1 -1
  109. package/dist/knowledge/path-oracle/products/gamefound.js +1 -0
  110. package/dist/knowledge/path-oracle/products/gofundme.js +1 -0
  111. package/dist/knowledge/path-oracle/products/hackerone.js +1 -0
  112. package/dist/knowledge/path-oracle/products/kickstarter.js +1 -0
  113. package/dist/knowledge/path-oracle/products/klook.js +1 -0
  114. package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -0
  115. package/dist/knowledge/path-oracle/products/onlyfans.js +1 -0
  116. package/dist/knowledge/path-oracle/products/patreon.js +1 -0
  117. package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -0
  118. package/dist/knowledge/path-oracle/products/royalty-exchange.js +1 -0
  119. package/dist/knowledge/path-oracle/products/shansong.js +1 -0
  120. package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -0
  121. package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -0
  122. package/dist/knowledge/path-oracle/products/upwork.js +1 -0
  123. package/dist/knowledge/path-oracle/products/yuanfudao.js +1 -0
  124. package/dist/knowledge/path-oracle/products/ziroom.js +1 -0
  125. package/dist/knowledge/pattern-resolutions.js +1 -1
  126. package/dist/knowledge/product-detail-source.js +1 -1
  127. package/dist/knowledge/product-doc-b5.js +1 -1
  128. package/dist/knowledge/product-doc-facets.js +1 -0
  129. package/dist/knowledge/projection.js +1 -1
  130. package/dist/knowledge/publish-gate.js +1 -1
  131. package/dist/knowledge/publish-surface-contract.js +1 -1
  132. package/dist/knowledge/recipient-constraint.d.ts +20 -0
  133. package/dist/knowledge/recipient-constraint.js +1 -1
  134. package/dist/knowledge/rule-declaration-types.d.ts +13 -0
  135. package/dist/knowledge/rule-declaration-types.js +1 -0
  136. package/dist/knowledge/rule-declarations.js +1 -0
  137. package/dist/knowledge/scenario-modes.d.ts +6 -0
  138. package/dist/knowledge/scenario-topology.js +1 -1
  139. package/dist/knowledge/template-loader.js +1 -1
  140. package/dist/knowledge/template-prose.js +1 -1
  141. package/dist/knowledge/template-registry.js +1 -1
  142. package/dist/knowledge/template-scanner.js +1 -1
  143. package/dist/knowledge/tools-reference.js +1 -1
  144. package/dist/monitor/MonitorLoop.js +1 -1
  145. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  146. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  147. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  148. package/dist/playbooks/service-build/object-panorama.js +1 -1
  149. package/dist/playbooks/service-build/participation-radar.js +1 -1
  150. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  151. package/dist/playbooks/service-build/service-panorama.js +1 -1
  152. package/dist/playbooks/service-build/service-quote.js +1 -1
  153. package/dist/review/index.js +1 -1
  154. package/dist/review/service.js +1 -1
  155. package/dist/safety/confirm-gate.js +1 -1
  156. package/dist/schema/benchmark-migration/index.d.ts +9 -0
  157. package/dist/schema/benchmark-migration/index.js +1 -1
  158. package/dist/schema/call/arbitration.d.ts +8 -0
  159. package/dist/schema/call/arbitration.js +1 -1
  160. package/dist/schema/call/base.d.ts +8 -0
  161. package/dist/schema/call/base.js +1 -1
  162. package/dist/schema/call/bridge.d.ts +2 -0
  163. package/dist/schema/call/error-codes.d.ts +1 -1
  164. package/dist/schema/call/error-codes.js +1 -1
  165. package/dist/schema/call/handler.d.ts +2 -1
  166. package/dist/schema/call/handler.js +1 -1
  167. package/dist/schema/call/order.d.ts +10 -0
  168. package/dist/schema/call/permission-handler.js +1 -1
  169. package/dist/schema/call/permission.js +1 -1
  170. package/dist/schema/call/progress.d.ts +15 -0
  171. package/dist/schema/call/progress.js +1 -1
  172. package/dist/schema/call/receipt.d.ts +1 -0
  173. package/dist/schema/call/receipt.js +1 -1
  174. package/dist/schema/call/repository.d.ts +12 -0
  175. package/dist/schema/call/repository.js +1 -1
  176. package/dist/schema/call/reward.js +1 -1
  177. package/dist/schema/call/semantic.d.ts +1 -0
  178. package/dist/schema/call/semantic.js +1 -1
  179. package/dist/schema/call/service.d.ts +5 -3
  180. package/dist/schema/call/service.js +1 -1
  181. package/dist/schema/common/index.js +1 -1
  182. package/dist/schema/envelope-unify.js +1 -1
  183. package/dist/schema/goal/index.d.ts +23 -0
  184. package/dist/schema/goal/planning.js +1 -1
  185. package/dist/schema/industry-pack/index.d.ts +2 -2
  186. package/dist/schema/local/index.d.ts +20 -0
  187. package/dist/schema/local/index.js +1 -1
  188. package/dist/schema/local/wip.d.ts +4 -0
  189. package/dist/schema/local/wip.js +1 -1
  190. package/dist/schema/messenger/index.d.ts +5 -0
  191. package/dist/schema/messenger/index.js +1 -1
  192. package/dist/schema/operations.d.ts +944 -1
  193. package/dist/schema/operations.js +1 -1
  194. package/dist/schema/query/bi.js +1 -1
  195. package/dist/schema/query/index.d.ts +5 -5
  196. package/dist/schema/query/index.js +1 -1
  197. package/dist/schema/schema-version.js +1 -1
  198. package/dist/schema/workspace/index.d.ts +2 -2
  199. package/dist/schema-query-impl/index.js +1 -1
  200. package/dist/schemas/account_operation.schema.json +1 -257
  201. package/dist/schemas/ask_user.schema.json +1 -78
  202. package/dist/schemas/benchmark_migration_operation.schema.json +1 -626
  203. package/dist/schemas/bridge_operation.schema.json +1 -1069
  204. package/dist/schemas/config_operation.schema.json +1 -82
  205. package/dist/schemas/employee_operation.schema.json +1 -319
  206. package/dist/schemas/evaluation_operation.schema.json +1 -3932
  207. package/dist/schemas/goal_operation.schema.json +1 -1650
  208. package/dist/schemas/guard2file.schema.json +1 -137
  209. package/dist/schemas/index.json +1 -285
  210. package/dist/schemas/industry_pack_operation.schema.json +1 -582
  211. package/dist/schemas/intent_radar.schema.json +1 -155
  212. package/dist/schemas/keeper_operation.schema.json +1 -364
  213. package/dist/schemas/local_cache_operation.schema.json +1 -116
  214. package/dist/schemas/local_history_operation.schema.json +1 -105
  215. package/dist/schemas/local_info_operation.schema.json +1 -140
  216. package/dist/schemas/local_mark_operation.schema.json +1 -124
  217. package/dist/schemas/machineNode2file.schema.json +1 -137
  218. package/dist/schemas/messenger_operation.schema.json +1 -2068
  219. package/dist/schemas/monitor_events.schema.json +1 -87
  220. package/dist/schemas/monitor_subscription.schema.json +1 -327
  221. package/dist/schemas/onchain_events.schema.json +1 -207
  222. package/dist/schemas/onchain_operations.schema.json +1 -28699
  223. package/dist/schemas/onchain_operations_allocation.schema.json +1 -1376
  224. package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1355
  225. package/dist/schemas/onchain_operations_contact.schema.json +1 -988
  226. package/dist/schemas/onchain_operations_demand.schema.json +1 -1146
  227. package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -663
  228. package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -180
  229. package/dist/schemas/onchain_operations_guard.schema.json +1 -8518
  230. package/dist/schemas/onchain_operations_machine.schema.json +1 -1879
  231. package/dist/schemas/onchain_operations_order.schema.json +1 -1121
  232. package/dist/schemas/onchain_operations_payment.schema.json +1 -316
  233. package/dist/schemas/onchain_operations_permission.schema.json +1 -1036
  234. package/dist/schemas/onchain_operations_personal.schema.json +1 -1463
  235. package/dist/schemas/onchain_operations_progress.schema.json +1 -1041
  236. package/dist/schemas/onchain_operations_proof.schema.json +1 -750
  237. package/dist/schemas/onchain_operations_repository.schema.json +1 -2046
  238. package/dist/schemas/onchain_operations_reward.schema.json +1 -1286
  239. package/dist/schemas/onchain_operations_service.schema.json +1 -2602
  240. package/dist/schemas/onchain_operations_treasury.schema.json +1 -1527
  241. package/dist/schemas/onchain_table_data.schema.json +1 -1146
  242. package/dist/schemas/permission_operation.schema.json +1 -43
  243. package/dist/schemas/persona_operation.schema.json +1 -10424
  244. package/dist/schemas/query_toolkit.schema.json +1 -1867
  245. package/dist/schemas/schema_query.schema.json +1 -116
  246. package/dist/schemas/service_clone_operation.schema.json +1 -49
  247. package/dist/schemas/settle_sweep.schema.json +1 -0
  248. package/dist/schemas/strategy_review_operation.schema.json +1 -66
  249. package/dist/schemas/verify_guard_dry_run.schema.json +1 -0
  250. package/dist/schemas/watch_operation.schema.json +1 -145
  251. package/dist/schemas/wip_file.schema.json +1 -299
  252. package/dist/schemas/workflow_operation.schema.json +1 -722
  253. package/dist/schemas/workspace_operation.schema.json +1 -104
  254. package/dist/schemas/wowok_buildin_info.schema.json +1 -758
  255. package/dist/tools/handlers/benchmark-migration.js +1 -1
  256. package/dist/tools/handlers/config.js +1 -1
  257. package/dist/tools/handlers/entry-edge-recipe.js +1 -1
  258. package/dist/tools/handlers/file-export.js +1 -1
  259. package/dist/tools/handlers/local.js +1 -1
  260. package/dist/tools/handlers/messenger.js +1 -1
  261. package/dist/tools/handlers/onchain.js +1 -1
  262. package/dist/tools/handlers/pending-settlement-recipe.js +1 -0
  263. package/dist/tools/handlers/plan-recovery.js +1 -0
  264. package/dist/tools/handlers/query.js +1 -1
  265. package/dist/tools/handlers/repository-row-id.js +1 -0
  266. package/dist/tools/handlers/review-chain.js +1 -1
  267. package/dist/tools/handlers/settle-sweep.js +1 -0
  268. package/dist/tools/handlers/stale-build-check.js +1 -1
  269. package/dist/tools/handlers/submission-assembly.js +1 -1
  270. package/dist/tools/handlers/verify-guard-dry-run.js +1 -0
  271. package/dist/tools/handlers/wip-upload.js +1 -1
  272. package/dist/tools/index.d.ts +3 -1
  273. package/dist/tools/index.js +1 -1
  274. package/dist/tools/move-fn-index.gen.js +1 -1
  275. package/dist/tools/publish-gate-state.js +1 -1
  276. package/dist/tools/registry/business.js +1 -1
  277. package/dist/tools/registry/onchain.js +1 -1
  278. package/dist/tools/shared.js +1 -1
  279. package/dist/tools/types.d.ts +1 -1
  280. package/dist/tools/wrap.js +1 -1
  281. package/package.json +11 -4
  282. package/dist/chain-semantics/composition-truth.d.ts +0 -102
  283. package/dist/chain-semantics/eval-order.d.ts +0 -17
  284. package/dist/chain-semantics/field-capability.d.ts +0 -11
  285. package/dist/chain-semantics/freeze-map.d.ts +0 -11
  286. package/dist/chain-semantics/fund-flow.d.ts +0 -10
  287. package/dist/chain-semantics/guard-verbs.d.ts +0 -22
  288. package/dist/chain-semantics/index.d.ts +0 -12
  289. package/dist/chain-semantics/object-graph.d.ts +0 -18
  290. package/dist/communication/evidence.d.ts +0 -6
  291. package/dist/communication/message-cursors.d.ts +0 -35
  292. package/dist/communication/proof-reuse.d.ts +0 -9
  293. package/dist/communication/wts-attestation.d.ts +0 -39
  294. package/dist/composition/audit.d.ts +0 -15
  295. package/dist/composition/blueprint-view.d.ts +0 -63
  296. package/dist/composition/compile.d.ts +0 -83
  297. package/dist/composition/emit-phases.d.ts +0 -234
  298. package/dist/composition/generate.d.ts +0 -40
  299. package/dist/composition/guard-fill.d.ts +0 -52
  300. package/dist/composition/inflight.d.ts +0 -86
  301. package/dist/composition/input-normalize.d.ts +0 -15
  302. package/dist/composition/materialize.d.ts +0 -78
  303. package/dist/composition/mode-gates.d.ts +0 -35
  304. package/dist/composition/param-disclosure.d.ts +0 -61
  305. package/dist/composition/plan-retry-ledger.d.ts +0 -37
  306. package/dist/composition/plan.d.ts +0 -121
  307. package/dist/composition/product-card.d.ts +0 -94
  308. package/dist/composition/reflux.d.ts +0 -28
  309. package/dist/composition/supply-chain-emit.d.ts +0 -46
  310. package/dist/config/config-audit.spec.d.ts +0 -1
  311. package/dist/config/config-audit.spec.js +0 -1
  312. package/dist/config/config-warnings.d.ts +0 -2
  313. package/dist/config/index.d.ts +0 -4
  314. package/dist/config/judgment.spec.d.ts +0 -1
  315. package/dist/config/judgment.spec.js +0 -1
  316. package/dist/config/match-policy-file.d.ts +0 -34
  317. package/dist/config/match-policy-file.spec.d.ts +0 -1
  318. package/dist/config/match-policy-file.spec.js +0 -1
  319. package/dist/config/rule-engine.spec.d.ts +0 -1
  320. package/dist/config/rule-engine.spec.js +0 -1
  321. package/dist/config/runtime.d.ts +0 -29
  322. package/dist/config/store-policy.d.ts +0 -14
  323. package/dist/config/store-policy.spec.d.ts +0 -1
  324. package/dist/config/store-policy.spec.js +0 -1
  325. package/dist/config/template-params.d.ts +0 -42
  326. package/dist/config/template-params.spec.d.ts +0 -1
  327. package/dist/config/template-params.spec.js +0 -1
  328. package/dist/customer/account-events.d.ts +0 -32
  329. package/dist/data/api/api.spec.d.ts +0 -1
  330. package/dist/data/api/api.spec.js +0 -1
  331. package/dist/data/api/cli.d.ts +0 -1
  332. package/dist/data/api/head.d.ts +0 -16
  333. package/dist/data/api/head.spec.d.ts +0 -1
  334. package/dist/data/api/head.spec.js +0 -1
  335. package/dist/data/api/index.d.ts +0 -2
  336. package/dist/data/api/match.d.ts +0 -69
  337. package/dist/data/api/match.spec.d.ts +0 -1
  338. package/dist/data/api/match.spec.js +0 -1
  339. package/dist/data/api/server.d.ts +0 -13
  340. package/dist/data/projection/cli.d.ts +0 -1
  341. package/dist/data/projection/edges.d.ts +0 -8
  342. package/dist/data/projection/edges.spec.d.ts +0 -1
  343. package/dist/data/projection/edges.spec.js +0 -1
  344. package/dist/data/projection/facets.d.ts +0 -18
  345. package/dist/data/projection/facets.spec.d.ts +0 -1
  346. package/dist/data/projection/facets.spec.js +0 -1
  347. package/dist/data/projection/facts.d.ts +0 -40
  348. package/dist/data/projection/index.d.ts +0 -6
  349. package/dist/data/projection/project.d.ts +0 -10
  350. package/dist/data/projection/projection.spec.d.ts +0 -1
  351. package/dist/data/projection/projection.spec.js +0 -1
  352. package/dist/data/projection/schema.d.ts +0 -1
  353. package/dist/data/projection/store.d.ts +0 -51
  354. package/dist/data/projection/types.d.ts +0 -169
  355. package/dist/data/sync/cdc.d.ts +0 -33
  356. package/dist/data/sync/cdc.spec.d.ts +0 -1
  357. package/dist/data/sync/cdc.spec.js +0 -1
  358. package/dist/data/sync/graphql-source.d.ts +0 -16
  359. package/dist/data/sync/index.d.ts +0 -5
  360. package/dist/data/sync/reconciler.d.ts +0 -14
  361. package/dist/data/sync/reconciler.spec.d.ts +0 -1
  362. package/dist/data/sync/reconciler.spec.js +0 -1
  363. package/dist/data/sync/schema.d.ts +0 -1
  364. package/dist/data/sync/store.d.ts +0 -24
  365. package/dist/data/sync/sync.spec.d.ts +0 -1
  366. package/dist/data/sync/sync.spec.js +0 -1
  367. package/dist/data/sync/synchronizer.d.ts +0 -10
  368. package/dist/data/sync/types.d.ts +0 -164
  369. package/dist/evaluation/acceptance.d.ts +0 -33
  370. package/dist/evaluation/architecture.spec.d.ts +0 -1
  371. package/dist/evaluation/architecture.spec.js +0 -1
  372. package/dist/evaluation/builtins/arbitration-score.d.ts +0 -42
  373. package/dist/evaluation/builtins/demand-match.d.ts +0 -16
  374. package/dist/evaluation/builtins/graph-service.spec.d.ts +0 -1
  375. package/dist/evaluation/builtins/graph-service.spec.js +0 -1
  376. package/dist/evaluation/builtins/index.d.ts +0 -4
  377. package/dist/evaluation/builtins/purity.spec.d.ts +0 -1
  378. package/dist/evaluation/builtins/purity.spec.js +0 -1
  379. package/dist/evaluation/composer.d.ts +0 -38
  380. package/dist/evaluation/facets/catalog.d.ts +0 -19
  381. package/dist/evaluation/gap.d.ts +0 -2
  382. package/dist/evaluation/guard-scan.d.ts +0 -10
  383. package/dist/evaluation/index.d.ts +0 -14
  384. package/dist/evaluation/injection.d.ts +0 -6
  385. package/dist/evaluation/location-match.d.ts +0 -42
  386. package/dist/evaluation/match-operation.d.ts +0 -23
  387. package/dist/evaluation/match-policy-resolver.d.ts +0 -9
  388. package/dist/evaluation/match-policy.spec.d.ts +0 -1
  389. package/dist/evaluation/match-policy.spec.js +0 -1
  390. package/dist/evaluation/path-reasoning.d.ts +0 -37
  391. package/dist/evaluation/standards.d.ts +0 -11
  392. package/dist/evaluation/standards.spec.d.ts +0 -1
  393. package/dist/evaluation/standards.spec.js +0 -1
  394. package/dist/evaluation/structured-lines.d.ts +0 -8
  395. package/dist/evaluation/user-injection.d.ts +0 -6
  396. package/dist/experience/experience-reuse.d.ts +0 -10
  397. package/dist/experience/index.d.ts +0 -7
  398. package/dist/experience/persistence-config.d.ts +0 -6
  399. package/dist/experience/persistence.d.ts +0 -21
  400. package/dist/experience/realtime-feedback.d.ts +0 -5
  401. package/dist/experience/user-profile.d.ts +0 -25
  402. package/dist/extensions/capability.d.ts +0 -91
  403. package/dist/extensions/industry-audit.spec.d.ts +0 -1
  404. package/dist/extensions/industry-audit.spec.js +0 -1
  405. package/dist/goal/GoalClassifier.d.ts +0 -17
  406. package/dist/goal/GoalEngine.d.ts +0 -175
  407. package/dist/goal/GoalStore.d.ts +0 -27
  408. package/dist/goal/next-steps.d.ts +0 -12
  409. package/dist/goal/plan-approval.d.ts +0 -5
  410. package/dist/goal/pursue.d.ts +0 -18
  411. package/dist/graph/base.d.ts +0 -8
  412. package/dist/graph/onchain/analyze.d.ts +0 -59
  413. package/dist/graph/onchain/analyze.spec.d.ts +0 -1
  414. package/dist/graph/onchain/analyze.spec.js +0 -1
  415. package/dist/graph/onchain/anti-cheat.d.ts +0 -69
  416. package/dist/graph/onchain/anti-cheat.spec.d.ts +0 -1
  417. package/dist/graph/onchain/anti-cheat.spec.js +0 -1
  418. package/dist/graph/onchain/dataplane.d.ts +0 -44
  419. package/dist/graph/onchain/edge-batch.spec.d.ts +0 -1
  420. package/dist/graph/onchain/edge-batch.spec.js +0 -1
  421. package/dist/graph/onchain/edge-schema.d.ts +0 -69
  422. package/dist/graph/onchain/entity-profile.spec.d.ts +0 -1
  423. package/dist/graph/onchain/entity-profile.spec.js +0 -1
  424. package/dist/graph/onchain/event-history.spec.d.ts +0 -1
  425. package/dist/graph/onchain/event-history.spec.js +0 -1
  426. package/dist/graph/onchain/expand.d.ts +0 -4
  427. package/dist/graph/onchain/exploration.d.ts +0 -28
  428. package/dist/graph/onchain/exploration.spec.d.ts +0 -1
  429. package/dist/graph/onchain/exploration.spec.js +0 -1
  430. package/dist/graph/onchain/exposure.d.ts +0 -18
  431. package/dist/graph/onchain/exposure.spec.d.ts +0 -1
  432. package/dist/graph/onchain/exposure.spec.js +0 -1
  433. package/dist/graph/onchain/extract-deep.spec.d.ts +0 -1
  434. package/dist/graph/onchain/extract-deep.spec.js +0 -1
  435. package/dist/graph/onchain/extract.d.ts +0 -29
  436. package/dist/graph/onchain/facet-projection.d.ts +0 -99
  437. package/dist/graph/onchain/facet-projection.spec.d.ts +0 -1
  438. package/dist/graph/onchain/facet-projection.spec.js +0 -1
  439. package/dist/graph/onchain/facts.spec.d.ts +0 -1
  440. package/dist/graph/onchain/facts.spec.js +0 -1
  441. package/dist/graph/onchain/field-manifest.d.ts +0 -29
  442. package/dist/graph/onchain/field-manifest.spec.d.ts +0 -1
  443. package/dist/graph/onchain/field-manifest.spec.js +0 -1
  444. package/dist/graph/onchain/fixtures.d.ts +0 -80
  445. package/dist/graph/onchain/fixtures.spec.d.ts +0 -1
  446. package/dist/graph/onchain/fixtures.spec.js +0 -1
  447. package/dist/graph/onchain/graph-policy.spec.d.ts +0 -1
  448. package/dist/graph/onchain/graph-policy.spec.js +0 -1
  449. package/dist/graph/onchain/index.d.ts +0 -29
  450. package/dist/graph/onchain/interest.d.ts +0 -10
  451. package/dist/graph/onchain/interest.spec.d.ts +0 -1
  452. package/dist/graph/onchain/interest.spec.js +0 -1
  453. package/dist/graph/onchain/label-lint.spec.d.ts +0 -1
  454. package/dist/graph/onchain/label-lint.spec.js +0 -1
  455. package/dist/graph/onchain/names.d.ts +0 -23
  456. package/dist/graph/onchain/names.spec.d.ts +0 -1
  457. package/dist/graph/onchain/names.spec.js +0 -1
  458. package/dist/graph/onchain/object-held-receipts.d.ts +0 -20
  459. package/dist/graph/onchain/object-held-receipts.spec.d.ts +0 -1
  460. package/dist/graph/onchain/object-held-receipts.spec.js +0 -1
  461. package/dist/graph/onchain/onchain.spec.d.ts +0 -1
  462. package/dist/graph/onchain/onchain.spec.js +0 -1
  463. package/dist/graph/onchain/policy.d.ts +0 -8
  464. package/dist/graph/onchain/project-relationship.d.ts +0 -3
  465. package/dist/graph/onchain/proposal-graph.d.ts +0 -11
  466. package/dist/graph/onchain/proposal-graph.spec.d.ts +0 -1
  467. package/dist/graph/onchain/proposal-graph.spec.js +0 -1
  468. package/dist/graph/onchain/sdk-batch.d.ts +0 -129
  469. package/dist/graph/onchain/sdk-dataplane.d.ts +0 -44
  470. package/dist/graph/onchain/strategy.spec.d.ts +0 -1
  471. package/dist/graph/onchain/strategy.spec.js +0 -1
  472. package/dist/graph/onchain/synthesis.d.ts +0 -20
  473. package/dist/graph/onchain/synthesis.spec.d.ts +0 -1
  474. package/dist/graph/onchain/synthesis.spec.js +0 -1
  475. package/dist/graph/onchain/table-ledger.spec.d.ts +0 -1
  476. package/dist/graph/onchain/table-ledger.spec.js +0 -1
  477. package/dist/graph/onchain/viewport.d.ts +0 -6
  478. package/dist/harness/auto-escalation.d.ts +0 -15
  479. package/dist/intent/enrich.d.ts +0 -1
  480. package/dist/intent/index.d.ts +0 -23
  481. package/dist/intent/matcher.d.ts +0 -2
  482. package/dist/intent/store.d.ts +0 -19
  483. package/dist/intent/types.d.ts +0 -32
  484. package/dist/keeper/KeeperScan.d.ts +0 -41
  485. package/dist/keeper/KeeperStore.d.ts +0 -43
  486. package/dist/keeper/detectors.d.ts +0 -42
  487. package/dist/keeper/keeper.spec.d.ts +0 -1
  488. package/dist/keeper/keeper.spec.js +0 -1
  489. package/dist/keeper/types.d.ts +0 -67
  490. package/dist/knowledge/account-marks.d.ts +0 -36
  491. package/dist/knowledge/allocation-ledger.d.ts +0 -75
  492. package/dist/knowledge/allocation-puzzle.d.ts +0 -138
  493. package/dist/knowledge/allocation-risk.d.ts +0 -82
  494. package/dist/knowledge/allocation-templates.d.ts +0 -38
  495. package/dist/knowledge/allocator-rail-verifier.d.ts +0 -59
  496. package/dist/knowledge/anti-cheat.d.ts +0 -2
  497. package/dist/knowledge/arb-fund-facts.d.ts +0 -51
  498. package/dist/knowledge/arb-risk.d.ts +0 -39
  499. package/dist/knowledge/arbitration-puzzle.d.ts +0 -84
  500. package/dist/knowledge/arbitration-rail-verifier.d.ts +0 -35
  501. package/dist/knowledge/arbitration-risk.d.ts +0 -114
  502. package/dist/knowledge/arbitration-templates.d.ts +0 -39
  503. package/dist/knowledge/arbitration-venue-order.d.ts +0 -25
  504. package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +0 -1
  505. package/dist/knowledge/baselines/guard-lint-baseline.spec.js +0 -1
  506. package/dist/knowledge/baselines/risk-baselines.spec.d.ts +0 -1
  507. package/dist/knowledge/baselines/risk-baselines.spec.js +0 -1
  508. package/dist/knowledge/baselines/risk-cases.d.ts +0 -8
  509. package/dist/knowledge/baselines/semantic-facts.d.ts +0 -12
  510. package/dist/knowledge/bridge-risk.d.ts +0 -36
  511. package/dist/knowledge/catalog-facts.d.ts +0 -4
  512. package/dist/knowledge/chain-query-registry.d.ts +0 -14
  513. package/dist/knowledge/commission-landing.d.ts +0 -26
  514. package/dist/knowledge/component-schema.d.ts +0 -64
  515. package/dist/knowledge/contact-risk.d.ts +0 -32
  516. package/dist/knowledge/contact-templates.d.ts +0 -26
  517. package/dist/knowledge/contract-invariants.d.ts +0 -54
  518. package/dist/knowledge/demand-risk.d.ts +0 -30
  519. package/dist/knowledge/discount-threshold.d.ts +0 -26
  520. package/dist/knowledge/dynamic-pricing.d.ts +0 -29
  521. package/dist/knowledge/entity-recipient-guard.d.ts +0 -21
  522. package/dist/knowledge/event-semantics.d.ts +0 -23
  523. package/dist/knowledge/evidence-review.d.ts +0 -35
  524. package/dist/knowledge/fee-param-bindings.d.ts +0 -28
  525. package/dist/knowledge/flywheel-loop.d.ts +0 -41
  526. package/dist/knowledge/game-scenarios.d.ts +0 -21
  527. package/dist/knowledge/getting-started.d.ts +0 -37
  528. package/dist/knowledge/goal-completion.d.ts +0 -31
  529. package/dist/knowledge/guard-anchor-reach.d.ts +0 -19
  530. package/dist/knowledge/guard-binding-table.d.ts +0 -52
  531. package/dist/knowledge/guard-binding-verifier.d.ts +0 -37
  532. package/dist/knowledge/guard-bindings.d.ts +0 -21
  533. package/dist/knowledge/guard-blueprint.d.ts +0 -68
  534. package/dist/knowledge/guard-design-patterns.d.ts +0 -38
  535. package/dist/knowledge/guard-eval.d.ts +0 -15
  536. package/dist/knowledge/guard-field-cognition.d.ts +0 -48
  537. package/dist/knowledge/guard-host-context.d.ts +0 -24
  538. package/dist/knowledge/guard-ledger.d.ts +0 -19
  539. package/dist/knowledge/guard-leg-map.d.ts +0 -5
  540. package/dist/knowledge/guard-lint.d.ts +0 -79
  541. package/dist/knowledge/guard-node-gates.d.ts +0 -9
  542. package/dist/knowledge/guard-puzzle.d.ts +0 -188
  543. package/dist/knowledge/guard-render.d.ts +0 -71
  544. package/dist/knowledge/guard-risk.d.ts +0 -71
  545. package/dist/knowledge/guard-submission-brief.d.ts +0 -94
  546. package/dist/knowledge/guard-submission-prompt.d.ts +0 -63
  547. package/dist/knowledge/guard-translation.d.ts +0 -58
  548. package/dist/knowledge/index.d.ts +0 -299
  549. package/dist/knowledge/industry-evolution.d.ts +0 -82
  550. package/dist/knowledge/industry-generalizer.d.ts +0 -63
  551. package/dist/knowledge/industry-rule-node.d.ts +0 -7
  552. package/dist/knowledge/industry-strategy.d.ts +0 -91
  553. package/dist/knowledge/intent-metrics.d.ts +0 -43
  554. package/dist/knowledge/jsonrpc-enum.d.ts +0 -102
  555. package/dist/knowledge/knob-docs.d.ts +0 -5
  556. package/dist/knowledge/machine-fork-watch.d.ts +0 -9
  557. package/dist/knowledge/machine-ledger.d.ts +0 -42
  558. package/dist/knowledge/machine-puzzle.d.ts +0 -206
  559. package/dist/knowledge/machine-risk.d.ts +0 -72
  560. package/dist/knowledge/machine-templates.d.ts +0 -92
  561. package/dist/knowledge/machine-topology.d.ts +0 -116
  562. package/dist/knowledge/machine-translation.d.ts +0 -96
  563. package/dist/knowledge/market-metrics.d.ts +0 -34
  564. package/dist/knowledge/market-operations.d.ts +0 -46
  565. package/dist/knowledge/migration-preflight.d.ts +0 -27
  566. package/dist/knowledge/object-dependency.d.ts +0 -31
  567. package/dist/knowledge/operation-dictionary.d.ts +0 -18
  568. package/dist/knowledge/order-ledger.d.ts +0 -69
  569. package/dist/knowledge/order-puzzle.d.ts +0 -162
  570. package/dist/knowledge/order-risk.d.ts +0 -62
  571. package/dist/knowledge/order-templates.d.ts +0 -50
  572. package/dist/knowledge/param-schema.d.ts +0 -93
  573. package/dist/knowledge/param-tiers.d.ts +0 -27
  574. package/dist/knowledge/passport-ledger.d.ts +0 -60
  575. package/dist/knowledge/passport-templates.d.ts +0 -40
  576. package/dist/knowledge/path-oracle/coverage.d.ts +0 -16
  577. package/dist/knowledge/path-oracle/index.d.ts +0 -5
  578. package/dist/knowledge/path-oracle/products/food-delivery.d.ts +0 -2
  579. package/dist/knowledge/path-oracle/schema.d.ts +0 -188
  580. package/dist/knowledge/pattern-resolutions.d.ts +0 -110
  581. package/dist/knowledge/payment-risk.d.ts +0 -38
  582. package/dist/knowledge/payment-tracker.d.ts +0 -63
  583. package/dist/knowledge/permission-ledger.d.ts +0 -49
  584. package/dist/knowledge/permission-puzzle.d.ts +0 -122
  585. package/dist/knowledge/permission-risk.d.ts +0 -70
  586. package/dist/knowledge/permission-templates.d.ts +0 -38
  587. package/dist/knowledge/personal-risk.d.ts +0 -36
  588. package/dist/knowledge/product-detail-source.d.ts +0 -37
  589. package/dist/knowledge/product-doc-b5.d.ts +0 -16
  590. package/dist/knowledge/progress-ledger.d.ts +0 -63
  591. package/dist/knowledge/progress-puzzle.d.ts +0 -82
  592. package/dist/knowledge/progress-risk.d.ts +0 -75
  593. package/dist/knowledge/progress-templates.d.ts +0 -38
  594. package/dist/knowledge/projection.d.ts +0 -54
  595. package/dist/knowledge/projection.spec.d.ts +0 -1
  596. package/dist/knowledge/projection.spec.js +0 -1
  597. package/dist/knowledge/proof-risk.d.ts +0 -33
  598. package/dist/knowledge/protocol-facts.d.ts +0 -17
  599. package/dist/knowledge/publish-gate.d.ts +0 -20
  600. package/dist/knowledge/publish-readiness.d.ts +0 -25
  601. package/dist/knowledge/publish-surface-contract.d.ts +0 -16
  602. package/dist/knowledge/puzzle-projections.d.ts +0 -11
  603. package/dist/knowledge/rail-exit-satisfiability.d.ts +0 -25
  604. package/dist/knowledge/registrar-risk.d.ts +0 -34
  605. package/dist/knowledge/release-sentinel.d.ts +0 -12
  606. package/dist/knowledge/repository-risk.d.ts +0 -46
  607. package/dist/knowledge/repository-write-semantics.d.ts +0 -27
  608. package/dist/knowledge/reputation-rules.d.ts +0 -36
  609. package/dist/knowledge/requirement-families.d.ts +0 -13
  610. package/dist/knowledge/resource-risk.d.ts +0 -32
  611. package/dist/knowledge/reward-ledger.d.ts +0 -97
  612. package/dist/knowledge/reward-puzzle.d.ts +0 -98
  613. package/dist/knowledge/reward-risk.d.ts +0 -86
  614. package/dist/knowledge/reward-templates.d.ts +0 -25
  615. package/dist/knowledge/rule-node-analyzers.d.ts +0 -49
  616. package/dist/knowledge/rule-outcome.d.ts +0 -5
  617. package/dist/knowledge/scenario-topology.d.ts +0 -48
  618. package/dist/knowledge/semantic-ir.d.ts +0 -136
  619. package/dist/knowledge/service-allocation-semantics.d.ts +0 -36
  620. package/dist/knowledge/service-allocator-audit-node.d.ts +0 -3
  621. package/dist/knowledge/service-ledger.d.ts +0 -87
  622. package/dist/knowledge/service-puzzle.d.ts +0 -158
  623. package/dist/knowledge/service-risk-node.d.ts +0 -3
  624. package/dist/knowledge/service-risk.d.ts +0 -110
  625. package/dist/knowledge/service-templates.d.ts +0 -41
  626. package/dist/knowledge/settlement-semantics.d.ts +0 -1
  627. package/dist/knowledge/strategy-manuals.d.ts +0 -15
  628. package/dist/knowledge/supply-chain.d.ts +0 -35
  629. package/dist/knowledge/template-index.d.ts +0 -19
  630. package/dist/knowledge/template-loader.d.ts +0 -425
  631. package/dist/knowledge/template-nav.d.ts +0 -9
  632. package/dist/knowledge/template-prose.d.ts +0 -50
  633. package/dist/knowledge/template-registry.d.ts +0 -48
  634. package/dist/knowledge/template-scanner.d.ts +0 -158
  635. package/dist/knowledge/template-test-profiles.d.ts +0 -17
  636. package/dist/knowledge/template-validation.d.ts +0 -3
  637. package/dist/knowledge/tools-reference.d.ts +0 -17
  638. package/dist/knowledge/treasury-ledger.d.ts +0 -42
  639. package/dist/knowledge/treasury-puzzle.d.ts +0 -163
  640. package/dist/knowledge/treasury-risk.d.ts +0 -88
  641. package/dist/knowledge/treasury-templates.d.ts +0 -38
  642. package/dist/knowledge/universal-template.d.ts +0 -22
  643. package/dist/knowledge/util-risk.d.ts +0 -30
  644. package/dist/knowledge/workflow-guidance.d.ts +0 -194
  645. package/dist/knowledge/workspace-lists.d.ts +0 -61
  646. package/dist/monitor/SuggestionBridge.spec.d.ts +0 -1
  647. package/dist/monitor/SuggestionBridge.spec.js +0 -1
  648. package/dist/participation/arbitrator-interest.d.ts +0 -22
  649. package/dist/participation/demander-interest.d.ts +0 -23
  650. package/dist/participation/employee-kpi.d.ts +0 -37
  651. package/dist/participation/employee-kpi.spec.d.ts +0 -1
  652. package/dist/participation/employee-kpi.spec.js +0 -1
  653. package/dist/participation/employee-store.d.ts +0 -16
  654. package/dist/participation/game-context.d.ts +0 -25
  655. package/dist/participation/index.d.ts +0 -2
  656. package/dist/participation/node-action-advisor.d.ts +0 -68
  657. package/dist/participation/time-window.d.ts +0 -48
  658. package/dist/persona/facet-profile.d.ts +0 -33
  659. package/dist/persona/persona-audit.spec.d.ts +0 -1
  660. package/dist/persona/persona-audit.spec.js +0 -1
  661. package/dist/playbooks/service-build/business-puzzle.d.ts +0 -48
  662. package/dist/playbooks/service-build/context-assembly.d.ts +0 -32
  663. package/dist/playbooks/service-build/facet-money.d.ts +0 -33
  664. package/dist/playbooks/service-build/facet-money.spec.d.ts +0 -1
  665. package/dist/playbooks/service-build/facet-money.spec.js +0 -1
  666. package/dist/playbooks/service-build/game-theory.d.ts +0 -47
  667. package/dist/playbooks/service-build/index.d.ts +0 -15
  668. package/dist/playbooks/service-build/intent-analyzer.d.ts +0 -72
  669. package/dist/playbooks/service-build/machine-nodes.d.ts +0 -27
  670. package/dist/playbooks/service-build/machine-panorama.d.ts +0 -71
  671. package/dist/playbooks/service-build/merchant-guide.d.ts +0 -382
  672. package/dist/playbooks/service-build/migration-planner.d.ts +0 -61
  673. package/dist/playbooks/service-build/mode-actions.d.ts +0 -260
  674. package/dist/playbooks/service-build/object-panorama.d.ts +0 -317
  675. package/dist/playbooks/service-build/object-type.d.ts +0 -1
  676. package/dist/playbooks/service-build/participation-radar.d.ts +0 -20
  677. package/dist/playbooks/service-build/pipeline-actions.d.ts +0 -108
  678. package/dist/playbooks/service-build/process.d.ts +0 -6
  679. package/dist/playbooks/service-build/relationship-profile.d.ts +0 -3
  680. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.d.ts +0 -1
  681. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +0 -1
  682. package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.d.ts +0 -1
  683. package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.js +0 -1
  684. package/dist/playbooks/service-build/reverse-mapping.d.ts +0 -66
  685. package/dist/playbooks/service-build/risk-aggregator.d.ts +0 -59
  686. package/dist/playbooks/service-build/service-panorama.d.ts +0 -229
  687. package/dist/playbooks/service-build/service-quote.d.ts +0 -2
  688. package/dist/playbooks/service-build/service-quote.spec.d.ts +0 -1
  689. package/dist/playbooks/service-build/service-quote.spec.js +0 -1
  690. package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +0 -1
  691. package/dist/playbooks/service-build/topology-evaluation.spec.js +0 -1
  692. package/dist/playbooks/service-build/topology-query.d.ts +0 -25
  693. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +0 -33
  694. package/dist/relationship/derivation.d.ts +0 -95
  695. package/dist/relationship/derivation.spec.d.ts +0 -1
  696. package/dist/relationship/derivation.spec.js +0 -1
  697. package/dist/relationship/incentive.d.ts +0 -38
  698. package/dist/relationship/index.d.ts +0 -4
  699. package/dist/relationship/registry.d.ts +0 -13
  700. package/dist/relationship/types.d.ts +0 -45
  701. package/dist/review/arb.d.ts +0 -4
  702. package/dist/review/demand.d.ts +0 -3
  703. package/dist/review/index.d.ts +0 -3
  704. package/dist/review/machine.d.ts +0 -3
  705. package/dist/review/order.d.ts +0 -8
  706. package/dist/review/progress.d.ts +0 -3
  707. package/dist/review/repository.d.ts +0 -3
  708. package/dist/review/service.d.ts +0 -5
  709. package/dist/review/types.d.ts +0 -163
  710. package/dist/role/derivation.d.ts +0 -35
  711. package/dist/role/index.d.ts +0 -6
  712. package/dist/role/intent.d.ts +0 -23
  713. package/dist/role/model.d.ts +0 -9
  714. package/dist/role/profiles.d.ts +0 -26
  715. package/dist/role/resolution.d.ts +0 -27
  716. package/dist/runtime/instance-registry.d.ts +0 -14
  717. package/dist/safety/index.d.ts +0 -3
  718. package/dist/schema/call/permission-handler.d.ts +0 -5
  719. package/dist/schema/call/semantic-customer-advice.spec.d.ts +0 -1
  720. package/dist/schema/call/semantic-customer-advice.spec.js +0 -1
  721. package/dist/schema/common/tokentype-short-probe.spec.d.ts +0 -1
  722. package/dist/schema/common/tokentype-short-probe.spec.js +0 -1
  723. package/dist/schema/envelope-unify.d.ts +0 -5
  724. package/dist/schema/goal/planning.d.ts +0 -742
  725. package/dist/schema/industry-pack/modes.d.ts +0 -447
  726. package/dist/schema/query/bi.d.ts +0 -3369
  727. package/dist/schema/utils/guard-query-utils.d.ts +0 -18
  728. package/dist/schema/utils/permission-index-utils.d.ts +0 -2
  729. package/dist/schema/utils/skills-recommendation.d.ts +0 -2
  730. package/dist/schema-query-impl/index.d.ts +0 -83
  731. package/dist/schemas/account_operation.output.json +0 -3869
  732. package/dist/schemas/ask_user.output.json +0 -54
  733. package/dist/schemas/benchmark_migration_operation.output.json +0 -1669
  734. package/dist/schemas/bridge_operation.output.json +0 -1548
  735. package/dist/schemas/config_operation.output.json +0 -896
  736. package/dist/schemas/employee_operation.output.json +0 -307
  737. package/dist/schemas/evaluation_operation.output.json +0 -4716
  738. package/dist/schemas/guard2file.output.json +0 -83
  739. package/dist/schemas/industry_pack_operation.output.json +0 -2985
  740. package/dist/schemas/intent_radar.output.json +0 -326
  741. package/dist/schemas/keeper_operation.output.json +0 -1441
  742. package/dist/schemas/local_cache_operation.output.json +0 -1718
  743. package/dist/schemas/local_history_operation.output.json +0 -1644
  744. package/dist/schemas/local_info_operation.output.json +0 -1530
  745. package/dist/schemas/local_mark_operation.output.json +0 -1622
  746. package/dist/schemas/machineNode2file.output.json +0 -88
  747. package/dist/schemas/messenger_operation.output.json +0 -4692
  748. package/dist/schemas/monitor_events.output.json +0 -1602
  749. package/dist/schemas/monitor_subscription.output.json +0 -1629
  750. package/dist/schemas/onchain_events.output.json +0 -4053
  751. package/dist/schemas/onchain_operations.output.json +0 -7788
  752. package/dist/schemas/onchain_table_data.output.json +0 -11868
  753. package/dist/schemas/permission_operation.output.json +0 -205
  754. package/dist/schemas/persona_operation.output.json +0 -64612
  755. package/dist/schemas/query_toolkit.output.json +0 -28302
  756. package/dist/schemas/schema_query.output.json +0 -81
  757. package/dist/schemas/service_clone_operation.output.json +0 -247
  758. package/dist/schemas/strategy_review_operation.output.json +0 -532
  759. package/dist/schemas/watch_operation.output.json +0 -930
  760. package/dist/schemas/wip_file.output.json +0 -360
  761. package/dist/schemas/workflow_operation.output.json +0 -422
  762. package/dist/schemas/workspace_operation.output.json +0 -477
  763. package/dist/schemas/wowok_buildin_info.output.json +0 -2477
  764. package/dist/strategy/collectors.d.ts +0 -66
  765. package/dist/strategy/collectors.spec.d.ts +0 -1
  766. package/dist/strategy/collectors.spec.js +0 -1
  767. package/dist/strategy/index.d.ts +0 -5
  768. package/dist/strategy/metrics.d.ts +0 -20
  769. package/dist/strategy/review.d.ts +0 -48
  770. package/dist/strategy/scorecard.d.ts +0 -32
  771. package/dist/strategy/store.d.ts +0 -26
  772. package/dist/task/ProcessStore.d.ts +0 -98
  773. package/dist/task/playbook.d.ts +0 -11
  774. package/dist/task/substep-trace.d.ts +0 -91
  775. package/dist/tools/build-fingerprint.d.ts +0 -28
  776. package/dist/tools/error-catalog.d.ts +0 -17
  777. package/dist/tools/handlers/ask-user.d.ts +0 -3
  778. package/dist/tools/handlers/benchmark-migration.d.ts +0 -121
  779. package/dist/tools/handlers/bridge.d.ts +0 -8
  780. package/dist/tools/handlers/config.d.ts +0 -2
  781. package/dist/tools/handlers/dispatch-expectations.d.ts +0 -2
  782. package/dist/tools/handlers/dispatch-expectations.spec.d.ts +0 -1
  783. package/dist/tools/handlers/dispatch-expectations.spec.js +0 -1
  784. package/dist/tools/handlers/employee.d.ts +0 -8
  785. package/dist/tools/handlers/employee.spec.d.ts +0 -1
  786. package/dist/tools/handlers/employee.spec.js +0 -1
  787. package/dist/tools/handlers/entry-edge-recipe.d.ts +0 -101
  788. package/dist/tools/handlers/escrow-deficit.d.ts +0 -10
  789. package/dist/tools/handlers/evaluation.d.ts +0 -2
  790. package/dist/tools/handlers/evaluation.spec.d.ts +0 -1
  791. package/dist/tools/handlers/evaluation.spec.js +0 -1
  792. package/dist/tools/handlers/file-export.d.ts +0 -3
  793. package/dist/tools/handlers/fund-rail-recipe.d.ts +0 -10
  794. package/dist/tools/handlers/goal.d.ts +0 -4
  795. package/dist/tools/handlers/industry-pack.d.ts +0 -3
  796. package/dist/tools/handlers/intent-radar.d.ts +0 -2
  797. package/dist/tools/handlers/keeper.d.ts +0 -12
  798. package/dist/tools/handlers/local.d.ts +0 -6
  799. package/dist/tools/handlers/mark-namespace.d.ts +0 -30
  800. package/dist/tools/handlers/messenger.d.ts +0 -24
  801. package/dist/tools/handlers/monitor.d.ts +0 -26
  802. package/dist/tools/handlers/name-resolution.d.ts +0 -4
  803. package/dist/tools/handlers/name-resolution.spec.d.ts +0 -1
  804. package/dist/tools/handlers/name-resolution.spec.js +0 -1
  805. package/dist/tools/handlers/network.d.ts +0 -1
  806. package/dist/tools/handlers/onchain-name-registration.d.ts +0 -49
  807. package/dist/tools/handlers/onchain-name-registration.spec.d.ts +0 -1
  808. package/dist/tools/handlers/onchain-name-registration.spec.js +0 -1
  809. package/dist/tools/handlers/onchain.d.ts +0 -132
  810. package/dist/tools/handlers/permission.d.ts +0 -2
  811. package/dist/tools/handlers/persona.d.ts +0 -4
  812. package/dist/tools/handlers/publish-binding-echo.d.ts +0 -22
  813. package/dist/tools/handlers/review-chain.d.ts +0 -19
  814. package/dist/tools/handlers/schema-query.d.ts +0 -2
  815. package/dist/tools/handlers/service-clone.d.ts +0 -20
  816. package/dist/tools/handlers/stale-build-check.d.ts +0 -9
  817. package/dist/tools/handlers/strategy-review.d.ts +0 -2
  818. package/dist/tools/handlers/submission-assembly.d.ts +0 -55
  819. package/dist/tools/handlers/watch.d.ts +0 -2
  820. package/dist/tools/handlers/winner-derivation.d.ts +0 -20
  821. package/dist/tools/handlers/wip-upload.d.ts +0 -22
  822. package/dist/tools/handlers/wip.d.ts +0 -2
  823. package/dist/tools/handlers/workflow.d.ts +0 -2
  824. package/dist/tools/handlers/workspace.d.ts +0 -4
  825. package/dist/tools/move-fn-index.gen.d.ts +0 -3
  826. package/dist/tools/publish-gate-state.d.ts +0 -5
  827. package/dist/tools/registry/agent.d.ts +0 -2
  828. package/dist/tools/registry/bridge.d.ts +0 -2
  829. package/dist/tools/registry/business.d.ts +0 -2
  830. package/dist/tools/registry/config.d.ts +0 -2
  831. package/dist/tools/registry/evaluation.d.ts +0 -2
  832. package/dist/tools/registry/files.d.ts +0 -2
  833. package/dist/tools/registry/identity.d.ts +0 -2
  834. package/dist/tools/registry/interaction.d.ts +0 -2
  835. package/dist/tools/registry/local.d.ts +0 -2
  836. package/dist/tools/registry/messenger.d.ts +0 -2
  837. package/dist/tools/registry/monitor.d.ts +0 -2
  838. package/dist/tools/registry/onchain.d.ts +0 -2
  839. package/dist/tools/registry/query.d.ts +0 -2
  840. package/dist/tools/retry.d.ts +0 -8
  841. package/dist/tools/rules-hook.d.ts +0 -5
  842. package/dist/tools/runtime-health.d.ts +0 -10
  843. package/dist/tools/sanitize-description-roundtrip.spec.d.ts +0 -1
  844. package/dist/tools/sanitize-description-roundtrip.spec.js +0 -1
  845. package/dist/tools/sanitize-output.d.ts +0 -4
  846. package/dist/tools/sanitize-output.spec.d.ts +0 -1
  847. package/dist/tools/sanitize-output.spec.js +0 -1
  848. package/dist/tools/shared.d.ts +0 -20
  849. package/dist/tools/transport-integrity.d.ts +0 -7
  850. package/dist/tools/upgrade-check.d.ts +0 -75
  851. package/dist/tools/wip-deploy-assist.d.ts +0 -34
  852. package/dist/tools/wip-verify-ledger.d.ts +0 -16
  853. package/dist/tools/wrap.d.ts +0 -45
@@ -1,1879 +1 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "$id": "https://wowok.net/schemas/onchain_operations_machine.json",
4
- "title": "Machine Operation",
5
- "description": "⚙️ Machine Object: Design and deploy automated workflow templates (Machines) that define how services are delivered, etc..",
6
- "type": "object",
7
- "properties": {
8
- "operation_type": {
9
- "type": "string",
10
- "const": "machine"
11
- },
12
- "data": {
13
- "type": "object",
14
- "properties": {
15
- "object": {
16
- "anyOf": [
17
- {
18
- "type": "string",
19
- "description": "String format: Reference an EXISTING object by its name (local mark) or on-chain object ID. Use when the Permission object already exists."
20
- },
21
- {
22
- "type": "object",
23
- "properties": {
24
- "name": {
25
- "description": "The name of the object",
26
- "type": "string"
27
- },
28
- "tags": {
29
- "description": "The tags of the object",
30
- "type": "array",
31
- "items": {
32
- "type": "string"
33
- }
34
- },
35
- "onChain": {
36
- "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.",
37
- "type": "boolean"
38
- },
39
- "replaceExistName": {
40
- "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).",
41
- "type": "boolean"
42
- },
43
- "permission": {
44
- "anyOf": [
45
- {
46
- "type": "string",
47
- "description": "String format: Reference an EXISTING object by its name (local mark) or on-chain object ID. Example: 'my-object' or '0x1234...'"
48
- },
49
- {
50
- "type": "object",
51
- "properties": {
52
- "name": {
53
- "description": "The name of the object",
54
- "type": "string"
55
- },
56
- "tags": {
57
- "description": "The tags of the object",
58
- "type": "array",
59
- "items": {
60
- "type": "string"
61
- }
62
- },
63
- "onChain": {
64
- "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.",
65
- "type": "boolean"
66
- },
67
- "replaceExistName": {
68
- "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).",
69
- "type": "boolean"
70
- },
71
- "description": {
72
- "description": "The description of the object",
73
- "type": "string"
74
- }
75
- },
76
- "additionalProperties": false,
77
- "description": "Object format: CREATE a NEW object with name, optional description, and visibility settings. Extends NamedObjectSchema with an additional 'description' field for detailed object information."
78
- }
79
- ],
80
- "description": "Two ways to specify an object: (1) STRING - Reference an EXISTING object by name or ID; (2) OBJECT - CREATE a NEW object with full configuration including optional name, tags, description, and visibility settings (local private by default, or public on-chain with onChain:true)."
81
- }
82
- },
83
- "additionalProperties": false,
84
- "description": "Object format: CREATE a NEW object with Permission-based access control. Includes optional name, tags, visibility settings, AND a Permission object (which itself can be referenced by string or created as a new object). Use this to create objects with managed access permissions."
85
- }
86
- ],
87
- "description": "Two ways to specify a Permission-managed object: (1) STRING - Reference an EXISTING Permission object by name or ID; (2) OBJECT - CREATE a NEW object with Permission access control, where the Permission can also be either referenced (string) or newly created (object). This is used when you need permission management but don't need to specify a token type."
88
- },
89
- "progress_new": {
90
- "description": "Generate new Progress object.",
91
- "type": "object",
92
- "properties": {
93
- "task": {
94
- "description": "Task bound to the Progress object. It is an object ID or name",
95
- "anyOf": [
96
- {
97
- "type": "string",
98
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
99
- },
100
- {
101
- "type": "null"
102
- }
103
- ]
104
- },
105
- "repository": {
106
- "description": "Set repository list for the Progress object. Used for consensus data management.",
107
- "anyOf": [
108
- {
109
- "type": "object",
110
- "properties": {
111
- "op": {
112
- "anyOf": [
113
- {
114
- "type": "string",
115
- "const": "add"
116
- },
117
- {
118
- "type": "string",
119
- "const": "set"
120
- }
121
- ]
122
- },
123
- "objects": {
124
- "type": "array",
125
- "items": {
126
- "type": "string",
127
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
128
- },
129
- "description": "List of object IDs or names to add or set"
130
- }
131
- },
132
- "required": [
133
- "op",
134
- "objects"
135
- ],
136
- "additionalProperties": false
137
- },
138
- {
139
- "type": "object",
140
- "properties": {
141
- "op": {
142
- "type": "string",
143
- "const": "remove"
144
- },
145
- "objects": {
146
- "type": "array",
147
- "items": {
148
- "type": "string",
149
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
150
- },
151
- "description": "List of object IDs or names to remove"
152
- }
153
- },
154
- "required": [
155
- "op",
156
- "objects"
157
- ],
158
- "additionalProperties": false
159
- },
160
- {
161
- "type": "object",
162
- "properties": {
163
- "op": {
164
- "type": "string",
165
- "const": "clear"
166
- }
167
- },
168
- "required": [
169
- "op"
170
- ],
171
- "additionalProperties": false
172
- }
173
- ]
174
- },
175
- "progress_namedOperator": {
176
- "description": "Add, set, and remove operators for the permission namespace of the Progress object.",
177
- "type": "object",
178
- "properties": {
179
- "op": {
180
- "anyOf": [
181
- {
182
- "type": "string",
183
- "const": "add"
184
- },
185
- {
186
- "type": "string",
187
- "const": "set"
188
- },
189
- {
190
- "type": "string",
191
- "const": "remove"
192
- }
193
- ]
194
- },
195
- "name": {
196
- "type": "string",
197
- "minLength": 1
198
- },
199
- "operators": {
200
- "anyOf": [
201
- {
202
- "description": "Array of account names, addresses, or mark names. Local marks are searched first for each entry. EXAMPLE: ['alice', '0x2...', 'bob']"
203
- },
204
- {
205
- "type": "object",
206
- "properties": {
207
- "entities": {
208
- "minItems": 1,
209
- "type": "array",
210
- "items": {
211
- "type": "object",
212
- "properties": {
213
- "name_or_address": {
214
- "type": "string",
215
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
216
- },
217
- "local_mark_first": {
218
- "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
219
- "type": "boolean"
220
- }
221
- },
222
- "additionalProperties": false,
223
- "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."
224
- }
225
- },
226
- "check_all_founded": {
227
- "default": true,
228
- "description": "Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)",
229
- "type": "boolean"
230
- }
231
- },
232
- "required": [
233
- "entities",
234
- "check_all_founded"
235
- ],
236
- "additionalProperties": false,
237
- "description": "Used to batch find account or object IDs by name"
238
- }
239
- ],
240
- "description": "Batch account or address lookup. Can be an array of strings (recommended for AI) or full object with explicit control. Array form auto-converts to { entities: [...], check_all_founded: true }. Empty arrays and {} elements are REJECTED (no-op transaction guard)."
241
- }
242
- },
243
- "required": [
244
- "op",
245
- "name",
246
- "operators"
247
- ],
248
- "additionalProperties": false
249
- },
250
- "namedNew": {
251
- "type": "object",
252
- "properties": {
253
- "name": {
254
- "description": "The name of the object",
255
- "type": "string"
256
- },
257
- "tags": {
258
- "description": "The tags of the object",
259
- "type": "array",
260
- "items": {
261
- "type": "string"
262
- }
263
- },
264
- "onChain": {
265
- "description": "CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.",
266
- "type": "boolean"
267
- },
268
- "replaceExistName": {
269
- "description": "FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).",
270
- "type": "boolean"
271
- }
272
- },
273
- "additionalProperties": false,
274
- "description": "Assign a name and optional tags to a new object. By default, names are stored LOCALLY (private) on your device. Set 'onChain: true' to create a PUBLIC on-chain identity visible to everyone. IMPORTANT: If the requested name is already taken, the operation will FAIL by default. Only set 'replaceExistName: true' when the user EXPLICITLY demands to forcefully claim the name."
275
- }
276
- },
277
- "additionalProperties": false
278
- },
279
- "description": {
280
- "description": "Description of the object.",
281
- "type": "string"
282
- },
283
- "repository": {
284
- "description": "Set repository list for the object. Used for consensus data management.",
285
- "anyOf": [
286
- {
287
- "type": "object",
288
- "properties": {
289
- "op": {
290
- "anyOf": [
291
- {
292
- "type": "string",
293
- "const": "add"
294
- },
295
- {
296
- "type": "string",
297
- "const": "set"
298
- }
299
- ]
300
- },
301
- "objects": {
302
- "type": "array",
303
- "items": {
304
- "type": "string",
305
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
306
- },
307
- "description": "List of object IDs or names to add or set"
308
- }
309
- },
310
- "required": [
311
- "op",
312
- "objects"
313
- ],
314
- "additionalProperties": false
315
- },
316
- {
317
- "type": "object",
318
- "properties": {
319
- "op": {
320
- "type": "string",
321
- "const": "remove"
322
- },
323
- "objects": {
324
- "type": "array",
325
- "items": {
326
- "type": "string",
327
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
328
- },
329
- "description": "List of object IDs or names to remove"
330
- }
331
- },
332
- "required": [
333
- "op",
334
- "objects"
335
- ],
336
- "additionalProperties": false
337
- },
338
- {
339
- "type": "object",
340
- "properties": {
341
- "op": {
342
- "type": "string",
343
- "const": "clear"
344
- }
345
- },
346
- "required": [
347
- "op"
348
- ],
349
- "additionalProperties": false
350
- }
351
- ]
352
- },
353
- "node": {
354
- "description": "CRITICAL: Choose ONE of two mutually exclusive modes:\n\n**Mode 1: NodeSchema (incremental operations)**\nUse for partial modifications: add, set, remove, clear, exchange, rename, remove prior node, add forward, remove forward.\nFormat: { \"op\": \"add\", \"nodes\": [...], \"bReplace\": false }\nThis mode modifies existing nodes incrementally.\n\n**Mode 2: NodeJsonOrMarkdownFileSchema (complete replacement)**\nUse for complete node redefinition from file.\nFormat: { \"json_or_markdown_file\": \"/path/to/nodes.json\" }\nIMPORTANT: This COMPLETELY REPLACES all existing nodes. File must contain node array [{...}, {...}], NOT an operation object with \"op\" field.\nSupported formats: JSON array or Markdown with code blocks.\nIf parsing fails, error includes line number and column information.",
355
- "anyOf": [
356
- {
357
- "oneOf": [
358
- {
359
- "type": "object",
360
- "properties": {
361
- "op": {
362
- "type": "string",
363
- "const": "add"
364
- },
365
- "nodes": {
366
- "type": "array",
367
- "items": {
368
- "type": "object",
369
- "properties": {
370
- "name": {
371
- "type": "string",
372
- "description": "Node name. ⚠️ T1 LOSSY POINT (B-1): do NOT name a node 'refund'/'refunded'/'deposit_refunded'/'deposit_deducted'/'disputed'/'cancelled' to model fund return or dispute — funds MUST move through the Allocation waterfall (order_allocators), NOT through Machine terminal nodes (R-M1-11). A node named 'refund' is a semantic lie: reaching it does not move funds by itself. Model refund as a refund-to-Order Allocator slot (a { Signer } or Order-owner recipient), and model dispute as the bound Arbitration, not a Machine node."
373
- },
374
- "role": {
375
- "description": "OPTIONAL business role tag for display layers and template reuse (E-9). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain; the MCP echoes it back as a NODE ROLES constraint warning and seed templates annotate it. Semantics: draft = pre-start cancellable, active = work in progress, delivered = work submitted awaiting acceptance, final = settlement endpoint, cancelled = refund endpoint. ⚠️ Advancing to ANY node never moves funds by itself: settlement/refund requires an explicit allocation call (alloc by guard) AFTER the terminal node is reached. Nothing auto-settles on-chain — plan the settlement trigger (merchant, keeper, or buyer action) explicitly in the template.",
376
- "type": "string",
377
- "enum": [
378
- "draft",
379
- "active",
380
- "delivered",
381
- "final",
382
- "cancelled"
383
- ]
384
- },
385
- "pairs": {
386
- "type": "array",
387
- "items": {
388
- "type": "object",
389
- "properties": {
390
- "prev_node": {
391
- "type": "string",
392
- "description": "Previous node name. Empty string '' means initial entry node (the first node in the workflow)."
393
- },
394
- "threshold": {
395
- "default": 0,
396
- "description": "Threshold to trigger node advancement. If total Forward weight is greater than or equal to threshold, node advancement is triggered. ⚠️ SINGLE-OPERATOR LOCK: each forward contributes its weight AT MOST ONCE (locked by its first operator; re-execution by others aborts E_NOT_THE_HOLDER). The maximum achievable weight of this Pair is the sum of its DISTINCT forward weights — if that sum < threshold the transition can NEVER migrate. Multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1), never one forward reused by several people.",
397
- "anyOf": [
398
- {
399
- "type": "number"
400
- },
401
- {
402
- "type": "string"
403
- }
404
- ]
405
- },
406
- "forwards": {
407
- "type": "array",
408
- "items": {
409
- "type": "object",
410
- "properties": {
411
- "name": {
412
- "type": "string",
413
- "description": "Forward name"
414
- },
415
- "namedOperator": {
416
- "description": "Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.",
417
- "anyOf": [
418
- {
419
- "type": "string"
420
- },
421
- {
422
- "type": "null"
423
- }
424
- ]
425
- },
426
- "permissionIndex": {
427
- "description": "Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).",
428
- "anyOf": [
429
- {
430
- "type": "number"
431
- },
432
- {
433
- "type": "string"
434
- },
435
- {
436
- "type": "null"
437
- }
438
- ]
439
- },
440
- "weight": {
441
- "anyOf": [
442
- {
443
- "type": "number"
444
- },
445
- {
446
- "type": "string"
447
- }
448
- ],
449
- "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
450
- },
451
- "guard": {
452
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
453
- "anyOf": [
454
- {
455
- "anyOf": [
456
- {
457
- "type": "object",
458
- "properties": {
459
- "guard": {
460
- "type": "string",
461
- "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
462
- },
463
- "retained_submission": {
464
- "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
465
- "anyOf": [
466
- {
467
- "type": "array",
468
- "items": {
469
- "anyOf": [
470
- {
471
- "type": "number"
472
- },
473
- {
474
- "type": "string"
475
- }
476
- ]
477
- }
478
- },
479
- {
480
- "type": "null"
481
- }
482
- ]
483
- }
484
- },
485
- "required": [
486
- "guard"
487
- ],
488
- "additionalProperties": false,
489
- "description": "OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."
490
- },
491
- {
492
- "type": "string",
493
- "description": "STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."
494
- }
495
- ]
496
- },
497
- {
498
- "type": "null"
499
- }
500
- ]
501
- }
502
- },
503
- "required": [
504
- "name",
505
- "weight"
506
- ],
507
- "additionalProperties": false,
508
- "description": "Forward in Machine object"
509
- },
510
- "description": "Forward list — operations to ENTER THIS NODE from prev_node. SEMANTIC CLARIFICATION: forwards describe INCOMING transitions (how to ARRIVE at this node), NOT outgoing transitions. Think of each forward as an 'entry door' to this node. Example: pair {prev_node:'A', forwards:[{name:'Go'}]} means 'use Go to advance FROM A TO THIS NODE'. For initial node (prev_node=''), forwards are operations to enter this node from the start state. DIAGRAM: A --[Go]--> B means the pair belongs to node B (destination), with prev_node='A'. WARNING: forwards belong to the DESTINATION node's pair, NOT the source node. Placing a forward on the wrong pair will cause Progress to get stuck."
511
- }
512
- },
513
- "required": [
514
- "prev_node",
515
- "threshold",
516
- "forwards"
517
- ],
518
- "additionalProperties": false,
519
- "description": "Node pair in Machine object"
520
- },
521
- "description": "Node pair list"
522
- },
523
- "optional": {
524
- "description": "OPTIONAL pure-side-action leaf marker (v32): order completion NEVER routes through this node and it must never gate money (e.g. a review node the buyer may skip entirely). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain. Composition audits exempt an optional leaf from the FUND-EXIT-01 terminal fund-reachability search: a review leaf with no allocator is by design, not a stranded-funds bug (upw F-06, 6939_upwork-261016).",
525
- "type": "boolean"
526
- }
527
- },
528
- "required": [
529
- "name",
530
- "pairs"
531
- ],
532
- "additionalProperties": false,
533
- "description": "Node in Machine object"
534
- },
535
- "description": "List of nodes to add (or replace in place when bReplace=true)."
536
- },
537
- "bReplace": {
538
- "description": "Whether to replace existing nodes. If true, existing nodes will be replaced; if false, nodes will be added by merging. This is the ONLY supported way to rewrite nodes on an EXISTING Machine.",
539
- "type": "boolean"
540
- }
541
- },
542
- "required": [
543
- "op",
544
- "nodes"
545
- ],
546
- "additionalProperties": false,
547
- "description": "Add nodes."
548
- },
549
- {
550
- "type": "object",
551
- "properties": {
552
- "op": {
553
- "type": "string",
554
- "const": "set"
555
- },
556
- "nodes": {
557
- "type": "array",
558
- "items": {
559
- "type": "object",
560
- "properties": {
561
- "name": {
562
- "type": "string",
563
- "description": "Node name. ⚠️ T1 LOSSY POINT (B-1): do NOT name a node 'refund'/'refunded'/'deposit_refunded'/'deposit_deducted'/'disputed'/'cancelled' to model fund return or dispute — funds MUST move through the Allocation waterfall (order_allocators), NOT through Machine terminal nodes (R-M1-11). A node named 'refund' is a semantic lie: reaching it does not move funds by itself. Model refund as a refund-to-Order Allocator slot (a { Signer } or Order-owner recipient), and model dispute as the bound Arbitration, not a Machine node."
564
- },
565
- "role": {
566
- "description": "OPTIONAL business role tag for display layers and template reuse (E-9). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain; the MCP echoes it back as a NODE ROLES constraint warning and seed templates annotate it. Semantics: draft = pre-start cancellable, active = work in progress, delivered = work submitted awaiting acceptance, final = settlement endpoint, cancelled = refund endpoint. ⚠️ Advancing to ANY node never moves funds by itself: settlement/refund requires an explicit allocation call (alloc by guard) AFTER the terminal node is reached. Nothing auto-settles on-chain — plan the settlement trigger (merchant, keeper, or buyer action) explicitly in the template.",
567
- "type": "string",
568
- "enum": [
569
- "draft",
570
- "active",
571
- "delivered",
572
- "final",
573
- "cancelled"
574
- ]
575
- },
576
- "pairs": {
577
- "type": "array",
578
- "items": {
579
- "type": "object",
580
- "properties": {
581
- "prev_node": {
582
- "type": "string",
583
- "description": "Previous node name. Empty string '' means initial entry node (the first node in the workflow)."
584
- },
585
- "threshold": {
586
- "default": 0,
587
- "description": "Threshold to trigger node advancement. If total Forward weight is greater than or equal to threshold, node advancement is triggered. ⚠️ SINGLE-OPERATOR LOCK: each forward contributes its weight AT MOST ONCE (locked by its first operator; re-execution by others aborts E_NOT_THE_HOLDER). The maximum achievable weight of this Pair is the sum of its DISTINCT forward weights — if that sum < threshold the transition can NEVER migrate. Multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1), never one forward reused by several people.",
588
- "anyOf": [
589
- {
590
- "type": "number"
591
- },
592
- {
593
- "type": "string"
594
- }
595
- ]
596
- },
597
- "forwards": {
598
- "type": "array",
599
- "items": {
600
- "type": "object",
601
- "properties": {
602
- "name": {
603
- "type": "string",
604
- "description": "Forward name"
605
- },
606
- "namedOperator": {
607
- "description": "Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.",
608
- "anyOf": [
609
- {
610
- "type": "string"
611
- },
612
- {
613
- "type": "null"
614
- }
615
- ]
616
- },
617
- "permissionIndex": {
618
- "description": "Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).",
619
- "anyOf": [
620
- {
621
- "type": "number"
622
- },
623
- {
624
- "type": "string"
625
- },
626
- {
627
- "type": "null"
628
- }
629
- ]
630
- },
631
- "weight": {
632
- "anyOf": [
633
- {
634
- "type": "number"
635
- },
636
- {
637
- "type": "string"
638
- }
639
- ],
640
- "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
641
- },
642
- "guard": {
643
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
644
- "anyOf": [
645
- {
646
- "anyOf": [
647
- {
648
- "type": "object",
649
- "properties": {
650
- "guard": {
651
- "type": "string",
652
- "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
653
- },
654
- "retained_submission": {
655
- "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
656
- "anyOf": [
657
- {
658
- "type": "array",
659
- "items": {
660
- "anyOf": [
661
- {
662
- "type": "number"
663
- },
664
- {
665
- "type": "string"
666
- }
667
- ]
668
- }
669
- },
670
- {
671
- "type": "null"
672
- }
673
- ]
674
- }
675
- },
676
- "required": [
677
- "guard"
678
- ],
679
- "additionalProperties": false,
680
- "description": "OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."
681
- },
682
- {
683
- "type": "string",
684
- "description": "STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."
685
- }
686
- ]
687
- },
688
- {
689
- "type": "null"
690
- }
691
- ]
692
- }
693
- },
694
- "required": [
695
- "name",
696
- "weight"
697
- ],
698
- "additionalProperties": false,
699
- "description": "Forward in Machine object"
700
- },
701
- "description": "Forward list — operations to ENTER THIS NODE from prev_node. SEMANTIC CLARIFICATION: forwards describe INCOMING transitions (how to ARRIVE at this node), NOT outgoing transitions. Think of each forward as an 'entry door' to this node. Example: pair {prev_node:'A', forwards:[{name:'Go'}]} means 'use Go to advance FROM A TO THIS NODE'. For initial node (prev_node=''), forwards are operations to enter this node from the start state. DIAGRAM: A --[Go]--> B means the pair belongs to node B (destination), with prev_node='A'. WARNING: forwards belong to the DESTINATION node's pair, NOT the source node. Placing a forward on the wrong pair will cause Progress to get stuck."
702
- }
703
- },
704
- "required": [
705
- "prev_node",
706
- "threshold",
707
- "forwards"
708
- ],
709
- "additionalProperties": false,
710
- "description": "Node pair in Machine object"
711
- },
712
- "description": "Node pair list"
713
- },
714
- "optional": {
715
- "description": "OPTIONAL pure-side-action leaf marker (v32): order completion NEVER routes through this node and it must never gate money (e.g. a review node the buyer may skip entirely). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain. Composition audits exempt an optional leaf from the FUND-EXIT-01 terminal fund-reachability search: a review leaf with no allocator is by design, not a stranded-funds bug (upw F-06, 6939_upwork-261016).",
716
- "type": "boolean"
717
- }
718
- },
719
- "required": [
720
- "name",
721
- "pairs"
722
- ],
723
- "additionalProperties": false,
724
- "description": "Node in Machine object"
725
- },
726
- "description": "List of nodes for a freshly CREATED Machine. xk9 F-02: REFUSED on an existing Machine — op set implies a clear-and-rewrite of the on-chain node table that permanently corrupts it (E_EMPTY_MACHINE on every later publish, no repair). To rewrite an existing Machine use op:add with bReplace:true."
727
- },
728
- "bReplace": {
729
- "description": "Whether to replace existing nodes. If true, existing nodes will be replaced; if false, nodes will be added by merging.",
730
- "type": "boolean"
731
- }
732
- },
733
- "required": [
734
- "op",
735
- "nodes"
736
- ],
737
- "additionalProperties": false,
738
- "description": "Set nodes (CREATE-ONLY — refused on an existing Machine; use add+bReplace there)."
739
- },
740
- {
741
- "type": "object",
742
- "properties": {
743
- "op": {
744
- "type": "string",
745
- "const": "remove"
746
- },
747
- "nodes": {
748
- "type": "array",
749
- "items": {
750
- "type": "string"
751
- },
752
- "description": "List of node names to delete."
753
- }
754
- },
755
- "required": [
756
- "op",
757
- "nodes"
758
- ],
759
- "additionalProperties": false,
760
- "description": "Delete nodes."
761
- },
762
- {
763
- "type": "object",
764
- "properties": {
765
- "op": {
766
- "type": "string",
767
- "const": "clear"
768
- }
769
- },
770
- "required": [
771
- "op"
772
- ],
773
- "additionalProperties": false,
774
- "description": "Clear all nodes."
775
- },
776
- {
777
- "type": "object",
778
- "properties": {
779
- "op": {
780
- "type": "string",
781
- "const": "exchange"
782
- },
783
- "node_one": {
784
- "type": "string",
785
- "description": "Name of the first node."
786
- },
787
- "node_other": {
788
- "type": "string",
789
- "description": "Name of the second node."
790
- }
791
- },
792
- "required": [
793
- "op",
794
- "node_one",
795
- "node_other"
796
- ],
797
- "additionalProperties": false,
798
- "description": "Exchange the positions of two nodes."
799
- },
800
- {
801
- "type": "object",
802
- "properties": {
803
- "op": {
804
- "type": "string",
805
- "const": "rename"
806
- },
807
- "node_name_old": {
808
- "type": "string",
809
- "description": "Name of thenode."
810
- },
811
- "node_name_new": {
812
- "type": "string",
813
- "description": "New name of the node."
814
- }
815
- },
816
- "required": [
817
- "op",
818
- "node_name_old",
819
- "node_name_new"
820
- ],
821
- "additionalProperties": false,
822
- "description": "Rename node."
823
- },
824
- {
825
- "type": "object",
826
- "properties": {
827
- "op": {
828
- "type": "string",
829
- "const": "remove prior node"
830
- },
831
- "pairs": {
832
- "type": "array",
833
- "items": {
834
- "type": "object",
835
- "properties": {
836
- "prior_node_name": {
837
- "type": "array",
838
- "items": {
839
- "type": "string"
840
- },
841
- "description": "List of previous node names to delete."
842
- },
843
- "node_name": {
844
- "type": "string",
845
- "description": "Name of the next node."
846
- }
847
- },
848
- "required": [
849
- "prior_node_name",
850
- "node_name"
851
- ],
852
- "additionalProperties": false
853
- },
854
- "description": "List of previous-next node pairs to delete."
855
- }
856
- },
857
- "required": [
858
- "op",
859
- "pairs"
860
- ],
861
- "additionalProperties": false,
862
- "description": "Delete previous-next node pairs."
863
- },
864
- {
865
- "type": "object",
866
- "properties": {
867
- "op": {
868
- "type": "string",
869
- "const": "add forward"
870
- },
871
- "data": {
872
- "type": "array",
873
- "items": {
874
- "type": "object",
875
- "properties": {
876
- "prior_node_name": {
877
- "type": "string",
878
- "description": "Name of the previous node."
879
- },
880
- "node_name": {
881
- "type": "string",
882
- "description": "Name of the next node."
883
- },
884
- "forward": {
885
- "type": "array",
886
- "items": {
887
- "type": "object",
888
- "properties": {
889
- "name": {
890
- "type": "string",
891
- "description": "Forward name"
892
- },
893
- "namedOperator": {
894
- "description": "Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.",
895
- "anyOf": [
896
- {
897
- "type": "string"
898
- },
899
- {
900
- "type": "null"
901
- }
902
- ]
903
- },
904
- "permissionIndex": {
905
- "description": "Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).",
906
- "anyOf": [
907
- {
908
- "type": "number"
909
- },
910
- {
911
- "type": "string"
912
- },
913
- {
914
- "type": "null"
915
- }
916
- ]
917
- },
918
- "weight": {
919
- "anyOf": [
920
- {
921
- "type": "number"
922
- },
923
- {
924
- "type": "string"
925
- }
926
- ],
927
- "description": "Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."
928
- },
929
- "guard": {
930
- "description": "Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).",
931
- "anyOf": [
932
- {
933
- "anyOf": [
934
- {
935
- "type": "object",
936
- "properties": {
937
- "guard": {
938
- "type": "string",
939
- "description": "Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"
940
- },
941
- "retained_submission": {
942
- "description": "Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.",
943
- "anyOf": [
944
- {
945
- "type": "array",
946
- "items": {
947
- "anyOf": [
948
- {
949
- "type": "number"
950
- },
951
- {
952
- "type": "string"
953
- }
954
- ]
955
- }
956
- },
957
- {
958
- "type": "null"
959
- }
960
- ]
961
- }
962
- },
963
- "required": [
964
- "guard"
965
- ],
966
- "additionalProperties": false,
967
- "description": "OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."
968
- },
969
- {
970
- "type": "string",
971
- "description": "STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."
972
- }
973
- ]
974
- },
975
- {
976
- "type": "null"
977
- }
978
- ]
979
- }
980
- },
981
- "required": [
982
- "name",
983
- "weight"
984
- ],
985
- "additionalProperties": false,
986
- "description": "Forward in Machine object"
987
- },
988
- "description": "List of operations between the previous and next nodes."
989
- },
990
- "threshold": {
991
- "description": "Threshold of operations that need to be completed to migrate from the previous node to the next node.",
992
- "anyOf": [
993
- {
994
- "type": "integer",
995
- "minimum": 0,
996
- "maximum": 9007199254740991
997
- },
998
- {
999
- "type": "null"
1000
- }
1001
- ]
1002
- }
1003
- },
1004
- "required": [
1005
- "prior_node_name",
1006
- "node_name",
1007
- "forward"
1008
- ],
1009
- "additionalProperties": false
1010
- },
1011
- "description": "List of operations to add."
1012
- }
1013
- },
1014
- "required": [
1015
- "op",
1016
- "data"
1017
- ],
1018
- "additionalProperties": false,
1019
- "description": "Add operations."
1020
- },
1021
- {
1022
- "type": "object",
1023
- "properties": {
1024
- "op": {
1025
- "type": "string",
1026
- "const": "remove forward"
1027
- },
1028
- "data": {
1029
- "type": "array",
1030
- "items": {
1031
- "type": "object",
1032
- "properties": {
1033
- "prior_node_name": {
1034
- "type": "string",
1035
- "description": "Name of the previous node."
1036
- },
1037
- "node_name": {
1038
- "type": "string",
1039
- "description": "Name of the next node."
1040
- },
1041
- "forward_name": {
1042
- "type": "array",
1043
- "items": {
1044
- "type": "string"
1045
- },
1046
- "description": "List of operation names to delete."
1047
- }
1048
- },
1049
- "required": [
1050
- "prior_node_name",
1051
- "node_name",
1052
- "forward_name"
1053
- ],
1054
- "additionalProperties": false
1055
- },
1056
- "description": "List of operations to delete."
1057
- }
1058
- },
1059
- "required": [
1060
- "op",
1061
- "data"
1062
- ],
1063
- "additionalProperties": false,
1064
- "description": "Delete operations."
1065
- }
1066
- ]
1067
- },
1068
- {
1069
- "type": "object",
1070
- "properties": {
1071
- "json_or_markdown_file": {
1072
- "type": "string",
1073
- "description": "Path to a JSON or Markdown file containing node array for COMPLETE REPLACEMENT of all nodes.\n\n**File Format Requirements:**\n- Must contain a JSON ARRAY of node objects: [{\"name\": \"...\", \"pairs\": [...]}, {...}]\n- NOT an operation object with \"op\" field (use NodeSchema for operations)\n- Supports JSON or Markdown (with ```json code blocks)\n\n**Node Structure:**\nEach node is a directed graph element representing a workflow STATE that an order\ncan rest in. Its Pairs are the INCOMING edges — this is the one convention the\nchain enforces, and getting it backwards silently builds a wrong graph:\n- name: Node identifier — the DESTINATION of every pair it owns\n- role: (optional) business role tag for display layers — one of draft/active/delivered/final/cancelled. SESSION METADATA ONLY (not stored on-chain; echoed back as a NODE ROLES warning)\n- pairs: Array of {prev_node, forwards, threshold} — edges ENTERING this node. The key is `prev_node`; `prior_node` is not recognized and is silently dropped.\n- forwards: Operations that advance INTO this node FROM its prev_node (NOT operations available from this node)\n- threshold: Weight required to migrate into this node along that pair\n\nDiagram `A --[Go]--> B` therefore lives in node **B**: {name:\"B\", pairs:[{prev_node:\"A\", forwards:[{name:\"Go\", weight:1}]}]}.\n\n**Forward names must determine the destination.** `next_node` is a CALLER argument\nand the chain resolves (current, next_node, forward) inside the\ndestination node, so one forward name shared by two destinations\nfrom the same prev_node is legal and lets the caller pick the outcome — including\nwhether a refund Allocator ever fires. Give each destination its own forward name.\n\n**Behavior:**\n- COMPLETELY REPLACES all existing nodes (equivalent to \"set\" with bReplace=true)\n- Auto-detects format based on file content\n- If parsing fails, error includes line number and column information"
1074
- }
1075
- },
1076
- "required": [
1077
- "json_or_markdown_file"
1078
- ],
1079
- "additionalProperties": false
1080
- }
1081
- ]
1082
- },
1083
- "pause": {
1084
- "description": "Whether to pause generating new Progress objects. Chain truth (the progress-generation entry asserts !bPaused): the pause gates NEW order entry only — in-flight Progress keeps advancing and settling (yfd-ln F-13 misread this as a freeze switch; it never was one).",
1085
- "type": "boolean"
1086
- },
1087
- "publish": {
1088
- "description": "Whether to publish the object. After the object is published, new Progress objects can be generated; and node settings will no longer be changeable. ⚠️ PUBLISH IS A ONE-WAY DOOR AND THE CHAIN VALIDATES THE WHOLE GRAPH AT THAT MOMENT: the on-chain publish gate rejects a Machine that is empty, has no entry edge (no pair with prev_node:\"\"), has an entry pair with no forward, references a prev_node that is not a node of this Machine, carries a forward with neither namedOperator nor permissionIndex (a guard is NOT an identity), or has a pair whose threshold exceeds the sum of its forward weights (each forward counts at most once). These aborts (machine:17-22) fire BEFORE the publish lands, so the graph is still editable — but after it succeeds, nodes/forwards, Guard bindings and Service.machine are frozen forever, and a broken graph would only surface at the first transition with no repair path. Send the nodes in the SAME call as publish:true (bReplace:true or op:\"set\") so the complete graph is validated together. ⚠️ Before publishing, enumerate the graph STOP NODES (nodes with no outgoing Pair) plus every waiting state (review window, handover, open dispute) and verify each has a defined fund exit in the Service order_allocators — withdrawal (release) AND refund. Machine + Allocator are immutable after publish (IMMUT-001); an uncovered stop node strands funds permanently (rule R-M5-03, checklist pattern.fund_flow_stop_node_coverage). ⚠️ REBUILD COST DISCLOSURE (S12-②, ksk4 F-01): every business constant you bake into this graph (campaign deadline, goal, windows, schedules) becomes immutable WITH the machine. Changing even ONE constant after publish requires: new guard → clone the whole node graph into a NEW machine → publish → a NEW Service → re-hang every repository/reward/arbitration/allocator/WIP → republish (≈5 txs / ~1 min measured on a 16-node graph), and in-flight orders stay pointed at the OLD machine forever. THIS OPERATION WILL REQUIRE A NEW SERVICE if any baked-in parameter later changes — finalize mutable business parameters BEFORE publishing (Campaign-structure change is protocol-train scoped; the MCP face cannot patch a published machine).",
1089
- "type": "boolean"
1090
- },
1091
- "owner_receive": {
1092
- "description": "Unwrap CoinWrapper objects and other objects received by this Machine object and send them to the owner of its Permission object.\n\nACCEPTED FORMATS (F-06 unified receive operation block):\n• 'recently' (string literal) — auto-query and receive ALL recently received objects.\n Use this for the common case: \"withdraw everything the object has received\" — for\n order.receive this is the correct default for \"the buyer got their refund\".\n Example: receive: 'recently'\n• bare object id (string, 0x-prefixed) — one-object form, auto-expanded (F-15):\n pass the id of the single received object you want to unwrap (e.g. a CoinWrapper id).\n Example: receive: '0xabc...'\n• ReceivedNormal[] (array) — explicit list of received objects to unwrap.\n Use this when you want to receive specific objects only (not all).\n Example: receive: [{id: '0xobj1', type: '0x2::coin::Coin<0x2::wow::WOW>'}]\n• ReceivedBalance ({token_type, balance, received: [{id, balance, payment}]}) —\n receive a balance record from a specific Payment/payer.\n Use this for precise balance targeting (advanced — usually after querying\n the object's received history via query_received).\n Example: receive: {token_type: '0x2::wow::WOW', balance: 1000000, received: [{id: '0xrec1', balance: 1000000, payment: '0xpay1'}]}\nANTI-PATTERN: do NOT wrap in {result: ...} — pass the value directly.",
1093
- "anyOf": [
1094
- {
1095
- "type": "string",
1096
- "const": "recently"
1097
- },
1098
- {
1099
- "type": "string",
1100
- "pattern": "^0x[0-9a-fA-F]{8,}$"
1101
- },
1102
- {
1103
- "minItems": 1,
1104
- "type": "array",
1105
- "items": {
1106
- "type": "object",
1107
- "properties": {
1108
- "id": {
1109
- "type": "string",
1110
- "minLength": 1,
1111
- "description": "Received object ID"
1112
- },
1113
- "type": {
1114
- "type": "string",
1115
- "minLength": 1,
1116
- "description": "Object type"
1117
- },
1118
- "content_raw": {
1119
- "description": "Raw content data"
1120
- },
1121
- "version": {
1122
- "description": "Object version, required to build a Receiving<T> argument for owner_receive",
1123
- "type": "string"
1124
- },
1125
- "digest": {
1126
- "description": "Object digest, required to build a Receiving<T> argument for owner_receive",
1127
- "type": "string"
1128
- }
1129
- },
1130
- "required": [
1131
- "id",
1132
- "type"
1133
- ],
1134
- "additionalProperties": false,
1135
- "description": "Received normal object record"
1136
- }
1137
- },
1138
- {
1139
- "type": "object",
1140
- "properties": {
1141
- "balance": {
1142
- "anyOf": [
1143
- {
1144
- "type": "number"
1145
- },
1146
- {
1147
- "type": "string"
1148
- }
1149
- ],
1150
- "description": "A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05WOW\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is only within the safe integer range (±2^53); numbers outside it are REJECTED, use a numeric string instead. PRECISION RULE: for values exceeding 2^53 (9007199254740991), ALWAYS use format (1) or (2) — JS numbers lose integer precision silently and such inputs are blocked. Raw amounts must be plain non-negative integers; a decimal value without a token symbol (e.g. \"2.5\") is rejected — append the symbol (\"2.5WOW\") so the Fund Processing Layer converts it. WARNING — BARE INTEGER MEANS SMALLEST UNIT, NOT TOKENS: formats (2)/(3) are NEVER interpreted as display tokens. For example amount=\"5\" or 5 means 5 raw units = 0.000000005 WOW (9 decimals) — NOT 5 WOW. When the user asks for a token amount, you MUST use display format (\"5WOW\", \"2USDC\"); a bare integer is only correct for unitless counts (e.g. stock quantity) or when you computed exact raw units yourself. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer, where the token's FULL type, decimals and raw amount are always visible. MULTIPLE ISSUERS: several on-chain tokens may legally share the same symbol (e.g. multiple \"USDT\" coins). When a bare symbol matches more than one token, the operation is BLOCKED and every candidate is listed with full details (type, name, decimals, verified tag) — present the list to the USER and let them choose (they may answer by number), then re-issue with the chosen token's FULL type string in type_parameter; never guess an issuer from the bare symbol. MISSING TOKEN INFO: when a token's precision cannot be resolved, the operation is REFUSED (raw u64 included — amount magnitude could not be verified). Recovery: provide the token's FULL type in package::module::Name form in type_parameter (a bare symbol like \"USDT\" cannot be resolved), and verify the WOW network is correct. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: service sale prices, compensation fund balances, Treasury deposits, arbitration fees, reward amounts, stock quantities."
1151
- },
1152
- "token_type": {
1153
- "type": "string",
1154
- "description": "Asset type of Coin objects. Supports CoinWrapper<...> format for order receive operations."
1155
- },
1156
- "received": {
1157
- "type": "array",
1158
- "items": {
1159
- "type": "object",
1160
- "properties": {
1161
- "id": {
1162
- "type": "string",
1163
- "description": "Received CoinWrapper object ID"
1164
- },
1165
- "balance": {
1166
- "anyOf": [
1167
- {
1168
- "type": "number"
1169
- },
1170
- {
1171
- "type": "string"
1172
- }
1173
- ],
1174
- "description": "A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05WOW\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is only within the safe integer range (±2^53); numbers outside it are REJECTED, use a numeric string instead. PRECISION RULE: for values exceeding 2^53 (9007199254740991), ALWAYS use format (1) or (2) — JS numbers lose integer precision silently and such inputs are blocked. Raw amounts must be plain non-negative integers; a decimal value without a token symbol (e.g. \"2.5\") is rejected — append the symbol (\"2.5WOW\") so the Fund Processing Layer converts it. WARNING — BARE INTEGER MEANS SMALLEST UNIT, NOT TOKENS: formats (2)/(3) are NEVER interpreted as display tokens. For example amount=\"5\" or 5 means 5 raw units = 0.000000005 WOW (9 decimals) — NOT 5 WOW. When the user asks for a token amount, you MUST use display format (\"5WOW\", \"2USDC\"); a bare integer is only correct for unitless counts (e.g. stock quantity) or when you computed exact raw units yourself. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer, where the token's FULL type, decimals and raw amount are always visible. MULTIPLE ISSUERS: several on-chain tokens may legally share the same symbol (e.g. multiple \"USDT\" coins). When a bare symbol matches more than one token, the operation is BLOCKED and every candidate is listed with full details (type, name, decimals, verified tag) — present the list to the USER and let them choose (they may answer by number), then re-issue with the chosen token's FULL type string in type_parameter; never guess an issuer from the bare symbol. MISSING TOKEN INFO: when a token's precision cannot be resolved, the operation is REFUSED (raw u64 included — amount magnitude could not be verified). Recovery: provide the token's FULL type in package::module::Name form in type_parameter (a bare symbol like \"USDT\" cannot be resolved), and verify the WOW network is correct. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: service sale prices, compensation fund balances, Treasury deposits, arbitration fees, reward amounts, stock quantities."
1175
- },
1176
- "payment": {
1177
- "type": "string",
1178
- "description": "Payment object ID"
1179
- },
1180
- "type": {
1181
- "description": "Type of the received object (or inner coin type); used for token_type detection",
1182
- "type": "string"
1183
- },
1184
- "version": {
1185
- "description": "Object version, required to build a Receiving<T> argument for owner_receive",
1186
- "type": "string"
1187
- },
1188
- "digest": {
1189
- "description": "Object digest, required to build a Receiving<T> argument for owner_receive",
1190
- "type": "string"
1191
- }
1192
- },
1193
- "required": [
1194
- "id",
1195
- "balance",
1196
- "payment"
1197
- ],
1198
- "additionalProperties": false,
1199
- "description": "Received CoinWrapper object record"
1200
- },
1201
- "description": "Received records of Coin objects"
1202
- }
1203
- },
1204
- "required": [
1205
- "balance",
1206
- "token_type",
1207
- "received"
1208
- ],
1209
- "additionalProperties": false,
1210
- "description": "Received record of Coin objects"
1211
- }
1212
- ]
1213
- },
1214
- "um": {
1215
- "description": "Contact object ID or name.",
1216
- "anyOf": [
1217
- {
1218
- "type": "string",
1219
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
1220
- },
1221
- {
1222
- "type": "null"
1223
- }
1224
- ]
1225
- },
1226
- "reentry_kind": {
1227
- "description": "AP-3 loop-semantics declaration for the publish audit (ctra F-06 root cure): overrides the word-stem loop classifier when the node graph contains a cycle. 'none' = default (word-stem classification) / 'review-loop' = same-order no-charge revisits / 'paid-cycle' = per-revisit fee, fund gate required. MCP-side audit declaration ONLY (pre_publish harness hook) — never sent on-chain; the handler strips it before the SDK call. Mirror of the template frontmatter twin (template-loader).",
1228
- "type": "string",
1229
- "enum": [
1230
- "none",
1231
- "review-loop",
1232
- "paid-cycle"
1233
- ]
1234
- }
1235
- },
1236
- "required": [
1237
- "object"
1238
- ],
1239
- "additionalProperties": false,
1240
- "description": "On-chain Machine operations. USAGE: (1) CREATE NEW: Set 'object' field with OBJECT format {name, permission, ...} to create a Machine. NOTE: 'name' goes INSIDE 'object', NOT at the data root level. 'permission' can be a new Permission object or reference an existing one - check 'object' field description for details. (2) OPERATE EXISTING: Set 'object' field with STRING format (object ID or name). The 'object' field is CRITICAL and REQUIRED in both cases. STRING for existing, OBJECT for new creation."
1241
- },
1242
- "idempotency_key": {
1243
- "type": "string",
1244
- "minLength": 8,
1245
- "maxLength": 128,
1246
- "pattern": "^[A-Za-z0-9._:-]+$",
1247
- "description": "F-RQ-13A (prescription ⑨): idempotency key for this business attempt. REPLAY GUARD: if a previous call with the SAME key is still open (dispatched but outcome unresolved, or already committed), this call is HELD — you get a structured state_conflict envelope with the prior attempt's verification data instead of a second on-chain submission (the ghost-order guard: two live mainnet orders, two escrows). Lifecycle: a deterministic failure (nothing submitted / provably reverted) clears the key — fix the cause and retry with the SAME key; an unknown-outcome failure (submission may have landed) keeps the key HELD — verify on-chain state first (result.submission_verification tells you where to look), and only retry with a NEW key once the outcome is resolved. Keep one key per business attempt (e.g. 'ord-20261030-042-buy'); do not reuse across attempts."
1248
- },
1249
- "env": {
1250
- "type": "object",
1251
- "properties": {
1252
- "account": {
1253
- "default": "",
1254
- "type": "string",
1255
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
1256
- },
1257
- "permission_guard": {
1258
- "description": "List of permission guard IDs. Used to extend additional operation permissions (requires verification and configuration in the Permission object).",
1259
- "type": "array",
1260
- "items": {
1261
- "type": "string"
1262
- }
1263
- },
1264
- "no_cache": {
1265
- "description": "Whether to disable caching.",
1266
- "type": "boolean"
1267
- },
1268
- "network": {
1269
- "description": "Omit in chat-client contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.",
1270
- "type": "string",
1271
- "enum": [
1272
- "localnet",
1273
- "testnet",
1274
- "mainnet"
1275
- ]
1276
- },
1277
- "referrer": {
1278
- "description": "Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).",
1279
- "type": "string"
1280
- },
1281
- "no_auto_register": {
1282
- "description": "Opt-out of SDK-level Entity auto-registration. By default, a business transaction whose sender has no entry in the global Entity table automatically appends an entity registration: the sender gets registered and receives an owned Resource object (their on-chain mark book) in the wallet. Set true ONLY when the user explicitly cancelled their entity registration or demands that the transaction not touch the Entity table.",
1283
- "type": "boolean"
1284
- },
1285
- "confirmed": {
1286
- "description": "Phase 2 ConfirmGate: set to true to proceed after a 'pending_confirmation' result. The operation is NOT executed until you re-call with confirmed=true after user consent.",
1287
- "type": "boolean"
1288
- },
1289
- "user_intent_phrases": {
1290
- "description": "Phase 2 ConfirmGate: explicit user intent phrases collected from conversation context (e.g. 'use default account', 'force publish'). Used to bypass confirmation rules whose bypass_on_explicit_intent matches.",
1291
- "type": "array",
1292
- "items": {
1293
- "type": "string"
1294
- }
1295
- },
1296
- "plan_approval": {
1297
- "description": "K3 24 PlanApproval: id of a goal whose plan was approved via goal_operation action='approve'. When set: 1) the ConfirmGate treats fail-open rules (standard/none levels) as pre-approved for operations under this goal's plan; 2) after successful CREATION operations, the created objects are auto-registered into the goal (GoalRecord.objects + its TaskProcess manifest — ACT station 'execution registers'). Fail-closed levels (irreversible/publish/amount) still require per-operation confirmation with env.confirmed=true.",
1298
- "type": "string"
1299
- },
1300
- "client_schema_version": {
1301
- "description": "Client-side schema version (semver, e.g. '1.0.0'). When provided, the server checks compatibility and attaches warnings if mismatched.",
1302
- "type": "string"
1303
- },
1304
- "schema_strict_mode": {
1305
- "default": false,
1306
- "description": "When true, schema incompatibility returns an error instead of a warning. Default: false (warn mode).",
1307
- "type": "boolean"
1308
- },
1309
- "dry_run": {
1310
- "description": "Phase 1 dry_run: when true, SIMULATE the transaction without signing or submitting. Returns effects + events showing what WOULD happen — no on-chain state is modified, no gas is charged. Use this to verify that an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
1311
- "type": "boolean"
1312
- },
1313
- "window_profile": {
1314
- "description": "Time-window profile for trial runs (N8 ktt6 F-14 re-carving of the 'business windows are never test-compressed' ruling, 2026-11-04). 'production' (default): compressed time-window violations BLOCK publish exactly as before. 'test': compressed windows are ADMITTED so a disposable trial store can run its full lifecycle fast — R-TIME-PROFILE violations degrade to loud named disclosures, and the publish itself is BLOCKED on a real network (testnet/mainnet); point the trial at a local/dev chain (env.network='localnet'). Trial discipline: test-profile stores are throwaway — a production store must re-issue WITHOUT this flag (guards freeze at publish, so compressed windows are unrepairable except by rebuilding the store).",
1315
- "type": "string",
1316
- "enum": [
1317
- "production",
1318
- "test"
1319
- ]
1320
- },
1321
- "response_level": {
1322
- "description": "Write-success response size. 'compact' (default) trims the structured result to key fields (digest + created object references); 'full' includes the complete raw result. Default: compact.",
1323
- "type": "string",
1324
- "enum": [
1325
- "compact",
1326
- "full"
1327
- ]
1328
- },
1329
- "confirm_mode": {
1330
- "description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
1331
- "type": "string",
1332
- "enum": [
1333
- "full",
1334
- "streamlined",
1335
- "quiet"
1336
- ]
1337
- }
1338
- },
1339
- "required": [
1340
- "account",
1341
- "schema_strict_mode"
1342
- ],
1343
- "additionalProperties": false,
1344
- "description": "IMPORTANT: Execution environment includes: account for signing operations, network selection (testnet | localnet | mainnet), additional Guard permissions, and more. Used to specify context information during the call. If account is not specified, the default account (\"\") will be used. NOTE: by default the SDK auto-registers the sender in the global Entity table when absent (first business transaction; the account receives an owned Resource object). Set no_auto_register=true only on explicit user request."
1345
- },
1346
- "submission": {
1347
- "type": "object",
1348
- "properties": {
1349
- "type": {
1350
- "type": "string",
1351
- "const": "submission",
1352
- "description": "Discriminator for this result variant. Constraint: always 'submission'. Example: 'submission'"
1353
- },
1354
- "guard": {
1355
- "maxItems": 20,
1356
- "type": "array",
1357
- "items": {
1358
- "type": "object",
1359
- "properties": {
1360
- "object": {
1361
- "type": "string",
1362
- "description": "Guard object name or ID to verify against. Example: 'my-delivery-guard' or '0x123...'"
1363
- },
1364
- "impack": {
1365
- "type": "boolean",
1366
- "description": "Whether this Guard's verification result participates in the final logic. Constraint: if false, the Guard is checked but does not block the operation. Example: true"
1367
- }
1368
- },
1369
- "required": [
1370
- "object",
1371
- "impack"
1372
- ],
1373
- "additionalProperties": false
1374
- },
1375
- "description": "Array of Guard objects to verify. Constraint: at most 20 entries (MAX_GUARD_COUNT_PASSPORT). Relation: each entry corresponds to a Guard bound to the operation."
1376
- },
1377
- "submission": {
1378
- "type": "array",
1379
- "items": {
1380
- "type": "object",
1381
- "properties": {
1382
- "guard": {
1383
- "type": "string",
1384
- "description": "Guard object name or ID that requires submission data. Example: 'my-delivery-guard'"
1385
- },
1386
- "submission": {
1387
- "type": "array",
1388
- "items": {
1389
- "type": "object",
1390
- "properties": {
1391
- "identifier": {
1392
- "type": "integer",
1393
- "minimum": 0,
1394
- "maximum": 255,
1395
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails whose payee is NOT the order itself, such as settlement releases and incentive/bounty claims). NEVER arm 254 on a refund rail: a refund pays the submitted Order through user slot 0, and a refund leg re-entered in a later renewal period would abort E_ONCE_TRIGGERED (16) forever — refund once-ness comes from the terminal-node topology, never from a once slot. SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
1396
- },
1397
- "b_submission": {
1398
- "type": "boolean",
1399
- "description": "Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."
1400
- },
1401
- "value_type": {
1402
- "description": "Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details.",
1403
- "anyOf": [
1404
- {
1405
- "type": "number",
1406
- "const": 0,
1407
- "description": "Bool (0)"
1408
- },
1409
- {
1410
- "type": "number",
1411
- "const": 1,
1412
- "description": "Address (1)"
1413
- },
1414
- {
1415
- "type": "number",
1416
- "const": 2,
1417
- "description": "String (2)"
1418
- },
1419
- {
1420
- "type": "number",
1421
- "const": 3,
1422
- "description": "U8 (3)"
1423
- },
1424
- {
1425
- "type": "number",
1426
- "const": 4,
1427
- "description": "U16 (4)"
1428
- },
1429
- {
1430
- "type": "number",
1431
- "const": 5,
1432
- "description": "U32 (5)"
1433
- },
1434
- {
1435
- "type": "number",
1436
- "const": 6,
1437
- "description": "U64 (6)"
1438
- },
1439
- {
1440
- "type": "number",
1441
- "const": 7,
1442
- "description": "U128 (7)"
1443
- },
1444
- {
1445
- "type": "number",
1446
- "const": 8,
1447
- "description": "U256 (8)"
1448
- },
1449
- {
1450
- "type": "number",
1451
- "const": 9,
1452
- "description": "VecBool (9)"
1453
- },
1454
- {
1455
- "type": "number",
1456
- "const": 10,
1457
- "description": "VecAddress (10)"
1458
- },
1459
- {
1460
- "type": "number",
1461
- "const": 11,
1462
- "description": "VecString (11)"
1463
- },
1464
- {
1465
- "type": "number",
1466
- "const": 12,
1467
- "description": "VecU8 (12)"
1468
- },
1469
- {
1470
- "type": "number",
1471
- "const": 13,
1472
- "description": "VecU16 (13)"
1473
- },
1474
- {
1475
- "type": "number",
1476
- "const": 14,
1477
- "description": "VecU32 (14)"
1478
- },
1479
- {
1480
- "type": "number",
1481
- "const": 15,
1482
- "description": "VecU64 (15)"
1483
- },
1484
- {
1485
- "type": "number",
1486
- "const": 16,
1487
- "description": "VecU128 (16)"
1488
- },
1489
- {
1490
- "type": "number",
1491
- "const": 17,
1492
- "description": "VecU256 (17)"
1493
- },
1494
- {
1495
- "type": "number",
1496
- "const": 18,
1497
- "description": "VecVecU8 (18)"
1498
- },
1499
- {
1500
- "type": "string",
1501
- "const": "Bool",
1502
- "description": "Bool"
1503
- },
1504
- {
1505
- "type": "string",
1506
- "const": "Address",
1507
- "description": "Address"
1508
- },
1509
- {
1510
- "type": "string",
1511
- "const": "String",
1512
- "description": "String"
1513
- },
1514
- {
1515
- "type": "string",
1516
- "const": "U8",
1517
- "description": "U8"
1518
- },
1519
- {
1520
- "type": "string",
1521
- "const": "U16",
1522
- "description": "U16"
1523
- },
1524
- {
1525
- "type": "string",
1526
- "const": "U32",
1527
- "description": "U32"
1528
- },
1529
- {
1530
- "type": "string",
1531
- "const": "U64",
1532
- "description": "U64"
1533
- },
1534
- {
1535
- "type": "string",
1536
- "const": "U128",
1537
- "description": "U128"
1538
- },
1539
- {
1540
- "type": "string",
1541
- "const": "U256",
1542
- "description": "U256"
1543
- },
1544
- {
1545
- "type": "string",
1546
- "const": "VecBool",
1547
- "description": "VecBool"
1548
- },
1549
- {
1550
- "type": "string",
1551
- "const": "VecAddress",
1552
- "description": "VecAddress"
1553
- },
1554
- {
1555
- "type": "string",
1556
- "const": "VecString",
1557
- "description": "VecString"
1558
- },
1559
- {
1560
- "type": "string",
1561
- "const": "VecU8",
1562
- "description": "VecU8"
1563
- },
1564
- {
1565
- "type": "string",
1566
- "const": "VecU16",
1567
- "description": "VecU16"
1568
- },
1569
- {
1570
- "type": "string",
1571
- "const": "VecU32",
1572
- "description": "VecU32"
1573
- },
1574
- {
1575
- "type": "string",
1576
- "const": "VecU64",
1577
- "description": "VecU64"
1578
- },
1579
- {
1580
- "type": "string",
1581
- "const": "VecU128",
1582
- "description": "VecU128"
1583
- },
1584
- {
1585
- "type": "string",
1586
- "const": "VecU256",
1587
- "description": "VecU256"
1588
- },
1589
- {
1590
- "type": "string",
1591
- "const": "VecVecU8",
1592
- "description": "VecVecU8"
1593
- },
1594
- {
1595
- "type": "string",
1596
- "const": "bool",
1597
- "description": "bool"
1598
- },
1599
- {
1600
- "type": "string",
1601
- "const": "address",
1602
- "description": "address"
1603
- },
1604
- {
1605
- "type": "string",
1606
- "const": "string",
1607
- "description": "string"
1608
- },
1609
- {
1610
- "type": "string",
1611
- "const": "u8",
1612
- "description": "u8"
1613
- },
1614
- {
1615
- "type": "string",
1616
- "const": "u16",
1617
- "description": "u16"
1618
- },
1619
- {
1620
- "type": "string",
1621
- "const": "u32",
1622
- "description": "u32"
1623
- },
1624
- {
1625
- "type": "string",
1626
- "const": "u64",
1627
- "description": "u64"
1628
- },
1629
- {
1630
- "type": "string",
1631
- "const": "u128",
1632
- "description": "u128"
1633
- },
1634
- {
1635
- "type": "string",
1636
- "const": "u256",
1637
- "description": "u256"
1638
- },
1639
- {
1640
- "type": "string",
1641
- "const": "vecbool",
1642
- "description": "vecbool"
1643
- },
1644
- {
1645
- "type": "string",
1646
- "const": "vecaddress",
1647
- "description": "vecaddress"
1648
- },
1649
- {
1650
- "type": "string",
1651
- "const": "vecstring",
1652
- "description": "vecstring"
1653
- },
1654
- {
1655
- "type": "string",
1656
- "const": "vecu8",
1657
- "description": "vecu8"
1658
- },
1659
- {
1660
- "type": "string",
1661
- "const": "vecu16",
1662
- "description": "vecu16"
1663
- },
1664
- {
1665
- "type": "string",
1666
- "const": "vecu32",
1667
- "description": "vecu32"
1668
- },
1669
- {
1670
- "type": "string",
1671
- "const": "vecu64",
1672
- "description": "vecu64"
1673
- },
1674
- {
1675
- "type": "string",
1676
- "const": "vecu128",
1677
- "description": "vecu128"
1678
- },
1679
- {
1680
- "type": "string",
1681
- "const": "vecu256",
1682
- "description": "vecu256"
1683
- },
1684
- {
1685
- "type": "string",
1686
- "const": "vecvecu8",
1687
- "description": "vecvecu8"
1688
- }
1689
- ]
1690
- },
1691
- "value": {
1692
- "description": "The actual value data. Format depends on `value_type`:\nTYPE-CLASS SPLIT (F03): scalar value_types (Bool/Address/String/U8..U256) take ONE scalar value (boolean/address string/name/string/number); Vec* value_types (VecBool/VecAddress/VecString/VecU8..VecU256) take a REAL JSON ARRAY of elements — a string (even a Python-repr-looking \"[a, b]\") fails serialization with 'value_type=10 (array) requires a array value'. The historical 'static values must be strings' rule applied to SCALARS only.\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nPROTOCOL SLOT 254 (once, b_submission Address): the submitted value MUST be the ORDER address bound to the operation (payment_info.for_object) — NEVER the Progress/Machine/Arb object the call is advancing. The chain asserts submission(254) == the order address; a Progress address fails the task binding and the forward aborts.\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission).",
1693
- "anyOf": [
1694
- {
1695
- "type": "boolean"
1696
- },
1697
- {
1698
- "anyOf": [
1699
- {
1700
- "type": "object",
1701
- "properties": {
1702
- "name_or_address": {
1703
- "type": "string",
1704
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
1705
- },
1706
- "local_mark_first": {
1707
- "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
1708
- "type": "boolean"
1709
- }
1710
- },
1711
- "additionalProperties": false,
1712
- "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."
1713
- },
1714
- {
1715
- "type": "string"
1716
- }
1717
- ]
1718
- },
1719
- {
1720
- "type": "string"
1721
- },
1722
- {
1723
- "type": "number"
1724
- },
1725
- {
1726
- "type": "array",
1727
- "items": {
1728
- "type": "boolean"
1729
- }
1730
- },
1731
- {
1732
- "anyOf": [
1733
- {
1734
- "type": "object",
1735
- "properties": {
1736
- "entities": {
1737
- "minItems": 1,
1738
- "type": "array",
1739
- "items": {
1740
- "type": "object",
1741
- "properties": {
1742
- "name_or_address": {
1743
- "type": "string",
1744
- "description": "Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."
1745
- },
1746
- "local_mark_first": {
1747
- "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
1748
- "type": "boolean"
1749
- }
1750
- },
1751
- "additionalProperties": false,
1752
- "description": "Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."
1753
- }
1754
- },
1755
- "check_all_founded": {
1756
- "default": true,
1757
- "description": "Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)",
1758
- "type": "boolean"
1759
- }
1760
- },
1761
- "required": [
1762
- "entities",
1763
- "check_all_founded"
1764
- ],
1765
- "additionalProperties": false,
1766
- "description": "Used to batch find account or object IDs by name"
1767
- },
1768
- {
1769
- "type": "array",
1770
- "items": {
1771
- "type": "string"
1772
- }
1773
- }
1774
- ]
1775
- },
1776
- {
1777
- "type": "array",
1778
- "items": {
1779
- "type": "string"
1780
- }
1781
- },
1782
- {
1783
- "type": "array",
1784
- "items": {
1785
- "type": "number"
1786
- }
1787
- },
1788
- {
1789
- "type": "array",
1790
- "items": {
1791
- "type": "array",
1792
- "items": {
1793
- "type": "number"
1794
- }
1795
- }
1796
- }
1797
- ]
1798
- },
1799
- "name": {
1800
- "default": "",
1801
- "description": "Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here.",
1802
- "type": "string"
1803
- },
1804
- "object_type": {
1805
- "description": "OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation.",
1806
- "type": "string",
1807
- "enum": [
1808
- "Permission",
1809
- "Repository",
1810
- "Arb",
1811
- "Arbitration",
1812
- "Service",
1813
- "Machine",
1814
- "Order",
1815
- "Progress",
1816
- "Payment",
1817
- "Treasury",
1818
- "Guard",
1819
- "Demand",
1820
- "Passport",
1821
- "Allocation",
1822
- "Resource",
1823
- "Reward",
1824
- "Discount",
1825
- "EntityRegistrar",
1826
- "EntityLinker",
1827
- "Proof",
1828
- "WReceivedObject",
1829
- "Contact",
1830
- "TableItem_ProgressHistory",
1831
- "TableItem_PermissionPerm",
1832
- "TableItem_DemandPresenter",
1833
- "TableItem_MachineNode",
1834
- "TableItem_TreasuryHistory",
1835
- "TableItem_RepositoryData",
1836
- "TableItem_RewardRecord",
1837
- "TableItem_EntityLinker",
1838
- "TableItem_AddressMark",
1839
- "TableItem_EntityRegistrar"
1840
- ]
1841
- }
1842
- },
1843
- "required": [
1844
- "identifier",
1845
- "b_submission",
1846
- "value_type",
1847
- "name"
1848
- ],
1849
- "additionalProperties": false,
1850
- "description": "Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"
1851
- },
1852
- "description": "User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}] PROTOCOL SLOT 254: when the Guard table has identifier 254, submit the ORDER address bound to the operation (payment_info.for_object) — never the Progress/Machine object being advanced."
1853
- }
1854
- },
1855
- "required": [
1856
- "guard",
1857
- "submission"
1858
- ],
1859
- "additionalProperties": false,
1860
- "description": "One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."
1861
- },
1862
- "description": "User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. SLOT COMPLETENESS (T8 az3-mn-261013): the submission array must cover EVERY b_submission slot in the Guard's table, not just one — a Guard whose table has multiple b_submission entries (e.g. slot 0 + slot 254) aborts on-chain with 'Submission ID not found' (abort 11) when any b_submission slot has no matching entry. Check the Guard's table (each entry with b_submission needs its identifier filled) and include ALL of them. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"
1863
- }
1864
- },
1865
- "required": [
1866
- "type",
1867
- "guard",
1868
- "submission"
1869
- ],
1870
- "additionalProperties": false,
1871
- "description": "Guard verification required. The operation was blocked because one or more Guards require user-submitted data. Fill the submission array and resubmit. Semantic status is 'pending_input'."
1872
- }
1873
- },
1874
- "required": [
1875
- "operation_type",
1876
- "data"
1877
- ],
1878
- "additionalProperties": false
1879
- }
1
+ {"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/onchain_operations_machine.json","title":"Machine Operation","description":"⚙️ Machine Object: Design and deploy automated workflow templates (Machines) that define how services are delivered, etc..","type":"object","properties":{"operation_type":{"type":"string","const":"machine"},"data":{"type":"object","properties":{"object":{"anyOf":[{"type":"string","description":"String format: Reference an EXISTING object by its name (local mark) or on-chain object ID. Use when the Permission object already exists."},{"type":"object","properties":{"name":{"description":"The name of the object","type":"string"},"tags":{"description":"The tags of the object","type":"array","items":{"type":"string"}},"onChain":{"description":"CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.","type":"boolean"},"replaceExistName":{"description":"FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).","type":"boolean"},"permission":{"anyOf":[{"type":"string","description":"String format: Reference an EXISTING object by its name (local mark) or on-chain object ID. Example: 'my-object' or '0x1234...'"},{"type":"object","properties":{"name":{"description":"The name of the object","type":"string"},"tags":{"description":"The tags of the object","type":"array","items":{"type":"string"}},"onChain":{"description":"CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.","type":"boolean"},"replaceExistName":{"description":"FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).","type":"boolean"},"description":{"description":"The description of the object","type":"string"}},"additionalProperties":false,"description":"Object format: CREATE a NEW object with name, optional description, and visibility settings. Extends NamedObjectSchema with an additional 'description' field for detailed object information."}],"description":"Two ways to specify an object: (1) STRING - Reference an EXISTING object by name or ID; (2) OBJECT - CREATE a NEW object with full configuration including optional name, tags, description, and visibility settings (local private by default, or public on-chain with onChain:true)."}},"additionalProperties":false,"description":"Object format: CREATE a NEW object with Permission-based access control. Includes optional name, tags, visibility settings, AND a Permission object (which itself can be referenced by string or created as a new object). Use this to create objects with managed access permissions."}],"description":"Two ways to specify a Permission-managed object: (1) STRING - Reference an EXISTING Permission object by name or ID; (2) OBJECT - CREATE a NEW object with Permission access control, where the Permission can also be either referenced (string) or newly created (object). This is used when you need permission management but don't need to specify a token type."},"progress_new":{"description":"Generate new Progress object.","type":"object","properties":{"task":{"description":"Task bound to the Progress object. It is an object ID or name","anyOf":[{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},{"type":"null"}]},"repository":{"description":"Set repository list for the Progress object. Used for consensus data management.","anyOf":[{"type":"object","properties":{"op":{"anyOf":[{"type":"string","const":"add"},{"type":"string","const":"set"}]},"objects":{"type":"array","items":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"description":"List of object IDs or names to add or set"}},"required":["op","objects"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"remove"},"objects":{"type":"array","items":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"description":"List of object IDs or names to remove"}},"required":["op","objects"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"clear"}},"required":["op"],"additionalProperties":false}]},"progress_namedOperator":{"description":"Add, set, and remove operators for the permission namespace of the Progress object.","type":"object","properties":{"op":{"anyOf":[{"type":"string","const":"add"},{"type":"string","const":"set"},{"type":"string","const":"remove"}]},"name":{"type":"string","minLength":1},"operators":{"anyOf":[{"description":"Array of account names, addresses, or mark names. Local marks are searched first for each entry. EXAMPLE: ['alice', '0x2...', 'bob']"},{"type":"object","properties":{"entities":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."}},"check_all_founded":{"default":true,"description":"Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)","type":"boolean"}},"required":["entities","check_all_founded"],"additionalProperties":false,"description":"Used to batch find account or object IDs by name"}],"description":"Batch account or address lookup. Can be an array of strings (recommended for AI) or full object with explicit control. Array form auto-converts to { entities: [...], check_all_founded: true }. Empty arrays and {} elements are REJECTED (no-op transaction guard)."}},"required":["op","name","operators"],"additionalProperties":false},"namedNew":{"type":"object","properties":{"name":{"description":"The name of the object","type":"string"},"tags":{"description":"The tags of the object","type":"array","items":{"type":"string"}},"onChain":{"description":"CRITICAL: Whether to sync the name to the blockchain. DEFAULT (undefined/false): The name is stored LOCALLY ONLY on your device (PRIVATE). If set to true: The name is published ON-CHAIN and becomes PUBLICLY VISIBLE to everyone. Only set to true for displaying the relationships you are willing to make public on the chain.","type":"boolean"},"replaceExistName":{"description":"FORCE CLAIM: Set to true ONLY when the user explicitly expresses a STRONG INTENTION to forcefully take over an existing name (e.g., 'I must use this name', 'force rename', 'replace the existing one'). WARNING: This will UNBIND the name from its original object and rebind it to the new one, potentially breaking existing references. If not specified or false: the operation will FAIL with an error when the name is already in use (safe default behavior).","type":"boolean"}},"additionalProperties":false,"description":"Assign a name and optional tags to a new object. By default, names are stored LOCALLY (private) on your device. Set 'onChain: true' to create a PUBLIC on-chain identity visible to everyone. IMPORTANT: If the requested name is already taken, the operation will FAIL by default. Only set 'replaceExistName: true' when the user EXPLICITLY demands to forcefully claim the name."}},"additionalProperties":false},"description":{"description":"Description of the object.","type":"string"},"repository":{"description":"Set repository list for the object. Used for consensus data management.","anyOf":[{"type":"object","properties":{"op":{"anyOf":[{"type":"string","const":"add"},{"type":"string","const":"set"}]},"objects":{"type":"array","items":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"description":"List of object IDs or names to add or set"}},"required":["op","objects"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"remove"},"objects":{"type":"array","items":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"description":"List of object IDs or names to remove"}},"required":["op","objects"],"additionalProperties":false},{"type":"object","properties":{"op":{"type":"string","const":"clear"}},"required":["op"],"additionalProperties":false}]},"node":{"description":"CRITICAL: Choose ONE of two mutually exclusive modes:\n\n**Mode 1: NodeSchema (incremental operations)**\nUse for partial modifications: add, set, remove, clear, exchange, rename, remove prior node, add forward, remove forward.\nFormat: { \"op\": \"add\", \"nodes\": [...], \"bReplace\": false }\nThis mode modifies existing nodes incrementally.\n\n**Mode 2: NodeJsonOrMarkdownFileSchema (complete replacement)**\nUse for complete node redefinition from file.\nFormat: { \"json_or_markdown_file\": \"/path/to/nodes.json\" }\nIMPORTANT: This COMPLETELY REPLACES all existing nodes. File must contain node array [{...}, {...}], NOT an operation object with \"op\" field.\nSupported formats: JSON array or Markdown with code blocks.\nIf parsing fails, error includes line number and column information.","anyOf":[{"oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"add"},"nodes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Node name. ⚠️ T1 LOSSY POINT (B-1): do NOT name a node 'refund'/'refunded'/'deposit_refunded'/'deposit_deducted'/'disputed'/'cancelled' to model fund return or dispute — funds MUST move through the Allocation waterfall (order_allocators), NOT through Machine terminal nodes (R-M1-11). A node named 'refund' is a semantic lie: reaching it does not move funds by itself. Model refund as a refund-to-Order Allocator slot (a { Signer } or Order-owner recipient), and model dispute as the bound Arbitration, not a Machine node."},"role":{"description":"OPTIONAL business role tag for display layers and template reuse (E-9). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain; the MCP echoes it back as a NODE ROLES constraint warning and seed templates annotate it. Semantics: draft = pre-start cancellable, active = work in progress, delivered = work submitted awaiting acceptance, final = settlement endpoint, cancelled = refund endpoint. ⚠️ Advancing to ANY node never moves funds by itself: settlement/refund requires an explicit allocation call (alloc by guard) AFTER the terminal node is reached. Nothing auto-settles on-chain — plan the settlement trigger (merchant, keeper, or buyer action) explicitly in the template.","type":"string","enum":["draft","active","delivered","final","cancelled"]},"pairs":{"type":"array","items":{"type":"object","properties":{"prev_node":{"type":"string","description":"Previous node name. Empty string '' means initial entry node (the first node in the workflow)."},"threshold":{"default":0,"description":"Threshold to trigger node advancement. If total Forward weight is greater than or equal to threshold, node advancement is triggered. ⚠️ SINGLE-OPERATOR LOCK: each forward contributes its weight AT MOST ONCE (locked by its first operator; re-execution by others aborts E_NOT_THE_HOLDER). The maximum achievable weight of this Pair is the sum of its DISTINCT forward weights — if that sum < threshold the transition can NEVER migrate. Multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1), never one forward reused by several people.","anyOf":[{"type":"number"},{"type":"string"}]},"forwards":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Forward name"},"namedOperator":{"description":"Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.","anyOf":[{"type":"string"},{"type":"null"}]},"permissionIndex":{"description":"Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).","anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."},"guard":{"description":"Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).","anyOf":[{"anyOf":[{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"},"retained_submission":{"description":"Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.","anyOf":[{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"}]}},{"type":"null"}]}},"required":["guard"],"additionalProperties":false,"description":"OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."},{"type":"string","description":"STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."}]},{"type":"null"}]}},"required":["name","weight"],"additionalProperties":false,"description":"Forward in Machine object"},"description":"Forward list — operations to ENTER THIS NODE from prev_node. SEMANTIC CLARIFICATION: forwards describe INCOMING transitions (how to ARRIVE at this node), NOT outgoing transitions. Think of each forward as an 'entry door' to this node. Example: pair {prev_node:'A', forwards:[{name:'Go'}]} means 'use Go to advance FROM A TO THIS NODE'. For initial node (prev_node=''), forwards are operations to enter this node from the start state. DIAGRAM: A --[Go]--> B means the pair belongs to node B (destination), with prev_node='A'. WARNING: forwards belong to the DESTINATION node's pair, NOT the source node. Placing a forward on the wrong pair will cause Progress to get stuck."}},"required":["prev_node","threshold","forwards"],"additionalProperties":false,"description":"Node pair in Machine object"},"description":"Node pair list"},"optional":{"description":"OPTIONAL pure-side-action leaf marker (v32): order completion NEVER routes through this node and it must never gate money (e.g. a review node the buyer may skip entirely). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain. Composition audits exempt an optional leaf from the FUND-EXIT-01 terminal fund-reachability search: a review leaf with no allocator is by design, not a stranded-funds bug (upw F-06, 6939_upwork-261016).","type":"boolean"}},"required":["name","pairs"],"additionalProperties":false,"description":"Node in Machine object"},"description":"List of nodes to add (or replace in place when bReplace=true)."},"bReplace":{"description":"Whether to replace existing nodes. If true, existing nodes will be replaced; if false, nodes will be added by merging. This is the ONLY supported way to rewrite nodes on an EXISTING Machine.","type":"boolean"}},"required":["op","nodes"],"additionalProperties":false,"description":"Add nodes."},{"type":"object","properties":{"op":{"type":"string","const":"set"},"nodes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Node name. ⚠️ T1 LOSSY POINT (B-1): do NOT name a node 'refund'/'refunded'/'deposit_refunded'/'deposit_deducted'/'disputed'/'cancelled' to model fund return or dispute — funds MUST move through the Allocation waterfall (order_allocators), NOT through Machine terminal nodes (R-M1-11). A node named 'refund' is a semantic lie: reaching it does not move funds by itself. Model refund as a refund-to-Order Allocator slot (a { Signer } or Order-owner recipient), and model dispute as the bound Arbitration, not a Machine node."},"role":{"description":"OPTIONAL business role tag for display layers and template reuse (E-9). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain; the MCP echoes it back as a NODE ROLES constraint warning and seed templates annotate it. Semantics: draft = pre-start cancellable, active = work in progress, delivered = work submitted awaiting acceptance, final = settlement endpoint, cancelled = refund endpoint. ⚠️ Advancing to ANY node never moves funds by itself: settlement/refund requires an explicit allocation call (alloc by guard) AFTER the terminal node is reached. Nothing auto-settles on-chain — plan the settlement trigger (merchant, keeper, or buyer action) explicitly in the template.","type":"string","enum":["draft","active","delivered","final","cancelled"]},"pairs":{"type":"array","items":{"type":"object","properties":{"prev_node":{"type":"string","description":"Previous node name. Empty string '' means initial entry node (the first node in the workflow)."},"threshold":{"default":0,"description":"Threshold to trigger node advancement. If total Forward weight is greater than or equal to threshold, node advancement is triggered. ⚠️ SINGLE-OPERATOR LOCK: each forward contributes its weight AT MOST ONCE (locked by its first operator; re-execution by others aborts E_NOT_THE_HOLDER). The maximum achievable weight of this Pair is the sum of its DISTINCT forward weights — if that sum < threshold the transition can NEVER migrate. Multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1), never one forward reused by several people.","anyOf":[{"type":"number"},{"type":"string"}]},"forwards":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Forward name"},"namedOperator":{"description":"Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.","anyOf":[{"type":"string"},{"type":"null"}]},"permissionIndex":{"description":"Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).","anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."},"guard":{"description":"Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).","anyOf":[{"anyOf":[{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"},"retained_submission":{"description":"Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.","anyOf":[{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"}]}},{"type":"null"}]}},"required":["guard"],"additionalProperties":false,"description":"OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."},{"type":"string","description":"STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."}]},{"type":"null"}]}},"required":["name","weight"],"additionalProperties":false,"description":"Forward in Machine object"},"description":"Forward list — operations to ENTER THIS NODE from prev_node. SEMANTIC CLARIFICATION: forwards describe INCOMING transitions (how to ARRIVE at this node), NOT outgoing transitions. Think of each forward as an 'entry door' to this node. Example: pair {prev_node:'A', forwards:[{name:'Go'}]} means 'use Go to advance FROM A TO THIS NODE'. For initial node (prev_node=''), forwards are operations to enter this node from the start state. DIAGRAM: A --[Go]--> B means the pair belongs to node B (destination), with prev_node='A'. WARNING: forwards belong to the DESTINATION node's pair, NOT the source node. Placing a forward on the wrong pair will cause Progress to get stuck."}},"required":["prev_node","threshold","forwards"],"additionalProperties":false,"description":"Node pair in Machine object"},"description":"Node pair list"},"optional":{"description":"OPTIONAL pure-side-action leaf marker (v32): order completion NEVER routes through this node and it must never gate money (e.g. a review node the buyer may skip entirely). SESSION METADATA ONLY — the on-chain node struct carries name+pairs, so this is NOT stored on-chain. Composition audits exempt an optional leaf from the FUND-EXIT-01 terminal fund-reachability search: a review leaf with no allocator is by design, not a stranded-funds bug (upw F-06, 6939_upwork-261016).","type":"boolean"}},"required":["name","pairs"],"additionalProperties":false,"description":"Node in Machine object"},"description":"List of nodes for a freshly CREATED Machine. xk9 F-02: REFUSED on an existing Machine — op set implies a clear-and-rewrite of the on-chain node table that permanently corrupts it (E_EMPTY_MACHINE on every later publish, no repair). To rewrite an existing Machine use op:add with bReplace:true."},"bReplace":{"description":"Whether to replace existing nodes. If true, existing nodes will be replaced; if false, nodes will be added by merging.","type":"boolean"}},"required":["op","nodes"],"additionalProperties":false,"description":"Set nodes (CREATE-ONLY — refused on an existing Machine; use add+bReplace there)."},{"type":"object","properties":{"op":{"type":"string","const":"remove"},"nodes":{"type":"array","items":{"type":"string"},"description":"List of node names to delete."}},"required":["op","nodes"],"additionalProperties":false,"description":"Delete nodes."},{"type":"object","properties":{"op":{"type":"string","const":"clear"}},"required":["op"],"additionalProperties":false,"description":"Clear all nodes."},{"type":"object","properties":{"op":{"type":"string","const":"exchange"},"node_one":{"type":"string","description":"Name of the first node."},"node_other":{"type":"string","description":"Name of the second node."}},"required":["op","node_one","node_other"],"additionalProperties":false,"description":"Exchange the positions of two nodes."},{"type":"object","properties":{"op":{"type":"string","const":"rename"},"node_name_old":{"type":"string","description":"Name of thenode."},"node_name_new":{"type":"string","description":"New name of the node."}},"required":["op","node_name_old","node_name_new"],"additionalProperties":false,"description":"Rename node."},{"type":"object","properties":{"op":{"type":"string","const":"remove prior node"},"pairs":{"type":"array","items":{"type":"object","properties":{"prior_node_name":{"type":"array","items":{"type":"string"},"description":"List of previous node names to delete."},"node_name":{"type":"string","description":"Name of the next node."}},"required":["prior_node_name","node_name"],"additionalProperties":false},"description":"List of previous-next node pairs to delete."}},"required":["op","pairs"],"additionalProperties":false,"description":"Delete previous-next node pairs."},{"type":"object","properties":{"op":{"type":"string","const":"add forward"},"data":{"type":"array","items":{"type":"object","properties":{"prior_node_name":{"type":"string","description":"Name of the previous node."},"node_name":{"type":"string","description":"Name of the next node."},"forward":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Forward name"},"namedOperator":{"description":"Forward operation permission 1: Namespace (one of the two must be specified); recommended if Progress object operators are different (e.g., different delivery personnel for different orders). SPECIAL CASE: an EMPTY string ('') on an order-bound forward resolves to the ORDER PAYER — the buyer of the order can advance it (progress::IsNamedOperator treats an empty name + order as the order's own operator). Use '' for buyer-side actions (delivery confirmation, review, return request, pre-ship cancel) instead of binding a merchant-only permission index, which aborts E_PERMISSION_DENIED for the buyer.","anyOf":[{"type":"string"},{"type":"null"}]},"permissionIndex":{"description":"Forward operation permission 2: Permission index (one of the two must be specified); recommended if all Progress object operators are the same (e.g., same reward reviewers for all orders). RANGE: use a USER_DEFINED index ≥1000 (0–999 are builtin/reserved) — a USER_DEFINED index works for the Permission's admin immediately without any grant; a builtin index (<1000) is ALSO admin-usable immediately (the Permission's owner/admin short-circuits every builtin index check — the chain's admin-passthrough rule) and only NON-ADMIN operators must be granted it first (cour I4: pre-grant the state is 'admin-only', never 'unusable' — a non-admin caller without the grant aborts MoveAbort 7).","anyOf":[{"type":"number"},{"type":"string"},{"type":"null"}]},"weight":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Forward weight — the contribution this forward makes toward its Pair's threshold. ⚠️ SINGLE-OPERATOR LOCK: a forward contributes its weight AT MOST ONCE. It is locked by the first operator that accomplishes it; a second operator re-executing the same accomplished forward aborts E_NOT_THE_HOLDER. Therefore multi-operator cooperation (threshold > 1) needs one DISTINCT forward per contributing operator (e.g. threshold 2 → begin_a + begin_b, each weight 1) — never reuse one forward."},"guard":{"description":"Guard reference for this forward. Accepts TWO formats:\n• STRING (preferred): \"my_guard_name\" — the Guard's name or address as a plain string.\n• OBJECT (only when retained_submission is needed): {guard: \"my_guard_name\", retained_submission: [1,2,3]}.\nFOLLOW THE SCHEMA FIELD STRUCTURE: A Guard reference is fundamentally a STRING (the Guard object's name or address). Provide a string when you only need to reference a Guard — do NOT wrap a bare string in an object structure. The OBJECT form {guard: \"...\", retained_submission: [...]} exists ONLY to carry additional `retained_submission` data alongside the string reference; inside the object, the `guard` field is STILL a string. In short: string-in for a string reference, object-in only when you need to pass extra data.\nCOGNITIVE PRINCIPLE: Guard validation ALWAYS occurs BEFORE the forward operation. A Guard that queries state of the SAME Progress object this forward operates on (e.g. progress.current) will see the PRE-transition value (source node), NOT the target node. If the Guard checks progress.current == target_node, it will ALWAYS FAIL. Querying a DIFFERENT Progress object (cross-machine) is safe and reasonable — that progress is not modified by this forward. For target-node verification after transition, bind the Guard to the Allocator instead (allocation.alloc runs AFTER the state transition completes).\n⚠️ T1 LOSSY POINT (B-3): WoWok has NO on-chain cron. A business phrase like 'after N days, auto-X' is NOT an automatic trigger — it decomposes into (1) a time_guard that checks elapsed time, and (2) an OFF-CHAIN keeper that must submit the forward when the guard passes. Configuring a time_guard WITHOUT a keeper means nothing ever fires.\nRETAINED_SUBMISSION: a non-empty retained_submission does NOT relax Guard verification — the forward's Guard is always validated first. The list only selects which of the caller's already-verified submissions are persisted into the Progress history (see the guard field above).","anyOf":[{"anyOf":[{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or address (string). Example: 'my_attendance_guard' or '0x1234...'"},"retained_submission":{"description":"Guard table identifiers whose verified values are persisted into the Progress history when the forward is accomplished. The Guard is ALWAYS fully verified first (regardless of this list): the forward cannot complete unless the Passport carries a passing result for it. After verification, exactly the caller's submissions for the listed identifiers are copied into history (from the passport's submission records) as Guard-verified facts; empty array (default) records nothing. Use it for audit and downstream queries, never as a way to relax Guard conditions.","anyOf":[{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"string"}]}},{"type":"null"}]}},"required":["guard"],"additionalProperties":false,"description":"OBJECT form: {guard: '<guard_name_or_address>', retained_submission?: number[]}. Use this form when you need to pass retained_submission data alongside the Guard reference."},{"type":"string","description":"STRING form (shorthand): the Guard object's name or address as a plain string. Auto-wrapped to {guard: <string>} at runtime. Use this when you only need to reference a Guard without retained_submission."}]},{"type":"null"}]}},"required":["name","weight"],"additionalProperties":false,"description":"Forward in Machine object"},"description":"List of operations between the previous and next nodes."},"threshold":{"description":"Threshold of operations that need to be completed to migrate from the previous node to the next node.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["prior_node_name","node_name","forward"],"additionalProperties":false},"description":"List of operations to add."}},"required":["op","data"],"additionalProperties":false,"description":"Add operations."},{"type":"object","properties":{"op":{"type":"string","const":"remove forward"},"data":{"type":"array","items":{"type":"object","properties":{"prior_node_name":{"type":"string","description":"Name of the previous node."},"node_name":{"type":"string","description":"Name of the next node."},"forward_name":{"type":"array","items":{"type":"string"},"description":"List of operation names to delete."}},"required":["prior_node_name","node_name","forward_name"],"additionalProperties":false},"description":"List of operations to delete."}},"required":["op","data"],"additionalProperties":false,"description":"Delete operations."}]},{"type":"object","properties":{"json_or_markdown_file":{"type":"string","description":"Path to a JSON or Markdown file containing node array for COMPLETE REPLACEMENT of all nodes.\n\n**File Format Requirements:**\n- Must contain a JSON ARRAY of node objects: [{\"name\": \"...\", \"pairs\": [...]}, {...}]\n- NOT an operation object with \"op\" field (use NodeSchema for operations)\n- Supports JSON or Markdown (with ```json code blocks)\n\n**Node Structure:**\nEach node is a directed graph element representing a workflow STATE that an order\ncan rest in. Its Pairs are the INCOMING edges — this is the one convention the\nchain enforces, and getting it backwards silently builds a wrong graph:\n- name: Node identifier — the DESTINATION of every pair it owns\n- role: (optional) business role tag for display layers — one of draft/active/delivered/final/cancelled. SESSION METADATA ONLY (not stored on-chain; echoed back as a NODE ROLES warning)\n- pairs: Array of {prev_node, forwards, threshold} — edges ENTERING this node. The key is `prev_node`; `prior_node` is not recognized and is silently dropped.\n- forwards: Operations that advance INTO this node FROM its prev_node (NOT operations available from this node)\n- threshold: Weight required to migrate into this node along that pair\n\nDiagram `A --[Go]--> B` therefore lives in node **B**: {name:\"B\", pairs:[{prev_node:\"A\", forwards:[{name:\"Go\", weight:1}]}]}.\n\n**Forward names must determine the destination.** `next_node` is a CALLER argument\nand the chain resolves (current, next_node, forward) inside the\ndestination node, so one forward name shared by two destinations\nfrom the same prev_node is legal and lets the caller pick the outcome — including\nwhether a refund Allocator ever fires. Give each destination its own forward name.\n\n**Behavior:**\n- COMPLETELY REPLACES all existing nodes (equivalent to \"set\" with bReplace=true)\n- Auto-detects format based on file content\n- If parsing fails, error includes line number and column information"}},"required":["json_or_markdown_file"],"additionalProperties":false}]},"pause":{"description":"Whether to pause generating new Progress objects. Chain truth (the progress-generation entry asserts !bPaused): the pause gates NEW order entry only — in-flight Progress keeps advancing and settling (yfd-ln F-13 misread this as a freeze switch; it never was one).","type":"boolean"},"publish":{"description":"Whether to publish the object. After the object is published, new Progress objects can be generated; and node settings will no longer be changeable. ⚠️ PUBLISH IS A ONE-WAY DOOR AND THE CHAIN VALIDATES THE WHOLE GRAPH AT THAT MOMENT: the on-chain publish gate rejects a Machine that is empty, has no entry edge (no pair with prev_node:\"\"), has an entry pair with no forward, references a prev_node that is not a node of this Machine, carries a forward with neither namedOperator nor permissionIndex (a guard is NOT an identity), or has a pair whose threshold exceeds the sum of its forward weights (each forward counts at most once). These aborts (machine:17-22) fire BEFORE the publish lands, so the graph is still editable — but after it succeeds, nodes/forwards, Guard bindings and Service.machine are frozen forever, and a broken graph would only surface at the first transition with no repair path. Send the nodes in the SAME call as publish:true (bReplace:true or op:\"set\") so the complete graph is validated together. ⚠️ Before publishing, enumerate the graph STOP NODES (nodes with no outgoing Pair) plus every waiting state (review window, handover, open dispute) and verify each has a defined fund exit in the Service order_allocators — withdrawal (release) AND refund. Machine + Allocator are immutable after publish (IMMUT-001); an uncovered stop node strands funds permanently (rule R-M5-03, checklist pattern.fund_flow_stop_node_coverage). ⚠️ REBUILD COST DISCLOSURE (S12-②, ksk4 F-01): every business constant you bake into this graph (campaign deadline, goal, windows, schedules) becomes immutable WITH the machine. Changing even ONE constant after publish requires: new guard → clone the whole node graph into a NEW machine → publish → a NEW Service → re-hang every repository/reward/arbitration/allocator/WIP → republish (≈5 txs / ~1 min measured on a 16-node graph), and in-flight orders stay pointed at the OLD machine forever. THIS OPERATION WILL REQUIRE A NEW SERVICE if any baked-in parameter later changes — finalize mutable business parameters BEFORE publishing (Campaign-structure change is protocol-train scoped; the MCP face cannot patch a published machine).","type":"boolean"},"owner_receive":{"description":"Unwrap CoinWrapper objects and other objects received by this Machine object and send them to the owner of its Permission object.\n\nACCEPTED FORMATS (F-06 unified receive operation block):\n• 'recently' (string literal) — auto-query and receive ALL recently received objects.\n Use this for the common case: \"withdraw everything the object has received\" — for\n order.receive this is the correct default for \"the buyer got their refund\".\n Example: receive: 'recently'\n• bare object id (string, 0x-prefixed) — one-object form, auto-expanded (F-15):\n pass the id of the single received object you want to unwrap (e.g. a CoinWrapper id).\n Example: receive: '0xabc...'\n• ReceivedNormal[] (array) — explicit list of received objects to unwrap.\n Use this when you want to receive specific objects only (not all).\n Example: receive: [{id: '0xobj1', type: '0x2::coin::Coin<0x2::wow::WOW>'}]\n• ReceivedBalance ({token_type, balance, received: [{id, balance, payment}]}) —\n receive a balance record from a specific Payment/payer.\n Use this for precise balance targeting (advanced — usually after querying\n the object's received history via query_received).\n Example: receive: {token_type: '0x2::wow::WOW', balance: 1000000, received: [{id: '0xrec1', balance: 1000000, payment: '0xpay1'}]}\nANTI-PATTERN: do NOT wrap in {result: ...} — pass the value directly.","anyOf":[{"type":"string","const":"recently"},{"type":"string","pattern":"^0x[0-9a-fA-F]{8,}$"},{"minItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Received object ID"},"type":{"type":"string","minLength":1,"description":"Object type"},"content_raw":{"description":"Raw content data"},"version":{"description":"Object version, required to build a Receiving<T> argument for owner_receive","type":"string"},"digest":{"description":"Object digest, required to build a Receiving<T> argument for owner_receive","type":"string"}},"required":["id","type"],"additionalProperties":false,"description":"Received normal object record"}},{"type":"object","properties":{"balance":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05WOW\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is only within the safe integer range (±2^53); numbers outside it are REJECTED, use a numeric string instead. PRECISION RULE: for values exceeding 2^53 (9007199254740991), ALWAYS use format (1) or (2) — JS numbers lose integer precision silently and such inputs are blocked. Raw amounts must be plain non-negative integers; a decimal value without a token symbol (e.g. \"2.5\") is rejected — append the symbol (\"2.5WOW\") so the Fund Processing Layer converts it. WARNING — BARE INTEGER MEANS SMALLEST UNIT, NOT TOKENS: formats (2)/(3) are NEVER interpreted as display tokens. For example amount=\"5\" or 5 means 5 raw units = 0.000000005 WOW (9 decimals) — NOT 5 WOW. When the user asks for a token amount, you MUST use display format (\"5WOW\", \"2USDC\"); a bare integer is only correct for unitless counts (e.g. stock quantity) or when you computed exact raw units yourself. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer, where the token's FULL type, decimals and raw amount are always visible. MULTIPLE ISSUERS: several on-chain tokens may legally share the same symbol (e.g. multiple \"USDT\" coins). When a bare symbol matches more than one token, the operation is BLOCKED and every candidate is listed with full details (type, name, decimals, verified tag) — present the list to the USER and let them choose (they may answer by number), then re-issue with the chosen token's FULL type string in type_parameter; never guess an issuer from the bare symbol. MISSING TOKEN INFO: when a token's precision cannot be resolved, the operation is REFUSED (raw u64 included — amount magnitude could not be verified). Recovery: provide the token's FULL type in package::module::Name form in type_parameter (a bare symbol like \"USDT\" cannot be resolved), and verify the WOW network is correct. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: service sale prices, compensation fund balances, Treasury deposits, arbitration fees, reward amounts, stock quantities."},"token_type":{"type":"string","description":"Asset type of Coin objects. Supports CoinWrapper<...> format for order receive operations."},"received":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Received CoinWrapper object ID"},"balance":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"A coin/balance amount. Accepts three formats: (1) DISPLAY FORMAT with token symbol: \"2.5WOW\", \"10USDC\", \"0.05WOW\" — auto-converted to smallest units via the Fund Processing Layer (token precision resolved from official registry → cache → on-chain). The symbol MUST match the token's type_parameter. (2) SMALLEST UNIT (numeric string): \"10000000000\" — used as-is, no conversion. (3) SMALLEST UNIT (number): 10000000000 — used as-is only within the safe integer range (±2^53); numbers outside it are REJECTED, use a numeric string instead. PRECISION RULE: for values exceeding 2^53 (9007199254740991), ALWAYS use format (1) or (2) — JS numbers lose integer precision silently and such inputs are blocked. Raw amounts must be plain non-negative integers; a decimal value without a token symbol (e.g. \"2.5\") is rejected — append the symbol (\"2.5WOW\") so the Fund Processing Layer converts it. WARNING — BARE INTEGER MEANS SMALLEST UNIT, NOT TOKENS: formats (2)/(3) are NEVER interpreted as display tokens. For example amount=\"5\" or 5 means 5 raw units = 0.000000005 WOW (9 decimals) — NOT 5 WOW. When the user asks for a token amount, you MUST use display format (\"5WOW\", \"2USDC\"); a bare integer is only correct for unitless counts (e.g. stock quantity) or when you computed exact raw units yourself. Default token: WOW (9 decimals, 1 WOW = 10^9 MIST). For custom tokens: use display format with the token's symbol, or pass smallest units directly. MONEY CONFIRMATION: all monetary fields trigger user confirmation via the Fund Processing Layer, where the token's FULL type, decimals and raw amount are always visible. MULTIPLE ISSUERS: several on-chain tokens may legally share the same symbol (e.g. multiple \"USDT\" coins). When a bare symbol matches more than one token, the operation is BLOCKED and every candidate is listed with full details (type, name, decimals, verified tag) — present the list to the USER and let them choose (they may answer by number), then re-issue with the chosen token's FULL type string in type_parameter; never guess an issuer from the bare symbol. MISSING TOKEN INFO: when a token's precision cannot be resolved, the operation is REFUSED (raw u64 included — amount magnitude could not be verified). Recovery: provide the token's FULL type in package::module::Name form in type_parameter (a bare symbol like \"USDT\" cannot be resolved), and verify the WOW network is correct. Examples: \"2.5WOW\" (display → 2500000000), 10000000000 (number, smallest unit), \"50000000000\" (string, smallest unit). Used for: service sale prices, compensation fund balances, Treasury deposits, arbitration fees, reward amounts, stock quantities."},"payment":{"type":"string","description":"Payment object ID"},"type":{"description":"Type of the received object (or inner coin type); used for token_type detection","type":"string"},"version":{"description":"Object version, required to build a Receiving<T> argument for owner_receive","type":"string"},"digest":{"description":"Object digest, required to build a Receiving<T> argument for owner_receive","type":"string"}},"required":["id","balance","payment"],"additionalProperties":false,"description":"Received CoinWrapper object record"},"description":"Received records of Coin objects"}},"required":["balance","token_type","received"],"additionalProperties":false,"description":"Received record of Coin objects"}]},"um":{"description":"Contact object ID or name.","anyOf":[{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},{"type":"null"}]},"reentry_kind":{"description":"AP-3 loop-semantics declaration for the publish audit (ctra F-06 root cure): overrides the word-stem loop classifier when the node graph contains a cycle. 'none' = default (word-stem classification) / 'review-loop' = same-order no-charge revisits / 'paid-cycle' = per-revisit fee, fund gate required. MCP-side audit declaration ONLY (pre_publish harness hook) — never sent on-chain; the handler strips it before the SDK call. Mirror of the template frontmatter twin (template-loader).","type":"string","enum":["none","review-loop","paid-cycle"]}},"required":["object"],"additionalProperties":false,"description":"On-chain Machine operations. USAGE: (1) CREATE NEW: Set 'object' field with OBJECT format {name, permission, ...} to create a Machine. NOTE: 'name' goes INSIDE 'object', NOT at the data root level. 'permission' can be a new Permission object or reference an existing one - check 'object' field description for details. (2) OPERATE EXISTING: Set 'object' field with STRING format (object ID or name). The 'object' field is CRITICAL and REQUIRED in both cases. STRING for existing, OBJECT for new creation."},"idempotency_key":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9._:-]+$","description":"F-RQ-13A (prescription ⑨): idempotency key for this business attempt. REPLAY GUARD: if a previous call with the SAME key is still open (dispatched but outcome unresolved, or already committed), this call is HELD — you get a structured state_conflict envelope with the prior attempt's verification data instead of a second on-chain submission (the ghost-order guard: two live mainnet orders, two escrows). Lifecycle: a deterministic failure (nothing submitted / provably reverted) clears the key — fix the cause and retry with the SAME key; an unknown-outcome failure (submission may have landed) keeps the key HELD — verify on-chain state first (result.submission_verification tells you where to look), and only retry with a NEW key once the outcome is resolved. Keep one key per business attempt (e.g. 'ord-20261030-042-buy'); do not reuse across attempts."},"env":{"type":"object","properties":{"account":{"default":"","type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"permission_guard":{"description":"List of permission guard IDs. Used to extend additional operation permissions (requires verification and configuration in the Permission object).","type":"array","items":{"type":"string"}},"no_cache":{"description":"Whether to disable caching.","type":"boolean"},"network":{"description":"Omit in chat-client contexts — the runtime stamps the user's CURRENT network (the client's UI selection). Standalone MCP/CLI: omit to use the current network; set ONLY when the user explicitly names a different network (a mismatch pauses for user confirmation). Never guess or hardcode a network.","type":"string","enum":["localnet","testnet","mainnet"]},"referrer":{"description":"Referrer ID. If the user is using the network for the first time, the referrer ID will be recorded (also applied when the SDK auto-registers the sender in the global Entity table).","type":"string"},"no_auto_register":{"description":"Opt-out of SDK-level Entity auto-registration. By default, a business transaction whose sender has no entry in the global Entity table automatically appends an entity registration: the sender gets registered and receives an owned Resource object (their on-chain mark book) in the wallet. Set true ONLY when the user explicitly cancelled their entity registration or demands that the transaction not touch the Entity table.","type":"boolean"},"confirmed":{"description":"Phase 2 ConfirmGate: set to true to proceed after a 'pending_confirmation' result. The operation is NOT executed until you re-call with confirmed=true after user consent.","type":"boolean"},"user_intent_phrases":{"description":"Phase 2 ConfirmGate: explicit user intent phrases collected from conversation context (e.g. 'use default account', 'force publish'). Used to bypass confirmation rules whose bypass_on_explicit_intent matches.","type":"array","items":{"type":"string"}},"plan_approval":{"description":"K3 24 PlanApproval: id of a goal whose plan was approved via goal_operation action='approve'. When set: 1) the ConfirmGate treats fail-open rules (standard/none levels) as pre-approved for operations under this goal's plan; 2) after successful CREATION operations, the created objects are auto-registered into the goal (GoalRecord.objects + its TaskProcess manifest — ACT station 'execution registers'). Fail-closed levels (irreversible/publish/amount) still require per-operation confirmation with env.confirmed=true.","type":"string"},"client_schema_version":{"description":"Client-side schema version (semver, e.g. '1.0.0'). When provided, the server checks compatibility and attaches warnings if mismatched.","type":"string"},"schema_strict_mode":{"default":false,"description":"When true, schema incompatibility returns an error instead of a warning. Default: false (warn mode).","type":"boolean"},"dry_run":{"description":"Phase 1 dry_run: when true, SIMULATE the transaction without signing or submitting. Returns effects + events showing what WOULD happen — no on-chain state is modified, no gas is charged. Use this to verify that an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).","type":"boolean"},"window_profile":{"description":"Time-window profile for trial runs (N8 ktt6 F-14 re-carving of the 'business windows are never test-compressed' ruling, 2026-11-04). 'production' (default): compressed time-window violations BLOCK publish exactly as before. 'test': compressed windows are ADMITTED so a disposable trial store can run its full lifecycle fast — R-TIME-PROFILE violations degrade to loud named disclosures, and the publish itself is BLOCKED on a real network (testnet/mainnet); point the trial at a local/dev chain (env.network='localnet'). Trial discipline: test-profile stores are throwaway — a production store must re-issue WITHOUT this flag (guards freeze at publish, so compressed windows are unrepairable except by rebuilding the store).","type":"string","enum":["production","test"]},"response_level":{"description":"Write-success response size. 'compact' (default) trims the structured result to key fields (digest + created object references); 'full' includes the complete raw result. Default: compact.","type":"string","enum":["compact","full"]},"confirm_mode":{"description":"Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.","type":"string","enum":["full","streamlined","quiet"]}},"required":["account","schema_strict_mode"],"additionalProperties":false,"description":"IMPORTANT: Execution environment includes: account for signing operations, network selection (testnet | localnet | mainnet), additional Guard permissions, and more. Used to specify context information during the call. If account is not specified, the default account (\"\") will be used. NOTE: by default the SDK auto-registers the sender in the global Entity table when absent (first business transaction; the account receives an owned Resource object). Set no_auto_register=true only on explicit user request."},"submission":{"type":"object","properties":{"type":{"type":"string","const":"submission","description":"Discriminator for this result variant. Constraint: always 'submission'. Example: 'submission'"},"guard":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"object":{"type":"string","description":"Guard object name or ID to verify against. Example: 'my-delivery-guard' or '0x123...'"},"impack":{"type":"boolean","description":"Whether this Guard's verification result participates in the final logic. Constraint: if false, the Guard is checked but does not block the operation. Example: true"}},"required":["object","impack"],"additionalProperties":false},"description":"Array of Guard objects to verify. Constraint: at most 20 entries (MAX_GUARD_COUNT_PASSPORT). Relation: each entry corresponds to a Guard bound to the operation."},"submission":{"type":"array","items":{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or ID that requires submission data. Example: 'my-delivery-guard'"},"submission":{"type":"array","items":{"type":"object","properties":{"identifier":{"type":"integer","minimum":0,"maximum":255,"description":"Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails whose payee is NOT the order itself, such as settlement releases and incentive/bounty claims). NEVER arm 254 on a refund rail: a refund pays the submitted Order through user slot 0, and a refund leg re-entered in a later renewal period would abort E_ONCE_TRIGGERED (16) forever — refund once-ness comes from the terminal-node topology, never from a once slot. SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."},"b_submission":{"type":"boolean","description":"Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."},"value_type":{"description":"Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details.","anyOf":[{"type":"number","const":0,"description":"Bool (0)"},{"type":"number","const":1,"description":"Address (1)"},{"type":"number","const":2,"description":"String (2)"},{"type":"number","const":3,"description":"U8 (3)"},{"type":"number","const":4,"description":"U16 (4)"},{"type":"number","const":5,"description":"U32 (5)"},{"type":"number","const":6,"description":"U64 (6)"},{"type":"number","const":7,"description":"U128 (7)"},{"type":"number","const":8,"description":"U256 (8)"},{"type":"number","const":9,"description":"VecBool (9)"},{"type":"number","const":10,"description":"VecAddress (10)"},{"type":"number","const":11,"description":"VecString (11)"},{"type":"number","const":12,"description":"VecU8 (12)"},{"type":"number","const":13,"description":"VecU16 (13)"},{"type":"number","const":14,"description":"VecU32 (14)"},{"type":"number","const":15,"description":"VecU64 (15)"},{"type":"number","const":16,"description":"VecU128 (16)"},{"type":"number","const":17,"description":"VecU256 (17)"},{"type":"number","const":18,"description":"VecVecU8 (18)"},{"type":"string","const":"Bool","description":"Bool"},{"type":"string","const":"Address","description":"Address"},{"type":"string","const":"String","description":"String"},{"type":"string","const":"U8","description":"U8"},{"type":"string","const":"U16","description":"U16"},{"type":"string","const":"U32","description":"U32"},{"type":"string","const":"U64","description":"U64"},{"type":"string","const":"U128","description":"U128"},{"type":"string","const":"U256","description":"U256"},{"type":"string","const":"VecBool","description":"VecBool"},{"type":"string","const":"VecAddress","description":"VecAddress"},{"type":"string","const":"VecString","description":"VecString"},{"type":"string","const":"VecU8","description":"VecU8"},{"type":"string","const":"VecU16","description":"VecU16"},{"type":"string","const":"VecU32","description":"VecU32"},{"type":"string","const":"VecU64","description":"VecU64"},{"type":"string","const":"VecU128","description":"VecU128"},{"type":"string","const":"VecU256","description":"VecU256"},{"type":"string","const":"VecVecU8","description":"VecVecU8"},{"type":"string","const":"bool","description":"bool"},{"type":"string","const":"address","description":"address"},{"type":"string","const":"string","description":"string"},{"type":"string","const":"u8","description":"u8"},{"type":"string","const":"u16","description":"u16"},{"type":"string","const":"u32","description":"u32"},{"type":"string","const":"u64","description":"u64"},{"type":"string","const":"u128","description":"u128"},{"type":"string","const":"u256","description":"u256"},{"type":"string","const":"vecbool","description":"vecbool"},{"type":"string","const":"vecaddress","description":"vecaddress"},{"type":"string","const":"vecstring","description":"vecstring"},{"type":"string","const":"vecu8","description":"vecu8"},{"type":"string","const":"vecu16","description":"vecu16"},{"type":"string","const":"vecu32","description":"vecu32"},{"type":"string","const":"vecu64","description":"vecu64"},{"type":"string","const":"vecu128","description":"vecu128"},{"type":"string","const":"vecu256","description":"vecu256"},{"type":"string","const":"vecvecu8","description":"vecvecu8"}]},"value":{"description":"The actual value data. Format depends on `value_type`:\nTYPE-CLASS SPLIT (F03): scalar value_types (Bool/Address/String/U8..U256) take ONE scalar value (boolean/address string/name/string/number); Vec* value_types (VecBool/VecAddress/VecString/VecU8..VecU256) take a REAL JSON ARRAY of elements — a string (even a Python-repr-looking \"[a, b]\") fails serialization with 'value_type=10 (array) requires a array value'. The historical 'static values must be strings' rule applied to SCALARS only.\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nPROTOCOL SLOT 254 (once, b_submission Address): the submitted value MUST be the ORDER address bound to the operation (payment_info.for_object) — NEVER the Progress/Machine/Arb object the call is advancing. The chain asserts submission(254) == the order address; a Progress address fails the task binding and the forward aborts.\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission).","anyOf":[{"type":"boolean"},{"anyOf":[{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."},{"type":"string"}]},{"type":"string"},{"type":"number"},{"type":"array","items":{"type":"boolean"}},{"anyOf":[{"type":"object","properties":{"entities":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."}},"check_all_founded":{"default":true,"description":"Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)","type":"boolean"}},"required":["entities","check_all_founded"],"additionalProperties":false,"description":"Used to batch find account or object IDs by name"},{"type":"array","items":{"type":"string"}}]},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"array","items":{"type":"number"}}}]},"name":{"default":"","description":"Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here.","type":"string"},"object_type":{"description":"OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation.","type":"string","enum":["Permission","Repository","Arb","Arbitration","Service","Machine","Order","Progress","Payment","Treasury","Guard","Demand","Passport","Allocation","Resource","Reward","Discount","EntityRegistrar","EntityLinker","Proof","WReceivedObject","Contact","TableItem_ProgressHistory","TableItem_PermissionPerm","TableItem_DemandPresenter","TableItem_MachineNode","TableItem_TreasuryHistory","TableItem_RepositoryData","TableItem_RewardRecord","TableItem_EntityLinker","TableItem_AddressMark","TableItem_EntityRegistrar"]}},"required":["identifier","b_submission","value_type","name"],"additionalProperties":false,"description":"Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"},"description":"User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}] PROTOCOL SLOT 254: when the Guard table has identifier 254, submit the ORDER address bound to the operation (payment_info.for_object) — never the Progress/Machine object being advanced."}},"required":["guard","submission"],"additionalProperties":false,"description":"One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."},"description":"User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. SLOT COMPLETENESS (T8 az3-mn-261013): the submission array must cover EVERY b_submission slot in the Guard's table, not just one — a Guard whose table has multiple b_submission entries (e.g. slot 0 + slot 254) aborts on-chain with 'Submission ID not found' (abort 11) when any b_submission slot has no matching entry. Check the Guard's table (each entry with b_submission needs its identifier filled) and include ALL of them. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"}},"required":["type","guard","submission"],"additionalProperties":false,"description":"Guard verification required. The operation was blocked because one or more Guards require user-submitted data. Fill the submission array and resubmit. Semantic status is 'pending_input'."}},"required":["operation_type","data"],"additionalProperties":false}