@wowok/agent-mcp 3.4.4 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/.build-stamp.json +3 -3
  2. package/dist/chain-semantics/composition-truth.js +1 -1
  3. package/dist/composition/audit.js +1 -1
  4. package/dist/composition/compile.js +1 -1
  5. package/dist/composition/emit-phases.js +1 -1
  6. package/dist/composition/guard-fill.js +1 -1
  7. package/dist/composition/input-normalize.js +1 -1
  8. package/dist/composition/materialize.js +1 -1
  9. package/dist/composition/mode-gates.js +1 -1
  10. package/dist/composition/param-disclosure.js +1 -1
  11. package/dist/composition/plan-run-store.js +1 -0
  12. package/dist/composition/reflux.js +1 -1
  13. package/dist/composition/role-bindings.js +1 -0
  14. package/dist/composition/shape-expand.js +1 -1
  15. package/dist/composition/supply-chain-emit.js +1 -1
  16. package/dist/config/judgment.d.ts +13 -25
  17. package/dist/config/judgment.js +1 -1
  18. package/dist/config/match-policy-file.js +1 -1
  19. package/dist/config/rule-engine.d.ts +4 -10
  20. package/dist/config/rule-engine.js +1 -1
  21. package/dist/config/template-params.js +1 -1
  22. package/dist/evaluation/engine.js +1 -1
  23. package/dist/experience/realtime-feedback.js +1 -1
  24. package/dist/extensions/capability.js +1 -1
  25. package/dist/graph/onchain/expand.js +1 -1
  26. package/dist/graph/onchain/exposure.js +1 -1
  27. package/dist/harness/forward-roster-preflight.js +1 -0
  28. package/dist/keeper/detectors.js +1 -1
  29. package/dist/knowledge/allocator-rail-verifier.js +1 -1
  30. package/dist/knowledge/arb-operation-face.js +1 -1
  31. package/dist/knowledge/arbitration-rail-verifier.js +1 -1
  32. package/dist/knowledge/audit-rules.d.ts +17 -1
  33. package/dist/knowledge/audit-rules.js +1 -1
  34. package/dist/knowledge/baselines/rules/alloc_audit.json.good.sha256 +1 -0
  35. package/dist/knowledge/baselines/rules/allocation.json.good.sha256 +1 -0
  36. package/dist/knowledge/baselines/rules/arb.json.good.sha256 +1 -0
  37. package/dist/knowledge/baselines/rules/arbitration.json.good.sha256 +1 -0
  38. package/dist/knowledge/baselines/rules/bridge.json.good.sha256 +1 -0
  39. package/dist/knowledge/baselines/rules/contact.json.good.sha256 +1 -0
  40. package/dist/knowledge/baselines/rules/demand.json.good.sha256 +1 -0
  41. package/dist/knowledge/baselines/rules/graph.json.good.sha256 +1 -0
  42. package/dist/knowledge/baselines/rules/guard.json.good.sha256 +1 -0
  43. package/dist/knowledge/baselines/rules/machine.json.good.sha256 +1 -0
  44. package/dist/knowledge/baselines/rules/oracle.json.good.sha256 +1 -0
  45. package/dist/knowledge/baselines/rules/order.json.good.sha256 +1 -0
  46. package/dist/knowledge/baselines/rules/payment.json.good.sha256 +1 -0
  47. package/dist/knowledge/baselines/rules/permission.json.good.sha256 +1 -0
  48. package/dist/knowledge/baselines/rules/personal.json.good.sha256 +1 -0
  49. package/dist/knowledge/baselines/rules/plan.json +153 -33
  50. package/dist/knowledge/baselines/rules/plan.json.good +153 -33
  51. package/dist/knowledge/baselines/rules/plan.json.good.sha256 +1 -0
  52. package/dist/knowledge/baselines/rules/progress.json.good.sha256 +1 -0
  53. package/dist/knowledge/baselines/rules/proof.json.good.sha256 +1 -0
  54. package/dist/knowledge/baselines/rules/registrar.json.good.sha256 +1 -0
  55. package/dist/knowledge/baselines/rules/repository.json.good.sha256 +1 -0
  56. package/dist/knowledge/baselines/rules/resource.json.good.sha256 +1 -0
  57. package/dist/knowledge/baselines/rules/reward.json.good.sha256 +1 -0
  58. package/dist/knowledge/baselines/rules/service.json.good.sha256 +1 -0
  59. package/dist/knowledge/baselines/rules/treasury.json.good.sha256 +1 -0
  60. package/dist/knowledge/baselines/rules/util.json.good.sha256 +1 -0
  61. package/dist/knowledge/builtin-templates.d.ts +1 -1
  62. package/dist/knowledge/builtin-templates.js +1 -1
  63. package/dist/knowledge/discount-threshold.js +1 -1
  64. package/dist/knowledge/fee-param-bindings.js +1 -1
  65. package/dist/knowledge/getting-started.js +1 -1
  66. package/dist/knowledge/guard-binding-table.js +1 -1
  67. package/dist/knowledge/guard-design-patterns.js +1 -1
  68. package/dist/knowledge/guard-templates.d.ts +3 -2
  69. package/dist/knowledge/guard-templates.js +1 -1
  70. package/dist/knowledge/index.js +1 -1
  71. package/dist/knowledge/industry-registry.js +1 -1
  72. package/dist/knowledge/jsonrpc-enum.js +1 -1
  73. package/dist/knowledge/knob-docs.js +1 -1
  74. package/dist/knowledge/machine-topology.js +1 -1
  75. package/dist/knowledge/param-schema.js +1 -1
  76. package/dist/knowledge/param-tiers.js +1 -1
  77. package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -1
  78. package/dist/knowledge/path-oracle/products/amazon.js +1 -1
  79. package/dist/knowledge/path-oracle/products/booking-com.js +1 -1
  80. package/dist/knowledge/path-oracle/products/contra.js +1 -1
  81. package/dist/knowledge/path-oracle/products/costco.js +1 -1
  82. package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -1
  83. package/dist/knowledge/path-oracle/products/etsy.js +1 -1
  84. package/dist/knowledge/path-oracle/products/gamefound.js +1 -1
  85. package/dist/knowledge/path-oracle/products/gofundme.js +1 -1
  86. package/dist/knowledge/path-oracle/products/klook.js +1 -1
  87. package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -1
  88. package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -1
  89. package/dist/knowledge/path-oracle/products/shansong.js +1 -1
  90. package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -1
  91. package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -1
  92. package/dist/knowledge/path-oracle/products/upwork.js +1 -1
  93. package/dist/knowledge/pattern-resolutions.js +1 -1
  94. package/dist/knowledge/protocol-facts.js +1 -1
  95. package/dist/knowledge/publish-gate.js +1 -1
  96. package/dist/knowledge/publish-surface-contract.js +1 -1
  97. package/dist/knowledge/template-loader.js +1 -1
  98. package/dist/knowledge/template-registry.js +1 -1
  99. package/dist/knowledge/template-scanner.js +1 -1
  100. package/dist/knowledge/time-units.js +1 -0
  101. package/dist/knowledge/tools-reference.js +1 -1
  102. package/dist/knowledge/workflow-guidance.js +1 -1
  103. package/dist/monitor/MonitorLoop.js +1 -1
  104. package/dist/participation/radar-core.js +1 -1
  105. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  106. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  107. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  108. package/dist/playbooks/service-build/migration-planner.js +1 -1
  109. package/dist/playbooks/service-build/object-panorama.js +1 -1
  110. package/dist/playbooks/service-build/participation-radar.js +1 -1
  111. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  112. package/dist/playbooks/service-build/service-panorama.js +1 -1
  113. package/dist/playbooks/service-build/service-quote.js +1 -1
  114. package/dist/review/index.js +1 -1
  115. package/dist/safety/confirm-gate.js +1 -1
  116. package/dist/schema/benchmark-migration/index.d.ts +110 -2
  117. package/dist/schema/benchmark-migration/index.js +1 -1
  118. package/dist/schema/boundary-coercion.js +1 -0
  119. package/dist/schema/call/arbitration.js +1 -1
  120. package/dist/schema/call/base.js +1 -1
  121. package/dist/schema/call/handler.js +1 -1
  122. package/dist/schema/call/machine.d.ts +56 -8
  123. package/dist/schema/call/order.d.ts +37 -10
  124. package/dist/schema/call/order.js +1 -1
  125. package/dist/schema/call/permission.d.ts +210 -30
  126. package/dist/schema/call/personal.d.ts +56 -8
  127. package/dist/schema/call/progress.d.ts +28 -4
  128. package/dist/schema/call/semantic.js +1 -1
  129. package/dist/schema/call/service.d.ts +84 -12
  130. package/dist/schema/common/index.d.ts +14 -2
  131. package/dist/schema/common/index.js +1 -1
  132. package/dist/schema/evaluation/index.js +1 -1
  133. package/dist/schema/goal/index.d.ts +1 -1
  134. package/dist/schema/goal/planning.js +1 -1
  135. package/dist/schema/local/index.js +1 -1
  136. package/dist/schema/messenger/index.d.ts +168 -24
  137. package/dist/schema/messenger/index.js +1 -1
  138. package/dist/schema/operations.d.ts +655 -22
  139. package/dist/schema/operations.js +1 -1
  140. package/dist/schema/persona/index.d.ts +22 -110
  141. package/dist/schema/query/index.js +1 -1
  142. package/dist/schema/schema-version.js +1 -1
  143. package/dist/schema/workflow/index.d.ts +4 -0
  144. package/dist/schema/workflow/index.js +1 -1
  145. package/dist/schema-query-impl/index.js +1 -1
  146. package/dist/schemas/benchmark_migration_operation.schema.json +1 -1
  147. package/dist/schemas/evaluation_operation.schema.json +1 -1
  148. package/dist/schemas/goal_operation.schema.json +1 -1
  149. package/dist/schemas/guard_rebind_replacement.schema.json +1 -0
  150. package/dist/schemas/index.json +1 -1
  151. package/dist/schemas/messenger_operation.schema.json +1 -1
  152. package/dist/schemas/onchain_operations.schema.json +1 -1
  153. package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
  154. package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
  155. package/dist/schemas/onchain_operations_contact.schema.json +1 -1
  156. package/dist/schemas/onchain_operations_demand.schema.json +1 -1
  157. package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
  158. package/dist/schemas/onchain_operations_machine.schema.json +1 -1
  159. package/dist/schemas/onchain_operations_order.schema.json +1 -1
  160. package/dist/schemas/onchain_operations_permission.schema.json +1 -1
  161. package/dist/schemas/onchain_operations_personal.schema.json +1 -1
  162. package/dist/schemas/onchain_operations_progress.schema.json +1 -1
  163. package/dist/schemas/onchain_operations_proof.schema.json +1 -1
  164. package/dist/schemas/onchain_operations_repository.schema.json +1 -1
  165. package/dist/schemas/onchain_operations_reward.schema.json +1 -1
  166. package/dist/schemas/onchain_operations_service.schema.json +1 -1
  167. package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
  168. package/dist/schemas/persona_operation.schema.json +1 -1
  169. package/dist/schemas/time_convert.schema.json +1 -0
  170. package/dist/schemas/wip_file.schema.json +1 -1
  171. package/dist/schemas/workflow_operation.schema.json +1 -1
  172. package/dist/tools/handlers/benchmark-migration.js +1 -1
  173. package/dist/tools/handlers/config.js +1 -1
  174. package/dist/tools/handlers/fund-rail-recipe.js +1 -1
  175. package/dist/tools/handlers/guard-rebind-replacement.js +1 -0
  176. package/dist/tools/handlers/local.js +1 -1
  177. package/dist/tools/handlers/mark-namespace.js +1 -1
  178. package/dist/tools/handlers/onchain.js +1 -1
  179. package/dist/tools/handlers/query.js +1 -1
  180. package/dist/tools/handlers/settle-sweep.js +1 -1
  181. package/dist/tools/handlers/time-convert.js +1 -0
  182. package/dist/tools/handlers/wip.js +1 -1
  183. package/dist/tools/handlers/workflow.js +1 -1
  184. package/dist/tools/index.d.ts +1 -0
  185. package/dist/tools/index.js +1 -1
  186. package/dist/tools/registry/business.js +1 -1
  187. package/dist/tools/registry/local.js +1 -1
  188. package/dist/tools/registry/onchain.js +1 -1
  189. package/dist/tools/wip-verify-ledger.js +1 -1
  190. package/dist/tools/wrap.js +1 -1
  191. package/package.json +6 -5
