@wowok/agent-mcp 3.2.9 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +2 -2
  2. package/dist/chain-semantics/field-capability.js +1 -1
  3. package/dist/chain-semantics/freeze-map.js +1 -1
  4. package/dist/chain-semantics/fund-flow.js +1 -1
  5. package/dist/chain-semantics/object-graph.js +1 -1
  6. package/dist/composition/audit.js +1 -1
  7. package/dist/composition/compile.d.ts +10 -1
  8. package/dist/composition/compile.js +1 -1
  9. package/dist/composition/inflight.js +1 -1
  10. package/dist/extensions/capability-manifest.js +1 -1
  11. package/dist/extensions/industry-audit.spec.js +1 -1
  12. package/dist/extensions/industry-pack.js +1 -1
  13. package/dist/graph/onchain/facts.spec.js +1 -1
  14. package/dist/graph/onchain/field-manifest.js +1 -1
  15. package/dist/harness/recover.js +1 -1
  16. package/dist/intent/types.d.ts +1 -1
  17. package/dist/intent/types.js +1 -1
  18. package/dist/keeper/KeeperScan.d.ts +2 -1
  19. package/dist/keeper/KeeperScan.js +1 -1
  20. package/dist/keeper/keeper.spec.js +1 -1
  21. package/dist/keeper/types.d.ts +3 -0
  22. package/dist/keeper/types.js +1 -1
  23. package/dist/knowledge/allocator-rail-verifier.d.ts +34 -0
  24. package/dist/knowledge/allocator-rail-verifier.js +1 -0
  25. package/dist/knowledge/arbitration-ledger.js +1 -1
  26. package/dist/knowledge/arbitration-templates.js +1 -1
  27. package/dist/knowledge/arbitration-venue-order.js +1 -1
  28. package/dist/knowledge/audit-rules.d.ts +19 -1
  29. package/dist/knowledge/audit-rules.js +1 -1
  30. package/dist/knowledge/baselines/rules/alloc_audit.json +1 -1
  31. package/dist/knowledge/baselines/rules/arb.json +1 -1
  32. package/dist/knowledge/baselines/rules/guard.json +15 -5
  33. package/dist/knowledge/baselines/rules/machine.json +9 -6
  34. package/dist/knowledge/baselines/rules/plan.json +12 -12
  35. package/dist/knowledge/baselines/semantic-facts.js +1 -1
  36. package/dist/knowledge/builtin-templates.d.ts +1 -1
  37. package/dist/knowledge/builtin-templates.js +1 -1
  38. package/dist/knowledge/contract-invariants.js +1 -1
  39. package/dist/knowledge/event-semantics.js +1 -1
  40. package/dist/knowledge/fund-layer.js +1 -1
  41. package/dist/knowledge/getting-started.js +1 -1
  42. package/dist/knowledge/guard-anchor-reach.d.ts +1 -1
  43. package/dist/knowledge/guard-anchor-reach.js +1 -1
  44. package/dist/knowledge/guard-bindings.js +1 -1
  45. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  46. package/dist/knowledge/guard-design-patterns.js +1 -1
  47. package/dist/knowledge/guard-field-cognition.js +1 -1
  48. package/dist/knowledge/guard-render.js +1 -1
  49. package/dist/knowledge/guard-risk.js +1 -1
  50. package/dist/knowledge/guard-templates.d.ts +1 -1
  51. package/dist/knowledge/guard-templates.js +1 -1
  52. package/dist/knowledge/index.js +1 -1
  53. package/dist/knowledge/industry-registry.js +1 -1
  54. package/dist/knowledge/industry-strategy.js +1 -1
  55. package/dist/knowledge/jsonrpc-enum.js +1 -1
  56. package/dist/knowledge/machine-ledger.js +1 -1
  57. package/dist/knowledge/machine-puzzle.d.ts +1 -1
  58. package/dist/knowledge/machine-puzzle.js +1 -1
  59. package/dist/knowledge/machine-risk.js +1 -1
  60. package/dist/knowledge/machine-templates.js +1 -1
  61. package/dist/knowledge/machine-topology.d.ts +8 -0
  62. package/dist/knowledge/machine-topology.js +1 -1
  63. package/dist/knowledge/machine-translation.js +1 -1
  64. package/dist/knowledge/permission-ledger.js +1 -1
  65. package/dist/knowledge/protocol-facts.d.ts +16 -0
  66. package/dist/knowledge/protocol-facts.js +1 -0
  67. package/dist/knowledge/recipient-constraint.js +1 -1
  68. package/dist/knowledge/reward-ledger.d.ts +2 -1
  69. package/dist/knowledge/reward-ledger.js +1 -1
  70. package/dist/knowledge/reward-templates.js +1 -1
  71. package/dist/knowledge/safety-rules.d.ts +0 -2
  72. package/dist/knowledge/safety-rules.js +1 -1
  73. package/dist/knowledge/scenario-modes.d.ts +7 -0
  74. package/dist/knowledge/scenario-modes.js +1 -1
  75. package/dist/knowledge/strategy-manuals.js +1 -1
  76. package/dist/knowledge/template-loader.d.ts +13 -1
  77. package/dist/knowledge/template-loader.js +1 -1
  78. package/dist/knowledge/template-registry.js +1 -1
  79. package/dist/knowledge/template-scanner.js +1 -1
  80. package/dist/knowledge/tool-constraints.js +1 -1
  81. package/dist/knowledge/tools-reference.js +1 -1
  82. package/dist/monitor/MonitorLoop.js +1 -1
  83. package/dist/monitor/normalize.d.ts +1 -1
  84. package/dist/monitor/normalize.js +1 -1
  85. package/dist/monitor/types.d.ts +1 -1
  86. package/dist/monitor/types.js +1 -1
  87. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  88. package/dist/playbooks/service-build/game-theory.d.ts +1 -0
  89. package/dist/playbooks/service-build/game-theory.js +1 -1
  90. package/dist/playbooks/service-build/intent-analyzer.js +1 -1
  91. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  92. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  93. package/dist/playbooks/service-build/object-panorama.js +1 -1
  94. package/dist/playbooks/service-build/participation-radar.js +1 -1
  95. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  96. package/dist/playbooks/service-build/service-panorama.js +1 -1
  97. package/dist/playbooks/service-build/service-quote.js +1 -1
  98. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  99. package/dist/relationship/registry.js +1 -1
  100. package/dist/review/index.js +1 -1
  101. package/dist/role/profiles.js +1 -1
  102. package/dist/safety/confirm-gate.js +1 -1
  103. package/dist/schema/benchmark-migration/index.d.ts +5 -1
  104. package/dist/schema/benchmark-migration/index.js +1 -1
  105. package/dist/schema/call/arbitration.d.ts +4 -4
  106. package/dist/schema/call/arbitration.js +1 -1
  107. package/dist/schema/call/base.d.ts +39 -0
  108. package/dist/schema/call/base.js +1 -1
  109. package/dist/schema/call/bridge.d.ts +1 -0
  110. package/dist/schema/call/contact.d.ts +4 -4
  111. package/dist/schema/call/demand.d.ts +4 -4
  112. package/dist/schema/call/error-codes.d.ts +1 -1
  113. package/dist/schema/call/error-codes.js +1 -1
  114. package/dist/schema/call/handler.js +1 -1
  115. package/dist/schema/call/machine.d.ts +12 -4
  116. package/dist/schema/call/order.d.ts +4 -4
  117. package/dist/schema/call/permission.d.ts +4 -4
  118. package/dist/schema/call/progress.d.ts +4 -4
  119. package/dist/schema/call/receipt.d.ts +8 -0
  120. package/dist/schema/call/receipt.js +1 -1
  121. package/dist/schema/call/repository.d.ts +4 -4
  122. package/dist/schema/call/reward.d.ts +24 -4
  123. package/dist/schema/call/reward.js +1 -1
  124. package/dist/schema/call/semantic.js +1 -1
  125. package/dist/schema/call/service.d.ts +6 -4
  126. package/dist/schema/call/service.js +1 -1
  127. package/dist/schema/call/treasury.d.ts +4 -4
  128. package/dist/schema/common/index.d.ts +2 -2
  129. package/dist/schema/common/index.js +1 -1
  130. package/dist/schema/goal/index.d.ts +5 -1
  131. package/dist/schema/goal/planning.d.ts +10 -2
  132. package/dist/schema/goal/planning.js +1 -1
  133. package/dist/schema/industry-pack/index.d.ts +3 -0
  134. package/dist/schema/industry-pack/index.js +1 -1
  135. package/dist/schema/intent-radar/index.d.ts +9 -0
  136. package/dist/schema/intent-radar/index.js +1 -1
  137. package/dist/schema/local/index.d.ts +10 -0
  138. package/dist/schema/local/index.js +1 -1
  139. package/dist/schema/operations.d.ts +35 -22
  140. package/dist/schema/operations.js +1 -1
  141. package/dist/schema/query/bi.d.ts +16 -0
  142. package/dist/schema/query/bi.js +1 -1
  143. package/dist/schema/query/index.d.ts +52 -48
  144. package/dist/schema/query/index.js +1 -1
  145. package/dist/schema/schema-query/index.d.ts +1 -0
  146. package/dist/schema/schema-query/index.js +1 -1
  147. package/dist/schema/schema-version.js +1 -1
  148. package/dist/schema-query-impl/index.d.ts +1 -1
  149. package/dist/schema-query-impl/index.js +1 -1
  150. package/dist/schemas/account_operation.output.json +1 -0
  151. package/dist/schemas/account_operation.schema.json +1 -1
  152. package/dist/schemas/benchmark_migration_operation.schema.json +27 -3
  153. package/dist/schemas/bridge_operation.output.json +1 -0
  154. package/dist/schemas/goal_operation.schema.json +26 -2
  155. package/dist/schemas/index.json +1 -1
  156. package/dist/schemas/industry_pack_operation.output.json +8 -0
  157. package/dist/schemas/industry_pack_operation.schema.json +9 -0
  158. package/dist/schemas/intent_radar.output.json +8 -2
  159. package/dist/schemas/intent_radar.schema.json +4 -1
  160. package/dist/schemas/local_cache_operation.output.json +1 -0
  161. package/dist/schemas/local_history_operation.output.json +1 -0
  162. package/dist/schemas/local_info_operation.output.json +1 -0
  163. package/dist/schemas/local_mark_operation.output.json +1 -0
  164. package/dist/schemas/monitor_events.schema.json +3 -1
  165. package/dist/schemas/onchain_events.output.json +275 -11
  166. package/dist/schemas/onchain_events.schema.json +25 -1
  167. package/dist/schemas/onchain_operations.output.json +40 -0
  168. package/dist/schemas/onchain_operations.schema.json +573 -104
  169. package/dist/schemas/onchain_operations_allocation.schema.json +2 -2
  170. package/dist/schemas/onchain_operations_arbitration.schema.json +11 -7
  171. package/dist/schemas/onchain_operations_contact.schema.json +9 -5
  172. package/dist/schemas/onchain_operations_demand.schema.json +9 -5
  173. package/dist/schemas/onchain_operations_guard.schema.json +342 -4
  174. package/dist/schemas/onchain_operations_machine.schema.json +17 -5
  175. package/dist/schemas/onchain_operations_order.schema.json +9 -5
  176. package/dist/schemas/onchain_operations_permission.schema.json +9 -5
  177. package/dist/schemas/onchain_operations_progress.schema.json +9 -5
  178. package/dist/schemas/onchain_operations_repository.schema.json +9 -5
  179. package/dist/schemas/onchain_operations_reward.schema.json +89 -9
  180. package/dist/schemas/onchain_operations_service.schema.json +18 -11
  181. package/dist/schemas/onchain_operations_treasury.schema.json +9 -5
  182. package/dist/schemas/query_toolkit.output.json +237 -14
  183. package/dist/schemas/schema_query.schema.json +3 -2
  184. package/dist/tools/handlers/benchmark-migration.d.ts +45 -1
  185. package/dist/tools/handlers/benchmark-migration.js +1 -1
  186. package/dist/tools/handlers/config.js +1 -1
  187. package/dist/tools/handlers/industry-pack.js +1 -1
  188. package/dist/tools/handlers/intent-radar.js +1 -1
  189. package/dist/tools/handlers/keeper.d.ts +1 -1
  190. package/dist/tools/handlers/onchain.d.ts +12 -0
  191. package/dist/tools/handlers/onchain.js +1 -1
  192. package/dist/tools/handlers/schema-query.js +1 -1
  193. package/dist/tools/handlers/workflow.js +1 -1
  194. package/dist/tools/index.js +1 -1
  195. package/dist/tools/registry/agent.js +1 -1
  196. package/dist/tools/registry/business.js +1 -1
  197. package/dist/tools/registry/query.js +1 -1
  198. package/dist/tools/rules-hook.js +1 -1
  199. package/dist/tools/wrap.js +1 -1
  200. package/package.json +2 -2
