@wowok/agent-mcp 3.4.4 → 3.4.5

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 (191) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/chain-semantics/composition-truth.js +1 -1
  3. package/dist/composition/audit.js +1 -1
  4. package/dist/composition/compile.js +1 -1
  5. package/dist/composition/emit-phases.js +1 -1
  6. package/dist/composition/guard-fill.js +1 -1
  7. package/dist/composition/input-normalize.js +1 -1
  8. package/dist/composition/materialize.js +1 -1
  9. package/dist/composition/mode-gates.js +1 -1
  10. package/dist/composition/param-disclosure.js +1 -1
  11. package/dist/composition/plan-run-store.js +1 -0
  12. package/dist/composition/reflux.js +1 -1
  13. package/dist/composition/role-bindings.js +1 -0
  14. package/dist/composition/shape-expand.js +1 -1
  15. package/dist/composition/supply-chain-emit.js +1 -1
  16. package/dist/config/judgment.d.ts +13 -25
  17. package/dist/config/judgment.js +1 -1
  18. package/dist/config/match-policy-file.js +1 -1
  19. package/dist/config/rule-engine.d.ts +4 -10
  20. package/dist/config/rule-engine.js +1 -1
  21. package/dist/config/template-params.js +1 -1
  22. package/dist/evaluation/engine.js +1 -1
  23. package/dist/experience/realtime-feedback.js +1 -1
  24. package/dist/extensions/capability.js +1 -1
  25. package/dist/graph/onchain/expand.js +1 -1
  26. package/dist/graph/onchain/exposure.js +1 -1
  27. package/dist/harness/forward-roster-preflight.js +1 -0
  28. package/dist/keeper/detectors.js +1 -1
  29. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  30. package/dist/knowledge/arb-operation-face.js +1 -1
  31. package/dist/knowledge/arbitration-rail-verifier.js +1 -1
  32. package/dist/knowledge/audit-rules.d.ts +17 -1
  33. package/dist/knowledge/audit-rules.js +1 -1
  34. package/dist/knowledge/baselines/rules/alloc_audit.json.good.sha256 +1 -0
  35. package/dist/knowledge/baselines/rules/allocation.json.good.sha256 +1 -0
  36. package/dist/knowledge/baselines/rules/arb.json.good.sha256 +1 -0
  37. package/dist/knowledge/baselines/rules/arbitration.json.good.sha256 +1 -0
  38. package/dist/knowledge/baselines/rules/bridge.json.good.sha256 +1 -0
  39. package/dist/knowledge/baselines/rules/contact.json.good.sha256 +1 -0
  40. package/dist/knowledge/baselines/rules/demand.json.good.sha256 +1 -0
  41. package/dist/knowledge/baselines/rules/graph.json.good.sha256 +1 -0
  42. package/dist/knowledge/baselines/rules/guard.json.good.sha256 +1 -0
  43. package/dist/knowledge/baselines/rules/machine.json.good.sha256 +1 -0
  44. package/dist/knowledge/baselines/rules/oracle.json.good.sha256 +1 -0
  45. package/dist/knowledge/baselines/rules/order.json.good.sha256 +1 -0
  46. package/dist/knowledge/baselines/rules/payment.json.good.sha256 +1 -0
  47. package/dist/knowledge/baselines/rules/permission.json.good.sha256 +1 -0
  48. package/dist/knowledge/baselines/rules/personal.json.good.sha256 +1 -0
  49. package/dist/knowledge/baselines/rules/plan.json +153 -33
  50. package/dist/knowledge/baselines/rules/plan.json.good +153 -33
  51. package/dist/knowledge/baselines/rules/plan.json.good.sha256 +1 -0
  52. package/dist/knowledge/baselines/rules/progress.json.good.sha256 +1 -0
  53. package/dist/knowledge/baselines/rules/proof.json.good.sha256 +1 -0
  54. package/dist/knowledge/baselines/rules/registrar.json.good.sha256 +1 -0
  55. package/dist/knowledge/baselines/rules/repository.json.good.sha256 +1 -0
  56. package/dist/knowledge/baselines/rules/resource.json.good.sha256 +1 -0
  57. package/dist/knowledge/baselines/rules/reward.json.good.sha256 +1 -0
  58. package/dist/knowledge/baselines/rules/service.json.good.sha256 +1 -0
  59. package/dist/knowledge/baselines/rules/treasury.json.good.sha256 +1 -0
  60. package/dist/knowledge/baselines/rules/util.json.good.sha256 +1 -0
  61. package/dist/knowledge/builtin-templates.d.ts +1 -1
  62. package/dist/knowledge/builtin-templates.js +1 -1
  63. package/dist/knowledge/discount-threshold.js +1 -1
  64. package/dist/knowledge/fee-param-bindings.js +1 -1
  65. package/dist/knowledge/getting-started.js +1 -1
  66. package/dist/knowledge/guard-binding-table.js +1 -1
  67. package/dist/knowledge/guard-design-patterns.js +1 -1
  68. package/dist/knowledge/guard-templates.d.ts +3 -2
  69. package/dist/knowledge/guard-templates.js +1 -1
  70. package/dist/knowledge/index.js +1 -1
  71. package/dist/knowledge/industry-registry.js +1 -1
  72. package/dist/knowledge/jsonrpc-enum.js +1 -1
  73. package/dist/knowledge/knob-docs.js +1 -1
  74. package/dist/knowledge/machine-topology.js +1 -1
  75. package/dist/knowledge/param-schema.js +1 -1
  76. package/dist/knowledge/param-tiers.js +1 -1
  77. package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -1
  78. package/dist/knowledge/path-oracle/products/amazon.js +1 -1
  79. package/dist/knowledge/path-oracle/products/booking-com.js +1 -1
  80. package/dist/knowledge/path-oracle/products/contra.js +1 -1
  81. package/dist/knowledge/path-oracle/products/costco.js +1 -1
  82. package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -1
  83. package/dist/knowledge/path-oracle/products/etsy.js +1 -1
  84. package/dist/knowledge/path-oracle/products/gamefound.js +1 -1
  85. package/dist/knowledge/path-oracle/products/gofundme.js +1 -1
  86. package/dist/knowledge/path-oracle/products/klook.js +1 -1
  87. package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -1
  88. package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -1
  89. package/dist/knowledge/path-oracle/products/shansong.js +1 -1
  90. package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -1
  91. package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -1
  92. package/dist/knowledge/path-oracle/products/upwork.js +1 -1
  93. package/dist/knowledge/pattern-resolutions.js +1 -1
  94. package/dist/knowledge/protocol-facts.js +1 -1
  95. package/dist/knowledge/publish-gate.js +1 -1
  96. package/dist/knowledge/publish-surface-contract.js +1 -1
  97. package/dist/knowledge/template-loader.js +1 -1
  98. package/dist/knowledge/template-registry.js +1 -1
  99. package/dist/knowledge/template-scanner.js +1 -1
  100. package/dist/knowledge/time-units.js +1 -0
  101. package/dist/knowledge/tools-reference.js +1 -1
  102. package/dist/knowledge/workflow-guidance.js +1 -1
  103. package/dist/monitor/MonitorLoop.js +1 -1
  104. package/dist/participation/radar-core.js +1 -1
  105. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  106. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  107. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  108. package/dist/playbooks/service-build/migration-planner.js +1 -1
  109. package/dist/playbooks/service-build/object-panorama.js +1 -1
  110. package/dist/playbooks/service-build/participation-radar.js +1 -1
  111. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  112. package/dist/playbooks/service-build/service-panorama.js +1 -1
  113. package/dist/playbooks/service-build/service-quote.js +1 -1
  114. package/dist/review/index.js +1 -1
  115. package/dist/safety/confirm-gate.js +1 -1
  116. package/dist/schema/benchmark-migration/index.d.ts +110 -2
  117. package/dist/schema/benchmark-migration/index.js +1 -1
  118. package/dist/schema/boundary-coercion.js +1 -0
  119. package/dist/schema/call/arbitration.js +1 -1
  120. package/dist/schema/call/base.js +1 -1
  121. package/dist/schema/call/handler.js +1 -1
  122. package/dist/schema/call/machine.d.ts +56 -8
  123. package/dist/schema/call/order.d.ts +37 -10
  124. package/dist/schema/call/order.js +1 -1
  125. package/dist/schema/call/permission.d.ts +210 -30
  126. package/dist/schema/call/personal.d.ts +56 -8
  127. package/dist/schema/call/progress.d.ts +28 -4
  128. package/dist/schema/call/semantic.js +1 -1
  129. package/dist/schema/call/service.d.ts +84 -12
  130. package/dist/schema/common/index.d.ts +14 -2
  131. package/dist/schema/common/index.js +1 -1
  132. package/dist/schema/evaluation/index.js +1 -1
  133. package/dist/schema/goal/index.d.ts +1 -1
  134. package/dist/schema/goal/planning.js +1 -1
  135. package/dist/schema/local/index.js +1 -1
  136. package/dist/schema/messenger/index.d.ts +168 -24
  137. package/dist/schema/messenger/index.js +1 -1
  138. package/dist/schema/operations.d.ts +655 -22
  139. package/dist/schema/operations.js +1 -1
  140. package/dist/schema/persona/index.d.ts +22 -110
  141. package/dist/schema/query/index.js +1 -1
  142. package/dist/schema/schema-version.js +1 -1
  143. package/dist/schema/workflow/index.d.ts +4 -0
  144. package/dist/schema/workflow/index.js +1 -1
  145. package/dist/schema-query-impl/index.js +1 -1
  146. package/dist/schemas/benchmark_migration_operation.schema.json +1 -1
  147. package/dist/schemas/evaluation_operation.schema.json +1 -1
  148. package/dist/schemas/goal_operation.schema.json +1 -1
  149. package/dist/schemas/guard_rebind_replacement.schema.json +1 -0
  150. package/dist/schemas/index.json +1 -1
  151. package/dist/schemas/messenger_operation.schema.json +1 -1
  152. package/dist/schemas/onchain_operations.schema.json +1 -1
  153. package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
  154. package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
  155. package/dist/schemas/onchain_operations_contact.schema.json +1 -1
  156. package/dist/schemas/onchain_operations_demand.schema.json +1 -1
  157. package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
  158. package/dist/schemas/onchain_operations_machine.schema.json +1 -1
  159. package/dist/schemas/onchain_operations_order.schema.json +1 -1
  160. package/dist/schemas/onchain_operations_permission.schema.json +1 -1
  161. package/dist/schemas/onchain_operations_personal.schema.json +1 -1
  162. package/dist/schemas/onchain_operations_progress.schema.json +1 -1
  163. package/dist/schemas/onchain_operations_proof.schema.json +1 -1
  164. package/dist/schemas/onchain_operations_repository.schema.json +1 -1
  165. package/dist/schemas/onchain_operations_reward.schema.json +1 -1
  166. package/dist/schemas/onchain_operations_service.schema.json +1 -1
  167. package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
  168. package/dist/schemas/persona_operation.schema.json +1 -1
  169. package/dist/schemas/time_convert.schema.json +1 -0
  170. package/dist/schemas/wip_file.schema.json +1 -1
  171. package/dist/schemas/workflow_operation.schema.json +1 -1
  172. package/dist/tools/handlers/benchmark-migration.js +1 -1
  173. package/dist/tools/handlers/config.js +1 -1
  174. package/dist/tools/handlers/fund-rail-recipe.js +1 -1
  175. package/dist/tools/handlers/guard-rebind-replacement.js +1 -0
  176. package/dist/tools/handlers/local.js +1 -1
  177. package/dist/tools/handlers/mark-namespace.js +1 -1
  178. package/dist/tools/handlers/onchain.js +1 -1
  179. package/dist/tools/handlers/query.js +1 -1
  180. package/dist/tools/handlers/settle-sweep.js +1 -1
  181. package/dist/tools/handlers/time-convert.js +1 -0
  182. package/dist/tools/handlers/wip.js +1 -1
  183. package/dist/tools/handlers/workflow.js +1 -1
  184. package/dist/tools/index.d.ts +1 -0
  185. package/dist/tools/index.js +1 -1
  186. package/dist/tools/registry/business.js +1 -1
  187. package/dist/tools/registry/local.js +1 -1
  188. package/dist/tools/registry/onchain.js +1 -1
  189. package/dist/tools/wip-verify-ledger.js +1 -1
  190. package/dist/tools/wrap.js +1 -1
  191. package/package.json +6 -5
