@wowok/agent-mcp 3.2.4 → 3.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/dist/chain-semantics/field-capability.js +1 -1
  2. package/dist/chain-semantics/freeze-map.js +1 -1
  3. package/dist/chain-semantics/object-graph.js +1 -1
  4. package/dist/communication/wts-attestation.js +1 -1
  5. package/dist/composition/audit.js +1 -1
  6. package/dist/composition/blueprint-view.d.ts +64 -0
  7. package/dist/composition/blueprint-view.js +1 -0
  8. package/dist/composition/compile.d.ts +3 -2
  9. package/dist/composition/compile.js +1 -1
  10. package/dist/composition/inflight.d.ts +17 -0
  11. package/dist/composition/inflight.js +1 -0
  12. package/dist/config/config-audit.spec.js +1 -1
  13. package/dist/customer/account-events.js +1 -1
  14. package/dist/customer/order-monitor.js +1 -1
  15. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  16. package/dist/evaluation/engine.js +1 -1
  17. package/dist/experience/realtime-feedback.js +1 -1
  18. package/dist/extensions/constraint-registry.d.ts +6 -1
  19. package/dist/extensions/constraint-registry.js +1 -1
  20. package/dist/extensions/index.d.ts +1 -1
  21. package/dist/extensions/index.js +1 -1
  22. package/dist/extensions/industry-pack.d.ts +6 -0
  23. package/dist/extensions/industry-pack.js +1 -1
  24. package/dist/extensions/mode-evaluator.d.ts +3 -2
  25. package/dist/extensions/mode-evaluator.js +1 -1
  26. package/dist/extensions/modes.js +1 -1
  27. package/dist/extensions/registry.d.ts +1 -2
  28. package/dist/extensions/registry.js +1 -1
  29. package/dist/graph/onchain/analyze.js +1 -1
  30. package/dist/graph/onchain/analyze.spec.js +1 -1
  31. package/dist/graph/onchain/anti-cheat.d.ts +32 -2
  32. package/dist/graph/onchain/anti-cheat.js +1 -1
  33. package/dist/graph/onchain/anti-cheat.spec.js +1 -1
  34. package/dist/graph/onchain/expand.js +1 -1
  35. package/dist/graph/onchain/exposure.js +1 -1
  36. package/dist/graph/onchain/extract.js +1 -1
  37. package/dist/graph/onchain/facts.js +1 -1
  38. package/dist/graph/onchain/graph-policy.spec.js +1 -1
  39. package/dist/graph/onchain/index.d.ts +2 -2
  40. package/dist/graph/onchain/index.js +1 -1
  41. package/dist/graph/onchain/project-relationship.js +1 -1
  42. package/dist/graph/onchain/table-ledger.spec.js +1 -1
  43. package/dist/graph/onchain/types.d.ts +3 -0
  44. package/dist/harness/recover.js +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/knowledge/arbitration-venue-order.d.ts +25 -0
  47. package/dist/knowledge/arbitration-venue-order.js +1 -0
  48. package/dist/knowledge/audit-rules.d.ts +12 -0
  49. package/dist/knowledge/audit-rules.js +1 -1
  50. package/dist/knowledge/baselines/risk-baselines.spec.js +1 -1
  51. package/dist/knowledge/baselines/rules/allocation.json +5 -5
  52. package/dist/knowledge/baselines/rules/arb.json +1 -1
  53. package/dist/knowledge/baselines/rules/graph.json +81 -0
  54. package/dist/knowledge/baselines/rules/guard.json +9 -9
  55. package/dist/knowledge/baselines/rules/machine.json +5 -5
  56. package/dist/knowledge/baselines/rules/order.json +1 -1
  57. package/dist/knowledge/baselines/rules/plan.json +80 -2
  58. package/dist/knowledge/builtin-templates.d.ts +18 -2
  59. package/dist/knowledge/builtin-templates.js +1 -1
  60. package/dist/knowledge/discount-threshold.js +1 -1
  61. package/dist/knowledge/entity-recipient-guard.js +1 -1
  62. package/dist/knowledge/event-semantics.js +1 -1
  63. package/dist/knowledge/getting-started.js +1 -1
  64. package/dist/knowledge/guard-bindings.js +1 -1
  65. package/dist/knowledge/guard-design-patterns.js +1 -1
  66. package/dist/knowledge/guard-field-cognition.js +1 -1
  67. package/dist/knowledge/guard-ledger.js +1 -1
  68. package/dist/knowledge/guard-lint.d.ts +1 -0
  69. package/dist/knowledge/guard-lint.js +1 -1
  70. package/dist/knowledge/guard-node-gates.d.ts +4 -0
  71. package/dist/knowledge/guard-node-gates.js +1 -0
  72. package/dist/knowledge/guard-puzzle.js +1 -1
  73. package/dist/knowledge/guard-risk.js +1 -1
  74. package/dist/knowledge/guard-submission-prompt.d.ts +1 -0
  75. package/dist/knowledge/guard-submission-prompt.js +1 -1
  76. package/dist/knowledge/guard-templates.d.ts +2 -1
  77. package/dist/knowledge/guard-templates.js +1 -1
  78. package/dist/knowledge/guard-translation.js +1 -1
  79. package/dist/knowledge/index.d.ts +2 -2
  80. package/dist/knowledge/index.js +1 -1
  81. package/dist/knowledge/industry-generalizer.js +1 -1
  82. package/dist/knowledge/industry-registry.js +1 -1
  83. package/dist/knowledge/jsonrpc-enum.js +1 -1
  84. package/dist/knowledge/machine-topology.d.ts +6 -0
  85. package/dist/knowledge/machine-topology.js +1 -1
  86. package/dist/knowledge/order-ledger.js +1 -1
  87. package/dist/knowledge/reputation-rules.d.ts +3 -9
  88. package/dist/knowledge/reputation-rules.js +1 -1
  89. package/dist/knowledge/safety-rules.d.ts +10 -1
  90. package/dist/knowledge/safety-rules.js +1 -1
  91. package/dist/knowledge/scenario-modes.d.ts +2 -4
  92. package/dist/knowledge/scenario-modes.js +1 -1
  93. package/dist/knowledge/service-ledger.js +1 -1
  94. package/dist/knowledge/service-templates.js +1 -1
  95. package/dist/knowledge/settlement-semantics.d.ts +1 -0
  96. package/dist/knowledge/settlement-semantics.js +1 -0
  97. package/dist/knowledge/template-loader.d.ts +29 -2
  98. package/dist/knowledge/template-loader.js +1 -1
  99. package/dist/knowledge/template-registry.js +1 -1
  100. package/dist/knowledge/template-scanner.d.ts +14 -0
  101. package/dist/knowledge/template-scanner.js +1 -1
  102. package/dist/knowledge/template-validation.d.ts +2 -0
  103. package/dist/knowledge/template-validation.js +1 -0
  104. package/dist/knowledge/tools-reference.js +1 -1
  105. package/dist/knowledge/workflow-guidance.d.ts +1 -0
  106. package/dist/knowledge/workflow-guidance.js +1 -1
  107. package/dist/monitor/MonitorLoop.js +1 -1
  108. package/dist/participation/allocation-advice.js +1 -1
  109. package/dist/participation/customer-interest.js +1 -1
  110. package/dist/participation/radar-core.d.ts +6 -1
  111. package/dist/participation/radar-core.js +1 -1
  112. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  113. package/dist/playbooks/service-build/game-theory.d.ts +2 -2
  114. package/dist/playbooks/service-build/game-theory.js +1 -1
  115. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  116. package/dist/playbooks/service-build/merchant-guide.d.ts +79 -13
  117. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  118. package/dist/playbooks/service-build/migration-planner.d.ts +7 -0
  119. package/dist/playbooks/service-build/migration-planner.js +1 -1
  120. package/dist/playbooks/service-build/mode-actions.js +1 -1
  121. package/dist/playbooks/service-build/object-panorama.js +1 -1
  122. package/dist/playbooks/service-build/participation-radar.js +1 -1
  123. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  124. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  125. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  126. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.d.ts +1 -0
  127. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -0
  128. package/dist/playbooks/service-build/reverse-mapping.d.ts +24 -0
  129. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  130. package/dist/playbooks/service-build/risk-aggregator.d.ts +1 -1
  131. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  132. package/dist/playbooks/service-build/service-panorama.js +1 -1
  133. package/dist/playbooks/service-build/service-quote.js +1 -1
  134. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  135. package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
  136. package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
  137. package/dist/relationship/derivation.d.ts +1 -0
  138. package/dist/review/index.js +1 -1
  139. package/dist/runtime/instance-registry.d.ts +8 -0
  140. package/dist/runtime/instance-registry.js +1 -0
  141. package/dist/safety/confirm-gate.js +1 -1
  142. package/dist/schema/benchmark-migration/index.d.ts +14 -0
  143. package/dist/schema/benchmark-migration/index.js +1 -1
  144. package/dist/schema/call/arbitration.js +1 -1
  145. package/dist/schema/call/base.d.ts +109 -0
  146. package/dist/schema/call/base.js +1 -1
  147. package/dist/schema/call/bridge.d.ts +14 -0
  148. package/dist/schema/call/contact.js +1 -1
  149. package/dist/schema/call/error-codes.d.ts +1 -1
  150. package/dist/schema/call/error-codes.js +1 -1
  151. package/dist/schema/call/guard.d.ts +7 -0
  152. package/dist/schema/call/guard.js +1 -1
  153. package/dist/schema/call/handler.js +1 -1
  154. package/dist/schema/call/machine.d.ts +7 -0
  155. package/dist/schema/call/machine.js +1 -1
  156. package/dist/schema/call/payment.js +1 -1
  157. package/dist/schema/call/permission-handler.js +1 -1
  158. package/dist/schema/call/progress.d.ts +46 -0
  159. package/dist/schema/call/progress.js +1 -1
  160. package/dist/schema/call/semantic.js +1 -1
  161. package/dist/schema/call/service.d.ts +22 -8
  162. package/dist/schema/call/service.js +1 -1
  163. package/dist/schema/common/index.js +1 -1
  164. package/dist/schema/goal/index.d.ts +11 -0
  165. package/dist/schema/goal/planning.d.ts +32 -1
  166. package/dist/schema/goal/planning.js +1 -1
  167. package/dist/schema/industry-pack/index.d.ts +40 -0
  168. package/dist/schema/industry-pack/index.js +1 -1
  169. package/dist/schema/keeper/index.d.ts +13 -0
  170. package/dist/schema/local/index.d.ts +75 -0
  171. package/dist/schema/local/index.js +1 -1
  172. package/dist/schema/messenger/index.d.ts +17 -0
  173. package/dist/schema/messenger/index.js +1 -1
  174. package/dist/schema/operations.d.ts +46 -2
  175. package/dist/schema/operations.js +1 -1
  176. package/dist/schema/query/bi.d.ts +64 -0
  177. package/dist/schema/query/bi.js +1 -1
  178. package/dist/schema/query/index.d.ts +94 -0
  179. package/dist/schema/query/index.js +1 -1
  180. package/dist/schema/schema-version.d.ts +1 -1
  181. package/dist/schema/schema-version.js +1 -1
  182. package/dist/schema/utils/permission-machine-check.js +1 -1
  183. package/dist/schema/workspace/index.d.ts +1 -1
  184. package/dist/schema-query-impl/index.js +1 -1
  185. package/dist/schemas/account_operation.output.json +45 -0
  186. package/dist/schemas/benchmark_migration_operation.output.json +24 -4
  187. package/dist/schemas/benchmark_migration_operation.schema.json +70 -0
  188. package/dist/schemas/bridge_operation.output.json +45 -0
  189. package/dist/schemas/goal_operation.schema.json +79 -1
  190. package/dist/schemas/guard2file.output.json +6 -1
  191. package/dist/schemas/guard2file.schema.json +9 -0
  192. package/dist/schemas/index.json +1 -1
  193. package/dist/schemas/industry_pack_operation.output.json +91 -0
  194. package/dist/schemas/industry_pack_operation.schema.json +19 -1
  195. package/dist/schemas/keeper_operation.output.json +44 -0
  196. package/dist/schemas/local_cache_operation.output.json +45 -0
  197. package/dist/schemas/local_history_operation.output.json +45 -0
  198. package/dist/schemas/local_info_operation.output.json +45 -0
  199. package/dist/schemas/local_mark_operation.output.json +45 -0
  200. package/dist/schemas/machineNode2file.output.json +6 -1
  201. package/dist/schemas/machineNode2file.schema.json +9 -0
  202. package/dist/schemas/messenger_operation.output.json +52 -0
  203. package/dist/schemas/monitor_events.output.json +44 -0
  204. package/dist/schemas/monitor_subscription.output.json +44 -0
  205. package/dist/schemas/onchain_events.output.json +44 -0
  206. package/dist/schemas/onchain_operations.output.json +133 -0
  207. package/dist/schemas/onchain_operations.schema.json +110 -18
  208. package/dist/schemas/onchain_operations_arbitration.schema.json +2 -1
  209. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  210. package/dist/schemas/onchain_operations_guard.schema.json +2 -2
  211. package/dist/schemas/onchain_operations_machine.schema.json +2 -2
  212. package/dist/schemas/onchain_operations_payment.schema.json +1 -1
  213. package/dist/schemas/onchain_operations_progress.schema.json +57 -0
  214. package/dist/schemas/onchain_operations_service.schema.json +44 -10
  215. package/dist/schemas/onchain_table_data.output.json +81 -13
  216. package/dist/schemas/onchain_table_data.schema.json +21 -21
  217. package/dist/schemas/query_toolkit.output.json +218 -9
  218. package/dist/schemas/query_toolkit.schema.json +50 -26
  219. package/dist/schemas/wowok_buildin_info.output.json +80 -1
  220. package/dist/schemas/wowok_buildin_info.schema.json +1 -1
  221. package/dist/tools/handlers/benchmark-migration.d.ts +3 -13
  222. package/dist/tools/handlers/benchmark-migration.js +1 -1
  223. package/dist/tools/handlers/config.js +1 -1
  224. package/dist/tools/handlers/file-export.js +1 -1
  225. package/dist/tools/handlers/industry-pack.js +1 -1
  226. package/dist/tools/handlers/messenger.js +1 -1
  227. package/dist/tools/handlers/onchain.js +1 -1
  228. package/dist/tools/handlers/query.js +1 -1
  229. package/dist/tools/handlers/review-chain.d.ts +22 -0
  230. package/dist/tools/handlers/review-chain.js +1 -0
  231. package/dist/tools/registry/agent.js +1 -1
  232. package/dist/tools/registry/business.js +1 -1
  233. package/dist/tools/registry/config.js +1 -1
  234. package/dist/tools/registry/evaluation.js +1 -1
  235. package/dist/tools/registry/files.js +1 -1
  236. package/dist/tools/registry/identity.js +1 -1
  237. package/dist/tools/registry/local.js +1 -1
  238. package/dist/tools/registry/messenger.js +1 -1
  239. package/dist/tools/registry/monitor.js +1 -1
  240. package/dist/tools/registry/onchain.js +1 -1
  241. package/dist/tools/registry/query.js +1 -1
  242. package/dist/tools/rules-hook.js +1 -1
  243. package/dist/tools/runtime-health.d.ts +10 -0
  244. package/dist/tools/runtime-health.js +1 -0
  245. package/dist/tools/upgrade-check.d.ts +10 -1
  246. package/dist/tools/upgrade-check.js +1 -1
  247. package/dist/tools/wip-deploy-assist.js +1 -1
  248. package/dist/tools/wrap.d.ts +3 -0
  249. package/dist/tools/wrap.js +1 -1
  250. package/package.json +2 -2
  251. package/dist/playbooks/service-build/semantic-graph.d.ts +0 -99
  252. package/dist/playbooks/service-build/semantic-graph.js +0 -1
