@wowok/agent-mcp 2.7.7 → 2.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/dist/customer/index.d.ts +3 -4
  2. package/dist/customer/index.js +1 -1
  3. package/dist/customer/info-puzzle.js +1 -1
  4. package/dist/customer/order-monitor.d.ts +0 -9
  5. package/dist/customer/order-monitor.js +1 -1
  6. package/dist/customer/order-strategy.d.ts +0 -19
  7. package/dist/customer/order-strategy.js +1 -1
  8. package/dist/customer/reminder-system.d.ts +0 -5
  9. package/dist/customer/reminder-system.js +1 -1
  10. package/dist/evaluation/game-strategy.js +1 -1
  11. package/dist/evaluation/injection.d.ts +6 -0
  12. package/dist/evaluation/injection.js +1 -0
  13. package/dist/evaluation/node-game.js +1 -1
  14. package/dist/examples/machine-multisig-threshold.json +1 -0
  15. package/dist/harness/recover.js +1 -1
  16. package/dist/harness/types.d.ts +1 -1
  17. package/dist/harness/verify.js +1 -1
  18. package/dist/intent/enrich.js +1 -1
  19. package/dist/intent/matcher.js +1 -1
  20. package/dist/intent/types.d.ts +1 -1
  21. package/dist/intent/types.js +1 -1
  22. package/dist/knowledge/arbitration-ledger.js +1 -1
  23. package/dist/knowledge/contract-invariants.d.ts +53 -0
  24. package/dist/knowledge/contract-invariants.js +1 -0
  25. package/dist/knowledge/deployment-scanner.js +1 -1
  26. package/dist/knowledge/dynamic-pricing.d.ts +0 -2
  27. package/dist/knowledge/dynamic-pricing.js +1 -1
  28. package/dist/knowledge/event-semantics.d.ts +20 -0
  29. package/dist/knowledge/event-semantics.js +1 -0
  30. package/dist/knowledge/examples-scanner-cli.js +1 -1
  31. package/dist/knowledge/examples-scanner.js +1 -1
  32. package/dist/knowledge/glossary.js +1 -1
  33. package/dist/knowledge/guard-submission-prompt.js +1 -1
  34. package/dist/knowledge/immutability.d.ts +11 -0
  35. package/dist/knowledge/immutability.js +1 -0
  36. package/dist/knowledge/index.d.ts +12 -6
  37. package/dist/knowledge/index.js +1 -1
  38. package/dist/knowledge/industry-registry.js +1 -1
  39. package/dist/knowledge/intent-metrics.d.ts +1 -1
  40. package/dist/knowledge/jsonrpc-enum.d.ts +37 -0
  41. package/dist/knowledge/jsonrpc-enum.js +1 -0
  42. package/dist/knowledge/machine-confirm.js +1 -1
  43. package/dist/knowledge/machine-risk.js +1 -1
  44. package/dist/knowledge/machine-topology.d.ts +11 -0
  45. package/dist/knowledge/machine-topology.js +1 -1
  46. package/dist/knowledge/machine-translation.js +1 -1
  47. package/dist/knowledge/market-metrics.d.ts +11 -0
  48. package/dist/knowledge/market-metrics.js +1 -1
  49. package/dist/knowledge/mcp-schema-audit-cli.js +1 -1
  50. package/dist/knowledge/mcp-schema-audit.d.ts +1 -0
  51. package/dist/knowledge/mcp-schema-audit.js +1 -1
  52. package/dist/knowledge/messenger-guard-guidance.d.ts +17 -0
  53. package/dist/knowledge/messenger-guard-guidance.js +1 -0
  54. package/dist/knowledge/operation-dictionary.d.ts +18 -0
  55. package/dist/knowledge/operation-dictionary.js +1 -0
  56. package/dist/knowledge/service-ledger.js +1 -1
  57. package/dist/knowledge/service-risk.js +1 -1
  58. package/dist/knowledge/service-translation.js +1 -1
  59. package/dist/knowledge/supply-chain.d.ts +24 -0
  60. package/dist/knowledge/supply-chain.js +1 -0
  61. package/dist/knowledge/template-registry.js +1 -1
  62. package/dist/knowledge/tools-reference.js +1 -1
  63. package/dist/knowledge/trust-metrics.d.ts +27 -2
  64. package/dist/knowledge/trust-metrics.js +1 -1
  65. package/dist/knowledge/workflow-guidance.d.ts +22 -1
  66. package/dist/knowledge/workflow-guidance.js +1 -1
  67. package/dist/monitor/EventStore.d.ts +78 -0
  68. package/dist/monitor/EventStore.js +1 -0
  69. package/dist/participation/radar-core.d.ts +0 -1
  70. package/dist/participation/radar-core.js +1 -1
  71. package/dist/persona/address-format.d.ts +6 -0
  72. package/dist/persona/address-format.js +1 -0
  73. package/dist/persona/analyzer.js +1 -1
  74. package/dist/persona/index.d.ts +3 -0
  75. package/dist/persona/index.js +1 -1
  76. package/dist/persona/types.d.ts +1 -1
  77. package/dist/persona/types.js +1 -1
  78. package/dist/project/business-puzzle.js +1 -1
  79. package/dist/project/edit-planner.js +1 -1
  80. package/dist/project/evaluation.js +1 -1
  81. package/dist/project/graph-builder.js +1 -1
  82. package/dist/project/handlers.d.ts +2 -18
  83. package/dist/project/handlers.js +1 -1
  84. package/dist/project/index.js +1 -1
  85. package/dist/project/machine-nodes.d.ts +23 -0
  86. package/dist/project/machine-nodes.js +1 -1
  87. package/dist/project/machine-panorama.d.ts +41 -0
  88. package/dist/project/machine-panorama.js +1 -0
  89. package/dist/project/object-panorama.d.ts +179 -0
  90. package/dist/project/object-panorama.js +1 -0
  91. package/dist/project/object-type.d.ts +1 -0
  92. package/dist/project/object-type.js +1 -0
  93. package/dist/project/participation-radar.js +1 -1
  94. package/dist/project/semantic-assembler.js +1 -1
  95. package/dist/project/service-panorama.d.ts +180 -0
  96. package/dist/project/service-panorama.js +1 -0
  97. package/dist/project/stage-gate.d.ts +0 -1
  98. package/dist/project/stage-gate.js +1 -1
  99. package/dist/project/task-tracker.d.ts +4 -0
  100. package/dist/project/task-tracker.js +1 -1
  101. package/dist/role/derivation.d.ts +19 -2
  102. package/dist/role/derivation.js +1 -1
  103. package/dist/role/index.d.ts +2 -2
  104. package/dist/role/index.js +1 -1
  105. package/dist/role/model.js +1 -1
  106. package/dist/role/resolution.d.ts +16 -0
  107. package/dist/role/resolution.js +1 -1
  108. package/dist/role/types.d.ts +1 -1
  109. package/dist/role/types.js +1 -1
  110. package/dist/safety/confirm-gate.js +1 -1
  111. package/dist/schema/call/allocation.d.ts +1 -0
  112. package/dist/schema/call/arbitration.d.ts +4 -3
  113. package/dist/schema/call/arbitration.js +1 -1
  114. package/dist/schema/call/base.d.ts +16 -0
  115. package/dist/schema/call/base.js +1 -1
  116. package/dist/schema/call/bridge.d.ts +7 -0
  117. package/dist/schema/call/contact.d.ts +1 -0
  118. package/dist/schema/call/demand.d.ts +1 -0
  119. package/dist/schema/call/guard.d.ts +3 -0
  120. package/dist/schema/call/handler.js +1 -1
  121. package/dist/schema/call/machine.d.ts +2 -0
  122. package/dist/schema/call/machine.js +1 -1
  123. package/dist/schema/call/order.d.ts +1 -0
  124. package/dist/schema/call/payment.d.ts +1 -0
  125. package/dist/schema/call/permission.d.ts +1 -0
  126. package/dist/schema/call/personal.d.ts +38 -0
  127. package/dist/schema/call/personal.js +1 -1
  128. package/dist/schema/call/progress.d.ts +1 -0
  129. package/dist/schema/call/proof.d.ts +2 -0
  130. package/dist/schema/call/repository.d.ts +5 -4
  131. package/dist/schema/call/reward.d.ts +1 -12
  132. package/dist/schema/call/reward.js +1 -1
  133. package/dist/schema/call/semantic.d.ts +3 -2
  134. package/dist/schema/call/semantic.js +1 -1
  135. package/dist/schema/call/service.d.ts +1 -0
  136. package/dist/schema/call/service.js +1 -1
  137. package/dist/schema/call/treasury.d.ts +1 -0
  138. package/dist/schema/common/index.js +1 -1
  139. package/dist/schema/evaluation/index.d.ts +146 -0
  140. package/dist/schema/evaluation/index.js +1 -1
  141. package/dist/schema/index.d.ts +1 -0
  142. package/dist/schema/index.js +1 -1
  143. package/dist/schema/intent-radar/index.d.ts +30 -3
  144. package/dist/schema/intent-radar/index.js +1 -1
  145. package/dist/schema/local/index.d.ts +9 -0
  146. package/dist/schema/local/index.js +1 -1
  147. package/dist/schema/messenger/index.d.ts +54 -0
  148. package/dist/schema/messenger/index.js +1 -1
  149. package/dist/schema/operations.d.ts +864 -8
  150. package/dist/schema/operations.js +1 -1
  151. package/dist/schema/permission/index.d.ts +17 -0
  152. package/dist/schema/permission/index.js +1 -1
  153. package/dist/schema/project/index.d.ts +6 -0
  154. package/dist/schema/project/index.js +1 -1
  155. package/dist/schema/query/index.d.ts +658 -56
  156. package/dist/schema/query/index.js +1 -1
  157. package/dist/schema/schema-version.js +1 -1
  158. package/dist/schema/trust/index.d.ts +17 -0
  159. package/dist/schema/trust/index.js +1 -1
  160. package/dist/schema/watch/index.d.ts +204 -0
  161. package/dist/schema/watch/index.js +1 -0
  162. package/dist/schema/workflow/index.d.ts +301 -0
  163. package/dist/schema/workflow/index.js +1 -1
  164. package/dist/schema-query-impl/index.js +1 -1
  165. package/dist/schemas/account_operation.output.json +5 -2
  166. package/dist/schemas/bridge_operation.output.json +5 -2
  167. package/dist/schemas/bridge_operation.schema.json +25 -9
  168. package/dist/schemas/evaluation_operation.output.json +276 -1
  169. package/dist/schemas/evaluation_operation.schema.json +307 -0
  170. package/dist/schemas/guard2file.schema.json +6 -2
  171. package/dist/schemas/index.json +13 -1
  172. package/dist/schemas/intent_radar.output.json +20 -2
  173. package/dist/schemas/intent_radar.schema.json +10 -1
  174. package/dist/schemas/local_info_operation.output.json +5 -2
  175. package/dist/schemas/local_mark_operation.output.json +5 -2
  176. package/dist/schemas/machineNode2file.schema.json +6 -2
  177. package/dist/schemas/messenger_operation.output.json +105 -2
  178. package/dist/schemas/messenger_operation.schema.json +98 -0
  179. package/dist/schemas/monitor_events.output.json +1360 -0
  180. package/dist/schemas/monitor_events.schema.json +62 -0
  181. package/dist/schemas/onchain_events.output.json +237 -14
  182. package/dist/schemas/onchain_events.schema.json +20 -0
  183. package/dist/schemas/onchain_operations.output.json +10 -5
  184. package/dist/schemas/onchain_operations.schema.json +511 -419
  185. package/dist/schemas/onchain_operations_allocation.schema.json +11 -7
  186. package/dist/schemas/onchain_operations_arbitration.schema.json +14 -9
  187. package/dist/schemas/onchain_operations_contact.schema.json +9 -5
  188. package/dist/schemas/onchain_operations_demand.schema.json +9 -5
  189. package/dist/schemas/onchain_operations_gen_passport.schema.json +6 -2
  190. package/dist/schemas/onchain_operations_gen_proof.schema.json +6 -2
  191. package/dist/schemas/onchain_operations_guard.schema.json +6 -2
  192. package/dist/schemas/onchain_operations_machine.schema.json +14 -10
  193. package/dist/schemas/onchain_operations_order.schema.json +9 -5
  194. package/dist/schemas/onchain_operations_payment.schema.json +7 -3
  195. package/dist/schemas/onchain_operations_permission.schema.json +9 -5
  196. package/dist/schemas/onchain_operations_personal.schema.json +44 -2
  197. package/dist/schemas/onchain_operations_progress.schema.json +9 -5
  198. package/dist/schemas/onchain_operations_proof.schema.json +6 -2
  199. package/dist/schemas/onchain_operations_repository.schema.json +290 -305
  200. package/dist/schemas/onchain_operations_reward.schema.json +14 -10
  201. package/dist/schemas/onchain_operations_service.schema.json +17 -13
  202. package/dist/schemas/onchain_operations_treasury.schema.json +14 -10
  203. package/dist/schemas/onchain_table_data.output.json +3750 -208
  204. package/dist/schemas/onchain_table_data.schema.json +311 -0
  205. package/dist/schemas/permission_operation.output.json +32 -0
  206. package/dist/schemas/project_operation.schema.json +14 -8
  207. package/dist/schemas/query_toolkit.output.json +405 -320
  208. package/dist/schemas/query_toolkit.schema.json +139 -1
  209. package/dist/schemas/trust_score.output.json +38 -0
  210. package/dist/schemas/trust_score.schema.json +32 -0
  211. package/dist/schemas/watch_operation.output.json +827 -0
  212. package/dist/schemas/watch_operation.schema.json +145 -0
  213. package/dist/schemas/workflow_operation.output.json +263 -5
  214. package/dist/schemas/workflow_operation.schema.json +597 -2
  215. package/dist/tools/handlers/config.js +1 -1
  216. package/dist/tools/handlers/evaluation.js +1 -1
  217. package/dist/tools/handlers/intent-radar.js +1 -1
  218. package/dist/tools/handlers/messenger.js +1 -1
  219. package/dist/tools/handlers/monitor.d.ts +2 -0
  220. package/dist/tools/handlers/monitor.js +1 -0
  221. package/dist/tools/handlers/onchain.js +1 -1
  222. package/dist/tools/handlers/permission.js +1 -1
  223. package/dist/tools/handlers/project.js +1 -1
  224. package/dist/tools/handlers/query.js +1 -1
  225. package/dist/tools/handlers/trust.d.ts +14 -0
  226. package/dist/tools/handlers/trust.js +1 -1
  227. package/dist/tools/handlers/watch.d.ts +2 -0
  228. package/dist/tools/handlers/watch.js +1 -0
  229. package/dist/tools/handlers/workflow.js +1 -1
  230. package/dist/tools/index.d.ts +2 -0
  231. package/dist/tools/index.js +1 -1
  232. package/dist/tools/shared.js +1 -1
  233. package/package.json +2 -2
  234. package/dist/customer/post-purchase.d.ts +0 -44
  235. package/dist/customer/post-purchase.js +0 -1
  236. package/dist/project/migration.d.ts +0 -22
  237. package/dist/project/migration.js +0 -1
  238. package/dist/project/rollback-policy.d.ts +0 -45
  239. package/dist/project/rollback-policy.js +0 -1
@@ -1 +1 @@
1
- import{query_objects}from'@wowok/wowok';const OBJECT_FIELDS=['service','demand','order','progress','arb','arbitration','machine','allocation'],TEXT_FIELDS=['recommend','feedback','node','description'],MAX_OBJECTS_PER_QUERY=0x32;function hasText(a){return TEXT_FIELDS['some'](b=>{const c=a[b];return typeof c==='string'&&c['length']>0x0;});}export async function enrichEventsWithObjectText(a,b){const c=new Set();for(const f of a){if(hasText(f))continue;for(const g of OBJECT_FIELDS){const h=f[g];if(typeof h==='string'&&h['startsWith']('0x'))c['add'](h);}}if(c['size']===0x0)return a;const d=new Map(),e=Array['from'](c);for(let j=0x0;j<e['length'];j+=MAX_OBJECTS_PER_QUERY){const l=e['slice'](j,j+MAX_OBJECTS_PER_QUERY);try{const m=await query_objects({'objects':l,'no_cache':![],'network':b}),n=m?.['objects']??[];for(const o of n){const p=o?.['object'],q=o?.['description'];typeof p==='string'&&typeof q==='string'&&q&&d['set'](p,q);}}catch{}}if(d['size']===0x0)return a;return a['map'](r=>{if(hasText(r))return r;for(const s of OBJECT_FIELDS){const t=r[s];if(typeof t==='string'){const u=d['get'](t);if(u)return{...r,'_enriched_description':u,'description':u};}}return r;});}
1
+ import{query_objects}from'@wowok/wowok';const OBJECT_FIELDS=['object','service','demand','order','progress','arb','arbitration','machine','allocation','payment','task'],TEXT_FIELDS=['recommend','feedback','node','description','location'],MAX_OBJECTS_PER_QUERY=0x32;function hasText(a){return TEXT_FIELDS['some'](b=>{const c=a[b];return typeof c==='string'&&c['length']>0x0;});}export async function enrichEventsWithObjectText(a,b){const c=new Set();for(const f of a){if(hasText(f))continue;for(const g of OBJECT_FIELDS){const h=f[g];if(typeof h==='string'&&h['startsWith']('0x'))c['add'](h);}}if(c['size']===0x0)return a;const d=new Map(),e=Array['from'](c);for(let j=0x0;j<e['length'];j+=MAX_OBJECTS_PER_QUERY){const l=e['slice'](j,j+MAX_OBJECTS_PER_QUERY);try{const m=await query_objects({'objects':l,'no_cache':![],'network':b}),n=m?.['objects']??[];for(const o of n){const p=o?.['object'],q=o?.['description'];typeof p==='string'&&typeof q==='string'&&q&&d['set'](p,q);}}catch{}}if(d['size']===0x0)return a;return a['map'](r=>{if(hasText(r))return r;for(const s of OBJECT_FIELDS){const t=r[s];if(typeof t==='string'){const u=d['get'](t);if(u)return{...r,'_enriched_description':u,'description':u};}}return r;});}
@@ -1 +1 @@
1
- import{findSimilarIndustries,inferTraitsFromDescription}from'../knowledge/industry-generalizer.js';const TEXT_FIELDS=['recommend','feedback','node','description'],OBJECT_FIELDS=['order','service','demand','progress','arb','arbitration','allocation','discount','machine','task','address','resource'];function eventText(a){return TEXT_FIELDS['map'](b=>a[b])['filter'](b=>typeof b==='string'&&b['length']>0x0)['join']('\x20');}function eventSignals(a){const b=eventText(a);if(!b)return{'industries':[],'keywords':[]};const {traits:c,matched_keywords:d}=inferTraitsFromDescription(b);if(d['length']===0x0)return{'industries':[],'keywords':[]};const e=findSimilarIndustries(c,0x3);return{'industries':e['slice'](0x0,0x3)['map'](f=>f['industry']),'keywords':d};}function eventId(a){const b=a['id'];if(b?.['txDigest'])return(b['eventSeq']??'')+':'+b['txDigest'];return String(a['id']??'');}function relatedObjects(a){const b=new Set();for(const c of OBJECT_FIELDS){const d=a[c];if(typeof d==='string'&&d['startsWith']('0x'))b['add'](d);}return Array['from'](b);}function eventType(a){return String(a['type']??a['type_raw']??'');}function scoreEvent(a,b){const c=eventSignals(a),d=b['industries']['filter'](g=>g!=='general'&&c['industries']['includes'](g)),e=b['keywords']['filter'](g=>c['keywords']['includes'](g)),f=Math['min'](0x64,d['length']*0x28+e['length']*0x14);if(f===0x0)return null;return{'event_type':eventType(a),'event_id':eventId(a),'related_objects':relatedObjects(a),'business_meaning':eventType(a),'score':f,'matched_industries':d,'matched_keywords':e,'event':a};}export function matchEventsToIntents(a,b){return b['map'](c=>{const d=[];for(const e of a){const f=eventType(e);if(c['target_types']['length']>0x0&&!c['target_types']['includes'](f))continue;const g=scoreEvent(e,c);if(g)d['push'](g);}return d['sort']((h,i)=>i['score']-h['score']),{'intent_id':c['id'],'intent':c['intent'],'hits':d,'scanned':a['length']};});}
1
+ import{findSimilarIndustries,inferTraitsFromDescription}from'../knowledge/industry-generalizer.js';import{lookupEventMeaning}from'../knowledge/event-semantics.js';const TEXT_FIELDS=['recommend','feedback','node','description','location'],NESTED_TEXT_FIELDS=[['info.remark',a=>a['info']?.['remark']]],OBJECT_FIELDS=['object','order','service','demand','progress','arb','arbitration','allocation','discount','machine','task','address','resource','payment','from_payment','from_object'];function eventText(a){const b=TEXT_FIELDS['map'](d=>a[d])['filter'](d=>typeof d==='string'&&d['length']>0x0),c=NESTED_TEXT_FIELDS['map'](([,d])=>d(a))['filter'](d=>typeof d==='string'&&d['length']>0x0);return[...b,...c]['join']('\x20');}function eventSignals(a){const b=eventText(a);if(!b)return{'industries':[],'keywords':[]};const {traits:c,matched_keywords:d}=inferTraitsFromDescription(b);if(d['length']===0x0)return{'industries':[],'keywords':[]};const e=findSimilarIndustries(c,0x3);return{'industries':e['slice'](0x0,0x3)['map'](f=>f['industry']),'keywords':d};}function eventId(a){const b=a['id'];if(b?.['txDigest'])return(b['eventSeq']??'')+':'+b['txDigest'];return String(a['id']??'');}function relatedObjects(a){const b=new Set();for(const c of OBJECT_FIELDS){const d=a[c];if(typeof d==='string'&&d['startsWith']('0x'))b['add'](d);}return Array['from'](b);}function eventType(a){return String(a['type']??a['type_raw']??'');}function scoreEvent(a,b){const c=eventSignals(a),d=b['industries']['filter'](g=>g!=='general'&&c['industries']['includes'](g)),e=b['keywords']['filter'](g=>c['keywords']['includes'](g)),f=Math['min'](0x64,d['length']*0x28+e['length']*0x14);if(f===0x0)return null;return{'event_type':eventType(a),'event_id':eventId(a),'related_objects':relatedObjects(a),'business_meaning':lookupEventMeaning(a)??eventType(a),'score':f,'matched_industries':d,'matched_keywords':e,'event':a};}export function matchEventsToIntents(a,b){return b['map'](c=>{const d=[];for(const e of a){const f=eventType(e);if(c['target_types']['length']>0x0&&!c['target_types']['includes'](f))continue;const g=scoreEvent(e,c);if(g)d['push'](g);}return d['sort']((h,i)=>i['score']-h['score']),{'intent_id':c['id'],'intent':c['intent'],'hits':d,'scanned':a['length']};});}
@@ -1,6 +1,6 @@
1
1
  import type { IndustryScenario } from "../evaluation/capability.js";
2
2
  import type { PersonaRole } from "../persona/types.js";