@@ -1 +1 @@
1
- import{EDGE_SCHEMAS,EDGE_SCHEMA_BY_ID}from'./edge-schema.js';import{extractCoinType,extractEventRefs,extractObjectEdges,extractReverseRefs,extractTableRefs,inferObjectType,REVERSE_GROUP_WILDCARD}from'./extract.js';import{mergeBudget}from'./dataplane.js';import{deriveOrderCompletion,terminalNamesOfEdges}from'./order-status.js';import{LINKER_RING_LIMIT as a129a}from'./sdk-batch.js';import{wowAddressKind}from'@wowok/wowok';function readStats(a){const b=a;if(b['stats'])return{'batches':b['stats']['batches'],'byChannel':{...b['stats']['byChannel']},'dedupHits':b['stats']['dedupHits']};if(b['batches'])return{'batches':Object['values'](b['batches'])['reduce']((c,d)=>c+d,0x0),'byChannel':{...b['batches']},'dedupHits':b['dedupHits']??0x0};return{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0};}function isEoa(a){return wowAddressKind(a)==='user';}function isWfNodeId(a){return a['includes']('::node::');}class Gate{['wl'];constructor(a){this['wl']=a;}['allows'](a,b){if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['schemas'])return this['wl']['schemas']['includes'](a['id']);if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!![];}['allowsTable'](a,b){if(a['read']['kind']!=='table')return![];if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!!this['wl']['tableEdges']?.['includes'](a['id']);}['allowsEvent'](a,b){if(a['read']['kind']!=='event')return![];if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!!this['wl']['eventEdges']?.['includes'](a['id']);}['effectiveMaxHops'](a){const b=a['maxHops'],c=this['wl']['schemaHops']?.[a['id']];if(b===undefined)return c;if(c===undefined)return b;return Math['min'](b,c);}}class GraphBuilder{['graph'];['edgeIds']=new Set();['budget'];['exhausted']={};constructor(a,b,c){this['budget']=c,this['graph']={'network':a,'seed':b,'builtAt':Date['now'](),'nodes':new Map(),'edges':[],'out':new Map(),'inc':new Map(),'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}['addSeed'](a){const b=inferObjectType(a),c={'id':a,'kind':isWfNodeId(a)?'wfnode':isEoa(a)?'eoa':'object','objectType':b??undefined,'state':'seed','origins':[],'depth':0x0};return this['graph']['nodes']['set'](a,c),c;}['addNode'](a,b,c){const d=this['graph']['nodes']['get'](a);if(d){if(c)d['origins']['push']({'via':c['schema'],'from':c['from'],'depth':b});return d;}if(this['graph']['nodes']['size']>=this['budget']['maxNodes'])return this['exhausted']['nodes']=!![],undefined;const e=isWfNodeId(a),f=e?undefined:inferObjectType(a),g={'id':a,'kind':e?'wfnode':isEoa(a)?'eoa':'object','objectType':f??undefined,'state':e?'stub':'seed','origins':c?[{'via':c['schema'],'from':c['from'],'depth':b}]:[],'depth':b};return this['graph']['nodes']['set'](a,g),g;}['addEdge'](a,b,c,d,e){const f=c['to'],g=c['key']?'|'+c['key']:'',h=a['id']+'|'+b+'→'+f+g;if(this['edgeIds']['has'](h))return;this['edgeIds']['add'](h);const i={'id':h,'schema':a['id'],'family':a['family'],'from':b,'to':f,'retention':a['retention'],'observedAt':d,'payload':c['payload'],'truncated':e||a['retention']==='bounded_window','key':c['key']};this['graph']['edges']['push'](i),pushMap(this['graph']['out'],b,i),pushMap(this['graph']['inc'],f,i);}['markTruncation'](a){this['graph']['truncations']['push'](a);}['finalize'](a){return this['graph']['rpcReport']=readStats(a),this['graph']['budgetExhausted']=this['exhausted'],this['graph'];}}function pushMap(a,b,c){const d=a['get'](b);if(d)d['push'](c);else a['set'](b,[c]);}export async function expandTopology(a,c){const d=c['seed']['toLowerCase'](),e=mergeBudget(c['budget']),f=new Gate(c['edges']??{}),h=new GraphBuilder(c['network'],d,e);h['addSeed'](d);const i=new Set(),j=new Set(),l=new Set(),m=new Map(),n=new Set();let o=new Set([d]);for(let p=0x0;p<=e['maxDepth'];p++){if(o['size']===0x0)break;if(h['exhausted']['nodes'])break;const q=Date['now'](),r=new Map(),t=(D,E)=>{const F=r['get'](D);if(F)return F;const G=new Map();r['set'](D,G);const H=h['graph']['nodes']['get'](D);if(H&&H['origins']['length']>0x0&&!E['has'](D)){E['add'](D);for(const I of H['origins']){if(!I['via']||!I['from']||E['has'](I['from']))continue;const J=t(I['from'],E);for(const [L,M]of J){if(M<(G['get'](L)??Infinity))G['set'](L,M);}const K=(J['get'](I['via'])??0x0)+0x1;if(K<(G['get'](I['via'])??Infinity))G['set'](I['via'],K);}E['delete'](D);}return G;},u=[...o]['filter'](D=>{const E=h['graph']['nodes']['get'](D);return E['kind']==='object'&&(E['state']==='seed'||E['state']==='stub')&&!i['has'](D);}),v=new Set();if(u['length']>0x0){const D=await a['getObjects'](u);if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];for(const E of u){const F=h['graph']['nodes']['get'](E),G=lookupMapLower(D,E);i['add'](E);if(!G){F['state']='error',F['error']='not_found_or_failed',h['graph']['gaps']['push'](E);continue;}F['state']='fetched',F['raw']=G,F['objectType']=String(G['type']??F['objectType']??inferObjectType(E)??''),F['coinType']=extractCoinType(G['type_raw']),v['add'](E);}}const w=[];for(const H of v){const I=h['graph']['nodes']['get'](H);if(!I['objectType']||!I['raw'])continue;for(const J of extractObjectEdges(I['objectType'],I['raw'])){const K=EDGE_SCHEMA_BY_ID['get'](J['schemaId']);if(!K||!f['allows'](K,p))continue;w['push']({'schema':K,'sourceId':H,'refs':J['refs'],'observed':J['refs']['length']});}}const x=[...v]['filter'](L=>{const M=h['graph']['nodes']['get'](L);return EDGE_SCHEMAS['some'](N=>N['source']===M['objectType']&&N['read']['kind']==='table');});for(const L of x){const M=h['graph']['nodes']['get'](L),N=EDGE_SCHEMAS['filter'](P=>P['source']===M['objectType']&&P['read']['kind']==='table'&&f['allowsTable'](P,p)),O=new Map();for(const P of N){const Q=P['read']['rowType'],R=O['get'](Q)??[];R['push'](P),O['set'](Q,R);}for(const [S,T]of O){const U=L+'|'+S;if(l['has'](U))continue;l['add'](U);const V=Math['max'](...T['map'](a0=>e['perKindCaps'][a0['id']]??e['maxFanoutPerNode']));let W,X=![];try{const a0=await a['getTable'](L,{'maxItems':V});if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];W=a0['items'],X=a0['truncated'];}catch{h['graph']['gaps']['push'](L+'#'+S);continue;}const Y=new Set(T['map'](a1=>a1['id'])),Z=extractTableRefs(S,L,W)['filter'](a1=>{const a2=EDGE_SCHEMA_BY_ID['get'](a1['schemaId']);return a2['read']['kind']==='derived'||Y['has'](a1['schemaId']);});for(const a1 of Z){const a2=EDGE_SCHEMA_BY_ID['get'](a1['schemaId']);let a3=a1['refs'];a2['family']==='M'&&M['coinType']&&(a3=a3['map'](a4=>({...a4,'payload':{'coinType':M['coinType'],...a4['payload']}}))),w['push']({'schema':a2,'sourceId':L,'refs':a3,'observed':a3['length']});}X&&h['markTruncation']({'nodeId':L,'schema':T[0x0]['id'],'observed':W['length'],'limit':V,'reason':'table_page'});}}const y=[...o]['filter'](a4=>{const a5=h['graph']['nodes']['get'](a4);return a5['kind']!=='wfnode'&&(a5['kind']==='eoa'||a5['state']==='fetched');}),z=new Map(),A=new Map();for(const a4 of y){const a5=h['graph']['nodes']['get'](a4);for(const a6 of EDGE_SCHEMAS){if(a6['read']['kind']!=='reverse'||!f['allows'](a6,p))continue;if(!sourceMatches(a6['source'],a5))continue;const a7=a6['read']['parent'],a8=a4+'|'+a7;if(j['has'](a8))continue;if(!z['has'](a7))z['set'](a7,[]);z['get'](a7)['push'](a4);const a9=a4+'|'+a7+'|schema',aa=A['get'](a9)??[];aa['push'](a6),A['set'](a9,aa);}}for(const [ab,ac]of z){for(const ae of ac)j['add'](ae+'|'+ab);let ad=new Map();try{ad=await a['getKeyedFields'](ab,ac);if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];}catch{h['graph']['gaps']['push']('reverse:'+ab);continue;}for(const af of ac){const ag=A['get'](af+'|'+ab+'|schema')??[],ah=lookupMapLower(ad,af);if(!ah)continue;const ai=extractReverseRefs(ab,ah['data']??ah);for(const aj of ag){const ak=aj['read'];for(const al of ai){if(al['schemaId']!==REVERSE_GROUP_WILDCARD&&al['schemaId']!==aj['id'])continue;let am=al['refs']['map'](an=>an['to']?an:{...an,'to':af});ak['kind']==='reverse'&&ak['filterType']&&(am=am['filter'](an=>inferObjectType(an['to'])===ak['filterType']));if(am['length']===0x0)continue;w['push']({'schema':aj,'sourceId':af,'refs':am,'observed':am['length']});}}}}for(const an of EDGE_SCHEMAS){const ao=an['read'];if(ao['kind']!=='event'||!f['allowsEvent'](an,p))continue;const ap=[...o]['filter'](ar=>{if(n['has'](ar+'|'+an['id']))return![];return sourceMatches(an['source'],h['graph']['nodes']['get'](ar));});if(ap['length']===0x0)continue;let aq=m['get'](ao['eventType']);if(!aq){aq={'events':[],'truncated':![],'failed':![]};try{const ar=await a['getEvents'](ao['eventType'],{'maxPages':e['maxEventPages']});if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];aq['events']=ar['events'],aq['truncated']=ar['truncated'],ar['truncated']&&ar['events']['length']===0x0&&(aq['failed']=!![],h['graph']['gaps']['push']('events:'+ao['eventType']));}catch{aq['failed']=!![],h['graph']['gaps']['push']('events:'+ao['eventType']);}m['set'](ao['eventType'],aq);}if(aq['failed']){for(const as of ap)n['add'](as+'|'+an['id']);continue;}if(aq['truncated']){h['exhausted']['eventPages']=!![];for(const at of ap){h['markTruncation']({'nodeId':at,'schema':an['id'],'observed':aq['events']['length'],'limit':e['maxEventPages'],'reason':'event_pages'});}}for(const au of ap){n['add'](au+'|'+an['id']);const av=extractEventRefs(ao,au,aq['events']);if(av['length']===0x0)continue;w['push']({'schema':an,'sourceId':au,'refs':av,'observed':av['length'],'truncated':aq['truncated']});}}const B=new Set(),C=new Map();for(const aw of w){const ax=e['perKindCaps'][aw['schema']['id']]??e['maxFanoutPerNode'],ay=C['get'](aw['sourceId'])??0x0,az=Math['max'](0x0,e['maxFanoutPerNode']-ay),aA=Math['min'](ax,az),aB=aw['refs']['slice'](0x0,aA);aw['refs']['length']>aA&&h['markTruncation']({'nodeId':aw['sourceId'],'schema':aw['schema']['id'],'observed':aw['refs']['length'],'limit':a129a,'reason':'fanout'});const aC=new Map();for(const aD of aB){const aE=aD['from']??aw['sourceId'],aF=isWfNodeId(aD['to'])?p:p+0x1,aG=h['graph']['nodes']['has'](aD['to']),aH=f['effectiveMaxHops'](aw['schema']);if(aH!==undefined){const aJ=(t(aE,new Set())['get'](aw['schema']['id'])??0x0)+0x1;if(aJ>aH&&!aG){aC['set'](aE,(aC['get'](aE)??0x0)+0x1);continue;}}if(aF>e['maxDepth']&&!aG){h['exhausted']['depth']=!![];continue;}const aI=h['addNode'](aD['to'],Math['min'](aF,e['maxDepth']),{'schema':aw['schema']['id'],'from':aE});if(!aI)break;h['addEdge'](aw['schema'],aE,aD,q,aw['truncated']===!![]||aw['refs']['length']>aA),C['set'](aw['sourceId'],ay+0x1);if(!isWfNodeId(aD['to'])&&aF<=e['maxDepth'])B['add'](aD['to']);}for(const [aK,aL]of aC){h['markTruncation']({'nodeId':aK,'schema':aw['schema']['id'],'observed':aL,'limit':f['effectiveMaxHops'](aw['schema'])??0x0,'reason':'schema_hops'});}}if(h['exhausted']['rpcs']){h['graph']['gaps']['push']('budget:maxRpcs');break;}o=B;}return h['finalize'](a);}function sourceMatches(a,b){if(a==='ANY')return!![];if(a==='EOA')return b['kind']==='eoa';return b['objectType']===a;}function lookupMapLower(a,b){const c=a['get'](b);if(c!==undefined)return c;for(const [d,e]of a)if(d['toLowerCase']()===b)return e;return undefined;}export function orderCompletionInGraph(a,b){const c=a['nodes']['get'](b['toLowerCase']()),d=c?.['raw']?.['data']??c?.['raw']??{},e=String(d['machine']??''),f=String(d['progress']??''),g=a['nodes']['get'](f['toLowerCase']()),h=String((g?.['raw']?.['data']??g?.['raw']??{})['current']??'');let i=null;if(e){const j=e['toLowerCase']()+'::node::',k=a['edges']['filter'](l=>l['schema']==='wf.transition'&&l['from']['startsWith'](j))['map'](l=>({'node':l['payload']?.['node'],'prev_node':l['payload']?.['prevNode']}));if(k['length']>0x0)i=terminalNamesOfEdges(k);}return deriveOrderCompletion({'machine':e||null,'progress':f||null,'currentNode':h||null,'terminalNames':i});}
1
+ import{EDGE_SCHEMAS,EDGE_SCHEMA_BY_ID}from'./edge-schema.js';import{extractCoinType,extractEventRefs,extractObjectEdges,extractReverseRefs,extractTableRefs,inferObjectType,REVERSE_GROUP_WILDCARD}from'./extract.js';import{mergeBudget}from'./dataplane.js';import{deriveOrderCompletion,terminalNamesOfEdges}from'./order-status.js';import{LINKER_RING_LIMIT as a131a}from'./sdk-batch.js';import{wowAddressKind}from'@wowok/wowok';function readStats(a){const b=a;if(b['stats'])return{'batches':b['stats']['batches'],'byChannel':{...b['stats']['byChannel']},'dedupHits':b['stats']['dedupHits']};if(b['batches'])return{'batches':Object['values'](b['batches'])['reduce']((c,d)=>c+d,0x0),'byChannel':{...b['batches']},'dedupHits':b['dedupHits']??0x0};return{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0};}function isEoa(a){return wowAddressKind(a)==='user';}function isWfNodeId(a){return a['includes']('::node::');}class Gate{['wl'];constructor(a){this['wl']=a;}['allows'](a,b){if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['schemas'])return this['wl']['schemas']['includes'](a['id']);if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!![];}['allowsTable'](a,b){if(a['read']['kind']!=='table')return![];if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!!this['wl']['tableEdges']?.['includes'](a['id']);}['allowsEvent'](a,b){if(a['read']['kind']!=='event')return![];if(this['wl']['deny']?.['includes'](a['id']))return![];const c=this['wl']['familyDepths']?.[a['family']];if(c!==undefined&&b>=c)return![];if(this['wl']['families']&&!this['wl']['families']['includes'](a['family']))return![];return!!this['wl']['eventEdges']?.['includes'](a['id']);}['effectiveMaxHops'](a){const b=a['maxHops'],c=this['wl']['schemaHops']?.[a['id']];if(b===undefined)return c;if(c===undefined)return b;return Math['min'](b,c);}}class GraphBuilder{['graph'];['edgeIds']=new Set();['budget'];['exhausted']={};constructor(a,b,c){this['budget']=c,this['graph']={'network':a,'seed':b,'builtAt':Date['now'](),'nodes':new Map(),'edges':[],'out':new Map(),'inc':new Map(),'gaps':[],'truncations':[],'rpcReport':{'batches':0x0,'byChannel':{'objects':0x0,'keyedFields':0x0,'tables':0x0,'events':0x0},'dedupHits':0x0},'budgetExhausted':{}};}['addSeed'](a){const b=inferObjectType(a),c={'id':a,'kind':isWfNodeId(a)?'wfnode':isEoa(a)?'eoa':'object','objectType':b??undefined,'state':'seed','origins':[],'depth':0x0};return this['graph']['nodes']['set'](a,c),c;}['addNode'](a,b,c){const d=this['graph']['nodes']['get'](a);if(d){if(c)d['origins']['push']({'via':c['schema'],'from':c['from'],'depth':b});return d;}if(this['graph']['nodes']['size']>=this['budget']['maxNodes'])return this['exhausted']['nodes']=!![],undefined;const e=isWfNodeId(a),f=e?undefined:inferObjectType(a),g={'id':a,'kind':e?'wfnode':isEoa(a)?'eoa':'object','objectType':f??undefined,'state':e?'stub':'seed','origins':c?[{'via':c['schema'],'from':c['from'],'depth':b}]:[],'depth':b};return this['graph']['nodes']['set'](a,g),g;}['addEdge'](a,b,c,d,e){const f=c['to'],g=c['key']?'|'+c['key']:'',h=a['id']+'|'+b+'→'+f+g;if(this['edgeIds']['has'](h))return;this['edgeIds']['add'](h);const i={'id':h,'schema':a['id'],'family':a['family'],'from':b,'to':f,'retention':a['retention'],'observedAt':d,'payload':c['payload'],'truncated':e||a['retention']==='bounded_window','key':c['key']};this['graph']['edges']['push'](i),pushMap(this['graph']['out'],b,i),pushMap(this['graph']['inc'],f,i);}['markTruncation'](a){this['graph']['truncations']['push'](a);}['finalize'](a){return this['graph']['rpcReport']=readStats(a),this['graph']['budgetExhausted']=this['exhausted'],this['graph'];}}function pushMap(a,b,c){const d=a['get'](b);if(d)d['push'](c);else a['set'](b,[c]);}export async function expandTopology(a,c){const d=c['seed']['toLowerCase'](),e=mergeBudget(c['budget']),f=new Gate(c['edges']??{}),h=new GraphBuilder(c['network'],d,e);h['addSeed'](d);const i=new Set(),j=new Set(),l=new Set(),m=new Map(),n=new Set();let o=new Set([d]);for(let p=0x0;p<=e['maxDepth'];p++){if(o['size']===0x0)break;if(h['exhausted']['nodes'])break;const q=Date['now'](),r=new Map(),t=(D,E)=>{const F=r['get'](D);if(F)return F;const G=new Map();r['set'](D,G);const H=h['graph']['nodes']['get'](D);if(H&&H['origins']['length']>0x0&&!E['has'](D)){E['add'](D);for(const I of H['origins']){if(!I['via']||!I['from']||E['has'](I['from']))continue;const J=t(I['from'],E);for(const [L,M]of J){if(M<(G['get'](L)??Infinity))G['set'](L,M);}const K=(J['get'](I['via'])??0x0)+0x1;if(K<(G['get'](I['via'])??Infinity))G['set'](I['via'],K);}E['delete'](D);}return G;},u=[...o]['filter'](D=>{const E=h['graph']['nodes']['get'](D);return E['kind']==='object'&&(E['state']==='seed'||E['state']==='stub')&&!i['has'](D);}),v=new Set();if(u['length']>0x0){const D=await a['getObjects'](u);if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];for(const E of u){const F=h['graph']['nodes']['get'](E),G=lookupMapLower(D,E);i['add'](E);if(!G){F['state']='error',F['error']='not_found_or_failed',h['graph']['gaps']['push'](E);continue;}F['state']='fetched',F['raw']=G,F['objectType']=String(G['type']??F['objectType']??inferObjectType(E)??''),F['coinType']=extractCoinType(G['type_raw']),v['add'](E);}}const w=[];for(const H of v){const I=h['graph']['nodes']['get'](H);if(!I['objectType']||!I['raw'])continue;for(const J of extractObjectEdges(I['objectType'],I['raw'])){const K=EDGE_SCHEMA_BY_ID['get'](J['schemaId']);if(!K||!f['allows'](K,p))continue;w['push']({'schema':K,'sourceId':H,'refs':J['refs'],'observed':J['refs']['length']});}}const x=[...v]['filter'](L=>{const M=h['graph']['nodes']['get'](L);return EDGE_SCHEMAS['some'](N=>N['source']===M['objectType']&&N['read']['kind']==='table');});for(const L of x){const M=h['graph']['nodes']['get'](L),N=EDGE_SCHEMAS['filter'](P=>P['source']===M['objectType']&&P['read']['kind']==='table'&&f['allowsTable'](P,p)),O=new Map();for(const P of N){const Q=P['read']['rowType'],R=O['get'](Q)??[];R['push'](P),O['set'](Q,R);}for(const [S,T]of O){const U=L+'|'+S;if(l['has'](U))continue;l['add'](U);const V=Math['max'](...T['map'](a0=>e['perKindCaps'][a0['id']]??e['maxFanoutPerNode']));let W,X=![];try{const a0=await a['getTable'](L,{'maxItems':V});if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];W=a0['items'],X=a0['truncated'];}catch{h['graph']['gaps']['push'](L+'#'+S);continue;}const Y=new Set(T['map'](a1=>a1['id'])),Z=extractTableRefs(S,L,W)['filter'](a1=>{const a2=EDGE_SCHEMA_BY_ID['get'](a1['schemaId']);return a2['read']['kind']==='derived'||Y['has'](a1['schemaId']);});for(const a1 of Z){const a2=EDGE_SCHEMA_BY_ID['get'](a1['schemaId']);let a3=a1['refs'];a2['family']==='M'&&M['coinType']&&(a3=a3['map'](a4=>({...a4,'payload':{'coinType':M['coinType'],...a4['payload']}}))),w['push']({'schema':a2,'sourceId':L,'refs':a3,'observed':a3['length']});}X&&h['markTruncation']({'nodeId':L,'schema':T[0x0]['id'],'observed':W['length'],'limit':V,'reason':'table_page'});}}const y=[...o]['filter'](a4=>{const a5=h['graph']['nodes']['get'](a4);return a5['kind']!=='wfnode'&&(a5['kind']==='eoa'||a5['state']==='fetched');}),z=new Map(),A=new Map();for(const a4 of y){const a5=h['graph']['nodes']['get'](a4);for(const a6 of EDGE_SCHEMAS){if(a6['read']['kind']!=='reverse'||!f['allows'](a6,p))continue;if(!sourceMatches(a6['source'],a5))continue;const a7=a6['read']['parent'],a8=a4+'|'+a7;if(j['has'](a8))continue;if(!z['has'](a7))z['set'](a7,[]);z['get'](a7)['push'](a4);const a9=a4+'|'+a7+'|schema',aa=A['get'](a9)??[];aa['push'](a6),A['set'](a9,aa);}}for(const [ab,ac]of z){for(const ae of ac)j['add'](ae+'|'+ab);let ad=new Map();try{ad=await a['getKeyedFields'](ab,ac);if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];}catch{h['graph']['gaps']['push']('reverse:'+ab);continue;}for(const af of ac){const ag=A['get'](af+'|'+ab+'|schema')??[],ah=lookupMapLower(ad,af);if(!ah)continue;const ai=extractReverseRefs(ab,ah['data']??ah);for(const aj of ag){const ak=aj['read'];for(const al of ai){if(al['schemaId']!==REVERSE_GROUP_WILDCARD&&al['schemaId']!==aj['id'])continue;let am=al['refs']['map'](an=>an['to']?an:{...an,'to':af});ak['kind']==='reverse'&&ak['filterType']&&(am=am['filter'](an=>inferObjectType(an['to'])===ak['filterType']));if(am['length']===0x0)continue;w['push']({'schema':aj,'sourceId':af,'refs':am,'observed':am['length']});}}}}for(const an of EDGE_SCHEMAS){const ao=an['read'];if(ao['kind']!=='event'||!f['allowsEvent'](an,p))continue;const ap=[...o]['filter'](ar=>{if(n['has'](ar+'|'+an['id']))return![];return sourceMatches(an['source'],h['graph']['nodes']['get'](ar));});if(ap['length']===0x0)continue;let aq=m['get'](ao['eventType']);if(!aq){aq={'events':[],'truncated':![],'failed':![]};try{const ar=await a['getEvents'](ao['eventType'],{'maxPages':e['maxEventPages']});if(readStats(a)['batches']>=e['maxRpcs'])h['exhausted']['rpcs']=!![];aq['events']=ar['events'],aq['truncated']=ar['truncated'],ar['truncated']&&ar['events']['length']===0x0&&(aq['failed']=!![],h['graph']['gaps']['push']('events:'+ao['eventType']));}catch{aq['failed']=!![],h['graph']['gaps']['push']('events:'+ao['eventType']);}m['set'](ao['eventType'],aq);}if(aq['failed']){for(const as of ap)n['add'](as+'|'+an['id']);continue;}if(aq['truncated']){h['exhausted']['eventPages']=!![];for(const at of ap){h['markTruncation']({'nodeId':at,'schema':an['id'],'observed':aq['events']['length'],'limit':e['maxEventPages'],'reason':'event_pages'});}}for(const au of ap){n['add'](au+'|'+an['id']);const av=extractEventRefs(ao,au,aq['events']);if(av['length']===0x0)continue;w['push']({'schema':an,'sourceId':au,'refs':av,'observed':av['length'],'truncated':aq['truncated']});}}const B=new Set(),C=new Map();for(const aw of w){const ax=e['perKindCaps'][aw['schema']['id']]??e['maxFanoutPerNode'],ay=C['get'](aw['sourceId'])??0x0,az=Math['max'](0x0,e['maxFanoutPerNode']-ay),aA=Math['min'](ax,az),aB=aw['refs']['slice'](0x0,aA);aw['refs']['length']>aA&&h['markTruncation']({'nodeId':aw['sourceId'],'schema':aw['schema']['id'],'observed':aw['refs']['length'],'limit':a131a,'reason':'fanout'});const aC=new Map();for(const aD of aB){const aE=aD['from']??aw['sourceId'],aF=isWfNodeId(aD['to'])?p:p+0x1,aG=h['graph']['nodes']['has'](aD['to']),aH=f['effectiveMaxHops'](aw['schema']);if(aH!==undefined){const aJ=(t(aE,new Set())['get'](aw['schema']['id'])??0x0)+0x1;if(aJ>aH&&!aG){aC['set'](aE,(aC['get'](aE)??0x0)+0x1);continue;}}if(aF>e['maxDepth']&&!aG){h['exhausted']['depth']=!![];continue;}const aI=h['addNode'](aD['to'],Math['min'](aF,e['maxDepth']),{'schema':aw['schema']['id'],'from':aE});if(!aI)break;h['addEdge'](aw['schema'],aE,aD,q,aw['truncated']===!![]||aw['refs']['length']>aA),C['set'](aw['sourceId'],ay+0x1);if(!isWfNodeId(aD['to'])&&aF<=e['maxDepth'])B['add'](aD['to']);}for(const [aK,aL]of aC){h['markTruncation']({'nodeId':aK,'schema':aw['schema']['id'],'observed':aL,'limit':f['effectiveMaxHops'](aw['schema'])??0x0,'reason':'schema_hops'});}}if(h['exhausted']['rpcs']){h['graph']['gaps']['push']('budget:maxRpcs');break;}o=B;}return h['finalize'](a);}function sourceMatches(a,b){if(a==='ANY')return!![];if(a==='EOA')return b['kind']==='eoa';return b['objectType']===a;}function lookupMapLower(a,b){const c=a['get'](b);if(c!==undefined)return c;for(const [d,e]of a)if(d['toLowerCase']()===b)return e;return undefined;}export function orderCompletionInGraph(a,b){const c=a['nodes']['get'](b['toLowerCase']()),d=c?.['raw']?.['data']??c?.['raw']??{},e=String(d['machine']??''),f=String(d['progress']??''),g=a['nodes']['get'](f['toLowerCase']()),h=String((g?.['raw']?.['data']??g?.['raw']??{})['current']??'');let i=null;if(e){const j=e['toLowerCase']()+'::node::',k=a['edges']['filter'](l=>l['schema']==='wf.transition'&&l['from']['startsWith'](j))['map'](l=>({'node':l['payload']?.['node'],'prev_node':l['payload']?.['prevNode']}));if(k['length']>0x0)i=terminalNamesOfEdges(k);}return deriveOrderCompletion({'machine':e||null,'progress':f||null,'currentNode':h||null,'terminalNames':i});}
@@ -1 +1 @@
1
- import{applyExposureGate as a131a}from'../../config/exposure.js';export{resolveViability,factRef,parseFactRef}from'../../config/exposure.js';export const EXPOSURE_ROLES={'buyer':'buyer','merchant':'merchant','supplier':'supplier','collaborator':'collaborator','arbitrator':'arbitrator','system':'system','neutral':'neutral'};export function applyExposureGate(a,b){return a131a(a,b);}export function lossParty(a,b){return{'role':a,'basis':b};}export function gainPath(a,b,c,d){return{'role':a,'path':b,'viability':c,'gate':d};}
1
+ import{applyExposureGate as a133a}from'../../config/exposure.js';export{resolveViability,factRef,parseFactRef}from'../../config/exposure.js';export const EXPOSURE_ROLES={'buyer':'buyer','merchant':'merchant','supplier':'supplier','collaborator':'collaborator','arbitrator':'arbitrator','system':'system','neutral':'neutral'};export function applyExposureGate(a,b){return a133a(a,b);}export function lossParty(a,b){return{'role':a,'basis':b};}export function gainPath(a,b,c,d){return{'role':a,'path':b,'viability':c,'gate':d};}
@@ -0,0 +1 @@
1
+ import{LocalMark}from'@wowok/wowok';import{fetchMachineNodes}from'../graph/onchain/sdk-batch.js';import{forwardOperatorKind}from'../knowledge/workflow-guidance.js';let depsOverride;export function setForwardRosterPreflightDeps(a){depsOverride=a;}function rosterDeps(){if(depsOverride)return depsOverride;return{'resolveAddress':async a=>a['startsWith']('0x')?a:await LocalMark['Instance']()['get_address'](a)['catch'](()=>undefined)??undefined,'fetchProgress':async(a,b)=>{const {batchQueryObjectsByIds:c}=await import('../graph/onchain/sdk-batch.js'),d=await c([a],b,!![]),e=d?.[0x0];if(e?.['type']!=='Progress')return undefined;return e?.['data']??e;},'fetchNodes':(a,b)=>fetchMachineNodes(a,b,!![])};}const ARB_ROLE_PATTERN=/arb|arbitr|ruling|jury|panel/i;export async function preflightForwardRoster(a){const b=[],c=String(a['data']?.['operate']?.['operation']?.['forward']??'')['trim']();if(!c)return{'lines':b};const d=typeof a['data']?.['operate']?.['operation']?.['next_node_name']==='string'?a['data']['operate']['operation']['next_node_name']:undefined,e=a['env']?.['network'],g=a['env']?.['account'];if(typeof g!=='string'||g==='')return{'lines':b};const h=rosterDeps(),i=await h['resolveAddress'](g)['catch'](()=>undefined);if(!i||!i['startsWith']('0x'))return{'lines':b};const j=typeof a['data']?.['object']==='string'?a['data']['object']:undefined;if(!j)return{'lines':b};const k=await h['resolveAddress'](j)['catch'](()=>undefined);if(!k)return{'lines':b};const l=await h['fetchProgress'](k,e)['catch'](()=>undefined),m=typeof l?.['machine']==='string'?l['machine']:undefined;if(!m)return{'lines':b};const n=await h['fetchNodes'](m,e)['catch'](()=>[]),o=typeof l?.['current']==='string'?l['current']:'',p=pickForward(n,o,c,d);if(!p)return{'lines':b};const q=p['forward'];if(forwardOperatorKind(q)!=='named_operator')return{'lines':b};const r=q['namedOperator'];if(q['permissionIndex']!==undefined&&q['permissionIndex']!==null)return{'lines':b};const s=(Array['isArray'](l?.['namedOperator'])?l['namedOperator']:[])['find'](x=>String(x?.['name']??'')===r),t=(Array['isArray'](s?.['operators'])?s['operators']:[])['map'](x=>String(x)),u=t['some'](x=>x['toLowerCase']()===i['toLowerCase']());if(u)return{'lines':b};const v=x=>x['slice'](0x0,0xc)+'…',w='onchain_operations\x20{\x20operation_type:\x20\x27progress\x27,\x20data:\x20{\x20object:\x20\x27'+j+'\x27,\x20'+('progress_namedOperator:\x20{\x20op:\x20\x27add\x27,\x20name:\x20\x27'+r+'\x27,\x20operators:\x20[\x27<address>\x27]\x20}\x20}\x20}\x20')+'(the\x20roster\x20is\x20PER-ORDER\x20—\x20seed\x20it\x20on\x20every\x20new\x20order;\x20the\x20roster-write\x20permission\x20index\x20221\x20must\x20be\x20granted\x20to\x20the\x20seeding\x20signer)';if(t['length']===0x0){if(ARB_ROLE_PATTERN['test'](r))return{'lines':['FORWARD\x20ROSTER\x20PREFLIGHT:\x20forward\x20\x27'+c+'\x27\x20pins\x20named\x20operator\x20\x27'+r+'\x27\x20and\x20this\x20order\x27s\x20roster\x20'+'namespace\x20is\x20EMPTY\x20—\x20the\x20forward\x20would\x20abort\x20(E_PERMISSION_DENIED).\x20Arbitration-class\x20roles\x20are\x20never\x20'+('auto-seeded\x20with\x20the\x20attempting\x20signer\x20(self-dealing).\x20If\x20YOU\x20are\x20the\x20intended\x20executor,\x20seed\x20explicitly:\x20'+w)]};return{'lines':['FORWARD\x20ROSTER\x20PREFLIGHT:\x20forward\x20\x27'+c+'\x27\x20pins\x20named\x20operator\x20\x27'+r+'\x27\x20and\x20this\x20order\x27s\x20roster\x20'+'namespace\x20is\x20EMPTY\x20(every\x20new\x20order\x20starts\x20with\x20an\x20empty\x20roster\x20by\x20design)\x20—\x20auto-seeding\x20the\x20attempting\x20'+('signer\x20'+v(i)+'\x20BEFORE\x20the\x20forward,\x20so\x20this\x20call\x20lands\x20in\x20one\x20shot\x20instead\x20of\x20')+'abort\x20→\x20hand-seed\x20→\x20retry\x20(ss\x20#33\x20rework).\x20Explicit\x20opt-out:\x20seed\x20a\x20different\x20address\x20first\x20'+('via\x20'+w)],'seed':{'name':r,'operators':[i]}};}return{'lines':[],'refusal':'FORWARD\x20ROSTER\x20PREFLIGHT\x20—\x20refusal\x20(PROVEN\x20abort):\x20forward\x20\x27'+c+'\x27\x20pins\x20named\x20operator\x20\x27'+r+'\x27,\x20'+('whose\x20roster\x20for\x20this\x20order\x20is\x20['+t['map'](v)['join'](',\x20')+'];\x20the\x20attempting\x20signer\x20'+v(i)+'\x20is\x20NOT\x20a\x20member,\x20')+'and\x20the\x20forward\x20has\x20NO\x20permissionIndex\x20fallback\x20—\x20the\x20Move\x20pre-check\x20consults\x20the\x20roster\x20FIRST\x20'+'(IsNamedOperator),\x20so\x20this\x20exact\x20call\x20would\x20abort\x20E_PERMISSION_DENIED.\x20No\x20transaction\x20was\x20submitted.\x20'+'Cure\x20(pick\x20one):\x20(1)\x20re-run\x20the\x20forward\x20signed\x20by\x20a\x20roster\x20member;\x20(2)\x20add\x20this\x20signer\x20to\x20the\x20roster\x20'+('explicitly\x20(a\x20governance\x20decision,\x20never\x20auto-applied):\x20'+w)};}function pickForward(a,b,c,d){let e;for(const g of Array['isArray'](a)?a:[]){for(const h of Array['isArray'](g?.['pairs'])?g['pairs']:[]){if(h?.['prev_node']!==b)continue;for(const i of Array['isArray'](h['forwards'])?h['forwards']:[]){if(i?.['name']!==c)continue;if(d===undefined||g['name']===d)return{'forward':i,'node':g['name']};e??={'forward':i,'node':g['name']};}}}return e;}export async function executeRosterSeed(a,b,c){try{const {CallProgress:d}=await import('@wowok/wowok'),f=new d({'object':b,'progress_namedOperator':a});return await f['call'](c),'FORWARD\x20ROSTER\x20PREFLIGHT:\x20roster\x20\x27'+a['name']+'\x27\x20seeded\x20with\x20'+a['operators']['map'](g=>g['slice'](0x0,0xc)+'…')['join'](',\x20')+'\x20—\x20the\x20forward\x20can\x20now\x20pass\x20its\x20named-operator\x20pre-check.';}catch(g){return'FORWARD\x20ROSTER\x20PREFLIGHT:\x20the\x20roster\x20auto-seed\x20for\x20\x27'+a['name']+'\x27\x20FAILED\x20'+('('+String(g?.['message']??g)['slice'](0x0,0xc8)+')\x20—\x20seed\x20it\x20manually\x20before\x20re-driving\x20the\x20forward\x20')+'(progress_namedOperator\x20op:\x27add\x27).';}}
@@ -1 +1 @@
1
- import{query_received,query_objects}from'@wowok/wowok';import{batchQueryObjectsByIds,fetchMachineNodes,fetchOrderContext,fetchPermissionContext}from'../graph/onchain/sdk-batch.js';import{extractCoinType}from'../graph/onchain/extract.js';import{enumerateActionableForwards}from'../knowledge/index.js';import{formatChainValue}from'../knowledge/fund-layer.js';import{loadGuardJsonFromChain}from'../knowledge/guard-submission-brief.js';import{formatShortAddress}from'../persona/address-format.js';export async function detectPaymentUnclaimed(a,b,c){const d=[];for(const e of a){const f=e['toLowerCase']();let g=null;try{g=await c['queryUnclaimed'](f,b);}catch{g=null;}if(!g||g['balance']<=0x0n||g['count']<=0x0)continue;let h;try{h=await c['formatAmount']?.(g['balance'],g['token_type'],b);}catch{h=undefined;}const i=h??g['balance']['toString']()+'\x20(smallest\x20unit)';d['push']({'dedupe_key':'payment_unclaimed:'+f,'detector':'payment_unclaimed','beneficiary':f,'operation':{'operation_type':'payment','data':{'receive':!![]}},'title':'Unclaimed\x20funds\x20—\x20'+i+'\x20waiting\x20to\x20be\x20received','detail':g['count']+'\x20CoinWrapper\x20object(s)\x20hold\x20'+i+'\x20for\x20this\x20account.\x20'+'They\x20are\x20owned\x20but\x20NOT\x20spendable\x20until\x20unwrapped.\x20Execute\x20payment\x20{receive:true}\x20'+'as\x20this\x20account\x20to\x20unwrap\x20all\x20of\x20them\x20into\x20the\x20wallet\x20in\x20one\x20transaction\x20(keeper\x20can\x20'+'auto-execute\x20this\x20when\x20a\x20payment_unclaimed\x20auto-exec\x20rule\x20covers\x20the\x20account).','benefit':'Receive\x20'+i+'\x20into\x20your\x20wallet','state_fingerprint':g['count']+':'+g['balance']['toString']()});}return d;}export function extractGuardSignerPins(a){const b=Array['isArray'](a['table'])?a['table']:[],c=[],d=(e,f)=>{if(!e||typeof e!=='object')return;const g=f||e['type']==='logic_or'||e['type']==='logic_not';if(e['type']==='logic_equal'){const h=Array['isArray'](e['nodes'])?e['nodes']:e['left']&&e['right']?[e['left'],e['right']]:[],i=h['findIndex'](k=>k?.['type']==='context'&&k?.['context']==='Signer'),j=i>=0x0?h[0x1-i]:undefined;if(j?.['type']==='identifier'&&!g){const k=b['find'](l=>Number(l?.['identifier'])===Number(j['identifier']));k&&k['b_submission']!==!![]&&k['value_type']==='Address'&&typeof k['value']==='string'&&k['value']['startsWith']('0x')&&k['value']['length']>0x2&&c['push'](String(k['value']));}}for(const l of[e['nodes'],e['left'],e['right']]['flat']()){if(l&&typeof l==='object')d(l,g);}};return d(a['root'],![]),c;}export async function detectProgressActionable(a,b,c,d){const e=(a['order_children']??[])['filter'](p=>p['type']==='progress'&&typeof p['object']==='string')['map'](p=>p['object'])['filter'](p=>p['startsWith']('0x')),f=(a['focus']??[])['map'](p=>p['object'])['filter'](p=>typeof p==='string'&&p['startsWith']('0x')),g=[...new Set([...e,...f])]['slice'](0x0,Math['max'](0x1,d));if(g['length']===0x0||(a['accounts']??[])['length']===0x0)return[];let h;try{h=await c['fetchProgressFields'](g,b);}catch{return[];}const i=new Map(),j=new Map(),k=new Map(),l=new Map(),m=c['fetchGuardJson']??(async(p,q)=>(await loadGuardJsonFromChain(p,q))?.['json']),n=a['accounts'],o=[];for(const [p,q]of h){const r=typeof q?.['machine']==='string'?q['machine']:undefined;if(!r)continue;const s=r['toLowerCase']();let t=i['get'](s);if(!t){try{t=await c['fetchMachineNodes'](r,b);}catch{t=[];}i['set'](s,t);}if(t['length']===0x0)continue;let u;if(!j['has'](s)){let B;try{B=await c['fetchMachinePermissionAddr'](r,b);}catch{B=undefined;}let C;if(B)try{C=await c['fetchPermissionContext'](B,b);}catch{C=undefined;}j['set'](s,C);}u=j['get'](s);const v=typeof q?.['task']==='string'?q['task']:undefined;let w;if(v){const D=v['toLowerCase']();if(!k['has'](D))try{k['set'](D,await c['fetchOrderContext'](v,b));}catch{k['set'](D,undefined);}w=k['get'](D);}const x=(Array['isArray'](q?.['namedOperator'])?q['namedOperator']:[])['map'](E=>({'name':String(E?.['name']??''),'operators':(Array['isArray'](E?.['operators'])?E['operators']:[])['map'](F=>String(F))})),y=enumerateActionableForwards(q,t,n,x,w,u),z=typeof q?.['current']==='string'?q['current']:'',A=v?'order\x20'+formatShortAddress(v):'no\x20bound\x20order';for(const E of y){let F=[];const G=typeof E['guard']==='string'?E['guard']['toLowerCase']():'';if(G){const H=l['get'](G);if(H!==undefined)F=H;else{let I;try{I=await m(E['guard'],b);}catch{I=undefined;}F=I?extractGuardSignerPins(I):[],l['set'](G,F);}}for(const J of E['executable_accounts']){if(F['length']>0x0){const N=F[0x0]['toLowerCase'](),O=F['every'](P=>P['toLowerCase']()===N);if(O&&N!==J['toLowerCase']())continue;}const K=E['threshold']>0x1?'\x20—\x20cooperation\x20threshold\x20'+E['threshold']+'\x20(weight\x20'+E['weight']+');\x20other\x20distinct\x20forwards\x20may\x20still\x20be\x20needed':'',L=E['guard']?'\x20—\x20guard\x20'+formatShortAddress(E['guard'])+'\x20must\x20be\x20satisfied\x20(submissions\x20may\x20be\x20required)':'',M=w&&J===w['builder']['toLowerCase']()?'You\x20are\x20the\x20order\x20owner':E['operator_kind']==='named_operator'?'You\x20hold\x20the\x20named-operator\x20role\x20\x27'+E['named_operator']+'\x27':'You\x20hold\x20the\x20required\x20permission\x20index';o['push']({'dedupe_key':'progress_actionable:'+p+':'+J+':'+E['next_node']+'|'+E['forward'],'detector':'progress_actionable','beneficiary':J,'object':p,'title':'Workflow\x20action\x20available:\x20\x27'+E['forward']+'\x27\x20→\x20'+E['next_node'],'detail':'Progress\x20'+formatShortAddress(p)+'\x20('+A+')\x20sits\x20at\x20node\x20\x27'+z+'\x27.\x20'+(M+'\x20—\x20you\x20can\x20execute\x20forward\x20\x27'+E['forward']+'\x27\x20into\x20\x27'+E['next_node']+'\x27')+(''+K+L+'.\x20Advance\x20it\x20via\x20workflow_operation\x20')+'(action=\x27list\x27\x20to\x20review,\x20action=\x27operate\x27\x20to\x20execute).\x20'+'Who\x20benefits,\x20who\x20pushes:\x20waiting\x20does\x20not\x20move\x20the\x20order\x20—\x20the\x20party\x20that\x20'+'gains\x20from\x20the\x20next\x20step\x20sends\x20the\x20transaction.','benefit':benefitOfNode(E['next_node']),'state_fingerprint':E['weight']+':'+E['threshold']+':'+(E['guard']??'')+':'+E['operator_kind']});}}}return o;}function benefitOfNode(a){if(/(^|_)(completed?|done|finished|received|delivered|accepted|confirmed|finalized|success|approved)(_|$)/i['test'](a))return'Completing\x20this\x20step\x20settles\x20the\x20order\x20—\x20funds\x20are\x20released\x20to\x20the\x20provider';if(/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?)(_|$)/i['test'](a))return'This\x20step\x20routes\x20to\x20cancellation/refund\x20—\x20funds\x20return\x20to\x20the\x20buyer';if(/(^|_)(interrupt(ed)?|exception|dispute(d)?|fail(ed)?|abort(ed)?|reject(ed)?)(_|$)/i['test'](a))return'This\x20step\x20opens\x20the\x20exception\x20path\x20—\x20review\x20before\x20advancing';return'Advancing\x20keeps\x20the\x20order\x20moving\x20toward\x20settlement';}const REFUND_FLAVOR_RE=/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?|expired)(_|$)/i;export function evaluateSettlementPending(a,b,c,d){let e;try{e=typeof b?.['balance']==='bigint'?b['balance']:BigInt(b?.['balance']??0x0);}catch{return null;}if(e<=0x0n)return null;const f=Array['isArray'](b?.['payment'])?b['payment']:[];if(f['length']>0x0)return null;const g=typeof c?.['current']==='string'?c['current']:'';if(!g)return null;if(!Array['isArray'](d)||d['length']===0x0)return null;const h=new Set();for(const j of d){for(const k of j['pairs']){if((k['forwards']??[])['length']>0x0)h['add'](j['name']);}}if(h['has'](g))return null;const i=(Array['isArray'](b?.['allocators']?.['allocators'])?b['allocators']['allocators']:[])['map'](l=>String(l?.['guard']??''))['filter'](l=>l);return{'terminal_node':g,'balance':e,'payments':f['length'],'guards':i,'is_refund_terminal':REFUND_FLAVOR_RE['test'](g)};}export async function detectSettlementPending(a,b,c,e){const f=(a['accounts']??[])['map'](q=>q['toLowerCase']());if(f['length']===0x0)return[];const g=(a['orders']??[])['slice'](0x0,Math['max'](0x1,e));if(g['length']===0x0)return[];const h=g['map'](q=>q['order'])['filter'](q=>typeof q==='string'&&q['startsWith']('0x'));let i;try{i=await c['fetchOrderFields'](h,b);}catch{return[];}const j=[],k=[];for(const q of i['values']()){const r=q?.['data']??q;if(typeof r?.['allocation']==='string'&&r['allocation']['startsWith']('0x'))j['push'](r['allocation']);if(typeof r?.['progress']==='string'&&r['progress']['startsWith']('0x'))k['push'](r['progress']);}let l=new Map(),m=new Map();try{l=await c['fetchAllocationFields']([...new Set(j)],b);}catch{return[];}try{m=await c['fetchProgressFields']([...new Set(k)],b);}catch{m=new Map();}const n=new Set((a['services']??[])['map'](t=>t['toLowerCase']())),o=new Map(),p=[];for(const [s,t]of i){const u=t?.['data']??t,v=typeof u?.['allocation']==='string'?u['allocation']:undefined;if(!v)continue;const w=l['get'](v['toLowerCase']());if(!w)continue;const x=w?.['data']??w,y=typeof u?.['progress']==='string'?u['progress']:undefined,z=y?m['get'](y['toLowerCase']()):undefined,A=typeof z?.['machine']==='string'?z['machine']:typeof u?.['machine']==='string'?u['machine']:undefined;if(!A)continue;let B=o['get'](A['toLowerCase']());if(!B){try{B=await c['fetchMachineNodes'](A,b);}catch{B=[];}o['set'](A['toLowerCase'](),B);}const C=evaluateSettlementPending(u,x,z,B);if(!C)continue;const D=[];if(C['is_refund_terminal']){const I=typeof u?.['builder']==='string'?u['builder']['toLowerCase']():'';if(I&&f['includes'](I))D['push'](I);}else{const J=typeof u?.['service']==='string'?u['service']['toLowerCase']():'';if(J&&n['has'](J))D['push'](...f);}if(D['length']===0x0)continue;const E=C['guards']['length']>0x0?'Candidate\x20settle\x20guards\x20on\x20this\x20pool:\x20'+C['guards']['map'](K=>formatShortAddress(K))['join'](',\x20')+'.':'This\x20pool\x20exposes\x20no\x20readable\x20allocator\x20guards\x20—\x20inspect\x20it\x20before\x20acting.';let F;try{F=await c['formatAmount']?.(C['balance'],extractCoinType(w?.['type_raw']),b);}catch{F=undefined;}const G=F??C['balance']['toString']()+'\x20(smallest\x20unit)',H=C['is_refund_terminal']?'refund/cancel':'completion';for(const K of D){p['push']({'dedupe_key':'settlement_pending:'+s+':'+v,'detector':'settlement_pending','beneficiary':K,'object':v,'title':'Unsettled\x20escrow\x20—\x20'+G+'\x20on\x20a\x20'+H+'\x20terminal','detail':'Order\x20'+formatShortAddress(s)+'\x20sits\x20on\x20terminal\x20node\x20\x27'+C['terminal_node']+'\x27\x20but\x20its\x20Allocation\x20'+(formatShortAddress(v)+'\x20still\x20holds\x20'+G+'\x20and\x20has\x20emitted\x20no\x20Payment.\x20The\x20chain\x20never\x20')+('auto-settles:\x20someone\x20must\x20trigger\x20the\x20matching\x20guard.\x20'+E+'\x20Execute\x20via\x20allocation_operation\x20')+'(operation_type=\x27allocation\x27,\x20alloc_by_guard=<guard>)\x20as\x20an\x20account\x20that\x20can\x20satisfy\x20the\x20guard,\x20then\x20'+'recipients\x20claim\x20their\x20CoinWrappers\x20(payment\x20receive).\x20Trigger\x20ONCE\x20and\x20verify\x20the\x20pool\x20drained\x20—\x20a\x20'+'fully-drained\x20pool\x20aborts\x20on\x20re-trigger,\x20but\x20a\x20max-capped\x20pool\x20re-splits\x20the\x20remainder.\x20'+'Who\x20benefits,\x20who\x20pushes:\x20waiting\x20keeps\x20the\x20funds\x20frozen\x20and\x20leaves\x20the\x20dispute\x20window\x20open.','benefit':'Release\x20'+G+'\x20from\x20escrow\x20to\x20its\x20rightful\x20recipients','state_fingerprint':C['balance']['toString']()+':'+C['payments']+':'+C['terminal_node']});}}return p;}export async function detectTimeoutIntermediate(a,b,c,d,e){const f=(a['order_children']??[])['filter'](m=>m['type']==='progress'&&typeof m['object']==='string')['map'](m=>m['object'])['filter'](m=>m['startsWith']('0x')),g=(a['focus']??[])['map'](m=>m['object'])['filter'](m=>typeof m==='string'&&m['startsWith']('0x')),h=[...new Set([...f,...g])]['slice'](0x0,Math['max'](0x1,d));if(h['length']===0x0||(a['accounts']??[])['length']===0x0)return[];let i;try{i=await c['fetchProgressFields'](h,b);}catch{return[];}const j=c['nowMs'](),k=new Map(),l=[];for(const [m,n]of i){const o=typeof n?.['current']==='string'?n['current']:'',p=typeof n?.['current_time']==='number'?n['current_time']:0x0;if(!o||p<=0x0)continue;const q=typeof n?.['machine']==='string'?n['machine']:undefined;if(!q)continue;const r=q['toLowerCase']();let s=k['get'](r);if(!s){try{s=await c['fetchMachineNodes'](q,b);}catch{s=[];}k['set'](r,s);}const t=s['find'](z=>z['name']===o);if(!t)continue;const u=t['pairs']['some'](z=>(z['forwards']??[])['length']>0x0);if(!u)continue;const v=j-p;if(v<e)continue;const w=(a['accounts']??[])['map'](z=>z['toLowerCase']()),x=w[0x0];if(!x)continue;const y=Math['floor'](v/(0x3e8*0x3c*0x3c));l['push']({'dedupe_key':'timeout_intermediate:'+m+':'+o,'detector':'timeout_intermediate','beneficiary':x,'object':m,'title':'Possible\x20stuck\x20intermediate\x20state\x20—\x20\x27'+o+'\x27\x20for\x20'+y+'h','detail':'Progress\x20'+formatShortAddress(m)+'\x20has\x20been\x20on\x20node\x20\x27'+o+'\x27\x20for\x20'+y+'\x20hours\x20'+('(since\x20'+new Date(p)['toISOString']()+').\x20This\x20node\x20has\x20outgoing\x20forwards\x20but\x20none\x20have\x20fired.\x20')+'If\x20this\x20node\x20has\x20a\x20time-lock\x20guard\x20(confirm\x20timeout,\x20acceptance\x20timeout,\x20inspection\x20timeout,\x20etc.),\x20'+'the\x20keeper\x20may\x20need\x20to\x20advance\x20it.\x20Check\x20the\x20template\x27s\x20keeper_dependencies\x20and\x20the\x20guard\x27s\x20time\x20window\x20'+'before\x20acting.\x20Who\x20benefits,\x20who\x20pushes:\x20a\x20stuck\x20intermediate\x20state\x20blocks\x20the\x20order\x27s\x20funds\x20and\x20'+'business\x20flow\x20—\x20the\x20party\x20that\x20gains\x20from\x20unblocking\x20it\x20sends\x20the\x20transaction.','benefit':'Unblock\x20the\x20order\x20stuck\x20at\x20\x27'+o+'\x27','state_fingerprint':o+':'+p+':'+v});}return l;}export function realPaymentDetectorDeps(){return{'queryUnclaimed':async(a,b)=>{const c=await query_received({'name_or_address':{'name_or_address':a},'type':'CoinWrapper','network':b});if(!c||typeof c!=='object'||!Array['isArray'](c['received']))return null;const d=typeof c['balance']==='bigint'?c['balance']:BigInt(c['balance']??0x0);return{'balance':d,'count':c['received']['length'],'token_type':typeof c['token_type']==='string'&&c['token_type']?c['token_type']:undefined};},'formatAmount':async(a,b,c)=>{if(!b)return undefined;const e=await formatChainValue(a,b,c),f=e['symbol']?'\x20'+e['symbol']:'';return e['precision_known']?''+e['display']+f:''+e['raw']+f;}};}export function realProgressDetectorDeps(){return{'fetchProgressFields':async(a,b)=>{const c=await batchQueryObjectsByIds(a,b,![]),e=new Map();for(const f of c??[]){const g=f?.['data']??f;if(f?.['type']!=='Progress')continue;const h=String(f?.['query_name']??f?.['object']??'')['toLowerCase']();if(h)e['set'](h,g);}return e;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'fetchMachinePermissionAddr':async(a,b)=>{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0],e=(d?.['data']??d)?.['permission'];return typeof e==='string'&&e?e:undefined;},'fetchPermissionContext':(a,b)=>fetchPermissionContext(a,b,![]),'fetchOrderContext':(a,b)=>fetchOrderContext(a,b,![])};}async function fieldsByType(a,b,c){const d=await batchQueryObjectsByIds(a,b,![]),e=new Map();for(const f of d??[]){if(f?.['type']!==c)continue;const g=String(f?.['query_name']??f?.['object']??'')['toLowerCase']();if(g)e['set'](g,f);}return e;}export function realSettlementDetectorDeps(){return{'fetchOrderFields':(a,b)=>fieldsByType(a,b,'Order'),'fetchAllocationFields':(a,b)=>fieldsByType(a,b,'Allocation'),'fetchProgressFields':async(a,b)=>{const c=await fieldsByType(a,b,'Progress'),d=new Map();for(const [e,f]of c)d['set'](e,f?.['data']??f);return d;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'formatAmount':async(a,b,c)=>{if(!b)return undefined;const e=await formatChainValue(a,b,c),f=e['symbol']?'\x20'+e['symbol']:'';return e['precision_known']?''+e['display']+f:''+e['raw']+f;}};}export function realTimeoutDetectorDeps(){return{'fetchProgressFields':async(a,b)=>{const c=await fieldsByType(a,b,'Progress'),d=new Map();for(const [e,f]of c)d['set'](e,f?.['data']??f);return d;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'nowMs':()=>Date['now']()};}
1
+ import{query_received,query_objects}from'@wowok/wowok';import{batchQueryObjectsByIds,fetchMachineNodes,fetchOrderContext,fetchPermissionContext}from'../graph/onchain/sdk-batch.js';import{extractCoinType}from'../graph/onchain/extract.js';import{enumerateActionableForwards}from'../knowledge/index.js';import{formatChainValue}from'../knowledge/fund-layer.js';import{loadGuardJsonFromChain}from'../knowledge/guard-submission-brief.js';import{formatShortAddress}from'../persona/address-format.js';export async function detectPaymentUnclaimed(a,b,c){const d=[];for(const e of a){const f=e['toLowerCase']();let g=null;try{g=await c['queryUnclaimed'](f,b);}catch{g=null;}if(!g||g['balance']<=0x0n||g['count']<=0x0)continue;let h;try{h=await c['formatAmount']?.(g['balance'],g['token_type'],b);}catch{h=undefined;}const i=h??g['balance']['toString']()+'\x20(smallest\x20unit)';d['push']({'dedupe_key':'payment_unclaimed:'+f,'detector':'payment_unclaimed','beneficiary':f,'operation':{'operation_type':'payment','data':{'receive':!![]}},'title':'Unclaimed\x20funds\x20—\x20'+i+'\x20waiting\x20to\x20be\x20received','detail':g['count']+'\x20CoinWrapper\x20object(s)\x20hold\x20'+i+'\x20for\x20this\x20account.\x20'+'They\x20are\x20owned\x20but\x20NOT\x20spendable\x20until\x20unwrapped.\x20Execute\x20payment\x20{receive:true}\x20'+'as\x20this\x20account\x20to\x20unwrap\x20all\x20of\x20them\x20into\x20the\x20wallet\x20in\x20one\x20transaction\x20(keeper\x20can\x20'+'auto-execute\x20this\x20when\x20a\x20payment_unclaimed\x20auto-exec\x20rule\x20covers\x20the\x20account).','benefit':'Receive\x20'+i+'\x20into\x20your\x20wallet','state_fingerprint':g['count']+':'+g['balance']['toString']()});}return d;}export function extractGuardSignerPins(a){const b=Array['isArray'](a['table'])?a['table']:[],c=[],d=(e,f)=>{if(!e||typeof e!=='object')return;const g=f||e['type']==='logic_or'||e['type']==='logic_not';if(e['type']==='logic_equal'){const h=Array['isArray'](e['nodes'])?e['nodes']:e['left']&&e['right']?[e['left'],e['right']]:[],i=h['findIndex'](k=>k?.['type']==='context'&&k?.['context']==='Signer'),j=i>=0x0?h[0x1-i]:undefined;if(j?.['type']==='identifier'&&!g){const k=b['find'](l=>Number(l?.['identifier'])===Number(j['identifier']));k&&k['b_submission']!==!![]&&k['value_type']==='Address'&&typeof k['value']==='string'&&k['value']['startsWith']('0x')&&k['value']['length']>0x2&&c['push'](String(k['value']));}}for(const l of[e['nodes'],e['left'],e['right']]['flat']()){if(l&&typeof l==='object')d(l,g);}};return d(a['root'],![]),c;}export async function detectProgressActionable(a,b,c,d){const e=(a['order_children']??[])['filter'](p=>p['type']==='progress'&&typeof p['object']==='string')['map'](p=>p['object'])['filter'](p=>p['startsWith']('0x')),f=(a['focus']??[])['map'](p=>p['object'])['filter'](p=>typeof p==='string'&&p['startsWith']('0x')),g=[...new Set([...e,...f])]['slice'](0x0,Math['max'](0x1,d));if(g['length']===0x0||(a['accounts']??[])['length']===0x0)return[];let h;try{h=await c['fetchProgressFields'](g,b);}catch{return[];}const i=new Map(),j=new Map(),k=new Map(),l=new Map(),m=c['fetchGuardJson']??(async(p,q)=>(await loadGuardJsonFromChain(p,q))?.['json']),n=a['accounts'],o=[];for(const [p,q]of h){const r=typeof q?.['machine']==='string'?q['machine']:undefined;if(!r)continue;const s=r['toLowerCase']();let t=i['get'](s);if(!t){try{t=await c['fetchMachineNodes'](r,b);}catch{t=[];}i['set'](s,t);}if(t['length']===0x0)continue;let u;if(!j['has'](s)){let B;try{B=await c['fetchMachinePermissionAddr'](r,b);}catch{B=undefined;}let C;if(B)try{C=await c['fetchPermissionContext'](B,b);}catch{C=undefined;}j['set'](s,C);}u=j['get'](s);const v=typeof q?.['task']==='string'?q['task']:undefined;let w;if(v){const D=v['toLowerCase']();if(!k['has'](D))try{k['set'](D,await c['fetchOrderContext'](v,b));}catch{k['set'](D,undefined);}w=k['get'](D);}const x=(Array['isArray'](q?.['namedOperator'])?q['namedOperator']:[])['map'](E=>({'name':String(E?.['name']??''),'operators':(Array['isArray'](E?.['operators'])?E['operators']:[])['map'](F=>String(F))})),y=enumerateActionableForwards(q,t,n,x,w,u),z=typeof q?.['current']==='string'?q['current']:'',A=v?'order\x20'+formatShortAddress(v):'no\x20bound\x20order';for(const E of y){let F=[];const G=typeof E['guard']==='string'?E['guard']['toLowerCase']():'';if(G){const H=l['get'](G);if(H!==undefined)F=H;else{let I;try{I=await m(E['guard'],b);}catch{I=undefined;}F=I?extractGuardSignerPins(I):[],l['set'](G,F);}}for(const J of E['executable_accounts']){if(F['length']>0x0){const N=F[0x0]['toLowerCase'](),O=F['every'](P=>P['toLowerCase']()===N);if(O&&N!==J['toLowerCase']())continue;}const K=E['threshold']>0x1?'\x20—\x20cooperation\x20threshold\x20'+E['threshold']+'\x20(weight\x20'+E['weight']+');\x20other\x20distinct\x20forwards\x20may\x20still\x20be\x20needed':'',L=E['guard']?'\x20—\x20guard\x20'+formatShortAddress(E['guard'])+'\x20must\x20be\x20satisfied\x20(submissions\x20may\x20be\x20required)':'',M=w&&J===w['builder']['toLowerCase']()?'You\x20are\x20the\x20order\x20owner':E['operator_kind']==='named_operator'?'You\x20hold\x20the\x20named-operator\x20role\x20\x27'+E['named_operator']+'\x27':'You\x20hold\x20the\x20required\x20permission\x20index';o['push']({'dedupe_key':'progress_actionable:'+p+':'+J+':'+E['next_node']+'|'+E['forward'],'detector':'progress_actionable','beneficiary':J,'object':p,'title':'Workflow\x20action\x20available:\x20\x27'+E['forward']+'\x27\x20→\x20'+E['next_node'],'detail':'Progress\x20'+formatShortAddress(p)+'\x20('+A+')\x20sits\x20at\x20node\x20\x27'+z+'\x27.\x20'+(M+'\x20—\x20you\x20can\x20execute\x20forward\x20\x27'+E['forward']+'\x27\x20into\x20\x27'+E['next_node']+'\x27')+(''+K+L+'.\x20Advance\x20it\x20via\x20workflow_operation\x20')+'(action=\x27list\x27\x20to\x20review,\x20action=\x27operate\x27\x20to\x20execute).\x20'+'Who\x20benefits,\x20who\x20pushes:\x20waiting\x20does\x20not\x20move\x20the\x20order\x20—\x20the\x20party\x20that\x20'+'gains\x20from\x20the\x20next\x20step\x20sends\x20the\x20transaction.','benefit':benefitOfNode(E['next_node']),'state_fingerprint':E['weight']+':'+E['threshold']+':'+(E['guard']??'')+':'+E['operator_kind']});}}}return o;}function benefitOfNode(a){if(/(^|_)(completed?|done|finished|received|delivered|accepted|confirmed|finalized|success|approved)(_|$)/i['test'](a))return'Completing\x20this\x20step\x20settles\x20the\x20order\x20—\x20funds\x20are\x20released\x20to\x20the\x20provider';if(/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?)(_|$)/i['test'](a))return'This\x20step\x20routes\x20to\x20cancellation/refund\x20—\x20funds\x20return\x20to\x20the\x20buyer';if(/(^|_)(interrupt(ed)?|exception|dispute(d)?|fail(ed)?|abort(ed)?|reject(ed)?)(_|$)/i['test'](a))return'This\x20step\x20opens\x20the\x20exception\x20path\x20—\x20review\x20before\x20advancing';return'Advancing\x20keeps\x20the\x20order\x20moving\x20toward\x20settlement';}const REFUND_FLAVOR_RE=/(^|_)(cancel(led)?|refund(ed)?|return(ed|_approved)?|expired)(_|$)/i;export function evaluateSettlementPending(a,b,c,d){let e;try{e=typeof b?.['balance']==='bigint'?b['balance']:BigInt(b?.['balance']??0x0);}catch{return null;}if(e<=0x0n)return null;const f=Array['isArray'](b?.['payment'])?b['payment']:[];if(f['length']>0x0)return null;const g=typeof c?.['current']==='string'?c['current']:'';if(!g)return null;if(!Array['isArray'](d)||d['length']===0x0)return null;const h=new Set();for(const j of d){for(const k of j['pairs']){if((k['forwards']??[])['length']>0x0)h['add'](j['name']);}}if(h['has'](g))return null;const i=(Array['isArray'](b?.['allocators']?.['allocators'])?b['allocators']['allocators']:[])['map'](l=>String(l?.['guard']??''))['filter'](l=>l);return{'terminal_node':g,'balance':e,'payments':f['length'],'guards':i,'is_refund_terminal':REFUND_FLAVOR_RE['test'](g)};}export function evaluateEscrowStranded(a,b,c,d,e){let f;try{f=typeof b?.['balance']==='bigint'?b['balance']:BigInt(b?.['balance']??0x0);}catch{return null;}if(f<=0x0n)return null;const g=Array['isArray'](b?.['payment'])?b['payment']:[];if(g['length']>0x0)return null;if(evaluateSettlementPending(a,b,c,d)!==null)return null;const i=typeof c?.['current']==='string'?c['current']:'';if(!Array['isArray'](d)||d['length']===0x0)return null;let j=0x0;for(const m of d){if(m['name']===i){for(const o of m['pairs'])j+=(o['forwards']??[])['length'];}}if(i!==''&&j===0x0)return null;const k=Array['isArray'](c?.['history'])?c['history']:[];let l=null;for(const q of k){const r=Number(q?.['time']);if(Number['isFinite'](r)&&r>0x0&&(l===null||r>l))l=r;}if(l===null){const s=Number(a?.['time']);l=Number['isFinite'](s)&&s>0x0?s:null;}return{'current':i,'history_len':k['length'],'balance':f,'age_ms':l!==null&&e>l?e-l:0x0,'outgoing':j};}export async function detectSettlementPending(a,b,c,e){const f=(a['accounts']??[])['map'](q=>q['toLowerCase']());if(f['length']===0x0)return[];const g=(a['orders']??[])['slice'](0x0,Math['max'](0x1,e));if(g['length']===0x0)return[];const h=g['map'](q=>q['order'])['filter'](q=>typeof q==='string'&&q['startsWith']('0x'));let i;try{i=await c['fetchOrderFields'](h,b);}catch{return[];}const j=[],k=[];for(const q of i['values']()){const r=q?.['data']??q;if(typeof r?.['allocation']==='string'&&r['allocation']['startsWith']('0x'))j['push'](r['allocation']);if(typeof r?.['progress']==='string'&&r['progress']['startsWith']('0x'))k['push'](r['progress']);}let l=new Map(),m=new Map();try{l=await c['fetchAllocationFields']([...new Set(j)],b);}catch{return[];}try{m=await c['fetchProgressFields']([...new Set(k)],b);}catch{m=new Map();}const n=new Set((a['services']??[])['map'](t=>t['toLowerCase']())),o=new Map(),p=[];for(const [s,t]of i){const u=t?.['data']??t,v=typeof u?.['allocation']==='string'?u['allocation']:undefined;if(!v)continue;const w=l['get'](v['toLowerCase']());if(!w)continue;const x=w?.['data']??w,y=typeof u?.['progress']==='string'?u['progress']:undefined,z=y?m['get'](y['toLowerCase']()):undefined,A=typeof z?.['machine']==='string'?z['machine']:typeof u?.['machine']==='string'?u['machine']:undefined;if(!A)continue;let B=o['get'](A['toLowerCase']());if(!B){try{B=await c['fetchMachineNodes'](A,b);}catch{B=[];}o['set'](A['toLowerCase'](),B);}const C=evaluateSettlementPending(u,x,z,B);if(!C)continue;const D=[];if(C['is_refund_terminal']){const I=typeof u?.['builder']==='string'?u['builder']['toLowerCase']():'';if(I&&f['includes'](I))D['push'](I);}else{const J=typeof u?.['service']==='string'?u['service']['toLowerCase']():'';if(J&&n['has'](J))D['push'](...f);}if(D['length']===0x0)continue;const E=C['guards']['length']>0x0?'Candidate\x20settle\x20guards\x20on\x20this\x20pool:\x20'+C['guards']['map'](K=>formatShortAddress(K))['join'](',\x20')+'.':'This\x20pool\x20exposes\x20no\x20readable\x20allocator\x20guards\x20—\x20inspect\x20it\x20before\x20acting.';let F;try{F=await c['formatAmount']?.(C['balance'],extractCoinType(w?.['type_raw']),b);}catch{F=undefined;}const G=F??C['balance']['toString']()+'\x20(smallest\x20unit)',H=C['is_refund_terminal']?'refund/cancel':'completion';for(const K of D){p['push']({'dedupe_key':'settlement_pending:'+s+':'+v,'detector':'settlement_pending','beneficiary':K,'object':v,'title':'Unsettled\x20escrow\x20—\x20'+G+'\x20on\x20a\x20'+H+'\x20terminal','detail':'Order\x20'+formatShortAddress(s)+'\x20sits\x20on\x20terminal\x20node\x20\x27'+C['terminal_node']+'\x27\x20but\x20its\x20Allocation\x20'+(formatShortAddress(v)+'\x20still\x20holds\x20'+G+'\x20and\x20has\x20emitted\x20no\x20Payment.\x20The\x20chain\x20never\x20')+('auto-settles:\x20someone\x20must\x20trigger\x20the\x20matching\x20guard.\x20'+E+'\x20Execute\x20via\x20allocation_operation\x20')+'(operation_type=\x27allocation\x27,\x20alloc_by_guard=<guard>)\x20as\x20an\x20account\x20that\x20can\x20satisfy\x20the\x20guard,\x20then\x20'+'recipients\x20claim\x20their\x20CoinWrappers\x20(payment\x20receive).\x20Trigger\x20ONCE\x20and\x20verify\x20the\x20pool\x20drained\x20—\x20a\x20'+'fully-drained\x20pool\x20aborts\x20on\x20re-trigger,\x20but\x20a\x20max-capped\x20pool\x20re-splits\x20the\x20remainder.\x20'+'Who\x20benefits,\x20who\x20pushes:\x20waiting\x20keeps\x20the\x20funds\x20frozen\x20and\x20leaves\x20the\x20dispute\x20window\x20open.','benefit':'Release\x20'+G+'\x20from\x20escrow\x20to\x20its\x20rightful\x20recipients','state_fingerprint':C['balance']['toString']()+':'+C['payments']+':'+C['terminal_node']});}}return p;}export async function detectTimeoutIntermediate(a,b,c,d,e){const f=(a['order_children']??[])['filter'](m=>m['type']==='progress'&&typeof m['object']==='string')['map'](m=>m['object'])['filter'](m=>m['startsWith']('0x')),g=(a['focus']??[])['map'](m=>m['object'])['filter'](m=>typeof m==='string'&&m['startsWith']('0x')),h=[...new Set([...f,...g])]['slice'](0x0,Math['max'](0x1,d));if(h['length']===0x0||(a['accounts']??[])['length']===0x0)return[];let i;try{i=await c['fetchProgressFields'](h,b);}catch{return[];}const j=c['nowMs'](),k=new Map(),l=[];for(const [m,n]of i){const o=typeof n?.['current']==='string'?n['current']:'',p=typeof n?.['current_time']==='number'?n['current_time']:0x0;if(!o||p<=0x0)continue;const q=typeof n?.['machine']==='string'?n['machine']:undefined;if(!q)continue;const r=q['toLowerCase']();let s=k['get'](r);if(!s){try{s=await c['fetchMachineNodes'](q,b);}catch{s=[];}k['set'](r,s);}const t=s['find'](z=>z['name']===o);if(!t)continue;const u=t['pairs']['some'](z=>(z['forwards']??[])['length']>0x0);if(!u)continue;const v=j-p;if(v<e)continue;const w=(a['accounts']??[])['map'](z=>z['toLowerCase']()),x=w[0x0];if(!x)continue;const y=Math['floor'](v/(0x3e8*0x3c*0x3c));l['push']({'dedupe_key':'timeout_intermediate:'+m+':'+o,'detector':'timeout_intermediate','beneficiary':x,'object':m,'title':'Possible\x20stuck\x20intermediate\x20state\x20—\x20\x27'+o+'\x27\x20for\x20'+y+'h','detail':'Progress\x20'+formatShortAddress(m)+'\x20has\x20been\x20on\x20node\x20\x27'+o+'\x27\x20for\x20'+y+'\x20hours\x20'+('(since\x20'+new Date(p)['toISOString']()+').\x20This\x20node\x20has\x20outgoing\x20forwards\x20but\x20none\x20have\x20fired.\x20')+'If\x20this\x20node\x20has\x20a\x20time-lock\x20guard\x20(confirm\x20timeout,\x20acceptance\x20timeout,\x20inspection\x20timeout,\x20etc.),\x20'+'the\x20keeper\x20may\x20need\x20to\x20advance\x20it.\x20Check\x20the\x20template\x27s\x20keeper_dependencies\x20and\x20the\x20guard\x27s\x20time\x20window\x20'+'before\x20acting.\x20Who\x20benefits,\x20who\x20pushes:\x20a\x20stuck\x20intermediate\x20state\x20blocks\x20the\x20order\x27s\x20funds\x20and\x20'+'business\x20flow\x20—\x20the\x20party\x20that\x20gains\x20from\x20unblocking\x20it\x20sends\x20the\x20transaction.','benefit':'Unblock\x20the\x20order\x20stuck\x20at\x20\x27'+o+'\x27','state_fingerprint':o+':'+p+':'+v});}return l;}export function realPaymentDetectorDeps(){return{'queryUnclaimed':async(a,b)=>{const c=await query_received({'name_or_address':{'name_or_address':a},'type':'CoinWrapper','network':b});if(!c||typeof c!=='object'||!Array['isArray'](c['received']))return null;const d=typeof c['balance']==='bigint'?c['balance']:BigInt(c['balance']??0x0);return{'balance':d,'count':c['received']['length'],'token_type':typeof c['token_type']==='string'&&c['token_type']?c['token_type']:undefined};},'formatAmount':async(a,b,c)=>{if(!b)return undefined;const e=await formatChainValue(a,b,c),f=e['symbol']?'\x20'+e['symbol']:'';return e['precision_known']?''+e['display']+f:''+e['raw']+f;}};}export function realProgressDetectorDeps(){return{'fetchProgressFields':async(a,b)=>{const c=await batchQueryObjectsByIds(a,b,![]),e=new Map();for(const f of c??[]){const g=f?.['data']??f;if(f?.['type']!=='Progress')continue;const h=String(f?.['query_name']??f?.['object']??'')['toLowerCase']();if(h)e['set'](h,g);}return e;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'fetchMachinePermissionAddr':async(a,b)=>{const c=await query_objects({'objects':[a],'network':b}),d=c?.['objects']?.[0x0],e=(d?.['data']??d)?.['permission'];return typeof e==='string'&&e?e:undefined;},'fetchPermissionContext':(a,b)=>fetchPermissionContext(a,b,![]),'fetchOrderContext':(a,b)=>fetchOrderContext(a,b,![])};}async function fieldsByType(a,b,c){const d=await batchQueryObjectsByIds(a,b,![]),e=new Map();for(const f of d??[]){if(f?.['type']!==c)continue;const g=String(f?.['query_name']??f?.['object']??'')['toLowerCase']();if(g)e['set'](g,f);}return e;}export function realSettlementDetectorDeps(){return{'fetchOrderFields':(a,b)=>fieldsByType(a,b,'Order'),'fetchAllocationFields':(a,b)=>fieldsByType(a,b,'Allocation'),'fetchProgressFields':async(a,b)=>{const c=await fieldsByType(a,b,'Progress'),d=new Map();for(const [e,f]of c)d['set'](e,f?.['data']??f);return d;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'formatAmount':async(a,b,c)=>{if(!b)return undefined;const e=await formatChainValue(a,b,c),f=e['symbol']?'\x20'+e['symbol']:'';return e['precision_known']?''+e['display']+f:''+e['raw']+f;}};}export function realTimeoutDetectorDeps(){return{'fetchProgressFields':async(a,b)=>{const c=await fieldsByType(a,b,'Progress'),d=new Map();for(const [e,f]of c)d['set'](e,f?.['data']??f);return d;},'fetchMachineNodes':(a,b)=>fetchMachineNodes(a,b,![]),'nowMs':()=>Date['now']()};}
@@ -1 +1 @@
1
- import{ONCE_SLOT_BYTES,TASK_BINDING_SLOT}from'./onchain-constants.js';const SYM_NODE='progress.current',SYM_CLAIMED='order.claimed_by\x20some',DISPUTE_WAYPOINT=/claim|dispute|arbitrat|indemn/i;function slotValue(a,b){if(b===undefined)return{'value':undefined,'isSubmission':![]};const c=a['find'](d=>d['identifier']===b);if(!c)return{'value':undefined,'isSubmission':![]};return{'value':c['value'],'isSubmission':c['b_submission']===!![]};}function classifyQueryLhs(a){if(a===SYM_NODE)return{'kind':'node'};if(a===SYM_CLAIMED)return{'kind':'claimed'};return{'kind':'unknown'};}export function resolveValue(a,b){if(!b||b['type']!=='identifier')return{'known':![]};const c=slotValue(a,b['identifier']);if(c['isSubmission'])return{'known':![]};if(c['value']===undefined)return{'known':![]};return{'known':!![],'value':c['value']};}function evaluate(a,b,d){if(!b||typeof b['type']!=='string')return undefined;switch(b['type']){case'logic_and':{const e=Array['isArray'](b['nodes'])?b['nodes']:[];let f=![];for(const g of e){const h=evaluate(a,g,d);if(h===![])return![];if(h===undefined)f=!![];}return f?undefined:!![];}case'logic_or':{const i=Array['isArray'](b['nodes'])?b['nodes']:[];let j=![];for(const k of i){const l=evaluate(a,k,d);if(l===!![])return!![];if(l===undefined)j=!![];}return j?undefined:![];}case'logic_not':{const m=evaluate(a,b['node'],d);if(m===undefined)return undefined;return!m;}case'logic_equal':{const n=Array['isArray'](b['nodes'])?b['nodes']:[];if(n['length']<0x2)return undefined;const o=classifyQueryLhs(n[0x0]?.['query']),p=resolveValue(a,n[0x1]),q=o['kind']==='unknown'?classifyQueryLhs(n[0x1]?.['query']):o,r=!p['known']&&n[0x1]?.['query']!==undefined?resolveValue(a,n[0x0]):p;if(q['kind']==='node'){if(!r['known']||typeof r['value']!=='string')return undefined;return d['node']===r['value'];}if(q['kind']==='claimed'){if(!r['known']||typeof r['value']!=='boolean')return undefined;return d['claimed']===r['value'];}return undefined;}default:return undefined;}}function satisfiable(a,b,c){return evaluate(a,b,c)!==![];}function railPinnedNodes(a,b,d,e){if(!a||typeof a!=='object')return;const f=a;if(f['type']==='logic_equal'&&Array['isArray'](f['nodes'])&&f['nodes']['length']>=0x2){const h=classifyQueryLhs(f['nodes'][0x0]?.['query']),i=h['kind']==='unknown'?classifyQueryLhs(f['nodes'][0x1]?.['query']):h,j=h['kind']==='unknown'?f['nodes'][0x0]:f['nodes'][0x1];if(i['kind']==='node'){const k=resolveValue(b,j);k['known']&&typeof k['value']==='string'&&(d?e['neg']:e['pos'])['add'](k['value']);}return;}const g=f['type']==='logic_not'?!d:d;if(f['type']==='logic_not'){railPinnedNodes(f['node'],b,g,e);return;}if(Array['isArray'](f['nodes'])){for(const l of f['nodes'])railPinnedNodes(l,b,g,e);}}export function railNodePins(a,b){const c={'pos':new Set(),'neg':new Set()};return railPinnedNodes(a,b,![],c),c;}function findDeadLiterals(a,b,c,d){if(!a||typeof a['type']!=='string')return;if(a['type']==='logic_and'&&Array['isArray'](a['nodes'])){const e=new Map();for(const f of a['nodes']){const g=resolvableEquality(f,b);if(g)e['set'](g['symbol'],g['value']);}for(const h of a['nodes']){const i=resolvableEquality(h,b);if(i){const k=e['get'](i['symbol']);if(k!==undefined&&k!==i['value']){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,i['symbol'],k,i['value'])});return;}continue;}const j=findClash(h,b,e);if(j){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,j['symbol'],j['pinned'],j['value'])});return;}}for(const l of a['nodes'])findDeadLiterals(l,b,c,d);return;}if(Array['isArray'](a['nodes'])){for(const m of a['nodes'])findDeadLiterals(m,b,c,d);}if(a['node'])findDeadLiterals(a['node'],b,c,d);}function resolvableEquality(c,d){if(!c||c['type']!=='logic_equal'||!Array['isArray'](c['nodes']))return undefined;for(const [e,f]of[[c['nodes'][0x0],c['nodes'][0x1]],[c['nodes'][0x1],c['nodes'][0x0]]]){if(!e||typeof e['query']!=='string')continue;const g=classifyQueryLhs(e['query']);if(g['kind']==='unknown')continue;const h=resolveValue(d,f);if(!h['known'])continue;return{'symbol':g['kind']==='node'?SYM_NODE:SYM_CLAIMED,'value':h['value']};}return undefined;}function findClash(a,b,c){if(!a||typeof a['type']!=='string')return undefined;if(a['type']==='logic_not')return undefined;const d=resolvableEquality(a,b);if(d){const e=c['get'](d['symbol']);if(e!==undefined&&e!==d['value'])return{'symbol':d['symbol'],'pinned':e,'value':d['value']};return undefined;}if(Array['isArray'](a['nodes']))for(const f of a['nodes']){const g=findClash(f,b,c);if(g)return g;}if(a['node'])return findClash(a['node'],b,c);return undefined;}function deadLiteralDetail(a,b,c,d){return'allocator\x20guard\x20\x27'+a+'\x27:\x20one\x20conjunction\x20scope\x20carries\x20'+b+'\x20'+('==\x20'+JSON['stringify'](c)+'\x20and\x20ALSO\x20'+b+'\x20==\x20'+JSON['stringify'](d)+'\x20—\x20the\x20second\x20')+'literal\x20contradicts\x20the\x20first\x20and\x20is\x20a\x20DEAD\x20literal\x20(azx7-mn-261014\x20CR-azx7-01:\x20a\x20pinned\x20'+'node\x20equality\x20made\x20the\x20sibling\x20closed_cancel/item_lost\x20legs\x20unreachable,\x20stranding\x20the\x20'+'escrow\x20at\x20every\x20other\x20terminal).\x20Hoist\x20the\x20node\x20predicate\x20to\x20ONE\x20top-level\x20n-ary\x20logic_or\x20'+'instead\x20of\x20AND-prepending\x20a\x20single-node\x20gate.';}export function hasCallerIdentityLeg(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const f of d)c(f);return;}const e=d;if(e['type']==='context'&&e['context']==='Signer'){b=!![];return;}if(typeof e['query']==='string'){const g=e['query']['toLowerCase']();if(g['startsWith']('context')||g['includes']('signer'))b=!![];else{if(/order\.agent|permission\.(owner|admin)|named.?operator/['test'](g))b=!![];}}if(!b){for(const h of Object['keys'](e))c(e[h]);}};return c(a),b;}export function refundGatePolarityMix(a){let b;const c=e=>{const f=JSON['stringify'](e);if(f===undefined)return'…';return f['length']>0x50?f['slice'](0x0,0x4d)+'…':f;},d=e=>{if(b!==undefined||e===null||typeof e!=='object')return;if(Array['isArray'](e)){for(const g of e)d(g);return;}const f=e;if(f['type']==='logic_or'&&Array['isArray'](f['nodes'])){const h=f['nodes'],i=h['filter'](l=>hasCallerIdentityLeg(l)),j=h['filter'](l=>l!==null&&typeof l==='object'&&l['type']==='logic_not');if(i['length']>0x0&&j['length']>0x0){b={'arms':[...i,...j]['map'](c)['join']('\x20\x20|\x20\x20')};return;}}for(const l of Object['keys'](f))d(f[l]);};return d(a),b;}function claimedAxisSensitive(a,b){const c=a['table'];return satisfiable(c,a['root'],{'node':b,'claimed':!![]})!==satisfiable(c,a['root'],{'node':b,'claimed':![]});}function claimedRequiredAt(a,b,c){return evaluate(a,b,{'node':c,'claimed':!![]})!==![]&&evaluate(a,b,{'node':c,'claimed':![]})===![];}export function verifyAllocatorRails(a,b,c){const d=[];if(a['length']===0x0)return d;{const j=c?.['declaredKeys'],k=[],l=[],m=[];for(const o of a){if(o['root']===undefined||hasCallerIdentityLeg(o['root']))continue;const q=o['track']==='settlement'||o['track']==='refund'||o['recoverTwin']===!![];if(!q){m['push'](o['key']);continue;}if(j?.['has'](o['key']))l['push'](o);else k['push'](o);}for(const r of k){const u=r['recipientKinds'],v=Array['isArray'](u)&&u['length']>0x0&&u['every'](x=>x==='submission');if(v){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20('+r['track']+'\x20track)\x20carries\x20no\x20caller-identity\x20leg,\x20but\x20every\x20'+'non-zero\x20sharing\x20row\x20resolves\x20to\x20a\x20guard-submitted\x20recipient\x20(GuardIdentifier\x20—\x20the\x20'+'order-anchored\x20slot):\x20the\x20payout\x20destination\x20is\x20PINNED\x20BY\x20THE\x20ROW\x20TOPOLOGY\x20and\x20cannot\x20be\x20'+'redirected\x20to\x20whoever\x20triggers\x20the\x20settlement.\x20Residual\x20surface:\x20a\x20bystander\x20may\x20ACCELERATE\x20'+'the\x20payout\x27s\x20timing\x20(bounded\x20—\x20replay\x20only\x20redistributes\x20the\x20remaining\x20balance\x20to\x20the\x20same\x20'+'payee).\x20Disclosed,\x20never\x20blocks;\x20no\x20declare\x20exemption\x20is\x20needed\x20(the\x20description-rewrite\x20'+'exemption\x20on\x20an\x20immutable\x20Guard\x20was\x20unreachable\x20—\x20mtw\x20F-MTW-18).\x20Fixed-Entity\x20or\x20Signer\x20rows\x20'+'would\x20keep\x20this\x20rail\x20CRITICAL.'});continue;}const w=Array['isArray'](u)&&u['some'](x=>x==='signer');d['push']({'code':'RAIL_NO_CALLER_IDENTITY_BOUND','level':'critical','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20('+r['track']+'\x20track'+((r['recoverTwin']===!![]?',\x20merchant-recovery\x20twin':'')+')\x20carries\x20NO\x20caller-identity\x20leg\x20')+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20query\x20'+'resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20trigger\x20this\x20route\x20'+'(ks11:\x20an\x20unexpected\x20account\x20swept\x20a\x20merchant-recovery\x20payout\x20and\x20doubled\x20the\x20allocation\x20draw).\x20'+'Money\x20rails\x20are\x20not\x20forwards\x20—\x20the\x20chain\x20injects\x20no\x20caller\x20rail\x20on\x20them,\x20so\x20the\x20guard\x20IS\x20the\x20'+'only\x20gate.\x20Bind\x20the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20host\x20'+'service_allocator_guard);\x20see\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20semantics\x20—\x20the\x20'+'caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20order\x20owner,\x20so\x20a\x20'+'forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.\x20A\x20deliberately\x20legless\x20'+'rail\x20(the\x20merchant-recovery\x20sweep\x20face:\x20payee\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20'+'permissionless\x20keeper\x20firing)\x20must\x20carry\x20an\x20explicit\x20declare\x20—\x20guard_resolutions\x20'+'{kind:\x27declare\x27,\x20reason}\x20or\x20the\x20template\x27s\x20identity_leg_exempt\x20—\x20and\x20then\x20ships\x20with\x20a\x20'+'permanent\x20non-blocking\x20disclosure\x20instead\x20of\x20this\x20block.'+(w?'\x20SHARPENED:\x20at\x20least\x20one\x20sharing\x20row\x20resolves\x20to\x20Signer\x20—\x20this\x20rail\x20PAYS\x20WHOEVER\x20TRIGGERS\x20'+'it,\x20so\x20the\x20legless\x20shape\x20is\x20a\x20self-pay\x20surface,\x20not\x20a\x20timing\x20risk.\x20An\x20identity\x20leg\x20is\x20'+'mandatory;\x20a\x20declare\x20exemption\x20does\x20NOT\x20fit\x20this\x20shape.':'')});}for(const x of l){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':x['key'],'detail':'allocator\x20rail\x20\x27'+x['key']+'\x27\x20carries\x20no\x20caller-identity\x20leg\x20and\x20ships\x20under\x20an\x20explicit\x20'+'declare\x20exemption\x20({kind:\x27declare\x27}\x20/\x20identity_leg_exempt):\x20the\x20legless\x20shape\x20is\x20the\x20'+'sanctioned\x20merchant-recovery\x20face\x20—\x20the\x20payee\x20is\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20never\x20'+'by\x20the\x20caller.\x20This\x20receipt\x20rides\x20the\x20plan\x20notes\x20and\x20is\x20re-surfaced\x20at\x20publish;\x20it\x20never\x20blocks.'});}m['length']>0x0&&d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','detail':'allocator\x20rail(s)\x20['+m['join'](',\x20')+']\x20carry\x20no\x20caller-identity\x20leg\x20'+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20'+'query\x20resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20'+'trigger\x20this\x20settlement\x20route\x20(sahr:\x20a\x20bystander\x20accelerated\x20another\x20party\x27s\x20'+'payout).\x20LEGITIMATE\x20when\x20the\x20scene\x20verifies\x20identity\x20upstream\x20(verifier_level\x20'+'level3_scene_combined)\x20or\x20the\x20venue\x20is\x20intentionally\x20open-trigger;\x20otherwise\x20bind\x20'+'the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20'+'host\x20service_allocator_guard).\x20See\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20'+'semantics\x20—\x20the\x20caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20'+'order\x20owner,\x20so\x20a\x20forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.'});}for(const y of a){if(y['track']!=='refund'||y['root']===undefined)continue;const z=y['table']['some'](A=>A['identifier']===TASK_BINDING_SLOT||A['identifier']===ONCE_SLOT_BYTES);if(z)continue;d['push']({'code':'REFUND_RAIL_REPLAY_DISCLOSURE','level':'info','railKey':y['key'],'detail':'refund\x20rail\x20\x27'+y['key']+'\x27\x20carries\x20no\x20once-key\x20row\x20(no\x20per-order\x20254\x20anchor,\x20no\x20per-period\x20255\x20key):\x20'+'the\x20refund\x20leg\x20stays\x20re-triggerable\x20on\x20its\x20node\x20state\x20across\x20the\x20order\x27s\x20life.\x20This\x20is\x20the\x20'+'SANCTIONED\x20shape\x20—\x20the\x20once-key\x20injection\x20is\x20deliberately\x20banned\x20on\x20refund\x20tracks\x20(a\x20refund\x20may\x20'+'fire\x20on\x20several\x20terminal\x20legs;\x20a\x20per-order\x20once\x20anchor\x20deadlocks\x20the\x20second\x20leg),\x20so\x20the\x20'+'replay\x20surface\x20is\x20disclosed,\x20not\x20gated.\x20Replay\x20cannot\x20redirect\x20funds:\x20the\x20recipient\x20binding\x20pins\x20'+'every\x20payout\x20to\x20the\x20paying\x20order,\x20and\x20balance\x20exhaustion\x20bounds\x20repetition\x20—\x20a\x20firing\x20aborts\x20on\x20'+'zero/insufficient\x20balance\x20once\x20the\x20pool\x20can\x20no\x20longer\x20fund\x20the\x20group\x20(a\x20Rate\x20group\x20summing\x20to\x20'+'10000\x20empties\x20the\x20pool\x20on\x20the\x20first\x20payout;\x20an\x20Amount-shaped\x20group\x20repeats\x20until\x20the\x20balance\x20'+'runs\x20below\x20the\x20fixed\x20leg).'});}for(const A of a){if(A['root']===undefined)continue;const B=refundGatePolarityMix(A['root']);if(B===undefined)continue;d['push']({'code':'REFUND_GATE_POLARITY_MIX','level':'critical','railKey':A['key'],'detail':'allocator\x20rail\x20\x27'+A['key']+'\x27\x20('+A['track']+'\x20track)\x20mixes\x20caller-identity\x20arms\x20and\x20NOT-state\x20arms\x20in\x20ONE\x20logic_or\x20group:\x20'+(B['arms']+'.\x20The\x20OR\x20makes\x20the\x20NOT-state\x20arm\x20a\x20LEGAL-CALLER\x20ALTERNATIVE\x20to\x20the\x20identity\x20legs\x20—\x20whoever\x20simply\x20')+'has\x20not\x20reached\x20that\x20state\x20passes\x20as\x20a\x20caller,\x20so\x20any\x20address\x20that\x20never\x20opened\x20a\x20dispute\x20can\x20sweep\x20the\x20rail\x20'+'(cour-mn-261102-z5t8\x20A2,\x20mainnet\x20REFUND-POLARITY:\x20the\x20buyer\x27s\x20not-in-dispute\x20state\x20was\x20compiled\x20into\x20'+'refund_gate\x27s\x20caller\x20identity\x20options).\x20A\x20negated\x20state\x20leg\x20is\x20a\x20payout\x20FREEZE,\x20never\x20an\x20authorization.\x20'+'Fix:\x20hoist\x20the\x20logic_not\x20leg\x20OUT\x20of\x20the\x20OR\x20into\x20a\x20TOP-LEVEL\x20logic_and\x20conjunction\x20—\x20'+'logic_and[\x20logic_or[<identity\x20legs>],\x20logic_not(<state\x20leg>)\x20]\x20—\x20the\x20recover_gate\x20shape\x20(etsm\x20F-04):\x20'+'the\x20freeze\x20then\x20gates\x20EVERY\x20caller\x20instead\x20of\x20widening\x20the\x20caller\x20set.\x20Guards\x20freeze\x20at\x20publish\x20—\x20fix\x20before\x20publishing.'});}{const C=new Map(),D=F=>{const G=C['get'](F['key']);if(G)return G;const H={'pos':new Set(),'neg':new Set()};railPinnedNodes(F['root'],F['table'],![],H);for(const I of H['neg'])H['pos']['delete'](I);return C['set'](F['key'],H['pos']),H['pos'];},E=(F,G)=>{if(F['size']!==G['size'])return![];for(const H of F)if(!G['has'](H))return![];return!![];};for(const F of a){if(F['root']===undefined)continue;const G=D(F);if(G['size']===0x0)continue;for(const H of a){if(H['key']===F['key']||H['root']===undefined)continue;const I=D(H);if((F['recipient']??'')===''||(H['recipient']??'')===''||F['recipient']===H['recipient']&&E(G,I))continue;if(I['size']===0x0)continue;const J=[...G]['filter'](L=>I['has'](L));if(J['length']===0x0)continue;const K=(F['recoverTwin']===!![]&&H['track']==='refund'||H['recoverTwin']===!![]&&F['track']==='refund')&&J['some'](L=>/^(closed_cancel|cancelled|refunded)$/i['test'](L));d['push']({'code':'RAIL_NODE_SET_OVERLAP','level':K?'critical':'info','railKey':F['key'],'detail':'rail\x20\x27'+F['key']+'\x27\x20(→'+F['recipient']+')\x20and\x20\x27'+H['track']+'\x27\x20rail\x20\x27'+H['key']+'\x27\x20(→'+H['recipient']+')\x20are\x20BOTH\x20node-gated\x20onto\x20['+J['join'](',\x20')+']\x20—\x20'+'on\x20that\x20state\x20either\x20alloc_by_guard\x20fire\x20takes\x20the\x20pool\x20(first-to-fire),\x20so\x20the\x20pair\x20is\x20a\x20structural\x20double-payout/drain\x20surface\x20'+'(cstc2\x20C-1:\x20recover\x20∩\x20refund\x20on\x20closed_cancel\x20let\x20a\x20merchant\x20sweep\x20drain\x20escrow\x20the\x20refund\x20rail\x20was\x20the\x20designed\x20exit\x20for).\x20'+'Decision\x2011\x20keeps\x20the\x20two\x20tracks\x20INDEPENDENT\x20(no\x20claimed_by\x20coupling\x20—\x20that\x20cure\x20is\x20banned);\x20the\x20cure\x20is\x20the\x20decision-11\x20NODE\x20PARTITION:\x20'+'shrink\x20one\x20rail\x27s\x20node\x20set\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20(RAIL_TERMINAL_UNCOVERED\x20still\x20enforces\x20the\x20coverage\x20side).\x20'+'Scope\x20note\x20(TRG-04\x202026-11-06):\x20this\x20finding\x20fires\x20ONLY\x20for\x20pairs\x20paying\x20DIFFERENT\x20destinations\x20on\x20overlapping\x20states.\x20'+'Two\x20rails\x20with\x20the\x20SAME\x20recipient\x20AND\x20an\x20IDENTICAL\x20node\x20set\x20are\x20deliberately\x20NOT\x20reported\x20—\x20money\x20goes\x20into\x20the\x20same\x20pocket,\x20'+'only\x20the\x20first-to-fire\x20ORDER\x20is\x20nondeterministic,\x20never\x20the\x20destination\x20(the\x20sanctioned\x20per-period\x20ladder\x20shape;\x20mtwm\x20F-MT-06\x20re-flagged\x20it\x20as\x20a\x20hazard\x20three\x20reports\x20running\x20—\x20it\x20is\x20harmless\x20by\x20construction\x20and\x20stays\x20silent).\x20'+(K?'CRITICAL:\x20this\x20is\x20the\x20recover-twin\x20×\x20refund\x20drain\x20face\x20—\x20the\x20catalog-wide\x20disjointness\x20backstop\x20proves\x20NO\x20builtin\x20template\x20ships\x20it,\x20so\x20a\x20plan\x20carrying\x20it\x20is\x20hand-composed\x20and\x20must\x20partition\x20the\x20nodes\x20before\x20publish.':'Ships\x20INFO\x20(闸序纪律):\x20the\x20HKS-01(c)\x20enumeration\x20(2026-11-03)\x20shows\x20~10\x20surviving\x20templates\x20with\x20sanctioned\x20'+'recover/award\x20rails\x20still\x20overlapping\x20settle/award\x20node\x20sets\x20—\x20the\x20per-template\x20adjudication\x20bundle\x20HKS-01(c-2)\x20must\x20clean\x20'+'them\x20before\x20this\x20subclass\x20upgrades\x20to\x20a\x20compile\x20blocker\x20(the\x20first\x20upgrade\x20attempt\x20hard-blocked\x20the\x20catalog\x20and\x20was\x20reverted).')});}}}for(const L of a){if(L['recoverTwin']!==!![]||L['root']===undefined)continue;const M={'pos':new Set(),'neg':new Set()};railPinnedNodes(L['root'],L['table'],![],M);for(const O of M['neg'])M['pos']['delete'](O);const N=[...M['pos']]['filter'](P=>/^(closed_cancel|cancelled)$/i['test'](P));if(N['length']===0x0)continue;d['push']({'code':'RECOVER_COVERS_REFUND_TERMINAL','level':'critical','railKey':L['key'],'detail':'recover\x20rail\x20\x27'+L['key']+'\x27\x20(→'+(L['recipient']??'?')+')\x20covers\x20the\x20buyer\x20refund\x20terminal(s)\x20'+('['+N['join'](',\x20')+']\x20—\x20at\x20that\x20state\x20the\x20REFUND\x20rail\x20is\x20the\x20designed\x20exit,\x20so\x20this\x20merchant-recovery\x20')+'twin\x20sweeps\x20an\x20ALREADY-REFUNDED\x20order:\x20the\x20refund\x20pays\x20the\x20buyer\x20back\x20and\x20the\x20recover\x20twin\x20(no\x20caller\x20'+'leg,\x20keeper-reachable)\x20drains\x20whatever\x20the\x20refund\x20left\x20behind\x20(the\x20live\x20mainnet\x20ks11\x20deduction;\x20'+'C-F01\x20root\x20cause).\x20Node-gate\x20partition\x20discipline:\x20re-anchor\x20the\x20recover\x20set\x20to\x20SETTLEMENT-side\x20'+'terminals\x20(e.g.\x20{completed,\x20reviewed})\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20—\x20the\x20buyer\x27s\x20'+'terminal\x20belongs\x20to\x20the\x20refund\x20rail\x20alone.\x20Guards\x20freeze\x20at\x20publish:\x20fix\x20the\x20recover_node*\x20set\x20'+'BEFORE\x20the\x20guard\x20create\x20/\x20machine\x20bind\x20lands.\x20(The\x20order-scoped\x20advance\x20paths\x20additionally\x20carry\x20the\x20'+'chain\x20backstop\x20abort\x2015\x20E_ORDER_PRINCIPAL_REFUNDED,\x20but\x20the\x20sweep\x20itself\x20is\x20an\x20alloc\x20side-effect\x20—\x20'+'this\x20gate\x20is\x20the\x20only\x20surface\x20that\x20sees\x20it\x20first.)'});}if(b['length']===0x0)return d;const e=b['filter'](P=>P['semanticRole']==='cancelled'||P['semanticRole']==='final'),f=b['map'](P=>({'node':P['name'],'claimed':!![]}));for(const P of a){if(P['root']===undefined)continue;const Q=P['table'];findDeadLiterals(P['root'],Q,P['key'],d);}for(const R of e){const S=[{'node':R['name'],'claimed':![]}];for(const U of R['fromNodes']??[])S['push']({'node':U,'claimed':![]});const T=a['some'](V=>S['some'](W=>satisfiable(V['table'],V['root'],W)));!T&&d['push']({'code':'RAIL_TERMINAL_UNCOVERED','level':'critical','detail':'terminal\x20node\x20\x27'+R['name']+'\x27\x20(role\x20'+R['semanticRole']+')\x20has\x20NO\x20allocator\x20rail\x20'+'satisfiable\x20on\x20it\x20or\x20its\x20direct\x20predecessors\x20—\x20an\x20order\x20reaching\x20this\x20terminal\x20'+'strands\x20its\x20escrow\x20forever\x20(azx7-mn-261014\x20CR-azx7-01:\x20refund\x20'+'rejected\x20with\x20the\x20allocation\x20EINSUFFICIENT_BALANCE\x20abort\x20at\x20closed_cancel/item_lost;\x20crs-mn-261014\x20F-30:\x20a\x20double-'+'negated\x20claimed_by\x20leg\x20—\x20a\x20banned\x20shape\x20since\x20decision\x2011\x20—\x20bricked\x20the\x20refund\x20at\x20returned).\x20'+'Guards/allocators\x20freeze\x20at\x20publish\x20—\x20fix\x20the\x20rail\x27s\x20NODE-SET\x20before\x20publishing\x20'+'(decision\x2011:\x20exits\x20are\x20node-gated;\x20there\x20is\x20no\x20claimed_by\x20polarity\x20leg\x20to\x20fall\x20back\x20on).'});}const h=a['some'](V=>f['some'](W=>satisfiable(V['table'],V['root'],W)));!h&&d['push']({'code':'RAIL_AWARD_EXIT_MISSING','level':'critical','detail':'no\x20allocator\x20rail\x20is\x20satisfiable\x20on\x20ANY\x20machine\x20node\x20—\x20every\x20order\x20state\x20'+'(awarded\x20or\x20not)\x20strands\x20its\x20escrow\x20(escrow-exit\x20invariant,\x20az-mn-261007).\x20'+'Decision\x2011\x20two-rail\x20independence:\x20exits\x20are\x20NODE-GATED\x20—\x20an\x20awarded\x20order\x20exits\x20'+'through\x20the\x20SAME\x20terminal\x20rails\x20as\x20any\x20other\x20order\x20(its\x20award\x20is\x20a\x20separate\x20'+'commercial\x20indemnity;\x20a\x20claimed_by\x20gate\x20would\x20be\x20the\x20RAIL_CLAIMED_BY_LEG\x20violation,\x20'+'not\x20the\x20cure).\x20Partition\x20the\x20terminals\x20between\x20a\x20refund/settle\x20rail\x20and\x20a\x20'+'merchant-side\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover,\x20terminal-node-gated).\x20'+'Historical\x20(O11,\x20alg26-tn-261026):\x20a\x20recover\x20rail\x20keyed\x20on\x20the\x20bare\x20claimed_by\x20stamp\x20'+'routed\x20a\x20dismissal\x20to\x20the\x20LOSING\x20party\x20—\x20that\x20polarity\x20shape\x20is\x20banned\x20since\x20decision\x2011.'});const i=a['filter'](V=>V['root']!==undefined);{const V=new Set();for(const W of b){for(const X of i){if(claimedAxisSensitive(X,W['name']))V['add'](X['key']);}}V['size']>0x0&&d['push']({'code':'RAIL_CLAIMED_BY_LEG','level':'critical','detail':'allocator\x20rail(s)\x20['+[...V]['join'](',\x20')+']\x20flip\x20on\x20the\x20order.claimed_by\x20axis\x20—\x20'+'a\x20fund\x20rail\x20READS\x20the\x20arbitration\x20payout\x20stamp\x20(decision\x2011\x20two-rail\x20independence\x20violation;\x20'+'mirrors\x20R-FUND-RAIL-CLAIMED-BY).\x20The\x20fund\x20track\x20completes\x20by\x20ORDER-LEVEL\x20NODE\x20STATE:\x20gate\x20the\x20'+'rail\x20on\x20progress.current\x20node\x20sets\x20(refund/settle\x20faces),\x20partition\x20the\x20terminals\x20with\x20a\x20'+'terminal-node-gated\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover),\x20and\x20let\x20the\x20arbitrator\x20'+'rule\x20on\x20the\x20order\x27s\x20state\x20and\x20fund\x20destinations\x20—\x20a\x20double\x20collection\x20(settle+indemnity,\x20'+'refund+bounty)\x20is\x20a\x20legal\x20commercial\x20outcome\x20disclosed\x20at\x20the\x20MCP\x20confirmation\x20gate.\x20'+'Historical:\x20the\x20INV-C1\x20polarity\x20pair\x20(refund\x20some==false\x20/\x20recover\x20some==true)\x20was\x20the\x20old\x20'+'cure\x20and\x20the\x20W5-01\x20direction-blind\x20bug\x27s\x20cause\x20—\x20both\x20legs\x20were\x20removed\x20template-wide.'});}{const Y=new Map(),Z=[];for(const a2 of b){for(const a3 of a2['fromNodes']??[]){const a4=Y['get'](a3)??[];a4['push'](a2['name']),Y['set'](a3,a4),!DISPUTE_WAYPOINT['test'](a3)&&DISPUTE_WAYPOINT['test'](a2['name'])&&Z['push'](a2['name']);}}const a0=Z['length']>0x0,a1=new Set();if(a0){const a5=[...Z];while(a5['length']>0x0){const a6=a5['pop']();if(a1['has'](a6))continue;a1['add'](a6);for(const a7 of Y['get'](a6)??[])a5['push'](a7);}}for(const a8 of i){const a9=a8['table'],aa=a8['root'],ab=railNodePins(aa,a9),ac=[...ab['pos']]['filter'](ae=>!ab['neg']['has'](ae));if(ac['length']===0x0)continue;const ad=ac['filter'](ae=>claimedRequiredAt(a9,aa,ae));if(ad['length']===0x0)continue;if(ac['some'](ae=>evaluate(a9,aa,{'node':ae,'claimed':![]})!==![]))continue;if(!a0)continue;if(ad['some'](ae=>DISPUTE_WAYPOINT['test'](ae)||a1['has'](ae)))continue;d['push']({'code':'RAIL_CLAIMED_BY_NODE_CONTRADICTION','level':'info','railKey':a8['key'],'detail':'allocator\x20rail\x20\x27'+a8['key']+'\x27\x20('+a8['track']+'\x20track)\x20pins\x20the\x20node\x20set\x20['+ac['join'](',\x20')+']\x20behind\x20an\x20'+'order.claimed_by\x20some==true\x20polarity\x20leg\x20—\x20the\x20payout\x20stamp\x20exists\x20ONLY\x20after\x20the\x20dispute-filing\x20'+'edge\x20enters\x20the\x20claim\x20waypoint,\x20and\x20NONE\x20of\x20those\x20states\x20is\x20the\x20filing\x20waypoint\x20or\x20its\x20successor\x20'+('(machine\x20shape:\x20filing\x20reaches\x20['+[...a1]['sort']()['join'](',\x20')+']).\x20VERDICT:\x20this\x20rail\x20is\x20')+'UNREACHABLE\x20in\x20every\x20sequence\x20—\x20money\x20can\x20enter\x20the\x20escrow\x20but\x20this\x20edge\x20can\x20never\x20fire\x20'+'(costco-e2e-mqvodbap\x20F-41:\x20the\x20ArbRefundReturn\x20rail\x20demanded\x20the\x20indemnity\x20stamp\x20while\x20the\x20order\x20'+'parked\x20at\x20claim_filed-class\x20nodes;\x20the\x20stopgap\x20was\x20disclosing\x20the\x20truth\x20into\x20purpose).\x20Two\x20'+'standard\x20fixes:\x20(a)\x20extend\x20the\x20rail\x27s\x20node\x20set\x20past\x20the\x20filing\x20waypoint\x20—\x20add\x20the\x20claim_filed-class\x20'+'node(s)\x20and\x20their\x20successors\x20the\x20rail\x20was\x20meant\x20to\x20serve;\x20or\x20(b)\x20drop\x20the\x20contradicting\x20polarity\x20'+'leg\x20—\x20decision\x2011:\x20fund\x20rails\x20are\x20node-gated,\x20never\x20claimed_by-gated\x20(the\x20polarity\x20READ\x20itself\x20is\x20'+'the\x20RAIL_CLAIMED_BY_LEG\x20critical).\x20Guards/allocators\x20freeze\x20at\x20publish\x20—\x20re-anchor\x20the\x20rail\x20BEFORE\x20binding.'});}}return d;}
1
+ import{ONCE_SLOT_BYTES,TASK_BINDING_SLOT}from'./onchain-constants.js';const SYM_NODE='progress.current',SYM_CLAIMED='order.claimed_by\x20some',DISPUTE_WAYPOINT=/claim|dispute|arbitrat|indemn/i;function slotValue(a,b){if(b===undefined)return{'value':undefined,'isSubmission':![]};const c=a['find'](d=>d['identifier']===b);if(!c)return{'value':undefined,'isSubmission':![]};return{'value':c['value'],'isSubmission':c['b_submission']===!![]};}function classifyQueryLhs(a){if(a===SYM_NODE)return{'kind':'node'};if(a===SYM_CLAIMED)return{'kind':'claimed'};return{'kind':'unknown'};}export function resolveValue(a,b){if(!b||b['type']!=='identifier')return{'known':![]};const c=slotValue(a,b['identifier']);if(c['isSubmission'])return{'known':![]};if(c['value']===undefined)return{'known':![]};return{'known':!![],'value':c['value']};}function evaluate(a,b,d){if(!b||typeof b['type']!=='string')return undefined;switch(b['type']){case'logic_and':{const e=Array['isArray'](b['nodes'])?b['nodes']:[];let f=![];for(const g of e){const h=evaluate(a,g,d);if(h===![])return![];if(h===undefined)f=!![];}return f?undefined:!![];}case'logic_or':{const i=Array['isArray'](b['nodes'])?b['nodes']:[];let j=![];for(const k of i){const l=evaluate(a,k,d);if(l===!![])return!![];if(l===undefined)j=!![];}return j?undefined:![];}case'logic_not':{const m=evaluate(a,b['node'],d);if(m===undefined)return undefined;return!m;}case'logic_equal':{const n=Array['isArray'](b['nodes'])?b['nodes']:[];if(n['length']<0x2)return undefined;const o=classifyQueryLhs(n[0x0]?.['query']),p=resolveValue(a,n[0x1]),q=o['kind']==='unknown'?classifyQueryLhs(n[0x1]?.['query']):o,r=!p['known']&&n[0x1]?.['query']!==undefined?resolveValue(a,n[0x0]):p;if(q['kind']==='node'){if(!r['known']||typeof r['value']!=='string')return undefined;return d['node']===r['value'];}if(q['kind']==='claimed'){if(!r['known']||typeof r['value']!=='boolean')return undefined;return d['claimed']===r['value'];}return undefined;}default:return undefined;}}function satisfiable(a,b,c){return evaluate(a,b,c)!==![];}function railPinnedNodes(a,b,d,e){if(!a||typeof a!=='object')return;const f=a;if(f['type']==='logic_equal'&&Array['isArray'](f['nodes'])&&f['nodes']['length']>=0x2){const h=classifyQueryLhs(f['nodes'][0x0]?.['query']),i=h['kind']==='unknown'?classifyQueryLhs(f['nodes'][0x1]?.['query']):h,j=h['kind']==='unknown'?f['nodes'][0x0]:f['nodes'][0x1];if(i['kind']==='node'){const k=resolveValue(b,j);k['known']&&typeof k['value']==='string'&&(d?e['neg']:e['pos'])['add'](k['value']);}return;}const g=f['type']==='logic_not'?!d:d;if(f['type']==='logic_not'){railPinnedNodes(f['node'],b,g,e);return;}if(Array['isArray'](f['nodes'])){for(const l of f['nodes'])railPinnedNodes(l,b,g,e);}}export function railNodePins(a,b){const c={'pos':new Set(),'neg':new Set()};return railPinnedNodes(a,b,![],c),c;}function findDeadLiterals(a,b,c,d){if(!a||typeof a['type']!=='string')return;if(a['type']==='logic_and'&&Array['isArray'](a['nodes'])){const e=new Map();for(const f of a['nodes']){const g=resolvableEquality(f,b);if(g)e['set'](g['symbol'],g['value']);}for(const h of a['nodes']){const i=resolvableEquality(h,b);if(i){const k=e['get'](i['symbol']);if(k!==undefined&&k!==i['value']){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,i['symbol'],k,i['value'])});return;}continue;}const j=findClash(h,b,e);if(j){d['push']({'code':'RAIL_DEAD_LITERAL','level':'critical','detail':deadLiteralDetail(c,j['symbol'],j['pinned'],j['value'])});return;}}for(const l of a['nodes'])findDeadLiterals(l,b,c,d);return;}if(Array['isArray'](a['nodes'])){for(const m of a['nodes'])findDeadLiterals(m,b,c,d);}if(a['node'])findDeadLiterals(a['node'],b,c,d);}function resolvableEquality(c,d){if(!c||c['type']!=='logic_equal'||!Array['isArray'](c['nodes']))return undefined;for(const [e,f]of[[c['nodes'][0x0],c['nodes'][0x1]],[c['nodes'][0x1],c['nodes'][0x0]]]){if(!e||typeof e['query']!=='string')continue;const g=classifyQueryLhs(e['query']);if(g['kind']==='unknown')continue;const h=resolveValue(d,f);if(!h['known'])continue;return{'symbol':g['kind']==='node'?SYM_NODE:SYM_CLAIMED,'value':h['value']};}return undefined;}function findClash(a,b,c){if(!a||typeof a['type']!=='string')return undefined;if(a['type']==='logic_not')return undefined;const d=resolvableEquality(a,b);if(d){const e=c['get'](d['symbol']);if(e!==undefined&&e!==d['value'])return{'symbol':d['symbol'],'pinned':e,'value':d['value']};return undefined;}if(Array['isArray'](a['nodes']))for(const f of a['nodes']){const g=findClash(f,b,c);if(g)return g;}if(a['node'])return findClash(a['node'],b,c);return undefined;}function deadLiteralDetail(a,b,c,d){return'allocator\x20guard\x20\x27'+a+'\x27:\x20one\x20conjunction\x20scope\x20carries\x20'+b+'\x20'+('==\x20'+JSON['stringify'](c)+'\x20and\x20ALSO\x20'+b+'\x20==\x20'+JSON['stringify'](d)+'\x20—\x20the\x20second\x20')+'literal\x20contradicts\x20the\x20first\x20and\x20is\x20a\x20DEAD\x20literal\x20(azx7-mn-261014\x20CR-azx7-01:\x20a\x20pinned\x20'+'node\x20equality\x20made\x20the\x20sibling\x20closed_cancel/item_lost\x20legs\x20unreachable,\x20stranding\x20the\x20'+'escrow\x20at\x20every\x20other\x20terminal).\x20Hoist\x20the\x20node\x20predicate\x20to\x20ONE\x20top-level\x20n-ary\x20logic_or\x20'+'instead\x20of\x20AND-prepending\x20a\x20single-node\x20gate.';}export function hasCallerIdentityLeg(a){let b=![];const c=d=>{if(b||d===null||typeof d!=='object')return;if(Array['isArray'](d)){for(const f of d)c(f);return;}const e=d;if(e['type']==='context'&&e['context']==='Signer'){b=!![];return;}if(typeof e['query']==='string'){const g=e['query']['toLowerCase']();if(g['startsWith']('context')||g['includes']('signer'))b=!![];else{if(/order\.agent|permission\.(owner|admin)|named.?operator/['test'](g))b=!![];}}if(!b){for(const h of Object['keys'](e))c(e[h]);}};return c(a),b;}export function refundGatePolarityMix(a){let b;const c=e=>{const f=JSON['stringify'](e);if(f===undefined)return'…';return f['length']>0x50?f['slice'](0x0,0x4d)+'…':f;},d=e=>{if(b!==undefined||e===null||typeof e!=='object')return;if(Array['isArray'](e)){for(const g of e)d(g);return;}const f=e;if(f['type']==='logic_or'&&Array['isArray'](f['nodes'])){const h=f['nodes'],i=h['filter'](l=>hasCallerIdentityLeg(l)),j=h['filter'](l=>l!==null&&typeof l==='object'&&l['type']==='logic_not');if(i['length']>0x0&&j['length']>0x0){b={'arms':[...i,...j]['map'](c)['join']('\x20\x20|\x20\x20')};return;}}for(const l of Object['keys'](f))d(f[l]);};return d(a),b;}function claimedAxisSensitive(a,b){const c=a['table'];return satisfiable(c,a['root'],{'node':b,'claimed':!![]})!==satisfiable(c,a['root'],{'node':b,'claimed':![]});}function claimedRequiredAt(a,b,c){return evaluate(a,b,{'node':c,'claimed':!![]})!==![]&&evaluate(a,b,{'node':c,'claimed':![]})===![];}export function verifyAllocatorRails(a,b,c){const d=[];if(a['length']===0x0)return d;{const j=c?.['declaredKeys'],k=[],l=[],m=[];for(const o of a){if(o['root']===undefined||hasCallerIdentityLeg(o['root']))continue;const q=o['track']==='settlement'||o['track']==='refund'||o['recoverTwin']===!![];if(!q){m['push'](o['key']);continue;}if(j?.['has'](o['key']))l['push'](o);else k['push'](o);}for(const r of k){const u=r['recipientKinds'],v=Array['isArray'](u)&&u['length']>0x0&&u['every'](x=>x==='submission');if(v){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20('+r['track']+'\x20track)\x20carries\x20no\x20caller-identity\x20leg,\x20but\x20every\x20'+'non-zero\x20sharing\x20row\x20resolves\x20to\x20a\x20guard-submitted\x20recipient\x20(GuardIdentifier\x20—\x20the\x20'+'order-anchored\x20slot):\x20the\x20payout\x20destination\x20is\x20PINNED\x20BY\x20THE\x20ROW\x20TOPOLOGY\x20and\x20cannot\x20be\x20'+'redirected\x20to\x20whoever\x20triggers\x20the\x20settlement.\x20Residual\x20surface:\x20a\x20bystander\x20may\x20ACCELERATE\x20'+'the\x20payout\x27s\x20timing\x20(bounded\x20—\x20replay\x20only\x20redistributes\x20the\x20remaining\x20balance\x20to\x20the\x20same\x20'+'payee).\x20Disclosed,\x20never\x20blocks;\x20no\x20declare\x20exemption\x20is\x20needed\x20(the\x20description-rewrite\x20'+'exemption\x20on\x20an\x20immutable\x20Guard\x20was\x20unreachable\x20—\x20mtw\x20F-MTW-18).\x20Fixed-Entity\x20or\x20Signer\x20rows\x20'+'would\x20keep\x20this\x20rail\x20CRITICAL.'});continue;}const w=Array['isArray'](u)&&u['some'](x=>x==='signer');d['push']({'code':'RAIL_NO_CALLER_IDENTITY_BOUND','level':'critical','railKey':r['key'],'detail':'allocator\x20rail\x20\x27'+r['key']+'\x27\x20('+r['track']+'\x20track'+((r['recoverTwin']===!![]?',\x20merchant-recovery\x20twin':'')+')\x20carries\x20NO\x20caller-identity\x20leg\x20')+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20query\x20'+'resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20trigger\x20this\x20route\x20'+'(ks11:\x20an\x20unexpected\x20account\x20swept\x20a\x20merchant-recovery\x20payout\x20and\x20doubled\x20the\x20allocation\x20draw).\x20'+'Money\x20rails\x20are\x20not\x20forwards\x20—\x20the\x20chain\x20injects\x20no\x20caller\x20rail\x20on\x20them,\x20so\x20the\x20guard\x20IS\x20the\x20'+'only\x20gate.\x20Bind\x20the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20host\x20'+'service_allocator_guard);\x20see\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20semantics\x20—\x20the\x20'+'caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20order\x20owner,\x20so\x20a\x20'+'forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.\x20A\x20deliberately\x20legless\x20'+'rail\x20(the\x20merchant-recovery\x20sweep\x20face:\x20payee\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20'+'permissionless\x20keeper\x20firing)\x20must\x20carry\x20an\x20explicit\x20declare\x20—\x20guard_resolutions\x20'+'{kind:\x27declare\x27,\x20reason}\x20or\x20the\x20template\x27s\x20identity_leg_exempt\x20—\x20and\x20then\x20ships\x20with\x20a\x20'+'permanent\x20non-blocking\x20disclosure\x20instead\x20of\x20this\x20block.'+(w?'\x20SHARPENED:\x20at\x20least\x20one\x20sharing\x20row\x20resolves\x20to\x20Signer\x20—\x20this\x20rail\x20PAYS\x20WHOEVER\x20TRIGGERS\x20'+'it,\x20so\x20the\x20legless\x20shape\x20is\x20a\x20self-pay\x20surface,\x20not\x20a\x20timing\x20risk.\x20An\x20identity\x20leg\x20is\x20'+'mandatory;\x20a\x20declare\x20exemption\x20does\x20NOT\x20fit\x20this\x20shape.':'')});}for(const x of l){d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','railKey':x['key'],'detail':'allocator\x20rail\x20\x27'+x['key']+'\x27\x20carries\x20no\x20caller-identity\x20leg\x20and\x20ships\x20under\x20an\x20explicit\x20'+'declare\x20exemption\x20({kind:\x27declare\x27}\x20/\x20identity_leg_exempt):\x20the\x20legless\x20shape\x20is\x20the\x20'+'sanctioned\x20merchant-recovery\x20face\x20—\x20the\x20payee\x20is\x20bound\x20by\x20the\x20paired\x20allocator\x20row,\x20never\x20'+'by\x20the\x20caller.\x20This\x20receipt\x20rides\x20the\x20plan\x20notes\x20and\x20is\x20re-surfaced\x20at\x20publish;\x20it\x20never\x20blocks.'});}m['length']>0x0&&d['push']({'code':'RAIL_NO_CALLER_IDENTITY','level':'info','detail':'allocator\x20rail(s)\x20['+m['join'](',\x20')+']\x20carry\x20no\x20caller-identity\x20leg\x20'+'(no\x20context(Signer)\x20comparison,\x20no\x20order.agent\x20has\x20/\x20permission.*\x20/\x20named-operator\x20'+'query\x20resolving\x20the\x20caller)\x20—\x20ANY\x20address\x20whose\x20tx\x20reaches\x20the\x20allocator\x20can\x20'+'trigger\x20this\x20settlement\x20route\x20(sahr:\x20a\x20bystander\x20accelerated\x20another\x20party\x27s\x20'+'payout).\x20LEGITIMATE\x20when\x20the\x20scene\x20verifies\x20identity\x20upstream\x20(verifier_level\x20'+'level3_scene_combined)\x20or\x20the\x20venue\x20is\x20intentionally\x20open-trigger;\x20otherwise\x20bind\x20'+'the\x20caller\x20per\x20pattern.identity_check_order_holder\x20(order.owner/agent,\x20host\x20'+'machine_forward)\x20or\x20pattern.repository_write_authorization\x20(permission-resolved,\x20'+'host\x20service_allocator_guard).\x20See\x20guard-host-context.ts\x20for\x20the\x20per-host\x20signer\x20'+'semantics\x20—\x20the\x20caller\x20of\x20an\x20allocator\x20gate\x20is\x20the\x20SETTLEMENT\x20TRIGGERER,\x20not\x20the\x20'+'order\x20owner,\x20so\x20a\x20forward-edge\x20identity\x20guard\x20pasted\x20here\x20checks\x20the\x20WRONG\x20subject.'});}for(const y of a){if(y['track']!=='refund'||y['root']===undefined)continue;const z=y['table']['some'](A=>A['identifier']===TASK_BINDING_SLOT||A['identifier']===ONCE_SLOT_BYTES);if(z)continue;d['push']({'code':'REFUND_RAIL_REPLAY_DISCLOSURE','level':'info','railKey':y['key'],'detail':'refund\x20rail\x20\x27'+y['key']+'\x27\x20carries\x20no\x20once-key\x20row\x20(no\x20per-order\x20254\x20anchor,\x20no\x20per-period\x20255\x20key):\x20'+'the\x20refund\x20leg\x20stays\x20re-triggerable\x20on\x20its\x20node\x20state\x20across\x20the\x20order\x27s\x20life.\x20This\x20is\x20the\x20'+'SANCTIONED\x20shape\x20—\x20the\x20once-key\x20injection\x20is\x20deliberately\x20banned\x20on\x20refund\x20tracks\x20(a\x20refund\x20may\x20'+'fire\x20on\x20several\x20terminal\x20legs;\x20a\x20per-order\x20once\x20anchor\x20deadlocks\x20the\x20second\x20leg),\x20so\x20the\x20'+'replay\x20surface\x20is\x20disclosed,\x20not\x20gated.\x20Replay\x20cannot\x20redirect\x20funds:\x20the\x20recipient\x20binding\x20pins\x20'+'every\x20payout\x20to\x20the\x20paying\x20order,\x20and\x20balance\x20exhaustion\x20bounds\x20repetition\x20—\x20a\x20firing\x20aborts\x20on\x20'+'zero/insufficient\x20balance\x20once\x20the\x20pool\x20can\x20no\x20longer\x20fund\x20the\x20group\x20(a\x20Rate\x20group\x20summing\x20to\x20'+'10000\x20empties\x20the\x20pool\x20on\x20the\x20first\x20payout;\x20an\x20Amount-shaped\x20group\x20repeats\x20until\x20the\x20balance\x20'+'runs\x20below\x20the\x20fixed\x20leg).'});}{const A=new Map();for(const C of b){for(const D of C['fromNodes']??[]){if(D==='')continue;const E=A['get'](D);if(E===undefined)A['set'](D,[C['name']]);else{if(!E['includes'](C['name']))E['push'](C['name']);}}}const B=b['some'](F=>(F['fromNodes']??[])['length']>0x0);if(B){const F=G=>{const H=new Set(),I=[...A['get'](G)??[]];while(I['length']>0x0){const J=I['pop']();if(J===G)return!![];if(H['has'](J))continue;H['add'](J);for(const K of A['get'](J)??[]){if(!H['has'](K))I['push'](K);}}return![];};for(const G of a){if(G['root']===undefined)continue;const H=G['table']['some'](L=>L['identifier']===TASK_BINDING_SLOT&&L['b_submission']===!![]);if(!H)continue;const I=railNodePins(G['root'],G['table']),J=[...I['pos']]['filter'](L=>!I['neg']['has'](L))['filter'](L=>b['some'](M=>M['name']===L)),K=J['filter'](F);if(K['length']===0x0)continue;d['push']({'code':'RAIL_SLOT254_REENTRANT','level':'info','railKey':G['key'],'detail':'allocator\x20rail\x20\x27'+G['key']+'\x27\x20('+G['track']+'\x20track)\x20arms\x20the\x20protocol\x20task-binding\x20slot\x20'+(TASK_BINDING_SLOT+'\x20(b_submission:\x20true)\x20while\x20its\x20anchor\x20node(s)\x20['+K['join'](',\x20')+']\x20lie\x20on\x20a\x20')+'DIRECTED\x20CYCLE\x20of\x20the\x20machine\x20graph\x20—\x20the\x20node\x20can\x20be\x20re-entered\x20on\x20the\x20SAME\x20order\x20(renewal\x20'+('cycle,\x20re-selection,\x20after-sales\x20return).\x20'+TASK_BINDING_SLOT+'\x20is\x20ONCE_FOR_OBJECT\x20')+'(the\x20once-key\x20is\x20bcs(payment_info.for_object)\x20—\x20THE\x20ORDER):\x20the\x20FIRST\x20'+'alloc\x20consumes\x20it\x20and\x20every\x20LATER\x20firing\x20through\x20this\x20guard\x20on\x20the\x20same\x20order\x20aborts\x20'+'E_ONCE_TRIGGERED\x20(16)\x20—\x20a\x20perpetual\x20stranding,\x20not\x20a\x20one-time\x20failure\x20(bts2-mn-261110-p4v7kq\x20K-01:\x20'+'the\x20generator\x20compiled\x20254\x20into\x20a\x20re-enterable\x20settle\x20rail;\x20the\x20abort\x20surfaced\x20on\x20the\x20buyer\x27s\x20'+'second\x20cycle).\x20Harm\x20requires\x20a\x20SECOND\x20firing\x20the\x20design\x20actually\x20drives\x20—\x20single-fire\x20rails\x20are\x20'+'the\x20sanctioned\x20once-per-order\x20face.\x20Disclosed,\x20not\x20gated:\x20the\x20census\x20(2026-11-10)\x20shows\x20the\x20'+'shape\x20alive\x20in\x207\x20flagship\x20template\x20families\x20pending\x20per-template\x20adjudication,\x20and\x20the\x20level\x20'+'flips\x20to\x20critical\x20once\x20those\x20survivors\x20are\x20re-anchored.\x20If\x20THIS\x20rail\x20must\x20re-fire\x20on\x20re-entry\x20'+('(renewal\x20settle,\x20post-exchange\x20re-settlement),\x20remove\x20the\x20'+TASK_BINDING_SLOT+'\x20row\x20and\x20pin\x20the\x20')+'payee\x20on\x20a\x20user\x20submission\x20slot\x20(slot\x200,\x20the\x20submitted\x20Order)\x20or\x20the\x20allocation\x20row\x27s\x20own\x20'+'recipient\x20binding,\x20or\x20re-anchor\x20the\x20rail\x20on\x20a\x20single-entry\x20node\x20(break\x20the\x20cycle)\x20BEFORE\x20'+'publish\x20—\x20guards\x20are\x20create-frozen\x20and\x20machine\x20topology\x20freezes\x20at\x20publish\x20(IMMUT-001).'});}}}for(const L of a){if(L['root']===undefined)continue;const M=refundGatePolarityMix(L['root']);if(M===undefined)continue;d['push']({'code':'REFUND_GATE_POLARITY_MIX','level':'critical','railKey':L['key'],'detail':'allocator\x20rail\x20\x27'+L['key']+'\x27\x20('+L['track']+'\x20track)\x20mixes\x20caller-identity\x20arms\x20and\x20NOT-state\x20arms\x20in\x20ONE\x20logic_or\x20group:\x20'+(M['arms']+'.\x20The\x20OR\x20makes\x20the\x20NOT-state\x20arm\x20a\x20LEGAL-CALLER\x20ALTERNATIVE\x20to\x20the\x20identity\x20legs\x20—\x20whoever\x20simply\x20')+'has\x20not\x20reached\x20that\x20state\x20passes\x20as\x20a\x20caller,\x20so\x20any\x20address\x20that\x20never\x20opened\x20a\x20dispute\x20can\x20sweep\x20the\x20rail\x20'+'(cour-mn-261102-z5t8\x20A2,\x20mainnet\x20REFUND-POLARITY:\x20the\x20buyer\x27s\x20not-in-dispute\x20state\x20was\x20compiled\x20into\x20'+'refund_gate\x27s\x20caller\x20identity\x20options).\x20A\x20negated\x20state\x20leg\x20is\x20a\x20payout\x20FREEZE,\x20never\x20an\x20authorization.\x20'+'Fix:\x20hoist\x20the\x20logic_not\x20leg\x20OUT\x20of\x20the\x20OR\x20into\x20a\x20TOP-LEVEL\x20logic_and\x20conjunction\x20—\x20'+'logic_and[\x20logic_or[<identity\x20legs>],\x20logic_not(<state\x20leg>)\x20]\x20—\x20the\x20recover_gate\x20shape\x20(etsm\x20F-04):\x20'+'the\x20freeze\x20then\x20gates\x20EVERY\x20caller\x20instead\x20of\x20widening\x20the\x20caller\x20set.\x20Guards\x20freeze\x20at\x20publish\x20—\x20fix\x20before\x20publishing.'});}{const N=new Map(),O=Q=>{const R=N['get'](Q['key']);if(R)return R;const S={'pos':new Set(),'neg':new Set()};railPinnedNodes(Q['root'],Q['table'],![],S);for(const T of S['neg'])S['pos']['delete'](T);return N['set'](Q['key'],S['pos']),S['pos'];},P=(Q,R)=>{if(Q['size']!==R['size'])return![];for(const S of Q)if(!R['has'](S))return![];return!![];};for(const Q of a){if(Q['root']===undefined)continue;const R=O(Q);if(R['size']===0x0)continue;for(const S of a){if(S['key']===Q['key']||S['root']===undefined)continue;const T=O(S);if((Q['recipient']??'')===''||(S['recipient']??'')===''||Q['recipient']===S['recipient']&&P(R,T))continue;if(T['size']===0x0)continue;const U=[...R]['filter'](W=>T['has'](W));if(U['length']===0x0)continue;const V=(Q['recoverTwin']===!![]&&S['track']==='refund'||S['recoverTwin']===!![]&&Q['track']==='refund')&&U['some'](W=>/^(closed_cancel|cancelled|refunded)$/i['test'](W));d['push']({'code':'RAIL_NODE_SET_OVERLAP','level':V?'critical':'info','railKey':Q['key'],'detail':'rail\x20\x27'+Q['key']+'\x27\x20(→'+Q['recipient']+')\x20and\x20\x27'+S['track']+'\x27\x20rail\x20\x27'+S['key']+'\x27\x20(→'+S['recipient']+')\x20are\x20BOTH\x20node-gated\x20onto\x20['+U['join'](',\x20')+']\x20—\x20'+'on\x20that\x20state\x20either\x20alloc_by_guard\x20fire\x20takes\x20the\x20pool\x20(first-to-fire),\x20so\x20the\x20pair\x20is\x20a\x20structural\x20double-payout/drain\x20surface\x20'+'(cstc2\x20C-1:\x20recover\x20∩\x20refund\x20on\x20closed_cancel\x20let\x20a\x20merchant\x20sweep\x20drain\x20escrow\x20the\x20refund\x20rail\x20was\x20the\x20designed\x20exit\x20for).\x20'+'Decision\x2011\x20keeps\x20the\x20two\x20tracks\x20INDEPENDENT\x20(no\x20claimed_by\x20coupling\x20—\x20that\x20cure\x20is\x20banned);\x20the\x20cure\x20is\x20the\x20decision-11\x20NODE\x20PARTITION:\x20'+'shrink\x20one\x20rail\x27s\x20node\x20set\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20(RAIL_TERMINAL_UNCOVERED\x20still\x20enforces\x20the\x20coverage\x20side).\x20'+'Scope\x20note\x20(TRG-04\x202026-11-06):\x20this\x20finding\x20fires\x20ONLY\x20for\x20pairs\x20paying\x20DIFFERENT\x20destinations\x20on\x20overlapping\x20states.\x20'+'Two\x20rails\x20with\x20the\x20SAME\x20recipient\x20AND\x20an\x20IDENTICAL\x20node\x20set\x20are\x20deliberately\x20NOT\x20reported\x20—\x20money\x20goes\x20into\x20the\x20same\x20pocket,\x20'+'only\x20the\x20first-to-fire\x20ORDER\x20is\x20nondeterministic,\x20never\x20the\x20destination\x20(the\x20sanctioned\x20per-period\x20ladder\x20shape;\x20mtwm\x20F-MT-06\x20re-flagged\x20it\x20as\x20a\x20hazard\x20three\x20reports\x20running\x20—\x20it\x20is\x20harmless\x20by\x20construction\x20and\x20stays\x20silent).\x20'+(V?'CRITICAL:\x20this\x20is\x20the\x20recover-twin\x20×\x20refund\x20drain\x20face\x20—\x20the\x20catalog-wide\x20disjointness\x20backstop\x20proves\x20NO\x20builtin\x20template\x20ships\x20it,\x20so\x20a\x20plan\x20carrying\x20it\x20is\x20hand-composed\x20and\x20must\x20partition\x20the\x20nodes\x20before\x20publish.':'Ships\x20INFO\x20(闸序纪律):\x20the\x20HKS-01(c)\x20enumeration\x20(2026-11-03)\x20shows\x20~10\x20surviving\x20templates\x20with\x20sanctioned\x20'+'recover/award\x20rails\x20still\x20overlapping\x20settle/award\x20node\x20sets\x20—\x20the\x20per-template\x20adjudication\x20bundle\x20HKS-01(c-2)\x20must\x20clean\x20'+'them\x20before\x20this\x20subclass\x20upgrades\x20to\x20a\x20compile\x20blocker\x20(the\x20first\x20upgrade\x20attempt\x20hard-blocked\x20the\x20catalog\x20and\x20was\x20reverted).')});}}}for(const W of a){if(W['recoverTwin']!==!![]||W['root']===undefined)continue;const X={'pos':new Set(),'neg':new Set()};railPinnedNodes(W['root'],W['table'],![],X);for(const Z of X['neg'])X['pos']['delete'](Z);const Y=[...X['pos']]['filter'](a0=>/^(closed_cancel|cancelled)$/i['test'](a0));if(Y['length']===0x0)continue;d['push']({'code':'RECOVER_COVERS_REFUND_TERMINAL','level':'critical','railKey':W['key'],'detail':'recover\x20rail\x20\x27'+W['key']+'\x27\x20(→'+(W['recipient']??'?')+')\x20covers\x20the\x20buyer\x20refund\x20terminal(s)\x20'+('['+Y['join'](',\x20')+']\x20—\x20at\x20that\x20state\x20the\x20REFUND\x20rail\x20is\x20the\x20designed\x20exit,\x20so\x20this\x20merchant-recovery\x20')+'twin\x20sweeps\x20an\x20ALREADY-REFUNDED\x20order:\x20the\x20refund\x20pays\x20the\x20buyer\x20back\x20and\x20the\x20recover\x20twin\x20(no\x20caller\x20'+'leg,\x20keeper-reachable)\x20drains\x20whatever\x20the\x20refund\x20left\x20behind\x20(the\x20live\x20mainnet\x20ks11\x20deduction;\x20'+'C-F01\x20root\x20cause).\x20Node-gate\x20partition\x20discipline:\x20re-anchor\x20the\x20recover\x20set\x20to\x20SETTLEMENT-side\x20'+'terminals\x20(e.g.\x20{completed,\x20reviewed})\x20so\x20every\x20terminal\x20keeps\x20EXACTLY\x20ONE\x20fund\x20exit\x20—\x20the\x20buyer\x27s\x20'+'terminal\x20belongs\x20to\x20the\x20refund\x20rail\x20alone.\x20Guards\x20freeze\x20at\x20publish:\x20fix\x20the\x20recover_node*\x20set\x20'+'BEFORE\x20the\x20guard\x20create\x20/\x20machine\x20bind\x20lands.\x20(The\x20order-scoped\x20advance\x20paths\x20additionally\x20carry\x20the\x20'+'chain\x20backstop\x20abort\x2015\x20E_ORDER_PRINCIPAL_REFUNDED,\x20but\x20the\x20sweep\x20itself\x20is\x20an\x20alloc\x20side-effect\x20—\x20'+'this\x20gate\x20is\x20the\x20only\x20surface\x20that\x20sees\x20it\x20first.)'});}if(b['length']===0x0)return d;const e=b['filter'](a0=>a0['semanticRole']==='cancelled'||a0['semanticRole']==='final'),f=b['map'](a0=>({'node':a0['name'],'claimed':!![]}));for(const a0 of a){if(a0['root']===undefined)continue;const a1=a0['table'];findDeadLiterals(a0['root'],a1,a0['key'],d);}for(const a2 of e){const a3=[{'node':a2['name'],'claimed':![]}];for(const a5 of a2['fromNodes']??[])a3['push']({'node':a5,'claimed':![]});const a4=a['some'](a6=>a3['some'](a7=>satisfiable(a6['table'],a6['root'],a7)));!a4&&d['push']({'code':'RAIL_TERMINAL_UNCOVERED','level':'critical','detail':'terminal\x20node\x20\x27'+a2['name']+'\x27\x20(role\x20'+a2['semanticRole']+')\x20has\x20NO\x20allocator\x20rail\x20'+'satisfiable\x20on\x20it\x20or\x20its\x20direct\x20predecessors\x20—\x20an\x20order\x20reaching\x20this\x20terminal\x20'+'strands\x20its\x20escrow\x20forever\x20(azx7-mn-261014\x20CR-azx7-01:\x20refund\x20'+'rejected\x20with\x20the\x20allocation\x20EINSUFFICIENT_BALANCE\x20abort\x20at\x20closed_cancel/item_lost;\x20crs-mn-261014\x20F-30:\x20a\x20double-'+'negated\x20claimed_by\x20leg\x20—\x20a\x20banned\x20shape\x20since\x20decision\x2011\x20—\x20bricked\x20the\x20refund\x20at\x20returned).\x20'+'Guards/allocators\x20freeze\x20at\x20publish\x20—\x20fix\x20the\x20rail\x27s\x20NODE-SET\x20before\x20publishing\x20'+'(decision\x2011:\x20exits\x20are\x20node-gated;\x20there\x20is\x20no\x20claimed_by\x20polarity\x20leg\x20to\x20fall\x20back\x20on).'});}const h=a['some'](a6=>f['some'](a7=>satisfiable(a6['table'],a6['root'],a7)));!h&&d['push']({'code':'RAIL_AWARD_EXIT_MISSING','level':'critical','detail':'no\x20allocator\x20rail\x20is\x20satisfiable\x20on\x20ANY\x20machine\x20node\x20—\x20every\x20order\x20state\x20'+'(awarded\x20or\x20not)\x20strands\x20its\x20escrow\x20(escrow-exit\x20invariant,\x20az-mn-261007).\x20'+'Decision\x2011\x20two-rail\x20independence:\x20exits\x20are\x20NODE-GATED\x20—\x20an\x20awarded\x20order\x20exits\x20'+'through\x20the\x20SAME\x20terminal\x20rails\x20as\x20any\x20other\x20order\x20(its\x20award\x20is\x20a\x20separate\x20'+'commercial\x20indemnity;\x20a\x20claimed_by\x20gate\x20would\x20be\x20the\x20RAIL_CLAIMED_BY_LEG\x20violation,\x20'+'not\x20the\x20cure).\x20Partition\x20the\x20terminals\x20between\x20a\x20refund/settle\x20rail\x20and\x20a\x20'+'merchant-side\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover,\x20terminal-node-gated).\x20'+'Historical\x20(O11,\x20alg26-tn-261026):\x20a\x20recover\x20rail\x20keyed\x20on\x20the\x20bare\x20claimed_by\x20stamp\x20'+'routed\x20a\x20dismissal\x20to\x20the\x20LOSING\x20party\x20—\x20that\x20polarity\x20shape\x20is\x20banned\x20since\x20decision\x2011.'});const i=a['filter'](a6=>a6['root']!==undefined);{const a6=new Set();for(const a7 of b){for(const a8 of i){if(claimedAxisSensitive(a8,a7['name']))a6['add'](a8['key']);}}a6['size']>0x0&&d['push']({'code':'RAIL_CLAIMED_BY_LEG','level':'critical','detail':'allocator\x20rail(s)\x20['+[...a6]['join'](',\x20')+']\x20flip\x20on\x20the\x20order.claimed_by\x20axis\x20—\x20'+'a\x20fund\x20rail\x20READS\x20the\x20arbitration\x20payout\x20stamp\x20(decision\x2011\x20two-rail\x20independence\x20violation;\x20'+'mirrors\x20R-FUND-RAIL-CLAIMED-BY).\x20The\x20fund\x20track\x20completes\x20by\x20ORDER-LEVEL\x20NODE\x20STATE:\x20gate\x20the\x20'+'rail\x20on\x20progress.current\x20node\x20sets\x20(refund/settle\x20faces),\x20partition\x20the\x20terminals\x20with\x20a\x20'+'terminal-node-gated\x20recovery\x20sweep\x20(tpl_allocator_node_gate_recover),\x20and\x20let\x20the\x20arbitrator\x20'+'rule\x20on\x20the\x20order\x27s\x20state\x20and\x20fund\x20destinations\x20—\x20a\x20double\x20collection\x20(settle+indemnity,\x20'+'refund+bounty)\x20is\x20a\x20legal\x20commercial\x20outcome\x20disclosed\x20at\x20the\x20MCP\x20confirmation\x20gate.\x20'+'Historical:\x20the\x20INV-C1\x20polarity\x20pair\x20(refund\x20some==false\x20/\x20recover\x20some==true)\x20was\x20the\x20old\x20'+'cure\x20and\x20the\x20W5-01\x20direction-blind\x20bug\x27s\x20cause\x20—\x20both\x20legs\x20were\x20removed\x20template-wide.'});}{const a9=new Map(),aa=[];for(const ad of b){for(const ae of ad['fromNodes']??[]){const af=a9['get'](ae)??[];af['push'](ad['name']),a9['set'](ae,af),!DISPUTE_WAYPOINT['test'](ae)&&DISPUTE_WAYPOINT['test'](ad['name'])&&aa['push'](ad['name']);}}const ab=aa['length']>0x0,ac=new Set();if(ab){const ag=[...aa];while(ag['length']>0x0){const ah=ag['pop']();if(ac['has'](ah))continue;ac['add'](ah);for(const ai of a9['get'](ah)??[])ag['push'](ai);}}for(const aj of i){const ak=aj['table'],al=aj['root'],am=railNodePins(al,ak),an=[...am['pos']]['filter'](ap=>!am['neg']['has'](ap));if(an['length']===0x0)continue;const ao=an['filter'](ap=>claimedRequiredAt(ak,al,ap));if(ao['length']===0x0)continue;if(an['some'](ap=>evaluate(ak,al,{'node':ap,'claimed':![]})!==![]))continue;if(!ab)continue;if(ao['some'](ap=>DISPUTE_WAYPOINT['test'](ap)||ac['has'](ap)))continue;d['push']({'code':'RAIL_CLAIMED_BY_NODE_CONTRADICTION','level':'info','railKey':aj['key'],'detail':'allocator\x20rail\x20\x27'+aj['key']+'\x27\x20('+aj['track']+'\x20track)\x20pins\x20the\x20node\x20set\x20['+an['join'](',\x20')+']\x20behind\x20an\x20'+'order.claimed_by\x20some==true\x20polarity\x20leg\x20—\x20the\x20payout\x20stamp\x20exists\x20ONLY\x20after\x20the\x20dispute-filing\x20'+'edge\x20enters\x20the\x20claim\x20waypoint,\x20and\x20NONE\x20of\x20those\x20states\x20is\x20the\x20filing\x20waypoint\x20or\x20its\x20successor\x20'+('(machine\x20shape:\x20filing\x20reaches\x20['+[...ac]['sort']()['join'](',\x20')+']).\x20VERDICT:\x20this\x20rail\x20is\x20')+'UNREACHABLE\x20in\x20every\x20sequence\x20—\x20money\x20can\x20enter\x20the\x20escrow\x20but\x20this\x20edge\x20can\x20never\x20fire\x20'+'(costco-e2e-mqvodbap\x20F-41:\x20the\x20ArbRefundReturn\x20rail\x20demanded\x20the\x20indemnity\x20stamp\x20while\x20the\x20order\x20'+'parked\x20at\x20claim_filed-class\x20nodes;\x20the\x20stopgap\x20was\x20disclosing\x20the\x20truth\x20into\x20purpose).\x20Two\x20'+'standard\x20fixes:\x20(a)\x20extend\x20the\x20rail\x27s\x20node\x20set\x20past\x20the\x20filing\x20waypoint\x20—\x20add\x20the\x20claim_filed-class\x20'+'node(s)\x20and\x20their\x20successors\x20the\x20rail\x20was\x20meant\x20to\x20serve;\x20or\x20(b)\x20drop\x20the\x20contradicting\x20polarity\x20'+'leg\x20—\x20decision\x2011:\x20fund\x20rails\x20are\x20node-gated,\x20never\x20claimed_by-gated\x20(the\x20polarity\x20READ\x20itself\x20is\x20'+'the\x20RAIL_CLAIMED_BY_LEG\x20critical).\x20Guards/allocators\x20freeze\x20at\x20publish\x20—\x20re-anchor\x20the\x20rail\x20BEFORE\x20binding.'});}}return d;}
@@ -1 +1 @@
1
- import{batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';export const ARB_OP_SHAPE_REGISTRY=[{'op':'arb_confirm','family':'order','summary':'CUSTOMER-side\x20confirm\x20on\x20an\x20Arb\x20case\x20(state\x200\x20→\x201;\x20required\x20after\x20an\x20arbitrator\x20reset).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_confirm:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20confirm:\x20true\x20}\x20}\x20}'},{'op':'arb_objection','family':'order','summary':'Oppose\x20the\x20ruling\x20and\x20request\x20re-arbitration\x20(objection\x20cycle).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_objection:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20objection:\x20\x27<why>\x27\x20}\x20}\x20}'},{'op':'arb_claim_compensation','family':'order','summary':'Claim\x20a\x20PAID\x20award\x20(indemnity\x20>\x200)\x20from\x20the\x20Service\x27s\x20compensation\x20fund;\x20refuses\x20zero-award\x20dismissals.','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_claim_compensation:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'arb_case_conclude','family':'order','summary':'Stamp\x20a\x20CONCLUDED\x20zero-award\x20dismissal\x20onto\x20the\x20order\x20(moves\x20no\x20funds;\x20permissionless\x20keeper\x20step).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_case_conclude:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'dispute','family':'arbitration','summary':'FILE\x20a\x20case\x20for\x20an\x20order\x20(venue-side\x20entry;\x20the\x20case\x20lands\x20directly\x20in\x20Arbitrator_confirming).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20dispute:\x20{\x20order:\x20\x27<ORDER>\x27,\x20description:\x20\x27<non-empty>\x27,\x20proposition:\x20[\x27<claim>\x27],\x20fee:\x20{\x20balance:\x2050000000\x20}\x20}\x20}\x20}'},{'op':'confirm','family':'arbitration','summary':'ARBITRATOR-side\x20material\x20confirmation\x20(Arbitrator_confirming\x20→\x20Voting).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20confirm:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20voting_deadline:\x20null\x20}\x20}\x20}'},{'op':'vote','family':'arbitration','summary':'Cast\x20ballots\x20(proposition\x20INDICES)\x20on\x20the\x20case.','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20vote:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20votes:\x20[0]\x20}\x20}\x20}'},{'op':'arbitration','family':'arbitration','summary':'Deliver\x20the\x20definitive\x20ruling\x20(feedback\x20+\x20indemnity;\x200\x20=\x20dismissal).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20arbitration:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<ruling\x20rationale>\x27,\x20indemnity:\x200\x20}\x20}\x20}'},{'op':'reset','family':'arbitration','summary':'ARBITRATOR-side\x20reset\x20—\x20voids\x20the\x20ruling,\x20back\x20to\x20Principal_confirming\x20(only\x20the\x20customer\x20re-advances).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20reset:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<why>\x27\x20}\x20}\x20}'},{'op':'feedback','family':'arbitration','summary':'Record\x20feedback\x20on\x20the\x20case.','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20feedback:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<text>\x27\x20}\x20}\x20}'},{'op':'arb_withdraw','family':'arbitration','summary':'Withdraw\x20the\x20case\x20fee\x20into\x20the\x20Arbitration\x27s\x20balance\x20pool\x20(state-gated;\x20two-stage\x20cash-out).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20arb_withdraw:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'voting_deadline_change','family':'arbitration','summary':'Move\x20the\x20voting\x20deadline\x20(strictly\x20future\x20ms\x20timestamp;\x20NEVER\x200).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20voting_deadline_change:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20voting_deadline:\x20<future_ms>\x20}\x20}\x20}'}];export const ARB_MACHINE_RAIL_EXAMPLE='{\x20operation_type:\x20\x27progress\x27,\x20data:\x20{\x20object:\x20\x27<PROGRESS>\x27,\x20task:\x20\x27<ORDER>\x27,\x20operate:\x20{\x20op:\x20\x27next\x27,\x20'+'operation:\x20{\x20forward:\x20\x27<ArbRefund|ResumeAfterDismissal|...>\x27,\x20next_node_name:\x20\x27<target>\x27\x20}\x20}\x20},\x20'+'submission:\x20{\x20type:\x20\x27submission\x27,\x20guard:\x20[{\x20object:\x20\x27<RAIL\x20GUARD>\x27,\x20impack:\x20true\x20}],\x20submission:\x20'+'[{\x20guard:\x20\x27<RAIL\x20GUARD>\x27,\x20submission:\x20[\x20{\x20identifier:\x201,\x20value:\x20\x27<ARB\x20CASE>\x27,\x20value_type:\x20\x27Address\x27,\x20name:\x20\x27\x27,\x20b_submission:\x20true\x20}\x20]\x20}]\x20}\x20}\x20'+'—\x20slot\x201\x20IS\x20the\x20Arb\x20CASE\x20address\x20on\x20arbitration-rail\x20edges\x20(slot\x20254\x20=\x20the\x20ORDER;\x20both\x20auto-resolvable,\x20see\x20the\x20auto-fill\x20note).';function normKey(a){return a['toLowerCase']()['replace'](/[^a-z0-9]/g,'');}function withinEditDistance(c,d,e){if(Math['abs'](c['length']-d['length'])>e)return![];const f=new Array(d['length']+0x1);for(let g=0x0;g<=d['length'];g++)f[g]=g;for(let h=0x1;h<=c['length'];h++){let k=f[0x0];f[0x0]=h;for(let l=0x1;l<=d['length'];l++){const m=f[l];f[l]=Math['min'](f[l]+0x1,f[l-0x1]+0x1,k+(c[h-0x1]===d[l-0x1]?0x0:0x1)),k=m;}}return f[d['length']]<=e;}export function arbNestingExamplesForSchemaErrors(a,b,c){if(a!=='onchain_operations')return undefined;const d=b?.['operation_type'];if(d!=='order'&&d!=='arbitration')return undefined;const f=ARB_OP_SHAPE_REGISTRY['map'](j=>j['op']),g=new Set();for(const j of c){const k=Array['isArray'](j['path'])?j['path']['map'](String)['join']('.'):String(j['path']??''),l=[],n=String(j['message']??'')+'\x20'+String(j['suggestion']??j['code']??'');for(const p of n['matchAll'](/'([^']{4,40})'/g))l['push'](p[0x1]);const o=[k['split']('.')['pop']()??'',...l];for(const q of f){if(k['split']('.')['includes'](q)){g['add'](q);continue;}if(j['code']==='unrecognized_keys'||/unknown field|unrecognized key/i['test'](j['message']??''))for(const r of o){const s=normKey(r);if(s['length']>=0x4&&withinEditDistance(s,normKey(q),0x2))g['add'](q);}}}if(g['size']===0x0)return undefined;const h=ARB_OP_SHAPE_REGISTRY['filter'](t=>g['has'](t['op'])),i=h['map'](t=>'ARBITRATION\x20SHAPE\x20('+t['op']+'\x20—\x20'+t['summary']+')\x20correct\x20nesting:\x20'+t['example']+(t['family']==='arbitration'?'\x20—\x20ROOT\x20object\x20=\x20the\x20Arbitration\x20REGISTRATION\x20object;\x20the\x20CASE\x20goes\x20in\x20the\x20op\x27s\x20arb\x20field.':'\x20—\x20data.object\x20=\x20the\x20ORDER;\x20the\x20CASE\x20goes\x20in\x20the\x20op\x27s\x20arb\x20field.'));return i['push']('Machine-rail\x20reminder\x20(ArbRefund\x20/\x20ResumeAfterDismissal\x20family):\x20'+ARB_MACHINE_RAIL_EXAMPLE),{'line':i['join']('\x0a'),'structured':{'path':'data.'+[...g][0x0],'code':'arb_shape_example','message':'Correct\x20venue→case\x20nesting\x20for\x20'+[...g]['join'](',\x20'),'suggestion':i['join']('\x0a')}};}export const ARB_CASE_SLOT_EDGE_PATTERN=/^(ArbRefund|ArbAward|ArbCompensation|ResumeAfterDismissal|FileDispute|WithdrawClaim)/;export function isArbCaseSlotEdge(a){return typeof a==='string'&&ARB_CASE_SLOT_EDGE_PATTERN['test'](a);}const ORDER_SLOT=0xfe;export const ARB_CASE_SLOT=0x1;let depsOverride;export function setArbOperationFaceDeps(a){depsOverride=a;}function arbFaceDeps(){if(depsOverride)return depsOverride;return{'readObjects':(a,b)=>batchQueryObjectsByIds(a,b,!![])};}export async function resolveArbCaseBinding(a,b){try{const c=await arbFaceDeps()['readObjects']([a],b),e=(c??[])['find'](i=>i?.['type']==='Order')??c?.[0x0],f=e?.['data']??e;if(!f)return{'status':'unknown'};const g=typeof f?.['claimed_by']==='string'&&f['claimed_by']['startsWith']('0x')?f['claimed_by']:undefined;if(g&&g!=='0x0')return{'status':'bound','caseAddr':g,'via':'order.claimed_by'};const h=Array['isArray'](f?.['dispute'])?f['dispute']:[];for(const i of h){const j=typeof i==='string'&&i['startsWith']('0x')?i:typeof i?.['arb']==='string'&&i['arb']['startsWith']('0x')?i['arb']:undefined;if(j&&j!=='0x0')return{'status':'bound','caseAddr':j,'via':'order.dispute\x20vector'};}return{'status':'unbound','disputesFiled':h['length']};}catch{return{'status':'unknown'};}}export async function maybeFillArbCaseSlot(a){if(!isArbCaseSlotEdge(a['forwardName']))return undefined;const b=a['echo'];if(!b||b['type']!=='submission'||!Array['isArray'](b['submission'])||b['submission']['length']===0x0)return undefined;const c=b['submission'];let d=![];for(const i of c){for(const j of Array['isArray'](i?.['submission'])?i['submission']:[]){const k=Number(j?.['identifier']);if(k===ORDER_SLOT)continue;if(k===ARB_CASE_SLOT){if(String(j?.['value_type']??'')['includes']('Address')){d=!![];continue;}return undefined;}return undefined;}}if(!d)return undefined;if(!a['orderAddr'])return undefined;const e=await resolveArbCaseBinding(a['orderAddr'],a['network']),f=Array['isArray'](b['guard'])&&b['guard']['length']>0x0?b['guard']['map'](l=>({'object':l['object'],'impack':l['impack']!==![]})):c['map'](l=>({'object':l['guard'],'impack':!![]})),h=(l,m,n)=>({'identifier':l,'name':'','b_submission':!![],'value_type':n,'value':m});if(e['status']==='bound'){const l={'type':'submission','guard':f,'submission':c['map'](m=>({'guard':m['guard'],'submission':(Array['isArray'](m['submission'])?m['submission']:[])['map'](n=>{const o=Number(n?.['identifier']);return o===ARB_CASE_SLOT?h(ARB_CASE_SLOT,e['caseAddr'],'Address'):h(o,a['orderAddr'],'Address');})}))};return{'kind':'filled','submission':l,'note':'ARBITRATION\x20SLOT-1\x20AUTO-RESOLVE:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20'+('submission\x20slot\x20'+ARB_CASE_SLOT+'\x20—\x20resolved\x20from\x20the\x20order\x27s\x20on-chain\x20binding\x20('+e['via']+')\x20to\x20')+(e['caseAddr']+';\x20slot\x20'+ORDER_SLOT+'\x20=\x20the\x20order.\x20The\x20forward\x20was\x20re-driven\x20in-process\x20(the\x20echo\x20probe\x20')+'executed\x20nothing).'};}if(e['status']==='unbound'){const m=e['disputesFiled']>0x0?'\x20'+e['disputesFiled']+'\x20dispute\x20record(s)\x20are\x20filed,\x20but\x20NO\x20case\x20pointer\x20is\x20stamped\x20on\x20the\x20order\x20—\x20the\x20rails\x20read\x20the\x20pointer,\x20not\x20the\x20records.':'';return{'kind':'blocked','note':'FILE\x20DISPUTE\x20FIRST:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20submission\x20'+('slot\x20'+ARB_CASE_SLOT+',\x20but\x20this\x20order\x20has\x20NO\x20arbitration\x20case\x20binding\x20on-chain.'+m+'\x20')+'File\x20it,\x20then\x20re-drive\x20this\x20forward:\x20{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20'+'dispute:\x20{\x20order:\x20\x27<ORDER>\x27,\x20description:\x20\x27<non-empty>\x27,\x20proposition:\x20[\x27<claim>\x27],\x20fee:\x20{\x20balance:\x20<amount>\x20}\x20}\x20}\x20}.\x20'+'Refusing\x20to\x20guess\x20a\x20case\x20address\x20(a\x20zero/placeholder\x20value\x20would\x20only\x20burn\x20the\x20transaction\x20on\x20a\x20failed\x20guard).'};}return{'kind':'soft','note':'ARBITRATION\x20SLOT-1\x20NOTE:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20submission\x20'+('slot\x20'+ARB_CASE_SLOT+';\x20the\x20order\x27s\x20binding\x20could\x20not\x20be\x20read\x20right\x20now\x20—\x20supply\x20the\x20case\x20address\x20explicitly\x20')+('(slot\x20'+ARB_CASE_SLOT+')\x20in\x20the\x20submission\x20envelope\x20below.\x20Never\x20use\x20a\x20placeholder\x20address.')};}export const CONCLUDE_THEN_DRIVE_NOTE='CONCLUDE-THEN-DRIVE\x20(K3\x20D6):\x20the\x20machine\x27s\x20arbitration\x20rails\x20read\x20the\x20ORDER\x27s\x20case\x20pointer,\x20which\x20the\x20case\x20'+'conclusion\x20stamps.\x20Conclude\x20the\x20Arb\x20case\x20FIRST\x20—\x20a\x20paid\x20award\x20via\x20arb_claim_compensation,\x20a\x20zero-award\x20'+'dismissal\x20via\x20arb_case_conclude\x20—\x20and\x20ONLY\x20THEN\x20drive\x20the\x20machine\x20arbitration\x20rail\x20(ArbRefund\x20/\x20'+'ResumeAfterDismissal\x20family).\x20Driving\x20the\x20rail\x20against\x20an\x20unconcluded\x20case\x20reads\x20stale\x20state\x20and\x20re-parks\x20'+'the\x20order.';export const ARB_CASE_STATUS_NAMES=['Principal_confirming','Arbitrator_confirming','Voting','Arbitrated','Objectionable','Finished','Withdrawn'];export function arbCaseStatusLabel(a){const b=typeof a==='number'?a:Number['isFinite'](Number(a))?Number(a):NaN;if(!Number['isInteger'](b)||b<0x0||b>=ARB_CASE_STATUS_NAMES['length'])return undefined;return ARB_CASE_STATUS_NAMES[b];}export async function buildDisputeReceipt(a){try{const b=await resolveArbCaseBinding(a['orderAddr'],a['network']);if(b['status']!=='bound')return undefined;const c=await arbFaceDeps()['readObjects']([b['caseAddr']],a['network']),d=(c??[])['find'](j=>j?.['type']==='Arb')??c?.[0x0],e=d?.['data']??d,f=e&&Number['isFinite'](Number(e?.['status']))?Number(e['status']):undefined,g=arbCaseStatusLabel(f),h=['arbitrator\x20confirms\x20the\x20materials\x20({operation_type:\x27arbitration\x27,\x20data:{object:\x27<VENUE>\x27,\x20confirm:{arb:\x27<CASE>\x27,\x20voting_deadline:null}}})\x20→\x20Voting','panel\x20votes\x20({...\x20vote:{arb:\x27<CASE>\x27,\x20votes:[<indices>]}})','verdict\x20({...\x20arbitration:{arb:\x27<CASE>\x27,\x20feedback:\x27...\x27,\x20indemnity:<0|amount>}})','conclude\x20the\x20case\x20on\x20the\x20order\x20—\x20paid\x20award\x20→\x20order.arb_claim_compensation,\x20zero-award\x20dismissal\x20→\x20order.arb_case_conclude','ONLY\x20THEN\x20drive\x20the\x20machine\x20arbitration\x20rail\x20(ArbRefund\x20/\x20ResumeAfterDismissal)\x20—\x20conclude-then-drive'],i='DISPUTE\x20FILED\x20—\x20case\x20'+b['caseAddr']+'\x20bound\x20to\x20order\x20'+a['orderRef']+',\x20status\x20'+(''+(f??'?')+(g?'\x20('+g+')':'')+'.\x20LIFECYCLE\x20(do\x20the\x20steps\x20IN\x20ORDER):\x20')+h['map']((j,k)=>'('+(k+0x1)+')\x20'+j)['join']('\x20→\x20')+'.';return{'case_addr':b['caseAddr'],'order':a['orderRef'],'status':f,'status_name':g,'next_steps':h,'text':i};}catch{return undefined;}}
1
+ import{batchQueryObjectsByIds}from'../graph/onchain/sdk-batch.js';export const ARB_OP_SHAPE_REGISTRY=[{'op':'arb_confirm','family':'order','summary':'CUSTOMER-side\x20confirm\x20on\x20an\x20Arb\x20case\x20(state\x200\x20→\x201;\x20required\x20after\x20an\x20arbitrator\x20reset).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_confirm:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20confirm:\x20true\x20}\x20}\x20}'},{'op':'arb_objection','family':'order','summary':'Oppose\x20the\x20ruling\x20and\x20request\x20re-arbitration\x20(objection\x20cycle).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_objection:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20objection:\x20\x27<why>\x27\x20}\x20}\x20}'},{'op':'arb_claim_compensation','family':'order','summary':'Claim\x20a\x20PAID\x20award\x20(indemnity\x20>\x200)\x20from\x20the\x20Service\x27s\x20compensation\x20fund;\x20refuses\x20zero-award\x20dismissals.','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_claim_compensation:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'arb_case_conclude','family':'order','summary':'Stamp\x20a\x20CONCLUDED\x20zero-award\x20dismissal\x20onto\x20the\x20order\x20(moves\x20no\x20funds;\x20permissionless\x20keeper\x20step).','example':'{\x20operation_type:\x20\x27order\x27,\x20data:\x20{\x20object:\x20\x27<ORDER>\x27,\x20arb_case_conclude:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'dispute','family':'arbitration','summary':'FILE\x20a\x20case\x20for\x20an\x20order\x20(venue-side\x20entry;\x20the\x20case\x20lands\x20directly\x20in\x20Arbitrator_confirming).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20dispute:\x20{\x20order:\x20\x27<ORDER>\x27,\x20description:\x20\x27<non-empty>\x27,\x20proposition:\x20[\x27<claim>\x27],\x20fee:\x20{\x20balance:\x2050000000\x20}\x20}\x20}\x20}'},{'op':'confirm','family':'arbitration','summary':'ARBITRATOR-side\x20material\x20confirmation\x20(Arbitrator_confirming\x20→\x20Voting).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20confirm:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20voting_deadline:\x20null\x20}\x20}\x20}'},{'op':'vote','family':'arbitration','summary':'Cast\x20ballots\x20(proposition\x20INDICES)\x20on\x20the\x20case.','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20vote:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20votes:\x20[0]\x20}\x20}\x20}'},{'op':'arbitration','family':'arbitration','summary':'Deliver\x20the\x20definitive\x20ruling\x20(feedback\x20+\x20indemnity;\x200\x20=\x20dismissal).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20arbitration:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<ruling\x20rationale>\x27,\x20indemnity:\x200\x20}\x20}\x20}'},{'op':'reset','family':'arbitration','summary':'ARBITRATOR-side\x20reset\x20—\x20voids\x20the\x20ruling,\x20back\x20to\x20Principal_confirming\x20(only\x20the\x20customer\x20re-advances).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20reset:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<why>\x27\x20}\x20}\x20}'},{'op':'feedback','family':'arbitration','summary':'Record\x20feedback\x20on\x20the\x20case.','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20feedback:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20feedback:\x20\x27<text>\x27\x20}\x20}\x20}'},{'op':'arb_withdraw','family':'arbitration','summary':'Withdraw\x20the\x20case\x20fee\x20into\x20the\x20Arbitration\x27s\x20balance\x20pool\x20(state-gated;\x20two-stage\x20cash-out).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20arb_withdraw:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27\x20}\x20}\x20}'},{'op':'voting_deadline_change','family':'arbitration','summary':'Move\x20the\x20voting\x20deadline\x20(strictly\x20future\x20ms\x20timestamp;\x20NEVER\x200).','example':'{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20voting_deadline_change:\x20{\x20arb:\x20\x27<ARB\x20CASE>\x27,\x20voting_deadline:\x20<future_ms>\x20}\x20}\x20}'}];export const ARB_MACHINE_RAIL_EXAMPLE='{\x20operation_type:\x20\x27progress\x27,\x20data:\x20{\x20object:\x20\x27<PROGRESS>\x27,\x20task:\x20\x27<ORDER>\x27,\x20operate:\x20{\x20op:\x20\x27next\x27,\x20'+'operation:\x20{\x20forward:\x20\x27<ArbRefund|ResumeAfterDismissal|...>\x27,\x20next_node_name:\x20\x27<target>\x27\x20}\x20}\x20},\x20'+'submission:\x20{\x20type:\x20\x27submission\x27,\x20guard:\x20[{\x20object:\x20\x27<RAIL\x20GUARD>\x27,\x20impack:\x20true\x20}],\x20submission:\x20'+'[{\x20guard:\x20\x27<RAIL\x20GUARD>\x27,\x20submission:\x20[\x20{\x20identifier:\x201,\x20value:\x20\x27<ARB\x20CASE>\x27,\x20value_type:\x20\x27Address\x27,\x20name:\x20\x27\x27,\x20b_submission:\x20true\x20}\x20]\x20}]\x20}\x20}\x20'+'—\x20slot\x201\x20IS\x20the\x20Arb\x20CASE\x20address\x20on\x20arbitration-rail\x20edges\x20(slot\x20254\x20=\x20the\x20ORDER;\x20both\x20auto-resolvable,\x20see\x20the\x20auto-fill\x20note).';function normKey(a){return a['toLowerCase']()['replace'](/[^a-z0-9]/g,'');}function withinEditDistance(c,d,e){if(Math['abs'](c['length']-d['length'])>e)return![];const f=new Array(d['length']+0x1);for(let g=0x0;g<=d['length'];g++)f[g]=g;for(let h=0x1;h<=c['length'];h++){let k=f[0x0];f[0x0]=h;for(let l=0x1;l<=d['length'];l++){const m=f[l];f[l]=Math['min'](f[l]+0x1,f[l-0x1]+0x1,k+(c[h-0x1]===d[l-0x1]?0x0:0x1)),k=m;}}return f[d['length']]<=e;}export function arbNestingExamplesForSchemaErrors(a,b,c){if(a!=='onchain_operations')return undefined;const d=b?.['operation_type'];if(d!=='order'&&d!=='arbitration')return undefined;const f=ARB_OP_SHAPE_REGISTRY['map'](j=>j['op']),g=new Set();for(const j of c){const k=Array['isArray'](j['path'])?j['path']['map'](String)['join']('.'):String(j['path']??''),l=[],n=String(j['message']??'')+'\x20'+String(j['suggestion']??j['code']??'');for(const p of n['matchAll'](/'([^']{4,40})'/g))l['push'](p[0x1]);const o=[k['split']('.')['pop']()??'',...l];for(const q of f){if(k['split']('.')['includes'](q)){g['add'](q);continue;}if(j['code']==='unrecognized_keys'||/unknown field|unrecognized key/i['test'](j['message']??''))for(const r of o){const s=normKey(r);if(s['length']>=0x4&&withinEditDistance(s,normKey(q),0x2))g['add'](q);}}}if(g['size']===0x0)return undefined;const h=ARB_OP_SHAPE_REGISTRY['filter'](t=>g['has'](t['op'])),i=h['map'](t=>'ARBITRATION\x20SHAPE\x20('+t['op']+'\x20—\x20'+t['summary']+')\x20correct\x20nesting:\x20'+t['example']+(t['family']==='arbitration'?'\x20—\x20ROOT\x20object\x20=\x20the\x20Arbitration\x20REGISTRATION\x20object;\x20the\x20CASE\x20goes\x20in\x20the\x20op\x27s\x20arb\x20field.':'\x20—\x20data.object\x20=\x20the\x20ORDER;\x20the\x20CASE\x20goes\x20in\x20the\x20op\x27s\x20arb\x20field.'));return i['push']('Machine-rail\x20reminder\x20(ArbRefund\x20/\x20ResumeAfterDismissal\x20family):\x20'+ARB_MACHINE_RAIL_EXAMPLE),{'line':i['join']('\x0a'),'structured':{'path':'data.'+[...g][0x0],'code':'arb_shape_example','message':'Correct\x20venue→case\x20nesting\x20for\x20'+[...g]['join'](',\x20'),'suggestion':i['join']('\x0a')}};}export const ARB_CASE_SLOT_EDGE_PATTERN=/^(ArbRefund|ArbAward|ArbCompensation|ResumeAfterDismissal|FileDispute)/;export function isArbCaseSlotEdge(a){return typeof a==='string'&&ARB_CASE_SLOT_EDGE_PATTERN['test'](a);}export const ARB_RULING_EXECUTION_EDGE_PATTERN=/^(ArbRefund|ArbAward|ArbCompensation|ResumeAfterDismissal)/;export function isArbRulingExecutionEdge(a){return typeof a==='string'&&ARB_RULING_EXECUTION_EDGE_PATTERN['test'](a);}const ORDER_SLOT=0xfe;export const ARB_CASE_SLOT=0x1;let depsOverride;export function setArbOperationFaceDeps(a){depsOverride=a;}function arbFaceDeps(){if(depsOverride)return depsOverride;return{'readObjects':(a,b)=>batchQueryObjectsByIds(a,b,!![])};}export async function resolveArbCaseBinding(a,b){try{const c=await arbFaceDeps()['readObjects']([a],b),e=(c??[])['find'](i=>i?.['type']==='Order')??c?.[0x0],f=e?.['data']??e;if(!f)return{'status':'unknown'};const g=typeof f?.['claimed_by']==='string'&&f['claimed_by']['startsWith']('0x')?f['claimed_by']:undefined;if(g&&g!=='0x0')return{'status':'bound','caseAddr':g,'via':'order.claimed_by'};const h=Array['isArray'](f?.['dispute'])?f['dispute']:[];for(const i of h){const j=typeof i==='string'&&i['startsWith']('0x')?i:typeof i?.['arb']==='string'&&i['arb']['startsWith']('0x')?i['arb']:undefined;if(j&&j!=='0x0')return{'status':'bound','caseAddr':j,'via':'order.dispute\x20vector'};}return{'status':'unbound','disputesFiled':h['length']};}catch{return{'status':'unknown'};}}export async function maybeFillArbCaseSlot(a){if(!isArbCaseSlotEdge(a['forwardName']))return undefined;const b=a['echo'];if(!b||b['type']!=='submission'||!Array['isArray'](b['submission'])||b['submission']['length']===0x0)return undefined;const c=b['submission'];let d=![];for(const i of c){for(const j of Array['isArray'](i?.['submission'])?i['submission']:[]){const k=Number(j?.['identifier']);if(k===ORDER_SLOT)continue;if(k===ARB_CASE_SLOT){if(String(j?.['value_type']??'')['includes']('Address')){d=!![];continue;}return undefined;}return undefined;}}if(!d)return undefined;if(!a['orderAddr'])return undefined;const e=await resolveArbCaseBinding(a['orderAddr'],a['network']),f=Array['isArray'](b['guard'])&&b['guard']['length']>0x0?b['guard']['map'](l=>({'object':l['object'],'impack':l['impack']!==![]})):c['map'](l=>({'object':l['guard'],'impack':!![]})),h=(l,m,n)=>({'identifier':l,'name':'','b_submission':!![],'value_type':n,'value':m});if(e['status']==='bound'){const l={'type':'submission','guard':f,'submission':c['map'](m=>({'guard':m['guard'],'submission':(Array['isArray'](m['submission'])?m['submission']:[])['map'](n=>{const o=Number(n?.['identifier']);return o===ARB_CASE_SLOT?h(ARB_CASE_SLOT,e['caseAddr'],'Address'):h(o,a['orderAddr'],'Address');})}))};return{'kind':'filled','submission':l,'note':'ARBITRATION\x20SLOT-1\x20AUTO-RESOLVE:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20'+('submission\x20slot\x20'+ARB_CASE_SLOT+'\x20—\x20resolved\x20from\x20the\x20order\x27s\x20on-chain\x20binding\x20('+e['via']+')\x20to\x20')+(e['caseAddr']+';\x20slot\x20'+ORDER_SLOT+'\x20=\x20the\x20order.\x20The\x20forward\x20was\x20re-driven\x20in-process\x20(the\x20echo\x20probe\x20')+'executed\x20nothing).'};}if(e['status']==='unbound'){const m=e['disputesFiled']>0x0?'\x20'+e['disputesFiled']+'\x20dispute\x20record(s)\x20are\x20filed,\x20but\x20NO\x20case\x20pointer\x20is\x20stamped\x20on\x20the\x20order\x20—\x20the\x20rails\x20read\x20the\x20pointer,\x20not\x20the\x20records.':'';return{'kind':'blocked','note':'FILE\x20DISPUTE\x20FIRST:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20submission\x20'+('slot\x20'+ARB_CASE_SLOT+',\x20but\x20this\x20order\x20has\x20NO\x20arbitration\x20case\x20binding\x20on-chain.'+m+'\x20')+'File\x20it,\x20then\x20re-drive\x20this\x20forward:\x20{\x20operation_type:\x20\x27arbitration\x27,\x20data:\x20{\x20object:\x20\x27<ARBITRATION\x20VENUE>\x27,\x20'+'dispute:\x20{\x20order:\x20\x27<ORDER>\x27,\x20description:\x20\x27<non-empty>\x27,\x20proposition:\x20[\x27<claim>\x27],\x20fee:\x20{\x20balance:\x20<amount>\x20}\x20}\x20}\x20}.\x20'+'Refusing\x20to\x20guess\x20a\x20case\x20address\x20(a\x20zero/placeholder\x20value\x20would\x20only\x20burn\x20the\x20transaction\x20on\x20a\x20failed\x20guard).'};}return{'kind':'soft','note':'ARBITRATION\x20SLOT-1\x20NOTE:\x20the\x20\x22'+String(a['forwardName'])+'\x22\x20rail\x20consumes\x20the\x20Arb\x20CASE\x20address\x20in\x20submission\x20'+('slot\x20'+ARB_CASE_SLOT+';\x20the\x20order\x27s\x20binding\x20could\x20not\x20be\x20read\x20right\x20now\x20—\x20supply\x20the\x20case\x20address\x20explicitly\x20')+('(slot\x20'+ARB_CASE_SLOT+')\x20in\x20the\x20submission\x20envelope\x20below.\x20Never\x20use\x20a\x20placeholder\x20address.')};}export const CONCLUDE_THEN_DRIVE_NOTE='CONCLUDE-THEN-DRIVE\x20(K3\x20D6):\x20the\x20machine\x27s\x20arbitration\x20rails\x20read\x20the\x20ORDER\x27s\x20case\x20pointer,\x20which\x20the\x20case\x20'+'conclusion\x20stamps.\x20Conclude\x20the\x20Arb\x20case\x20FIRST\x20—\x20a\x20paid\x20award\x20via\x20arb_claim_compensation,\x20a\x20zero-award\x20'+'dismissal\x20via\x20arb_case_conclude\x20—\x20and\x20ONLY\x20THEN\x20drive\x20the\x20machine\x20arbitration\x20rail\x20(ArbRefund\x20/\x20'+'ResumeAfterDismissal\x20family).\x20Driving\x20the\x20rail\x20against\x20an\x20unconcluded\x20case\x20reads\x20stale\x20state\x20and\x20re-parks\x20'+'the\x20order.';export const ARB_CASE_STATUS_NAMES=['Principal_confirming','Arbitrator_confirming','Voting','Arbitrated','Objectionable','Finished','Withdrawn'];export function arbCaseStatusLabel(a){const b=typeof a==='number'?a:Number['isFinite'](Number(a))?Number(a):NaN;if(!Number['isInteger'](b)||b<0x0||b>=ARB_CASE_STATUS_NAMES['length'])return undefined;return ARB_CASE_STATUS_NAMES[b];}export async function buildDisputeReceipt(a){try{const b=await resolveArbCaseBinding(a['orderAddr'],a['network']);if(b['status']!=='bound')return undefined;const c=await arbFaceDeps()['readObjects']([b['caseAddr']],a['network']),d=(c??[])['find'](j=>j?.['type']==='Arb')??c?.[0x0],e=d?.['data']??d,f=e&&Number['isFinite'](Number(e?.['status']))?Number(e['status']):undefined,g=arbCaseStatusLabel(f),h=['arbitrator\x20confirms\x20the\x20materials\x20({operation_type:\x27arbitration\x27,\x20data:{object:\x27<VENUE>\x27,\x20confirm:{arb:\x27<CASE>\x27,\x20voting_deadline:null}}})\x20→\x20Voting','panel\x20votes\x20({...\x20vote:{arb:\x27<CASE>\x27,\x20votes:[<indices>]}})','verdict\x20({...\x20arbitration:{arb:\x27<CASE>\x27,\x20feedback:\x27...\x27,\x20indemnity:<0|amount>}})','conclude\x20the\x20case\x20on\x20the\x20order\x20—\x20paid\x20award\x20→\x20order.arb_claim_compensation,\x20zero-award\x20dismissal\x20→\x20order.arb_case_conclude','ONLY\x20THEN\x20drive\x20the\x20machine\x20arbitration\x20rail\x20(ArbRefund\x20/\x20ResumeAfterDismissal)\x20—\x20conclude-then-drive'],i='DISPUTE\x20FILED\x20—\x20case\x20'+b['caseAddr']+'\x20bound\x20to\x20order\x20'+a['orderRef']+',\x20status\x20'+(''+(f??'?')+(g?'\x20('+g+')':'')+'.\x20NO\x20WITHDRAWAL\x20EXISTS\x20(D2\x20doctrine,\x202026-11-10):\x20')+'this\x20claim\x20CANNOT\x20be\x20withdrawn\x20—\x20not\x20on\x20the\x20machine\x20and\x20not\x20on\x20the\x20venue\x20(the\x20chain\x20has\x20no\x20live-case\x20retract\x20primitive)\x20—\x20'+'and\x20the\x20arbitration\x20fee\x20is\x20NON-REFUNDABLE\x20regardless\x20of\x20outcome;\x20the\x20case\x20must\x20be\x20driven\x20to\x20a\x20ruling.\x20'+'LIFECYCLE\x20(do\x20the\x20steps\x20IN\x20ORDER):\x20'+h['map']((j,k)=>'('+(k+0x1)+')\x20'+j)['join']('\x20→\x20')+'.';return{'case_addr':b['caseAddr'],'order':a['orderRef'],'status':f,'status_name':g,'next_steps':h,'text':i};}catch{return undefined;}}
@@ -1 +1 @@
1
- import{resolveValue}from'./allocator-rail-verifier.js';const Q_AMOUNT='arb.indemnity.amount',Q_PRESENCE='arb.indemnity\x20some',Q_STATUS='arb.status',Q_VENUE='arb.arbitration',Q_ORDER='arb.order',NO_RULING={'ruling':![],'won':![],'dismissed':![],'amountUnresolved':![],'presence':![],'presenceNegated':![],'statusGate':![],'venueBound':![],'venueValues':[],'orderBound':![]};function isZero(a){if(typeof a==='number')return a===0x0;if(typeof a==='bigint')return a===0x0n;if(typeof a==='string'){const b=a['trim']();return b==='0'||b==='0x0'||b==='0n';}return![];}function literalOf(a,b){if(!b||typeof b!=='object')return undefined;if(b['type']==='constant')return b['value'];const c=resolveValue(a,b);return c['known']?c['value']:undefined;}function queryName(a){if(!a||typeof a!=='object')return undefined;return typeof a['query']==='string'?a['query']:undefined;}export function readArbRulingGuard(a,b){const c=Array['isArray'](b)?b:[],d={...NO_RULING},e=(g,h,i,j,k)=>{d['ruling']=!![];switch(g){case Q_STATUS:d['statusGate']=!![];return;case Q_VENUE:d['venueBound']=!![];if(typeof i==='string'&&i['trim']()!=='')d['venueValues']['push'](i['trim']());return;case Q_ORDER:d['orderBound']=!![];return;case Q_PRESENCE:d['presence']=!![];if(i===![]||i===!![]&&h)d['presenceNegated']=!![];return;case Q_AMOUNT:{const l=j==='logic_equal'||j==='logic_as_u256_equal';if(l){if(i===undefined){d['amountUnresolved']=!![];return;}if(isZero(i)){if(h)d['won']=!![];else d['dismissed']=!![];return;}if(!h)d['won']=!![];else d['amountUnresolved']=!![];return;}if(j==='logic_as_u256_greater'){if(k&&!h)d['won']=!![];else d['amountUnresolved']=!![];return;}d['amountUnresolved']=!![];return;}default:return;}},f=(g,h,i)=>{if(g===null||typeof g!=='object')return;if(Array['isArray'](g)){for(const o of g)f(o,h,i);return;}const j=g,l=typeof j['type']==='string'?j['type']:'';l==='logic_not'&&f(j['node'],!h,![]);const m=Array['isArray'](j['nodes'])?j['nodes']:[],n=l==='logic_equal'||l==='logic_as_u256_equal'||l==='logic_as_u256_greater'||l==='logic_as_u256_less';if(n){const p=m[0x0]??j['left'],r=m[0x1]??j['right'],s=queryName(p),u=queryName(r);if(s!==undefined&&/^arb\./['test'](s)){e(s,h,literalOf(c,r),l,!![]);return;}if(u!==undefined&&/^arb\./['test'](u)){e(u,h,literalOf(c,p),l,![]);return;}for(const w of m)f(w,h,!![]);return;}if(!i&&l==='query'&&typeof j['query']==='string'&&/^arb\./['test'](j['query'])){const x=j['query'];d['ruling']=!![];if(x===Q_STATUS)d['statusGate']=!![];else{if(x===Q_VENUE)d['venueBound']=!![];else{if(x===Q_ORDER)d['orderBound']=!![];else{if(x===Q_PRESENCE)d['presence']=!![];else{if(x===Q_AMOUNT)d['amountUnresolved']=!![];}}}}return;}for(const [y,z]of Object['entries'](j)){if(y==='node'&&l==='logic_not')continue;f(z,h,![]);}};return f(a,![],![]),d;}function forwardGuardRef(a){const b=a?.['guard'],c=typeof b==='string'&&b['trim']()!==''?b:b!==null&&typeof b==='object'?b['guard']??b['$ref']:undefined;return typeof c==='string'&&c['trim']()!==''?c['trim']():undefined;}export function projectMachineEdges(a){const b=[];if(!Array['isArray'](a))return b;for(const c of a){const d=c,e=typeof d?.['name']==='string'?d['name']:'';if(!e)continue;const g=Array['isArray'](d?.['pairs'])?d['pairs']:Array['isArray'](d?.['value'])?d['value']:[];for(const h of g){const i=h,j=typeof i?.['prev_node']==='string'?i['prev_node']:'',k=Array['isArray'](i?.['forwards'])?i['forwards']:[];for(const l of k){const m=l,n=typeof m?.['name']==='string'&&m['name']!==''?m['name']:j+'_to_'+e,o=forwardGuardRef(m),q=m?.['permissionIndex']??m?.['permission_index'],r=m?.['namedOperator']??m?.['named_operator'],s=typeof q==='number'&&Number['isFinite'](q)||typeof q==='string'&&q['trim']()!==''||typeof r==='string'&&r['trim']()!=='';b['push']({'prev':j,'next':e,'forward':n,'guardRef':o?.['toLowerCase'](),'unguarded':o===undefined,'openOperator':!s});}}}return b;}function readingOf(a,b){return a['guardRef']===undefined?undefined:b['get'](a['guardRef']);}export function verifyArbitrationRulingRails(a){const b=[],{edges:c,readings:d}=a,f=[];for(const i of c){const j=readingOf(i,d);if(j===undefined||!j['ruling'])continue;f['push']({'edge':i,'r':j});j['presence']&&!j['won']&&!j['dismissed']&&!j['amountUnresolved']&&b['push']({'code':'ARB_RULING_PRESENCE_ONLY','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20reads\x20arb.indemnity\x20'+'PRESENCE\x20but\x20never\x20compares\x20arb.indemnity.amount.\x20Presence\x20is\x20not\x20direction:\x20a\x20merchant-favor\x20'+'ruling\x20that\x20awarded\x20the\x20buyer\x20NOTHING\x20still\x20sets\x20Some(0),\x20so\x20this\x20edge\x20opens\x20a\x20buyer-ward\x20'+'transition\x20on\x20a\x20ruling\x20the\x20buyer\x20LOST\x20(rex-mn-261021\x20T5,\x20mainnet:\x20a\x20defeated\x20buyer\x20pulled\x20the\x20'+'refund\x20and\x20the\x20ruling\x20was\x20unenforceable).\x20Guards\x20freeze\x20at\x20publish\x20(IMMUT-001).\x20Add\x20the\x20amount\x20'+'leg\x20exactly\x20as\x20tpl_forward_arb_ruling_won\x20ships\x20it\x20—\x20logic_not\x20over\x20'+'logic_as_u256_equal[arb.indemnity.amount,\x200],\x20optionally\x20plus\x20the\x20F-54\x20floor\x20leg\x20'+'logic_as_u256_greater[arb.indemnity.amount,\x20refund\x20×\x20arb_indemnity_floor_bps\x20/\x2010000].\x20The\x20'+'amount\x20query\x20errors\x20on\x20a\x20None\x20field,\x20so\x20both\x20polarities\x20fail\x20closed\x20against\x20never-ruled\x20and\x20'+'reset\x20states.'});j['statusGate']&&b['push']({'code':'ARB_RULING_STATUS_GATE','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20gates\x20on\x20arb.status.\x20'+'The\x20status\x20vocabulary\x20(0/1\x20confirming,\x202\x20voting,\x203\x20arbitrated,\x204\x20objectionable,\x205\x20finished,\x20'+'6\x20withdrawn)\x20carries\x20NO\x20direction\x20—\x20a\x20merchant-favor\x20and\x20a\x20buyer-favor\x20final\x20are\x20'+'status-identical\x20—\x20and\x20it\x20is\x20TRANSIENT:\x20a\x20legitimate\x20arb_withdraw\x20by\x20the\x20arbitrator\x20advances\x20'+'5\x20→\x206\x20AFTER\x20the\x20award\x20settles,\x20so\x20the\x20gate\x20flips\x20false\x20under\x20a\x20settled\x20order\x20and\x20never\x20'+'returns\x20(booking\x20o10:\x201.5\x20WOW\x20locked\x20with\x20no\x20on-chain\x20exit).\x20Guard\x20AND\x20Machine\x20are\x20immutable\x20'+'after\x20publish\x20(IMMUT-001),\x20so\x20this\x20is\x20unrepairable.\x20Gate\x20on\x20the\x20indemnity\x20legs\x20instead\x20—\x20the\x20'+'only\x20direction-bearing,\x20transient-proof\x20signal:\x20buyer-won\x20=\x20arb.indemnity.amount\x20!=\x200\x20'+'(tpl_forward_arb_ruling_won),\x20merchant-favor\x20=\x20arb.indemnity.amount\x20==\x200\x20'+'(tpl_forward_arb_ruling_dismissed).\x20arb_withdraw\x20sweeps\x20only\x20the\x20fee\x20balance\x20and\x20never\x20'+'touches\x20the\x20indemnity,\x20so\x20both\x20survive\x20a\x20fee\x20withdrawal;\x20a\x20reset\x20clears\x20it,\x20which\x20correctly\x20'+'re-gates\x20the\x20edge.'});if(!j['venueBound']){const k=i['openOperator']?'\x20WORSE\x20HERE:\x20the\x20forward\x20also\x20declares\x20NEITHER\x20a\x20permission\x20index\x20NOR\x20a\x20named\x20operator,\x20so\x20'+'ANY\x20address\x20can\x20drive\x20it\x20—\x20an\x20open\x20operator\x20plus\x20a\x20missing\x20venue\x20leg\x20is\x20the\x20unilateral\x20'+'force-refund\x20(tbs7\x20F-02:\x20forge\x20a\x20self-arbitrated\x20case,\x20rule\x20your\x20own\x20indemnity,\x20drive\x20the\x20edge).':'';b['push']({'code':'ARB_RULING_VENUE_UNBOUND','level':'warning','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20carries\x20NO\x20venue\x20'+'binding\x20leg\x20(arb.arbitration\x20==\x20the\x20Arbitration\x20address\x20the\x20Service\x20publishes\x20with).\x20'+'arb.order\x20is\x20a\x20CASE-CREATOR-FILLED\x20field\x20and\x20nothing\x20on\x20chain\x20ties\x20an\x20Arb\x20case\x20to\x20the\x20'+'store\x27s\x20designated\x20venue,\x20so\x20anyone\x20can\x20mint\x20an\x20Arbitration\x20against\x20this\x20order\x20with\x20'+'themselves\x20as\x20sole\x20arbiter,\x20rule\x20a\x20self-serving\x20indemnity,\x20and\x20satisfy\x20every\x20other\x20leg\x20'+('here.'+k+'\x20Add\x20the\x20venue\x20leg\x20(identifier\x20filled\x20with\x20the\x20SAME\x20Arbitration\x20address\x20the\x20')+'Service\x20is\x20published\x20with)\x20and\x20route\x20cases\x20from\x20any\x20other\x20venue\x20to\x20keeper\x20review\x20instead\x20of\x20'+'the\x20machine\x20edge;\x20pair\x20it\x20with\x20KEEPER\x20execution\x20—\x20merchant-only\x20execution\x20means\x20an\x20adverse\x20'+'ruling\x20simply\x20never\x20advances\x20(bs29:\x20judgments\x20without\x20enforcement).'});}}if(f['length']===0x0)return b;const g=f['some'](l=>l['r']['won']),h=f['some'](l=>l['r']['dismissed']);if(g!==h){const l=g?'dismissed':'won',m=g?'won':'dismissed',n=[...new Set(f['map'](q=>q['edge']['prev'])['filter'](q=>q!==''))],o=n['map'](q=>{const s=c['filter'](u=>u['prev']===q&&readingOf(u,d)?.['ruling']!==!![]);if(s['length']===0x0)return'\x20\x20-\x20\x27'+q+'\x27:\x20NO\x20non-ruling\x20exit';const t=s['map'](u=>u['forward']+(u['unguarded']?'\x20(UNGUARDED)':''));return'\x20\x20-\x20\x27'+q+'\x27:\x20'+t['join'](',\x20');}),p=g?'A\x20MERCHANT-FAVOR\x20ruling\x20(indemnity\x20Some(0))\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20winner\x20cannot\x20close\x20the\x20'+'claim\x20or\x20resume\x20settlement\x20through\x20the\x20ruling,\x20so\x20the\x20case\x20concludes\x20and\x20the\x20order\x20sits\x20where\x20it\x20'+'was\x20(bs29\x20—\x20judgments\x20without\x20enforcement).\x20The\x20buyer\x20also\x20pays\x20nothing\x20for\x20losing,\x20which\x20removes\x20'+'the\x20cost\x20of\x20filing\x20a\x20speculative\x20dispute.':'A\x20BUYER-FAVOR\x20ruling\x20(indemnity\x20>\x200)\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20buyer\x20wins\x20the\x20case\x20and\x20still\x20'+'cannot\x20reach\x20a\x20refund,\x20because\x20the\x20only\x20ruling\x20exits\x20open\x20on\x20amount\x20==\x200.\x20The\x20award\x20then\x20depends\x20'+'entirely\x20on\x20claiming\x20it\x20out\x20of\x20the\x20service\x27s\x20compensation\x20pool\x20—\x20which\x20aborts\x20code\x2027\x20'+'(E_COMPENSATION_NOT_MATCH)\x20when\x20the\x20pool\x20does\x20not\x20cover\x20the\x20indemnity.';b['push']({'code':'ARB_RULING_ONE_SIDED','level':'info','detail':'this\x20machine\x20carries\x20'+m['toUpperCase']()+'\x20ruling\x20exit(s)\x20only\x20—\x20no\x20'+l['toUpperCase']()+'\x20'+'polarity\x20anywhere\x20in\x20the\x20graph,\x20so\x20one\x20of\x20the\x20four\x20arbitration\x20outcomes\x20cannot\x20move\x20the\x20order.\x0a'+(p+'\x0a')+'Non-ruling\x20exits\x20from\x20the\x20same\x20waypoint(s)\x20—\x20the\x20paths\x20an\x20unruled\x20or\x20opposite-polarity\x20case\x20must\x20'+('travel\x20instead:\x0a'+o['join']('\x0a')+'\x0a')+('NOT\x20a\x20violation\x20by\x20itself:\x20'+(l==='dismissed'?'most\x20builtin\x20arbitration\x20archetypes\x20ship\x20won-only\x20—\x20the\x20catalog\x20norm,\x20licensing\x20ones\x20by\x20design\x20(the\x20dismissed\x20twin\x20omits\x20\x27licensing\x27\x20from\x20applicable_industries)':'no\x20builtin\x20archetype\x20ships\x20dismissed-only,\x20so\x20verify\x20this\x20is\x20deliberate')+'.\x20')+('It\x20IS\x20a\x20disclosure\x20the\x20operator\x20must\x20accept\x20consciously:\x20if\x20a\x20'+l+'\x20outcome\x20is\x20reachable\x20in\x20')+('this\x20business,\x20add\x20the\x20twin\x20exit\x20—\x20'+(l==='dismissed'?'tpl_forward_arb_ruling_dismissed\x20(arb.indemnity.amount\x20==\x200,\x20positive\x20equality:\x20the\x20single\x20decisive\x20merchant-favor\x20form;\x20NEVER\x20arb.indemnity\x20some\x20==\x20false,\x20which\x20conflates\x20never-ruled,\x20reset\x20and\x20ruled-zero)':'tpl_forward_arb_ruling_won\x20(arb.indemnity.amount\x20!=\x200\x20plus\x20the\x20F-54\x20floor)')+'\x20—\x20declared\x20on\x20the\x20')+'TARGET\x20node\x20with\x20prev\x20set\x20to\x20the\x20waypoint,\x20one\x20guard\x20instance\x20per\x20exit\x20edge.'});}{const q=[...new Set(f['map'](s=>s['edge']['prev'])['filter'](s=>s!==''))];for(const s of q){const t=c['filter'](x=>x['prev']===s);if(t['length']===0x0)continue;const u=t['filter'](x=>readingOf(x,d)?.['ruling']!==!![]);if(u['length']>0x0)continue;const v=t['map'](x=>x['guardRef']??x['forward']);b['push']({'code':'ARB_RULING_ZERO_EXIT','level':'warning','node':s,'detail':'dispute\x20waypoint\x20\x27'+s+'\x27\x20has\x20ONLY\x20ruling-keyed\x20exits\x20('+v['join'](',\x20')+')\x20—\x20a\x20case\x20that\x20NEVER\x20'+'rules\x20fires\x20NOTHING.\x20Both\x20ruling\x20roots\x20fail\x20closed\x20on\x20the\x20None\x20indemnity\x20field,\x20so\x20a\x20'+'withdrawn\x20case\x20(arb_withdraw),\x20a\x20reset\x20(the\x20objection\x20cycle\x20clears\x20the\x20indemnity)\x20or\x20an\x20'+('abandoned\x20one\x20leaves\x20the\x20order\x20resting\x20at\x20\x27'+s+'\x27\x20permanently,\x20with\x20no\x20edge\x20to\x20drive\x20and\x20no\x20')+'later\x20repair\x20(Machine\x20+\x20Allocator\x20freeze\x20at\x20publish,\x20IMMUT-001/IMMUT-002).\x0a'+'TWO\x20READINGS,\x20and\x20this\x20gate\x20cannot\x20decide\x20between\x20them\x20at\x20publish\x20time\x20—\x20the\x20chain\x20stores\x20no\x20'+('semantic\x20role\x20and\x20the\x20escrow\x20state\x20behind\x20\x27'+s+'\x27\x20is\x20not\x20statically\x20readable:\x0a')+('\x20\x20•\x20SANCTIONED\x20(ignore):\x20\x27'+s+'\x27\x20is\x20a\x20fund\x20endpoint\x20the\x20escrow\x20already\x20drained\x20at,\x20and\x20these\x20')+'ruling\x20edges\x20are\x20a\x20POST-SETTLEMENT\x20re-router.\x20This\x20is\x20the\x20shipped\x20licensing\x20shape\x20(\x27granted\x27)\x20'+'and\x20the\x20reason\x20the\x20scan-face\x20twin\x20R-ARB-ZERO-EXIT\x20exempts\x20declared\x20final/cancelled\x20nodes.\x0a'+('\x20\x20•\x20STRANDING\x20(fix\x20before\x20publish):\x20escrow\x20is\x20still\x20held\x20at\x20\x27'+s+'\x27.\x20Then\x20add\x20the\x20buyer\x27s\x20')+'single-hop\x20void\x20escape\x20—\x20WithdrawClaim\x20(operator\x20order_payer,\x20'+'pattern.identity_check_order_holder:\x20signer\x20==\x20order\x20owner)\x20into\x20a\x20cancelled\x20terminal.\x20No\x20'+'ruling\x20means\x20arb.claimed_by\x20is\x20none,\x20so\x20the\x20order\x20is\x20untouched\x20and\x20the\x20node-gated\x20refund\x20rail\x20'+'stays\x20open\x20for\x20full\x20escrow\x20back\x20(decision\x2011\x20KEEP\x20face:\x20never\x20add\x20a\x20claimed_by\x20leg\x20to\x20the\x20'+'fund\x20rail\x20itself\x20—\x20R-FUND-RAIL-CLAIMED-BY).\x20A\x20ForceSettleExpired\x20clock\x20edge\x20substitutes\x20ONLY\x20'+'if\x20it\x20routes\x20buyer-ward.\x0a'+('Decide\x20by\x20reading\x20this\x20store\x27s\x20allocator\x20rails:\x20if\x20no\x20rail\x20can\x20drain\x20at\x20\x27'+s+'\x27\x20or\x20before\x20it,\x20')+'this\x20is\x20the\x20stranding\x20reading.'});}}return b;}
1
+ import{resolveValue}from'./allocator-rail-verifier.js';const Q_AMOUNT='arb.indemnity.amount',Q_PRESENCE='arb.indemnity\x20some',Q_STATUS='arb.status',Q_VENUE='arb.arbitration',Q_ORDER='arb.order',NO_RULING={'ruling':![],'won':![],'dismissed':![],'amountUnresolved':![],'presence':![],'presenceNegated':![],'statusGate':![],'venueBound':![],'venueValues':[],'orderBound':![]};function isZero(a){if(typeof a==='number')return a===0x0;if(typeof a==='bigint')return a===0x0n;if(typeof a==='string'){const b=a['trim']();return b==='0'||b==='0x0'||b==='0n';}return![];}function literalOf(a,b){if(!b||typeof b!=='object')return undefined;if(b['type']==='constant')return b['value'];const c=resolveValue(a,b);return c['known']?c['value']:undefined;}function queryName(a){if(!a||typeof a!=='object')return undefined;return typeof a['query']==='string'?a['query']:undefined;}export function readArbRulingGuard(a,b){const c=Array['isArray'](b)?b:[],d={...NO_RULING},e=(g,h,i,j,k)=>{d['ruling']=!![];switch(g){case Q_STATUS:d['statusGate']=!![];return;case Q_VENUE:d['venueBound']=!![];if(typeof i==='string'&&i['trim']()!=='')d['venueValues']['push'](i['trim']());return;case Q_ORDER:d['orderBound']=!![];return;case Q_PRESENCE:d['presence']=!![];if(i===![]||i===!![]&&h)d['presenceNegated']=!![];return;case Q_AMOUNT:{const l=j==='logic_equal'||j==='logic_as_u256_equal';if(l){if(i===undefined){d['amountUnresolved']=!![];return;}if(isZero(i)){if(h)d['won']=!![];else d['dismissed']=!![];return;}if(!h)d['won']=!![];else d['amountUnresolved']=!![];return;}if(j==='logic_as_u256_greater'){if(k&&!h)d['won']=!![];else d['amountUnresolved']=!![];return;}d['amountUnresolved']=!![];return;}default:return;}},f=(g,h,i)=>{if(g===null||typeof g!=='object')return;if(Array['isArray'](g)){for(const o of g)f(o,h,i);return;}const j=g,l=typeof j['type']==='string'?j['type']:'';l==='logic_not'&&f(j['node'],!h,![]);const m=Array['isArray'](j['nodes'])?j['nodes']:[],n=l==='logic_equal'||l==='logic_as_u256_equal'||l==='logic_as_u256_greater'||l==='logic_as_u256_less';if(n){const p=m[0x0]??j['left'],r=m[0x1]??j['right'],s=queryName(p),u=queryName(r);if(s!==undefined&&/^arb\./['test'](s)){e(s,h,literalOf(c,r),l,!![]);return;}if(u!==undefined&&/^arb\./['test'](u)){e(u,h,literalOf(c,p),l,![]);return;}for(const w of m)f(w,h,!![]);return;}if(!i&&l==='query'&&typeof j['query']==='string'&&/^arb\./['test'](j['query'])){const x=j['query'];d['ruling']=!![];if(x===Q_STATUS)d['statusGate']=!![];else{if(x===Q_VENUE)d['venueBound']=!![];else{if(x===Q_ORDER)d['orderBound']=!![];else{if(x===Q_PRESENCE)d['presence']=!![];else{if(x===Q_AMOUNT)d['amountUnresolved']=!![];}}}}return;}for(const [y,z]of Object['entries'](j)){if(y==='node'&&l==='logic_not')continue;f(z,h,![]);}};return f(a,![],![]),d;}function forwardGuardRef(a){const b=a?.['guard'],c=typeof b==='string'&&b['trim']()!==''?b:b!==null&&typeof b==='object'?b['guard']??b['$ref']:undefined;return typeof c==='string'&&c['trim']()!==''?c['trim']():undefined;}export function projectMachineEdges(a){const b=[];if(!Array['isArray'](a))return b;for(const c of a){const d=c,e=typeof d?.['name']==='string'?d['name']:'';if(!e)continue;const g=Array['isArray'](d?.['pairs'])?d['pairs']:Array['isArray'](d?.['value'])?d['value']:[];for(const h of g){const i=h,j=typeof i?.['prev_node']==='string'?i['prev_node']:'',k=Array['isArray'](i?.['forwards'])?i['forwards']:[];for(const l of k){const m=l,n=typeof m?.['name']==='string'&&m['name']!==''?m['name']:j+'_to_'+e,o=forwardGuardRef(m),q=m?.['permissionIndex']??m?.['permission_index'],r=m?.['namedOperator']??m?.['named_operator'],s=typeof q==='number'&&Number['isFinite'](q)||typeof q==='string'&&q['trim']()!==''||typeof r==='string'&&r['trim']()!=='';b['push']({'prev':j,'next':e,'forward':n,'guardRef':o?.['toLowerCase'](),'unguarded':o===undefined,'openOperator':!s,...typeof q==='number'||typeof q==='string'?{'permissionIndex':q}:{}});}}}return b;}function readingOf(a,b){return a['guardRef']===undefined?undefined:b['get'](a['guardRef']);}export function verifyArbitrationRulingRails(a){const b=[],{edges:c,readings:d}=a,f=[];for(const i of c){const j=readingOf(i,d);if(j===undefined||!j['ruling'])continue;f['push']({'edge':i,'r':j});j['presence']&&!j['won']&&!j['dismissed']&&!j['amountUnresolved']&&b['push']({'code':'ARB_RULING_PRESENCE_ONLY','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20reads\x20arb.indemnity\x20'+'PRESENCE\x20but\x20never\x20compares\x20arb.indemnity.amount.\x20Presence\x20is\x20not\x20direction:\x20a\x20merchant-favor\x20'+'ruling\x20that\x20awarded\x20the\x20buyer\x20NOTHING\x20still\x20sets\x20Some(0),\x20so\x20this\x20edge\x20opens\x20a\x20buyer-ward\x20'+'transition\x20on\x20a\x20ruling\x20the\x20buyer\x20LOST\x20(rex-mn-261021\x20T5,\x20mainnet:\x20a\x20defeated\x20buyer\x20pulled\x20the\x20'+'refund\x20and\x20the\x20ruling\x20was\x20unenforceable).\x20Guards\x20freeze\x20at\x20publish\x20(IMMUT-001).\x20Add\x20the\x20amount\x20'+'leg\x20exactly\x20as\x20tpl_forward_arb_ruling_won\x20ships\x20it\x20—\x20logic_not\x20over\x20'+'logic_as_u256_equal[arb.indemnity.amount,\x200],\x20optionally\x20plus\x20the\x20F-54\x20floor\x20leg\x20'+'logic_as_u256_greater[arb.indemnity.amount,\x20refund\x20×\x20arb_indemnity_floor_bps\x20/\x2010000].\x20The\x20'+'amount\x20query\x20errors\x20on\x20a\x20None\x20field,\x20so\x20both\x20polarities\x20fail\x20closed\x20against\x20never-ruled\x20and\x20'+'reset\x20states.'});j['statusGate']&&b['push']({'code':'ARB_RULING_STATUS_GATE','level':'critical','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20gates\x20on\x20arb.status.\x20'+'The\x20status\x20vocabulary\x20(0/1\x20confirming,\x202\x20voting,\x203\x20arbitrated,\x204\x20objectionable,\x205\x20finished,\x20'+'6\x20withdrawn)\x20carries\x20NO\x20direction\x20—\x20a\x20merchant-favor\x20and\x20a\x20buyer-favor\x20final\x20are\x20'+'status-identical\x20—\x20and\x20it\x20is\x20TRANSIENT:\x20a\x20legitimate\x20arb_withdraw\x20by\x20the\x20arbitrator\x20advances\x20'+'5\x20→\x206\x20AFTER\x20the\x20award\x20settles,\x20so\x20the\x20gate\x20flips\x20false\x20under\x20a\x20settled\x20order\x20and\x20never\x20'+'returns\x20(booking\x20o10:\x201.5\x20WOW\x20locked\x20with\x20no\x20on-chain\x20exit).\x20Guard\x20AND\x20Machine\x20are\x20immutable\x20'+'after\x20publish\x20(IMMUT-001),\x20so\x20this\x20is\x20unrepairable.\x20Gate\x20on\x20the\x20indemnity\x20legs\x20instead\x20—\x20the\x20'+'only\x20direction-bearing,\x20transient-proof\x20signal:\x20buyer-won\x20=\x20arb.indemnity.amount\x20!=\x200\x20'+'(tpl_forward_arb_ruling_won),\x20merchant-favor\x20=\x20arb.indemnity.amount\x20==\x200\x20'+'(tpl_forward_arb_ruling_dismissed).\x20arb_withdraw\x20sweeps\x20only\x20the\x20fee\x20balance\x20and\x20never\x20'+'touches\x20the\x20indemnity,\x20so\x20both\x20survive\x20a\x20fee\x20withdrawal;\x20a\x20reset\x20clears\x20it,\x20which\x20correctly\x20'+'re-gates\x20the\x20edge.'});if(!j['venueBound']){const k=i['openOperator']?'\x20WORSE\x20HERE:\x20the\x20forward\x20also\x20declares\x20NEITHER\x20a\x20permission\x20index\x20NOR\x20a\x20named\x20operator,\x20so\x20'+'ANY\x20address\x20can\x20drive\x20it\x20—\x20an\x20open\x20operator\x20plus\x20a\x20missing\x20venue\x20leg\x20is\x20the\x20unilateral\x20'+'force-refund\x20(tbs7\x20F-02:\x20forge\x20a\x20self-arbitrated\x20case,\x20rule\x20your\x20own\x20indemnity,\x20drive\x20the\x20edge).':'';b['push']({'code':'ARB_RULING_VENUE_UNBOUND','level':'warning','guardRef':i['guardRef'],'detail':'ruling\x20exit\x20\x27'+i['forward']+'\x27\x20('+i['prev']+'\x20→\x20'+i['next']+',\x20guard\x20'+i['guardRef']+')\x20carries\x20NO\x20venue\x20'+'binding\x20leg\x20(arb.arbitration\x20==\x20the\x20Arbitration\x20address\x20the\x20Service\x20publishes\x20with).\x20'+'arb.order\x20is\x20a\x20CASE-CREATOR-FILLED\x20field\x20and\x20nothing\x20on\x20chain\x20ties\x20an\x20Arb\x20case\x20to\x20the\x20'+'store\x27s\x20designated\x20venue,\x20so\x20anyone\x20can\x20mint\x20an\x20Arbitration\x20against\x20this\x20order\x20with\x20'+'themselves\x20as\x20sole\x20arbiter,\x20rule\x20a\x20self-serving\x20indemnity,\x20and\x20satisfy\x20every\x20other\x20leg\x20'+('here.'+k+'\x20Add\x20the\x20venue\x20leg\x20(identifier\x20filled\x20with\x20the\x20SAME\x20Arbitration\x20address\x20the\x20')+'Service\x20is\x20published\x20with)\x20and\x20route\x20cases\x20from\x20any\x20other\x20venue\x20to\x20keeper\x20review\x20instead\x20of\x20'+'the\x20machine\x20edge;\x20pair\x20it\x20with\x20KEEPER\x20execution\x20—\x20merchant-only\x20execution\x20means\x20an\x20adverse\x20'+'ruling\x20simply\x20never\x20advances\x20(bs29:\x20judgments\x20without\x20enforcement).'});}}if(f['length']===0x0)return b;const g=f['some'](l=>l['r']['won']),h=f['some'](l=>l['r']['dismissed']);if(g!==h){const l=g?'dismissed':'won',m=g?'won':'dismissed',n=[...new Set(f['map'](q=>q['edge']['prev'])['filter'](q=>q!==''))],o=n['map'](q=>{const s=c['filter'](u=>u['prev']===q&&readingOf(u,d)?.['ruling']!==!![]);if(s['length']===0x0)return'\x20\x20-\x20\x27'+q+'\x27:\x20NO\x20non-ruling\x20exit';const t=s['map'](u=>u['forward']+(u['unguarded']?'\x20(UNGUARDED)':''));return'\x20\x20-\x20\x27'+q+'\x27:\x20'+t['join'](',\x20');}),p=g?'A\x20MERCHANT-FAVOR\x20ruling\x20(indemnity\x20Some(0))\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20winner\x20cannot\x20close\x20the\x20'+'claim\x20or\x20resume\x20settlement\x20through\x20the\x20ruling,\x20so\x20the\x20case\x20concludes\x20and\x20the\x20order\x20sits\x20where\x20it\x20'+'was\x20(bs29\x20—\x20judgments\x20without\x20enforcement).\x20The\x20buyer\x20also\x20pays\x20nothing\x20for\x20losing,\x20which\x20removes\x20'+'the\x20cost\x20of\x20filing\x20a\x20speculative\x20dispute.':'A\x20BUYER-FAVOR\x20ruling\x20(indemnity\x20>\x200)\x20has\x20no\x20machine\x20edge\x20here:\x20the\x20buyer\x20wins\x20the\x20case\x20and\x20still\x20'+'cannot\x20reach\x20a\x20refund,\x20because\x20the\x20only\x20ruling\x20exits\x20open\x20on\x20amount\x20==\x200.\x20The\x20award\x20then\x20depends\x20'+'entirely\x20on\x20claiming\x20it\x20out\x20of\x20the\x20service\x27s\x20compensation\x20pool\x20—\x20which\x20aborts\x20code\x2027\x20'+'(E_COMPENSATION_NOT_MATCH)\x20when\x20the\x20pool\x20does\x20not\x20cover\x20the\x20indemnity.';b['push']({'code':'ARB_RULING_ONE_SIDED','level':'info','detail':'this\x20machine\x20carries\x20'+m['toUpperCase']()+'\x20ruling\x20exit(s)\x20only\x20—\x20no\x20'+l['toUpperCase']()+'\x20'+'polarity\x20anywhere\x20in\x20the\x20graph,\x20so\x20one\x20of\x20the\x20four\x20arbitration\x20outcomes\x20cannot\x20move\x20the\x20order.\x0a'+(p+'\x0a')+'Non-ruling\x20exits\x20from\x20the\x20same\x20waypoint(s)\x20—\x20the\x20paths\x20an\x20unruled\x20or\x20opposite-polarity\x20case\x20must\x20'+('travel\x20instead:\x0a'+o['join']('\x0a')+'\x0a')+('NOT\x20a\x20violation\x20by\x20itself:\x20'+(l==='dismissed'?'most\x20builtin\x20arbitration\x20archetypes\x20ship\x20won-only\x20—\x20the\x20catalog\x20norm,\x20licensing\x20ones\x20by\x20design\x20(the\x20dismissed\x20twin\x20omits\x20\x27licensing\x27\x20from\x20applicable_industries)':'no\x20builtin\x20archetype\x20ships\x20dismissed-only,\x20so\x20verify\x20this\x20is\x20deliberate')+'.\x20')+('It\x20IS\x20a\x20disclosure\x20the\x20operator\x20must\x20accept\x20consciously:\x20if\x20a\x20'+l+'\x20outcome\x20is\x20reachable\x20in\x20')+('this\x20business,\x20add\x20the\x20twin\x20exit\x20—\x20'+(l==='dismissed'?'tpl_forward_arb_ruling_dismissed\x20(arb.indemnity.amount\x20==\x200,\x20positive\x20equality:\x20the\x20single\x20decisive\x20merchant-favor\x20form;\x20NEVER\x20arb.indemnity\x20some\x20==\x20false,\x20which\x20conflates\x20never-ruled,\x20reset\x20and\x20ruled-zero)':'tpl_forward_arb_ruling_won\x20(arb.indemnity.amount\x20!=\x200\x20plus\x20the\x20F-54\x20floor)')+'\x20—\x20declared\x20on\x20the\x20')+'TARGET\x20node\x20with\x20prev\x20set\x20to\x20the\x20waypoint,\x20one\x20guard\x20instance\x20per\x20exit\x20edge.'});}{const q=[...new Set(f['map'](s=>s['edge']['prev'])['filter'](s=>s!==''))];for(const s of q){const t=c['filter'](x=>x['prev']===s);if(t['length']===0x0)continue;const u=t['filter'](x=>readingOf(x,d)?.['ruling']!==!![]);if(u['length']>0x0)continue;const v=t['map'](x=>x['guardRef']??x['forward']);b['push']({'code':'ARB_RULING_ZERO_EXIT','level':'warning','node':s,'detail':'dispute\x20waypoint\x20\x27'+s+'\x27\x20has\x20ONLY\x20ruling-keyed\x20exits\x20('+v['join'](',\x20')+')\x20—\x20a\x20case\x20that\x20NEVER\x20'+'rules\x20fires\x20NOTHING.\x20Both\x20ruling\x20roots\x20fail\x20closed\x20on\x20the\x20None\x20indemnity\x20field,\x20so\x20a\x20'+'case\x20that\x20never\x20reaches\x20a\x20stamp\x20(reset\x20objection\x20cycle,\x20abandoned\x20venue\x20case)\x20leaves\x20the\x20order\x20'+('resting\x20at\x20\x27'+s+'\x27\x20permanently,\x20with\x20no\x20edge\x20to\x20drive\x20and\x20no\x20')+'later\x20repair\x20(Machine\x20+\x20Allocator\x20freeze\x20at\x20publish,\x20IMMUT-001/IMMUT-002).\x20'+'D2\x20no-withdraw\x20doctrine\x20(2026-11-10):\x20a\x20filed\x20claim\x20CANNOT\x20be\x20withdrawn\x20—\x20no\x20WithdrawClaim\x20/\x20'+'void\x20escape\x20exists\x20to\x20add\x20here,\x20and\x20adding\x20one\x20is\x20banned\x20by\x20the\x20publish\x20gate\x20'+'(DISPUTE-WITHDRAW-BANNED,\x20critical).\x0a'+'TWO\x20READINGS,\x20and\x20this\x20gate\x20cannot\x20decide\x20between\x20them\x20at\x20publish\x20time\x20—\x20the\x20chain\x20stores\x20no\x20'+('semantic\x20role\x20and\x20the\x20escrow\x20state\x20behind\x20\x27'+s+'\x27\x20is\x20not\x20statically\x20readable:\x0a')+('\x20\x20•\x20SANCTIONED\x20(ignore):\x20\x27'+s+'\x27\x20is\x20a\x20fund\x20endpoint\x20the\x20escrow\x20already\x20drained\x20at,\x20and\x20these\x20')+'ruling\x20edges\x20are\x20a\x20POST-SETTLEMENT\x20re-router.\x20This\x20is\x20the\x20shipped\x20licensing\x20shape\x20(\x27granted\x27)\x20'+'and\x20the\x20reason\x20the\x20scan-face\x20twin\x20R-ARB-ZERO-EXIT\x20exempts\x20declared\x20final/cancelled\x20nodes.\x0a'+('\x20\x20•\x20STRANDING\x20(fix\x20before\x20publish):\x20escrow\x20is\x20still\x20held\x20at\x20\x27'+s+'\x27.\x20Then\x20route\x20the\x20dispute\x20to\x20')+'a\x20ruling\x20—\x20drive\x20the\x20venue\x20case\x20to\x20a\x20stamped\x20verdict\x20(conclude/compensate)\x20—\x20and,\x20if\x20a\x20'+'never-ruling\x20case\x20must\x20still\x20exit,\x20add\x20a\x20ForceSettleExpired\x20clock\x20edge\x20that\x20routes\x20BUYER-ward.\x20'+'Never\x20add\x20a\x20claimed_by\x20leg\x20to\x20the\x20fund\x20rail\x20itself\x20(decision\x2011\x20KEEP\x20face\x20—\x20'+'R-FUND-RAIL-CLAIMED-BY),\x20and\x20never\x20add\x20a\x20withdrawal\x20edge\x20(banned).\x0a'+('Decide\x20by\x20reading\x20this\x20store\x27s\x20allocator\x20rails:\x20if\x20no\x20rail\x20can\x20drain\x20at\x20\x27'+s+'\x27\x20or\x20before\x20it,\x20')+'this\x20is\x20the\x20stranding\x20reading.'});}}return b;}