@@ -1468,6 +1468,50 @@
1468
1468
  "current_node"
1469
1469
  ],
1470
1470
  "additionalProperties": false
1471
+ },
1472
+ "review_steps": {
1473
+ "description": "Composite review submission report: the structured-reputation repository write (+ optional reward claim) chained after a successful progress forward via the data.review block, each reusing the forward's passport submission. Fail-isolated — a failed step never rolled back the forward. Relay failed steps to the user with the retry path (dedicated repository/reward tools).",
1474
+ "type": "array",
1475
+ "items": {
1476
+ "type": "object",
1477
+ "properties": {
1478
+ "step": {
1479
+ "type": "string",
1480
+ "enum": [
1481
+ "repository_write",
1482
+ "reward_claim"
1483
+ ],
1484
+ "description": "Which chained review step this report describes. repository_write = structured reputation record (rating/tags) into the caller-named Repository; reward_claim = incentive claim on the caller-named Reward."
1485
+ },
1486
+ "status": {
1487
+ "type": "string",
1488
+ "enum": [
1489
+ "success",
1490
+ "failed"
1491
+ ],
1492
+ "description": "Step outcome. Steps are fail-isolated: a failed step never affects the forward or the other step (on-chain has no rollback)."
1493
+ },
1494
+ "detail": {
1495
+ "type": "string",
1496
+ "description": "On success: what was written/claimed (payload summary). On failure: what the step attempted."
1497
+ },
1498
+ "digest": {
1499
+ "description": "Transaction digest when the step succeeded.",
1500
+ "type": "string"
1501
+ },
1502
+ "error": {
1503
+ "description": "Error message when the step failed. Retry via the dedicated repository/reward tools with the same submission values.",
1504
+ "type": "string"
1505
+ }
1506
+ },
1507
+ "required": [
1508
+ "step",
1509
+ "status",
1510
+ "detail"
1511
+ ],
1512
+ "additionalProperties": false,
1513
+ "description": "One fail-isolated chained step of the progress composite review submission (REVIEW component, data.review block)."
1514
+ }
1471
1515
  }