3
- export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "NewEntityEvent" | "ArbEvent";
3
+ export type IntentTargetType = "NewOrderEvent" | "ProgressEvent" | "DemandPresentEvent" | "DemandFeedbackEvent" | "DemandChangedEvent" | "ServiceEvent" | "NewEntityEvent" | "ArbEvent" | "VoteEvent" | "FeedbackEvent" | "AllocationEvent" | "TreasuryEvent" | "RewardClaimEvent" | "RewardFundEvent" | "NewPaymentEvent";
4
4
  export interface IntentRecord {
5
5
  id: string;
6
6
  intent: string;
@@ -1 +1 @@
1
- export const INTENT_VERSION=0x1;export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','DemandPresentEvent','DemandFeedbackEvent','NewEntityEvent','ArbEvent'];
1
+ export const INTENT_VERSION=0x1;export const INTENT_MAX_PER_SCOPE=0x32;export const ALL_INTENT_TARGET_TYPES=['NewOrderEvent','ProgressEvent','DemandPresentEvent','DemandFeedbackEvent','DemandChangedEvent','ServiceEvent','NewEntityEvent','ArbEvent','VoteEvent','FeedbackEvent','AllocationEvent','TreasuryEvent','RewardClaimEvent','RewardFundEvent','NewPaymentEvent'];
@@ -1 +1 @@
1
- export const ARB_STATUS_CODE={'Principal_confirming':0x0,'Arbitrator_confirming':0x1,'Voting':0x2,'Arbitrated':0x3,'Objectionable':0x4,'Finished':0x5,'Withdrawn':0x6};export const ARB_TERMINAL_STATUSES=['Finished','Withdrawn'];export const ARB_STATUS_ALIASES={'created':'Principal_confirming','voting':'Voting','feedback':'Arbitrator_confirming','confirmed':'Arbitrated','completed':'Finished','reset':'Objectionable','disputed':'Withdrawn'};export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration\x20object','governed_operations':['arbitration::new','arbitration::new_with_passport']},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20Arbitration\x20description','governed_operations':['arbitration::description_set','arbitration::description_set_with_passport']},{'index':0x160,'name':'ARBITRATION_ENDPOINT','description':'Reserved\x20placeholder\x20—\x20not\x20used\x20on-chain\x20(SDK\x20commented\x20out)','governed_operations':[],'is_reserved':!![]},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20Arbitration\x20location','governed_operations':['arbitration::location_set','arbitration::location_set_with_passport']},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Manage\x20voting_guard\x20list\x20(add\x20/\x20remove\x20/\x20clear)\x20—\x20controls\x20vote\x20weight','governed_operations':['arbitration::voting_guard_by_id_add','arbitration::voting_guard_fixed_add','arbitration::voting_guard_remove','arbitration::voting_guard_clear','(+\x20_with_passport\x20variants)']},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20/\x20clear\x20usage_guard\x20—\x20controls\x20who\x20can\x20file\x20disputes','governed_operations':['arbitration::usage_guard_set','arbitration::usage_guard_none','(+\x20_with_passport\x20variants)']},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause\x20/\x20resume\x20Arbitration\x20(bPaused\x20default\x20true)','governed_operations':['arbitration::pause','arbitration::pause_with_passport']},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20dispute\x20application\x20fee\x20(u64)','governed_operations':['arbitration::fee_set','arbitration::fee_set_with_passport']},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Open\x20vote\x20(no\x20voting_guard\x20configured\x20—\x201\x20person\x201\x20vote)','governed_operations':['arbitration::vote','arbitration::vote_with_passport']},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Make\x20definitive\x20arbitration\x20ruling\x20(with\x20indemnity)','governed_operations':['arbitration::arbitration','arbitration::arbitration_with_passport']},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback\x20on\x20Arb\x20case','governed_operations':['arbitration::feedback','arbitration::feedback_with_passport']},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20materials\x20submitted\x20by\x20principal\x20(starts\x20voting\x20phase)','governed_operations':['arbitration::confirm','arbitration::confirm_with_passport']},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline\x20for\x20an\x20Arb\x20case','governed_operations':['arbitration::voting_deadline_change','arbitration::voting_deadline_change_with_passport']},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration\x20—\x20principal\x20resubmits\x20materials,\x20restart\x20lifecycle','governed_operations':['arbitration::reset','arbitration::reset_with_passport']},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Withdraw\x20arbitration\x20fees\x20from\x20Arb\x20into\x20Arbitration.balance','governed_operations':['arbitration::arb_withdraw','arbitration::arb_withdraw_with_passport']},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20arbitration\x20fees\x20to\x20Allocation\x20object','governed_operations':['arbitration::fees_alloc','arbitration::fees_alloc_with_passport']},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20arbitration\x20fees\x20to\x20Treasury\x20object','governed_operations':['arbitration::fees_transfer','arbitration::fees_transfer_with_passport']},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive\x20(unwrap\x20received\x20Coin/Object\x20and\x20send\x20to\x20Permission\x20owner)','governed_operations':['arbitration::owner_receive','arbitration::owner_receive_object']},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20/\x20clear\x20User\x20Manager\x20(Contact\x20object)','governed_operations':['arbitration::um_set','arbitration::um_none','(+\x20_with_passport\x20variants)']}];export const DUAL_GUARD_MATRIX=[{'voting_guard_empty':!![],'usage_guard_none':!![],'dispute_method':'dispute','vote_method':'vote','scenario':'Open\x20dispute\x20+\x20open\x20voting\x20(1\x20person\x201\x20vote)'},{'voting_guard_empty':!![],'usage_guard_none':![],'dispute_method':'dispute_with_passport','vote_method':'vote','scenario':'Restricted\x20dispute\x20+\x20open\x20voting'},{'voting_guard_empty':![],'usage_guard_none':!![],'dispute_method':'dispute','vote_method':'vote_with_voting_guard','scenario':'Open\x20dispute\x20+\x20weighted\x20voting'},{'voting_guard_empty':![],'usage_guard_none':![],'dispute_method':'dispute_with_passport','vote_method':'vote_with_voting_guard','scenario':'Restricted\x20dispute\x20+\x20weighted\x20voting\x20(most\x20controlled)'}];export const ARBITRATION_SCENES=[{'id':'arbitration_create','name':'Create\x20new\x20Arbitration\x20service','operation_category':'lifecycle','permission_index':0x15e,'permission_name':'ARBITRATION_NEW','requires_voting_guard':'any','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::new','arbitration::new_with_passport'],'common_patterns':['Pre-publish\x20config:\x20create\x20Arbitration\x20+\x20Permission\x20together','bPaused\x20defaults\x20to\x20true\x20—\x20must\x20call\x20pause(false)\x20to\x20enable','Generic\x20T:\x20choose\x20Coin\x20type\x20(e.g.\x200x2::wow::WOW)\x20at\x20creation','object-linker\x20binding\x20(core):\x20permission\x20+\x20arbitration\x20linked\x20via\x20object_linker::affiliation_core'],'recommended_templates':['T-AB-01','T-AB-02']},{'id':'arbitration_dispute','name':'File\x20dispute\x20against\x20an\x20Order\x20(creates\x20Arb\x20case)','operation_category':'dispute','permission_index':0x0,'permission_name':'(order\x20op\x20permission\x20—\x20no\x20ARBITRATION_*\x20index)','required_arb_status':[],'resulting_arb_status':'Principal_confirming','requires_voting_guard':'any','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::dispute','arbitration::dispute_with_passport'],'common_patterns':['Fee\x20gate:\x20coin::value(&fee)\x20>=\x20self.fee,\x20else\x20E_FEE_NOT_ENOUGH','Order\x20op\x20permission:\x20order::assert_op_permission(order,\x20ctx)\x20required','Creates\x20independent\x20Arb<T>\x20object\x20with\x20its\x20own\x20lifecycle','If\x20usage_guard\x20is\x20Some\x20→\x20must\x20use\x20dispute_with_passport','Order.dispute\x20list:\x20appends\x20new\x20Arb\x20(max\x2010\x20per\x20Order)'],'recommended_templates':['T-AB-01','T-AB-03','T-AB-04']},{'id':'arbitration_vote','name':'Vote\x20on\x20Arb\x20propositions','operation_category':'voting','permission_index':0x166,'permission_name':'ARBITRATION_VOTE','required_arb_status':['Voting'],'requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::vote','arbitration::vote_with_passport','arbitration::vote_with_voting_guard'],'common_patterns':['Open\x20vote:\x20voting_guard\x20empty\x20→\x20vote()\x20/\x20vote_with_passport()','Weighted\x20vote:\x20voting_guard\x20non-empty\x20→\x20vote_with_voting_guard()','votes:\x20u8\x20array\x20—\x20index\x20into\x20proposition\x20list\x20(0..N-1)','Mismatch:\x20vote()\x20with\x20non-empty\x20voting_guard\x20→\x20E_VOTING_GUARD_USED','Guard\x20not\x20in\x20list:\x20E_VOTING_GUARD_NOT_FOUND'],'recommended_templates':['T-AB-02','T-AB-03']},{'id':'arbitration_confirm','name':'Confirm\x20principal\x20materials\x20and\x20start\x20voting\x20phase','operation_category':'ruling','permission_index':0x169,'permission_name':'ARBITRATION_CONFIRM','required_arb_status':['Principal_confirming','Arbitrator_confirming'],'resulting_arb_status':'Voting','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::confirm','arbitration::confirm_with_passport'],'common_patterns':['Transitions\x20Arb\x20from\x20Principal_confirming\x20→\x20Voting','voting_deadline:\x20u64\x20timestamp_ms\x20(null\x20=\x20no\x20deadline)','Once\x20in\x20Voting,\x20only\x20vote\x20/\x20voting_deadline_change\x20/\x20reset\x20allowed'],'recommended_templates':['T-AB-01','T-AB-02']},{'id':'arbitration_feedback','name':'Provide\x20feedback\x20on\x20Arb\x20case','operation_category':'ruling','permission_index':0x168,'permission_name':'ARBITRATION_FEEDBACK','required_arb_status':['Principal_confirming','Arbitrator_confirming','Voting','Arbitrated','Objectionable'],'requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::feedback','arbitration::feedback_with_passport'],'common_patterns':['Feedback\x20is\x20informational\x20—\x20does\x20not\x20change\x20Arb\x20status','Used\x20by\x20principal\x20/\x20arbitrator\x20/\x20voters\x20to\x20attach\x20notes','No\x20state\x20transition;\x20supplements\x20the\x20case\x20record'],'recommended_templates':['T-AB-01','T-AB-07']},{'id':'arbitration_ruling','name':'Make\x20definitive\x20arbitration\x20ruling\x20with\x20indemnity','operation_category':'ruling','permission_index':0x167,'permission_name':'ARBITRATION_ARBITRATION','required_arb_status':['Voting','Arbitrated','Objectionable'],'resulting_arb_status':'Arbitrated','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::arbitration','arbitration::arbitration_with_passport'],'common_patterns':['Ruling\x20produces:\x20feedback\x20(string)\x20+\x20indemnity\x20(u64)','indemnity\x20is\x20compensation\x20amount\x20—\x20paid\x20via\x20order::compensate','compensate\x20is\x20public(package)\x20—\x20only\x20order.move\x20can\x20trigger\x20it','Once\x20Arbitrated,\x20case\x20enters\x20Objectionable\x20window\x20(reset\x20possible)'],'recommended_templates':['T-AB-01','T-AB-05']},{'id':'arbitration_reset','name':'Reset\x20arbitration\x20—\x20principal\x20resubmits\x20materials','operation_category':'ruling','permission_index':0x16b,'permission_name':'ARBITRATION_RESET','required_arb_status':['Objectionable','Arbitrated'],'resulting_arb_status':'Principal_confirming','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::reset','arbitration::reset_with_passport'],'common_patterns':['Resets\x20Arb\x20from\x20Objectionable/Arbitrated\x20→\x20Principal_confirming','Used\x20when\x20principal\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials','Feedback\x20required\x20(string\x20explaining\x20reset\x20reason)','Restart\x20full\x20lifecycle:\x20Principal_confirming\x20→\x20...\x20→\x20Finished'],'recommended_templates':['T-AB-07']},{'id':'arbitration_arb_withdraw','name':'Withdraw\x20arbitration\x20fees\x20from\x20Arb\x20into\x20Arbitration.balance','operation_category':'fund','permission_index':0x16c,'permission_name':'ARBITRATION_ARB_WITHDRAW','required_arb_status':['Finished','Withdrawn'],'requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::arb_withdraw','arbitration::arb_withdraw_with_passport'],'common_patterns':['Calls\x20arb::withdraw(arb,\x20clock)\x20—\x20moves\x20fees\x20from\x20Arb\x20to\x20Arbitration','Only\x20allowed\x20after\x20Arb\x20reaches\x20terminal\x20state\x20(Finished/Withdrawn)','Increases\x20Arbitration.balance\x20—\x20funds\x20available\x20for\x20fees_alloc/fees_transfer'],'recommended_templates':['T-AB-06']},{'id':'arbitration_fees_alloc','name':'Allocate\x20arbitration\x20fees\x20to\x20Allocation\x20object','operation_category':'fund','permission_index':0x16d,'permission_name':'ARBITRATION_FEES_ALLOC','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::fees_alloc','arbitration::fees_alloc_with_passport'],'common_patterns':['Destination:\x20Allocation\x20object\x20(parameterized\x20fund\x20distribution)','payment_remark\x20+\x20payment_index:\x20bookkeeping\x20for\x20Payment\x20object','May\x20create\x20new\x20Payment\x20object\x20if\x20newPayment\x20name\x20provided','Triggers\x20balance::withdraw_all\x20—\x20extracts\x20ALL\x20balance'],'recommended_templates':['T-AB-06']},{'id':'arbitration_fees_transfer','name':'Transfer\x20arbitration\x20fees\x20to\x20Treasury\x20object','operation_category':'fund','permission_index':0x16e,'permission_name':'ARBITRATION_FEES_TRANSFER','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::fees_transfer','arbitration::fees_transfer_with_passport'],'common_patterns':['Destination:\x20Treasury\x20object\x20(general\x20fund\x20pool)','Same\x20bookkeeping\x20as\x20fees_alloc\x20(remark\x20+\x20index\x20+\x20newPayment)','Triggers\x20balance::withdraw_all\x20—\x20extracts\x20ALL\x20balance','Choose\x20Allocation\x20vs\x20Treasury\x20by\x20distribution\x20need'],'recommended_templates':['T-AB-06']},{'id':'arbitration_voting_guard_config','name':'Configure\x20voting_guard\x20list\x20(add\x20/\x20set\x20/\x20remove\x20/\x20clear)','operation_category':'guard','permission_index':0x162,'permission_name':'ARBITRATION_VOTING_GUARD','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::voting_guard_by_id_add\x20(+\x20_with_passport)','arbitration::voting_guard_fixed_add\x20(+\x20_with_passport)','arbitration::voting_guard_remove\x20(+\x20_with_passport)','arbitration::voting_guard_clear\x20(+\x20_with_passport)'],'common_patterns':['Max\x2050\x20guards:\x20MAX_VOTING_GUARD_COUNT=50\x20(off-by-one-safe:\x20len<50\x20allows\x20add)','GuardIdentifier(u8):\x20dynamic\x20weight\x20from\x20Passport\x20submission\x20value','FixedValue(u32):\x20static\x20weight\x20(e.g.\x20100\x20votes\x20per\x20holder)','Add\x20same\x20guard\x20twice\x20→\x20updates\x20vote_weight\x20(no\x20duplicate)','op=\x27set\x27\x20=\x20clear\x20then\x20add;\x20op=\x27add\x27\x20=\x20append;\x20op=\x27remove\x27\x20=\x20by\x20address'],'recommended_templates':['T-AB-02','T-AB-03']},{'id':'arbitration_usage_guard_config','name':'Configure\x20usage_guard\x20(set\x20/\x20clear)','operation_category':'guard','permission_index':0x163,'permission_name':'ARBITRATION_USAGE_GUARD','requires_voting_guard':'not_applicable','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::usage_guard_set\x20(+\x20_with_passport)','arbitration::usage_guard_none\x20(+\x20_with_passport)'],'common_patterns':['Single\x20guard\x20(Option<address>)\x20—\x20not\x20a\x20list','Some(guard):\x20dispute\x20must\x20use\x20_with_passport\x20variant','None:\x20dispute\x20can\x20use\x20either\x20variant\x20(no\x20passport\x20needed)','object_linker::affiliation_change_core:\x20updates\x20link\x20when\x20guard\x20changes'],'recommended_templates':['T-AB-04']},{'id':'arbitration_pause','name':'Pause\x20/\x20resume\x20Arbitration\x20service','operation_category':'lifecycle','permission_index':0x164,'permission_name':'ARBITRATION_PAUSE','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::pause','arbitration::pause_with_passport'],'common_patterns':['bPaused\x20default\x20true\x20—\x20new\x20Arbitration\x20cannot\x20accept\x20disputes','pause(false)\x20to\x20enable,\x20pause(true)\x20to\x20disable','Paused\x20Arbitration\x20rejects\x20dispute\x20(E_PAUSED)','Does\x20not\x20affect\x20already-open\x20Arb\x20cases'],'recommended_templates':['T-AB-01']}];export const ARBITRATION_LEDGER_VERSION='1.0.0';export function getScenesByCategory(a){return ARBITRATION_SCENES['filter'](b=>b['operation_category']===a);}export function findSceneById(a){return ARBITRATION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){return ARBITRATION_SCENES['find'](b=>b['permission_index']===a);}export function getPermissionByIndex(a){return ARBITRATION_PERMISSIONS['find'](b=>b['index']===a);}export function getPermissionByName(a){return ARBITRATION_PERMISSIONS['find'](b=>b['name']===a);}export function isReservedIndex(a){const b=getPermissionByIndex(a);return!!b?.['is_reserved'];}export function isUsedPermissionIndex(a){const b=getPermissionByIndex(a);return!!b&&!b['is_reserved'];}export function getActivePermissionCount(){return ARBITRATION_PERMISSIONS['filter'](a=>!a['is_reserved'])['length'];}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[{'keywords':['create','new'],'sceneId':'arbitration_create'},{'keywords':['dispute','file','complaint'],'sceneId':'arbitration_dispute'},{'keywords':['vote','voting','decide'],'sceneId':'arbitration_vote'},{'keywords':['confirm','materials'],'sceneId':'arbitration_confirm'},{'keywords':['feedback','opinion'],'sceneId':'arbitration_feedback'},{'keywords':['ruling','arbitration','verdict'],'sceneId':'arbitration_ruling'},{'keywords':['reset','resubmit'],'sceneId':'arbitration_reset'},{'keywords':['arb_withdraw','withdraw','withdraw\x20fees'],'sceneId':'arbitration_arb_withdraw'},{'keywords':['fees_alloc','allocate','allocate\x20fees'],'sceneId':'arbitration_fees_alloc'},{'keywords':['fees_transfer','transfer','transfer\x20in'],'sceneId':'arbitration_fees_transfer'},{'keywords':['voting_guard','voting\x20guard'],'sceneId':'arbitration_voting_guard_config'},{'keywords':['usage_guard','usage\x20guard'],'sceneId':'arbitration_usage_guard_config'},{'keywords':['pause','enable'],'sceneId':'arbitration_pause'}];for(const {keywords:d,sceneId:e}of c){if(d['some'](f=>b['includes'](f['toLowerCase']()))){const f=findSceneById(e);if(f)return f;}}return undefined;}export function getDualGuardMatrixEntry(a,b){return DUAL_GUARD_MATRIX['find'](c=>c['voting_guard_empty']===a&&c['usage_guard_none']===b);}export function isValidArbStatusTransition(a,b){const c={'Principal_confirming':['Arbitrator_confirming','Voting'],'Arbitrator_confirming':['Voting','Principal_confirming'],'Voting':['Arbitrated'],'Arbitrated':['Objectionable','Finished'],'Objectionable':['Principal_confirming','Finished'],'Finished':['Withdrawn'],'Withdrawn':[]};return c[a]?.['includes'](b)??![];}export function isTerminalArbStatus(a){return ARB_TERMINAL_STATUSES['includes'](a);}export function getScenesProducingStatus(a){return ARBITRATION_SCENES['filter'](b=>b['resulting_arb_status']===a);}export function getScenesRequiringStatus(a){return ARBITRATION_SCENES['filter'](b=>b['required_arb_status']?.['includes'](a));}export function getArbitrationScenesCount(){return ARBITRATION_SCENES['length'];}export function getAllArbitrationPermissions(){return[...ARBITRATION_PERMISSIONS];}export function getActiveArbitrationPermissions(){return ARBITRATION_PERMISSIONS['filter'](a=>!a['is_reserved']);}
1
+ export const ARB_STATUS_CODE={'Principal_confirming':0x0,'Arbitrator_confirming':0x1,'Voting':0x2,'Arbitrated':0x3,'Objectionable':0x4,'Finished':0x5,'Withdrawn':0x6};export const ARB_TERMINAL_STATUSES=['Finished','Withdrawn'];export const ARB_STATUS_ALIASES={'created':'Principal_confirming','voting':'Voting','feedback':'Arbitrator_confirming','confirmed':'Arbitrated','completed':'Finished','reset':'Objectionable','disputed':'Withdrawn'};export const ARBITRATION_PERMISSIONS=[{'index':0x15e,'name':'ARBITRATION_NEW','description':'Create\x20new\x20Arbitration\x20object','governed_operations':['arbitration::new','arbitration::new_with_passport']},{'index':0x15f,'name':'ARBITRATION_DESCRIPTION','description':'Modify\x20Arbitration\x20description','governed_operations':['arbitration::description_set','arbitration::description_set_with_passport']},{'index':0x160,'name':'ARBITRATION_ENDPOINT','description':'Reserved\x20placeholder\x20—\x20not\x20used\x20on-chain\x20(SDK\x20commented\x20out)','governed_operations':[],'is_reserved':!![]},{'index':0x161,'name':'ARBITRATION_LOCATION','description':'Set\x20Arbitration\x20location','governed_operations':['arbitration::location_set','arbitration::location_set_with_passport']},{'index':0x162,'name':'ARBITRATION_VOTING_GUARD','description':'Manage\x20voting_guard\x20list\x20(add\x20/\x20remove\x20/\x20clear)\x20—\x20controls\x20vote\x20weight','governed_operations':['arbitration::voting_guard_by_id_add','arbitration::voting_guard_fixed_add','arbitration::voting_guard_remove','arbitration::voting_guard_clear','(+\x20_with_passport\x20variants)']},{'index':0x163,'name':'ARBITRATION_USAGE_GUARD','description':'Set\x20/\x20clear\x20usage_guard\x20—\x20controls\x20who\x20can\x20file\x20disputes','governed_operations':['arbitration::usage_guard_set','arbitration::usage_guard_none','(+\x20_with_passport\x20variants)']},{'index':0x164,'name':'ARBITRATION_PAUSE','description':'Pause\x20/\x20resume\x20Arbitration\x20(bPaused\x20default\x20true)','governed_operations':['arbitration::pause','arbitration::pause_with_passport']},{'index':0x165,'name':'ARBITRATION_FEE','description':'Set\x20dispute\x20application\x20fee\x20(u64)','governed_operations':['arbitration::fee_set','arbitration::fee_set_with_passport']},{'index':0x166,'name':'ARBITRATION_VOTE','description':'Open\x20vote\x20(no\x20voting_guard\x20configured\x20—\x201\x20person\x201\x20vote)','governed_operations':['arbitration::vote','arbitration::vote_with_passport']},{'index':0x167,'name':'ARBITRATION_ARBITRATION','description':'Make\x20definitive\x20arbitration\x20ruling\x20(with\x20indemnity)','governed_operations':['arbitration::arbitration','arbitration::arbitration_with_passport']},{'index':0x168,'name':'ARBITRATION_FEEDBACK','description':'Provide\x20feedback\x20on\x20Arb\x20case','governed_operations':['arbitration::feedback','arbitration::feedback_with_passport']},{'index':0x169,'name':'ARBITRATION_CONFIRM','description':'Confirm\x20materials\x20submitted\x20by\x20principal\x20(starts\x20voting\x20phase)','governed_operations':['arbitration::confirm','arbitration::confirm_with_passport']},{'index':0x16a,'name':'ARBITRATION_VOTING_DEADLINE_CHANGE','description':'Change\x20voting\x20deadline\x20for\x20an\x20Arb\x20case','governed_operations':['arbitration::voting_deadline_change','arbitration::voting_deadline_change_with_passport']},{'index':0x16b,'name':'ARBITRATION_RESET','description':'Reset\x20arbitration\x20—\x20principal\x20resubmits\x20materials,\x20restart\x20lifecycle','governed_operations':['arbitration::reset','arbitration::reset_with_passport']},{'index':0x16c,'name':'ARBITRATION_ARB_WITHDRAW','description':'Withdraw\x20arbitration\x20fees\x20from\x20Arb\x20into\x20Arbitration.balance','governed_operations':['arbitration::arb_withdraw','arbitration::arb_withdraw_with_passport']},{'index':0x16d,'name':'ARBITRATION_FEES_ALLOC','description':'Allocate\x20arbitration\x20fees\x20to\x20Allocation\x20object','governed_operations':['arbitration::fees_alloc','arbitration::fees_alloc_with_passport']},{'index':0x16e,'name':'ARBITRATION_FEES_TRANSFER','description':'Transfer\x20arbitration\x20fees\x20to\x20Treasury\x20object','governed_operations':['arbitration::fees_transfer','arbitration::fees_transfer_with_passport']},{'index':0x16f,'name':'ARBITRATION_OWNER_RECEIVE','description':'Owner\x20receive\x20(unwrap\x20received\x20Coin/Object\x20and\x20send\x20to\x20Permission\x20owner)','governed_operations':['arbitration::owner_receive','arbitration::owner_receive_object']},{'index':0x170,'name':'ARBITRATION_UM','description':'Set\x20/\x20clear\x20User\x20Manager\x20(Contact\x20object)','governed_operations':['arbitration::um_set','arbitration::um_none','(+\x20_with_passport\x20variants)']}];export const DUAL_GUARD_MATRIX=[{'voting_guard_empty':!![],'usage_guard_none':!![],'dispute_method':'dispute','vote_method':'vote','scenario':'Open\x20dispute\x20+\x20open\x20voting\x20(1\x20person\x201\x20vote)'},{'voting_guard_empty':!![],'usage_guard_none':![],'dispute_method':'dispute_with_passport','vote_method':'vote','scenario':'Restricted\x20dispute\x20+\x20open\x20voting'},{'voting_guard_empty':![],'usage_guard_none':!![],'dispute_method':'dispute','vote_method':'vote_with_voting_guard','scenario':'Open\x20dispute\x20+\x20weighted\x20voting'},{'voting_guard_empty':![],'usage_guard_none':![],'dispute_method':'dispute_with_passport','vote_method':'vote_with_voting_guard','scenario':'Restricted\x20dispute\x20+\x20weighted\x20voting\x20(most\x20controlled)'}];export const ARBITRATION_SCENES=[{'id':'arbitration_create','name':'Create\x20new\x20Arbitration\x20service','operation_category':'lifecycle','permission_index':0x15e,'permission_name':'ARBITRATION_NEW','requires_voting_guard':'any','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::new','arbitration::new_with_passport'],'common_patterns':['Pre-publish\x20config:\x20create\x20Arbitration\x20+\x20Permission\x20together','bPaused\x20defaults\x20to\x20true\x20—\x20must\x20call\x20pause(false)\x20to\x20enable','Generic\x20T:\x20choose\x20Coin\x20type\x20(e.g.\x200x2::wow::WOW)\x20at\x20creation','object-linker\x20binding\x20(core):\x20permission\x20+\x20arbitration\x20linked\x20via\x20object_linker::affiliation_core'],'recommended_templates':['T-AB-01','T-AB-02']},{'id':'arbitration_dispute','name':'File\x20dispute\x20against\x20an\x20Order\x20(creates\x20Arb\x20case)','operation_category':'dispute','permission_index':0x0,'permission_name':'(order\x20op\x20permission\x20—\x20no\x20ARBITRATION_*\x20index)','required_arb_status':[],'resulting_arb_status':'Arbitrator_confirming','requires_voting_guard':'any','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::dispute','arbitration::dispute_with_passport'],'common_patterns':['Fee\x20gate:\x20coin::value(&fee)\x20>=\x20self.fee,\x20else\x20E_FEE_NOT_ENOUGH','Order\x20op\x20permission:\x20order::assert_op_permission(order,\x20ctx)\x20required','Creates\x20independent\x20Arb<T>\x20object\x20with\x20its\x20own\x20lifecycle','If\x20usage_guard\x20is\x20Some\x20→\x20must\x20use\x20dispute_with_passport','Order.dispute\x20list:\x20appends\x20new\x20Arb\x20(max\x2010\x20per\x20Order)'],'recommended_templates':['T-AB-01','T-AB-03','T-AB-04']},{'id':'arbitration_vote','name':'Vote\x20on\x20Arb\x20propositions','operation_category':'voting','permission_index':0x166,'permission_name':'ARBITRATION_VOTE','required_arb_status':['Voting'],'requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::vote','arbitration::vote_with_passport','arbitration::vote_with_voting_guard'],'common_patterns':['Open\x20vote:\x20voting_guard\x20empty\x20→\x20vote()\x20/\x20vote_with_passport()','Weighted\x20vote:\x20voting_guard\x20non-empty\x20→\x20vote_with_voting_guard()','votes:\x20u8\x20array\x20—\x20index\x20into\x20proposition\x20list\x20(0..N-1)','Mismatch:\x20vote()\x20with\x20non-empty\x20voting_guard\x20→\x20E_VOTING_GUARD_USED','Guard\x20not\x20in\x20list:\x20E_VOTING_GUARD_NOT_FOUND'],'recommended_templates':['T-AB-02','T-AB-03']},{'id':'arbitration_confirm','name':'Confirm\x20principal\x20materials\x20and\x20start\x20voting\x20phase','operation_category':'ruling','permission_index':0x169,'permission_name':'ARBITRATION_CONFIRM','required_arb_status':['Arbitrator_confirming'],'resulting_arb_status':'Voting','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::confirm','arbitration::confirm_with_passport'],'common_patterns':['Transitions\x20Arb\x20from\x20Arbitrator_confirming\x20→\x20Voting','voting_deadline:\x20u64\x20timestamp_ms\x20(null\x20=\x20no\x20deadline)','Once\x20in\x20Voting,\x20only\x20vote\x20/\x20voting_deadline_change\x20/\x20reset\x20allowed'],'recommended_templates':['T-AB-01','T-AB-02']},{'id':'arbitration_feedback','name':'Provide\x20feedback\x20on\x20Arb\x20case','operation_category':'ruling','permission_index':0x168,'permission_name':'ARBITRATION_FEEDBACK','required_arb_status':['Principal_confirming','Arbitrator_confirming','Voting','Arbitrated','Objectionable'],'requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::feedback','arbitration::feedback_with_passport'],'common_patterns':['Feedback\x20is\x20informational\x20—\x20does\x20not\x20change\x20Arb\x20status','Used\x20by\x20principal\x20/\x20arbitrator\x20/\x20voters\x20to\x20attach\x20notes','No\x20state\x20transition;\x20supplements\x20the\x20case\x20record'],'recommended_templates':['T-AB-01','T-AB-07']},{'id':'arbitration_ruling','name':'Make\x20definitive\x20arbitration\x20ruling\x20with\x20indemnity','operation_category':'ruling','permission_index':0x167,'permission_name':'ARBITRATION_ARBITRATION','required_arb_status':['Voting'],'resulting_arb_status':'Arbitrated','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::arbitration','arbitration::arbitration_with_passport'],'common_patterns':['Ruling\x20produces:\x20feedback\x20(string)\x20+\x20indemnity\x20(u64)','indemnity\x20is\x20compensation\x20amount\x20—\x20paid\x20via\x20order::compensate','compensate\x20is\x20public(package)\x20—\x20only\x20order.move\x20can\x20trigger\x20it','Once\x20Arbitrated,\x20case\x20enters\x20Objectionable\x20window\x20(reset\x20possible)'],'recommended_templates':['T-AB-01','T-AB-05']},{'id':'arbitration_reset','name':'Reset\x20arbitration\x20—\x20principal\x20resubmits\x20materials','operation_category':'ruling','permission_index':0x16b,'permission_name':'ARBITRATION_RESET','required_arb_status':['Objectionable','Arbitrator_confirming'],'resulting_arb_status':'Principal_confirming','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::reset','arbitration::reset_with_passport'],'common_patterns':['Resets\x20Arb\x20from\x20Objectionable/Arbitrator_confirming\x20→\x20Principal_confirming','Used\x20when\x20principal\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials','Feedback\x20required\x20(string\x20explaining\x20reset\x20reason)','Restart\x20full\x20lifecycle:\x20Principal_confirming\x20→\x20...\x20→\x20Finished'],'recommended_templates':['T-AB-07']},{'id':'arbitration_arb_withdraw','name':'Withdraw\x20arbitration\x20fees\x20from\x20Arb\x20into\x20Arbitration.balance','operation_category':'fund','permission_index':0x16c,'permission_name':'ARBITRATION_ARB_WITHDRAW','required_arb_status':['Finished','Arbitrated','Objectionable'],'requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::arb_withdraw','arbitration::arb_withdraw_with_passport'],'common_patterns':['Calls\x20arb::withdraw(arb,\x20clock)\x20—\x20moves\x20fees\x20from\x20Arb\x20to\x20Arbitration','Finished:\x20withdraw\x20immediately','Arbitrated/Objectionable:\x20must\x20wait\x20WITHDRAW_DURATION_TIME\x20(30d)\x20past\x20indemnity.time','Increases\x20Arbitration.balance\x20—\x20funds\x20available\x20for\x20fees_alloc/fees_transfer'],'recommended_templates':['T-AB-06']},{'id':'arbitration_fees_alloc','name':'Allocate\x20arbitration\x20fees\x20to\x20Allocation\x20object','operation_category':'fund','permission_index':0x16d,'permission_name':'ARBITRATION_FEES_ALLOC','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::fees_alloc','arbitration::fees_alloc_with_passport'],'common_patterns':['Destination:\x20Allocation\x20object\x20(parameterized\x20fund\x20distribution)','payment_remark\x20+\x20payment_index:\x20bookkeeping\x20for\x20Payment\x20object','May\x20create\x20new\x20Payment\x20object\x20if\x20newPayment\x20name\x20provided','Triggers\x20balance::withdraw_all\x20—\x20extracts\x20ALL\x20balance'],'recommended_templates':['T-AB-06']},{'id':'arbitration_fees_transfer','name':'Transfer\x20arbitration\x20fees\x20to\x20Treasury\x20object','operation_category':'fund','permission_index':0x16e,'permission_name':'ARBITRATION_FEES_TRANSFER','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::fees_transfer','arbitration::fees_transfer_with_passport'],'common_patterns':['Destination:\x20Treasury\x20object\x20(general\x20fund\x20pool)','Same\x20bookkeeping\x20as\x20fees_alloc\x20(remark\x20+\x20index\x20+\x20newPayment)','Triggers\x20balance::withdraw_all\x20—\x20extracts\x20ALL\x20balance','Choose\x20Allocation\x20vs\x20Treasury\x20by\x20distribution\x20need'],'recommended_templates':['T-AB-06']},{'id':'arbitration_voting_guard_config','name':'Configure\x20voting_guard\x20list\x20(add\x20/\x20set\x20/\x20remove\x20/\x20clear)','operation_category':'guard','permission_index':0x162,'permission_name':'ARBITRATION_VOTING_GUARD','requires_voting_guard':'any','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::voting_guard_by_id_add\x20(+\x20_with_passport)','arbitration::voting_guard_fixed_add\x20(+\x20_with_passport)','arbitration::voting_guard_remove\x20(+\x20_with_passport)','arbitration::voting_guard_clear\x20(+\x20_with_passport)'],'common_patterns':['Max\x2050\x20guards:\x20MAX_VOTING_GUARD_COUNT=50\x20(off-by-one-safe:\x20len<50\x20allows\x20add)','GuardIdentifier(u8):\x20dynamic\x20weight\x20from\x20Passport\x20submission\x20value','FixedValue(u32):\x20static\x20weight\x20(e.g.\x20100\x20votes\x20per\x20holder)','Add\x20same\x20guard\x20twice\x20→\x20updates\x20vote_weight\x20(no\x20duplicate)','op=\x27set\x27\x20=\x20clear\x20then\x20add;\x20op=\x27add\x27\x20=\x20append;\x20op=\x27remove\x27\x20=\x20by\x20address'],'recommended_templates':['T-AB-02','T-AB-03']},{'id':'arbitration_usage_guard_config','name':'Configure\x20usage_guard\x20(set\x20/\x20clear)','operation_category':'guard','permission_index':0x163,'permission_name':'ARBITRATION_USAGE_GUARD','requires_voting_guard':'not_applicable','requires_usage_guard':'any','has_passport_variant':!![],'governed_operations':['arbitration::usage_guard_set\x20(+\x20_with_passport)','arbitration::usage_guard_none\x20(+\x20_with_passport)'],'common_patterns':['Single\x20guard\x20(Option<address>)\x20—\x20not\x20a\x20list','Some(guard):\x20dispute\x20must\x20use\x20_with_passport\x20variant','None:\x20dispute\x20can\x20use\x20either\x20variant\x20(no\x20passport\x20needed)','object_linker::affiliation_change_core:\x20updates\x20link\x20when\x20guard\x20changes'],'recommended_templates':['T-AB-04']},{'id':'arbitration_pause','name':'Pause\x20/\x20resume\x20Arbitration\x20service','operation_category':'lifecycle','permission_index':0x164,'permission_name':'ARBITRATION_PAUSE','requires_voting_guard':'not_applicable','requires_usage_guard':'not_applicable','has_passport_variant':!![],'governed_operations':['arbitration::pause','arbitration::pause_with_passport'],'common_patterns':['bPaused\x20default\x20true\x20—\x20new\x20Arbitration\x20cannot\x20accept\x20disputes','pause(false)\x20to\x20enable,\x20pause(true)\x20to\x20disable','Paused\x20Arbitration\x20rejects\x20dispute\x20(E_PAUSED)','Does\x20not\x20affect\x20already-open\x20Arb\x20cases'],'recommended_templates':['T-AB-01']}];export const ARBITRATION_LEDGER_VERSION='1.0.0';export function getScenesByCategory(a){return ARBITRATION_SCENES['filter'](b=>b['operation_category']===a);}export function findSceneById(a){return ARBITRATION_SCENES['find'](b=>b['id']===a);}export function findSceneByPermissionIndex(a){return ARBITRATION_SCENES['find'](b=>b['permission_index']===a);}export function getPermissionByIndex(a){return ARBITRATION_PERMISSIONS['find'](b=>b['index']===a);}export function getPermissionByName(a){return ARBITRATION_PERMISSIONS['find'](b=>b['name']===a);}export function isReservedIndex(a){const b=getPermissionByIndex(a);return!!b?.['is_reserved'];}export function isUsedPermissionIndex(a){const b=getPermissionByIndex(a);return!!b&&!b['is_reserved'];}export function getActivePermissionCount(){return ARBITRATION_PERMISSIONS['filter'](a=>!a['is_reserved'])['length'];}export function inferSceneFromIntent(a){const b=a['toLowerCase'](),c=[{'keywords':['create','new'],'sceneId':'arbitration_create'},{'keywords':['dispute','file','complaint'],'sceneId':'arbitration_dispute'},{'keywords':['vote','voting','decide'],'sceneId':'arbitration_vote'},{'keywords':['confirm','materials'],'sceneId':'arbitration_confirm'},{'keywords':['feedback','opinion'],'sceneId':'arbitration_feedback'},{'keywords':['ruling','arbitration','verdict'],'sceneId':'arbitration_ruling'},{'keywords':['reset','resubmit'],'sceneId':'arbitration_reset'},{'keywords':['arb_withdraw','withdraw','withdraw\x20fees'],'sceneId':'arbitration_arb_withdraw'},{'keywords':['fees_alloc','allocate','allocate\x20fees'],'sceneId':'arbitration_fees_alloc'},{'keywords':['fees_transfer','transfer','transfer\x20in'],'sceneId':'arbitration_fees_transfer'},{'keywords':['voting_guard','voting\x20guard'],'sceneId':'arbitration_voting_guard_config'},{'keywords':['usage_guard','usage\x20guard'],'sceneId':'arbitration_usage_guard_config'},{'keywords':['pause','enable'],'sceneId':'arbitration_pause'}];for(const {keywords:d,sceneId:e}of c){if(d['some'](f=>b['includes'](f['toLowerCase']()))){const f=findSceneById(e);if(f)return f;}}return undefined;}export function getDualGuardMatrixEntry(a,b){return DUAL_GUARD_MATRIX['find'](c=>c['voting_guard_empty']===a&&c['usage_guard_none']===b);}export function isValidArbStatusTransition(a,b){const c={'Principal_confirming':['Arbitrator_confirming'],'Arbitrator_confirming':['Voting','Principal_confirming'],'Voting':['Arbitrated'],'Arbitrated':['Objectionable','Finished','Withdrawn'],'Objectionable':['Principal_confirming','Withdrawn'],'Finished':['Withdrawn'],'Withdrawn':[]};return c[a]?.['includes'](b)??![];}export function isTerminalArbStatus(a){return ARB_TERMINAL_STATUSES['includes'](a);}export function getScenesProducingStatus(a){return ARBITRATION_SCENES['filter'](b=>b['resulting_arb_status']===a);}export function getScenesRequiringStatus(a){return ARBITRATION_SCENES['filter'](b=>b['required_arb_status']?.['includes'](a));}export function getArbitrationScenesCount(){return ARBITRATION_SCENES['length'];}export function getAllArbitrationPermissions(){return[...ARBITRATION_PERMISSIONS];}export function getActiveArbitrationPermissions(){return ARBITRATION_PERMISSIONS['filter'](a=>!a['is_reserved']);}
@@ -0,0 +1,53 @@
1
+ export type FieldAction = "add" | "remove" | "clear" | "set" | "update";
2
+ export interface FieldMutabilityRule {
3
+ object_type: string;
4
+ field: string;
5
+ frozen_when: string | null;
6
+ forbidden_actions: FieldAction[];
7
+ allowed_actions: FieldAction[];
8
+ unfreeze: string | null;
9
+ move_anchor: string;
10
+ }
11
+ export declare const FIELD_MUTABILITY_RULES: FieldMutabilityRule[];
12
+ export interface LockConstraint {
13
+ object_type: string;
14
+ trigger: string;
15
+ locked: string;
16
+ release: string;
17
+ move_anchor: string;
18
+ }
19
+ export declare const LOCK_CONSTRAINTS: LockConstraint[];
20
+ export interface IrreversibleOperation {
21
+ object_type: string;
22
+ operation: string;
23
+ reason: string;
24
+ move_anchor: string;
25
+ }
26
+ export declare const IRREVERSIBLE_OPERATIONS: IrreversibleOperation[];
27
+ export interface StateMachineTerminal {
28
+ object_type: string;
29
+ terminal_states: string[];
30
+ forbidden: string;
31
+ move_anchor: string;
32
+ }
33
+ export declare const STATE_MACHINE_TERMINALS: StateMachineTerminal[];
34
+ export interface NumericLimitConstraint {
35
+ object_type: string;
36
+ field: string;
37
+ limit: string;
38
+ move_anchor: string;
39
+ }
40
+ export declare const NUMERIC_LIMIT_CONSTRAINTS: NumericLimitConstraint[];
41
+ export interface ExternalAccessMechanism {
42
+ object_type: string;
43
+ field: string;
44
+ actor: string;
45
+ limit_source: string;
46
+ move_anchor: string;
47
+ }
48
+ export declare const EXTERNAL_ACCESS_MECHANISMS: ExternalAccessMechanism[];
49
+ export declare function externalAccessOf(objectType: string, field: string): ExternalAccessMechanism | undefined;
50
+ export declare function numericLimitOf(objectType: string, field: string): NumericLimitConstraint | undefined;
51
+ export declare function fieldMutabilityOf(objectType: string, field: string): FieldMutabilityRule | undefined;
52
+ export declare function isActionForbidden(objectType: string, field: string, action: FieldAction, isFrozen: boolean): boolean;
53
+ export declare function lockConstraintOf(objectType: string): LockConstraint | undefined;
@@ -0,0 +1 @@
1
+ export const FIELD_MUTABILITY_RULES=[{'object_type':'Service','field':'machine','frozen_when':'after\x20publish','forbidden_actions':['set','remove'],'allowed_actions':[],'unfreeze':null,'move_anchor':'service.move\x20machine_set_imp\x20/\x20machine_none_imp\x20(assert!(!bPublished))'},{'object_type':'Service','field':'order_allocators','frozen_when':'after\x20publish','forbidden_actions':['set'],'allowed_actions':[],'unfreeze':null,'move_anchor':'service.move\x20order_allocators_set_imp\x20(assert!(!bPublished))'},{'object_type':'Service','field':'buy_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set','remove'],'unfreeze':null,'move_anchor':'service.move\x20buy_guard_set_imp\x20/\x20buy_guard_none_imp\x20(no\x20assert!(!bPublished))'},{'object_type':'Service','field':'rewards','frozen_when':'after\x20publish','forbidden_actions':['remove','clear'],'allowed_actions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','move_anchor':'service.move\x20reward_remove_imp\x20/\x20reward_clear_imp\x20(assert_not_published)'},{'object_type':'Service','field':'arbitrations','frozen_when':'after\x20publish','forbidden_actions':['remove','clear'],'allowed_actions':['add'],'unfreeze':'pause\x20+\x20setting_lock_duration\x20elapsed','move_anchor':'service.move\x20arbitration_remove_imp\x20/\x20arbitration_clear_imp\x20(assert_not_published)'},{'object_type':'Service','field':'repositories','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'service.move\x20repository_remove_imp\x20/\x20repository_clear_imp\x20(no\x20assert_not_published)'},{'object_type':'Service','field':'sales','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear','update'],'unfreeze':null,'move_anchor':'service.move\x20sales_*_imp\x20/\x20price_*\x20/\x20stock_*\x20(mutable\x20after\x20publish)'},{'object_type':'Service','field':'description','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20description_set_imp'},{'object_type':'Service','field':'location','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20location_set_imp'},{'object_type':'Service','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'service.move\x20pause_imp'},{'object_type':'Machine','field':'nodes','frozen_when':'after\x20publish','forbidden_actions':['add','remove','update'],'allowed_actions':[],'unfreeze':null,'move_anchor':'machine.move\x20node_add_imp\x20/\x20node_remove_imp\x20/\x20node_rename_imp\x20(assert_not_published)'},{'object_type':'Machine','field':'consensus_repositories','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'machine.move\x20consensus_repositories_remove_imp\x20(no\x20assert_not_published)'},{'object_type':'Machine','field':'bPaused','frozen_when':null,'forbidden_actions':[],'allowed_actions':['set'],'unfreeze':null,'move_anchor':'machine.move\x20pause_imp'},{'object_type':'Progress','field':'machine','frozen_when':'bound\x20at\x20creation','forbidden_actions':['set','remove'],'allowed_actions':[],'unfreeze':null,'move_anchor':'progress.move\x20new_imp\x20(machine\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'},{'object_type':'Progress','field':'task','frozen_when':'after\x20task_set','forbidden_actions':['set'],'allowed_actions':[],'unfreeze':null,'move_anchor':'progress.move\x20task_set_imp\x20(assert!\x20option::is_none\x20→\x20E_TASK_ALREADY_SET)'},{'object_type':'Treasury','field':'external_deposit_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_deposit_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'external_withdraw_guard','frozen_when':null,'forbidden_actions':[],'allowed_actions':['add','remove','clear'],'unfreeze':null,'move_anchor':'treasury.move\x20external_withdraw_guard_add/remove/clear_imp\x20(no\x20freeze)'},{'object_type':'Treasury','field':'history','frozen_when':'at\x20creation\x20(append-only)','forbidden_actions':['remove','clear','set'],'allowed_actions':['add'],'unfreeze':null,'move_anchor':'treasury.move\x20parent_table::add\x20(withdraw/deposit/receive\x20append\x20only;\x20no\x20delete\x20entry)'},{'object_type':'Allocation','field':'allocators','frozen_when':'after\x20create\x20(share)','forbidden_actions':['add','remove','clear','set'],'allowed_actions':[],'unfreeze':null,'move_anchor':'allocation.move\x20create\x20(bound\x20via\x20new_with_balance;\x20no\x20mutation\x20entry)'},{'object_type':'Allocation','field':'payment_info','frozen_when':'after\x20create\x20(share)','forbidden_actions':['set','remove'],'allowed_actions':[],'unfreeze':null,'move_anchor':'allocation.move\x20create\x20(payment_info\x20bound\x20at\x20creation;\x20no\x20mutation\x20entry)'}];export const LOCK_CONSTRAINTS=[{'object_type':'Service','trigger':'after\x20publish\x20(bPublished=true)','locked':'remove\x20/\x20clear\x20of\x20rewards\x20/\x20arbitrations','release':'paused_time\x20present\x20and\x20paused_time\x20+\x20setting_lock_duration\x20<=\x20current\x20clock','move_anchor':'service.move\x20assert_not_published\x20(E_LOCKED_TIME_NOT_ENOUGH)'},{'object_type':'Reward','trigger':'guard_not_added_expiration_time\x20is\x20set\x20(Some)','locked':'add\x20of\x20guards','release':'clock\x20>\x20guard_not_added_expiration_time','move_anchor':'reward.move\x20guard_add_imp\x20(E_GUARD_LOCKED_TIME)'},{'object_type':'Reward','trigger':'guard.expiration_time\x20is\x20set\x20(Some)','locked':'claim','release':'clock\x20<=\x20guard.expiration_time\x20(cannot\x20claim\x20after\x20expiry)','move_anchor':'reward.move\x20claim\x20(E_GUARD_EXPIRED)'}];export const IRREVERSIBLE_OPERATIONS=[{'object_type':'Machine','operation':'publish','reason':'nodes/pairs/forwards\x20frozen\x20forever;\x20cannot\x20be\x20changed\x20again','move_anchor':'machine.move\x20publish_imp'},{'object_type':'Service','operation':'publish','reason':'machine\x20/\x20order_allocators\x20frozen\x20(rewards/arbitrations\x20need\x20pause+lock\x20before\x20remove)','move_anchor':'service.move\x20publish_imp'},{'object_type':'Permission','operation':'transfer','reason':'owner\x20change\x20is\x20irreversible;\x20the\x20old\x20owner\x20permanently\x20loses\x20control','move_anchor':'permission.move\x20transfer'},{'object_type':'Arb','operation':'arbitration\x20(award)','reason':'enters\x20Arbitrated\x20once\x20indemnity\x20is\x20set;\x20the\x20award\x20is\x20irreversible','move_anchor':'arb.move\x20arbitration'},{'object_type':'Arb','operation':'finish\x20/\x20withdraw','reason':'enters\x20terminal\x20state\x20Finished\x20/\x20Withdrawn;\x20state\x20no\x20longer\x20migrates','move_anchor':'arb.move\x20finish\x20/\x20withdraw'},{'object_type':'Payment','operation':'unwrap\x20/\x20transfer','reason':'fund\x20movement\x20is\x20irreversible','move_anchor':'payment.move\x20unwrap_with_check'},{'object_type':'Progress','operation':'task_set','reason':'task\x20is\x20set\x20once\x20and\x20cannot\x20be\x20reset\x20(permanently\x20bound\x20to\x20an\x20order/reward)','move_anchor':'progress.move\x20task_set_imp\x20(E_TASK_ALREADY_SET)'},{'object_type':'Allocation','operation':'create\x20(share)','reason':'allocators\x20/\x20payment_info\x20are\x20frozen\x20after\x20binding;\x20distribution\x20rules\x20cannot\x20change','move_anchor':'allocation.move\x20create'},{'object_type':'Reward','operation':'guard_expiration_time_add','reason':'guard_not_added_expiration_time\x20can\x20only\x20increase\x20(lock\x20cannot\x20be\x20shortened)','move_anchor':'reward.move\x20guard_expiration_time_add_imp\x20(E_GUARD_LOCKED_TIME_NOT_INCREASING)'}];export const STATE_MACHINE_TERMINALS=[{'object_type':'Arb','terminal_states':['Finished','Withdrawn'],'forbidden':'vote\x20/\x20arbitration\x20/\x20feedback\x20/\x20reset\x20(state\x20machine\x20no\x20longer\x20migrates)','move_anchor':'arb.move\x20status\x20state\x20machine\x20(7\x20states)'}];export const NUMERIC_LIMIT_CONSTRAINTS=[{'object_type':'Arb','field':'indemnity','limit':'<=\x20order.amount\x20*\x203\x20(MAX_INDEMNITY_MULTIPLE=3,\x20enforced\x20at\x20award\x20time,\x20not\x20claim\x20time)','move_anchor':'arb.move\x20arbitration\x20(E_INDEMNITY_EXCEEDS_LIMIT)'}];export const EXTERNAL_ACCESS_MECHANISMS=[{'object_type':'Treasury','field':'external_deposit_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64);\x20deposit\x20amount\x20constrained\x20by\x20Guard\x20logic;\x20store_from_id\x20points\x20to\x20the\x20fund\x20source\x20address','move_anchor':'treasury.move\x20external_deposit\x20(no\x20permission::assert)'},{'object_type':'Treasury','field':'external_withdraw_guard','actor':'any\x20external\x20party\x20that\x20passes\x20passport::result_for_guard\x20(no\x20Treasury\x20Permission\x20needed)','limit_source':'identifier\x20points\x20to\x20a\x20Guard\x20submission\x20amount\x20field\x20(u64)\x20=\x20the\x20withdrawal\x20limit;\x20store_from_id\x20points\x20to\x20the\x20recipient\x20address','move_anchor':'treasury.move\x20external_withdraw\x20(no\x20permission::assert)'}];export function externalAccessOf(a,b){return EXTERNAL_ACCESS_MECHANISMS['find'](d=>d['object_type']===a&&d['field']===b);}export function numericLimitOf(a,b){return NUMERIC_LIMIT_CONSTRAINTS['find'](d=>d['object_type']===a&&d['field']===b);}export function fieldMutabilityOf(a,b){return FIELD_MUTABILITY_RULES['find'](c=>c['object_type']===a&&c['field']===b);}export function isActionForbidden(a,b,c,d){const e=fieldMutabilityOf(a,b);if(!e)return![];if(!d)return![];return e['forbidden_actions']['includes'](c);}export function lockConstraintOf(a){return LOCK_CONSTRAINTS['find'](b=>b['object_type']===a);}
@@ -1 +1 @@
1
- import*as a100a from'fs';import{MAX_NODE_COUNT,USER_DEFINED_PERM_INDEX_START}from'./onchain-constants.js';import{traceSubsteps}from'../project/substep-trace.js';import{aggregateProjectRisks}from'../project/risk-aggregator.js';function add(a,b,c,d,e,f){a['push']({'check_id':b,'severity':c,'message':d,'location':e,'suggestion':f});}function fromDeploymentDocInput(a){const b=a['version']??'v1',c=a['project_prefix']+'_'+b,d=a['steps']['map'](k=>k['entry_id']),e=[],f=[];for(const k of a['steps']){const l=k['network_phase'];if(l==='both'||l==='testnet')e['push'](synthesizeBlock(k,a,'testnet'));if(l==='both'||l==='mainnet')f['push'](synthesizeBlock(k,a,'mainnet'));}const g=new Map();for(let m=0x1;m<=0xb;m++)g['set']('V-T-'+String(m)['padStart'](0x2,'0'),![]);const h=new Map();for(let n=0x1;n<=0x5;n++)h['set']('V-M-'+String(n)['padStart'](0x2,'0'),![]);const j=new Map();for(let o=0x1;o<=0x14;o++)j['set']('D-'+String(o)['padStart'](0x2,'0'),![]);return{'project_name':a['project_prefix'],'version':b,'namespace_tag':c,'objects':a['objects']??[],'edges':a['edges']??[],'steps':a['steps']??[],'scenarios':a['scenarios']??[],'testnet_blocks':e,'mainnet_blocks':f,'testnet_verification':g,'mainnet_verification':h,'completeness_checklist':j,'topological_order':d};}function synthesizeBlock(a,b,c){const d=b['objects']['find'](h=>h['entry_id']===a['entry_id']),e=d?.['name']??a['object_type']+'_'+a['step'],f=c==='testnet',g=c==='testnet'?'T':'M';return{'step':a['step'],'operation_type':a['object_type'],'data':{'object':{'name':e,'replaceExistName':f},'description':a['operation']+'\x20'+a['object_type']+'\x20(step\x20'+a['step']+')'},'env':{'account':b['project_prefix']+'_merchant_'+c,'network':c,'replaceExistName':f,'confirmed':!![]},'substeps':[{'id':''+g+a['step']+'.1','name':a['operation']+'\x20'+a['object_type'],'inputs':[],'outputs':[''+g+a['step']+'.output']}]};}function parseDeploymentMarkdown(a){const c=a100a['readFileSync'](a,'utf-8'),d=c['split']('\x0a'),e=parseTable(d,'Object\x20List',t=>({'entry_id':t['entry_id']??'','object_type':t['object_type'],'name':t['name']??'','reused_from':t['reused_from']||undefined,'publish_required':t['publish_required']==='true','description':t['description']||undefined}))['filter'](t=>t['entry_id']&&t['name']),f=parseTable(d,'Dependency\x20Edges',t=>({'from':t['from']??'','to':t['to']??'','edge_kind':t['edge_kind']??'','field_path':t['field_path']??'','required_at_publish':t['required_at_publish']==='true'}))['filter'](t=>t['from']&&t['to']),g=parseTable(d,'Scenario\x20Matrix',t=>({'scenario_id':t['scenario_id']??'','description':t['description']??'','primary_object':t['primary_object']??'','supporting_objects':(t['supporting_objects']??'')['split'](',')['map'](u=>u['trim']())['filter'](Boolean),'test_step_refs':t['test_step_refs']?t['test_step_refs']['split'](',')['map'](u=>u['trim']())['filter'](Boolean):undefined}))['filter'](t=>t['scenario_id']),h=parseTable(d,'Topological\x20Execution\x20Plan',t=>{const u=t['network_phase']==='testnet'||t['network_phase']==='mainnet'||t['network_phase']==='both'?t['network_phase']:'both';return{'step':parseInt(t['step']??'0',0xa)||0x0,'object_type':t['object_type'],'operation':t['operation']??'','substep_count':parseInt(t['substep_count']??'0',0xa)||0x0,'depends_on':(t['depends_on']??'')['replace'](/[\[\]]/g,'')['split'](',')['map'](v=>v['trim']())['filter'](Boolean)['map'](v=>parseInt(v,0xa)||0x0),'entry_id':t['entry_id']??'','network_phase':u};})['filter'](t=>t['step']>0x0),i=extractJsonBlocks(d),j=[],k=[];for(const t of i){if(t['env']?.['network']==='mainnet')k['push'](t);else j['push'](t);}const l=parseStatusMap(d,'V-T-'),m=parseStatusMap(d,'V-M-'),n=parseStatusMap(d,'D-','Completeness\x20Checklist'),o=parseMetaTable(d),p=o['get']('project_name')??deriveProjectFromPath(a),q=o['get']('version')??'v1',r=o['get']('namespace\x20tag')??o['get']('namespace_tag')??p+'_'+q,s=h['map'](u=>u['entry_id']);return{'project_name':p,'version':q,'namespace_tag':r,'objects':e,'edges':f,'steps':h,'scenarios':g,'testnet_blocks':j,'mainnet_blocks':k,'testnet_verification':l,'mainnet_verification':m,'completeness_checklist':n,'topological_order':s};}function parseTable(a,b,c){return parseMarkdownTable(a,b)['map'](c);}function parseMarkdownTable(a,b){const c=[];for(let d=0x0;d<a['length'];d++){if(!a[d]['includes'](b))continue;let e=-0x1;for(let j=d;j<Math['min'](d+0xa,a['length']);j++){if(a[j]['trim']()['startsWith']('|')&&a[j]['includes']('|')){e=j;break;}}if(e===-0x1)break;const f=splitTableRow(a[e]);let g=e+0x1;if(g<a['length']&&/^\s*\|[\s-:|]+\|\s*$/['test'](a[g]))g++;while(g<a['length']&&a[g]['trim']()['startsWith']('|')){const l=splitTableRow(a[g]);if(l['length']===0x0)break;const m={};for(let n=0x0;n<f['length'];n++)m[f[n]['trim']()]=(l[n]??'')['trim']();c['push'](m),g++;}break;}return c;}function splitTableRow(a){const b=a['trim']();if(!b['startsWith']('|'))return[];return b['slice'](0x1,b['endsWith']('|')?-0x1:undefined)['split']('|');}function parseStatusMap(a,b,c){const d=new Map(),e=c?parseMarkdownTable(a,c):parseMarkdownTable(a,'Verification\x20Checklist');for(const f of e){const g=f['verification_id']??f['check_id']??'';if(!g['startsWith'](b))continue;const h=(f['status']??'')['trim']();d['set'](g,h['includes']('✅')||h['toLowerCase']()['includes']('pass'));}return d;}function parseMetaTable(a){const b=new Map();for(const c of parseMarkdownTable(a,'Project\x20Metadata')){const d=c['field']??'',e=c['value']??'';if(d)b['set'](d['trim'](),e['trim']());}return b;}function extractJsonBlocks(a){const b=[];let c=0x0;while(c<a['length']){if(a[c]['trim']()['startsWith']('```json')){const d=[];let e=c+0x1;while(e<a['length']&&!a[e]['trim']()['startsWith']('```')){d['push'](a[e]),e++;}try{const f=JSON['parse'](d['join']('\x0a'));if(f&&typeof f==='object'&&'operation_type'in f){const g=f['env']??{},h=f['data']??{},k=f['substeps'],l=Array['isArray'](k)?k['map'](normalizeSubstep):undefined;b['push']({'step':typeof f['step']==='number'?f['step']:0x0,'operation_type':String(f['operation_type']??''),'data':h,'env':{'network':typeof g['network']==='string'?g['network']:undefined,'replaceExistName':typeof g['replaceExistName']==='boolean'?g['replaceExistName']:undefined,'forceClaim':typeof g['forceClaim']==='boolean'?g['forceClaim']:undefined,'confirmed':typeof g['confirmed']==='boolean'?g['confirmed']:undefined,...g},'substeps':l});}}catch{}c=e+0x1;}else c++;}return b;}function normalizeSubstep(a){if(!a||typeof a!=='object')return{'id':'','inputs':[],'outputs':[]};const b=a;return{'id':String(b['id']??''),'name':typeof b['name']==='string'?b['name']:undefined,'inputs':Array['isArray'](b['inputs'])?b['inputs']['map'](String):[],'outputs':Array['isArray'](b['outputs'])?b['outputs']['map'](String):[]};}function deriveProjectFromPath(a){const b=a['split'](/[\\/]/)['pop']()??'project';return b['replace'](/_v\d+_deployment\.md$/i,'')['replace'](/\.md$/i,'');}function*walkPermissionIndices(a){if(a===null||a===undefined||typeof a!=='object')return;if(Array['isArray'](a)){for(const c of a)yield*walkPermissionIndices(c);return;}const b=a;if(typeof b['permissionIndex']==='number')yield b['permissionIndex'];if(typeof b['permission_index']==='number')yield b['permission_index'];if(typeof b['index']==='number'&&b['__isPermission']===!![])yield b['index'];for(const d of Object['values'](b))yield*walkPermissionIndices(d);}function countMachineNodes(a){const b=a['data']?.['node'],c=b?.['nodes'];return Array['isArray'](c)?c['length']:0x0;}function deriveEntryIdFromBlock(a,b){const c=a['data']['object'];let d;if(typeof c==='string')d=c;else{if(c&&typeof c==='object'){const e=c;if(typeof e['name']==='string')d=e['name'];}}if(!d)return undefined;return b['objects']['find'](f=>f['name']===d)?.['entry_id'];}export function analyzeObjectDependencyCompleteness(a){const b=[];try{const c=normalizeInput(a);if(!c)return add(b,'D-01','critical','No\x20deployment\x20document\x20provided\x20(need\x20document_path\x20or\x20deployment_doc)'),b;const d=new Set(c['objects']['map'](h=>h['entry_id'])),f=new Set();for(const h of c['edges']){f['add'](h['from']),f['add'](h['to']);}for(const i of f){if(i['endsWith'](':*'))continue;!d['has'](i)&&add(b,'D-01','critical','Object\x20\x27'+i+'\x27\x20is\x20referenced\x20in\x20§1.2\x20but\x20not\x20defined\x20in\x20§1.1','§1.2\x20Dependency\x20Edges','Add\x20\x27'+i+'\x27\x20to\x20§1.1\x20Object\x20List\x20or\x20remove\x20the\x20reference.');}for(const j of c['edges']){const k=d['has'](j['from'])||j['from']['endsWith'](':*'),l=d['has'](j['to'])||j['to']['endsWith'](':*');(!k||!l)&&add(b,'D-02','critical','Dangling\x20dependency:\x20'+j['from']+'\x20→\x20'+j['to']+'\x20(edge_kind=\x27'+j['edge_kind']+'\x27)','§1.2\x20Dependency\x20Edges','Create\x20the\x20missing\x20object\x20or\x20remove\x20the\x20edge.');}for(const m of c['objects']['filter'](n=>n['object_type']==='guard')){const n=c['testnet_blocks']['some'](p=>p['operation_type']==='guard'&&p['data']['object']?.['name']===m['name']),o=c['testnet_blocks']['some'](p=>p['operation_type']==='passport'||p['data']['gen_passport']===!![]||p['data']['object']===m['name']);if(!n)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20create\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20guard\x20creation\x20JSON\x20block\x20for\x20\x27'+m['name']+'\x27.');if(!o)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20gen_passport\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20passport/gen_passport\x20JSON\x20block\x20after\x20the\x20guard\x20creation\x20step.');}}catch(p){add(b,'D-01','warning','analyzeObjectDependencyCompleteness\x20failed:\x20'+p['message']);}return b;}export function analyzeSubstepCoherence(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of['testnet','mainnet']){const e=collectSubsteps(d==='testnet'?c['testnet_blocks']:c['mainnet_blocks'],d),f=traceSubsteps({'project_prefix':c['project_name'],'version':c['version'],'network':d,'substeps':e});emitCoherenceFindings(f,d,b);}}catch(g){add(b,'D-10','warning','analyzeSubstepCoherence\x20failed:\x20'+g['message']);}return b;}function collectSubsteps(a,b){const c=[],d=b==='testnet'?'T':'M';for(const e of a){if(!e['substeps'])continue;const f=''+d+e['step'];for(const g of e['substeps']){if(!g['id'])continue;c['push']({'step_id':g['id'],'parent_step':f,'object_type':e['operation_type'],'entry_id':'','operation_type':e['operation_type'],'network':b,'input':{'data':e['data'],'input_refs':g['inputs']},'timestamp':0x0,'status':'PENDING','dependencies':{'input_refs':g['inputs'],'output_refs':g['outputs']['map'](h=>({'substep_id':g['id'],'field_path':h}))}});}}return c;}function emitCoherenceFindings(a,e,f){for(const g of a['dangling_inputs']){add(f,'D-10','critical','['+e+']\x20Dangling\x20input:\x20substep\x20\x27'+g['substep_id']+'\x27\x20references\x20missing\x20\x27'+g['missing_ref']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+g['missing_ref']+'\x27\x20is\x20produced\x20by\x20an\x20earlier\x20substep.');}for(const h of a['circular_refs']){add(f,'D-10','critical','['+e+']\x20Circular\x20reference:\x20'+h['cycle']['join']('\x20→\x20'),e+'\x20§substeps','Break\x20the\x20cycle\x20by\x20removing\x20one\x20dependency.');}for(const i of a['missing_outputs']){add(f,'D-10','warning','['+e+']\x20Missing\x20output:\x20substep\x20\x27'+i['substep_id']+'\x27\x20did\x20not\x20produce\x20\x27'+i['expected_field']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+i['substep_id']+'\x27\x20produces\x20\x27'+i['expected_field']+'\x27.');}for(const j of a['cross_step_breaks']){add(f,'D-10','critical','['+e+']\x20Cross-step\x20break:\x20failed\x20step\x20\x27'+j['source_step']+'\x27\x20blocks\x20\x27'+j['target_step']+'\x27',e+'\x20§substeps','Fix\x20step\x20\x27'+j['source_step']+'\x27\x20or\x20adjust\x20the\x20dependency.');}}export function analyzeNetworkConsistency(a){const c=[];try{const d=normalizeInput(a);if(!d)return[];const e=d['testnet_blocks'],f=d['mainnet_blocks'],g=d['topological_order'];if(g['length']>0x0&&e['length']>0x0)for(let h=0x0;h<e['length'];h++){const j=g[h];if(!j)break;const k=deriveEntryIdFromBlock(e[h],d);if(k&&k!==j){add(c,'D-04','critical','testnet\x20step\x20'+e[h]['step']+'\x20order\x20mismatch:\x20expected\x20\x27'+j+'\x27,\x20got\x20\x27'+k+'\x27','§3.2\x20testnet\x20JSON\x20Operation\x20Sequence','Reorder\x20testnet\x20JSON\x20blocks\x20to\x20match\x20§2\x20topological\x20order.');break;}}for(const l of e){if(l['env']['network']!=='testnet')add(c,'D-05','critical','testnet\x20step\x20'+l['step']+'\x20env.network\x20is\x20\x27'+(l['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27testnet\x27','§3.2\x20step\x20'+l['step'],'Set\x20env.network\x20=\x20\x27testnet\x27\x20on\x20all\x20§3.2\x20JSON\x20blocks.');}for(const n of e){if(n['env']['replaceExistName']!==!![])add(c,'D-06','critical','testnet\x20step\x20'+n['step']+'\x20env.replaceExistName\x20is\x20\x27'+(n['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20true','§3.2\x20step\x20'+n['step'],'Set\x20env.replaceExistName\x20=\x20true\x20on\x20all\x20§3.2\x20JSON\x20blocks\x20(testnet\x20allows\x20overwrite).');}if(e['length']!==f['length'])add(c,'D-11','critical','mainnet\x20step\x20count\x20('+f['length']+')\x20!=\x20testnet\x20step\x20count\x20('+e['length']+')','§3.2\x20vs\x20§4.2','Ensure\x20mainnet\x20JSON\x20blocks\x20correspond\x201:1\x20with\x20testnet\x20blocks.');else for(let o=0x0;o<f['length'];o++){const p=e[o],q=f[o];if(p['step']!==q['step'])add(c,'D-11','critical','mainnet\x20step\x20'+q['step']+'\x20does\x20not\x20match\x20testnet\x20step\x20'+p['step'],'§4.2\x20step\x20'+q['step'],'Ensure\x20mainnet\x20step\x20numbers\x20match\x20testnet.');if(p['operation_type']!==q['operation_type'])add(c,'D-11','critical','step\x20'+q['step']+'\x20operation_type\x20mismatch:\x20testnet=\x27'+p['operation_type']+'\x27,\x20mainnet=\x27'+q['operation_type']+'\x27','§4.2\x20step\x20'+q['step'],'Align\x20mainnet\x20operation_type\x20with\x20testnet.');}for(const r of f){if(r['env']['network']!=='mainnet')add(c,'D-12','critical','mainnet\x20step\x20'+r['step']+'\x20env.network\x20is\x20\x27'+(r['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27mainnet\x27','§4.2\x20step\x20'+r['step'],'Set\x20env.network\x20=\x20\x27mainnet\x27\x20on\x20all\x20§4.2\x20JSON\x20blocks.');}for(const s of f){if(s['env']['replaceExistName']!==![]&&!s['env']['forceClaim'])add(c,'D-13','critical','mainnet\x20step\x20'+s['step']+'\x20env.replaceExistName\x20is\x20\x27'+(s['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20false\x20(or\x20set\x20forceClaim=true)','§4.2\x20step\x20'+s['step'],'Set\x20env.replaceExistName\x20=\x20false\x20on\x20all\x20§4.2\x20JSON\x20blocks\x20(mainnet\x20must\x20not\x20overwrite).');}}catch(u){add(c,'D-04','warning','analyzeNetworkConsistency\x20failed:\x20'+u['message']);}return c;}const NAME_REGEX=/^[a-z][a-z0-9_]{2,63}$/;export function analyzeNamingConvention(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=c['project_name'],e='_'+c['version'];for(const f of c['objects']){if(f['reused_from'])continue;if(!NAME_REGEX['test'](f['name']))add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20match\x20'+NAME_REGEX,'§1.1\x20('+f['entry_id']+')','Rename\x20to\x20match\x20^[a-z][a-z0-9_]{2,63}$\x20and\x20start\x20with\x20project\x20prefix\x20\x27'+d+'\x27.');else d&&!f['name']['startsWith'](d+'_')&&add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20start\x20with\x20project\x20prefix\x20\x27'+d+'_\x27','§1.1\x20('+f['entry_id']+')','Rename\x20to\x20start\x20with\x20\x27'+d+'_\x27.');e&&!f['name']['endsWith'](e)&&add(b,'NAMING-02','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20is\x20missing\x20version\x20suffix\x20\x27'+e+'\x27','§1.1\x20('+f['entry_id']+')','Append\x20\x27'+e+'\x27\x20to\x20the\x20name.');}}catch(g){add(b,'NAMING-01','warning','analyzeNamingConvention\x20failed:\x20'+g['message']);}return b;}export function analyzePermissionIndexRange(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const e of d){for(const f of walkPermissionIndices(e['data'])){if(f<USER_DEFINED_PERM_INDEX_START)add(b,'D-07','critical','permissionIndex\x20'+f+'\x20<\x20'+USER_DEFINED_PERM_INDEX_START+'\x20(USER_DEFINED_PERM_INDEX_START)\x20in\x20step\x20'+e['step']+'\x20('+e['operation_type']+')',(e['env']['network']??'?')+'\x20step\x20'+e['step'],'Use\x20a\x20permissionIndex\x20>=\x20'+USER_DEFINED_PERM_INDEX_START+'.');}}for(const g of d){if(g['operation_type']!=='machine')continue;const h=countMachineNodes(g);if(h>MAX_NODE_COUNT)add(b,'D-09','critical','Machine\x20in\x20step\x20'+g['step']+'\x20has\x20'+h+'\x20nodes\x20>\x20MAX_NODE_COUNT\x20('+MAX_NODE_COUNT+')',(g['env']['network']??'?')+'\x20step\x20'+g['step'],'Reduce\x20node\x20count\x20to\x20<=\x20'+MAX_NODE_COUNT+'\x20or\x20split\x20into\x20multiple\x20Machines.');}}catch(i){add(b,'D-07','warning','analyzePermissionIndexRange\x20failed:\x20'+i['message']);}return b;}const REQUIRED_SCENARIO_KEYWORDS=['normal_order','refund','dispute','machine_publish','service_publish'];export function analyzeScenarioCoverage(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=new Set();for(const f of c['scenarios']){const g=(f['scenario_id']+'\x20'+f['description'])['toLowerCase']();for(const h of REQUIRED_SCENARIO_KEYWORDS){if(g['includes'](h['toLowerCase']()))d['add'](h);}}if(d['size']<0x3){const i=REQUIRED_SCENARIO_KEYWORDS['filter'](j=>!d['has'](j));add(b,'D-03','warning','Scenario\x20matrix\x20covers\x20'+d['size']+'/'+REQUIRED_SCENARIO_KEYWORDS['length']+'\x20required\x20keywords;\x20missing:\x20'+i['join'](',\x20'),'§1.3\x20Scenario\x20Matrix','Add\x20scenarios\x20covering\x20the\x20missing\x20keywords\x20(normal_order,\x20refund,\x20dispute,\x20machine_publish,\x20service_publish).');}const e=new Set(c['objects']['map'](j=>j['entry_id']));for(const j of c['scenarios']){const k=[j['primary_object'],...j['supporting_objects']];for(const l of k){if(l['endsWith'](':*'))continue;if(!e['has'](l))add(b,'D-03','warning','Scenario\x20\x27'+j['scenario_id']+'\x27\x20references\x20undefined\x20object\x20\x27'+l+'\x27','§1.3\x20('+j['scenario_id']+')','Add\x20\x27'+l+'\x27\x20to\x20§1.1\x20or\x20fix\x20the\x20scenario\x20reference.');}}}catch(m){add(b,'D-03','warning','analyzeScenarioCoverage\x20failed:\x20'+m['message']);}return b;}const TESTNET_VERIFICATION_ITEMS=['V-T-01','V-T-02','V-T-03','V-T-04','V-T-05','V-T-06','V-T-07','V-T-08','V-T-09','V-T-10','V-T-11'],MAINNET_VERIFICATION_ITEMS=['V-M-01','V-M-02','V-M-03','V-M-04','V-M-05'],COMPLETENESS_CHECK_IDS=Array['from']({'length':0x14},(a,b)=>'D-'+String(b+0x1)['padStart'](0x2,'0'));export function analyzeVerificationChecklist(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of TESTNET_VERIFICATION_ITEMS){if(!c['testnet_verification']['has'](d))add(b,'D-14','warning','testnet\x20verification\x20item\x20\x27'+d+'\x27\x20is\x20missing\x20from\x20§3.3','§3.3\x20testnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+d+'\x27\x20to\x20§3.3.');}for(const e of MAINNET_VERIFICATION_ITEMS){if(!c['mainnet_verification']['has'](e))add(b,'D-15','warning','mainnet\x20verification\x20item\x20\x27'+e+'\x27\x20is\x20missing\x20from\x20§4.3','§4.3\x20mainnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+e+'\x27\x20to\x20§4.3.');}for(const f of COMPLETENESS_CHECK_IDS){if(!c['completeness_checklist']['has'](f))add(b,'D-18','warning','completeness\x20checklist\x20item\x20\x27'+f+'\x27\x20is\x20missing\x20from\x20§6','§6\x20Completeness\x20Checklist','Add\x20row\x20\x27'+f+'\x27\x20to\x20§6.');}}catch(g){add(b,'D-14','warning','analyzeVerificationChecklist\x20failed:\x20'+g['message']);}return b;}export function analyzeDeployableReadiness(a){const b=[];try{const c=resolveRiskResult(a);if(!c)return add(b,'D-16','info','Risk\x20aggregation\x20result\x20not\x20available;\x20D-16/D-17\x20skipped\x20(provide\x20project_graph\x20with\x20puzzles,\x20or\x20set\x20deployment_doc.risk_status).',undefined,'Run\x20C2\x20risk-aggregator\x20first,\x20or\x20provide\x20deployment_doc.risk_status.'),b;const d=c['severity_summary']['CRITICAL']??0x0;if(d>0x0){const g=c['findings']['filter'](h=>h['severity']==='CRITICAL')['map'](h=>h['risk_rule_id'])['join'](',\x20');add(b,'D-16','critical',d+'\x20CRITICAL\x20risk(s)\x20remain:\x20'+g,'C2\x20risk-aggregator\x20output','Return\x20to\x20stage\x202\x20(business\x20puzzle)\x20and\x20fix\x20all\x20CRITICAL\x20risks\x20before\x20deploying.');}const e=new Set(a['user_confirmed_high_risks']??[]),f=c['findings']['filter'](h=>h['severity']==='HIGH'&&!e['has'](h['risk_rule_id']));if(f['length']>0x0){const h=f['map'](i=>i['risk_rule_id'])['join'](',\x20');add(b,'D-17','critical',f['length']+'\x20unconfirmed\x20HIGH\x20risk(s):\x20'+h,'C2\x20risk-aggregator\x20output','User\x20must\x20confirm\x20each\x20HIGH\x20risk\x20(ACCEPT_AND_PROCEED)\x20or\x20fix\x20them.');}}catch(i){add(b,'D-16','warning','analyzeDeployableReadiness\x20failed:\x20'+i['message']);}return b;}function resolveRiskResult(a){const b=a['project_graph'];if(b&&typeof b==='object'){const d=b;if(typeof d['severity_summary']==='object'&&Array['isArray'](d['findings']))return b;if(typeof d['project_prefix']==='string'&&typeof d['puzzles']==='object')try{return aggregateProjectRisks(b);}catch{}}const c=a['deployment_doc'];if(c&&c['risk_status']){const e=c['risk_critical_count']??0x0,f=c['risk_high_count']??0x0,g=[];for(let h=0x0;h<e;h++)g['push']({'risk_rule_id':'R-CRITICAL-'+h,'object_type':'service','entry_id':'*','severity':'CRITICAL','message':'(synthesized\x20from\x20deployment_doc.risk_critical_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});for(let j=0x0;j<f;j++)g['push']({'risk_rule_id':'R-HIGH-'+j,'object_type':'service','entry_id':'*','severity':'HIGH','message':'(synthesized\x20from\x20deployment_doc.risk_high_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});return{'namespace':{'prefix':c['project_prefix'],'version':c['version'],'industry':c['industry']},'findings':g,'severity_summary':{'CRITICAL':e,'HIGH':f,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0},'status':c['risk_status'],'calibrated_at':Date['now'](),'warnings':[]};}return undefined;}function extractMachinePairs(a){const b=a['data'];if(!b)return[];const c=b['node'];if(!c||typeof c!=='object')return[];const d=c['nodes'];if(!Array['isArray'](d))return[];return d['filter'](e=>{if(!e||typeof e!=='object')return![];const f=e['pairs'];return Array['isArray'](f);})['flatMap'](e=>e['pairs']??[]);}export function analyzeMachineAndServiceReadiness(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const f of d){if(f['operation_type']!=='machine')continue;const g=extractMachinePairs(f);if(g['length']===0x0)continue;const h=g['filter'](i=>i['prev_node']==='');for(const i of h){const j=Array['isArray'](i['forwards'])?i['forwards']['length']:0x0;j===0x0&&add(b,'D-19','critical','Machine\x20in\x20step\x20'+f['step']+'\x20('+(f['env']['network']??'?')+')\x20has\x20an\x20entry\x20node\x20(prev_node=\x22\x22)\x20with\x20no\x20forwards.\x20'+'Progress\x20created\x20from\x20this\x20Machine\x20will\x20be\x20permanently\x20stuck\x20at\x20current=\x22\x22\x20(P0-2\x20root\x20cause).',(f['env']['network']??'?')+'\x20step\x20'+f['step'],'Add\x20at\x20least\x20one\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs.\x20Example:\x20pairs:\x20[{prev_node:\x20\x22\x22,\x20forwards:\x20[{next_node:\x20\x22Ordered\x22,\x20...}]}]');}}const e=d['filter'](k=>k['operation_type']==='service');if(e['length']>0x0){const k=e['filter'](l=>{const m=l['data'];return m?.['compensation_fund_add']!=null;});k['length']===0x0&&add(b,'D-20','warning','No\x20Service\x20block\x20in\x20the\x20deployment\x20doc\x20includes\x20a\x20compensation_fund_add\x20step.\x20'+'Without\x20deposit,\x20arbitration\x20rulings\x20that\x20award\x20refunds\x20to\x20buyers\x20cannot\x20be\x20paid\x20out\x20from\x20the\x20Service.\x20'+'Industries\x20like\x20freelance\x20may\x20not\x20require\x20this\x20(info),\x20but\x20rental/travel/education\x20typically\x20do.','§3.2\x20/\x20§4.2\x20Service\x20blocks','Add\x20a\x20compensation_fund_add\x20step\x20for\x20the\x20Service\x20(e.g.,\x20data.compensation_fund_add\x20=\x20{balance:\x20<amount>}).\x20'+'Recommended:\x203-10×\x20the\x20max\x20single-order\x20amount,\x20depending\x20on\x20industry\x20(subscription:\x203×,\x20retail:\x205×,\x20rental:\x2010×).\x20See\x20P1-1\x20evaluation\x20rule.');}}catch(l){add(b,'D-19','warning','analyzeMachineAndServiceReadiness\x20failed:\x20'+l['message']);}return b;}export function scanDeployment(a){const b=[...analyzeObjectDependencyCompleteness(a),...analyzeSubstepCoherence(a),...analyzeNetworkConsistency(a),...analyzeNamingConvention(a),...analyzePermissionIndexRange(a),...analyzeScenarioCoverage(a),...analyzeVerificationChecklist(a),...analyzeDeployableReadiness(a),...analyzeMachineAndServiceReadiness(a)];return{'project_name':a['project_name'],'document_path':a['document_path'],'overall_readiness':computeReadiness(b),'findings':b,'coverage':computeCoverage(a),'checks':computeChecks(b),'scanned_at':Date['now'](),'scanner_version':DEPLOYMENT_SCANNER_VERSION};}function computeChecks(a){const b=c=>a['some'](d=>d['check_id']===c);return{'D01_object_defined':b('D-01')?'fail':'pass','D02_dependency_complete':b('D-02')?'fail':'pass','D03_scenario_covered':b('D-03')?'fail':'pass','D04_testnet_topo_order':b('D-04')?'fail':'pass','D05_testnet_network':b('D-05')?'fail':'pass','D06_testnet_replace':b('D-06')?'fail':'pass','D07_permission_index':b('D-07')?'fail':'pass','D08_guard_gen_passport':b('D-08')?'fail':'pass','D09_machine_node_count':b('D-09')?'fail':'pass','D10_substep_coherence':b('D-10')?'fail':'pass','D11_mainnet_testnet_match':b('D-11')?'fail':'pass','D12_mainnet_network':b('D-12')?'fail':'pass','D13_mainnet_replace':b('D-13')?'fail':'pass','D14_testnet_verification':b('D-14')?'fail':'pass','D15_mainnet_verification':b('D-15')?'fail':'pass','D16_no_critical_risk':b('D-16')?'fail':'pass','D17_no_high_risk':b('D-17')?'fail':'pass','D18_completeness_checklist':b('D-18')?'fail':'pass','D19_machine_entry_forward':b('D-19')?'fail':'pass','D20_service_compensation_fund':b('D-20')?'fail':'pass'};}function computeCoverage(a){const b=normalizeInput(a);if(!b)return{'objects_defined':0x0,'objects_with_scenario':0x0,'testnet_steps':0x0,'mainnet_steps':0x0,'verification_items':0x0};const c=new Set();for(const e of b['scenarios']){c['add'](e['primary_object']);for(const f of e['supporting_objects'])c['add'](f);}const d=b['objects']['filter'](g=>c['has'](g['entry_id'])||c['has'](g['object_type']+':*'))['length'];return{'objects_defined':b['objects']['length'],'objects_with_scenario':d,'testnet_steps':b['testnet_blocks']['length'],'mainnet_steps':b['mainnet_blocks']['length'],'verification_items':b['testnet_verification']['size']+b['mainnet_verification']['size']};}function computeReadiness(a){const b=a['filter'](c=>c['check_id']['startsWith']('D-'));if(b['some'](c=>c['severity']==='critical'))return'blocked';if(b['some'](c=>c['severity']==='warning'))return'warnings';return'ready';}function normalizeInput(a){if(a['deployment_doc'])return fromDeploymentDocInput(a['deployment_doc']);if(a['document_path']){if(!a100a['existsSync'](a['document_path']))return undefined;return parseDeploymentMarkdown(a['document_path']);}return undefined;}export function isReady(a){return a['overall_readiness']==='ready';}export function isBlocked(a){return a['overall_readiness']==='blocked';}export function summarizeScan(a){const b=[];b['push']('#\x20Deployment\x20Scan\x20Report\x20—\x20'+a['project_name'],''),b['push']('-\x20**Overall\x20readiness**:\x20'+a['overall_readiness']),b['push']('-\x20**Scanned\x20at**:\x20'+new Date(a['scanned_at'])['toISOString']()),b['push']('-\x20**Scanner\x20version**:\x20'+a['scanner_version']);if(a['document_path'])b['push']('-\x20**Document**:\x20'+a['document_path']);b['push']('','##\x20Coverage','','|\x20Metric\x20|\x20Count\x20|','|--------|-------|'),b['push']('|\x20Objects\x20defined\x20|\x20'+a['coverage']['objects_defined']+'\x20|'),b['push']('|\x20Objects\x20with\x20scenario\x20|\x20'+a['coverage']['objects_with_scenario']+'\x20|'),b['push']('|\x20testnet\x20steps\x20|\x20'+a['coverage']['testnet_steps']+'\x20|'),b['push']('|\x20mainnet\x20steps\x20|\x20'+a['coverage']['mainnet_steps']+'\x20|'),b['push']('|\x20verification\x20items\x20|\x20'+a['coverage']['verification_items']+'\x20|',''),b['push']('##\x20Checks\x20(D-01\x20~\x20D-20)','','|\x20Check\x20ID\x20|\x20Status\x20|','|----------|--------|');const c=Object['entries'](a['checks']);for(const [d,e]of c)b['push']('|\x20'+d+'\x20|\x20'+(e==='pass'?'✅\x20pass':'❌\x20fail')+'\x20|');b['push']('','##\x20Findings\x20('+a['findings']['length']+')','');if(a['findings']['length']===0x0)b['push']('✅\x20No\x20issues\x20detected.','');else{const g=new Map();for(const h of a['findings']){const i=g['get'](h['severity'])??[];i['push'](h),g['set'](h['severity'],i);}for(const j of['critical','warning','info']){const k=g['get'](j);if(!k||k['length']===0x0)continue;b['push']('###\x20'+j['toUpperCase']()+'\x20('+k['length']+')','');for(const l of k){b['push']('-\x20**['+l['check_id']+']**\x20'+l['message']);if(l['location'])b['push']('\x20\x20-\x20Location:\x20'+l['location']);if(l['suggestion'])b['push']('\x20\x20-\x20Suggestion:\x20'+l['suggestion']);b['push']('');}}}return b['push']('---','','*End\x20of\x20report.*'),b['join']('\x0a');}export const DEPLOYMENT_SCANNER_VERSION='2.0.0';
1
+ import*as a101a from'fs';import{MAX_NODE_COUNT,USER_DEFINED_PERM_INDEX_START}from'./onchain-constants.js';import{traceSubsteps}from'../project/substep-trace.js';import{aggregateProjectRisks}from'../project/risk-aggregator.js';function add(a,b,c,d,e,f){a['push']({'check_id':b,'severity':c,'message':d,'location':e,'suggestion':f});}function fromDeploymentDocInput(a){const b=a['version']??'v1',c=a['project_prefix']+'_'+b,d=a['steps']['map'](k=>k['entry_id']),e=[],f=[];for(const k of a['steps']){const l=k['network_phase'];if(l==='both'||l==='testnet')e['push'](synthesizeBlock(k,a,'testnet'));if(l==='both'||l==='mainnet')f['push'](synthesizeBlock(k,a,'mainnet'));}const g=new Map();for(let m=0x1;m<=0xb;m++)g['set']('V-T-'+String(m)['padStart'](0x2,'0'),![]);const h=new Map();for(let n=0x1;n<=0x5;n++)h['set']('V-M-'+String(n)['padStart'](0x2,'0'),![]);const j=new Map();for(let o=0x1;o<=0x14;o++)j['set']('D-'+String(o)['padStart'](0x2,'0'),![]);return{'project_name':a['project_prefix'],'version':b,'namespace_tag':c,'objects':a['objects']??[],'edges':a['edges']??[],'steps':a['steps']??[],'scenarios':a['scenarios']??[],'testnet_blocks':e,'mainnet_blocks':f,'testnet_verification':g,'mainnet_verification':h,'completeness_checklist':j,'topological_order':d};}function synthesizeBlock(a,b,c){const d=b['objects']['find'](h=>h['entry_id']===a['entry_id']),e=d?.['name']??a['object_type']+'_'+a['step'],f=c==='testnet',g=c==='testnet'?'T':'M';return{'step':a['step'],'operation_type':a['object_type'],'data':{'object':{'name':e,'replaceExistName':f},'description':a['operation']+'\x20'+a['object_type']+'\x20(step\x20'+a['step']+')'},'env':{'account':b['project_prefix']+'_merchant_'+c,'network':c,'replaceExistName':f,'confirmed':!![]},'substeps':[{'id':''+g+a['step']+'.1','name':a['operation']+'\x20'+a['object_type'],'inputs':[],'outputs':[''+g+a['step']+'.output']}]};}function parseDeploymentMarkdown(a){const c=a101a['readFileSync'](a,'utf-8'),d=c['split']('\x0a'),e=parseTable(d,'Object\x20List',t=>({'entry_id':t['entry_id']??'','object_type':t['object_type'],'name':t['name']??'','reused_from':t['reused_from']||undefined,'publish_required':t['publish_required']==='true','description':t['description']||undefined}))['filter'](t=>t['entry_id']&&t['name']),f=parseTable(d,'Dependency\x20Edges',t=>({'from':t['from']??'','to':t['to']??'','edge_kind':t['edge_kind']??'','field_path':t['field_path']??'','required_at_publish':t['required_at_publish']==='true'}))['filter'](t=>t['from']&&t['to']),g=parseTable(d,'Scenario\x20Matrix',t=>({'scenario_id':t['scenario_id']??'','description':t['description']??'','primary_object':t['primary_object']??'','supporting_objects':(t['supporting_objects']??'')['split'](',')['map'](u=>u['trim']())['filter'](Boolean),'test_step_refs':t['test_step_refs']?t['test_step_refs']['split'](',')['map'](u=>u['trim']())['filter'](Boolean):undefined}))['filter'](t=>t['scenario_id']),h=parseTable(d,'Topological\x20Execution\x20Plan',t=>{const u=t['network_phase']==='testnet'||t['network_phase']==='mainnet'||t['network_phase']==='both'?t['network_phase']:'both';return{'step':parseInt(t['step']??'0',0xa)||0x0,'object_type':t['object_type'],'operation':t['operation']??'','substep_count':parseInt(t['substep_count']??'0',0xa)||0x0,'depends_on':(t['depends_on']??'')['replace'](/[\[\]]/g,'')['split'](',')['map'](v=>v['trim']())['filter'](Boolean)['map'](v=>parseInt(v,0xa)||0x0),'entry_id':t['entry_id']??'','network_phase':u};})['filter'](t=>t['step']>0x0),i=extractJsonBlocks(d),j=[],k=[];for(const t of i){if(t['env']?.['network']==='mainnet')k['push'](t);else j['push'](t);}const l=parseStatusMap(d,'V-T-'),m=parseStatusMap(d,'V-M-'),n=parseStatusMap(d,'D-','Completeness\x20Checklist'),o=parseMetaTable(d),p=o['get']('project_name')??deriveProjectFromPath(a),q=o['get']('version')??'v1',r=o['get']('namespace\x20tag')??o['get']('namespace_tag')??p+'_'+q,s=h['map'](u=>u['entry_id']);return{'project_name':p,'version':q,'namespace_tag':r,'objects':e,'edges':f,'steps':h,'scenarios':g,'testnet_blocks':j,'mainnet_blocks':k,'testnet_verification':l,'mainnet_verification':m,'completeness_checklist':n,'topological_order':s};}function parseTable(a,b,c){return parseMarkdownTable(a,b)['map'](c);}function parseMarkdownTable(a,b){const c=[];for(let d=0x0;d<a['length'];d++){if(!a[d]['includes'](b))continue;let e=-0x1;for(let j=d;j<Math['min'](d+0xa,a['length']);j++){if(a[j]['trim']()['startsWith']('|')&&a[j]['includes']('|')){e=j;break;}}if(e===-0x1)break;const f=splitTableRow(a[e]);let g=e+0x1;if(g<a['length']&&/^\s*\|[\s-:|]+\|\s*$/['test'](a[g]))g++;while(g<a['length']&&a[g]['trim']()['startsWith']('|')){const l=splitTableRow(a[g]);if(l['length']===0x0)break;const m={};for(let n=0x0;n<f['length'];n++)m[f[n]['trim']()]=(l[n]??'')['trim']();c['push'](m),g++;}break;}return c;}function splitTableRow(a){const b=a['trim']();if(!b['startsWith']('|'))return[];return b['slice'](0x1,b['endsWith']('|')?-0x1:undefined)['split']('|');}function parseStatusMap(a,b,c){const d=new Map(),e=c?parseMarkdownTable(a,c):parseMarkdownTable(a,'Verification\x20Checklist');for(const f of e){const g=f['verification_id']??f['check_id']??'';if(!g['startsWith'](b))continue;const h=(f['status']??'')['trim']();d['set'](g,h['includes']('✅')||h['toLowerCase']()['includes']('pass'));}return d;}function parseMetaTable(a){const b=new Map();for(const c of parseMarkdownTable(a,'Project\x20Metadata')){const d=c['field']??'',e=c['value']??'';if(d)b['set'](d['trim'](),e['trim']());}return b;}function extractJsonBlocks(a){const b=[];let c=0x0;while(c<a['length']){if(a[c]['trim']()['startsWith']('```json')){const d=[];let e=c+0x1;while(e<a['length']&&!a[e]['trim']()['startsWith']('```')){d['push'](a[e]),e++;}try{const f=JSON['parse'](d['join']('\x0a'));if(f&&typeof f==='object'&&'operation_type'in f){const g=f['env']??{},h=f['data']??{},k=f['substeps'],l=Array['isArray'](k)?k['map'](normalizeSubstep):undefined;b['push']({'step':typeof f['step']==='number'?f['step']:0x0,'operation_type':String(f['operation_type']??''),'data':h,'env':{'network':typeof g['network']==='string'?g['network']:undefined,'replaceExistName':typeof g['replaceExistName']==='boolean'?g['replaceExistName']:undefined,'forceClaim':typeof g['forceClaim']==='boolean'?g['forceClaim']:undefined,'confirmed':typeof g['confirmed']==='boolean'?g['confirmed']:undefined,...g},'substeps':l});}}catch{}c=e+0x1;}else c++;}return b;}function normalizeSubstep(a){if(!a||typeof a!=='object')return{'id':'','inputs':[],'outputs':[]};const b=a;return{'id':String(b['id']??''),'name':typeof b['name']==='string'?b['name']:undefined,'inputs':Array['isArray'](b['inputs'])?b['inputs']['map'](String):[],'outputs':Array['isArray'](b['outputs'])?b['outputs']['map'](String):[]};}function deriveProjectFromPath(a){const b=a['split'](/[\\/]/)['pop']()??'project';return b['replace'](/_v\d+_deployment\.md$/i,'')['replace'](/\.md$/i,'');}function*walkPermissionIndices(a){if(a===null||a===undefined||typeof a!=='object')return;if(Array['isArray'](a)){for(const c of a)yield*walkPermissionIndices(c);return;}const b=a;if(typeof b['permissionIndex']==='number')yield b['permissionIndex'];if(typeof b['permission_index']==='number')yield b['permission_index'];if(typeof b['index']==='number'&&b['__isPermission']===!![])yield b['index'];for(const d of Object['values'](b))yield*walkPermissionIndices(d);}function countMachineNodes(a){const b=a['data']?.['node'],c=b?.['nodes'];return Array['isArray'](c)?c['length']:0x0;}function deriveEntryIdFromBlock(a,b){const c=a['data']['object'];let d;if(typeof c==='string')d=c;else{if(c&&typeof c==='object'){const e=c;if(typeof e['name']==='string')d=e['name'];}}if(!d)return undefined;return b['objects']['find'](f=>f['name']===d)?.['entry_id'];}export function analyzeObjectDependencyCompleteness(a){const b=[];try{const c=normalizeInput(a);if(!c)return add(b,'D-01','critical','No\x20deployment\x20document\x20provided\x20(need\x20document_path\x20or\x20deployment_doc)'),b;const d=new Set(c['objects']['map'](h=>h['entry_id'])),f=new Set();for(const h of c['edges']){f['add'](h['from']),f['add'](h['to']);}for(const i of f){if(i['endsWith'](':*'))continue;!d['has'](i)&&add(b,'D-01','critical','Object\x20\x27'+i+'\x27\x20is\x20referenced\x20in\x20§1.2\x20but\x20not\x20defined\x20in\x20§1.1','§1.2\x20Dependency\x20Edges','Add\x20\x27'+i+'\x27\x20to\x20§1.1\x20Object\x20List\x20or\x20remove\x20the\x20reference.');}for(const j of c['edges']){const k=d['has'](j['from'])||j['from']['endsWith'](':*'),l=d['has'](j['to'])||j['to']['endsWith'](':*');(!k||!l)&&add(b,'D-02','critical','Dangling\x20dependency:\x20'+j['from']+'\x20→\x20'+j['to']+'\x20(edge_kind=\x27'+j['edge_kind']+'\x27)','§1.2\x20Dependency\x20Edges','Create\x20the\x20missing\x20object\x20or\x20remove\x20the\x20edge.');}for(const m of c['objects']['filter'](n=>n['object_type']==='guard')){const n=c['testnet_blocks']['some'](p=>p['operation_type']==='guard'&&p['data']['object']?.['name']===m['name']),o=c['testnet_blocks']['some'](p=>p['operation_type']==='passport'||p['data']['gen_passport']===!![]||p['data']['object']===m['name']);if(!n)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20create\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20guard\x20creation\x20JSON\x20block\x20for\x20\x27'+m['name']+'\x27.');if(!o)add(b,'D-08','critical','Guard\x20\x27'+m['entry_id']+'\x27\x20has\x20no\x20gen_passport\x20step\x20in\x20§3.2','§3.2\x20(guard:\x20'+m['name']+')','Add\x20a\x20passport/gen_passport\x20JSON\x20block\x20after\x20the\x20guard\x20creation\x20step.');}}catch(p){add(b,'D-01','warning','analyzeObjectDependencyCompleteness\x20failed:\x20'+p['message']);}return b;}export function analyzeSubstepCoherence(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of['testnet','mainnet']){const e=collectSubsteps(d==='testnet'?c['testnet_blocks']:c['mainnet_blocks'],d),f=traceSubsteps({'project_prefix':c['project_name'],'version':c['version'],'network':d,'substeps':e});emitCoherenceFindings(f,d,b);}}catch(g){add(b,'D-10','warning','analyzeSubstepCoherence\x20failed:\x20'+g['message']);}return b;}function collectSubsteps(a,b){const c=[],d=b==='testnet'?'T':'M';for(const e of a){if(!e['substeps'])continue;const f=''+d+e['step'];for(const g of e['substeps']){if(!g['id'])continue;c['push']({'step_id':g['id'],'parent_step':f,'object_type':e['operation_type'],'entry_id':'','operation_type':e['operation_type'],'network':b,'input':{'data':e['data'],'input_refs':g['inputs']},'timestamp':0x0,'status':'PENDING','dependencies':{'input_refs':g['inputs'],'output_refs':g['outputs']['map'](h=>({'substep_id':g['id'],'field_path':h}))}});}}return c;}function emitCoherenceFindings(a,e,f){for(const g of a['dangling_inputs']){add(f,'D-10','critical','['+e+']\x20Dangling\x20input:\x20substep\x20\x27'+g['substep_id']+'\x27\x20references\x20missing\x20\x27'+g['missing_ref']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+g['missing_ref']+'\x27\x20is\x20produced\x20by\x20an\x20earlier\x20substep.');}for(const h of a['circular_refs']){add(f,'D-10','critical','['+e+']\x20Circular\x20reference:\x20'+h['cycle']['join']('\x20→\x20'),e+'\x20§substeps','Break\x20the\x20cycle\x20by\x20removing\x20one\x20dependency.');}for(const i of a['missing_outputs']){add(f,'D-10','warning','['+e+']\x20Missing\x20output:\x20substep\x20\x27'+i['substep_id']+'\x27\x20did\x20not\x20produce\x20\x27'+i['expected_field']+'\x27',e+'\x20§substeps','Ensure\x20\x27'+i['substep_id']+'\x27\x20produces\x20\x27'+i['expected_field']+'\x27.');}for(const j of a['cross_step_breaks']){add(f,'D-10','critical','['+e+']\x20Cross-step\x20break:\x20failed\x20step\x20\x27'+j['source_step']+'\x27\x20blocks\x20\x27'+j['target_step']+'\x27',e+'\x20§substeps','Fix\x20step\x20\x27'+j['source_step']+'\x27\x20or\x20adjust\x20the\x20dependency.');}}export function analyzeNetworkConsistency(a){const c=[];try{const d=normalizeInput(a);if(!d)return[];const e=d['testnet_blocks'],f=d['mainnet_blocks'],g=d['topological_order'];if(g['length']>0x0&&e['length']>0x0)for(let h=0x0;h<e['length'];h++){const j=g[h];if(!j)break;const k=deriveEntryIdFromBlock(e[h],d);if(k&&k!==j){add(c,'D-04','critical','testnet\x20step\x20'+e[h]['step']+'\x20order\x20mismatch:\x20expected\x20\x27'+j+'\x27,\x20got\x20\x27'+k+'\x27','§3.2\x20testnet\x20JSON\x20Operation\x20Sequence','Reorder\x20testnet\x20JSON\x20blocks\x20to\x20match\x20§2\x20topological\x20order.');break;}}for(const l of e){if(l['env']['network']!=='testnet')add(c,'D-05','critical','testnet\x20step\x20'+l['step']+'\x20env.network\x20is\x20\x27'+(l['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27testnet\x27','§3.2\x20step\x20'+l['step'],'Set\x20env.network\x20=\x20\x27testnet\x27\x20on\x20all\x20§3.2\x20JSON\x20blocks.');}for(const n of e){if(n['env']['replaceExistName']!==!![])add(c,'D-06','critical','testnet\x20step\x20'+n['step']+'\x20env.replaceExistName\x20is\x20\x27'+(n['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20true','§3.2\x20step\x20'+n['step'],'Set\x20env.replaceExistName\x20=\x20true\x20on\x20all\x20§3.2\x20JSON\x20blocks\x20(testnet\x20allows\x20overwrite).');}if(e['length']!==f['length'])add(c,'D-11','critical','mainnet\x20step\x20count\x20('+f['length']+')\x20!=\x20testnet\x20step\x20count\x20('+e['length']+')','§3.2\x20vs\x20§4.2','Ensure\x20mainnet\x20JSON\x20blocks\x20correspond\x201:1\x20with\x20testnet\x20blocks.');else for(let o=0x0;o<f['length'];o++){const p=e[o],q=f[o];if(p['step']!==q['step'])add(c,'D-11','critical','mainnet\x20step\x20'+q['step']+'\x20does\x20not\x20match\x20testnet\x20step\x20'+p['step'],'§4.2\x20step\x20'+q['step'],'Ensure\x20mainnet\x20step\x20numbers\x20match\x20testnet.');if(p['operation_type']!==q['operation_type'])add(c,'D-11','critical','step\x20'+q['step']+'\x20operation_type\x20mismatch:\x20testnet=\x27'+p['operation_type']+'\x27,\x20mainnet=\x27'+q['operation_type']+'\x27','§4.2\x20step\x20'+q['step'],'Align\x20mainnet\x20operation_type\x20with\x20testnet.');}for(const r of f){if(r['env']['network']!=='mainnet')add(c,'D-12','critical','mainnet\x20step\x20'+r['step']+'\x20env.network\x20is\x20\x27'+(r['env']['network']??'(missing)')+'\x27,\x20expected\x20\x27mainnet\x27','§4.2\x20step\x20'+r['step'],'Set\x20env.network\x20=\x20\x27mainnet\x27\x20on\x20all\x20§4.2\x20JSON\x20blocks.');}for(const s of f){if(s['env']['replaceExistName']!==![]&&!s['env']['forceClaim'])add(c,'D-13','critical','mainnet\x20step\x20'+s['step']+'\x20env.replaceExistName\x20is\x20\x27'+(s['env']['replaceExistName']??'(missing)')+'\x27,\x20expected\x20false\x20(or\x20set\x20forceClaim=true)','§4.2\x20step\x20'+s['step'],'Set\x20env.replaceExistName\x20=\x20false\x20on\x20all\x20§4.2\x20JSON\x20blocks\x20(mainnet\x20must\x20not\x20overwrite).');}}catch(u){add(c,'D-04','warning','analyzeNetworkConsistency\x20failed:\x20'+u['message']);}return c;}const NAME_REGEX=/^[a-z][a-z0-9_]{2,63}$/;export function analyzeNamingConvention(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=c['project_name'],e='_'+c['version'];for(const f of c['objects']){if(f['reused_from'])continue;if(!NAME_REGEX['test'](f['name']))add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20match\x20'+NAME_REGEX,'§1.1\x20('+f['entry_id']+')','Rename\x20to\x20match\x20^[a-z][a-z0-9_]{2,63}$\x20and\x20start\x20with\x20project\x20prefix\x20\x27'+d+'\x27.');else d&&!f['name']['startsWith'](d+'_')&&add(b,'NAMING-01','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20does\x20not\x20start\x20with\x20project\x20prefix\x20\x27'+d+'_\x27','§1.1\x20('+f['entry_id']+')','Rename\x20to\x20start\x20with\x20\x27'+d+'_\x27.');e&&!f['name']['endsWith'](e)&&add(b,'NAMING-02','warning','Object\x20\x27'+f['entry_id']+'\x27\x20name\x20\x27'+f['name']+'\x27\x20is\x20missing\x20version\x20suffix\x20\x27'+e+'\x27','§1.1\x20('+f['entry_id']+')','Append\x20\x27'+e+'\x27\x20to\x20the\x20name.');}}catch(g){add(b,'NAMING-01','warning','analyzeNamingConvention\x20failed:\x20'+g['message']);}return b;}export function analyzePermissionIndexRange(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const e of d){for(const f of walkPermissionIndices(e['data'])){if(f<USER_DEFINED_PERM_INDEX_START)add(b,'D-07','critical','permissionIndex\x20'+f+'\x20<\x20'+USER_DEFINED_PERM_INDEX_START+'\x20(USER_DEFINED_PERM_INDEX_START)\x20in\x20step\x20'+e['step']+'\x20('+e['operation_type']+')',(e['env']['network']??'?')+'\x20step\x20'+e['step'],'Use\x20a\x20permissionIndex\x20>=\x20'+USER_DEFINED_PERM_INDEX_START+'.');}}for(const g of d){if(g['operation_type']!=='machine')continue;const h=countMachineNodes(g);if(h>MAX_NODE_COUNT)add(b,'D-09','critical','Machine\x20in\x20step\x20'+g['step']+'\x20has\x20'+h+'\x20nodes\x20>\x20MAX_NODE_COUNT\x20('+MAX_NODE_COUNT+')',(g['env']['network']??'?')+'\x20step\x20'+g['step'],'Reduce\x20node\x20count\x20to\x20<=\x20'+MAX_NODE_COUNT+'\x20or\x20split\x20into\x20multiple\x20Machines.');}}catch(i){add(b,'D-07','warning','analyzePermissionIndexRange\x20failed:\x20'+i['message']);}return b;}const REQUIRED_SCENARIO_KEYWORDS=['normal_order','refund','dispute','machine_publish','service_publish'];export function analyzeScenarioCoverage(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=new Set();for(const f of c['scenarios']){const g=(f['scenario_id']+'\x20'+f['description'])['toLowerCase']();for(const h of REQUIRED_SCENARIO_KEYWORDS){if(g['includes'](h['toLowerCase']()))d['add'](h);}}if(d['size']<0x3){const i=REQUIRED_SCENARIO_KEYWORDS['filter'](j=>!d['has'](j));add(b,'D-03','warning','Scenario\x20matrix\x20covers\x20'+d['size']+'/'+REQUIRED_SCENARIO_KEYWORDS['length']+'\x20required\x20keywords;\x20missing:\x20'+i['join'](',\x20'),'§1.3\x20Scenario\x20Matrix','Add\x20scenarios\x20covering\x20the\x20missing\x20keywords\x20(normal_order,\x20refund,\x20dispute,\x20machine_publish,\x20service_publish).');}const e=new Set(c['objects']['map'](j=>j['entry_id']));for(const j of c['scenarios']){const k=[j['primary_object'],...j['supporting_objects']];for(const l of k){if(l['endsWith'](':*'))continue;if(!e['has'](l))add(b,'D-03','warning','Scenario\x20\x27'+j['scenario_id']+'\x27\x20references\x20undefined\x20object\x20\x27'+l+'\x27','§1.3\x20('+j['scenario_id']+')','Add\x20\x27'+l+'\x27\x20to\x20§1.1\x20or\x20fix\x20the\x20scenario\x20reference.');}}}catch(m){add(b,'D-03','warning','analyzeScenarioCoverage\x20failed:\x20'+m['message']);}return b;}const TESTNET_VERIFICATION_ITEMS=['V-T-01','V-T-02','V-T-03','V-T-04','V-T-05','V-T-06','V-T-07','V-T-08','V-T-09','V-T-10','V-T-11'],MAINNET_VERIFICATION_ITEMS=['V-M-01','V-M-02','V-M-03','V-M-04','V-M-05'],COMPLETENESS_CHECK_IDS=Array['from']({'length':0x14},(a,b)=>'D-'+String(b+0x1)['padStart'](0x2,'0'));export function analyzeVerificationChecklist(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];for(const d of TESTNET_VERIFICATION_ITEMS){if(!c['testnet_verification']['has'](d))add(b,'D-14','warning','testnet\x20verification\x20item\x20\x27'+d+'\x27\x20is\x20missing\x20from\x20§3.3','§3.3\x20testnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+d+'\x27\x20to\x20§3.3.');}for(const e of MAINNET_VERIFICATION_ITEMS){if(!c['mainnet_verification']['has'](e))add(b,'D-15','warning','mainnet\x20verification\x20item\x20\x27'+e+'\x27\x20is\x20missing\x20from\x20§4.3','§4.3\x20mainnet\x20Verification\x20Checklist','Add\x20row\x20\x27'+e+'\x27\x20to\x20§4.3.');}for(const f of COMPLETENESS_CHECK_IDS){if(!c['completeness_checklist']['has'](f))add(b,'D-18','warning','completeness\x20checklist\x20item\x20\x27'+f+'\x27\x20is\x20missing\x20from\x20§6','§6\x20Completeness\x20Checklist','Add\x20row\x20\x27'+f+'\x27\x20to\x20§6.');}}catch(g){add(b,'D-14','warning','analyzeVerificationChecklist\x20failed:\x20'+g['message']);}return b;}export function analyzeDeployableReadiness(a){const b=[];try{const c=resolveRiskResult(a);if(!c)return add(b,'D-16','info','Risk\x20aggregation\x20result\x20not\x20available;\x20D-16/D-17\x20skipped\x20(provide\x20project_graph\x20with\x20puzzles,\x20or\x20set\x20deployment_doc.risk_status).',undefined,'Run\x20C2\x20risk-aggregator\x20first,\x20or\x20provide\x20deployment_doc.risk_status.'),b;const d=c['severity_summary']['CRITICAL']??0x0;if(d>0x0){const g=c['findings']['filter'](h=>h['severity']==='CRITICAL')['map'](h=>h['risk_rule_id'])['join'](',\x20');add(b,'D-16','critical',d+'\x20CRITICAL\x20risk(s)\x20remain:\x20'+g,'C2\x20risk-aggregator\x20output','Return\x20to\x20stage\x202\x20(business\x20puzzle)\x20and\x20fix\x20all\x20CRITICAL\x20risks\x20before\x20deploying.');}const e=new Set(a['user_confirmed_high_risks']??[]),f=c['findings']['filter'](h=>h['severity']==='HIGH'&&!e['has'](h['risk_rule_id']));if(f['length']>0x0){const h=f['map'](i=>i['risk_rule_id'])['join'](',\x20');add(b,'D-17','critical',f['length']+'\x20unconfirmed\x20HIGH\x20risk(s):\x20'+h,'C2\x20risk-aggregator\x20output','User\x20must\x20confirm\x20each\x20HIGH\x20risk\x20(ACCEPT_AND_PROCEED)\x20or\x20fix\x20them.');}}catch(i){add(b,'D-16','warning','analyzeDeployableReadiness\x20failed:\x20'+i['message']);}return b;}function resolveRiskResult(a){const b=a['project_graph'];if(b&&typeof b==='object'){const d=b;if(typeof d['severity_summary']==='object'&&Array['isArray'](d['findings']))return b;if(typeof d['project_prefix']==='string'&&typeof d['puzzles']==='object')try{return aggregateProjectRisks(b);}catch{}}const c=a['deployment_doc'];if(c&&c['risk_status']){const e=c['risk_critical_count']??0x0,f=c['risk_high_count']??0x0,g=[];for(let h=0x0;h<e;h++)g['push']({'risk_rule_id':'R-CRITICAL-'+h,'object_type':'service','entry_id':'*','severity':'CRITICAL','message':'(synthesized\x20from\x20deployment_doc.risk_critical_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});for(let j=0x0;j<f;j++)g['push']({'risk_rule_id':'R-HIGH-'+j,'object_type':'service','entry_id':'*','severity':'HIGH','message':'(synthesized\x20from\x20deployment_doc.risk_high_count)','fix_suggestion':'See\x20C2\x20risk-aggregator\x20report\x20for\x20details.'});return{'namespace':{'prefix':c['project_prefix'],'version':c['version'],'industry':c['industry']},'findings':g,'severity_summary':{'CRITICAL':e,'HIGH':f,'MEDIUM':0x0,'LOW':0x0,'INFO':0x0},'status':c['risk_status'],'calibrated_at':Date['now'](),'warnings':[]};}return undefined;}function extractMachinePairs(a){const b=a['data'];if(!b)return[];const c=b['node'];if(!c||typeof c!=='object')return[];const d=c['nodes'];if(!Array['isArray'](d))return[];return d['filter'](e=>{if(!e||typeof e!=='object')return![];const f=e['pairs'];return Array['isArray'](f);})['flatMap'](e=>e['pairs']??[]);}export function analyzeMachineAndServiceReadiness(a){const b=[];try{const c=normalizeInput(a);if(!c)return[];const d=[...c['testnet_blocks'],...c['mainnet_blocks']];for(const f of d){if(f['operation_type']!=='machine')continue;const g=extractMachinePairs(f);if(g['length']===0x0)continue;const h=g['filter'](i=>i['prev_node']==='');for(const i of h){const j=Array['isArray'](i['forwards'])?i['forwards']['length']:0x0;j===0x0&&add(b,'D-19','critical','Machine\x20in\x20step\x20'+f['step']+'\x20('+(f['env']['network']??'?')+')\x20has\x20an\x20entry\x20node\x20(prev_node=\x22\x22)\x20with\x20no\x20forwards.\x20'+'Progress\x20created\x20from\x20this\x20Machine\x20will\x20be\x20permanently\x20stuck\x20at\x20current=\x22\x22\x20(P0-2\x20root\x20cause).',(f['env']['network']??'?')+'\x20step\x20'+f['step'],'Add\x20at\x20least\x20one\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs.\x20Example:\x20pairs:\x20[{prev_node:\x20\x22\x22,\x20forwards:\x20[{next_node:\x20\x22Ordered\x22,\x20...}]}]');}}const e=d['filter'](k=>k['operation_type']==='service');if(e['length']>0x0){const k=e['filter'](l=>{const m=l['data'];return m?.['compensation_fund_add']!=null;});k['length']===0x0&&add(b,'D-20','warning','No\x20Service\x20block\x20in\x20the\x20deployment\x20doc\x20includes\x20a\x20compensation_fund_add\x20step.\x20'+'Without\x20deposit,\x20arbitration\x20rulings\x20that\x20award\x20refunds\x20to\x20buyers\x20cannot\x20be\x20paid\x20out\x20from\x20the\x20Service.\x20'+'Industries\x20like\x20freelance\x20may\x20not\x20require\x20this\x20(info),\x20but\x20rental/travel/education\x20typically\x20do.','§3.2\x20/\x20§4.2\x20Service\x20blocks','Add\x20a\x20compensation_fund_add\x20step\x20for\x20the\x20Service\x20(e.g.,\x20data.compensation_fund_add\x20=\x20{balance:\x20<amount>}).\x20'+'Recommended:\x203-10×\x20the\x20max\x20single-order\x20amount,\x20depending\x20on\x20industry\x20(subscription:\x203×,\x20retail:\x205×,\x20rental:\x2010×).\x20See\x20P1-1\x20evaluation\x20rule.');}}catch(l){add(b,'D-19','warning','analyzeMachineAndServiceReadiness\x20failed:\x20'+l['message']);}return b;}export function scanDeployment(a){const b=[...analyzeObjectDependencyCompleteness(a),...analyzeSubstepCoherence(a),...analyzeNetworkConsistency(a),...analyzeNamingConvention(a),...analyzePermissionIndexRange(a),...analyzeScenarioCoverage(a),...analyzeVerificationChecklist(a),...analyzeDeployableReadiness(a),...analyzeMachineAndServiceReadiness(a)];return{'project_name':a['project_name'],'document_path':a['document_path'],'overall_readiness':computeReadiness(b),'findings':b,'coverage':computeCoverage(a),'checks':computeChecks(b),'scanned_at':Date['now'](),'scanner_version':DEPLOYMENT_SCANNER_VERSION};}function computeChecks(a){const b=c=>a['some'](d=>d['check_id']===c);return{'D01_object_defined':b('D-01')?'fail':'pass','D02_dependency_complete':b('D-02')?'fail':'pass','D03_scenario_covered':b('D-03')?'fail':'pass','D04_testnet_topo_order':b('D-04')?'fail':'pass','D05_testnet_network':b('D-05')?'fail':'pass','D06_testnet_replace':b('D-06')?'fail':'pass','D07_permission_index':b('D-07')?'fail':'pass','D08_guard_gen_passport':b('D-08')?'fail':'pass','D09_machine_node_count':b('D-09')?'fail':'pass','D10_substep_coherence':b('D-10')?'fail':'pass','D11_mainnet_testnet_match':b('D-11')?'fail':'pass','D12_mainnet_network':b('D-12')?'fail':'pass','D13_mainnet_replace':b('D-13')?'fail':'pass','D14_testnet_verification':b('D-14')?'fail':'pass','D15_mainnet_verification':b('D-15')?'fail':'pass','D16_no_critical_risk':b('D-16')?'fail':'pass','D17_no_high_risk':b('D-17')?'fail':'pass','D18_completeness_checklist':b('D-18')?'fail':'pass','D19_machine_entry_forward':b('D-19')?'fail':'pass','D20_service_compensation_fund':b('D-20')?'fail':'pass'};}function computeCoverage(a){const b=normalizeInput(a);if(!b)return{'objects_defined':0x0,'objects_with_scenario':0x0,'testnet_steps':0x0,'mainnet_steps':0x0,'verification_items':0x0};const c=new Set();for(const e of b['scenarios']){c['add'](e['primary_object']);for(const f of e['supporting_objects'])c['add'](f);}const d=b['objects']['filter'](g=>c['has'](g['entry_id'])||c['has'](g['object_type']+':*'))['length'];return{'objects_defined':b['objects']['length'],'objects_with_scenario':d,'testnet_steps':b['testnet_blocks']['length'],'mainnet_steps':b['mainnet_blocks']['length'],'verification_items':b['testnet_verification']['size']+b['mainnet_verification']['size']};}function computeReadiness(a){const b=a['filter'](c=>c['check_id']['startsWith']('D-'));if(b['some'](c=>c['severity']==='critical'))return'blocked';if(b['some'](c=>c['severity']==='warning'))return'warnings';return'ready';}function normalizeInput(a){if(a['deployment_doc'])return fromDeploymentDocInput(a['deployment_doc']);if(a['document_path']){if(!a101a['existsSync'](a['document_path']))return undefined;return parseDeploymentMarkdown(a['document_path']);}return undefined;}export function isReady(a){return a['overall_readiness']==='ready';}export function isBlocked(a){return a['overall_readiness']==='blocked';}export function summarizeScan(a){const b=[];b['push']('#\x20Deployment\x20Scan\x20Report\x20—\x20'+a['project_name'],''),b['push']('-\x20**Overall\x20readiness**:\x20'+a['overall_readiness']),b['push']('-\x20**Scanned\x20at**:\x20'+new Date(a['scanned_at'])['toISOString']()),b['push']('-\x20**Scanner\x20version**:\x20'+a['scanner_version']);if(a['document_path'])b['push']('-\x20**Document**:\x20'+a['document_path']);b['push']('','##\x20Coverage','','|\x20Metric\x20|\x20Count\x20|','|--------|-------|'),b['push']('|\x20Objects\x20defined\x20|\x20'+a['coverage']['objects_defined']+'\x20|'),b['push']('|\x20Objects\x20with\x20scenario\x20|\x20'+a['coverage']['objects_with_scenario']+'\x20|'),b['push']('|\x20testnet\x20steps\x20|\x20'+a['coverage']['testnet_steps']+'\x20|'),b['push']('|\x20mainnet\x20steps\x20|\x20'+a['coverage']['mainnet_steps']+'\x20|'),b['push']('|\x20verification\x20items\x20|\x20'+a['coverage']['verification_items']+'\x20|',''),b['push']('##\x20Checks\x20(D-01\x20~\x20D-20)','','|\x20Check\x20ID\x20|\x20Status\x20|','|----------|--------|');const c=Object['entries'](a['checks']);for(const [d,e]of c)b['push']('|\x20'+d+'\x20|\x20'+(e==='pass'?'✅\x20pass':'❌\x20fail')+'\x20|');b['push']('','##\x20Findings\x20('+a['findings']['length']+')','');if(a['findings']['length']===0x0)b['push']('✅\x20No\x20issues\x20detected.','');else{const g=new Map();for(const h of a['findings']){const i=g['get'](h['severity'])??[];i['push'](h),g['set'](h['severity'],i);}for(const j of['critical','warning','info']){const k=g['get'](j);if(!k||k['length']===0x0)continue;b['push']('###\x20'+j['toUpperCase']()+'\x20('+k['length']+')','');for(const l of k){b['push']('-\x20**['+l['check_id']+']**\x20'+l['message']);if(l['location'])b['push']('\x20\x20-\x20Location:\x20'+l['location']);if(l['suggestion'])b['push']('\x20\x20-\x20Suggestion:\x20'+l['suggestion']);b['push']('');}}}return b['push']('---','','*End\x20of\x20report.*'),b['join']('\x0a');}export const DEPLOYMENT_SCANNER_VERSION='2.0.0';
@@ -27,5 +27,3 @@ export interface MutableFieldInfo {
27
27
  export declare const DYNAMIC_PRICING_VERSION = 1;
28
28
  export declare const MUTABLE_FIELDS: MutableFieldInfo[];
29
29
  export declare function suggestPricing(signals: MarketSignals): PricingSuggestion;
30
- export declare function getMutableFields(published?: boolean): MutableFieldInfo[];
31
- export declare function getMutableField(field: string): MutableFieldInfo | undefined;
@@ -1 +1 @@
1
- export const DYNAMIC_PRICING_VERSION=0x1;export const MUTABLE_FIELDS=[{'field':'sales','purpose':'Adjust\x20product/price','mutableAfterPublish':!![],'adjustmentMechanism':'Service.sales\x20mutable','metricToWatch':'Order\x20rate'},{'field':'discount','purpose':'Marketing\x20promotion','mutableAfterPublish':!![],'adjustmentMechanism':'add/set/destroy','metricToWatch':'Conversion\x20rate'},{'field':'description','purpose':'Trust\x20description','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Browse\x20duration'},{'field':'rewards','purpose':'Reward\x20marketing\x20campaigns','mutableAfterPublish':!![],'adjustmentMechanism':'add/remove','metricToWatch':'Repeat\x20rate'},{'field':'arbitrations','purpose':'Arbitration\x20upgrade','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Arbitration\x20rate'},{'field':'compensation_fund','purpose':'Trust\x20enhancement','mutableAfterPublish':!![],'adjustmentMechanism':'add','metricToWatch':'Trust\x20score'},{'field':'buy_guard','purpose':'Purchase\x20threshold','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Order\x20rate'},{'field':'pause','purpose':'Pause/resume','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Inventory\x20status'},{'field':'machine','purpose':'Workflow\x20template','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Process\x20speed'},{'field':'order_allocators','purpose':'Fund\x20allocation','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Allocation\x20fairness'},{'field':'type_parameter','purpose':'Payment\x20token','mutableAfterPublish':![],'adjustmentMechanism':'Immutable,\x20can\x20create\x20new\x20Service\x20+\x20Reward\x20to\x20guide\x20migration','metricToWatch':'Token\x20preference'}];export function suggestPricing(a){const {supplyCount:b,demandCount:c,avgPrice:d,myPrice:e,competitorPrices:f,recentOrderCount:g,repeatCustomerRate:h}=a,i=c/Math['max'](0x1,b);if(i>0x2){const j=Math['min'](0x1e,Math['round']((i-0x1)*0xa));return{'action':'increase','adjustmentPercent':j,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20demand\x20exceeds\x20supply,\x20suggest\x20price\x20increase\x20of\x20'+j+'%','confidence':Math['min'](0.9,0.5+i*0.1)};}if(i<0.5){const k=Math['min'](0x14,Math['round']((0x1-i)*0xf));return{'action':'decrease','adjustmentPercent':k,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20supply\x20exceeds\x20demand,\x20suggest\x20price\x20decrease\x20of\x20'+k+'%\x20to\x20improve\x20competitiveness','confidence':Math['min'](0.85,0.5+(0x1-i)*0.15)};}if(e&&f&&f['length']>0x0)try{const l=BigInt(e),m=f['map'](o=>BigInt(o)),n=m['reduce']((o,p)=>o+p,0x0n)/BigInt(m['length']);if(l>n*0x78n/0x64n)return{'action':'decrease','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20above\x20market\x20average,\x20suggest\x20price\x20decrease\x20to\x20improve\x20competitiveness','confidence':0.7};if(l<n*0x50n/0x64n)return{'action':'increase','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20below\x20market\x20average,\x20room\x20for\x20price\x20increase','confidence':0.65};}catch{}if(h!==undefined&&h>0.4)return{'action':'maintain','reason':'Repeat\x20customer\x20rate\x20'+Math['round'](h*0x64)+'%,\x20pricing\x20strategy\x20effective,\x20suggest\x20maintaining','confidence':0.8};if(h!==undefined&&h<0.1&&(g??0x0)>0xa)return{'action':'decrease','adjustmentPercent':0x5,'reason':'Repeat\x20customer\x20rate\x20only\x20'+Math['round'](h*0x64)+'%,\x20suggest\x20slight\x20price\x20decrease\x20or\x20add\x20Reward\x20to\x20attract\x20repeat\x20purchases','confidence':0.6};return{'action':'maintain','reason':'Market\x20supply\x20and\x20demand\x20balanced,\x20suggest\x20maintaining\x20current\x20pricing','confidence':0.5};}export function getMutableFields(a=!![]){return MUTABLE_FIELDS['filter'](b=>a?b['mutableAfterPublish']:!![]);}export function getMutableField(a){return MUTABLE_FIELDS['find'](b=>b['field']===a);}
1
+ export const DYNAMIC_PRICING_VERSION=0x1;export const MUTABLE_FIELDS=[{'field':'sales','purpose':'Adjust\x20product/price','mutableAfterPublish':!![],'adjustmentMechanism':'Service.sales\x20mutable','metricToWatch':'Order\x20rate'},{'field':'discount','purpose':'Marketing\x20promotion','mutableAfterPublish':!![],'adjustmentMechanism':'add/set/destroy','metricToWatch':'Conversion\x20rate'},{'field':'description','purpose':'Trust\x20description','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Browse\x20duration'},{'field':'rewards','purpose':'Reward\x20marketing\x20campaigns','mutableAfterPublish':!![],'adjustmentMechanism':'add/remove','metricToWatch':'Repeat\x20rate'},{'field':'arbitrations','purpose':'Arbitration\x20upgrade','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Arbitration\x20rate'},{'field':'compensation_fund','purpose':'Trust\x20enhancement','mutableAfterPublish':!![],'adjustmentMechanism':'add','metricToWatch':'Trust\x20score'},{'field':'buy_guard','purpose':'Purchase\x20threshold','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Order\x20rate'},{'field':'pause','purpose':'Pause/resume','mutableAfterPublish':!![],'adjustmentMechanism':'mutable','metricToWatch':'Inventory\x20status'},{'field':'machine','purpose':'Workflow\x20template','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Process\x20speed'},{'field':'order_allocators','purpose':'Fund\x20allocation','mutableAfterPublish':![],'adjustmentMechanism':'Locked\x20after\x20publish,\x20new\x20Service\x20required','metricToWatch':'Allocation\x20fairness'},{'field':'type_parameter','purpose':'Payment\x20token','mutableAfterPublish':![],'adjustmentMechanism':'Immutable,\x20can\x20create\x20new\x20Service\x20+\x20Reward\x20to\x20guide\x20migration','metricToWatch':'Token\x20preference'}];export function suggestPricing(a){const {supplyCount:b,demandCount:c,avgPrice:d,myPrice:e,competitorPrices:f,recentOrderCount:g,repeatCustomerRate:h}=a,i=c/Math['max'](0x1,b);if(i>0x2){const j=Math['min'](0x1e,Math['round']((i-0x1)*0xa));return{'action':'increase','adjustmentPercent':j,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20demand\x20exceeds\x20supply,\x20suggest\x20price\x20increase\x20of\x20'+j+'%','confidence':Math['min'](0.9,0.5+i*0.1)};}if(i<0.5){const k=Math['min'](0x14,Math['round']((0x1-i)*0xf));return{'action':'decrease','adjustmentPercent':k,'reason':'Demand/supply\x20ratio\x20'+i['toFixed'](0x1)+',\x20market\x20supply\x20exceeds\x20demand,\x20suggest\x20price\x20decrease\x20of\x20'+k+'%\x20to\x20improve\x20competitiveness','confidence':Math['min'](0.85,0.5+(0x1-i)*0.15)};}if(e&&f&&f['length']>0x0)try{const l=BigInt(e),m=f['map'](o=>BigInt(o)),n=m['reduce']((o,p)=>o+p,0x0n)/BigInt(m['length']);if(l>n*0x78n/0x64n)return{'action':'decrease','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20above\x20market\x20average,\x20suggest\x20price\x20decrease\x20to\x20improve\x20competitiveness','confidence':0.7};if(l<n*0x50n/0x64n)return{'action':'increase','adjustmentPercent':0xa,'reason':'Current\x20price\x20is\x2020%+\x20below\x20market\x20average,\x20room\x20for\x20price\x20increase','confidence':0.65};}catch{}if(h!==undefined&&h>0.4)return{'action':'maintain','reason':'Repeat\x20customer\x20rate\x20'+Math['round'](h*0x64)+'%,\x20pricing\x20strategy\x20effective,\x20suggest\x20maintaining','confidence':0.8};if(h!==undefined&&h<0.1&&(g??0x0)>0xa)return{'action':'decrease','adjustmentPercent':0x5,'reason':'Repeat\x20customer\x20rate\x20only\x20'+Math['round'](h*0x64)+'%,\x20suggest\x20slight\x20price\x20decrease\x20or\x20add\x20Reward\x20to\x20attract\x20repeat\x20purchases','confidence':0.6};return{'action':'maintain','reason':'Market\x20supply\x20and\x20demand\x20balanced,\x20suggest\x20maintaining\x20current\x20pricing','confidence':0.5};}
@@ -0,0 +1,20 @@
1
+ export type EventCategory = "lifecycle" | "state_change" | "fund_flow" | "market_opportunity" | "reputation" | "other";
2
+ export interface EventParamDoc {
3
+ name: string;
4
+ shape: string;
5
+ meaning: string;
6
+ }
7
+ export interface EventSemanticEntry {
8
+ name: string;
9
+ move_type: string;
10
+ module: string;
11
+ category: EventCategory;
12
+ business_meaning: string;
13
+ trigger: string;
14
+ side_effect?: string;
15
+ params: EventParamDoc[];
16
+ }
17
+ export declare const EVENT_SEMANTIC_REGISTRY: EventSemanticEntry[];
18
+ export declare const EVENT_BY_NAME: Map<string, EventSemanticEntry>;
19
+ export declare const EVENT_BY_MOVE_TYPE: Map<string, EventSemanticEntry>;
20
+ export declare function lookupEventMeaning(event: Record<string, unknown>): string | undefined;
@@ -0,0 +1 @@
1
+ export const EVENT_SEMANTIC_REGISTRY=[{'name':'NewOrderEvent','move_type':'::order::NewOrderEvent','module':'order','category':'lifecycle','business_meaning':'A\x20new\x20Order\x20was\x20placed\x20on\x20a\x20Service\x20(shared,\x20escrow-funded)','trigger':'order.move\x20`create`\x20—\x20the\x20ONLY\x20emission\x20point.\x20Fires\x20when\x20the\x20order\x20becomes\x20a\x20shared\x20object;\x20'+'validates:\x20machine\x20⇒\x20progress\x20bound;\x20amount\x20>\x200\x20⇒\x20allocation\x20bound.','side_effect':'Order\x20is\x20live:\x20buyer\x20funds\x20were\x20split\x20into\x20CoinWrappers\x20via\x20the\x20Service\x20Allocation;\x20'+'machine-governed\x20orders\x20can\x20now\x20be\x20advanced\x20by\x20operators.','params':[{'name':'object','shape':'address','meaning':'The\x20new\x20Order\x20object\x20id'},{'name':'service','shape':'address','meaning':'The\x20Service\x20the\x20order\x20was\x20placed\x20on'},{'name':'progress','shape':'Option<address>','meaning':'Bound\x20Progress\x20(machine\x20orders)\x20—\x20null\x20for\x20non-machine\x20orders'},{'name':'discount','shape':'Option<address>','meaning':'Discount\x20object\x20consumed\x20at\x20quote\x20time,\x20if\x20any'},{'name':'allocation','shape':'Option<address>','meaning':'Allocation\x20that\x20escrowed\x20the\x20payment\x20(required\x20when\x20amount\x20>\x200)'},{'name':'amount','shape':'u64','meaning':'Total\x20order\x20amount\x20in\x20the\x20Service\x27s\x20payment\x20token\x20(raw\x20on-chain\x20units)'}]},{'name':'ArbEvent','move_type':'::arb::ArbEvent','module':'arb','category':'state_change','business_meaning':'Arbitration\x20case\x20status\x20transition\x20(7\x20statuses,\x20incl.\x20creation)','trigger':'arb.move\x20—\x20emitted\x20on\x20EVERY\x20status\x20transition:\x20create\x20(Arbitrator_confirming),\x20'+'proposition_change\x20/\x20principal\x20confirm\x20(Voting),\x20votes\x20closed\x20(Arbitrated),\x20objection\x20'+'(Objectionable),\x20finish\x20with\x20indemnity\x20(Finished\x20+\x20compensation),\x20withdraw\x20(Withdrawn).\x20'+'Helper\x20`emit_arb_event`\x20reads\x20the\x20POST-transition\x20state.','side_effect':'Parties\x20should\x20re-read\x20the\x20Arb\x20object\x20on\x20every\x20event;\x20status\x20decides\x20who\x20acts\x20next.\x20'+'When\x20indemnity_amount\x20is\x20set,\x20the\x20compensation\x20recipient\x20can\x20claim\x20after\x20compensation_time.','params':[{'name':'object','shape':'address','meaning':'The\x20Arb\x20(dispute\x20case)\x20object\x20id'},{'name':'arbitration','shape':'address','meaning':'The\x20governing\x20Arbitration\x20object\x20(voting\x20rules,\x20arbitrator\x20set)'},{'name':'order','shape':'address','meaning':'The\x20disputed\x20Order'},{'name':'status','shape':'u8','meaning':'0\x20Principal_confirming\x20·\x201\x20Arbitrator_confirming\x20·\x202\x20Voting\x20·\x203\x20Arbitrated\x20·\x204\x20Objectionable\x20·\x205\x20Finished\x20·\x206\x20Withdrawn'},{'name':'indemnity_amount','shape':'Option<u64>','meaning':'Awarded\x20compensation\x20(set\x20on\x20Arbitrated/Finished);\x20null\x20otherwise'},{'name':'compensation_time','shape':'Option<u64>','meaning':'Timestamp-ms\x20after\x20which\x20the\x20compensation\x20can\x20be\x20withdrawn\x20(locks\x20expire)'}]},{'name':'VoteEvent','move_type':'::arb::VoteEvent','module':'arb','category':'state_change','business_meaning':'One\x20arbitration\x20vote\x20cast\x20(real-time\x20tally)','trigger':'arb.move\x20—\x20on\x20each\x20`vote`/`vote_with_passport`\x20call\x20(one\x20per\x20voter\x20per\x20round);\x20'+'lets\x20parties\x20track\x20the\x20tally\x20without\x20polling\x20the\x20Arb\x20object.','params':[{'name':'object','shape':'address','meaning':'The\x20Arb\x20object\x20being\x20voted\x20on'},{'name':'voter','shape':'address','meaning':'The\x20voting\x20arbitrator\x20(or\x20passport-proven\x20delegate)'},{'name':'agrees','shape':'vector<u8>','meaning':'Proposition\x20indexes\x20the\x20voter\x20agreed\x20to'},{'name':'weight','shape':'u32','meaning':'Vote\x20weight\x20applied\x20(guard-weighted\x20voting)'}]},{'name':'FeedbackEvent','move_type':'::arb::FeedbackEvent','module':'arb','category':'state_change','business_meaning':'New\x20feedback\x20message\x20on\x20an\x20arbitration\x20case','trigger':'arb.move\x20—\x20on\x20`feedback`\x20(any\x20party\x20posts\x20a\x20message\x20into\x20the\x20case).','params':[{'name':'object','shape':'address','meaning':'The\x20Arb\x20object'},{'name':'feedback','shape':'String','meaning':'The\x20feedback\x20text'}]},{'name':'DemandPresentEvent','move_type':'::demand::PresentEvent','module':'demand','category':'market_opportunity','business_meaning':'A\x20presenter\x20submitted/updated\x20a\x20solution\x20pitch\x20on\x20a\x20Demand','trigger':'demand.move\x20`present_imp`\x20—\x20first\x20present\x20inserts\x20a\x20presenter\x20row;\x20re-present\x20updates\x20it\x20'+'(recommend\x20text\x20+\x20optional\x20bound\x20Service).\x20Passport-gated\x20variants\x20resolve\x20the\x20Service\x20from\x20'+'the\x20passport\x20submission\x20when\x20the\x20demand\x27s\x20guard\x20sets\x20a\x20service_identifier.','side_effect':'Demand\x20owner\x20now\x20has\x20a\x20candidate;\x20track\x20update_time\x20to\x20rank\x20freshest\x20pitches.\x20'+'This\x20is\x20the\x20supply\x20side\x20of\x20the\x20demand\x20marketplace\x20(K3\x2013\x20§6.7).','params':[{'name':'object','shape':'address','meaning':'The\x20Demand\x20object'},{'name':'service','shape':'Option<address>','meaning':'The\x20presented\x20Service\x20(null\x20=\x20raw\x20recommendation\x20without\x20a\x20bound\x20service)'},{'name':'recommend','shape':'String','meaning':'The\x20presenter\x27s\x20pitch/recommendation\x20text'}]},{'name':'DemandFeedbackEvent','move_type':'::demand::DemandEvent','module':'demand','category':'reputation','business_meaning':'Demand\x20owner\x20scored/feedbacked\x20a\x20presenter\x20(acceptance\x20score)','trigger':'demand.move\x20`feedback_imp`\x20—\x20only\x20for\x20addresses\x20already\x20in\x20the\x20presenters\x20table;\x20'+'records\x20feedback\x20text\x20+\x20optional\x20acceptance\x20score\x20onto\x20the\x20presenter\x20row.','side_effect':'Acceptance\x20score\x20is\x20the\x20demand-side\x20quality\x20signal\x20for\x20the\x20presenter;\x20high\x20scores\x20build\x20'+'presenter\x20reputation\x20for\x20future\x20matching.','params':[{'name':'object','shape':'address','meaning':'The\x20Demand\x20object'},{'name':'service','shape':'Option<address>','meaning':'The\x20Service\x20that\x20was\x20presented\x20by\x20the\x20scored\x20presenter'},{'name':'feedback','shape':'String','meaning':'Feedback\x20text'},{'name':'acceptance_score','shape':'Option<u8>','meaning':'0-100\x20acceptance\x20score,\x20null\x20when\x20feedback\x20carries\x20no\x20score'}]},{'name':'DemandChangedEvent','move_type':'::demand::DemandChangedEvent','module':'demand','category':'market_opportunity','business_meaning':'Demand\x20became/updated\x20a\x20profitable\x20opportunity\x20for\x20merchants\x20(market-opportunity\x20event)','trigger':'demand.move\x20`demand_changed_event_emit`\x20—\x20fires\x20when\x20rewards\x20are\x20bound/changed,\x20or\x20'+'description/location\x20changes\x20while\x20reward-bearing.\x20A\x20reward-less\x20demand\x20NEVER\x20emits\x20'+'(not\x20a\x20profitable\x20opportunity\x20—\x20K3\x2013\x20§6.7\x20principle).','side_effect':'PRIMARY\x20merchant-side\x20discovery\x20signal:\x20Intent\x20Radar\x20/\x20match\x20engines\x20should\x20treat\x20every\x20'+'emission\x20as\x20a\x20fresh\x20matchmaking\x20opportunity.\x20Reward\x20amounts/claim\x20rules\x20are\x20NOT\x20carried\x20—\x20'+'read\x20the\x20Reward\x20objects\x20by\x20id\x20(authoritative,\x20never\x20stale).','params':[{'name':'object','shape':'address','meaning':'The\x20Demand\x20object'},{'name':'location','shape':'String','meaning':'Demand\x20location\x20(industry/geography\x20routing\x20signal)'},{'name':'description','shape':'String','meaning':'Bounded\x20description\x20preview\x20(truncated\x20on-chain;\x20full\x20text\x20on\x20the\x20object)'},{'name':'rewards','shape':'vector<address>','meaning':'Bound\x20Reward\x20object\x20ids\x20—\x20resolve\x20amounts/conditions\x20by\x20query_objects'}]},{'name':'ProgressEvent','move_type':'::progress::ProgressEvent','module':'progress','category':'state_change','business_meaning':'Order/task\x20workflow\x20advanced,\x20held,\x20or\x20initialized\x20on\x20a\x20Machine\x20graph','trigger':'progress.move\x20—\x204\x20emission\x20points:\x20`new_imp`\x20(progress\x20created\x20at\x20init\x20node,\x20no\x20forward),\x20'+'`session_accomplish`\x20(threshold\x20reached\x20→\x20node\x20migrated),\x20`hold_imp`/`hold_imp_with_passport`\x20'+'(hold\x20or\x20un-hold\x20of\x20a\x20forward,\x20hold\x20field\x20carries\x20the\x20new\x20state).','side_effect':'Operators\x20should\x20check\x20the\x20new\x20node\x20name\x20against\x20their\x20Machine\x20duties;\x20hold=true\x20pauses\x20that\x20'+'forward\x27s\x20contribution,\x20hold=false\x20resumes\x20it.','params':[{'name':'object','shape':'address','meaning':'The\x20Progress\x20object'},{'name':'machine','shape':'address','meaning':'The\x20Machine\x20(workflow\x20template)\x20governing\x20this\x20progress'},{'name':'task','shape':'Option<address>','meaning':'The\x20bound\x20task\x20(usually\x20the\x20Order)\x20—\x20null\x20for\x20standalone\x20progress'},{'name':'node','shape':'String','meaning':'Node\x20reached\x20(init\x20node\x20on\x20creation;\x20next_node\x20on\x20migration/hold)'},{'name':'forward','shape':'Option<String>','meaning':'The\x20forward\x20name\x20that\x20triggered\x20the\x20transition\x20(null\x20on\x20creation)'},{'name':'hold','shape':'Option<bool>','meaning':'Present\x20only\x20on\x20hold/un-hold:\x20true\x20=\x20forward\x20held,\x20false\x20=\x20released'}]},{'name':'NewEntityEvent','move_type':'::registrar::NewEntityEvent','module':'registrar','category':'lifecycle','business_meaning':'Entity\x20registered\x20or\x20re-announced\x20(new\x20counterparty\x20/\x20profile\x20update)','trigger':'registrar.move\x20—\x204\x20sites:\x20entity_register\x20/\x20entity_register_with_resource_forced\x20(new\x20Resource\x20'+'created),\x20entity_resource_use\x20(first\x20on-chain\x20use\x20of\x20a\x20resource),\x20entity_description_set,\x20'+'entity_info_add\x20(profile\x20updates\x20re-announce\x20the\x20entity).','side_effect':'A\x20new\x20potential\x20counterparty\x20entered\x20the\x20ecosystem,\x20or\x20an\x20existing\x20one\x20updated\x20its\x20public\x20'+'profile\x20—\x20refresh\x20cached\x20entity\x20profiles/records.','params':[{'name':'resource','shape':'address','meaning':'The\x20entity\x27s\x20Resource\x20object\x20(per-chain\x20identity\x20resource)'},{'name':'referrer','shape':'Option<address>','meaning':'Referring\x20entity\x20address,\x20when\x20registered\x20via\x20referral'}]},{'name':'ServiceEvent','move_type':'::service::ServiceEvent','module':'service','category':'market_opportunity','business_meaning':'Service\x20became/updated\x20a\x20purchasable\x20supply\x20(active-supply\x20event)','trigger':'service.move\x20`service_event_emit`\x20—\x20ONLY\x20when\x20bPublished\x20&&\x20!bPaused\x20at\x20the\x20mutation\x20point:\x20'+'publish,\x20unpause,\x20and\x20pre-publish\x20description\x20changes\x20re-notify.\x20Pausing\x20/\x20unpublishing\x20/\x20'+'draft-only\x20mutations\x20NEVER\x20emit\x20(not\x20a\x20participatable\x20opportunity\x20—\x20K3\x2013\x20§6.7).','side_effect':'PRIMARY\x20customer-side\x20discovery\x20signal:\x20every\x20emission\x20is\x20a\x20buyable\x20service\x20with\x20its\x20routing\x20'+'text.\x20The\x20authoritative\x20description/sales/stock\x20live\x20on\x20the\x20Service\x20object\x20by\x20id.','params':[{'name':'object','shape':'address','meaning':'The\x20Service\x20object'},{'name':'location','shape':'String','meaning':'Service\x20location\x20(industry/geography\x20routing\x20signal)'},{'name':'description','shape':'String','meaning':'Bounded\x20description\x20preview\x20(truncated\x20on-chain)'}]},{'name':'AllocationEvent','move_type':'::allocation::AllocationEvent','module':'allocation','category':'fund_flow','business_meaning':'Allocation\x20run\x20completed\x20—\x20funds\x20left\x20the\x20Allocation\x20pool\x20as\x20a\x20Payment','trigger':'allocation.move\x20alloc\x20loop\x20—\x20when\x20a\x20matching\x20Allocator\x27s\x20guard\x20passes:\x20splits\x20the\x20balance\x20per\x20'+'sharing\x20mode\x20(Amount\x20/\x20Rate\x20‰\x20/\x20Surplus),\x20creates\x20a\x20Payment\x20(from_object\x20=\x20Allocation),\x20'+'then\x20emits\x20with\x20the\x20actually-distributed\x20amount.','side_effect':'Recipients\x20receive\x20CoinWrappers\x20referencing\x20the\x20new\x20Payment\x20—\x20they\x20must\x20unwrap\x20to\x20obtain\x20coins.\x20'+'The\x20Payment\x20is\x20also\x20pushed\x20onto\x20the\x20Allocation\x27s\x20payment\x20list.','params':[{'name':'object','shape':'address','meaning':'The\x20Allocation\x20object\x20that\x20distributed\x20the\x20funds'},{'name':'payment','shape':'address','meaning':'The\x20Payment\x20object\x20created\x20by\x20this\x20run\x20(the\x20on-chain\x20receipt)'},{'name':'guard','shape':'address','meaning':'The\x20guard\x20of\x20the\x20Allocator\x20that\x20authorized\x20this\x20distribution'},{'name':'amount','shape':'u64','meaning':'Amount\x20actually\x20distributed\x20(balance\x20before\x20−\x20balance\x20after)'}]},{'name':'TreasuryEvent','move_type':'::treasury::TreasuryEvent','module':'treasury','category':'fund_flow','business_meaning':'Treasury\x20fund-flow\x20record\x20(withdraw\x20/\x20deposit\x20/\x20receive)\x20—\x20mirrors\x20on-chain\x20history','trigger':'treasury.move\x20—\x203\x20sites:\x20withdraw_imp\x20(balance\x20split\x20out\x20as\x20Payment,\x20from_object\x20=\x20Treasury),\x20'+'deposit_imp_\x20(coins\x20joined\x20in,\x20a\x20Payment\x20receipt\x20is\x20minted\x20for\x20the\x20depositor),\x20receive_imp\x20'+'(a\x20CoinWrapper\x20from\x20a\x20Payment\x20is\x20received\x20into\x20the\x20treasury).\x20Each\x20emission\x20appends\x20a\x20Record\x20'+'to\x20the\x20treasury\x27s\x20on-chain\x20history\x20parent\x20table.','params':[{'name':'object','shape':'address','meaning':'The\x20Treasury\x20object'},{'name':'op','shape':'u8','meaning':'0\x20Withdraw\x20·\x201\x20Deposit\x20·\x202\x20Receive'},{'name':'payment','shape':'address','meaning':'The\x20Payment\x20receipt\x20minted\x20for\x20this\x20flow'},{'name':'amount','shape':'u64','meaning':'Flow\x20amount\x20(raw\x20on-chain\x20units\x20of\x20the\x20Treasury\x27s\x20token)'},{'name':'external_guard','shape':'Option<address>','meaning':'External\x20withdraw\x20guard\x20that\x20authorized\x20a\x20withdraw,\x20if\x20any'},{'name':'store_from_id','shape':'Option<address>','meaning':'Passport-derived\x20store/branch\x20id\x20(multi-branch\x20treasury\x20bookkeeping)'}]},{'name':'RewardClaimEvent','move_type':'::reward::RewardClaimEvent','module':'reward','category':'fund_flow','business_meaning':'Reward\x20claimed\x20—\x20funds\x20paid\x20out\x20of\x20a\x20Reward\x20pool','trigger':'reward.move\x20claim\x20path\x20—\x20after\x20guard+passport\x20validation:\x20appends\x20a\x20Record\x20to\x20the\x20recipient\x27s\x20'+'on-chain\x20record,\x20splits\x20the\x20balance,\x20emits,\x20then\x20transfers\x20the\x20coin\x20to\x20the\x20recipient.\x20'+'The\x20ONLY\x20realtime\x20trace\x20of\x20the\x20claim\x20outflow.','params':[{'name':'object','shape':'address','meaning':'The\x20Reward\x20pool\x20object'},{'name':'guard','shape':'address','meaning':'The\x20reward\x20guard\x20that\x20authorized\x20this\x20claim'},{'name':'recipient','shape':'address','meaning':'Claim\x20recipient\x20(resolved\x20via\x20passport\x20when\x20required)'},{'name':'amount','shape':'u64','meaning':'This\x20claim\x27s\x20amount'},{'name':'total','shape':'u64','meaning':'Recipient\x27s\x20cumulative\x20claimed\x20total\x20on\x20this\x20pool'},{'name':'balance_left','shape':'u64','meaning':'Pool\x20balance\x20remaining\x20after\x20the\x20claim'},{'name':'store_from_id','shape':'Option<address>','meaning':'Passport-derived\x20store/branch\x20id,\x20when\x20the\x20guard\x20requires\x20it'}]},{'name':'RewardFundEvent','move_type':'::reward::RewardFundEvent','module':'reward','category':'fund_flow','business_meaning':'Reward\x20pool\x20inflow\x20—\x20funds\x20added\x20to\x20the\x20pool','trigger':'reward.move\x20—\x202\x20sites:\x20coin_add_imp\x20(direct\x20coin\x20deposit,\x20from_payment\x20=\x20null)\x20and\x20receive_imp\x20'+'(a\x20Payment\x27s\x20CoinWrapper\x20received\x20into\x20the\x20pool,\x20from_payment\x20=\x20that\x20Payment).','side_effect':'Claim\x20guards\x20whose\x20pool\x20ran\x20dry\x20become\x20satisfiable\x20again;\x20watchers\x20should\x20re-check\x20claim\x20'+'opportunities\x20against\x20the\x20new\x20balance.','params':[{'name':'object','shape':'address','meaning':'The\x20Reward\x20pool\x20object'},{'name':'amount','shape':'u64','meaning':'Inflow\x20amount'},{'name':'balance','shape':'u64','meaning':'Pool\x20balance\x20after\x20the\x20inflow'},{'name':'from_payment','shape':'Option<address>','meaning':'The\x20Payment\x20that\x20funded\x20this\x20inflow\x20(null\x20for\x20direct\x20coin\x20adds)'}]},{'name':'NewPaymentEvent','move_type':'::payment::NewPaymentEvent','module':'payment','category':'fund_flow','business_meaning':'A\x20Payment\x20was\x20created\x20—\x20the\x20universal\x20on-chain\x20receipt\x20of\x20WoWok\x20fund\x20flows','trigger':'payment.move\x20`create`\x20—\x20the\x20ONLY\x20emission\x20point,\x20reached\x20by\x20treasury\x20withdraw/deposit,\x20'+'allocation\x20runs,\x20service\x20compensation\x20payouts,\x20and\x20direct\x20user\x20payments\x20alike.\x20'+'Emission\x20is\x20the\x20last\x20step\x20before\x20the\x20Payment\x20object\x20is\x20frozen\x20(immutable\x20receipt).','side_effect':'Every\x20recipient\x20in\x20`record`\x20received\x20a\x20frozen\x20CoinWrapper\x20that\x20references\x20this\x20Payment\x20—\x20'+'unwrap\x20converts\x20it\x20to\x20a\x20transferable\x20Coin.\x20info.for_object\x20/\x20info.for_guard\x20/\x20from_object\x20'+'are\x20registered\x20as\x20object-linker\x20affiliations,\x20so\x20the\x20payment\x20is\x20discoverable\x20via\x20global\x20'+'affiliation\x20tables\x20(onchain_affiliations_of_object).','params':[{'name':'object','shape':'address','meaning':'The\x20Payment\x20object\x20id\x20(the\x20receipt)'},{'name':'info.for_object','shape':'Option<address>','meaning':'The\x20business\x20object\x20this\x20payment\x20is\x20FOR\x20(order/demand/reward/…)\x20—\x20user-settable\x20routing\x20hint'},{'name':'info.for_guard','shape':'Option<address>','meaning':'The\x20Guard\x20governing\x20this\x20payment\x20—\x20user-settable,\x20links\x20the\x20payment\x20to\x20a\x20trust\x20rule'},{'name':'info.remark','shape':'String','meaning':'Free-form\x20on-chain\x20remark\x20(e.g.\x20invoice\x20number,\x20purpose)'},{'name':'info.index','shape':'u64','meaning':'Creator-local\x20index\x20(installment\x20sequence,\x20table\x20row,\x20…)'},{'name':'record','shape':'vector<{recipient,\x20amount}>','meaning':'Revenue\x20legs:\x20one\x20{recipient,\x20amount}\x20per\x20CoinWrapper\x20transferred'},{'name':'amount','shape':'u64','meaning':'Total\x20paid\x20across\x20all\x20legs\x20(sum\x20of\x20record\x20amounts)'},{'name':'from_object','shape':'Option<address>','meaning':'FUNDING-SOURCE\x20object\x20the\x20funds\x20LEFT\x20from\x20—\x20INTERNAL-ONLY\x20field\x20(public(package)\x20'+'from_object_set;\x20user\x20code\x20can\x20never\x20set\x20it).\x20Treasury\x20withdraw\x20⇒\x20the\x20Treasury;\x20'+'Allocation\x20run\x20⇒\x20the\x20Allocation;\x20Service\x20compensation\x20withdraw\x20⇒\x20the\x20Service.\x20'+'create()\x20registers\x20an\x20object_linker\x20affiliation\x20(from_object\x20→\x20payment)\x20so\x20the\x20'+'outflow\x20is\x20traceable\x20back\x20to\x20its\x20pool.\x20Null\x20for\x20direct\x20user-initiated\x20payments\x20'+'(no\x20on-chain\x20source\x20object).'}]}];export const EVENT_BY_NAME=new Map(EVENT_SEMANTIC_REGISTRY['map'](a=>[a['name'],a]));export const EVENT_BY_MOVE_TYPE=new Map(EVENT_SEMANTIC_REGISTRY['map'](a=>[a['move_type'],a]));export function lookupEventMeaning(a){const b=String(a?.['type']??''),c=EVENT_BY_NAME['get'](b);if(c)return c['business_meaning'];const d=String(a?.['type_raw']??'');if(d)for(const f of EVENT_SEMANTIC_REGISTRY){if(d['includes'](f['move_type']))return f['business_meaning'];}return undefined;}