@wowok/agent-mcp 3.3.6 → 3.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/chain-semantics/eval-order.js +1 -1
  2. package/dist/chain-semantics/field-capability.js +1 -1
  3. package/dist/chain-semantics/fund-flow.js +1 -1
  4. package/dist/chain-semantics/guard-verbs.js +1 -1
  5. package/dist/chain-semantics/object-graph.js +1 -1
  6. package/dist/communication/message-cursors.d.ts +35 -0
  7. package/dist/communication/message-cursors.js +1 -0
  8. package/dist/communication/wts-attestation.d.ts +5 -0
  9. package/dist/communication/wts-attestation.js +1 -1
  10. package/dist/composition/audit.js +1 -1
  11. package/dist/composition/compile.d.ts +3 -2
  12. package/dist/composition/compile.js +1 -1
  13. package/dist/composition/inflight.d.ts +7 -0
  14. package/dist/composition/inflight.js +1 -1
  15. package/dist/composition/materialize.d.ts +4 -1
  16. package/dist/composition/materialize.js +1 -1
  17. package/dist/config/index.d.ts +1 -0
  18. package/dist/config/index.js +1 -1
  19. package/dist/config/store-policy.d.ts +14 -0
  20. package/dist/config/store-policy.js +1 -0
  21. package/dist/config/store-policy.spec.d.ts +1 -0
  22. package/dist/config/store-policy.spec.js +1 -0
  23. package/dist/customer/industry-risks.js +1 -1
  24. package/dist/customer/user-preferences.js +1 -1
  25. package/dist/data/projection/facets.spec.js +1 -1
  26. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  27. package/dist/evaluation/engine.js +1 -1
  28. package/dist/evaluation/match-policy.d.ts +30 -6
  29. package/dist/evaluation/match-policy.js +1 -1
  30. package/dist/evaluation/match-policy.spec.js +1 -1
  31. package/dist/experience/realtime-feedback.js +1 -1
  32. package/dist/extensions/business-modules.d.ts +1 -1
  33. package/dist/extensions/business-modules.js +1 -1
  34. package/dist/extensions/industry-pack.js +1 -1
  35. package/dist/extensions/modes.js +1 -1
  36. package/dist/graph/onchain/analyze.js +1 -1
  37. package/dist/graph/onchain/expand.js +1 -1
  38. package/dist/graph/onchain/exposure.js +1 -1
  39. package/dist/graph/onchain/facts.d.ts +1 -0
  40. package/dist/graph/onchain/facts.js +1 -1
  41. package/dist/graph/onchain/facts.spec.js +1 -1
  42. package/dist/harness/recover.js +1 -1
  43. package/dist/intent/types.d.ts +1 -1
  44. package/dist/intent/types.js +1 -1
  45. package/dist/keeper/detectors.d.ts +3 -0
  46. package/dist/keeper/detectors.js +1 -1
  47. package/dist/keeper/keeper.spec.js +1 -1
  48. package/dist/knowledge/acquisition-flywheel.js +1 -1
  49. package/dist/knowledge/allocation-ledger.d.ts +1 -0
  50. package/dist/knowledge/allocation-ledger.js +1 -1
  51. package/dist/knowledge/allocator-rail-verifier.d.ts +6 -2
  52. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  53. package/dist/knowledge/arbitration-ledger.js +1 -1
  54. package/dist/knowledge/audit-rules.d.ts +37 -0
  55. package/dist/knowledge/audit-rules.js +1 -1
  56. package/dist/knowledge/baselines/rules/plan.json +128 -3
  57. package/dist/knowledge/builtin-templates.d.ts +18 -1
  58. package/dist/knowledge/builtin-templates.js +1 -1
  59. package/dist/knowledge/commission-landing.d.ts +26 -0
  60. package/dist/knowledge/commission-landing.js +1 -0
  61. package/dist/knowledge/discount-threshold.js +1 -1
  62. package/dist/knowledge/event-semantics.js +1 -1
  63. package/dist/knowledge/fund-layer.d.ts +7 -0
  64. package/dist/knowledge/fund-layer.js +1 -1
  65. package/dist/knowledge/getting-started.js +1 -1
  66. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  67. package/dist/knowledge/guard-design-patterns.js +1 -1
  68. package/dist/knowledge/guard-puzzle.js +1 -1
  69. package/dist/knowledge/guard-render.d.ts +7 -0
  70. package/dist/knowledge/guard-render.js +1 -1
  71. package/dist/knowledge/guard-risk.js +1 -1
  72. package/dist/knowledge/guard-templates.d.ts +1 -1
  73. package/dist/knowledge/guard-templates.js +1 -1
  74. package/dist/knowledge/guard-translation.js +1 -1
  75. package/dist/knowledge/index.js +1 -1
  76. package/dist/knowledge/industry-generalizer.d.ts +4 -0
  77. package/dist/knowledge/industry-generalizer.js +1 -1
  78. package/dist/knowledge/industry-registry.d.ts +1 -1
  79. package/dist/knowledge/industry-registry.js +1 -1
  80. package/dist/knowledge/industry-strategy.js +1 -1
  81. package/dist/knowledge/jsonrpc-enum.js +1 -1
  82. package/dist/knowledge/machine-fork-watch.d.ts +9 -0
  83. package/dist/knowledge/machine-fork-watch.js +1 -0
  84. package/dist/knowledge/migration-preflight.js +1 -1
  85. package/dist/knowledge/projection.spec.js +1 -1
  86. package/dist/knowledge/scenario-modes.d.ts +8 -2
  87. package/dist/knowledge/scenario-modes.js +1 -1
  88. package/dist/knowledge/semantic-ir.d.ts +132 -0
  89. package/dist/knowledge/semantic-ir.js +1 -0
  90. package/dist/knowledge/service-ledger.js +1 -1
  91. package/dist/knowledge/strategy-manuals.js +1 -1
  92. package/dist/knowledge/template-index.js +1 -1
  93. package/dist/knowledge/template-loader.d.ts +45 -0
  94. package/dist/knowledge/template-loader.js +1 -1
  95. package/dist/knowledge/template-prose.d.ts +50 -0
  96. package/dist/knowledge/template-prose.js +1 -0
  97. package/dist/knowledge/template-registry.js +1 -1
  98. package/dist/knowledge/template-scanner.d.ts +5 -3
  99. package/dist/knowledge/template-scanner.js +1 -1
  100. package/dist/knowledge/template-validation.js +1 -1
  101. package/dist/knowledge/tools-reference.js +1 -1
  102. package/dist/monitor/MonitorLoop.js +1 -1
  103. package/dist/monitor/normalize.d.ts +1 -1
  104. package/dist/monitor/normalize.js +1 -1
  105. package/dist/monitor/types.js +1 -1
  106. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  107. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  108. package/dist/playbooks/service-build/merchant-guide.d.ts +16 -6
  109. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  110. package/dist/playbooks/service-build/migration-planner.d.ts +11 -2
  111. package/dist/playbooks/service-build/migration-planner.js +1 -1
  112. package/dist/playbooks/service-build/mode-actions.d.ts +8 -0
  113. package/dist/playbooks/service-build/mode-actions.js +1 -1
  114. package/dist/playbooks/service-build/object-panorama.d.ts +22 -1
  115. package/dist/playbooks/service-build/object-panorama.js +1 -1
  116. package/dist/playbooks/service-build/participation-radar.js +1 -1
  117. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  118. package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +1 -1
  119. package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
  120. package/dist/playbooks/service-build/reverse-mapping.js +1 -1
  121. package/dist/playbooks/service-build/service-panorama.js +1 -1
  122. package/dist/playbooks/service-build/service-quote.js +1 -1
  123. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  124. package/dist/review/index.js +1 -1
  125. package/dist/safety/confirm-gate.js +1 -1
  126. package/dist/schema/benchmark-migration/index.d.ts +135 -10
  127. package/dist/schema/benchmark-migration/index.js +1 -1
  128. package/dist/schema/call/allocation.d.ts +3 -0
  129. package/dist/schema/call/allocation.js +1 -1
  130. package/dist/schema/call/arbitration.js +1 -1
  131. package/dist/schema/call/base.d.ts +32 -0
  132. package/dist/schema/call/bridge.d.ts +8 -0
  133. package/dist/schema/call/error-codes.d.ts +1 -1
  134. package/dist/schema/call/error-codes.js +1 -1
  135. package/dist/schema/call/order.js +1 -1
  136. package/dist/schema/call/reward.d.ts +10 -0
  137. package/dist/schema/call/reward.js +1 -1
  138. package/dist/schema/call/semantic.js +1 -1
  139. package/dist/schema/call/service.js +1 -1
  140. package/dist/schema/common/index.js +1 -1
  141. package/dist/schema/config/index.d.ts +24 -0
  142. package/dist/schema/config/index.js +1 -1
  143. package/dist/schema/evaluation/index.d.ts +152 -0
  144. package/dist/schema/evaluation/index.js +1 -1
  145. package/dist/schema/goal/index.d.ts +16 -0
  146. package/dist/schema/goal/planning.d.ts +29 -0
  147. package/dist/schema/goal/planning.js +1 -1
  148. package/dist/schema/industry-pack/index.d.ts +70 -0
  149. package/dist/schema/industry-pack/modes.d.ts +70 -0
  150. package/dist/schema/industry-pack/modes.js +1 -1
  151. package/dist/schema/intent-radar/index.d.ts +3 -0
  152. package/dist/schema/intent-radar/index.js +1 -1
  153. package/dist/schema/local/index.d.ts +80 -0
  154. package/dist/schema/local/index.js +1 -1
  155. package/dist/schema/messenger/index.d.ts +278 -1
  156. package/dist/schema/messenger/index.js +1 -1
  157. package/dist/schema/operations.d.ts +6 -0
  158. package/dist/schema/query/bi.d.ts +38 -0
  159. package/dist/schema/query/bi.js +1 -1
  160. package/dist/schema/query/index.d.ts +148 -47
  161. package/dist/schema/query/index.js +1 -1
  162. package/dist/schema/schema-version.js +1 -1
  163. package/dist/schema/service-clone/index.d.ts +17 -0
  164. package/dist/schema/service-clone/index.js +1 -1
  165. package/dist/schema-query-impl/index.js +1 -1
  166. package/dist/schemas/account_operation.output.json +8 -0
  167. package/dist/schemas/benchmark_migration_operation.output.json +296 -2
  168. package/dist/schemas/benchmark_migration_operation.schema.json +292 -7
  169. package/dist/schemas/bridge_operation.output.json +8 -0
  170. package/dist/schemas/config_operation.output.json +95 -0
  171. package/dist/schemas/config_operation.schema.json +16 -1
  172. package/dist/schemas/evaluation_operation.output.json +240 -0
  173. package/dist/schemas/evaluation_operation.schema.json +397 -1
  174. package/dist/schemas/goal_operation.schema.json +40 -10
  175. package/dist/schemas/index.json +1 -1
  176. package/dist/schemas/industry_pack_operation.output.json +90 -2
  177. package/dist/schemas/industry_pack_operation.schema.json +236 -0
  178. package/dist/schemas/intent_radar.output.json +2 -0
  179. package/dist/schemas/intent_radar.schema.json +1 -0
  180. package/dist/schemas/local_cache_operation.output.json +8 -0
  181. package/dist/schemas/local_history_operation.output.json +8 -0
  182. package/dist/schemas/local_info_operation.output.json +8 -0
  183. package/dist/schemas/local_mark_operation.output.json +8 -0
  184. package/dist/schemas/messenger_operation.output.json +609 -1
  185. package/dist/schemas/messenger_operation.schema.json +96 -1
  186. package/dist/schemas/onchain_events.output.json +281 -11
  187. package/dist/schemas/onchain_events.schema.json +5 -1
  188. package/dist/schemas/onchain_operations.output.json +8 -0
  189. package/dist/schemas/onchain_operations.schema.json +371 -10
  190. package/dist/schemas/onchain_operations_allocation.schema.json +10 -1
  191. package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
  192. package/dist/schemas/onchain_operations_guard.schema.json +318 -0
  193. package/dist/schemas/onchain_operations_order.schema.json +1 -1
  194. package/dist/schemas/onchain_operations_reward.schema.json +35 -1
  195. package/dist/schemas/onchain_operations_service.schema.json +6 -6
  196. package/dist/schemas/query_toolkit.output.json +305 -8
  197. package/dist/schemas/service_clone_operation.output.json +79 -0
  198. package/dist/tools/handlers/benchmark-migration.d.ts +15 -0
  199. package/dist/tools/handlers/benchmark-migration.js +1 -1
  200. package/dist/tools/handlers/config.js +1 -1
  201. package/dist/tools/handlers/evaluation.js +1 -1
  202. package/dist/tools/handlers/evaluation.spec.js +1 -1
  203. package/dist/tools/handlers/intent-radar.js +1 -1
  204. package/dist/tools/handlers/messenger.d.ts +1 -0
  205. package/dist/tools/handlers/messenger.js +1 -1
  206. package/dist/tools/handlers/onchain.d.ts +20 -1
  207. package/dist/tools/handlers/onchain.js +1 -1
  208. package/dist/tools/handlers/query.d.ts +1 -0
  209. package/dist/tools/handlers/query.js +1 -1
  210. package/dist/tools/handlers/service-clone.d.ts +18 -0
  211. package/dist/tools/handlers/service-clone.js +1 -1
  212. package/dist/tools/handlers/wip.js +1 -1
  213. package/dist/tools/registry/agent.js +1 -1
  214. package/dist/tools/registry/business.js +1 -1
  215. package/dist/tools/registry/query.js +1 -1
  216. package/dist/tools/wip-verify-ledger.d.ts +14 -0
  217. package/dist/tools/wip-verify-ledger.js +1 -0
  218. package/dist/tools/wrap.d.ts +4 -0
  219. package/dist/tools/wrap.js +1 -1
  220. package/package.json +2 -2
@@ -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 a133a}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':a133a,'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 a136a}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':a136a,'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 a136a}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 a136a(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 a139a}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 a139a(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};}
@@ -94,6 +94,7 @@ export interface FundListingWall {
94
94
  blockedCount: number;
95
95
  blockedNames: string[];
96
96
  walled: boolean;
97
+ waterLevel?: "healthy" | "low_water" | "depleted" | "unknown";
97
98
  }