1472
1516
  },
1473
1517
  "required": [
@@ -3122,6 +3122,50 @@
3122
3122
  "current_node"
3123
3123
  ],
3124
3124
  "additionalProperties": false
3125
+ },
3126
+ "review_steps": {
3127
+ "description": "Composite review submission report: the structured-reputation repository write (+ optional reward claim) chained after a successful progress forward via the data.review block, each reusing the forward's passport submission. Fail-isolated — a failed step never rolled back the forward. Relay failed steps to the user with the retry path (dedicated repository/reward tools).",
3128
+ "type": "array",
3129
+ "items": {
3130
+ "type": "object",
3131
+ "properties": {
3132
+ "step": {
3133
+ "type": "string",
3134
+ "enum": [
3135
+ "repository_write",
3136
+ "reward_claim"
3137
+ ],
3138
+ "description": "Which chained review step this report describes. repository_write = structured reputation record (rating/tags) into the caller-named Repository; reward_claim = incentive claim on the caller-named Reward."
3139
+ },
3140
+ "status": {
3141
+ "type": "string",
3142
+ "enum": [
3143
+ "success",
3144
+ "failed"
3145
+ ],
3146
+ "description": "Step outcome. Steps are fail-isolated: a failed step never affects the forward or the other step (on-chain has no rollback)."
3147
+ },
3148
+ "detail": {
3149
+ "type": "string",
3150
+ "description": "On success: what was written/claimed (payload summary). On failure: what the step attempted."
3151
+ },
3152
+ "digest": {
3153
+ "description": "Transaction digest when the step succeeded.",
3154
+ "type": "string"
3155
+ },
3156
+ "error": {
3157
+ "description": "Error message when the step failed. Retry via the dedicated repository/reward tools with the same submission values.",
3158
+ "type": "string"
3159
+ }
3160
+ },
3161
+ "required": [
3162
+ "step",
3163
+ "status",
3164
+ "detail"
3165
+ ],
3166
+ "additionalProperties": false,
3167
+ "description": "One fail-isolated chained step of the progress composite review submission (REVIEW component, data.review block)."
3168
+ }
3125
3169
  }
3126
3170
  },
3127
3171
  "required": [
@@ -3592,6 +3592,50 @@
3592
3592
  "current_node"
3593
3593
  ],
3594
3594
  "additionalProperties": false
3595
+ },
3596
+ "review_steps": {
3597
+ "description": "Composite review submission report: the structured-reputation repository write (+ optional reward claim) chained after a successful progress forward via the data.review block, each reusing the forward's passport submission. Fail-isolated — a failed step never rolled back the forward. Relay failed steps to the user with the retry path (dedicated repository/reward tools).",
3598
+ "type": "array",
3599
+ "items": {
3600
+ "type": "object",
3601
+ "properties": {
3602
+ "step": {
3603
+ "type": "string",
3604
+ "enum": [
3605
+ "repository_write",
3606
+ "reward_claim"
3607
+ ],
3608
+ "description": "Which chained review step this report describes. repository_write = structured reputation record (rating/tags) into the caller-named Repository; reward_claim = incentive claim on the caller-named Reward."
3609
+ },
3610
+ "status": {
3611
+ "type": "string",
3612
+ "enum": [
3613
+ "success",
3614
+ "failed"
3615
+ ],
3616
+ "description": "Step outcome. Steps are fail-isolated: a failed step never affects the forward or the other step (on-chain has no rollback)."
3617
+ },
3618
+ "detail": {
3619
+ "type": "string",
3620
+ "description": "On success: what was written/claimed (payload summary). On failure: what the step attempted."
3621
+ },
3622
+ "digest": {
3623
+ "description": "Transaction digest when the step succeeded.",
3624
+ "type": "string"
3625
+ },
3626
+ "error": {
3627
+ "description": "Error message when the step failed. Retry via the dedicated repository/reward tools with the same submission values.",
3628
+ "type": "string"
3629
+ }
3630
+ },
3631
+ "required": [
3632
+ "step",
3633
+ "status",
3634
+ "detail"
3635
+ ],
3636
+ "additionalProperties": false,
3637
+ "description": "One fail-isolated chained step of the progress composite review submission (REVIEW component, data.review block)."
3638
+ }
3595
3639
  }
3596
3640
  },
3597
3641
  "required": [
@@ -5577,6 +5621,50 @@
5577
5621
  "current_node"
5578
5622
  ],
5579
5623
  "additionalProperties": false
5624
+ },
5625
+ "review_steps": {
5626
+ "description": "Composite review submission report: the structured-reputation repository write (+ optional reward claim) chained after a successful progress forward via the data.review block, each reusing the forward's passport submission. Fail-isolated — a failed step never rolled back the forward. Relay failed steps to the user with the retry path (dedicated repository/reward tools).",
5627
+ "type": "array",
5628
+ "items": {
5629
+ "type": "object",
5630
+ "properties": {
5631
+ "step": {
5632
+ "type": "string",
5633
+ "enum": [
5634
+ "repository_write",
5635
+ "reward_claim"
5636
+ ],
5637
+ "description": "Which chained review step this report describes. repository_write = structured reputation record (rating/tags) into the caller-named Repository; reward_claim = incentive claim on the caller-named Reward."
5638
+ },
5639
+ "status": {
5640
+ "type": "string",
5641
+ "enum": [
5642
+ "success",
5643
+ "failed"
5644
+ ],
5645
+ "description": "Step outcome. Steps are fail-isolated: a failed step never affects the forward or the other step (on-chain has no rollback)."
5646
+ },
5647
+ "detail": {
5648
+ "type": "string",
5649
+ "description": "On success: what was written/claimed (payload summary). On failure: what the step attempted."
5650
+ },
5651
+ "digest": {
5652
+ "description": "Transaction digest when the step succeeded.",
5653
+ "type": "string"
5654
+ },
5655
+ "error": {
5656
+ "description": "Error message when the step failed. Retry via the dedicated repository/reward tools with the same submission values.",
5657
+ "type": "string"
5658
+ }
5659
+ },
5660
+ "required": [
5661
+ "step",
5662
+ "status",
5663
+ "detail"
5664
+ ],
5665
+ "additionalProperties": false,
5666
+ "description": "One fail-isolated chained step of the progress composite review submission (REVIEW component, data.review block)."
5667
+ }
5580
5668
  }
5581
5669
  },
