@wowok/agent-mcp 3.3.2 → 3.3.3

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 (220) 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/fund-flow.js +1 -1
  4. package/dist/chain-semantics/object-graph.js +1 -1
  5. package/dist/composition/audit.js +1 -1
  6. package/dist/composition/compile.d.ts +2 -2
  7. package/dist/composition/compile.js +1 -1
  8. package/dist/composition/inflight.d.ts +27 -3
  9. package/dist/composition/inflight.js +1 -1
  10. package/dist/config/judgment.d.ts +111 -1
  11. package/dist/config/judgment.js +1 -1
  12. package/dist/evaluation/arbitration-game.d.ts +4 -0
  13. package/dist/evaluation/arbitration-game.js +1 -1
  14. package/dist/evaluation/builtins/graph-service.js +1 -1
  15. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  16. package/dist/evaluation/game-strategy.d.ts +6 -0
  17. package/dist/evaluation/game-strategy.js +1 -1
  18. package/dist/evaluation/node-game.d.ts +4 -0
  19. package/dist/evaluation/node-game.js +1 -1
  20. package/dist/evaluation/value-risk.d.ts +8 -0
  21. package/dist/evaluation/value-risk.js +1 -0
  22. package/dist/experience/realtime-feedback.js +1 -1
  23. package/dist/extensions/business-modules.js +1 -1
  24. package/dist/extensions/industry-pack.js +1 -1
  25. package/dist/graph/onchain/analyze.js +1 -1
  26. package/dist/graph/onchain/analyze.spec.js +1 -1
  27. package/dist/graph/onchain/expand.js +1 -1
  28. package/dist/graph/onchain/exposure.js +1 -1
  29. package/dist/graph/onchain/facet-projection.js +1 -1
  30. package/dist/graph/onchain/facet-projection.spec.js +1 -1
  31. package/dist/graph/onchain/facts.d.ts +20 -0
  32. package/dist/graph/onchain/facts.js +1 -1
  33. package/dist/graph/onchain/facts.spec.js +1 -1
  34. package/dist/graph/onchain/object-held-receipts.d.ts +20 -0
  35. package/dist/graph/onchain/object-held-receipts.js +1 -0
  36. package/dist/graph/onchain/object-held-receipts.spec.d.ts +1 -0
  37. package/dist/graph/onchain/object-held-receipts.spec.js +1 -0
  38. package/dist/graph/onchain/sdk-batch.d.ts +1 -0
  39. package/dist/graph/onchain/sdk-batch.js +1 -1
  40. package/dist/harness/index.d.ts +1 -0
  41. package/dist/harness/recover.d.ts +2 -1
  42. package/dist/harness/recover.js +1 -1
  43. package/dist/knowledge/allocation-ledger.d.ts +0 -1
  44. package/dist/knowledge/allocation-ledger.js +1 -1
  45. package/dist/knowledge/allocation-puzzle.js +1 -1
  46. package/dist/knowledge/allocation-risk.js +1 -1
  47. package/dist/knowledge/arb-fund-facts.d.ts +7 -0
  48. package/dist/knowledge/arb-fund-facts.js +1 -1
  49. package/dist/knowledge/audit-rules.js +1 -1
  50. package/dist/knowledge/baselines/judgment-baselines.json +502 -81
  51. package/dist/knowledge/baselines/rules/allocation.json +0 -14
  52. package/dist/knowledge/baselines/rules/graph.json +4 -4
  53. package/dist/knowledge/baselines/rules/plan.json +33 -3
  54. package/dist/knowledge/builtin-templates.d.ts +1 -1
  55. package/dist/knowledge/builtin-templates.js +1 -1
  56. package/dist/knowledge/discount-threshold.js +1 -1
  57. package/dist/knowledge/event-semantics.js +1 -1
  58. package/dist/knowledge/game-scenarios.d.ts +21 -0
  59. package/dist/knowledge/game-scenarios.js +1 -0
  60. package/dist/knowledge/getting-started.js +1 -1
  61. package/dist/knowledge/guard-bindings.js +1 -1
  62. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  63. package/dist/knowledge/guard-design-patterns.js +1 -1
  64. package/dist/knowledge/guard-field-cognition.js +1 -1
  65. package/dist/knowledge/guard-leg-map.d.ts +5 -0
  66. package/dist/knowledge/guard-leg-map.js +1 -0
  67. package/dist/knowledge/guard-puzzle.js +1 -1
  68. package/dist/knowledge/guard-render.js +1 -1
  69. package/dist/knowledge/guard-risk.js +1 -1
  70. package/dist/knowledge/guard-submission-prompt.js +1 -1
  71. package/dist/knowledge/guard-templates.js +1 -1
  72. package/dist/knowledge/guard-translation.js +1 -1
  73. package/dist/knowledge/index.js +1 -1
  74. package/dist/knowledge/industry-registry.js +1 -1
  75. package/dist/knowledge/industry-strategy.js +1 -1
  76. package/dist/knowledge/jsonrpc-enum.js +1 -1
  77. package/dist/knowledge/onchain-constants.d.ts +4 -2
  78. package/dist/knowledge/onchain-constants.js +1 -1
  79. package/dist/knowledge/order-ledger.d.ts +1 -1
  80. package/dist/knowledge/order-ledger.js +1 -1
  81. package/dist/knowledge/order-puzzle.d.ts +3 -0
  82. package/dist/knowledge/order-risk.d.ts +1 -1
  83. package/dist/knowledge/passport-ledger.d.ts +12 -0
  84. package/dist/knowledge/passport-ledger.js +1 -1
  85. package/dist/knowledge/payment-tracker.js +1 -1
  86. package/dist/knowledge/protocol-facts.d.ts +1 -0
  87. package/dist/knowledge/protocol-facts.js +1 -1
  88. package/dist/knowledge/repository-write-semantics.d.ts +1 -1
  89. package/dist/knowledge/repository-write-semantics.js +1 -1
  90. package/dist/knowledge/scenario-modes.js +1 -1
  91. package/dist/knowledge/service-ledger.d.ts +14 -0
  92. package/dist/knowledge/service-ledger.js +1 -1
  93. package/dist/knowledge/strategy-manuals.js +1 -1
  94. package/dist/knowledge/template-loader.js +1 -1
  95. package/dist/knowledge/template-registry.js +1 -1
  96. package/dist/knowledge/template-scanner.d.ts +4 -0
  97. package/dist/knowledge/template-scanner.js +1 -1
  98. package/dist/knowledge/workflow-guidance.d.ts +2 -0
  99. package/dist/knowledge/workflow-guidance.js +1 -1
  100. package/dist/monitor/MonitorLoop.js +1 -1
  101. package/dist/participation/allocation-advice.d.ts +8 -1
  102. package/dist/participation/allocation-advice.js +1 -1
  103. package/dist/participation/game-context.d.ts +25 -0
  104. package/dist/participation/game-context.js +1 -0
  105. package/dist/participation/node-action-advisor.d.ts +64 -0
  106. package/dist/participation/node-action-advisor.js +1 -0
  107. package/dist/participation/radar-core.js +1 -1
  108. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  109. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  110. package/dist/playbooks/service-build/merchant-guide.d.ts +1 -0
  111. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  112. package/dist/playbooks/service-build/migration-planner.d.ts +2 -2
  113. package/dist/playbooks/service-build/migration-planner.js +1 -1
  114. package/dist/playbooks/service-build/object-panorama.d.ts +13 -1
  115. package/dist/playbooks/service-build/object-panorama.js +1 -1
  116. package/dist/playbooks/service-build/participation-radar.js +1 -1
  117. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  118. package/dist/playbooks/service-build/service-panorama.d.ts +8 -0
  119. package/dist/playbooks/service-build/service-panorama.js +1 -1
  120. package/dist/playbooks/service-build/service-quote.js +1 -1
  121. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  122. package/dist/review/index.js +1 -1
  123. package/dist/review/repository.js +1 -1
  124. package/dist/role/intent.d.ts +23 -0
  125. package/dist/role/intent.js +1 -0
  126. package/dist/safety/confirm-gate.js +1 -1
  127. package/dist/schema/benchmark-migration/index.d.ts +4 -0
  128. package/dist/schema/benchmark-migration/index.js +1 -1
  129. package/dist/schema/call/allocation.d.ts +3 -0
  130. package/dist/schema/call/allocation.js +1 -1
  131. package/dist/schema/call/arbitration.js +1 -1
  132. package/dist/schema/call/base.d.ts +52 -0
  133. package/dist/schema/call/base.js +1 -1
  134. package/dist/schema/call/bridge.d.ts +3 -0
  135. package/dist/schema/call/error-codes.d.ts +1 -1
  136. package/dist/schema/call/error-codes.js +1 -1
  137. package/dist/schema/call/guard.js +1 -1
  138. package/dist/schema/call/handler.js +1 -1
  139. package/dist/schema/call/machine.d.ts +10 -0
  140. package/dist/schema/call/machine.js +1 -1
  141. package/dist/schema/call/order.d.ts +2 -0
  142. package/dist/schema/call/order.js +1 -1
  143. package/dist/schema/call/progress.js +1 -1
  144. package/dist/schema/call/repository.d.ts +4 -0
  145. package/dist/schema/call/semantic.d.ts +6 -0
  146. package/dist/schema/call/semantic.js +1 -1
  147. package/dist/schema/call/service.d.ts +34 -0
  148. package/dist/schema/call/service.js +1 -1
  149. package/dist/schema/common/index.js +1 -1
  150. package/dist/schema/keeper/index.d.ts +2 -0
  151. package/dist/schema/local/index.d.ts +33 -0
  152. package/dist/schema/local/index.js +1 -1
  153. package/dist/schema/messenger/index.d.ts +2 -0
  154. package/dist/schema/operations.d.ts +26 -0
  155. package/dist/schema/operations.js +1 -1
  156. package/dist/schema/persona/index.d.ts +484 -0
  157. package/dist/schema/query/bi.d.ts +2 -0
  158. package/dist/schema/query/bi.js +1 -1
  159. package/dist/schema/query/index.d.ts +60 -48
  160. package/dist/schema/query/index.js +1 -1
  161. package/dist/schema/schema-version.js +1 -1
  162. package/dist/schema-query-impl/index.js +1 -1
  163. package/dist/schemas/account_operation.output.json +13 -7
  164. package/dist/schemas/account_operation.schema.json +1 -1
  165. package/dist/schemas/benchmark_migration_operation.output.json +8 -5
  166. package/dist/schemas/benchmark_migration_operation.schema.json +5 -4
  167. package/dist/schemas/bridge_operation.output.json +13 -7
  168. package/dist/schemas/index.json +1 -1
  169. package/dist/schemas/keeper_operation.output.json +12 -7
  170. package/dist/schemas/local_cache_operation.output.json +34 -7
  171. package/dist/schemas/local_cache_operation.schema.json +16 -1
  172. package/dist/schemas/local_history_operation.output.json +13 -7
  173. package/dist/schemas/local_info_operation.output.json +13 -7
  174. package/dist/schemas/local_info_operation.schema.json +5 -1
  175. package/dist/schemas/local_mark_operation.output.json +13 -7
  176. package/dist/schemas/messenger_operation.output.json +12 -7
  177. package/dist/schemas/monitor_events.output.json +12 -7
  178. package/dist/schemas/monitor_subscription.output.json +12 -7
  179. package/dist/schemas/onchain_events.output.json +67 -18
  180. package/dist/schemas/onchain_events.schema.json +4 -0
  181. package/dist/schemas/onchain_operations.output.json +81 -24
  182. package/dist/schemas/onchain_operations.schema.json +226 -111
  183. package/dist/schemas/onchain_operations_allocation.schema.json +9 -5
  184. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  185. package/dist/schemas/onchain_operations_contact.schema.json +1 -1
  186. package/dist/schemas/onchain_operations_demand.schema.json +3 -3
  187. package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
  188. package/dist/schemas/onchain_operations_guard.schema.json +99 -63
  189. package/dist/schemas/onchain_operations_machine.schema.json +10 -1
  190. package/dist/schemas/onchain_operations_order.schema.json +7 -3
  191. package/dist/schemas/onchain_operations_progress.schema.json +2 -2
  192. package/dist/schemas/onchain_operations_proof.schema.json +1 -1
  193. package/dist/schemas/onchain_operations_repository.schema.json +5 -1
  194. package/dist/schemas/onchain_operations_reward.schema.json +4 -4
  195. package/dist/schemas/onchain_operations_service.schema.json +74 -16
  196. package/dist/schemas/onchain_operations_treasury.schema.json +7 -7
  197. package/dist/schemas/onchain_table_data.output.json +16 -7
  198. package/dist/schemas/persona_operation.output.json +1387 -0
  199. package/dist/schemas/persona_operation.schema.json +219 -0
  200. package/dist/schemas/query_toolkit.output.json +96 -59
  201. package/dist/schemas/query_toolkit.schema.json +8 -0
  202. package/dist/schemas/workflow_operation.schema.json +1 -1
  203. package/dist/tools/handlers/benchmark-migration.js +1 -1
  204. package/dist/tools/handlers/bridge.js +1 -1
  205. package/dist/tools/handlers/config.js +1 -1
  206. package/dist/tools/handlers/dispatch-expectations.js +1 -1
  207. package/dist/tools/handlers/local.js +1 -1
  208. package/dist/tools/handlers/messenger.js +1 -1
  209. package/dist/tools/handlers/onchain-name-registration.d.ts +11 -0
  210. package/dist/tools/handlers/onchain-name-registration.js +1 -1
  211. package/dist/tools/handlers/onchain.d.ts +4 -0
  212. package/dist/tools/handlers/onchain.js +1 -1
  213. package/dist/tools/handlers/query.js +1 -1
  214. package/dist/tools/handlers/review-chain.js +1 -1
  215. package/dist/tools/move-fn-index.gen.js +1 -1
  216. package/dist/tools/registry/local.js +1 -1
  217. package/dist/tools/registry/onchain.js +1 -1
  218. package/dist/tools/registry/query.js +1 -1
  219. package/dist/tools/wrap.js +1 -1
  220. package/package.json +3 -3