@@ -97,7 +97,7 @@
97
97
  "GuardIdentifier"
98
98
  ],
99
99
  "additionalProperties": false,
100
- "description": "Guard verified recipient ID. Get recipient ID from specified data index in Guard table. The ID must be of address type."
100
+ "description": "Guard verified recipient ID. Get recipient ID from specified data index in Guard table. The ID must be of address type. ALLOCATION rails only — the REWARD claim rail requires recipient == the transaction sender (abort 14), so a GuardIdentifier recipient on reward.guard_add resolves to the submitted Order and is structurally unpayable; the tool gate rejects it (crs-mn-261015 F-12)."
101
101
  },
102
102
  {
103
103
  "type": "object",
@@ -136,7 +136,7 @@
136
136
  "Signer"
137
137
  ],
138
138
  "additionalProperties": false,
139
- "description": "Current transaction signer (tx_context::sender) at the time of the alloc() call. For refunds, the Order owner must call alloc_by_guard themselves to receive the funds."
139
+ "description": "Current transaction signer (tx_context::sender) at the time of the alloc() call. For refunds, the Order owner must call alloc_by_guard themselves to receive the funds. On the REWARD claim rail this is the CANONICAL recipient (the claim entry requires recipient == the tx sender)."
140
140
  }
141
141
  ],