5582
5670
  "required": [
@@ -5685,6 +5773,7 @@
5685
5773
  "wip_verification_failed",
5686
5774
  "wip_storage_unavailable",
5687
5775
  "submission_unknown",
5776
+ "move_abort_unmapped",
5688
5777
  "unknown"
5689
5778
  ]
5690
5779
  },
@@ -6973,6 +7062,50 @@
6973
7062
  "current_node"
6974
7063
  ],
6975
7064
  "additionalProperties": false
7065
+ },
7066
+ "review_steps": {
7067
+ "description": "Composite review submission report: the structured-reputation repository write (+ optional reward claim) chained after a successful progress forward via the data.review block, each reusing the forward's passport submission. Fail-isolated — a failed step never rolled back the forward. Relay failed steps to the user with the retry path (dedicated repository/reward tools).",
7068
+ "type": "array",
7069
+ "items": {
7070
+ "type": "object",
7071
+ "properties": {
7072
+ "step": {
7073
+ "type": "string",
7074
+ "enum": [
7075
+ "repository_write",
7076
+ "reward_claim"
7077
+ ],
7078
+ "description": "Which chained review step this report describes. repository_write = structured reputation record (rating/tags) into the caller-named Repository; reward_claim = incentive claim on the caller-named Reward."
7079
+ },
7080
+ "status": {
7081
+ "type": "string",
7082
+ "enum": [
7083
+ "success",
7084
+ "failed"
7085
+ ],
7086
+ "description": "Step outcome. Steps are fail-isolated: a failed step never affects the forward or the other step (on-chain has no rollback)."
7087
+ },
7088
+ "detail": {
7089
+ "type": "string",
7090
+ "description": "On success: what was written/claimed (payload summary). On failure: what the step attempted."
7091
+ },
7092
+ "digest": {
7093
+ "description": "Transaction digest when the step succeeded.",
7094
+ "type": "string"
7095
+ },
7096
+ "error": {
7097
+ "description": "Error message when the step failed. Retry via the dedicated repository/reward tools with the same submission values.",
7098
+ "type": "string"
7099
+ }
7100
+ },
7101
+ "required": [
7102
+ "step",
7103
+ "status",
7104
+ "detail"
7105
+ ],
7106
+ "additionalProperties": false,
7107
+ "description": "One fail-isolated chained step of the progress composite review submission (REVIEW component, data.review block)."
7108
+ }
6976
7109
  }
6977
7110
  },
6978
7111
  "required": [
@@ -97,7 +97,7 @@
97
97
  "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 name, tags, description, token type for payments, and Permission-based access control. The object format is used when you need both token specification AND permission management."
98
98
  },
99
99
  "order_new": {
100
- "description": "Create new order.",
100
+ "description": "Create new order. RETRY DISCIPLINE: the order creation is atomic on-chain but NOT in observability — a transport drop after submit leaves the commit state UNKNOWN, and a blind resubmit creates a second order with a second full escrow (live mainnet incident). On any failure/timeout, verify whether an order with this exact signature (service + buyer + items) already landed — via the in-flight marker in the failure envelope, the sender's recent on-chain objects, or onchain_events — and adopt it if present; resubmit only if confirmed absent.",
101
101
  "type": "object",
102
102
  "properties": {
103
103
  "buy": {
@@ -139,6 +139,7 @@
139
139
  "description": "List of products or services to purchase"
140
140
  },
141
141
  "total_pay": {
142
+ "description": "Actual payment amount. FORMAT: {balance: <amount_in_smallest_unit>} or {coin: <coin_object_id>}. The token type and precision are determined by the Service object's type_parameter (the generic type set when the Service was created). For WOW (9 decimals): {balance: 1000000000} = 1 WOW. OPTIONAL without a discount (M-K17): omit it and the handler derives the EXACT total Σ(sale price × quantity) from the Service's on-chain sales list and discloses the derived value — no transcription, no drift. REQUIRED when 'discount' is set (the discounted total depends on the coupon's live value: run query_toolkit query_type='service_quote' and pass total_pay.balance = the quoted final_total). An explicit value is always honored as-is. AMOUNT GATE (M-K11-a): a total that EXACTLY equals Σ published sale price × quantity (catalog-priced buy, in the Service's own payment coin — WOW or bridged USDT/USDC/ETH/BTC) bypasses the harness pre-sign amount gate; any other amount above the threshold is blocked until WOWOK_AMOUNT_THRESHOLD is raised after explicit user confirmation.",
142
143
  "anyOf": [
143
144
  {
144
145
  "type": "object",
@@ -174,8 +175,7 @@
174
175
  ],
175
176
  "additionalProperties": false
176
177
  }
177
- ],
178
- "description": "Actual payment amount. FORMAT: {balance: <amount_in_smallest_unit>} or {coin: <coin_object_id>}. The token type and precision are determined by the Service object's type_parameter (the generic type set when the Service was created). For WOW (9 decimals): {balance: 1000000000} = 1 WOW. "
178
+ ]
179
179
  },
180
180
  "discount": {
181
181
  "description": "Discount object ID or name",
@@ -191,8 +191,7 @@
191
191
  }
192
192
  },
193
193
  "required": [
194
- "items",
195
- "total_pay"
194
+ "items"
196
195
  ],
197
196
  "additionalProperties": false
198
197
  },
@@ -813,7 +812,7 @@
813
812
  ]
814
813
  },