@@ -90,7 +90,7 @@
90
90
  "type": "integer",
91
91
  "minimum": 0,
92
92
  "maximum": 255,
93
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
93
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
94
94
  }
95
95
  },
96
96
  "required": [
@@ -150,7 +150,7 @@
150
150
  "type": "string"
151
151
  }
152
152
  ],
153
- "description": "Allocation value. SEMANTICS DEPEND ON `mode`:\n• mode='Amount': absolute amount in smallest unit (e.g., '750000000' for 0.75 WOW, '250000000' for 0.25 WOW). Allocated first; sum of Amount items cached as `fix`.\n• mode='Rate' (NET): basis-points rate off the post-fix base (balance - fix, or max - fix), 10000 = 100% (e.g., '7500' for 75%, '2500' for 25%). When no Surplus in same Allocator, sum MUST == 10000; when Surplus present, sum MUST <= 10000.\n• mode='RateGross': basis-points rate off the FULL pool (balance) or the `max` cap — the fixed Amount total is NOT subtracted, 10000 = 100%. sum MUST <= 10000 (and, with `max` set, fix×10000 + sum×max <= max×10000). Cannot be mixed with mode='Rate' in the same Allocator while a fixed Amount total is present.\n• mode='Surplus': IGNORED (contract forces to 0). Set to '0' for clarity. Receives remaining balance after Amount + Rate/RateGross allocations.\n• mode='Formula' (protocol 154): basis-points COEFFICIENT (MUST be <= 10000) of a RUNTIME repository scalar — payout = clamp(coefficient × scalar / 10000, 0, headroom). Does NOT join any rate sum (its base is the queried scalar, not the pool) and skips the Amount>=threshold declaration check. Bind the slot's data source via allocation formula_spec_set, else the scalar reads 0.\n⚠️ T1 LOSSY POINT (B-2, updated by protocol 154): Amount/Rate/RateGross/Surplus values are PRE-CONFIGURED and STATIC — a free-form continuous amount still cannot be expressed with them. Protocol 154's Formula mode covers the bounded case: a coefficient (<= 10000 bps) of an attested repository aggregate (record count / value sum) — use it for runtime-proportional payouts; for anything richer, model (a) a fixed-tier Allocator list guarded by distinct Guards, or (b) an Amount with a `max` cap — both are finite configurations."
153
+ "description": "Allocation value. SEMANTICS DEPEND ON `mode`:\n• mode='Amount': absolute amount in smallest unit (e.g., '750000000' for 0.75 WOW, '250000000' for 0.25 WOW). Allocated first; sum of Amount items cached as `fix`.\n• mode='Rate' (NET): basis-points rate off the post-fix base (balance - fix, or max - fix), 10000 = 100% (e.g., '7500' for 75%, '2500' for 25%). When no Surplus in same Allocator, sum MUST == 10000; when Surplus present, sum MUST <= 10000.\n• mode='RateGross': basis-points rate off the FULL pool (balance) or the `max` cap — the fixed Amount total is NOT subtracted, 10000 = 100%. sum MUST <= 10000 (and, with `max` set, fix×10000 + sum×max <= max×10000). Cannot be mixed with mode='Rate' in the same Allocator while a fixed Amount total is present.\n• mode='Surplus': IGNORED (contract forces to 0). Set to '0' for clarity. Receives remaining balance after Amount + Rate/RateGross allocations.\n• mode='Formula': basis-points COEFFICIENT (MUST be <= 10000) of a RUNTIME repository scalar — payout = clamp(coefficient × scalar / 10000, 0, headroom). Does NOT join any rate sum (its base is the queried scalar, not the pool) and skips the Amount>=threshold declaration check. Bind the slot's data source via allocation formula_spec_set, else the scalar reads 0.\n⚠️ T1 LOSSY POINT (B-2): Amount/Rate/RateGross/Surplus values are PRE-CONFIGURED and STATIC — a free-form continuous amount still cannot be expressed with them. Formula mode covers the bounded case: a coefficient (<= 10000 bps) of an attested repository aggregate (record count / value sum) — use it for runtime-proportional payouts; for anything richer, model (a) a fixed-tier Allocator list guarded by distinct Guards, or (b) an Amount with a `max` cap — both are finite configurations."
154
154
  },