142
142
  "description": "Recipient of this allocation. Three forms — each resolves the address at a DIFFERENT time:\n• { GuardIdentifier: u8 } — DYNAMIC address resolved from Passport at alloc() time (from the passport's submission record). Use 0 for Order owner in Service-integrated mode (Customer who created the Order). The identifier must match a Guard table entry with b_submission=true. If Passport has no matching submission, contract aborts with E_VERIFY_FAILED. Use when the recipient address is not known at config time and must be supplied via Guard submission data.\n• { Entity: { name_or_address: '...' } } — FIXED address resolved via LocalMark at SDK build time (passed to contract as a literal address). Use for known recipients (e.g., 'turo_host', or a Treasury object address). Use when the recipient is a stable, known address (e.g., operator receives rent, platform fee to treasury).\n• 'Signer' — the transaction sender at the time of the alloc() call (tx_context::sender). RESOLVED AT EXECUTION TIME, not at config time. For refunds: the customer (Order owner) must call alloc_by_guard THEMSELVES so that tx_context::sender resolves to THEIR address — if the operator calls alloc_by_guard, the operator becomes the recipient (Signer = operator), NOT the customer. Use when the recipient is whoever submits the allocation transaction (e.g., customer receives refund)."
@@ -220,7 +220,7 @@
220
220
  },