815
814
  "arbitrations": {
816
- "description": "Service Arbitration object list. FORMAT: same as repositories — use the `objects` field name inside the operation data. Example: {arbitrations: [{name: 'my_arb_1'}, {name: 'my_arb_2'}]}. Each item is a NameOrAddress (object ID or local mark name). ⚠️ PERMISSION RULE (contract-enforced): every Arbitration bound here MUST use a Permission object DIFFERENT from THIS Service's permission — binding an Arbitration that shares the Service's Permission aborts with E_ARBITRATION_PERMISSION_CONFLICT (error 33). Create a dedicated Permission for each Arbitration BEFORE binding. DESIGN RATIONALE (confirmed intentional): dispute resolution requires NEUTRALITY — an Arbitration controlled by the same Permission admins as the Service it judges would be a conflict of interest. ONLY Arbitration has this check: Reward and Treasury objects MAY share the Service's Permission (they are the provider's own tools).",
815
+ "description": "Service Arbitration object list. FORMAT: same as repositories — use the `objects` field name inside the operation data. Example: {arbitrations: {op: 'set', objects: [{name: 'my_arb_1'}, {name: 'my_arb_2'}]}}. NOTE: op:'add' is disabled on this surface (its success response can arrive unparseable and reads like a failure); ALWAYS pass the FULL list with op:'set'. Each item is a NameOrAddress (object ID or local mark name). ⚠️ PERMISSION RULE (contract-enforced): every Arbitration bound here MUST use a Permission object DIFFERENT from THIS Service's permission — binding an Arbitration that shares the Service's Permission aborts with E_ARBITRATION_PERMISSION_CONFLICT (error 33). Create a dedicated Permission for each Arbitration BEFORE binding. DESIGN RATIONALE (confirmed intentional): dispute resolution requires NEUTRALITY — an Arbitration controlled by the same Permission admins as the Service it judges would be a conflict of interest. ONLY Arbitration has this check: Reward and Treasury objects MAY share the Service's Permission (they are the provider's own tools).",
817
816
  "anyOf": [
818
817
  {
819
818
  "type": "object",
@@ -925,7 +924,7 @@
925
924
  "description": "Discount magnitude, meaning depends on discount_type. RATES (0): per-10000 off rate — 10 = 0.1% off, 1000 = 10% off, 10000 = 100% off; values above 10000 are rejected. FIXED (1): fixed deduction from the order total in the Service token's smallest units (e.g. 1000000000 = 1 WOW at 9 decimals)."
926
925
  },
927
926
  "benchmark": {
928
- "description": "Minimum order total (in the Service token's smallest units) for the discount to apply — when set, the discount is applied only if the PRE-discount order total is GREATER THAN OR EQUAL TO this value. ✅ OMITTING this field (or passing null, or 0) means NO threshold — the discount applies UNCONDITIONALLY, and that is the common, correct case. This is the on-chain behaviour: benchmark_met = if (option::is_some(&discount.benchmark)) { total >= benchmark } else { true } (wow-framework sources/w/service.move:274-278, inside the discount-application step). ⚠️ SHARP EDGE when you DO set a threshold: a below-threshold order is NOT rejected — it completes at FULL price and the one-time coupon is still consumed and destroyed, so the buyer pays full price AND loses the coupon. Keep thresholds low enough that your typical basket clears them. If the order total is below the discounted price the payment aborts — pay the list price; the excess is returned as a new Coin.",
927
+ "description": "Minimum order total (in the Service token's smallest units) for the discount to apply — when set, the discount is applied only if the PRE-discount order total is GREATER THAN OR EQUAL TO this value. ✅ OMITTING this field (or passing null, or 0) means NO threshold — the discount applies UNCONDITIONALLY, and that is the common, correct case. This is the on-chain behaviour: benchmark_met = if (option::is_some(&discount.benchmark)) { total >= benchmark } else { true } (wow-framework sources/w/service.move:274-278, inside the discount-application step). ⚠️ SHARP EDGE when you DO set a threshold: an order below the threshold CANNOT use the coupon — attaching it at buy aborts (error 38: the transaction rolls back, nothing is paid, and the coupon is preserved); dropping it means the buyer pays FULL price and keeps the coupon for a future order. Keep thresholds low enough that your typical basket clears them. If the order total is below the discounted price the payment aborts — pay the list price; the excess is returned as a new Coin.",
929
928
  "anyOf": [
930
929
  {
931
930
  "type": "number"
@@ -1005,6 +1004,41 @@
1005
1004
  "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)."
1006
1005
  }
1007
1006
  },
1007
+ "discount_send": {
1008
+ "description": "Transfer ALREADY-MINTED coupons you own to another address, instead of destroying them (discount_destroy) or minting new ones (discount). This is a pure ownership handover: the on-chain entry points are public funs with NO Service permission requirement — the only preconditions are that the sender owns each coupon and each was minted transferable:true. Typical use: hand out pre-minted campaign coupons, or move coupons between your own accounts.",
1009
+ "type": "object",
1010
+ "properties": {
1011
+ "discounts": {
1012
+ "minItems": 1,
1013
+ "type": "array",
1014
+ "items": {
1015
+ "type": "string",
1016
+ "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)."
1017
+ },
1018
+ "description": "Coupon object IDs or local names to transfer. You MUST own these Discount objects. Each coupon must have been minted with transferable:true — otherwise the chain aborts with E_DISCOUNT_NOT_TRANSFERABLE (semantic code service:10). Coupons stay single-use; the transfer does not change that. Max 1000 coupons per call (SDK limit MAX_DISCOUNT_COUNT_ONCE)."
1019
+ },
1020
+ "recipient": {
1021
+ "type": "object",
1022
+ "properties": {
1023
+ "name_or_address": {
1024
+ "type": "string",
1025
+ "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)."
1026
+ },
1027
+ "local_mark_first": {
1028
+ "description": "Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks",
1029
+ "type": "boolean"
1030
+ }
1031
+ },
1032
+ "additionalProperties": false,
1033
+ "description": "Destination address (or account/local mark resolvable to one). ALL listed coupons are moved to this single address in one call."
1034
+ }
1035
+ },
1036
+ "required": [
1037
+ "discounts",
1038
+ "recipient"
1039
+ ],
1040
+ "additionalProperties": false
1041
+ },
1008
1042
  "customer_required": {
1009
1043
  "description": "Customer required information labels. Such as phone, email, shipping_address, etc. ⚠️ HARD LINKAGE (SDK-enforced): if customer_required is set (non-empty), the Service MUST also bind a Contact via `um` — otherwise the customer's private information cannot be delivered through end-to-end encrypted Messenger (which routes to the Contact bound as um). Set `um` together with customer_required.",
1010
1044
  "type": "array",
@@ -1201,7 +1235,7 @@
1201
1235
  ]
1202
1236
  },
1203
1237
  "order_allocators_append": {
1204
- "description": "Append-only correction window for order_allocators — the ONLY allocator mutation allowed AFTER publish (J1). REQUIREMENTS (chain-enforced, allocation abort code 20 EALLOCATORS_NOT_EXTENSION): the supplied Allocators must be a pure EXTENSION of the current on-chain plan — every existing allocator appears VERBATIM as a prefix (same guard, same sharing, same fix/max), threshold must be UNCHANGED; only description may change freely. New allocators are appended after the prefix. WHY: rewriting an existing allocator or changing the threshold would retroactively alter payout rules for orders already escrowed against the old plan. Clearing the plan (null) is NOT possible here — that would strand in-flight orders. Permission: same index 313 as order_allocators. USE CASE: you forgot one allocator guard (e.g. the refund exit for a review node) and the Service is already published — instead of abandoning the Service, append the missing allocator. ⚠️ Appended allocators are evaluated AFTER the existing ones against the shrinking pool (vector order), so they see the balance left by earlier allocators — design appended waterfall tails accordingly. ⚠️ Once appended, an allocator can NEVER be edited or removed — same permanence as the original plan.",
1238
+ "description": "Append-only correction window for order_allocators — the ONLY allocator mutation allowed AFTER publish (J1). REQUIREMENTS (chain-enforced, allocation abort code 20 EALLOCATORS_NOT_EXTENSION): the supplied Allocators must be a pure EXTENSION of the current on-chain plan — every existing allocator appears VERBATIM as a prefix (same guard, same sharing, same fix/max), threshold must be UNCHANGED; only description may change freely. New allocators are appended after the prefix. WHY: rewriting an existing allocator or changing the threshold would retroactively alter payout rules for orders already escrowed against the old plan. Clearing the plan (null) is NOT possible here — that would strand in-flight orders. Permission: same index 313 as order_allocators. USE CASE: you forgot one allocator guard (e.g. the refund exit for a review node) and the Service is already published — instead of abandoning the Service, append the missing allocator. ⚠️ SCOPE — NEW ORDERS ONLY: each order instantiates its own Allocation from this plan AT BUY TIME, so appending changes the template for FUTURE orders only. Orders already escrowed under the previous plan do NOT gain the appended allocator — their Allocation (and its fund exits) is frozen as originally instantiated; if in-flight orders are already stranded, this append does NOT rescue them. ⚠️ Appended allocators are evaluated AFTER the existing ones against the shrinking pool (vector order), so they see the balance left by earlier allocators — design appended waterfall tails accordingly. ⚠️ Once appended, an allocator can NEVER be edited or removed — same permanence as the original plan.",
1205
1239
  "type": "object",
1206
1240
  "properties": {
1207
1241
  "description": {
@@ -1392,7 +1426,7 @@
1392
1426
  ]
1393
1427
  },
1394
1428
  "compensation_fund_add": {
1395
- "description": "Deposit funds into the Service compensation_fund. Used to pay indemnity when arbitration resolves in customer's favor. FORMAT: {balance: <amount_in_smallest_unit>} — the field name is 'balance' (NOT 'amount'). The token type and precision are determined by the Service object's type_parameter (the generic type set when the Service was created). For WOW (9 decimals): {balance: 1000000000} = 1 WOW. For tokens with different decimals, adjust accordingly (e.g. USDC has 6 decimals, so {balance: 1000000} = 1 USDC). REQUIRES: Permission index 315 (SERVICE_COMPENSATION_FUND_DEPOSIT) must be granted to the calling account first. COMMON MISTAKE: using {amount: ...} or {amount: ..., type: 'WOW'} — these will fail. The correct field is 'balance'.",
1429
+ "description": "Deposit funds into the Service compensation_fund. Used to pay indemnity when arbitration resolves in customer's favor. FORMAT: {balance: <amount_in_smallest_unit>} — the field name is 'balance' (NOT 'amount'). The token type and precision are determined by the Service object's type_parameter (the generic type set when the Service was created). For WOW (9 decimals): {balance: 1000000000} = 1 WOW. For tokens with different decimals, adjust accordingly (e.g. USDC has 6 decimals, so {balance: 1000000} = 1 USDC). REQUIRES: Permission index 315 (SERVICE_COMPENSATION_FUND_DEPOSIT) for NON-ADMIN callers. The Permission owner and admin short-circuit every builtin index check (no grant needed); only non-admin callers must be granted 315 first. COMMON MISTAKE: using {amount: ...} or {amount: ..., type: 'WOW'} — these will fail. The correct field is 'balance'.",
1396
1430
  "anyOf": [
1397
1431
  {
1398
1432
  "type": "object",
@@ -1751,7 +1785,7 @@
1751
1785
  "type": "boolean"
1752
1786
  },
1753
1787
  "publish": {
1754
- "description": "Whether to publish the Service. After publishing, customers can place orders. ⚠️ PRE-PUBLISH EVALUATION (mandatory, stop-node fund-exit coverage): service.allocators MUST cover EVERY stop node of the bound Machine — every node where an order can rest (terminal nodes AND waiting states: review windows, handovers, open disputes) needs BOTH a withdrawal (release) AND a refund allocation rule, and each mapping guard must be satisfiable in BOTH directions. An uncovered stop node strands escrowed funds permanently (order_allocators is L1-immutable). Review-gated release is a TIME VARIANT inside ONE exit guard ('reviewed OR unreviewed after T'), never parallel outgoing edges (race deadlock). See pattern.fund_flow_stop_node_coverage + rules R-M5-03 / R-M5-09. VERIFIED against Move source + SDK (4-level immutability matrix):\n L1 — PERMANENTLY LOCKED after publish (assert!(!bPublished), no pause+lock exception):\n • machine (workflow template)\n • order_allocators (fund distribution rules — full replacement locked; APPEND-ONLY additions remain possible via order_allocators_append, prefix/threshold frozen)\n L2 — TIME-LOCKED after publish (unpublished-state check — requires pause + setting_lock_duration elapsed):\n • arbitrations remove/clear (dispute resolution objects)\n • rewards remove/clear (reward objects)\n • compensation_fund_withdraw (withdraw ALL funds)\n L3 — REMAIN MUTABLE after publish (no SDK check, no Move check):\n • arbitrations add, rewards add (no assert — can add after publish)\n • buy_guard, sales, discount, description, location, pause, repositories,\n • compensation_fund_add, setting_lock_duration_add, customer_required, um (Contact)\nThese 2 L1-LOCKED fields (machine/order_allocators) MUST be set BEFORE publish=true.\narbitrations/rewards can be ADDED after publish but remove/clear requires pause+lock.\n\n⚠️ COMPENSATION_FUND + ARBITRATION LINKAGE:\n At publish time, if compensation_fund > 0, Arbitration MUST be bound:\n if (balance::value(&self.compensation_fund) > 0) {\n assert!(arbitration_count > 0, E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND);\n }\n The MCP handler enforces this as a HARD PRE-CHECK: if publish=true AND compensation_fund_add is set in the same call AND arbitrations is empty, the call is REJECTED before submission. If compensation_fund was deposited in a prior call, a SOFT WARNING is issued.\n\nSCHEMA-03 / P0-01 fix — DEPLOYMENT WORKFLOW (two-phase, avoids circular dependency):\n Phase 1 — CREATE (no publish): object={name:'my-service', type_parameter, permission} + machine + order_allocators + arbitrations.\n NOTE: buy_guard can use a LocalMark NAME (not address) to break the Guard→Service circular dependency.\n The name is resolved to an address at transaction build time.\n Phase 2 — PUBLISH: object='my-service' (string ref) + publish=true.\n All L1-LOCKED fields must be set in Phase 1; Phase 2 only flips the publish flag.\n Post-publish updates: buy_guard, sales, description, repositories (add), rewards (add), arbitrations (add), etc.",
1788
+ "description": "Whether to publish the Service. After publishing, customers can place orders. ⚠️ PRE-PUBLISH EVALUATION (mandatory, stop-node fund-exit coverage): service.allocators MUST cover EVERY stop node of the bound Machine — every node where an order can rest (terminal nodes AND waiting states: review windows, handovers, open disputes) needs BOTH a withdrawal (release) AND a refund allocation rule, and each mapping guard must be satisfiable in BOTH directions. An uncovered stop node strands escrowed funds permanently (order_allocators is L1-immutable). Review-gated release is a TIME VARIANT inside ONE exit guard ('reviewed OR unreviewed after T'), never parallel outgoing edges (race deadlock). See pattern.fund_flow_stop_node_coverage + rules R-M5-03 / R-M5-09. VERIFIED against Move source + SDK (4-level immutability matrix):\n L1 — PERMANENTLY LOCKED after publish (assert!(!bPublished), no pause+lock exception):\n • machine (workflow template)\n • order_allocators (fund distribution rules — full replacement locked; APPEND-ONLY additions remain possible via order_allocators_append, prefix/threshold frozen)\n L2 — TIME-LOCKED after publish (unpublished-state check — requires pause + setting_lock_duration elapsed):\n • arbitrations remove/clear (dispute resolution objects)\n • rewards remove/clear (reward objects)\n • compensation_fund_withdraw (withdraw ALL funds)\n RATIONALE (deliberate design, NOT a defect): these three REVOKE buyer-facing guarantees that placed orders already rely on — the lock protects buyer expectations. Daily operations (sales add/remove, price, stock, description) are NEVER gated by this lock.\n L3 — REMAIN MUTABLE after publish (no SDK check, no Move check):\n • arbitrations add, rewards add (no assert — can add after publish)\n • buy_guard, sales, discount, description, location, pause, repositories,\n • compensation_fund_add, setting_lock_duration_add, customer_required, um (Contact)\nThese 2 L1-LOCKED fields (machine/order_allocators) MUST be set BEFORE publish=true.\narbitrations/rewards can be ADDED after publish but remove/clear requires pause+lock.\n\n⚠️ COMPENSATION_FUND + ARBITRATION LINKAGE:\n At publish time, if compensation_fund > 0, Arbitration MUST be bound:\n if (balance::value(&self.compensation_fund) > 0) {\n assert!(arbitration_count > 0, E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND);\n }\n The MCP handler enforces this as a HARD PRE-CHECK: if publish=true AND compensation_fund_add is set in the same call AND arbitrations is empty, the call is REJECTED before submission. If compensation_fund was deposited in a prior call, a SOFT WARNING is issued.\n\nSCHEMA-03 / P0-01 fix — DEPLOYMENT WORKFLOW (two-phase, avoids circular dependency):\n Phase 1 — CREATE (no publish): object={name:'my-service', type_parameter, permission} + machine + order_allocators + arbitrations.\n NOTE: buy_guard can use a LocalMark NAME (not address) to break the Guard→Service circular dependency.\n The name is resolved to an address at transaction build time.\n Phase 2 — PUBLISH: object='my-service' (string ref) + publish=true.\n All L1-LOCKED fields must be set in Phase 1; Phase 2 only flips the publish flag.\n Post-publish updates: buy_guard, sales, description, repositories (add), rewards (add), arbitrations (add), etc.",
1755
1789
  "type": "boolean"
1756
1790
  }
1757
1791
  },
@@ -2745,7 +2779,7 @@
2745
2779
  "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."
2746
2780
  },
2747
2781
  "role": {
2748
- "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 (advancing here should trigger the Allocation fund release), cancelled = refund endpoint (advancing here should trigger the refund Allocator).",
2782
+ "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.",
2749
2783
  "type": "string",
2750
2784
  "enum": [
2751
2785
  "draft",
@@ -2932,7 +2966,7 @@
2932
2966
  "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."
2933
2967
  },
2934
2968
  "role": {
2935
- "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 (advancing here should trigger the Allocation fund release), cancelled = refund endpoint (advancing here should trigger the refund Allocator).",
2969
+ "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.",
2936
2970
  "type": "string",
2937
2971
  "enum": [
2938
2972
  "draft",
@@ -4529,6 +4563,63 @@
4529
4563
  "const": "recently"
4530
4564
  }
4531
4565
  ]
4566
+ },
4567
+ "review": {
4568
+ "description": "Structured review composite (REVIEW component): after this forward succeeds, write the structured reputation record into a Repository (+ optional reward claim), reusing this call's passport submission. Requires operate (the chain fires only after a successful forward).",
4569
+ "type": "object",
4570
+ "properties": {
4571
+ "repository": {
4572
+ "type": "string",
4573
+ "description": "Repository object ID or name that stores the structured reputation record. Its matching policy key should use id_from=Signer (one record per buyer, rewrite = own-record overwrite) and accept a JSON payload {rating, tags?, orderRef?}. PREFERRED: the service's review repository EMITTED BY THE BUILD PLAN when review_mode was set (AR-1) — resolve it from the service's repositories list (service_panorama / onchain_objects, name suffix '_review') — never guess an address."
4574
+ },
4575
+ "key": {
4576
+ "description": "Data key (policy rule name) to write under. Default 'review'.",
4577
+ "type": "string"
4578
+ },
4579
+ "rating": {
4580
+ "type": "string",
4581
+ "enum": [
4582
+ "like",
4583
+ "dislike"
4584
+ ],
4585
+ "description": "Buyer rating. Ratings NEVER affect settlement (the settlement anchor is the delivered moment, not this review) — this is reputation only."
4586
+ },
4587
+ "tags": {
4588
+ "description": "Optional structured tags for statistics and market exposure (e.g. ['fast_delivery','good_quality']).",
4589
+ "type": "array",
4590
+ "items": {
4591
+ "type": "string"
4592
+ }
4593
+ },
4594
+ "reward_claim": {
4595
+ "description": "Optional reward claim chained after the repository write (fail-isolated: a failed claim never undoes the write or the forward).",
4596
+ "type": "object",
4597
+ "properties": {
4598
+ "reward": {
4599
+ "type": "string",
4600
+ "description": "Reward object ID or name to claim from. Resolve it from the service's rewards list (service_panorama / service_quote reward_terms) — never guess an address."
4601
+ },
4602
+ "guard": {
4603
+ "type": "string",
4604
+ "description": "Guard object that gates this claim. MUST be covered by this call's passport submission (one of the submission.guard entries, same address), otherwise the chain aborts."
4605
+ }
4606
+ },
4607
+ "required": [
4608
+ "reward",
4609
+ "guard"
4610
+ ],
4611
+ "additionalProperties": false
4612
+ },
4613
+ "write_guard": {
4614
+ "description": "Policy write guard for the repository write. DEFAULT: the first guard of this call's passport submission (the review-edge credential). Required when the matched Repository policy uses id_from=None with declared guards (the chain aborts with 22, E_POLICY_WRITE_GUARD_REQUIRED, otherwise). The guard MUST be covered by the passport submission.",
4615
+ "type": "string"
4616
+ }
4617
+ },
4618
+ "required": [
4619
+ "repository",
4620
+ "rating"
4621
+ ],
4622
+ "additionalProperties": false
4532
4623
  }
4533
4624
  },
4534
4625
  "required": [
@@ -7056,7 +7147,8 @@
7056
7147
  "indemnity": {
7057
7148
  "type": "integer",
7058
7149
  "minimum": 0,
7059
- "maximum": 9007199254740991
7150
+ "maximum": 9007199254740991,
7151
+ "description": "Awarded compensation in integer smallest units (0 = a denial ruling that pays nothing). Hard-capped at 3x the disputed order amount on chain. Funded from the Service's merchant-prepaid compensation fund — an award larger than the fund balance aborts the later payout until the merchant tops up. A non-zero award consumes the order's one-shot compensation latch: refund rails gated on 'no award paid' can never fire afterwards, so pair them with a merchant-recovery rail at build time."
7060
7152
  }
7061
7153
  },
7062
7154
  "required": [
@@ -8186,7 +8278,7 @@
8186
8278
  "at"
8187
8279
  ],
8188
8280
  "additionalProperties": false,
8189
- "description": "An instant messaging contact entry with address and optional description"
8281
+ "description": "An instant messaging contact entry (at + optional description). NO status field by design: on chain, Im.status is self-declared — each member sets its OWN status (your own via data.my_status; other members via their own contact-status update), and creating an entry always starts it with an empty status."
8190
8282
  },
8191
8283
  "description": "List of IM contacts to add"
8192
8284
  }