155
155
  "mode": {
156
156
  "anyOf": [
@@ -166,7 +166,7 @@
166
166
  },
167
167
  {}
168
168
  ],
169
- "description": "Allocation mode — determines how the `sharing` field is interpreted. Modes can be used individually OR combined within a single Allocator; when combined, allocation order is strictly: Amount first, then Rate/RateGross, then Formula scalar legs, then Surplus. Understanding these modes allows modeling almost any fund distribution pattern.\n• Amount (0): `sharing` is a FIXED amount in smallest unit (e.g., '750000000' = 0.75 WOW). Allocated FIRST; sum of all Amount items is cached as `fix` by the contract. Validation: when no Rate and no Surplus items exist, sum of Amount items must be >= allocators.threshold (EAMOUNT_BELOW_THRESHOLD=12); when `max` is set, sum of Amount items must be <= max (EAMOUNT_EXCEEDS_MAX=13).\n• Rate (1): `sharing` is a NET basis-points rate (10000 = 100%). Allocated AFTER Amount; formula: allocated = (sharing × total_rates) / 10000, where total_rates = balance - fix (or max - fix if `max` is set) — the cached fixed Amount total IS subtracted. Validation: when no Surplus items exist, sum of all Rate items must be EXACTLY 10000 (ERATE_NOT_10000=4); when Surplus items exist, sum of all Rate items must be <= 10000 (ERATE_EXCEEDS_10000=6).\n• RateGross (3): `sharing` is a GROSS basis-points rate (10000 = 100%). Allocated AFTER Amount; formula: allocated = (sharing × total_rates) / 10000, where total_rates = balance (the full pool) or the `max` cap when set — the fixed Amount total is NOT subtracted, so fixed Amount entries and percentage-of-total rates coexist exactly. Validation: sum of all RateGross items must be <= 10000 (ERATE_EXCEEDS_10000=6); when `max` is set, fix×10000 + sum(rate)×max <= max×10000 must hold (6); with no `max` and a fixed total > 0, sum of RateGross items must be < 10000 (6). RateGross cannot be mixed with NET Rate entries in the same Allocator while a fixed Amount total is present (EMIXED_RATE_BASES=17).\n• Surplus (2): `sharing` is IGNORED (contract forces it to 0). Allocated LAST; receives the remaining balance after Amount + Rate allocations. Validation: MAX ONE Surplus item per Allocator (EMULTIPLE_SURPLUS=5). When Surplus exists, Rate sum constraint relaxes from == 10000 to <= 10000.\n• Formula (4, protocol 154): `sharing` is a basis-points COEFFICIENT (<= 10000, ERATE_EXCEEDS_10000=6) applied to a RUNTIME scalar queried from a Repository at alloc() time — amount = clamp(coefficient × scalar / 10000, 0, headroom). The scalar comes from the slot's bound FormulaSpec (record-count or value-sum over a repository policy key, predicate wire identical to the 1173/1174 count/sum-where guard queries; explicit candidate ids, max 100, empty list = zero hits = scalar 0). A Formula leg does NOT join total_rate (its base is the queried scalar, not the pool) and its presence SKIPS the Amount-sum >= threshold declaration check (payout is runtime-defined). Requires a spec bound via allocation formula_spec_set — an unbound Formula slot prices its scalar as 0. Gated on-chain by the enable_allocator_formula_pricing feature (EFORMULA_DISABLED=23); binding a malformed spec aborts (EFORMULA_SPEC_INVALID=24).\nALLOCATION ORDER (strict): Amount items (fixed, cached as fix) → Rate/RateGross items → Formula scalar legs → Surplus item (remaining).\nRECOMMENDATION: Use Amount mode for known fixed amounts (clearer, no sum constraint). Use Rate mode for proportional splits off the post-fix remainder (requires sum == 10000 unless Surplus present). Use RateGross mode for a percentage of the FULL pool/`max` that must coexist with fixed Amount entries. Use Surplus to capture remainder (e.g., platform fee + host gets rest). Use Formula for payouts proportional to an attested on-chain aggregate (e.g. N records served, total value logged in a Repository) that cannot be known at configuration time. Accepts string ('Amount'/'Rate'/'Surplus'/'RateGross'/'Formula', recommended) or number (0/1/2/3/4)."
169
+ "description": "Allocation mode — determines how the `sharing` field is interpreted. Modes can be used individually OR combined within a single Allocator; when combined, allocation order is strictly: Amount first, then Rate/RateGross, then Formula scalar legs, then Surplus. Understanding these modes allows modeling almost any fund distribution pattern.\n• Amount (0): `sharing` is a FIXED amount in smallest unit (e.g., '750000000' = 0.75 WOW). Allocated FIRST; sum of all Amount items is cached as `fix` by the contract. Validation: when no Rate and no Surplus items exist, sum of Amount items must be >= allocators.threshold (EAMOUNT_BELOW_THRESHOLD=12); when `max` is set, sum of Amount items must be <= max (EAMOUNT_EXCEEDS_MAX=13).\n• Rate (1): `sharing` is a NET basis-points rate (10000 = 100%). Allocated AFTER Amount; formula: allocated = (sharing × total_rates) / 10000, where total_rates = balance - fix (or max - fix if `max` is set) — the cached fixed Amount total IS subtracted. Validation: when no Surplus items exist, sum of all Rate items must be EXACTLY 10000 (ERATE_NOT_10000=4); when Surplus items exist, sum of all Rate items must be <= 10000 (ERATE_EXCEEDS_10000=6).\n• RateGross (3): `sharing` is a GROSS basis-points rate (10000 = 100%). Allocated AFTER Amount; formula: allocated = (sharing × total_rates) / 10000, where total_rates = balance (the full pool) or the `max` cap when set — the fixed Amount total is NOT subtracted, so fixed Amount entries and percentage-of-total rates coexist exactly. Validation: sum of all RateGross items must be <= 10000 (ERATE_EXCEEDS_10000=6); when `max` is set, fix×10000 + sum(rate)×max <= max×10000 must hold (6); with no `max` and a fixed total > 0, sum of RateGross items must be < 10000 (6). RateGross cannot be mixed with NET Rate entries in the same Allocator while a fixed Amount total is present (EMIXED_RATE_BASES=17).\n• Surplus (2): `sharing` is IGNORED (contract forces it to 0). Allocated LAST; receives the remaining balance after Amount + Rate allocations. Validation: MAX ONE Surplus item per Allocator (EMULTIPLE_SURPLUS=5). When Surplus exists, Rate sum constraint relaxes from == 10000 to <= 10000.\n• Formula (4): `sharing` is a basis-points COEFFICIENT (<= 10000, ERATE_EXCEEDS_10000=6) applied to a RUNTIME scalar queried from a Repository at alloc() time — amount = clamp(coefficient × scalar / 10000, 0, headroom). The scalar comes from the slot's bound FormulaSpec (record-count or value-sum over a repository policy key, predicate wire identical to the 1173/1174 count/sum-where guard queries; explicit candidate ids, max 100, empty list = zero hits = scalar 0). A Formula leg does NOT join total_rate (its base is the queried scalar, not the pool) and its presence SKIPS the Amount-sum >= threshold declaration check (payout is runtime-defined). Requires a spec bound via allocation formula_spec_set — an unbound Formula slot prices its scalar as 0. binding a malformed spec aborts (EFORMULA_SPEC_INVALID=24).\nALLOCATION ORDER (strict): Amount items (fixed, cached as fix) → Rate/RateGross items → Formula scalar legs → Surplus item (remaining).\nRECOMMENDATION: Use Amount mode for known fixed amounts (clearer, no sum constraint). Use Rate mode for proportional splits off the post-fix remainder (requires sum == 10000 unless Surplus present). Use RateGross mode for a percentage of the FULL pool/`max` that must coexist with fixed Amount entries. Use Surplus to capture remainder (e.g., platform fee + host gets rest). Use Formula for payouts proportional to an attested on-chain aggregate (e.g. N records served, total value logged in a Repository) that cannot be known at configuration time. Accepts string ('Amount'/'Rate'/'Surplus'/'RateGross'/'Formula', recommended) or number (0/1/2/3/4)."
170
170
  }