221
221
  "voting_deadline": {
222
222
  "default": null,
223
- "description": "Voting deadline as Unix timestamp in MILLISECONDS (ms). SEMANTICS OF SPECIAL VALUES: null (DEFAULT when omitted) = open-ended voting, no deadline; parties may vote at any time and the arbitrator may deliver the verdict immediately (arb.move skips the deadline assert when the Option is none) — this is the SAFE default; a future timestamp = normal bounded voting window (recommended: now + at least 86400000 ms = 24 hours); 0 = deadline already passed → voting is IMPOSSIBLE (every vote aborts E_VOTING_DEADLINE_PASSED) and only a direct verdict is possible. Only pass 0 deliberately when you truly want a no-vote verdict. COMMON MISTAKE: using seconds instead of milliseconds (multiply by 1000). Example: Date.now() + 259200000 for 3 days from now.",
223
+ "description": "Voting deadline as Unix timestamp in MILLISECONDS (ms). SEMANTICS OF SPECIAL VALUES: null (DEFAULT when omitted) = open-ended voting, no deadline; parties may vote at any time and the arbitrator may deliver the verdict after casting at least one ballot (arb.move skips the deadline assert when the Option is none) — this is the SAFE default; a future timestamp = normal bounded voting window (recommended: now + at least 86400000 ms = 24 hours); 0 = deadline already passed → the case PERMANENTLY DEADLOCKS (kl-real-261016 F-01, chain-verified): every vote aborts E_VOTING_DEADLINE_PASSED, so no ballot can ever exist, the verdict then aborts E_NO_VOTE_CAST (a verdict requires >= 1 cast ballot), and reset aborts as well. NEVER pass 0. Direct verdict = null + cast one ballot first, then deliver the verdict. COMMON MISTAKE: using seconds instead of milliseconds (multiply by 1000). Example: Date.now() + 259200000 for 3 days from now.",
224
224
  "anyOf": [
225
225
  {
226
226
  "type": "integer",
@@ -256,7 +256,7 @@
256
256
  "type": "null"
257
257
  }
258
258
  ],
259
- "description": "New voting deadline as Unix timestamp in MILLISECONDS (ms). SEMANTICS OF SPECIAL VALUES: 0 = deadline already passed → voting is IMPOSSIBLE and the arbitrator may deliver the verdict immediately; null = open-ended voting with no deadline (verdict allowed anytime); a future timestamp = normal voting window (recommended: now + at least 86400000 ms = 24 hours). COMMON MISTAKE: using seconds instead of milliseconds (multiply by 1000). Example: Date.now() + 259200000 for 3 days from now."
259
+ "description": "New voting deadline as Unix timestamp in MILLISECONDS (ms). SEMANTICS OF SPECIAL VALUES: 0 = deadline already passed → the case PERMANENTLY DEADLOCKS (votes abort E_VOTING_DEADLINE_PASSED, no ballot can ever exist, verdict aborts E_NO_VOTE_CAST, reset aborts). NEVER pass 0; null = open-ended voting with no deadline (verdict allowed after casting at least one ballot — use this for the immediate-verdict flow: cast one ballot, then deliver); a future timestamp = normal voting window (recommended: now + at least 86400000 ms = 24 hours). COMMON MISTAKE: using seconds instead of milliseconds (multiply by 1000). Example: Date.now() + 259200000 for 3 days from now."
260
260
  }
261
261
  },
262
262
  "required": [
@@ -574,8 +574,16 @@
574
574
  ]
575
575
  },
576
576
  "owner_receive": {
577
- "description": "Unwrap CoinWrapper objects and other objects received by this Arbitration 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.\"\n Example: receive: 'recently'\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.",
577
+ "description": "Unwrap CoinWrapper objects and other objects received by this Arbitration 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.",
578
578
  "anyOf": [
579
+ {
580
+ "type": "string",
581
+ "const": "recently"
582
+ },
583
+ {
584
+ "type": "string",
585
+ "pattern": "^0x[0-9a-fA-F]{8,}$"
586
+ },
579
587
  {
580
588
  "minItems": 1,
581
589
  "type": "array",
@@ -685,10 +693,6 @@
685
693
  ],
686
694
  "additionalProperties": false,
687
695
  "description": "Received record of Coin objects"
688
- },
689
- {
690
- "type": "string",
691
- "const": "recently"
692
696
  }
693
697
  ]
694
698
  },
@@ -219,8 +219,16 @@
219
219
  ]
220
220
  },
221
221
  "owner_receive": {
222
- "description": "Receive objects sent to this Contact object and unwrap them to the permission owner.\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.\"\n Example: receive: 'recently'\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.",
222
+ "description": "Receive objects sent to this Contact object and unwrap them to the permission owner.\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.",
223
223
  "anyOf": [
224
+ {
225
+ "type": "string",
226
+ "const": "recently"
227
+ },
228
+ {
229
+ "type": "string",
230
+ "pattern": "^0x[0-9a-fA-F]{8,}$"
231
+ },
224
232
  {
225
233
  "minItems": 1,
226
234
  "type": "array",
@@ -330,10 +338,6 @@
330
338
  ],
331
339
  "additionalProperties": false,
332
340
  "description": "Received record of Coin objects"
333
- },
334
- {
335
- "type": "string",
336
- "const": "recently"
337
341
  }
338
342
  ]
339
343
  }
@@ -357,8 +357,16 @@
357
357
  ]
358
358
  },