@@ -8224,7 +8316,7 @@
8224
8316
  "at"
8225
8317
  ],
8226
8318
  "additionalProperties": false,
8227
- "description": "An instant messaging contact entry with address and optional description"
8319
+ "description": "An instant messaging contact entry (at + optional description). NO status field by design: on chain, Im.status is self-declared — each member sets its OWN status (your own via data.my_status; other members via their own contact-status update), and creating an entry always starts it with an empty status."
8228
8320
  },
8229
8321
  "description": "Complete list of IM contacts to set"
8230
8322
  }
@@ -14156,7 +14248,7 @@
14156
14248
  "type": "string"
14157
14249
  }
14158
14250
  ],
14159
- "description": "When specified, the query retrieves data from the associated (witness) object instead of the queried object itself. This enables cross-object queries within Guard validation logic. Can be a numeric ID (100-108) or a string name (case-insensitive, with or without the 'Type' prefix). String format is recommended for readability.\n\nAvailable WitnessTypes:\n- OrderProgress / TypeOrderProgress (100): Query an Order's associated Progress object. Use case: Check if order has reached a specific workflow node (e.g., 'complete') before allowing reward claims.\n- OrderMachine / TypeOrderMachine (101): Query an Order's associated Machine (workflow definition). Use case: Verify the workflow structure or check node configurations.\n- OrderService / TypeOrderService (102): Query an Order's parent Service object. Use case: Validate the service offering details or check service-level configurations.\n- ProgressMachine / TypeProgressMachine (103): Query a Progress's associated Machine. Use case: Access workflow definition from a Progress context.\n- ArbOrder / TypeArbOrder (104): Query an Arb's associated Order. Use case: In arbitration voting guards, verify order details like payment amount or service ID.\n- ArbArbitration / TypeArbArbitration (105): Query an Arb's parent Arbitration service. Use case: Access arbitration configuration or fee settings from within an Arb case.\n- ArbProgress / TypeArbProgress (106): Query an Arb's associated Progress. Use case: Check order workflow state during arbitration validation.\n- ArbMachine / TypeArbMachine (107): Query an Arb's associated Machine. Use case: Access workflow definition for dispute context analysis.\n- ArbService / TypeArbService (108): Query an Arb's associated Service. Use case: Verify service terms or compensation fund status during arbitration.\n\nExample: To validate that an order has reached the 'complete' node, query the Order with convert_witness='OrderProgress' and check the Progress's current_node field."
14251
+ "description": "When specified, the query retrieves data from the associated (witness) object instead of the queried object itself. This enables cross-object queries within Guard validation logic. Can be a numeric ID (100-109) or a string name (case-insensitive, with or without the 'Type' prefix). String format is recommended for readability.\n\nAvailable WitnessTypes:\n- OrderProgress / TypeOrderProgress (100): Query an Order's associated Progress object. Use case: Check if order has reached a specific workflow node (e.g., 'complete') before allowing reward claims.\n- OrderMachine / TypeOrderMachine (101): Query an Order's associated Machine (workflow definition). Use case: Verify the workflow structure or check node configurations.\n- OrderService / TypeOrderService (102): Query an Order's parent Service object. Use case: Validate the service offering details or check service-level configurations.\n- ProgressMachine / TypeProgressMachine (103): Query a Progress's associated Machine. Use case: Access workflow definition from a Progress context.\n- ArbOrder / TypeArbOrder (104): Query an Arb's associated Order. Use case: In arbitration voting guards, verify order details like payment amount or service ID.\n- ArbArbitration / TypeArbArbitration (105): Query an Arb's parent Arbitration service. Use case: Access arbitration configuration or fee settings from within an Arb case.\n- ArbProgress / TypeArbProgress (106): Query an Arb's associated Progress. Use case: Check order workflow state during arbitration validation.\n- ArbMachine / TypeArbMachine (107): Query an Arb's associated Machine. Use case: Access workflow definition for dispute context analysis.\n- ArbService / TypeArbService (108): Query an Arb's associated Service. Use case: Verify service terms or compensation fund status during arbitration.\n- OrderAllocation / TypeOrderAllocation (109): Query an Order's escrow Allocation. Use case: Fund gates — combine with the allocation.balance query (1051) to require balance >= a threshold before a forward advances (e.g., renewal loops).\n\nExample: To validate that an order has reached the 'complete' node, query the Order with convert_witness='OrderProgress' and check the Progress's current_node field."
14160
14252
  }