@@ -1 +1 @@
1
- export const MAX_MACHINE_NODES=0x64;export const MAX_NODE_INBOUND_PAIRS=0x28;const MAX_GUARD_IDENTIFIER=0xdc,MAX_MULTI_OPERANDS=0x8;function effectiveCount(a,b,c){const d=c[a]??b['fee_params']?.[a],e=typeof d==='number'?d:typeof d==='string'&&d['trim']()!==''?Number(d):NaN;if(!Number['isInteger'](e)||e<0x1)return undefined;return e;}const TOKEN_RE=/\{([a-z0-9_]+)\.(last|first|\d+)\}/g;function expandFromAll(a){const b=/^\{([a-z0-9_]+)\.all\}$/['exec'](a);return b?.[0x1];}function resolveRefs(a,b){let c;const d=a['replace'](TOKEN_RE,(e,f,g)=>{const h=b['get'](f);if(h===undefined||h['length']===0x0)return c=f,e;if(g==='last')return h[h['length']-0x1];if(g==='first')return h[0x0];const i=Number(g);if(i<0x1||i>h['length'])return c=f,e;return h[i-0x1];});return c!==undefined?undefined:d;}export function expandShapeSegments(a){const {template:b,shape:c,inputs:d}=a,f=c['filter'](o=>o['segment']!==undefined);if(f['length']===0x0)return{'shape':c,'resolutions':{},'blockers':[],'notes':[]};const g=[],h=[],i=new Map(),j=new Map();for(const o of f){const p=o['segment'];if(i['has'](p['id'])){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'machine_shape\x20declares\x20segment\x20\x27'+p['id']+'\x27\x20twice\x20—\x20a\x20segment\x20id\x20must\x20name\x20ONE\x20prototype\x20node'});continue;}if(!o['name']['includes']('{i}')){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'segment\x20prototype\x20\x27'+p['id']+'\x27\x20has\x20name\x20\x27'+o['name']+'\x27\x20but\x20its\x20name\x20carries\x20no\x20\x22{i}\x22\x20placeholder\x20—\x20the\x20expander\x20cannot\x20build\x20the\x20instance\x20names'});continue;}const q=effectiveCount(p['count_from'],b,d);if(q===undefined){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'segment\x20\x27'+p['id']+'\x27\x20declares\x20count_from\x20\x27'+p['count_from']+'\x27,\x20which\x20resolves\x20to\x20no\x20positive\x20integer\x20'+'(fee_params/inputs).\x20A\x20segment\x20must\x20declare\x20a\x20real\x20count\x20—\x20this\x20is\x20the\x20parameter\x20turn\x20the\x20old\x20'+'authoring-time\x20promise\x20never\x20implemented\x20(yfd\x20D-01)'});continue;}i['set'](p['id'],Array['from']({'length':q},(r,s)=>o['name']['replace'](/\{i\}/g,String(s+0x1)))),j['set'](p['count_from'],q);}if(g['some'](r=>r['code']==='SEGMENT_DECLARATION_INVALID'))return{'shape':c,'resolutions':{},'blockers':g,'notes':h};const l=[];for(const r of c){if(r['segment']===undefined){l['push'](r);continue;}const s=i['get'](r['segment']['id']);for(let u=0x0;u<s['length'];u+=0x1){const v={...r,'name':s[u],'role':r['role']};delete v['segment'];if(u>0x0)v['from']=[s[u-0x1]];l['push'](v);}const t=r['segment'];h['push']('SEGMENT\x20\x27'+t['id']+'\x27\x20expanded\x20to\x20'+s['length']+'\x20node(s)\x20from\x20\x27'+t['count_from']+'\x27\x20(build-time\x20segment:\x20'+(s[0x0]+'..'+s[s['length']-0x1]+',\x20chain\x20edges\x20generated;\x20machine\x20node-count\x20and\x20inbound-pair\x20caps\x20enforced)'));}const m=new Set(l['map'](w=>w['name']));for(const w of l){if(w['from']===undefined)continue;const x=[];for(const y of w['from']){const z=typeof y==='string',A=z?y:y['prev'],B=z?expandFromAll(A):undefined;if(B!==undefined){const D=i['get'](B);if(D===undefined){g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+w['name']+'\x27\x20edge\x20\x27{'+B+'.all}\x27\x20names\x20no\x20declared\x20segment'});continue;}for(const E of D)x['push'](E);continue;}const C=resolveRefs(A,i);if(C===undefined){g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+w['name']+'\x27\x20edge\x20\x27'+A+'\x27\x20carries\x20an\x20unresolvable\x20segment\x20token\x20—\x20use\x20'+'\x22{<segment>.last}\x22,\x20\x22{<segment>.first}\x22,\x20\x22{<segment>.<n>}\x22\x20or\x20the\x20whole\x20element\x20\x22{<segment>.all}\x22'});continue;}if(z)x['push'](C);else x['push']({...y,'prev':C});}w['from']=x;}l['length']>MAX_MACHINE_NODES&&g['push']({'code':'SEGMENT_NODE_CAP_EXCEEDED','detail':'the\x20expanded\x20machine\x20carries\x20'+l['length']+'\x20nodes;\x20the\x20chain\x27s\x20machine\x20node-count\x20cap\x20(MAX_NODE_COUNT)\x20is\x20'+MAX_MACHINE_NODES+'.\x20'+'Reduce\x20the\x20segment\x20count\x20or\x20split\x20the\x20delivery\x20into\x20multiple\x20Machines'});for(const F of l){if(F['from']===undefined)continue;const G=new Set(F['from']['map'](H=>typeof H==='string'?H:H['prev']));G['size']>MAX_NODE_INBOUND_PAIRS&&g['push']({'code':'MACHINE_PAIR_CAP_EXCEEDED','detail':'node\x20\x27'+F['name']+'\x27\x20carries\x20'+G['size']+'\x20inbound\x20edges;\x20the\x20chain\x27s\x20per-node\x20inbound-pair\x20cap\x20(MAX_NODE_PAIR_COUNT)\x20is\x20'+(MAX_NODE_INBOUND_PAIRS+'\x20pairs\x20per\x20node\x20—\x20the\x20chain\x20ABORTS\x20the\x20machine\x20create.\x20A\x20long\x20segment\x27s\x20')+'refund\x20fan-in\x20is\x20the\x20usual\x20cause:\x20route\x20the\x20refund\x20through\x20the\x20terminal\x20sweep\x20instead\x20of\x20one\x20edge\x20'+'per\x20segment\x20instance'});for(const H of F['from']){const I=typeof H==='string'?H:H['prev'];I!==''&&!m['has'](I)&&g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+F['name']+'\x27\x20edge\x20prev\x20\x27'+I+'\x27\x20is\x20not\x20a\x20machine_shape\x20node\x20after\x20expansion'});}}const n=buildSegmentRails(b,i,g,h);return checkRepeatAmountFloor(b,j,g),{'shape':l,'resolutions':n,'blockers':g,'notes':h};}function progressCurrent(){return{'type':'query','query':'progress.current','object':{'identifier':0x0,'convert_witness':'OrderProgress'},'parameters':[]};}function equal(a,b){return{'type':'logic_equal','nodes':[a,b]};}function orTree(a){if(a['length']===0x1)return a[0x0];if(a['length']<=MAX_MULTI_OPERANDS)return{'type':'logic_or','nodes':a};const b=[];for(let c=0x0;c<a['length'];c+=MAX_MULTI_OPERANDS){const d=a['slice'](c,c+MAX_MULTI_OPERANDS);b['push'](d['length']===0x1?d[0x0]:{'type':'logic_or','nodes':d});}return orTree(b);}function segmentRailBody(a,b,c){const d=a['length']+0x1,e=a['length']+0x2,f=[{'identifier':0x0,'b_submission':!![],'value_type':'Address','object_type':'Order','name':'order_id\x20(the\x20submitted\x20Order;\x20alloc-time\x20binding)'},...a['map']((l,m)=>({'identifier':m+0x1,'b_submission':![],'value_type':'String','value':l,'name':'qualifying\x20node\x20'+(m+0x1)})),...c==='buyer_or_keeper'?[{'identifier':d,'b_submission':![],'value_type':'Address','value':{'$ref':'service'},'name':'service\x20(circular\x20ref\x20by\x20name;\x20the\x20submitted\x20Permission\x20must\x20equal\x20service.permission)'},{'identifier':e,'b_submission':!![],'value_type':'Address','object_type':'Permission','name':'Permission\x20object\x20submitted\x20by\x20the\x20firing\x20caller\x20(merchant-or-keeper\x20side)'}]:[],{'identifier':0xff,'b_submission':!![],'value_type':'U64','name':'ONCE\x20key\x20(255):\x20the\x20submitted\x20progress.history\x20count'}],g=orTree(a['map']((l,m)=>equal(progressCurrent(),{'type':'identifier','identifier':m+0x1}))),h=equal({'type':'identifier','identifier':0xff},{'type':'query','query':'progress.history\x20count','object':{'identifier':0x0,'convert_witness':'OrderProgress'},'parameters':[]}),i=orTree([equal({'type':'query','query':'order.owner','object':{'identifier':0x0},'parameters':[]},{'type':'context','context':'Signer'}),{'type':'query','query':'order.agent\x20has','object':{'identifier':0x0},'parameters':[{'type':'context','context':'Signer'}]}]),j=c==='buyer_or_keeper'?{'type':'logic_and','nodes':[equal({'type':'query','query':'service.permission','object':{'identifier':d},'parameters':[]},{'type':'identifier','identifier':e}),orTree([equal({'type':'query','query':'permission.owner','object':{'identifier':e},'parameters':[]},{'type':'context','context':'Signer'}),{'type':'query','query':'permission.admin\x20has','object':{'identifier':e},'parameters':[{'type':'context','context':'Signer'}]}])]}:undefined,k=j===undefined?i:orTree([i,j]);return{'kind':'inline','description':'Segment\x20rail\x20guard\x20\x27'+b+'\x27\x20generated\x20at\x20build\x20time:\x20qualifying\x20node\x20set\x20{'+a['join'](',\x20')+'}\x20'+('('+a['length']+'\x20node(s)\x20—\x20every\x20shipped\x20segment\x20instance\x20plus\x20the\x20declared\x20safety-net\x20states)\x20AND\x20the\x20')+'per-fire\x20identifier-255\x20once\x20key\x20(the\x20submitted\x20progress.history\x20count\x20—\x20a\x20replay\x20at\x20the\x20same\x20node\x20aborts\x20'+('16)\x20AND\x20the\x20caller-authorization\x20leg\x20('+(c==='buyer'?'buyer\x20order-holder\x20or\x20its\x20registered\x20agent\x20only\x20—\x20the\x20counterparty\x20can\x20never\x20self-claim':'buyer\x20side\x20OR\x20the\x20merchant-or-keeper\x20dynamic\x20permission\x20(service.permission\x20==\x20the\x20submitted\x20Permission,\x20signer\x20owns/administers\x20it)')+').\x20Generated\x20by\x20the\x20kernel\x27s\x20segment\x20expander\x20because\x20a\x20fixed-slot\x20tpl_*\x20body\x20cannot\x20follow\x20an\x20arbitrary\x20count.'),'table':f,'root':{'type':'logic_and','nodes':[g,h,k]}};}function buildSegmentRails(a,b,c,d){const e={};return(a['guards']??[])['forEach']((f,g)=>{const h=f['node_set_segments'],j=f['node_set_nodes'];if(h===undefined&&j===undefined)return;const k=f['key']??f['template_id']+'#'+g,l=[];for(const q of h??[]){const r=b['get'](q);if(r===undefined){c['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'guard\x20\x27'+k+'\x27\x20node_set_segments\x20names\x20\x27'+q+'\x27,\x20which\x20is\x20no\x20declared\x20machine_shape\x20segment'});return;}for(const s of r)if(!l['includes'](s))l['push'](s);}for(const t of j??[])if(!l['includes'](t))l['push'](t);if(l['length']===0x0)return;const m=f['params']??{},o=m['node_set_caller']==='buyer_or_keeper'?'buyer_or_keeper':'buyer',p=l['length']+0x1+(o==='buyer_or_keeper'?0x2:0x0);if(p>MAX_GUARD_IDENTIFIER){c['push']({'code':'SEGMENT_GUARD_SLOTS_EXCEEDED','detail':'guard\x20\x27'+k+'\x27\x20needs\x20'+p+'\x20table\x20identifiers;\x20the\x20chain\x27s\x20guard-table\x20cap\x20(MAX_USER_IDENTIFIER)\x20is\x20'+(MAX_GUARD_IDENTIFIER+'.\x20Reduce\x20the\x20segment\x20count\x20or\x20split\x20the\x20rail\x20per\x20delivery\x20block')});return;}e[k]=segmentRailBody(l,k,o),d['push']('guard\x20\x27'+k+'\x27\x20rendered\x20at\x20build\x20time\x20over\x20'+l['length']+'\x20qualifying\x20node(s)\x20'+('(nested\x20logic_or,\x20'+MAX_MULTI_OPERANDS+'-child\x20cap\x20respected)'));}),e;}function checkRepeatAmountFloor(a,b,c){const d=a['allocator']?.['rows']??[],e=a['fee_params']??{},f=Number(e['min_term_price']),g=Number(e['max_discount_bps']??0x0);if(!Number['isFinite'](f)||f<=0x0)return;const h=f*(0x1-(Number['isFinite'](g)?g:0x0)/0x2710);for(const i of d){const j=typeof i['repeat_from']==='string'?i['repeat_from']:undefined;if(j===undefined)continue;const k=b['get'](j);if(k===undefined)continue;const l=typeof i['value_from']==='string'?i['value_from']:undefined,m=l!==undefined?e[l]:i['value'],n=Number(m);if(!Number['isFinite'](n)||n<=0x0)continue;const o=k*n;o>h&&c['push']({'code':'SEGMENT_COUNT_PRICE_FLOOR_BREACH','detail':'the\x20settlement\x20rail\x20repeats\x20'+k+'\x20time(s)\x20x\x20'+n+'\x20=\x20'+o+',\x20above\x20the\x20declared\x20price\x20floor\x20'+(h+'\x20(min_term_price\x20x\x20(1\x20-\x20max_discount_bps/10000)).\x20alloc()\x20asserts\x20balance\x20>=\x20fix\x20at\x20EVERY\x20')+'release,\x20so\x20the\x20tail\x20instance\x20aborts\x20EINSUFFICIENT_BALANCE\x20and\x20the\x20escrow\x20cannot\x20fully\x20leave\x20'+('(crs9-mn-261015\x20F-34).\x20Raise\x20term_price\x20above\x20'+o+',\x20or\x20lower\x20the\x20per-instance\x20Amount')});}}
1
+ import{resolveLocalWindowMs}from'../knowledge/time-units.js';export const MAX_MACHINE_NODES=0x64;export const MAX_NODE_INBOUND_PAIRS=0x28;const MAX_GUARD_IDENTIFIER=0xdc,MAX_MULTI_OPERANDS=0x8;function effectiveCount(a,b,c){const d=c[a]??b['fee_params']?.[a],e=typeof d==='number'?d:typeof d==='string'&&d['trim']()!==''?Number(d):NaN;if(!Number['isInteger'](e)||e<0x1)return undefined;return e;}const TOKEN_RE=/\{([a-z0-9_]+)\.(last|first|\d+)\}/g;function expandFromAll(a){const b=/^\{([a-z0-9_]+)\.all\}$/['exec'](a);return b?.[0x1];}function resolveRefs(a,b){let c;const d=a['replace'](TOKEN_RE,(e,f,g)=>{const h=b['get'](f);if(h===undefined||h['length']===0x0)return c=f,e;if(g==='last')return h[h['length']-0x1];if(g==='first')return h[0x0];const i=Number(g);if(i<0x1||i>h['length'])return c=f,e;return h[i-0x1];});return c!==undefined?undefined:d;}export function expandShapeSegments(a){const {template:b,shape:c,inputs:d,windowProfile:windowProfile='production'}=a,f=c['filter'](o=>o['segment']!==undefined);if(f['length']===0x0)return{'shape':c,'resolutions':{},'blockers':[],'notes':[]};const g=[],h=[],i=new Map(),j=new Map();for(const o of f){const p=o['segment'];if(i['has'](p['id'])){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'machine_shape\x20declares\x20segment\x20\x27'+p['id']+'\x27\x20twice\x20—\x20a\x20segment\x20id\x20must\x20name\x20ONE\x20prototype\x20node'});continue;}if(!o['name']['includes']('{i}')){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'segment\x20prototype\x20\x27'+p['id']+'\x27\x20has\x20name\x20\x27'+o['name']+'\x27\x20but\x20its\x20name\x20carries\x20no\x20\x22{i}\x22\x20placeholder\x20—\x20the\x20expander\x20cannot\x20build\x20the\x20instance\x20names'});continue;}const q=effectiveCount(p['count_from'],b,d);if(q===undefined){g['push']({'code':'SEGMENT_DECLARATION_INVALID','detail':'segment\x20\x27'+p['id']+'\x27\x20declares\x20count_from\x20\x27'+p['count_from']+'\x27,\x20which\x20resolves\x20to\x20no\x20positive\x20integer\x20'+'(fee_params/inputs).\x20A\x20segment\x20must\x20declare\x20a\x20real\x20count\x20—\x20this\x20is\x20the\x20parameter\x20turn\x20the\x20old\x20'+'authoring-time\x20promise\x20never\x20implemented\x20(yfd\x20D-01)'});continue;}i['set'](p['id'],Array['from']({'length':q},(r,s)=>o['name']['replace'](/\{i\}/g,String(s+0x1)))),j['set'](p['count_from'],q);}if(g['some'](r=>r['code']==='SEGMENT_DECLARATION_INVALID'))return{'shape':c,'resolutions':{},'blockers':g,'notes':h};const l=[];for(const r of c){if(r['segment']===undefined){l['push'](r);continue;}const s=i['get'](r['segment']['id']);for(let u=0x0;u<s['length'];u+=0x1){const v={...r,'name':s[u],'role':r['role']};delete v['segment'];if(u>0x0)v['from']=[s[u-0x1]];l['push'](v);}const t=r['segment'];h['push']('SEGMENT\x20\x27'+t['id']+'\x27\x20expanded\x20to\x20'+s['length']+'\x20node(s)\x20from\x20\x27'+t['count_from']+'\x27\x20(build-time\x20segment:\x20'+(s[0x0]+'..'+s[s['length']-0x1]+',\x20chain\x20edges\x20generated;\x20machine\x20node-count\x20and\x20inbound-pair\x20caps\x20enforced)'));}const m=new Set(l['map'](w=>w['name']));for(const w of l){if(w['from']===undefined)continue;const x=[];for(const y of w['from']){const z=typeof y==='string',A=z?y:y['prev'],B=z?expandFromAll(A):undefined;if(B!==undefined){const D=i['get'](B);if(D===undefined){g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+w['name']+'\x27\x20edge\x20\x27{'+B+'.all}\x27\x20names\x20no\x20declared\x20segment'});continue;}for(const E of D)x['push'](E);continue;}const C=resolveRefs(A,i);if(C===undefined){g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+w['name']+'\x27\x20edge\x20\x27'+A+'\x27\x20carries\x20an\x20unresolvable\x20segment\x20token\x20—\x20use\x20'+'\x22{<segment>.last}\x22,\x20\x22{<segment>.first}\x22,\x20\x22{<segment>.<n>}\x22\x20or\x20the\x20whole\x20element\x20\x22{<segment>.all}\x22'});continue;}if(z)x['push'](C);else x['push']({...y,'prev':C});}w['from']=x;}l['length']>MAX_MACHINE_NODES&&g['push']({'code':'SEGMENT_NODE_CAP_EXCEEDED','detail':'the\x20expanded\x20machine\x20carries\x20'+l['length']+'\x20nodes;\x20the\x20chain\x27s\x20machine\x20node-count\x20cap\x20(MAX_NODE_COUNT)\x20is\x20'+MAX_MACHINE_NODES+'.\x20'+'Reduce\x20the\x20segment\x20count\x20or\x20split\x20the\x20delivery\x20into\x20multiple\x20Machines'});for(const F of l){if(F['from']===undefined)continue;const G=new Set(F['from']['map'](H=>typeof H==='string'?H:H['prev']));G['size']>MAX_NODE_INBOUND_PAIRS&&g['push']({'code':'MACHINE_PAIR_CAP_EXCEEDED','detail':'node\x20\x27'+F['name']+'\x27\x20carries\x20'+G['size']+'\x20inbound\x20edges;\x20the\x20chain\x27s\x20per-node\x20inbound-pair\x20cap\x20(MAX_NODE_PAIR_COUNT)\x20is\x20'+(MAX_NODE_INBOUND_PAIRS+'\x20pairs\x20per\x20node\x20—\x20the\x20chain\x20ABORTS\x20the\x20machine\x20create.\x20A\x20long\x20segment\x27s\x20')+'refund\x20fan-in\x20is\x20the\x20usual\x20cause:\x20route\x20the\x20refund\x20through\x20the\x20terminal\x20sweep\x20instead\x20of\x20one\x20edge\x20'+'per\x20segment\x20instance'});for(const H of F['from']){const I=typeof H==='string'?H:H['prev'];I!==''&&!m['has'](I)&&g['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'node\x20\x27'+F['name']+'\x27\x20edge\x20prev\x20\x27'+I+'\x27\x20is\x20not\x20a\x20machine_shape\x20node\x20after\x20expansion'});}}const n=buildSegmentRails(b,i,g,h,d,windowProfile);return checkRepeatAmountFloor(b,j,g),{'shape':l,'resolutions':n,'blockers':g,'notes':h};}function progressCurrent(){return{'type':'query','query':'progress.current','object':{'identifier':0x0,'convert_witness':'OrderProgress'},'parameters':[]};}function equal(a,b){return{'type':'logic_equal','nodes':[a,b]};}function orTree(a){if(a['length']===0x1)return a[0x0];if(a['length']<=MAX_MULTI_OPERANDS)return{'type':'logic_or','nodes':a};const b=[];for(let c=0x0;c<a['length'];c+=MAX_MULTI_OPERANDS){const d=a['slice'](c,c+MAX_MULTI_OPERANDS);b['push'](d['length']===0x1?d[0x0]:{'type':'logic_or','nodes':d});}return orTree(b);}function segmentRailBody(a,b,c,d={'enabled':c==='buyer_or_keeper'}){const e=a['length']+0x1,f=a['length']+0x2,g=f+0x1,h=d['enabled']&&typeof d['windowMs']==='number'&&d['windowMs']>0x0,i=c==='buyer_or_keeper'&&d['enabled'],j=[{'identifier':0x0,'b_submission':!![],'value_type':'Address','object_type':'Order','name':'order_id\x20(the\x20submitted\x20Order;\x20alloc-time\x20binding)'},...a['map']((p,q)=>({'identifier':q+0x1,'b_submission':![],'value_type':'String','value':p,'name':'qualifying\x20node\x20'+(q+0x1)})),...i?[{'identifier':e,'b_submission':![],'value_type':'Address','value':{'$ref':'service'},'name':'service\x20(circular\x20ref\x20by\x20name;\x20the\x20submitted\x20Permission\x20must\x20equal\x20service.permission)'},{'identifier':f,'b_submission':!![],'value_type':'Address','object_type':'Permission','name':'Permission\x20object\x20submitted\x20by\x20the\x20firing\x20caller\x20(merchant-or-keeper\x20side)'}]:[],...h?[{'identifier':g,'b_submission':![],'value_type':'U64','value':d['windowMs'],'name':'keeper\x20auto-release\x20window\x20(ms;\x20'+d['windowMs']+'\x20—\x20the\x20buyer\x20holds\x20the\x20ONLY\x20key\x20inside\x20it)'}]:[],{'identifier':0xff,'b_submission':!![],'value_type':'U64','name':'ONCE\x20key\x20(255):\x20the\x20submitted\x20progress.history\x20count'}],k=orTree(a['map']((p,q)=>equal(progressCurrent(),{'type':'identifier','identifier':q+0x1}))),l=equal({'type':'identifier','identifier':0xff},{'type':'query','query':'progress.history\x20count','object':{'identifier':0x0,'convert_witness':'OrderProgress'},'parameters':[]}),m=orTree([equal({'type':'query','query':'order.owner','object':{'identifier':0x0},'parameters':[]},{'type':'context','context':'Signer'}),{'type':'query','query':'order.agent\x20has','object':{'identifier':0x0},'parameters':[{'type':'context','context':'Signer'}]}]),n=i?{'type':'logic_and','nodes':[equal({'type':'query','query':'service.permission','object':{'identifier':e},'parameters':[]},{'type':'identifier','identifier':f}),orTree([equal({'type':'query','query':'permission.owner','object':{'identifier':f},'parameters':[]},{'type':'context','context':'Signer'}),{'type':'query','query':'permission.admin\x20has','object':{'identifier':f},'parameters':[{'type':'context','context':'Signer'}]}]),...h?[{'type':'logic_as_u256_greater_or_equal','nodes':[{'type':'context','context':'Clock'},{'type':'calc_number_add','nodes':[{'type':'query_progress_history_time','object':{'identifier':0x0,'convert_witness':'OrderProgress'},'where':{},'find':'last'},{'type':'identifier','identifier':g}]}]}]:[]]}:undefined,o=n===undefined?m:orTree([m,n]);return{'kind':'inline','description':'Segment\x20rail\x20guard\x20\x27'+b+'\x27\x20generated\x20at\x20build\x20time:\x20qualifying\x20node\x20set\x20{'+a['join'](',\x20')+'}\x20'+('('+a['length']+'\x20node(s)\x20—\x20every\x20shipped\x20segment\x20instance\x20plus\x20the\x20declared\x20safety-net\x20states)\x20AND\x20the\x20')+'per-fire\x20identifier-255\x20once\x20key\x20(the\x20submitted\x20progress.history\x20count\x20—\x20a\x20replay\x20at\x20the\x20same\x20node\x20aborts\x20'+('16)\x20AND\x20the\x20caller-authorization\x20leg\x20('+(c==='buyer'?'buyer\x20order-holder\x20or\x20its\x20registered\x20agent\x20only\x20—\x20the\x20counterparty\x20can\x20never\x20self-claim':!d['enabled']?'buyer\x20order-holder\x20or\x20its\x20registered\x20agent\x20only\x20(the\x20keeper\x20leg\x20is\x20OFF\x20—\x20keeper_release_after_days\x20set\x20to\x200)':h?'buyer\x20side\x20at\x20ANY\x20time,\x20OR\x20the\x20merchant-or-keeper\x20dynamic\x20permission\x20(service.permission\x20==\x20the\x20submitted\x20Permission,\x20signer\x20owns/administers\x20it)\x20but\x20ONLY\x20after\x20the\x20qualifying\x20node\x20has\x20been\x20entered\x20for\x20'+d['windowMs']+'ms\x20—\x20inside\x20the\x20window\x20the\x20buyer\x27s\x20signature\x20is\x20the\x20sole\x20key,\x20past\x20it\x20buyer\x20silence\x20can\x20no\x20longer\x20hold\x20the\x20escrow\x20(D-①\x20keeper\x20auto-release)':'buyer\x20side\x20OR\x20the\x20merchant-or-keeper\x20dynamic\x20permission\x20(service.permission\x20==\x20the\x20submitted\x20Permission,\x20signer\x20owns/administers\x20it)')+').\x20Generated\x20by\x20the\x20kernel\x27s\x20segment\x20expander\x20because\x20a\x20fixed-slot\x20tpl_*\x20body\x20cannot\x20follow\x20an\x20arbitrary\x20count.'),'table':j,'root':{'type':'logic_and','nodes':[k,l,o]}};}function buildSegmentRails(a,b,c,d,e,f){const g=i=>{if(i!=='buyer_or_keeper')return{'enabled':![]};const j=e['keeper_release_after_days']??a['fee_params']?.['keeper_release_after_days'];if(j===undefined)return{'enabled':!![]};const k=resolveLocalWindowMs(j,'day',f);return k!==null?{'enabled':!![],'windowMs':k}:{'enabled':![]};},h={};return(a['guards']??[])['forEach']((j,k)=>{const l=j['node_set_segments'],m=j['node_set_nodes'];if(l===undefined&&m===undefined)return;const o=j['key']??j['template_id']+'#'+k,p=[];for(const u of l??[]){const v=b['get'](u);if(v===undefined){c['push']({'code':'SEGMENT_REF_UNKNOWN','detail':'guard\x20\x27'+o+'\x27\x20node_set_segments\x20names\x20\x27'+u+'\x27,\x20which\x20is\x20no\x20declared\x20machine_shape\x20segment'});return;}for(const w of v)if(!p['includes'](w))p['push'](w);}for(const x of m??[])if(!p['includes'](x))p['push'](x);if(p['length']===0x0)return;const q=j['params']??{},r=q['node_set_caller']==='buyer_or_keeper'?'buyer_or_keeper':'buyer',s=g(r),t=p['length']+0x1+(s['enabled']?0x2:0x0)+(s['windowMs']!==undefined?0x1:0x0);if(t>MAX_GUARD_IDENTIFIER){c['push']({'code':'SEGMENT_GUARD_SLOTS_EXCEEDED','detail':'guard\x20\x27'+o+'\x27\x20needs\x20'+t+'\x20table\x20identifiers;\x20the\x20chain\x27s\x20guard-table\x20cap\x20(MAX_USER_IDENTIFIER)\x20is\x20'+(MAX_GUARD_IDENTIFIER+'.\x20Reduce\x20the\x20segment\x20count\x20or\x20split\x20the\x20rail\x20per\x20delivery\x20block')});return;}h[o]=segmentRailBody(p,o,r,s),d['push']('guard\x20\x27'+o+'\x27\x20rendered\x20at\x20build\x20time\x20over\x20'+p['length']+'\x20qualifying\x20node(s)\x20'+('(nested\x20logic_or,\x20'+MAX_MULTI_OPERANDS+'-child\x20cap\x20respected)')+(s['windowMs']!==undefined?';\x20D-①\x20keeper\x20auto-release\x20window\x20'+s['windowMs']+'ms\x20(buyer-only\x20inside\x20it)':s['enabled']?';\x20unconditional\x20keeper\x20leg\x20(no\x20keeper_release_after_days\x20knob)':';\x20keeper\x20leg\x20OFF\x20(keeper_release_after_days\x20<=\x200)'));}),h;}function checkRepeatAmountFloor(a,b,c){const d=a['allocator']?.['rows']??[],e=a['fee_params']??{},f=Number(e['min_term_price']),g=Number(e['max_discount_bps']??0x0);if(!Number['isFinite'](f)||f<=0x0)return;const h=f*(0x1-(Number['isFinite'](g)?g:0x0)/0x2710);for(const i of d){const j=typeof i['repeat_from']==='string'?i['repeat_from']:undefined;if(j===undefined)continue;const k=b['get'](j);if(k===undefined)continue;const l=typeof i['value_from']==='string'?i['value_from']:undefined,m=l!==undefined?e[l]:i['value'],n=Number(m);if(!Number['isFinite'](n)||n<=0x0)continue;const o=k*n;o>h&&c['push']({'code':'SEGMENT_COUNT_PRICE_FLOOR_BREACH','detail':'the\x20settlement\x20rail\x20repeats\x20'+k+'\x20time(s)\x20x\x20'+n+'\x20=\x20'+o+',\x20above\x20the\x20declared\x20price\x20floor\x20'+(h+'\x20(min_term_price\x20x\x20(1\x20-\x20max_discount_bps/10000)).\x20alloc()\x20asserts\x20balance\x20>=\x20fix\x20at\x20EVERY\x20')+'release,\x20so\x20the\x20tail\x20instance\x20aborts\x20EINSUFFICIENT_BALANCE\x20and\x20the\x20escrow\x20cannot\x20fully\x20leave\x20'+('(crs9-mn-261015\x20F-34).\x20Raise\x20term_price\x20above\x20'+o+',\x20or\x20lower\x20the\x20per-instance\x20Amount')});}}
@@ -1 +1 @@
1
- import{fillGuardTemplate}from'../knowledge/guard-templates.js';import{ONCE_SLOT_BYTES}from'../knowledge/onchain-constants.js';import{P,ref}from'./plan.js';const MS_PER_DAY=0x5265c00,DEFAULT_ACK_WINDOW_DAYS=0x3,query=(a,b,c,d=[])=>({'type':'query','query':a,'object':c===undefined?{'identifier':b}:{'identifier':b,'convert_witness':c},'parameters':d}),idn=a=>({'type':'identifier','identifier':a}),ctx=a=>({'type':'context','context':a}),eq=(c,d)=>({'type':'logic_equal','nodes':[c,d]}),anyOf=a=>({'type':'logic_or','nodes':a}),allOf=a=>({'type':'logic_and','nodes':a}),u256Gte=(c,d)=>({'type':'logic_as_u256_greater_or_equal','nodes':[c,d]}),u256Gt=(c,d)=>({'type':'logic_as_u256_greater','nodes':[c,d]}),numAdd=(c,d)=>({'type':'calc_number_add','nodes':[c,d]}),keysWhereAddressEq=(a,b,c)=>({'type':'query_repository_data_keys_where','object':{'identifier':a},'id':{'identifier':b},'where':{'kind':'addressEq','identifier':c}}),vecContainsString=(a,b)=>({'type':'vec_contains_string','nodes':[a,b]}),nodeEntryTime=(a,b,c)=>({'type':'query_progress_history_time','object':{'identifier':a,'convert_witness':'OrderProgress'},'where':{'nextNode':b},'find':c}),submittedOrder=(a,b)=>({'identifier':a,'b_submission':!![],'value_type':'Address','object_type':'Order','name':b}),constantAddress=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'Address','value':b,'name':c}),constantString=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'String','value':b,'name':c}),constantU64=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'U64','value':b,'name':c});function conjunctsOf(a){if(typeof a==='object'&&a!==null){const b=a;if(b['type']==='logic_and'&&Array['isArray'](b['nodes']))return b['nodes'];}return[a];}function hostOrderSlot(a){const b=a['find'](c=>c['b_submission']===!![]&&c['value_type']==='Address'&&c['object_type']==='Order'&&typeof c['identifier']==='number'&&c['identifier']<0xc8);return b===undefined?undefined:b['identifier'];}export function emitSupplyChainPromise(a){const b=[],c=[],d=[],e=a['axis'],f=a['form']??'rendezvous',g=a['fact_key']??'fulfilment',h=g+'_sub',i=a['ack_key']??g+'_ack',j=a['id_prefix']??'sc',k=a['service_step_id']??'service',l=a['ack_window_days']??(e==='merchant_procured'?DEFAULT_ACK_WINDOW_DAYS:0x0),m=a['payout_rate']??0x2710;for(const [F,G]of[['sub_service',a['sub_service']],['service_name',a['service_name']],['done_node',a['done_node']]]){(typeof G!=='string'||G['trim']()==='')&&b['push']({'code':'SUPPLY_CHAIN_PROMISE_INCOMPLETE','detail':'A\x20supply-chain\x20promise\x20needs\x20\x27'+F+'\x27:\x20the\x20procured\x20provider,\x20the\x20host\x20Service\x20and\x20the\x20node\x20'+'that\x20releases\x20the\x20money\x20are\x20the\x20three\x20facts\x20the\x20gate\x20is\x20built\x20from.\x20Nothing\x20was\x20guessed.'});}e!=='merchant_procured'&&e!=='user_procured'&&b['push']({'code':'SUPPLY_CHAIN_PROMISE_INCOMPLETE','detail':'fulfillment\x20axis\x20\x27'+String(e)+'\x27\x20is\x20not\x20a\x20procuring\x20axis.\x20Staff\x20under\x20the\x20shop\x27s\x20own\x20permission\x20'+'need\x20no\x20composition\x20(they\x20are\x20the\x20merchant),\x20and\x20self-fulfilment\x20has\x20no\x20third\x20party\x20to\x20pay\x20or\x20to\x20'+'disclose.\x20Declare\x20merchant_procured\x20or\x20user_procured.'});(!Number['isInteger'](m)||m<0x1||m>0x2710)&&b['push']({'code':'SUPPLY_CHAIN_PAYOUT_RATE','detail':'payout_rate\x20'+String(m)+'\x20is\x20outside\x201..10000\x20basis\x20points\x20of\x20the\x20settlement\x20rail.\x20Rate\x20legs\x20'+'must\x20sum\x20to\x20exactly\x2010000\x20when\x20nothing\x20takes\x20the\x20remainder,\x20so\x20an\x20out-of-range\x20share\x20aborts\x20the\x20'+'release\x20rather\x20than\x20paying\x20less.'});e==='merchant_procured'&&f==='rendezvous'&&l===0x0&&b['push']({'code':'SUPPLY_CHAIN_ACK_WITHOUT_DEADLINE','detail':'A\x20buyer\x20acknowledgement\x20with\x20no\x20deadline\x20gives\x20the\x20buyer\x20a\x20costless\x20veto\x20over\x20the\x20merchant\x27s\x20'+'settlement:\x20silence\x20would\x20hold\x20the\x20rail\x20shut\x20forever.\x20Pass\x20ack_window_days\x20(the\x20default\x20is\x20'+(DEFAULT_ACK_WINDOW_DAYS+')\x20so\x20silence\x20turns\x20into\x20acknowledgement,\x20or\x20drop\x20the\x20acknowledgement\x20')+'requirement\x20and\x20price\x20the\x20merchant-asserted\x20fact\x20into\x20the\x20listing\x20instead.'});if(b['length']>0x0)return{'steps':[],'inputs':{},'primitives':[],'notes':c,'blockers':b};const n=[],o=new Set(),p=j+'_gate',q='tpl_allocator_node_gate_settle_once',r=fillGuardTemplate(q,{'service_name':a['service_name']??'','settle_node':a['done_node'],'settle_node_alt':a['done_node_alt']??a['done_node'],'settle_node_alt2':a['done_node_alt2']??a['done_node']});if(!r['ok'])return{'steps':[],'inputs':{},'primitives':[],'notes':c,'blockers':[...b,{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':q+'\x20did\x20not\x20fill:\x20'+r['error']}]};const s=r['table']['map'](H=>({...H})),t=new Set(s['map'](H=>H['identifier'])),u=()=>{let H=0x3;while(t['has'](H))H+=0x1;return t['add'](H),H;},v=hostOrderSlot(s)??0x0,w=[],x=[],y=(H,I)=>{return x['push']('slot\x20'+String(H['identifier'])+'\x20`'+String(H['name'])+'`:\x20'+I),s['push'](H),H;},z=a['repository']??a['repository_name']??(a['service_name']??'')+'_supply_chain',A=a['repository']===undefined,B=j+'_rendezvous';let C=[],D='',E='';if(f==='rendezvous'){o['add']('P1');const H=u(),I=u(),J=u(),K=u(),L=u();y(constantAddress(H,z,'ledger'),A?'the\x20rendezvous\x20Repository\x20this\x20build\x20creates\x20and\x20binds\x20to\x20the\x20host\x20Service\x20(a\x20circular\x20'+'reference\x20by\x20name\x20—\x20resolved\x20when\x20the\x20plan\x20materializes)':'the\x20rendezvous\x20Repository\x20shared\x20with\x20the\x20fulfilment\x20side\x20(an\x20existing\x20object,\x20not\x20created\x20here)'),y(constantString(I,g,'fact_key'),'the\x20forward\x20policy\x20key:\x20the\x20ledger\x20row\x20whose\x20id\x20is\x20the\x20HOST\x20order\x20and\x20whose\x20value\x20is\x20the\x20fulfilment\x20order'),y(constantString(J,h,'reverse_key'),'the\x20reverse\x20policy\x20key:\x20the\x20ledger\x20row\x20whose\x20id\x20is\x20the\x20FULFILMENT\x20order\x20and\x20whose\x20value\x20is\x20the\x20host\x20order'),y(submittedOrder(K,'fulfilment_order'),'SUBMITTED\x20at\x20the\x20gate:\x20the\x20fulfilment\x20order\x20the\x20ledger\x20pairs\x20with\x20this\x20host\x20order.\x20Both\x20ledger\x20'+'directions\x20must\x20name\x20it,\x20so\x20a\x20delivery\x20that\x20was\x20never\x20paired\x20here\x20cannot\x20settle\x20this\x20order.'),y(constantAddress(L,a['sub_service'],'sub_service'),'the\x20procured\x20sub-Service\x20—\x20the\x20build-time\x20commitment.\x20The\x20submitted\x20fulfilment\x20order\x20must\x20be\x20an\x20'+'order\x20AT\x20this\x20Service,\x20which\x20is\x20what\x20stops\x20any\x20order\x20from\x20being\x20presented\x20as\x20the\x20fulfilment.'),w['push'](vecContainsString(keysWhereAddressEq(H,v,K),idn(I)),vecContainsString(keysWhereAddressEq(H,K,v),idn(J)));if(e==='merchant_procured'){n['push']({'op':'create','id':j+'_write','object':'guard','params':P({'description':'Fulfilment\x20write\x20credential\x20(merchant-procured):\x20the\x20writer\x20must\x20hold\x20the\x20fulfilment\x20'+('order,\x20and\x20that\x20order\x20must\x20belong\x20to\x20the\x20promised\x20provider\x20\x27'+a['sub_service']+'\x27.\x20')+'Slot\x20legend\x20—\x20slot\x200\x20`host_order`:\x20SUBMITTED,\x20the\x20host\x20order\x20this\x20fulfilment\x20serves;\x20it\x20'+'becomes\x20the\x20forward\x20ledger\x20row\x27s\x20id,\x20and\x20it\x20is\x20data\x20the\x20writer\x20ASSERTS\x20rather\x20than\x20an\x20'+'identity\x20they\x20prove.\x20Slot\x201\x20`fulfilment_order`:\x20SUBMITTED,\x20the\x20order\x20the\x20writer\x20holds\x20at\x20'+'the\x20procured\x20provider;\x20it\x20becomes\x20the\x20reverse\x20row\x27s\x20id.\x20Slot\x202\x20`sub_service`:\x20CONSTANT,\x20'+'the\x20build-time\x20commitment\x20slot\x201\x20is\x20checked\x20against.','table':[submittedOrder(0x0,'host_order'),submittedOrder(0x1,'fulfilment_order'),constantAddress(0x2,a['sub_service'],'sub_service')],'root':allOf([anyOf([eq(query('order.owner',0x1),ctx('Signer')),query('order.agent\x20has',0x1,undefined,[ctx('Signer')])]),eq(query('order.service',0x1),idn(0x2))])}),'notes':'No\x20once\x20slot\x20here:\x20the\x20consumed-once\x20table\x20lives\x20on\x20the\x20Allocation,\x20so\x20a\x20write\x20credential\x20gains\x20'+'nothing\x20from\x20one.\x20Replay\x20is\x20refused\x20by\x20the\x20two\x20write-once\x20policies\x20instead.\x20The\x20host\x20order\x20in\x20'+'slot\x200\x20is\x20data\x20the\x20writer\x20asserts,\x20not\x20an\x20identity\x20they\x20prove\x20—\x20that\x20asymmetry\x20is\x20what\x20the\x20'+'buyer\x20acknowledgement\x20leg\x20covers.'});const M=fillGuardTemplate('tpl_repository_write_order_holder',{});if(!M['ok'])return{'steps':n,'inputs':{},'primitives':[...o],'notes':c,'blockers':[{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':'tpl_repository_write_order_holder\x20did\x20not\x20fill:\x20'+M['error']}]};n['push']({'op':'create','id':j+'_ack','object':'guard','params':P({'description':'Buyer\x20acknowledgement\x20credential:\x20only\x20the\x20holder\x20of\x20the\x20host\x20order\x20(or\x20their\x20agent)\x20can\x20'+'confirm\x20that\x20the\x20procured\x20fulfilment\x20actually\x20reached\x20them.','table':M['table'],'root':M['root']}),'notes':'Canonical\x20order-holder\x20write\x20credential,\x20unmodified.'});const N=u();y(constantString(N,i,'ack_key'),'the\x20acknowledgement\x20policy\x20key:\x20a\x20write-once\x20row\x20keyed\x20by\x20the\x20HOST\x20order,\x20written\x20by\x20the\x20buyer\x20'+'(or\x20their\x20agent)\x20to\x20confirm\x20the\x20procured\x20fulfilment\x20actually\x20reached\x20them.');const O=[query('repository.data\x20has',H,undefined,[idn(N),idn(v)])];if(l>0x0){const Q=l*MS_PER_DAY,R=u();y(constantU64(R,Q,'ack_window_ms'),'the\x20acknowledgement\x20window\x20in\x20milliseconds\x20('+l+'\x20day(s)):\x20after\x20this\x20long\x20with\x20no\x20'+'acknowledgement\x20row,\x20the\x20buyer\x27s\x20silence\x20counts\x20as\x20acknowledgement.');const S=u();y(constantU64(S,0x0,'no_entry'),'constant\x200\x20—\x20the\x20value\x20query\x201280\x20returns\x20when\x20the\x20order\x20has\x20NO\x20recorded\x20entry\x20into\x20the\x20'+'anchoring\x20node.\x20The\x20deadline\x20leg\x20is\x20gated\x20on\x20the\x20anchor\x20being\x20above\x20it.');const T=nodeEntryTime(v,a['done_node'],'last');O['push'](allOf([u256Gt(T,idn(S)),u256Gte(ctx('Clock'),numAdd(T,idn(R)))])),d['push']({'param':j+'.ack_window_ms','from':'ack_window_days','input':l,'value':Q,'at_ms':Date['now'](),'note':'The\x20chain\x20compares\x20one\x20absolute\x20millisecond\x20timestamp,\x20so\x20the\x20day\x20count\x20is\x20converted\x20here\x20'+'and\x20the\x20product\x20rides\x20in\x20the\x20guard\x20table\x20where\x20the\x20buyer\x20can\x20read\x20it.'}),c['push']('Buyer\x20silence\x20counts\x20as\x20acknowledgement\x20'+l+'\x20day(s)\x20after\x20the\x20order\x20LAST\x20entered\x20'+('\x27'+a['done_node']+'\x27\x20(defaulted\x20—\x20raise\x20or\x20lower\x20ack_window_days;\x20it\x20is\x20the\x20merchant\x27s\x20risk\x20')+'parameter,\x20not\x20a\x20protocol\x20constant).\x20Residual:\x20a\x20Machine\x20that\x20lets\x20the\x20buyer\x20re-enter\x20'+('\x27'+a['done_node']+'\x27\x20re-arms\x20that\x20window,\x20so\x20do\x20not\x20offer\x20a\x20buyer-triggered\x20forward\x20back\x20into\x20')+'it\x20—\x20or\x20treat\x20the\x20window\x20as\x20a\x20floor\x20rather\x20than\x20a\x20deadline.'),c['push']('The\x20deadline\x20only\x20runs\x20from\x20a\x20RECORDED\x20entry\x20into\x20\x27'+a['done_node']+'\x27.\x20An\x20order\x20sitting\x20at\x20'+('\x27'+(a['done_node_alt']??a['done_node'])+'\x27\x20instead,\x20or\x20one\x20created\x20at\x20the\x20node\x20without\x20a\x20')+'forward,\x20has\x20no\x20entry\x20to\x20anchor\x20on\x20—\x20there\x20the\x20acknowledgement\x20row\x20is\x20the\x20only\x20way\x20to\x20settle.');}w['push'](anyOf(O)),D='Rendezvous\x20ledger\x20between\x20the\x20host\x20Service\x20and\x20its\x20procured\x20fulfilment\x20provider.\x20Rows\x20are\x20'+'public\x20and\x20permanent:\x20they\x20carry\x20order\x20addresses\x20only,\x20never\x20a\x20name,\x20a\x20phone\x20number\x20or\x20an\x20'+'address\x20to\x20deliver\x20to.',C=[{'name':g,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order\x20(key\x20=\x20the\x20host\x20order\x20address,\x20value\x20=\x20the\x20'+'fulfilment\x20order\x20the\x20merchant\x20says\x20served\x20it).\x20The\x20money\x20gate\x20reads\x20it\x20through\x20'+'query\x201177,\x20which\x20type-checks\x20the\x20stored\x20Address\x20against\x20the\x20submitted\x20one.','write_guard':[{'guard':ref(j+'_write'),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':h,'description':'One\x20write-once\x20row\x20per\x20FULFILMENT\x20order\x20(key\x20=\x20the\x20fulfilment\x20order\x20address,\x20value\x20'+'=\x20the\x20host\x20order\x20it\x20served).\x20This\x20is\x20the\x20pairing\x20key:\x20because\x20the\x20row\x20is\x20write-once\x20'+'on\x20the\x20fulfilment\x20order,\x20ONE\x20delivery\x20can\x20never\x20be\x20presented\x20against\x20two\x20host\x20'+'orders,\x20and\x20the\x20gate\x27s\x20reverse\x20leg\x20proves\x20the\x20pairing\x20in\x20that\x20direction.','write_guard':[{'guard':ref(j+'_write'),'id_from_submission':0x1,'data_from_submission':0x0}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':i,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order,\x20written\x20by\x20the\x20buyer\x20(or\x20their\x20agent)\x20to\x20confirm\x20'+'receipt.\x20The\x20money\x20gate\x20accepts\x20either\x20this\x20row\x20or\x20an\x20expired\x20acknowledgement\x20'+'window.','write_guard':[{'guard':ref(j+'_ack'),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'U64','write_once':!![]}],E='The\x20fulfilment\x20side\x20writes\x20both\x20fulfilment\x20rows\x20(one\x20call\x20per\x20policy\x20key,\x20both\x20under\x20the\x20same\x20'+'credential);\x20the\x20acknowledgement\x20row\x20is\x20written\x20by\x20the\x20buyer.\x20No\x20row\x20carries\x20a\x20delivery\x20address\x20'+'—\x20see\x20the\x20privacy\x20note\x20for\x20where\x20that\x20belongs.',c['push']('Merchant-asserted\x20fact:\x20the\x20merchant\x20names\x20which\x20host\x20order\x20a\x20delivery\x20served,\x20and\x20the\x20chain\x20can\x20'+'verify\x20the\x20provider\x20and\x20the\x20pairing\x27s\x20uniqueness\x20but\x20NOT\x20that\x20the\x20delivery\x20physically\x20reached\x20this\x20'+'buyer.\x20The\x20buyer\x27s\x20acknowledgement\x20row\x20is\x20the\x20only\x20tie\x20to\x20reality,\x20so\x20the\x20acknowledgement\x20window\x20is\x20'+'a\x20real\x20risk\x20parameter\x20—\x20a\x20long\x20window\x20means\x20the\x20merchant\x20waits,\x20a\x20short\x20one\x20means\x20the\x20buyer\x20loses\x20'+'the\x20chance\x20to\x20object.');}else{const U=j+'_write',V=fillGuardTemplate('tpl_repository_write_order_holder',{});if(!V['ok'])return{'steps':n,'inputs':{},'primitives':[...o],'notes':c,'blockers':[{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':'tpl_repository_write_order_holder\x20did\x20not\x20fill:\x20'+V['error']}]};const W=V['table']['map'](Y=>({...Y})),X=W['find'](Y=>Y['identifier']===0x1);X!==undefined&&(X['value_type']='Address',X['object_type']='Order',X['name']='fulfilment_order'),n['push']({'op':'create','id':U,'object':'guard','params':P({'description':'Fulfilment\x20write\x20credential\x20(user-procured):\x20the\x20holder\x20of\x20the\x20host\x20order\x20records\x20which\x20'+'fulfilment\x20order\x20they\x20procured\x20for\x20it.\x20Slot\x20legend\x20—\x20slot\x200\x20`host_order`:\x20SUBMITTED,\x20the\x20'+'buyer\x27s\x20own\x20host\x20order;\x20the\x20caller\x20must\x20hold\x20it.\x20Slot\x201\x20`fulfilment_order`:\x20SUBMITTED,\x20'+'the\x20fulfilment\x20order\x20the\x20buyer\x20procured,\x20retyped\x20here\x20to\x20an\x20order\x20Address\x20because\x20the\x20'+'ledger\x20row\x20it\x20fills\x20is\x20keyed\x20by\x20an\x20address,\x20not\x20a\x20receipt\x20marker.','table':W,'root':V['root']}),'notes':'Canonical\x20order-holder\x20write\x20credential;\x20only\x20the\x20value\x20slot\x20is\x20retyped\x20to\x20an\x20order\x20address.'}),D='Rendezvous\x20ledger\x20for\x20a\x20user-procured\x20fulfilment.\x20Rows\x20are\x20public\x20and\x20permanent:\x20they\x20carry\x20'+'order\x20addresses\x20only,\x20never\x20a\x20name,\x20a\x20phone\x20number\x20or\x20an\x20address\x20to\x20deliver\x20to.',C=[{'name':g,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order\x20(key\x20=\x20the\x20host\x20order\x20address,\x20value\x20=\x20the\x20'+'fulfilment\x20order\x20the\x20buyer\x20procured\x20for\x20it).','write_guard':[{'guard':ref(U),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':h,'description':'One\x20write-once\x20row\x20per\x20FULFILMENT\x20order\x20(key\x20=\x20the\x20fulfilment\x20order\x20address,\x20value\x20'+'=\x20the\x20host\x20order\x20it\x20served).\x20Without\x20it\x20the\x20buyer\x20could\x20procure\x20one\x20delivery\x20and\x20'+'present\x20it\x20against\x20every\x20host\x20order\x20they\x20own.','write_guard':[{'guard':ref(U),'id_from_submission':0x1,'data_from_submission':0x0}],'id_from':'none','value_type':'Address','write_once':!![]}],E='Write-once\x20in\x20both\x20directions:\x20one\x20fulfilment\x20fact\x20per\x20host\x20order\x20and\x20one\x20host\x20order\x20per\x20fulfilment.';}A?n['push']({'op':'create','id':B,'object':'repository','params':P({'name':z,'description':D,'policies':C}),'notes':E}):c['push']('Reusing\x20the\x20existing\x20rendezvous\x20Repository\x20\x27'+z+'\x27:\x20this\x20build\x20neither\x20creates\x20nor\x20binds\x20'+('it.\x20It\x20must\x20ALREADY\x20carry\x20'+C['map'](Y=>'\x27'+String(Y['name'])+'\x27\x20(write_once,\x20'+String(Y['value_type'])+')')['join'](',\x20')+'\x20with\x20the\x20row\x20ids\x20the\x20handoff\x20describes,\x20or\x20the\x20gate\x20can\x20never\x20be\x20satisfied\x20—\x20and\x20')+'a\x20Repository\x27s\x20policies\x20cannot\x20be\x20re-pointed\x20at\x20another\x20write\x20guard\x20afterwards.'),o['add']('P2'),o['add']('P3'),w['push'](eq(query('order.service',K),idn(L))),e==='user_procured'?w['push'](eq(query('order.owner',K),query('order.owner',v))):c['push']('No\x20owner\x20tie\x20is\x20emitted:\x20on\x20the\x20merchant-procured\x20axis\x20the\x20buyer\x20does\x20not\x20own\x20the\x20fulfilment\x20'+'order,\x20so\x20an\x20equality\x20between\x20the\x20two\x20owners\x20could\x20never\x20hold.\x20The\x20provider\x20pin\x20plus\x20the\x20'+'write-once\x20bijection\x20plus\x20the\x20buyer\x20acknowledgement\x20are\x20the\x20tie\x20instead.');}else{o['add']('P2'),o['add']('P3');const Y=u(),Z=u();y(submittedOrder(Y,'fulfilment_order'),'SUBMITTED\x20at\x20the\x20gate:\x20the\x20fulfilment\x20order\x20the\x20caller\x20presents.\x20It\x20must\x20be\x20an\x20order\x20at\x20the\x20promised\x20'+'provider,\x20and\x20on\x20the\x20user-procured\x20axis\x20it\x20must\x20belong\x20to\x20the\x20same\x20owner\x20as\x20this\x20host\x20order.'),y(constantAddress(Z,a['sub_service'],'sub_service'),'the\x20procured\x20sub-Service\x20—\x20the\x20build-time\x20commitment\x20the\x20submitted\x20fulfilment\x20order\x20is\x20checked\x20against.'),y(submittedOrder(ONCE_SLOT_BYTES,'once_key'),'protocol\x20slot\x20255\x20—\x20the\x20byte-keyed\x20ONCE\x20slot.\x20Submit\x20the\x20SAME\x20fulfilment\x20order\x20address\x20as\x20'+'`fulfilment_order`;\x20the\x20Allocation\x27s\x20consumed-once\x20table\x20then\x20makes\x20that\x20delivery\x20single-use\x20'+'across\x20EVERY\x20order\x20of\x20this\x20Service,\x20which\x20the\x20chain-derived\x20254\x20(once\x20per\x20paying\x20order)\x20cannot\x20do.'),w['push'](eq(query('order.service',Y),idn(Z)),eq(idn(ONCE_SLOT_BYTES),idn(Y))),e==='user_procured'?w['push'](eq(query('order.owner',Y),query('order.owner',v))):c['push']('No\x20owner\x20tie\x20is\x20emitted:\x20on\x20the\x20merchant-procured\x20axis\x20the\x20buyer\x20does\x20not\x20own\x20the\x20fulfilment\x20order.'),c['push']('Submission\x20form:\x20the\x20fulfilment\x20order\x20is\x20named\x20at\x20the\x20gate\x20instead\x20of\x20being\x20recorded\x20in\x20a\x20shared\x20'+'ledger.\x20The\x20255\x20once\x20key\x20makes\x20each\x20delivery\x20single-use\x20across\x20the\x20Service,\x20but\x20NOTHING\x20binds\x20it\x20to\x20'+'THIS\x20host\x20order\x20—\x20a\x20merchant\x20can\x20present\x20any\x20order\x20at\x20the\x20promised\x20provider.\x20Prefer\x20the\x20rendezvous\x20'+'form,\x20which\x20proves\x20the\x20pairing\x20in\x20both\x20directions.');}n['push']({'op':'create','id':p,'object':'guard','params':P({'description':'Settlement\x20gate\x20for\x20a\x20'+(e==='merchant_procured'?'merchant-procured':'user-procured')+'\x20'+('fulfilment\x20('+f+'\x20form):\x20the\x20canonical\x20single-shot\x20settlement\x20gate\x20plus\x20the\x20composition\x20legs\x20the\x20')+'promise\x20requires.'+(x['length']>0x0?'\x20Slot\x20legend\x20—\x20the\x20on-chain\x20row\x20names\x20are\x20short\x20identifiers,\x20so\x20this\x20is\x20what\x20each\x20'+('composition\x20slot\x20carries:\x0a'+x['map'](a0=>'-\x20'+a0)['join']('\x0a')):''),'table':s,'root':allOf([...conjunctsOf(r['root']),...w])}),'notes':'Built\x20on\x20'+q+'\x20(node-set\x20arrival,\x20claimed_by\x20polarity,\x20caller\x20authorization\x20and\x20the\x20'+'chain-derived\x20254\x20once\x20key),\x20extended\x20with\x20the\x20supply-chain\x20legs.\x20Every\x20leg\x20is\x20evaluated:\x20the\x20evaluator\x20'+'has\x20no\x20short-circuit,\x20so\x20a\x20submission\x20the\x20caller\x20omits\x20aborts\x20the\x20call\x20rather\x20than\x20passing\x20silently.'});f==='rendezvous'&&A&&n['push']({'op':'configure','id':j+'_bind_repository','target':ref(k),'method':'repositories','params':P({'op':'add','objects':[ref(B)]}),'requires':[k,B]});if(a['payout_to']!==undefined&&a['payout_to']['trim']()!==''){const a0=[{'guard':ref(p),'track':'settlement','mode':'rate','sharing':[{'who':{'Entity':a['payout_to']},'rate':String(m)}]}];if(m<0x2710)a0['push']({'guard':ref(p),'track':'settlement','mode':'surplus'});n['push']({'op':'configure','id':j+'_alloc','target':ref(k),'method':'order_allocators','params':P({'allocators':a0}),'requires':[k,p],'notes':'Pays\x20the\x20fulfilment\x20party\x20'+m/0x64+'%\x20of\x20the\x20settlement\x20rail'+(m<0x2710?';\x20the\x20remainder\x20goes\x20to\x20the\x20shop':'')+'.\x20Allocator\x20rows\x20are\x20append-only\x20once\x20the\x20Service\x20is\x20published,\x20so\x20this\x20leg\x20cannot\x20be\x20added\x20later\x20'+'to\x20repair\x20a\x20missing\x20payout\x20path.'}),c['push']('This\x20adds\x20a\x20SECOND\x20settlement\x20rail\x20beside\x20the\x20shop\x27s\x20own.\x20Both\x20draw\x20on\x20the\x20same\x20order\x20balance\x20and\x20the\x20'+'order\x20in\x20which\x20they\x20are\x20fired\x20decides\x20who\x20is\x20paid\x20first\x20—\x20fire\x20the\x20composition\x20gate\x20only\x20after\x20the\x20'+'fulfilment\x20fact\x20is\x20true,\x20or\x20the\x20shop\x27s\x20own\x20rail\x20may\x20find\x20nothing\x20left.');}else c['push']('No\x20payout\x20leg\x20was\x20emitted\x20for\x20the\x20fulfilment\x20party.\x20With\x20no\x20third-party\x20rail\x20and\x20no\x20reward\x20pool,\x20a\x20'+'ruling\x20in\x20that\x20party\x27s\x20favour\x20has\x20no\x20execution\x20path\x20—\x20the\x20publish\x20audit\x20refuses\x20that\x20combination\x20'+'(COMPOSE-LIABILITY-01).\x20Pass\x20payout_to\x20(and\x20payout_rate)\x20to\x20open\x20the\x20rail,\x20or\x20mount\x20a\x20reward\x20pool\x20the\x20'+'party\x20can\x20claim\x20from.');return c['push']('Privacy:\x20the\x20fulfilment\x20party\x20needs\x20the\x20buyer\x27s\x20contact\x20or\x20delivery\x20details,\x20and\x20NOTHING\x20on\x20chain\x20carries\x20'+'them\x20privately\x20—\x20a\x20ledger\x20row,\x20a\x20forward\x20message\x20and\x20a\x20retained\x20submission\x20are\x20all\x20public\x20forever.\x20Send\x20'+'them\x20through\x20the\x20encrypted\x20channel\x20and\x20keep\x20only\x20a\x20hash\x20or\x20an\x20order\x20address\x20on\x20chain.'),{'steps':n,'inputs':{'fulfillment_axis':e},'primitives':[...o]['sort'](),'notes':c,'blockers':b,...f==='rendezvous'?{'handoff':{'repository':z,'writes':handoffWrites(C)}}:{},...d['length']>0x0?{'derived_params':d}:{}};}function handoffWrites(a){const b=(c,d)=>{if(c===0x0)return'the\x20HOST\x20order\x20address';if(c===0x1)return d==='U64'?'1\x20(a\x20receipt\x20marker)':'the\x20FULFILMENT\x20order\x20address';return'supplied\x20explicitly\x20by\x20the\x20caller\x20(no\x20submission\x20slot)';};return a['map'](c=>{const d=c['write_guard']??[],e=d[0x0]?.['id_from_submission'],f=d[0x0]?.['data_from_submission'];return{'policy':String(c['name']??''),'row_id':b(e,c['value_type']),'value':b(f,c['value_type']),'write_guard':String(d[0x0]?.['guard']?.['$ref']??''),'submissions':'slot\x200\x20=\x20the\x20host\x20order,\x20slot\x201\x20=\x20the\x20other\x20side\x20of\x20the\x20row'};});}
1
+ import{fillGuardTemplate}from'../knowledge/guard-templates.js';import{ONCE_SLOT_BYTES}from'../knowledge/onchain-constants.js';import{resolveLocalWindowMs}from'../knowledge/time-units.js';import{P,ref}from'./plan.js';const MS_PER_DAY=0x5265c00,DEFAULT_ACK_WINDOW_DAYS=0x3,query=(a,b,c,d=[])=>({'type':'query','query':a,'object':c===undefined?{'identifier':b}:{'identifier':b,'convert_witness':c},'parameters':d}),idn=a=>({'type':'identifier','identifier':a}),ctx=a=>({'type':'context','context':a}),eq=(c,d)=>({'type':'logic_equal','nodes':[c,d]}),anyOf=a=>({'type':'logic_or','nodes':a}),allOf=a=>({'type':'logic_and','nodes':a}),u256Gte=(c,d)=>({'type':'logic_as_u256_greater_or_equal','nodes':[c,d]}),u256Gt=(c,d)=>({'type':'logic_as_u256_greater','nodes':[c,d]}),numAdd=(c,d)=>({'type':'calc_number_add','nodes':[c,d]}),keysWhereAddressEq=(a,b,c)=>({'type':'query_repository_data_keys_where','object':{'identifier':a},'id':{'identifier':b},'where':{'kind':'addressEq','identifier':c}}),vecContainsString=(a,b)=>({'type':'vec_contains_string','nodes':[a,b]}),nodeEntryTime=(a,b,c)=>({'type':'query_progress_history_time','object':{'identifier':a,'convert_witness':'OrderProgress'},'where':{'nextNode':b},'find':c}),submittedOrder=(a,b)=>({'identifier':a,'b_submission':!![],'value_type':'Address','object_type':'Order','name':b}),constantAddress=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'Address','value':b,'name':c}),constantString=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'String','value':b,'name':c}),constantU64=(a,b,c)=>({'identifier':a,'b_submission':![],'value_type':'U64','value':b,'name':c});function conjunctsOf(a){if(typeof a==='object'&&a!==null){const b=a;if(b['type']==='logic_and'&&Array['isArray'](b['nodes']))return b['nodes'];}return[a];}function hostOrderSlot(a){const b=a['find'](c=>c['b_submission']===!![]&&c['value_type']==='Address'&&c['object_type']==='Order'&&typeof c['identifier']==='number'&&c['identifier']<0xc8);return b===undefined?undefined:b['identifier'];}export function emitSupplyChainPromise(a,b='production'){const c=[],d=[],e=[],f=a['axis'],g=a['form']??'rendezvous',h=a['fact_key']??'fulfilment',i=h+'_sub',j=a['ack_key']??h+'_ack',k=a['id_prefix']??'sc',l=a['service_step_id']??'service',m=a['ack_window_days']??(f==='merchant_procured'?DEFAULT_ACK_WINDOW_DAYS:0x0),n=a['payout_rate']??0x2710;for(const [G,H]of[['sub_service',a['sub_service']],['service_name',a['service_name']],['done_node',a['done_node']]]){(typeof H!=='string'||H['trim']()==='')&&c['push']({'code':'SUPPLY_CHAIN_PROMISE_INCOMPLETE','detail':'A\x20supply-chain\x20promise\x20needs\x20\x27'+G+'\x27:\x20the\x20procured\x20provider,\x20the\x20host\x20Service\x20and\x20the\x20node\x20'+'that\x20releases\x20the\x20money\x20are\x20the\x20three\x20facts\x20the\x20gate\x20is\x20built\x20from.\x20Nothing\x20was\x20guessed.'});}f!=='merchant_procured'&&f!=='user_procured'&&c['push']({'code':'SUPPLY_CHAIN_PROMISE_INCOMPLETE','detail':'fulfillment\x20axis\x20\x27'+String(f)+'\x27\x20is\x20not\x20a\x20procuring\x20axis.\x20Staff\x20under\x20the\x20shop\x27s\x20own\x20permission\x20'+'need\x20no\x20composition\x20(they\x20are\x20the\x20merchant),\x20and\x20self-fulfilment\x20has\x20no\x20third\x20party\x20to\x20pay\x20or\x20to\x20'+'disclose.\x20Declare\x20merchant_procured\x20or\x20user_procured.'});(!Number['isInteger'](n)||n<0x1||n>0x2710)&&c['push']({'code':'SUPPLY_CHAIN_PAYOUT_RATE','detail':'payout_rate\x20'+String(n)+'\x20is\x20outside\x201..10000\x20basis\x20points\x20of\x20the\x20settlement\x20rail.\x20Rate\x20legs\x20'+'must\x20sum\x20to\x20exactly\x2010000\x20when\x20nothing\x20takes\x20the\x20remainder,\x20so\x20an\x20out-of-range\x20share\x20aborts\x20the\x20'+'release\x20rather\x20than\x20paying\x20less.'});f==='merchant_procured'&&g==='rendezvous'&&m===0x0&&c['push']({'code':'SUPPLY_CHAIN_ACK_WITHOUT_DEADLINE','detail':'A\x20buyer\x20acknowledgement\x20with\x20no\x20deadline\x20gives\x20the\x20buyer\x20a\x20costless\x20veto\x20over\x20the\x20merchant\x27s\x20'+'settlement:\x20silence\x20would\x20hold\x20the\x20rail\x20shut\x20forever.\x20Pass\x20ack_window_days\x20(the\x20default\x20is\x20'+(DEFAULT_ACK_WINDOW_DAYS+')\x20so\x20silence\x20turns\x20into\x20acknowledgement,\x20or\x20drop\x20the\x20acknowledgement\x20')+'requirement\x20and\x20price\x20the\x20merchant-asserted\x20fact\x20into\x20the\x20listing\x20instead.'});if(c['length']>0x0)return{'steps':[],'inputs':{},'primitives':[],'notes':d,'blockers':c};const o=[],p=new Set(),q=k+'_gate',r='tpl_allocator_node_gate_settle_once',s=fillGuardTemplate(r,{'service_name':a['service_name']??'','settle_node':a['done_node'],'settle_node_alt':a['done_node_alt']??a['done_node'],'settle_node_alt2':a['done_node_alt2']??a['done_node']});if(!s['ok'])return{'steps':[],'inputs':{},'primitives':[],'notes':d,'blockers':[...c,{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':r+'\x20did\x20not\x20fill:\x20'+s['error']}]};const t=s['table']['map'](I=>({...I})),u=new Set(t['map'](I=>I['identifier'])),v=()=>{let I=0x3;while(u['has'](I))I+=0x1;return u['add'](I),I;},w=hostOrderSlot(t)??0x0,x=[],y=[],z=(I,J)=>{return y['push']('slot\x20'+String(I['identifier'])+'\x20`'+String(I['name'])+'`:\x20'+J),t['push'](I),I;},A=a['repository']??a['repository_name']??(a['service_name']??'')+'_supply_chain',B=a['repository']===undefined,C=k+'_rendezvous';let D=[],E='',F='';if(g==='rendezvous'){p['add']('P1');const I=v(),J=v(),K=v(),L=v(),M=v();z(constantAddress(I,A,'ledger'),B?'the\x20rendezvous\x20Repository\x20this\x20build\x20creates\x20and\x20binds\x20to\x20the\x20host\x20Service\x20(a\x20circular\x20'+'reference\x20by\x20name\x20—\x20resolved\x20when\x20the\x20plan\x20materializes)':'the\x20rendezvous\x20Repository\x20shared\x20with\x20the\x20fulfilment\x20side\x20(an\x20existing\x20object,\x20not\x20created\x20here)'),z(constantString(J,h,'fact_key'),'the\x20forward\x20policy\x20key:\x20the\x20ledger\x20row\x20whose\x20id\x20is\x20the\x20HOST\x20order\x20and\x20whose\x20value\x20is\x20the\x20fulfilment\x20order'),z(constantString(K,i,'reverse_key'),'the\x20reverse\x20policy\x20key:\x20the\x20ledger\x20row\x20whose\x20id\x20is\x20the\x20FULFILMENT\x20order\x20and\x20whose\x20value\x20is\x20the\x20host\x20order'),z(submittedOrder(L,'fulfilment_order'),'SUBMITTED\x20at\x20the\x20gate:\x20the\x20fulfilment\x20order\x20the\x20ledger\x20pairs\x20with\x20this\x20host\x20order.\x20Both\x20ledger\x20'+'directions\x20must\x20name\x20it,\x20so\x20a\x20delivery\x20that\x20was\x20never\x20paired\x20here\x20cannot\x20settle\x20this\x20order.'),z(constantAddress(M,a['sub_service'],'sub_service'),'the\x20procured\x20sub-Service\x20—\x20the\x20build-time\x20commitment.\x20The\x20submitted\x20fulfilment\x20order\x20must\x20be\x20an\x20'+'order\x20AT\x20this\x20Service,\x20which\x20is\x20what\x20stops\x20any\x20order\x20from\x20being\x20presented\x20as\x20the\x20fulfilment.'),x['push'](vecContainsString(keysWhereAddressEq(I,w,L),idn(J)),vecContainsString(keysWhereAddressEq(I,L,w),idn(K)));if(f==='merchant_procured'){o['push']({'op':'create','id':k+'_write','object':'guard','params':P({'description':'Fulfilment\x20write\x20credential\x20(merchant-procured):\x20the\x20writer\x20must\x20hold\x20the\x20fulfilment\x20'+('order,\x20and\x20that\x20order\x20must\x20belong\x20to\x20the\x20promised\x20provider\x20\x27'+a['sub_service']+'\x27.\x20')+'Slot\x20legend\x20—\x20slot\x200\x20`host_order`:\x20SUBMITTED,\x20the\x20host\x20order\x20this\x20fulfilment\x20serves;\x20it\x20'+'becomes\x20the\x20forward\x20ledger\x20row\x27s\x20id,\x20and\x20it\x20is\x20data\x20the\x20writer\x20ASSERTS\x20rather\x20than\x20an\x20'+'identity\x20they\x20prove.\x20Slot\x201\x20`fulfilment_order`:\x20SUBMITTED,\x20the\x20order\x20the\x20writer\x20holds\x20at\x20'+'the\x20procured\x20provider;\x20it\x20becomes\x20the\x20reverse\x20row\x27s\x20id.\x20Slot\x202\x20`sub_service`:\x20CONSTANT,\x20'+'the\x20build-time\x20commitment\x20slot\x201\x20is\x20checked\x20against.','table':[submittedOrder(0x0,'host_order'),submittedOrder(0x1,'fulfilment_order'),constantAddress(0x2,a['sub_service'],'sub_service')],'root':allOf([anyOf([eq(query('order.owner',0x1),ctx('Signer')),query('order.agent\x20has',0x1,undefined,[ctx('Signer')])]),eq(query('order.service',0x1),idn(0x2))])}),'notes':'No\x20once\x20slot\x20here:\x20the\x20consumed-once\x20table\x20lives\x20on\x20the\x20Allocation,\x20so\x20a\x20write\x20credential\x20gains\x20'+'nothing\x20from\x20one.\x20Replay\x20is\x20refused\x20by\x20the\x20two\x20write-once\x20policies\x20instead.\x20The\x20host\x20order\x20in\x20'+'slot\x200\x20is\x20data\x20the\x20writer\x20asserts,\x20not\x20an\x20identity\x20they\x20prove\x20—\x20that\x20asymmetry\x20is\x20what\x20the\x20'+'buyer\x20acknowledgement\x20leg\x20covers.'});const N=fillGuardTemplate('tpl_repository_write_order_holder',{});if(!N['ok'])return{'steps':o,'inputs':{},'primitives':[...p],'notes':d,'blockers':[{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':'tpl_repository_write_order_holder\x20did\x20not\x20fill:\x20'+N['error']}]};o['push']({'op':'create','id':k+'_ack','object':'guard','params':P({'description':'Buyer\x20acknowledgement\x20credential:\x20only\x20the\x20holder\x20of\x20the\x20host\x20order\x20(or\x20their\x20agent)\x20can\x20'+'confirm\x20that\x20the\x20procured\x20fulfilment\x20actually\x20reached\x20them.','table':N['table'],'root':N['root']}),'notes':'Canonical\x20order-holder\x20write\x20credential,\x20unmodified.'});const O=v();z(constantString(O,j,'ack_key'),'the\x20acknowledgement\x20policy\x20key:\x20a\x20write-once\x20row\x20keyed\x20by\x20the\x20HOST\x20order,\x20written\x20by\x20the\x20buyer\x20'+'(or\x20their\x20agent)\x20to\x20confirm\x20the\x20procured\x20fulfilment\x20actually\x20reached\x20them.');const Q=[query('repository.data\x20has',I,undefined,[idn(O),idn(w)])];if(m>0x0){const R=resolveLocalWindowMs(m,'day',b)??m*MS_PER_DAY,S=v();z(constantU64(S,R,'ack_window_ms'),'the\x20acknowledgement\x20window\x20in\x20milliseconds\x20('+m+'\x20day(s)):\x20after\x20this\x20long\x20with\x20no\x20'+'acknowledgement\x20row,\x20the\x20buyer\x27s\x20silence\x20counts\x20as\x20acknowledgement.');const T=v();z(constantU64(T,0x0,'no_entry'),'constant\x200\x20—\x20the\x20value\x20query\x201280\x20returns\x20when\x20the\x20order\x20has\x20NO\x20recorded\x20entry\x20into\x20the\x20'+'anchoring\x20node.\x20The\x20deadline\x20leg\x20is\x20gated\x20on\x20the\x20anchor\x20being\x20above\x20it.');const U=nodeEntryTime(w,a['done_node'],'last');Q['push'](allOf([u256Gt(U,idn(T)),u256Gte(ctx('Clock'),numAdd(U,idn(S)))])),e['push']({'param':k+'.ack_window_ms','from':'ack_window_days','input':m,'value':R,'at_ms':Date['now'](),'note':'The\x20chain\x20compares\x20one\x20absolute\x20millisecond\x20timestamp,\x20so\x20the\x20day\x20count\x20is\x20converted\x20here\x20'+'and\x20the\x20product\x20rides\x20in\x20the\x20guard\x20table\x20where\x20the\x20buyer\x20can\x20read\x20it.'}),d['push']('Buyer\x20silence\x20counts\x20as\x20acknowledgement\x20'+m+'\x20day(s)\x20after\x20the\x20order\x20LAST\x20entered\x20'+('\x27'+a['done_node']+'\x27\x20(defaulted\x20—\x20raise\x20or\x20lower\x20ack_window_days;\x20it\x20is\x20the\x20merchant\x27s\x20risk\x20')+'parameter,\x20not\x20a\x20protocol\x20constant).\x20Residual:\x20a\x20Machine\x20that\x20lets\x20the\x20buyer\x20re-enter\x20'+('\x27'+a['done_node']+'\x27\x20re-arms\x20that\x20window,\x20so\x20do\x20not\x20offer\x20a\x20buyer-triggered\x20forward\x20back\x20into\x20')+'it\x20—\x20or\x20treat\x20the\x20window\x20as\x20a\x20floor\x20rather\x20than\x20a\x20deadline.'),d['push']('The\x20deadline\x20only\x20runs\x20from\x20a\x20RECORDED\x20entry\x20into\x20\x27'+a['done_node']+'\x27.\x20An\x20order\x20sitting\x20at\x20'+('\x27'+(a['done_node_alt']??a['done_node'])+'\x27\x20instead,\x20or\x20one\x20created\x20at\x20the\x20node\x20without\x20a\x20')+'forward,\x20has\x20no\x20entry\x20to\x20anchor\x20on\x20—\x20there\x20the\x20acknowledgement\x20row\x20is\x20the\x20only\x20way\x20to\x20settle.');}x['push'](anyOf(Q)),E='Rendezvous\x20ledger\x20between\x20the\x20host\x20Service\x20and\x20its\x20procured\x20fulfilment\x20provider.\x20Rows\x20are\x20'+'public\x20and\x20permanent:\x20they\x20carry\x20order\x20addresses\x20only,\x20never\x20a\x20name,\x20a\x20phone\x20number\x20or\x20an\x20'+'address\x20to\x20deliver\x20to.',D=[{'name':h,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order\x20(key\x20=\x20the\x20host\x20order\x20address,\x20value\x20=\x20the\x20'+'fulfilment\x20order\x20the\x20merchant\x20says\x20served\x20it).\x20The\x20money\x20gate\x20reads\x20it\x20through\x20'+'query\x201177,\x20which\x20type-checks\x20the\x20stored\x20Address\x20against\x20the\x20submitted\x20one.','write_guard':[{'guard':ref(k+'_write'),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':i,'description':'One\x20write-once\x20row\x20per\x20FULFILMENT\x20order\x20(key\x20=\x20the\x20fulfilment\x20order\x20address,\x20value\x20'+'=\x20the\x20host\x20order\x20it\x20served).\x20This\x20is\x20the\x20pairing\x20key:\x20because\x20the\x20row\x20is\x20write-once\x20'+'on\x20the\x20fulfilment\x20order,\x20ONE\x20delivery\x20can\x20never\x20be\x20presented\x20against\x20two\x20host\x20'+'orders,\x20and\x20the\x20gate\x27s\x20reverse\x20leg\x20proves\x20the\x20pairing\x20in\x20that\x20direction.','write_guard':[{'guard':ref(k+'_write'),'id_from_submission':0x1,'data_from_submission':0x0}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':j,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order,\x20written\x20by\x20the\x20buyer\x20(or\x20their\x20agent)\x20to\x20confirm\x20'+'receipt.\x20The\x20money\x20gate\x20accepts\x20either\x20this\x20row\x20or\x20an\x20expired\x20acknowledgement\x20'+'window.','write_guard':[{'guard':ref(k+'_ack'),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'U64','write_once':!![]}],F='The\x20fulfilment\x20side\x20writes\x20both\x20fulfilment\x20rows\x20(one\x20call\x20per\x20policy\x20key,\x20both\x20under\x20the\x20same\x20'+'credential);\x20the\x20acknowledgement\x20row\x20is\x20written\x20by\x20the\x20buyer.\x20No\x20row\x20carries\x20a\x20delivery\x20address\x20'+'—\x20see\x20the\x20privacy\x20note\x20for\x20where\x20that\x20belongs.',d['push']('Merchant-asserted\x20fact:\x20the\x20merchant\x20names\x20which\x20host\x20order\x20a\x20delivery\x20served,\x20and\x20the\x20chain\x20can\x20'+'verify\x20the\x20provider\x20and\x20the\x20pairing\x27s\x20uniqueness\x20but\x20NOT\x20that\x20the\x20delivery\x20physically\x20reached\x20this\x20'+'buyer.\x20The\x20buyer\x27s\x20acknowledgement\x20row\x20is\x20the\x20only\x20tie\x20to\x20reality,\x20so\x20the\x20acknowledgement\x20window\x20is\x20'+'a\x20real\x20risk\x20parameter\x20—\x20a\x20long\x20window\x20means\x20the\x20merchant\x20waits,\x20a\x20short\x20one\x20means\x20the\x20buyer\x20loses\x20'+'the\x20chance\x20to\x20object.');}else{const V=k+'_write',W=fillGuardTemplate('tpl_repository_write_order_holder',{});if(!W['ok'])return{'steps':o,'inputs':{},'primitives':[...p],'notes':d,'blockers':[{'code':'SUPPLY_CHAIN_GATE_TEMPLATE','detail':'tpl_repository_write_order_holder\x20did\x20not\x20fill:\x20'+W['error']}]};const X=W['table']['map'](Z=>({...Z})),Y=X['find'](Z=>Z['identifier']===0x1);Y!==undefined&&(Y['value_type']='Address',Y['object_type']='Order',Y['name']='fulfilment_order'),o['push']({'op':'create','id':V,'object':'guard','params':P({'description':'Fulfilment\x20write\x20credential\x20(user-procured):\x20the\x20holder\x20of\x20the\x20host\x20order\x20records\x20which\x20'+'fulfilment\x20order\x20they\x20procured\x20for\x20it.\x20Slot\x20legend\x20—\x20slot\x200\x20`host_order`:\x20SUBMITTED,\x20the\x20'+'buyer\x27s\x20own\x20host\x20order;\x20the\x20caller\x20must\x20hold\x20it.\x20Slot\x201\x20`fulfilment_order`:\x20SUBMITTED,\x20'+'the\x20fulfilment\x20order\x20the\x20buyer\x20procured,\x20retyped\x20here\x20to\x20an\x20order\x20Address\x20because\x20the\x20'+'ledger\x20row\x20it\x20fills\x20is\x20keyed\x20by\x20an\x20address,\x20not\x20a\x20receipt\x20marker.','table':X,'root':W['root']}),'notes':'Canonical\x20order-holder\x20write\x20credential;\x20only\x20the\x20value\x20slot\x20is\x20retyped\x20to\x20an\x20order\x20address.'}),E='Rendezvous\x20ledger\x20for\x20a\x20user-procured\x20fulfilment.\x20Rows\x20are\x20public\x20and\x20permanent:\x20they\x20carry\x20'+'order\x20addresses\x20only,\x20never\x20a\x20name,\x20a\x20phone\x20number\x20or\x20an\x20address\x20to\x20deliver\x20to.',D=[{'name':h,'description':'One\x20write-once\x20row\x20per\x20HOST\x20order\x20(key\x20=\x20the\x20host\x20order\x20address,\x20value\x20=\x20the\x20'+'fulfilment\x20order\x20the\x20buyer\x20procured\x20for\x20it).','write_guard':[{'guard':ref(V),'id_from_submission':0x0,'data_from_submission':0x1}],'id_from':'none','value_type':'Address','write_once':!![]},{'name':i,'description':'One\x20write-once\x20row\x20per\x20FULFILMENT\x20order\x20(key\x20=\x20the\x20fulfilment\x20order\x20address,\x20value\x20'+'=\x20the\x20host\x20order\x20it\x20served).\x20Without\x20it\x20the\x20buyer\x20could\x20procure\x20one\x20delivery\x20and\x20'+'present\x20it\x20against\x20every\x20host\x20order\x20they\x20own.','write_guard':[{'guard':ref(V),'id_from_submission':0x1,'data_from_submission':0x0}],'id_from':'none','value_type':'Address','write_once':!![]}],F='Write-once\x20in\x20both\x20directions:\x20one\x20fulfilment\x20fact\x20per\x20host\x20order\x20and\x20one\x20host\x20order\x20per\x20fulfilment.';}B?o['push']({'op':'create','id':C,'object':'repository','params':P({'name':A,'description':E,'policies':D}),'notes':F}):d['push']('Reusing\x20the\x20existing\x20rendezvous\x20Repository\x20\x27'+A+'\x27:\x20this\x20build\x20neither\x20creates\x20nor\x20binds\x20'+('it.\x20It\x20must\x20ALREADY\x20carry\x20'+D['map'](Z=>'\x27'+String(Z['name'])+'\x27\x20(write_once,\x20'+String(Z['value_type'])+')')['join'](',\x20')+'\x20with\x20the\x20row\x20ids\x20the\x20handoff\x20describes,\x20or\x20the\x20gate\x20can\x20never\x20be\x20satisfied\x20—\x20and\x20')+'a\x20Repository\x27s\x20policies\x20cannot\x20be\x20re-pointed\x20at\x20another\x20write\x20guard\x20afterwards.'),p['add']('P2'),p['add']('P3'),x['push'](eq(query('order.service',L),idn(M))),f==='user_procured'?x['push'](eq(query('order.owner',L),query('order.owner',w))):d['push']('No\x20owner\x20tie\x20is\x20emitted:\x20on\x20the\x20merchant-procured\x20axis\x20the\x20buyer\x20does\x20not\x20own\x20the\x20fulfilment\x20'+'order,\x20so\x20an\x20equality\x20between\x20the\x20two\x20owners\x20could\x20never\x20hold.\x20The\x20provider\x20pin\x20plus\x20the\x20'+'write-once\x20bijection\x20plus\x20the\x20buyer\x20acknowledgement\x20are\x20the\x20tie\x20instead.');}else{p['add']('P2'),p['add']('P3');const Z=v(),a0=v();z(submittedOrder(Z,'fulfilment_order'),'SUBMITTED\x20at\x20the\x20gate:\x20the\x20fulfilment\x20order\x20the\x20caller\x20presents.\x20It\x20must\x20be\x20an\x20order\x20at\x20the\x20promised\x20'+'provider,\x20and\x20on\x20the\x20user-procured\x20axis\x20it\x20must\x20belong\x20to\x20the\x20same\x20owner\x20as\x20this\x20host\x20order.'),z(constantAddress(a0,a['sub_service'],'sub_service'),'the\x20procured\x20sub-Service\x20—\x20the\x20build-time\x20commitment\x20the\x20submitted\x20fulfilment\x20order\x20is\x20checked\x20against.'),z(submittedOrder(ONCE_SLOT_BYTES,'once_key'),'protocol\x20slot\x20255\x20—\x20the\x20byte-keyed\x20ONCE\x20slot.\x20Submit\x20the\x20SAME\x20fulfilment\x20order\x20address\x20as\x20'+'`fulfilment_order`;\x20the\x20Allocation\x27s\x20consumed-once\x20table\x20then\x20makes\x20that\x20delivery\x20single-use\x20'+'across\x20EVERY\x20order\x20of\x20this\x20Service,\x20which\x20the\x20chain-derived\x20254\x20(once\x20per\x20paying\x20order)\x20cannot\x20do.'),x['push'](eq(query('order.service',Z),idn(a0)),eq(idn(ONCE_SLOT_BYTES),idn(Z))),f==='user_procured'?x['push'](eq(query('order.owner',Z),query('order.owner',w))):d['push']('No\x20owner\x20tie\x20is\x20emitted:\x20on\x20the\x20merchant-procured\x20axis\x20the\x20buyer\x20does\x20not\x20own\x20the\x20fulfilment\x20order.'),d['push']('Submission\x20form:\x20the\x20fulfilment\x20order\x20is\x20named\x20at\x20the\x20gate\x20instead\x20of\x20being\x20recorded\x20in\x20a\x20shared\x20'+'ledger.\x20The\x20255\x20once\x20key\x20makes\x20each\x20delivery\x20single-use\x20across\x20the\x20Service,\x20but\x20NOTHING\x20binds\x20it\x20to\x20'+'THIS\x20host\x20order\x20—\x20a\x20merchant\x20can\x20present\x20any\x20order\x20at\x20the\x20promised\x20provider.\x20Prefer\x20the\x20rendezvous\x20'+'form,\x20which\x20proves\x20the\x20pairing\x20in\x20both\x20directions.');}o['push']({'op':'create','id':q,'object':'guard','params':P({'description':'Settlement\x20gate\x20for\x20a\x20'+(f==='merchant_procured'?'merchant-procured':'user-procured')+'\x20'+('fulfilment\x20('+g+'\x20form):\x20the\x20canonical\x20single-shot\x20settlement\x20gate\x20plus\x20the\x20composition\x20legs\x20the\x20')+'promise\x20requires.'+(y['length']>0x0?'\x20Slot\x20legend\x20—\x20the\x20on-chain\x20row\x20names\x20are\x20short\x20identifiers,\x20so\x20this\x20is\x20what\x20each\x20'+('composition\x20slot\x20carries:\x0a'+y['map'](a1=>'-\x20'+a1)['join']('\x0a')):''),'table':t,'root':allOf([...conjunctsOf(s['root']),...x])}),'notes':'Built\x20on\x20'+r+'\x20(node-set\x20arrival,\x20claimed_by\x20polarity,\x20caller\x20authorization\x20and\x20the\x20'+'chain-derived\x20254\x20once\x20key),\x20extended\x20with\x20the\x20supply-chain\x20legs.\x20Every\x20leg\x20is\x20evaluated:\x20the\x20evaluator\x20'+'has\x20no\x20short-circuit,\x20so\x20a\x20submission\x20the\x20caller\x20omits\x20aborts\x20the\x20call\x20rather\x20than\x20passing\x20silently.'});g==='rendezvous'&&B&&o['push']({'op':'configure','id':k+'_bind_repository','target':ref(l),'method':'repositories','params':P({'op':'add','objects':[ref(C)]}),'requires':[l,C]});if(a['payout_to']!==undefined&&a['payout_to']['trim']()!==''){const a1=[{'guard':ref(q),'track':'settlement','mode':'rate','sharing':[{'who':{'Entity':a['payout_to']},'rate':String(n)}]}];if(n<0x2710)a1['push']({'guard':ref(q),'track':'settlement','mode':'surplus'});o['push']({'op':'configure','id':k+'_alloc','target':ref(l),'method':'order_allocators','params':P({'allocators':a1}),'requires':[l,q],'notes':'Pays\x20the\x20fulfilment\x20party\x20'+n/0x64+'%\x20of\x20the\x20settlement\x20rail'+(n<0x2710?';\x20the\x20remainder\x20goes\x20to\x20the\x20shop':'')+'.\x20Allocator\x20rows\x20are\x20append-only\x20once\x20the\x20Service\x20is\x20published,\x20so\x20this\x20leg\x20cannot\x20be\x20added\x20later\x20'+'to\x20repair\x20a\x20missing\x20payout\x20path.'}),d['push']('This\x20adds\x20a\x20SECOND\x20settlement\x20rail\x20beside\x20the\x20shop\x27s\x20own.\x20Both\x20draw\x20on\x20the\x20same\x20order\x20balance\x20and\x20the\x20'+'order\x20in\x20which\x20they\x20are\x20fired\x20decides\x20who\x20is\x20paid\x20first\x20—\x20fire\x20the\x20composition\x20gate\x20only\x20after\x20the\x20'+'fulfilment\x20fact\x20is\x20true,\x20or\x20the\x20shop\x27s\x20own\x20rail\x20may\x20find\x20nothing\x20left.');}else d['push']('No\x20payout\x20leg\x20was\x20emitted\x20for\x20the\x20fulfilment\x20party.\x20With\x20no\x20third-party\x20rail\x20and\x20no\x20reward\x20pool,\x20a\x20'+'ruling\x20in\x20that\x20party\x27s\x20favour\x20has\x20no\x20execution\x20path\x20—\x20the\x20publish\x20audit\x20refuses\x20that\x20combination\x20'+'(COMPOSE-LIABILITY-01).\x20Pass\x20payout_to\x20(and\x20payout_rate)\x20to\x20open\x20the\x20rail,\x20or\x20mount\x20a\x20reward\x20pool\x20the\x20'+'party\x20can\x20claim\x20from.');return d['push']('Privacy:\x20the\x20fulfilment\x20party\x20needs\x20the\x20buyer\x27s\x20contact\x20or\x20delivery\x20details,\x20and\x20NOTHING\x20on\x20chain\x20carries\x20'+'them\x20privately\x20—\x20a\x20ledger\x20row,\x20a\x20forward\x20message\x20and\x20a\x20retained\x20submission\x20are\x20all\x20public\x20forever.\x20Send\x20'+'them\x20through\x20the\x20encrypted\x20channel\x20and\x20keep\x20only\x20a\x20hash\x20or\x20an\x20order\x20address\x20on\x20chain.'),{'steps':o,'inputs':{'fulfillment_axis':f},'primitives':[...p]['sort'](),'notes':d,'blockers':c,...g==='rendezvous'?{'handoff':{'repository':A,'writes':handoffWrites(D)}}:{},...e['length']>0x0?{'derived_params':e}:{}};}function handoffWrites(a){const b=(c,d)=>{if(c===0x0)return'the\x20HOST\x20order\x20address';if(c===0x1)return d==='U64'?'1\x20(a\x20receipt\x20marker)':'the\x20FULFILMENT\x20order\x20address';return'supplied\x20explicitly\x20by\x20the\x20caller\x20(no\x20submission\x20slot)';};return a['map'](c=>{const d=c['write_guard']??[],e=d[0x0]?.['id_from_submission'],f=d[0x0]?.['data_from_submission'];return{'policy':String(c['name']??''),'row_id':b(e,c['value_type']),'value':b(f,c['value_type']),'write_guard':String(d[0x0]?.['guard']?.['$ref']??''),'submissions':'slot\x200\x20=\x20the\x20host\x20order,\x20slot\x201\x20=\x20the\x20other\x20side\x20of\x20the\x20row'};});}
@@ -480,11 +480,7 @@ export declare const RulesSectionSchema: z.ZodObject<{
480
480
  }, z.core.$strict>>;
481
481
  enabled: z.ZodOptional<z.ZodBoolean>;
482
482
  }, z.core.$strict>>;
483
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
484
- error: "error";
485
- info: "info";
486
- warning: "warning";
487
- }>>>;
483
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, import("./rule-engine.js").AuditOverrideTier>, Record<string, string>>>>;
488
484
  }, z.core.$strict>>;
489
485
  }, z.core.$strict>;
490
486
  export declare const RulesSectionInputSchema: z.ZodObject<{
@@ -542,11 +538,7 @@ export declare const RulesSectionInputSchema: z.ZodObject<{
542
538
  }, z.core.$strict>>>;
543
539
  enabled: z.ZodOptional<z.ZodBoolean>;
544
540
  }, z.core.$strict>>>;
545
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
546
- error: "error";
547
- info: "info";
548
- warning: "warning";
549
- }>>>;
541
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, import("./rule-engine.js").AuditOverrideTier>, Record<string, string>>>>;
550
542
  }, z.core.$strict>>>;