98
99
  export interface WallListing {
99
100
  name: string;
@@ -1 +1 @@
1
- import{RETENTION_RANK,pathConfidence,findingWhere}from'./analyze.js';import{orderCompletionInGraph}from'./expand.js';import{profileOf}from'./viewport.js';const STATE_RANK={'present':0x0,'empty':0x1,'gap':0x2};function worstState(c,d){return STATE_RANK[c]>=STATE_RANK[d]?c:d;}export const COVERAGE_VOCABULARY={'present':'present\x20—\x20evidence\x20retrieved\x20and\x20non-empty;\x20real\x20material\x20the\x20rules\x20can\x20score.','empty':'empty\x20—\x20the\x20read\x20completed\x20and\x20verified\x20the\x20absence\x20of\x20data\x20(e.g.\x20no\x20review\x20votes);\x20an\x20answered\x20fact\x20the\x20rules\x20may\x20score,\x20never\x20a\x20fetch\x20failure.','gap':'gap\x20—\x20the\x20evidence\x20was\x20not\x20retrieved,\x20errored,\x20or\x20was\x20truncated;\x20it\x20is\x20unverifiable,\x20so\x20it\x20is\x20excluded\x20from\x20scoring\x20and\x20listed\x20in\x20unverified,\x20never\x20defaulted\x20to\x20a\x20low\x20score.','unverified':'unverified\x20—\x20rule\x20ids\x20excluded\x20from\x20the\x20score\x20because\x20their\x20evidence\x20is\x20gap-state;\x20missing\x20here\x20means\x20every\x20rule\x20was\x20scored\x20on\x20fetched\x20facts.','completeness':'completeness\x20—\x20percentage\x20of\x20required\x20evidence\x20slots\x20that\x20carry\x20material\x20(present);\x20verified-empty\x20slots\x20lower\x20it\x20but\x20stay\x20fully\x20scoreable.'};export function computeFundListingWall(a,b){const c=a/0x3n,d=a>0x0n?b['filter'](f=>f['price']*0x3n>a)['sort']((f,g)=>g['price']>f['price']?0x1:g['price']<f['price']?-0x1:0x0):[],e=b['reduce']((f,g)=>g['price']>f?g['price']:f,0x0n);return{'coverCap':c,'largestListing':e,'blocked':d,'walled':d['length']>0x0};}const REQUIRED_SLOTS=[{'slot':'service_snapshot','label':'Service\x20snapshot','gloss':'The\x20service\x27s\x20own\x20on-chain\x20record\x20(publish/pause\x20status,\x20price,\x20fund\x20and\x20bindings),\x20fetched\x20directly\x20from\x20chain.'},{'slot':'arbitration','label':'Arbitration\x20binding','gloss':'Dispute-resolution\x20services\x20bound\x20to\x20this\x20shop\x20—\x20whether\x20one\x20exists,\x20carries\x20a\x20voter\x20roster,\x20has\x20a\x20funded\x20fee,\x20and\x20is\x20not\x20paused.'},{'slot':'reviews','label':'Review\x20votes','gloss':'On-chain\x20like/dislike\x20votes\x20left\x20by\x20completed-order\x20counterparties;\x20an\x20empty\x20window\x20means\x20nobody\x20voted\x20yet,\x20not\x20a\x20bad\x20rating.'},{'slot':'fulfillment_orders','label':'Recent\x20orders','gloss':'Orders\x20in\x20the\x20shop\x27s\x20recent\x20order\x20window\x20with\x20completion\x20and\x20refund\x20outcomes,\x20used\x20to\x20measure\x20real\x20fulfillment.'},{'slot':'fulfillment_workflow','label':'Fulfillment\x20workflow','gloss':'The\x20bound\x20machine\x27s\x20nodes\x20and\x20forwards\x20that\x20every\x20paid\x20order\x20must\x20progress\x20through\x20to\x20reach\x20completion\x20or\x20refund.'},{'slot':'fund_safety','label':'Compensation\x20fund\x20vs\x20exposure','gloss':'The\x20merchant\x27s\x20compensation\x20fund\x20balance\x20measured\x20against\x20the\x20largest\x20recent\x20order\x20(the\x20statutory\x203x\x20payout\x20buffer).'},{'slot':'transparency','label':'Transparency\x20profile','gloss':'The\x20shop\x27s\x20public\x20on-chain\x20profile\x20—\x20description\x20and\x20publish/pause\x20flags\x20a\x20buyer\x20can\x20verify\x20before\x20paying.'}],SLOT_FACTS={'service_snapshot':[],'arbitration':['arbitration.binding'],'reviews':['reviews.votes'],'fulfillment_orders':['fulfillment.orders'],'fulfillment_workflow':['fulfillment.workflow'],'fund_safety':['fund.compensation','fund.exposure','fund.listing_wall'],'transparency':['transparency.profile']},RISK_RULE_SOURCES={'risk_workflow':{'slots':['fulfillment_workflow'],'ruleIds':['R4']},'risk_fund':{'slots':['fund_safety','fulfillment_orders'],'ruleIds':['R2','R7','AC3','AC4']},'risk_trust':{'slots':['arbitration','transparency'],'ruleIds':['R1','R3','R6']},'risk_behavior':{'slots':['fulfillment_orders'],'ruleIds':['AC1','AC2']}};function nodeData(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']()),e=c?.['raw'],f=e?.['data']??e;return f&&typeof f==='object'?f:undefined;}function isFetched(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return!!c&&a['visibleNodes']['has'](c['id'])&&!!c['raw']&&c['state']!=='error'&&c['state']!=='stub';}function truncationOf(a,b,c){const d=a['graph']['truncations']['find'](e=>e['nodeId']===b&&e['schema']===c);return d?{'observed':d['observed'],'limit':d['limit']}:undefined;}function outEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['from']===b['toLowerCase']()&&d['schema']===c);}function incEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['to']===b['toLowerCase']()&&d['schema']===c);}function toBigInt(a){if(a==null)return 0x0n;try{return BigInt(typeof a==='number'?Math['trunc'](a):String(a));}catch{return 0x0n;}}function flag(a){return a===!![]||a===0x1||a==='1';}function readSellableListings(a){const b=a['sales'];if(Array['isArray'](b))return b['map'](c=>{const e=c??{};return{'name':typeof e['name']==='string'?e['name']:'','price':toBigInt(e['price']),'suspended':flag(e['suspension'])};})['filter'](c=>!c['suspended']&&c['price']>0x0n)['map'](({name:c,price:e})=>({'name':c,'price':e}));if(typeof b==='string'&&b!==''){const c=toBigInt(b);return c>0x0n?[{'name':'','price':c}]:[];}return[];}function snapProvenance(a){return{'path':a,'retention':'complete','confidence':'exact'};}function edgeProvenance(a,b,c){const {confidence:d,window:e}=pathConfidence(a,c),f=c['reduce']((g,h)=>RETENTION_RANK[h['retention']]>RETENTION_RANK[g]?h['retention']:g,'complete');return{'path':b,'retention':f,'confidence':d,...e?{'window':e}:{}};}export function projectEvaluationFacts(b,c,f){const g=c['toLowerCase'](),h=[],i=new Map(),j=new Map(),k=(W,X,Y='exact')=>{i['set'](W,X),j['set'](W,Y);},l=b['graph']['nodes']['get'](g),m=b['visibleNodes']['has'](g),o=!!(m&&l&&l['raw']&&l['state']!=='error'&&l['state']!=='stub'&&l['objectType']==='Service'),q=o?nodeData(b,g)??{}:{},r=l?.['coinType'];k('service_snapshot',o?'present':'gap');const u=Array['isArray'](q['arbitrations'])?q['arbitrations']['map'](String)['filter'](Boolean):[],w=outEdges(b,g,'service.arbitration'),x=[];let y=!![];for(const W of u){if(!isFetched(b,W)){y=![];continue;}const X=nodeData(b,W)??{},Y=Array['isArray'](X['voting_guard'])?X['voting_guard']:[];x['push']({'id':W['toLowerCase'](),'paused':flag(X['bPaused']),'fee':toBigInt(X['fee'])['toString'](),'votingGuards':Y['length'],'usageGuard':typeof X['usage_guard']==='string'&&X['usage_guard']!==''});}if(!o)k('arbitration','gap'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','provenance':snapProvenance([g]),'evidence':'Arbitration\x20configuration\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(u['length']===0x0)k('arbitration','empty'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'empty','value':[],'provenance':snapProvenance([g,'Service.arbitrations']),'evidence':'Service\x20snapshot\x20shows\x20no\x20arbitration\x20service\x20configured\x20(verified\x20absence).'});else!y?(k('arbitration','gap'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','value':x,'provenance':w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w):snapProvenance([g,'Service.arbitrations']),'evidence':x['length']+'/'+u['length']+'\x20arbitration\x20service(s)\x20resolved;\x20the\x20rest\x20failed\x20to\x20fetch.'})):(k('arbitration','present',w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w)['confidence']:'exact'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'present','value':x,'provenance':w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w):snapProvenance([g,'Service.arbitrations']),'evidence':x['length']+'\x20arbitration\x20service(s)\x20resolved\x20from\x20the\x20snapshot\x20with\x20voting\x20rosters.'}));}const z=outEdges(b,g,'target.vote'),A=truncationOf(b,g,'target.vote'),B={'total':z['length'],'like':0x0,'dislike':0x0,'favor':0x0};for(const Z of z){const a0=typeof Z['payload']?.['voteBits']==='number'?Z['payload']['voteBits']:0x0;if(a0&0x2)B['like']+=0x1;if(a0&0x4)B['dislike']+=0x1;if(a0&0x8)B['favor']+=0x1;}const C=z['length']>0x0?edgeProvenance(b,[g,'target.vote'],z):snapProvenance([g,'registrar.votes']);if(!o)k('reviews','gap'),h['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','provenance':snapProvenance([g]),'evidence':'Reputation\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(A)k('reviews','gap',C['confidence']),h['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','value':B,'provenance':{...C,'window':A},'evidence':'Vote\x20window\x20truncated\x20at\x20'+A['limit']+';\x20'+B['total']+'\x20vote(s)\x20visible\x20—\x20counts\x20are\x20a\x20floor.'});else B['total']===0x0?(k('reviews','empty'),h['push']({'dimension':'reviews','key':'reviews.votes','state':'empty','value':B,'provenance':C,'evidence':'No\x20registrar\x20votes\x20recorded\x20for\x20the\x20service\x20(window\x20read\x20empty,\x20no\x20truncation).'})):(k('reviews','present',C['confidence']),h['push']({'dimension':'reviews','key':'reviews.votes','state':'present','value':B,'provenance':C,'evidence':B['total']+'\x20registrar\x20vote(s):\x20'+B['like']+'\x20like,\x20'+B['dislike']+'\x20dislike,\x20'+B['favor']+'\x20favor.'}));}const D=outEdges(b,g,'service.order'),E=truncationOf(b,g,'service.order'),F={'observed':D['length'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':'0'};let G=0x0n,H=0x0n;for(const a1 of D){const a2=orderCompletionInGraph(b['graph'],a1['to'])['status'];if(a2==='completed')F['completed']+=0x1;else{if(a2==='in_progress')F['inProgress']+=0x1;else F['unknown']+=0x1;}const a3=toBigInt(nodeData(b,a1['to'])?.['amount']);G+=a3;if(a3>H)H=a3;}F['windowedAmount']=G['toString']();const I=D['length']>0x0?edgeProvenance(b,[g,'service.order','Order'],D):snapProvenance([g,'service.order']);let J;if(!o)J='gap';else{if(E)J='gap';else J=D['length']===0x0?'empty':'present';}k('fulfillment_orders',J,I['confidence']);if(J==='gap'&&o)h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','value':F,'provenance':{...I,'window':E},'evidence':'Order\x20window\x20truncated\x20at\x20'+E?.['limit']+'\x20(observed\x20'+E?.['observed']+');\x20'+F['observed']+'\x20order(s)\x20visible\x20—\x20completion\x20stats\x20are\x20a\x20partial\x20floor.'});else{if(J==='empty')h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'empty','value':F,'provenance':I,'evidence':'No\x20orders\x20in\x20the\x20service\x20window\x20(verified\x20absence).'});else J==='present'?h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'present','value':F,'provenance':I,'evidence':F['observed']+'\x20recent\x20order(s):\x20'+F['completed']+'\x20completed,\x20'+F['inProgress']+'\x20in\x20progress,\x20'+F['unknown']+'\x20unresolved.'}):h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','provenance':snapProvenance([g]),'evidence':'Order\x20window\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});}const K=typeof q['machine']==='string'?q['machine']:'',L=K!==''&&isFetched(b,K),M=K===''?'':K['toLowerCase']()+'::node::',N=M===''?[]:b['graph']['edges']['filter'](a4=>a4['schema']==='wf.transition'&&a4['from']['startsWith'](M)),O=new Set();for(const a4 of N){O['add'](a4['from']);const a5=String(a4['payload']?.['node']??'');if(a5!=='')O['add'](''+M+a5);}let P,Q;if(!o)P='gap',Q='Workflow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.';else{if(K==='')P='empty',Q='No\x20workflow\x20template\x20configured\x20(verified\x20absence).';else{if(!L)P='gap',Q='Machine\x20template\x20referenced\x20but\x20not\x20fetched\x20(fetch\x20gap).';else N['length']===0x0?(P='gap',Q='Machine\x20fetched\x20but\x20no\x20wf.transition\x20edges\x20—\x20terminal\x20set\x20unverifiable;\x20completion\x20states\x20stay\x20unknown.'):(P='present',Q='Machine\x20template\x20resolved\x20with\x20'+O['size']+'\x20workflow\x20node(s);\x20terminal\x20set\x20verifiable.');}}k('fulfillment_workflow',P,P==='present'?'exact':P==='empty'?'exact':'windowed'),h['push']({'dimension':'fulfillment','key':'fulfillment.workflow','state':P,...K!==''&&L?{'value':{'machine':K['toLowerCase'](),'nodes':O['size']}}:{},'provenance':P==='present'?edgeProvenance(b,[g,'service.machine','wf.transition'],N):snapProvenance([g,'Service.machine']),'evidence':Q});const R=toBigInt(q['compensation_fund']);if(!o)k('fund_safety','gap'),h['push']({'dimension':'fund_safety','key':'fund.compensation','state':'gap','provenance':snapProvenance([g]),'evidence':'Fund\x20backing\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'}),h['push']({'dimension':'fund_safety','key':'fund.exposure','state':'gap','provenance':snapProvenance([g]),'evidence':'Payout\x20exposure\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{k('fund_safety','present'),h['push']({'dimension':'fund_safety','key':'fund.compensation','state':'present','value':{'fund':R['toString'](),...r?{'coinType':r}:{}},'provenance':snapProvenance([g,'Service.compensation_fund']),'evidence':'Compensation\x20fund\x20'+R['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+'.'});const a6=H*0x3n,a7=worstState('present',J),a8=f['find'](aa=>aa['id']==='R2:'+g);h['push']({'dimension':'fund_safety','key':'fund.exposure','state':a7,'value':{'fund':R['toString'](),'windowedCount':F['observed'],'windowedAmount':G['toString'](),'largestAmount':H['toString'](),'neededCeiling':a6['toString'](),'coverageMet':R>=a6},'provenance':D['length']>0x0?edgeProvenance(b,[g,'service.order','Order.amount','Service.compensation_fund'],D):snapProvenance([g,'Service.compensation_fund']),'findingIds':a8?[a8['id']]:undefined,'evidence':J==='empty'?'No\x20recent\x20orders;\x20no\x20payout\x20exposure\x20to\x20cover.':'Largest\x20of\x20'+F['observed']+'\x20recent\x20order(s)\x20is\x20'+H['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+';\x20the\x20compensation\x20fund\x20should\x20cover\x20at\x20least\x203x\x20that\x20('+a6['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+')\x20—\x20coverage\x20'+(R>=a6?'met':'not\x20met')+(E?'\x20(older\x20orders\x20outside\x20the\x20fetch\x20window,\x20floor\x20value\x20only)':'')+'.'});const a9=readSellableListings(q);if(a9['length']===0x0)h['push']({'dimension':'fund_safety','key':'fund.listing_wall','state':'empty','provenance':snapProvenance([g,'Service.sales','Service.compensation_fund']),'evidence':'No\x20sellable\x20priced\x20listing\x20on\x20this\x20service\x20—\x20no\x20listing\x20can\x20be\x20blocked\x20by\x20the\x20fund\x20ceiling.'});else{const aa=computeFundListingWall(R,a9);h['push']({'dimension':'fund_safety','key':'fund.listing_wall','state':'present','value':{'fund':R['toString'](),'coverCap':aa['coverCap']['toString'](),'largestListing':aa['largestListing']['toString'](),'blockedCount':aa['blocked']['length'],'blockedNames':aa['blocked']['slice'](0x0,0x3)['map'](ab=>ab['name'])['filter'](Boolean),'walled':aa['walled']},'provenance':snapProvenance([g,'Service.sales','Service.compensation_fund']),'evidence':aa['blocked']['length']===0x0?R===0x0n?'No\x20compensation\x20fund\x20—\x20buys\x20are\x20never\x20gated\x20by\x20a\x20fund\x20ceiling;\x20'+a9['length']+'\x20sellable\x20listing(s)\x20stay\x20orderable\x20(zero-fund\x20payout\x20protection\x20is\x20disclosed\x20at\x20the\x20fund\x20read).':'Every\x20sellable\x20listing\x20('+a9['length']+')\x20is\x20priced\x20at\x20or\x20under\x20the\x20live\x20per-order\x20ceiling\x20('+aa['coverCap']['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+')\x20—\x20no\x20listing\x20is\x20blocked\x20at\x20checkout.':'The\x20fund\x20covers\x20single\x20orders\x20up\x20to\x20'+aa['coverCap']['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+';\x20'+aa['blocked']['length']+'\x20of\x20'+a9['length']+'\x20sellable\x20listing(s)\x20are\x20priced\x20ABOVE\x20it\x20and\x20cannot\x20be\x20checked\x20out\x20(largest\x20first:\x20'+aa['blocked']['map'](ab=>ab['name']||'(unnamed\x20listing)')['join'](',\x20')+')\x20until\x20the\x20fund\x20is\x20topped\x20to\x203x\x20their\x20price\x20or\x20the\x20price\x20is\x20cut.'});}}if(!o)k('transparency','gap'),h['push']({'dimension':'transparency','key':'transparency.profile','state':'gap','provenance':snapProvenance([g]),'evidence':'Transparency\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{const ab=typeof q['setting_lock_duration']==='number'?q['setting_lock_duration']:Number(toBigInt(q['setting_lock_duration'])),ac=flag(q['bPublished']);k('transparency','present'),h['push']({'dimension':'transparency','key':'transparency.profile','state':'present','value':{'description':typeof q['description']==='string'?q['description']:'','location':typeof q['location']==='string'?q['location']:'','settingLockDuration':Number['isFinite'](ab)?ab:0x0,'published':ac,'paused':flag(q['bPaused'])},'provenance':snapProvenance([g,'Service.bPublished','Service.setting_lock_duration']),'findingIds':f['some'](ae=>ae['id']==='R6:'+g)?['R6:'+g]:undefined,'evidence':'Service\x20profile:\x20description\x20'+(typeof q['description']==='string'&&q['description']!==''?'provided':'not\x20provided')+',\x20location\x20'+(typeof q['location']==='string'&&q['location']!==''?'provided':'not\x20provided')+',\x20service\x20lock\x20'+ab+'\x20ms,\x20'+(ac?'published':'unpublished')+'.'});}for(const ae of['risk_workflow','risk_fund','risk_trust','risk_behavior']){const af=RISK_RULE_SOURCES[ae];let ag='present',ah,ai=-0x1;for(const ap of af['slots']){const aq=i['get'](ap)??'gap';STATE_RANK[aq]>ai&&(ai=STATE_RANK[aq],ag=aq,ah=ap);}let aj;if(ag==='gap')aj='windowed';else{if(ag==='empty')aj='bounded';else aj=ah&&j['get'](ah)||'exact';}const ak=g['toLowerCase'](),al=new Set([ak]);{const ar=[ak];while(ar['length']>0x0){const as=ar['shift']();for(const at of b['graph']['out']['get'](as)??[]){if(at['family']!=='F'&&at['family']!=='W'&&at['family']!=='M')continue;const au=at['to']['toLowerCase']();!al['has'](au)&&(al['add'](au),ar['push'](au));}}}const am=(av,aw)=>{if(!av['startsWith'](aw+':'))return![];const ax=av['slice'](aw['length']+0x1)['toLowerCase'](),ay=ax['split']('#')[0x0]['split']('|')[0x0],az=ay['split'](':');if(az['some'](aA=>aA['length']===0x0))return!![];return az['some'](aA=>al['has'](aA));},an=f['filter'](av=>af['ruleIds']['some'](aw=>am(av['id'],aw))),ao=f['filter'](av=>af['ruleIds']['some'](aw=>av['id']['startsWith'](aw+':')&&!am(av['id'],aw)))['length'];h['push']({'dimension':ae,'key':ae+'.findings','state':ag,'value':{'findings':an['map'](av=>({'id':av['id'],'severity':av['severity'],'title':av['title']})),'where':an['map'](av=>findingWhere(av))},'provenance':{'path':[g,...af['slots']],'retention':'derived','confidence':aj},'findingIds':an['map'](av=>av['id']),'evidence':ag==='gap'?'Input\x20evidence\x20has\x20fetch\x20gaps;\x20the\x20risk\x20conclusion\x20is\x20unverifiable.':ag==='empty'?'Input\x20evidence\x20is\x20configured-empty;\x20the\x20risk\x20rules\x20are\x20not\x20applicable.':an['length']>0x0?an['length']+'\x20structural\x20risk\x20finding(s)\x20on\x20this\x20object,\x20from\x20the\x20analyzer\x20registry.'+(ao>0x0?'\x20'+ao+'\x20further\x20finding(s)\x20on\x20NEIGHBOR\x20objects\x20(reachable\x20only\x20through\x20shared\x20reverse/social\x20edges)\x20are\x20folded\x20here\x20as\x20a\x20count\x20—\x20they\x20do\x20not\x20belong\x20to\x20this\x20object\x27s\x20score\x20(N-K5).':''):ao>0x0?'No\x20risk\x20fired\x20on\x20this\x20object\x27s\x20own\x20structure;\x20'+ao+'\x20finding(s)\x20on\x20neighbor\x20objects\x20(shared\x20edges\x20only)\x20are\x20excluded\x20from\x20the\x20score\x20(N-K5).':'No\x20risk\x20fired\x20on\x20this\x20object;\x20input\x20evidence\x20slots\x20are\x20fully\x20materialized.'});}const S=[];for(const av of b['visibleNodes']){const aw=profileOf(b,av);if(!aw)continue;const ax=Array['isArray'](aw['profileRecords'])?aw['profileRecords']:undefined;S['push']({'nodeId':av,...typeof aw['registeredAt']==='number'?{'registeredAt':aw['registeredAt']}:{},'hasDescription':!!aw['hasDescription']||typeof aw['description']==='string','recordCount':typeof aw['recordCount']==='number'?aw['recordCount']:ax?.['length']??0x0,...typeof aw['description']==='string'?{'description':aw['description']}:{},...ax?{'profileRecords':ax}:{}});}const T=REQUIRED_SLOTS['length'],U=REQUIRED_SLOTS['filter'](({slot:ay})=>i['get'](ay)==='present')['length'],V=T===0x0?0x64:Math['round'](U/T*0x64);return{'target':g,'role':String(b['role']),'facts':h,'slots':REQUIRED_SLOTS['map'](({slot:ay,label:az,gloss:aA})=>({'slot':ay,'label':az,'gloss':aA,'required':!![],'state':i['get'](ay)??'gap','facts':[...SLOT_FACTS[ay]??[]]})),'completeness':V,'profiles':S};}
1
+ import{RETENTION_RANK,pathConfidence,findingWhere}from'./analyze.js';import{classifyFundWaterLevelUnits}from'../../knowledge/fund-layer.js';import{orderCompletionInGraph}from'./expand.js';import{profileOf}from'./viewport.js';const STATE_RANK={'present':0x0,'empty':0x1,'gap':0x2};function worstState(c,d){return STATE_RANK[c]>=STATE_RANK[d]?c:d;}export const COVERAGE_VOCABULARY={'present':'present\x20—\x20evidence\x20retrieved\x20and\x20non-empty;\x20real\x20material\x20the\x20rules\x20can\x20score.','empty':'empty\x20—\x20the\x20read\x20completed\x20and\x20verified\x20the\x20absence\x20of\x20data\x20(e.g.\x20no\x20review\x20votes);\x20an\x20answered\x20fact\x20the\x20rules\x20may\x20score,\x20never\x20a\x20fetch\x20failure.','gap':'gap\x20—\x20the\x20evidence\x20was\x20not\x20retrieved,\x20errored,\x20or\x20was\x20truncated;\x20it\x20is\x20unverifiable,\x20so\x20it\x20is\x20excluded\x20from\x20scoring\x20and\x20listed\x20in\x20unverified,\x20never\x20defaulted\x20to\x20a\x20low\x20score.','unverified':'unverified\x20—\x20rule\x20ids\x20excluded\x20from\x20the\x20score\x20because\x20their\x20evidence\x20is\x20gap-state;\x20missing\x20here\x20means\x20every\x20rule\x20was\x20scored\x20on\x20fetched\x20facts.','completeness':'completeness\x20—\x20percentage\x20of\x20required\x20evidence\x20slots\x20that\x20carry\x20material\x20(present);\x20verified-empty\x20slots\x20lower\x20it\x20but\x20stay\x20fully\x20scoreable.'};export function computeFundListingWall(a,b){const c=a/0x3n,d=a>0x0n?b['filter'](f=>f['price']*0x3n>a)['sort']((f,g)=>g['price']>f['price']?0x1:g['price']<f['price']?-0x1:0x0):[],e=b['reduce']((f,g)=>g['price']>f?g['price']:f,0x0n);return{'coverCap':c,'largestListing':e,'blocked':d,'walled':d['length']>0x0};}const REQUIRED_SLOTS=[{'slot':'service_snapshot','label':'Service\x20snapshot','gloss':'The\x20service\x27s\x20own\x20on-chain\x20record\x20(publish/pause\x20status,\x20price,\x20fund\x20and\x20bindings),\x20fetched\x20directly\x20from\x20chain.'},{'slot':'arbitration','label':'Arbitration\x20binding','gloss':'Dispute-resolution\x20services\x20bound\x20to\x20this\x20shop\x20—\x20whether\x20one\x20exists,\x20carries\x20a\x20voter\x20roster,\x20has\x20a\x20funded\x20fee,\x20and\x20is\x20not\x20paused.'},{'slot':'reviews','label':'Review\x20votes','gloss':'On-chain\x20like/dislike\x20votes\x20left\x20by\x20completed-order\x20counterparties;\x20an\x20empty\x20window\x20means\x20nobody\x20voted\x20yet,\x20not\x20a\x20bad\x20rating.'},{'slot':'fulfillment_orders','label':'Recent\x20orders','gloss':'Orders\x20in\x20the\x20shop\x27s\x20recent\x20order\x20window\x20with\x20completion\x20and\x20refund\x20outcomes,\x20used\x20to\x20measure\x20real\x20fulfillment.'},{'slot':'fulfillment_workflow','label':'Fulfillment\x20workflow','gloss':'The\x20bound\x20machine\x27s\x20nodes\x20and\x20forwards\x20that\x20every\x20paid\x20order\x20must\x20progress\x20through\x20to\x20reach\x20completion\x20or\x20refund.'},{'slot':'fund_safety','label':'Compensation\x20fund\x20vs\x20exposure','gloss':'The\x20merchant\x27s\x20compensation\x20fund\x20balance\x20measured\x20against\x20the\x20largest\x20recent\x20order\x20(the\x20statutory\x203x\x20payout\x20buffer).'},{'slot':'transparency','label':'Transparency\x20profile','gloss':'The\x20shop\x27s\x20public\x20on-chain\x20profile\x20—\x20description\x20and\x20publish/pause\x20flags\x20a\x20buyer\x20can\x20verify\x20before\x20paying.'}],SLOT_FACTS={'service_snapshot':[],'arbitration':['arbitration.binding'],'reviews':['reviews.votes'],'fulfillment_orders':['fulfillment.orders'],'fulfillment_workflow':['fulfillment.workflow'],'fund_safety':['fund.compensation','fund.exposure','fund.listing_wall'],'transparency':['transparency.profile']},RISK_RULE_SOURCES={'risk_workflow':{'slots':['fulfillment_workflow'],'ruleIds':['R4']},'risk_fund':{'slots':['fund_safety','fulfillment_orders'],'ruleIds':['R2','R7','AC3','AC4']},'risk_trust':{'slots':['arbitration','transparency'],'ruleIds':['R1','R3','R6']},'risk_behavior':{'slots':['fulfillment_orders'],'ruleIds':['AC1','AC2']}};function nodeData(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']()),e=c?.['raw'],f=e?.['data']??e;return f&&typeof f==='object'?f:undefined;}function isFetched(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return!!c&&a['visibleNodes']['has'](c['id'])&&!!c['raw']&&c['state']!=='error'&&c['state']!=='stub';}function truncationOf(a,b,c){const d=a['graph']['truncations']['find'](e=>e['nodeId']===b&&e['schema']===c);return d?{'observed':d['observed'],'limit':d['limit']}:undefined;}function outEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['from']===b['toLowerCase']()&&d['schema']===c);}function incEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['to']===b['toLowerCase']()&&d['schema']===c);}function toBigInt(a){if(a==null)return 0x0n;try{return BigInt(typeof a==='number'?Math['trunc'](a):String(a));}catch{return 0x0n;}}function flag(a){return a===!![]||a===0x1||a==='1';}function readSellableListings(a){const b=a['sales'];if(Array['isArray'](b))return b['map'](c=>{const e=c??{};return{'name':typeof e['name']==='string'?e['name']:'','price':toBigInt(e['price']),'suspended':flag(e['suspension'])};})['filter'](c=>!c['suspended']&&c['price']>0x0n)['map'](({name:c,price:e})=>({'name':c,'price':e}));if(typeof b==='string'&&b!==''){const c=toBigInt(b);return c>0x0n?[{'name':'','price':c}]:[];}return[];}function snapProvenance(a){return{'path':a,'retention':'complete','confidence':'exact'};}function edgeProvenance(a,b,c){const {confidence:d,window:e}=pathConfidence(a,c),f=c['reduce']((g,h)=>RETENTION_RANK[h['retention']]>RETENTION_RANK[g]?h['retention']:g,'complete');return{'path':b,'retention':f,'confidence':d,...e?{'window':e}:{}};}export function projectEvaluationFacts(b,c,f){const g=c['toLowerCase'](),h=[],i=new Map(),j=new Map(),k=(W,X,Y='exact')=>{i['set'](W,X),j['set'](W,Y);},l=b['graph']['nodes']['get'](g),m=b['visibleNodes']['has'](g),o=!!(m&&l&&l['raw']&&l['state']!=='error'&&l['state']!=='stub'&&l['objectType']==='Service'),q=o?nodeData(b,g)??{}:{},r=l?.['coinType'];k('service_snapshot',o?'present':'gap');const u=Array['isArray'](q['arbitrations'])?q['arbitrations']['map'](String)['filter'](Boolean):[],w=outEdges(b,g,'service.arbitration'),x=[];let y=!![];for(const W of u){if(!isFetched(b,W)){y=![];continue;}const X=nodeData(b,W)??{},Y=Array['isArray'](X['voting_guard'])?X['voting_guard']:[];x['push']({'id':W['toLowerCase'](),'paused':flag(X['bPaused']),'fee':toBigInt(X['fee'])['toString'](),'votingGuards':Y['length'],'usageGuard':typeof X['usage_guard']==='string'&&X['usage_guard']!==''});}if(!o)k('arbitration','gap'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','provenance':snapProvenance([g]),'evidence':'Arbitration\x20configuration\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(u['length']===0x0)k('arbitration','empty'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'empty','value':[],'provenance':snapProvenance([g,'Service.arbitrations']),'evidence':'Service\x20snapshot\x20shows\x20no\x20arbitration\x20service\x20configured\x20(verified\x20absence).'});else!y?(k('arbitration','gap'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','value':x,'provenance':w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w):snapProvenance([g,'Service.arbitrations']),'evidence':x['length']+'/'+u['length']+'\x20arbitration\x20service(s)\x20resolved;\x20the\x20rest\x20failed\x20to\x20fetch.'})):(k('arbitration','present',w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w)['confidence']:'exact'),h['push']({'dimension':'arbitration','key':'arbitration.binding','state':'present','value':x,'provenance':w['length']>0x0?edgeProvenance(b,[g,'service.arbitration'],w):snapProvenance([g,'Service.arbitrations']),'evidence':x['length']+'\x20arbitration\x20service(s)\x20resolved\x20from\x20the\x20snapshot\x20with\x20voting\x20rosters.'}));}const z=outEdges(b,g,'target.vote'),A=truncationOf(b,g,'target.vote'),B={'total':z['length'],'like':0x0,'dislike':0x0,'favor':0x0};for(const Z of z){const a0=typeof Z['payload']?.['voteBits']==='number'?Z['payload']['voteBits']:0x0;if(a0&0x2)B['like']+=0x1;if(a0&0x4)B['dislike']+=0x1;if(a0&0x8)B['favor']+=0x1;}const C=z['length']>0x0?edgeProvenance(b,[g,'target.vote'],z):snapProvenance([g,'registrar.votes']);if(!o)k('reviews','gap'),h['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','provenance':snapProvenance([g]),'evidence':'Reputation\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(A)k('reviews','gap',C['confidence']),h['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','value':B,'provenance':{...C,'window':A},'evidence':'Vote\x20window\x20truncated\x20at\x20'+A['limit']+';\x20'+B['total']+'\x20vote(s)\x20visible\x20—\x20counts\x20are\x20a\x20floor.'});else B['total']===0x0?(k('reviews','empty'),h['push']({'dimension':'reviews','key':'reviews.votes','state':'empty','value':B,'provenance':C,'evidence':'No\x20registrar\x20votes\x20recorded\x20for\x20the\x20service\x20(window\x20read\x20empty,\x20no\x20truncation).'})):(k('reviews','present',C['confidence']),h['push']({'dimension':'reviews','key':'reviews.votes','state':'present','value':B,'provenance':C,'evidence':B['total']+'\x20registrar\x20vote(s):\x20'+B['like']+'\x20like,\x20'+B['dislike']+'\x20dislike,\x20'+B['favor']+'\x20favor.'}));}const D=outEdges(b,g,'service.order'),E=truncationOf(b,g,'service.order'),F={'observed':D['length'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':'0'};let G=0x0n,H=0x0n;for(const a1 of D){const a2=orderCompletionInGraph(b['graph'],a1['to'])['status'];if(a2==='completed')F['completed']+=0x1;else{if(a2==='in_progress')F['inProgress']+=0x1;else F['unknown']+=0x1;}const a3=toBigInt(nodeData(b,a1['to'])?.['amount']);G+=a3;if(a3>H)H=a3;}F['windowedAmount']=G['toString']();const I=D['length']>0x0?edgeProvenance(b,[g,'service.order','Order'],D):snapProvenance([g,'service.order']);let J;if(!o)J='gap';else{if(E)J='gap';else J=D['length']===0x0?'empty':'present';}k('fulfillment_orders',J,I['confidence']);if(J==='gap'&&o)h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','value':F,'provenance':{...I,'window':E},'evidence':'Order\x20window\x20truncated\x20at\x20'+E?.['limit']+'\x20(observed\x20'+E?.['observed']+');\x20'+F['observed']+'\x20order(s)\x20visible\x20—\x20completion\x20stats\x20are\x20a\x20partial\x20floor.'});else{if(J==='empty')h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'empty','value':F,'provenance':I,'evidence':'No\x20orders\x20in\x20the\x20service\x20window\x20(verified\x20absence).'});else J==='present'?h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'present','value':F,'provenance':I,'evidence':F['observed']+'\x20recent\x20order(s):\x20'+F['completed']+'\x20completed,\x20'+F['inProgress']+'\x20in\x20progress,\x20'+F['unknown']+'\x20unresolved.'}):h['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','provenance':snapProvenance([g]),'evidence':'Order\x20window\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});}const K=typeof q['machine']==='string'?q['machine']:'',L=K!==''&&isFetched(b,K),M=K===''?'':K['toLowerCase']()+'::node::',N=M===''?[]:b['graph']['edges']['filter'](a4=>a4['schema']==='wf.transition'&&a4['from']['startsWith'](M)),O=new Set();for(const a4 of N){O['add'](a4['from']);const a5=String(a4['payload']?.['node']??'');if(a5!=='')O['add'](''+M+a5);}let P,Q;if(!o)P='gap',Q='Workflow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.';else{if(K==='')P='empty',Q='No\x20workflow\x20template\x20configured\x20(verified\x20absence).';else{if(!L)P='gap',Q='Machine\x20template\x20referenced\x20but\x20not\x20fetched\x20(fetch\x20gap).';else N['length']===0x0?(P='gap',Q='Machine\x20fetched\x20but\x20no\x20wf.transition\x20edges\x20—\x20terminal\x20set\x20unverifiable;\x20completion\x20states\x20stay\x20unknown.'):(P='present',Q='Machine\x20template\x20resolved\x20with\x20'+O['size']+'\x20workflow\x20node(s);\x20terminal\x20set\x20verifiable.');}}k('fulfillment_workflow',P,P==='present'?'exact':P==='empty'?'exact':'windowed'),h['push']({'dimension':'fulfillment','key':'fulfillment.workflow','state':P,...K!==''&&L?{'value':{'machine':K['toLowerCase'](),'nodes':O['size']}}:{},'provenance':P==='present'?edgeProvenance(b,[g,'service.machine','wf.transition'],N):snapProvenance([g,'Service.machine']),'evidence':Q});const R=toBigInt(q['compensation_fund']);if(!o)k('fund_safety','gap'),h['push']({'dimension':'fund_safety','key':'fund.compensation','state':'gap','provenance':snapProvenance([g]),'evidence':'Fund\x20backing\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'}),h['push']({'dimension':'fund_safety','key':'fund.exposure','state':'gap','provenance':snapProvenance([g]),'evidence':'Payout\x20exposure\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{k('fund_safety','present'),h['push']({'dimension':'fund_safety','key':'fund.compensation','state':'present','value':{'fund':R['toString'](),...r?{'coinType':r}:{}},'provenance':snapProvenance([g,'Service.compensation_fund']),'evidence':'Compensation\x20fund\x20'+R['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+'.'});const a6=H*0x3n,a7=worstState('present',J),a8=f['find'](aa=>aa['id']==='R2:'+g);h['push']({'dimension':'fund_safety','key':'fund.exposure','state':a7,'value':{'fund':R['toString'](),'windowedCount':F['observed'],'windowedAmount':G['toString'](),'largestAmount':H['toString'](),'neededCeiling':a6['toString'](),'coverageMet':R>=a6},'provenance':D['length']>0x0?edgeProvenance(b,[g,'service.order','Order.amount','Service.compensation_fund'],D):snapProvenance([g,'Service.compensation_fund']),'findingIds':a8?[a8['id']]:undefined,'evidence':J==='empty'?'No\x20recent\x20orders;\x20no\x20payout\x20exposure\x20to\x20cover.':'Largest\x20of\x20'+F['observed']+'\x20recent\x20order(s)\x20is\x20'+H['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+';\x20the\x20compensation\x20fund\x20should\x20cover\x20at\x20least\x203x\x20that\x20('+a6['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+')\x20—\x20coverage\x20'+(R>=a6?'met':'not\x20met')+(E?'\x20(older\x20orders\x20outside\x20the\x20fetch\x20window,\x20floor\x20value\x20only)':'')+'.'});const a9=readSellableListings(q);if(a9['length']===0x0)h['push']({'dimension':'fund_safety','key':'fund.listing_wall','state':'empty','provenance':snapProvenance([g,'Service.sales','Service.compensation_fund']),'evidence':'No\x20sellable\x20priced\x20listing\x20on\x20this\x20service\x20—\x20no\x20listing\x20can\x20be\x20under-covered\x20by\x20the\x20fund\x20ceiling.'});else{const aa=computeFundListingWall(R,a9),ab=R<=0x0n?'depleted':classifyFundWaterLevelUnits(R,aa['largestListing']*0x3n)??'unknown';h['push']({'dimension':'fund_safety','key':'fund.listing_wall','state':'present','value':{'fund':R['toString'](),'coverCap':aa['coverCap']['toString'](),'largestListing':aa['largestListing']['toString'](),'blockedCount':aa['blocked']['length'],'blockedNames':aa['blocked']['slice'](0x0,0x3)['map'](ac=>ac['name'])['filter'](Boolean),'walled':aa['walled'],'waterLevel':ab},'provenance':snapProvenance([g,'Service.sales','Service.compensation_fund']),'evidence':aa['blocked']['length']===0x0?R===0x0n?'No\x20compensation\x20fund\x20—\x20no\x20fund\x20ceiling\x20to\x20be\x20under-covered\x20against;\x20'+a9['length']+'\x20sellable\x20listing(s)\x20stay\x20orderable\x20(zero-fund\x20payout\x20protection\x20is\x20disclosed\x20at\x20the\x20fund\x20read).':'Every\x20sellable\x20listing\x20('+a9['length']+')\x20is\x20priced\x20at\x20or\x20under\x20the\x20live\x20per-order\x20ceiling\x20('+aa['coverCap']['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+')\x20—\x20no\x20listing\x20is\x20under-covered.':'The\x20fund\x20covers\x20single\x20orders\x20up\x20to\x20'+aa['coverCap']['toString']()+'\x20base\x20units'+(r?'\x20in\x20'+r:'')+';\x20'+aa['blocked']['length']+'\x20of\x20'+a9['length']+'\x20sellable\x20listing(s)\x20are\x20priced\x20ABOVE\x20it\x20and\x20check\x20out\x20UNDER-COVERED\x20(largest\x20first:\x20'+aa['blocked']['map'](ac=>ac['name']||'(unnamed\x20listing)')['join'](',\x20')+')\x20—\x20the\x20order\x20proceeds\x20with\x20a\x20buy-time\x20warning\x20(拍板⑤\x20dm-mtw-261027\x20demoted\x20the\x20refusal),\x20but\x20a\x20max-award\x20ruling\x20aborts\x20code\x2027\x20until\x20the\x20fund\x20is\x20topped\x20to\x203x\x20their\x20price\x20or\x20the\x20price\x20is\x20cut.'});}}if(!o)k('transparency','gap'),h['push']({'dimension':'transparency','key':'transparency.profile','state':'gap','provenance':snapProvenance([g]),'evidence':'Transparency\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{const ac=typeof q['setting_lock_duration']==='number'?q['setting_lock_duration']:Number(toBigInt(q['setting_lock_duration'])),ae=flag(q['bPublished']);k('transparency','present'),h['push']({'dimension':'transparency','key':'transparency.profile','state':'present','value':{'description':typeof q['description']==='string'?q['description']:'','location':typeof q['location']==='string'?q['location']:'','settingLockDuration':Number['isFinite'](ac)?ac:0x0,'published':ae,'paused':flag(q['bPaused'])},'provenance':snapProvenance([g,'Service.bPublished','Service.setting_lock_duration']),'findingIds':f['some'](af=>af['id']==='R6:'+g)?['R6:'+g]:undefined,'evidence':'Service\x20profile:\x20description\x20'+(typeof q['description']==='string'&&q['description']!==''?'provided':'not\x20provided')+',\x20location\x20'+(typeof q['location']==='string'&&q['location']!==''?'provided':'not\x20provided')+',\x20service\x20lock\x20'+ac+'\x20ms,\x20'+(ae?'published':'unpublished')+'.'});}for(const af of['risk_workflow','risk_fund','risk_trust','risk_behavior']){const ag=RISK_RULE_SOURCES[af];let ah='present',ai,aj=-0x1;for(const aq of ag['slots']){const ar=i['get'](aq)??'gap';STATE_RANK[ar]>aj&&(aj=STATE_RANK[ar],ah=ar,ai=aq);}let ak;if(ah==='gap')ak='windowed';else{if(ah==='empty')ak='bounded';else ak=ai&&j['get'](ai)||'exact';}const al=g['toLowerCase'](),am=new Set([al]);{const as=[al];while(as['length']>0x0){const at=as['shift']();for(const au of b['graph']['out']['get'](at)??[]){if(au['family']!=='F'&&au['family']!=='W'&&au['family']!=='M')continue;const av=au['to']['toLowerCase']();!am['has'](av)&&(am['add'](av),as['push'](av));}}}const an=(aw,ax)=>{if(!aw['startsWith'](ax+':'))return![];const ay=aw['slice'](ax['length']+0x1)['toLowerCase'](),az=ay['split']('#')[0x0]['split']('|')[0x0],aA=az['split'](':');if(aA['some'](aB=>aB['length']===0x0))return!![];return aA['some'](aB=>am['has'](aB));},ao=f['filter'](aw=>ag['ruleIds']['some'](ax=>an(aw['id'],ax))),ap=f['filter'](aw=>ag['ruleIds']['some'](ax=>aw['id']['startsWith'](ax+':')&&!an(aw['id'],ax)))['length'];h['push']({'dimension':af,'key':af+'.findings','state':ah,'value':{'findings':ao['map'](aw=>({'id':aw['id'],'severity':aw['severity'],'title':aw['title']})),'where':ao['map'](aw=>findingWhere(aw))},'provenance':{'path':[g,...ag['slots']],'retention':'derived','confidence':ak},'findingIds':ao['map'](aw=>aw['id']),'evidence':ah==='gap'?'Input\x20evidence\x20has\x20fetch\x20gaps;\x20the\x20risk\x20conclusion\x20is\x20unverifiable.':ah==='empty'?'Input\x20evidence\x20is\x20configured-empty;\x20the\x20risk\x20rules\x20are\x20not\x20applicable.':ao['length']>0x0?ao['length']+'\x20structural\x20risk\x20finding(s)\x20on\x20this\x20object,\x20from\x20the\x20analyzer\x20registry.'+(ap>0x0?'\x20'+ap+'\x20further\x20finding(s)\x20on\x20NEIGHBOR\x20objects\x20(reachable\x20only\x20through\x20shared\x20reverse/social\x20edges)\x20are\x20folded\x20here\x20as\x20a\x20count\x20—\x20they\x20do\x20not\x20belong\x20to\x20this\x20object\x27s\x20score\x20(N-K5).':''):ap>0x0?'No\x20risk\x20fired\x20on\x20this\x20object\x27s\x20own\x20structure;\x20'+ap+'\x20finding(s)\x20on\x20neighbor\x20objects\x20(shared\x20edges\x20only)\x20are\x20excluded\x20from\x20the\x20score\x20(N-K5).':'No\x20risk\x20fired\x20on\x20this\x20object;\x20input\x20evidence\x20slots\x20are\x20fully\x20materialized.'});}const S=[];for(const aw of b['visibleNodes']){const ax=profileOf(b,aw);if(!ax)continue;const ay=Array['isArray'](ax['profileRecords'])?ax['profileRecords']:undefined;S['push']({'nodeId':aw,...typeof ax['registeredAt']==='number'?{'registeredAt':ax['registeredAt']}:{},'hasDescription':!!ax['hasDescription']||typeof ax['description']==='string','recordCount':typeof ax['recordCount']==='number'?ax['recordCount']:ay?.['length']??0x0,...typeof ax['description']==='string'?{'description':ax['description']}:{},...ay?{'profileRecords':ay}:{}});}const T=REQUIRED_SLOTS['length'],U=REQUIRED_SLOTS['filter'](({slot:az})=>i['get'](az)==='present')['length'],V=T===0x0?0x64:Math['round'](U/T*0x64);return{'target':g,'role':String(b['role']),'facts':h,'slots':REQUIRED_SLOTS['map'](({slot:az,label:aA,gloss:aB})=>({'slot':az,'label':aA,'gloss':aB,'required':!![],'state':i['get'](az)??'gap','facts':[...SLOT_FACTS[az]??[]]})),'completeness':V,'profiles':S};}
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology}from'./expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'./fixtures.js';import{buildViewport}from'./viewport.js';import{runAnalyzers}from'./analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'./strategy.js';import{projectEvaluationFacts}from'./facts.js';async function evalFacts(a,b){const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=runAnalyzers(e);return projectEvaluationFacts(e,b,f);}async function evalFactsWithFindings(a,b,c){const d=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),e=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':d['edges'],'budget':d['budget']}),f=buildViewport(e,b,'neutral');return projectEvaluationFacts(f,b,c);}const slotOf=(a,b)=>a['slots']['find'](c=>c['slot']===b),factOf=(a,b)=>{const c=a['facts']['find'](d=>d['key']===b);return expect(c,'fact\x20'+b+'\x20must\x20exist')['toBeDefined'](),c;},EMPTY_STATE={'objects':new Map(),'keyedFields':new Map(),'tables':new Map(),'events':new Map()};describe('facts\x20—\x20fully\x20hooked\x20service\x20(TR-13.1)',()=>{it('classifies\x20every\x20required\x20slot\x20present\x20with\x20material\x20facts',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'reviews')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x64);const b=factOf(a,'arbitration.binding');expect(b['state'])['toBe']('present'),expect(b['value'])['toMatchObject']([{'id':FULL['arbsvc']['toLowerCase'](),'paused':![],'votingGuards':0x1,'usageGuard':!![]}]),expect(b['provenance']['path'])['toContain']('service.arbitration'),expect(factOf(a,'reviews.votes')['value'])['toMatchObject']({'total':0x2,'like':0x1,'dislike':0x1,'favor':0x1}),expect(factOf(a,'fulfillment.orders')['value'])['toMatchObject']({'observed':0x2,'completed':0x1,'inProgress':0x1,'unknown':0x0,'windowedAmount':'1000000'});const c=factOf(a,'fulfillment.workflow');expect(c['state'])['toBe']('present'),expect(c['value'])['toMatchObject']({'machine':FULL['mac']['toLowerCase'](),'nodes':0x3}),expect(factOf(a,'fund.compensation')['value'])['toMatchObject']({'fund':'0'});const d=factOf(a,'fund.exposure');expect(d['value'])['toMatchObject']({'windowedCount':0x2,'windowedAmount':'1000000','largestAmount':'1000000','neededCeiling':'3000000','coverageMet':![]}),expect(d['findingIds'])['toEqual'](['R2:'+FULL['svc']['toLowerCase']()]),expect(factOf(a,'transparency.profile')['findingIds'])['toEqual'](['R6:'+FULL['svc']['toLowerCase']()]);}),it('reuses\x20analyzer\x20findings\x20by\x20reference\x20in\x20the\x20risk\x20dimensions',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=factOf(a,'risk_trust.findings');expect(b['state'])['toBe']('present'),expect(b['findingIds']['some'](g=>g['startsWith']('R1:')))['toBe'](!![]);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('present'),expect(c['findingIds'])['toContain']('R2:'+FULL['svc']['toLowerCase']());const d=factOf(a,'risk_behavior.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual']([]);const e=factOf(a,'risk_workflow.findings');expect(e['state'])['toBe']('present'),expect(e['evidence'])['toContain']('fully\x20materialized');});}),describe('facts\x20—\x20configured-empty\x20shell\x20merchant\x20(TR-13.1)',()=>{it('scores\x20configured\x20absence\x20as\x20empty\x20and\x20the\x20dangling\x20machine\x20as\x20gap',async()=>{const a=await evalFacts(gapServiceState(),GAP['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('empty'),expect(factOf(a,'arbitration.binding')['state'])['toBe']('empty'),expect(slotOf(a,'reviews')['state'])['toBe']('empty'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('gap'),expect(factOf(a,'fulfillment.workflow')['evidence'])['toContain']('fetch\x20gap'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x39),expect(factOf(a,'risk_workflow.findings')['state'])['toBe']('gap'),expect(factOf(a,'risk_workflow.findings')['provenance']['confidence'])['toBe']('windowed'),expect(factOf(a,'risk_trust.findings')['state'])['toBe']('empty');});}),describe('facts\x20—\x20truncated\x20order\x20window\x20(TR-13.1)',()=>{it('marks\x20the\x20truncated\x20window\x20slot\x20gap\x20and\x20cascades\x20into\x20risk_fund',async()=>{const a=await evalFacts(truncatedServiceState(),FULL['svc']);expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('gap');const b=factOf(a,'fulfillment.orders');expect(b['state'])['toBe']('gap'),expect(b['provenance']['window'])['toBeDefined'](),expect(b['value']['observed'])['toBeGreaterThan'](0x0);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('gap'),expect(c['evidence'])['toContain']('unverifiable'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x56);});}),describe('facts\x20—\x20fund\x20listing\x20wall\x20(F-BS-59)',()=>{it('zero\x20fund\x20never\x20walls:\x20the\x20priced\x20listing\x20reads\x20present\x20with\x20walled=false',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=factOf(a,'fund.listing_wall');expect(b['state'])['toBe']('present'),expect(b['value'])['toMatchObject']({'fund':'0','coverCap':'0','largestListing':'1000000','blockedCount':0x0,'blockedNames':[],'walled':![]}),expect(b['evidence'])['toContain']('never\x20gated');}),it('walls\x20the\x20listings\x20priced\x20above\x20fund/3,\x20largest\x20first,\x20ignoring\x20suspended\x20rows',async()=>{const a=fullServiceState(),b=a['objects']['get'](FULL['svc']['toLowerCase']());b['data']['compensation_fund']='1000000',b['data']['sales']=[{'name':'top','price':'900000','suspension':![]},{'name':'low','price':'100000','suspension':![]},{'name':'off','price':'9000000','suspension':!![]}];const c=await evalFacts(a,FULL['svc']),d=factOf(c,'fund.listing_wall');expect(d['state'])['toBe']('present'),expect(d['value'])['toMatchObject']({'fund':'1000000','coverCap':'333333','largestListing':'900000','blockedCount':0x1,'blockedNames':['top'],'walled':!![]}),expect(d['evidence'])['toContain']('top'),expect(d['evidence'])['toContain']('cannot\x20be\x20checked\x20out');}),it('an\x20empty\x20catalog\x20reads\x20verified-absent\x20(no\x20listing\x20can\x20be\x20walled)',async()=>{const a=await evalFacts(gapServiceState(),GAP['svc']),b=factOf(a,'fund.listing_wall');expect(b['state'])['toBe']('empty'),expect(b['evidence'])['toContain']('No\x20sellable\x20priced\x20listing');});}),describe('facts\x20—\x20completeness\x20(TR-13.2)',()=>{it('is\x20an\x20integer\x200..100\x20consistent\x20with\x20present/required\x20on\x20every\x20fixture',async()=>{const a=await Promise['all']([evalFacts(fullServiceState(),FULL['svc']),evalFacts(gapServiceState(),GAP['svc']),evalFacts(truncatedServiceState(),FULL['svc'])]);for(const b of a){expect(Number['isInteger'](b['completeness']))['toBe'](!![]),expect(b['completeness'])['toBeGreaterThanOrEqual'](0x0),expect(b['completeness'])['toBeLessThanOrEqual'](0x64);const c=b['slots']['filter'](e=>e['required']&&e['state']==='present')['length'],d=b['slots']['filter'](e=>e['required'])['length'];expect(b['completeness'])['toBe'](Math['round'](c/d*0x64));for(const e of b['facts']){expect(e['provenance']['path']['length'])['toBeGreaterThan'](0x0),expect(e['provenance']['retention'])['toBeDefined'](),expect(e['evidence']['length'])['toBeGreaterThan'](0x0);if(e['dimension']['startsWith']('risk_'))continue;const g=e['dimension']==='fulfillment'?e['key']['includes']('workflow')?'fulfillment_workflow':'fulfillment_orders':e['dimension'];expect(slotOf(b,g)['facts'])['toContain'](e['key']);}}}),it('collapses\x20to\x200\x20with\x20all\x20slots\x20gap\x20when\x20the\x20target\x20is\x20missing',async()=>{const a=await evalFacts(EMPTY_STATE,FULL['svc']);expect(a['slots']['every'](b=>b['state']==='gap'))['toBe'](!![]),expect(a['completeness'])['toBe'](0x0),expect(factOf(a,'risk_behavior.findings')['state'])['toBe']('gap');});}),describe('facts\x20—\x20entity\x20profile\x20attributes',()=>{it('projects\x20viewport-cropped\x20payloads;\x20absence\x20yields\x20no\x20entry',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=a['profiles']['map'](e=>e['nodeId']);expect(b)['toContain'](FULL['supplier']['toLowerCase']());const c=a['profiles']['find'](e=>e['nodeId']===FULL['supplier']['toLowerCase']());expect(c['description'])['toBe']('Acme\x20logistics\x20co.'),expect(c['registeredAt'])['toBe'](0x18bcfe57b88),expect(c['recordCount'])['toBe'](0x1),expect(c['profileRecords'])['toEqual']([{'name':'region','valueType':0x1,'value':'cn-east'}]);const d=a['profiles']['find'](e=>e['nodeId']===FULL['member']['toLowerCase']());expect(d['hasDescription'])['toBe'](!![]),expect(d['recordCount'])['toBe'](0x0),expect(b)['not']['toContain'](FULL['buyer']['toLowerCase']());});}),describe('facts\x20—\x20N-K5\x20own-scope\x20partition\x20folds\x20neighbor\x20findings',()=>{const a='0x1549f8aa00000000000000000000000000000000000000000000000000000000',b=c=>({'id':'R4:'+c+':accepted→completed','kind':'risk','severity':'medium','title':'Workflow\x20single\x20point:\x20the\x20only\x20Forward\x20before\x20a\x20terminal\x20state\x20has\x20a\x20single\x20operator\x20and\x20no\x20fallback\x20Guard','path':[c,'machine.node','wf.transition','accepted→completed'],'confidence':'exact','roles':['neutral'],'detail':'synthetic\x20single-point\x20finding\x20for\x20the\x20scope\x20test','suggestion':'add\x20a\x20fallback\x20operator'});it('scores\x20only\x20own-machine\x20R4\x20findings;\x20the\x20foreign\x20machine\x27s\x20identical\x20finding\x20is\x20folded\x20as\x20neighbor\x20count',async()=>{const c=await evalFactsWithFindings(fullServiceState(),FULL['svc'],[b(FULL['mac']['toLowerCase']()),b(a)]),d=factOf(c,'risk_workflow.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual'](['R4:'+FULL['mac']['toLowerCase']()+':accepted→completed']);const e=d['value'];expect(e['findings'])['toHaveLength'](0x1),expect(e['findings'][0x0]['id'])['toBe']('R4:'+FULL['mac']['toLowerCase']()+':accepted→completed'),expect(d['evidence'])['toContain']('1\x20further\x20finding(s)\x20on\x20NEIGHBOR\x20objects'),expect(d['evidence'])['toContain']('do\x20not\x20belong\x20to\x20this\x20object\x27s\x20score');}),it('an\x20all-neighbor\x20finding\x20set\x20matches\x20nothing\x20and\x20reports\x20the\x20folded\x20count\x20on\x20a\x20clean\x20own\x20structure',async()=>{const c=await evalFactsWithFindings(fullServiceState(),FULL['svc'],[b(a)]),d=factOf(c,'risk_workflow.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual']([]),expect(d['evidence'])['toContain']('No\x20risk\x20fired\x20on\x20this\x20object'),expect(d['evidence'])['toContain']('1\x20finding(s)\x20on\x20neighbor\x20objects');});});
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology}from'./expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'./fixtures.js';import{buildViewport}from'./viewport.js';import{runAnalyzers}from'./analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'./strategy.js';import{projectEvaluationFacts}from'./facts.js';async function evalFacts(a,b){const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=runAnalyzers(e);return projectEvaluationFacts(e,b,f);}async function evalFactsWithFindings(a,b,c){const d=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),e=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':d['edges'],'budget':d['budget']}),f=buildViewport(e,b,'neutral');return projectEvaluationFacts(f,b,c);}const slotOf=(a,b)=>a['slots']['find'](c=>c['slot']===b),factOf=(a,b)=>{const c=a['facts']['find'](d=>d['key']===b);return expect(c,'fact\x20'+b+'\x20must\x20exist')['toBeDefined'](),c;},EMPTY_STATE={'objects':new Map(),'keyedFields':new Map(),'tables':new Map(),'events':new Map()};describe('facts\x20—\x20fully\x20hooked\x20service\x20(TR-13.1)',()=>{it('classifies\x20every\x20required\x20slot\x20present\x20with\x20material\x20facts',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'reviews')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x64);const b=factOf(a,'arbitration.binding');expect(b['state'])['toBe']('present'),expect(b['value'])['toMatchObject']([{'id':FULL['arbsvc']['toLowerCase'](),'paused':![],'votingGuards':0x1,'usageGuard':!![]}]),expect(b['provenance']['path'])['toContain']('service.arbitration'),expect(factOf(a,'reviews.votes')['value'])['toMatchObject']({'total':0x2,'like':0x1,'dislike':0x1,'favor':0x1}),expect(factOf(a,'fulfillment.orders')['value'])['toMatchObject']({'observed':0x2,'completed':0x1,'inProgress':0x1,'unknown':0x0,'windowedAmount':'1000000'});const c=factOf(a,'fulfillment.workflow');expect(c['state'])['toBe']('present'),expect(c['value'])['toMatchObject']({'machine':FULL['mac']['toLowerCase'](),'nodes':0x3}),expect(factOf(a,'fund.compensation')['value'])['toMatchObject']({'fund':'0'});const d=factOf(a,'fund.exposure');expect(d['value'])['toMatchObject']({'windowedCount':0x2,'windowedAmount':'1000000','largestAmount':'1000000','neededCeiling':'3000000','coverageMet':![]}),expect(d['findingIds'])['toEqual'](['R2:'+FULL['svc']['toLowerCase']()]),expect(factOf(a,'transparency.profile')['findingIds'])['toEqual'](['R6:'+FULL['svc']['toLowerCase']()]);}),it('reuses\x20analyzer\x20findings\x20by\x20reference\x20in\x20the\x20risk\x20dimensions',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=factOf(a,'risk_trust.findings');expect(b['state'])['toBe']('present'),expect(b['findingIds']['some'](g=>g['startsWith']('R1:')))['toBe'](!![]);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('present'),expect(c['findingIds'])['toContain']('R2:'+FULL['svc']['toLowerCase']());const d=factOf(a,'risk_behavior.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual']([]);const e=factOf(a,'risk_workflow.findings');expect(e['state'])['toBe']('present'),expect(e['evidence'])['toContain']('fully\x20materialized');});}),describe('facts\x20—\x20configured-empty\x20shell\x20merchant\x20(TR-13.1)',()=>{it('scores\x20configured\x20absence\x20as\x20empty\x20and\x20the\x20dangling\x20machine\x20as\x20gap',async()=>{const a=await evalFacts(gapServiceState(),GAP['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('empty'),expect(factOf(a,'arbitration.binding')['state'])['toBe']('empty'),expect(slotOf(a,'reviews')['state'])['toBe']('empty'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('gap'),expect(factOf(a,'fulfillment.workflow')['evidence'])['toContain']('fetch\x20gap'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x39),expect(factOf(a,'risk_workflow.findings')['state'])['toBe']('gap'),expect(factOf(a,'risk_workflow.findings')['provenance']['confidence'])['toBe']('windowed'),expect(factOf(a,'risk_trust.findings')['state'])['toBe']('empty');});}),describe('facts\x20—\x20truncated\x20order\x20window\x20(TR-13.1)',()=>{it('marks\x20the\x20truncated\x20window\x20slot\x20gap\x20and\x20cascades\x20into\x20risk_fund',async()=>{const a=await evalFacts(truncatedServiceState(),FULL['svc']);expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('gap');const b=factOf(a,'fulfillment.orders');expect(b['state'])['toBe']('gap'),expect(b['provenance']['window'])['toBeDefined'](),expect(b['value']['observed'])['toBeGreaterThan'](0x0);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('gap'),expect(c['evidence'])['toContain']('unverifiable'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x56);});}),describe('facts\x20—\x20fund\x20listing\x20wall\x20(F-BS-59)',()=>{it('zero\x20fund\x20never\x20walls:\x20the\x20priced\x20listing\x20reads\x20present\x20with\x20walled=false',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=factOf(a,'fund.listing_wall');expect(b['state'])['toBe']('present'),expect(b['value'])['toMatchObject']({'fund':'0','coverCap':'0','largestListing':'1000000','blockedCount':0x0,'blockedNames':[],'walled':![]}),expect(b['evidence'])['toContain']('No\x20compensation\x20fund');}),it('under-covers\x20the\x20listings\x20priced\x20above\x20fund/3,\x20largest\x20first,\x20ignoring\x20suspended\x20rows',async()=>{const a=fullServiceState(),b=a['objects']['get'](FULL['svc']['toLowerCase']());b['data']['compensation_fund']='1000000',b['data']['sales']=[{'name':'top','price':'900000','suspension':![]},{'name':'low','price':'100000','suspension':![]},{'name':'off','price':'9000000','suspension':!![]}];const c=await evalFacts(a,FULL['svc']),d=factOf(c,'fund.listing_wall');expect(d['state'])['toBe']('present'),expect(d['value'])['toMatchObject']({'fund':'1000000','coverCap':'333333','largestListing':'900000','blockedCount':0x1,'blockedNames':['top'],'walled':!![]}),expect(d['evidence'])['toContain']('top'),expect(d['evidence'])['toContain']('UNDER-COVERED');}),it('an\x20empty\x20catalog\x20reads\x20verified-absent\x20(no\x20listing\x20can\x20be\x20walled)',async()=>{const a=await evalFacts(gapServiceState(),GAP['svc']),b=factOf(a,'fund.listing_wall');expect(b['state'])['toBe']('empty'),expect(b['evidence'])['toContain']('No\x20sellable\x20priced\x20listing');});}),describe('facts\x20—\x20completeness\x20(TR-13.2)',()=>{it('is\x20an\x20integer\x200..100\x20consistent\x20with\x20present/required\x20on\x20every\x20fixture',async()=>{const a=await Promise['all']([evalFacts(fullServiceState(),FULL['svc']),evalFacts(gapServiceState(),GAP['svc']),evalFacts(truncatedServiceState(),FULL['svc'])]);for(const b of a){expect(Number['isInteger'](b['completeness']))['toBe'](!![]),expect(b['completeness'])['toBeGreaterThanOrEqual'](0x0),expect(b['completeness'])['toBeLessThanOrEqual'](0x64);const c=b['slots']['filter'](e=>e['required']&&e['state']==='present')['length'],d=b['slots']['filter'](e=>e['required'])['length'];expect(b['completeness'])['toBe'](Math['round'](c/d*0x64));for(const e of b['facts']){expect(e['provenance']['path']['length'])['toBeGreaterThan'](0x0),expect(e['provenance']['retention'])['toBeDefined'](),expect(e['evidence']['length'])['toBeGreaterThan'](0x0);if(e['dimension']['startsWith']('risk_'))continue;const g=e['dimension']==='fulfillment'?e['key']['includes']('workflow')?'fulfillment_workflow':'fulfillment_orders':e['dimension'];expect(slotOf(b,g)['facts'])['toContain'](e['key']);}}}),it('collapses\x20to\x200\x20with\x20all\x20slots\x20gap\x20when\x20the\x20target\x20is\x20missing',async()=>{const a=await evalFacts(EMPTY_STATE,FULL['svc']);expect(a['slots']['every'](b=>b['state']==='gap'))['toBe'](!![]),expect(a['completeness'])['toBe'](0x0),expect(factOf(a,'risk_behavior.findings')['state'])['toBe']('gap');});}),describe('facts\x20—\x20entity\x20profile\x20attributes',()=>{it('projects\x20viewport-cropped\x20payloads;\x20absence\x20yields\x20no\x20entry',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=a['profiles']['map'](e=>e['nodeId']);expect(b)['toContain'](FULL['supplier']['toLowerCase']());const c=a['profiles']['find'](e=>e['nodeId']===FULL['supplier']['toLowerCase']());expect(c['description'])['toBe']('Acme\x20logistics\x20co.'),expect(c['registeredAt'])['toBe'](0x18bcfe57b88),expect(c['recordCount'])['toBe'](0x1),expect(c['profileRecords'])['toEqual']([{'name':'region','valueType':0x1,'value':'cn-east'}]);const d=a['profiles']['find'](e=>e['nodeId']===FULL['member']['toLowerCase']());expect(d['hasDescription'])['toBe'](!![]),expect(d['recordCount'])['toBe'](0x0),expect(b)['not']['toContain'](FULL['buyer']['toLowerCase']());});}),describe('facts\x20—\x20N-K5\x20own-scope\x20partition\x20folds\x20neighbor\x20findings',()=>{const a='0x1549f8aa00000000000000000000000000000000000000000000000000000000',b=c=>({'id':'R4:'+c+':accepted→completed','kind':'risk','severity':'medium','title':'Workflow\x20single\x20point:\x20the\x20only\x20Forward\x20before\x20a\x20terminal\x20state\x20has\x20a\x20single\x20operator\x20and\x20no\x20fallback\x20Guard','path':[c,'machine.node','wf.transition','accepted→completed'],'confidence':'exact','roles':['neutral'],'detail':'synthetic\x20single-point\x20finding\x20for\x20the\x20scope\x20test','suggestion':'add\x20a\x20fallback\x20operator'});it('scores\x20only\x20own-machine\x20R4\x20findings;\x20the\x20foreign\x20machine\x27s\x20identical\x20finding\x20is\x20folded\x20as\x20neighbor\x20count',async()=>{const c=await evalFactsWithFindings(fullServiceState(),FULL['svc'],[b(FULL['mac']['toLowerCase']()),b(a)]),d=factOf(c,'risk_workflow.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual'](['R4:'+FULL['mac']['toLowerCase']()+':accepted→completed']);const e=d['value'];expect(e['findings'])['toHaveLength'](0x1),expect(e['findings'][0x0]['id'])['toBe']('R4:'+FULL['mac']['toLowerCase']()+':accepted→completed'),expect(d['evidence'])['toContain']('1\x20further\x20finding(s)\x20on\x20NEIGHBOR\x20objects'),expect(d['evidence'])['toContain']('do\x20not\x20belong\x20to\x20this\x20object\x27s\x20score');}),it('an\x20all-neighbor\x20finding\x20set\x20matches\x20nothing\x20and\x20reports\x20the\x20folded\x20count\x20on\x20a\x20clean\x20own\x20structure',async()=>{const c=await evalFactsWithFindings(fullServiceState(),FULL['svc'],[b(a)]),d=factOf(c,'risk_workflow.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual']([]),expect(d['evidence'])['toContain']('No\x20risk\x20fired\x20on\x20this\x20object'),expect(d['evidence'])['toContain']('1\x20finding(s)\x20on\x20neighbor\x20objects');});});
@@ -1 +1 @@
1
- export const RECOVERY_RULES={'insufficient_balance':{'error_code':'insufficient_balance','strategy':'claim_faucet','max_attempts':0x3,'automation':'semi','detail':'1.\x20Testnet:\x20claim\x20WOW\x20from\x20the\x20faucet\x202.\x20Mainnet:\x20transfer\x20ETH/USDT/USDC/WBTC\x20via\x20the\x20ETH\x20mainnet\x20cross-chain\x20bridge\x20(query\x20active\x20EVM\x20account\x20→\x20top\x20up\x20from\x20external\x20wallet\x20→\x20confirm\x20→\x20cross-chain)\x203.\x20Point\x20the\x20user\x20to\x20the\x20live\x20airdrop\x20page\x20(https://wowok.net/airdrop.html)\x20for\x20the\x20current\x20round\x204.\x20Retry\x20original\x20operation.\x20NOTE:\x20this\x20rule\x20is\x20for\x20the\x20SIGNING\x20ACCOUNT\x27s\x20wallet/gas\x20only\x20—\x20an\x20on-chain\x20POOL\x20shortage\x20(reward/allocation)\x20classifies\x20as\x20pool_shortage,\x20never\x20here','user_prompt':'Insufficient\x20balance\x20for\x20gas\x20or\x20operation.\x20How\x20to\x20obtain\x20WOW\x20tokens:\x20(1)\x20Testnet\x20—\x20claim\x20WOW\x20from\x20the\x20faucet\x20(https://faucet.testnet.wowok.net);\x20all\x20merchant\x20and\x20order\x20testing\x20can\x20use\x20WOW\x20as\x20the\x20payment\x20token.\x20(2)\x20Mainnet\x20—\x20transfer\x20ETH\x20/\x20USDT\x20/\x20USDC\x20/\x20WBTC\x20via\x20the\x20ETH\x20mainnet\x20cross-chain\x20bridge:\x20first\x20query\x20the\x20active\x20EVM\x20account\x20(bridge_operation\x20query_active_evm_account,\x20auto-generated\x20on\x20first\x20use),\x20then\x20transfer\x20from\x20an\x20external\x20wallet\x20(e.g.\x20MetaMask)\x20to\x20that\x20address,\x20confirm\x20the\x20balance\x20arrived,\x20and\x20cross-chain\x20to\x20WOW\x20mainnet\x20(bridge_operation\x20cross_chain_evm_to_wow).\x20(3)\x20WOW\x20airdrop:\x20current\x20round\x20status,\x20pool\x20and\x20eligibility\x20are\x20published\x20live\x20at\x20https://wowok.net/airdrop.html\x20(referral:\x20https://wowok.net/refer.html)\x20—\x20open\x20that\x20page\x20rather\x20than\x20assuming\x20a\x20round\x20is\x20live\x20or\x20closed.\x20Query\x20wowok_buildin_info\x20with\x20info=\x27funding\x20guidance\x27\x20for\x20the\x20canonical\x20funding\x20guidance.'},'pool_shortage':{'error_code':'pool_shortage','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'An\x20on-chain\x20POOL\x20cannot\x20cover\x20the\x20operation\x20(reward.move:243\x20abort\x206\x20/\x20'+'allocation.move:509\x20abort\x207)\x20—\x20a\x20pool\x20funding\x20problem,\x20NOT\x20the\x20caller\x27s\x20wallet;\x20a\x20faucet\x20claim\x20will\x20NOT\x20help\x20and\x20re-sending\x20the\x20rail\x20unchanged\x20changes\x20nothing.\x201.\x20Reward\x20pool:\x20the\x20reward\x20ISSUER\x20tops\x20it\x20up\x20with\x20reward\x20coin_add\x20(permission\x20153)\x20—\x20the\x20claim\x20key\x20slot\x20is\x20written\x20BEFORE\x20the\x20balance\x20assert\x20and\x20the\x20abort\x20rolls\x20it\x20back,\x20so\x20NOTHING\x20was\x20consumed;\x20the\x20identical\x20claim\x20succeeds\x20after\x20the\x20top-up\x20(mainnet-proven,\x20T14).\x202.\x20Allocation\x20pool:\x20the\x20payer\x20side\x20funds\x20the\x20order/allocation\x20first\x20(order\x20renew,\x20payment\x20create\x20into\x20the\x20allocation),\x20then\x20re-runs\x20the\x20rail;\x20if\x20the\x20pool\x20is\x20drained\x20because\x20the\x20rail\x20ALREADY\x20paid\x20(balance\x200,\x20once-slot\x20consumed),\x20verify\x20via\x20the\x20Payment\x20record\x20instead\x20of\x20retrying.\x203.\x20As\x20the\x20BUYER:\x20report\x20the\x20shortage\x20to\x20the\x20merchant\x20—\x20never\x20fund\x20a\x20pool\x20you\x20do\x20not\x20own','user_prompt':'The\x20on-chain\x20pool\x20backing\x20this\x20operation\x20is\x20short\x20of\x20funds.\x20The\x20pool\x27s\x20owner\x20must\x20top\x20it\x20up\x20(reward\x20coin_add\x20/\x20allocation\x20funding)\x20—\x20a\x20faucet\x20claim\x20will\x20not\x20help.\x20As\x20the\x20buyer,\x20ask\x20the\x20merchant\x20to\x20fund\x20the\x20pool.'},'stock_exhausted':{'error_code':'stock_exhausted','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'Merchant-side\x20inventory\x20shortfall\x20(Move\x20service:16\x20E_STOCK_NOT_ENOUGH)\x20—\x20NOT\x20a\x20buyer\x20balance\x20problem,\x20so\x20a\x20faucet\x20claim\x20will\x20NOT\x20help.\x201.\x20Reduce\x20the\x20purchase\x20quantity\x20to\x20the\x20item\x27s\x20remaining\x20stock\x202.\x20Pick\x20another\x20sale\x20item\x203.\x20Ask\x20the\x20merchant\x20to\x20restock,\x20then\x20retry','user_prompt':'The\x20sale\x20item\x27s\x20stock\x20is\x20exhausted\x20for\x20the\x20requested\x20quantity.\x20Reduce\x20the\x20quantity,\x20choose\x20another\x20item,\x20or\x20ask\x20the\x20merchant\x20to\x20restock.'},'sale_suspended':{'error_code':'sale_suspended','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'The\x20merchant\x20suspended\x20this\x20sale\x20item\x20(Move\x20service:34\x20E_SALE_SUSPENDED).\x201.\x20Pick\x20another\x20(non-suspended)\x20item\x202.\x20Contact\x20the\x20merchant\x20to\x20resume\x20the\x20sale,\x20then\x20retry','user_prompt':'The\x20sale\x20item\x20is\x20suspended\x20by\x20the\x20merchant.\x20Please\x20choose\x20another\x20item\x20or\x20contact\x20the\x20merchant.'},'discount_invalid':{'error_code':'discount_invalid','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'The\x20discount\x20is\x20outside\x20its\x20[time_start,\x20time_end]\x20validity\x20window\x20(Move\x20service:35\x20E_DISCOUNT_TIME_INVALID).\x201.\x20Retry\x20without\x20the\x20discount\x202.\x20Ask\x20the\x20merchant\x20for\x20a\x20fresh\x20discount,\x20then\x20retry','user_prompt':'The\x20discount\x20is\x20not\x20valid\x20at\x20the\x20current\x20time\x20(outside\x20its\x20validity\x20window).\x20Buy\x20without\x20the\x20discount\x20or\x20ask\x20the\x20merchant\x20for\x20a\x20new\x20one.'},'rate_limit':{'error_code':'rate_limit','strategy':'retry','max_attempts':0x5,'automation':'full','detail':'Rate\x20limit\x20hit\x20(HTTP\x20429).\x20Exponential\x20backoff\x20retry:\x202s\x20/\x204s\x20/\x208s\x20/\x2016s\x20/\x2032s.\x20Avoid\x20parallel\x20calls\x20while\x20the\x20limit\x20window\x20is\x20active.'},'gas_exceeded':{'error_code':'gas_exceeded','strategy':'adjust_params','max_attempts':0x3,'automation':'semi','detail':'Gas\x20budget\x20exceeded.\x201.\x20Increase\x20the\x20gas_budget\x20parameter\x202.\x20Reduce\x20the\x20operation\x20size\x20(fewer\x20objects\x20per\x20transaction)\x203.\x20Retry\x20the\x20original\x20operation','user_prompt':'Gas\x20budget\x20exceeded.\x20Increase\x20the\x20gas\x20budget\x20or\x20reduce\x20the\x20operation\x20size,\x20then\x20retry.'},'insufficient_gas':{'error_code':'insufficient_gas','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'Gas\x20exhausted\x20—\x20the\x20transaction\x20failed\x20deterministically\x20and\x20did\x20NOT\x20commit\x20on-chain\x20(no\x20state\x20changed;\x20commit-state\x20verification\x20is\x20NOT\x20needed).\x201.\x20Raise\x20the\x20gas_budget\x20parameter\x20above\x20the\x20failed\x20transaction\x27s\x20gas_used\x202.\x20If\x20the\x20account\x20balance\x20cannot\x20cover\x20any\x20budget,\x20fund\x20the\x20signing\x20account\x20with\x20gas\x20tokens\x20first\x203.\x20Resubmit\x20as\x20a\x20FRESH\x20call\x20—\x20do\x20NOT\x20replay\x20the\x20same\x20transaction','user_prompt':'The\x20transaction\x20ran\x20out\x20of\x20gas\x20and\x20did\x20not\x20commit\x20on-chain.\x20Increase\x20the\x20gas\x20budget\x20(or\x20fund\x20the\x20account\x20with\x20gas)\x20and\x20submit\x20a\x20fresh\x20transaction\x20—\x20retrying\x20unchanged\x20will\x20fail\x20the\x20same\x20way.'},'bcs_error':{'error_code':'bcs_error','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'BCS\x20serialization/deserialization\x20error\x20—\x20a\x20parameter\x20does\x20not\x20match\x20the\x20expected\x20type/structure.\x201.\x20Query\x20the\x20operation\x20schema\x20(schema_query)\x202.\x20Fix\x20the\x20offending\x20parameter\x20type\x20(e.g.\x20BigInt\x20vs\x20number,\x20vector\x20element\x20type)\x203.\x20Retry','user_prompt':'A\x20parameter\x20failed\x20serialization.\x20Check\x20the\x20parameter\x20types\x20against\x20the\x20schema\x20and\x20retry.'},'signature_error':{'error_code':'signature_error','strategy':'switch_account','max_attempts':0x2,'automation':'semi','detail':'Signature\x20verification\x20failed.\x201.\x20Verify\x20the\x20account\x20is\x20not\x20suspended\x202.\x20Check\x20the\x20network\x20matches\x20the\x20account\x27s\x203.\x20Switch\x20to\x20a\x20healthy\x20account\x20and\x20retry','user_prompt':'Signature\x20verification\x20failed.\x20The\x20account\x20may\x20be\x20suspended\x20or\x20misconfigured.\x20Switch\x20accounts\x20or\x20check\x20the\x20configuration\x20and\x20retry.'},'config_error':{'error_code':'config_error','strategy':'escalate_human','max_attempts':0x1,'automation':'manual','detail':'Local\x20configuration\x20error\x20(network\x20not\x20specified,\x20persistent\x20storage\x20not\x20set).\x201.\x20Show\x20the\x20user\x20which\x20configuration\x20is\x20missing\x202.\x20Guide\x20the\x20user\x20through\x20the\x20account_operation/config\x20setup\x203.\x20Retry\x20after\x20the\x20user\x20fixes\x20it','user_prompt':'Local\x20configuration\x20is\x20incomplete.\x20Please\x20finish\x20the\x20account/network\x20setup\x20and\x20retry.'},'wip_verification_failed':{'error_code':'wip_verification_failed','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'WIP\x20file\x20not\x20publicly\x20reachable\x20/\x20hash\x20mismatch.\x201.\x20Upload\x20via\x20the\x20wip\x20storage\x20service\x20(wip_file\x20type=\x27upload\x27\x20—\x20official\x20free\x20store\x20or\x20storage=\x27custom\x27)\x202.\x20Or\x20deploy\x20to\x20a\x20public\x20URL\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20own\x20site)\x203.\x20Update\x20the\x20sale\x27s\x20wip\x20URL\x204.\x20Re-run\x20the\x20operation','user_prompt':'The\x20WIP\x20file\x20could\x20not\x20be\x20verified\x20from\x20a\x20public\x20URL.\x20Upload\x20it\x20with\x20wip_file\x20type=\x27upload\x27\x20(official\x20free\x20store\x20or\x20your\x20own\x20service)\x20or\x20deploy\x20it\x20(GitHub\x20Pages\x20/\x20IPFS),\x20update\x20the\x20sale\x27s\x20WIP\x20URL,\x20and\x20retry.'},'wip_storage_unavailable':{'error_code':'wip_storage_unavailable','strategy':'retry','max_attempts':0x3,'automation':'full','detail':'Transient\x20wip\x20storage\x20transport\x20failure.\x201.\x20Retry\x20the\x20same\x20request\x20with\x20bounded\x20backoff\x202.\x20Large\x20WIP\x20files\x20are\x20network-sensitive:\x20compress\x20images\x20before\x20generate\x20(each\x20image\x20<=\x202MB,\x20total\x20<=\x2010MB)\x203.\x20Check\x20connectivity\x20to\x20the\x20storage\x20base\x20URL\x20if\x20retries\x20keep\x20failing','user_prompt':'The\x20wip\x20storage\x20request\x20failed\x20due\x20to\x20a\x20network\x20problem.\x20Retry\x20the\x20upload;\x20if\x20it\x20keeps\x20failing,\x20reduce\x20the\x20file\x20size\x20or\x20check\x20connectivity.'},'wip_storage_rejected':{'error_code':'wip_storage_rejected','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'WIP\x20storage\x20service\x20rejected\x20the\x20request\x20(HTTP\x204xx\x20—\x20deterministic\x20client-side\x20fault,\x20retrying\x20unchanged\x20fails\x20identically).\x20400:\x20malformed\x20body\x20or\x20failed\x20WIP\x20validation\x20—\x20re-generate\x20via\x20wip_file\x20type=\x27generate\x27\x20401:\x20re-sign\x20with\x20a\x20fresh\x20nonce\x20inside\x20the\x20timestamp\x20window\x20403:\x20check\x20storage\x20service\x20configuration\x20404:\x20file\x20does\x20not\x20exist\x20—\x20re-upload\x20409:\x20quota\x20—\x20delete\x20old\x20files\x20via\x20wip_file\x20type=\x27list\x27\x20then\x20delete\x20413:\x20compress\x20images\x20(each\x20<=\x202MB,\x20total\x20<=\x2010MB)\x20and\x20regenerate','user_prompt':'The\x20WIP\x20storage\x20service\x20rejected\x20the\x20request\x20(HTTP\x204xx).\x20Fix\x20the\x20specific\x20fault\x20(re-generate/re-sign/re-upload\x20per\x20the\x20status\x20code)\x20and\x20retry\x20—\x20do\x20not\x20retry\x20unchanged.'},'network_error':{'error_code':'network_error','strategy':'retry','max_attempts':0x5,'automation':'full','detail':'Transport\x20failure\x20(timeout\x20/\x20connection\x20reset\x20/\x20RPC\x20unreachable\x20/\x20HTTP\x205xx\x20gateway\x20error).\x20Exponential\x20backoff\x20retry:\x201s\x20/\x202s\x20/\x204s\x20/\x208s\x20/\x2016s.\x20Switch\x20RPC\x20node\x20if\x20available.\x20READS:\x20a\x20plain\x20retry\x20is\x20safe.\x20FUND-MOVING\x20WRITES:\x20before\x20any\x20resubmission,\x20verify\x20whether\x20the\x20previous\x20attempt\x20landed\x20(query\x20the\x20reported\x20digest\x20directly,\x20or\x20the\x20expected\x20object\x20via\x20the\x20sender\x27s\x20recent\x20on-chain\x20objects\x20/\x20onchain_events)\x20—\x20if\x20it\x20landed,\x20ADOPT\x20it\x20and\x20stop;\x20a\x20blind\x20backoff\x20retry\x20of\x20a\x20landed\x20write\x20moves\x20the\x20funds\x20a\x20second\x20time.'},'submission_unknown':{'error_code':'submission_unknown','strategy':'query_and_retry','max_attempts':0x2,'automation':'semi','detail':'Transport-level\x20failure\x20after\x20the\x20request\x20left\x20the\x20client\x20—\x20the\x20submission\x20state\x20is\x20UNKNOWN\x20and\x20the\x20transaction\x20may\x20already\x20be\x20committed.\x20NEVER\x20auto-retry\x20a\x20write\x20here.\x201.\x20Verify\x20commit\x20state\x20on-chain:\x20query_toolkit\x20for\x20the\x20object\x20this\x20call\x20would\x20create/modify\x20(resolve\x20the\x20reference\x20from\x20the\x20call\x27s\x20own\x20arguments),\x20or\x20onchain_events\x20for\x20the\x20sender\x27s\x20recent\x20transactions.\x202.\x20If\x20the\x20expected\x20object\x20EXISTS,\x20adopt\x20it\x20and\x20continue\x20the\x20workflow\x20(the\x20operation\x20succeeded\x20despite\x20the\x20transport\x20error).\x203.\x20If\x20confirmed\x20ABSENT,\x20resubmit\x20the\x20SAME\x20call\x20once\x20—\x20for\x20a\x20FIRST-EVER\x20transaction\x20on\x20a\x20fresh\x20account\x20make\x20that\x20resubmission\x20with\x20env.no_auto_register=true\x20and\x20SAY\x20SO\x20(the\x20SDK\x20silently\x20appends\x20an\x20entity\x20registration\x20to\x20a\x20first\x20business\x20call;\x20if\x20that\x20appended\x20leg\x20was\x20the\x20failing\x20leg\x20the\x20skip\x20lets\x20the\x20call\x20through\x20—\x20ziroom-mn-261013\x20live\x20case;\x20if\x20the\x20resubmission\x20aborts,\x20the\x20envelope\x20now\x20names\x20the\x20abort\x20—\x20re-enable\x20auto\x20registration\x20and\x20retry).\x204.\x20If\x20the\x20reported\x20digest\x20does\x20not\x20resolve\x20or\x20the\x20failure\x20repeats,\x20STOP\x20looping\x20on\x20digest\x20checks\x20and\x20re-run\x20the\x20SAME\x20call\x20with\x20env.dry_run=true\x20—\x20the\x20simulation\x20surfaces\x20the\x20real\x20failure\x20(exact\x20Move\x20abort)\x20without\x20gas\x20or\x20duplicate\x20risk.\x205.\x20Reads\x20are\x20idempotent\x20—\x20retry\x20immediately.\x206.\x20M-K2\x20replay\x20discipline:\x20a\x20FAILED\x20receipt\x20is\x20final\x20—\x20its\x20digest\x20is\x20consumed\x20and\x20replaying\x20the\x20same\x20bytes\x20returns\x20the\x20same\x20failure\x20forever;\x20fix\x20the\x20cause\x20(usually\x20funding)\x20and\x20build\x20a\x20FRESH\x20transaction.\x20Live\x20mainnet\x20incident\x20behind\x20this\x20rule:\x20an\x20order_new\x20-32603\x20\x27did\x20not\x20complete\x27\x20had\x20committed;\x20the\x20blind\x20retry\x20created\x20a\x20second\x20order\x20with\x20a\x20second\x20full\x20escrow\x20and\x20a\x20second\x20stock\x20decrement','user_prompt':'The\x20request\x20failed\x20at\x20transport\x20level\x20but\x20may\x20have\x20already\x20been\x20committed\x20on-chain.\x20Verify\x20whether\x20the\x20expected\x20object\x20exists\x20(query\x20it)\x20before\x20any\x20retry\x20—\x20a\x20blind\x20retry\x20can\x20duplicate\x20the\x20operation\x20(double\x20escrow).\x20For\x20read\x20operations,\x20a\x20plain\x20retry\x20is\x20safe.'},'transaction_expired':{'error_code':'transaction_expired','strategy':'retry','max_attempts':0x3,'automation':'full','detail':'The\x20transaction\x20expired\x20before\x20execution\x20(epoch\x20boundary\x20or\x20validator/gateway\x20outage)\x20—\x20it\x20did\x20NOT\x20land\x20and\x20nothing\x20was\x20committed.\x20Bounded\x20backoff\x20retry:\x2010s\x20/\x2030s\x20/\x2060s,\x20resubmit\x20the\x20SAME\x20call\x20unchanged.\x20If\x20a\x20dry_run\x20passes\x20while\x20the\x20real\x20call\x20keeps\x20failing,\x20the\x20fault\x20is\x20chain-side\x20—\x20wait\x20it\x20out.\x20Verify\x20with\x20onchain_events\x20if\x20unsure.'},'guard_rejected':{'error_code':'guard_rejected','strategy':'fill_submission','max_attempts':0x2,'automation':'semi','detail':'1.\x20Parse\x20Guard\x20table\x20structure\x202.\x20If\x20the\x20Guard\x20defines\x20submission\x20items,\x20fill\x20them\x20and\x20resubmit\x20with\x20call_with_submission\x203.\x20If\x20it\x20defines\x20none,\x20the\x20rule\x20evaluated\x20false\x20—\x20typical\x20causes:\x20a\x20TIME\x20WINDOW\x20(Clock\x20deadline/opening\x20comparison\x20—\x20this\x20call\x20may\x20sit\x20outside\x20the\x20window,\x20and\x20a\x20mis-oriented\x20comparison\x20inverts\x20it:\x20everything\x20inside\x20rejected,\x20everything\x20after\x20admitted)\x20or\x20an\x20IDENTITY\x20condition\x20(signer/state\x20checks\x20—\x20the\x20caller\x20may\x20not\x20be\x20the\x20address\x20the\x20rule\x20expects);\x20adjust\x20the\x20call\x27s\x20parameters\x20or\x20change\x20the\x20Guard\x20(docs#40)\x204.\x20When\x20the\x20failure\x20is\x20passport\x20E_VERIFY_FAILED\x20and\x20a\x20submission\x20was\x20supplied,\x20the\x20response\x20appends\x20a\x20\x27Guard\x20diagnosis\x20(dry-run)\x27\x20line\x20naming\x20the\x20first\x20failing\x20impact\x20guard\x20—\x20fix\x20that\x20guard\x20first\x205.\x20A\x20TIME-window\x20rejection\x20may\x20simply\x20be\x20EARLY:\x20re-run\x20the\x20SAME\x20call\x20with\x20env.dry_run=true\x20to\x20probe\x20the\x20window\x20for\x20free\x20(guard\x20rejections\x20do\x20NOT\x20consume\x20the\x20total\x20retry\x20budget;\x20only\x20the\x20per-code\x20cap\x20of\x202\x20applies)','user_prompt':'Guard\x20verification\x20rejected.\x20If\x20the\x20Guard\x20defines\x20submission\x20items,\x20fill\x20in\x20the\x20required\x20submission\x20data\x20and\x20resubmit;\x20if\x20it\x20defines\x20none,\x20the\x20Guard\x20rule\x20evaluated\x20false\x20—\x20the\x20usual\x20causes\x20are\x20a\x20time\x20window\x20(this\x20call\x20may\x20be\x20outside\x20the\x20Clock\x20deadline/opening\x20window)\x20or\x20an\x20identity\x20condition\x20(the\x20caller\x20is\x20not\x20the\x20address\x20the\x20rule\x20expects);\x20adjust\x20this\x20call\x27s\x20parameters\x20or\x20change\x20the\x20Guard\x20rule.\x20When\x20the\x20response\x20includes\x20a\x20\x27Guard\x20diagnosis\x20(dry-run)\x27\x20line,\x20it\x20names\x20the\x20first\x20failing\x20impact\x20guard\x20—\x20address\x20that\x20guard\x20first.\x20A\x20time-window\x20rejection\x20may\x20simply\x20be\x20early:\x20probe\x20the\x20window\x20with\x20env.dry_run=true\x20(free\x20—\x20guard\x20rejections\x20do\x20not\x20consume\x20the\x20total\x20retry\x20budget).'},'time_lock_not_elapsed':{'error_code':'time_lock_not_elapsed','strategy':'wait_and_retry','max_attempts':0x1,'automation':'semi','detail':'1.\x20Verify\x20Service\x20is\x20paused\x20(bPaused=true).\x20If\x20not,\x20submit\x20pause=true\x20first.\x202.\x20Wait\x20until\x20paused_time\x20+\x20setting_lock_duration\x20<=\x20current\x20clock.\x203.\x20Retry\x20the\x20original\x20operation.\x20Do\x20NOT\x20recreate\x20the\x20object.','user_prompt':'Service\x20setting_lock_duration\x20has\x20not\x20elapsed\x20since\x20the\x20Service\x20was\x20paused.\x20Please\x20pause\x20the\x20Service\x20if\x20it\x20is\x20not\x20already\x20paused,\x20wait\x20for\x20the\x20lock\x20duration\x20to\x20elapse,\x20then\x20retry.'},'immutable_violation':{'error_code':'immutable_violation','strategy':'recreate','max_attempts':0x1,'automation':'semi','detail':'1.\x20Stop\x20modification\x20attempt\x202.\x20Evaluate\x20creating\x20a\x20new\x20object\x20as\x20replacement\x203.\x20Re-plan\x20affected\x20phases','user_prompt':'Cannot\x20modify\x20an\x20immutable\x20object.\x20A\x20new\x20object\x20must\x20be\x20created\x20as\x20a\x20replacement.\x20Confirm\x20to\x20proceed\x20with\x20recreation.'},'permission_denied':{'error_code':'permission_denied','strategy':'switch_account','max_attempts':0x2,'automation':'semi','detail':'1.\x20Query\x20object\x27s\x20permission_guard\x202.\x20List\x20accounts\x20with\x20permission\x203.\x20Switch\x20account\x20or\x20prompt\x20user\x20to\x20add\x20permission','user_prompt':'Current\x20account\x20lacks\x20permission\x20for\x20this\x20operation.\x20Switch\x20to\x20an\x20authorized\x20account\x20or\x20update\x20the\x20Permission\x20object.'},'object_not_found':{'error_code':'object_not_found','strategy':'query_and_retry','max_attempts':0x3,'automation':'semi','detail':'1.\x20Verify\x20the\x20referenced\x20name/ID\x20spelling\x20(local_mark_list)\x20and\x20that\x20the\x20object\x20exists\x20on\x20the\x20current\x20network\x202.\x20If\x20recently\x20created,\x20re-query\x20the\x20object\x20(may\x20be\x20sync\x20delay)\x203.\x20If\x20truly\x20absent,\x20search\x20for\x20similar\x20objects\x204.\x20Prompt\x20user\x20to\x20reselect','user_prompt':'Referenced\x20object\x20not\x20found.\x20First\x20verify\x20the\x20name/ID\x20spelling\x20and\x20that\x20the\x20object\x20exists\x20on\x20the\x20current\x20network;\x20if\x20it\x20was\x20created\x20recently,\x20this\x20may\x20be\x20a\x20synchronization\x20delay\x20—\x20retry.\x20If\x20the\x20issue\x20persists,\x20please\x20select\x20a\x20valid\x20object.'},'state_conflict':{'error_code':'state_conflict','strategy':'adjust_params','max_attempts':0x2,'automation':'full','detail':'1.\x20Query\x20object\x27s\x20current\x20true\x20state\x202.\x20Update\x20ODG\x20status\x20annotations\x203.\x20Adjust\x20subsequent\x20operations\x20(e.g.,\x20skip\x20completed\x20steps)'},'invalid_parameter':{'error_code':'invalid_parameter','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'1.\x20Query\x20the\x20relevant\x20schema\x202.\x20Auto-fix\x20obvious\x20errors\x20(e.g.,\x20BigInt\x20vs\x20string)\x203.\x20If\x20unfixable,\x20prompt\x20user','user_prompt':'Parameter\x20validation\x20failed.\x20Please\x20check\x20the\x20parameter\x20types\x20and\x20values\x20against\x20the\x20schema\x20and\x20retry.'},'move_abort_unmapped':{'error_code':'move_abort_unmapped','strategy':'stop','max_attempts':0x1,'automation':'manual','detail':'The\x20chain\x27s\x20business\x20logic\x20aborted\x20and\x20the\x20(module,\x20abort\x20code)\x20pair\x20has\x20no\x20local\x20mapping.\x20Read\x20the\x20module\x20and\x20abort\x20code\x20from\x20move_abort_info\x20/\x20the\x20message\x20(rendered\x20as\x20\x27abort\x20(N)\x27),\x20resolve\x20their\x20meaning\x20from\x20the\x20module\x27s\x20documentation\x20or\x20the\x20wowok-tools\x20Skill,\x20fix\x20the\x20business\x20cause,\x20and\x20issue\x20a\x20NEW\x20call.\x20Do\x20NOT\x20restart\x20the\x20server\x20and\x20do\x20NOT\x20retry\x20the\x20identical\x20call\x20—\x20it\x20aborts\x20deterministically.','user_prompt':'The\x20operation\x20was\x20rejected\x20by\x20the\x20chain\x27s\x20business\x20logic\x20and\x20its\x20abort\x20code\x20is\x20not\x20mapped\x20locally.\x20The\x20module\x20name\x20and\x20abort\x20code\x20in\x20the\x20error\x20are\x20authoritative\x20—\x20review\x20them\x20(and\x20the\x20object\x20state\x20via\x20query_toolkit)\x20before\x20adjusting\x20anything.'},'missing_data':{'error_code':'missing_data','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'A\x20guard\x20rule\x20read\x20a\x20keyed\x20table\x20row\x20that\x20does\x20NOT\x20exist\x20(repository.data\x20/\x20oracle\x20entry)\x20and\x20the\x20verifier\x20surfaced\x20it\x20as\x20a\x20location-only\x20fault\x20inside\x20the\x20passport\x20module\x20—\x20no\x20abort\x20code,\x20because\x20the\x20framework\x20cannot\x20express\x20\x27row\x20absent\x27\x20as\x20an\x20abort.\x20This\x20is\x20a\x20DATA\x20problem:\x201.\x20Identify\x20the\x20repository\x20and\x20key\x20the\x20guard\x20rule\x20reads\x20(guard2file\x20/\x20analyze_guard_semantics\x20on\x20the\x20guard\x20source)\x202.\x20Have\x20the\x20row\x27s\x20producer\x20write\x20it\x20(e.g.\x20an\x20oracle\x20timestamp\x20like\x20checkin_ts),\x20or\x20add\x20it\x20with\x20repository\x20data_add\x20(data_add.name\x20must\x20match\x20a\x20policy\x20rule\x20name)\x203.\x20Retry\x20the\x20SAME\x20call\x20unchanged\x20—\x20a\x20dry_run\x20that\x20turns\x20clean\x20after\x20the\x20row\x20exists\x20confirms\x20the\x20diagnosis','user_prompt':'A\x20guard\x20rule\x20references\x20a\x20data\x20row\x20that\x20has\x20not\x20been\x20written\x20yet\x20(location-only\x20fault\x20inside\x20the\x20passport\x20module\x20—\x20NOT\x20a\x20network\x20problem).\x20Identify\x20the\x20repository\x20row\x20the\x20guard\x20expects\x20(guard2file\x20/\x20analyze_guard_semantics),\x20write\x20it\x20with\x20repository\x20data_add\x20(or\x20let\x20its\x20producer\x20write\x20it),\x20then\x20retry.'},'state_not_visible':{'error_code':'state_not_visible','strategy':'wait_and_retry','max_attempts':0x3,'automation':'full','detail':'The\x20state\x20this\x20call\x20needs\x20was\x20JUST\x20written\x20and\x20is\x20not\x20yet\x20visible\x20to\x20reads\x20(write-to-visibility\x20window),\x20or\x20it\x20does\x20not\x20exist\x20at\x20all.\x201.\x20If\x20a\x20write\x20on\x20this\x20order/machine\x20committed\x20within\x20the\x20last\x20few\x20seconds,\x20wait\x20500ms\x20(doubling\x20each\x20attempt)\x20and\x20replay\x20the\x20SAME\x20call\x20UNCHANGED\x20—\x20NEVER\x20edit\x20parameters\x20to\x20\x27fix\x27\x20a\x20visibility\x20window;\x20an\x20aborted\x20call\x20never\x20landed,\x20so\x20the\x20replay\x20cannot\x20double-spend.\x202.\x20If\x20the\x20fault\x20persists\x20past\x20~3\x20attempts\x20(or\x20nothing\x20was\x20just\x20written),\x20the\x20state\x20is\x20deterministically\x20ABSENT\x20—\x20stop\x20retrying:\x20for\x20a\x20forward-info\x20miss\x20query\x20the\x20Machine\x27s\x20node\x20table\x20(onchain_table_data\x20onchain_table_item_machine_node)\x20and\x20use\x20an\x20existing\x20node/next_node/forward\x20triple;\x20for\x20a\x20guard-read\x20repository\x20row\x20follow\x20the\x20missing_data\x20path\x20(write\x20the\x20row).','user_prompt':'A\x20just-committed\x20write\x20is\x20not\x20visible\x20to\x20this\x20read\x20yet.\x20The\x20same\x20call\x20will\x20be\x20replayed\x20after\x20a\x20short\x20wait\x20—\x20no\x20parameter\x20change\x20is\x20needed.\x20If\x20it\x20keeps\x20failing,\x20the\x20required\x20state\x20is\x20genuinely\x20missing\x20and\x20must\x20be\x20created\x20first.'},'unknown':{'error_code':'unknown','strategy':'escalate_human','max_attempts':0x1,'automation':'manual','detail':'1.\x20Report\x20full\x20error\x20context\x20to\x20the\x20user\x202.\x20Escalate\x20to\x20human\x20intervention\x203.\x20Flag\x20for\x20error-classification\x20rule\x20addition','user_prompt':'An\x20unclassified\x20error\x20occurred.\x20Please\x20review\x20the\x20error\x20details\x20and\x20contact\x20support\x20if\x20needed.'}};const operationAttempts=new Map();function getAttemptCount(a,b){const c=operationAttempts['get'](a);if(!c)return 0x0;return c['get'](b)??0x0;}function incrementAttempt(a,b){!operationAttempts['has'](a)&&operationAttempts['set'](a,new Map());const c=operationAttempts['get'](a),d=(c['get'](b)??0x0)+0x1;return c['set'](b,d),d;}const BUDGET_EXEMPT_CODES=new Set(['guard_rejected']);function getBudgetAttempts(a){const b=operationAttempts['get'](a);if(!b)return 0x0;let c=0x0;for(const [d,e]of b){if(!BUDGET_EXEMPT_CODES['has'](d))c+=e;}return c;}export function resetAttempts(a){operationAttempts['delete'](a);}export function recover(a,b,c){const d=RECOVERY_RULES[a]??RECOVERY_RULES['unknown'],e=0x5,f=getBudgetAttempts(b),g=getAttemptCount(b,a);if(d['max_attempts']<=0x1||d['strategy']==='stop')return{'strategy':d['strategy'],'should_retry':![],'max_attempts':d['max_attempts'],'current_attempt':g,'adjusted_params':d['adjusted_params'],'user_prompt':d['user_prompt'],'detail':d['detail']};if(f>=e)return{'strategy':'stop','should_retry':![],'max_attempts':e,'current_attempt':f,'detail':'Total\x20retry\x20limit\x20('+e+')\x20reached\x20for\x20operation\x20'+b+'.\x20Escalating\x20to\x20human\x20intervention.\x20Attempts\x20recorded\x20for\x20this\x20operation\x20id:\x20'+([...(operationAttempts['get'](b)??new Map())['entries']()]['map'](([j,k])=>j+':'+k)['join'](',\x20')||'none')+'.','user_prompt':'Maximum\x20retry\x20attempts\x20reached.\x20Manual\x20intervention\x20required.'};if(g>=d['max_attempts'])return{'strategy':'escalate_human','should_retry':![],'max_attempts':d['max_attempts'],'current_attempt':g,'detail':'Per-error-code\x20retry\x20limit\x20('+d['max_attempts']+')\x20reached\x20for\x20'+a+'.\x20Escalating\x20to\x20human.','user_prompt':'Recovery\x20attempts\x20for\x20'+a+'\x20exhausted.\x20Manual\x20intervention\x20required.'};const h=incrementAttempt(b,a),i={'strategy':d['strategy'],'should_retry':d['automation']==='full'||h<d['max_attempts'],'max_attempts':d['max_attempts'],'current_attempt':h,'adjusted_params':d['adjusted_params'],'user_prompt':d['user_prompt'],'detail':d['detail']};return i['should_retry']&&c?.['retryable']===![]&&a!=='guard_rejected'&&d['strategy']!=='fill_submission'&&d['strategy']!=='query_and_retry'&&(i['should_retry']=![],i['detail']+='\x20NON-RETRYABLE\x20CLASSIFICATION:\x20retrying\x20the\x20IDENTICAL\x20call\x20fails\x20identically\x20—\x20apply\x20the\x20strategy\x20above\x20to\x20fix\x20the\x20cause,\x20then\x20submit\x20a\x20FRESH\x20call.'),i;}export function getBackoffDelay(a){return Math['pow'](0x2,a-0x1)*0x3e8;}
1
+ export const RECOVERY_RULES={'insufficient_balance':{'error_code':'insufficient_balance','strategy':'claim_faucet','max_attempts':0x3,'automation':'semi','detail':'1.\x20Testnet:\x20claim\x20WOW\x20from\x20the\x20faucet\x202.\x20Mainnet:\x20transfer\x20ETH/USDT/USDC/WBTC\x20via\x20the\x20ETH\x20mainnet\x20cross-chain\x20bridge\x20(query\x20active\x20EVM\x20account\x20→\x20top\x20up\x20from\x20external\x20wallet\x20→\x20confirm\x20→\x20cross-chain)\x203.\x20Point\x20the\x20user\x20to\x20the\x20live\x20airdrop\x20page\x20(https://wowok.net/airdrop.html)\x20for\x20the\x20current\x20round\x204.\x20Retry\x20original\x20operation.\x20NOTE:\x20this\x20rule\x20is\x20for\x20the\x20SIGNING\x20ACCOUNT\x27s\x20wallet/gas\x20only\x20—\x20an\x20on-chain\x20POOL\x20shortage\x20(reward/allocation)\x20classifies\x20as\x20pool_shortage,\x20never\x20here','user_prompt':'Insufficient\x20balance\x20for\x20gas\x20or\x20operation.\x20How\x20to\x20obtain\x20WOW\x20tokens:\x20(1)\x20Testnet\x20—\x20claim\x20WOW\x20from\x20the\x20faucet\x20(https://faucet.testnet.wowok.net);\x20all\x20merchant\x20and\x20order\x20testing\x20can\x20use\x20WOW\x20as\x20the\x20payment\x20token.\x20(2)\x20Mainnet\x20—\x20transfer\x20ETH\x20/\x20USDT\x20/\x20USDC\x20/\x20WBTC\x20via\x20the\x20ETH\x20mainnet\x20cross-chain\x20bridge:\x20first\x20query\x20the\x20active\x20EVM\x20account\x20(bridge_operation\x20query_active_evm_account,\x20auto-generated\x20on\x20first\x20use),\x20then\x20transfer\x20from\x20an\x20external\x20wallet\x20(e.g.\x20MetaMask)\x20to\x20that\x20address,\x20confirm\x20the\x20balance\x20arrived,\x20and\x20cross-chain\x20to\x20WOW\x20mainnet\x20(bridge_operation\x20cross_chain_evm_to_wow).\x20(3)\x20WOW\x20airdrop:\x20current\x20round\x20status,\x20pool\x20and\x20eligibility\x20are\x20published\x20live\x20at\x20https://wowok.net/airdrop.html\x20(referral:\x20https://wowok.net/refer.html)\x20—\x20open\x20that\x20page\x20rather\x20than\x20assuming\x20a\x20round\x20is\x20live\x20or\x20closed.\x20Query\x20wowok_buildin_info\x20with\x20info=\x27funding\x20guidance\x27\x20for\x20the\x20canonical\x20funding\x20guidance.'},'pool_shortage':{'error_code':'pool_shortage','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'An\x20on-chain\x20POOL\x20cannot\x20cover\x20the\x20operation\x20(reward.move:243\x20abort\x206\x20/\x20'+'allocation.move:509\x20abort\x207)\x20—\x20a\x20pool\x20funding\x20problem,\x20NOT\x20the\x20caller\x27s\x20wallet;\x20a\x20faucet\x20claim\x20will\x20NOT\x20help\x20and\x20re-sending\x20the\x20rail\x20unchanged\x20changes\x20nothing.\x201.\x20Reward\x20pool:\x20the\x20reward\x20ISSUER\x20tops\x20it\x20up\x20with\x20reward\x20coin_add\x20(permission\x20153)\x20—\x20the\x20claim\x20key\x20slot\x20is\x20written\x20BEFORE\x20the\x20balance\x20assert\x20and\x20the\x20abort\x20rolls\x20it\x20back,\x20so\x20NOTHING\x20was\x20consumed;\x20the\x20identical\x20claim\x20succeeds\x20after\x20the\x20top-up\x20(mainnet-proven,\x20T14).\x202.\x20Allocation\x20pool:\x20the\x20payer\x20side\x20funds\x20the\x20order/allocation\x20first\x20(order\x20renew,\x20payment\x20create\x20into\x20the\x20allocation),\x20then\x20re-runs\x20the\x20rail;\x20if\x20the\x20pool\x20is\x20drained\x20because\x20the\x20rail\x20ALREADY\x20paid\x20(balance\x200,\x20once-slot\x20consumed),\x20verify\x20via\x20the\x20Payment\x20record\x20instead\x20of\x20retrying.\x203.\x20As\x20the\x20BUYER:\x20report\x20the\x20shortage\x20to\x20the\x20merchant\x20—\x20never\x20fund\x20a\x20pool\x20you\x20do\x20not\x20own','user_prompt':'The\x20on-chain\x20pool\x20backing\x20this\x20operation\x20is\x20short\x20of\x20funds.\x20The\x20pool\x27s\x20owner\x20must\x20top\x20it\x20up\x20(reward\x20coin_add\x20/\x20allocation\x20funding)\x20—\x20a\x20faucet\x20claim\x20will\x20not\x20help.\x20As\x20the\x20buyer,\x20ask\x20the\x20merchant\x20to\x20fund\x20the\x20pool.'},'stock_exhausted':{'error_code':'stock_exhausted','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'Merchant-side\x20inventory\x20shortfall\x20(Move\x20service:16\x20E_STOCK_NOT_ENOUGH)\x20—\x20NOT\x20a\x20buyer\x20balance\x20problem,\x20so\x20a\x20faucet\x20claim\x20will\x20NOT\x20help.\x201.\x20Reduce\x20the\x20purchase\x20quantity\x20to\x20the\x20item\x27s\x20remaining\x20stock\x202.\x20Pick\x20another\x20sale\x20item\x203.\x20Ask\x20the\x20merchant\x20to\x20restock,\x20then\x20retry','user_prompt':'The\x20sale\x20item\x27s\x20stock\x20is\x20exhausted\x20for\x20the\x20requested\x20quantity.\x20Reduce\x20the\x20quantity,\x20choose\x20another\x20item,\x20or\x20ask\x20the\x20merchant\x20to\x20restock.'},'allocation_empty':{'error_code':'allocation_empty','strategy':'stop','max_attempts':0x1,'automation':'semi','detail':'The\x20Allocation\x20distributed\x20zero\x20value:\x20its\x20pool\x20is\x20empty\x20(already\x20fully\x20distributed,\x20or\x20the\x20order\x20total\x20was\x20discounted/couponed\x20to\x20zero)\x20—\x20a\x20legitimate\x20outcome\x20for\x20zero-total\x20orders.\x201.\x20Do\x20NOT\x20retry\x20the\x20allocation;\x20it\x20cannot\x20change\x20this.\x202.\x20If\x20funds\x20WERE\x20expected:\x20check\x20whether\x20the\x20order\x27s\x20payments\x20actually\x20funded\x20this\x20Allocation\x20before\x20the\x20rail\x20ran\x20(upstream\x20funding\x20problem),\x20and\x20verify\x20the\x20Payment\x20record\x20—\x20on\x20a\x20RETRIED\x20submission\x20the\x20FIRST\x20attempt\x20may\x20have\x20already\x20landed\x20(a\x20zero\x20balance\x20is\x20exactly\x20what\x20a\x20completed\x20distribution\x20looks\x20like,\x20F-M10).\x203.\x20The\x20chain\x20checks\x20the\x20balance\x20BEFORE\x20guard\x20evaluation,\x20so\x20this\x20abort\x20is\x20NOT\x20evidence\x20about\x20a\x20guard\x27s\x20verdict\x20—\x20never\x20conclude\x20\x27guard\x20rejected\x27\x20from\x20it','user_prompt':'The\x20allocation\x20pool\x20holds\x20nothing\x20to\x20distribute\x20(zero\x20total\x20or\x20already\x20fully\x20paid\x20out).\x20Verify\x20the\x20Payment\x20record\x20before\x20re-running\x20anything;\x20if\x20a\x20payout\x20was\x20expected,\x20the\x20pool\x20needs\x20funding\x20first.'},'sale_suspended':{'error_code':'sale_suspended','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'The\x20merchant\x20suspended\x20this\x20sale\x20item\x20(Move\x20service:34\x20E_SALE_SUSPENDED).\x201.\x20Pick\x20another\x20(non-suspended)\x20item\x202.\x20Contact\x20the\x20merchant\x20to\x20resume\x20the\x20sale,\x20then\x20retry','user_prompt':'The\x20sale\x20item\x20is\x20suspended\x20by\x20the\x20merchant.\x20Please\x20choose\x20another\x20item\x20or\x20contact\x20the\x20merchant.'},'discount_invalid':{'error_code':'discount_invalid','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'The\x20discount\x20is\x20outside\x20its\x20[time_start,\x20time_end]\x20validity\x20window\x20(Move\x20service:35\x20E_DISCOUNT_TIME_INVALID).\x201.\x20Retry\x20without\x20the\x20discount\x202.\x20Ask\x20the\x20merchant\x20for\x20a\x20fresh\x20discount,\x20then\x20retry','user_prompt':'The\x20discount\x20is\x20not\x20valid\x20at\x20the\x20current\x20time\x20(outside\x20its\x20validity\x20window).\x20Buy\x20without\x20the\x20discount\x20or\x20ask\x20the\x20merchant\x20for\x20a\x20new\x20one.'},'rate_limit':{'error_code':'rate_limit','strategy':'retry','max_attempts':0x5,'automation':'full','detail':'Rate\x20limit\x20hit\x20(HTTP\x20429).\x20Exponential\x20backoff\x20retry:\x202s\x20/\x204s\x20/\x208s\x20/\x2016s\x20/\x2032s.\x20Avoid\x20parallel\x20calls\x20while\x20the\x20limit\x20window\x20is\x20active.'},'gas_exceeded':{'error_code':'gas_exceeded','strategy':'adjust_params','max_attempts':0x3,'automation':'semi','detail':'Gas\x20budget\x20exceeded.\x201.\x20Increase\x20the\x20gas_budget\x20parameter\x202.\x20Reduce\x20the\x20operation\x20size\x20(fewer\x20objects\x20per\x20transaction)\x203.\x20Retry\x20the\x20original\x20operation','user_prompt':'Gas\x20budget\x20exceeded.\x20Increase\x20the\x20gas\x20budget\x20or\x20reduce\x20the\x20operation\x20size,\x20then\x20retry.'},'insufficient_gas':{'error_code':'insufficient_gas','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'Gas\x20exhausted\x20—\x20the\x20transaction\x20failed\x20deterministically\x20and\x20did\x20NOT\x20commit\x20on-chain\x20(no\x20state\x20changed;\x20commit-state\x20verification\x20is\x20NOT\x20needed).\x201.\x20Raise\x20the\x20gas_budget\x20parameter\x20above\x20the\x20failed\x20transaction\x27s\x20gas_used\x202.\x20If\x20the\x20account\x20balance\x20cannot\x20cover\x20any\x20budget,\x20fund\x20the\x20signing\x20account\x20with\x20gas\x20tokens\x20first\x203.\x20Resubmit\x20as\x20a\x20FRESH\x20call\x20—\x20do\x20NOT\x20replay\x20the\x20same\x20transaction','user_prompt':'The\x20transaction\x20ran\x20out\x20of\x20gas\x20and\x20did\x20not\x20commit\x20on-chain.\x20Increase\x20the\x20gas\x20budget\x20(or\x20fund\x20the\x20account\x20with\x20gas)\x20and\x20submit\x20a\x20fresh\x20transaction\x20—\x20retrying\x20unchanged\x20will\x20fail\x20the\x20same\x20way.'},'bcs_error':{'error_code':'bcs_error','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'BCS\x20serialization/deserialization\x20error\x20—\x20a\x20parameter\x20does\x20not\x20match\x20the\x20expected\x20type/structure.\x201.\x20Query\x20the\x20operation\x20schema\x20(schema_query)\x202.\x20Fix\x20the\x20offending\x20parameter\x20type\x20(e.g.\x20BigInt\x20vs\x20number,\x20vector\x20element\x20type)\x203.\x20Retry','user_prompt':'A\x20parameter\x20failed\x20serialization.\x20Check\x20the\x20parameter\x20types\x20against\x20the\x20schema\x20and\x20retry.'},'signature_error':{'error_code':'signature_error','strategy':'switch_account','max_attempts':0x2,'automation':'semi','detail':'Signature\x20verification\x20failed.\x201.\x20Verify\x20the\x20account\x20is\x20not\x20suspended\x202.\x20Check\x20the\x20network\x20matches\x20the\x20account\x27s\x203.\x20Switch\x20to\x20a\x20healthy\x20account\x20and\x20retry','user_prompt':'Signature\x20verification\x20failed.\x20The\x20account\x20may\x20be\x20suspended\x20or\x20misconfigured.\x20Switch\x20accounts\x20or\x20check\x20the\x20configuration\x20and\x20retry.'},'config_error':{'error_code':'config_error','strategy':'escalate_human','max_attempts':0x1,'automation':'manual','detail':'Local\x20configuration\x20error\x20(network\x20not\x20specified,\x20persistent\x20storage\x20not\x20set).\x201.\x20Show\x20the\x20user\x20which\x20configuration\x20is\x20missing\x202.\x20Guide\x20the\x20user\x20through\x20the\x20account_operation/config\x20setup\x203.\x20Retry\x20after\x20the\x20user\x20fixes\x20it','user_prompt':'Local\x20configuration\x20is\x20incomplete.\x20Please\x20finish\x20the\x20account/network\x20setup\x20and\x20retry.'},'wip_verification_failed':{'error_code':'wip_verification_failed','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'WIP\x20file\x20not\x20publicly\x20reachable\x20/\x20hash\x20mismatch.\x201.\x20Upload\x20via\x20the\x20wip\x20storage\x20service\x20(wip_file\x20type=\x27upload\x27\x20—\x20official\x20free\x20store\x20or\x20storage=\x27custom\x27)\x202.\x20Or\x20deploy\x20to\x20a\x20public\x20URL\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20own\x20site)\x203.\x20Update\x20the\x20sale\x27s\x20wip\x20URL\x204.\x20Re-run\x20the\x20operation','user_prompt':'The\x20WIP\x20file\x20could\x20not\x20be\x20verified\x20from\x20a\x20public\x20URL.\x20Upload\x20it\x20with\x20wip_file\x20type=\x27upload\x27\x20(official\x20free\x20store\x20or\x20your\x20own\x20service)\x20or\x20deploy\x20it\x20(GitHub\x20Pages\x20/\x20IPFS),\x20update\x20the\x20sale\x27s\x20WIP\x20URL,\x20and\x20retry.'},'wip_storage_unavailable':{'error_code':'wip_storage_unavailable','strategy':'retry','max_attempts':0x3,'automation':'full','detail':'Transient\x20wip\x20storage\x20transport\x20failure.\x201.\x20Retry\x20the\x20same\x20request\x20with\x20bounded\x20backoff\x202.\x20Large\x20WIP\x20files\x20are\x20network-sensitive:\x20compress\x20images\x20before\x20generate\x20(each\x20image\x20<=\x202MB,\x20total\x20<=\x2010MB)\x203.\x20Check\x20connectivity\x20to\x20the\x20storage\x20base\x20URL\x20if\x20retries\x20keep\x20failing','user_prompt':'The\x20wip\x20storage\x20request\x20failed\x20due\x20to\x20a\x20network\x20problem.\x20Retry\x20the\x20upload;\x20if\x20it\x20keeps\x20failing,\x20reduce\x20the\x20file\x20size\x20or\x20check\x20connectivity.'},'wip_storage_rejected':{'error_code':'wip_storage_rejected','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'WIP\x20storage\x20service\x20rejected\x20the\x20request\x20(HTTP\x204xx\x20—\x20deterministic\x20client-side\x20fault,\x20retrying\x20unchanged\x20fails\x20identically).\x20400:\x20malformed\x20body\x20or\x20failed\x20WIP\x20validation\x20—\x20re-generate\x20via\x20wip_file\x20type=\x27generate\x27\x20401:\x20re-sign\x20with\x20a\x20fresh\x20nonce\x20inside\x20the\x20timestamp\x20window\x20403:\x20check\x20storage\x20service\x20configuration\x20404:\x20file\x20does\x20not\x20exist\x20—\x20re-upload\x20409:\x20quota\x20—\x20delete\x20old\x20files\x20via\x20wip_file\x20type=\x27list\x27\x20then\x20delete\x20413:\x20compress\x20images\x20(each\x20<=\x202MB,\x20total\x20<=\x2010MB)\x20and\x20regenerate','user_prompt':'The\x20WIP\x20storage\x20service\x20rejected\x20the\x20request\x20(HTTP\x204xx).\x20Fix\x20the\x20specific\x20fault\x20(re-generate/re-sign/re-upload\x20per\x20the\x20status\x20code)\x20and\x20retry\x20—\x20do\x20not\x20retry\x20unchanged.'},'network_error':{'error_code':'network_error','strategy':'retry','max_attempts':0x5,'automation':'full','detail':'Transport\x20failure\x20(timeout\x20/\x20connection\x20reset\x20/\x20RPC\x20unreachable\x20/\x20HTTP\x205xx\x20gateway\x20error).\x20Exponential\x20backoff\x20retry:\x201s\x20/\x202s\x20/\x204s\x20/\x208s\x20/\x2016s.\x20Switch\x20RPC\x20node\x20if\x20available.\x20READS:\x20a\x20plain\x20retry\x20is\x20safe.\x20FUND-MOVING\x20WRITES:\x20before\x20any\x20resubmission,\x20verify\x20whether\x20the\x20previous\x20attempt\x20landed\x20(query\x20the\x20reported\x20digest\x20directly,\x20or\x20the\x20expected\x20object\x20via\x20the\x20sender\x27s\x20recent\x20on-chain\x20objects\x20/\x20onchain_events)\x20—\x20if\x20it\x20landed,\x20ADOPT\x20it\x20and\x20stop;\x20a\x20blind\x20backoff\x20retry\x20of\x20a\x20landed\x20write\x20moves\x20the\x20funds\x20a\x20second\x20time.'},'submission_unknown':{'error_code':'submission_unknown','strategy':'query_and_retry','max_attempts':0x2,'automation':'semi','detail':'Transport-level\x20failure\x20after\x20the\x20request\x20left\x20the\x20client\x20—\x20the\x20submission\x20state\x20is\x20UNKNOWN\x20and\x20the\x20transaction\x20may\x20already\x20be\x20committed.\x20NEVER\x20auto-retry\x20a\x20write\x20here.\x201.\x20Verify\x20commit\x20state\x20on-chain:\x20query_toolkit\x20for\x20the\x20object\x20this\x20call\x20would\x20create/modify\x20(resolve\x20the\x20reference\x20from\x20the\x20call\x27s\x20own\x20arguments),\x20or\x20onchain_events\x20for\x20the\x20sender\x27s\x20recent\x20transactions.\x202.\x20If\x20the\x20expected\x20object\x20EXISTS,\x20adopt\x20it\x20and\x20continue\x20the\x20workflow\x20(the\x20operation\x20succeeded\x20despite\x20the\x20transport\x20error).\x203.\x20If\x20confirmed\x20ABSENT,\x20resubmit\x20the\x20SAME\x20call\x20once\x20—\x20for\x20a\x20FIRST-EVER\x20transaction\x20on\x20a\x20fresh\x20account\x20make\x20that\x20resubmission\x20with\x20env.no_auto_register=true\x20and\x20SAY\x20SO\x20(the\x20SDK\x20silently\x20appends\x20an\x20entity\x20registration\x20to\x20a\x20first\x20business\x20call;\x20if\x20that\x20appended\x20leg\x20was\x20the\x20failing\x20leg\x20the\x20skip\x20lets\x20the\x20call\x20through\x20—\x20ziroom-mn-261013\x20live\x20case;\x20if\x20the\x20resubmission\x20aborts,\x20the\x20envelope\x20now\x20names\x20the\x20abort\x20—\x20re-enable\x20auto\x20registration\x20and\x20retry).\x204.\x20If\x20the\x20reported\x20digest\x20does\x20not\x20resolve\x20or\x20the\x20failure\x20repeats,\x20STOP\x20looping\x20on\x20digest\x20checks\x20and\x20re-run\x20the\x20SAME\x20call\x20with\x20env.dry_run=true\x20—\x20the\x20simulation\x20surfaces\x20the\x20real\x20failure\x20(exact\x20Move\x20abort)\x20without\x20gas\x20or\x20duplicate\x20risk.\x205.\x20Reads\x20are\x20idempotent\x20—\x20retry\x20immediately.\x206.\x20M-K2\x20replay\x20discipline:\x20a\x20FAILED\x20receipt\x20is\x20final\x20—\x20its\x20digest\x20is\x20consumed\x20and\x20replaying\x20the\x20same\x20bytes\x20returns\x20the\x20same\x20failure\x20forever;\x20fix\x20the\x20cause\x20(usually\x20funding)\x20and\x20build\x20a\x20FRESH\x20transaction.\x20Live\x20mainnet\x20incident\x20behind\x20this\x20rule:\x20an\x20order_new\x20-32603\x20\x27did\x20not\x20complete\x27\x20had\x20committed;\x20the\x20blind\x20retry\x20created\x20a\x20second\x20order\x20with\x20a\x20second\x20full\x20escrow\x20and\x20a\x20second\x20stock\x20decrement','user_prompt':'The\x20request\x20failed\x20at\x20transport\x20level\x20but\x20may\x20have\x20already\x20been\x20committed\x20on-chain.\x20Verify\x20whether\x20the\x20expected\x20object\x20exists\x20(query\x20it)\x20before\x20any\x20retry\x20—\x20a\x20blind\x20retry\x20can\x20duplicate\x20the\x20operation\x20(double\x20escrow).\x20For\x20read\x20operations,\x20a\x20plain\x20retry\x20is\x20safe.'},'transaction_expired':{'error_code':'transaction_expired','strategy':'retry','max_attempts':0x3,'automation':'full','detail':'The\x20transaction\x20expired\x20before\x20execution\x20(epoch\x20boundary\x20or\x20validator/gateway\x20outage)\x20—\x20it\x20did\x20NOT\x20land\x20and\x20nothing\x20was\x20committed.\x20Bounded\x20backoff\x20retry:\x2010s\x20/\x2030s\x20/\x2060s,\x20resubmit\x20the\x20SAME\x20call\x20unchanged.\x20If\x20a\x20dry_run\x20passes\x20while\x20the\x20real\x20call\x20keeps\x20failing,\x20the\x20fault\x20is\x20chain-side\x20—\x20wait\x20it\x20out.\x20Verify\x20with\x20onchain_events\x20if\x20unsure.'},'guard_rejected':{'error_code':'guard_rejected','strategy':'fill_submission','max_attempts':0x2,'automation':'semi','detail':'1.\x20Parse\x20Guard\x20table\x20structure\x202.\x20If\x20the\x20Guard\x20defines\x20submission\x20items,\x20fill\x20them\x20and\x20resubmit\x20with\x20call_with_submission\x203.\x20If\x20it\x20defines\x20none,\x20the\x20rule\x20evaluated\x20false\x20—\x20typical\x20causes:\x20a\x20TIME\x20WINDOW\x20(Clock\x20deadline/opening\x20comparison\x20—\x20this\x20call\x20may\x20sit\x20outside\x20the\x20window,\x20and\x20a\x20mis-oriented\x20comparison\x20inverts\x20it:\x20everything\x20inside\x20rejected,\x20everything\x20after\x20admitted),\x20an\x20IDENTITY\x20condition\x20(signer/state\x20checks\x20—\x20the\x20caller\x20may\x20not\x20be\x20the\x20address\x20the\x20rule\x20expects),\x20or\x20a\x20DATA-DEPENDENCY\x20ORDERING\x20(R-03,\x20nnd-tn-261025:\x20the\x20rule\x20reads\x20a\x20repository\x20row\x20/\x20workflow\x20state\x20that\x20does\x20not\x20hold\x20yet\x20—\x20e.g.\x20a\x20repository\x20data_add\x20whose\x20policy\x20write_guard\x20checks\x20progress.current\x20is\x20only\x20admitted\x20AFTER\x20the\x20machine\x20reaches\x20the\x20granting\x20node,\x20while\x20that\x20node\x27s\x20forward\x20may\x20read\x20this\x20very\x20row;\x20the\x20fix\x20is\x20ORDER,\x20not\x20parameters\x20—\x20find\x20the\x20reading\x20node\x20via\x20the\x20machine\x20node\x20table\x20(onchain_table_data)\x20or\x20analyze_guard_semantics,\x20advance\x20there\x20first,\x20then\x20re-run\x20the\x20SAME\x20write);\x20adjust\x20the\x20call\x27s\x20parameters\x20or\x20change\x20the\x20Guard\x20(docs#40)\x204.\x20When\x20the\x20failure\x20is\x20passport\x20E_VERIFY_FAILED\x20and\x20a\x20submission\x20was\x20supplied,\x20the\x20response\x20appends\x20a\x20\x27Guard\x20diagnosis\x20(dry-run)\x27\x20line\x20naming\x20the\x20first\x20failing\x20impact\x20guard\x20—\x20fix\x20that\x20guard\x20first\x205.\x20A\x20TIME-window\x20rejection\x20may\x20simply\x20be\x20EARLY:\x20re-run\x20the\x20SAME\x20call\x20with\x20env.dry_run=true\x20to\x20probe\x20the\x20window\x20for\x20free\x20(guard\x20rejections\x20do\x20NOT\x20consume\x20the\x20total\x20retry\x20budget;\x20only\x20the\x20per-code\x20cap\x20of\x202\x20applies)','user_prompt':'Guard\x20verification\x20rejected.\x20If\x20the\x20Guard\x20defines\x20submission\x20items,\x20fill\x20in\x20the\x20required\x20submission\x20data\x20and\x20resubmit;\x20if\x20it\x20defines\x20none,\x20the\x20Guard\x20rule\x20evaluated\x20false\x20—\x20the\x20usual\x20causes\x20are\x20a\x20time\x20window\x20(this\x20call\x20may\x20be\x20outside\x20the\x20Clock\x20deadline/opening\x20window),\x20an\x20identity\x20condition\x20(the\x20caller\x20is\x20not\x20the\x20address\x20the\x20rule\x20expects),\x20or\x20a\x20data-dependency\x20ordering\x20(the\x20rule\x20reads\x20a\x20row\x20/\x20workflow\x20state\x20that\x20does\x20not\x20hold\x20yet\x20—\x20advance\x20the\x20workflow\x20to\x20the\x20granting\x20node\x20first,\x20then\x20re-run\x20the\x20same\x20write);\x20adjust\x20this\x20call\x27s\x20parameters\x20or\x20change\x20the\x20Guard\x20rule.\x20When\x20the\x20response\x20includes\x20a\x20\x27Guard\x20diagnosis\x20(dry-run)\x27\x20line,\x20it\x20names\x20the\x20first\x20failing\x20impact\x20guard\x20—\x20address\x20that\x20guard\x20first.\x20A\x20time-window\x20rejection\x20may\x20simply\x20be\x20early:\x20probe\x20the\x20window\x20with\x20env.dry_run=true\x20(free\x20—\x20guard\x20rejections\x20do\x20not\x20consume\x20the\x20total\x20retry\x20budget).'},'time_lock_not_elapsed':{'error_code':'time_lock_not_elapsed','strategy':'wait_and_retry','max_attempts':0x1,'automation':'semi','detail':'1.\x20Verify\x20Service\x20is\x20paused\x20(bPaused=true).\x20If\x20not,\x20submit\x20pause=true\x20first.\x202.\x20Wait\x20until\x20paused_time\x20+\x20setting_lock_duration\x20<=\x20current\x20clock.\x203.\x20Retry\x20the\x20original\x20operation.\x20Do\x20NOT\x20recreate\x20the\x20object.','user_prompt':'Service\x20setting_lock_duration\x20has\x20not\x20elapsed\x20since\x20the\x20Service\x20was\x20paused.\x20Please\x20pause\x20the\x20Service\x20if\x20it\x20is\x20not\x20already\x20paused,\x20wait\x20for\x20the\x20lock\x20duration\x20to\x20elapse,\x20then\x20retry.'},'immutable_violation':{'error_code':'immutable_violation','strategy':'recreate','max_attempts':0x1,'automation':'semi','detail':'1.\x20Stop\x20modification\x20attempt\x202.\x20Evaluate\x20creating\x20a\x20new\x20object\x20as\x20replacement\x203.\x20Re-plan\x20affected\x20phases','user_prompt':'Cannot\x20modify\x20an\x20immutable\x20object.\x20A\x20new\x20object\x20must\x20be\x20created\x20as\x20a\x20replacement.\x20Confirm\x20to\x20proceed\x20with\x20recreation.'},'permission_denied':{'error_code':'permission_denied','strategy':'switch_account','max_attempts':0x2,'automation':'semi','detail':'1.\x20Query\x20object\x27s\x20permission_guard\x202.\x20List\x20accounts\x20with\x20permission\x203.\x20Switch\x20account\x20or\x20prompt\x20user\x20to\x20add\x20permission','user_prompt':'Current\x20account\x20lacks\x20permission\x20for\x20this\x20operation.\x20Switch\x20to\x20an\x20authorized\x20account\x20or\x20update\x20the\x20Permission\x20object.'},'object_not_found':{'error_code':'object_not_found','strategy':'query_and_retry','max_attempts':0x3,'automation':'semi','detail':'1.\x20Verify\x20the\x20referenced\x20name/ID\x20spelling\x20(local_mark_list)\x20and\x20that\x20the\x20object\x20exists\x20on\x20the\x20current\x20network\x202.\x20If\x20recently\x20created,\x20re-query\x20the\x20object\x20(may\x20be\x20sync\x20delay)\x203.\x20If\x20truly\x20absent,\x20search\x20for\x20similar\x20objects\x204.\x20Prompt\x20user\x20to\x20reselect','user_prompt':'Referenced\x20object\x20not\x20found.\x20First\x20verify\x20the\x20name/ID\x20spelling\x20and\x20that\x20the\x20object\x20exists\x20on\x20the\x20current\x20network;\x20if\x20it\x20was\x20created\x20recently,\x20this\x20may\x20be\x20a\x20synchronization\x20delay\x20—\x20retry.\x20If\x20the\x20issue\x20persists,\x20please\x20select\x20a\x20valid\x20object.'},'state_conflict':{'error_code':'state_conflict','strategy':'adjust_params','max_attempts':0x2,'automation':'full','detail':'1.\x20Query\x20object\x27s\x20current\x20true\x20state\x202.\x20Update\x20ODG\x20status\x20annotations\x203.\x20Adjust\x20subsequent\x20operations\x20(e.g.,\x20skip\x20completed\x20steps)'},'invalid_parameter':{'error_code':'invalid_parameter','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'1.\x20Query\x20the\x20relevant\x20schema\x202.\x20Auto-fix\x20obvious\x20errors\x20(e.g.,\x20BigInt\x20vs\x20string)\x203.\x20If\x20unfixable,\x20prompt\x20user','user_prompt':'Parameter\x20validation\x20failed.\x20Please\x20check\x20the\x20parameter\x20types\x20and\x20values\x20against\x20the\x20schema\x20and\x20retry.'},'move_abort_unmapped':{'error_code':'move_abort_unmapped','strategy':'stop','max_attempts':0x1,'automation':'manual','detail':'The\x20chain\x27s\x20business\x20logic\x20aborted\x20and\x20the\x20(module,\x20abort\x20code)\x20pair\x20has\x20no\x20local\x20mapping.\x20Read\x20the\x20module\x20and\x20abort\x20code\x20from\x20move_abort_info\x20/\x20the\x20message\x20(rendered\x20as\x20\x27abort\x20(N)\x27),\x20resolve\x20their\x20meaning\x20from\x20the\x20module\x27s\x20documentation\x20or\x20the\x20wowok-tools\x20Skill,\x20fix\x20the\x20business\x20cause,\x20and\x20issue\x20a\x20NEW\x20call.\x20Do\x20NOT\x20restart\x20the\x20server\x20and\x20do\x20NOT\x20retry\x20the\x20identical\x20call\x20—\x20it\x20aborts\x20deterministically.','user_prompt':'The\x20operation\x20was\x20rejected\x20by\x20the\x20chain\x27s\x20business\x20logic\x20and\x20its\x20abort\x20code\x20is\x20not\x20mapped\x20locally.\x20The\x20module\x20name\x20and\x20abort\x20code\x20in\x20the\x20error\x20are\x20authoritative\x20—\x20review\x20them\x20(and\x20the\x20object\x20state\x20via\x20query_toolkit)\x20before\x20adjusting\x20anything.'},'missing_data':{'error_code':'missing_data','strategy':'adjust_params','max_attempts':0x2,'automation':'semi','detail':'A\x20guard\x20rule\x20read\x20a\x20keyed\x20table\x20row\x20that\x20does\x20NOT\x20exist\x20(repository.data\x20/\x20oracle\x20entry)\x20and\x20the\x20verifier\x20surfaced\x20it\x20as\x20a\x20location-only\x20fault\x20inside\x20the\x20passport\x20module\x20—\x20no\x20abort\x20code,\x20because\x20the\x20framework\x20cannot\x20express\x20\x27row\x20absent\x27\x20as\x20an\x20abort.\x20This\x20is\x20a\x20DATA\x20problem:\x201.\x20Identify\x20the\x20repository\x20and\x20key\x20the\x20guard\x20rule\x20reads\x20(guard2file\x20/\x20analyze_guard_semantics\x20on\x20the\x20guard\x20source)\x202.\x20Have\x20the\x20row\x27s\x20producer\x20write\x20it\x20(e.g.\x20an\x20oracle\x20timestamp\x20like\x20checkin_ts),\x20or\x20add\x20it\x20with\x20repository\x20data_add\x20(data_add.name\x20must\x20match\x20a\x20policy\x20rule\x20name)\x203.\x20Retry\x20the\x20SAME\x20call\x20unchanged\x20—\x20a\x20dry_run\x20that\x20turns\x20clean\x20after\x20the\x20row\x20exists\x20confirms\x20the\x20diagnosis.\x20OR-BRANCH\x20NOTE\x20(alg26\x20261026\x20F-A26-13):\x20a\x20guard\x27s\x20OR\x20does\x20NOT\x20short-circuit\x20—\x20every\x20branch\x20is\x20evaluated,\x20so\x20a\x20row\x20read\x20by\x20ANY\x20branch\x20must\x20exist\x20even\x20when\x20the\x20taken\x20path\x20would\x20not\x20read\x20it;\x20seed\x20initial\x20rows\x20(e.g.\x20a\x20counter\x20at\x200)\x20for\x20every\x20OR\x20branch\x20before\x20first\x20use','user_prompt':'A\x20guard\x20rule\x20references\x20a\x20data\x20row\x20that\x20has\x20not\x20been\x20written\x20yet\x20(location-only\x20fault\x20inside\x20the\x20passport\x20module\x20—\x20NOT\x20a\x20network\x20problem).\x20Identify\x20the\x20repository\x20row\x20the\x20guard\x20expects\x20(guard2file\x20/\x20analyze_guard_semantics),\x20write\x20it\x20with\x20repository\x20data_add\x20(or\x20let\x20its\x20producer\x20write\x20it),\x20then\x20retry.'},'guard_data_missing':{'error_code':'guard_data_missing','strategy':'adjust_params','max_attempts':0x1,'automation':'semi','detail':'A\x20guard\x20rule\x20read\x20DATA\x20that\x20does\x20not\x20exist\x20—\x20a\x20keyed\x20(id,key)\x20repository/oracle\x20row\x20or\x20a\x20field\x20of\x20an\x20object\x20the\x20guard\x20references\x20—\x20and\x20the\x20passport\x20guard\x20verifier\x20panicked\x20at\x20execution\x20time\x20with\x20NO\x20abort\x20code.\x20This\x20is\x20a\x20GUARD-DATA\x20problem,\x20NOT\x20an\x20environment\x20fault\x20(do\x20not\x20restart\x20the\x20server,\x20do\x20not\x20look\x20for\x20a\x20routing\x20cause).\x201.\x20Export\x20the\x20guard\x20(guard2file\x20/\x20analyze_guard_semantics)\x20and\x20list\x20every\x20row/field\x20it\x20reads,\x20including\x20OR\x20branches\x20(an\x20OR\x20does\x20not\x20short-circuit\x20—\x20every\x20branch\x27s\x20row\x20must\x20exist).\x202.\x20Seed\x20the\x20missing\x20(id,key)\x20row\x20with\x20repository\x20data_add\x20(data_add.name\x20must\x20match\x20a\x20policy\x20rule\x20name),\x20or\x20point\x20the\x20guard\x20at\x20a\x20row/object\x20that\x20already\x20exists\x20—\x20a\x20history-time\x20anchor\x20(query_progress_history_time\x20id\x201280,\x20next_node,\x20find=last)\x20must\x20name\x20a\x20node\x20present\x20on\x20this\x20order\x27s\x20path/period.\x203.\x20Retry\x20the\x20SAME\x20call\x20unchanged;\x20a\x20dry_run\x20that\x20turns\x20clean\x20confirms\x20the\x20diagnosis.','user_prompt':'A\x20guard\x20reads\x20repository\x20data\x20that\x20has\x20not\x20been\x20written\x20yet\x20(not\x20a\x20network\x20or\x20server\x20problem).\x20Identify\x20the\x20(id,key)\x20row\x20the\x20guard\x20expects,\x20write\x20it\x20with\x20repository\x20data_add\x20or\x20use\x20an\x20existing\x20row,\x20then\x20retry.'},'state_not_visible':{'error_code':'state_not_visible','strategy':'wait_and_retry','max_attempts':0x3,'automation':'full','detail':'The\x20state\x20this\x20call\x20needs\x20was\x20JUST\x20written\x20and\x20is\x20not\x20yet\x20visible\x20to\x20reads\x20(write-to-visibility\x20window),\x20or\x20it\x20does\x20not\x20exist\x20at\x20all.\x201.\x20If\x20a\x20write\x20on\x20this\x20order/machine\x20committed\x20within\x20the\x20last\x20few\x20seconds,\x20wait\x20500ms\x20(doubling\x20each\x20attempt)\x20and\x20replay\x20the\x20SAME\x20call\x20UNCHANGED\x20—\x20NEVER\x20edit\x20parameters\x20to\x20\x27fix\x27\x20a\x20visibility\x20window;\x20an\x20aborted\x20call\x20never\x20landed,\x20so\x20the\x20replay\x20cannot\x20double-spend.\x202.\x20If\x20the\x20fault\x20persists\x20past\x20~3\x20attempts\x20(or\x20nothing\x20was\x20just\x20written),\x20the\x20state\x20is\x20deterministically\x20ABSENT\x20—\x20stop\x20retrying:\x20for\x20a\x20forward-info\x20miss\x20query\x20the\x20Machine\x27s\x20node\x20table\x20(onchain_table_data\x20onchain_table_item_machine_node)\x20and\x20use\x20an\x20existing\x20node/next_node/forward\x20triple\x20—\x20on\x20an\x20already-built\x20machine\x20check\x20TOPOLOGY\x20first\x20(alg26\x20261026\x20F-A26-14):\x20the\x20forward\x20may\x20simply\x20not\x20be\x20an\x20out-edge\x20of\x20the\x20order\x27s\x20CURRENT\x20node,\x20which\x20no\x20retry\x20can\x20fix;\x20for\x20a\x20guard-read\x20repository\x20row\x20follow\x20the\x20missing_data\x20path\x20(write\x20the\x20row).','user_prompt':'A\x20just-committed\x20write\x20is\x20not\x20visible\x20to\x20this\x20read\x20yet.\x20The\x20same\x20call\x20will\x20be\x20replayed\x20after\x20a\x20short\x20wait\x20—\x20no\x20parameter\x20change\x20is\x20needed.\x20If\x20it\x20keeps\x20failing,\x20the\x20required\x20state\x20is\x20genuinely\x20missing\x20and\x20must\x20be\x20created\x20first.'},'unreachable_transition':{'error_code':'unreachable_transition','strategy':'query_and_retry','max_attempts':0x1,'automation':'full','detail':'The\x20requested\x20forward\x20name\x20does\x20not\x20exist\x20on\x20the\x20(prev_node,\x20node)\x20pair\x20at\x20the\x20order\x27s\x20current\x20node\x20(machine.move:75\x20E_FORWARD_NOT_AT_NODE)\x20—\x20the\x20transition\x20is\x20not\x20in\x20the\x20Machine\x20graph.\x20Deterministic:\x20no\x20account\x20switch,\x20retry\x20or\x20gas\x20change\x20can\x20create\x20a\x20missing\x20edge,\x20and\x20a\x20published\x20Machine\x20is\x20immutable\x20(IMMUT-001).\x201.\x20Read\x20the\x20order\x27s\x20current\x20progress\x20node\x20(order\x20progress\x20with\x20convert_witness=\x27OrderProgress\x27).\x202.\x20Query\x20the\x20Machine\x20node\x20table\x20(onchain_table_item_machine_node)\x20and\x20list\x20the\x20pair\x27s\x20ACTUAL\x20forwards.\x203.\x20Re-issue\x20the\x20operation\x20with\x20an\x20existing\x20forward\x20name\x20that\x20leads\x20toward\x20the\x20goal.\x204.\x20If\x20no\x20existing\x20edge\x20reaches\x20the\x20intended\x20state\x20on\x20a\x20published\x20Machine,\x20the\x20path\x20is\x20impossible\x20—\x20redesign\x20requires\x20a\x20NEW\x20Machine\x20version\x20(pre-publish:\x20fix\x20the\x20graph\x20and\x20republish).','user_prompt':'The\x20requested\x20machine\x20transition\x20does\x20not\x20exist\x20at\x20the\x20order\x27s\x20current\x20node\x20—\x20retrying\x20or\x20switching\x20accounts\x20cannot\x20help.\x20The\x20available\x20forwards\x20must\x20be\x20read\x20from\x20the\x20machine\x27s\x20node\x20table\x20and\x20an\x20existing\x20one\x20used\x20instead;\x20if\x20none\x20fits,\x20the\x20machine\x20graph\x20itself\x20must\x20be\x20changed\x20before\x20publish.'},'forward_not_at_node':{'error_code':'forward_not_at_node','strategy':'query_and_retry','max_attempts':0x1,'automation':'full','detail':'The\x20order\x27s\x20CURRENT\x20Progress\x20node\x20carries\x20no\x20forward\x20with\x20the\x20requested\x20name\x20(machine.move:365\x20E_INFO_NOT_FOUND\x20=\x2013)\x20—\x20the\x20forward\x20is\x20not\x20an\x20out-edge\x20of\x20the\x20node\x20the\x20order\x20stands\x20on.\x20Deterministic\x20topology\x20mismatch:\x20retrying\x20the\x20same\x20triple,\x20waiting\x20or\x20switching\x20accounts\x20cannot\x20create\x20the\x20edge.\x201.\x20Read\x20the\x20order\x27s\x20CURRENT\x20node\x20(order\x20progress\x20with\x20convert_witness=\x27OrderProgress\x27).\x202.\x20Query\x20the\x20Machine\x20node\x20table\x20(onchain_table_item_machine_node)\x20and\x20list\x20the\x20pair\x27s\x20ACTUAL\x20forwards\x20at\x20that\x20node.\x203.\x20Re-issue\x20with\x20one\x20of\x20those\x20forward\x20names,\x20or\x20first\x20advance\x20through\x20the\x20intermediate\x20node\x20that\x20carries\x20the\x20intended\x20edge.\x204.\x20Always\x20surface\x20current_node\x20+\x20available_forwards,\x20never\x20the\x20same\x20triple\x20again.\x20Distinct\x20from\x20unreachable_transition\x20(machine:25)\x20where\x20the\x20pair\x20exists\x20at\x20this\x20node\x20and\x20only\x20the\x20name\x20is\x20missing.','user_prompt':'The\x20order\x20is\x20standing\x20on\x20a\x20node\x20that\x20has\x20no\x20such\x20forward.\x20The\x20current\x20node\x20and\x20its\x20actual\x20forward\x20names\x20must\x20be\x20read\x20from\x20the\x20machine\x20node\x20table\x20and\x20an\x20edge\x20sourced\x20there\x20used\x20instead\x20(or\x20the\x20order\x20advanced\x20to\x20the\x20right\x20node\x20first).\x20Retrying\x20cannot\x20help.'},'anchor_unavailable':{'error_code':'anchor_unavailable','strategy':'escalate_human','max_attempts':0x1,'automation':'manual','detail':'The\x20messenger\x20WTS\x20evidence\x20chain\x20is\x20unavailable:\x20the\x20server\x20key-book\x20anchor\x20could\x20not\x20be\x20confirmed\x20on\x20the\x20current\x20network\x20(signer\x20not\x20pinned\x20for\x20this\x20network,\x20anchor\x20repository\x20absent\x20on-chain\x20—\x20typical\x20after\x20a\x20chain\x20re-genesis\x20—\x20or\x20the\x20anchor\x20chain\x20read\x20failed).\x20This\x20is\x20an\x20INFRASTRUCTURE\x20configuration\x20gap,\x20NOT\x20a\x20guard\x20rejection,\x20a\x20network\x20fault,\x20or\x20a\x20parameter\x20problem\x20—\x20signing\x20and\x20anchoring\x20fail\x20closed\x20by\x20design\x20(an\x20unconfirmed\x20key\x20book\x20cannot\x20ground\x20evidence).\x20Remedy\x20(out\x20of\x20band,\x20no\x20retry\x20will\x20help):\x201.\x20Deploy\x20or\x20re-anchor\x20the\x20messenger\x20server\x20key\x20book\x20on\x20the\x20target\x20network\x202.\x20Pin\x20its\x20signer\x20for\x20that\x20network\x20in\x20the\x20SDK\x20keybook\x20table\x203.\x20Until\x20then,\x20treat\x20the\x20messenger\x20channel\x20as\x20private\x20communication\x20WITHOUT\x20third-party\x20provability\x20(verify_wts\x20still\x20returns\x20a\x20structured\x20valid:false\x20verdict\x20with\x20the\x20anchor\x20reason)','user_prompt':'The\x20WTS\x20evidence\x20chain\x20cannot\x20be\x20anchored\x20on\x20this\x20network:\x20the\x20messenger\x20server\x20key-book\x20anchor\x20is\x20missing\x20or\x20unconfirmed.\x20This\x20needs\x20an\x20out-of-band\x20keybook\x20deployment\x20plus\x20SDK\x20signer\x20pinning\x20for\x20the\x20network\x20—\x20retrying\x20the\x20call\x20will\x20fail\x20the\x20same\x20way.\x20Until\x20fixed,\x20messenger\x20communication\x20remains\x20private\x20but\x20cannot\x20be\x20turned\x20into\x20third-party-verifiable\x20evidence.'},'capability_unavailable':{'error_code':'capability_unavailable','strategy':'stop','max_attempts':0x1,'automation':'manual','detail':'The\x20connected\x20chain\x20package\x20does\x20not\x20carry\x20this\x20protocol\x20entry,\x20so\x20the\x20call\x20is\x20impossible\x20on\x20this\x20package\x20version.\x20Deterministic\x20—\x20retrying,\x20re-signing\x20or\x20editing\x20parameters\x20cannot\x20add\x20the\x20missing\x20entry.\x20Remedy\x20(no\x20retry\x20involved):\x201.\x20Apply\x20the\x20documented\x20downgrade\x20for\x20the\x20intent\x20(for\x20a\x20reward\x20evidence\x20pin:\x20drop\x20the\x20evidence\x20binding\x20and\x20keep\x20the\x20repository-floor\x20guard\x20leg,\x20disclosing\x20that\x20it\x20proves\x20only\x20\x27a\x20qualifying\x20repository\x20row\x20exists\x20for\x20this\x20order\x27\x20—\x20not\x20who\x20wrote\x20it)\x202.\x20Check\x20the\x20target\x20network\x27s\x20package\x20release\x20notes\x20for\x20the\x20version\x20that\x20ships\x20the\x20entry\x20before\x20re-enabling\x20it\x203.\x20Never\x20treat\x20the\x20missing\x20entry\x20name\x20as\x20a\x20fixable\x20parameter','user_prompt':'This\x20call\x20needs\x20a\x20chain\x20capability\x20the\x20connected\x20package\x20does\x20not\x20have\x20yet.\x20It\x20cannot\x20succeed\x20on\x20this\x20network\x20version\x20—\x20no\x20retry\x20or\x20parameter\x20change\x20will\x20help.\x20The\x20documented\x20downgrade\x20keeps\x20the\x20goal\x20achievable\x20with\x20a\x20weaker\x20guarantee\x20that\x20must\x20be\x20disclosed\x20(for\x20a\x20review\x20bounty:\x20the\x20repository-floor\x20leg\x20proves\x20a\x20qualifying\x20rating\x20row\x20exists\x20for\x20the\x20order,\x20not\x20that\x20the\x20buyer\x20wrote\x20a\x20real\x20review).'},'delivery_unknown':{'error_code':'delivery_unknown','strategy':'query_and_retry','max_attempts':0x1,'automation':'semi','detail':'The\x20messenger\x20send\x20failed\x20at\x20transport\x20level\x20AFTER\x20submission:\x20delivery\x20state\x20is\x20UNKNOWN\x20because\x20the\x20relay\x20may\x20have\x20already\x20committed\x20the\x20message\x20despite\x20the\x20client-side\x20failure.\x20A\x20blind\x20re-send\x20DOUBLE-DELIVERS\x20the\x20same\x20encrypted\x20payload,\x20so\x20the\x20retry\x20loop\x20is\x20verify-first:\x20read\x20the\x20conversation\x20(watch_conversations\x20/\x20message\x20list)\x20and\x20check\x20for\x20the\x20identical\x20payload;\x20re-send\x20only\x20after\x20confirming\x20it\x20never\x20arrived.\x20Note\x20the\x20message,\x20when\x20it\x20did\x20arrive,\x20is\x20fully\x20end-to-end\x20encrypted\x20—\x20only\x20delivery\x20is\x20uncertain','user_prompt':'The\x20send\x20failed\x20after\x20submission,\x20so\x20delivery\x20is\x20uncertain\x20(the\x20server\x20may\x20have\x20committed\x20it\x20anyway).\x20Do\x20NOT\x20resend\x20blindly:\x20first\x20check\x20the\x20conversation\x20for\x20the\x20same\x20message;\x20resend\x20only\x20if\x20it\x20never\x20arrived.'},'transport_unavailable':{'error_code':'transport_unavailable','strategy':'retry','max_attempts':0x3,'automation':'full','detail':'A\x20transport-level\x20object\x20FETCH\x20failed\x20(\x27Fetch\x20<Type>\x20object\x200x...\x20failed\x27)\x20—\x20a\x20READ-path\x20availability\x20problem\x20(fullnode/gateway),\x20NOT\x20a\x20guard\x20rejection\x20and\x20NOT\x20an\x20on-chain\x20abort.\x201.\x20READ\x20calls\x20are\x20idempotent:\x20retry\x20after\x20a\x20brief\x20backoff,\x20or\x20against\x20a\x20healthy\x20endpoint.\x202.\x20If\x20this\x20error\x20surfaced\x20on\x20a\x20WRITE\x20call,\x20the\x20write\x27s\x20submission\x20state\x20is\x20UNKNOWN\x20—\x20do\x20NOT\x20blindly\x20resend;\x20first\x20query\x20the\x20expected\x20object\x20on-chain\x20and\x20adopt\x20or\x20resubmit\x20per\x20the\x20submission_unknown\x20discipline\x20(ghost-order\x20hazard).\x203.\x20Never\x20re-interpret\x20this\x20as\x20a\x20guard\x20failure:\x20no\x20guard\x20was\x20evaluated,\x20nothing\x20reached\x20Move.\x204.\x20Persistent\x20failures\x20across\x20endpoints\x20→\x20check\x20network/fullnode\x20health\x20before\x20touching\x20business\x20logic'},'unknown':{'error_code':'unknown','strategy':'escalate_human','max_attempts':0x1,'automation':'manual','detail':'1.\x20Report\x20full\x20error\x20context\x20to\x20the\x20user\x202.\x20Escalate\x20to\x20human\x20intervention\x203.\x20Flag\x20for\x20error-classification\x20rule\x20addition','user_prompt':'An\x20unclassified\x20error\x20occurred.\x20Please\x20review\x20the\x20error\x20details\x20and\x20contact\x20support\x20if\x20needed.'}};const operationAttempts=new Map();function getAttemptCount(a,b){const c=operationAttempts['get'](a);if(!c)return 0x0;return c['get'](b)??0x0;}function incrementAttempt(a,b){!operationAttempts['has'](a)&&operationAttempts['set'](a,new Map());const c=operationAttempts['get'](a),d=(c['get'](b)??0x0)+0x1;return c['set'](b,d),d;}const BUDGET_EXEMPT_CODES=new Set(['guard_rejected']);function getBudgetAttempts(a){const b=operationAttempts['get'](a);if(!b)return 0x0;let c=0x0;for(const [d,e]of b){if(!BUDGET_EXEMPT_CODES['has'](d))c+=e;}return c;}export function resetAttempts(a){operationAttempts['delete'](a);}export function recover(a,b,c){const d=RECOVERY_RULES[a]??RECOVERY_RULES['unknown'],e=0x5,f=getBudgetAttempts(b),g=getAttemptCount(b,a);if(d['max_attempts']<=0x1||d['strategy']==='stop')return{'strategy':d['strategy'],'should_retry':![],'max_attempts':d['max_attempts'],'current_attempt':g,'adjusted_params':d['adjusted_params'],'user_prompt':d['user_prompt'],'detail':d['detail']};if(f>=e)return{'strategy':'stop','should_retry':![],'max_attempts':e,'current_attempt':f,'detail':'Total\x20retry\x20limit\x20('+e+')\x20reached\x20for\x20operation\x20'+b+'.\x20Escalating\x20to\x20human\x20intervention.\x20Attempts\x20recorded\x20for\x20this\x20operation\x20id:\x20'+([...(operationAttempts['get'](b)??new Map())['entries']()]['map'](([j,k])=>j+':'+k)['join'](',\x20')||'none')+'.','user_prompt':'Maximum\x20retry\x20attempts\x20reached.\x20Manual\x20intervention\x20required.'};if(g>=d['max_attempts'])return{'strategy':'escalate_human','should_retry':![],'max_attempts':d['max_attempts'],'current_attempt':g,'detail':'Per-error-code\x20retry\x20limit\x20('+d['max_attempts']+')\x20reached\x20for\x20'+a+'.\x20Escalating\x20to\x20human.','user_prompt':'Recovery\x20attempts\x20for\x20'+a+'\x20exhausted.\x20Manual\x20intervention\x20required.'};const h=incrementAttempt(b,a),i={'strategy':d['strategy'],'should_retry':d['automation']==='full'||h<d['max_attempts'],'max_attempts':d['max_attempts'],'current_attempt':h,'adjusted_params':d['adjusted_params'],'user_prompt':d['user_prompt'],'detail':d['detail']};return i['should_retry']&&c?.['retryable']===![]&&a!=='guard_rejected'&&d['strategy']!=='fill_submission'&&d['strategy']!=='query_and_retry'&&(i['should_retry']=![],i['detail']+='\x20NON-RETRYABLE\x20CLASSIFICATION:\x20retrying\x20the\x20IDENTICAL\x20call\x20fails\x20identically\x20—\x20apply\x20the\x20strategy\x20above\x20to\x20fix\x20the\x20cause,\x20then\x20submit\x20a\x20FRESH\x20call.'),i;}export function getBackoffDelay(a){return Math['pow'](0x2,a-0x1)*0x3e8;}
@@ -1,6 +1,6 @@
1
1
  import type { IndustryScenario } from "../evaluation/capability.js";
2
2
  import type { PersonaRole } from "../persona/types.js";
3
- export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "DemandChangedEvent" | "ServiceEvent" | "ArbitrationEvent" | "NewEntityEvent" | "ArbEvent" | "VoteEvent" | "FeedbackEvent" | "AllocationEvent" | "TreasuryEvent" | "RewardClaimEvent" | "RewardFundEvent" | "RewardWithdrawEvent" | "NewPaymentEvent" | "PermissionChangedEvent" | "RepositoryDataOverwriteEvent";
3
+ export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "ThresholdPendingEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "DemandChangedEvent" | "ServiceEvent" | "ArbitrationEvent" | "NewEntityEvent" | "ArbEvent" | "VoteEvent" | "FeedbackEvent" | "AllocationEvent" | "TreasuryEvent" | "RewardClaimEvent" | "RewardFundEvent" | "RewardWithdrawEvent" | "NewPaymentEvent" | "PermissionChangedEvent" | "RepositoryDataOverwriteEvent";
4
4
  export interface IntentRecord {
5
5
  id: string;
6
6
  intent: string;
@@ -1 +1 @@
1
- export const INTENT_VERSION=0x1;export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ServiceEvent','ArbitrationEvent','NewEntityEvent','ArbEvent','VoteEvent','FeedbackEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','NewPaymentEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent'];
1
+ export const INTENT_VERSION=0x1;export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','ThresholdPendingEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ServiceEvent','ArbitrationEvent','NewEntityEvent','ArbEvent','VoteEvent','FeedbackEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','RewardWithdrawEvent','NewPaymentEvent','PermissionChangedEvent','RepositoryDataOverwriteEvent'];
@@ -1,4 +1,5 @@
1
1
  import { type OrderContext, type ParsedMachineNode, type PermissionContext } from "../graph/onchain/sdk-batch.js";
2
+ import type { GuardJsonInput } from "../knowledge/guard-lint.js";
2
3
  import type { ScopeSnapshot } from "../monitor/types.js";
3
4
  import type { KeeperDesiredItem } from "./KeeperStore.js";
4
5
  export interface UnclaimedPayment {
@@ -17,7 +18,9 @@ export interface ProgressDetectorDeps {
17
18
  fetchMachinePermissionAddr(machine: string, network: string): Promise<string | undefined>;
18
19
  fetchPermissionContext(perm: string, network: string): Promise<PermissionContext | undefined>;
19
20
  fetchOrderContext(order: string, network: string): Promise<OrderContext | undefined>;
21
+ fetchGuardJson?(guard: string, network: string): Promise<GuardJsonInput | undefined>;
20
22
  }
23
+ export declare function extractGuardSignerPins(json: GuardJsonInput): string[];
21
24
  export declare function detectProgressActionable(scope: ScopeSnapshot, network: string, deps: ProgressDetectorDeps, maxObjects: number): Promise<KeeperDesiredItem[]>;
22
25
  export interface SettlementDetectorDeps {
23
26
  fetchOrderFields(addrs: string[], network: string): Promise<Map<string, any>>;