359
359
  "owner_receive": {
360
- "description": "Unwrap CoinWrapper objects and other objects received by this Demand 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.\"\n Example: receive: 'recently'\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.",
360
+ "description": "Unwrap CoinWrapper objects and other objects received by this Demand 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.",
361
361
  "anyOf": [
362
+ {
363
+ "type": "string",
364
+ "const": "recently"
365
+ },
366
+ {
367
+ "type": "string",
368
+ "pattern": "^0x[0-9a-fA-F]{8,}$"
369
+ },
362
370
  {
363
371
  "minItems": 1,
364
372
  "type": "array",
@@ -468,10 +476,6 @@
468
476
  ],
469
477
  "additionalProperties": false,
470
478
  "description": "Received record of Coin objects"
471
- },
472
- {
473
- "type": "string",
474
- "const": "recently"
475
479
  }
476
480
  ]
477
481
  },
@@ -515,7 +515,7 @@
515
515
  "type": "string"
516
516
  }
517
517
  ],
518
- "description": "ID or name of the wowok object data query instruction. Can be a numeric ID (e.g., 1001) or a name string (e.g., 'permission.description'). Name matching is case-insensitive."
518
+ "description": "ID or name of the wowok object data query instruction. Can be a numeric ID (e.g., 1001) or a name string (e.g., 'permission.description'). Name matching is case-insensitive. STRONGLY PREFER the NAME form: a numeric ID is resolved VERBATIM at runtime, so a wrong-but-existing ID silently checks a DIFFERENT field and only fails at Guard trigger time (abort 7, no leg named) — a wrong name fails loudly at validation here instead (rndb58d8d 04-ROOTCAUSE-A A2). If you only know the field, list the catalog first via schema_query action='get_guard_queries'."
519
519
  },
520
520
  "object": {
521
521
  "type": "object",
@@ -1875,13 +1875,26 @@
1875
1875
  "minimum": 0,
1876
1876
  "maximum": 255,
1877
1877
  "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 such as full refunds)."
1878
+ },
1879
+ "convert_witness": {
1880
+ "description": "Optional witness to derive the Progress object from the submitted Order (e.g. 'OrderProgress'): the table object is the ORDER address and the chain resolves its per-order Progress — one Guard serves every order. Omit when the table object is a concrete Progress address.",
1881
+ "anyOf": [
1882
+ {
1883
+ "type": "integer",
1884
+ "minimum": -9007199254740991,
1885
+ "maximum": 9007199254740991
1886
+ },
1887
+ {
1888
+ "type": "string"
1889
+ }
1890
+ ]
1878
1891
  }
1879
1892
  },
1880
1893
  "required": [
1881
1894
  "identifier"
1882
1895
  ],
1883
1896
  "additionalProperties": false,
1884
- "description": "Reference to the Progress object in the Guard table (must be Address type)."
1897
+ "description": "Reference to the queried object in the Guard table: a Progress address, or an Order address when convert_witness is set."
1885
1898
  },
1886
1899
  "where": {
1887
1900
  "type": "object",
@@ -1932,6 +1945,91 @@
1932
1945
  "additionalProperties": false,
1933
1946
  "description": "Returns U64. Finds the index of the first or last history entry matching the filter conditions. Returns the history index (U64) if found. Throws error if no matching entry is found (Guard validation fails)."
1934
1947
  },