551
543
  }, z.core.$strict>;
552
544
  export declare const JudgmentDocSchema: z.ZodObject<{
@@ -772,11 +764,7 @@ export declare const JudgmentDocSchema: z.ZodObject<{
772
764
  }, z.core.$strict>>;
773
765
  enabled: z.ZodOptional<z.ZodBoolean>;
774
766
  }, z.core.$strict>>;
775
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
776
- error: "error";
777
- info: "info";
778
- warning: "warning";
779
- }>>>;
767
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, import("./rule-engine.js").AuditOverrideTier>, Record<string, string>>>>;
780
768
  }, z.core.$strict>>;
781
769
  }, z.core.$strict>;
782
770
  role_intent: z.ZodObject<{
@@ -1019,11 +1007,7 @@ export declare const JudgmentDocInputSchema: z.ZodObject<{
1019
1007
  }, z.core.$strict>>>;
1020
1008
  enabled: z.ZodOptional<z.ZodBoolean>;
1021
1009
  }, z.core.$strict>>>;
1022
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
1023
- error: "error";
1024
- info: "info";
1025
- warning: "warning";
1026
- }>>>;
1010
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, import("./rule-engine.js").AuditOverrideTier>, Record<string, string>>>>;
1027
1011
  }, z.core.$strict>>>;
