@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.
- package/README.md +2 -2
- package/dist/chain-semantics/field-capability.js +1 -1
- package/dist/chain-semantics/freeze-map.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.d.ts +10 -1
- package/dist/composition/compile.js +1 -1
- package/dist/composition/inflight.js +1 -1
- package/dist/extensions/capability-manifest.js +1 -1
- package/dist/extensions/industry-audit.spec.js +1 -1
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/graph/onchain/facts.spec.js +1 -1
- package/dist/graph/onchain/field-manifest.js +1 -1
- package/dist/harness/recover.js +1 -1
- package/dist/intent/types.d.ts +1 -1
- package/dist/intent/types.js +1 -1
- package/dist/keeper/KeeperScan.d.ts +2 -1
- package/dist/keeper/KeeperScan.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/keeper/types.d.ts +3 -0
- package/dist/keeper/types.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.d.ts +34 -0
- package/dist/knowledge/allocator-rail-verifier.js +1 -0
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/arbitration-venue-order.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +19 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json +1 -1
- package/dist/knowledge/baselines/rules/arb.json +1 -1
- package/dist/knowledge/baselines/rules/guard.json +15 -5
- package/dist/knowledge/baselines/rules/machine.json +9 -6
- package/dist/knowledge/baselines/rules/plan.json +12 -12
- package/dist/knowledge/baselines/semantic-facts.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +1 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-anchor-reach.d.ts +1 -1
- package/dist/knowledge/guard-anchor-reach.js +1 -1
- package/dist/knowledge/guard-bindings.js +1 -1
- package/dist/knowledge/guard-design-patterns.d.ts +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-puzzle.d.ts +1 -1
- package/dist/knowledge/machine-puzzle.js +1 -1
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/machine-topology.d.ts +8 -0
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/protocol-facts.d.ts +16 -0
- package/dist/knowledge/protocol-facts.js +1 -0
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/reward-ledger.d.ts +2 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-templates.js +1 -1
- package/dist/knowledge/safety-rules.d.ts +0 -2
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +7 -0
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +13 -1
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tool-constraints.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/monitor/normalize.d.ts +1 -1
- package/dist/monitor/normalize.js +1 -1
- package/dist/monitor/types.d.ts +1 -1
- package/dist/monitor/types.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/game-theory.d.ts +1 -0
- package/dist/playbooks/service-build/game-theory.js +1 -1
- package/dist/playbooks/service-build/intent-analyzer.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/playbooks/service-build/service-quote.spec.js +1 -1
- package/dist/relationship/registry.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/role/profiles.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +5 -1
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/arbitration.d.ts +4 -4
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +39 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +1 -0
- package/dist/schema/call/contact.d.ts +4 -4
- package/dist/schema/call/demand.d.ts +4 -4
- package/dist/schema/call/error-codes.d.ts +1 -1
- package/dist/schema/call/error-codes.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +12 -4
- package/dist/schema/call/order.d.ts +4 -4
- package/dist/schema/call/permission.d.ts +4 -4
- package/dist/schema/call/progress.d.ts +4 -4
- package/dist/schema/call/receipt.d.ts +8 -0
- package/dist/schema/call/receipt.js +1 -1
- package/dist/schema/call/repository.d.ts +4 -4
- package/dist/schema/call/reward.d.ts +24 -4
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +6 -4
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +4 -4
- package/dist/schema/common/index.d.ts +2 -2
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/goal/index.d.ts +5 -1
- package/dist/schema/goal/planning.d.ts +10 -2
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +3 -0
- package/dist/schema/industry-pack/index.js +1 -1
- package/dist/schema/intent-radar/index.d.ts +9 -0
- package/dist/schema/intent-radar/index.js +1 -1
- package/dist/schema/local/index.d.ts +10 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/operations.d.ts +35 -22
- package/dist/schema/operations.js +1 -1
- package/dist/schema/query/bi.d.ts +16 -0
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +52 -48
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-query/index.d.ts +1 -0
- package/dist/schema/schema-query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema-query-impl/index.d.ts +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +1 -0
- package/dist/schemas/account_operation.schema.json +1 -1
- package/dist/schemas/benchmark_migration_operation.schema.json +27 -3
- package/dist/schemas/bridge_operation.output.json +1 -0
- package/dist/schemas/goal_operation.schema.json +26 -2
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/industry_pack_operation.output.json +8 -0
- package/dist/schemas/industry_pack_operation.schema.json +9 -0
- package/dist/schemas/intent_radar.output.json +8 -2
- package/dist/schemas/intent_radar.schema.json +4 -1
- package/dist/schemas/local_cache_operation.output.json +1 -0
- package/dist/schemas/local_history_operation.output.json +1 -0
- package/dist/schemas/local_info_operation.output.json +1 -0
- package/dist/schemas/local_mark_operation.output.json +1 -0
- package/dist/schemas/monitor_events.schema.json +3 -1
- package/dist/schemas/onchain_events.output.json +275 -11
- package/dist/schemas/onchain_events.schema.json +25 -1
- package/dist/schemas/onchain_operations.output.json +40 -0
- package/dist/schemas/onchain_operations.schema.json +573 -104
- package/dist/schemas/onchain_operations_allocation.schema.json +2 -2
- package/dist/schemas/onchain_operations_arbitration.schema.json +11 -7
- package/dist/schemas/onchain_operations_contact.schema.json +9 -5
- package/dist/schemas/onchain_operations_demand.schema.json +9 -5
- package/dist/schemas/onchain_operations_guard.schema.json +342 -4
- package/dist/schemas/onchain_operations_machine.schema.json +17 -5
- package/dist/schemas/onchain_operations_order.schema.json +9 -5
- package/dist/schemas/onchain_operations_permission.schema.json +9 -5
- package/dist/schemas/onchain_operations_progress.schema.json +9 -5
- package/dist/schemas/onchain_operations_repository.schema.json +9 -5
- package/dist/schemas/onchain_operations_reward.schema.json +89 -9
- package/dist/schemas/onchain_operations_service.schema.json +18 -11
- package/dist/schemas/onchain_operations_treasury.schema.json +9 -5
- package/dist/schemas/query_toolkit.output.json +237 -14
- package/dist/schemas/schema_query.schema.json +3 -2
- package/dist/tools/handlers/benchmark-migration.d.ts +45 -1
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/intent-radar.js +1 -1
- package/dist/tools/handlers/keeper.d.ts +1 -1
- package/dist/tools/handlers/onchain.d.ts +12 -0
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/agent.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/rules-hook.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -171,8 +171,16 @@
|
|
|
171
171
|
"additionalProperties": false
|
|
172
172
|
},
|
|
173
173
|
"receive": {
|
|
174
|
-
"description": "Unwrap CoinWrapper objects or other objects received by the order and transfer them to the order owner. Consistent with `owner_receive` on other objects (arbitration/contact/demand/machine/permission/repository/reward/service/treasury).\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
|
|
174
|
+
"description": "Unwrap CoinWrapper objects or other objects received by the order and transfer them to the order owner. Consistent with `owner_receive` on other objects (arbitration/contact/demand/machine/permission/repository/reward/service/treasury).\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.",
|
|
175
175
|
"anyOf": [
|
|
176
|
+
{
|
|
177
|
+
"type": "string",
|
|
178
|
+
"const": "recently"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"type": "string",
|
|
182
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
183
|
+
},
|
|
176
184
|
{
|
|
177
185
|
"minItems": 1,
|
|
178
186
|
"type": "array",
|
|
@@ -282,10 +290,6 @@
|
|
|
282
290
|
],
|
|
283
291
|
"additionalProperties": false,
|
|
284
292
|
"description": "Received record of Coin objects"
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"type": "string",
|
|
288
|
-
"const": "recently"
|
|
289
293
|
}
|
|
290
294
|
]
|
|
291
295
|
},
|
|
@@ -661,8 +661,16 @@
|
|
|
661
661
|
"additionalProperties": false
|
|
662
662
|
},
|
|
663
663
|
"owner_receive": {
|
|
664
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Permission object and send them to the builder(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
|
|
664
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Permission object and send them to the builder(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.",
|
|
665
665
|
"anyOf": [
|
|
666
|
+
{
|
|
667
|
+
"type": "string",
|
|
668
|
+
"const": "recently"
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
"type": "string",
|
|
672
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
673
|
+
},
|
|
666
674
|
{
|
|
667
675
|
"minItems": 1,
|
|
668
676
|
"type": "array",
|
|
@@ -772,10 +780,6 @@
|
|
|
772
780
|
],
|
|
773
781
|
"additionalProperties": false,
|
|
774
782
|
"description": "Received record of Coin objects"
|
|
775
|
-
},
|
|
776
|
-
{
|
|
777
|
-
"type": "string",
|
|
778
|
-
"const": "recently"
|
|
779
783
|
}
|
|
780
784
|
]
|
|
781
785
|
},
|
|
@@ -202,8 +202,16 @@
|
|
|
202
202
|
"additionalProperties": false
|
|
203
203
|
},
|
|
204
204
|
"owner_receive": {
|
|
205
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Progress object and send them to the owner of the bound Machine's 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
|
|
205
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Progress object and send them to the owner of the bound Machine's 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.",
|
|
206
206
|
"anyOf": [
|
|
207
|
+
{
|
|
208
|
+
"type": "string",
|
|
209
|
+
"const": "recently"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"type": "string",
|
|
213
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
214
|
+
},
|
|
207
215
|
{
|
|
208
216
|
"minItems": 1,
|
|
209
217
|
"type": "array",
|
|
@@ -313,10 +321,6 @@
|
|
|
313
321
|
],
|
|
314
322
|
"additionalProperties": false,
|
|
315
323
|
"description": "Received record of Coin objects"
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
"type": "string",
|
|
319
|
-
"const": "recently"
|
|
320
324
|
}
|
|
321
325
|
]
|
|
322
326
|
},
|
|
@@ -815,8 +815,16 @@
|
|
|
815
815
|
]
|
|
816
816
|
},
|
|
817
817
|
"owner_receive": {
|
|
818
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Repository 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
|
|
818
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Repository 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.",
|
|
819
819
|
"anyOf": [
|
|
820
|
+
{
|
|
821
|
+
"type": "string",
|
|
822
|
+
"const": "recently"
|
|
823
|
+
},
|
|
824
|
+
{
|
|
825
|
+
"type": "string",
|
|
826
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
827
|
+
},
|
|
820
828
|
{
|
|
821
829
|
"minItems": 1,
|
|
822
830
|
"type": "array",
|
|
@@ -926,10 +934,6 @@
|
|
|
926
934
|
],
|
|
927
935
|
"additionalProperties": false,
|
|
928
936
|
"description": "Received record of Coin objects"
|
|
929
|
-
},
|
|
930
|
-
{
|
|
931
|
-
"type": "string",
|
|
932
|
-
"const": "recently"
|
|
933
937
|
}
|
|
934
938
|
]
|
|
935
939
|
},
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
]
|
|
226
226
|
},
|
|
227
227
|
"guard_add": {
|
|
228
|
-
"description": "Add Guard to Reward object. IDIOMS (F08 — these differ from Service allocation, follow THIS shape here): recipient is ONE OF {GuardIdentifier: <u8>} | {Entity: {name_or_address: 'mark'}} | {Signer: 'signer'} (string const INSIDE the key, NOT a bare string); amount is {type: 'Fixed', value: '0.1WOW'} — value accepts a display string with token symbol ('0.1WOW') or a smallest-unit integer ('100000000'), NOT the plain balance string used by allocation `sharing`. FULL EXAMPLE: [{guard: '0xabc...', recipient: {Signer: 'signer'}, amount: {type: 'Fixed', value: '0.1WOW'}}].",
|
|
228
|
+
"description": "Add Guard to Reward object. IDIOMS (F08 — these differ from Service allocation, follow THIS shape here): recipient is ONE OF {GuardIdentifier: <u8>} | {Entity: {name_or_address: 'mark'}} | {Signer: 'signer'} (string const INSIDE the key, NOT a bare string) — BUT on the REWARD claim rail the recipient MUST equal the transaction sender (chain assert, abort 14), so {Signer: 'signer'} is the canonical form and {Entity} also passes (SDK replaces it with the claimant's account at claim time); a {GuardIdentifier} recipient resolves to the submitted Order and is STRUCTURALLY UNPAYABLE (every claim aborts 14) — the tool gate rejects it (crs-mn-261015 F-12). amount is {type: 'Fixed', value: '0.1WOW'} — value accepts a display string with token symbol ('0.1WOW') or a smallest-unit integer ('100000000'), NOT the plain balance string used by allocation `sharing`. FULL EXAMPLE: [{guard: '0xabc...', recipient: {Signer: 'signer'}, amount: {type: 'Fixed', value: '0.1WOW'}}].",
|
|
229
229
|
"type": "array",
|
|
230
230
|
"items": {
|
|
231
231
|
"type": "object",
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
"GuardIdentifier"
|
|
251
251
|
],
|
|
252
252
|
"additionalProperties": false,
|
|
253
|
-
"description": "Guard verified recipient ID. Get recipient ID from specified data index in Guard table. The ID must be of address type."
|
|
253
|
+
"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)."
|
|
254
254
|
},
|
|
255
255
|
{
|
|
256
256
|
"type": "object",
|
|
@@ -289,10 +289,10 @@
|
|
|
289
289
|
"Signer"
|
|
290
290
|
],
|
|
291
291
|
"additionalProperties": false,
|
|
292
|
-
"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."
|
|
292
|
+
"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)."
|
|
293
293
|
}
|
|
294
294
|
],
|
|
295
|
-
"description": "Recipient ID. Three forms:\n - {GuardIdentifier: u8} — DYNAMIC address resolved from Passport at alloc() time\n - {Entity: {name_or_address: 'mark_name'}} — FIXED static address via LocalMark (recommended)\n - {Signer: 'signer'} — transaction sender at alloc() time (e.g. self-refund; customer must call alloc_by_guard themselves)"
|
|
295
|
+
"description": "Recipient ID. Three forms:\n - {GuardIdentifier: u8} — DYNAMIC address resolved from Passport at alloc() time (Allocation rails only; structurally unpayable on reward.guard_add — abort 14)\n - {Entity: {name_or_address: 'mark_name'}} — FIXED static address via LocalMark (recommended)\n - {Signer: 'signer'} — transaction sender at alloc() time (e.g. self-refund; customer must call alloc_by_guard themselves; canonical on reward claim rails)"
|
|
296
296
|
},
|
|
297
297
|
"amount": {
|
|
298
298
|
"oneOf": [
|
|
@@ -392,8 +392,16 @@
|
|
|
392
392
|
]
|
|
393
393
|
},
|
|
394
394
|
"owner_receive": {
|
|
395
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Reward 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
|
|
395
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Reward 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.",
|
|
396
396
|
"anyOf": [
|
|
397
|
+
{
|
|
398
|
+
"type": "string",
|
|
399
|
+
"const": "recently"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"type": "string",
|
|
403
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
404
|
+
},
|
|
397
405
|
{
|
|
398
406
|
"minItems": 1,
|
|
399
407
|
"type": "array",
|
|
@@ -503,10 +511,6 @@
|
|
|
503
511
|
],
|
|
504
512
|
"additionalProperties": false,
|
|
505
513
|
"description": "Received record of Coin objects"
|
|
506
|
-
},
|
|
507
|
-
{
|
|
508
|
-
"type": "string",
|
|
509
|
-
"const": "recently"
|
|
510
514
|
}
|
|
511
515
|
]
|
|
512
516
|
},
|
|
@@ -521,6 +525,82 @@
|
|
|
521
525
|
"type": "null"
|
|
522
526
|
}
|
|
523
527
|
]
|
|
528
|
+
},
|
|
529
|
+
"withdraw": {
|
|
530
|
+
"description": "Permission-gated balance exit (the ONLY non-claim exit from the Reward balance): withdraws this amount from the Reward balance and delivers it to the transaction sender inside a Payment object (the on-chain auditable receipt, keyed by the RewardWithdrawEvent). The executing account needs the withdraw right (permission index 158) on the Reward's Permission object. Fails on-chain when the balance is insufficient or while the declared no-guard window (guard_expiration_time) is still in the future; claim replay protection is unaffected. Use it to recover mismatched or overfunded pools.",
|
|
531
|
+
"type": "object",
|
|
532
|
+
"properties": {
|
|
533
|
+
"amount": {
|
|
534
|
+
"anyOf": [
|
|
535
|
+
{
|
|
536
|
+
"type": "integer",
|
|
537
|
+
"minimum": 0,
|
|
538
|
+
"maximum": 9007199254740991
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"type": "string"
|
|
542
|
+
}
|
|
543
|
+
],
|
|
544
|
+
"description": "Amount to withdraw (SMALLEST token units, e.g. '100000000')."
|
|
545
|
+
},
|
|
546
|
+
"payment_info": {
|
|
547
|
+
"type": "object",
|
|
548
|
+
"properties": {
|
|
549
|
+
"for_object": {
|
|
550
|
+
"description": "Binding anchor for this distribution. On an Allocation a SET for_object is ENFORCED at alloc(): every GuardIdentifier recipient submission must equal this address or the whole tx aborts (ERECIPIENT_NOT_FOR_OBJECT, code 15) — verify the anchor matches the intended recipient flow BEFORE create; payment_info is immutable afterwards. NULL/omitted = no anchor: nothing is enforced on-chain, recipient routing is entirely the creator's design. Also recorded at creation for auditors to query the distribution's business context.",
|
|
551
|
+
"anyOf": [
|
|
552
|
+
{
|
|
553
|
+
"type": "string"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"type": "null"
|
|
557
|
+
}
|
|
558
|
+
]
|
|
559
|
+
},
|
|
560
|
+
"for_guard": {
|
|
561
|
+
"description": "Payment to satisfy verification of a Guard object",
|
|
562
|
+
"anyOf": [
|
|
563
|
+
{
|
|
564
|
+
"type": "string"
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
"type": "null"
|
|
568
|
+
}
|
|
569
|
+
]
|
|
570
|
+
},
|
|
571
|
+
"remark": {
|
|
572
|
+
"type": "string",
|
|
573
|
+
"description": "Payment record remark"
|
|
574
|
+
},
|
|
575
|
+
"index": {
|
|
576
|
+
"anyOf": [
|
|
577
|
+
{
|
|
578
|
+
"type": "number"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"type": "string"
|
|
582
|
+
}
|
|
583
|
+
],
|
|
584
|
+
"description": "Payment record index"
|
|
585
|
+
}
|
|
586
|
+
},
|
|
587
|
+
"required": [
|
|
588
|
+
"remark",
|
|
589
|
+
"index"
|
|
590
|
+
],
|
|
591
|
+
"additionalProperties": false,
|
|
592
|
+
"description": "Payment receipt metadata (remark/index). The withdrawn funds leave the Reward balance inside a Payment object — the on-chain auditable receipt."
|
|
593
|
+
},
|
|
594
|
+
"unwrap": {
|
|
595
|
+
"description": "Auto-unwrap: when true, the coin is paid straight to the transaction sender in the SAME transaction (single-PTB flow). When false or omitted (default), a CoinWrapper is delivered to the sender's wallet for later unwrapping via the payment call with receive:true. Both modes keep the Payment object as the on-chain receipt.",
|
|
596
|
+
"type": "boolean"
|
|
597
|
+
}
|
|
598
|
+
},
|
|
599
|
+
"required": [
|
|
600
|
+
"amount",
|
|
601
|
+
"payment_info"
|
|
602
|
+
],
|
|
603
|
+
"additionalProperties": false
|
|
524
604
|
}
|
|
525
605
|
},
|
|
526
606
|
"required": [
|
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
"additionalProperties": false
|
|
229
229
|
},
|
|
230
230
|
"order_required_info": {
|
|
231
|
-
"description": "Contact object ID or WTS Proof object, RECORDED on the Order as evidence that the order holder delivered the private information the Service declares in customer_required (e.g. phone/email/shipping_address). RECORD-ONLY, NOT ENFORCED: nothing on-chain reads this field — the purchase entry never requires it, and an order supplying none of the declared fields is still created. FLOW: the order holder sends the information to the Service's Contact (um) via end-to-end encrypted Messenger, then passes the Contact object ID or the generated WTS Proof here. To ENFORCE delivery on-chain, mount the pattern.required_info_evidence_gate Guard on the forward that hands over goods or funds, asserting order.required_info is some (presence-only — the recorded address value is never a guard condition; accepting the delivered information is the merchant's confirming forward). ATTESTATION-ONLY: the recorded value is self-attested, has no on-chain readback, and MUST NOT be used as a gate condition. PER-ORDER BINDING: when the listing genuinely promises a per-order credential, use the dedicated controlled bind operation (order_required_info_bind) with a Proof whose about is THIS order and whose creator is the order holder — the chain verifies both at write time and rejects a mismatch without writing anything. The reuse model (one Contact Proof across orders) stays the default for this plain record field; pick per listing promise, not per habit.",
|
|
231
|
+
"description": "Contact object ID or WTS Proof object, RECORDED on the Order as evidence that the order holder delivered the private information the Service declares in customer_required (e.g. phone/email/shipping_address). RECORD-ONLY, NOT ENFORCED: nothing on-chain reads this field — the purchase entry never requires it, and an order supplying none of the declared fields is still created. FLOW: the order holder sends the information to the Service's Contact (um) via end-to-end encrypted Messenger, then passes the Contact object ID or the generated WTS Proof here. To ENFORCE delivery on-chain, mount the pattern.required_info_evidence_gate Guard on the forward that hands over goods or funds, asserting order.required_info is some (presence-only — the recorded address value is never a guard condition; accepting the delivered information is the merchant's confirming forward). ATTESTATION-ONLY: the recorded value is self-attested, has no on-chain readback, and MUST NOT be used as a gate condition. PER-ORDER BINDING: when the listing genuinely promises a per-order credential, use the dedicated controlled bind operation (order_required_info_bind) with a Proof whose about is THIS order and whose creator is the order holder — the chain verifies both at write time and rejects a mismatch without writing anything. The reuse model (one Contact Proof across orders) stays the default for this plain record field; pick per listing promise, not per habit. BOUNDARY: that binding proves the credential AUTHOR only, never its content or any rating — do not mirror it onto review/reward claims; public reviews are Repository rows whose values are enforced guard-side via data-value probes, not through Proof objects.",
|
|
232
232
|
"type": "string"
|
|
233
233
|
},
|
|
234
234
|
"transfer": {
|
|
@@ -339,7 +339,7 @@
|
|
|
339
339
|
"type": "string"
|
|
340
340
|
},
|
|
341
341
|
"sales": {
|
|
342
|
-
"description": "Service sales products or services list. ⚠️ WIP
|
|
342
|
+
"description": "Service sales products or services list. ⚠️ WIP (PRODUCT-DETAIL FILE) — HOW TO PROVIDE IT: (1) EASIEST — official free hosting: upload the detail file with the wip_file tool; the default endpoint is https://wip.store.wowok.net (free: 10 files per account, 180-day retention, 12MB per file, rate-limited; files stay until you purge them). Put the returned URL into sale.wip. (2) Your own hosting: any publicly reachable URL (GitHub Pages / IPFS / your own website) — pass customBaseUrl to wip_file when uploading to a non-default endpoint, or host the file yourself and put that URL into sale.wip. For long-lived MAINNET listings prefer your own endpoint so the detail page outlives the free retention window. ⚠️ REACHABILITY RULE: a non-empty sale.wip MUST be a publicly reachable URL. The URL is stored ON-CHAIN and every customer fetches it at order time — a local file path, localhost/loopback URL, or LAN private-IP URL is unreachable by customers on other machines and aborts order_new 100%. Local-network URLs are INTERNAL TEST USE ONLY (env.network = localnet). ⚠️ SCORING: on mainnet, a sale item without a product-detail file is an incomplete listing — it hurts the service's market completeness score. Leave sale.wip empty (\"\") only for quick local testing.",
|
|
343
343
|
"oneOf": [
|
|
344
344
|
{
|
|
345
345
|
"type": "object",
|
|
@@ -1101,7 +1101,7 @@
|
|
|
1101
1101
|
"GuardIdentifier"
|
|
1102
1102
|
],
|
|
1103
1103
|
"additionalProperties": false,
|
|
1104
|
-
"description": "Guard verified recipient ID. Get recipient ID from specified data index in Guard table. The ID must be of address type."
|
|
1104
|
+
"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)."
|
|
1105
1105
|
},
|
|
1106
1106
|
{
|
|
1107
1107
|
"type": "object",
|
|
@@ -1140,7 +1140,7 @@
|
|
|
1140
1140
|
"Signer"
|
|
1141
1141
|
],
|
|
1142
1142
|
"additionalProperties": false,
|
|
1143
|
-
"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."
|
|
1143
|
+
"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)."
|
|
1144
1144
|
}
|
|
1145
1145
|
],
|
|
1146
1146
|
"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)."
|
|
@@ -1286,7 +1286,7 @@
|
|
|
1286
1286
|
"GuardIdentifier"
|
|
1287
1287
|
],
|
|
1288
1288
|
"additionalProperties": false,
|
|
1289
|
-
"description": "Guard verified recipient ID. Get recipient ID from specified data index in Guard table. The ID must be of address type."
|
|
1289
|
+
"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)."
|
|
1290
1290
|
},
|
|
1291
1291
|
{
|
|
1292
1292
|
"type": "object",
|
|
@@ -1325,7 +1325,7 @@
|
|
|
1325
1325
|
"Signer"
|
|
1326
1326
|
],
|
|
1327
1327
|
"additionalProperties": false,
|
|
1328
|
-
"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."
|
|
1328
|
+
"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)."
|
|
1329
1329
|
}
|
|
1330
1330
|
],
|
|
1331
1331
|
"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)."
|
|
@@ -1628,8 +1628,16 @@
|
|
|
1628
1628
|
]
|
|
1629
1629
|
},
|
|
1630
1630
|
"owner_receive": {
|
|
1631
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Service 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
|
|
1631
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Service 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.",
|
|
1632
1632
|
"anyOf": [
|
|
1633
|
+
{
|
|
1634
|
+
"type": "string",
|
|
1635
|
+
"const": "recently"
|
|
1636
|
+
},
|
|
1637
|
+
{
|
|
1638
|
+
"type": "string",
|
|
1639
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
1640
|
+
},
|
|
1633
1641
|
{
|
|
1634
1642
|
"minItems": 1,
|
|
1635
1643
|
"type": "array",
|
|
@@ -1739,10 +1747,6 @@
|
|
|
1739
1747
|
],
|
|
1740
1748
|
"additionalProperties": false,
|
|
1741
1749
|
"description": "Received record of Coin objects"
|
|
1742
|
-
},
|
|
1743
|
-
{
|
|
1744
|
-
"type": "string",
|
|
1745
|
-
"const": "recently"
|
|
1746
1750
|
}
|
|
1747
1751
|
]
|
|
1748
1752
|
},
|
|
@@ -1790,6 +1794,9 @@
|
|
|
1790
1794
|
"publish": {
|
|
1791
1795
|
"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.",
|
|
1792
1796
|
"type": "boolean"
|
|
1797
|
+
},
|
|
1798
|
+
"creation_plan": {
|
|
1799
|
+
"description": "WIZARD CONTRACT: the Plan JSON that merchant_guide delivered (its creation_plan / plan field), passed back VERBATIM on the Service publish call (data.publish=true). The publish gate replays the plan's freeze matrix (preflight) right before submission and REJECTS the publish when any gate fails (structural issues, critical audit findings, or a failed rule check) — this closes the preflight bypass where a plan that failed merchant_guide's audit could still be materialized manually. OMIT this field on every NON-publish call and on fully manual (non-wizard) builds — the manual path is unchanged and never gated by this field. Do NOT edit, trim, or 'improve' the plan in transit: a mutated plan is rejected (target cross-check) and the publish must be redone from merchant_guide."
|
|
1793
1800
|
}
|
|
1794
1801
|
},
|
|
1795
1802
|
"required": [
|
|
@@ -748,8 +748,16 @@
|
|
|
748
748
|
]
|
|
749
749
|
},
|
|
750
750
|
"owner_receive": {
|
|
751
|
-
"description": "Unwrap CoinWrapper objects and other objects received by this Treasury 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
|
|
751
|
+
"description": "Unwrap CoinWrapper objects and other objects received by this Treasury 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.",
|
|
752
752
|
"anyOf": [
|
|
753
|
+
{
|
|
754
|
+
"type": "string",
|
|
755
|
+
"const": "recently"
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"type": "string",
|
|
759
|
+
"pattern": "^0x[0-9a-fA-F]{8,}$"
|
|
760
|
+
},
|
|
753
761
|
{
|
|
754
762
|
"minItems": 1,
|
|
755
763
|
"type": "array",
|
|
@@ -859,10 +867,6 @@
|
|
|
859
867
|
],
|
|
860
868
|
"additionalProperties": false,
|
|
861
869
|
"description": "Received record of Coin objects"
|
|
862
|
-
},
|
|
863
|
-
{
|
|
864
|
-
"type": "string",
|
|
865
|
-
"const": "recently"
|
|
866
870
|
}
|
|
867
871
|
]
|
|
868
872
|
},
|