1948
+ {
1949
+ "type": "object",
1950
+ "properties": {
1951
+ "type": {
1952
+ "type": "string",
1953
+ "const": "query_progress_history_time"
1954
+ },
1955
+ "object": {
1956
+ "type": "object",
1957
+ "properties": {
1958
+ "identifier": {
1959
+ "type": "integer",
1960
+ "minimum": 0,
1961
+ "maximum": 255,
1962
+ "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 such as full refunds)."
1963
+ },
1964
+ "convert_witness": {
1965
+ "description": "Optional witness to derive the Progress object from the submitted Order (e.g. 'OrderProgress'): the table object is the ORDER address and the chain resolves its per-order Progress — one Guard serves every order. Omit when the table object is a concrete Progress address.",
1966
+ "anyOf": [
1967
+ {
1968
+ "type": "integer",
1969
+ "minimum": -9007199254740991,
1970
+ "maximum": 9007199254740991
1971
+ },
1972
+ {
1973
+ "type": "string"
1974
+ }
1975
+ ]
1976
+ }
1977
+ },
1978
+ "required": [
1979
+ "identifier"
1980
+ ],
1981
+ "additionalProperties": false,
1982
+ "description": "Reference to the queried object in the Guard table: a Progress address, or an Order address when convert_witness is set."
1983
+ },
1984
+ "where": {
1985
+ "type": "object",
1986
+ "properties": {
1987
+ "node": {
1988
+ "description": "Optional filter: node name string to match.",
1989
+ "type": "string"
1990
+ },
1991
+ "nextNode": {
1992
+ "description": "Optional filter: next node name string to match — the canonical time anchor is where:{nextNode:'<node>'}, find:'last', which returns the IMMUTABLE moment that node was entered (1280 history.time is written once on entry and never rewritten, unlike the 1272 current-time read which refreshes on re-entry). An empty where {} with find:'last' returns the entry time of the CURRENT node — safe for node-SET gates.",
1993
+ "type": "string"
1994
+ },
1995
+ "timeMin": {
1996
+ "description": "Optional filter: minimum timestamp (inclusive) for history entry time. Use string to represent U64 value.",
1997
+ "type": "string"
1998
+ },
1999
+ "timeMax": {
2000
+ "description": "Optional filter: maximum timestamp (inclusive) for history entry time. Use string to represent U64 value.",
2001
+ "type": "string"
2002
+ },
2003
+ "indexMin": {
2004
+ "description": "Optional filter: minimum history index (inclusive) to search within. Use string to represent U64 value.",
2005
+ "type": "string"
2006
+ },
2007
+ "indexMax": {
2008
+ "description": "Optional filter: maximum history index (inclusive) to search within. Use string to represent U64 value.",
2009
+ "type": "string"
2010
+ }
2011
+ },
2012
+ "additionalProperties": false,
2013
+ "description": "Filter conditions for the progress history time query."
2014
+ },
2015
+ "find": {
2016
+ "type": "string",
2017
+ "enum": [
2018
+ "first",
2019
+ "last"
2020
+ ],
2021
+ "description": "'first' finds the earliest matching history entry, 'last' finds the most recent matching history entry."
2022
+ }
2023
+ },
2024
+ "required": [
2025
+ "type",
2026
+ "object",
2027
+ "where",
2028
+ "find"
2029
+ ],
2030
+ "additionalProperties": false,
2031
+ "description": "Returns U64. Returns the TIMESTAMP (ms) of the first or last history entry matching the filter conditions — the immutable entry moment of a node (query 1280 progress.history.time). Preferred over query 1272 progress.current_time for time anchors: 1272 reads the node's CURRENT time and refreshes on re-entry (drift-prone), while 1280 is written once on entering next_node and never rewritten. Throws error if no matching entry is found (Guard validation fails)."
2032
+ },
1935
2033
  {
1936
2034
  "type": "object",
1937
2035
  "properties": {
@@ -2235,6 +2333,77 @@
2235
2333
  "additionalProperties": false,
2236
2334
  "description": "Returns U64. Counts the number of retained submissions within the specified forward operation."
2237
2335
  },
2336
+ {
2337
+ "type": "object",
2338
+ "properties": {
2339
+ "type": {
2340
+ "type": "string",
2341
+ "const": "query_progress_history_session_forward_retained_submission_value"
2342
+ },
2343
+ "object": {
2344
+ "type": "object",
2345
+ "properties": {
2346
+ "identifier": {
2347
+ "type": "integer",
2348
+ "minimum": 0,
2349
+ "maximum": 255,
2350
+ "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 such as full refunds)."
2351
+ }
2352
+ },
2353
+ "required": [
2354
+ "identifier"
2355
+ ],
2356
+ "additionalProperties": false,
2357
+ "description": "Reference to the Progress object in the Guard table (must be Address type)."
2358
+ },
2359
+ "historyIdx": {
2360
+ "description": "GuardNode that returns the history index (U64 type). Typically an 'identifier' node referencing a U64 value from the Guard table.",
2361
+ "allOf": [
2362
+ {
2363
+ "$ref": "#/definitions/__schema1"
2364
+ }
2365
+ ],
2366
+ "$ref": "#/definitions/__schema0"
2367
+ },
2368
+ "sessionIdx": {
2369
+ "description": "GuardNode that returns the session index (U64 type) within the history entry. Typically an 'identifier' node referencing a U64 value from the Guard table.",
2370
+ "allOf": [
2371
+ {
2372
+ "$ref": "#/definitions/__schema1"
2373
+ }
2374
+ ],
2375
+ "$ref": "#/definitions/__schema0"
2376
+ },
2377
+ "forwardIdx": {
2378
+ "description": "GuardNode that returns the forward operation index (U64 type) within the session. Typically an 'identifier' node referencing a U64 value from the Guard table.",
2379
+ "allOf": [
2380
+ {
2381
+ "$ref": "#/definitions/__schema1"
2382
+ }
2383
+ ],
2384
+ "$ref": "#/definitions/__schema0"
2385
+ },
2386
+ "identifier": {
2387
+ "description": "GuardNode that returns the submission identifier (U8 type) — which retained submission of the forward to read. Typically an 'identifier' node referencing a U8 value from the Guard table.",
2388
+ "allOf": [
2389
+ {
2390
+ "$ref": "#/definitions/__schema1"
2391
+ }
2392
+ ],
2393
+ "$ref": "#/definitions/__schema0"
2394
+ }
2395
+ },
2396
+ "required": [
2397
+ "type",
2398
+ "object",
2399
+ "historyIdx",
2400
+ "sessionIdx",
2401
+ "forwardIdx",
2402
+ "identifier"
2403
+ ],
2404
+ "additionalProperties": false,
2405
+ "description": "Returns VecU8 (the ONLY history query that does not return U64). Value of the specified retained submission of a HISTORY record (query 1281) — the history-side counterpart of the ACTIVE-SESSION-ONLY 1268 read, which goes blind once the session migrates into history. Use 1274/1275 to discover the history/session/forward indexes first. Throws error when the record carries no submission for the identifier (Guard validation fails)."
2406
+ },
2238
2407
  {
2239
2408
  "type": "object",
2240
2409
  "properties": {
@@ -3662,7 +3831,7 @@
3662
3831
  "type": "string"
3663
3832
  }
3664
3833
  ],
3665
- "description": "ID or name of the wowok object data query instruction. Can be a numeric ID (e.g., 1001) or a name string (e.g., 'permission.description'). Name matching is case-insensitive."
3834
+ "description": "ID or name of the wowok object data query instruction. Can be a numeric ID (e.g., 1001) or a name string (e.g., 'permission.description'). Name matching is case-insensitive. STRONGLY PREFER the NAME form: a numeric ID is resolved VERBATIM at runtime, so a wrong-but-existing ID silently checks a DIFFERENT field and only fails at Guard trigger time (abort 7, no leg named) — a wrong name fails loudly at validation here instead (rndb58d8d 04-ROOTCAUSE-A A2). If you only know the field, list the catalog first via schema_query action='get_guard_queries'."
3666
3835
  },
