@wowok/agent-mcp 3.1.5 → 3.1.7

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 (156) hide show
  1. package/dist/evaluation/arbitration-game.js +1 -1
  2. package/dist/evaluation/builtins/graph-service.js +1 -1
  3. package/dist/graph/onchain/analyze.js +1 -1
  4. package/dist/graph/onchain/analyze.spec.js +1 -1
  5. package/dist/graph/onchain/extract.js +1 -1
  6. package/dist/graph/onchain/facts.d.ts +1 -0
  7. package/dist/graph/onchain/facts.js +1 -1
  8. package/dist/graph/onchain/fixtures.js +1 -1
  9. package/dist/graph/onchain/onchain.spec.js +1 -1
  10. package/dist/graph/onchain/strategy.js +1 -1
  11. package/dist/graph/onchain/strategy.spec.js +1 -1
  12. package/dist/harness/recover.js +1 -1
  13. package/dist/knowledge/alloc-audit-policy.spec.js +1 -1
  14. package/dist/knowledge/allocation-risk.js +1 -1
  15. package/dist/knowledge/arbitration-ledger.js +1 -1
  16. package/dist/knowledge/audit-rules.d.ts +1 -0
  17. package/dist/knowledge/audit-rules.js +1 -1
  18. package/dist/knowledge/baselines/rules/alloc_audit.json +20 -0
  19. package/dist/knowledge/baselines/rules/allocation.json +1 -19
  20. package/dist/knowledge/baselines/rules/arb.json +1 -1
  21. package/dist/knowledge/baselines/rules/guard.json +8 -8
  22. package/dist/knowledge/fund-layer.js +1 -1
  23. package/dist/knowledge/guard-design-patterns.d.ts +2 -1
  24. package/dist/knowledge/guard-design-patterns.js +1 -1
  25. package/dist/knowledge/guard-design-patterns.spec.d.ts +1 -0
  26. package/dist/knowledge/guard-design-patterns.spec.js +1 -0
  27. package/dist/knowledge/guard-lint.d.ts +1 -1
  28. package/dist/knowledge/guard-lint.js +1 -1
  29. package/dist/knowledge/guard-puzzle.js +1 -1
  30. package/dist/knowledge/guard-render.js +1 -1
  31. package/dist/knowledge/guard-risk.js +1 -1
  32. package/dist/knowledge/guard-translation.js +1 -1
  33. package/dist/knowledge/index.js +1 -1
  34. package/dist/knowledge/industry-registry.js +1 -1
  35. package/dist/knowledge/jsonrpc-enum.js +1 -1
  36. package/dist/knowledge/permission-ledger.js +1 -1
  37. package/dist/knowledge/recipient-constraint.js +1 -1
  38. package/dist/knowledge/safety-rules.extract-amount.spec.d.ts +1 -0
  39. package/dist/knowledge/safety-rules.extract-amount.spec.js +1 -0
  40. package/dist/knowledge/safety-rules.js +1 -1
  41. package/dist/knowledge/service-ledger.js +1 -1
  42. package/dist/knowledge/template-registry.js +1 -1
  43. package/dist/knowledge/template-scanner.js +1 -1
  44. package/dist/knowledge/tool-constraints.js +1 -1
  45. package/dist/knowledge/tools-reference.js +1 -1
  46. package/dist/knowledge/workflow-guidance.js +1 -1
  47. package/dist/monitor/MonitorLoop.js +1 -1
  48. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  49. package/dist/playbooks/service-build/pipeline-actions.d.ts +1 -1
  50. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  51. package/dist/playbooks/service-build/risk-aggregator.js +1 -1
  52. package/dist/role/derivation.d.ts +1 -1
  53. package/dist/role/derivation.js +1 -1
  54. package/dist/safety/confirm-gate.js +1 -1
  55. package/dist/schema/call/allocation.d.ts +7 -0
  56. package/dist/schema/call/allocation.js +1 -1
  57. package/dist/schema/call/arbitration.d.ts +4 -0
  58. package/dist/schema/call/arbitration.js +1 -1
  59. package/dist/schema/call/base.d.ts +52 -0
  60. package/dist/schema/call/base.js +1 -1
  61. package/dist/schema/call/bridge.d.ts +27 -0
  62. package/dist/schema/call/contact.d.ts +4 -0
  63. package/dist/schema/call/demand.d.ts +4 -0
  64. package/dist/schema/call/error-codes.d.ts +1 -1
  65. package/dist/schema/call/error-codes.js +1 -1
  66. package/dist/schema/call/guard.d.ts +12 -0
  67. package/dist/schema/call/handler.js +1 -1
  68. package/dist/schema/call/machine.d.ts +8 -0
  69. package/dist/schema/call/order.d.ts +4 -0
  70. package/dist/schema/call/order.js +1 -1
  71. package/dist/schema/call/payment.d.ts +4 -0
  72. package/dist/schema/call/permission.d.ts +4 -0
  73. package/dist/schema/call/personal.d.ts +4 -0
  74. package/dist/schema/call/progress.d.ts +4 -0
  75. package/dist/schema/call/proof.d.ts +8 -0
  76. package/dist/schema/call/repository.d.ts +4 -0
  77. package/dist/schema/call/repository.js +1 -1
  78. package/dist/schema/call/reward.d.ts +4 -0
  79. package/dist/schema/call/semantic-customer-advice.spec.js +1 -1
  80. package/dist/schema/call/semantic.d.ts +11 -0
  81. package/dist/schema/call/semantic.js +1 -1
  82. package/dist/schema/call/service.d.ts +14 -0
  83. package/dist/schema/call/service.js +1 -1
  84. package/dist/schema/call/treasury.d.ts +4 -0
  85. package/dist/schema/common/index.js +1 -1
  86. package/dist/schema/keeper/index.d.ts +5 -0
  87. package/dist/schema/local/index.d.ts +36 -0
  88. package/dist/schema/local/index.js +1 -1
  89. package/dist/schema/local/wip.d.ts +73 -0
  90. package/dist/schema/local/wip.js +1 -1
  91. package/dist/schema/messenger/index.d.ts +5 -0
  92. package/dist/schema/messenger/index.js +1 -1
  93. package/dist/schema/operations.d.ts +101 -0
  94. package/dist/schema/operations.js +1 -1
  95. package/dist/schema/query/bi.js +1 -1
  96. package/dist/schema/query/index.d.ts +19 -3
  97. package/dist/schema/query/index.js +1 -1
  98. package/dist/schema/schema-version.js +1 -1
  99. package/dist/schema/workflow/index.d.ts +2 -0
  100. package/dist/schema/workflow/index.js +1 -1
  101. package/dist/schema-query-impl/index.js +1 -1
  102. package/dist/schemas/account_operation.output.json +26 -1
  103. package/dist/schemas/bridge_operation.output.json +26 -1
  104. package/dist/schemas/bridge_operation.schema.json +40 -0
  105. package/dist/schemas/guard2file.schema.json +8 -0
  106. package/dist/schemas/index.json +1 -1
  107. package/dist/schemas/keeper_operation.output.json +24 -1
  108. package/dist/schemas/local_history_operation.output.json +26 -1
  109. package/dist/schemas/local_info_operation.output.json +26 -1
  110. package/dist/schemas/local_mark_operation.output.json +26 -1
  111. package/dist/schemas/machineNode2file.schema.json +8 -0
  112. package/dist/schemas/messenger_operation.output.json +24 -1
  113. package/dist/schemas/messenger_operation.schema.json +2 -2
  114. package/dist/schemas/monitor_events.output.json +24 -1
  115. package/dist/schemas/monitor_subscription.output.json +24 -1
  116. package/dist/schemas/onchain_events.output.json +24 -1
  117. package/dist/schemas/onchain_operations.output.json +74 -3
  118. package/dist/schemas/onchain_operations.schema.json +3286 -821
  119. package/dist/schemas/onchain_operations_allocation.schema.json +12 -0
  120. package/dist/schemas/onchain_operations_arbitration.schema.json +18 -10
  121. package/dist/schemas/onchain_operations_contact.schema.json +8 -0
  122. package/dist/schemas/onchain_operations_demand.schema.json +8 -0
  123. package/dist/schemas/onchain_operations_gen_passport.schema.json +8 -0
  124. package/dist/schemas/onchain_operations_gen_proof.schema.json +8 -0
  125. package/dist/schemas/onchain_operations_guard.schema.json +2896 -596
  126. package/dist/schemas/onchain_operations_machine.schema.json +8 -0
  127. package/dist/schemas/onchain_operations_order.schema.json +10 -2
  128. package/dist/schemas/onchain_operations_payment.schema.json +8 -0
  129. package/dist/schemas/onchain_operations_permission.schema.json +8 -0
  130. package/dist/schemas/onchain_operations_personal.schema.json +8 -0
  131. package/dist/schemas/onchain_operations_progress.schema.json +8 -0
  132. package/dist/schemas/onchain_operations_proof.schema.json +8 -0
  133. package/dist/schemas/onchain_operations_repository.schema.json +14 -6
  134. package/dist/schemas/onchain_operations_reward.schema.json +8 -0
  135. package/dist/schemas/onchain_operations_service.schema.json +43 -10
  136. package/dist/schemas/onchain_operations_treasury.schema.json +8 -0
  137. package/dist/schemas/onchain_table_data.output.json +35 -12
  138. package/dist/schemas/query_toolkit.output.json +1179 -10
  139. package/dist/schemas/query_toolkit.schema.json +11 -11
  140. package/dist/schemas/wip_file.output.json +221 -0
  141. package/dist/schemas/wip_file.schema.json +125 -0
  142. package/dist/schemas/workflow_operation.schema.json +8 -0
  143. package/dist/tools/handlers/config.js +1 -1
  144. package/dist/tools/handlers/dispatch-expectations.js +1 -1
  145. package/dist/tools/handlers/dispatch-expectations.spec.d.ts +1 -0
  146. package/dist/tools/handlers/dispatch-expectations.spec.js +1 -0
  147. package/dist/tools/handlers/onchain.js +1 -1
  148. package/dist/tools/handlers/wip-upload.d.ts +22 -0
  149. package/dist/tools/handlers/wip-upload.js +1 -0
  150. package/dist/tools/handlers/wip.js +1 -1
  151. package/dist/tools/handlers/workflow.js +1 -1
  152. package/dist/tools/index.js +1 -1
  153. package/dist/tools/move-fn-index.gen.js +1 -1
  154. package/dist/tools/registry/files.js +1 -1
  155. package/dist/tools/wip-deploy-assist.js +1 -1
  156. package/package.json +2 -2