1028
1012
  }, z.core.$strict>>;
1029
1013
  role_intent: z.ZodOptional<z.ZodObject<{
@@ -1144,11 +1128,7 @@ export declare const JudgmentFragmentSchema: z.ZodObject<{
1144
1128
  }, z.core.$strict>>>;
1145
1129
  enabled: z.ZodOptional<z.ZodBoolean>;
1146
1130
  }, z.core.$strict>>>;
1147
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
1148
- error: "error";
1149
- info: "info";
1150
- warning: "warning";
1151
- }>>>;
1131
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, import("./rule-engine.js").AuditOverrideTier>, Record<string, string>>>>;
1152
1132
  }, z.core.$strict>>>;
1153
1133
  }, z.core.$strict>>;
1154
1134
  evaluation: z.ZodOptional<z.ZodObject<{
@@ -1309,6 +1289,14 @@ export declare const JudgmentFragmentSchema: z.ZodObject<{
1309
1289
  export type JudgmentLayerFragment = z.infer<typeof JudgmentFragmentSchema>;
1310
1290
  export declare function mergeJudgmentValues(base: unknown, over: unknown): unknown;
1311
1291
  export declare function userJudgmentDocPath(): string;
1292
+ export interface RulePackDiagnostic {
1293
+ domain: string;
1294
+ file: string;
1295
+ status: "degraded" | "disabled";
1296
+ detail: string;
1297
+ }
1298
+ export declare function rulePackDiagnostics(): readonly RulePackDiagnostic[];
1299
+ export declare function mirrorDigestVerdict(mirrorRaw: string, recorded: string | null): "verified" | "mismatch" | "unrecorded";
1312
1300
  export declare function factoryRulePack(domain: string): RuleDomainPack | null;
1313
1301
  export declare function setJudgmentPersonaFragment(fragment: unknown, label?: string): {
1314
1302
  ok: boolean;
@@ -1 +1 @@
1
- import{existsSync,readFileSync,readdirSync,statSync,writeFileSync,renameSync,mkdirSync,copyFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{dirname,join}from'node:path';import{z}from'zod';import{getWowMcpDir}from'@wowok/wowok';import{SEVERITY_ORDER}from'./severity.js';import{judgmentDocWarnings}from'./config-warnings.js';import{RuleDomainPackSchema,RuleDomainPackInputSchema}from'./rule-engine.js';import{parseFactRef}from'./exposure.js';import{ACTOR_ROLES}from'../role/types.js';export const EXPECTED_JUDGMENT_VERSION=0x1;export const JUDGMENT_SECTION_NAMES=['evaluation','game','match','monitor','mode','scorecard','rules','role_intent'];const SeverityKeySchema=z['enum'](SEVERITY_ORDER);export const DimensionStandardSchema=z['object']({'label':z['string'](),'description':z['string']()})['strict']();const LevelBandSchema=z['object']({'min':z['number'](),'level':z['string']()})['strict'](),GradeWordBandSchema=z['object']({'min':z['number'](),'word':z['string']()})['strict']();export const EvaluationSectionSchema=z['object']({'comment':z['string']()['optional'](),'weights':z['record'](z['string'](),z['number']()),'dimensions':z['record'](z['string'](),DimensionStandardSchema),'severity_deduction':z['record'](SeverityKeySchema,z['number']()),'level_bands':z['array'](LevelBandSchema),'grade_words':z['object']({'comment':z['string']()['optional'](),'trust':z['array'](GradeWordBandSchema),'risk':z['array'](GradeWordBandSchema),'match':z['array'](GradeWordBandSchema)['optional']()})['strict']()})['strict']();export const EvaluationSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'weights':z['record'](z['string'](),z['number']())['optional'](),'dimensions':z['record'](z['string'](),DimensionStandardSchema)['optional'](),'severity_deduction':z['record'](z['string'](),z['number']())['optional'](),'level_bands':z['array'](LevelBandSchema)['optional'](),'grade_words':z['object']({'comment':z['string']()['optional'](),'trust':z['array'](GradeWordBandSchema)['optional'](),'risk':z['array'](GradeWordBandSchema)['optional'](),'match':z['array'](GradeWordBandSchema)['optional']()})['strict']()['optional']()})['strict']();const RoleInterestSchema=z['object']({'prefer':z['array'](z['string']()),'avoid':z['array'](z['string']()),'sensitivity':z['number']()})['strict'](),KeywordRuleSchema=z['object']({'id':z['string'](),'keywords':z['array'](z['string']())['min'](0x1),'effect':z['string'](),'anchor':z['enum'](['prefer','avoid']),'when_forbidden':z['boolean']()})['strict']();export const ArbGameSectionSchema=z['object']({'comment':z['string']()['optional'](),'effect_semantics':z['record'](z['string'](),z['array'](z['string']())),'role_interests':z['record'](z['string'](),RoleInterestSchema),'keyword_rules':z['array'](KeywordRuleSchema),'forbid_pattern':z['string'](),'scoring':z['object']({'base':z['number'](),'per_gain':z['number'](),'per_risk':z['number']()})['strict']()})['strict']();export const ArbGameSectionInputSchema=ArbGameSectionSchema['partial']();export const GameSectionSchema=z['object']({'comment':z['string']()['optional'](),'outcome_semantics':z['record'](z['string'](),z['array'](z['string']())),'role_interests':z['record'](z['string'](),RoleInterestSchema),'appetite_multipliers':z['object']({'conservative':z['number'](),'balanced':z['number'](),'aggressive':z['number']()})['strict'](),'scoring':z['object']({'base':z['number'](),'per_gain':z['number'](),'per_risk':z['number']()})['strict'](),'keyword_rules':z['array'](KeywordRuleSchema),'forbid_pattern':z['string'](),'arb':ArbGameSectionSchema})['strict']();export const GameSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'outcome_semantics':z['record'](z['string'](),z['array'](z['string']()))['optional'](),'role_interests':z['record'](z['string'](),RoleInterestSchema)['optional'](),'appetite_multipliers':z['object']({'conservative':z['number']()['optional'](),'balanced':z['number']()['optional'](),'aggressive':z['number']()['optional']()})['strict']()['optional'](),'scoring':z['object']({'base':z['number']()['optional'](),'per_gain':z['number']()['optional'](),'per_risk':z['number']()['optional']()})['strict']()['optional'](),'keyword_rules':z['array'](KeywordRuleSchema)['optional'](),'forbid_pattern':z['string']()['optional'](),'arb':ArbGameSectionInputSchema['optional']()})['strict']();const MatchBandSchema=z['object']({'min':z['number'](),'score':z['number']()})['strict']();export const MatchSectionSchema=z['object']({'comment':z['string']()['optional'](),'region_scores':z['object']({'exact':z['number'](),'contains':z['number'](),'compatible':z['number'](),'overlap':z['number'](),'mismatch':z['number']()})['strict'](),'weights':z['object']({'region':z['number'](),'industry':z['number'](),'price':z['number'](),'trust':z['number'](),'capabilities':z['number'](),'buyable':z['number'](),'reward_commitment':z['number'](),'tags':z['number'](),'acceptance':z['number']()})['strict'](),'trust_bands':z['array'](MatchBandSchema),'neutral_score':z['number'](),'price_over_budget_tolerance_pct':z['number'](),'top_n':z['number']()['int']()})['strict']();export const MatchSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'region_scores':z['object']({'exact':z['number']()['optional'](),'contains':z['number']()['optional'](),'compatible':z['number']()['optional'](),'overlap':z['number']()['optional'](),'mismatch':z['number']()['optional']()})['strict']()['optional'](),'weights':z['object']({'region':z['number']()['optional'](),'industry':z['number']()['optional'](),'price':z['number']()['optional'](),'trust':z['number']()['optional'](),'capabilities':z['number']()['optional'](),'buyable':z['number']()['optional'](),'reward_commitment':z['number']()['optional'](),'tags':z['number']()['optional'](),'acceptance':z['number']()['optional']()})['strict']()['optional'](),'trust_bands':z['array'](MatchBandSchema)['optional'](),'neutral_score':z['number']()['optional'](),'price_over_budget_tolerance_pct':z['number']()['optional'](),'top_n':z['number']()['int']()['optional']()})['strict']();const MonitorThresholdsFullSchema=z['object']({'progress_stall_hours':z['number'](),'compensation_drop_ratio':z['number'](),'compensation_coverage_min':z['number'](),'messenger_timeout_hours':z['number'](),'review_window_closing_days':z['number'](),'arb_window_closing_days':z['number']()})['strict'](),MonitorEscalationSchema=z['object']({'default_expected_progress_hours':z['number'](),'stall_expected_multiplier':z['number'](),'stall_escalation_multiplier':z['number'](),'messenger_escalation_multiplier':z['number'](),'ratio_critical_threshold':z['number']()})['strict']();export const MonitorSectionSchema=z['object']({'comment':z['string']()['optional'](),'thresholds':MonitorThresholdsFullSchema,'escalation':MonitorEscalationSchema})['strict']();export const MonitorSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'thresholds':z['object']({'progress_stall_hours':z['number']()['optional'](),'compensation_drop_ratio':z['number']()['optional'](),'compensation_coverage_min':z['number']()['optional'](),'messenger_timeout_hours':z['number']()['optional'](),'review_window_closing_days':z['number']()['optional'](),'arb_window_closing_days':z['number']()['optional']()})['strict']()['optional'](),'escalation':z['object']({'default_expected_progress_hours':z['number']()['optional'](),'stall_expected_multiplier':z['number']()['optional'](),'stall_escalation_multiplier':z['number']()['optional'](),'messenger_escalation_multiplier':z['number']()['optional'](),'ratio_critical_threshold':z['number']()['optional']()})['strict']()['optional']()})['strict']();const AppetitePostureSchema=z['object']({'max_risk':z['number'](),'min_benefit':z['number']()})['strict']();export const ModeSectionSchema=z['object']({'comment':z['string']()['optional'](),'appetite_thresholds':z['object']({'conservative':AppetitePostureSchema,'balanced':AppetitePostureSchema,'aggressive':AppetitePostureSchema})['strict']()})['strict']();export const ModeSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'appetite_thresholds':z['object']({'conservative':AppetitePostureSchema['optional'](),'balanced':AppetitePostureSchema['optional'](),'aggressive':AppetitePostureSchema['optional']()})['strict']()['optional']()})['strict']();const PostureWeightSchema=z['object']({'volume':z['number'](),'balanced':z['number'](),'margin':z['number']()})['strict'](),MetricTuneSchema=z['object']({'weight':PostureWeightSchema['optional'](),'good_threshold':z['number']()['optional'](),'bad_threshold':z['number']()['optional']()})['strict']();export const ScorecardSectionSchema=z['object']({'comment':z['string']()['optional'](),'metrics':z['record'](z['string'](),MetricTuneSchema),'shop_evidence_metrics':z['array'](z['string']())})['strict']();export const ScorecardSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'metrics':z['record'](z['string'](),MetricTuneSchema)['optional'](),'shop_evidence_metrics':z['array'](z['string']())['optional']()})['strict']();const RoleIntentEntrySchema=z['object']({'comment':z['string']()['optional'](),'intents':z['array'](z['object']({'id':z['string'](),'weight':z['number']()['min'](0x0)['max'](0x1)})['strict']())['min'](0x1),'horizon':z['number']()['int']()['positive']()['optional'](),'risk_appetite':z['enum'](['conservative','balanced','aggressive'])['optional'](),'red_lines':z['array'](z['string']())['optional'](),'strategy_leaning':z['enum'](['cooperative','opportunistic','confrontational'])['optional']()})['strict']();export const RoleIntentSectionSchema=z['object']({'comment':z['string']()['optional'](),'roles':z['record'](z['string'](),RoleIntentEntrySchema)})['strict']();export const RoleIntentSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'roles':z['record'](z['string'](),RoleIntentEntrySchema['partial']())['optional']()})['strict']();export const RulesSectionSchema=z['object']({'comment':z['string']()['optional'](),'domains':z['record'](z['string'](),RuleDomainPackSchema)})['strict']();export const RulesSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'domains':z['record'](z['string'](),RuleDomainPackInputSchema)['optional']()})['strict']();export const JudgmentDocSchema=z['object']({'version':z['number']()['int'](),'description':z['string']()['optional'](),'evaluation':EvaluationSectionSchema,'game':GameSectionSchema,'match':MatchSectionSchema,'monitor':MonitorSectionSchema,'mode':ModeSectionSchema,'scorecard':ScorecardSectionSchema,'rules':RulesSectionSchema,'role_intent':RoleIntentSectionSchema})['strict']();export const JudgmentDocInputSchema=z['object']({'version':z['number']()['int'](),'description':z['string']()['optional'](),'evaluation':EvaluationSectionInputSchema['optional'](),'game':GameSectionInputSchema['optional'](),'match':MatchSectionInputSchema['optional'](),'monitor':MonitorSectionInputSchema['optional'](),'mode':ModeSectionInputSchema['optional'](),'scorecard':ScorecardSectionInputSchema['optional'](),'rules':RulesSectionInputSchema['optional'](),'role_intent':RoleIntentSectionInputSchema['optional']()})['strict']();export const JudgmentFragmentSchema=JudgmentDocInputSchema['omit']({'version':!![]})['extend']({'version':z['number']()['int']()['optional']()});function isPlainObject(a){return typeof a==='object'&&a!==null&&!Array['isArray'](a);}function entryId(a){if(isPlainObject(a)){if(typeof a['rule_id']==='string')return a['rule_id'];if(typeof a['id']==='string')return a['id'];}return null;}export function mergeJudgmentValues(a,b){if(Array['isArray'](a)&&Array['isArray'](b)){if(a['length']===0x0)return[...b];if(b['length']===0x0)return[...a];const c=[...a,...b]['every'](f=>entryId(f)!==null);if(!c)return[...b];const d=new Map();for(const f of a)d['set'](entryId(f),f);for(const g of b){const h=entryId(g),i=d['get'](h);d['set'](h,i===undefined?g:mergeJudgmentValues(i,g));}return[...d['values']()];}if(isPlainObject(a)&&isPlainObject(b)){const j={...a};for(const [l,m]of Object['entries'](b)){j[l]=mergeJudgmentValues(a[l],m);}return j;}return b===undefined?a:b;}const FACTORY_PATH=fileURLToPath(new URL('../knowledge/baselines/judgment-baselines.json',import.meta.url)),USER_DOC_NAME='judgment.json',LEGACY_USER_DOC_NAME='judgment-baselines.json';export function userJudgmentDocPath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir();return join(a,USER_DOC_NAME);}function resolveUserDocPath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir(),b=join(a,USER_DOC_NAME);if(existsSync(b))return b;const c=join(a,LEGACY_USER_DOC_NAME);return existsSync(c)?c:b;}function zodMessage(a){return a['issues']['slice'](0x0,0x5)['map'](b=>(b['path']['join']('.')||'(root)')+':\x20'+b['message'])['join'](';\x20');}function loadFactory(){let a;try{a=readFileSync(FACTORY_PATH,'utf-8');}catch{throw new Error('Judgment\x20baselines\x20document\x20not\x20found\x20(knowledge/baselines/judgment-baselines.json)\x20—\x20broken\x20installation.');}const b=JudgmentDocSchema['parse'](JSON['parse'](a));if(b['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('Factory\x20judgment\x20document\x20has\x20version\x20'+b['version']+',\x20expected\x20'+EXPECTED_JUDGMENT_VERSION+'\x20—\x20broken\x20installation.');return b;}const FACTORY=loadFactory(),RULE_PACKS_DIR=fileURLToPath(new URL('../knowledge/baselines/rules/',import.meta.url));function loadFactoryRulePacks(){let a=[];try{a=readdirSync(RULE_PACKS_DIR)['filter'](d=>d['endsWith']('.json'));}catch{return{};}const b=d=>d instanceof z['ZodError']?d['issues']['slice'](0x0,0x3)['map'](f=>(f['path']['join']('.')||'(root)')+':\x20'+f['message'])['join'](';\x20'):d instanceof Error?d['message']:String(d),c={};for(const d of a){const f=d['replace'](/\.json$/,''),g=join(RULE_PACKS_DIR,d);let h;for(let i=0x0;i<0x2;i++){try{const j=readFileSync(g,'utf-8'),k=RuleDomainPackSchema['parse'](JSON['parse'](j));c[f]=k;try{writeFileSync(g+'.good',j);}catch{}h=undefined;break;}catch(l){h=l;if(i===0x0)try{Atomics['wait'](new Int32Array(new SharedArrayBuffer(0x4)),0x0,0x0,0x32);}catch{}}}if(h===undefined)continue;try{const m=readFileSync(g+'.good','utf-8');c[f]=RuleDomainPackSchema['parse'](JSON['parse'](m)),process['stderr']['write']('[judgment]\x20rule\x20pack\x20\x22'+d+'\x22\x20failed\x20validation\x20('+b(h)+')\x20—\x20'+'running\x20on\x20the\x20LAST-GOOD\x20copy;\x20fix\x20or\x20delete\x20the\x20bad\x20file\x20to\x20clear\x20this\x20warning.\x0a');}catch{process['stderr']['write']('[judgment]\x20rule\x20pack\x20\x22'+d+'\x22\x20failed\x20validation\x20('+b(h)+')\x20and\x20no\x20last-good\x20copy\x20'+('exists\x20—\x20domain\x20\x22'+f+'\x22\x20is\x20DISABLED\x20for\x20this\x20run\x20(the\x20server\x20stays\x20up;\x20inline\x20domains\x20unaffected).\x0a'));}}return c;}const FACTORY_RULE_PACKS=loadFactoryRulePacks();export function factoryRulePack(a){return FACTORY_RULE_PACKS[a]??null;}function withFactoryRulePacks(a){const b=a['rules']??{'domains':{}},c=mergeJudgmentValues(FACTORY_RULE_PACKS,b['domains']??{});return{...a,'rules':{...b,'domains':c}};}function unknownRuleRef(a){for(const [b,c]of Object['entries'](a['rules']?.['domains']??{})){const d=FACTORY_RULE_PACKS[b];if(!d)return'rules.domains:\x20unknown\x20domain\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20rule\x20packs\x20—\x20check\x20for\x20a\x20typo)';const e=new Set(d['rules']['map'](f=>f['rule_id']));for(const f of c['rules']){if(!e['has'](f['rule_id']))return'rules.domains.'+b+':\x20unknown\x20rule\x20\x27'+f['rule_id']+'\x27\x20(users\x20may\x20tune\x20or\x20disable\x20factory\x20rules,\x20not\x20invent\x20them)';}}return null;}function unknownDimensionKey(a){for(const b of Object['keys'](a['evaluation']['weights'])){if(!(b in FACTORY['evaluation']['weights']))return'evaluation.weights:\x20unknown\x20dimension\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const c of Object['keys'](a['evaluation']['dimensions'])){if(!(c in FACTORY['evaluation']['dimensions']))return'evaluation.dimensions:\x20unknown\x20dimension\x20\x27'+c+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}return null;}function unknownGameRef(a){for(const d of Object['keys'](a['game']['role_interests'])){if(!(d in FACTORY['game']['role_interests']))return'game.role_interests:\x20unknown\x20role\x20\x27'+d+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const f of Object['keys'](a['game']['outcome_semantics'])){if(!(f in FACTORY['game']['outcome_semantics']))return'game.outcome_semantics:\x20unknown\x20outcome\x20\x27'+f+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}const b=new Set(Object['values'](FACTORY['game']['outcome_semantics'])['flat']());for(const g of a['game']['keyword_rules']){if(!b['has'](g['effect']))return'game.keyword_rules.'+g['id']+':\x20unknown\x20effect\x20\x27'+g['effect']+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.outcome_semantics)';}const c=a['game']['arb'];if(c){const h=FACTORY['game']['arb'];for(const j of Object['keys'](c['role_interests'])){if(!(j in h['role_interests']))return'game.arb.role_interests:\x20unknown\x20perspective\x20\x27'+j+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}const i=new Set(Object['keys'](h['effect_semantics']));for(const k of c['keyword_rules']){if(!i['has'](k['effect']))return'game.arb.keyword_rules.'+k['id']+':\x20unknown\x20effect\x20\x27'+k['effect']+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.arb.effect_semantics)';}for(const [l,m]of Object['entries'](c['role_interests'])){for(const n of[...m['prefer'],...m['avoid']]){if(!i['has'](n))return'game.arb.role_interests.'+l+':\x20unknown\x20effect\x20\x27'+n+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.arb.effect_semantics)';}}}return null;}function unknownScorecardRef(a){for(const b of Object['keys'](a['scorecard']['metrics'])){if(!(b in FACTORY['scorecard']['metrics']))return'scorecard.metrics:\x20unknown\x20metric\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const c of a['scorecard']['shop_evidence_metrics']){if(!(c in FACTORY['scorecard']['metrics']))return'scorecard.shop_evidence_metrics:\x20unknown\x20metric\x20\x27'+c+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}return null;}function unknownRoleIntentRef(a){const b=new Set(ACTOR_ROLES),c=FACTORY['role_intent']?.['roles']??{};for(const [d,e]of Object['entries'](a['role_intent']?.['roles']??{})){if(!b['has'](d))return'role_intent.roles:\x20unknown\x20role\x20\x27'+d+'\x27\x20(must\x20be\x20an\x20ACTOR\x20role\x20—\x20neutral/system\x20hold\x20no\x20intent)';const f=new Set((c[d]?.['intents']??[])['map'](g=>g['id']));for(const g of e['intents']){if(!f['has'](g['id']))return'role_intent.roles.'+d+':\x20unknown\x20intent\x20\x27'+g['id']+'\x27\x20(not\x20in\x20the\x20factory\x20profile\x20—\x20users\x20re-tune\x20weights,\x20they\x20never\x20invent\x20intent\x20vocabulary)';}}return null;}function unknownExposureRef(a){for(const [b,d]of Object['entries'](a['rules']?.['domains']??{})){const e=FACTORY_RULE_PACKS[b];if(!e)continue;const f=new Set(Object['keys'](e['facts']??{}));for(const g of d['rules']){for(const [h,i]of g['cases']['entries']()){const j=parseFactRef(String(i['level']));if(j!==null&&!f['has'](j))return'rules.domains.'+b+'.'+g['rule_id']+'.cases['+h+'].level:\x20unknown\x20fact\x20reference\x20\x27fact:'+j+'\x27\x20(not\x20in\x20the\x20factory\x20\x27'+b+'\x27\x20fact\x20vocabulary)';for(const [k,l]of(i['exposure']?.['gain_paths']??[])['entries']()){const m=parseFactRef(String(l['viability']));if(m!==null&&!f['has'](m))return'rules.domains.'+b+'.'+g['rule_id']+'.cases['+h+'].exposure.gain_paths['+k+'].viability:\x20unknown\x20fact\x20reference\x20\x27fact:'+m+'\x27\x20(not\x20in\x20the\x20factory\x20\x27'+b+'\x27\x20fact\x20vocabulary)';}}}}return null;}let userState=null,lastReloadError=null,effectiveCache=null;function invalidate(){effectiveCache=null;}function probeUserDoc(){const a=resolveUserDocPath();let b=null,c=0x0;try{b=readFileSync(a,'utf-8'),c=statSync(a)['mtimeMs'];}catch{b=null;}if(b===null){if(userState!==null||lastReloadError!==null)return userState=null,lastReloadError=null,invalidate(),!![];return![];}if(userState&&userState['raw']===b)return![];try{const d=JSON['parse'](b),f=JudgmentDocInputSchema['parse'](d);if(f['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('version:\x20unsupported\x20document\x20version\x20'+f['version']+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')');const g=withFactoryRulePacks(mergeJudgmentValues(FACTORY,f)),h=unknownDimensionKey(g)??unknownRuleRef(g)??unknownExposureRef(g)??unknownGameRef(g)??unknownScorecardRef(g)??unknownRoleIntentRef(g);if(h)throw new Error(h);const i=JudgmentDocSchema['safeParse'](g);if(!i['success'])throw new Error('schema:\x20'+zodMessage(i['error']));return userState={'raw':b,'mtimeMs':c,'doc':f},lastReloadError=null,invalidate(),!![];}catch(j){return lastReloadError=j instanceof z['ZodError']?'schema:\x20'+zodMessage(j):j instanceof Error?j['message']:String(j),![];}}function effective(){if(!effectiveCache){let a=withFactoryRulePacks(mergeJudgmentValues(FACTORY,layerSlots['industry']?.['fragment']??{}));a=mergeJudgmentValues(a,userState?.['doc']??{}),a=mergeJudgmentValues(a,layerSlots['persona']?.['fragment']??{});for(const [b,c]of overrides){a=applyPath(a,b,c);}effectiveCache=JudgmentDocSchema['parse'](a);}return effectiveCache;}const layerSlots={'persona':null,'industry':null},layerErrors={'persona':null,'industry':null};let disableTrace=[];function recordDisableTrace(a,b,c){disableTrace=disableTrace['filter'](d=>d['layer']!==b);for(const [d,e]of Object['entries'](c['rules']?.['domains']??{})){for(const f of e['rules']??[]){f['enabled']===![]&&disableTrace['push']({'layer':b,'domain':d,'rule_id':f['rule_id']});}}}function parseLayerFragment(a,b){let c;try{c=JudgmentFragmentSchema['parse'](a);}catch(h){return{'error':b+':\x20'+(h instanceof z['ZodError']?zodMessage(h):String(h))};}if(c['version']!==undefined&&c['version']!==EXPECTED_JUDGMENT_VERSION)return{'error':b+':\x20unsupported\x20fragment\x20version\x20'+c['version']+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')'};const d=withFactoryRulePacks(mergeJudgmentValues(FACTORY,c)),f=unknownDimensionKey(d)??unknownRuleRef(d)??unknownExposureRef(d)??unknownGameRef(d)??unknownScorecardRef(d)??unknownRoleIntentRef(d);if(f)return{'error':b+':\x20'+f};const g=JudgmentDocSchema['safeParse'](d);if(!g['success'])return{'error':b+':\x20schema:\x20'+zodMessage(g['error'])};return{'fragment':c};}function setLayerFragment(a,b,c){if(b===null||b===undefined)return(layerSlots[a]!==null||layerErrors[a]!==null)&&(layerSlots[a]=null,layerErrors[a]=null,disableTrace=disableTrace['filter'](f=>f['layer']!==c),invalidate()),{'ok':!![]};let d;try{d=JSON['stringify'](b)??'';}catch{return{'ok':![],'error':c+':\x20fragment\x20is\x20not\x20JSON-serializable'};}if(layerSlots[a]?.['raw']===d)return{'ok':!![]};const e=parseLayerFragment(b,c);if(e['error']||!e['fragment'])return layerErrors[a]=e['error']??'rejected',{'ok':![],'error':layerErrors[a]??undefined};return layerSlots[a]={'raw':d,'fragment':e['fragment'],'label':c},layerErrors[a]=null,recordDisableTrace(a,c,e['fragment']),invalidate(),{'ok':!![]};}export function setJudgmentPersonaFragment(a,b='persona'){return setLayerFragment('persona',a,b);}export function setJudgmentIndustryOverlay(a,b='industry\x20packs'){return setLayerFragment('industry',a,b);}export function judgmentLayerError(a){return layerErrors[a];}export function validateJudgmentFragment(a,b='judgment'){return parseLayerFragment(a,b)['error']??null;}export function judgmentDisableTrace(){return disableTrace['map'](a=>({...a}));}export function clearJudgmentLayers(){layerSlots['persona']=null,layerSlots['industry']=null,layerErrors['persona']=null,layerErrors['industry']=null,disableTrace=[],invalidate();}const overrides=new Map();function resolvePath(a,b){let c=a;for(const d of b){if(!isPlainObject(c))return undefined;c=c[d];if(c===undefined)return undefined;}return c;}function applyPath(a,b,c){const d=b['split']('.'),e=structuredClone(a);let f=e;for(let g=0x0;g<d['length']-0x1;g++){f=f[d[g]];}return f[d[d['length']-0x1]]=c,e;}function typeName(a){if(Array['isArray'](a))return'array';if(a===null)return'null';return typeof a;}function sameShape(a,b){const c=typeName(a),d=typeName(b);if(c==='object'&&d==='object')return isPlainObject(a)&&isPlainObject(b);return c===d;}export function setJudgmentOverride(a,b){const c=typeof a==='string'?a['trim']():'';if(!c)return{'ok':![],'error':'\x27path\x27\x20is\x20required\x20(dotted,\x20e.g.\x20evaluation.weights.trust_reviews)'};if(b===undefined||b===null||!(typeof b==='number'||typeof b==='string'||typeof b==='boolean'||Array['isArray'](b)||isPlainObject(b)))return{'ok':![],'error':'\x27value\x27\x20must\x20be\x20a\x20JSON\x20value\x20(number\x20/\x20string\x20/\x20boolean\x20/\x20array\x20/\x20object)'};const d=c['split']('.')['filter'](Boolean),f=d[0x0];if(!JUDGMENT_SECTION_NAMES['includes'](f))return{'ok':![],'error':'Unknown\x20section\x20\x27'+f+'\x27\x20—\x20sections:\x20'+JUDGMENT_SECTION_NAMES['join'](',\x20')};probeUserDoc();const g=resolvePath(effective(),d);if(g===undefined)return{'ok':![],'error':'Unknown\x20judgment\x20path\x20\x27'+c+'\x27'};if(!sameShape(g,b))return{'ok':![],'error':'Type\x20mismatch\x20at\x20\x27'+c+'\x27\x20—\x20expected\x20'+typeName(g)+',\x20got\x20'+typeName(b)};try{JudgmentDocSchema['parse'](applyPath(effective(),c,b));}catch(h){return{'ok':![],'error':'Rejected:\x20'+(h instanceof z['ZodError']?zodMessage(h):h instanceof Error?h['message']:String(h))};}return overrides['set'](c,b),invalidate(),{'ok':!![]};}export function clearJudgmentOverride(a){const b=overrides['delete'](typeof a==='string'?a['trim']():'');if(b)invalidate();return b;}export function clearJudgmentOverrides(){const a=overrides['size'];return a>0x0&&(overrides['clear'](),invalidate()),a;}export function judgmentOverrides(){return Array['from'](overrides['entries']())['map'](([a,b])=>({'path':a,'value':b}));}export function getJudgmentDoc(){return probeUserDoc(),structuredClone(effective());}let policyRunDoc=null;export function beginPolicyRun(){policyRunDoc=getJudgmentDoc();}export function endPolicyRun(){policyRunDoc=null;}export function policyJudgmentDoc(){return policyRunDoc??getJudgmentDoc();}export function evaluationSection(){return getJudgmentDoc()['evaluation'];}export function factoryJudgmentDoc(){return structuredClone(withFactoryRulePacks(FACTORY));}export function readUserJudgmentDocView(){probeUserDoc();if(userState)return{'user_path':userJudgmentDocPath(),'exists':!![],'version':EXPECTED_JUDGMENT_VERSION,'doc':structuredClone(userState['doc'])};return{'user_path':userJudgmentDocPath(),'exists':![],'version':EXPECTED_JUDGMENT_VERSION,'doc':factoryJudgmentDoc()};}export function judgmentStatus(){probeUserDoc();const a=effective(),b={};for(const c of JUDGMENT_SECTION_NAMES){const d=a[c];if(c==='rules'&&isPlainObject(d)){const e=d['domains']??{};b[c]=Object['values'](e)['reduce']((f,g)=>f+(Array['isArray'](g['rules'])?g['rules']['length']:0x0),0x0);continue;}b[c]=Array['isArray'](d)?d['length']:isPlainObject(d)?Object['keys'](d)['length']:0x0;}return{'version':a['version'],'factory_path':FACTORY_PATH,'user_path':userJudgmentDocPath(),'user_doc_loaded':userState!==null,'user_mtime':userState?new Date(userState['mtimeMs'])['toISOString']():null,'last_reload_error':lastReloadError,'user_doc':userState?structuredClone(userState['doc']):null,'persona_fragment_loaded':layerSlots['persona']!==null,'industry_overlay_loaded':layerSlots['industry']!==null,'layer_errors':{'persona':layerErrors['persona'],'industry':layerErrors['industry']},'disable_trace':judgmentDisableTrace(),'sections':b,'overrides':judgmentOverrides()};}function jsonEqual(c,d){if(c===d)return!![];if(Array['isArray'](c)&&Array['isArray'](d))return JSON['stringify'](c)===JSON['stringify'](d);if(isPlainObject(c)&&isPlainObject(d)){const e=Object['keys'](c);if(e['length']!==Object['keys'](d)['length'])return![];return e['every'](f=>f in d&&jsonEqual(c[f],d[f]));}return![];}function collectChanges(a,c,d,e){if(isPlainObject(c)){const f=isPlainObject(a)?a:{};for(const [g,h]of Object['entries'](c)){collectChanges(f[g],h,d?d+'.'+g:g,e);}return;}!jsonEqual(a,c)&&e['push']({'path':d||'(root)','old':a===undefined?null:a,'new':c});}export function patchUserJudgmentDoc(a){const b=userJudgmentDocPath(),c=join(dirname(b),'judgment.backup.json'),d=resolveUserDocPath();if(!isPlainObject(a))throw new Error('\x27patch\x27\x20must\x20be\x20a\x20partial\x20judgment\x20document\x20object\x20(e.g.\x20{\x22evaluation\x22:\x20{\x22weights\x22:\x20{…}}})');if(a['version']!==undefined&&a['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('patch.version:\x20unsupported\x20version\x20'+String(a['version'])+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')');const {version:f,...g}=a;let h;try{h=JudgmentFragmentSchema['parse'](g);}catch(s){throw new Error('patch\x20rejected:\x20'+(s instanceof z['ZodError']?zodMessage(s):s instanceof Error?s['message']:String(s)));}if(Object['keys'](h)['length']===0x0)throw new Error('\x27patch\x27\x20is\x20empty\x20—\x20nothing\x20to\x20apply\x20(sections:\x20'+JUDGMENT_SECTION_NAMES['join'](',\x20')+')');let i=null,j=![];try{const t=readFileSync(d,'utf-8');j=!![];const u=JSON['parse'](t);i=JudgmentDocInputSchema['parse'](u);}catch(v){if(j)throw new Error('the\x20current\x20user\x20document\x20is\x20not\x20a\x20valid\x20judgment\x20document\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20fix\x20or\x20remove\x20'+d+'\x20by\x20hand\x20first');i=null;}const k=mergeJudgmentValues(i??{'version':EXPECTED_JUDGMENT_VERSION},h);k['version']=EXPECTED_JUDGMENT_VERSION;const l=withFactoryRulePacks(mergeJudgmentValues(FACTORY,k)),m=unknownDimensionKey(l)??unknownRuleRef(l)??unknownExposureRef(l)??unknownGameRef(l)??unknownScorecardRef(l)??unknownRoleIntentRef(l);if(m)throw new Error('patch\x20rejected:\x20'+m);const n=JudgmentDocSchema['safeParse'](l);if(!n['success'])throw new Error('patch\x20rejected:\x20schema:\x20'+zodMessage(n['error']));const o=judgmentDocWarnings(l),p=[];collectChanges(i??{},h,'',p);if(p['length']===0x0)return{'applied':!![],'user_path':b,'backup_path':null,'version':EXPECTED_JUDGMENT_VERSION,'changed':p,'reload_error':null,'warnings':o};const q=JSON['stringify'](k,null,0x2)+'\x0a';mkdirSync(dirname(b),{'recursive':!![]});if(j)copyFileSync(d,c);const r=b+'.tmp';writeFileSync(r,q,'utf-8'),renameSync(r,b);try{userState={'raw':q,'mtimeMs':statSync(b)['mtimeMs'],'doc':k},lastReloadError=null;}catch(w){lastReloadError=w instanceof Error?w['message']:String(w);}return invalidate(),{'applied':!![],'user_path':b,'backup_path':j?c:null,'version':EXPECTED_JUDGMENT_VERSION,'changed':p,'reload_error':lastReloadError,'warnings':o};}
1
+ import{existsSync,readFileSync,readdirSync,statSync,writeFileSync,renameSync,mkdirSync,copyFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{createHash}from'node:crypto';import{dirname,join}from'node:path';import{z}from'zod';import{getWowMcpDir}from'@wowok/wowok';import{SEVERITY_ORDER}from'./severity.js';import{judgmentDocWarnings}from'./config-warnings.js';import{RuleDomainPackSchema,RuleDomainPackInputSchema}from'./rule-engine.js';import{parseFactRef}from'./exposure.js';import{ACTOR_ROLES}from'../role/types.js';export const EXPECTED_JUDGMENT_VERSION=0x1;export const JUDGMENT_SECTION_NAMES=['evaluation','game','match','monitor','mode','scorecard','rules','role_intent'];const SeverityKeySchema=z['enum'](SEVERITY_ORDER);export const DimensionStandardSchema=z['object']({'label':z['string'](),'description':z['string']()})['strict']();const LevelBandSchema=z['object']({'min':z['number'](),'level':z['string']()})['strict'](),GradeWordBandSchema=z['object']({'min':z['number'](),'word':z['string']()})['strict']();export const EvaluationSectionSchema=z['object']({'comment':z['string']()['optional'](),'weights':z['record'](z['string'](),z['number']()),'dimensions':z['record'](z['string'](),DimensionStandardSchema),'severity_deduction':z['record'](SeverityKeySchema,z['number']()),'level_bands':z['array'](LevelBandSchema),'grade_words':z['object']({'comment':z['string']()['optional'](),'trust':z['array'](GradeWordBandSchema),'risk':z['array'](GradeWordBandSchema),'match':z['array'](GradeWordBandSchema)['optional']()})['strict']()})['strict']();export const EvaluationSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'weights':z['record'](z['string'](),z['number']())['optional'](),'dimensions':z['record'](z['string'](),DimensionStandardSchema)['optional'](),'severity_deduction':z['record'](z['string'](),z['number']())['optional'](),'level_bands':z['array'](LevelBandSchema)['optional'](),'grade_words':z['object']({'comment':z['string']()['optional'](),'trust':z['array'](GradeWordBandSchema)['optional'](),'risk':z['array'](GradeWordBandSchema)['optional'](),'match':z['array'](GradeWordBandSchema)['optional']()})['strict']()['optional']()})['strict']();const RoleInterestSchema=z['object']({'prefer':z['array'](z['string']()),'avoid':z['array'](z['string']()),'sensitivity':z['number']()})['strict'](),KeywordRuleSchema=z['object']({'id':z['string'](),'keywords':z['array'](z['string']())['min'](0x1),'effect':z['string'](),'anchor':z['enum'](['prefer','avoid']),'when_forbidden':z['boolean']()})['strict']();export const ArbGameSectionSchema=z['object']({'comment':z['string']()['optional'](),'effect_semantics':z['record'](z['string'](),z['array'](z['string']())),'role_interests':z['record'](z['string'](),RoleInterestSchema),'keyword_rules':z['array'](KeywordRuleSchema),'forbid_pattern':z['string'](),'scoring':z['object']({'base':z['number'](),'per_gain':z['number'](),'per_risk':z['number']()})['strict']()})['strict']();export const ArbGameSectionInputSchema=ArbGameSectionSchema['partial']();export const GameSectionSchema=z['object']({'comment':z['string']()['optional'](),'outcome_semantics':z['record'](z['string'](),z['array'](z['string']())),'role_interests':z['record'](z['string'](),RoleInterestSchema),'appetite_multipliers':z['object']({'conservative':z['number'](),'balanced':z['number'](),'aggressive':z['number']()})['strict'](),'scoring':z['object']({'base':z['number'](),'per_gain':z['number'](),'per_risk':z['number']()})['strict'](),'keyword_rules':z['array'](KeywordRuleSchema),'forbid_pattern':z['string'](),'arb':ArbGameSectionSchema})['strict']();export const GameSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'outcome_semantics':z['record'](z['string'](),z['array'](z['string']()))['optional'](),'role_interests':z['record'](z['string'](),RoleInterestSchema)['optional'](),'appetite_multipliers':z['object']({'conservative':z['number']()['optional'](),'balanced':z['number']()['optional'](),'aggressive':z['number']()['optional']()})['strict']()['optional'](),'scoring':z['object']({'base':z['number']()['optional'](),'per_gain':z['number']()['optional'](),'per_risk':z['number']()['optional']()})['strict']()['optional'](),'keyword_rules':z['array'](KeywordRuleSchema)['optional'](),'forbid_pattern':z['string']()['optional'](),'arb':ArbGameSectionInputSchema['optional']()})['strict']();const MatchBandSchema=z['object']({'min':z['number'](),'score':z['number']()})['strict']();export const MatchSectionSchema=z['object']({'comment':z['string']()['optional'](),'region_scores':z['object']({'exact':z['number'](),'contains':z['number'](),'compatible':z['number'](),'overlap':z['number'](),'mismatch':z['number']()})['strict'](),'weights':z['object']({'region':z['number'](),'industry':z['number'](),'price':z['number'](),'trust':z['number'](),'capabilities':z['number'](),'buyable':z['number'](),'reward_commitment':z['number'](),'tags':z['number'](),'acceptance':z['number']()})['strict'](),'trust_bands':z['array'](MatchBandSchema),'neutral_score':z['number'](),'price_over_budget_tolerance_pct':z['number'](),'top_n':z['number']()['int']()})['strict']();export const MatchSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'region_scores':z['object']({'exact':z['number']()['optional'](),'contains':z['number']()['optional'](),'compatible':z['number']()['optional'](),'overlap':z['number']()['optional'](),'mismatch':z['number']()['optional']()})['strict']()['optional'](),'weights':z['object']({'region':z['number']()['optional'](),'industry':z['number']()['optional'](),'price':z['number']()['optional'](),'trust':z['number']()['optional'](),'capabilities':z['number']()['optional'](),'buyable':z['number']()['optional'](),'reward_commitment':z['number']()['optional'](),'tags':z['number']()['optional'](),'acceptance':z['number']()['optional']()})['strict']()['optional'](),'trust_bands':z['array'](MatchBandSchema)['optional'](),'neutral_score':z['number']()['optional'](),'price_over_budget_tolerance_pct':z['number']()['optional'](),'top_n':z['number']()['int']()['optional']()})['strict']();const MonitorThresholdsFullSchema=z['object']({'progress_stall_hours':z['number'](),'compensation_drop_ratio':z['number'](),'compensation_coverage_min':z['number'](),'messenger_timeout_hours':z['number'](),'review_window_closing_days':z['number'](),'arb_window_closing_days':z['number']()})['strict'](),MonitorEscalationSchema=z['object']({'default_expected_progress_hours':z['number'](),'stall_expected_multiplier':z['number'](),'stall_escalation_multiplier':z['number'](),'messenger_escalation_multiplier':z['number'](),'ratio_critical_threshold':z['number']()})['strict']();export const MonitorSectionSchema=z['object']({'comment':z['string']()['optional'](),'thresholds':MonitorThresholdsFullSchema,'escalation':MonitorEscalationSchema})['strict']();export const MonitorSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'thresholds':z['object']({'progress_stall_hours':z['number']()['optional'](),'compensation_drop_ratio':z['number']()['optional'](),'compensation_coverage_min':z['number']()['optional'](),'messenger_timeout_hours':z['number']()['optional'](),'review_window_closing_days':z['number']()['optional'](),'arb_window_closing_days':z['number']()['optional']()})['strict']()['optional'](),'escalation':z['object']({'default_expected_progress_hours':z['number']()['optional'](),'stall_expected_multiplier':z['number']()['optional'](),'stall_escalation_multiplier':z['number']()['optional'](),'messenger_escalation_multiplier':z['number']()['optional'](),'ratio_critical_threshold':z['number']()['optional']()})['strict']()['optional']()})['strict']();const AppetitePostureSchema=z['object']({'max_risk':z['number'](),'min_benefit':z['number']()})['strict']();export const ModeSectionSchema=z['object']({'comment':z['string']()['optional'](),'appetite_thresholds':z['object']({'conservative':AppetitePostureSchema,'balanced':AppetitePostureSchema,'aggressive':AppetitePostureSchema})['strict']()})['strict']();export const ModeSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'appetite_thresholds':z['object']({'conservative':AppetitePostureSchema['optional'](),'balanced':AppetitePostureSchema['optional'](),'aggressive':AppetitePostureSchema['optional']()})['strict']()['optional']()})['strict']();const PostureWeightSchema=z['object']({'volume':z['number'](),'balanced':z['number'](),'margin':z['number']()})['strict'](),MetricTuneSchema=z['object']({'weight':PostureWeightSchema['optional'](),'good_threshold':z['number']()['optional'](),'bad_threshold':z['number']()['optional']()})['strict']();export const ScorecardSectionSchema=z['object']({'comment':z['string']()['optional'](),'metrics':z['record'](z['string'](),MetricTuneSchema),'shop_evidence_metrics':z['array'](z['string']())})['strict']();export const ScorecardSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'metrics':z['record'](z['string'](),MetricTuneSchema)['optional'](),'shop_evidence_metrics':z['array'](z['string']())['optional']()})['strict']();const RoleIntentEntrySchema=z['object']({'comment':z['string']()['optional'](),'intents':z['array'](z['object']({'id':z['string'](),'weight':z['number']()['min'](0x0)['max'](0x1)})['strict']())['min'](0x1),'horizon':z['number']()['int']()['positive']()['optional'](),'risk_appetite':z['enum'](['conservative','balanced','aggressive'])['optional'](),'red_lines':z['array'](z['string']())['optional'](),'strategy_leaning':z['enum'](['cooperative','opportunistic','confrontational'])['optional']()})['strict']();export const RoleIntentSectionSchema=z['object']({'comment':z['string']()['optional'](),'roles':z['record'](z['string'](),RoleIntentEntrySchema)})['strict']();export const RoleIntentSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'roles':z['record'](z['string'](),RoleIntentEntrySchema['partial']())['optional']()})['strict']();export const RulesSectionSchema=z['object']({'comment':z['string']()['optional'](),'domains':z['record'](z['string'](),RuleDomainPackSchema)})['strict']();export const RulesSectionInputSchema=z['object']({'comment':z['string']()['optional'](),'domains':z['record'](z['string'](),RuleDomainPackInputSchema)['optional']()})['strict']();export const JudgmentDocSchema=z['object']({'version':z['number']()['int'](),'description':z['string']()['optional'](),'evaluation':EvaluationSectionSchema,'game':GameSectionSchema,'match':MatchSectionSchema,'monitor':MonitorSectionSchema,'mode':ModeSectionSchema,'scorecard':ScorecardSectionSchema,'rules':RulesSectionSchema,'role_intent':RoleIntentSectionSchema})['strict']();export const JudgmentDocInputSchema=z['object']({'version':z['number']()['int'](),'description':z['string']()['optional'](),'evaluation':EvaluationSectionInputSchema['optional'](),'game':GameSectionInputSchema['optional'](),'match':MatchSectionInputSchema['optional'](),'monitor':MonitorSectionInputSchema['optional'](),'mode':ModeSectionInputSchema['optional'](),'scorecard':ScorecardSectionInputSchema['optional'](),'rules':RulesSectionInputSchema['optional'](),'role_intent':RoleIntentSectionInputSchema['optional']()})['strict']();export const JudgmentFragmentSchema=JudgmentDocInputSchema['omit']({'version':!![]})['extend']({'version':z['number']()['int']()['optional']()});function isPlainObject(a){return typeof a==='object'&&a!==null&&!Array['isArray'](a);}function entryId(a){if(isPlainObject(a)){if(typeof a['rule_id']==='string')return a['rule_id'];if(typeof a['id']==='string')return a['id'];}return null;}export function mergeJudgmentValues(a,b){if(Array['isArray'](a)&&Array['isArray'](b)){if(a['length']===0x0)return[...b];if(b['length']===0x0)return[...a];const c=[...a,...b]['every'](f=>entryId(f)!==null);if(!c)return[...b];const d=new Map();for(const f of a)d['set'](entryId(f),f);for(const g of b){const h=entryId(g),i=d['get'](h);d['set'](h,i===undefined?g:mergeJudgmentValues(i,g));}return[...d['values']()];}if(isPlainObject(a)&&isPlainObject(b)){const j={...a};for(const [l,m]of Object['entries'](b)){j[l]=mergeJudgmentValues(a[l],m);}return j;}return b===undefined?a:b;}const FACTORY_PATH=fileURLToPath(new URL('../knowledge/baselines/judgment-baselines.json',import.meta.url)),USER_DOC_NAME='judgment.json',LEGACY_USER_DOC_NAME='judgment-baselines.json';export function userJudgmentDocPath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir();return join(a,USER_DOC_NAME);}function resolveUserDocPath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir(),b=join(a,USER_DOC_NAME);if(existsSync(b))return b;const c=join(a,LEGACY_USER_DOC_NAME);return existsSync(c)?c:b;}function zodMessage(a){return a['issues']['slice'](0x0,0x5)['map'](b=>(b['path']['join']('.')||'(root)')+':\x20'+b['message'])['join'](';\x20');}function loadFactory(){let a;try{a=readFileSync(FACTORY_PATH,'utf-8');}catch{throw new Error('Judgment\x20baselines\x20document\x20not\x20found\x20(knowledge/baselines/judgment-baselines.json)\x20—\x20broken\x20installation.');}const b=JudgmentDocSchema['parse'](JSON['parse'](a));if(b['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('Factory\x20judgment\x20document\x20has\x20version\x20'+b['version']+',\x20expected\x20'+EXPECTED_JUDGMENT_VERSION+'\x20—\x20broken\x20installation.');return b;}const FACTORY=loadFactory(),RULE_PACKS_DIR=fileURLToPath(new URL('../knowledge/baselines/rules/',import.meta.url));let RULE_PACK_DIAGNOSTICS=[];export function rulePackDiagnostics(){return RULE_PACK_DIAGNOSTICS;}export function mirrorDigestVerdict(a,b){if(b===null)return'unrecorded';const c=createHash('sha256')['update'](a,'utf-8')['digest']('hex');return c===b['toLowerCase']()?'verified':'mismatch';}function loadFactoryRulePacks(){let a=[];try{a=readdirSync(RULE_PACKS_DIR)['filter'](g=>g['endsWith']('.json'));}catch{return{};}const b=f=>f instanceof z['ZodError']?f['issues']['slice'](0x0,0x3)['map'](g=>(g['path']['join']('.')||'(root)')+':\x20'+g['message'])['join'](';\x20'):f instanceof Error?f['message']:String(f),c={},d=[];for(const f of a){const g=f['replace'](/\.json$/,''),h=join(RULE_PACKS_DIR,f);let i;for(let k=0x0;k<0x2;k++){try{const l=readFileSync(h,'utf-8'),m=RuleDomainPackSchema['parse'](JSON['parse'](l));c[g]=m;try{writeFileSync(h+'.good',l),writeFileSync(h+'.good.sha256',createHash('sha256')['update'](l,'utf-8')['digest']('hex'));}catch{}i=undefined;break;}catch(n){i=n;if(k===0x0)try{Atomics['wait'](new Int32Array(new SharedArrayBuffer(0x4)),0x0,0x0,0x32);}catch{}}}if(i===undefined)continue;const j=b(i);try{const o=readFileSync(h+'.good','utf-8');c[g]=RuleDomainPackSchema['parse'](JSON['parse'](o));let p=null;try{p=readFileSync(h+'.good.sha256','utf-8')['trim']();}catch{}const q=mirrorDigestVerdict(o,p),r=q==='verified'?'mirror\x20digest\x20verified\x20(exact\x20bytes\x20of\x20the\x20last\x20successful\x20load)':q==='mismatch'?'mirror\x20digest\x20MISMATCH\x20—\x20the\x20last-good\x20copy\x20drifted\x20from\x20its\x20recorded\x20digest;\x20treat\x20its\x20vintage\x20as\x20unknown':'mirror\x20has\x20no\x20recorded\x20digest\x20(pre-hash-format\x20copy);\x20vintage\x20unverifiable';d['push']({'domain':g,'file':f,'status':'degraded','detail':'failed\x20validation\x20('+j+')\x20—\x20running\x20on\x20the\x20LAST-GOOD\x20copy;\x20'+r+'.'}),process['stderr']['write']('[judgment]\x20rule\x20pack\x20\x22'+f+'\x22\x20failed\x20validation\x20('+j+')\x20—\x20'+('running\x20on\x20the\x20LAST-GOOD\x20copy;\x20'+r+';\x20fix\x20or\x20delete\x20the\x20bad\x20file\x20to\x20clear\x20this\x20warning.\x0a'));}catch{d['push']({'domain':g,'file':f,'status':'disabled','detail':'failed\x20validation\x20('+j+')\x20and\x20no\x20usable\x20last-good\x20copy\x20exists\x20—\x20domain\x20\x22'+g+'\x22\x20is\x20DISABLED\x20for\x20this\x20run.'}),process['stderr']['write']('[judgment]\x20rule\x20pack\x20\x22'+f+'\x22\x20failed\x20validation\x20('+j+')\x20and\x20no\x20last-good\x20copy\x20'+('exists\x20—\x20domain\x20\x22'+g+'\x22\x20is\x20DISABLED\x20for\x20this\x20run\x20(the\x20server\x20stays\x20up;\x20inline\x20domains\x20unaffected).\x0a'));}}return RULE_PACK_DIAGNOSTICS=d,c;}const FACTORY_RULE_PACKS=loadFactoryRulePacks();export function factoryRulePack(a){return FACTORY_RULE_PACKS[a]??null;}function withFactoryRulePacks(a){const b=a['rules']??{'domains':{}},c=mergeJudgmentValues(FACTORY_RULE_PACKS,b['domains']??{});return{...a,'rules':{...b,'domains':c}};}function unknownRuleRef(a){for(const [b,c]of Object['entries'](a['rules']?.['domains']??{})){const d=FACTORY_RULE_PACKS[b];if(!d)return'rules.domains:\x20unknown\x20domain\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20rule\x20packs\x20—\x20check\x20for\x20a\x20typo)';const e=new Set(d['rules']['map'](f=>f['rule_id']));for(const f of c['rules']){if(!e['has'](f['rule_id']))return'rules.domains.'+b+':\x20unknown\x20rule\x20\x27'+f['rule_id']+'\x27\x20(users\x20may\x20tune\x20or\x20disable\x20factory\x20rules,\x20not\x20invent\x20them)';}}return null;}function unknownDimensionKey(a){for(const b of Object['keys'](a['evaluation']['weights'])){if(!(b in FACTORY['evaluation']['weights']))return'evaluation.weights:\x20unknown\x20dimension\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const c of Object['keys'](a['evaluation']['dimensions'])){if(!(c in FACTORY['evaluation']['dimensions']))return'evaluation.dimensions:\x20unknown\x20dimension\x20\x27'+c+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}return null;}function unknownGameRef(a){for(const d of Object['keys'](a['game']['role_interests'])){if(!(d in FACTORY['game']['role_interests']))return'game.role_interests:\x20unknown\x20role\x20\x27'+d+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const f of Object['keys'](a['game']['outcome_semantics'])){if(!(f in FACTORY['game']['outcome_semantics']))return'game.outcome_semantics:\x20unknown\x20outcome\x20\x27'+f+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}const b=new Set(Object['values'](FACTORY['game']['outcome_semantics'])['flat']());for(const g of a['game']['keyword_rules']){if(!b['has'](g['effect']))return'game.keyword_rules.'+g['id']+':\x20unknown\x20effect\x20\x27'+g['effect']+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.outcome_semantics)';}const c=a['game']['arb'];if(c){const h=FACTORY['game']['arb'];for(const j of Object['keys'](c['role_interests'])){if(!(j in h['role_interests']))return'game.arb.role_interests:\x20unknown\x20perspective\x20\x27'+j+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}const i=new Set(Object['keys'](h['effect_semantics']));for(const k of c['keyword_rules']){if(!i['has'](k['effect']))return'game.arb.keyword_rules.'+k['id']+':\x20unknown\x20effect\x20\x27'+k['effect']+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.arb.effect_semantics)';}for(const [l,m]of Object['entries'](c['role_interests'])){for(const n of[...m['prefer'],...m['avoid']]){if(!i['has'](n))return'game.arb.role_interests.'+l+':\x20unknown\x20effect\x20\x27'+n+'\x27\x20(must\x20be\x20an\x20effect\x20defined\x20in\x20game.arb.effect_semantics)';}}}return null;}function unknownScorecardRef(a){for(const b of Object['keys'](a['scorecard']['metrics'])){if(!(b in FACTORY['scorecard']['metrics']))return'scorecard.metrics:\x20unknown\x20metric\x20\x27'+b+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}for(const c of a['scorecard']['shop_evidence_metrics']){if(!(c in FACTORY['scorecard']['metrics']))return'scorecard.shop_evidence_metrics:\x20unknown\x20metric\x20\x27'+c+'\x27\x20(not\x20in\x20the\x20factory\x20document\x20—\x20check\x20for\x20a\x20typo)';}return null;}function unknownRoleIntentRef(a){const b=new Set(ACTOR_ROLES),c=FACTORY['role_intent']?.['roles']??{};for(const [d,e]of Object['entries'](a['role_intent']?.['roles']??{})){if(!b['has'](d))return'role_intent.roles:\x20unknown\x20role\x20\x27'+d+'\x27\x20(must\x20be\x20an\x20ACTOR\x20role\x20—\x20neutral/system\x20hold\x20no\x20intent)';const f=new Set((c[d]?.['intents']??[])['map'](g=>g['id']));for(const g of e['intents']){if(!f['has'](g['id']))return'role_intent.roles.'+d+':\x20unknown\x20intent\x20\x27'+g['id']+'\x27\x20(not\x20in\x20the\x20factory\x20profile\x20—\x20users\x20re-tune\x20weights,\x20they\x20never\x20invent\x20intent\x20vocabulary)';}}return null;}function unknownExposureRef(a){for(const [b,d]of Object['entries'](a['rules']?.['domains']??{})){const e=FACTORY_RULE_PACKS[b];if(!e)continue;const f=new Set(Object['keys'](e['facts']??{}));for(const g of d['rules']){for(const [h,i]of g['cases']['entries']()){const j=parseFactRef(String(i['level']));if(j!==null&&!f['has'](j))return'rules.domains.'+b+'.'+g['rule_id']+'.cases['+h+'].level:\x20unknown\x20fact\x20reference\x20\x27fact:'+j+'\x27\x20(not\x20in\x20the\x20factory\x20\x27'+b+'\x27\x20fact\x20vocabulary)';for(const [k,l]of(i['exposure']?.['gain_paths']??[])['entries']()){const m=parseFactRef(String(l['viability']));if(m!==null&&!f['has'](m))return'rules.domains.'+b+'.'+g['rule_id']+'.cases['+h+'].exposure.gain_paths['+k+'].viability:\x20unknown\x20fact\x20reference\x20\x27fact:'+m+'\x27\x20(not\x20in\x20the\x20factory\x20\x27'+b+'\x27\x20fact\x20vocabulary)';}}}}return null;}let userState=null,lastReloadError=null,effectiveCache=null;function invalidate(){effectiveCache=null;}function probeUserDoc(){const a=resolveUserDocPath();let b=null,c=0x0;try{b=readFileSync(a,'utf-8'),c=statSync(a)['mtimeMs'];}catch{b=null;}if(b===null){if(userState!==null||lastReloadError!==null)return userState=null,lastReloadError=null,invalidate(),!![];return![];}if(userState&&userState['raw']===b)return![];try{const d=JSON['parse'](b),f=JudgmentDocInputSchema['parse'](d);if(f['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('version:\x20unsupported\x20document\x20version\x20'+f['version']+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')');const g=withFactoryRulePacks(mergeJudgmentValues(FACTORY,f)),h=unknownDimensionKey(g)??unknownRuleRef(g)??unknownExposureRef(g)??unknownGameRef(g)??unknownScorecardRef(g)??unknownRoleIntentRef(g);if(h)throw new Error(h);const i=JudgmentDocSchema['safeParse'](g);if(!i['success'])throw new Error('schema:\x20'+zodMessage(i['error']));return userState={'raw':b,'mtimeMs':c,'doc':f},lastReloadError=null,invalidate(),!![];}catch(j){return lastReloadError=j instanceof z['ZodError']?'schema:\x20'+zodMessage(j):j instanceof Error?j['message']:String(j),![];}}function effective(){if(!effectiveCache){let a=withFactoryRulePacks(mergeJudgmentValues(FACTORY,layerSlots['industry']?.['fragment']??{}));a=mergeJudgmentValues(a,userState?.['doc']??{}),a=mergeJudgmentValues(a,layerSlots['persona']?.['fragment']??{});for(const [b,c]of overrides){a=applyPath(a,b,c);}effectiveCache=JudgmentDocSchema['parse'](a);}return effectiveCache;}const layerSlots={'persona':null,'industry':null},layerErrors={'persona':null,'industry':null};let disableTrace=[];function recordDisableTrace(a,b,c){disableTrace=disableTrace['filter'](d=>d['layer']!==b);for(const [d,e]of Object['entries'](c['rules']?.['domains']??{})){for(const f of e['rules']??[]){f['enabled']===![]&&disableTrace['push']({'layer':b,'domain':d,'rule_id':f['rule_id']});}}}function parseLayerFragment(a,b){let c;try{c=JudgmentFragmentSchema['parse'](a);}catch(h){return{'error':b+':\x20'+(h instanceof z['ZodError']?zodMessage(h):String(h))};}if(c['version']!==undefined&&c['version']!==EXPECTED_JUDGMENT_VERSION)return{'error':b+':\x20unsupported\x20fragment\x20version\x20'+c['version']+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')'};const d=withFactoryRulePacks(mergeJudgmentValues(FACTORY,c)),f=unknownDimensionKey(d)??unknownRuleRef(d)??unknownExposureRef(d)??unknownGameRef(d)??unknownScorecardRef(d)??unknownRoleIntentRef(d);if(f)return{'error':b+':\x20'+f};const g=JudgmentDocSchema['safeParse'](d);if(!g['success'])return{'error':b+':\x20schema:\x20'+zodMessage(g['error'])};return{'fragment':c};}function setLayerFragment(a,b,c){if(b===null||b===undefined)return(layerSlots[a]!==null||layerErrors[a]!==null)&&(layerSlots[a]=null,layerErrors[a]=null,disableTrace=disableTrace['filter'](f=>f['layer']!==c),invalidate()),{'ok':!![]};let d;try{d=JSON['stringify'](b)??'';}catch{return{'ok':![],'error':c+':\x20fragment\x20is\x20not\x20JSON-serializable'};}if(layerSlots[a]?.['raw']===d)return{'ok':!![]};const e=parseLayerFragment(b,c);if(e['error']||!e['fragment'])return layerErrors[a]=e['error']??'rejected',{'ok':![],'error':layerErrors[a]??undefined};return layerSlots[a]={'raw':d,'fragment':e['fragment'],'label':c},layerErrors[a]=null,recordDisableTrace(a,c,e['fragment']),invalidate(),{'ok':!![]};}export function setJudgmentPersonaFragment(a,b='persona'){return setLayerFragment('persona',a,b);}export function setJudgmentIndustryOverlay(a,b='industry\x20packs'){return setLayerFragment('industry',a,b);}export function judgmentLayerError(a){return layerErrors[a];}export function validateJudgmentFragment(a,b='judgment'){return parseLayerFragment(a,b)['error']??null;}export function judgmentDisableTrace(){return disableTrace['map'](a=>({...a}));}export function clearJudgmentLayers(){layerSlots['persona']=null,layerSlots['industry']=null,layerErrors['persona']=null,layerErrors['industry']=null,disableTrace=[],invalidate();}const overrides=new Map();function resolvePath(a,b){let c=a;for(const d of b){if(!isPlainObject(c))return undefined;c=c[d];if(c===undefined)return undefined;}return c;}function applyPath(a,b,c){const d=b['split']('.'),e=structuredClone(a);let f=e;for(let g=0x0;g<d['length']-0x1;g++){f=f[d[g]];}return f[d[d['length']-0x1]]=c,e;}function typeName(a){if(Array['isArray'](a))return'array';if(a===null)return'null';return typeof a;}function sameShape(a,b){const c=typeName(a),d=typeName(b);if(c==='object'&&d==='object')return isPlainObject(a)&&isPlainObject(b);return c===d;}export function setJudgmentOverride(a,b){const c=typeof a==='string'?a['trim']():'';if(!c)return{'ok':![],'error':'\x27path\x27\x20is\x20required\x20(dotted,\x20e.g.\x20evaluation.weights.trust_reviews)'};if(b===undefined||b===null||!(typeof b==='number'||typeof b==='string'||typeof b==='boolean'||Array['isArray'](b)||isPlainObject(b)))return{'ok':![],'error':'\x27value\x27\x20must\x20be\x20a\x20JSON\x20value\x20(number\x20/\x20string\x20/\x20boolean\x20/\x20array\x20/\x20object)'};const d=c['split']('.')['filter'](Boolean),f=d[0x0];if(!JUDGMENT_SECTION_NAMES['includes'](f))return{'ok':![],'error':'Unknown\x20section\x20\x27'+f+'\x27\x20—\x20sections:\x20'+JUDGMENT_SECTION_NAMES['join'](',\x20')};probeUserDoc();const g=resolvePath(effective(),d);if(g===undefined)return{'ok':![],'error':'Unknown\x20judgment\x20path\x20\x27'+c+'\x27'};if(!sameShape(g,b))return{'ok':![],'error':'Type\x20mismatch\x20at\x20\x27'+c+'\x27\x20—\x20expected\x20'+typeName(g)+',\x20got\x20'+typeName(b)};try{JudgmentDocSchema['parse'](applyPath(effective(),c,b));}catch(h){return{'ok':![],'error':'Rejected:\x20'+(h instanceof z['ZodError']?zodMessage(h):h instanceof Error?h['message']:String(h))};}return overrides['set'](c,b),invalidate(),{'ok':!![]};}export function clearJudgmentOverride(a){const b=overrides['delete'](typeof a==='string'?a['trim']():'');if(b)invalidate();return b;}export function clearJudgmentOverrides(){const a=overrides['size'];return a>0x0&&(overrides['clear'](),invalidate()),a;}export function judgmentOverrides(){return Array['from'](overrides['entries']())['map'](([a,b])=>({'path':a,'value':b}));}export function getJudgmentDoc(){return probeUserDoc(),structuredClone(effective());}let policyRunDoc=null;export function beginPolicyRun(){policyRunDoc=getJudgmentDoc();}export function endPolicyRun(){policyRunDoc=null;}export function policyJudgmentDoc(){return policyRunDoc??getJudgmentDoc();}export function evaluationSection(){return getJudgmentDoc()['evaluation'];}export function factoryJudgmentDoc(){return structuredClone(withFactoryRulePacks(FACTORY));}export function readUserJudgmentDocView(){probeUserDoc();if(userState)return{'user_path':userJudgmentDocPath(),'exists':!![],'version':EXPECTED_JUDGMENT_VERSION,'doc':structuredClone(userState['doc'])};return{'user_path':userJudgmentDocPath(),'exists':![],'version':EXPECTED_JUDGMENT_VERSION,'doc':factoryJudgmentDoc()};}export function judgmentStatus(){probeUserDoc();const a=effective(),b={};for(const c of JUDGMENT_SECTION_NAMES){const d=a[c];if(c==='rules'&&isPlainObject(d)){const e=d['domains']??{};b[c]=Object['values'](e)['reduce']((f,g)=>f+(Array['isArray'](g['rules'])?g['rules']['length']:0x0),0x0);continue;}b[c]=Array['isArray'](d)?d['length']:isPlainObject(d)?Object['keys'](d)['length']:0x0;}return{'version':a['version'],'factory_path':FACTORY_PATH,'user_path':userJudgmentDocPath(),'user_doc_loaded':userState!==null,'user_mtime':userState?new Date(userState['mtimeMs'])['toISOString']():null,'last_reload_error':lastReloadError,'user_doc':userState?structuredClone(userState['doc']):null,'persona_fragment_loaded':layerSlots['persona']!==null,'industry_overlay_loaded':layerSlots['industry']!==null,'layer_errors':{'persona':layerErrors['persona'],'industry':layerErrors['industry']},'disable_trace':judgmentDisableTrace(),'sections':b,'overrides':judgmentOverrides()};}function jsonEqual(c,d){if(c===d)return!![];if(Array['isArray'](c)&&Array['isArray'](d))return JSON['stringify'](c)===JSON['stringify'](d);if(isPlainObject(c)&&isPlainObject(d)){const e=Object['keys'](c);if(e['length']!==Object['keys'](d)['length'])return![];return e['every'](f=>f in d&&jsonEqual(c[f],d[f]));}return![];}function collectChanges(a,c,d,e){if(isPlainObject(c)){const f=isPlainObject(a)?a:{};for(const [g,h]of Object['entries'](c)){collectChanges(f[g],h,d?d+'.'+g:g,e);}return;}!jsonEqual(a,c)&&e['push']({'path':d||'(root)','old':a===undefined?null:a,'new':c});}export function patchUserJudgmentDoc(a){const b=userJudgmentDocPath(),c=join(dirname(b),'judgment.backup.json'),d=resolveUserDocPath();if(!isPlainObject(a))throw new Error('\x27patch\x27\x20must\x20be\x20a\x20partial\x20judgment\x20document\x20object\x20(e.g.\x20{\x22evaluation\x22:\x20{\x22weights\x22:\x20{…}}})');if(a['version']!==undefined&&a['version']!==EXPECTED_JUDGMENT_VERSION)throw new Error('patch.version:\x20unsupported\x20version\x20'+String(a['version'])+'\x20(expected\x20'+EXPECTED_JUDGMENT_VERSION+')');const {version:f,...g}=a;let h;try{h=JudgmentFragmentSchema['parse'](g);}catch(s){throw new Error('patch\x20rejected:\x20'+(s instanceof z['ZodError']?zodMessage(s):s instanceof Error?s['message']:String(s)));}if(Object['keys'](h)['length']===0x0)throw new Error('\x27patch\x27\x20is\x20empty\x20—\x20nothing\x20to\x20apply\x20(sections:\x20'+JUDGMENT_SECTION_NAMES['join'](',\x20')+')');let i=null,j=![];try{const t=readFileSync(d,'utf-8');j=!![];const u=JSON['parse'](t);i=JudgmentDocInputSchema['parse'](u);}catch(v){if(j)throw new Error('the\x20current\x20user\x20document\x20is\x20not\x20a\x20valid\x20judgment\x20document\x20('+(v instanceof Error?v['message']:String(v))+')\x20—\x20fix\x20or\x20remove\x20'+d+'\x20by\x20hand\x20first');i=null;}const k=mergeJudgmentValues(i??{'version':EXPECTED_JUDGMENT_VERSION},h);k['version']=EXPECTED_JUDGMENT_VERSION;const l=withFactoryRulePacks(mergeJudgmentValues(FACTORY,k)),m=unknownDimensionKey(l)??unknownRuleRef(l)??unknownExposureRef(l)??unknownGameRef(l)??unknownScorecardRef(l)??unknownRoleIntentRef(l);if(m)throw new Error('patch\x20rejected:\x20'+m);const n=JudgmentDocSchema['safeParse'](l);if(!n['success'])throw new Error('patch\x20rejected:\x20schema:\x20'+zodMessage(n['error']));const o=judgmentDocWarnings(l),p=[];collectChanges(i??{},h,'',p);if(p['length']===0x0)return{'applied':!![],'user_path':b,'backup_path':null,'version':EXPECTED_JUDGMENT_VERSION,'changed':p,'reload_error':null,'warnings':o};const q=JSON['stringify'](k,null,0x2)+'\x0a';mkdirSync(dirname(b),{'recursive':!![]});if(j)copyFileSync(d,c);const r=b+'.tmp';writeFileSync(r,q,'utf-8'),renameSync(r,b);try{userState={'raw':q,'mtimeMs':statSync(b)['mtimeMs'],'doc':k},lastReloadError=null;}catch(w){lastReloadError=w instanceof Error?w['message']:String(w);}return invalidate(),{'applied':!![],'user_path':b,'backup_path':j?c:null,'version':EXPECTED_JUDGMENT_VERSION,'changed':p,'reload_error':lastReloadError,'warnings':o};}
@@ -1 +1 @@
1
- import*as a34a from'node:fs';import*as a34b from'node:path';import{z}from'zod';import{getWowMcpDir}from'@wowok/wowok';import{MatchPolicySchema}from'../schema/evaluation/index.js';import{matchPolicyWarnings}from'./config-warnings.js';const FILE_NAME='match-policy.json',MatchPolicyFileSchema=z['object']({'version':z['number']()['int']()['nonnegative']()['optional'](),'comment':z['string']()['optional'](),'demand_to_supply':MatchPolicySchema['optional'](),'supply_to_demand':MatchPolicySchema['optional']()})['strict']();export function matchPolicyFilePath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir();return a34b['join'](a,FILE_NAME);}let cache=null;function bindDirection(a,b){if(a['direction']!==undefined&&a['direction']!==b)throw new Error('policy\x20\x27'+a['policy_id']+'\x27\x20declares\x20direction\x20\x27'+a['direction']+'\x27\x20under\x20the\x20\x27'+b+'\x27\x20key');return a['direction']===undefined?{...a,'direction':b}:a;}function carriedPrevious(a){return{'path':a?.['path']??'','exists':!![],'error':'',...a?.['comment']!==undefined?{'comment':a['comment']}:{},...a?.['demand_to_supply']?{'demand_to_supply':a['demand_to_supply']}:{},...a?.['supply_to_demand']?{'supply_to_demand':a['supply_to_demand']}:{}};}function readAndParse(a,b){let c;try{c=a34a['readFileSync'](a,'utf-8');}catch(d){return{...carriedPrevious(b),'path':a,'error':'unreadable:\x20'+(d instanceof Error?d['message']:String(d))};}try{const f=MatchPolicyFileSchema['parse'](JSON['parse'](c));return{'path':a,'exists':!![],'error':null,...f['comment']!==undefined?{'comment':f['comment']}:{},...f['demand_to_supply']?{'demand_to_supply':bindDirection(f['demand_to_supply'],'demand_to_supply')}:{},...f['supply_to_demand']?{'supply_to_demand':bindDirection(f['supply_to_demand'],'supply_to_demand')}:{}};}catch(g){return{...carriedPrevious(b),'path':a,'error':g instanceof z['ZodError']?'schema:\x20'+g['issues']['map'](h=>h['path']['join']('.')+':\x20'+h['message'])['join'](';\x20'):g instanceof Error?g['message']:String(g)};}}export function getMatchPolicyFile(){const a=matchPolicyFilePath();try{const b=a34a['statSync'](a);if(cache&&cache['mtimeMs']===b['mtimeMs'])return cache['state'];const c=readAndParse(a,cache?.['state']);if(c['error']===null)cache={'mtimeMs':b['mtimeMs'],'state':c};return c;}catch{return{'path':a,'exists':![],'error':null};}}export function resetMatchPolicyFileCache(){cache=null;}function isPlainObject(a){return typeof a==='object'&&a!==null&&!Array['isArray'](a);}function zodMessage(a){return a instanceof z['ZodError']?a['issues']['map'](b=>b['path']['join']('.')+':\x20'+b['message'])['join'](';\x20'):a instanceof Error?a['message']:String(a);}function deepMergeValues(a,b){if(isPlainObject(a)&&isPlainObject(b)){const c={...a};for(const [d,e]of Object['entries'](b)){c[d]=d in a?deepMergeValues(a[d],e):e;}return c;}return b;}function collectLeafChanges(a,c,d,e){if(isPlainObject(c)){const f=isPlainObject(a)?a:{};for(const [g,h]of Object['entries'](c)){collectLeafChanges(f[g],h,d?d+'.'+g:g,e);}return;}JSON['stringify'](a)!==JSON['stringify'](c)&&e['push']({'path':d||'(root)','old':a===undefined?null:a,'new':c});}export function patchMatchPolicyFile(a){const b=matchPolicyFilePath(),c=a34b['join'](a34b['dirname'](b),'match-policy.backup.json');if(!isPlainObject(a))throw new Error('\x27patch\x27\x20must\x20be\x20an\x20object\x20like\x20{\x22demand_to_supply\x22:\x20{…},\x20\x22supply_to_demand\x22:\x20{…}}');const d=Object['keys'](a)['filter'](p=>p!=='demand_to_supply'&&p!=='supply_to_demand'&&p!=='comment');if(d['length']>0x0)throw new Error('patch\x20rejected:\x20unknown\x20key(s)\x20'+d['map'](p=>'\x27'+p+'\x27')['join'](',\x20')+'\x20—\x20allowed:\x20demand_to_supply,\x20supply_to_demand,\x20comment');let f={},g=![];try{const p=a34a['readFileSync'](b,'utf-8');g=!![];const q=MatchPolicyFileSchema['parse'](JSON['parse'](p));f={...q['comment']!==undefined?{'comment':q['comment']}:{},...q['demand_to_supply']?{'demand_to_supply':q['demand_to_supply']}:{},...q['supply_to_demand']?{'supply_to_demand':q['supply_to_demand']}:{}};}catch(r){if(g)throw new Error('the\x20current\x20match-policy.json\x20is\x20not\x20a\x20valid\x20match-policy\x20document\x20('+zodMessage(r)+')\x20—\x20fix\x20or\x20remove\x20'+b+'\x20by\x20hand\x20first');f={};}const h={...f};if(a['comment']!==undefined){if(typeof a['comment']!=='string')throw new Error('patch.comment\x20must\x20be\x20a\x20string');h['comment']=a['comment'];}const i=[];for(const s of['demand_to_supply','supply_to_demand']){if(a[s]===undefined)continue;if(!isPlainObject(a[s]))throw new Error('patch.'+s+'\x20must\x20be\x20a\x20policy\x20object\x20(e.g.\x20{\x22policy_id\x22:\x20\x22my_style\x22,\x20…})');const t=f[s],u=deepMergeValues(t??{},a[s]);try{h[s]=MatchPolicySchema['parse'](u);}catch(v){throw new Error('patch.'+s+'\x20rejected:\x20'+zodMessage(v));}collectLeafChanges(t??{},a[s],s,i);}if(i['length']===0x0){const w=[...matchPolicyWarnings('demand_to_supply',f['demand_to_supply']??{}),...matchPolicyWarnings('supply_to_demand',f['supply_to_demand']??{})];return{'applied':!![],'path':b,'backup_path':null,'changed':i,'error':null,'warnings':w};}const j={'version':0x1,...h},k=MatchPolicyFileSchema['parse'](j),l=[...matchPolicyWarnings('demand_to_supply',h['demand_to_supply']??{}),...matchPolicyWarnings('supply_to_demand',h['supply_to_demand']??{})],m={'path':b,'exists':!![],'error':null,...typeof h['comment']==='string'?{'comment':h['comment']}:{},...k['demand_to_supply']?{'demand_to_supply':bindDirection(k['demand_to_supply'],'demand_to_supply')}:{},...k['supply_to_demand']?{'supply_to_demand':bindDirection(k['supply_to_demand'],'supply_to_demand')}:{}},n=JSON['stringify'](j,null,0x2)+'\x0a';a34a['mkdirSync'](a34b['dirname'](b),{'recursive':!![]});if(g)a34a['copyFileSync'](b,c);const o=b+'.tmp';return a34a['writeFileSync'](o,n,'utf-8'),a34a['renameSync'](o,b),cache={'mtimeMs':a34a['statSync'](b)['mtimeMs'],'state':m},{'applied':!![],'path':b,'backup_path':g?c:null,'changed':i,'error':null,'warnings':l};}export function clearMatchPolicyFile(a){const b=matchPolicyFilePath(),c=a34b['join'](a34b['dirname'](b),'match-policy.backup.json');try{a34a['statSync'](b);}catch{return{'cleared':![],'path':b,'scope':a??'file','backup_path':null};}a34a['copyFileSync'](b,c);if(!a)return a34a['rmSync'](b),cache=null,{'cleared':!![],'path':b,'scope':'file','backup_path':c};let d;try{d=JSON['parse'](a34a['readFileSync'](b,'utf-8'));}catch(g){throw new Error('match-policy.json\x20is\x20unreadable\x20('+zodMessage(g)+')\x20—\x20clear\x20the\x20WHOLE\x20file\x20(omit\x20\x27direction\x27)\x20or\x20remove\x20'+b+'\x20by\x20hand');}delete d[a];const f='demand_to_supply'in d||'supply_to_demand'in d;if(f){const h=JSON['stringify'](d,null,0x2)+'\x0a',i=b+'.tmp';a34a['writeFileSync'](i,h,'utf-8'),a34a['renameSync'](i,b);}else a34a['rmSync'](b);return cache=null,{'cleared':!![],'path':b,'scope':a,'backup_path':c};}
1
+ import*as a36a from'node:fs';import*as a36b from'node:path';import{z}from'zod';import{getWowMcpDir}from'@wowok/wowok';import{MatchPolicySchema}from'../schema/evaluation/index.js';import{matchPolicyWarnings}from'./config-warnings.js';const FILE_NAME='match-policy.json',MatchPolicyFileSchema=z['object']({'version':z['number']()['int']()['nonnegative']()['optional'](),'comment':z['string']()['optional'](),'demand_to_supply':MatchPolicySchema['optional'](),'supply_to_demand':MatchPolicySchema['optional']()})['strict']();export function matchPolicyFilePath(){const a=process['env']['WOWOK_CONFIG_DIR']||getWowMcpDir();return a36b['join'](a,FILE_NAME);}let cache=null;function bindDirection(a,b){if(a['direction']!==undefined&&a['direction']!==b)throw new Error('policy\x20\x27'+a['policy_id']+'\x27\x20declares\x20direction\x20\x27'+a['direction']+'\x27\x20under\x20the\x20\x27'+b+'\x27\x20key');return a['direction']===undefined?{...a,'direction':b}:a;}function carriedPrevious(a){return{'path':a?.['path']??'','exists':!![],'error':'',...a?.['comment']!==undefined?{'comment':a['comment']}:{},...a?.['demand_to_supply']?{'demand_to_supply':a['demand_to_supply']}:{},...a?.['supply_to_demand']?{'supply_to_demand':a['supply_to_demand']}:{}};}function readAndParse(a,b){let c;try{c=a36a['readFileSync'](a,'utf-8');}catch(d){return{...carriedPrevious(b),'path':a,'error':'unreadable:\x20'+(d instanceof Error?d['message']:String(d))};}try{const f=MatchPolicyFileSchema['parse'](JSON['parse'](c));return{'path':a,'exists':!![],'error':null,...f['comment']!==undefined?{'comment':f['comment']}:{},...f['demand_to_supply']?{'demand_to_supply':bindDirection(f['demand_to_supply'],'demand_to_supply')}:{},...f['supply_to_demand']?{'supply_to_demand':bindDirection(f['supply_to_demand'],'supply_to_demand')}:{}};}catch(g){return{...carriedPrevious(b),'path':a,'error':g instanceof z['ZodError']?'schema:\x20'+g['issues']['map'](h=>h['path']['join']('.')+':\x20'+h['message'])['join'](';\x20'):g instanceof Error?g['message']:String(g)};}}export function getMatchPolicyFile(){const a=matchPolicyFilePath();try{const b=a36a['statSync'](a);if(cache&&cache['mtimeMs']===b['mtimeMs'])return cache['state'];const c=readAndParse(a,cache?.['state']);if(c['error']===null)cache={'mtimeMs':b['mtimeMs'],'state':c};return c;}catch{return{'path':a,'exists':![],'error':null};}}export function resetMatchPolicyFileCache(){cache=null;}function isPlainObject(a){return typeof a==='object'&&a!==null&&!Array['isArray'](a);}function zodMessage(a){return a instanceof z['ZodError']?a['issues']['map'](b=>b['path']['join']('.')+':\x20'+b['message'])['join'](';\x20'):a instanceof Error?a['message']:String(a);}function deepMergeValues(a,b){if(isPlainObject(a)&&isPlainObject(b)){const c={...a};for(const [d,e]of Object['entries'](b)){c[d]=d in a?deepMergeValues(a[d],e):e;}return c;}return b;}function collectLeafChanges(a,c,d,e){if(isPlainObject(c)){const f=isPlainObject(a)?a:{};for(const [g,h]of Object['entries'](c)){collectLeafChanges(f[g],h,d?d+'.'+g:g,e);}return;}JSON['stringify'](a)!==JSON['stringify'](c)&&e['push']({'path':d||'(root)','old':a===undefined?null:a,'new':c});}export function patchMatchPolicyFile(a){const b=matchPolicyFilePath(),c=a36b['join'](a36b['dirname'](b),'match-policy.backup.json');if(!isPlainObject(a))throw new Error('\x27patch\x27\x20must\x20be\x20an\x20object\x20like\x20{\x22demand_to_supply\x22:\x20{…},\x20\x22supply_to_demand\x22:\x20{…}}');const d=Object['keys'](a)['filter'](p=>p!=='demand_to_supply'&&p!=='supply_to_demand'&&p!=='comment');if(d['length']>0x0)throw new Error('patch\x20rejected:\x20unknown\x20key(s)\x20'+d['map'](p=>'\x27'+p+'\x27')['join'](',\x20')+'\x20—\x20allowed:\x20demand_to_supply,\x20supply_to_demand,\x20comment');let f={},g=![];try{const p=a36a['readFileSync'](b,'utf-8');g=!![];const q=MatchPolicyFileSchema['parse'](JSON['parse'](p));f={...q['comment']!==undefined?{'comment':q['comment']}:{},...q['demand_to_supply']?{'demand_to_supply':q['demand_to_supply']}:{},...q['supply_to_demand']?{'supply_to_demand':q['supply_to_demand']}:{}};}catch(r){if(g)throw new Error('the\x20current\x20match-policy.json\x20is\x20not\x20a\x20valid\x20match-policy\x20document\x20('+zodMessage(r)+')\x20—\x20fix\x20or\x20remove\x20'+b+'\x20by\x20hand\x20first');f={};}const h={...f};if(a['comment']!==undefined){if(typeof a['comment']!=='string')throw new Error('patch.comment\x20must\x20be\x20a\x20string');h['comment']=a['comment'];}const i=[];for(const s of['demand_to_supply','supply_to_demand']){if(a[s]===undefined)continue;if(!isPlainObject(a[s]))throw new Error('patch.'+s+'\x20must\x20be\x20a\x20policy\x20object\x20(e.g.\x20{\x22policy_id\x22:\x20\x22my_style\x22,\x20…})');const t=f[s],u=deepMergeValues(t??{},a[s]);try{h[s]=MatchPolicySchema['parse'](u);}catch(v){throw new Error('patch.'+s+'\x20rejected:\x20'+zodMessage(v));}collectLeafChanges(t??{},a[s],s,i);}if(i['length']===0x0){const w=[...matchPolicyWarnings('demand_to_supply',f['demand_to_supply']??{}),...matchPolicyWarnings('supply_to_demand',f['supply_to_demand']??{})];return{'applied':!![],'path':b,'backup_path':null,'changed':i,'error':null,'warnings':w};}const j={'version':0x1,...h},k=MatchPolicyFileSchema['parse'](j),l=[...matchPolicyWarnings('demand_to_supply',h['demand_to_supply']??{}),...matchPolicyWarnings('supply_to_demand',h['supply_to_demand']??{})],m={'path':b,'exists':!![],'error':null,...typeof h['comment']==='string'?{'comment':h['comment']}:{},...k['demand_to_supply']?{'demand_to_supply':bindDirection(k['demand_to_supply'],'demand_to_supply')}:{},...k['supply_to_demand']?{'supply_to_demand':bindDirection(k['supply_to_demand'],'supply_to_demand')}:{}},n=JSON['stringify'](j,null,0x2)+'\x0a';a36a['mkdirSync'](a36b['dirname'](b),{'recursive':!![]});if(g)a36a['copyFileSync'](b,c);const o=b+'.tmp';return a36a['writeFileSync'](o,n,'utf-8'),a36a['renameSync'](o,b),cache={'mtimeMs':a36a['statSync'](b)['mtimeMs'],'state':m},{'applied':!![],'path':b,'backup_path':g?c:null,'changed':i,'error':null,'warnings':l};}export function clearMatchPolicyFile(a){const b=matchPolicyFilePath(),c=a36b['join'](a36b['dirname'](b),'match-policy.backup.json');try{a36a['statSync'](b);}catch{return{'cleared':![],'path':b,'scope':a??'file','backup_path':null};}a36a['copyFileSync'](b,c);if(!a)return a36a['rmSync'](b),cache=null,{'cleared':!![],'path':b,'scope':'file','backup_path':c};let d;try{d=JSON['parse'](a36a['readFileSync'](b,'utf-8'));}catch(g){throw new Error('match-policy.json\x20is\x20unreadable\x20('+zodMessage(g)+')\x20—\x20clear\x20the\x20WHOLE\x20file\x20(omit\x20\x27direction\x27)\x20or\x20remove\x20'+b+'\x20by\x20hand');}delete d[a];const f='demand_to_supply'in d||'supply_to_demand'in d;if(f){const h=JSON['stringify'](d,null,0x2)+'\x0a',i=b+'.tmp';a36a['writeFileSync'](i,h,'utf-8'),a36a['renameSync'](i,b);}else a36a['rmSync'](b);return cache=null,{'cleared':!![],'path':b,'scope':a,'backup_path':c};}
@@ -20,6 +20,8 @@ export interface RuleNotCondition {
20
20
  }
21
21
  export type RuleCondition = RuleLeafCondition | RuleAllCondition | RuleAnyCondition | RuleNotCondition;
22
22
  export declare const RuleConditionSchema: z.ZodType<RuleCondition>;
23
+ export type AuditOverrideTier = "error" | "warning" | "info";
24
+ export declare function normalizeSeverityOverride(raw: string): AuditOverrideTier | null;
23
25
  export declare const RuleCaseSchema: z.ZodObject<{
24
26
  when: z.ZodType<RuleCondition, unknown, z.core.$ZodTypeInternals<RuleCondition, unknown>>;
25
27
  level: z.ZodType<"low" | "high" | "info" | "critical" | "medium", unknown, z.core.$ZodTypeInternals<"low" | "high" | "info" | "critical" | "medium", unknown>>;
@@ -167,11 +169,7 @@ export declare const RuleDomainPackSchema: z.ZodObject<{
167
169
  }, z.core.$strict>>;
168
170
  enabled: z.ZodOptional<z.ZodBoolean>;
169
171
  }, z.core.$strict>>;
170
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
171
- error: "error";
172
- info: "info";
173
- warning: "warning";
174
- }>>>;
172
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, AuditOverrideTier>, Record<string, string>>>>;
175
173
  }, z.core.$strict>;
176
174
  export type RuleCase = z.infer<typeof RuleCaseSchema>;
177
175
  export type RuleEntry = z.infer<typeof RuleEntrySchema>;
@@ -279,11 +277,7 @@ export declare const RuleDomainPackInputSchema: z.ZodObject<{
279
277
  }, z.core.$strict>>>;
280
278
  enabled: z.ZodOptional<z.ZodBoolean>;
281
279
  }, z.core.$strict>>>;
282
- severity_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
283
- error: "error";
284
- info: "info";
285
- warning: "warning";
286
- }>>>;
280
+ severity_overrides: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<Record<string, AuditOverrideTier>, Record<string, string>>>>;
287
281
  }, z.core.$strict>;
288
282
  export type RuleDomainPackInput = z.infer<typeof RuleDomainPackInputSchema>;
289
283
  export type { FindingExposure, GainPath, ExposureParty, ExposureVerdict, GainPathViability, } from "./exposure.js";