3667
3836
  "object": {
3668
3837
  "type": "object",
@@ -5022,13 +5191,26 @@
5022
5191
  "minimum": 0,
5023
5192
  "maximum": 255,
5024
5193
  "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 such as full refunds)."
5194
+ },
5195
+ "convert_witness": {
5196
+ "description": "Optional witness to derive the Progress object from the submitted Order (e.g. 'OrderProgress'): the table object is the ORDER address and the chain resolves its per-order Progress — one Guard serves every order. Omit when the table object is a concrete Progress address.",
5197
+ "anyOf": [
5198
+ {
5199
+ "type": "integer",
5200
+ "minimum": -9007199254740991,
5201
+ "maximum": 9007199254740991
5202
+ },
5203
+ {
5204
+ "type": "string"
5205
+ }
5206
+ ]
5025
5207
  }
5026
5208
  },
5027
5209
  "required": [
5028
5210
  "identifier"
5029
5211
  ],
5030
5212
  "additionalProperties": false,
5031
- "description": "Reference to the Progress object in the Guard table (must be Address type)."
5213
+ "description": "Reference to the queried object in the Guard table: a Progress address, or an Order address when convert_witness is set."
5032
5214
  },
5033
5215
  "where": {
5034
5216
  "type": "object",
@@ -5079,6 +5261,91 @@
5079
5261
  "additionalProperties": false,
5080
5262
  "description": "Returns U64. Finds the index of the first or last history entry matching the filter conditions. Returns the history index (U64) if found. Throws error if no matching entry is found (Guard validation fails)."
5081
5263
  },
