@wowok/agent-mcp 3.1.7 → 3.2.1

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 (294) hide show
  1. package/dist/config/exposure.d.ts +2 -2
  2. package/dist/config/judgment.d.ts +5 -5
  3. package/dist/config/rule-engine.d.ts +5 -5
  4. package/dist/customer/user-preferences.d.ts +2 -2
  5. package/dist/evaluation/arbitration-game.js +1 -1
  6. package/dist/evaluation/capability.d.ts +1 -1
  7. package/dist/evaluation/extract.js +1 -1
  8. package/dist/evaluation/match-operation.js +1 -1
  9. package/dist/extensions/industry-pack.d.ts +3 -2
  10. package/dist/extensions/industry-pack.js +1 -1
  11. package/dist/extensions/modes.js +1 -1
  12. package/dist/extensions/registry.js +1 -1
  13. package/dist/extensions/types.d.ts +1 -0
  14. package/dist/graph/onchain/analyze.js +1 -1
  15. package/dist/graph/onchain/analyze.spec.js +1 -1
  16. package/dist/graph/onchain/edge-schema.js +1 -1
  17. package/dist/graph/onchain/extract.js +1 -1
  18. package/dist/graph/onchain/facts.js +1 -1
  19. package/dist/graph/onchain/field-manifest.js +1 -1
  20. package/dist/graph/onchain/project-relationship.js +1 -1
  21. package/dist/graph/onchain/sdk-batch.d.ts +1 -0
  22. package/dist/graph/onchain/sdk-batch.js +1 -1
  23. package/dist/graph/onchain/sdk-dataplane.d.ts +1 -0
  24. package/dist/graph/onchain/sdk-dataplane.js +1 -1
  25. package/dist/graph/onchain/types.d.ts +1 -1
  26. package/dist/harness/recover.js +1 -1
  27. package/dist/keeper/KeeperScan.d.ts +2 -1
  28. package/dist/keeper/KeeperScan.js +1 -1
  29. package/dist/keeper/detectors.d.ts +9 -0
  30. package/dist/keeper/detectors.js +1 -1
  31. package/dist/keeper/keeper.spec.js +1 -1
  32. package/dist/keeper/types.d.ts +1 -1
  33. package/dist/keeper/types.js +1 -1
  34. package/dist/knowledge/allocation-ledger.d.ts +4 -1
  35. package/dist/knowledge/allocation-ledger.js +1 -1
  36. package/dist/knowledge/allocation-puzzle.d.ts +2 -0
  37. package/dist/knowledge/allocation-puzzle.js +1 -1
  38. package/dist/knowledge/allocation-risk.d.ts +1 -1
  39. package/dist/knowledge/allocation-risk.js +1 -1
  40. package/dist/knowledge/allocation-templates.d.ts +1 -1
  41. package/dist/knowledge/allocation-templates.js +1 -1
  42. package/dist/knowledge/arb-risk.d.ts +3 -1
  43. package/dist/knowledge/arb-risk.js +1 -1
  44. package/dist/knowledge/arbitration-ledger.js +1 -1
  45. package/dist/knowledge/arbitration-risk.js +1 -1
  46. package/dist/knowledge/arbitration-templates.d.ts +1 -0
  47. package/dist/knowledge/arbitration-templates.js +1 -1
  48. package/dist/knowledge/audit-rules.d.ts +13 -2
  49. package/dist/knowledge/audit-rules.js +1 -1
  50. package/dist/knowledge/baselines/rules/allocation.json +50 -1
  51. package/dist/knowledge/baselines/rules/arb.json +20 -1
  52. package/dist/knowledge/baselines/rules/arbitration.json +27 -0
  53. package/dist/knowledge/baselines/rules/guard.json +75 -2
  54. package/dist/knowledge/baselines/rules/machine.json +38 -13
  55. package/dist/knowledge/baselines/rules/order.json +2 -2
  56. package/dist/knowledge/builtin-templates.d.ts +3 -1
  57. package/dist/knowledge/builtin-templates.js +1 -1
  58. package/dist/knowledge/discount-threshold.d.ts +15 -0
  59. package/dist/knowledge/discount-threshold.js +1 -0
  60. package/dist/knowledge/event-semantics.js +1 -1
  61. package/dist/knowledge/fund-layer.js +1 -1
  62. package/dist/knowledge/getting-started.js +1 -1
  63. package/dist/knowledge/guard-anchor-reach.d.ts +19 -0
  64. package/dist/knowledge/guard-anchor-reach.js +1 -0
  65. package/dist/knowledge/guard-bindings.js +1 -1
  66. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  67. package/dist/knowledge/guard-design-patterns.js +1 -1
  68. package/dist/knowledge/guard-ledger.js +1 -1
  69. package/dist/knowledge/guard-lint.js +1 -1
  70. package/dist/knowledge/guard-render.d.ts +6 -0
  71. package/dist/knowledge/guard-render.js +1 -1
  72. package/dist/knowledge/guard-risk.js +1 -1
  73. package/dist/knowledge/guard-submission-prompt.d.ts +6 -0
  74. package/dist/knowledge/guard-submission-prompt.js +1 -1
  75. package/dist/knowledge/guard-templates.d.ts +1 -1
  76. package/dist/knowledge/guard-templates.js +1 -1
  77. package/dist/knowledge/guard-translation.js +1 -1
  78. package/dist/knowledge/index.d.ts +6 -6
  79. package/dist/knowledge/index.js +1 -1
  80. package/dist/knowledge/industry-generalizer.d.ts +38 -1
  81. package/dist/knowledge/industry-generalizer.js +1 -1
  82. package/dist/knowledge/industry-registry.d.ts +1 -1
  83. package/dist/knowledge/industry-registry.js +1 -1
  84. package/dist/knowledge/industry-strategy.js +1 -1
  85. package/dist/knowledge/jsonrpc-enum.js +1 -1
  86. package/dist/knowledge/machine-ledger.js +1 -1
  87. package/dist/knowledge/machine-risk.js +1 -1
  88. package/dist/knowledge/machine-templates.js +1 -1
  89. package/dist/knowledge/onchain-constants.d.ts +2 -2
  90. package/dist/knowledge/onchain-constants.js +1 -1
  91. package/dist/knowledge/order-ledger.js +1 -1
  92. package/dist/knowledge/order-templates.js +1 -1
  93. package/dist/knowledge/permission-ledger.js +1 -1
  94. package/dist/knowledge/release-sentinel.d.ts +12 -0
  95. package/dist/knowledge/release-sentinel.js +1 -0
  96. package/dist/knowledge/repository-write-semantics.d.ts +27 -0
  97. package/dist/knowledge/repository-write-semantics.js +1 -0
  98. package/dist/knowledge/rule-node-analyzers.d.ts +6 -0
  99. package/dist/knowledge/rule-node-analyzers.js +1 -1
  100. package/dist/knowledge/safety-rules.d.ts +5 -1
  101. package/dist/knowledge/safety-rules.js +1 -1
  102. package/dist/knowledge/scenario-modes.d.ts +20 -1
  103. package/dist/knowledge/scenario-modes.js +1 -1
  104. package/dist/knowledge/service-allocation-semantics.d.ts +36 -0
  105. package/dist/knowledge/service-allocation-semantics.js +1 -0
  106. package/dist/knowledge/strategy-manuals.d.ts +4 -6
  107. package/dist/knowledge/strategy-manuals.js +1 -1
  108. package/dist/knowledge/template-loader.d.ts +48 -12
  109. package/dist/knowledge/template-loader.js +1 -1
  110. package/dist/knowledge/template-registry.js +1 -1
  111. package/dist/knowledge/template-scanner.js +1 -1
  112. package/dist/knowledge/tools-reference.js +1 -1
  113. package/dist/knowledge/workflow-guidance.d.ts +26 -0
  114. package/dist/knowledge/workflow-guidance.js +1 -1
  115. package/dist/monitor/MonitorLoop.js +1 -1
  116. package/dist/participation/allocation-advice.d.ts +38 -0
  117. package/dist/participation/allocation-advice.js +1 -0
  118. package/dist/participation/arbitrator-interest.js +1 -1
  119. package/dist/participation/customer-interest.js +1 -1
  120. package/dist/participation/merchant-interest.js +1 -1
  121. package/dist/participation/radar-core.d.ts +2 -0
  122. package/dist/persona/types.d.ts +3 -2
  123. package/dist/persona/types.js +1 -1
  124. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  125. package/dist/playbooks/service-build/intent-analyzer.js +1 -1
  126. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  127. package/dist/playbooks/service-build/merchant-guide.d.ts +70 -63
  128. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  129. package/dist/playbooks/service-build/migration-planner.js +1 -1
  130. package/dist/playbooks/service-build/mode-actions.d.ts +17 -1
  131. package/dist/playbooks/service-build/mode-actions.js +1 -1
  132. package/dist/playbooks/service-build/object-panorama.js +1 -1
  133. package/dist/playbooks/service-build/participation-radar.js +1 -1
  134. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  135. package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.js +1 -0
  136. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  137. package/dist/playbooks/service-build/semantic-graph.d.ts +1 -0
  138. package/dist/playbooks/service-build/semantic-graph.js +1 -1
  139. package/dist/playbooks/service-build/service-panorama.js +1 -1
  140. package/dist/playbooks/service-build/service-quote.d.ts +2 -0
  141. package/dist/playbooks/service-build/service-quote.js +1 -0
  142. package/dist/relationship/derivation.d.ts +1 -1
  143. package/dist/review/index.js +1 -1
  144. package/dist/role/profiles.js +1 -1
  145. package/dist/role/types.d.ts +2 -0
  146. package/dist/role/types.js +1 -1
  147. package/dist/safety/confirm-gate.js +1 -1
  148. package/dist/schema/benchmark-migration/index.d.ts +30 -8
  149. package/dist/schema/benchmark-migration/index.js +1 -1
  150. package/dist/schema/call/allocation.d.ts +10 -7
  151. package/dist/schema/call/arbitration.d.ts +1 -1
  152. package/dist/schema/call/arbitration.js +1 -1
  153. package/dist/schema/call/base.d.ts +5 -5
  154. package/dist/schema/call/base.js +1 -1
  155. package/dist/schema/call/bridge.d.ts +5 -9
  156. package/dist/schema/call/bridge.js +1 -1
  157. package/dist/schema/call/contact.d.ts +1 -1
  158. package/dist/schema/call/demand.d.ts +1 -1
  159. package/dist/schema/call/guard.d.ts +15 -15
  160. package/dist/schema/call/handler.js +1 -1
  161. package/dist/schema/call/machine.d.ts +58 -2
  162. package/dist/schema/call/machine.js +1 -1
  163. package/dist/schema/call/order.d.ts +1 -1
  164. package/dist/schema/call/order.js +1 -1
  165. package/dist/schema/call/payment.d.ts +1 -1
  166. package/dist/schema/call/payment.js +1 -1
  167. package/dist/schema/call/permission.d.ts +1 -1
  168. package/dist/schema/call/personal.d.ts +1 -1
  169. package/dist/schema/call/progress.d.ts +1 -1
  170. package/dist/schema/call/proof.d.ts +2 -2
  171. package/dist/schema/call/repository.d.ts +1 -1
  172. package/dist/schema/call/reward.d.ts +1 -1
  173. package/dist/schema/call/semantic.js +1 -1
  174. package/dist/schema/call/service.d.ts +87 -25
  175. package/dist/schema/call/service.js +1 -1
  176. package/dist/schema/call/treasury.d.ts +1 -1
  177. package/dist/schema/common/index.js +1 -1
  178. package/dist/schema/common/tokentype-short-probe.spec.js +1 -0
  179. package/dist/schema/evaluation/index.d.ts +14 -82
  180. package/dist/schema/evaluation/index.js +1 -1
  181. package/dist/schema/goal/index.d.ts +8 -41
  182. package/dist/schema/goal/planning.d.ts +22 -57
  183. package/dist/schema/goal/planning.js +1 -1
  184. package/dist/schema/industry-pack/index.d.ts +15 -0
  185. package/dist/schema/industry-pack/modes.d.ts +15 -0
  186. package/dist/schema/industry-pack/modes.js +1 -1
  187. package/dist/schema/intent-radar/index.d.ts +5 -20
  188. package/dist/schema/intent-radar/index.js +1 -1
  189. package/dist/schema/interaction/index.d.ts +1 -1
  190. package/dist/schema/keeper/index.d.ts +3 -0
  191. package/dist/schema/keeper/index.js +1 -1
  192. package/dist/schema/local/index.d.ts +577 -18
  193. package/dist/schema/local/index.js +1 -1
  194. package/dist/schema/messenger/index.d.ts +140 -20
  195. package/dist/schema/messenger/index.js +1 -1
  196. package/dist/schema/operations.d.ts +97 -35
  197. package/dist/schema/operations.js +1 -1
  198. package/dist/schema/persona/index.d.ts +811 -916
  199. package/dist/schema/persona/index.js +1 -1
  200. package/dist/schema/query/bi.d.ts +161 -8
  201. package/dist/schema/query/bi.js +1 -1
  202. package/dist/schema/query/index.d.ts +49 -30
  203. package/dist/schema/query/index.js +1 -1
  204. package/dist/schema/schema-query/index.d.ts +2 -2
  205. package/dist/schema/workflow/index.d.ts +2 -2
  206. package/dist/schema-query-impl/index.d.ts +1 -0
  207. package/dist/schema-query-impl/index.js +1 -1
  208. package/dist/schemas/account_operation.output.json +8 -4
  209. package/dist/schemas/account_operation.schema.json +1 -1
  210. package/dist/schemas/benchmark_migration_operation.output.json +116 -2
  211. package/dist/schemas/benchmark_migration_operation.schema.json +2 -10
  212. package/dist/schemas/bridge_operation.output.json +2 -2
  213. package/dist/schemas/bridge_operation.schema.json +2 -10
  214. package/dist/schemas/evaluation_operation.output.json +2 -0
  215. package/dist/schemas/evaluation_operation.schema.json +9 -70
  216. package/dist/schemas/goal_operation.schema.json +6 -39
  217. package/dist/schemas/index.json +7 -1
  218. package/dist/schemas/industry_pack_operation.output.json +87 -4
  219. package/dist/schemas/intent_radar.output.json +6 -20
  220. package/dist/schemas/intent_radar.schema.json +1 -0
  221. package/dist/schemas/keeper_operation.output.json +2 -2
  222. package/dist/schemas/keeper_operation.schema.json +9 -4
  223. package/dist/schemas/local_cache_operation.output.json +1536 -0
  224. package/dist/schemas/local_cache_operation.schema.json +101 -0
  225. package/dist/schemas/local_history_operation.output.json +2 -2
  226. package/dist/schemas/local_info_operation.output.json +2 -2
  227. package/dist/schemas/local_mark_operation.output.json +53 -38
  228. package/dist/schemas/local_mark_operation.schema.json +1 -0
  229. package/dist/schemas/messenger_operation.output.json +2 -2
  230. package/dist/schemas/messenger_operation.schema.json +358 -35
  231. package/dist/schemas/monitor_events.output.json +2 -2
  232. package/dist/schemas/monitor_subscription.output.json +2 -2
  233. package/dist/schemas/onchain_events.output.json +2 -2
  234. package/dist/schemas/onchain_operations.output.json +6 -6
  235. package/dist/schemas/onchain_operations.schema.json +237 -64
  236. package/dist/schemas/onchain_operations_allocation.schema.json +12 -11
  237. package/dist/schemas/onchain_operations_arbitration.schema.json +16 -16
  238. package/dist/schemas/onchain_operations_machine.schema.json +27 -5
  239. package/dist/schemas/onchain_operations_order.schema.json +1 -1
  240. package/dist/schemas/onchain_operations_payment.schema.json +3 -3
  241. package/dist/schemas/onchain_operations_reward.schema.json +2 -2
  242. package/dist/schemas/onchain_operations_service.schema.json +174 -24
  243. package/dist/schemas/onchain_operations_treasury.schema.json +2 -2
  244. package/dist/schemas/onchain_table_data.output.json +68 -4
  245. package/dist/schemas/persona_operation.output.json +11 -88
  246. package/dist/schemas/persona_operation.schema.json +4 -32
  247. package/dist/schemas/query_toolkit.output.json +331 -26
  248. package/dist/schemas/query_toolkit.schema.json +66 -2
  249. package/dist/tools/handlers/benchmark-migration.js +1 -1
  250. package/dist/tools/handlers/bridge.js +1 -1
  251. package/dist/tools/handlers/dispatch-expectations.spec.js +1 -1
  252. package/dist/tools/handlers/keeper.d.ts +1 -1
  253. package/dist/tools/handlers/local.d.ts +1 -0
  254. package/dist/tools/handlers/local.js +1 -1
  255. package/dist/tools/handlers/messenger.d.ts +9 -2
  256. package/dist/tools/handlers/messenger.js +1 -1
  257. package/dist/tools/handlers/name-resolution.d.ts +4 -0
  258. package/dist/tools/handlers/name-resolution.js +1 -0
  259. package/dist/tools/handlers/name-resolution.spec.js +1 -0
  260. package/dist/tools/handlers/onchain-name-registration.d.ts +37 -0
  261. package/dist/tools/handlers/onchain-name-registration.js +1 -0
  262. package/dist/tools/handlers/onchain-name-registration.spec.js +1 -0
  263. package/dist/tools/handlers/onchain.d.ts +1 -0
  264. package/dist/tools/handlers/onchain.js +1 -1
  265. package/dist/tools/handlers/query.d.ts +1 -0
  266. package/dist/tools/handlers/query.js +1 -1
  267. package/dist/tools/handlers/schema-query.js +1 -1
  268. package/dist/tools/index.js +1 -1
  269. package/dist/tools/move-fn-index.gen.js +1 -1
  270. package/dist/tools/registry/business.js +1 -1
  271. package/dist/tools/registry/local.js +1 -1
  272. package/dist/tools/sanitize-description-roundtrip.spec.js +1 -0
  273. package/dist/tools/sanitize-output.d.ts +1 -0
  274. package/dist/tools/sanitize-output.js +1 -1
  275. package/dist/tools/wrap.js +1 -1
  276. package/package.json +2 -2
  277. package/dist/knowledge/alloc-audit-policy.spec.js +0 -1
  278. package/dist/knowledge/event-semantics.spec.js +0 -1
  279. package/dist/knowledge/facts-sync.spec.js +0 -1
  280. package/dist/knowledge/guard-design-patterns.spec.js +0 -1
  281. package/dist/knowledge/guard-eval.spec.js +0 -1
  282. package/dist/knowledge/rule-node-analyzers.spec.d.ts +0 -1
  283. package/dist/knowledge/rule-node-analyzers.spec.js +0 -1
  284. package/dist/knowledge/safety-rules.extract-amount.spec.d.ts +0 -1
  285. package/dist/knowledge/safety-rules.extract-amount.spec.js +0 -1
  286. package/dist/knowledge/template-loader.spec.d.ts +0 -1
  287. package/dist/knowledge/template-loader.spec.js +0 -1
  288. package/dist/knowledge/template-scanner.spec.d.ts +0 -1
  289. package/dist/knowledge/template-scanner.spec.js +0 -1
  290. /package/dist/{knowledge/alloc-audit-policy.spec.d.ts → playbooks/service-build/reverse-mapping-refund-p0-5.spec.d.ts} +0 -0
  291. /package/dist/{knowledge/event-semantics.spec.d.ts → schema/common/tokentype-short-probe.spec.d.ts} +0 -0
  292. /package/dist/{knowledge/facts-sync.spec.d.ts → tools/handlers/name-resolution.spec.d.ts} +0 -0
  293. /package/dist/{knowledge/guard-design-patterns.spec.d.ts → tools/handlers/onchain-name-registration.spec.d.ts} +0 -0
  294. /package/dist/{knowledge/guard-eval.spec.d.ts → tools/sanitize-description-roundtrip.spec.d.ts} +0 -0