171
171
  },
172
172
  "required": [
@@ -423,8 +423,12 @@
423
423
  "description": "Verify the specified Guard and execute the corresponding fund distribution. GENERIC SEMANTICS: an Allocation distributes whatever balance it holds — order funds, payroll, dividends, bounties. It defines no scenario-specific rule: eligibility (including issuer identity for standalone use, e.g. an org admin) and differentiation inputs are expressed as Guard constraints, all public and auditable. RECIPIENT RESOLUTION (Recipient enum): Entity → fixed address; Signer → transaction sender; GuardIdentifier n → the address submitted for identifier n (resolved from the passport's submission record). ORDER PATTERN (canonical): the Guard table needs ONE submitted Order, constrained by the Guard (e.g. order.service == host service, progress at a qualifying node, signer == order.owner); that order submission IS the recipient slot. Whoever triggers the distribution, funds necessarily land at an Order OBJECT; delivered CoinWrappers are owned by the order and can be extracted only by the Order object itself (Wow ownership) — the coins then go to the order's current owner. Object receipt = owner receipt. POST-DISTRIBUTION CLAIM (required step): each recipient gets a CoinWrapper (not spendable coins) — EOA wallet → operation_type='payment' RECEIVE mode {object:'<coinwrapper_id>', receive:true}; Order object → operation_type='order' {object:'<order_id>', receive:'recently'}; Treasury object → treasury receive. Find pending CoinWrappers via query_toolkit query_type='onchain_received'; verify via the immutable Payment object (allocation.payment array). RISK: safety follows from the sufficiency of the Guard constraints, not the recipient form — analyze the recipient constraint audit before publish; structural residuals (unavoidable): permissionless alloc allows forced settlement timing, the submitted order is not bound to the settled allocation, and allocators/guards are immutable after publish.",
424
424
  "type": "string"
425
425
  },