5264
+ {
5265
+ "type": "object",
5266
+ "properties": {
5267
+ "type": {
5268
+ "type": "string",
5269
+ "const": "query_progress_history_time"
5270
+ },
5271
+ "object": {
5272
+ "type": "object",
5273
+ "properties": {
5274
+ "identifier": {
5275
+ "type": "integer",
5276
+ "minimum": 0,
5277
+ "maximum": 255,
5278
+ "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 such as full refunds)."
5279
+ },
5280
+ "convert_witness": {
5281
+ "description": "Optional witness to derive the Progress object from the submitted Order (e.g. 'OrderProgress'): the table object is the ORDER address and the chain resolves its per-order Progress — one Guard serves every order. Omit when the table object is a concrete Progress address.",
5282
+ "anyOf": [
5283
+ {
5284
+ "type": "integer",
5285
+ "minimum": -9007199254740991,
5286
+ "maximum": 9007199254740991
5287
+ },
5288
+ {
5289
+ "type": "string"
5290
+ }
5291
+ ]
5292
+ }
5293
+ },
5294
+ "required": [
5295
+ "identifier"
5296
+ ],
5297
+ "additionalProperties": false,
5298
+ "description": "Reference to the queried object in the Guard table: a Progress address, or an Order address when convert_witness is set."
5299
+ },
5300
+ "where": {
5301
+ "type": "object",
5302
+ "properties": {
5303
+ "node": {
5304
+ "description": "Optional filter: node name string to match.",
5305
+ "type": "string"
5306
+ },
5307
+ "nextNode": {
5308
+ "description": "Optional filter: next node name string to match — the canonical time anchor is where:{nextNode:'<node>'}, find:'last', which returns the IMMUTABLE moment that node was entered (1280 history.time is written once on entry and never rewritten, unlike the 1272 current-time read which refreshes on re-entry). An empty where {} with find:'last' returns the entry time of the CURRENT node — safe for node-SET gates.",
5309
+ "type": "string"
5310
+ },
5311
+ "timeMin": {
5312
+ "description": "Optional filter: minimum timestamp (inclusive) for history entry time. Use string to represent U64 value.",
5313
+ "type": "string"
5314
+ },
5315
+ "timeMax": {
5316
+ "description": "Optional filter: maximum timestamp (inclusive) for history entry time. Use string to represent U64 value.",
5317
+ "type": "string"
5318
+ },
5319
+ "indexMin": {
5320
+ "description": "Optional filter: minimum history index (inclusive) to search within. Use string to represent U64 value.",
5321
+ "type": "string"
5322
+ },
5323
+ "indexMax": {
5324
+ "description": "Optional filter: maximum history index (inclusive) to search within. Use string to represent U64 value.",
5325
+ "type": "string"
5326
+ }
5327
+ },
5328
+ "additionalProperties": false,
5329
+ "description": "Filter conditions for the progress history time query."
5330
+ },
5331
+ "find": {
5332
+ "type": "string",
5333
+ "enum": [
5334
+ "first",
5335
+ "last"
5336
+ ],
5337
+ "description": "'first' finds the earliest matching history entry, 'last' finds the most recent matching history entry."
5338
+ }
5339
+ },
5340
+ "required": [
5341
+ "type",
5342
+ "object",
5343
+ "where",
5344
+ "find"
5345
+ ],
5346
+ "additionalProperties": false,
5347
+ "description": "Returns U64. Returns the TIMESTAMP (ms) of the first or last history entry matching the filter conditions — the immutable entry moment of a node (query 1280 progress.history.time). Preferred over query 1272 progress.current_time for time anchors: 1272 reads the node's CURRENT time and refreshes on re-entry (drift-prone), while 1280 is written once on entering next_node and never rewritten. Throws error if no matching entry is found (Guard validation fails)."
5348
+ },
5082
5349
  {
5083
5350
  "type": "object",
5084
5351
  "properties": {
@@ -5382,6 +5649,77 @@
5382
5649
  "additionalProperties": false,
5383
5650
  "description": "Returns U64. Counts the number of retained submissions within the specified forward operation."
5384
5651
  },
5652
+ {
5653
+ "type": "object",
5654
+ "properties": {
5655
+ "type": {
5656
+ "type": "string",
5657
+ "const": "query_progress_history_session_forward_retained_submission_value"
5658
+ },
5659
+ "object": {
5660
+ "type": "object",
5661
+ "properties": {
5662
+ "identifier": {
5663
+ "type": "integer",
5664
+ "minimum": 0,
5665
+ "maximum": 255,
5666
+ "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 such as full refunds)."
5667
+ }
5668
+ },
5669
+ "required": [
5670
+ "identifier"
5671
+ ],
5672
+ "additionalProperties": false,
5673
+ "description": "Reference to the Progress object in the Guard table (must be Address type)."
5674
+ },
5675
+ "historyIdx": {
5676
+ "description": "GuardNode that returns the history index (U64 type). Typically an 'identifier' node referencing a U64 value from the Guard table.",
5677
+ "allOf": [
5678
+ {
5679
+ "$ref": "#/definitions/__schema1"
5680
+ }
5681
+ ],
5682
+ "$ref": "#/definitions/__schema0"
5683
+ },
5684
+ "sessionIdx": {
5685
+ "description": "GuardNode that returns the session index (U64 type) within the history entry. Typically an 'identifier' node referencing a U64 value from the Guard table.",
5686
+ "allOf": [
5687
+ {
5688
+ "$ref": "#/definitions/__schema1"
5689
+ }
5690
+ ],
5691
+ "$ref": "#/definitions/__schema0"
5692
+ },
5693
+ "forwardIdx": {
5694
+ "description": "GuardNode that returns the forward operation index (U64 type) within the session. Typically an 'identifier' node referencing a U64 value from the Guard table.",
5695
+ "allOf": [
5696
+ {
5697
+ "$ref": "#/definitions/__schema1"
5698
+ }
5699
+ ],
5700
+ "$ref": "#/definitions/__schema0"
5701
+ },
5702
+ "identifier": {
5703
+ "description": "GuardNode that returns the submission identifier (U8 type) — which retained submission of the forward to read. Typically an 'identifier' node referencing a U8 value from the Guard table.",
5704
+ "allOf": [
5705
+ {
5706
+ "$ref": "#/definitions/__schema1"
5707
+ }
5708
+ ],
5709
+ "$ref": "#/definitions/__schema0"
5710
+ }
5711
+ },
5712
+ "required": [
5713
+ "type",
5714
+ "object",
5715
+ "historyIdx",
5716
+ "sessionIdx",
5717
+ "forwardIdx",
5718
+ "identifier"
5719
+ ],
5720
+ "additionalProperties": false,
5721
+ "description": "Returns VecU8 (the ONLY history query that does not return U64). Value of the specified retained submission of a HISTORY record (query 1281) — the history-side counterpart of the ACTIVE-SESSION-ONLY 1268 read, which goes blind once the session migrates into history. Use 1274/1275 to discover the history/session/forward indexes first. Throws error when the record carries no submission for the identifier (Guard validation fails)."
5722
+ },
5385
5723
  {
5386
5724
  "type": "object",
5387
5725
  "properties": {
@@ -510,6 +510,10 @@
510
510
  "description": "Node pair in Machine object"
511
511
  },
512
512
  "description": "Node pair list"
513
+ },
514
+ "optional": {
515
+ "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).",
516
+ "type": "boolean"
513
517
  }
514
518
  },
515
519
  "required": [
@@ -697,6 +701,10 @@
697
701
  "description": "Node pair in Machine object"
698
702
  },
699
703
  "description": "Node pair list"
704
+ },
705
+ "optional": {
706
+ "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).",
707
+ "type": "boolean"
700
708
  }
701
709
  },
702
710
  "required": [
@@ -1072,8 +1080,16 @@
1072
1080
  "type": "boolean"
1073
1081
  },
1074
1082
  "owner_receive": {
1075
- "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.\"\n Example: receive: 'recently'\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.",
1083
+ "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.",
1076
1084
  "anyOf": [
1085
+ {
1086
+ "type": "string",
1087
+ "const": "recently"
1088
+ },
1089
+ {
1090
+ "type": "string",
1091
+ "pattern": "^0x[0-9a-fA-F]{8,}$"
1092
+ },
1077
1093
  {
1078
1094
  "minItems": 1,
1079
1095
  "type": "array",
@@ -1183,10 +1199,6 @@
1183
1199
  ],
1184
1200
  "additionalProperties": false,
1185
1201
  "description": "Received record of Coin objects"
1186
- },
1187
- {
1188
- "type": "string",
1189
- "const": "recently"
1190
1202
  }
1191
1203
  ]
1192
1204
  },