@@ -1 +1 @@
1
- import{WOW_SINGLETON_IDS,objectTypeFromAddress}from'@wowok/wowok';import{EDGE_SCHEMAS}from'./edge-schema.js';const ADDR_RE=/^0x[0-9a-f]{64}$/;export function normAddr(a){if(typeof a!=='string')return undefined;const b=a['trim']()['toLowerCase']();return ADDR_RE['test'](b)?b:undefined;}export function rootOf(a){const b=a;return b?.['data']??b??{};}function dig(a,b){return b['split']('.')['reduce']((c,d)=>{if(c==null)return undefined;return c[d];},a);}function asArray(a){if(Array['isArray'](a))return a;if(a==null)return[];return[a];}function addrsOf(b,c){if(Array['isArray'](b))return b['flatMap'](d=>addrsOf(d,c));if(typeof b==='string'){const d=normAddr(b);return d?[d]:[];}if(b&&typeof b==='object'){const e=b,f=normAddr(e[c]??e['guard']??e['address']??e['who']);if(f)return[f];const g=e[c];if(g!==b&&Array['isArray'](g))return addrsOf(g,c);}return[];}export function walkDeepAddrs(b,c,d){let e=[{'rows':[],'value':b}];for(const g of c){const h=[];for(const i of e){for(const j of asArray(i['value'])){if(!j||typeof j!=='object')continue;const k=j,l=k[g];if(l==null)continue;for(const m of asArray(l)){if(m==null)continue;const n=typeof m==='object'?[...i['rows'],m]:i['rows'];h['push']({'rows':n,'value':m});}}}e=h;if(e['length']===0x0)return[];}const f=[];for(const {rows:p,value:q}of e){for(const r of asArray(q)){if(r==null)continue;if(typeof r==='string'){const t=normAddr(r);if(t)f['push']({'addr':t,'leaf':{},'rows':p});continue;}if(typeof r!=='object')continue;const s=r;for(const u of addrsOf(s,d||'guard')){f['push']({'addr':u,'leaf':s,'rows':p});}}}return f;}function leafContext(a){return Object['assign']({},...a['rows'],a['leaf']);}export function wfNodeId(a,b){return(normAddr(a)??a['toLowerCase']())+'::node::'+b;}function strAmt(a){if(a==null)return undefined;if(typeof a==='bigint')return a['toString']();const b=String(a);return b===''?undefined:b;}function numOrNull(a){if(a===null)return null;if(typeof a==='number'&&Number['isFinite'](a))return a;if(a!=null&&typeof a!=='object'){const b=Number(a);if(Number['isFinite'](b))return b;}return undefined;}function addrOrNull(a){if(a===null)return null;return normAddr(a)??undefined;}function num(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(a==null||typeof a==='object')return undefined;const b=Number(a);return Number['isFinite'](b)?b:undefined;}function extractFieldEdges(b,c,d){const e=rootOf(c),f=[];for(const g of EDGE_SCHEMAS){if(g['source']!==b)continue;const i=g['read'];if(i['kind']==='reverse'||i['kind']==='table'||i['kind']==='derived')continue;let j=[];switch(i['kind']){case'field':{const k=addrsOf(dig(e,i['path']),'guard')[0x0];if(k)j=[{'to':k}];break;}case'fields':{j=addrsOf(dig(e,i['path']),'guard')['map'](l=>({'to':l}));break;}case'structFields':{j=walkDeepAddrs(e,[i['path']],i['field'])['map'](l=>({'to':l['addr'],'payload':payloadFor(g['id'],leafContext(l),d)}));break;}case'deep':{if(g['id']==='progress.named_operator'){const l=asArray(e['namedOperator']);for(const m of l){const n=m??{};for(const p of asArray(n['operators'])){const q=normAddr(p);if(q)j['push']({'to':q,'key':String(n['name']??''),'payload':{'namedOperator':n['name']!=null?String(n['name']):null}});}}}else j=walkDeepAddrs(e,i['segments'],i['field'])['map'](r=>({'to':r['addr'],'payload':payloadFor(g['id'],leafContext(r),d)}));break;}}g['family']==='M'&&d&&(j=j['map'](s=>({...s,'payload':{'coinType':d,...s['payload']}})));if(j['length']>0x0)f['push']({'schemaId':g['id'],'refs':j});}return f;}function payloadFor(a,b,c){switch(a){case'payment.recipient':{const d=strAmt(b['amount']);return d!=null?{'amount':d,'coinType':c}:undefined;}case'arb.voter':return{'weight':Number(b['weight']??0x0)||undefined};case'contact.im':return{'imStatus':b['status']!=null?String(b['status']):undefined,'joinTime':typeof b['join_time']==='number'?b['join_time']:Number(b['join_time'])||undefined,'imDescription':b['description']!=null?String(b['description']):undefined};case'allocation.guard':case'service.order_allocator_guard':return b['mode']!=null?{'mode':clampMode(Number(b['mode']))}:undefined;case'treasury.deposit_guard':case'treasury.withdraw_guard':return{'identifier':numOrNull(b['identifier']),'storeFromId':numOrNull(b['store_from_id'])};default:return undefined;}}function clampMode(a){return a===0x1||a===0x2?a:0x0;}export const REVERSE_GROUP_WILDCARD='*';export function extractReverseRefs(a,b){const c=b??{};if(a===WOW_SINGLETON_IDS['registrar']){const f=[];for(const g of asArray(c['votes'])){const h=g??{},i=normAddr(h['who']);if(!i)continue;f['push']({'to':i,'payload':{'voteBits':(h['like']?0x2:0x0)|(h['dislike']?0x4:0x0)|(h['favor']?0x8:0x0),'voteLike':!!h['like'],'voteDislike':!!h['dislike'],'voteFavor':!!h['favor']}});}return f['length']?[{'schemaId':'target.vote','refs':f}]:[];}if(a===WOW_SINGLETON_IDS['entity'])return extractEntityProfile(c);const e=[];for(const j of asArray(c['items'])){const k=j??{},l=normAddr(k['permission']??k['contact']??k['order']??k['who']);if(!l)continue;const m=k['role']!=null?Number(k['role']):undefined;e['push']({'to':l,'payload':m!=null&&Number['isFinite'](m)?{'roleBits':m}:undefined});}return e['length']?[{'schemaId':REVERSE_GROUP_WILDCARD,'refs':e}]:[];}function extractEntityProfile(a){const b=[],c=typeof a['description']==='string'?a['description']:'',e=num(a['time']),f=[];for(const i of asArray(a['records'])){const j=i??{};if(typeof j['name']!=='string')continue;const k={'name':j['name']};if(j['value_type']!==undefined)k['valueType']=j['value_type'];else{if(j['typed_value']!==undefined)k['value']=j['typed_value'];}if(j['value']!==undefined)k['value']=j['value'];f['push'](k);}b['push']({'schemaId':'entity.profile','refs':[{'to':'','payload':{...c?{'description':c}:{},...e!=null?{'registeredAt':e}:{},...f['length']?{'profileRecords':f}:{}}}]});const g=normAddr(a['referrer']);g&&b['push']({'schemaId':'entity.referrer','refs':[{'to':g}]});const h=normAddr(a['resource']??a['mark_object']);return h&&b['push']({'schemaId':'entity.resource','refs':[{'to':h}]}),b;}export function extractTableRefs(a,b,c){switch(a){case'PermissionPerm':return extractPermissionTable(c);case'DemandPresenter':return extractPresenterTable(c);case'MachineNode':return extractMachineTable(b,c);case'TreasuryRecord':return extractTreasuryLedger(c);case'RewardClaimRecord':return extractRewardLedger(c);case'RepositoryData':return extractRepositoryDataTable(c);default:return[];}}export function extractEventRefs(a,b,c){const d=[];for(const e of c){const f=e??{},g=f['parsedJson']??{};if(a['matchField']!==undefined){if(normAddr(g[a['matchField']])!==b)continue;}else{if(a['matchSender']){if(normAddr(f['sender'])!==b)continue;}}const h=normAddr(g[a['targetField']]);if(!h)continue;const i=typeof f['timestampMs']==='string'?Number(f['timestampMs']):f['timestampMs'];d['push']({'to':h,'payload':{...g,...Number['isFinite'](i)?{'time':i}:{}}});}return d;}function extractPermissionTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['address']),g=Array['isArray'](e['perm'])?e['perm']['map'](Number):[];if(f)b['push']({'to':f,'payload':{'permIndices':g}});}return b['length']?[{'schemaId':'permission.entity','refs':b}]:[];}function extractPresenterTable(a){const b=[],c=[];for(const f of a){const g=rootOf(f['object']),h=normAddr(g['address']);if(h){b['push']({'to':h,'payload':{'service':normAddr(g['service'])??undefined,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined,'recommend':g['recommend']!=null?String(g['recommend']):undefined}});const i=normAddr(g['service']);i&&c['push']({'to':i,'key':h,'payload':{'presenter':h,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined}});}}const e=[];if(b['length'])e['push']({'schemaId':'demand.presenter','refs':b});if(c['length'])e['push']({'schemaId':'demand.presenter_service','refs':c});return e;}function extractTreasuryLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']);b['push']({'to':e,'payload':{'op':num(f['op']),'signer':normAddr(f['signer'])??undefined,'amount':strAmt(f['amount']),'time':num(f['time']),'externalGuard':addrOrNull(f['external_guard']),'storeFromId':addrOrNull(f['store_from_id'])}});}return b['length']?[{'schemaId':'treasury.record','refs':b}]:[];}function extractRewardLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']),g=(Array['isArray'](f['amount'])?f['amount']:[])['flatMap'](h=>{const i=h??{},j=normAddr(i['guard']);if(!j)return[];return[{'guard':j,'amount':strAmt(i['amount']),'time':num(i['time']),'storeFromId':addrOrNull(i['store_from_id'])}];});b['push']({'to':e,'payload':{'amount':strAmt(f['total']),'claims':g}});}return b['length']?[{'schemaId':'reward.claim','refs':b}]:[];}function extractRepositoryDataTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['id']);if(!f)continue;const g=e['key']!=null?String(e['key']):e['name']!=null?String(e['name']):undefined;b['push']({'to':f,'payload':{'dataName':g}});}return b['length']?[{'schemaId':'repository.data_about','refs':b}]:[];}function extractMachineTable(a,b){const c=[],e=[],g=[],h=new Set(),i=k=>{const l=String(k??'')['trim']();if(!l)return undefined;const m=wfNodeId(a,l);return!h['has'](m)&&(h['add'](m),c['push']({'to':m,'key':l,'payload':{'node':l}})),m;};for(const k of b){const l=rootOf(k['object']),m=String(l['name']??''),n=i(m);if(!n)continue;for(const o of asArray(l['value'])){const q=o??{},r=String(q['prev_node']??'')['trim']();if(r)i(r);const s=r?wfNodeId(a,r):undefined,t=Number(q['threshold']??0x0);for(const u of asArray(q['forwards'])){const v=u??{},w=String(v['name']??''),x=addrsOf(v['guard'],'guard')[0x0];s&&e['push']({'from':s,'to':n,'key':w||undefined,'payload':{'forward':w||undefined,'prevNode':r||undefined,'node':m,'threshold':t||undefined,'guard':x??undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}}),x&&g['push']({'to':x,'key':w||undefined,'payload':{'forward':w||undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}});}}}const j=[];if(c['length'])j['push']({'schemaId':'machine.node','refs':c});if(e['length'])j['push']({'schemaId':'wf.transition','refs':e});if(g['length'])j['push']({'schemaId':'wf.forward_guard','refs':g});return j;}export function inferObjectType(a){return objectTypeFromAddress(a)??undefined;}export function extractCoinType(a){if(typeof a!=='string'||!a['includes']('<'))return undefined;const b=a['slice'](a['indexOf']('<')+0x1,a['lastIndexOf']('>'));return b['trim']()||undefined;}export function extractObjectEdges(a,b){return extractFieldEdges(a,b,extractCoinType(b['type_raw']));}export function schemaById(a){return EDGE_SCHEMAS['find'](b=>b['id']===a);}
1
+ import{WOW_SINGLETON_IDS,objectTypeFromAddress}from'@wowok/wowok';import{EDGE_SCHEMAS}from'./edge-schema.js';const ADDR_RE=/^0x[0-9a-f]{64}$/;export function normAddr(a){if(typeof a!=='string')return undefined;const b=a['trim']()['toLowerCase']();return ADDR_RE['test'](b)?b:undefined;}export function rootOf(a){const b=a;return b?.['data']??b??{};}function dig(a,b){return b['split']('.')['reduce']((c,d)=>{if(c==null)return undefined;return c[d];},a);}function asArray(a){if(Array['isArray'](a))return a;if(a==null)return[];return[a];}function addrsOf(b,c){if(Array['isArray'](b))return b['flatMap'](d=>addrsOf(d,c));if(typeof b==='string'){const d=normAddr(b);return d?[d]:[];}if(b&&typeof b==='object'){const e=b,f=normAddr(e[c]??e['guard']??e['address']??e['who']);if(f)return[f];const g=e[c];if(g!==b&&Array['isArray'](g))return addrsOf(g,c);}return[];}export function walkDeepAddrs(b,c,d){let e=[{'rows':[],'value':b}];for(const g of c){const h=[];for(const i of e){for(const j of asArray(i['value'])){if(!j||typeof j!=='object')continue;const k=j,l=k[g];if(l==null)continue;for(const m of asArray(l)){if(m==null)continue;const n=typeof m==='object'?[...i['rows'],m]:i['rows'];h['push']({'rows':n,'value':m});}}}e=h;if(e['length']===0x0)return[];}const f=[];for(const {rows:p,value:q}of e){for(const r of asArray(q)){if(r==null)continue;if(typeof r==='string'){const t=normAddr(r);if(t)f['push']({'addr':t,'leaf':{},'rows':p});continue;}if(typeof r!=='object')continue;const s=r;for(const u of addrsOf(s,d||'guard')){f['push']({'addr':u,'leaf':s,'rows':p});}}}return f;}function leafContext(a){return Object['assign']({},...a['rows'],a['leaf']);}export function wfNodeId(a,b){return(normAddr(a)??a['toLowerCase']())+'::node::'+b;}function strAmt(a){if(a==null)return undefined;if(typeof a==='bigint')return a['toString']();const b=String(a);return b===''?undefined:b;}function numOrNull(a){if(a===null)return null;if(typeof a==='number'&&Number['isFinite'](a))return a;if(a!=null&&typeof a!=='object'){const b=Number(a);if(Number['isFinite'](b))return b;}return undefined;}function addrOrNull(a){if(a===null)return null;return normAddr(a)??undefined;}function num(a){if(typeof a==='number'&&Number['isFinite'](a))return a;if(a==null||typeof a==='object')return undefined;const b=Number(a);return Number['isFinite'](b)?b:undefined;}function extractFieldEdges(b,c,d){const e=rootOf(c),f=[];for(const g of EDGE_SCHEMAS){if(g['source']!==b)continue;const i=g['read'];if(i['kind']==='reverse'||i['kind']==='table'||i['kind']==='derived')continue;let j=[];switch(i['kind']){case'field':{const k=addrsOf(dig(e,i['path']),'guard')[0x0];if(k)j=[{'to':k}];break;}case'fields':{j=addrsOf(dig(e,i['path']),'guard')['map'](l=>({'to':l}));break;}case'structFields':{j=walkDeepAddrs(e,[i['path']],i['field'])['map'](l=>({'to':l['addr'],'payload':payloadFor(g['id'],leafContext(l),d)}));break;}case'deep':{if(g['id']==='progress.named_operator'){const l=asArray(e['namedOperator']);for(const m of l){const n=m??{};for(const p of asArray(n['operators'])){const q=normAddr(p);if(q)j['push']({'to':q,'key':String(n['name']??''),'payload':{'namedOperator':n['name']!=null?String(n['name']):null}});}}}else j=walkDeepAddrs(e,i['segments'],i['field'])['map'](r=>({'to':r['addr'],'payload':payloadFor(g['id'],leafContext(r),d)}));break;}}g['family']==='M'&&d&&(j=j['map'](s=>({...s,'payload':{'coinType':d,...s['payload']}})));if(j['length']>0x0)f['push']({'schemaId':g['id'],'refs':j});}return f;}function payloadFor(a,b,c){switch(a){case'payment.recipient':{const d=strAmt(b['amount']);return d!=null?{'amount':d,'coinType':c}:undefined;}case'arb.voter':return{'weight':Number(b['weight']??0x0)||undefined};case'contact.im':return{'imStatus':b['status']!=null?String(b['status']):undefined,'joinTime':typeof b['join_time']==='number'?b['join_time']:Number(b['join_time'])||undefined,'imDescription':b['description']!=null?String(b['description']):undefined};case'allocation.guard':case'service.order_allocator_guard':return b['mode']!=null?{'mode':clampMode(Number(b['mode']))}:undefined;case'treasury.deposit_guard':case'treasury.withdraw_guard':return{'identifier':numOrNull(b['identifier']),'storeFromId':numOrNull(b['store_from_id'])};default:return undefined;}}function clampMode(a){return a===0x1||a===0x2?a:0x0;}export const REVERSE_GROUP_WILDCARD='*';export function extractReverseRefs(a,b){const c=b??{};if(a===WOW_SINGLETON_IDS['registrar']){const f=[];for(const g of asArray(c['votes'])){const h=g??{},i=normAddr(h['who']);if(!i)continue;f['push']({'to':i,'payload':{'voteBits':(h['like']?0x2:0x0)|(h['dislike']?0x4:0x0)|(h['favor']?0x8:0x0),'voteLike':!!h['like'],'voteDislike':!!h['dislike'],'voteFavor':!!h['favor']}});}return f['length']?[{'schemaId':'target.vote','refs':f}]:[];}if(a===WOW_SINGLETON_IDS['entity'])return extractEntityProfile(c);const e=[];for(const j of asArray(c['items'])){const k=j??{},l=normAddr(k['permission']??k['contact']??k['order']??k['who']);if(!l)continue;const m=k['role']!=null?Number(k['role']):undefined;e['push']({'to':l,'payload':m!=null&&Number['isFinite'](m)?{'roleBits':m}:undefined});}return e['length']?[{'schemaId':REVERSE_GROUP_WILDCARD,'refs':e}]:[];}function extractEntityProfile(a){const b=[],c=typeof a['description']==='string'?a['description']:'',e=num(a['time']),f=[];for(const i of asArray(a['records'])){const j=i??{};if(typeof j['name']!=='string')continue;const k={'name':j['name']};if(j['value_type']!==undefined)k['valueType']=j['value_type'];else{if(j['typed_value']!==undefined)k['value']=j['typed_value'];}if(j['value']!==undefined)k['value']=j['value'];f['push'](k);}b['push']({'schemaId':'entity.profile','refs':[{'to':'','payload':{...c?{'description':c}:{},...e!=null?{'registeredAt':e}:{},...f['length']?{'profileRecords':f}:{}}}]});const g=normAddr(a['referrer']);g&&b['push']({'schemaId':'entity.referrer','refs':[{'to':g}]});const h=normAddr(a['resource']??a['mark_object']);return h&&b['push']({'schemaId':'entity.resource','refs':[{'to':h}]}),b;}export function extractTableRefs(a,b,c){switch(a){case'PermissionPerm':return extractPermissionTable(c);case'DemandPresenter':return extractPresenterTable(c);case'MachineNode':return extractMachineTable(b,c);case'TreasuryRecord':return extractTreasuryLedger(c);case'RewardClaimRecord':return extractRewardLedger(c);case'RepositoryData':return extractRepositoryDataTable(c);default:return[];}}export function extractEventRefs(a,b,c){const d=[];for(const e of c){const f=e??{},g=f['parsedJson']??{};if(a['matchField']!==undefined){if(normAddr(g[a['matchField']])!==b)continue;}else{if(a['matchSender']){if(normAddr(f['sender'])!==b)continue;}}const h=normAddr(g[a['targetField']]);if(!h)continue;const i=typeof f['timestampMs']==='string'?Number(f['timestampMs']):f['timestampMs'];d['push']({'to':h,'payload':{...g,...Number['isFinite'](i)?{'time':i}:{}}});}return d;}function extractPermissionTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['address']),g=Array['isArray'](e['perm'])?e['perm']['map'](Number):[];if(f)b['push']({'to':f,'payload':{'permIndices':g}});}return b['length']?[{'schemaId':'permission.entity','refs':b}]:[];}function extractPresenterTable(a){const b=[],c=[];for(const f of a){const g=rootOf(f['object']),h=normAddr(g['address']);if(h){b['push']({'to':h,'payload':{'service':normAddr(g['service'])??undefined,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined,'recommend':g['recommend']!=null?String(g['recommend']):undefined}});const i=normAddr(g['service']);i&&c['push']({'to':i,'key':h,'payload':{'presenter':h,'score':g['acceptance_score']!=null?Number(g['acceptance_score']):undefined}});}}const e=[];if(b['length'])e['push']({'schemaId':'demand.presenter','refs':b});if(c['length'])e['push']({'schemaId':'demand.presenter_service','refs':c});return e;}function extractTreasuryLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']);b['push']({'to':e,'payload':{'op':num(f['op']),'signer':normAddr(f['signer'])??undefined,'amount':strAmt(f['amount']),'time':num(f['time']),'externalGuard':addrOrNull(f['external_guard']),'storeFromId':addrOrNull(f['store_from_id'])}});}return b['length']?[{'schemaId':'treasury.record','refs':b}]:[];}function extractRewardLedger(a){const b=[];for(const c of a){const e=normAddr(c['key']);if(!e)continue;const f=rootOf(c['object']),g=(Array['isArray'](f['amount'])?f['amount']:[])['flatMap'](h=>{const i=h??{},j=normAddr(i['guard']);if(!j)return[];return[{'guard':j,'amount':strAmt(i['amount']),'time':num(i['time']),'storeFromId':addrOrNull(i['store_from_id'])}];});b['push']({'to':e,'payload':{'amount':strAmt(f['total']),'claims':g}});}return b['length']?[{'schemaId':'reward.claim','refs':b}]:[];}function extractRepositoryDataTable(a){const b=[];for(const c of a){const e=rootOf(c['object']),f=normAddr(e['id']);if(!f)continue;const g=e['key']!=null?String(e['key']):e['name']!=null?String(e['name']):undefined;b['push']({'to':f,'payload':{'dataName':g}});}return b['length']?[{'schemaId':'repository.data_about','refs':b}]:[];}function extractMachineTable(a,b){const c=[],e=[],g=[],h=new Set(),i=k=>{const l=String(k??'')['trim']();if(!l)return undefined;const m=wfNodeId(a,l);return!h['has'](m)&&(h['add'](m),c['push']({'to':m,'key':l,'payload':{'node':l}})),m;};for(const k of b){const l=rootOf(k['object']),m=String(l['name']??''),n=i(m);if(!n)continue;for(const o of asArray(l['value'])){const q=o??{},r=String(q['prev_node']??'')['trim']();if(r)i(r);const s=r?wfNodeId(a,r):n,t=Number(q['threshold']??0x0);for(const u of asArray(q['forwards'])){const v=u??{},w=String(v['name']??''),x=addrsOf(v['guard'],'guard')[0x0];s&&e['push']({'from':s,'to':n,'key':w||undefined,'payload':{'forward':w||undefined,'prevNode':r,'node':m,'threshold':t||undefined,'guard':x??undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}}),x&&g['push']({'to':x,'key':w||undefined,'payload':{'forward':w||undefined,'weight':Number(v['weight']??0x0)||undefined,'namedOperator':v['namedOperator']!=null?String(v['namedOperator']):null,'permissionIndex':v['permissionIndex']!=null?Number(v['permissionIndex']):null}});}}}const j=[];if(c['length'])j['push']({'schemaId':'machine.node','refs':c});if(e['length'])j['push']({'schemaId':'wf.transition','refs':e});if(g['length'])j['push']({'schemaId':'wf.forward_guard','refs':g});return j;}export function inferObjectType(a){return objectTypeFromAddress(a)??undefined;}export function extractCoinType(a){if(typeof a!=='string'||!a['includes']('<'))return undefined;const b=a['slice'](a['indexOf']('<')+0x1,a['lastIndexOf']('>'));return b['trim']()||undefined;}export function extractObjectEdges(a,b){return extractFieldEdges(a,b,extractCoinType(b['type_raw']));}export function schemaById(a){return EDGE_SCHEMAS['find'](b=>b['id']===a);}
@@ -99,5 +99,6 @@ export interface RiskFindingRefs {
99
99
  severity: string;
100
100
  title: string;
101
101
  }>;
102
+ where: string[];
102
103
  }
103
104
  export declare function projectEvaluationFacts(v: Viewport, target: string, findings: Finding[]): GraphEvaluationFacts;