14161
14253
  },
14162
14254
  "required": [
@@ -18319,7 +18411,7 @@
18319
18411
  "receive"
18320
18412
  ],
18321
18413
  "additionalProperties": false,
18322
- "description": "Receive mode: unwrap a CoinWrapper to the caller's wallet. Use after Allocation's alloc_by_guard creates a Payment with your address as a revenue recipient. The CoinWrapper holds your share — call this to convert it to actual coins in your wallet. Provide 'object' to unwrap a specific CoinWrapper, or OMIT it to auto-unwrap every CoinWrapper owned by the caller. AUTO-CLAIM: when the allocation SIGNER and the recipient are the SAME account, the share is credited directly during settlement and NO CoinWrapper is created — a 'no CoinWrapper found' result in that case means the funds already arrived (verify via account_balance), it is NOT a failure."
18414
+ "description": "Receive mode: unwrap a CoinWrapper to the caller's wallet. Use after Allocation's alloc_by_guard creates a Payment with your address as a revenue recipient. The CoinWrapper holds your share — call this to convert it to actual coins in your wallet. Provide 'object' to unwrap a specific CoinWrapper, or OMIT it to auto-unwrap every CoinWrapper owned by the caller. CHAIN TRUTH: allocation settlement ALWAYS creates one CoinWrapper per recipient row on-chain — there is NO chain-level auto-claim, even when the signer IS the recipient (ptrn-ln-261010 C-04). After an alloc where you are a recipient, expect a CoinWrapper under your address and claim it here; a 'no CoinWrapper found' result means the funds were already claimed (verify via account_balance) or your share is held by another object (Order/Entity) and must be claimed through that object's own receive entry."
18323
18415
  }