@@ -1 +1 @@
1
- import{describe,it,expect}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{buildViewport,runAnalyzers,runNodeAnalyzers,adaptNodeAnalyzer,listAnalyzers,registerAnalyzer,findingWhere}from'./index.js';describe('findingWhere',()=>{it('renders\x20R4\x20as\x20machine\x20+\x20node\x20names\x20(no\x20::node::\x20grammar,\x20no\x20R4:\x20prefix)',()=>{expect(findingWhere({'id':'R4:myshop_machine:myshop_machine::node::Order\x20Confirmed→myshop_machine::node::Order\x20Cancel'}))['toBe']('myshop_machine:\x20Order\x20Confirmed\x20→\x20Order\x20Cancel');}),it('renders\x20R7/R2\x20as\x20object\x20kind\x20+\x20name',()=>{expect(findingWhere({'id':'R7:reward:0x1f2e'}))['toBe']('Reward\x200x1f2e'),expect(findingWhere({'id':'R7:treasury:0xabc'}))['toBe']('Treasury\x200xabc'),expect(findingWhere({'id':'R2:0x14519d'}))['toBe']('0x14519d');}),it('falls\x20back\x20to\x20the\x20finding\x20title\x20for\x20unknown\x20id\x20shapes',()=>{expect(findingWhere({'id':'R1:weird','title':'Arb\x20permission\x20shared\x20with\x20the\x20merchant'}))['toBe']('Arb\x20permission\x20shared\x20with\x20the\x20merchant');});});const FAMILY={'eoa.permission':'R','permission.core_binding':'R','permission.entity':'W','service.order':'R','service.machine':'F','service.buy_guard':'F','machine.permission':'F','machine.node':'W','wf.transition':'W','wf.forward_guard':'W','order.allocation':'F','demand.guard':'R','demand.presenter':'R','arbitration.voting_guard':'F','arb.arbitration_service':'F','arb.voter':'S'};class GB{['nodes']=new Map();['edges']=[];['out']=new Map();['inc']=new Map();['truncations']=[];['eoa'](a){return this['nodes']['set'](a,{'id':a,'kind':'eoa','state':'fetched','origins':[],'depth':0x0}),this;}['obj'](a,b,c,d){return this['nodes']['set'](a,{'id':a,'kind':'object','objectType':b,'state':'fetched','origins':[],'depth':0x1,'raw':{'object':a,'type':b,...d?{'type_raw':d}:{},'data':c}}),this;}['edge'](a,b,c,d,f,g=![]){const h={'id':a+'|'+b+'→'+c+(d?.['forward']?'|'+d['forward']:''),'schema':a,'family':FAMILY[a]??'F','from':b,'to':c,'retention':f??(FAMILY[a]==='R'?'bounded_exact':'complete'),'observedAt':0x1,...d?{'payload':d}:{},...g?{'truncated':!![]}:{}};return this['edges']['push'](h),(this['out']['get'](b)??this['out']['set'](b,[])['get'](b))['push'](h),(this['inc']['get'](c)??this['inc']['set'](c,[])['get'](c))['push'](h),h;}['trunc'](a,b,c){return this['truncations']['push']({'nodeId':a,'schema':b,'observed':c,'limit':0x1450}),this;}['build'](a='0xseed'){return{'network':ENTRYPOINT['Mainnet'],'seed':a,'builtAt':0x1,'nodes':this['nodes'],'edges':this['edges'],'out':this['out'],'inc':this['inc'],'gaps':[],'truncations':this['truncations'],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}['vp'](a='0xseed',b='neutral'){return buildViewport(this['build'](a),a,b);}}const ids=a=>a['map'](b=>b['id']);describe('analyze\x20—\x20registry',()=>{it('ships\x20the\x2021\x20rules\x20(R1-7/A1-3/O1-3/G1-3\x20+\x20anti-cheat\x20AC1-4\x20+\x20proposal.gap)',()=>{expect(listAnalyzers()['sort']())['toEqual'](['R1','R2','R3','R4','R5','R6','R7','A1','A2','A3','O1','O2','O3','G1','G2','G3','AC1','AC2','AC3','AC4','proposal.gap']['sort']());}),it('is\x20fail-soft:\x20a\x20throwing\x20analyzer\x20never\x20aborts\x20the\x20suite',()=>{registerAnalyzer({'id':'__boom','kind':'risk','run':()=>{throw new Error('boom');}});const a=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['vp'](),b=runAnalyzers(a,{'only':['__boom','R6']});expect(ids(b))['toContain']('R6:0xs1'),expect(b['find'](c=>c['id']['startsWith']('__boom')))['toBeUndefined']();}),it('adapts\x20single-object\x20legacy\x20rules\x20through\x20the\x20NodeAnalyzer\x20bridge',()=>{const a=adaptNodeAnalyzer({'id':'legacy-lock','kind':'risk','objectType':'Service','inspect':e=>{const f=e['raw']['data']??{};return f['setting_lock_duration']==='0'?[{'title':'Lock','detail':'d','suggestion':'s','roles':['merchant']}]:[];}}),b=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['vp'](),c=runNodeAnalyzers(b,[a]);expect(c)['toHaveLength'](0x1),expect(c[0x0]['id'])['toBe']('legacy-lock:0xs1#0'),expect(c[0x0]['kind'])['toBe']('risk');});}),describe('analyze\x20—\x20risk\x20rules',()=>{it('R6\x20flags\x20published\x20services\x20without\x20a\x20setting\x20lock',()=>{const a=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['obj']('0xs2','Service',{'bPublished':!![],'setting_lock_duration':'2592000000'})['obj']('0xs3','Service',{'bPublished':![],'setting_lock_duration':'0'})['vp'](),b=runAnalyzers(a,{'only':['R6']});expect(ids(b))['toEqual'](['R6:0xs1']);}),it('R7\x20emits\x20CRITICAL\x20for\x20object\x20users\x20when\x20a\x20Treasury\x20has\x20mounted\x20external\x20withdraw\x20Guards',()=>{const a=new GB();a['obj']('0xt1','Treasury',{'external_withdraw_guard':[{'guard':'0xg1','identifier':0x0,'store_from_id':0x0}]}),a['obj']('0xt2','Treasury',{'external_withdraw_guard':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:treasury:0xt1']),expect(b[0x0]['severity'])['toBe']('critical'),expect(b[0x0]['detail'])['toContain']('code\x2010');}),it('R7\x20emits\x20CRITICAL\x20for\x20object\x20users\x20when\x20a\x20Reward\x20has\x20mounted\x20claim\x20Guards',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1'}]}),a['obj']('0xr2','Reward',{'guards':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('critical'),expect(b[0x0]['detail'])['toContain']('GuardIdentifier');}),it('R7\x20downgrades\x20to\x20info\x20when\x20every\x20payout\x20slot\x20is\x20provably\x20bound\x20(guard\x20defs\x20fetched)',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1','recipient':'0xmerchant'}]}),a['obj']('0xg1','Guard',{'root':{'type':'true'},'table':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('info'),expect(b[0x0]['title'])['toContain']('downgraded\x20hint'),expect(b[0x0]['detail'])['toContain']('1\x20blocked,\x200\x20viable');}),it('R7\x20keeps\x20CRITICAL\x20when\x20a\x20fetched\x20guard\x20leaves\x20the\x20payout\x20slot\x20viable',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1','recipient':'Signer'}]}),a['obj']('0xg1','Guard',{'root':{'type':'true'},'table':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('critical');}),it('R7\x20carries\x20drill-through\x20objects\x20—\x20the\x20FULL\x20reward\x20address\x20from\x20path/detail',()=>{const a='0x1a77893aaa0f0000000000000000000000000000000000000000000000aa1234',b=new GB();b['obj'](a,'Reward',{'guards':[{'guard':'0xg1'}]});const c=runAnalyzers(b['vp'](),{'only':['R7']});expect(c)['toHaveLength'](0x1),expect(c[0x0]['objects'])['toEqual']([a]);}),it('R2\x20measures\x20the\x20compensation\x20fund\x20against\x203x\x20windowed\x20order\x20volume',()=>{const a=new GB();a['obj']('0xs1','Service',{'bPublished':!![],'compensation_fund':'100'}),a['obj']('0xo1','Order',{'amount':'100'}),a['obj']('0xo2','Order',{'amount':'100'}),a['edge']('service.order','0xs1','0xo1',undefined,'bounded_window'),a['edge']('service.order','0xs1','0xo2',undefined,'bounded_window',!![]);const b=runAnalyzers(a['vp'](),{'only':['R2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['severity'])['toBe']('high'),expect(b[0x0]['confidence'])['toBe']('windowed'),expect(b[0x0]['window']?.['limit'])['toBe'](0x1450),expect(b[0x0]['detail'])['toContain']('{fund}'),expect(b[0x0]['detail'])['not']['toContain']('base\x20units'),expect(b[0x0]['amounts']?.['map'](c=>c['key']))['toEqual'](['fund','amount','needed']),expect(b[0x0]['amounts']?.['every'](c=>c['raw']==='100'||c['raw']==='200'||c['raw']==='600'))['toBe'](!![]);}),it('R1\x20flags\x20one\x20EOA\x20controlling\x20a\x20shop\x20and\x20an\x20arbitration\x20service\x20across\x20distinct\x20permissions',()=>{const a=new GB();a['eoa']('0xe1'),a['obj']('0xp1','Permission',{'owner':'0xe1'}),a['obj']('0xp2','Permission',{'owner':'0xe1'}),a['obj']('0xs1','Service',{}),a['obj']('0xa1','Arbitration',{'fee':'0'}),a['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x3}),a['edge']('eoa.permission','0xe1','0xp2',{'roleBits':0x3}),a['edge']('permission.core_binding','0xp1','0xs1'),a['edge']('permission.core_binding','0xp2','0xa1');const b=runAnalyzers(a['vp'](),{'only':['R1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['severity'])['toBe']('high');const c=new GB();c['eoa']('0xe1')['obj']('0xp1','Permission',{})['obj']('0xs1','Service',{})['obj']('0xa1','Arbitration',{'fee':'0'}),c['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x3}),c['edge']('permission.core_binding','0xp1','0xs1'),c['edge']('permission.core_binding','0xp1','0xa1'),expect(runAnalyzers(c['vp'](),{'only':['R1']}))['toHaveLength'](0x0);}),it('R3\x20flags\x20concentrated\x20control\x20of\x20core\x20objects',()=>{const a=new GB();a['eoa']('0xe1')['obj']('0xp1','Permission',{}),a['obj']('0xs1','Service',{})['obj']('0xs2','Service',{})['obj']('0xm1','Machine',{}),a['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x1});for(const c of['0xs1','0xs2','0xm1'])a['edge']('permission.core_binding','0xp1',c);const b=runAnalyzers(a['vp'](),{'only':['R3']});expect(ids(b))['toEqual'](['R3:0xe1']);}),it('R4\x20flags\x20a\x20unique\x20operator\x20with\x20no\x20backup\x20guard\x20on\x20a\x20terminal-entering\x20forward',()=>{const a=new GB();a['obj']('0xm1','Machine',{'bPublished':!![]}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::delivered',{'node':'delivered','prevNode':'paid','forward':'go','namedOperator':'alice'});const b=runAnalyzers(a['vp'](),{'only':['R4']});expect(b)['toHaveLength'](0x1);const c=new GB();c['obj']('0xm1','Machine',{'bPublished':!![]}),c['edge']('wf.transition','0xm1::node::paid','0xm1::node::delivered',{'node':'delivered','prevNode':'paid','forward':'go','namedOperator':'alice','guard':'0xg1'}),expect(runAnalyzers(c['vp'](),{'only':['R4']}))['toHaveLength'](0x0);}),it('R5\x20reports\x20window\x20truncations\x20as\x20downgraded\x20meta\x20findings',()=>{const a=new GB()['obj']('0xs1','Service',{})['trunc']('0xs1','service.order',0x1450),b=runAnalyzers(a['vp'](),{'only':['R5']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['confidence'])['toBe']('windowed'),expect(b[0x0]['window'])['toEqual']({'observed':0x1450,'limit':0x1450});});}),describe('analyze\x20—\x20arbitrage\x20rules',()=>{it('A1\x20detects\x20rate-basis\x20mismatch,\x20surplus\x20duplication\x20and\x20missing\x20max',()=>{const a=new GB();a['obj']('0xal1','Allocation',{'allocators':[{'guard':'0xg1','max':null,'sharing':[{'who':'0xa','mode':0x0,'sharing':'100'}]},{'guard':'0xg2','sharing':[{'who':'0xb','mode':0x1,'sharing':'9000'}]},{'guard':'0xg3','sharing':[{'who':'0xc','mode':0x2}]},{'guard':'0xg4','sharing':[{'who':'0xd','mode':0x2}]}]});const b=runAnalyzers(a['vp'](),{'only':['A1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('9000'),expect(b[0x0]['detail'])['toContain']('max'),expect(b[0x0]['detail'])['toContain']('Surplus');}),it('A2\x20flags\x20transferable\x20fixed\x20long-window\x20discounts\x20without\x20a\x20benchmark',()=>{const a=new GB();a['obj']('0xd1','Discount',{'discount_type':0x1,'benchmark':null,'transferable':!![],'time_start':'0','time_end':String(0x1fn*0x18n*0x3cn*0x3cn*0x3e8n)});const b=runAnalyzers(a['vp'](),{'only':['A2']});expect(b)['toHaveLength'](0x1);const c=new GB();c['obj']('0xd2','Discount',{'discount_type':0x1,'benchmark':null,'transferable':![],'time_start':'0','time_end':String(0x1fn*0x18n*0x3cn*0x3cn*0x3e8n)}),expect(runAnalyzers(c['vp'](),{'only':['A2']}))['toHaveLength'](0x0);}),it('A3\x20flags\x20zero-fee/no-usage-guard\x20arbitration\x20and\x20reports\x20CoinWrapper\x20custody',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'0','usage_guard':null,'voting_guard':[]}),a['obj']('0xcw1','Payment',{},'0x2::payment::CoinWrapper<0x2::wow::WOW>');const b=runAnalyzers(a['vp'](),{'only':['A3']});expect(ids(b)['sort']())['toEqual'](['A3:0xa1','A3:coinwrapper']),expect(b['find'](c=>c['id']==='A3:coinwrapper')['detail'])['toContain']('0x2::wow::WOW');});}),describe('analyze\x20—\x20opportunity\x20rules',()=>{it('O1\x20surfaces\x20scarce-presenter\x20demands\x20with\x20structurally\x20matching\x20services',()=>{const a=new GB();a['obj']('0xdm1','Demand',{'guards':[{'guard':'0xg1'}]}),a['edge']('demand.guard','0xdm1','0xg1'),a['obj']('0xs1','Service',{'bPublished':!![]}),a['obj']('0xm1','Machine',{}),a['edge']('service.machine','0xs1','0xm1'),a['edge']('wf.forward_guard','0xm1::node::paid','0xg1');const b=runAnalyzers(a['vp'](),{'only':['O1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('0xs1'),a['eoa']('0u1')['eoa']('0u2'),a['edge']('demand.presenter','0xdm1','0u1',{'service':'0xs1'}),a['edge']('demand.presenter','0xdm1','0u2',{'service':'0xs1'}),expect(runAnalyzers(a['vp'](),{'only':['O1']}))['toHaveLength'](0x0);}),it('O2\x20reports\x20graph\x20supply/demand\x20density',()=>{const a=new GB();a['obj']('0xs1','Service',{'bPublished':!![],'bPaused':![]}),a['obj']('0xs2','Service',{'bPublished':![]}),a['obj']('0xd1','Demand',{});const b=runAnalyzers(a['vp'](),{'only':['O2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('2\x20Service(s)'),expect(b[0x0]['detail'])['toContain']('1\x20open\x20demand(s)');}),it('O3\x20lists\x20operator-less\x20forwards\x20as\x20workflow\x20slots',()=>{const a=new GB();a['obj']('0xm1','Machine',{}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::done',{'node':'done','prevNode':'paid','forward':'auto','namedOperator':null,'permissionIndex':null,'guard':'0xg1'});const b=runAnalyzers(a['vp'](),{'only':['O3']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('paid:auto');});}),describe('analyze\x20—\x20game\x20rules',()=>{it('G1\x20reports\x20all-vote\x20vs\x20weighted\x20structures\x20plus\x20observed\x20case\x20weights',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'0','voting_guard':[]}),a['obj']('0xcase1','Arb',{'voted':[{'voter':'0u1','weight':0x1},{'voter':'0u2','weight':0x2}]}),a['edge']('arb.arbitration_service','0xcase1','0xa1');const b=runAnalyzers(a['vp'](),{'only':['G1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('open\x20to\x20all\x20members'),expect(b[0x0]['detail'])['toContain']('w1x1'),expect(b[0x0]['detail'])['toContain']('w2x1');}),it('G2\x20marks\x20a\x20named-operator\x20forward\x20as\x20a\x20pool-of-one\x20hold-up\x20point',()=>{const a=new GB();a['obj']('0xm1','Machine',{}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::done',{'node':'done','prevNode':'paid','forward':'sign','namedOperator':'bob'});const b=runAnalyzers(a['vp'](),{'only':['G2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['id'])['toContain']('paid:sign');}),it('G3\x20emits\x20the\x20relief\x20parameter\x20matrix\x20for\x20every\x20arbitration\x20service',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'5','usage_guard':'0xg1','voting_guard':[{'guard':'0xg2'}]});const b=runAnalyzers(a['vp'](),{'only':['G3']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('fee=5'),expect(b[0x0]['detail'])['toContain']('30-day');});}),describe('analyze\x20—\x20anti-cheat\x20rules\x20(AC1-AC4)',()=>{function a(c,d,e,f){c['eoa'](d),c['edge']('eoa.permission',d,e,{'roleBits':0x1|0x2}),c['edge']('permission.core_binding',e,f);}function b(c,d,e,f){c['obj'](e,'Order',f),c['edge']('service.order',d,e,undefined,'bounded_window'),c['edge']('order.builder',e,String(f['builder']));}it('AC1\x20flags\x20window\x20orders\x20whose\x20buyer\x20controls\x20the\x20selling\x20Service',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(c,'0u1','0p1','0xs1'),b(c,'0xs1','0o1',{'builder':'0u1','service':'0xs1','amount':'100'});const d=runAnalyzers(c['vp'](),{'only':['AC1']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['severity'])['toBe']('high'),expect(d[0x0]['confidence'])['toBe']('windowed'),expect(d[0x0]['id'])['toContain']('0o1');const e=new GB();e['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(e,'0u1','0p1','0xs1'),b(e,'0xs1','0o1',{'builder':'0u2','service':'0xs1','amount':'100'}),expect(runAnalyzers(e['vp'](),{'only':['AC1']}))['toEqual']([]);}),it('AC2\x20flags\x20reciprocal\x20buying\x20between\x20two\x20controlled\x20Services',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),c['obj']('0xs2','Service',{'bPublished':!![],'machine':'0xm2'}),a(c,'0u1','0p1','0xs1'),a(c,'0u2','0p2','0xs2'),b(c,'0xs1','0o1',{'builder':'0u2','service':'0xs1','amount':'100'}),b(c,'0xs2','0o2',{'builder':'0u1','service':'0xs2','amount':'100'});const d=runAnalyzers(c['vp'](),{'only':['AC2']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['severity'])['toBe']('medium'),expect(d[0x0]['id'])['toContain']('0o1'),expect(d[0x0]['id'])['toContain']('0o2');}),it('AC3\x20flags\x20completed\x20positive-amount\x20orders\x20without\x20Allocation,\x20but\x20not\x20zero-amount\x20orders',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(c,'0u1','0p1','0xs1'),b(c,'0xs1','0opaid',{'builder':'0u9','service':'0xs1','amount':'100'}),b(c,'0xs1','0ofree',{'builder':'0u8','service':'0xs1','amount':'0'});const d=runAnalyzers(c['vp'](),{'only':['AC3']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['id'])['toContain']('0opaid'),expect(d[0x0]['id'])['not']['toContain']('0ofree'),c['edge']('order.allocation','0opaid','0al1'),expect(runAnalyzers(c['vp'](),{'only':['AC3']}))['toEqual']([]);}),it('AC4\x20surfaces\x20shell-merchant\x20shapes\x20only\x20for\x20published\x20Services',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'arbitrations':[],'compensation_fund':'0'});const d=runAnalyzers(c['vp'](),{'only':['AC4']});expect(ids(d)['sort']())['toEqual'](['AC4:0xs1:shell_no_arbitration','AC4:0xs1:shell_no_machine']['sort']());const e=new GB();e['obj']('0xs2','Service',{'bPublished':!![],'arbitrations':[],'compensation_fund':'500'});const f=runAnalyzers(e['vp'](),{'only':['AC4']});expect(f['map'](h=>h['severity'])['sort']())['toEqual'](['high','low','medium']['sort']());const g=new GB();g['obj']('0xs3','Service',{'bPublished':![],'arbitrations':[],'compensation_fund':'500'}),expect(runAnalyzers(g['vp'](),{'only':['AC4']}))['toEqual']([]);});});
1
+ import{describe,it,expect}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{buildViewport,runAnalyzers,runNodeAnalyzers,adaptNodeAnalyzer,listAnalyzers,registerAnalyzer,findingWhere}from'./index.js';describe('findingWhere',()=>{it('renders\x20R4\x20as\x20machine\x20+\x20node\x20names\x20(no\x20::node::\x20grammar,\x20no\x20R4:\x20prefix)',()=>{expect(findingWhere({'id':'R4:myshop_machine:myshop_machine::node::Order\x20Confirmed→myshop_machine::node::Order\x20Cancel'}))['toBe']('myshop_machine:\x20Order\x20Confirmed\x20→\x20Order\x20Cancel');}),it('renders\x20R7/R2\x20as\x20object\x20kind\x20+\x20name',()=>{expect(findingWhere({'id':'R7:reward:0x1f2e'}))['toBe']('Reward\x200x1f2e'),expect(findingWhere({'id':'R7:treasury:0xabc'}))['toBe']('Treasury\x200xabc'),expect(findingWhere({'id':'R2:0x14519d'}))['toBe']('0x14519d');}),it('falls\x20back\x20to\x20the\x20finding\x20title\x20for\x20unknown\x20id\x20shapes',()=>{expect(findingWhere({'id':'R1:weird','title':'Arb\x20permission\x20shared\x20with\x20the\x20merchant'}))['toBe']('Arb\x20permission\x20shared\x20with\x20the\x20merchant');});});const FAMILY={'eoa.permission':'R','permission.core_binding':'R','permission.entity':'W','service.order':'R','service.machine':'F','service.buy_guard':'F','machine.permission':'F','machine.node':'W','wf.transition':'W','wf.forward_guard':'W','order.allocation':'F','demand.guard':'R','demand.presenter':'R','arbitration.voting_guard':'F','arb.arbitration_service':'F','arb.voter':'S'};class GB{['nodes']=new Map();['edges']=[];['out']=new Map();['inc']=new Map();['truncations']=[];['eoa'](a){return this['nodes']['set'](a,{'id':a,'kind':'eoa','state':'fetched','origins':[],'depth':0x0}),this;}['obj'](a,b,c,d){return this['nodes']['set'](a,{'id':a,'kind':'object','objectType':b,'state':'fetched','origins':[],'depth':0x1,'raw':{'object':a,'type':b,...d?{'type_raw':d}:{},'data':c}}),this;}['edge'](a,b,c,d,f,g=![]){const h={'id':a+'|'+b+'→'+c+(d?.['forward']?'|'+d['forward']:''),'schema':a,'family':FAMILY[a]??'F','from':b,'to':c,'retention':f??(FAMILY[a]==='R'?'bounded_exact':'complete'),'observedAt':0x1,...d?{'payload':d}:{},...g?{'truncated':!![]}:{}};return this['edges']['push'](h),(this['out']['get'](b)??this['out']['set'](b,[])['get'](b))['push'](h),(this['inc']['get'](c)??this['inc']['set'](c,[])['get'](c))['push'](h),h;}['trunc'](a,b,c){return this['truncations']['push']({'nodeId':a,'schema':b,'observed':c,'limit':0x1450}),this;}['build'](a='0xseed'){return{'network':ENTRYPOINT['Mainnet'],'seed':a,'builtAt':0x1,'nodes':this['nodes'],'edges':this['edges'],'out':this['out'],'inc':this['inc'],'gaps':[],'truncations':this['truncations'],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}['vp'](a='0xseed',b='neutral'){return buildViewport(this['build'](a),a,b);}}const ids=a=>a['map'](b=>b['id']);describe('analyze\x20—\x20registry',()=>{it('ships\x20the\x2022\x20rules\x20(R1-7/A1-4/O1-3/G1-3\x20+\x20anti-cheat\x20AC1-4\x20+\x20proposal.gap)',()=>{expect(listAnalyzers()['sort']())['toEqual'](['R1','R2','R3','R4','R5','R6','R7','A1','A2','A3','A4','O1','O2','O3','G1','G2','G3','AC1','AC2','AC3','AC4','proposal.gap']['sort']());}),it('is\x20fail-soft:\x20a\x20throwing\x20analyzer\x20never\x20aborts\x20the\x20suite',()=>{registerAnalyzer({'id':'__boom','kind':'risk','run':()=>{throw new Error('boom');}});const a=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['vp'](),b=runAnalyzers(a,{'only':['__boom','R6']});expect(ids(b))['toContain']('R6:0xs1'),expect(b['find'](c=>c['id']['startsWith']('__boom')))['toBeUndefined']();}),it('adapts\x20single-object\x20legacy\x20rules\x20through\x20the\x20NodeAnalyzer\x20bridge',()=>{const a=adaptNodeAnalyzer({'id':'legacy-lock','kind':'risk','objectType':'Service','inspect':e=>{const f=e['raw']['data']??{};return f['setting_lock_duration']==='0'?[{'title':'Lock','detail':'d','suggestion':'s','roles':['merchant']}]:[];}}),b=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['vp'](),c=runNodeAnalyzers(b,[a]);expect(c)['toHaveLength'](0x1),expect(c[0x0]['id'])['toBe']('legacy-lock:0xs1#0'),expect(c[0x0]['kind'])['toBe']('risk');});}),describe('analyze\x20—\x20risk\x20rules',()=>{it('R6\x20flags\x20published\x20services\x20without\x20a\x20setting\x20lock',()=>{const a=new GB()['obj']('0xs1','Service',{'bPublished':!![],'setting_lock_duration':'0'})['obj']('0xs2','Service',{'bPublished':!![],'setting_lock_duration':'2592000000'})['obj']('0xs3','Service',{'bPublished':![],'setting_lock_duration':'0'})['vp'](),b=runAnalyzers(a,{'only':['R6']});expect(ids(b))['toEqual'](['R6:0xs1']);}),it('R7\x20emits\x20CRITICAL\x20for\x20object\x20users\x20when\x20a\x20Treasury\x20has\x20mounted\x20external\x20withdraw\x20Guards',()=>{const a=new GB();a['obj']('0xt1','Treasury',{'external_withdraw_guard':[{'guard':'0xg1','identifier':0x0,'store_from_id':0x0}]}),a['obj']('0xt2','Treasury',{'external_withdraw_guard':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:treasury:0xt1']),expect(b[0x0]['severity'])['toBe']('critical'),expect(b[0x0]['detail'])['toContain']('code\x2010');}),it('R7\x20emits\x20CRITICAL\x20for\x20object\x20users\x20when\x20a\x20Reward\x20has\x20mounted\x20claim\x20Guards',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1'}]}),a['obj']('0xr2','Reward',{'guards':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('critical'),expect(b[0x0]['detail'])['toContain']('GuardIdentifier');}),it('R7\x20downgrades\x20to\x20info\x20when\x20every\x20payout\x20slot\x20is\x20provably\x20bound\x20(guard\x20defs\x20fetched)',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1','recipient':'0xmerchant'}]}),a['obj']('0xg1','Guard',{'root':{'type':'true'},'table':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('info'),expect(b[0x0]['title'])['toContain']('downgraded\x20hint'),expect(b[0x0]['detail'])['toContain']('1\x20blocked,\x200\x20viable');}),it('R7\x20keeps\x20CRITICAL\x20when\x20a\x20fetched\x20guard\x20leaves\x20the\x20payout\x20slot\x20viable',()=>{const a=new GB();a['obj']('0xr1','Reward',{'guards':[{'guard':'0xg1','recipient':'Signer'}]}),a['obj']('0xg1','Guard',{'root':{'type':'true'},'table':[]});const b=runAnalyzers(a['vp'](),{'only':['R7']});expect(ids(b))['toEqual'](['R7:reward:0xr1']),expect(b[0x0]['severity'])['toBe']('critical');}),it('R7\x20carries\x20drill-through\x20objects\x20—\x20the\x20FULL\x20reward\x20address\x20from\x20path/detail',()=>{const a='0x1a77893aaa0f0000000000000000000000000000000000000000000000aa1234',b=new GB();b['obj'](a,'Reward',{'guards':[{'guard':'0xg1'}]});const c=runAnalyzers(b['vp'](),{'only':['R7']});expect(c)['toHaveLength'](0x1),expect(c[0x0]['objects'])['toEqual']([a]);}),it('R2\x20measures\x20the\x20compensation\x20fund\x20against\x203x\x20windowed\x20order\x20volume',()=>{const a=new GB();a['obj']('0xs1','Service',{'bPublished':!![],'compensation_fund':'100'}),a['obj']('0xo1','Order',{'amount':'100'}),a['obj']('0xo2','Order',{'amount':'100'}),a['edge']('service.order','0xs1','0xo1',undefined,'bounded_window'),a['edge']('service.order','0xs1','0xo2',undefined,'bounded_window',!![]);const b=runAnalyzers(a['vp'](),{'only':['R2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['severity'])['toBe']('high'),expect(b[0x0]['confidence'])['toBe']('windowed'),expect(b[0x0]['window']?.['limit'])['toBe'](0x1450),expect(b[0x0]['detail'])['toContain']('{fund}'),expect(b[0x0]['detail'])['not']['toContain']('base\x20units'),expect(b[0x0]['amounts']?.['map'](c=>c['key']))['toEqual'](['fund','amount','needed']),expect(b[0x0]['amounts']?.['every'](c=>c['raw']==='100'||c['raw']==='200'||c['raw']==='600'))['toBe'](!![]);}),it('R1\x20flags\x20one\x20EOA\x20controlling\x20a\x20shop\x20and\x20an\x20arbitration\x20service\x20across\x20distinct\x20permissions',()=>{const a=new GB();a['eoa']('0xe1'),a['obj']('0xp1','Permission',{'owner':'0xe1'}),a['obj']('0xp2','Permission',{'owner':'0xe1'}),a['obj']('0xs1','Service',{}),a['obj']('0xa1','Arbitration',{'fee':'0'}),a['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x3}),a['edge']('eoa.permission','0xe1','0xp2',{'roleBits':0x3}),a['edge']('permission.core_binding','0xp1','0xs1'),a['edge']('permission.core_binding','0xp2','0xa1');const b=runAnalyzers(a['vp'](),{'only':['R1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['severity'])['toBe']('high');const c=new GB();c['eoa']('0xe1')['obj']('0xp1','Permission',{})['obj']('0xs1','Service',{})['obj']('0xa1','Arbitration',{'fee':'0'}),c['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x3}),c['edge']('permission.core_binding','0xp1','0xs1'),c['edge']('permission.core_binding','0xp1','0xa1'),expect(runAnalyzers(c['vp'](),{'only':['R1']}))['toHaveLength'](0x0);}),it('R3\x20flags\x20concentrated\x20control\x20of\x20core\x20objects',()=>{const a=new GB();a['eoa']('0xe1')['obj']('0xp1','Permission',{}),a['obj']('0xs1','Service',{})['obj']('0xs2','Service',{})['obj']('0xm1','Machine',{}),a['edge']('eoa.permission','0xe1','0xp1',{'roleBits':0x1});for(const c of['0xs1','0xs2','0xm1'])a['edge']('permission.core_binding','0xp1',c);const b=runAnalyzers(a['vp'](),{'only':['R3']});expect(ids(b))['toEqual'](['R3:0xe1']);}),it('R4\x20flags\x20a\x20unique\x20operator\x20with\x20no\x20backup\x20guard\x20on\x20a\x20terminal-entering\x20forward',()=>{const a=new GB();a['obj']('0xm1','Machine',{'bPublished':!![]}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::delivered',{'node':'delivered','prevNode':'paid','forward':'go','namedOperator':'alice'});const b=runAnalyzers(a['vp'](),{'only':['R4']});expect(b)['toHaveLength'](0x1);const c=new GB();c['obj']('0xm1','Machine',{'bPublished':!![]}),c['edge']('wf.transition','0xm1::node::paid','0xm1::node::delivered',{'node':'delivered','prevNode':'paid','forward':'go','namedOperator':'alice','guard':'0xg1'}),expect(runAnalyzers(c['vp'](),{'only':['R4']}))['toHaveLength'](0x0);}),it('R5\x20reports\x20window\x20truncations\x20as\x20downgraded\x20meta\x20findings',()=>{const a=new GB()['obj']('0xs1','Service',{})['trunc']('0xs1','service.order',0x1450),b=runAnalyzers(a['vp'](),{'only':['R5']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['confidence'])['toBe']('windowed'),expect(b[0x0]['window'])['toEqual']({'observed':0x1450,'limit':0x1450});});}),describe('analyze\x20—\x20arbitrage\x20rules',()=>{it('A1\x20detects\x20rate-basis\x20mismatch,\x20surplus\x20duplication\x20and\x20missing\x20max',()=>{const a=new GB();a['obj']('0xal1','Allocation',{'allocators':[{'guard':'0xg1','max':null,'sharing':[{'who':'0xa','mode':0x0,'sharing':'100'}]},{'guard':'0xg2','sharing':[{'who':'0xb','mode':0x1,'sharing':'9000'}]},{'guard':'0xg3','sharing':[{'who':'0xc','mode':0x2}]},{'guard':'0xg4','sharing':[{'who':'0xd','mode':0x2}]}]});const b=runAnalyzers(a['vp'](),{'only':['A1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('9000'),expect(b[0x0]['detail'])['toContain']('max'),expect(b[0x0]['detail'])['toContain']('Surplus');}),it('A1\x20fires\x20on\x20the\x20real\x20on-chain\x20container\x20shape\x20{threshold,\x20allocators:[…]}',()=>{const a=new GB();a['obj']('0xal2','Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':'0xg2','sharing':[{'who':'0xb','mode':0x1,'sharing':'9000'}]}]}});const b=runAnalyzers(a['vp'](),{'only':['A1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('9000');}),it('A4\x20detects\x20Surplus-then-Rate\x20drain\x20across\x20distinct\x20guards',()=>{const a=new GB();a['obj']('0xal3','Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':'0xgsettle','sharing':[{'who':'0xmerchant','mode':0x1,'sharing':'9000'},{'who':'0xplatform','mode':0x2}]},{'guard':'0xgrefund','sharing':[{'who':'0xbuyer','mode':0x1,'sharing':'10000'}]}]},'payment_info':{'for_object':'0xorder1'},'balance':'1000000'});const b=runAnalyzers(a['vp'](),{'only':['A4']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['id'])['toBe']('A4:drain:0xal3'),expect(b[0x0]['detail'])['toContain']('0xgrefund');}),it('A4\x20flags\x20unanchored\x20GuardIdentifier\x20recipients',()=>{const a=new GB();a['obj']('0xal4','Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':'0xgpay','sharing':[{'who':{'GuardIdentifier':0x1},'mode':0x1,'sharing':'10000'}]}]},'balance':'500'});const b=runAnalyzers(a['vp'](),{'only':['A4']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['id'])['toBe']('A4:unanchored:0xal4');}),it('A4\x20flags\x20settlement\x20deadlock:\x20completed\x20order\x20on\x20an\x20allocator-less\x20pool',()=>{const a=new GB();a['obj']('0xm1','Machine',{}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::completed',{'node':'completed','prevNode':'paid','forward':'settle'}),a['obj']('0xpr9','Progress',{'current':'completed','machine':'0xm1'}),a['obj']('0xord9','Order',{'machine':'0xm1','progress':'0xpr9','amount':'1000'}),a['obj']('0xal5','Allocation',{'allocators':{'threshold':0x1,'allocators':[]},'balance':'1000'}),a['edge']('order.allocation','0xord9','0xal5');const b=runAnalyzers(a['vp'](),{'only':['A4']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['id'])['toBe']('A4:deadlock:0xal5:0xord9'),expect(b[0x0]['severity'])['toBe']('critical');}),it('A2\x20flags\x20transferable\x20fixed\x20long-window\x20discounts\x20without\x20a\x20benchmark',()=>{const a=new GB();a['obj']('0xd1','Discount',{'discount_type':0x1,'benchmark':null,'transferable':!![],'time_start':'0','time_end':String(0x1fn*0x18n*0x3cn*0x3cn*0x3e8n)});const b=runAnalyzers(a['vp'](),{'only':['A2']});expect(b)['toHaveLength'](0x1);const c=new GB();c['obj']('0xd2','Discount',{'discount_type':0x1,'benchmark':null,'transferable':![],'time_start':'0','time_end':String(0x1fn*0x18n*0x3cn*0x3cn*0x3e8n)}),expect(runAnalyzers(c['vp'](),{'only':['A2']}))['toHaveLength'](0x0);}),it('A3\x20flags\x20zero-fee/no-usage-guard\x20arbitration\x20and\x20reports\x20CoinWrapper\x20custody',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'0','usage_guard':null,'voting_guard':[]}),a['obj']('0xcw1','Payment',{},'0x2::payment::CoinWrapper<0x2::wow::WOW>');const b=runAnalyzers(a['vp'](),{'only':['A3']});expect(ids(b)['sort']())['toEqual'](['A3:0xa1','A3:coinwrapper']),expect(b['find'](c=>c['id']==='A3:coinwrapper')['detail'])['toContain']('0x2::wow::WOW');});}),describe('analyze\x20—\x20opportunity\x20rules',()=>{it('O1\x20surfaces\x20scarce-presenter\x20demands\x20with\x20structurally\x20matching\x20services',()=>{const a=new GB();a['obj']('0xdm1','Demand',{'guards':[{'guard':'0xg1'}]}),a['edge']('demand.guard','0xdm1','0xg1'),a['obj']('0xs1','Service',{'bPublished':!![]}),a['obj']('0xm1','Machine',{}),a['edge']('service.machine','0xs1','0xm1'),a['edge']('wf.forward_guard','0xm1::node::paid','0xg1');const b=runAnalyzers(a['vp'](),{'only':['O1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('0xs1'),a['eoa']('0u1')['eoa']('0u2'),a['edge']('demand.presenter','0xdm1','0u1',{'service':'0xs1'}),a['edge']('demand.presenter','0xdm1','0u2',{'service':'0xs1'}),expect(runAnalyzers(a['vp'](),{'only':['O1']}))['toHaveLength'](0x0);}),it('O2\x20reports\x20graph\x20supply/demand\x20density',()=>{const a=new GB();a['obj']('0xs1','Service',{'bPublished':!![],'bPaused':![]}),a['obj']('0xs2','Service',{'bPublished':![]}),a['obj']('0xd1','Demand',{});const b=runAnalyzers(a['vp'](),{'only':['O2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('2\x20Service(s)'),expect(b[0x0]['detail'])['toContain']('1\x20open\x20demand(s)');}),it('O3\x20lists\x20operator-less\x20forwards\x20as\x20workflow\x20slots',()=>{const a=new GB();a['obj']('0xm1','Machine',{}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::done',{'node':'done','prevNode':'paid','forward':'auto','namedOperator':null,'permissionIndex':null,'guard':'0xg1'});const b=runAnalyzers(a['vp'](),{'only':['O3']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('paid:auto');});}),describe('analyze\x20—\x20game\x20rules',()=>{it('G1\x20reports\x20all-vote\x20vs\x20weighted\x20structures\x20plus\x20observed\x20case\x20weights',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'0','voting_guard':[]}),a['obj']('0xcase1','Arb',{'voted':[{'voter':'0u1','weight':0x1},{'voter':'0u2','weight':0x2}]}),a['edge']('arb.arbitration_service','0xcase1','0xa1');const b=runAnalyzers(a['vp'](),{'only':['G1']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('open\x20to\x20all\x20members'),expect(b[0x0]['detail'])['toContain']('w1x1'),expect(b[0x0]['detail'])['toContain']('w2x1');}),it('G2\x20marks\x20a\x20named-operator\x20forward\x20as\x20a\x20pool-of-one\x20hold-up\x20point',()=>{const a=new GB();a['obj']('0xm1','Machine',{}),a['edge']('wf.transition','0xm1::node::paid','0xm1::node::done',{'node':'done','prevNode':'paid','forward':'sign','namedOperator':'bob'});const b=runAnalyzers(a['vp'](),{'only':['G2']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['id'])['toContain']('paid:sign');}),it('G3\x20emits\x20the\x20relief\x20parameter\x20matrix\x20for\x20every\x20arbitration\x20service',()=>{const a=new GB();a['obj']('0xa1','Arbitration',{'fee':'5','usage_guard':'0xg1','voting_guard':[{'guard':'0xg2'}]});const b=runAnalyzers(a['vp'](),{'only':['G3']});expect(b)['toHaveLength'](0x1),expect(b[0x0]['detail'])['toContain']('fee=5'),expect(b[0x0]['detail'])['toContain']('30-day');});}),describe('analyze\x20—\x20anti-cheat\x20rules\x20(AC1-AC4)',()=>{function a(c,d,e,f){c['eoa'](d),c['edge']('eoa.permission',d,e,{'roleBits':0x1|0x2}),c['edge']('permission.core_binding',e,f);}function b(c,d,e,f){c['obj'](e,'Order',f),c['edge']('service.order',d,e,undefined,'bounded_window'),c['edge']('order.builder',e,String(f['builder']));}it('AC1\x20flags\x20window\x20orders\x20whose\x20buyer\x20controls\x20the\x20selling\x20Service',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(c,'0u1','0p1','0xs1'),b(c,'0xs1','0o1',{'builder':'0u1','service':'0xs1','amount':'100'});const d=runAnalyzers(c['vp'](),{'only':['AC1']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['severity'])['toBe']('high'),expect(d[0x0]['confidence'])['toBe']('windowed'),expect(d[0x0]['id'])['toContain']('0o1');const e=new GB();e['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(e,'0u1','0p1','0xs1'),b(e,'0xs1','0o1',{'builder':'0u2','service':'0xs1','amount':'100'}),expect(runAnalyzers(e['vp'](),{'only':['AC1']}))['toEqual']([]);}),it('AC2\x20flags\x20reciprocal\x20buying\x20between\x20two\x20controlled\x20Services',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),c['obj']('0xs2','Service',{'bPublished':!![],'machine':'0xm2'}),a(c,'0u1','0p1','0xs1'),a(c,'0u2','0p2','0xs2'),b(c,'0xs1','0o1',{'builder':'0u2','service':'0xs1','amount':'100'}),b(c,'0xs2','0o2',{'builder':'0u1','service':'0xs2','amount':'100'});const d=runAnalyzers(c['vp'](),{'only':['AC2']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['severity'])['toBe']('medium'),expect(d[0x0]['id'])['toContain']('0o1'),expect(d[0x0]['id'])['toContain']('0o2');}),it('AC3\x20flags\x20completed\x20positive-amount\x20orders\x20without\x20Allocation,\x20but\x20not\x20zero-amount\x20orders',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'machine':'0xm1'}),a(c,'0u1','0p1','0xs1'),b(c,'0xs1','0opaid',{'builder':'0u9','service':'0xs1','amount':'100'}),b(c,'0xs1','0ofree',{'builder':'0u8','service':'0xs1','amount':'0'});const d=runAnalyzers(c['vp'](),{'only':['AC3']});expect(d)['toHaveLength'](0x1),expect(d[0x0]['id'])['toContain']('0opaid'),expect(d[0x0]['id'])['not']['toContain']('0ofree'),c['edge']('order.allocation','0opaid','0al1'),expect(runAnalyzers(c['vp'](),{'only':['AC3']}))['toEqual']([]);}),it('AC4\x20surfaces\x20shell-merchant\x20shapes\x20only\x20for\x20published\x20Services',()=>{const c=new GB();c['obj']('0xs1','Service',{'bPublished':!![],'arbitrations':[],'compensation_fund':'0'});const d=runAnalyzers(c['vp'](),{'only':['AC4']});expect(ids(d)['sort']())['toEqual'](['AC4:0xs1:shell_no_arbitration','AC4:0xs1:shell_no_machine']['sort']());const e=new GB();e['obj']('0xs2','Service',{'bPublished':!![],'arbitrations':[],'compensation_fund':'500'});const f=runAnalyzers(e['vp'](),{'only':['AC4']});expect(f['map'](h=>h['severity'])['sort']())['toEqual'](['high','low','medium']['sort']());const g=new GB();g['obj']('0xs3','Service',{'bPublished':![],'arbitrations':[],'compensation_fund':'500'}),expect(runAnalyzers(g['vp'](),{'only':['AC4']}))['toEqual']([]);});});
@@ -1 +1 @@
1
- import{PackageAddress,WOW_SINGLETON_IDS}from'@wowok/wowok';const EOA='EOA',ANY='ANY';export const EDGE_ID_REPOSITORY_POLICY_GUARD='repository.policy_guard';const F_EDGES=[{'id':'service.permission','family':'F','source':'Service','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b06','b09'],'label':'Permission\x20group\x20governing\x20who\x20may\x20operate\x20the\x20service\x20(must\x20differ\x20from\x20the\x20arbitration\x20permission,\x20E33\x20recusal\x20rule)'},{'id':'service.machine','family':'F','source':'Service','target':'Machine','cardinality':'0..1','read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b04'],'contract':{'field':'machine','frozenWhen':'after\x20publish','forbiddenActions':['set','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'service.move\x20machine_set_imp\x20/\x20machine_none_imp\x20(assert!(!bPublished))'},'label':'Workflow\x20template\x20the\x20shop\x20fulfills\x20orders\x20through\x20(chosen\x20at\x20publish,\x20permanently\x20frozen)'},{'id':'service.buy_guard','family':'F','source':'Service','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'buy_guard'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b01','b10'],'contract':{'field':'buy_guard','frozenWhen':null,'forbiddenActions':[],'allowedActions':['set','remove'],'unfreeze':null,'moveAnchor':'service.move\x20buy_guard_set_imp\x20/\x20buy_guard_none_imp\x20(no\x20assert!(!bPublished))'},'label':'Gate\x20every\x20buyer\x20must\x20pass\x20before\x20an\x20order\x20can\x20be\x20created'},{'id':'service.arbitration','family':'F','source':'Service','target':'Arbitration','cardinality':'N','read':{'kind':'fields','path':'arbitrations'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤20)','bridgeIds':['b06'],'contract':{'field':'arbitrations','frozenWhen':'after\x20publish','forbiddenActions':['remove','clear'],'allowedActions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','moveAnchor':'service.move\x20arbitration_remove_imp\x20/\x20arbitration_clear_imp\x20(assert_not_published)'},'label':'Dispute\x20venues\x20the\x20shop\x20designates\x20for\x20order\x20arbitration\x20(up\x20to\x2020;\x20removal\x20locked\x20after\x20publish)'},{'id':'service.reward','family':'F','source':'Service','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤20)','bridgeIds':['b07'],'contract':{'field':'rewards','frozenWhen':'after\x20publish','forbiddenActions':['remove','clear'],'allowedActions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','moveAnchor':'service.move\x20reward_remove_imp\x20/\x20reward_clear_imp\x20(assert_not_published)'},'label':'Reward\x20pools\x20funding\x20the\x20shop\x27s\x20promotions\x20and\x20rebates\x20(up\x20to\x2020;\x20removal\x20locked\x20after\x20publish)'},{'id':'service.repository','family':'F','source':'Service','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'repositories'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤100)','bridgeIds':['b02'],'contract':{'field':'repositories','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear'],'unfreeze':null,'moveAnchor':'service.move\x20repository_remove_imp\x20/\x20repository_clear_imp\x20(no\x20assert_not_published)'},'label':'Evidence\x20repositories\x20the\x20shop\x20stores\x20fulfillment\x20proofs\x20in\x20(up\x20to\x20100;\x20freely\x20editable\x20after\x20publish)'},{'id':'service.um','family':'F','source':'Service','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b11'],'label':'Shop\x20membership\x20book\x20—\x20the\x20roster\x20deciding\x20who\x20counts\x20as\x20a\x20shop\x20member\x20(messaging\x20and\x20member-gate\x20flows)'},{'id':'service.order_allocator_guard','family':'F','source':'Service','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['order_allocators','allocators'],'field':'guard'},'retention':'complete','evidence':'service.move\x20L175-194;\x20allocation.move\x20L194-200','bridgeIds':['b05'],'label':'Guards\x20gating\x20how\x20incoming\x20orders\x20split\x20across\x20allocation\x20pools\x20(order-allocator\x20triggers)'},{'id':'order.builder','family':'F','source':'Order','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'builder'},'retention':'complete','evidence':'order.move\x20L60-75\x20(owner;\x20SDK\x20builder)','bridgeIds':['b01'],'label':'Buyer\x20who\x20owns\x20the\x20order\x20(payer-side\x20principal;\x20SDK\x20names\x20the\x20field\x20builder)'},{'id':'order.agent','family':'F','source':'Order','target':EOA,'cardinality':'N','read':{'kind':'fields','path':'agent'},'retention':'complete','evidence':'order.move\x20L60-75,L179\x20(≤10)','label':'Merchant\x20agents\x20authorized\x20by\x20the\x20buyer\x20(<=10,\x20buyer\x20calls\x20agent_set)'},{'id':'order.service','family':'F','source':'Order','target':'Service','cardinality':0x1,'read':{'kind':'field','path':'service'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b01'],'label':'Shop\x20fulfilling\x20this\x20order\x20(frozen\x20purchase\x20snapshot\x20of\x20what\x20was\x20bought\x20and\x20from\x20whom)'},{'id':'order.machine','family':'F','source':'Order','target':'Machine','cardinality':'0..1','read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'order.move\x20L130\x20(machine⇒progress)','bridgeIds':['b01','b04'],'label':'Workflow\x20the\x20order\x20advances\x20through\x20(snapshot\x20of\x20the\x20shop\x27s\x20template\x20at\x20purchase\x20time)'},{'id':'order.progress','family':'F','source':'Order','target':'Progress','cardinality':'0..1','read':{'kind':'field','path':'progress'},'retention':'complete','evidence':'order.move\x20L130','bridgeIds':['b04'],'label':'Live\x20fulfillment\x20state\x20of\x20the\x20order\x20(which\x20workflow\x20node\x20it\x20currently\x20sits\x20at)'},{'id':'order.allocation','family':'F','source':'Order','target':'Allocation','cardinality':'0..1','read':{'kind':'field','path':'allocation'},'retention':'complete','evidence':'order.move\x20L130\x20(amount>0⇒allocation)','bridgeIds':['b05'],'label':'Allocation\x20pool\x20routing\x20this\x20order\x27s\x20payouts\x20(present\x20when\x20the\x20order\x20amount\x20>\x200)'},{'id':'order.discount','family':'F','source':'Order','target':'Discount','cardinality':'0..1','read':{'kind':'field','path':'discount'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b01'],'label':'Discount\x20the\x20shop\x20granted\x20on\x20this\x20order\x20(price\x20concession\x20of\x20record)'},{'id':'order.dispute','family':'F','source':'Order','target':'Arb','cardinality':'N','read':{'kind':'fields','path':'dispute'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b06'],'label':'Dispute\x20cases\x20raised\x20over\x20this\x20order\x20(each\x20case\x20may\x20claw\x20back\x20compensation)'},{'id':'order.claimed_by','family':'F','source':'Order','target':EOA,'cardinality':'0..1','read':{'kind':'field','path':'claimed_by'},'retention':'complete','evidence':'order.move\x20L86-96\x20(single-use)','bridgeIds':['b06'],'label':'Compensation\x20claimant\x20on\x20this\x20order\x20(single-use\x20slot;\x20marks\x20the\x20payout\x20as\x20consumed)'},{'id':'order.required_info','family':'F','source':'Order','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'required_info'},'retention':'complete','evidence':'order.move\x20L73,L77-80\x20(Option<address>:\x20IM\x20book\x20or\x20WTS\x20proof)','bridgeIds':['b11','b12'],'label':'Information\x20credential\x20the\x20shop\x20requires\x20after\x20the\x20order\x20(IM\x20book\x20or\x20WTS\x20proof)'},{'id':'discount.service','family':'F','source':'Discount','target':'Service','cardinality':0x1,'read':{'kind':'field','path':'service'},'retention':'complete','evidence':'service.move\x20L109-119\x20(service\x20L117)','bridgeIds':['b01'],'label':'Shop\x20that\x20issued\x20the\x20discount\x20(the\x20party\x20honoring\x20the\x20concession)'},{'id':'progress.machine','family':'F','source':'Progress','target':'Machine','cardinality':0x1,'read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'progress.move\x20L76-86','bridgeIds':['b04'],'contract':{'field':'machine','frozenWhen':'bound\x20at\x20creation','forbiddenActions':['set','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'progress.move\x20new_imp\x20(machine\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'},'label':'Workflow\x20the\x20progress\x20executes\x20(fixed\x20at\x20creation;\x20determines\x20the\x20node\x20graph)'},{'id':'progress.task','family':'F','source':'Progress','target':'Order','cardinality':'0..1','read':{'kind':'field','path':'task'},'retention':'complete','evidence':'progress.move\x20L76-86','bridgeIds':['b04'],'contract':{'field':'task','frozenWhen':'after\x20task_set','forbiddenActions':['set'],'allowedActions':[],'unfreeze':null,'moveAnchor':'progress.move\x20task_set_imp\x20(assert!\x20option::is_none\x20→\x20E_TASK_ALREADY_SET)'},'label':'Order\x20this\x20progress\x20fulfills\x20(set\x20once;\x20a\x20progress\x20serves\x20at\x20most\x20one\x20order)'},{'id':'progress.named_operator','family':'F','source':'Progress','target':EOA,'cardinality':'N','read':{'kind':'deep','segments':['namedOperator','operators'],'field':''},'retention':'complete','evidence':'progress.move\x20L76-86\x20(≤80)','bridgeIds':['b04'],'label':'Named\x20operators\x20allowed\x20to\x20advance\x20this\x20progress\x20(up\x20to\x2080;\x20runtime-delegated)'},{'id':'progress.context_repository','family':'F','source':'Progress','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'context_repositories'},'retention':'complete','evidence':'progress.move\x20L79,L199-208\x20(MAX_CONTEXT_REPOSITORY_COUNT)','bridgeIds':['b02','b04'],'label':'Runtime\x20evidence\x20repositories\x20consulted\x20while\x20fulfilling\x20the\x20order'},{'id':'machine.permission','family':'F','source':'Machine','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'machine.move\x20L299-308','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20run\x20and\x20advance\x20the\x20workflow'},{'id':'machine.consensus_repository','family':'F','source':'Machine','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'consensus_repositories'},'retention':'complete','evidence':'machine.move\x20L299-308','contract':{'field':'consensus_repositories','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear'],'unfreeze':null,'moveAnchor':'machine.move\x20consensus_repositories_remove_imp\x20(no\x20assert_not_published)'},'label':'Evidence\x20repositories\x20nodes\x20consult\x20to\x20reach\x20execution\x20consensus'},{'id':'machine.um','family':'F','source':'Machine','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'machine.move\x20L299-308','bridgeIds':['b11'],'label':'Workflow\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20participates\x20in\x20running\x20the\x20workflow'},{'id':'allocation.guard','family':'F','source':'Allocation','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['allocators','allocators'],'field':'guard'},'retention':'complete','evidence':'allocation.move\x20L194-200','bridgeIds':['b05'],'contract':{'field':'allocators','frozenWhen':'after\x20create\x20(share)','forbiddenActions':['add','remove','clear','set'],'allowedActions':[],'unfreeze':null,'moveAnchor':'allocation.move\x20create\x20(bound\x20via\x20new_with_balance;\x20no\x20mutation\x20entry)'},'label':'Guards\x20gating\x20each\x20payout\x20segment\x20of\x20the\x20pool\x20(release\x20conditions\x20per\x20allocator)'},{'id':'allocation.payment','family':'F','source':'Allocation','target':'Payment','cardinality':'N','read':{'kind':'fields','path':'payment'},'retention':'complete','evidence':'allocation.move\x20L196-202,L307-316','bridgeIds':['b05','b08'],'label':'Payment\x20receipts\x20emitted\x20by\x20this\x20allocation\x20pool'},{'id':'arbitration.permission','family':'F','source':'Arbitration','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b09'],'label':'Arbitration\x20service\x20permission\x20group\x20(must\x20differ\x20from\x20the\x20shop\x20permission,\x20E33)'},{'id':'arbitration.voting_guard','family':'F','source':'Arbitration','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'voting_guard','field':'guard'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b10'],'label':'Arbitration\x20voting\x20Guards\x20(empty\x20=\x20open\x20to\x20all\x20members)'},{'id':'arbitration.usage_guard','family':'F','source':'Arbitration','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'usage_guard'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b10'],'label':'Gate\x20a\x20party\x20must\x20pass\x20before\x20opening\x20a\x20case\x20at\x20this\x20arbitration\x20service'},{'id':'arbitration.um','family':'F','source':'Arbitration','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b11'],'label':'Arbitration\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20vote\x20on\x20dispute\x20cases\x20(open\x20voting)'},{'id':'arb.order','family':'F','source':'Arb','target':'Order','cardinality':0x1,'read':{'kind':'field','path':'order'},'retention':'complete','evidence':'arb.move\x20L96-111','bridgeIds':['b06'],'label':'Order\x20the\x20arbitration\x20case\x20is\x20about'},{'id':'arb.arbitration_service','family':'F','source':'Arb','target':'Arbitration','cardinality':'0..1','read':{'kind':'field','path':'arbitration'},'retention':'complete','evidence':'arb.move\x20L96-111','bridgeIds':['b06'],'label':'Arbitration\x20service\x20applied\x20to\x20the\x20case'},{'id':'arb.voter','family':'S','source':'Arb','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'voted','field':'voter'},'retention':'complete','evidence':'arb.move\x20L96-111\x20(voted≤520)','bridgeIds':['b06'],'label':'Actual\x20case\x20voters\x20and\x20weights\x20(<=520)'},{'id':'demand.permission','family':'F','source':'Demand','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b09'],'label':'Demand\x20permission\x20group\x20(the\x20demanding\x20side)'},{'id':'demand.guard','family':'F','source':'Demand','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guards','field':'guard'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b03','b10'],'label':'Demand\x20acceptance\x20Guards\x20(must\x20be\x20empty\x20for\x20a\x20bare\x20present)'},{'id':'demand.reward','family':'F','source':'Demand','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b07'],'label':'Escrowed\x20reward\x20pools\x20of\x20the\x20demand'},{'id':'demand.um','family':'F','source':'Demand','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b11'],'label':'Demand\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20act\x20on\x20the\x20demanding\x20side'},{'id':'reward.permission','family':'F','source':'Reward','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20configure\x20the\x20reward\x20pool'},{'id':'reward.guard','family':'F','source':'Reward','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guards','field':'guard'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b07'],'label':'Guards\x20a\x20claimant\x20must\x20pass\x20before\x20drawing\x20from\x20the\x20pool'},{'id':'reward.um','family':'F','source':'Reward','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b11'],'label':'Reward\x20membership\x20book\x20—\x20roster\x20of\x20members\x20eligible\x20under\x20member-gated\x20claim\x20rules'},{'id':'repository.permission','family':'F','source':'Repository','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'repository.move\x20(struct)','bridgeIds':['b02','b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20manage\x20the\x20repository'},{'id':'repository.reward','family':'F','source':'Repository','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'repository.move\x20(struct)','bridgeIds':['b07'],'label':'Reward\x20pools\x20held\x20by\x20the\x20repository'},{'id':'repository.um','family':'F','source':'Repository','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'repository.move\x20L461-468,L471-480','bridgeIds':['b11'],'label':'Repository\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20read\x20or\x20write\x20under\x20member\x20policies'},{'id':EDGE_ID_REPOSITORY_POLICY_GUARD,'family':'F','source':'Repository','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['policies','write_guard'],'field':'guard'},'retention':'complete','evidence':'repository.move\x20L106-113\x20(PolicyRule.write_guard),L516-570','bridgeIds':['b02','b10'],'label':'Write-policy\x20Guards\x20gating\x20evidence\x20writes\x20under\x20each\x20repository\x20policy'},{'id':'repository.quote_guard','family':'F','source':'Repository','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['policies'],'field':'quote_guard'},'retention':'complete','evidence':'repository.move\x20L106-113\x20(PolicyRule.quote_guard),L421-428','bridgeIds':['b02','b10'],'label':'Quote/read-policy\x20Guards\x20gating\x20evidence\x20reads\x20under\x20each\x20repository\x20policy'},{'id':'contact.permission','family':'F','source':'Contact','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'contact.move\x20L25-31','bridgeIds':['b09','b11'],'label':'Permission\x20group\x20governing\x20the\x20contact\x20book'},{'id':'contact.im','family':'F','source':'Contact','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'ims','field':'at'},'retention':'membership','evidence':'contact.move\x20L15,L18-29,L85-105\x20(MAX_IM_COUNT=200)','bridgeIds':['b11'],'contract':{'field':'ims','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear','update'],'unfreeze':null,'moveAnchor':'contact.move\x20im_add_imp\x20/\x20im_remove_imp\x20(roster\x20membership;\x20status/description\x20updatable)'},'label':'IM\x20member\x20entities\x20of\x20the\x20contact\x20book\x20(<=200;\x20membership\x20roster\x20carrying\x20status\x20and\x20join\x20time)'},{'id':'permission.admin','family':'F','source':'Permission','target':EOA,'cardinality':'N','read':{'kind':'fields','path':'admin'},'retention':'complete','evidence':'permission.move\x20L34-42\x20(admin\x20vector)','bridgeIds':['b09'],'label':'Admin\x20EOAs\x20who\x20can\x20mutate\x20the\x20permission\x20group\x27s\x20roles\x20(below\x20the\x20owner)'},{'id':'permission.owner','family':'F','source':'Permission','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'owner'},'retention':'complete','evidence':'permission.move\x20L34-42,L537-543','bridgeIds':['b09'],'contract':{'field':'owner','frozenWhen':null,'forbiddenActions':['add','remove','clear'],'allowedActions':['update'],'unfreeze':null,'moveAnchor':'permission.move\x20transfer\x20(assert_owner;\x20ownership\x20role\x20moves\x20with\x20it)'},'label':'Ultimate\x20owner\x20EOA\x20of\x20the\x20permission\x20group\x20(control-chain\x20root;\x20can\x20transfer\x20the\x20group)'},{'id':'permission.um','family':'F','source':'Permission','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'permission.move\x20L41,L562-571','bridgeIds':['b11'],'label':'Permission\x20group\x27s\x20membership\x20book\x20(who\x20receives\x20the\x20group\x27s\x20messages\x20and\x20notifications)'},{'id':'guard.relies','family':'F','source':'Guard','target':'Guard','cardinality':'N','read':{'kind':'fields','path':'relies'},'retention':'complete','evidence':'guard.move\x20L85-95\x20(≤4,\x20one\x20level)','bridgeIds':['b10'],'maxHops':0x1,'label':'Sub-Guards\x20the\x20Guard\x20relies\x20on\x20(<=4,\x20one\x20level;\x20relied\x20guards\x27\x20own\x20relies\x20are\x20not\x20consulted)'},{'id':'passport.signer','family':'F','source':'Passport','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'passport.move\x20L41-49,L94-98','bridgeIds':['b12'],'label':'Identity\x20that\x20verified\x20this\x20passport\x20(credential\x20consumed\x20per\x20transaction)'},{'id':'passport.guard','family':'F','source':'Passport','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guard','field':'guard'},'retention':'complete','evidence':'passport.move\x20L32-47','bridgeIds':['b10','b12'],'label':'Verification\x20tickets\x20the\x20passport\x20carries\x20(each\x20proving\x20a\x20Guard\x20passed)'},{'id':'passport.ticket_relies','family':'F','source':'Passport','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['guard','relies'],'field':'guard'},'retention':'complete','evidence':'passport.move\x20L32-38,L114-151','bridgeIds':['b10','b12'],'label':'Sub-Guards\x20a\x20verification\x20ticket\x20actually\x20evaluated\x20(ticket-level\x20dependency\x20fanout)'},{'id':'passport.impack','family':'F','source':'Passport','target':ANY,'cardinality':'N','read':{'kind':'fields','path':'impack'},'retention':'complete','evidence':'passport.move\x20L29,L46,L227-242','bridgeIds':['b12'],'label':'Business\x20objects\x20packed\x20into\x20the\x20passport\x20verification\x20context'},{'id':'proof.signer','family':'F','source':'Proof','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'proof.move\x20L14-25','bridgeIds':['b12'],'label':'Party\x20who\x20signed\x20the\x20WTS\x20evidence\x20(accountability\x20for\x20the\x20claim)'},{'id':'proof.about','family':'F','source':'Proof','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'about'},'retention':'complete','evidence':'proof.move\x20L14-25','bridgeIds':['b12'],'label':'Object\x20the\x20evidence\x20attests\x20to\x20(the\x20subject\x20of\x20the\x20WTS\x20claim)'},{'id':'treasury.permission','family':'F','source':'Treasury','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'treasury.move\x20L73-83','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20move\x20treasury\x20funds'},{'id':'treasury.um','family':'F','source':'Treasury','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'treasury.move\x20L82,L86-95,L504-510','bridgeIds':['b11'],'label':'Treasury\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20operate\x20treasury\x20flows\x20under\x20member\x20roles'},{'id':'treasury.deposit_guard','family':'F','source':'Treasury','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'external_deposit_guard','field':'guard'},'retention':'complete','evidence':'treasury.move\x20L61-65,L78,L138-194','bridgeIds':['b10'],'label':'Guards\x20authorized\x20to\x20release\x20external\x20deposits\x20into\x20the\x20treasury\x20(carries\x20identifier/store_from_id\x20slots)'},{'id':'treasury.withdraw_guard','family':'F','source':'Treasury','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'external_withdraw_guard','field':'guard'},'retention':'complete','evidence':'treasury.move\x20L67-71,L79,L197-250','bridgeIds':['b10'],'label':'Guards\x20authorized\x20to\x20pay\x20external\x20withdrawals\x20out\x20of\x20the\x20treasury\x20(pays\x20the\x20tx\x20sender\x20only;\x20carries\x20identifier/store_from_id\x20slots)'},{'id':'payment.signer','family':'F','source':'Payment','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'payment.move\x20L93-101,L111','bridgeIds':['b08'],'contract':{'field':'signer','frozenWhen':'after\x20create','forbiddenActions':['set','update','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'payment.move\x20new\x20(signer\x20=\x20tx_context::sender\x20at\x20creation)'},'label':'EOA\x20that\x20submitted\x20the\x20payment\x20(payer\x20of\x20record)'}],R_EDGES=[{'id':'eoa.permission','family':'R','source':EOA,'target':'Permission','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityPermission']},'retention':'membership','evidence':'entity_permission.move\x20L32\x20(bits\x201/2/4)','bridgeIds':['b09'],'label':'Permission\x20groups\x20the\x20account\x20currently\x20belongs\x20to\x20(membership;\x20disappears\x20on\x20removal)'},{'id':'eoa.order','family':'R','source':EOA,'target':'Order','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityOrder']},'retention':'bounded_window','evidence':'entity_order.move\x20L31\x20(FIFO\x205200)','bridgeIds':['b01'],'label':'Orders\x20the\x20account\x20joined\x20as\x20buyer/agent\x20(buyer\x20view,\x20FIFO\x205200)'},{'id':'eoa.contact','family':'R','source':EOA,'target':'Contact','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityContact']},'retention':'membership','evidence':'entity_contact.move\x20L24','bridgeIds':['b11'],'label':'Contact\x20books\x20the\x20account\x20currently\x20joined'},{'id':'permission.core_binding','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerCore']},'retention':'bounded_exact','evidence':'object_linker.move\x20L37,L88\x20(≤5200\x20aborts)','bridgeIds':['b09'],'label':'Business\x20objects\x20this\x20permission\x20group\x20governs\x20(Service/Demand/Machine/...;\x20exact\x20registry,\x20no\x20eviction)'},{'id':'permission.tx_binding','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerTx']},'retention':'bounded_window','evidence':'object_linker.move\x20L43\x20(FIFO\x205200\x20operational)','bridgeIds':['b09'],'label':'Objects\x20this\x20permission\x20group\x20has\x20acted\x20on\x20at\x20runtime\x20(FIFO\x205200;\x20oldest\x20evicted)'},{'id':'service.order','family':'R','source':'Service','target':'Order','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerTx'],'filterType':'Order'},'retention':'bounded_window','evidence':'object_linker.move\x20L43,L136-140\x20(FIFO\x205200)','bridgeIds':['b01'],'label':'Orders\x20the\x20shop\x20currently\x20retains\x20in\x20its\x20window\x20(FIFO\x205200,\x20oldest\x20evicted;\x20complete\x20history\x20via\x20the\x20event\x20channel)'},{'id':'target.vote','family':'S','source':ANY,'target':EOA,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['registrar']},'retention':'bounded_window','evidence':'registrar.move\x20L154-171\x20(ring\x205200,\x20bits\x200x02/0x04/0x08)','label':'Reputation\x20votes\x20the\x20address\x20has\x20received\x20(like/dislike/favor;\x20ring\x205200,\x20oldest\x20evicted)'},{'id':'entity.profile','family':'S','source':EOA,'target':EOA,'cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L146-152,L176-179,L236-242,L503-560\x20(AddressInfo\x20current\x20row;\x20description/records\x20mutable\x20by\x20the\x20entity)','label':'Self-published\x20entity\x20profile:\x20description,\x20registration\x20time\x20and\x20typed\x20records\x20(self-edge\x20carrying\x20row\x20attributes)'},{'id':'entity.referrer','family':'S','source':EOA,'target':EOA,'cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L149,L236-242\x20(AddressInfo.referrer\x20Option<address>;\x20invitation\x20chain)','label':'Account\x20that\x20referred\x20this\x20entity\x20onto\x20the\x20platform\x20(invitation\x20upline)'},{'id':'entity.resource','family':'S','source':EOA,'target':'Resource','cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L150,L236-241,L265-319\x20(AddressInfo.resource\x20Option<address>;\x20transferable/destroyable)','label':'On-chain\x20Resource\x20identity\x20object\x20held\x20by\x20this\x20entity\x20(transferable,\x20may\x20be\x20destroyed)'}],TABLE_EDGES=[{'id':'permission.entity','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'table','rowType':'PermissionPerm'},'retention':'membership','evidence':'permission.move\x20L34-42\x20(entity\x20may\x20be\x20EOA\x20or\x20Guard\x20address)','bridgeIds':['b04','b09'],'label':'Entity-table\x20members\x20of\x20the\x20permission\x20group\x20(EOA\x20or\x20Guard,\x20carrying\x20perm\x20index\x20bits)'},{'id':'demand.presenter','family':'R','source':'Demand','target':EOA,'cardinality':'N','read':{'kind':'table','rowType':'DemandPresenter'},'retention':'membership','evidence':'demand.move\x20L46-54,L74\x20(presenters\x20table)','bridgeIds':['b03'],'label':'Suppliers\x20that\x20presented\x20to\x20the\x20demand,\x20with\x20acceptance_score'},{'id':'demand.presenter_service','family':'R','source':'Demand','target':'Service','cardinality':'N','read':{'kind':'table','rowType':'DemandPresenter'},'retention':'membership','evidence':'demand.move\x20L46-54,L79-118\x20(ServiceInfo.service\x20Option)','bridgeIds':['b03'],'label':'Services\x20proposed\x20by\x20presenters\x20on\x20the\x20demand\x20(same-row\x20co-edge\x20of\x20demand.presenter;\x20absent\x20for\x20bare\x20presents)'},{'id':'machine.node','family':'W','source':'Machine','target':'MachineNode','cardinality':'N','read':{'kind':'table','rowType':'MachineNode'},'retention':'complete','evidence':'machine.move\x20L299-308\x20(immutable\x20after\x20publish)','bridgeIds':['b04'],'contract':{'field':'nodes','frozenWhen':'after\x20publish','forbiddenActions':['add','remove','update'],'allowedActions':[],'unfreeze':null,'moveAnchor':'machine.move\x20node_add_imp\x20/\x20node_remove_imp\x20/\x20node_rename_imp\x20(assert_not_published)'},'label':'The\x20workflow\x27s\x20step\x20table\x20(full\x20node\x20graph;\x20frozen\x20at\x20publish)'},{'id':'treasury.record','family':'M','source':'Treasury','target':'Payment','cardinality':'N','read':{'kind':'table','rowType':'TreasuryRecord'},'retention':'complete','evidence':'treasury.move\x20L39-46,L77\x20(history:\x20ParentTable<address,Record>,\x20key\x20=\x20Payment;\x20append-only)','bridgeIds':['b08'],'label':'Ledger\x20entries\x20tying\x20each\x20withdrawal/deposit/receive\x20Payment\x20to\x20its\x20op\x20code,\x20signer,\x20external\x20guard\x20and\x20amount'},{'id':'reward.claim','family':'M','source':'Reward','target':EOA,'cardinality':'N','read':{'kind':'table','rowType':'RewardClaimRecord'},'retention':'complete','evidence':'reward.move\x20L117-138,L180-193\x20(record:\x20ParentTable<address,RecipientRecord>;\x20key\x20=\x20claimant)','bridgeIds':['b07'],'label':'Claimants\x20against\x20the\x20reward\x20pool,\x20with\x20lifetime\x20total\x20and\x20per-guard\x20claim\x20legs'},{'id':'repository.data_about','family':'F','source':'Repository','target':ANY,'cardinality':'N','read':{'kind':'table','rowType':'RepositoryData'},'retention':'membership','evidence':'repository.move\x20L455-465,L161-173\x20(data:\x20ParentTable<DataKey{id,key},\x20vector<u8>>)','bridgeIds':['b02'],'label':'Business\x20objects\x20the\x20stored\x20evidence\x20rows\x20are\x20about\x20(DataKey.id,\x20carrying\x20the\x20row\x20key\x20name)'}],W_EDGES=[{'id':'wf.transition','family':'W','source':'MachineNode','target':'MachineNode','cardinality':'N','read':{'kind':'derived','producer':'machineRows'},'retention':'derived','evidence':'machine.move\x20L101\x20NodePair,L269','bridgeIds':['b04'],'label':'Directed\x20hand-off\x20from\x20workflow\x20step\x20to\x20step\x20(carries\x20the\x20advance\x20threshold)'},{'id':'wf.forward_guard','family':'W','source':'MachineNode','target':'Guard','cardinality':'N','read':{'kind':'derived','producer':'machineRows'},'retention':'derived','evidence':'machine.move\x20L63\x20Forward','bridgeIds':['b04','b05','b10','b12'],'label':'Guards\x20evaluated\x20after\x20a\x20step\x20advances\x20(where\x20supply-chain\x20payouts\x20and\x20downstream\x20allocations\x20trigger)'}],M_EDGES=[{'id':'payment.recipient','family':'M','source':'Payment','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'record','field':'recipient'},'retention':'complete','evidence':'payment.move\x20L93-101\x20(Revenue≤200)','bridgeIds':['b05','b08'],'label':'Payment\x20allocation\x20recipients\x20(with\x20amounts,\x20leg\x20by\x20leg)'},{'id':'payment.from_object','family':'M','source':'Payment','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'from_object'},'retention':'complete','evidence':'payment.move\x20L149-161\x20(framework-only)','bridgeIds':['b05','b08'],'label':'Funding\x20source\x20pool\x20(Treasury/Allocation/Service;\x20framework-settable\x20only)'},{'id':'payment.for_object','family':'M','source':'Payment','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'info.for_object'},'retention':'complete','evidence':'payment.move\x20L93-101\x20(info\x20routing\x20hint)','bridgeIds':['b05','b08'],'label':'Business\x20routing\x20object\x20(user-settable)'},{'id':'payment.for_guard','family':'M','source':'Payment','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'info.for_guard'},'retention':'complete','evidence':'payment.move\x20L93-101','bridgeIds':['b05'],'label':'Guard\x20the\x20payment\x20was\x20routed\x20under\x20(user-settable\x20routing\x20context)'},{'id':'allocation.for_object','family':'M','source':'Allocation','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'payment_info.for_object'},'retention':'complete','evidence':'allocation.move\x20L200;\x20payment.move\x20L66-71','bridgeIds':['b05','b08'],'label':'Business\x20object\x20the\x20pool\x27s\x20payouts\x20are\x20routed\x20for'},{'id':'allocation.for_guard','family':'M','source':'Allocation','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'payment_info.for_guard'},'retention':'complete','evidence':'allocation.move\x20L200;\x20payment.move\x20L66-71','bridgeIds':['b05','b08'],'label':'Gate\x20context\x20the\x20pool\x27s\x20payouts\x20are\x20routed\x20under'}],EVENT_EDGES=[{'id':'service.order_history','family':'E','source':'Service','target':'Order','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::order::NewOrderEvent','matchField':'service','targetField':'object'},'retention':'event_full','evidence':'order.move\x20L51-58,L142\x20(NewOrderEvent:\x20object/service/progress/discount/allocation/amount)','label':'Every\x20order\x20ever\x20created\x20in\x20the\x20shop\x20—\x20complete\x20event\x20stream,\x20beyond\x20the\x20FIFO\x205200\x20shop-order\x20window'},{'id':'eoa.order_history','family':'E','source':EOA,'target':'Order','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::order::NewOrderEvent','matchSender':!![],'targetField':'object'},'retention':'event_full','evidence':'order.move\x20L51-58,L142\x20+\x20indexer\x20tx\x20sender\x20(the\x20transacting\x20buyer)','label':'Orders\x20the\x20account\x20created\x20as\x20the\x20transacting\x20buyer\x20—\x20complete\x20event\x20stream,\x20beyond\x20the\x20FIFO\x205200\x20buyer\x20window'},{'id':'arb.history','family':'E','source':'Arbitration','target':'Arb','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::arb::ArbEvent','matchField':'arbitration','targetField':'object'},'retention':'event_full','evidence':'arb.move\x20L33-43,L122,L227\x20(ArbEvent:\x20case/arbitration/order/status/indemnity)','label':'Every\x20dispute\x20case\x20the\x20arbitration\x20service\x20ever\x20handled\x20—\x20complete\x20event\x20stream;\x20latest\x20status\x20transition\x20wins\x20per\x20case'}];export const EDGE_SCHEMAS=[...F_EDGES,...R_EDGES,...TABLE_EDGES,...W_EDGES,...M_EDGES,...EVENT_EDGES];export const EDGE_SCHEMA_BY_ID=new Map(EDGE_SCHEMAS['map'](a=>[a['id'],a]));export function outgoingSchemaIds(a){return EDGE_SCHEMAS['filter'](b=>b['source']===a||b['source']===ANY)['map'](b=>b['id']);}export const COVERED_OBJECT_TYPES=[...new Set(EDGE_SCHEMAS['flatMap'](a=>[a['source'],a['target']])['filter'](a=>a!==EOA&&a!==ANY&&a!=='MachineNode'))];
1
+ import{PackageAddress,WOW_SINGLETON_IDS}from'@wowok/wowok';const EOA='EOA',ANY='ANY';export const EDGE_ID_REPOSITORY_POLICY_GUARD='repository.policy_guard';const F_EDGES=[{'id':'service.permission','family':'F','source':'Service','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b06','b09'],'label':'Permission\x20group\x20governing\x20who\x20may\x20operate\x20the\x20service\x20(must\x20differ\x20from\x20the\x20arbitration\x20permission,\x20E33\x20recusal\x20rule)'},{'id':'service.machine','family':'F','source':'Service','target':'Machine','cardinality':'0..1','read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b04'],'contract':{'field':'machine','frozenWhen':'after\x20publish','forbiddenActions':['set','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'service.move\x20machine_set_imp\x20/\x20machine_none_imp\x20(assert!(!bPublished))'},'label':'Workflow\x20template\x20the\x20shop\x20fulfills\x20orders\x20through\x20(chosen\x20at\x20publish,\x20permanently\x20frozen)'},{'id':'service.buy_guard','family':'F','source':'Service','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'buy_guard'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b01','b10'],'contract':{'field':'buy_guard','frozenWhen':null,'forbiddenActions':[],'allowedActions':['set','remove'],'unfreeze':null,'moveAnchor':'service.move\x20buy_guard_set_imp\x20/\x20buy_guard_none_imp\x20(no\x20assert!(!bPublished))'},'label':'Gate\x20every\x20buyer\x20must\x20pass\x20before\x20an\x20order\x20can\x20be\x20created'},{'id':'service.arbitration','family':'F','source':'Service','target':'Arbitration','cardinality':'N','read':{'kind':'fields','path':'arbitrations'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤20)','bridgeIds':['b06'],'contract':{'field':'arbitrations','frozenWhen':'after\x20publish','forbiddenActions':['remove','clear'],'allowedActions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','moveAnchor':'service.move\x20arbitration_remove_imp\x20/\x20arbitration_clear_imp\x20(assert_not_published)'},'label':'Dispute\x20venues\x20the\x20shop\x20designates\x20for\x20order\x20arbitration\x20(up\x20to\x2020;\x20removal\x20locked\x20after\x20publish)'},{'id':'service.reward','family':'F','source':'Service','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤20)','bridgeIds':['b07'],'contract':{'field':'rewards','frozenWhen':'after\x20publish','forbiddenActions':['remove','clear'],'allowedActions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','moveAnchor':'service.move\x20reward_remove_imp\x20/\x20reward_clear_imp\x20(assert_not_published)'},'label':'Reward\x20pools\x20funding\x20the\x20shop\x27s\x20promotions\x20and\x20rebates\x20(up\x20to\x2020;\x20removal\x20locked\x20after\x20publish)'},{'id':'service.repository','family':'F','source':'Service','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'repositories'},'retention':'complete','evidence':'service.move\x20L175-194\x20(≤100)','bridgeIds':['b02'],'contract':{'field':'repositories','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear'],'unfreeze':null,'moveAnchor':'service.move\x20repository_remove_imp\x20/\x20repository_clear_imp\x20(no\x20assert_not_published)'},'label':'Evidence\x20repositories\x20the\x20shop\x20stores\x20fulfillment\x20proofs\x20in\x20(up\x20to\x20100;\x20freely\x20editable\x20after\x20publish)'},{'id':'service.um','family':'F','source':'Service','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'service.move\x20L175-194','bridgeIds':['b11'],'label':'Shop\x20membership\x20book\x20—\x20the\x20roster\x20deciding\x20who\x20counts\x20as\x20a\x20shop\x20member\x20(messaging\x20and\x20member-gate\x20flows)'},{'id':'service.order_allocator_guard','family':'F','source':'Service','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['order_allocators','allocators'],'field':'guard'},'retention':'complete','evidence':'service.move\x20L175-194;\x20allocation.move\x20L194-200','bridgeIds':['b05'],'label':'Guards\x20gating\x20how\x20incoming\x20orders\x20split\x20across\x20allocation\x20pools\x20(order-allocator\x20triggers)'},{'id':'order.builder','family':'F','source':'Order','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'builder'},'retention':'complete','evidence':'order.move\x20L60-75\x20(owner;\x20SDK\x20builder)','bridgeIds':['b01'],'label':'Buyer\x20who\x20owns\x20the\x20order\x20(payer-side\x20principal;\x20SDK\x20names\x20the\x20field\x20builder)'},{'id':'order.agent','family':'F','source':'Order','target':EOA,'cardinality':'N','read':{'kind':'fields','path':'agent'},'retention':'complete','evidence':'order.move\x20L60-75,L179\x20(≤10)','label':'Merchant\x20agents\x20authorized\x20by\x20the\x20buyer\x20(<=10,\x20buyer\x20calls\x20agent_set)'},{'id':'order.service','family':'F','source':'Order','target':'Service','cardinality':0x1,'read':{'kind':'field','path':'service'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b01'],'label':'Shop\x20fulfilling\x20this\x20order\x20(frozen\x20purchase\x20snapshot\x20of\x20what\x20was\x20bought\x20and\x20from\x20whom)'},{'id':'order.machine','family':'F','source':'Order','target':'Machine','cardinality':'0..1','read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'order.move\x20L130\x20(machine⇒progress)','bridgeIds':['b01','b04'],'label':'Workflow\x20the\x20order\x20advances\x20through\x20(snapshot\x20of\x20the\x20shop\x27s\x20template\x20at\x20purchase\x20time)'},{'id':'order.progress','family':'F','source':'Order','target':'Progress','cardinality':'0..1','read':{'kind':'field','path':'progress'},'retention':'complete','evidence':'order.move\x20L130','bridgeIds':['b04'],'label':'Live\x20fulfillment\x20state\x20of\x20the\x20order\x20(which\x20workflow\x20node\x20it\x20currently\x20sits\x20at)'},{'id':'order.allocation','family':'F','source':'Order','target':'Allocation','cardinality':'0..1','read':{'kind':'field','path':'allocation'},'retention':'complete','evidence':'order.move\x20L130\x20(amount>0⇒allocation)','bridgeIds':['b05'],'label':'Allocation\x20pool\x20routing\x20this\x20order\x27s\x20payouts\x20(present\x20when\x20the\x20order\x20amount\x20>\x200)'},{'id':'order.discount','family':'F','source':'Order','target':'Discount','cardinality':'0..1','read':{'kind':'field','path':'discount'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b01'],'label':'Discount\x20the\x20shop\x20granted\x20on\x20this\x20order\x20(price\x20concession\x20of\x20record)'},{'id':'order.dispute','family':'F','source':'Order','target':'Arb','cardinality':'N','read':{'kind':'fields','path':'dispute'},'retention':'complete','evidence':'order.move\x20L60-75','bridgeIds':['b06'],'label':'Dispute\x20cases\x20raised\x20over\x20this\x20order\x20(each\x20case\x20may\x20claw\x20back\x20compensation)'},{'id':'order.claimed_by','family':'F','source':'Order','target':EOA,'cardinality':'0..1','read':{'kind':'field','path':'claimed_by'},'retention':'complete','evidence':'order.move\x20L86-96\x20(single-use)','bridgeIds':['b06'],'label':'Compensation\x20claimant\x20on\x20this\x20order\x20(single-use\x20slot;\x20marks\x20the\x20payout\x20as\x20consumed)'},{'id':'order.required_info','family':'F','source':'Order','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'required_info'},'retention':'complete','evidence':'order.move\x20L73,L77-80\x20(Option<address>\x20im_or_proof:\x20the\x20merchant\x27s\x20IM\x20user\x20address\x20from\x20the\x20Service\x27s\x20Contact,\x20or\x20an\x20on-chain\x20WTS\x20Proof\x20object\x20address)','bridgeIds':['b11','b12'],'label':'Information\x20credential\x20the\x20shop\x20requires\x20after\x20the\x20order\x20(merchant\x20IM\x20address\x20or\x20WTS\x20proof)'},{'id':'discount.service','family':'F','source':'Discount','target':'Service','cardinality':0x1,'read':{'kind':'field','path':'service'},'retention':'complete','evidence':'service.move\x20L109-119\x20(service\x20L117)','bridgeIds':['b01'],'label':'Shop\x20that\x20issued\x20the\x20discount\x20(the\x20party\x20honoring\x20the\x20concession)'},{'id':'progress.machine','family':'F','source':'Progress','target':'Machine','cardinality':0x1,'read':{'kind':'field','path':'machine'},'retention':'complete','evidence':'progress.move\x20L76-86','bridgeIds':['b04'],'contract':{'field':'machine','frozenWhen':'bound\x20at\x20creation','forbiddenActions':['set','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'progress.move\x20new_imp\x20(machine\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'},'label':'Workflow\x20the\x20progress\x20executes\x20(fixed\x20at\x20creation;\x20determines\x20the\x20node\x20graph)'},{'id':'progress.task','family':'F','source':'Progress','target':'Order','cardinality':'0..1','read':{'kind':'field','path':'task'},'retention':'complete','evidence':'progress.move\x20L76-86','bridgeIds':['b04'],'contract':{'field':'task','frozenWhen':'after\x20task_set','forbiddenActions':['set'],'allowedActions':[],'unfreeze':null,'moveAnchor':'progress.move\x20task_set_imp\x20(assert!\x20option::is_none\x20→\x20E_TASK_ALREADY_SET)'},'label':'Order\x20this\x20progress\x20fulfills\x20(set\x20once;\x20a\x20progress\x20serves\x20at\x20most\x20one\x20order)'},{'id':'progress.named_operator','family':'F','source':'Progress','target':EOA,'cardinality':'N','read':{'kind':'deep','segments':['namedOperator','operators'],'field':''},'retention':'complete','evidence':'progress.move\x20L76-86\x20(≤80)','bridgeIds':['b04'],'label':'Named\x20operators\x20allowed\x20to\x20advance\x20this\x20progress\x20(up\x20to\x2080;\x20runtime-delegated)'},{'id':'progress.context_repository','family':'F','source':'Progress','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'context_repositories'},'retention':'complete','evidence':'progress.move\x20L79,L199-208\x20(MAX_CONTEXT_REPOSITORY_COUNT)','bridgeIds':['b02','b04'],'label':'Runtime\x20evidence\x20repositories\x20consulted\x20while\x20fulfilling\x20the\x20order'},{'id':'machine.permission','family':'F','source':'Machine','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'machine.move\x20L299-308','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20run\x20and\x20advance\x20the\x20workflow'},{'id':'machine.consensus_repository','family':'F','source':'Machine','target':'Repository','cardinality':'N','read':{'kind':'fields','path':'consensus_repositories'},'retention':'complete','evidence':'machine.move\x20L299-308','contract':{'field':'consensus_repositories','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear'],'unfreeze':null,'moveAnchor':'machine.move\x20consensus_repositories_remove_imp\x20(no\x20assert_not_published)'},'label':'Evidence\x20repositories\x20nodes\x20consult\x20to\x20reach\x20execution\x20consensus'},{'id':'machine.um','family':'F','source':'Machine','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'machine.move\x20L299-308','bridgeIds':['b11'],'label':'Workflow\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20participates\x20in\x20running\x20the\x20workflow'},{'id':'allocation.guard','family':'F','source':'Allocation','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['allocators','allocators'],'field':'guard'},'retention':'complete','evidence':'allocation.move\x20L194-200','bridgeIds':['b05'],'contract':{'field':'allocators','frozenWhen':'after\x20create\x20(share)','forbiddenActions':['add','remove','clear','set'],'allowedActions':[],'unfreeze':null,'moveAnchor':'allocation.move\x20create\x20(bound\x20via\x20new_with_balance;\x20no\x20mutation\x20entry)'},'label':'Guards\x20gating\x20each\x20payout\x20segment\x20of\x20the\x20pool\x20(release\x20conditions\x20per\x20allocator)'},{'id':'allocation.payment','family':'F','source':'Allocation','target':'Payment','cardinality':'N','read':{'kind':'fields','path':'payment'},'retention':'complete','evidence':'allocation.move\x20L196-202,L307-316','bridgeIds':['b05','b08'],'label':'Payment\x20receipts\x20emitted\x20by\x20this\x20allocation\x20pool'},{'id':'arbitration.permission','family':'F','source':'Arbitration','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b09'],'label':'Arbitration\x20service\x20permission\x20group\x20(must\x20differ\x20from\x20the\x20shop\x20permission,\x20E33)'},{'id':'arbitration.voting_guard','family':'F','source':'Arbitration','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'voting_guard','field':'guard'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b10'],'label':'Arbitration\x20voting\x20Guards\x20(empty\x20=\x20open\x20to\x20all\x20members)'},{'id':'arbitration.usage_guard','family':'F','source':'Arbitration','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'usage_guard'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b06','b10'],'label':'Gate\x20a\x20party\x20must\x20pass\x20before\x20opening\x20a\x20case\x20at\x20this\x20arbitration\x20service'},{'id':'arbitration.um','family':'F','source':'Arbitration','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'arbitration.move\x20L48-59','bridgeIds':['b11'],'label':'Arbitration\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20vote\x20on\x20dispute\x20cases\x20(open\x20voting)'},{'id':'arb.order','family':'F','source':'Arb','target':'Order','cardinality':0x1,'read':{'kind':'field','path':'order'},'retention':'complete','evidence':'arb.move\x20L96-111','bridgeIds':['b06'],'label':'Order\x20the\x20arbitration\x20case\x20is\x20about'},{'id':'arb.arbitration_service','family':'F','source':'Arb','target':'Arbitration','cardinality':'0..1','read':{'kind':'field','path':'arbitration'},'retention':'complete','evidence':'arb.move\x20L96-111','bridgeIds':['b06'],'label':'Arbitration\x20service\x20applied\x20to\x20the\x20case'},{'id':'arb.voter','family':'S','source':'Arb','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'voted','field':'voter'},'retention':'complete','evidence':'arb.move\x20L96-111\x20(voted≤520)','bridgeIds':['b06'],'label':'Actual\x20case\x20voters\x20and\x20weights\x20(<=520)'},{'id':'demand.permission','family':'F','source':'Demand','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b09'],'label':'Demand\x20permission\x20group\x20(the\x20demanding\x20side)'},{'id':'demand.guard','family':'F','source':'Demand','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guards','field':'guard'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b03','b10'],'label':'Demand\x20acceptance\x20Guards\x20(must\x20be\x20empty\x20for\x20a\x20bare\x20present)'},{'id':'demand.reward','family':'F','source':'Demand','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b07'],'label':'Escrowed\x20reward\x20pools\x20of\x20the\x20demand'},{'id':'demand.um','family':'F','source':'Demand','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'demand.move\x20L68-77','bridgeIds':['b11'],'label':'Demand\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20act\x20on\x20the\x20demanding\x20side'},{'id':'reward.permission','family':'F','source':'Reward','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20configure\x20the\x20reward\x20pool'},{'id':'reward.guard','family':'F','source':'Reward','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guards','field':'guard'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b07'],'label':'Guards\x20a\x20claimant\x20must\x20pass\x20before\x20drawing\x20from\x20the\x20pool'},{'id':'reward.um','family':'F','source':'Reward','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'reward.move\x20L129','bridgeIds':['b11'],'label':'Reward\x20membership\x20book\x20—\x20roster\x20of\x20members\x20eligible\x20under\x20member-gated\x20claim\x20rules'},{'id':'repository.permission','family':'F','source':'Repository','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'repository.move\x20(struct)','bridgeIds':['b02','b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20manage\x20the\x20repository'},{'id':'repository.reward','family':'F','source':'Repository','target':'Reward','cardinality':'N','read':{'kind':'fields','path':'rewards'},'retention':'complete','evidence':'repository.move\x20(struct)','bridgeIds':['b07'],'label':'Reward\x20pools\x20held\x20by\x20the\x20repository'},{'id':'repository.um','family':'F','source':'Repository','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'repository.move\x20L461-468,L471-480','bridgeIds':['b11'],'label':'Repository\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20read\x20or\x20write\x20under\x20member\x20policies'},{'id':EDGE_ID_REPOSITORY_POLICY_GUARD,'family':'F','source':'Repository','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['policies','write_guard'],'field':'guard'},'retention':'complete','evidence':'repository.move\x20L106-113\x20(PolicyRule.write_guard),L516-570','bridgeIds':['b02','b10'],'label':'Write-policy\x20Guards\x20gating\x20evidence\x20writes\x20under\x20each\x20repository\x20policy'},{'id':'repository.quote_guard','family':'F','source':'Repository','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['policies'],'field':'quote_guard'},'retention':'complete','evidence':'repository.move\x20L106-113\x20(PolicyRule.quote_guard),L421-428','bridgeIds':['b02','b10'],'label':'Quote/read-policy\x20Guards\x20gating\x20evidence\x20reads\x20under\x20each\x20repository\x20policy'},{'id':'contact.permission','family':'F','source':'Contact','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'contact.move\x20L25-31','bridgeIds':['b09','b11'],'label':'Permission\x20group\x20governing\x20the\x20contact\x20book'},{'id':'contact.im','family':'F','source':'Contact','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'ims','field':'at'},'retention':'membership','evidence':'contact.move\x20L15,L18-29,L85-105\x20(MAX_IM_COUNT=200)','bridgeIds':['b11'],'contract':{'field':'ims','frozenWhen':null,'forbiddenActions':[],'allowedActions':['add','remove','clear','update'],'unfreeze':null,'moveAnchor':'contact.move\x20im_add_imp\x20/\x20im_remove_imp\x20(roster\x20membership;\x20status/description\x20updatable)'},'label':'IM\x20member\x20entities\x20of\x20the\x20contact\x20book\x20(<=200;\x20membership\x20roster\x20carrying\x20status\x20and\x20join\x20time)'},{'id':'permission.admin','family':'F','source':'Permission','target':EOA,'cardinality':'N','read':{'kind':'fields','path':'admin'},'retention':'complete','evidence':'permission.move\x20L34-42\x20(admin\x20vector)','bridgeIds':['b09'],'label':'Admin\x20EOAs\x20who\x20can\x20mutate\x20the\x20permission\x20group\x27s\x20roles\x20(below\x20the\x20owner)'},{'id':'permission.owner','family':'F','source':'Permission','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'owner'},'retention':'complete','evidence':'permission.move\x20L34-42,L537-543','bridgeIds':['b09'],'contract':{'field':'owner','frozenWhen':null,'forbiddenActions':['add','remove','clear'],'allowedActions':['update'],'unfreeze':null,'moveAnchor':'permission.move\x20transfer\x20(assert_owner;\x20ownership\x20role\x20moves\x20with\x20it)'},'label':'Ultimate\x20owner\x20EOA\x20of\x20the\x20permission\x20group\x20(control-chain\x20root;\x20can\x20transfer\x20the\x20group)'},{'id':'permission.um','family':'F','source':'Permission','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'permission.move\x20L41,L562-571','bridgeIds':['b11'],'label':'Permission\x20group\x27s\x20membership\x20book\x20(who\x20receives\x20the\x20group\x27s\x20messages\x20and\x20notifications)'},{'id':'guard.relies','family':'F','source':'Guard','target':'Guard','cardinality':'N','read':{'kind':'fields','path':'relies'},'retention':'complete','evidence':'guard.move\x20L85-95\x20(≤4,\x20one\x20level)','bridgeIds':['b10'],'maxHops':0x1,'label':'Sub-Guards\x20the\x20Guard\x20relies\x20on\x20(<=4,\x20one\x20level;\x20relied\x20guards\x27\x20own\x20relies\x20are\x20not\x20consulted)'},{'id':'passport.signer','family':'F','source':'Passport','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'passport.move\x20L41-49,L94-98','bridgeIds':['b12'],'label':'Identity\x20that\x20verified\x20this\x20passport\x20(credential\x20consumed\x20per\x20transaction)'},{'id':'passport.guard','family':'F','source':'Passport','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'guard','field':'guard'},'retention':'complete','evidence':'passport.move\x20L32-47','bridgeIds':['b10','b12'],'label':'Verification\x20tickets\x20the\x20passport\x20carries\x20(each\x20proving\x20a\x20Guard\x20passed)'},{'id':'passport.ticket_relies','family':'F','source':'Passport','target':'Guard','cardinality':'N','read':{'kind':'deep','segments':['guard','relies'],'field':'guard'},'retention':'complete','evidence':'passport.move\x20L32-38,L114-151','bridgeIds':['b10','b12'],'label':'Sub-Guards\x20a\x20verification\x20ticket\x20actually\x20evaluated\x20(ticket-level\x20dependency\x20fanout)'},{'id':'passport.impack','family':'F','source':'Passport','target':ANY,'cardinality':'N','read':{'kind':'fields','path':'impack'},'retention':'complete','evidence':'passport.move\x20L29,L46,L227-242','bridgeIds':['b12'],'label':'Business\x20objects\x20packed\x20into\x20the\x20passport\x20verification\x20context'},{'id':'proof.signer','family':'F','source':'Proof','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'proof.move\x20L14-25','bridgeIds':['b12'],'label':'Party\x20who\x20signed\x20the\x20WTS\x20evidence\x20(accountability\x20for\x20the\x20claim)'},{'id':'proof.about','family':'F','source':'Proof','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'about'},'retention':'complete','evidence':'proof.move\x20L14-25','bridgeIds':['b12'],'label':'Object\x20the\x20evidence\x20attests\x20to\x20(the\x20subject\x20of\x20the\x20WTS\x20claim)'},{'id':'treasury.permission','family':'F','source':'Treasury','target':'Permission','cardinality':0x1,'read':{'kind':'field','path':'permission'},'retention':'complete','evidence':'treasury.move\x20L73-83','bridgeIds':['b09'],'label':'Permission\x20group\x20deciding\x20who\x20may\x20move\x20treasury\x20funds'},{'id':'treasury.um','family':'F','source':'Treasury','target':'Contact','cardinality':'0..1','read':{'kind':'field','path':'um'},'retention':'complete','evidence':'treasury.move\x20L82,L86-95,L504-510','bridgeIds':['b11'],'label':'Treasury\x20membership\x20book\x20—\x20roster\x20deciding\x20who\x20may\x20operate\x20treasury\x20flows\x20under\x20member\x20roles'},{'id':'treasury.deposit_guard','family':'F','source':'Treasury','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'external_deposit_guard','field':'guard'},'retention':'complete','evidence':'treasury.move\x20L61-65,L78,L138-194','bridgeIds':['b10'],'label':'Guards\x20authorized\x20to\x20release\x20external\x20deposits\x20into\x20the\x20treasury\x20(carries\x20identifier/store_from_id\x20slots)'},{'id':'treasury.withdraw_guard','family':'F','source':'Treasury','target':'Guard','cardinality':'N','read':{'kind':'structFields','path':'external_withdraw_guard','field':'guard'},'retention':'complete','evidence':'treasury.move\x20L67-71,L79,L197-250','bridgeIds':['b10'],'label':'Guards\x20authorized\x20to\x20pay\x20external\x20withdrawals\x20out\x20of\x20the\x20treasury\x20(pays\x20the\x20tx\x20sender\x20only;\x20carries\x20identifier/store_from_id\x20slots)'},{'id':'payment.signer','family':'F','source':'Payment','target':EOA,'cardinality':0x1,'read':{'kind':'field','path':'signer'},'retention':'complete','evidence':'payment.move\x20L93-101,L111','bridgeIds':['b08'],'contract':{'field':'signer','frozenWhen':'after\x20create','forbiddenActions':['set','update','remove'],'allowedActions':[],'unfreeze':null,'moveAnchor':'payment.move\x20new\x20(signer\x20=\x20tx_context::sender\x20at\x20creation)'},'label':'EOA\x20that\x20submitted\x20the\x20payment\x20(payer\x20of\x20record)'}],R_EDGES=[{'id':'eoa.permission','family':'R','source':EOA,'target':'Permission','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityPermission']},'retention':'membership','evidence':'entity_permission.move\x20L32\x20(bits\x201/2/4)','bridgeIds':['b09'],'label':'Permission\x20groups\x20the\x20account\x20currently\x20belongs\x20to\x20(membership;\x20disappears\x20on\x20removal)'},{'id':'eoa.order','family':'R','source':EOA,'target':'Order','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityOrder']},'retention':'bounded_window','evidence':'entity_order.move\x20L31\x20(FIFO\x205200)','bridgeIds':['b01'],'label':'Orders\x20the\x20account\x20joined\x20as\x20buyer/agent\x20(buyer\x20view,\x20FIFO\x205200)'},{'id':'eoa.contact','family':'R','source':EOA,'target':'Contact','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entityContact']},'retention':'membership','evidence':'entity_contact.move\x20L24','bridgeIds':['b11'],'label':'Contact\x20books\x20the\x20account\x20currently\x20joined'},{'id':'permission.core_binding','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerCore']},'retention':'bounded_exact','evidence':'object_linker.move\x20L37,L88\x20(≤5200\x20aborts)','bridgeIds':['b09'],'label':'Business\x20objects\x20this\x20permission\x20group\x20governs\x20(Service/Demand/Machine/...;\x20exact\x20registry,\x20no\x20eviction)'},{'id':'permission.tx_binding','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerTx']},'retention':'bounded_window','evidence':'object_linker.move\x20L43\x20(FIFO\x205200\x20operational)','bridgeIds':['b09'],'label':'Objects\x20this\x20permission\x20group\x20has\x20acted\x20on\x20at\x20runtime\x20(FIFO\x205200;\x20oldest\x20evicted)'},{'id':'service.order','family':'R','source':'Service','target':'Order','cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['objectLinkerTx'],'filterType':'Order'},'retention':'bounded_window','evidence':'object_linker.move\x20L43,L136-140\x20(FIFO\x205200)','bridgeIds':['b01'],'label':'Orders\x20the\x20shop\x20currently\x20retains\x20in\x20its\x20window\x20(FIFO\x205200,\x20oldest\x20evicted;\x20complete\x20history\x20via\x20the\x20event\x20channel)'},{'id':'target.vote','family':'S','source':ANY,'target':EOA,'cardinality':'N','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['registrar']},'retention':'bounded_window','evidence':'registrar.move\x20L154-171\x20(ring\x205200,\x20bits\x200x02/0x04/0x08)','label':'Reputation\x20votes\x20the\x20address\x20has\x20received\x20(like/dislike/favor;\x20ring\x205200,\x20oldest\x20evicted)'},{'id':'entity.profile','family':'S','source':EOA,'target':EOA,'cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L146-152,L176-179,L236-242,L503-560\x20(AddressInfo\x20current\x20row;\x20description/records\x20mutable\x20by\x20the\x20entity)','label':'Self-published\x20entity\x20profile:\x20description,\x20registration\x20time\x20and\x20typed\x20records\x20(self-edge\x20carrying\x20row\x20attributes)'},{'id':'entity.referrer','family':'S','source':EOA,'target':EOA,'cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L149,L236-242\x20(AddressInfo.referrer\x20Option<address>;\x20invitation\x20chain)','label':'Account\x20that\x20referred\x20this\x20entity\x20onto\x20the\x20platform\x20(invitation\x20upline)'},{'id':'entity.resource','family':'S','source':EOA,'target':'Resource','cardinality':'0..1','read':{'kind':'reverse','parent':WOW_SINGLETON_IDS['entity']},'retention':'membership','evidence':'registrar.move\x20L150,L236-241,L265-319\x20(AddressInfo.resource\x20Option<address>;\x20transferable/destroyable)','label':'On-chain\x20Resource\x20identity\x20object\x20held\x20by\x20this\x20entity\x20(transferable,\x20may\x20be\x20destroyed)'}],TABLE_EDGES=[{'id':'permission.entity','family':'R','source':'Permission','target':ANY,'cardinality':'N','read':{'kind':'table','rowType':'PermissionPerm'},'retention':'membership','evidence':'permission.move\x20L34-42\x20(entity\x20may\x20be\x20EOA\x20or\x20Guard\x20address)','bridgeIds':['b04','b09'],'label':'Entity-table\x20members\x20of\x20the\x20permission\x20group\x20(EOA\x20or\x20Guard,\x20carrying\x20perm\x20index\x20bits)'},{'id':'demand.presenter','family':'R','source':'Demand','target':EOA,'cardinality':'N','read':{'kind':'table','rowType':'DemandPresenter'},'retention':'membership','evidence':'demand.move\x20L46-54,L74\x20(presenters\x20table)','bridgeIds':['b03'],'label':'Suppliers\x20that\x20presented\x20to\x20the\x20demand,\x20with\x20acceptance_score'},{'id':'demand.presenter_service','family':'R','source':'Demand','target':'Service','cardinality':'N','read':{'kind':'table','rowType':'DemandPresenter'},'retention':'membership','evidence':'demand.move\x20L46-54,L79-118\x20(ServiceInfo.service\x20Option)','bridgeIds':['b03'],'label':'Services\x20proposed\x20by\x20presenters\x20on\x20the\x20demand\x20(same-row\x20co-edge\x20of\x20demand.presenter;\x20absent\x20for\x20bare\x20presents)'},{'id':'machine.node','family':'W','source':'Machine','target':'MachineNode','cardinality':'N','read':{'kind':'table','rowType':'MachineNode'},'retention':'complete','evidence':'machine.move\x20L299-308\x20(immutable\x20after\x20publish)','bridgeIds':['b04'],'contract':{'field':'nodes','frozenWhen':'after\x20publish','forbiddenActions':['add','remove','update'],'allowedActions':[],'unfreeze':null,'moveAnchor':'machine.move\x20node_add_imp\x20/\x20node_remove_imp\x20/\x20node_rename_imp\x20(assert_not_published)'},'label':'The\x20workflow\x27s\x20step\x20table\x20(full\x20node\x20graph;\x20frozen\x20at\x20publish)'},{'id':'treasury.record','family':'M','source':'Treasury','target':'Payment','cardinality':'N','read':{'kind':'table','rowType':'TreasuryRecord'},'retention':'complete','evidence':'treasury.move\x20L39-46,L77\x20(history:\x20ParentTable<address,Record>,\x20key\x20=\x20Payment;\x20append-only)','bridgeIds':['b08'],'label':'Ledger\x20entries\x20tying\x20each\x20withdrawal/deposit/receive\x20Payment\x20to\x20its\x20op\x20code,\x20signer,\x20external\x20guard\x20and\x20amount'},{'id':'reward.claim','family':'M','source':'Reward','target':EOA,'cardinality':'N','read':{'kind':'table','rowType':'RewardClaimRecord'},'retention':'complete','evidence':'reward.move\x20L117-138,L180-193\x20(record:\x20ParentTable<address,RecipientRecord>;\x20key\x20=\x20claimant)','bridgeIds':['b07'],'label':'Claimants\x20against\x20the\x20reward\x20pool,\x20with\x20lifetime\x20total\x20and\x20per-guard\x20claim\x20legs'},{'id':'repository.data_about','family':'F','source':'Repository','target':ANY,'cardinality':'N','read':{'kind':'table','rowType':'RepositoryData'},'retention':'membership','evidence':'repository.move\x20L455-465,L161-173\x20(data:\x20ParentTable<DataKey{id,key},\x20vector<u8>>)','bridgeIds':['b02'],'label':'Business\x20objects\x20the\x20stored\x20evidence\x20rows\x20are\x20about\x20(DataKey.id,\x20carrying\x20the\x20row\x20key\x20name)'}],W_EDGES=[{'id':'wf.transition','family':'W','source':'MachineNode','target':'MachineNode','cardinality':'N','read':{'kind':'derived','producer':'machineRows'},'retention':'derived','evidence':'machine.move\x20L101\x20NodePair,L269','bridgeIds':['b04'],'label':'Directed\x20hand-off\x20from\x20workflow\x20step\x20to\x20step\x20(carries\x20the\x20advance\x20threshold)'},{'id':'wf.forward_guard','family':'W','source':'MachineNode','target':'Guard','cardinality':'N','read':{'kind':'derived','producer':'machineRows'},'retention':'derived','evidence':'machine.move\x20L63\x20Forward','bridgeIds':['b04','b05','b10','b12'],'label':'Guards\x20evaluated\x20after\x20a\x20step\x20advances\x20(where\x20supply-chain\x20payouts\x20and\x20downstream\x20allocations\x20trigger)'}],M_EDGES=[{'id':'payment.recipient','family':'M','source':'Payment','target':EOA,'cardinality':'N','read':{'kind':'structFields','path':'record','field':'recipient'},'retention':'complete','evidence':'payment.move\x20L93-101\x20(Revenue≤200)','bridgeIds':['b05','b08'],'label':'Payment\x20allocation\x20recipients\x20(with\x20amounts,\x20leg\x20by\x20leg)'},{'id':'payment.from_object','family':'M','source':'Payment','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'from_object'},'retention':'complete','evidence':'payment.move\x20L149-161\x20(framework-only)','bridgeIds':['b05','b08'],'label':'Funding\x20source\x20pool\x20(Treasury/Allocation/Service;\x20framework-settable\x20only)'},{'id':'payment.for_object','family':'M','source':'Payment','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'info.for_object'},'retention':'complete','evidence':'payment.move\x20L93-101\x20(info\x20routing\x20hint)','bridgeIds':['b05','b08'],'label':'Business\x20routing\x20object\x20(user-settable)'},{'id':'payment.for_guard','family':'M','source':'Payment','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'info.for_guard'},'retention':'complete','evidence':'payment.move\x20L93-101','bridgeIds':['b05'],'label':'Guard\x20the\x20payment\x20was\x20routed\x20under\x20(user-settable\x20routing\x20context)'},{'id':'allocation.for_object','family':'M','source':'Allocation','target':ANY,'cardinality':'0..1','read':{'kind':'field','path':'payment_info.for_object'},'retention':'complete','evidence':'allocation.move\x20L200;\x20payment.move\x20L66-71','bridgeIds':['b05','b08'],'label':'Business\x20object\x20the\x20pool\x27s\x20payouts\x20are\x20routed\x20for'},{'id':'allocation.for_guard','family':'M','source':'Allocation','target':'Guard','cardinality':'0..1','read':{'kind':'field','path':'payment_info.for_guard'},'retention':'complete','evidence':'allocation.move\x20L200;\x20payment.move\x20L66-71','bridgeIds':['b05','b08'],'label':'Gate\x20context\x20the\x20pool\x27s\x20payouts\x20are\x20routed\x20under'}],EVENT_EDGES=[{'id':'service.order_history','family':'E','source':'Service','target':'Order','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::order::NewOrderEvent','matchField':'service','targetField':'object'},'retention':'event_full','evidence':'order.move\x20L51-58,L142\x20(NewOrderEvent:\x20object/service/progress/discount/allocation/amount)','label':'Every\x20order\x20ever\x20created\x20in\x20the\x20shop\x20—\x20complete\x20event\x20stream,\x20beyond\x20the\x20FIFO\x205200\x20shop-order\x20window'},{'id':'eoa.order_history','family':'E','source':EOA,'target':'Order','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::order::NewOrderEvent','matchSender':!![],'targetField':'object'},'retention':'event_full','evidence':'order.move\x20L51-58,L142\x20+\x20indexer\x20tx\x20sender\x20(the\x20transacting\x20buyer)','label':'Orders\x20the\x20account\x20created\x20as\x20the\x20transacting\x20buyer\x20—\x20complete\x20event\x20stream,\x20beyond\x20the\x20FIFO\x205200\x20buyer\x20window'},{'id':'arb.history','family':'E','source':'Arbitration','target':'Arb','cardinality':'N','read':{'kind':'event','eventType':PackageAddress+'::arb::ArbEvent','matchField':'arbitration','targetField':'object'},'retention':'event_full','evidence':'arb.move\x20L33-43,L122,L227\x20(ArbEvent:\x20case/arbitration/order/status/indemnity)','label':'Every\x20dispute\x20case\x20the\x20arbitration\x20service\x20ever\x20handled\x20—\x20complete\x20event\x20stream;\x20latest\x20status\x20transition\x20wins\x20per\x20case'}];export const EDGE_SCHEMAS=[...F_EDGES,...R_EDGES,...TABLE_EDGES,...W_EDGES,...M_EDGES,...EVENT_EDGES];export const EDGE_SCHEMA_BY_ID=new Map(EDGE_SCHEMAS['map'](a=>[a['id'],a]));export function outgoingSchemaIds(a){return EDGE_SCHEMAS['filter'](b=>b['source']===a||b['source']===ANY)['map'](b=>b['id']);}export const COVERED_OBJECT_TYPES=[...new Set(EDGE_SCHEMAS['flatMap'](a=>[a['source'],a['target']])['filter'](a=>a!==EOA&&a!==ANY&&a!=='MachineNode'))];
@@ -1 +1 @@
1
- import{WOW_SINGLETON_IDS,objectTypeFromAddress}from'@wowok/wowok';import{EDGE_SCHEMAS}from'./edge-schema.js';const ADDR_RE=/^0x[0-9a-f]{64}$/;export function normAddr(a){if(typeof a!=='string')return undefined;const b=a['trim']()['toLowerCase']();return ADDR_RE['test'](b)?b:undefined;}export function rootOf(a){const b=a;return b?.['data']??b??{};}function dig(a,b){return b['split']('.')['reduce']((c,d)=>{if(c==null)return undefined;return c[d];},a);}function asArray(a){if(Array['isArray'](a))return a;if(a==null)return[];return[a];}function addrsOf(b,c){if(Array['isArray'](b))return b['flatMap'](d=>addrsOf(d,c));if(typeof b==='string'){const d=normAddr(b);return d?[d]:[];}if(b&&typeof b==='object'){const e=b,f=normAddr(e[c]??e['guard']??e['address']??e['who']);if(f)return[f];const g=e[c];if(g!==b&&Array['isArray'](g))return addrsOf(g,c);}return[];}export function walkDeepAddrs(b,c,d){let e=[{'rows':[],'value':b}];for(const g of c){const h=[];for(const i of e){for(const j of asArray(i['value'])){if(!j||typeof j!=='object')continue;const k=j,l=k[g];if(l==null)continue;for(const m of asArray(l)){if(m==null)continue;const n=typeof m==='object'?[...i['rows'],m]:i['rows'];h['push']({'rows':n,'value':m});}}}e=h;if(e['length']===0x0)return[];}const f=[];for(const {rows:p,value:q}of e){for(const r of asArray(q)){if(r==null)continue;if(typeof r==='string'){const t=normAddr(r);if(t)f['push']({'addr':t,'leaf':{},'rows':p});continue;}if(typeof r!=='object')continue;const s=r;for(const u of addrsOf(s,d||'guard')){f['push']({'addr':u,'leaf':s,'rows':p});}}}return f;}function leafContext(a){return Object['assign']({},...a['rows'],a['leaf']);}export function wfNodeId(a,b){return(normAddr(a)??a['toLowerCase']())+'::node::'+b;}function strAmt(a){if(a==null)return undefined;if(typeof a==='bigint')return a['toString']();const b=String(a);return b===''?undefined:b;}function numOrNull(a){if(a===null)return null;if(typeof a==='number'&&Number['isFinite'](a))return a;if(a!=null&&typeof a!=='object'){const b=Number(a);if(Number['isFinite'](b))return b;}return undefined;}function addrOrNull(a){if(a===null)return null;return normAddr(a)??undefined;}function num(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(a==null||typeof a==='object')return undefined;const b=Number(a);return Number['isFinite'](b)?b:undefined;}function extractFieldEdges(b,c,d){const e=rootOf(c),f=[];for(const g of EDGE_SCHEMAS){if(g['source']!==b)continue;const i=g['read'];if(i['kind']==='reverse'||i['kind']==='table'||i['kind']==='derived')continue;let j=[];switch(i['kind']){case'field':{const k=addrsOf(dig(e,i['path']),'guard')[0x0];if(k)j=[{'to':k}];break;}case'fields':{j=addrsOf(dig(e,i['path']),'guard')['map'](l=>({'to':l}));break;}case'structFields':{j=walkDeepAddrs(e,[i['path']],i['field'])['map'](l=>({'to':l['addr'],'payload':payloadFor(g['id'],leafContext(l),d)}));break;}case'deep':{if(g['id']==='progress.named_operator'){const l=asArray(e['namedOperator']);for(const m of l){const n=m??{};for(const p of asArray(n['operators'])){const q=normAddr(p);if(q)j['push']({'to':q,'key':String(n['name']??''),'payload':{'namedOperator':n['name']!=null?String(n['name']):null}});}}}else j=walkDeepAddrs(e,i['segments'],i['field'])['map'](r=>({'to':r['addr'],'payload':payloadFor(g['id'],leafContext(r),d)}));break;}}g['family']==='M'&&d&&(j=j['map'](s=>({...s,'payload':{'coinType':d,...s['payload']}})));if(j['length']>0x0)f['push']({'schemaId':g['id'],'refs':j});}return f;}function payloadFor(a,b,c){switch(a){case'payment.recipient':{const d=strAmt(b['amount']);return d!=null?{'amount':d,'coinType':c}:undefined;}case'arb.voter':return{'weight':Number(b['weight']??0x0)||undefined};case'contact.im':return{'imStatus':b['status']!=null?String(b['status']):undefined,'joinTime':typeof b['join_time']==='number'?b['join_time']:Number(b['join_time'])||undefined,'imDescription':b['description']!=null?String(b['description']):undefined};case'allocation.guard':case'service.order_allocator_guard':return b['mode']!=null?{'mode':clampMode(Number(b['mode']))}:undefined;case'treasury.deposit_guard':case'treasury.withdraw_guard':return{'identifier':numOrNull(b['identifier']),'storeFromId':numOrNull(b['store_from_id'])};default:return undefined;}}function clampMode(a){return a===0x1||a===0x2?a:0x0;}export const REVERSE_GROUP_WILDCARD='*';export function extractReverseRefs(a,b){const c=b??{};if(a===WOW_SINGLETON_IDS['registrar']){const f=[];for(const g of asArray(c['votes'])){const h=g??{},i=normAddr(h['who']);if(!i)continue;f['push']({'to':i,'payload':{'voteBits':(h['like']?0x2:0x0)|(h['dislike']?0x4:0x0)|(h['favor']?0x8:0x0),'voteLike':!!h['like'],'voteDislike':!!h['dislike'],'voteFavor':!!h['favor']}});}return f['length']?[{'schemaId':'target.vote','refs':f}]:[];}if(a===WOW_SINGLETON_IDS['entity'])return extractEntityProfile(c);const e=[];for(const j of asArray(c['items'])){const k=j??{},l=normAddr(k['permission']??k['contact']??k['order']??k['who']);if(!l)continue;const m=k['role']!=null?Number(k['role']):undefined;e['push']({'to':l,'payload':m!=null&&Number['isFinite'](m)?{'roleBits':m}:undefined});}return e['length']?[{'schemaId':REVERSE_GROUP_WILDCARD,'refs':e}]:[];}function extractEntityProfile(a){const b=[],c=typeof a['description']==='string'?a['description']:'',e=num(a['time']),f=[];for(const i of asArray(a['records'])){const j=i??{};if(typeof j['name']!=='string')continue;const k={'name':j['name']};if(j['value_type']!==undefined)k['valueType']=j['value_type'];else{if(j['typed_value']!==undefined)k['value']=j['typed_value'];}if(j['value']!==undefined)k['value']=j['value'];f['push'](k);}b['push']({'schemaId':'entity.profile','refs':[{'to':'','payload':{...c?{'description':c}:{},...e!=null?{'registeredAt':e}:{},...f['length']?{'profileRecords':f}:{}}}]});const g=normAddr(a['referrer']);g&&b['push']({'schemaId':'entity.referrer','refs':[{'to':g}]});const h=normAddr(a['resource']??a['mark_object']);return h&&b['push']({'schemaId':'entity.resource','refs':[{'to':h}]}),b;}export function extractTableRefs(a,b,c){switch(a){case'PermissionPerm':return extractPermissionTable(c);case'DemandPresenter':return extractPresenterTable(c);case'MachineNode':return extractMachineTable(b,c);case'TreasuryRecord':return extractTreasuryLedger(c);case'RewardClaimRecord':return extractRewardLedger(c);case'RepositoryData':return extractRepositoryDataTable(c);default:return[];}}export function extractEventRefs(a,b,c){const d=[];for(const e of c){const f=e??{},g=f['parsedJson']??{};if(a['matchField']!==undefined){if(normAddr(g[a['matchField']])!==b)continue;}else{if(a['matchSender']){if(normAddr(f['sender'])!==b)continue;}}const h=normAddr(g[a['targetField']]);if(!h)continue;const i=typeof f['timestampMs']==='string'?Number(f['timestampMs']):f['timestampMs'];d['push']({'to':h,'payload':{...g,...Number['isFinite'](i)?{'time':i}:{}}});}return d;}function extractPermissionTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['address']),g=Array['isArray'](e['perm'])?e['perm']['map'](Number):[];if(f)b['push']({'to':f,'payload':{'permIndices':g}});}return b['length']?[{'schemaId':'permission.entity','refs':b}]:[];}function extractPresenterTable(a){const b=[],c=[];for(const f of a){const g=rootOf(f['object']),h=normAddr(g['address']);if(h){b['push']({'to':h,'payload':{'service':normAddr(g['service'])??undefined,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined,'recommend':g['recommend']!=null?String(g['recommend']):undefined}});const i=normAddr(g['service']);i&&c['push']({'to':i,'key':h,'payload':{'presenter':h,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined}});}}const e=[];if(b['length'])e['push']({'schemaId':'demand.presenter','refs':b});if(c['length'])e['push']({'schemaId':'demand.presenter_service','refs':c});return e;}function extractTreasuryLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']);b['push']({'to':e,'payload':{'op':num(f['op']),'signer':normAddr(f['signer'])??undefined,'amount':strAmt(f['amount']),'time':num(f['time']),'externalGuard':addrOrNull(f['external_guard']),'storeFromId':addrOrNull(f['store_from_id'])}});}return b['length']?[{'schemaId':'treasury.record','refs':b}]:[];}function extractRewardLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']),g=(Array['isArray'](f['amount'])?f['amount']:[])['flatMap'](h=>{const i=h??{},j=normAddr(i['guard']);if(!j)return[];return[{'guard':j,'amount':strAmt(i['amount']),'time':num(i['time']),'storeFromId':addrOrNull(i['store_from_id'])}];});b['push']({'to':e,'payload':{'amount':strAmt(f['total']),'claims':g}});}return b['length']?[{'schemaId':'reward.claim','refs':b}]:[];}function extractRepositoryDataTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['id']);if(!f)continue;const g=e['key']!=null?String(e['key']):e['name']!=null?String(e['name']):undefined;b['push']({'to':f,'payload':{'dataName':g}});}return b['length']?[{'schemaId':'repository.data_about','refs':b}]:[];}function extractMachineTable(a,b){const c=[],e=[],g=[],h=new Set(),i=k=>{const l=String(k??'')['trim']();if(!l)return undefined;const m=wfNodeId(a,l);return!h['has'](m)&&(h['add'](m),c['push']({'to':m,'key':l,'payload':{'node':l}})),m;};for(const k of b){const l=rootOf(k['object']),m=String(l['name']??''),n=i(m);if(!n)continue;for(const o of asArray(l['value'])){const q=o??{},r=String(q['prev_node']??'')['trim']();if(r)i(r);const s=r?wfNodeId(a,r):n,t=Number(q['threshold']??0x0);for(const u of asArray(q['forwards'])){const v=u??{},w=String(v['name']??''),x=addrsOf(v['guard'],'guard')[0x0];s&&e['push']({'from':s,'to':n,'key':w||undefined,'payload':{'forward':w||undefined,'prevNode':r,'node':m,'threshold':t||undefined,'guard':x??undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}}),x&&g['push']({'to':x,'key':w||undefined,'payload':{'forward':w||undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}});}}}const j=[];if(c['length'])j['push']({'schemaId':'machine.node','refs':c});if(e['length'])j['push']({'schemaId':'wf.transition','refs':e});if(g['length'])j['push']({'schemaId':'wf.forward_guard','refs':g});return j;}export function inferObjectType(a){return objectTypeFromAddress(a)??undefined;}export function extractCoinType(a){if(typeof a!=='string'||!a['includes']('<'))return undefined;const b=a['slice'](a['indexOf']('<')+0x1,a['lastIndexOf']('>'));return b['trim']()||undefined;}export function extractObjectEdges(a,b){return extractFieldEdges(a,b,extractCoinType(b['type_raw']));}export function schemaById(a){return EDGE_SCHEMAS['find'](b=>b['id']===a);}
1
+ import{WOW_SINGLETON_IDS,objectTypeFromAddress}from'@wowok/wowok';import{EDGE_SCHEMAS}from'./edge-schema.js';const ADDR_RE=/^0x[0-9a-f]{64}$/;export function normAddr(a){if(typeof a!=='string')return undefined;const b=a['trim']()['toLowerCase']();return ADDR_RE['test'](b)?b:undefined;}export function rootOf(a){const b=a;return b?.['data']??b??{};}function dig(a,b){return b['split']('.')['reduce']((c,d)=>{if(c==null)return undefined;return c[d];},a);}function asArray(a){if(Array['isArray'](a))return a;if(a==null)return[];return[a];}function addrsOf(b,c){if(Array['isArray'](b))return b['flatMap'](d=>addrsOf(d,c));if(typeof b==='string'){const d=normAddr(b);return d?[d]:[];}if(b&&typeof b==='object'){const e=b,f=normAddr(e[c]??e['guard']??e['address']??e['who']);if(f)return[f];const g=e[c];if(g!==b&&Array['isArray'](g))return addrsOf(g,c);}return[];}export function walkDeepAddrs(b,c,d){let e=[{'rows':[],'value':b}];for(const g of c){const h=[];for(const i of e){for(const j of asArray(i['value'])){if(!j||typeof j!=='object')continue;const k=j,l=k[g];if(l==null)continue;for(const m of asArray(l)){if(m==null)continue;const n=typeof m==='object'?[...i['rows'],m]:i['rows'];h['push']({'rows':n,'value':m});}}}e=h;if(e['length']===0x0)return[];}const f=[];for(const {rows:p,value:q}of e){for(const r of asArray(q)){if(r==null)continue;if(typeof r==='string'){const t=normAddr(r);if(t)f['push']({'addr':t,'leaf':{},'rows':p});continue;}if(typeof r!=='object')continue;const s=r;for(const u of addrsOf(s,d||'guard')){f['push']({'addr':u,'leaf':s,'rows':p});}}}return f;}function leafContext(a){return Object['assign']({},...a['rows'],a['leaf']);}export function wfNodeId(a,b){return(normAddr(a)??a['toLowerCase']())+'::node::'+b;}function strAmt(a){if(a==null)return undefined;if(typeof a==='bigint')return a['toString']();const b=String(a);return b===''?undefined:b;}function numOrNull(a){if(a===null)return null;if(typeof a==='number'&&Number['isFinite'](a))return a;if(a!=null&&typeof a!=='object'){const b=Number(a);if(Number['isFinite'](b))return b;}return undefined;}function addrOrNull(a){if(a===null)return null;return normAddr(a)??undefined;}function num(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(a==null||typeof a==='object')return undefined;const b=Number(a);return Number['isFinite'](b)?b:undefined;}function extractFieldEdges(b,c,d){const e=rootOf(c),f=[];for(const g of EDGE_SCHEMAS){if(g['source']!==b)continue;const i=g['read'];if(i['kind']==='reverse'||i['kind']==='table'||i['kind']==='derived')continue;let j=[];switch(i['kind']){case'field':{const k=addrsOf(dig(e,i['path']),'guard')[0x0];if(k)j=[{'to':k}];break;}case'fields':{j=addrsOf(dig(e,i['path']),'guard')['map'](l=>({'to':l}));break;}case'structFields':{j=walkDeepAddrs(e,[i['path']],i['field'])['map'](l=>({'to':l['addr'],'payload':payloadFor(g['id'],leafContext(l),d)}));break;}case'deep':{if(g['id']==='progress.named_operator'){const l=asArray(e['namedOperator']);for(const m of l){const n=m??{};for(const p of asArray(n['operators'])){const q=normAddr(p);if(q)j['push']({'to':q,'key':String(n['name']??''),'payload':{'namedOperator':n['name']!=null?String(n['name']):null}});}}}else j=walkDeepAddrs(e,i['segments'],i['field'])['map'](r=>({'to':r['addr'],'payload':payloadFor(g['id'],leafContext(r),d)}));break;}}g['family']==='M'&&d&&(j=j['map'](s=>({...s,'payload':{'coinType':d,...s['payload']}})));if(j['length']>0x0)f['push']({'schemaId':g['id'],'refs':j});}return f;}function payloadFor(a,b,c){switch(a){case'payment.recipient':{const d=strAmt(b['amount']);return d!=null?{'amount':d,'coinType':c}:undefined;}case'arb.voter':return{'weight':Number(b['weight']??0x0)||undefined};case'contact.im':return{'imStatus':b['status']!=null?String(b['status']):undefined,'joinTime':typeof b['join_time']==='number'?b['join_time']:Number(b['join_time'])||undefined,'imDescription':b['description']!=null?String(b['description']):undefined};case'allocation.guard':case'service.order_allocator_guard':return b['mode']!=null?{'mode':clampMode(Number(b['mode']))}:undefined;case'treasury.deposit_guard':case'treasury.withdraw_guard':return{'identifier':numOrNull(b['identifier']),'storeFromId':numOrNull(b['store_from_id'])};default:return undefined;}}function clampMode(a){return a===0x1||a===0x2||a===0x3?a:0x0;}export const REVERSE_GROUP_WILDCARD='*';export function extractReverseRefs(a,b){const c=b??{};if(a===WOW_SINGLETON_IDS['registrar']){const f=[];for(const g of asArray(c['votes'])){const h=g??{},i=normAddr(h['who']);if(!i)continue;f['push']({'to':i,'payload':{'voteBits':(h['like']?0x2:0x0)|(h['dislike']?0x4:0x0)|(h['favor']?0x8:0x0),'voteLike':!!h['like'],'voteDislike':!!h['dislike'],'voteFavor':!!h['favor']}});}return f['length']?[{'schemaId':'target.vote','refs':f}]:[];}if(a===WOW_SINGLETON_IDS['entity'])return extractEntityProfile(c);const e=[];for(const j of asArray(c['items'])){const k=j??{},l=normAddr(k['permission']??k['contact']??k['order']??k['who']);if(!l)continue;const m=k['role']!=null?Number(k['role']):undefined;e['push']({'to':l,'payload':m!=null&&Number['isFinite'](m)?{'roleBits':m}:undefined});}return e['length']?[{'schemaId':REVERSE_GROUP_WILDCARD,'refs':e}]:[];}function extractEntityProfile(a){const b=[],c=typeof a['description']==='string'?a['description']:'',e=num(a['time']),f=[];for(const i of asArray(a['records'])){const j=i??{};if(typeof j['name']!=='string')continue;const k={'name':j['name']};if(j['value_type']!==undefined)k['valueType']=j['value_type'];else{if(j['typed_value']!==undefined)k['value']=j['typed_value'];}if(j['value']!==undefined)k['value']=j['value'];f['push'](k);}b['push']({'schemaId':'entity.profile','refs':[{'to':'','payload':{...c?{'description':c}:{},...e!=null?{'registeredAt':e}:{},...f['length']?{'profileRecords':f}:{}}}]});const g=normAddr(a['referrer']);g&&b['push']({'schemaId':'entity.referrer','refs':[{'to':g}]});const h=normAddr(a['resource']??a['mark_object']);return h&&b['push']({'schemaId':'entity.resource','refs':[{'to':h}]}),b;}export function extractTableRefs(a,b,c){switch(a){case'PermissionPerm':return extractPermissionTable(c);case'DemandPresenter':return extractPresenterTable(c);case'MachineNode':return extractMachineTable(b,c);case'TreasuryRecord':return extractTreasuryLedger(c);case'RewardClaimRecord':return extractRewardLedger(c);case'RepositoryData':return extractRepositoryDataTable(c);default:return[];}}export function extractEventRefs(a,b,c){const d=[];for(const e of c){const f=e??{},g=f['parsedJson']??{};if(a['matchField']!==undefined){if(normAddr(g[a['matchField']])!==b)continue;}else{if(a['matchSender']){if(normAddr(f['sender'])!==b)continue;}}const h=normAddr(g[a['targetField']]);if(!h)continue;const i=typeof f['timestampMs']==='string'?Number(f['timestampMs']):f['timestampMs'];d['push']({'to':h,'payload':{...g,...Number['isFinite'](i)?{'time':i}:{}}});}return d;}function extractPermissionTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['address']),g=Array['isArray'](e['perm'])?e['perm']['map'](Number):[];if(f)b['push']({'to':f,'payload':{'permIndices':g}});}return b['length']?[{'schemaId':'permission.entity','refs':b}]:[];}function extractPresenterTable(a){const b=[],c=[];for(const f of a){const g=rootOf(f['object']),h=normAddr(g['address']);if(h){b['push']({'to':h,'payload':{'service':normAddr(g['service'])??undefined,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined,'recommend':g['recommend']!=null?String(g['recommend']):undefined}});const i=normAddr(g['service']);i&&c['push']({'to':i,'key':h,'payload':{'presenter':h,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined}});}}const e=[];if(b['length'])e['push']({'schemaId':'demand.presenter','refs':b});if(c['length'])e['push']({'schemaId':'demand.presenter_service','refs':c});return e;}function extractTreasuryLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']);b['push']({'to':e,'payload':{'op':num(f['op']),'signer':normAddr(f['signer'])??undefined,'amount':strAmt(f['amount']),'time':num(f['time']),'externalGuard':addrOrNull(f['external_guard']),'storeFromId':addrOrNull(f['store_from_id'])}});}return b['length']?[{'schemaId':'treasury.record','refs':b}]:[];}function extractRewardLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']),g=(Array['isArray'](f['amount'])?f['amount']:[])['flatMap'](h=>{const i=h??{},j=normAddr(i['guard']);if(!j)return[];return[{'guard':j,'amount':strAmt(i['amount']),'time':num(i['time']),'storeFromId':addrOrNull(i['store_from_id'])}];});b['push']({'to':e,'payload':{'amount':strAmt(f['total']),'claims':g}});}return b['length']?[{'schemaId':'reward.claim','refs':b}]:[];}function extractRepositoryDataTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['id']);if(!f)continue;const g=e['key']!=null?String(e['key']):e['name']!=null?String(e['name']):undefined;b['push']({'to':f,'payload':{'dataName':g}});}return b['length']?[{'schemaId':'repository.data_about','refs':b}]:[];}function extractMachineTable(a,b){const c=[],e=[],g=[],h=new Set(),i=k=>{const l=String(k??'')['trim']();if(!l)return undefined;const m=wfNodeId(a,l);return!h['has'](m)&&(h['add'](m),c['push']({'to':m,'key':l,'payload':{'node':l}})),m;};for(const k of b){const l=rootOf(k['object']),m=String(l['name']??''),n=i(m);if(!n)continue;for(const o of asArray(l['value'])){const q=o??{},r=String(q['prev_node']??'')['trim']();if(r)i(r);const s=r?wfNodeId(a,r):n,t=Number(q['threshold']??0x0);for(const u of asArray(q['forwards'])){const v=u??{},w=String(v['name']??''),x=addrsOf(v['guard'],'guard')[0x0];s&&e['push']({'from':s,'to':n,'key':w||undefined,'payload':{'forward':w||undefined,'prevNode':r,'node':m,'threshold':t||undefined,'guard':x??undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}}),x&&g['push']({'to':x,'key':w||undefined,'payload':{'forward':w||undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}});}}}const j=[];if(c['length'])j['push']({'schemaId':'machine.node','refs':c});if(e['length'])j['push']({'schemaId':'wf.transition','refs':e});if(g['length'])j['push']({'schemaId':'wf.forward_guard','refs':g});return j;}export function inferObjectType(a){return objectTypeFromAddress(a)??undefined;}export function extractCoinType(a){if(typeof a!=='string'||!a['includes']('<'))return undefined;const b=a['slice'](a['indexOf']('<')+0x1,a['lastIndexOf']('>'));return b['trim']()||undefined;}export function extractObjectEdges(a,b){return extractFieldEdges(a,b,extractCoinType(b['type_raw']));}export function schemaById(a){return EDGE_SCHEMAS['find'](b=>b['id']===a);}