@@ -1 +1 @@
1
- import{RETENTION_RANK,pathConfidence}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.'};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\x20recent\x20order\x20volume\x20(the\x20safety\x20buffer\x20for\x20payouts).'},{'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'],'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 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(a,b,c){const f=b['toLowerCase'](),g=[],h=new Map(),i=new Map(),j=(U,V,W='exact')=>{h['set'](U,V),i['set'](U,W);},k=a['graph']['nodes']['get'](f),l=a['visibleNodes']['has'](f),m=!!(l&&k&&k['raw']&&k['state']!=='error'&&k['state']!=='stub'&&k['objectType']==='Service'),o=m?nodeData(a,f)??{}:{},q=k?.['coinType'];j('service_snapshot',m?'present':'gap');const r=Array['isArray'](o['arbitrations'])?o['arbitrations']['map'](String)['filter'](Boolean):[],u=outEdges(a,f,'service.arbitration'),w=[];let x=!![];for(const U of r){if(!isFetched(a,U)){x=![];continue;}const V=nodeData(a,U)??{},W=Array['isArray'](V['voting_guard'])?V['voting_guard']:[];w['push']({'id':U['toLowerCase'](),'paused':flag(V['bPaused']),'fee':toBigInt(V['fee'])['toString'](),'votingGuards':W['length'],'usageGuard':typeof V['usage_guard']==='string'&&V['usage_guard']!==''});}if(!m)j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','provenance':snapProvenance([f]),'evidence':'Arbitration\x20configuration\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(r['length']===0x0)j('arbitration','empty'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'empty','value':[],'provenance':snapProvenance([f,'Service.arbitrations']),'evidence':'Service\x20snapshot\x20shows\x20no\x20arbitration\x20service\x20configured\x20(verified\x20absence).'});else!x?(j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'/'+r['length']+'\x20arbitration\x20service(s)\x20resolved;\x20the\x20rest\x20failed\x20to\x20fetch.'})):(j('arbitration','present',u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u)['confidence']:'exact'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'present','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'\x20arbitration\x20service(s)\x20resolved\x20from\x20the\x20snapshot\x20with\x20voting\x20rosters.'}));}const y=outEdges(a,f,'target.vote'),z=truncationOf(a,f,'target.vote'),A={'total':y['length'],'like':0x0,'dislike':0x0,'favor':0x0};for(const X of y){const Y=typeof X['payload']?.['voteBits']==='number'?X['payload']['voteBits']:0x0;if(Y&0x2)A['like']+=0x1;if(Y&0x4)A['dislike']+=0x1;if(Y&0x8)A['favor']+=0x1;}const B=y['length']>0x0?edgeProvenance(a,[f,'target.vote'],y):snapProvenance([f,'registrar.votes']);if(!m)j('reviews','gap'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','provenance':snapProvenance([f]),'evidence':'Reputation\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(z)j('reviews','gap',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','value':A,'provenance':{...B,'window':z},'evidence':'Vote\x20window\x20truncated\x20at\x20'+z['limit']+';\x20'+A['total']+'\x20vote(s)\x20visible\x20—\x20counts\x20are\x20a\x20floor.'});else A['total']===0x0?(j('reviews','empty'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'empty','value':A,'provenance':B,'evidence':'No\x20registrar\x20votes\x20recorded\x20for\x20the\x20service\x20(window\x20read\x20empty,\x20no\x20truncation).'})):(j('reviews','present',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'present','value':A,'provenance':B,'evidence':A['total']+'\x20registrar\x20vote(s):\x20'+A['like']+'\x20like,\x20'+A['dislike']+'\x20dislike,\x20'+A['favor']+'\x20favor.'}));}const C=outEdges(a,f,'service.order'),D=truncationOf(a,f,'service.order'),E={'observed':C['length'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':'0'};let F=0x0n;for(const Z of C){const a0=orderCompletionInGraph(a['graph'],Z['to'])['status'];if(a0==='completed')E['completed']+=0x1;else{if(a0==='in_progress')E['inProgress']+=0x1;else E['unknown']+=0x1;}F+=toBigInt(nodeData(a,Z['to'])?.['amount']);}E['windowedAmount']=F['toString']();const G=C['length']>0x0?edgeProvenance(a,[f,'service.order','Order'],C):snapProvenance([f,'service.order']);let H;if(!m)H='gap';else{if(D)H='gap';else H=C['length']===0x0?'empty':'present';}j('fulfillment_orders',H,G['confidence']);if(H==='gap'&&m)g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','value':E,'provenance':{...G,'window':D},'evidence':'Order\x20window\x20truncated\x20at\x20'+D?.['limit']+'\x20(observed\x20'+D?.['observed']+');\x20'+E['observed']+'\x20order(s)\x20visible\x20—\x20completion\x20stats\x20are\x20a\x20partial\x20floor.'});else{if(H==='empty')g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'empty','value':E,'provenance':G,'evidence':'No\x20orders\x20in\x20the\x20service\x20window\x20(verified\x20absence).'});else H==='present'?g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'present','value':E,'provenance':G,'evidence':E['observed']+'\x20recent\x20order(s):\x20'+E['completed']+'\x20completed,\x20'+E['inProgress']+'\x20in\x20progress,\x20'+E['unknown']+'\x20unresolved.'}):g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','provenance':snapProvenance([f]),'evidence':'Order\x20window\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});}const I=typeof o['machine']==='string'?o['machine']:'',J=I!==''&&isFetched(a,I),K=I===''?'':I['toLowerCase']()+'::node::',L=K===''?[]:a['graph']['edges']['filter'](a1=>a1['schema']==='wf.transition'&&a1['from']['startsWith'](K)),M=new Set();for(const a1 of L){M['add'](a1['from']);const a2=String(a1['payload']?.['node']??'');if(a2!=='')M['add'](''+K+a2);}let N,O;if(!m)N='gap',O='Workflow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.';else{if(I==='')N='empty',O='No\x20workflow\x20template\x20configured\x20(verified\x20absence).';else{if(!J)N='gap',O='Machine\x20template\x20referenced\x20but\x20not\x20fetched\x20(fetch\x20gap).';else L['length']===0x0?(N='gap',O='Machine\x20fetched\x20but\x20no\x20wf.transition\x20edges\x20—\x20terminal\x20set\x20unverifiable;\x20completion\x20states\x20stay\x20unknown.'):(N='present',O='Machine\x20template\x20resolved\x20with\x20'+M['size']+'\x20workflow\x20node(s);\x20terminal\x20set\x20verifiable.');}}j('fulfillment_workflow',N,N==='present'?'exact':N==='empty'?'exact':'windowed'),g['push']({'dimension':'fulfillment','key':'fulfillment.workflow','state':N,...I!==''&&J?{'value':{'machine':I['toLowerCase'](),'nodes':M['size']}}:{},'provenance':N==='present'?edgeProvenance(a,[f,'service.machine','wf.transition'],L):snapProvenance([f,'Service.machine']),'evidence':O});const P=toBigInt(o['compensation_fund']);if(!m)j('fund_safety','gap'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'gap','provenance':snapProvenance([f]),'evidence':'Fund\x20backing\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'}),g['push']({'dimension':'fund_safety','key':'fund.exposure','state':'gap','provenance':snapProvenance([f]),'evidence':'Payout\x20exposure\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{j('fund_safety','present'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'present','value':{'fund':P['toString'](),...q?{'coinType':q}:{}},'provenance':snapProvenance([f,'Service.compensation_fund']),'evidence':'Compensation\x20fund\x20'+P['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'.'});const a3=F*0x3n,a4=worstState('present',H),a5=c['find'](a6=>a6['id']==='R2:'+f);g['push']({'dimension':'fund_safety','key':'fund.exposure','state':a4,'value':{'fund':P['toString'](),'windowedCount':E['observed'],'windowedAmount':F['toString'](),'neededCeiling':a3['toString'](),'coverageMet':P>=a3},'provenance':C['length']>0x0?edgeProvenance(a,[f,'service.order','Order.amount','Service.compensation_fund'],C):snapProvenance([f,'Service.compensation_fund']),'findingIds':a5?[a5['id']]:undefined,'evidence':H==='empty'?'No\x20recent\x20orders;\x20no\x20payout\x20exposure\x20to\x20cover.':'Recent\x20orders\x20total\x20'+F['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'\x20across\x20'+E['observed']+'\x20order(s);\x20the\x20compensation\x20fund\x20should\x20cover\x20at\x20least\x203x\x20that\x20('+a3['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+')\x20—\x20coverage\x20'+(P>=a3?'met':'not\x20met')+(D?'\x20(older\x20orders\x20outside\x20the\x20fetch\x20window,\x20floor\x20value\x20only)':'')+'.'});}if(!m)j('transparency','gap'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'gap','provenance':snapProvenance([f]),'evidence':'Transparency\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{const a6=typeof o['setting_lock_duration']==='number'?o['setting_lock_duration']:Number(toBigInt(o['setting_lock_duration'])),a7=flag(o['bPublished']);j('transparency','present'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'present','value':{'description':typeof o['description']==='string'?o['description']:'','location':typeof o['location']==='string'?o['location']:'','settingLockDuration':Number['isFinite'](a6)?a6:0x0,'published':a7,'paused':flag(o['bPaused'])},'provenance':snapProvenance([f,'Service.bPublished','Service.setting_lock_duration']),'findingIds':c['some'](a8=>a8['id']==='R6:'+f)?['R6:'+f]:undefined,'evidence':'Service\x20profile:\x20description\x20'+(typeof o['description']==='string'&&o['description']!==''?'provided':'not\x20provided')+',\x20location\x20'+(typeof o['location']==='string'&&o['location']!==''?'provided':'not\x20provided')+',\x20service\x20lock\x20'+a6+'\x20ms,\x20'+(a7?'published':'unpublished')+'.'});}for(const a8 of['risk_workflow','risk_fund','risk_trust','risk_behavior']){const a9=RISK_RULE_SOURCES[a8];let aa='present',ab,ac=-0x1;for(const ag of a9['slots']){const ah=h['get'](ag)??'gap';STATE_RANK[ah]>ac&&(ac=STATE_RANK[ah],aa=ah,ab=ag);}let ae;if(aa==='gap')ae='windowed';else{if(aa==='empty')ae='bounded';else ae=ab&&i['get'](ab)||'exact';}const af=c['filter'](ai=>a9['ruleIds']['some'](aj=>ai['id']['startsWith'](aj+':')));g['push']({'dimension':a8,'key':a8+'.findings','state':aa,'value':{'findings':af['map'](ai=>({'id':ai['id'],'severity':ai['severity'],'title':ai['title']}))},'provenance':{'path':[f,...a9['slots']],'retention':'derived','confidence':ae},'findingIds':af['map'](ai=>ai['id']),'evidence':aa==='gap'?'Input\x20evidence\x20has\x20fetch\x20gaps;\x20the\x20risk\x20conclusion\x20is\x20unverifiable.':aa==='empty'?'Input\x20evidence\x20is\x20configured-empty;\x20the\x20risk\x20rules\x20are\x20not\x20applicable.':af['length']>0x0?af['length']+'\x20structural\x20risk\x20finding(s)\x20reused\x20from\x20the\x20analyzer\x20registry.':'No\x20risk\x20fired;\x20input\x20evidence\x20slots\x20are\x20fully\x20materialized.'});}const Q=[];for(const ai of a['visibleNodes']){const aj=profileOf(a,ai);if(!aj)continue;const ak=Array['isArray'](aj['profileRecords'])?aj['profileRecords']:undefined;Q['push']({'nodeId':ai,...typeof aj['registeredAt']==='number'?{'registeredAt':aj['registeredAt']}:{},'hasDescription':!!aj['hasDescription']||typeof aj['description']==='string','recordCount':typeof aj['recordCount']==='number'?aj['recordCount']:ak?.['length']??0x0,...typeof aj['description']==='string'?{'description':aj['description']}:{},...ak?{'profileRecords':ak}:{}});}const R=REQUIRED_SLOTS['length'],S=REQUIRED_SLOTS['filter'](({slot:al})=>h['get'](al)==='present')['length'],T=R===0x0?0x64:Math['round'](S/R*0x64);return{'target':f,'role':String(a['role']),'facts':g,'slots':REQUIRED_SLOTS['map'](({slot:al,label:am,gloss:an})=>({'slot':al,'label':am,'gloss':an,'required':!![],'state':h['get'](al)??'gap','facts':[...SLOT_FACTS[al]??[]]})),'completeness':T,'profiles':Q};}
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.'};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\x20recent\x20order\x20volume\x20(the\x20safety\x20buffer\x20for\x20payouts).'},{'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'],'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 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(a,b,c){const f=b['toLowerCase'](),g=[],h=new Map(),i=new Map(),j=(U,V,W='exact')=>{h['set'](U,V),i['set'](U,W);},k=a['graph']['nodes']['get'](f),l=a['visibleNodes']['has'](f),m=!!(l&&k&&k['raw']&&k['state']!=='error'&&k['state']!=='stub'&&k['objectType']==='Service'),o=m?nodeData(a,f)??{}:{},q=k?.['coinType'];j('service_snapshot',m?'present':'gap');const r=Array['isArray'](o['arbitrations'])?o['arbitrations']['map'](String)['filter'](Boolean):[],u=outEdges(a,f,'service.arbitration'),w=[];let x=!![];for(const U of r){if(!isFetched(a,U)){x=![];continue;}const V=nodeData(a,U)??{},W=Array['isArray'](V['voting_guard'])?V['voting_guard']:[];w['push']({'id':U['toLowerCase'](),'paused':flag(V['bPaused']),'fee':toBigInt(V['fee'])['toString'](),'votingGuards':W['length'],'usageGuard':typeof V['usage_guard']==='string'&&V['usage_guard']!==''});}if(!m)j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','provenance':snapProvenance([f]),'evidence':'Arbitration\x20configuration\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(r['length']===0x0)j('arbitration','empty'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'empty','value':[],'provenance':snapProvenance([f,'Service.arbitrations']),'evidence':'Service\x20snapshot\x20shows\x20no\x20arbitration\x20service\x20configured\x20(verified\x20absence).'});else!x?(j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'/'+r['length']+'\x20arbitration\x20service(s)\x20resolved;\x20the\x20rest\x20failed\x20to\x20fetch.'})):(j('arbitration','present',u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u)['confidence']:'exact'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'present','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'\x20arbitration\x20service(s)\x20resolved\x20from\x20the\x20snapshot\x20with\x20voting\x20rosters.'}));}const y=outEdges(a,f,'target.vote'),z=truncationOf(a,f,'target.vote'),A={'total':y['length'],'like':0x0,'dislike':0x0,'favor':0x0};for(const X of y){const Y=typeof X['payload']?.['voteBits']==='number'?X['payload']['voteBits']:0x0;if(Y&0x2)A['like']+=0x1;if(Y&0x4)A['dislike']+=0x1;if(Y&0x8)A['favor']+=0x1;}const B=y['length']>0x0?edgeProvenance(a,[f,'target.vote'],y):snapProvenance([f,'registrar.votes']);if(!m)j('reviews','gap'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','provenance':snapProvenance([f]),'evidence':'Reputation\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(z)j('reviews','gap',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','value':A,'provenance':{...B,'window':z},'evidence':'Vote\x20window\x20truncated\x20at\x20'+z['limit']+';\x20'+A['total']+'\x20vote(s)\x20visible\x20—\x20counts\x20are\x20a\x20floor.'});else A['total']===0x0?(j('reviews','empty'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'empty','value':A,'provenance':B,'evidence':'No\x20registrar\x20votes\x20recorded\x20for\x20the\x20service\x20(window\x20read\x20empty,\x20no\x20truncation).'})):(j('reviews','present',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'present','value':A,'provenance':B,'evidence':A['total']+'\x20registrar\x20vote(s):\x20'+A['like']+'\x20like,\x20'+A['dislike']+'\x20dislike,\x20'+A['favor']+'\x20favor.'}));}const C=outEdges(a,f,'service.order'),D=truncationOf(a,f,'service.order'),E={'observed':C['length'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':'0'};let F=0x0n;for(const Z of C){const a0=orderCompletionInGraph(a['graph'],Z['to'])['status'];if(a0==='completed')E['completed']+=0x1;else{if(a0==='in_progress')E['inProgress']+=0x1;else E['unknown']+=0x1;}F+=toBigInt(nodeData(a,Z['to'])?.['amount']);}E['windowedAmount']=F['toString']();const G=C['length']>0x0?edgeProvenance(a,[f,'service.order','Order'],C):snapProvenance([f,'service.order']);let H;if(!m)H='gap';else{if(D)H='gap';else H=C['length']===0x0?'empty':'present';}j('fulfillment_orders',H,G['confidence']);if(H==='gap'&&m)g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','value':E,'provenance':{...G,'window':D},'evidence':'Order\x20window\x20truncated\x20at\x20'+D?.['limit']+'\x20(observed\x20'+D?.['observed']+');\x20'+E['observed']+'\x20order(s)\x20visible\x20—\x20completion\x20stats\x20are\x20a\x20partial\x20floor.'});else{if(H==='empty')g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'empty','value':E,'provenance':G,'evidence':'No\x20orders\x20in\x20the\x20service\x20window\x20(verified\x20absence).'});else H==='present'?g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'present','value':E,'provenance':G,'evidence':E['observed']+'\x20recent\x20order(s):\x20'+E['completed']+'\x20completed,\x20'+E['inProgress']+'\x20in\x20progress,\x20'+E['unknown']+'\x20unresolved.'}):g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','provenance':snapProvenance([f]),'evidence':'Order\x20window\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});}const I=typeof o['machine']==='string'?o['machine']:'',J=I!==''&&isFetched(a,I),K=I===''?'':I['toLowerCase']()+'::node::',L=K===''?[]:a['graph']['edges']['filter'](a1=>a1['schema']==='wf.transition'&&a1['from']['startsWith'](K)),M=new Set();for(const a1 of L){M['add'](a1['from']);const a2=String(a1['payload']?.['node']??'');if(a2!=='')M['add'](''+K+a2);}let N,O;if(!m)N='gap',O='Workflow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.';else{if(I==='')N='empty',O='No\x20workflow\x20template\x20configured\x20(verified\x20absence).';else{if(!J)N='gap',O='Machine\x20template\x20referenced\x20but\x20not\x20fetched\x20(fetch\x20gap).';else L['length']===0x0?(N='gap',O='Machine\x20fetched\x20but\x20no\x20wf.transition\x20edges\x20—\x20terminal\x20set\x20unverifiable;\x20completion\x20states\x20stay\x20unknown.'):(N='present',O='Machine\x20template\x20resolved\x20with\x20'+M['size']+'\x20workflow\x20node(s);\x20terminal\x20set\x20verifiable.');}}j('fulfillment_workflow',N,N==='present'?'exact':N==='empty'?'exact':'windowed'),g['push']({'dimension':'fulfillment','key':'fulfillment.workflow','state':N,...I!==''&&J?{'value':{'machine':I['toLowerCase'](),'nodes':M['size']}}:{},'provenance':N==='present'?edgeProvenance(a,[f,'service.machine','wf.transition'],L):snapProvenance([f,'Service.machine']),'evidence':O});const P=toBigInt(o['compensation_fund']);if(!m)j('fund_safety','gap'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'gap','provenance':snapProvenance([f]),'evidence':'Fund\x20backing\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'}),g['push']({'dimension':'fund_safety','key':'fund.exposure','state':'gap','provenance':snapProvenance([f]),'evidence':'Payout\x20exposure\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{j('fund_safety','present'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'present','value':{'fund':P['toString'](),...q?{'coinType':q}:{}},'provenance':snapProvenance([f,'Service.compensation_fund']),'evidence':'Compensation\x20fund\x20'+P['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'.'});const a3=F*0x3n,a4=worstState('present',H),a5=c['find'](a6=>a6['id']==='R2:'+f);g['push']({'dimension':'fund_safety','key':'fund.exposure','state':a4,'value':{'fund':P['toString'](),'windowedCount':E['observed'],'windowedAmount':F['toString'](),'neededCeiling':a3['toString'](),'coverageMet':P>=a3},'provenance':C['length']>0x0?edgeProvenance(a,[f,'service.order','Order.amount','Service.compensation_fund'],C):snapProvenance([f,'Service.compensation_fund']),'findingIds':a5?[a5['id']]:undefined,'evidence':H==='empty'?'No\x20recent\x20orders;\x20no\x20payout\x20exposure\x20to\x20cover.':'Recent\x20orders\x20total\x20'+F['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'\x20across\x20'+E['observed']+'\x20order(s);\x20the\x20compensation\x20fund\x20should\x20cover\x20at\x20least\x203x\x20that\x20('+a3['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+')\x20—\x20coverage\x20'+(P>=a3?'met':'not\x20met')+(D?'\x20(older\x20orders\x20outside\x20the\x20fetch\x20window,\x20floor\x20value\x20only)':'')+'.'});}if(!m)j('transparency','gap'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'gap','provenance':snapProvenance([f]),'evidence':'Transparency\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{const a6=typeof o['setting_lock_duration']==='number'?o['setting_lock_duration']:Number(toBigInt(o['setting_lock_duration'])),a7=flag(o['bPublished']);j('transparency','present'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'present','value':{'description':typeof o['description']==='string'?o['description']:'','location':typeof o['location']==='string'?o['location']:'','settingLockDuration':Number['isFinite'](a6)?a6:0x0,'published':a7,'paused':flag(o['bPaused'])},'provenance':snapProvenance([f,'Service.bPublished','Service.setting_lock_duration']),'findingIds':c['some'](a8=>a8['id']==='R6:'+f)?['R6:'+f]:undefined,'evidence':'Service\x20profile:\x20description\x20'+(typeof o['description']==='string'&&o['description']!==''?'provided':'not\x20provided')+',\x20location\x20'+(typeof o['location']==='string'&&o['location']!==''?'provided':'not\x20provided')+',\x20service\x20lock\x20'+a6+'\x20ms,\x20'+(a7?'published':'unpublished')+'.'});}for(const a8 of['risk_workflow','risk_fund','risk_trust','risk_behavior']){const a9=RISK_RULE_SOURCES[a8];let aa='present',ab,ac=-0x1;for(const ag of a9['slots']){const ah=h['get'](ag)??'gap';STATE_RANK[ah]>ac&&(ac=STATE_RANK[ah],aa=ah,ab=ag);}let ae;if(aa==='gap')ae='windowed';else{if(aa==='empty')ae='bounded';else ae=ab&&i['get'](ab)||'exact';}const af=c['filter'](ai=>a9['ruleIds']['some'](aj=>ai['id']['startsWith'](aj+':')));g['push']({'dimension':a8,'key':a8+'.findings','state':aa,'value':{'findings':af['map'](ai=>({'id':ai['id'],'severity':ai['severity'],'title':ai['title']})),'where':af['map'](ai=>findingWhere(ai))},'provenance':{'path':[f,...a9['slots']],'retention':'derived','confidence':ae},'findingIds':af['map'](ai=>ai['id']),'evidence':aa==='gap'?'Input\x20evidence\x20has\x20fetch\x20gaps;\x20the\x20risk\x20conclusion\x20is\x20unverifiable.':aa==='empty'?'Input\x20evidence\x20is\x20configured-empty;\x20the\x20risk\x20rules\x20are\x20not\x20applicable.':af['length']>0x0?af['length']+'\x20structural\x20risk\x20finding(s)\x20reused\x20from\x20the\x20analyzer\x20registry.':'No\x20risk\x20fired;\x20input\x20evidence\x20slots\x20are\x20fully\x20materialized.'});}const Q=[];for(const ai of a['visibleNodes']){const aj=profileOf(a,ai);if(!aj)continue;const ak=Array['isArray'](aj['profileRecords'])?aj['profileRecords']:undefined;Q['push']({'nodeId':ai,...typeof aj['registeredAt']==='number'?{'registeredAt':aj['registeredAt']}:{},'hasDescription':!!aj['hasDescription']||typeof aj['description']==='string','recordCount':typeof aj['recordCount']==='number'?aj['recordCount']:ak?.['length']??0x0,...typeof aj['description']==='string'?{'description':aj['description']}:{},...ak?{'profileRecords':ak}:{}});}const R=REQUIRED_SLOTS['length'],S=REQUIRED_SLOTS['filter'](({slot:al})=>h['get'](al)==='present')['length'],T=R===0x0?0x64:Math['round'](S/R*0x64);return{'target':f,'role':String(a['role']),'facts':g,'slots':REQUIRED_SLOTS['map'](({slot:al,label:am,gloss:an})=>({'slot':al,'label':am,'gloss':an,'required':!![],'state':h['get'](al)??'gap','facts':[...SLOT_FACTS[al]??[]]})),'completeness':T,'profiles':Q};}
@@ -1 +1 @@
1
- function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b);export const T_USDT='0x2::wow::coins::USDT';export const FULL={'merchant':eoa(0x1),'buyer':eoa(0x2),'agent':eoa(0x3),'voter1':eoa(0x4),'voter2':eoa(0x5),'member':eoa(0x6),'supplier':eoa(0x7),'claimant':eoa(0x8),'signer':eoa(0x9),'buyer2':eoa(0xa),'svc':obj(0x4,0xa),'mac':obj(0x5,0xb),'perm':obj(0x0,0x33),'permArb':obj(0x0,0x34),'permRew':obj(0x0,0x35),'permRepo':obj(0x0,0x36),'permT':obj(0x0,0x37),'permDem':obj(0x0,0x38),'ctShop':obj(0x14,0x3c),'ctMac':obj(0x14,0x3d),'ctArb':obj(0x14,0x3e),'ctRew':obj(0x14,0x3f),'ctRepo':obj(0x14,0x40),'ctT':obj(0x14,0x41),'ctDem':obj(0x14,0x42),'gBuy':obj(0xa,0x46),'gAlloc':obj(0xa,0x47),'gShip':obj(0xa,0x48),'gRel':obj(0xa,0x49),'gDeep':obj(0xa,0x4a),'gVote':obj(0xa,0x4b),'gUsage':obj(0xa,0x4c),'gClaim':obj(0xa,0x4d),'gWrite':obj(0xa,0x4e),'gQuote':obj(0xa,0x4f),'gSub':obj(0xa,0x50),'gDep':obj(0xa,0x51),'gWd':obj(0xa,0x52),'arbsvc':obj(0x3,0x5a),'arb1':obj(0x2,0x5b),'rew':obj(0xf,0x5c),'repo':obj(0x1,0x5d),'tres':obj(0x9,0x5e),'alloc':obj(0xd,0x5f),'disc':obj(0x10,0x60),'o1':obj(0x6,0x15),'o2':obj(0x6,0x16),'pr1':obj(0x7,0x1f),'pr2':obj(0x7,0x20),'pay1':obj(0x8,0x29),'pay2':obj(0x8,0x2a),'proof1':obj(0x13,0x2d),'pp':obj(0xc,0x2e),'dem':obj(0xb,0x2f),'resource':obj(0xe,0x61)};function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}let tableSeq=0x0;export function rowObject(a,b){tableSeq+=0x1;const c='0x9'+tableSeq['toString'](0x10)['padStart'](0x3f,'0');return{'objectId':c,'object':raw(c,a,b)};}function nodeRow(a,b,c){return{'key':a,...rowObject('TableItem_MachineNode',{'name':b,'value':c})};}function permRow(a,b){return{'key':a,...rowObject('TableItem_PermissionPerm',{'address':a,'perm':b})};}export function fullServiceObjects(){const a=FULL;return[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['mac'],'buy_guard':a['gBuy'],'arbitrations':[a['arbsvc']],'rewards':[a['rew']],'repositories':[a['repo']],'um':a['ctShop'],'order_allocators':{'allocators':[{'guard':a['gAlloc'],'mode':0x0}]},'bPublished':!![],'bPaused':![],'sales':'1000000','description':'three-body\x20signature\x20service\x20(fixture)','location':'test-location','customer_required':[],'balances':{'available':'500000'}},'0x2::service::Service<'+T_USDT+'>'),raw(a['mac'],'Machine',{'permission':a['perm'],'consensus_repositories':[a['repo']],'um':a['ctMac'],'bPublished':!![]}),raw(a['gBuy'],'Guard',{'relies':[],'identifier':0x0,'table':[]}),raw(a['gAlloc'],'Guard',{'relies':[],'identifier':0x1,'table':[]}),raw(a['gShip'],'Guard',{'relies':[a['gRel']],'identifier':0x2,'table':[]}),raw(a['gRel'],'Guard',{'relies':[a['gDeep']],'identifier':0x3,'table':[]}),raw(a['gDeep'],'Guard',{'relies':[],'identifier':0x4,'table':[]}),raw(a['gVote'],'Guard',{'relies':[],'identifier':0x5,'table':[]}),raw(a['gUsage'],'Guard',{'relies':[],'identifier':0x6,'table':[]}),raw(a['gClaim'],'Guard',{'relies':[],'identifier':0x7,'table':[]}),raw(a['gWrite'],'Guard',{'relies':[],'identifier':0x8,'table':[]}),raw(a['gQuote'],'Guard',{'relies':[],'identifier':0x9,'table':[]}),raw(a['gSub'],'Guard',{'relies':[],'identifier':0xa,'table':[]}),raw(a['gDep'],'Guard',{'relies':[],'identifier':0xb,'table':[]}),raw(a['gWd'],'Guard',{'relies':[],'identifier':0xc,'table':[]}),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctShop'],'remark':'shop'}),raw(a['permArb'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctArb'],'remark':'arb'}),raw(a['permRew'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRew'],'remark':'reward'}),raw(a['permRepo'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRepo'],'remark':'repo'}),raw(a['permT'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctT'],'remark':'treasury'}),raw(a['permDem'],'Permission',{'admin':[a['supplier']],'owner':a['supplier'],'um':a['ctDem'],'remark':'demand'}),...[a['ctShop'],a['ctMac'],a['ctArb'],a['ctRew'],a['ctRepo'],a['ctT'],a['ctDem']]['map']((b,d)=>raw(b,'Contact',{'permission':[a['perm'],a['permArb'],a['permRew'],a['permRepo'],a['permT'],a['permDem']][d]??a['perm'],'description':'contact\x20book\x20'+d,'location':'','ims':[{'at':a['member'],'status':'active','join_time':0x18bcfe56800+d,'description':'ops\x20im'}]})),raw(a['arbsvc'],'Arbitration',{'permission':a['permArb'],'voting_guard':[{'guard':a['gVote'],'vote_weight':0x1}],'usage_guard':a['gUsage'],'um':a['ctArb'],'bPaused':![],'fee':'1000'},'0x2::arbitration::Arbitration<'+T_USDT+'>'),raw(a['arb1'],'Arb',{'order':a['o1'],'arbitration':a['arbsvc'],'voted':[{'voter':a['voter1'],'weight':0x3,'agrees':[0x1]},{'voter':a['voter2'],'weight':0x1,'agrees':[0x0]}],'status':0x2,'proposition':'fixture\x20case','indemnity':'100000'},'0x2::arb::Arb<'+T_USDT+'>'),raw(a['rew'],'Reward',{'permission':a['permRew'],'guards':[{'guard':a['gClaim'],'recipient':a['supplier'],'amount':'1000','expiration':null}],'um':a['ctRew'],'balance':'200000'},'0x2::reward::Reward<'+T_USDT+'>'),raw(a['repo'],'Repository',{'permission':a['permRepo'],'rewards':[a['rew']],'um':a['ctRepo'],'policies':[{'name':'default','write_guard':[{'guard':a['gWrite'],'retained_submission':[]}],'quote_guard':a['gQuote']}]}),raw(a['tres'],'Treasury',{'permission':a['permT'],'external_deposit_guard':[{'guard':a['gDep'],'identifier':0x1,'store_from_id':null}],'external_withdraw_guard':[{'guard':a['gWd'],'recipient':0x0,'identifier':0x1,'store_from_id':null}],'um':a['ctT'],'balance':'1000000','inflow':'5000000','outflow':'4000000'},'0x2::treasury::Treasury<'+T_USDT+'>'),raw(a['alloc'],'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':a['gAlloc'],'mode':0x0,'sharing':[{'who':a['merchant'],'sharing':'10000'}]}]},'payment':[a['pay1'],a['pay2']],'payment_info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'order\x20split','index':0x0},'balance':'0'},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(a['o1'],'Order',{'builder':a['buyer'],'agent':[a['agent']],'service':a['svc'],'machine':a['mac'],'progress':a['pr1'],'allocation':a['alloc'],'discount':a['disc'],'dispute':[a['arb1']],'claimed_by':a['claimant'],'required_info':a['proof1'],'items':[{'name':'signature','amount':'1000000','quantity':0x1}],'amount':'1000000','time':0x18bcfe56800}),raw(a['o2'],'Order',{'builder':a['buyer'],'agent':[],'service':a['svc'],'machine':a['mac'],'progress':a['pr2'],'dispute':[],'items':[],'amount':'0','time':0x18bcfe6eea0}),raw(a['pr1'],'Progress',{'machine':a['mac'],'task':a['o1'],'current':'done','namedOperator':[{'name':'ops','operators':[a['member']]}],'context_repositories':[a['repo']],'session':[],'history':[]}),raw(a['pr2'],'Progress',{'machine':a['mac'],'task':a['o2'],'current':'shipping','namedOperator':[],'context_repositories':[]}),raw(a['disc'],'Discount',{'service':a['svc'],'rules':{'amount':'1000','transferable':![],'time_window':0x7,'benchmark':!![]}}),raw(a['pay1'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'990000'},{'recipient':a['supplier'],'amount':'10000'}],'from_object':a['alloc'],'signer':a['buyer'],'info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'split','index':0x0},'amount':'1000000','time':0x18bcfe58f10},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['pay2'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'50000'}],'from_object':a['tres'],'signer':a['merchant'],'info':{'for_object':a['tres'],'for_guard':a['gWd'],'remark':'withdraw','index':0x0},'amount':'50000','time':0x18bcfe5b620},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['proof1'],'Proof',{'signer':a['signer'],'about':a['o1'],'proof':'0x'+'ab'['repeat'](0x20),'urls':['https://example.test/proof/1'],'timestamps':[0x18bcfe56800]}),raw(a['pp'],'Passport',{'signer':a['buyer'],'guard':[{'guard':a['gVote'],'relies':[a['gSub']],'retained_submission':[]}],'impack':[a['o1']],'result':0x1,'tx_hash':'0xdeadbeef','time':0x18bcfe56800}),raw(a['dem'],'Demand',{'permission':a['permDem'],'guards':[{'guard':a['gQuote'],'service_identifier':0x9}],'rewards':[a['rew']],'um':a['ctDem'],'description':'need\x20three\x20signatures','location':'test-location'}),raw(a['resource'],'Resource',{})];}export function fullServiceTables(){const a=FULL;return new Map([[a['mac']['toLowerCase'](),[nodeRow('start','start',[]),nodeRow('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':a['gShip']}]}]),nodeRow('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])]],[a['perm']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2]),permRow(a['member'],[0x2])]],[a['permArb']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRew']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRepo']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permT']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permDem']['toLowerCase'](),[permRow(a['supplier'],[0x1,0x2])]],[a['dem']['toLowerCase'](),[{'key':a['supplier'],...rowObject('TableItem_DemandPresenter',{'address':a['supplier'],'recommend':'can\x20deliver\x20via\x20sub-service','service':a['svc'],'update_time':0x18bcfe56800,'acceptance_score':0x5a,'feedback':'','feedback_time':0x0})},{'key':a['member'],...rowObject('TableItem_DemandPresenter',{'address':a['member'],'recommend':'bare\x20present','service':null,'update_time':0x18bcfe58f10,'acceptance_score':null,'feedback':'','feedback_time':0x0})}]],[a['tres']['toLowerCase'](),[{'key':a['pay2'],...rowObject('TableItem_TreasuryHistory',{'op':0x0,'signer':a['merchant'],'external_guard':a['gWd'],'amount':'50000','time':0x18bcfe5b620,'store_from_id':null})}]],[a['rew']['toLowerCase'](),[{'key':a['claimant'],...rowObject('TableItem_RewardRecord',{'total':'1000','amount':[{'guard':a['gClaim'],'amount':'1000','time':0x18bcfe5dd30,'store_from_id':null}]})}]],[a['repo']['toLowerCase'](),[{'key':'01',...rowObject('TableItem_RepositoryData',{'id':a['o1'],'name':'delivery-proof','data':'0x'+'cd'['repeat'](0x20)})}]]]);}export function fullServiceKeyedFields(){const a=FULL,b=new Map();return b['set']('0xaa8',new Map([[a['buyer'],{'items':[{'role':0x1,'order':a['o1'],'time':0x18bcfe56800},{'role':0x1,'order':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaa9',new Map([[a['member'],{'items':[{'contact':a['ctShop'],'time':0x18bcfe56800}]}]])),b['set']('0xaaa',new Map([[a['svc'],{'votes':[{'who':a['voter1'],'like':!![],'dislike':![],'favor':!![]},{'who':a['voter2'],'like':![],'dislike':!![],'favor':![]}]}]])),b['set']('0xaad',new Map([[a['merchant'],{'items':[{'role':0x1,'permission':a['perm'],'time':0x1},{'role':0x1,'permission':a['permArb'],'time':0x2}]}]])),b['set']('0xaae',new Map([[a['perm'],{'items':[{'who':a['svc'],'time':0x1}]}],[a['permArb'],{'items':[{'who':a['arbsvc'],'time':0x1}]}],[a['permT'],{'items':[{'who':a['tres'],'time':0x1}]}]])),b['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['o1'],'time':0x18bcfe56800},{'who':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaab',new Map([[a['supplier'],{'description':'Acme\x20logistics\x20co.','time':0x18bcfe57b88,'referrer':a['merchant'],'mark_object':a['resource'],'records':[{'name':'region','value_type':0x1,'value':'cn-east'}]}],[a['member'],{'description':'warehouse\x20member','time':0x18bcfe57f70,'referrer':null,'resource':null,'records':[]}]])),b;}export function fullServiceState(){return{'objects':new Map(fullServiceObjects()['map'](a=>[a['object']['toLowerCase'](),a])),'keyedFields':fullServiceKeyedFields(),'tables':fullServiceTables(),'events':new Map()};}export const GAP={'merchant':eoa(0x14),'svc':obj(0x4,0x6e),'perm':obj(0x0,0x97),'macMissing':obj(0x5,0x6f),'bareOrder':obj(0x6,0x79)};export function gapServiceState(){const a=GAP,b=[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['macMissing'],'arbitrations':[],'rewards':[],'repositories':[],'order_allocators':{'allocators':[]},'bPublished':!![],'bPaused':![],'sales':'','description':'','location':''},'0x2::service::Service<'+T_USDT+'>'),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant']}),raw(a['bareOrder'],'Order',{'builder':a['merchant'],'agent':[],'service':a['svc'],'dispute':[],'items':[],'amount':'0'})],c=new Map();return c['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['bareOrder'],'time':0x18bcfe56800}]}]])),{'objects':new Map(b['map'](d=>[d['object']['toLowerCase'](),d])),'keyedFields':c,'tables':new Map(),'events':new Map()};}export const TRUNC_EXTRA_ORDERS=0xfa;export function truncatedServiceState(){const a=fullServiceState(),b=FULL,c=[],d=[{'who':b['o1'],'time':0x1},{'who':b['o2'],'time':0x2}],e=[];for(let f=0x0;f<TRUNC_EXTRA_ORDERS;f+=0x1){const g=obj(0x6,0x3e8+f);c['push'](raw(g,'Order',{'builder':b['buyer2'],'agent':[],'service':b['svc'],'dispute':[],'items':[],'amount':'1000','time':0x18bcfe56800+f})),d['push']({'who':g,'time':0x18bcfe56800+f}),e['push']({'role':0x1,'order':g,'time':0x18bcfe56800+f});}for(const h of c)a['objects']['set'](h['object']['toLowerCase'](),h);return a['keyedFields']['set']('0xaaf',new Map([[b['svc'],{'items':d}]])),a['keyedFields']['set']('0xaa8',new Map([[b['buyer2'],{'items':e}]])),a;}
1
+ function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b);export const T_USDT='0x2::wow::coins::USDT';export const FULL={'merchant':eoa(0x1),'buyer':eoa(0x2),'agent':eoa(0x3),'voter1':eoa(0x4),'voter2':eoa(0x5),'member':eoa(0x6),'supplier':eoa(0x7),'claimant':eoa(0x8),'signer':eoa(0x9),'buyer2':eoa(0xa),'svc':obj(0x4,0xa),'mac':obj(0x5,0xb),'perm':obj(0x0,0x33),'permArb':obj(0x0,0x34),'permRew':obj(0x0,0x35),'permRepo':obj(0x0,0x36),'permT':obj(0x0,0x37),'permDem':obj(0x0,0x38),'ctShop':obj(0x14,0x3c),'ctMac':obj(0x14,0x3d),'ctArb':obj(0x14,0x3e),'ctRew':obj(0x14,0x3f),'ctRepo':obj(0x14,0x40),'ctT':obj(0x14,0x41),'ctDem':obj(0x14,0x42),'gBuy':obj(0xa,0x46),'gAlloc':obj(0xa,0x47),'gShip':obj(0xa,0x48),'gRel':obj(0xa,0x49),'gDeep':obj(0xa,0x4a),'gVote':obj(0xa,0x4b),'gUsage':obj(0xa,0x4c),'gClaim':obj(0xa,0x4d),'gWrite':obj(0xa,0x4e),'gQuote':obj(0xa,0x4f),'gSub':obj(0xa,0x50),'gDep':obj(0xa,0x51),'gWd':obj(0xa,0x52),'arbsvc':obj(0x3,0x5a),'arb1':obj(0x2,0x5b),'rew':obj(0xf,0x5c),'repo':obj(0x1,0x5d),'tres':obj(0x9,0x5e),'alloc':obj(0xd,0x5f),'disc':obj(0x10,0x60),'o1':obj(0x6,0x15),'o2':obj(0x6,0x16),'pr1':obj(0x7,0x1f),'pr2':obj(0x7,0x20),'pay1':obj(0x8,0x29),'pay2':obj(0x8,0x2a),'proof1':obj(0x13,0x2d),'pp':obj(0xc,0x2e),'dem':obj(0xb,0x2f),'resource':obj(0xe,0x61)};function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}let tableSeq=0x0;export function rowObject(a,b){tableSeq+=0x1;const c='0x9'+tableSeq['toString'](0x10)['padStart'](0x3f,'0');return{'objectId':c,'object':raw(c,a,b)};}function nodeRow(a,b,c){return{'key':a,...rowObject('TableItem_MachineNode',{'name':b,'value':c})};}function permRow(a,b){return{'key':a,...rowObject('TableItem_PermissionPerm',{'address':a,'perm':b})};}export function fullServiceObjects(){const a=FULL;return[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['mac'],'buy_guard':a['gBuy'],'arbitrations':[a['arbsvc']],'rewards':[a['rew']],'repositories':[a['repo']],'um':a['ctShop'],'order_allocators':{'allocators':[{'guard':a['gAlloc'],'mode':0x0}]},'bPublished':!![],'bPaused':![],'sales':'1000000','description':'three-body\x20signature\x20service\x20(fixture)','location':'test-location','customer_required':[],'balances':{'available':'500000'}},'0x2::service::Service<'+T_USDT+'>'),raw(a['mac'],'Machine',{'permission':a['perm'],'consensus_repositories':[a['repo']],'um':a['ctMac'],'bPublished':!![]}),raw(a['gBuy'],'Guard',{'relies':[],'identifier':0x0,'table':[]}),raw(a['gAlloc'],'Guard',{'relies':[],'identifier':0x1,'table':[]}),raw(a['gShip'],'Guard',{'relies':[a['gRel']],'identifier':0x2,'table':[]}),raw(a['gRel'],'Guard',{'relies':[a['gDeep']],'identifier':0x3,'table':[]}),raw(a['gDeep'],'Guard',{'relies':[],'identifier':0x4,'table':[]}),raw(a['gVote'],'Guard',{'relies':[],'identifier':0x5,'table':[]}),raw(a['gUsage'],'Guard',{'relies':[],'identifier':0x6,'table':[]}),raw(a['gClaim'],'Guard',{'relies':[],'identifier':0x7,'root':{'type':'true'},'table':[]}),raw(a['gWrite'],'Guard',{'relies':[],'identifier':0x8,'table':[]}),raw(a['gQuote'],'Guard',{'relies':[],'identifier':0x9,'table':[]}),raw(a['gSub'],'Guard',{'relies':[],'identifier':0xa,'table':[]}),raw(a['gDep'],'Guard',{'relies':[],'identifier':0xb,'table':[]}),raw(a['gWd'],'Guard',{'relies':[],'identifier':0xc,'table':[]}),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctShop'],'remark':'shop'}),raw(a['permArb'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctArb'],'remark':'arb'}),raw(a['permRew'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRew'],'remark':'reward'}),raw(a['permRepo'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctRepo'],'remark':'repo'}),raw(a['permT'],'Permission',{'admin':[a['merchant']],'owner':a['merchant'],'um':a['ctT'],'remark':'treasury'}),raw(a['permDem'],'Permission',{'admin':[a['supplier']],'owner':a['supplier'],'um':a['ctDem'],'remark':'demand'}),...[a['ctShop'],a['ctMac'],a['ctArb'],a['ctRew'],a['ctRepo'],a['ctT'],a['ctDem']]['map']((b,d)=>raw(b,'Contact',{'permission':[a['perm'],a['permArb'],a['permRew'],a['permRepo'],a['permT'],a['permDem']][d]??a['perm'],'description':'contact\x20book\x20'+d,'location':'','ims':[{'at':a['member'],'status':'active','join_time':0x18bcfe56800+d,'description':'ops\x20im'}]})),raw(a['arbsvc'],'Arbitration',{'permission':a['permArb'],'voting_guard':[{'guard':a['gVote'],'vote_weight':0x1}],'usage_guard':a['gUsage'],'um':a['ctArb'],'bPaused':![],'fee':'1000'},'0x2::arbitration::Arbitration<'+T_USDT+'>'),raw(a['arb1'],'Arb',{'order':a['o1'],'arbitration':a['arbsvc'],'voted':[{'voter':a['voter1'],'weight':0x3,'agrees':[0x1]},{'voter':a['voter2'],'weight':0x1,'agrees':[0x0]}],'status':0x2,'proposition':'fixture\x20case','indemnity':'100000'},'0x2::arb::Arb<'+T_USDT+'>'),raw(a['rew'],'Reward',{'permission':a['permRew'],'guards':[{'guard':a['gClaim'],'recipient':a['supplier'],'amount':'1000','expiration':null}],'um':a['ctRew'],'balance':'200000'},'0x2::reward::Reward<'+T_USDT+'>'),raw(a['repo'],'Repository',{'permission':a['permRepo'],'rewards':[a['rew']],'um':a['ctRepo'],'policies':[{'name':'default','write_guard':[{'guard':a['gWrite'],'retained_submission':[]}],'quote_guard':a['gQuote']}]}),raw(a['tres'],'Treasury',{'permission':a['permT'],'external_deposit_guard':[{'guard':a['gDep'],'identifier':0x1,'store_from_id':null}],'external_withdraw_guard':[{'guard':a['gWd'],'recipient':0x0,'identifier':0x1,'store_from_id':null}],'um':a['ctT'],'balance':'1000000','inflow':'5000000','outflow':'4000000'},'0x2::treasury::Treasury<'+T_USDT+'>'),raw(a['alloc'],'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':a['gAlloc'],'mode':0x0,'sharing':[{'who':a['merchant'],'sharing':'10000'}]}]},'payment':[a['pay1'],a['pay2']],'payment_info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'order\x20split','index':0x0},'balance':'0'},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(a['o1'],'Order',{'builder':a['buyer'],'agent':[a['agent']],'service':a['svc'],'machine':a['mac'],'progress':a['pr1'],'allocation':a['alloc'],'discount':a['disc'],'dispute':[a['arb1']],'claimed_by':a['claimant'],'required_info':a['proof1'],'items':[{'name':'signature','amount':'1000000','quantity':0x1}],'amount':'1000000','time':0x18bcfe56800}),raw(a['o2'],'Order',{'builder':a['buyer'],'agent':[],'service':a['svc'],'machine':a['mac'],'progress':a['pr2'],'dispute':[],'items':[],'amount':'0','time':0x18bcfe6eea0}),raw(a['pr1'],'Progress',{'machine':a['mac'],'task':a['o1'],'current':'done','namedOperator':[{'name':'ops','operators':[a['member']]}],'context_repositories':[a['repo']],'session':[],'history':[]}),raw(a['pr2'],'Progress',{'machine':a['mac'],'task':a['o2'],'current':'shipping','namedOperator':[],'context_repositories':[]}),raw(a['disc'],'Discount',{'service':a['svc'],'rules':{'amount':'1000','transferable':![],'time_window':0x7,'benchmark':!![]}}),raw(a['pay1'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'990000'},{'recipient':a['supplier'],'amount':'10000'}],'from_object':a['alloc'],'signer':a['buyer'],'info':{'for_object':a['o1'],'for_guard':a['gAlloc'],'remark':'split','index':0x0},'amount':'1000000','time':0x18bcfe58f10},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['pay2'],'Payment',{'record':[{'recipient':a['merchant'],'amount':'50000'}],'from_object':a['tres'],'signer':a['merchant'],'info':{'for_object':a['tres'],'for_guard':a['gWd'],'remark':'withdraw','index':0x0},'amount':'50000','time':0x18bcfe5b620},'0x2::payment::Payment<'+T_USDT+'>'),raw(a['proof1'],'Proof',{'signer':a['signer'],'about':a['o1'],'proof':'0x'+'ab'['repeat'](0x20),'urls':['https://example.test/proof/1'],'timestamps':[0x18bcfe56800]}),raw(a['pp'],'Passport',{'signer':a['buyer'],'guard':[{'guard':a['gVote'],'relies':[a['gSub']],'retained_submission':[]}],'impack':[a['o1']],'result':0x1,'tx_hash':'0xdeadbeef','time':0x18bcfe56800}),raw(a['dem'],'Demand',{'permission':a['permDem'],'guards':[{'guard':a['gQuote'],'service_identifier':0x9}],'rewards':[a['rew']],'um':a['ctDem'],'description':'need\x20three\x20signatures','location':'test-location'}),raw(a['resource'],'Resource',{})];}export function fullServiceTables(){const a=FULL;return new Map([[a['mac']['toLowerCase'](),[nodeRow('start','start',[]),nodeRow('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':a['gShip']}]}]),nodeRow('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])]],[a['perm']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2]),permRow(a['member'],[0x2])]],[a['permArb']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRew']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permRepo']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permT']['toLowerCase'](),[permRow(a['merchant'],[0x1,0x2])]],[a['permDem']['toLowerCase'](),[permRow(a['supplier'],[0x1,0x2])]],[a['dem']['toLowerCase'](),[{'key':a['supplier'],...rowObject('TableItem_DemandPresenter',{'address':a['supplier'],'recommend':'can\x20deliver\x20via\x20sub-service','service':a['svc'],'update_time':0x18bcfe56800,'acceptance_score':0x5a,'feedback':'','feedback_time':0x0})},{'key':a['member'],...rowObject('TableItem_DemandPresenter',{'address':a['member'],'recommend':'bare\x20present','service':null,'update_time':0x18bcfe58f10,'acceptance_score':null,'feedback':'','feedback_time':0x0})}]],[a['tres']['toLowerCase'](),[{'key':a['pay2'],...rowObject('TableItem_TreasuryHistory',{'op':0x0,'signer':a['merchant'],'external_guard':a['gWd'],'amount':'50000','time':0x18bcfe5b620,'store_from_id':null})}]],[a['rew']['toLowerCase'](),[{'key':a['claimant'],...rowObject('TableItem_RewardRecord',{'total':'1000','amount':[{'guard':a['gClaim'],'amount':'1000','time':0x18bcfe5dd30,'store_from_id':null}]})}]],[a['repo']['toLowerCase'](),[{'key':'01',...rowObject('TableItem_RepositoryData',{'id':a['o1'],'name':'delivery-proof','data':'0x'+'cd'['repeat'](0x20)})}]]]);}export function fullServiceKeyedFields(){const a=FULL,b=new Map();return b['set']('0xaa8',new Map([[a['buyer'],{'items':[{'role':0x1,'order':a['o1'],'time':0x18bcfe56800},{'role':0x1,'order':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaa9',new Map([[a['member'],{'items':[{'contact':a['ctShop'],'time':0x18bcfe56800}]}]])),b['set']('0xaaa',new Map([[a['svc'],{'votes':[{'who':a['voter1'],'like':!![],'dislike':![],'favor':!![]},{'who':a['voter2'],'like':![],'dislike':!![],'favor':![]}]}]])),b['set']('0xaad',new Map([[a['merchant'],{'items':[{'role':0x1,'permission':a['perm'],'time':0x1},{'role':0x1,'permission':a['permArb'],'time':0x2}]}]])),b['set']('0xaae',new Map([[a['perm'],{'items':[{'who':a['svc'],'time':0x1}]}],[a['permArb'],{'items':[{'who':a['arbsvc'],'time':0x1}]}],[a['permT'],{'items':[{'who':a['tres'],'time':0x1}]}]])),b['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['o1'],'time':0x18bcfe56800},{'who':a['o2'],'time':0x18bcfe6eea0}]}]])),b['set']('0xaab',new Map([[a['supplier'],{'description':'Acme\x20logistics\x20co.','time':0x18bcfe57b88,'referrer':a['merchant'],'mark_object':a['resource'],'records':[{'name':'region','value_type':0x1,'value':'cn-east'}]}],[a['member'],{'description':'warehouse\x20member','time':0x18bcfe57f70,'referrer':null,'resource':null,'records':[]}]])),b;}export function fullServiceState(){return{'objects':new Map(fullServiceObjects()['map'](a=>[a['object']['toLowerCase'](),a])),'keyedFields':fullServiceKeyedFields(),'tables':fullServiceTables(),'events':new Map()};}export const GAP={'merchant':eoa(0x14),'svc':obj(0x4,0x6e),'perm':obj(0x0,0x97),'macMissing':obj(0x5,0x6f),'bareOrder':obj(0x6,0x79)};export function gapServiceState(){const a=GAP,b=[raw(a['svc'],'Service',{'permission':a['perm'],'machine':a['macMissing'],'arbitrations':[],'rewards':[],'repositories':[],'order_allocators':{'allocators':[]},'bPublished':!![],'bPaused':![],'sales':'','description':'','location':''},'0x2::service::Service<'+T_USDT+'>'),raw(a['perm'],'Permission',{'admin':[a['merchant']],'owner':a['merchant']}),raw(a['bareOrder'],'Order',{'builder':a['merchant'],'agent':[],'service':a['svc'],'dispute':[],'items':[],'amount':'0'})],c=new Map();return c['set']('0xaaf',new Map([[a['svc'],{'items':[{'who':a['bareOrder'],'time':0x18bcfe56800}]}]])),{'objects':new Map(b['map'](d=>[d['object']['toLowerCase'](),d])),'keyedFields':c,'tables':new Map(),'events':new Map()};}export const TRUNC_EXTRA_ORDERS=0xfa;export function truncatedServiceState(){const a=fullServiceState(),b=FULL,c=[],d=[{'who':b['o1'],'time':0x1},{'who':b['o2'],'time':0x2}],e=[];for(let f=0x0;f<TRUNC_EXTRA_ORDERS;f+=0x1){const g=obj(0x6,0x3e8+f);c['push'](raw(g,'Order',{'builder':b['buyer2'],'agent':[],'service':b['svc'],'dispute':[],'items':[],'amount':'1000','time':0x18bcfe56800+f})),d['push']({'who':g,'time':0x18bcfe56800+f}),e['push']({'role':0x1,'order':g,'time':0x18bcfe56800+f});}for(const h of c)a['objects']['set'](h['object']['toLowerCase'](),h);return a['keyedFields']['set']('0xaaf',new Map([[b['svc'],{'items':d}]])),a['keyedFields']['set']('0xaa8',new Map([[b['buyer2'],{'items':e}]])),a;}
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology,orderCompletionInGraph}from'./expand.js';import{extractObjectEdges,extractReverseRefs,extractTableRefs}from'./extract.js';import{annotateNodeName,deriveOrderCompletion,terminalNamesOfEdges,terminalNamesOfRows,workflowSubgraphFromRows,workflowSubgraphFromEdges}from'./order-status.js';import{COVERED_OBJECT_TYPES,EDGE_SCHEMAS}from'./edge-schema.js';import{FIELD_MUTABILITY_RULES,fieldMutabilityOf,isActionForbidden}from'../../knowledge/contract-invariants.js';import{buildViewport}from'./viewport.js';function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b),T_USDT='0x2::wow::coins::USDT',buyer=eoa(0x1),otherBuyer=eoa(0x2),merchant=eoa(0x3),collaborator=eoa(0x4),voter1=eoa(0x5),svc=obj(0x4,0xa),mac=obj(0x5,0xb),o1=obj(0x6,0x15),o2=obj(0x6,0x16),o3=obj(0x6,0x17),o4=obj(0x6,0x18),pr1=obj(0x7,0x1f),pr2=obj(0x7,0x20),pay=obj(0x8,0x29),perm=obj(0x0,0x33),g1=obj(0xa,0x3d),g2=obj(0xa,0x3e),gShip=obj(0xa,0x3f),gOther=obj(0xa,0x45),alloc=obj(0xd,0x47),arbsvc=obj(0x3,0x51),arb=obj(0x2,0x52);function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}const OBJECTS=[raw(svc,'Service',{'permission':perm,'machine':mac,'arbitrations':[arbsvc],'order_allocators':{'allocators':[{'guard':g1}]}},'0x2::service::Service<'+T_USDT+'>'),raw(o1,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr1,'allocation':alloc,'dispute':[arb]}),raw(o2,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr2,'allocation':alloc,'dispute':[]}),raw(o3,'Order',{'builder':buyer,'agent':[],'service':svc,'dispute':[]}),raw(o4,'Order',{'builder':otherBuyer,'agent':[],'service':svc,'machine':mac,'progress':undefined,'dispute':[]}),raw(mac,'Machine',{'permission':perm,'consensus_repositories':[]}),raw(pr1,'Progress',{'machine':mac,'task':o1,'current':'done'}),raw(pr2,'Progress',{'machine':mac,'task':o2,'current':'shipping'}),raw(alloc,'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':g1,'mode':0x0}]}},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(perm,'Permission',{'admin':[merchant]}),raw(g1,'Guard',{'relies':[g2]}),raw(g2,'Guard',{'relies':[]}),raw(gShip,'Guard',{'relies':[]}),raw(arbsvc,'Arbitration',{'permission':perm,'voting_guard':[{'guard':g1}]}),raw(arb,'Arb',{'order':o1,'arbitration':arbsvc,'voted':[{'voter':voter1,'weight':0x3}]}),raw(pay,'Payment',{'record':[{'recipient':merchant,'amount':'99900'}],'from_object':alloc,'info':{'for_object':o1,'for_guard':g1}},'0x2::payment::Payment<'+T_USDT+'>')];let TABLE_SEQ=0x0;function nodeTableItem(a,b,c){TABLE_SEQ++;const d='0x9'+TABLE_SEQ['toString'](0x10)['padStart'](0x3f,'0');return{'key':a,'objectId':d,'object':raw(d,'TableItem_MachineNode',{'name':b,'value':c})};}function permTableItem(a,b){const c='0x9'+a['slice'](0x2,0x1e)['padEnd'](0x3f,'0')['slice'](0x0,0x3f);return{'key':a,'objectId':c,'object':raw(c,'TableItem_PermissionPerm',{'address':a,'perm':b})};}function makePlane(){const a=[nodeTableItem('start','start',[]),nodeTableItem('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':gShip}]}]),nodeTableItem('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])],b=new Map(OBJECTS['map'](e=>[e['object']['toLowerCase'](),e])),c=new Map();c['set']('0xaa8',new Map([[buyer,{'items':[{'role':0x1,'order':o1,'time':0x1},{'role':0x2,'order':o2,'time':0x2},{'role':0x1,'order':o3,'time':0x3}]}]])),c['set']('0xaad',new Map([[merchant,{'items':[{'role':0x1,'permission':perm,'time':0x1}]}]])),c['set']('0xaae',new Map([[perm,{'items':[{'who':svc,'time':0x1}]}]])),c['set']('0xaaf',new Map([[svc,{'items':[{'who':o1,'time':0x1},{'who':o2,'time':0x2},{'who':o4,'time':0x3},{'who':gOther,'time':0x4}]}]]));const d=new Map([[mac['toLowerCase'](),a],[perm['toLowerCase'](),[permTableItem(collaborator,[0x1,0x2])]]]);return new FakeDataPlane({'objects':b,'keyedFields':c,'tables':d});}const FULL_EDGES={'tableEdges':['machine.node','permission.entity']};async function buildBuyerGraph(a){const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES,...a?{'budget':a}:{}});return{'graph':c,'plane':b};}describe('extract\x20—\x20field\x20edges',()=>{it('reads\x20scalar,\x20vector,\x20struct\x20and\x20deep\x20nested\x20refs\x20defensively',()=>{const a=extractObjectEdges('Service',OBJECTS[0x0]),b=new Map(a['map'](c=>[c['schemaId'],c['refs']['map'](d=>d['to'])]));expect(b['get']('service.permission'))['toEqual']([perm]),expect(b['get']('service.machine'))['toEqual']([mac]),expect(b['get']('service.arbitration'))['toEqual']([arbsvc]),expect(b['get']('service.order_allocator_guard'))['toEqual']([g1]);}),it('parses\x20coin\x20type\x20T\x20and\x20money\x20payloads\x20on\x20Payment',()=>{const a=extractObjectEdges('Payment',OBJECTS['find'](d=>d['object']===pay)),b=new Map(a['map'](d=>[d['schemaId'],d])),c=b['get']('payment.recipient')['refs'][0x0];expect(c['to'])['toBe'](merchant),expect(c['payload']?.['amount'])['toBe']('99900'),expect(c['payload']?.['coinType'])['toBe'](T_USDT),expect(b['get']('payment.from_object')['refs'][0x0]['to'])['toBe'](alloc),expect(b['get']('payment.for_guard')['refs'][0x0]['to'])['toBe'](g1);}),it('reverse\x20field\x20shapes:\x20items[]\x20and\x20votes[]\x20with\x20role/vote\x20payloads',()=>{const a=extractReverseRefs('0xaa8',{'items':[{'role':0x3,'order':o1}]});expect(a[0x0]['refs'][0x0]['payload']?.['roleBits'])['toBe'](0x3);const b=extractReverseRefs('0xaaa',{'votes':[{'who':voter1,'like':!![],'favor':!![]}]});expect(b[0x0]['refs'][0x0]['payload']?.['voteBits'])['toBe'](0x2|0x8);}),it('machine\x20table\x20rows\x20produce\x20node\x20+\x20transition\x20+\x20guard\x20edges',()=>{const a=makePlane()['state']['tables']['get'](mac['toLowerCase']()),b=extractTableRefs('MachineNode',mac,a),c=new Map(b['map'](e=>[e['schemaId'],e['refs']]));expect(c['get']('machine.node')?.['length'])['toBe'](0x3);const d=c['get']('wf.transition');expect(d['map'](e=>[e['from']['includes']('start'),e['to']['includes']('shipping')]))['toContainEqual']([!![],!![]]),expect(c['get']('wf.forward_guard')?.[0x0]['to'])['toBe'](gShip);});}),describe('order-status\x20—\x20structural\x20authority',()=>{it('terminal\x20=\x20names\x20never\x20appearing\x20as\x20prev_node',()=>{const a=terminalNamesOfEdges([{'node':'shipping','prev_node':'start'},{'node':'done','prev_node':'shipping'}]);expect([...a])['toEqual'](['done']),expect([...terminalNamesOfRows([{'name':'a','value':[]},{'name':'b','value':[{'prev_node':'a'}]}])])['toEqual'](['b']);}),it('four\x20completion\x20states',()=>{const a=new Set(['done']);expect(deriveOrderCompletion({'machine':null})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':null})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'shipping','terminalNames':a})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':a})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':null})['status'])['toBe']('unknown');}),it('name\x20vocabulary\x20is\x20annotation\x20only',()=>{expect(annotateNodeName('order_refunded'))['toBe']('refund'),expect(annotateNodeName('dispute_node'))['toBe']('exception'),expect(annotateNodeName('shipping'))['toBeNull']();}),it('workflowSubgraphFromRows\x20flattens\x20pairs/forwards\x20and\x20keeps\x20structural\x20terminals',()=>{const a=workflowSubgraphFromRows([{'name':'shipped','value':[{'prev_node':'paid','threshold':0x2,'forwards':[{'name':'ship','guard':{'guard':'0xg','retained_submission':[]},'weight':0x1},{'name':'airdrop','namedOperator':'op','permissionIndex':0x3}]}]},{'name':'done','value':[{'prev_node':'shipped','forwards':[{'name':'confirm'}]}]}],'0xm');expect(a['machine'])['toBe']('0xm'),expect(a['transitions']['map'](b=>b['prevNode']+'>'+b['forward']+'>'+b['node']))['toEqual'](['paid>ship>shipped','paid>airdrop>shipped','shipped>confirm>done']),expect(a['transitions'][0x0]['guard'])['toBe']('0xg'),expect(a['transitions'][0x0]['threshold'])['toBe'](0x2),expect(a['transitions'][0x1]['namedOperator'])['toBe']('op'),expect(a['transitions'][0x1]['permissionIndex'])['toBe'](0x3),expect([...a['terminalNames']])['toEqual'](['done']);}),it('workflowSubgraphFromEdges\x20reads\x20wf.transition\x20payloads\x20and\x20filters\x20by\x20machine',()=>{const a=[{'schema':'wf.transition','from':'0xm1::node::paid','to':'0xm1::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}},{'schema':'wf.transition','from':'0xm2::node::paid','to':'0xm2::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm'}},{'schema':'machine.node','from':'0xm1','to':'0xm1::node::paid'}],b=workflowSubgraphFromEdges(a);expect(b['transitions'])['toHaveLength'](0x2);const c=workflowSubgraphFromEdges(a,'0xm1');expect(c['transitions'])['toHaveLength'](0x1),expect(c['transitions'][0x0])['toMatchObject']({'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}),expect([...c['terminalNames']])['toEqual'](['done']);});}),describe('expandTopology\x20—\x20wave\x20BFS\x20over\x20DataPlane',()=>{it('connects\x20F/R/W/S/M\x20edges\x20with\x20dedupe\x20and\x20no\x20per-id\x20fan-out',async()=>{const {graph:a,plane:b}=await buildBuyerGraph(),c=new Set(a['edges']['map'](f=>f['schema']));for(const e of['eoa.order','order.service','order.progress','order.allocation','service.permission','service.machine','service.order_allocator_guard','service.arbitration','machine.permission','progress.machine','machine.node','wf.transition','wf.forward_guard','guard.relies','arb.order','arb.voter','allocation.guard']){expect(c['has'](e),'missing\x20edge\x20'+e)['toBe'](!![]);}const d=a['edges']['filter'](f=>f['schema']==='service.order')['map'](f=>f['to']);expect(new Set(d))['toEqual'](new Set([o1,o2,o4])),expect(a['nodes']['get'](svc)?.['objectType'])['toBe']('Service'),expect(a['edges']['length'])['toBe'](new Set(a['edges']['map'](f=>f['id']))['size']),expect(b['batches']['objects'])['toBeLessThanOrEqual'](0x6),expect(a['gaps'])['toEqual']([]);}),it('resolves\x20completion\x20from\x20the\x20graph;\x20unknown\x20when\x20machine\x20table\x20not\x20expanded',async()=>{const {graph:a}=await buildBuyerGraph();expect(orderCompletionInGraph(a,o1)['status'])['toBe']('completed'),expect(orderCompletionInGraph(a,o2)['status'])['toBe']('in_progress'),expect(orderCompletionInGraph(a,o3)['status'])['toBe']('completed');const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer});expect(orderCompletionInGraph(c,o1)['status'])['toBe']('unknown');}),it('caps\x20per-kind\x20fanout\x20and\x20records\x20truncation;\x20window\x20edges\x20flagged',async()=>{const {graph:a}=await buildBuyerGraph({'perKindCaps':{'eoa.order':0x1}});expect(a['edges']['filter'](b=>b['schema']==='eoa.order'))['toHaveLength'](0x1),expect(a['truncations']['some'](b=>b['schema']==='eoa.order'))['toBe'](!![]),expect(a['edges']['find'](b=>b['schema']==='eoa.order')?.['truncated'])['toBe'](!![]);}),it('fail-soft:\x20missing\x20objects\x20become\x20gaps,\x20build\x20still\x20succeeds',async()=>{const a=makePlane();a['state']['objects']['delete'](mac['toLowerCase']());const b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES});expect(b['nodes']['get'](mac)?.['state'])['toBe']('error'),expect(b['gaps'])['toContain'](mac),expect(b['edges']['some'](c=>c['schema']==='order.service'))['toBe'](!![]);}),it('enforces\x20maxDepth',async()=>{const {graph:a}=await buildBuyerGraph({'maxDepth':0x1});expect(a['nodes']['has'](o1))['toBe'](!![]),expect(a['nodes']['has'](svc))['toBe'](![]),expect(a['budgetExhausted']['depth'])['toBe'](!![]);});}),describe('DataPlane\x20batching',()=>{it('chunks\x20at\x2050\x20and\x20counts\x20logical\x20RPC\x20batches',async()=>{const a=new FakeDataPlane({});await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),expect(a['dedupHits'])['toBe'](0x65);});}),describe('viewport',()=>{it('buyer\x20never\x20sees\x20other\x20customers\x20through\x20service.order',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'buyer');expect(b['visibleNodes']['has'](o1))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](![]);}),it('merchant\x20sees\x20shop\x20orders\x20and\x20their\x20parties',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,merchant,'merchant');expect(b['visibleNodes']['has'](perm))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](!![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](!![]),expect(b['visibleNodes']['has'](collaborator))['toBe'](!![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](!![]);}),it('neutral\x20role\x20sees\x20the\x20full\x20canon\x20graph',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'neutral');expect(b['visibleNodes']['size'])['toBe'](a['nodes']['size']);});}),describe('edge\x20schema\x20registry',()=>{it('covers\x20the\x20core\x20commercial\x20object\x20types',()=>{for(const a of['Service','Order','Machine','Progress','Payment','Allocation','Arbitration','Arb','Permission','Guard','Demand','Reward','Contact','Treasury']){expect(COVERED_OBJECT_TYPES)['toContain'](a);}});}),describe('EdgeSchema.contract\x20—\x20field\x20mutability\x20ground\x20truth',()=>{const a=['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','progress.machine','progress.task','machine.consensus_repository','machine.node','allocation.guard','permission.owner','contact.im','payment.signer'];it('marks\x20exactly\x20the\x20address-field\x20edges\x20with\x20mutability\x20metadata',()=>{const b=EDGE_SCHEMAS['filter'](c=>c['contract'])['map'](c=>c['id'])['sort']();expect(b)['toEqual']([...a]['sort']());}),it('carries\x20the\x20publish-freeze\x20distinction\x20(machine\x20frozen,\x20buy_guard\x20mutable)',()=>{const b=EDGE_SCHEMAS['find'](d=>d['id']==='service.machine')['contract'];expect(b['frozenWhen'])['toBe']('after\x20publish'),expect(b['forbiddenActions'])['toContain']('set'),expect(b['unfreeze'])['toBeNull']();const c=EDGE_SCHEMAS['find'](d=>d['id']==='service.buy_guard')['contract'];expect(c['frozenWhen'])['toBeNull'](),expect(c['allowedActions'])['toContain']('set');}),it('derives\x20the\x20knowledge\x20field-rule\x20table\x20without\x20duplicating\x20facts',()=>{expect(fieldMutabilityOf('Service','machine')?.['frozen_when'])['toBe']('after\x20publish'),expect(fieldMutabilityOf('Machine','nodes')?.['forbidden_actions'])['toContain']('update'),expect(fieldMutabilityOf('Allocation','allocators')?.['frozen_when'])['toBe']('after\x20create\x20(share)'),expect(EDGE_SCHEMAS['find'](c=>c['id']==='allocation.guard')['contract']['field'])['toBe']('allocators');const b=FIELD_MUTABILITY_RULES['map'](c=>c['object_type']+'.'+c['field']);expect(new Set(b)['size'])['toBe'](b['length']),expect(FIELD_MUTABILITY_RULES)['toHaveLength'](0x17),expect(isActionForbidden('Service','machine','set',!![]))['toBe'](!![]),expect(isActionForbidden('Service','machine','set',![]))['toBe'](![]),expect(isActionForbidden('Service','buy_guard','set',!![]))['toBe'](![]);});}),describe('expand\x20—\x20per-schema\x20hop\x20cap',()=>{const a=obj(0xa,0x5b),b=obj(0xa,0x5c),c=obj(0xa,0x5d),d=obj(0xa,0x5e);function e(){const f=new Map([raw(a,'Guard',{'relies':[b,d]}),raw(b,'Guard',{'relies':[c,d]}),raw(c,'Guard',{'relies':[]}),raw(d,'Guard',{'relies':[]})]['map'](g=>[g['object']['toLowerCase'](),g]));return new FakeDataPlane({'objects':f,'keyedFields':new Map(),'tables':new Map()});}it('cuts\x20guard.relies\x20beyond\x20one\x20hop,\x20keeps\x20closure\x20edges,\x20reports\x20schema_hops',async()=>{const f=await expandTopology(e(),{'network':ENTRYPOINT['Mainnet'],'seed':a}),g=f['edges']['filter'](i=>i['schema']==='guard.relies'),h=(i,j)=>g['some'](k=>k['from']===i&&k['to']===j);expect(h(a,b))['toBe'](!![]),expect(h(a,d))['toBe'](!![]),expect(h(b,d))['toBe'](!![]),expect(h(b,c))['toBe'](![]),expect(f['nodes']['has'](c))['toBe'](![]),expect(f['truncations'])['toEqual']([{'nodeId':b,'schema':'guard.relies','observed':0x1,'limit':0x1,'reason':'schema_hops'}]),expect(f['gaps'])['toEqual']([]);}),it('declares\x20maxHops=1\x20on\x20guard.relies\x20and\x20nowhere\x20else',()=>{const f=EDGE_SCHEMAS['filter'](g=>g['maxHops']!==undefined)['map'](g=>g['id']);expect(f)['toEqual'](['guard.relies']);});});
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology,orderCompletionInGraph}from'./expand.js';import{extractObjectEdges,extractReverseRefs,extractTableRefs}from'./extract.js';import{annotateNodeName,deriveOrderCompletion,terminalNamesOfEdges,terminalNamesOfRows,workflowSubgraphFromRows,workflowSubgraphFromEdges}from'./order-status.js';import{COVERED_OBJECT_TYPES,EDGE_SCHEMAS}from'./edge-schema.js';import{FIELD_MUTABILITY_RULES,fieldMutabilityOf,isActionForbidden}from'../../knowledge/contract-invariants.js';import{buildViewport}from'./viewport.js';function mk(a,b){return'0x'+a['toString'](0x10)['padStart'](0x2,'0')+b['toString'](0x10)['padStart'](0x3e,'0');}const eoa=a=>mk(0x0,a),obj=(a,b)=>mk(0x10+a,b),T_USDT='0x2::wow::coins::USDT',buyer=eoa(0x1),otherBuyer=eoa(0x2),merchant=eoa(0x3),collaborator=eoa(0x4),voter1=eoa(0x5),svc=obj(0x4,0xa),mac=obj(0x5,0xb),o1=obj(0x6,0x15),o2=obj(0x6,0x16),o3=obj(0x6,0x17),o4=obj(0x6,0x18),pr1=obj(0x7,0x1f),pr2=obj(0x7,0x20),pay=obj(0x8,0x29),perm=obj(0x0,0x33),g1=obj(0xa,0x3d),g2=obj(0xa,0x3e),gShip=obj(0xa,0x3f),gOther=obj(0xa,0x45),alloc=obj(0xd,0x47),arbsvc=obj(0x3,0x51),arb=obj(0x2,0x52);function raw(a,b,c,d){return{'object':a,'type':b,'data':c,...d?{'type_raw':d}:{}};}const OBJECTS=[raw(svc,'Service',{'permission':perm,'machine':mac,'arbitrations':[arbsvc],'order_allocators':{'allocators':[{'guard':g1}]}},'0x2::service::Service<'+T_USDT+'>'),raw(o1,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr1,'allocation':alloc,'dispute':[arb]}),raw(o2,'Order',{'builder':buyer,'agent':[],'service':svc,'machine':mac,'progress':pr2,'allocation':alloc,'dispute':[]}),raw(o3,'Order',{'builder':buyer,'agent':[],'service':svc,'dispute':[]}),raw(o4,'Order',{'builder':otherBuyer,'agent':[],'service':svc,'machine':mac,'progress':undefined,'dispute':[]}),raw(mac,'Machine',{'permission':perm,'consensus_repositories':[]}),raw(pr1,'Progress',{'machine':mac,'task':o1,'current':'done'}),raw(pr2,'Progress',{'machine':mac,'task':o2,'current':'shipping'}),raw(alloc,'Allocation',{'allocators':{'threshold':0x1,'allocators':[{'guard':g1,'mode':0x0}]}},'0x2::allocation::Allocation<'+T_USDT+'>'),raw(perm,'Permission',{'admin':[merchant]}),raw(g1,'Guard',{'relies':[g2]}),raw(g2,'Guard',{'relies':[]}),raw(gShip,'Guard',{'relies':[]}),raw(arbsvc,'Arbitration',{'permission':perm,'voting_guard':[{'guard':g1}]}),raw(arb,'Arb',{'order':o1,'arbitration':arbsvc,'voted':[{'voter':voter1,'weight':0x3}]}),raw(pay,'Payment',{'record':[{'recipient':merchant,'amount':'99900'}],'from_object':alloc,'info':{'for_object':o1,'for_guard':g1}},'0x2::payment::Payment<'+T_USDT+'>')];let TABLE_SEQ=0x0;function nodeTableItem(a,b,c){TABLE_SEQ++;const d='0x9'+TABLE_SEQ['toString'](0x10)['padStart'](0x3f,'0');return{'key':a,'objectId':d,'object':raw(d,'TableItem_MachineNode',{'name':b,'value':c})};}function permTableItem(a,b){const c='0x9'+a['slice'](0x2,0x1e)['padEnd'](0x3f,'0')['slice'](0x0,0x3f);return{'key':a,'objectId':c,'object':raw(c,'TableItem_PermissionPerm',{'address':a,'perm':b})};}function makePlane(){const a=[nodeTableItem('start','start',[]),nodeTableItem('shipping','shipping',[{'prev_node':'start','threshold':0x0,'forwards':[{'name':'f_ship','weight':0x1,'guard':gShip}]}]),nodeTableItem('done','done',[{'prev_node':'shipping','threshold':0x0,'forwards':[{'name':'f_done','weight':0x1}]}])],b=new Map(OBJECTS['map'](e=>[e['object']['toLowerCase'](),e])),c=new Map();c['set']('0xaa8',new Map([[buyer,{'items':[{'role':0x1,'order':o1,'time':0x1},{'role':0x2,'order':o2,'time':0x2},{'role':0x1,'order':o3,'time':0x3}]}]])),c['set']('0xaad',new Map([[merchant,{'items':[{'role':0x1,'permission':perm,'time':0x1}]}]])),c['set']('0xaae',new Map([[perm,{'items':[{'who':svc,'time':0x1}]}]])),c['set']('0xaaf',new Map([[svc,{'items':[{'who':o1,'time':0x1},{'who':o2,'time':0x2},{'who':o4,'time':0x3},{'who':gOther,'time':0x4}]}]]));const d=new Map([[mac['toLowerCase'](),a],[perm['toLowerCase'](),[permTableItem(collaborator,[0x1,0x2])]]]);return new FakeDataPlane({'objects':b,'keyedFields':c,'tables':d});}const FULL_EDGES={'tableEdges':['machine.node','permission.entity']};async function buildBuyerGraph(a){const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES,...a?{'budget':a}:{}});return{'graph':c,'plane':b};}describe('extract\x20—\x20field\x20edges',()=>{it('reads\x20scalar,\x20vector,\x20struct\x20and\x20deep\x20nested\x20refs\x20defensively',()=>{const a=extractObjectEdges('Service',OBJECTS[0x0]),b=new Map(a['map'](c=>[c['schemaId'],c['refs']['map'](d=>d['to'])]));expect(b['get']('service.permission'))['toEqual']([perm]),expect(b['get']('service.machine'))['toEqual']([mac]),expect(b['get']('service.arbitration'))['toEqual']([arbsvc]),expect(b['get']('service.order_allocator_guard'))['toEqual']([g1]);}),it('parses\x20coin\x20type\x20T\x20and\x20money\x20payloads\x20on\x20Payment',()=>{const a=extractObjectEdges('Payment',OBJECTS['find'](d=>d['object']===pay)),b=new Map(a['map'](d=>[d['schemaId'],d])),c=b['get']('payment.recipient')['refs'][0x0];expect(c['to'])['toBe'](merchant),expect(c['payload']?.['amount'])['toBe']('99900'),expect(c['payload']?.['coinType'])['toBe'](T_USDT),expect(b['get']('payment.from_object')['refs'][0x0]['to'])['toBe'](alloc),expect(b['get']('payment.for_guard')['refs'][0x0]['to'])['toBe'](g1);}),it('reverse\x20field\x20shapes:\x20items[]\x20and\x20votes[]\x20with\x20role/vote\x20payloads',()=>{const a=extractReverseRefs('0xaa8',{'items':[{'role':0x3,'order':o1}]});expect(a[0x0]['refs'][0x0]['payload']?.['roleBits'])['toBe'](0x3);const b=extractReverseRefs('0xaaa',{'votes':[{'who':voter1,'like':!![],'favor':!![]}]});expect(b[0x0]['refs'][0x0]['payload']?.['voteBits'])['toBe'](0x2|0x8);}),it('machine\x20table\x20rows\x20produce\x20node\x20+\x20transition\x20+\x20guard\x20edges',()=>{const a=makePlane()['state']['tables']['get'](mac['toLowerCase']()),b=extractTableRefs('MachineNode',mac,a),c=new Map(b['map'](e=>[e['schemaId'],e['refs']]));expect(c['get']('machine.node')?.['length'])['toBe'](0x3);const d=c['get']('wf.transition');expect(d['map'](e=>[e['from']['includes']('start'),e['to']['includes']('shipping')]))['toContainEqual']([!![],!![]]),expect(c['get']('wf.forward_guard')?.[0x0]['to'])['toBe'](gShip);});}),describe('order-status\x20—\x20structural\x20authority',()=>{it('terminal\x20=\x20names\x20never\x20appearing\x20as\x20prev_node',()=>{const a=terminalNamesOfEdges([{'node':'shipping','prev_node':'start'},{'node':'done','prev_node':'shipping'}]);expect([...a])['toEqual'](['done']),expect([...terminalNamesOfRows([{'name':'a','value':[]},{'name':'b','value':[{'prev_node':'a'}]}])])['toEqual'](['b']);}),it('four\x20completion\x20states',()=>{const a=new Set(['done']);expect(deriveOrderCompletion({'machine':null})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':null})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'shipping','terminalNames':a})['status'])['toBe']('in_progress'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':a})['status'])['toBe']('completed'),expect(deriveOrderCompletion({'machine':mac,'progress':pr1,'currentNode':'done','terminalNames':null})['status'])['toBe']('unknown');}),it('name\x20vocabulary\x20is\x20annotation\x20only',()=>{expect(annotateNodeName('order_refunded'))['toBe']('refund'),expect(annotateNodeName('dispute_node'))['toBe']('exception'),expect(annotateNodeName('shipping'))['toBeNull']();}),it('workflowSubgraphFromRows\x20flattens\x20pairs/forwards\x20and\x20keeps\x20structural\x20terminals',()=>{const a=workflowSubgraphFromRows([{'name':'shipped','value':[{'prev_node':'paid','threshold':0x2,'forwards':[{'name':'ship','guard':{'guard':'0xg','retained_submission':[]},'weight':0x1},{'name':'airdrop','namedOperator':'op','permissionIndex':0x3}]}]},{'name':'done','value':[{'prev_node':'shipped','forwards':[{'name':'confirm'}]}]}],'0xm');expect(a['machine'])['toBe']('0xm'),expect(a['transitions']['map'](b=>b['prevNode']+'>'+b['forward']+'>'+b['node']))['toEqual'](['paid>ship>shipped','paid>airdrop>shipped','shipped>confirm>done']),expect(a['transitions'][0x0]['guard'])['toBe']('0xg'),expect(a['transitions'][0x0]['threshold'])['toBe'](0x2),expect(a['transitions'][0x1]['namedOperator'])['toBe']('op'),expect(a['transitions'][0x1]['permissionIndex'])['toBe'](0x3),expect([...a['terminalNames']])['toEqual'](['done']);}),it('workflowSubgraphFromEdges\x20reads\x20wf.transition\x20payloads\x20and\x20filters\x20by\x20machine',()=>{const a=[{'schema':'wf.transition','from':'0xm1::node::paid','to':'0xm1::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}},{'schema':'wf.transition','from':'0xm2::node::paid','to':'0xm2::node::done','payload':{'node':'done','prevNode':'paid','forward':'confirm'}},{'schema':'machine.node','from':'0xm1','to':'0xm1::node::paid'}],b=workflowSubgraphFromEdges(a);expect(b['transitions'])['toHaveLength'](0x2);const c=workflowSubgraphFromEdges(a,'0xm1');expect(c['transitions'])['toHaveLength'](0x1),expect(c['transitions'][0x0])['toMatchObject']({'node':'done','prevNode':'paid','forward':'confirm','guard':'0xg'}),expect([...c['terminalNames']])['toEqual'](['done']);}),it('entry\x20forwards\x20(prev_node\x20\x27\x27)\x20survive\x20the\x20edge\x20channel\x20—\x20docs#44-c',()=>{let a=0x0;const b=(g,h)=>{a++;const i='0x9'+a['toString'](0x10)['padStart'](0x3f,'0');return{'key':g,'objectId':i,'object':raw(i,'TableItem_MachineNode',{'name':g,'value':h})};},c=obj(0x5,0x5b),d=extractTableRefs('MachineNode',c,[b('delivered',[{'prev_node':'','threshold':0x0,'forwards':[{'name':'deliver','weight':0x1,'permissionIndex':0x3e9}]}]),b('done',[{'prev_node':'delivered','threshold':0x0,'forwards':[{'name':'confirm','weight':0x1}]}])]),e=d['find'](h=>h['schemaId']==='wf.transition')['refs'],f=workflowSubgraphFromEdges(e['map'](g=>({'schema':'wf.transition','from':c['toLowerCase']()+'::node::','to':'','payload':g['payload']})),c);expect(f['transitions']['map'](g=>g['prevNode']+'>'+g['forward']+'>'+g['node'])['sort']())['toEqual'](['>deliver>delivered','delivered>confirm>done']),expect([...f['terminalNames']])['toEqual'](['done']);});}),describe('expandTopology\x20—\x20wave\x20BFS\x20over\x20DataPlane',()=>{it('connects\x20F/R/W/S/M\x20edges\x20with\x20dedupe\x20and\x20no\x20per-id\x20fan-out',async()=>{const {graph:a,plane:b}=await buildBuyerGraph(),c=new Set(a['edges']['map'](f=>f['schema']));for(const e of['eoa.order','order.service','order.progress','order.allocation','service.permission','service.machine','service.order_allocator_guard','service.arbitration','machine.permission','progress.machine','machine.node','wf.transition','wf.forward_guard','guard.relies','arb.order','arb.voter','allocation.guard']){expect(c['has'](e),'missing\x20edge\x20'+e)['toBe'](!![]);}const d=a['edges']['filter'](f=>f['schema']==='service.order')['map'](f=>f['to']);expect(new Set(d))['toEqual'](new Set([o1,o2,o4])),expect(a['nodes']['get'](svc)?.['objectType'])['toBe']('Service'),expect(a['edges']['length'])['toBe'](new Set(a['edges']['map'](f=>f['id']))['size']),expect(b['batches']['objects'])['toBeLessThanOrEqual'](0x6),expect(a['gaps'])['toEqual']([]);}),it('resolves\x20completion\x20from\x20the\x20graph;\x20unknown\x20when\x20machine\x20table\x20not\x20expanded',async()=>{const {graph:a}=await buildBuyerGraph();expect(orderCompletionInGraph(a,o1)['status'])['toBe']('completed'),expect(orderCompletionInGraph(a,o2)['status'])['toBe']('in_progress'),expect(orderCompletionInGraph(a,o3)['status'])['toBe']('completed');const b=makePlane(),c=await expandTopology(b,{'network':ENTRYPOINT['Mainnet'],'seed':buyer});expect(orderCompletionInGraph(c,o1)['status'])['toBe']('unknown');}),it('caps\x20per-kind\x20fanout\x20and\x20records\x20truncation;\x20window\x20edges\x20flagged',async()=>{const {graph:a}=await buildBuyerGraph({'perKindCaps':{'eoa.order':0x1}});expect(a['edges']['filter'](b=>b['schema']==='eoa.order'))['toHaveLength'](0x1),expect(a['truncations']['some'](b=>b['schema']==='eoa.order'))['toBe'](!![]),expect(a['edges']['find'](b=>b['schema']==='eoa.order')?.['truncated'])['toBe'](!![]);}),it('fail-soft:\x20missing\x20objects\x20become\x20gaps,\x20build\x20still\x20succeeds',async()=>{const a=makePlane();a['state']['objects']['delete'](mac['toLowerCase']());const b=await expandTopology(a,{'network':ENTRYPOINT['Mainnet'],'seed':buyer,'edges':FULL_EDGES});expect(b['nodes']['get'](mac)?.['state'])['toBe']('error'),expect(b['gaps'])['toContain'](mac),expect(b['edges']['some'](c=>c['schema']==='order.service'))['toBe'](!![]);}),it('enforces\x20maxDepth',async()=>{const {graph:a}=await buildBuyerGraph({'maxDepth':0x1});expect(a['nodes']['has'](o1))['toBe'](!![]),expect(a['nodes']['has'](svc))['toBe'](![]),expect(a['budgetExhausted']['depth'])['toBe'](!![]);});}),describe('DataPlane\x20batching',()=>{it('chunks\x20at\x2050\x20and\x20counts\x20logical\x20RPC\x20batches',async()=>{const a=new FakeDataPlane({});await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),await a['getObjects'](Array['from']({'length':0x65},(b,c)=>obj(0x6,0x3e8+c))),expect(a['batches']['objects'])['toBe'](0x3),expect(a['dedupHits'])['toBe'](0x65);});}),describe('viewport',()=>{it('buyer\x20never\x20sees\x20other\x20customers\x20through\x20service.order',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'buyer');expect(b['visibleNodes']['has'](o1))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](![]);}),it('merchant\x20sees\x20shop\x20orders\x20and\x20their\x20parties',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,merchant,'merchant');expect(b['visibleNodes']['has'](perm))['toBe'](!![]),expect(b['visibleNodes']['has'](svc))['toBe'](!![]),expect(b['visibleNodes']['has'](o4))['toBe'](!![]),expect(b['visibleNodes']['has'](otherBuyer))['toBe'](!![]),expect(b['visibleNodes']['has'](collaborator))['toBe'](!![]),expect(b['visibleEdges']['some'](c=>c['schema']==='service.order'))['toBe'](!![]);}),it('neutral\x20role\x20sees\x20the\x20full\x20canon\x20graph',async()=>{const {graph:a}=await buildBuyerGraph(),b=buildViewport(a,buyer,'neutral');expect(b['visibleNodes']['size'])['toBe'](a['nodes']['size']);});}),describe('edge\x20schema\x20registry',()=>{it('covers\x20the\x20core\x20commercial\x20object\x20types',()=>{for(const a of['Service','Order','Machine','Progress','Payment','Allocation','Arbitration','Arb','Permission','Guard','Demand','Reward','Contact','Treasury']){expect(COVERED_OBJECT_TYPES)['toContain'](a);}});}),describe('EdgeSchema.contract\x20—\x20field\x20mutability\x20ground\x20truth',()=>{const a=['service.machine','service.buy_guard','service.arbitration','service.reward','service.repository','progress.machine','progress.task','machine.consensus_repository','machine.node','allocation.guard','permission.owner','contact.im','payment.signer'];it('marks\x20exactly\x20the\x20address-field\x20edges\x20with\x20mutability\x20metadata',()=>{const b=EDGE_SCHEMAS['filter'](c=>c['contract'])['map'](c=>c['id'])['sort']();expect(b)['toEqual']([...a]['sort']());}),it('carries\x20the\x20publish-freeze\x20distinction\x20(machine\x20frozen,\x20buy_guard\x20mutable)',()=>{const b=EDGE_SCHEMAS['find'](d=>d['id']==='service.machine')['contract'];expect(b['frozenWhen'])['toBe']('after\x20publish'),expect(b['forbiddenActions'])['toContain']('set'),expect(b['unfreeze'])['toBeNull']();const c=EDGE_SCHEMAS['find'](d=>d['id']==='service.buy_guard')['contract'];expect(c['frozenWhen'])['toBeNull'](),expect(c['allowedActions'])['toContain']('set');}),it('derives\x20the\x20knowledge\x20field-rule\x20table\x20without\x20duplicating\x20facts',()=>{expect(fieldMutabilityOf('Service','machine')?.['frozen_when'])['toBe']('after\x20publish'),expect(fieldMutabilityOf('Machine','nodes')?.['forbidden_actions'])['toContain']('update'),expect(fieldMutabilityOf('Allocation','allocators')?.['frozen_when'])['toBe']('after\x20create\x20(share)'),expect(EDGE_SCHEMAS['find'](c=>c['id']==='allocation.guard')['contract']['field'])['toBe']('allocators');const b=FIELD_MUTABILITY_RULES['map'](c=>c['object_type']+'.'+c['field']);expect(new Set(b)['size'])['toBe'](b['length']),expect(FIELD_MUTABILITY_RULES)['toHaveLength'](0x17),expect(isActionForbidden('Service','machine','set',!![]))['toBe'](!![]),expect(isActionForbidden('Service','machine','set',![]))['toBe'](![]),expect(isActionForbidden('Service','buy_guard','set',!![]))['toBe'](![]);});}),describe('expand\x20—\x20per-schema\x20hop\x20cap',()=>{const a=obj(0xa,0x5b),b=obj(0xa,0x5c),c=obj(0xa,0x5d),d=obj(0xa,0x5e);function e(){const f=new Map([raw(a,'Guard',{'relies':[b,d]}),raw(b,'Guard',{'relies':[c,d]}),raw(c,'Guard',{'relies':[]}),raw(d,'Guard',{'relies':[]})]['map'](g=>[g['object']['toLowerCase'](),g]));return new FakeDataPlane({'objects':f,'keyedFields':new Map(),'tables':new Map()});}it('cuts\x20guard.relies\x20beyond\x20one\x20hop,\x20keeps\x20closure\x20edges,\x20reports\x20schema_hops',async()=>{const f=await expandTopology(e(),{'network':ENTRYPOINT['Mainnet'],'seed':a}),g=f['edges']['filter'](i=>i['schema']==='guard.relies'),h=(i,j)=>g['some'](k=>k['from']===i&&k['to']===j);expect(h(a,b))['toBe'](!![]),expect(h(a,d))['toBe'](!![]),expect(h(b,d))['toBe'](!![]),expect(h(b,c))['toBe'](![]),expect(f['nodes']['has'](c))['toBe'](![]),expect(f['truncations'])['toEqual']([{'nodeId':b,'schema':'guard.relies','observed':0x1,'limit':0x1,'reason':'schema_hops'}]),expect(f['gaps'])['toEqual']([]);}),it('declares\x20maxHops=1\x20on\x20guard.relies\x20and\x20nowhere\x20else',()=>{const f=EDGE_SCHEMAS['filter'](g=>g['maxHops']!==undefined)['map'](g=>g['id']);expect(f)['toEqual'](['guard.relies']);});});
@@ -1 +1 @@
1
- import{EDGE_SCHEMAS}from'./edge-schema.js';export const TOPOLOGY_INTENTS=['full_map','order_health','fund_flow','workflow','counterparty','reputation','permission','supply_chain','arbitration','demand_match'];export function isTopologyIntent(a){return typeof a==='string'&&TOPOLOGY_INTENTS['includes'](a);}export const INTENT_PRESETS={'full_map':{'description':'complete\x20structural\x20map\x20—\x20all\x20families\x20at\x20kernel\x20default\x20depths','tableEdges':['machine.node','permission.entity','demand.presenter','demand.presenter_service','treasury.record','reward.claim','repository.data_about']},'order_health':{'description':'order\x20lifecycle:\x20orders,\x20fulfillment\x20progress,\x20disputes,\x20completion','schemas':['order.builder','order.agent','order.service','order.machine','order.progress','order.allocation','order.discount','order.dispute','order.claimed_by','order.required_info','progress.machine','progress.task','progress.named_operator','progress.context_repository','service.order','eoa.order','service.machine','service.permission','arb.order','arb.arbitration_service'],'tableEdges':['machine.node','repository.data_about'],'eventEdges':['service.order_history','eoa.order_history'],'familyDepths':{'W':0x3,'M':0x2}},'fund_flow':{'description':'money\x20flow:\x20payment\x20legs,\x20allocation\x20waterfall,\x20guard-gated\x20splits','schemas':['payment.recipient','payment.from_object','payment.for_object','payment.for_guard','payment.signer','order.allocation','order.service','order.machine','order.progress','allocation.guard','allocation.payment','allocation.for_object','allocation.for_guard','service.order_allocator_guard','service.permission','treasury.permission','treasury.deposit_guard','treasury.withdraw_guard'],'tableEdges':['treasury.record','reward.claim'],'familyDepths':{'M':0x4}},'workflow':{'description':'Machine\x20workflow\x20graphs:\x20nodes,\x20transitions,\x20guards,\x20progress\x20runtime','schemas':['service.machine','order.machine','order.progress','order.service','progress.machine','progress.task','progress.named_operator','progress.context_repository','machine.permission','machine.consensus_repository','wf.transition','wf.forward_guard'],'tableEdges':['machine.node'],'familyDepths':{'W':0x5}},'counterparty':{'description':'who\x20is\x20on\x20the\x20other\x20side:\x20buyers,\x20sellers,\x20agents,\x20operators','schemas':['order.builder','order.agent','order.service','order.machine','service.order','eoa.order','service.permission','service.um','machine.permission','progress.named_operator','contact.permission','entity.profile','entity.referrer'],'tableEdges':['permission.entity'],'familyDepths':{'S':0x1}},'reputation':{'description':'social\x20proof:\x20registrar\x20votes,\x20arbitration\x20voting\x20record,\x20contacts','schemas':['target.vote','arb.voter','arb.order','arb.arbitration_service','eoa.contact','contact.permission','contact.im','arbitration.voting_guard','entity.profile','entity.referrer','entity.resource'],'tableEdges':['reward.claim'],'familyDepths':{'S':0x3}},'permission':{'description':'governance:\x20permission\x20groups,\x20bindings,\x20entity\x20tables,\x20admins,\x20buyer\x20gate','schemas':['permission.admin','permission.owner','permission.um','permission.core_binding','permission.tx_binding','eoa.permission','eoa.contact','contact.permission','service.permission','service.buy_guard','machine.permission','demand.permission','reward.permission','repository.permission','treasury.permission','arbitration.permission','progress.named_operator'],'tableEdges':['permission.entity'],'familyDepths':{'R':0x4}},'supply_chain':{'description':'multi-leg\x20settlement:\x20allocation\x20templates,\x20forward\x20guards,\x20sub-orders','schemas':['order.allocation','order.machine','order.progress','order.service','allocation.guard','service.order_allocator_guard','service.machine','wf.forward_guard','wf.transition','progress.task','machine.consensus_repository'],'tableEdges':['machine.node','repository.data_about'],'familyDepths':{'W':0x4,'M':0x3}},'arbitration':{'description':'disputes:\x20cases,\x20arbitration\x20services,\x20voters,\x20guards','schemas':['order.dispute','order.claimed_by','order.service','arb.order','arb.arbitration_service','arb.voter','arbitration.permission','arbitration.voting_guard','arbitration.usage_guard','service.arbitration','service.permission'],'eventEdges':['arb.history'],'familyDepths':{'S':0x2}},'demand_match':{'description':'demand\x20matching:\x20presenters,\x20guards,\x20reward\x20pools,\x20permissions','schemas':['demand.permission','demand.guard','demand.reward','demand.um','reward.permission','reward.guard','reward.um','eoa.order','order.service','order.builder'],'tableEdges':['demand.presenter','demand.presenter_service'],'familyDepths':{'R':0x3}}};export const EVALUATION_SERVICE_INTENTS=['order_health','supply_chain','arbitration','workflow','fund_flow','permission','reputation'];export const EVALUATION_SERVICE_BUDGET={'maxDepth':0x5,'maxNodes':0x190,'maxFanoutPerNode':0x3c,'maxRpcs':0x64};export const EVALUATION_SERVICE_EDGES={'familyDepths':{'S':0x5}};export function withEvaluationBundle(a){return{...a,'edges':{...a['edges'],'familyDepths':{...a['edges']['familyDepths']??{},...EVALUATION_SERVICE_EDGES['familyDepths']}},'budget':{...a['budget'],...EVALUATION_SERVICE_BUDGET},'trace':[...a['trace'],'evaluation\x20bundle:\x20S≤'+EVALUATION_SERVICE_EDGES['familyDepths']['S']+'\x20floor\x20'+('(fund-counterparty\x20identity\x20read\x20sits\x20at\x20wave\x204),\x20budget\x20maxDepth='+EVALUATION_SERVICE_BUDGET['maxDepth'])]};}const KERNEL_DEFAULT_TABLE_EDGES=['machine.node'],KNOWN_SCHEMA_IDS=new Set(EDGE_SCHEMAS['map'](a=>a['id']));export function normalizeSchemaHops(a,b){if(typeof a!=='object'||a===null)return undefined;const c={};for(const [d,e]of Object['entries'](a)){typeof e==='number'&&Number['isInteger'](e)&&e>=0x0&&e<=0x8&&KNOWN_SCHEMA_IDS['has'](d)?c[d]=e:b?.['push'](d);}return Object['keys'](c)['length']>0x0?c:undefined;}function formatHops(a){return Object['keys'](a)['sort']()['map'](b=>b+'≤'+a[b])['join']('\x20');}function unionDedup(...a){const b=[];for(const c of a){for(const d of c??[])if(!b['includes'](d))b['push'](d);}return b;}export function resolveExpansionStrategy(a){const b=[],c=a['intents']?.['length']?a['intents']:a['personaPref']?.['intents']?.['length']?a['personaPref']['intents']:a['roleDefault']?.['intents']?.['length']?a['roleDefault']['intents']:a['defaultIntents']??[];if(a['intents']?.['length'])b['push']('intent\x20(explicit):\x20'+a['intents']['join'](',\x20'));else{if(a['personaPref']?.['intents']?.['length'])b['push']('intent\x20(persona):\x20'+a['personaPref']['intents']['join'](',\x20'));else{if(a['roleDefault']?.['intents']?.['length'])b['push']('intent\x20(role\x20default):\x20'+a['roleDefault']['intents']['join'](',\x20'));else a['defaultIntents']?.['length']&&b['push']('intent\x20(default):\x20'+a['defaultIntents']['join'](',\x20'));}}const d=[];a['industryTemplate']&&d['push']({'label':'industry\x20template'+(a['industryTemplate']['label']?'\x20('+a['industryTemplate']['label']+')':''),'frag':a['industryTemplate']});if(c['length']>0x0){const u={},v=[],w=[],x=[],y=[];let z,A,B,C,D;for(const E of c){const F=INTENT_PRESETS[E];if(!F)continue;for(const G of F['families']??[])if(!v['includes'](G))v['push'](G);for(const H of F['schemas']??[])if(!w['includes'](H))w['push'](H);for(const I of F['tableEdges']??[])if(!x['includes'](I))x['push'](I);for(const J of F['eventEdges']??[])if(!y['includes'](J))y['push'](J);if(F['familyDepths'])z={...z??{},...F['familyDepths']};if(F['schemaHops'])A={...A??{},...F['schemaHops']};if(F['maxDepth']!==undefined)B=F['maxDepth'];if(F['maxNodes']!==undefined)C=F['maxNodes'];if(F['maxFanout']!==undefined)D=F['maxFanout'];}if(v['length']>0x0)u['families']=v;if(w['length']>0x0)u['schemas']=w;if(x['length']>0x0)u['tableEdges']=x;if(y['length']>0x0)u['eventEdges']=y;if(z)u['familyDepths']=z;if(A)u['schemaHops']=A;if(B!==undefined)u['maxDepth']=B;if(C!==undefined)u['maxNodes']=C;if(D!==undefined)u['maxFanout']=D;d['push']({'label':'intent\x20presets\x20('+c['join'](',\x20')+')','frag':u});}a['personaPref']&&d['push']({'label':'persona\x20preference','frag':a['personaPref']});let g,h,i,j,k,l,m,n,o;for(const {label:K,frag:L}of d){const M=[];L['families']&&(g=L['families'],M['push']('families='+L['families']['join']('/')));L['schemas']&&(h=L['schemas'],M['push'](L['schemas']['length']+'\x20schema(s)'));L['tableEdges']?.['length']&&(n=unionDedup(n,L['tableEdges']),M['push']('tables\x20+['+L['tableEdges']['join'](',')+']'));L['eventEdges']?.['length']&&(o=unionDedup(o,L['eventEdges']),M['push']('events\x20+['+L['eventEdges']['join'](',')+']'));L['familyDepths']&&(i={...i??{},...L['familyDepths']},M['push'](Object['entries'](L['familyDepths'])['map'](([N,O])=>N+'≤'+O)['join']('\x20')));L['schemaHops']&&(j={...j??{},...L['schemaHops']},M['push']('hops\x20'+formatHops(L['schemaHops'])));L['maxDepth']!==undefined&&(k=L['maxDepth'],M['push']('depth='+L['maxDepth']));L['maxNodes']!==undefined&&(l=L['maxNodes'],M['push']('nodes='+L['maxNodes']));L['maxFanout']!==undefined&&(m=L['maxFanout'],M['push']('fanout='+L['maxFanout']));if(M['length']>0x0)b['push'](K+':\x20'+M['join'](';\x20'));}const p=a['explicitEdges'];p?.['families']&&(g=p['families'],b['push']('explicit:\x20families='+p['families']['join']('/')));p?.['schemas']&&(h=p['schemas'],b['push']('explicit:\x20'+p['schemas']['length']+'\x20schema(s)'));p?.['tableEdges']&&(n=p['tableEdges'],b['push']('explicit:\x20tables='+p['tableEdges']['join'](',')));p?.['eventEdges']&&(o=p['eventEdges'],b['push']('explicit:\x20events='+p['eventEdges']['join'](',')));if(p?.['schemaHops']){const N=[],O=normalizeSchemaHops(p['schemaHops'],N);O&&(j={...j??{},...O},b['push']('explicit:\x20hops\x20'+formatHops(O)));if(N['length']>0x0)b['push']('explicit:\x20dropped\x20invalid\x20hops\x20['+N['join'](',')+']');}if(p?.['deny'])b['push']('explicit:\x20deny='+p['deny']['join'](','));if(p?.['budget']){if(p['budget']['maxDepth']!==undefined)k=p['budget']['maxDepth'];if(p['budget']['maxNodes']!==undefined)l=p['budget']['maxNodes'];if(p['budget']['maxFanoutPerNode']!==undefined)m=p['budget']['maxFanoutPerNode'];if(p['budget']['maxRpcs']!==undefined)b['push']('explicit:\x20rpcs='+p['budget']['maxRpcs']);b['push']('explicit:\x20budget\x20overrides\x20applied');}const q=n?.['length']?n:KERNEL_DEFAULT_TABLE_EDGES;if(!n?.['length'])b['push']('kernel\x20default:\x20tables=['+KERNEL_DEFAULT_TABLE_EDGES['join'](',')+']\x20(all\x20families,\x20depth\x204)');j&&Object['keys'](j)['length']>0x0&&b['push']('effective\x20schema\x20hops:\x20'+formatHops(j));const r=c['length']>0x0?c:['full_map'];return{'intents':r,'edges':{...g?{'families':g}:{},...h?{'schemas':h}:{},...p?.['deny']?{'deny':p['deny']}:{},'tableEdges':q,...o?.['length']?{'eventEdges':o}:{},...i?{'familyDepths':i}:{},...j&&Object['keys'](j)['length']>0x0?{'schemaHops':j}:{}},'budget':{...k!==undefined?{'maxDepth':k}:{},...l!==undefined?{'maxNodes':l}:{},...m!==undefined?{'maxFanoutPerNode':m}:{},...p?.['budget']?.['maxRpcs']!==undefined?{'maxRpcs':p['budget']['maxRpcs']}:{}},'trace':b};}export function normalizeTopologyFocusPref(a){if(typeof a!=='object'||a===null)return undefined;const b=a,c={};if(Array['isArray'](b['intents'])){const e=b['intents']['filter'](isTopologyIntent);if(e['length']>0x0)c['intents']=e;}if(Array['isArray'](b['families'])){const g=b['families']['filter'](h=>typeof h==='string'&&['F','R','M','W','S','E']['includes'](h));if(g['length']>0x0)c['families']=g;}if(Array['isArray'](b['table_edges'])){const h=b['table_edges']['filter'](i=>typeof i==='string');if(h['length']>0x0)c['table_edges']=h;}if(Array['isArray'](b['event_edges'])){const i=b['event_edges']['filter'](j=>typeof j==='string');if(i['length']>0x0)c['event_edges']=i;}if(typeof b['family_depths']==='object'&&b['family_depths']!==null){const j={};for(const [k,l]of Object['entries'](b['family_depths'])){['F','R','M','W','S','E']['includes'](k)&&typeof l==='number'&&l>=0x0&&l<=0x8&&(j[k]=Math['floor'](l));}if(Object['keys'](j)['length']>0x0)c['family_depths']=j;}{const m=normalizeSchemaHops(b['schema_hops']);if(m)c['schema_hops']=m;}if(typeof b['max_depth']==='number'&&b['max_depth']>=0x0&&b['max_depth']<=0x8)c['max_depth']=Math['floor'](b['max_depth']);if(typeof b['max_nodes']==='number'&&b['max_nodes']>=0x1&&b['max_nodes']<=0xbb8)c['max_nodes']=Math['floor'](b['max_nodes']);if(typeof b['max_fanout']==='number'&&b['max_fanout']>=0x1&&b['max_fanout']<=0x1450)c['max_fanout']=Math['floor'](b['max_fanout']);return Object['keys'](c)['length']>0x0?c:undefined;}
1
+ import{EDGE_SCHEMAS}from'./edge-schema.js';export const TOPOLOGY_INTENTS=['full_map','order_health','fund_flow','workflow','counterparty','reputation','permission','supply_chain','arbitration','demand_match'];export function isTopologyIntent(a){return typeof a==='string'&&TOPOLOGY_INTENTS['includes'](a);}export const INTENT_PRESETS={'full_map':{'description':'complete\x20structural\x20map\x20—\x20all\x20families\x20at\x20kernel\x20default\x20depths','tableEdges':['machine.node','permission.entity','demand.presenter','demand.presenter_service','treasury.record','reward.claim','repository.data_about']},'order_health':{'description':'order\x20lifecycle:\x20orders,\x20fulfillment\x20progress,\x20disputes,\x20completion','schemas':['order.builder','order.agent','order.service','order.machine','order.progress','order.allocation','order.discount','order.dispute','order.claimed_by','order.required_info','progress.machine','progress.task','progress.named_operator','progress.context_repository','service.order','eoa.order','service.machine','service.permission','arb.order','arb.arbitration_service'],'tableEdges':['machine.node','repository.data_about'],'eventEdges':['service.order_history','eoa.order_history'],'familyDepths':{'W':0x3,'M':0x2}},'fund_flow':{'description':'money\x20flow:\x20payment\x20legs,\x20allocation\x20waterfall,\x20guard-gated\x20splits','schemas':['payment.recipient','payment.from_object','payment.for_object','payment.for_guard','payment.signer','order.allocation','order.service','order.machine','order.progress','allocation.guard','allocation.payment','allocation.for_object','allocation.for_guard','service.order_allocator_guard','service.permission','service.reward','reward.guard','treasury.permission','treasury.deposit_guard','treasury.withdraw_guard'],'tableEdges':['treasury.record','reward.claim'],'familyDepths':{'M':0x4}},'workflow':{'description':'Machine\x20workflow\x20graphs:\x20nodes,\x20transitions,\x20guards,\x20progress\x20runtime','schemas':['service.machine','order.machine','order.progress','order.service','progress.machine','progress.task','progress.named_operator','progress.context_repository','machine.permission','machine.consensus_repository','wf.transition','wf.forward_guard'],'tableEdges':['machine.node'],'familyDepths':{'W':0x5}},'counterparty':{'description':'who\x20is\x20on\x20the\x20other\x20side:\x20buyers,\x20sellers,\x20agents,\x20operators','schemas':['order.builder','order.agent','order.service','order.machine','service.order','eoa.order','service.permission','service.um','machine.permission','progress.named_operator','contact.permission','entity.profile','entity.referrer'],'tableEdges':['permission.entity'],'familyDepths':{'S':0x1}},'reputation':{'description':'social\x20proof:\x20registrar\x20votes,\x20arbitration\x20voting\x20record,\x20contacts','schemas':['target.vote','arb.voter','arb.order','arb.arbitration_service','eoa.contact','contact.permission','contact.im','arbitration.voting_guard','entity.profile','entity.referrer','entity.resource'],'tableEdges':['reward.claim'],'familyDepths':{'S':0x3}},'permission':{'description':'governance:\x20permission\x20groups,\x20bindings,\x20entity\x20tables,\x20admins,\x20buyer\x20gate','schemas':['permission.admin','permission.owner','permission.um','permission.core_binding','permission.tx_binding','eoa.permission','eoa.contact','contact.permission','service.permission','service.buy_guard','machine.permission','demand.permission','reward.permission','repository.permission','treasury.permission','arbitration.permission','progress.named_operator'],'tableEdges':['permission.entity'],'familyDepths':{'R':0x4}},'supply_chain':{'description':'multi-leg\x20settlement:\x20allocation\x20templates,\x20forward\x20guards,\x20sub-orders','schemas':['order.allocation','order.machine','order.progress','order.service','allocation.guard','service.order_allocator_guard','service.machine','wf.forward_guard','wf.transition','progress.task','machine.consensus_repository'],'tableEdges':['machine.node','repository.data_about'],'familyDepths':{'W':0x4,'M':0x3}},'arbitration':{'description':'disputes:\x20cases,\x20arbitration\x20services,\x20voters,\x20guards','schemas':['order.dispute','order.claimed_by','order.service','arb.order','arb.arbitration_service','arb.voter','arbitration.permission','arbitration.voting_guard','arbitration.usage_guard','service.arbitration','service.permission'],'eventEdges':['arb.history'],'familyDepths':{'S':0x2}},'demand_match':{'description':'demand\x20matching:\x20presenters,\x20guards,\x20reward\x20pools,\x20permissions','schemas':['demand.permission','demand.guard','demand.reward','demand.um','reward.permission','reward.guard','reward.um','eoa.order','order.service','order.builder'],'tableEdges':['demand.presenter','demand.presenter_service'],'familyDepths':{'R':0x3}}};export const EVALUATION_SERVICE_INTENTS=['order_health','supply_chain','arbitration','workflow','fund_flow','permission','reputation'];export const EVALUATION_SERVICE_BUDGET={'maxDepth':0x5,'maxNodes':0x190,'maxFanoutPerNode':0x3c,'maxRpcs':0x64};export const EVALUATION_SERVICE_EDGES={'familyDepths':{'S':0x5}};export function withEvaluationBundle(a){return{...a,'edges':{...a['edges'],'familyDepths':{...a['edges']['familyDepths']??{},...EVALUATION_SERVICE_EDGES['familyDepths']}},'budget':{...a['budget'],...EVALUATION_SERVICE_BUDGET},'trace':[...a['trace'],'evaluation\x20bundle:\x20S≤'+EVALUATION_SERVICE_EDGES['familyDepths']['S']+'\x20floor\x20'+('(fund-counterparty\x20identity\x20read\x20sits\x20at\x20wave\x204),\x20budget\x20maxDepth='+EVALUATION_SERVICE_BUDGET['maxDepth'])]};}const KERNEL_DEFAULT_TABLE_EDGES=['machine.node'],KNOWN_SCHEMA_IDS=new Set(EDGE_SCHEMAS['map'](a=>a['id']));export function normalizeSchemaHops(a,b){if(typeof a!=='object'||a===null)return undefined;const c={};for(const [d,e]of Object['entries'](a)){typeof e==='number'&&Number['isInteger'](e)&&e>=0x0&&e<=0x8&&KNOWN_SCHEMA_IDS['has'](d)?c[d]=e:b?.['push'](d);}return Object['keys'](c)['length']>0x0?c:undefined;}function formatHops(a){return Object['keys'](a)['sort']()['map'](b=>b+'≤'+a[b])['join']('\x20');}function unionDedup(...a){const b=[];for(const c of a){for(const d of c??[])if(!b['includes'](d))b['push'](d);}return b;}export function resolveExpansionStrategy(a){const b=[],c=a['intents']?.['length']?a['intents']:a['personaPref']?.['intents']?.['length']?a['personaPref']['intents']:a['roleDefault']?.['intents']?.['length']?a['roleDefault']['intents']:a['defaultIntents']??[];if(a['intents']?.['length'])b['push']('intent\x20(explicit):\x20'+a['intents']['join'](',\x20'));else{if(a['personaPref']?.['intents']?.['length'])b['push']('intent\x20(persona):\x20'+a['personaPref']['intents']['join'](',\x20'));else{if(a['roleDefault']?.['intents']?.['length'])b['push']('intent\x20(role\x20default):\x20'+a['roleDefault']['intents']['join'](',\x20'));else a['defaultIntents']?.['length']&&b['push']('intent\x20(default):\x20'+a['defaultIntents']['join'](',\x20'));}}const d=[];a['industryTemplate']&&d['push']({'label':'industry\x20template'+(a['industryTemplate']['label']?'\x20('+a['industryTemplate']['label']+')':''),'frag':a['industryTemplate']});if(c['length']>0x0){const u={},v=[],w=[],x=[],y=[];let z,A,B,C,D;for(const E of c){const F=INTENT_PRESETS[E];if(!F)continue;for(const G of F['families']??[])if(!v['includes'](G))v['push'](G);for(const H of F['schemas']??[])if(!w['includes'](H))w['push'](H);for(const I of F['tableEdges']??[])if(!x['includes'](I))x['push'](I);for(const J of F['eventEdges']??[])if(!y['includes'](J))y['push'](J);if(F['familyDepths'])z={...z??{},...F['familyDepths']};if(F['schemaHops'])A={...A??{},...F['schemaHops']};if(F['maxDepth']!==undefined)B=F['maxDepth'];if(F['maxNodes']!==undefined)C=F['maxNodes'];if(F['maxFanout']!==undefined)D=F['maxFanout'];}if(v['length']>0x0)u['families']=v;if(w['length']>0x0)u['schemas']=w;if(x['length']>0x0)u['tableEdges']=x;if(y['length']>0x0)u['eventEdges']=y;if(z)u['familyDepths']=z;if(A)u['schemaHops']=A;if(B!==undefined)u['maxDepth']=B;if(C!==undefined)u['maxNodes']=C;if(D!==undefined)u['maxFanout']=D;d['push']({'label':'intent\x20presets\x20('+c['join'](',\x20')+')','frag':u});}a['personaPref']&&d['push']({'label':'persona\x20preference','frag':a['personaPref']});let g,h,i,j,k,l,m,n,o;for(const {label:K,frag:L}of d){const M=[];L['families']&&(g=L['families'],M['push']('families='+L['families']['join']('/')));L['schemas']&&(h=L['schemas'],M['push'](L['schemas']['length']+'\x20schema(s)'));L['tableEdges']?.['length']&&(n=unionDedup(n,L['tableEdges']),M['push']('tables\x20+['+L['tableEdges']['join'](',')+']'));L['eventEdges']?.['length']&&(o=unionDedup(o,L['eventEdges']),M['push']('events\x20+['+L['eventEdges']['join'](',')+']'));L['familyDepths']&&(i={...i??{},...L['familyDepths']},M['push'](Object['entries'](L['familyDepths'])['map'](([N,O])=>N+'≤'+O)['join']('\x20')));L['schemaHops']&&(j={...j??{},...L['schemaHops']},M['push']('hops\x20'+formatHops(L['schemaHops'])));L['maxDepth']!==undefined&&(k=L['maxDepth'],M['push']('depth='+L['maxDepth']));L['maxNodes']!==undefined&&(l=L['maxNodes'],M['push']('nodes='+L['maxNodes']));L['maxFanout']!==undefined&&(m=L['maxFanout'],M['push']('fanout='+L['maxFanout']));if(M['length']>0x0)b['push'](K+':\x20'+M['join'](';\x20'));}const p=a['explicitEdges'];p?.['families']&&(g=p['families'],b['push']('explicit:\x20families='+p['families']['join']('/')));p?.['schemas']&&(h=p['schemas'],b['push']('explicit:\x20'+p['schemas']['length']+'\x20schema(s)'));p?.['tableEdges']&&(n=p['tableEdges'],b['push']('explicit:\x20tables='+p['tableEdges']['join'](',')));p?.['eventEdges']&&(o=p['eventEdges'],b['push']('explicit:\x20events='+p['eventEdges']['join'](',')));if(p?.['schemaHops']){const N=[],O=normalizeSchemaHops(p['schemaHops'],N);O&&(j={...j??{},...O},b['push']('explicit:\x20hops\x20'+formatHops(O)));if(N['length']>0x0)b['push']('explicit:\x20dropped\x20invalid\x20hops\x20['+N['join'](',')+']');}if(p?.['deny'])b['push']('explicit:\x20deny='+p['deny']['join'](','));if(p?.['budget']){if(p['budget']['maxDepth']!==undefined)k=p['budget']['maxDepth'];if(p['budget']['maxNodes']!==undefined)l=p['budget']['maxNodes'];if(p['budget']['maxFanoutPerNode']!==undefined)m=p['budget']['maxFanoutPerNode'];if(p['budget']['maxRpcs']!==undefined)b['push']('explicit:\x20rpcs='+p['budget']['maxRpcs']);b['push']('explicit:\x20budget\x20overrides\x20applied');}const q=n?.['length']?n:KERNEL_DEFAULT_TABLE_EDGES;if(!n?.['length'])b['push']('kernel\x20default:\x20tables=['+KERNEL_DEFAULT_TABLE_EDGES['join'](',')+']\x20(all\x20families,\x20depth\x204)');j&&Object['keys'](j)['length']>0x0&&b['push']('effective\x20schema\x20hops:\x20'+formatHops(j));const r=c['length']>0x0?c:['full_map'];return{'intents':r,'edges':{...g?{'families':g}:{},...h?{'schemas':h}:{},...p?.['deny']?{'deny':p['deny']}:{},'tableEdges':q,...o?.['length']?{'eventEdges':o}:{},...i?{'familyDepths':i}:{},...j&&Object['keys'](j)['length']>0x0?{'schemaHops':j}:{}},'budget':{...k!==undefined?{'maxDepth':k}:{},...l!==undefined?{'maxNodes':l}:{},...m!==undefined?{'maxFanoutPerNode':m}:{},...p?.['budget']?.['maxRpcs']!==undefined?{'maxRpcs':p['budget']['maxRpcs']}:{}},'trace':b};}export function normalizeTopologyFocusPref(a){if(typeof a!=='object'||a===null)return undefined;const b=a,c={};if(Array['isArray'](b['intents'])){const e=b['intents']['filter'](isTopologyIntent);if(e['length']>0x0)c['intents']=e;}if(Array['isArray'](b['families'])){const g=b['families']['filter'](h=>typeof h==='string'&&['F','R','M','W','S','E']['includes'](h));if(g['length']>0x0)c['families']=g;}if(Array['isArray'](b['table_edges'])){const h=b['table_edges']['filter'](i=>typeof i==='string');if(h['length']>0x0)c['table_edges']=h;}if(Array['isArray'](b['event_edges'])){const i=b['event_edges']['filter'](j=>typeof j==='string');if(i['length']>0x0)c['event_edges']=i;}if(typeof b['family_depths']==='object'&&b['family_depths']!==null){const j={};for(const [k,l]of Object['entries'](b['family_depths'])){['F','R','M','W','S','E']['includes'](k)&&typeof l==='number'&&l>=0x0&&l<=0x8&&(j[k]=Math['floor'](l));}if(Object['keys'](j)['length']>0x0)c['family_depths']=j;}{const m=normalizeSchemaHops(b['schema_hops']);if(m)c['schema_hops']=m;}if(typeof b['max_depth']==='number'&&b['max_depth']>=0x0&&b['max_depth']<=0x8)c['max_depth']=Math['floor'](b['max_depth']);if(typeof b['max_nodes']==='number'&&b['max_nodes']>=0x1&&b['max_nodes']<=0xbb8)c['max_nodes']=Math['floor'](b['max_nodes']);if(typeof b['max_fanout']==='number'&&b['max_fanout']>=0x1&&b['max_fanout']<=0x1450)c['max_fanout']=Math['floor'](b['max_fanout']);return Object['keys'](c)['length']>0x0?c:undefined;}