18324
18416
  ],
18325
18417
  "description": "On-chain Payment operations. TWO modes:\n(1) CREATE: Set 'object' with {name, type_parameter, ...}, 'revenue', and 'info' to create a new Payment.\n(2) RECEIVE: Set {receive: true} to unwrap CoinWrappers to your wallet. Provide 'object' (<coinwrapper_id_or_name>) to unwrap a specific one, or OMIT it to auto-unwrap every CoinWrapper owned by the caller. type_parameter optional — auto-derived from the CoinWrapper's type."
@@ -22658,7 +22750,7 @@
22658
22750
  "type": "string"
22659
22751
  }
22660
22752
  ],
22661
- "description": "When specified, the query retrieves data from the associated (witness) object instead of the queried object itself. This enables cross-object queries within Guard validation logic. Can be a numeric ID (100-108) or a string name (case-insensitive, with or without the 'Type' prefix). String format is recommended for readability.\n\nAvailable WitnessTypes:\n- OrderProgress / TypeOrderProgress (100): Query an Order's associated Progress object. Use case: Check if order has reached a specific workflow node (e.g., 'complete') before allowing reward claims.\n- OrderMachine / TypeOrderMachine (101): Query an Order's associated Machine (workflow definition). Use case: Verify the workflow structure or check node configurations.\n- OrderService / TypeOrderService (102): Query an Order's parent Service object. Use case: Validate the service offering details or check service-level configurations.\n- ProgressMachine / TypeProgressMachine (103): Query a Progress's associated Machine. Use case: Access workflow definition from a Progress context.\n- ArbOrder / TypeArbOrder (104): Query an Arb's associated Order. Use case: In arbitration voting guards, verify order details like payment amount or service ID.\n- ArbArbitration / TypeArbArbitration (105): Query an Arb's parent Arbitration service. Use case: Access arbitration configuration or fee settings from within an Arb case.\n- ArbProgress / TypeArbProgress (106): Query an Arb's associated Progress. Use case: Check order workflow state during arbitration validation.\n- ArbMachine / TypeArbMachine (107): Query an Arb's associated Machine. Use case: Access workflow definition for dispute context analysis.\n- ArbService / TypeArbService (108): Query an Arb's associated Service. Use case: Verify service terms or compensation fund status during arbitration.\n\nExample: To validate that an order has reached the 'complete' node, query the Order with convert_witness='OrderProgress' and check the Progress's current_node field."
22753
+ "description": "When specified, the query retrieves data from the associated (witness) object instead of the queried object itself. This enables cross-object queries within Guard validation logic. Can be a numeric ID (100-109) or a string name (case-insensitive, with or without the 'Type' prefix). String format is recommended for readability.\n\nAvailable WitnessTypes:\n- OrderProgress / TypeOrderProgress (100): Query an Order's associated Progress object. Use case: Check if order has reached a specific workflow node (e.g., 'complete') before allowing reward claims.\n- OrderMachine / TypeOrderMachine (101): Query an Order's associated Machine (workflow definition). Use case: Verify the workflow structure or check node configurations.\n- OrderService / TypeOrderService (102): Query an Order's parent Service object. Use case: Validate the service offering details or check service-level configurations.\n- ProgressMachine / TypeProgressMachine (103): Query a Progress's associated Machine. Use case: Access workflow definition from a Progress context.\n- ArbOrder / TypeArbOrder (104): Query an Arb's associated Order. Use case: In arbitration voting guards, verify order details like payment amount or service ID.\n- ArbArbitration / TypeArbArbitration (105): Query an Arb's parent Arbitration service. Use case: Access arbitration configuration or fee settings from within an Arb case.\n- ArbProgress / TypeArbProgress (106): Query an Arb's associated Progress. Use case: Check order workflow state during arbitration validation.\n- ArbMachine / TypeArbMachine (107): Query an Arb's associated Machine. Use case: Access workflow definition for dispute context analysis.\n- ArbService / TypeArbService (108): Query an Arb's associated Service. Use case: Verify service terms or compensation fund status during arbitration.\n- OrderAllocation / TypeOrderAllocation (109): Query an Order's escrow Allocation. Use case: Fund gates — combine with the allocation.balance query (1051) to require balance >= a threshold before a forward advances (e.g., renewal loops).\n\nExample: To validate that an order has reached the 'complete' node, query the Order with convert_witness='OrderProgress' and check the Progress's current_node field."
22662
22754
  }
22663
22755
  },
22664
22756
  "required": [
@@ -326,7 +326,8 @@
326
326
  "indemnity": {
327
327
  "type": "integer",
328
328
  "minimum": 0,
329
- "maximum": 9007199254740991
329
+ "maximum": 9007199254740991,
330
+ "description": "Awarded compensation in integer smallest units (0 = a denial ruling that pays nothing). Hard-capped at 3x the disputed order amount on chain. Funded from the Service's merchant-prepaid compensation fund — an award larger than the fund balance aborts the later payout until the merchant tops up. A non-zero award consumes the order's one-shot compensation latch: refund rails gated on 'no award paid' can never fire afterwards, so pair them with a merchant-recovery rail at build time."
330
331
  }
331
332
  },
332
333
  "required": [
@@ -127,7 +127,7 @@
127
127
  "at"
128
128
  ],
129
129
  "additionalProperties": false,
130
- "description": "An instant messaging contact entry with address and optional description"
130
+ "description": "An instant messaging contact entry (at + optional description). NO status field by design: on chain, Im.status is self-declared — each member sets its OWN status (your own via data.my_status; other members via their own contact-status update), and creating an entry always starts it with an empty status."
131
131
  },
132
132
  "description": "List of IM contacts to add"
133
133
  }
@@ -165,7 +165,7 @@
165
165
  "at"
166
166
  ],
167
167
  "additionalProperties": false,
168
- "description": "An instant messaging contact entry with address and optional description"
168
+ "description": "An instant messaging contact entry (at + optional description). NO status field by design: on chain, Im.status is self-declared — each member sets its OWN status (your own via data.my_status; other members via their own contact-status update), and creating an entry always starts it with an empty status."
169
169
  },
170
170
  "description": "Complete list of IM contacts to set"
171
171
  }