426
+ "acknowledge_dual_payout": {
427
+ "description": "A-1 (amz9-ln-261023) explicit opt-in for a KNOWN double payout: when a submitted order already received arbitration compensation (order.claimed_by set) and this call would ALSO release its escrow (refund track), the call is REFUSED unless this flag is true. The two payout tracks are independent by design — the chain will not stop the second payout, so the operator must state it deliberately. Buyer NET view: total received = compensation + escrow refund. Leave unset for normal refunds of un-awarded orders.",
428
+ "type": "boolean"
429
+ },
426
430
  "formula_spec_set": {
427
- "description": "Protocol 154: bind (or replace) the runtime pricing spec of ONE Formula sharing slot of this Allocation — no re-declaration of the allocator plan, no fund movement. Only the DATA SOURCE (which repository aggregate prices the slot) is set here; the slot itself must already be declared as a Formula leg (mode 4). An unbound Formula slot prices its scalar as 0. Requires an SDK build with protocol-154 transport.",
431
+ "description": "Bind (or replace) the runtime pricing spec of ONE Formula sharing slot of this Allocation — no re-declaration of the allocator plan, no fund movement. Only the DATA SOURCE (which repository aggregate prices the slot) is set here; the slot itself must already be declared as a Formula leg (mode 4). An unbound Formula slot prices its scalar as 0.",
428
432
  "type": "object",
429
433
  "properties": {
430
434
  "allocator_index": {
@@ -854,7 +858,7 @@
854
858
  "type": "integer",
855
859
  "minimum": 0,
856
860
  "maximum": 255,
857
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
861
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
858
862
  },
859
863
  "b_submission": {
860
864
  "type": "boolean",
@@ -95,7 +95,7 @@
95
95
  "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."
96
96
  },
97
97
  "dispute": {
98
- "description": "Create a new Arb object for the order; the case lands directly in state 1 (Arbitrator_confirming) — the customer does not confirm at filing time. FILING IS SERVICE-BOUND: the SDK resolves the order's Service and files through its Service-side dispute entry points, which enforce the merchant's arbitrator allowlist, the service-arbitration neutrality rule and the order binding before the case is minted (venues gated by a usage_guard require the passport path, verified in the same transaction). Direct calls to the removed arbitration-side dispute entries abort with arbitration:10",
98
+ "description": "Create a new Arb object for the order; the case lands directly in state 1 (Arbitrator_confirming) — the customer does not confirm at filing time. FILING IS SERVICE-BOUND: the SDK resolves the order's Service and files through its Service-side dispute entry points, which enforce the merchant's arbitrator allowlist, the service-arbitration neutrality rule and the order binding before the case is minted (venues gated by a usage_guard require the passport path, verified in the same transaction). The arbitration-side filing entries are package-internal and cannot be called directly",
99
99
  "type": "object",
100
100
  "properties": {
101
101
  "order": {
@@ -493,7 +493,7 @@
493
493
  "type": "integer",
494
494
  "minimum": 0,
495
495
  "maximum": 255,
496
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
496
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
497
497
  }
498
498
  },
499
499
  "required": [
@@ -853,7 +853,7 @@
853
853
  "type": "integer",
854
854
  "minimum": 0,
855
855
  "maximum": 255,
856
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
856
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
857
857
  },
858
858
  "b_submission": {
859
859
  "type": "boolean",
@@ -486,7 +486,7 @@
486
486
  "type": "integer",
487
487
  "minimum": 0,
488
488
  "maximum": 255,
489
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
489
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
490
490
  },
491
491
  "b_submission": {
492
492
  "type": "boolean",
@@ -250,7 +250,7 @@
250
250
  "type": "integer",
251
251
  "minimum": 0,
252
252
  "maximum": 255,
253
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
253
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
254
254
  },
255
255
  {
256
256
  "type": "null"
@@ -296,7 +296,7 @@
296
296
  "type": "integer",
297
297
  "minimum": 0,
298
298
  "maximum": 255,
299
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
299
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
300
300
  },
301
301
  {
302
302
  "type": "null"
@@ -636,7 +636,7 @@
636
636
  "type": "integer",
637
637
  "minimum": 0,
638
638
  "maximum": 255,
639
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
639
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
640
640
  },
641
641
  "b_submission": {
642
642
  "type": "boolean",
@@ -73,7 +73,7 @@
73
73
  "type": "integer",
74
74
  "minimum": 0,
75
75
  "maximum": 255,
76
- "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS (protocol 154): slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
76
+ "description": "Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails such as full refunds). SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."
77
77
  },
78
78
  "b_submission": {
79
79
  "type": "boolean",