@wowok/agent-mcp 3.3.1 → 3.3.3

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 (277) hide show
  1. package/dist/chain-semantics/field-capability.js +1 -1
  2. package/dist/chain-semantics/freeze-map.js +1 -1
  3. package/dist/chain-semantics/fund-flow.js +1 -1
  4. package/dist/chain-semantics/guard-verbs.js +1 -1
  5. package/dist/chain-semantics/object-graph.js +1 -1
  6. package/dist/composition/audit.d.ts +5 -0
  7. package/dist/composition/audit.js +1 -1
  8. package/dist/composition/blueprint-view.d.ts +0 -1
  9. package/dist/composition/blueprint-view.js +1 -1
  10. package/dist/composition/compile.d.ts +5 -3
  11. package/dist/composition/compile.js +1 -1
  12. package/dist/composition/inflight.d.ts +32 -4
  13. package/dist/composition/inflight.js +1 -1
  14. package/dist/config/judgment.d.ts +111 -1
  15. package/dist/config/judgment.js +1 -1
  16. package/dist/customer/industry-risks.js +1 -1
  17. package/dist/customer/user-preferences.js +1 -1
  18. package/dist/evaluation/arbitration-game.d.ts +4 -0
  19. package/dist/evaluation/arbitration-game.js +1 -1
  20. package/dist/evaluation/builtins/graph-service.js +1 -1
  21. package/dist/evaluation/builtins/graph-service.spec.js +1 -1
  22. package/dist/evaluation/game-strategy.d.ts +6 -0
  23. package/dist/evaluation/game-strategy.js +1 -1
  24. package/dist/evaluation/node-game.d.ts +4 -0
  25. package/dist/evaluation/node-game.js +1 -1
  26. package/dist/evaluation/value-risk.d.ts +8 -0
  27. package/dist/evaluation/value-risk.js +1 -0
  28. package/dist/experience/realtime-feedback.js +1 -1
  29. package/dist/extensions/business-modules.d.ts +7 -2
  30. package/dist/extensions/business-modules.js +1 -1
  31. package/dist/extensions/industry-audit.spec.js +1 -1
  32. package/dist/extensions/industry-pack.d.ts +3 -2
  33. package/dist/extensions/industry-pack.js +1 -1
  34. package/dist/extensions/modes.js +1 -1
  35. package/dist/graph/onchain/analyze.js +1 -1
  36. package/dist/graph/onchain/analyze.spec.js +1 -1
  37. package/dist/graph/onchain/expand.js +1 -1
  38. package/dist/graph/onchain/exposure.js +1 -1
  39. package/dist/graph/onchain/facet-projection.js +1 -1
  40. package/dist/graph/onchain/facet-projection.spec.js +1 -1
  41. package/dist/graph/onchain/facts.d.ts +20 -0
  42. package/dist/graph/onchain/facts.js +1 -1
  43. package/dist/graph/onchain/facts.spec.js +1 -1
  44. package/dist/graph/onchain/object-held-receipts.d.ts +20 -0
  45. package/dist/graph/onchain/object-held-receipts.js +1 -0
  46. package/dist/graph/onchain/object-held-receipts.spec.d.ts +1 -0
  47. package/dist/graph/onchain/object-held-receipts.spec.js +1 -0
  48. package/dist/graph/onchain/project-relationship.js +1 -1
  49. package/dist/graph/onchain/sdk-batch.d.ts +1 -0
  50. package/dist/graph/onchain/sdk-batch.js +1 -1
  51. package/dist/harness/index.d.ts +1 -0
  52. package/dist/harness/recover.d.ts +2 -1
  53. package/dist/harness/recover.js +1 -1
  54. package/dist/knowledge/acquisition-flywheel.js +1 -1
  55. package/dist/knowledge/allocation-ledger.d.ts +3 -1
  56. package/dist/knowledge/allocation-ledger.js +1 -1
  57. package/dist/knowledge/allocation-puzzle.d.ts +1 -0
  58. package/dist/knowledge/allocation-puzzle.js +1 -1
  59. package/dist/knowledge/allocation-risk.d.ts +1 -1
  60. package/dist/knowledge/allocation-risk.js +1 -1
  61. package/dist/knowledge/arb-fund-facts.d.ts +12 -0
  62. package/dist/knowledge/arb-fund-facts.js +1 -1
  63. package/dist/knowledge/audit-rules.d.ts +4 -3
  64. package/dist/knowledge/audit-rules.js +1 -1
  65. package/dist/knowledge/baselines/judgment-baselines.json +502 -81
  66. package/dist/knowledge/baselines/rules/allocation.json +0 -14
  67. package/dist/knowledge/baselines/rules/graph.json +4 -4
  68. package/dist/knowledge/baselines/rules/plan.json +81 -5
  69. package/dist/knowledge/baselines/rules/reward.json +1 -1
  70. package/dist/knowledge/builtin-templates.d.ts +9 -1
  71. package/dist/knowledge/builtin-templates.js +1 -1
  72. package/dist/knowledge/discount-threshold.js +1 -1
  73. package/dist/knowledge/event-semantics.js +1 -1
  74. package/dist/knowledge/game-scenarios.d.ts +21 -0
  75. package/dist/knowledge/game-scenarios.js +1 -0
  76. package/dist/knowledge/getting-started.js +1 -1
  77. package/dist/knowledge/guard-bindings.js +1 -1
  78. package/dist/knowledge/guard-design-patterns.d.ts +1 -1
  79. package/dist/knowledge/guard-design-patterns.js +1 -1
  80. package/dist/knowledge/guard-field-cognition.js +1 -1
  81. package/dist/knowledge/guard-leg-map.d.ts +5 -0
  82. package/dist/knowledge/guard-leg-map.js +1 -0
  83. package/dist/knowledge/guard-lint.js +1 -1
  84. package/dist/knowledge/guard-puzzle.js +1 -1
  85. package/dist/knowledge/guard-render.js +1 -1
  86. package/dist/knowledge/guard-risk.js +1 -1
  87. package/dist/knowledge/guard-submission-brief.d.ts +5 -0
  88. package/dist/knowledge/guard-submission-brief.js +1 -1
  89. package/dist/knowledge/guard-submission-prompt.d.ts +2 -1
  90. package/dist/knowledge/guard-submission-prompt.js +1 -1
  91. package/dist/knowledge/guard-templates.d.ts +1 -1
  92. package/dist/knowledge/guard-templates.js +1 -1
  93. package/dist/knowledge/guard-translation.js +1 -1
  94. package/dist/knowledge/index.js +1 -1
  95. package/dist/knowledge/industry-generalizer.js +1 -1
  96. package/dist/knowledge/industry-registry.js +1 -1
  97. package/dist/knowledge/industry-strategy.js +1 -1
  98. package/dist/knowledge/jsonrpc-enum.js +1 -1
  99. package/dist/knowledge/onchain-constants.d.ts +4 -2
  100. package/dist/knowledge/onchain-constants.js +1 -1
  101. package/dist/knowledge/order-ledger.d.ts +1 -1
  102. package/dist/knowledge/order-ledger.js +1 -1
  103. package/dist/knowledge/order-puzzle.d.ts +3 -0
  104. package/dist/knowledge/order-risk.d.ts +1 -1
  105. package/dist/knowledge/passport-ledger.d.ts +12 -0
  106. package/dist/knowledge/passport-ledger.js +1 -1
  107. package/dist/knowledge/payment-tracker.js +1 -1
  108. package/dist/knowledge/protocol-facts.d.ts +1 -0
  109. package/dist/knowledge/protocol-facts.js +1 -1
  110. package/dist/knowledge/repository-write-semantics.d.ts +1 -1
  111. package/dist/knowledge/repository-write-semantics.js +1 -1
  112. package/dist/knowledge/reward-ledger.js +1 -1
  113. package/dist/knowledge/reward-puzzle.d.ts +1 -1
  114. package/dist/knowledge/reward-risk.d.ts +1 -1
  115. package/dist/knowledge/scenario-modes.d.ts +2 -2
  116. package/dist/knowledge/scenario-modes.js +1 -1
  117. package/dist/knowledge/scenario-topology.js +1 -1
  118. package/dist/knowledge/service-ledger.d.ts +14 -0
  119. package/dist/knowledge/service-ledger.js +1 -1
  120. package/dist/knowledge/strategy-manuals.js +1 -1
  121. package/dist/knowledge/template-index.d.ts +19 -0
  122. package/dist/knowledge/template-index.js +1 -0
  123. package/dist/knowledge/template-loader.d.ts +36 -0
  124. package/dist/knowledge/template-loader.js +1 -1
  125. package/dist/knowledge/template-registry.js +1 -1
  126. package/dist/knowledge/template-scanner.d.ts +11 -0
  127. package/dist/knowledge/template-scanner.js +1 -1
  128. package/dist/knowledge/tool-constraints.js +1 -1
  129. package/dist/knowledge/workflow-guidance.d.ts +2 -0
  130. package/dist/knowledge/workflow-guidance.js +1 -1
  131. package/dist/monitor/MonitorLoop.js +1 -1
  132. package/dist/participation/allocation-advice.d.ts +8 -1
  133. package/dist/participation/allocation-advice.js +1 -1
  134. package/dist/participation/game-context.d.ts +25 -0
  135. package/dist/participation/game-context.js +1 -0
  136. package/dist/participation/node-action-advisor.d.ts +64 -0
  137. package/dist/participation/node-action-advisor.js +1 -0
  138. package/dist/participation/radar-core.d.ts +1 -0
  139. package/dist/participation/radar-core.js +1 -1
  140. package/dist/persona/defaults.js +1 -1
  141. package/dist/persona/topology-focus.js +1 -1
  142. package/dist/playbooks/service-build/business-puzzle.js +1 -1
  143. package/dist/playbooks/service-build/game-theory.d.ts +4 -1
  144. package/dist/playbooks/service-build/game-theory.js +1 -1
  145. package/dist/playbooks/service-build/machine-panorama.js +1 -1
  146. package/dist/playbooks/service-build/merchant-guide.d.ts +26 -1
  147. package/dist/playbooks/service-build/merchant-guide.js +1 -1
  148. package/dist/playbooks/service-build/migration-planner.d.ts +2 -2
  149. package/dist/playbooks/service-build/migration-planner.js +1 -1
  150. package/dist/playbooks/service-build/object-panorama.d.ts +13 -1
  151. package/dist/playbooks/service-build/object-panorama.js +1 -1
  152. package/dist/playbooks/service-build/participation-radar.js +1 -1
  153. package/dist/playbooks/service-build/pipeline-actions.d.ts +4 -1
  154. package/dist/playbooks/service-build/pipeline-actions.js +1 -1
  155. package/dist/playbooks/service-build/relationship-profile.js +1 -1
  156. package/dist/playbooks/service-build/service-panorama.d.ts +12 -0
  157. package/dist/playbooks/service-build/service-panorama.js +1 -1
  158. package/dist/playbooks/service-build/service-quote.js +1 -1
  159. package/dist/playbooks/service-build/service-quote.spec.js +1 -1
  160. package/dist/relationship/derivation.d.ts +1 -1
  161. package/dist/review/index.js +1 -1
  162. package/dist/review/repository.js +1 -1
  163. package/dist/role/intent.d.ts +23 -0
  164. package/dist/role/intent.js +1 -0
  165. package/dist/safety/confirm-gate.js +1 -1
  166. package/dist/schema/benchmark-migration/index.d.ts +39 -0
  167. package/dist/schema/benchmark-migration/index.js +1 -1
  168. package/dist/schema/call/allocation.d.ts +49 -3
  169. package/dist/schema/call/allocation.js +1 -1
  170. package/dist/schema/call/arbitration.js +1 -1
  171. package/dist/schema/call/base.d.ts +52 -0
  172. package/dist/schema/call/base.js +1 -1
  173. package/dist/schema/call/bridge.d.ts +3 -0
  174. package/dist/schema/call/contact.js +1 -1
  175. package/dist/schema/call/error-codes.d.ts +1 -1
  176. package/dist/schema/call/error-codes.js +1 -1
  177. package/dist/schema/call/guard.js +1 -1
  178. package/dist/schema/call/handler.js +1 -1
  179. package/dist/schema/call/machine.d.ts +10 -0
  180. package/dist/schema/call/machine.js +1 -1
  181. package/dist/schema/call/order.d.ts +2 -0
  182. package/dist/schema/call/order.js +1 -1
  183. package/dist/schema/call/progress.d.ts +6 -3
  184. package/dist/schema/call/progress.js +1 -1
  185. package/dist/schema/call/repository.d.ts +4 -0
  186. package/dist/schema/call/repository.js +1 -1
  187. package/dist/schema/call/reward.d.ts +2 -2
  188. package/dist/schema/call/reward.js +1 -1
  189. package/dist/schema/call/semantic.d.ts +6 -0
  190. package/dist/schema/call/semantic.js +1 -1
  191. package/dist/schema/call/service.d.ts +42 -4
  192. package/dist/schema/call/service.js +1 -1
  193. package/dist/schema/common/index.js +1 -1
  194. package/dist/schema/goal/index.d.ts +54 -0
  195. package/dist/schema/goal/planning.d.ts +86 -0
  196. package/dist/schema/goal/planning.js +1 -1
  197. package/dist/schema/keeper/index.d.ts +2 -0
  198. package/dist/schema/local/index.d.ts +72 -0
  199. package/dist/schema/local/index.js +1 -1
  200. package/dist/schema/messenger/index.d.ts +2 -0
  201. package/dist/schema/operations.d.ts +46 -5
  202. package/dist/schema/operations.js +1 -1
  203. package/dist/schema/persona/index.d.ts +484 -0
  204. package/dist/schema/query/bi.d.ts +4 -0
  205. package/dist/schema/query/bi.js +1 -1
  206. package/dist/schema/query/index.d.ts +84 -60
  207. package/dist/schema/query/index.js +1 -1
  208. package/dist/schema/schema-version.d.ts +1 -1
  209. package/dist/schema/schema-version.js +1 -1
  210. package/dist/schema-query-impl/index.js +1 -1
  211. package/dist/schemas/account_operation.output.json +41 -10
  212. package/dist/schemas/account_operation.schema.json +1 -1
  213. package/dist/schemas/benchmark_migration_operation.output.json +8 -5
  214. package/dist/schemas/benchmark_migration_operation.schema.json +91 -3
  215. package/dist/schemas/bridge_operation.output.json +13 -7
  216. package/dist/schemas/goal_operation.schema.json +94 -0
  217. package/dist/schemas/index.json +1 -1
  218. package/dist/schemas/keeper_operation.output.json +12 -7
  219. package/dist/schemas/local_cache_operation.output.json +34 -7
  220. package/dist/schemas/local_cache_operation.schema.json +16 -1
  221. package/dist/schemas/local_history_operation.output.json +13 -7
  222. package/dist/schemas/local_info_operation.output.json +13 -7
  223. package/dist/schemas/local_info_operation.schema.json +5 -1
  224. package/dist/schemas/local_mark_operation.output.json +13 -7
  225. package/dist/schemas/messenger_operation.output.json +12 -7
  226. package/dist/schemas/monitor_events.output.json +12 -7
  227. package/dist/schemas/monitor_subscription.output.json +12 -7
  228. package/dist/schemas/onchain_events.output.json +67 -18
  229. package/dist/schemas/onchain_events.schema.json +4 -0
  230. package/dist/schemas/onchain_operations.output.json +81 -24
  231. package/dist/schemas/onchain_operations.schema.json +531 -126
  232. package/dist/schemas/onchain_operations_allocation.schema.json +294 -6
  233. package/dist/schemas/onchain_operations_arbitration.schema.json +3 -3
  234. package/dist/schemas/onchain_operations_contact.schema.json +2 -2
  235. package/dist/schemas/onchain_operations_demand.schema.json +3 -3
  236. package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
  237. package/dist/schemas/onchain_operations_guard.schema.json +99 -63
  238. package/dist/schemas/onchain_operations_machine.schema.json +10 -1
  239. package/dist/schemas/onchain_operations_order.schema.json +8 -4
  240. package/dist/schemas/onchain_operations_progress.schema.json +8 -4
  241. package/dist/schemas/onchain_operations_proof.schema.json +1 -1
  242. package/dist/schemas/onchain_operations_repository.schema.json +6 -2
  243. package/dist/schemas/onchain_operations_reward.schema.json +8 -8
  244. package/dist/schemas/onchain_operations_service.schema.json +81 -21
  245. package/dist/schemas/onchain_operations_treasury.schema.json +7 -7
  246. package/dist/schemas/onchain_table_data.output.json +16 -7
  247. package/dist/schemas/persona_operation.output.json +1387 -0
  248. package/dist/schemas/persona_operation.schema.json +219 -0
  249. package/dist/schemas/query_toolkit.output.json +115 -64
  250. package/dist/schemas/query_toolkit.schema.json +8 -0
  251. package/dist/schemas/workflow_operation.schema.json +1 -1
  252. package/dist/tools/handlers/benchmark-migration.js +1 -1
  253. package/dist/tools/handlers/bridge.js +1 -1
  254. package/dist/tools/handlers/config.js +1 -1
  255. package/dist/tools/handlers/dispatch-expectations.js +1 -1
  256. package/dist/tools/handlers/file-export.js +1 -1
  257. package/dist/tools/handlers/industry-pack.d.ts +1 -0
  258. package/dist/tools/handlers/industry-pack.js +1 -1
  259. package/dist/tools/handlers/local.js +1 -1
  260. package/dist/tools/handlers/messenger.js +1 -1
  261. package/dist/tools/handlers/onchain-name-registration.d.ts +11 -0
  262. package/dist/tools/handlers/onchain-name-registration.js +1 -1
  263. package/dist/tools/handlers/onchain.d.ts +28 -0
  264. package/dist/tools/handlers/onchain.js +1 -1
  265. package/dist/tools/handlers/query.js +1 -1
  266. package/dist/tools/handlers/review-chain.d.ts +1 -1
  267. package/dist/tools/handlers/review-chain.js +1 -1
  268. package/dist/tools/handlers/schema-query.js +1 -1
  269. package/dist/tools/handlers/workflow.js +1 -1
  270. package/dist/tools/move-fn-index.gen.js +1 -1
  271. package/dist/tools/registry/agent.js +1 -1
  272. package/dist/tools/registry/local.js +1 -1
  273. package/dist/tools/registry/onchain.js +1 -1
  274. package/dist/tools/registry/query.js +1 -1
  275. package/dist/tools/wip-deploy-assist.js +1 -1
  276. package/dist/tools/wrap.js +1 -1
  277. package/package.json +3 -3
@@ -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{RuleDomainPackSchema,RuleDomainPackInputSchema}from'./rule-engine.js';import{parseFactRef}from'./exposure.js';export const EXPECTED_JUDGMENT_VERSION=0x1;export const JUDGMENT_SECTION_NAMES=['evaluation','game','match','monitor','mode','scorecard','rules'];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)})['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']()})['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'](),'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'](),'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']();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})['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']()})['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'](c=>c['endsWith']('.json'));}catch{return{};}const b={};for(const c of a){const d=c['replace'](/\.json$/,''),e=readFileSync(join(RULE_PACKS_DIR,c),'utf-8');b[d]=RuleDomainPackSchema['parse'](JSON['parse'](e));}return b;}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 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);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(mergeJudgmentValues(FACTORY,layerSlots['industry']?.['fragment']??{}),layerSlots['persona']?.['fragment']??{}));a=mergeJudgmentValues(a,userState?.['doc']??{});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);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(r){throw new Error('patch\x20rejected:\x20'+(r instanceof z['ZodError']?zodMessage(r):r instanceof Error?r['message']:String(r)));}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 s=readFileSync(d,'utf-8');j=!![];const t=JSON['parse'](s);i=JudgmentDocInputSchema['parse'](t);}catch(u){if(j)throw new Error('the\x20current\x20user\x20document\x20is\x20not\x20a\x20valid\x20judgment\x20document\x20('+(u instanceof Error?u['message']:String(u))+')\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);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=[];collectChanges(i??{},h,'',o);if(o['length']===0x0)return{'applied':!![],'user_path':b,'backup_path':null,'version':EXPECTED_JUDGMENT_VERSION,'changed':o,'reload_error':null};const p=JSON['stringify'](k,null,0x2)+'\x0a';mkdirSync(dirname(b),{'recursive':!![]});if(j)copyFileSync(d,c);const q=b+'.tmp';writeFileSync(q,p,'utf-8'),renameSync(q,b);try{userState={'raw':p,'mtimeMs':statSync(b)['mtimeMs'],'doc':k},lastReloadError=null;}catch(v){lastReloadError=v instanceof Error?v['message']:String(v);}return invalidate(),{'applied':!![],'user_path':b,'backup_path':j?c:null,'version':EXPECTED_JUDGMENT_VERSION,'changed':o,'reload_error':lastReloadError};}
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{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)})['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']()})['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'](),'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'](),'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'](c=>c['endsWith']('.json'));}catch{return{};}const b={};for(const c of a){const d=c['replace'](/\.json$/,''),e=readFileSync(join(RULE_PACKS_DIR,c),'utf-8');b[d]=RuleDomainPackSchema['parse'](JSON['parse'](e));}return b;}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(mergeJudgmentValues(FACTORY,layerSlots['industry']?.['fragment']??{}),layerSlots['persona']?.['fragment']??{}));a=mergeJudgmentValues(a,userState?.['doc']??{});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(r){throw new Error('patch\x20rejected:\x20'+(r instanceof z['ZodError']?zodMessage(r):r instanceof Error?r['message']:String(r)));}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 s=readFileSync(d,'utf-8');j=!![];const t=JSON['parse'](s);i=JudgmentDocInputSchema['parse'](t);}catch(u){if(j)throw new Error('the\x20current\x20user\x20document\x20is\x20not\x20a\x20valid\x20judgment\x20document\x20('+(u instanceof Error?u['message']:String(u))+')\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=[];collectChanges(i??{},h,'',o);if(o['length']===0x0)return{'applied':!![],'user_path':b,'backup_path':null,'version':EXPECTED_JUDGMENT_VERSION,'changed':o,'reload_error':null};const p=JSON['stringify'](k,null,0x2)+'\x0a';mkdirSync(dirname(b),{'recursive':!![]});if(j)copyFileSync(d,c);const q=b+'.tmp';writeFileSync(q,p,'utf-8'),renameSync(q,b);try{userState={'raw':p,'mtimeMs':statSync(b)['mtimeMs'],'doc':k},lastReloadError=null;}catch(v){lastReloadError=v instanceof Error?v['message']:String(v);}return invalidate(),{'applied':!![],'user_path':b,'backup_path':j?c:null,'version':EXPECTED_JUDGMENT_VERSION,'changed':o,'reload_error':lastReloadError};}
@@ -1 +1 @@
1
- import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';const hasRefundPath=a=>a['workflow_analysis']?.['has_refund_path']??![],hasArbitrationPath=a=>a['workflow_analysis']?.['has_arbitration_path']??![],hasMilestoneNodes=a=>a['workflow_analysis']?.['has_milestone_nodes']??![],hasMessenger=a=>a['trust_signals']?.['has_messenger']??![],compensationCoversOrder=a=>a['fund_safety']?.['compensation_covers_order']??![],lockDurationSafe=a=>a['fund_safety']?.['lock_duration_safe']??![],userOperableForwards=a=>a['workflow_analysis']?.['user_operable_forwards']??0x0,wipVerified=a=>a['service_basics']['wip_verified']===!![],hasCompensationFund=a=>a['service_basics']['compensation_fund_balance']>0x0n,deadEndCount=a=>a['workflow_analysis']?.['dead_end_nodes']?.['length']??0x0,trustScore=a=>a['trust_signals']?.['trust_score']??0x0,merchantTotalOrders=a=>a['merchant_behavior']?.['total_orders']??0x0,repeatBuyerRate=a=>a['merchant_behavior']?.['repeat_buyer_rate']??0x0,disputeRate=a=>a['merchant_behavior']?.['dispute_rate']??0x1,INDUSTRY_RISK_CHECKS={'freelance':[{'id':'fr_wip_verified','industry':'freelance','dimension':'trust','description':'WIP\x20hash\x20verified\x20(work\x20traceable)','weight':0x1e,'passed':wipVerified,'advice':'⚠️\x20WIP\x20not\x20verified:\x20freelance\x20deliverables\x20cannot\x20be\x20traced.\x20Recommend\x20asking\x20the\x20merchant\x20to\x20provide\x20a\x20WIP\x20hash\x20and\x20write\x20it\x20into\x20WTS.'},{'id':'fr_milestone_nodes','industry':'freelance','dimension':'workflow','description':'Has\x20milestone\x20nodes\x20(phased\x20acceptance)','weight':0x19,'passed':hasMilestoneNodes,'advice':'⚠️\x20No\x20milestone\x20nodes:\x20delivery\x20is\x20completed\x20in\x20one\x20go\x20without\x20intermediate\x20acceptance.\x20Recommend\x20asking\x20the\x20merchant\x20to\x20add\x20phased\x20delivery\x20nodes.'},{'id':'fr_refund_path','industry':'freelance','dimension':'workflow','description':'Has\x20refund\x20path','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20if\x20freelance\x20order\x20delivery\x20is\x20not\x20satisfactory,\x20funds\x20are\x20hard\x20to\x20recover.'},{'id':'fr_response_time','industry':'freelance','dimension':'trust','description':'Messenger\x20configured\x20(communication\x20response\x20guarantee)','weight':0x14,'passed':hasMessenger,'advice':'⚠️\x20Messenger\x20not\x20configured:\x20cannot\x20conduct\x20requirement\x20confirmation\x20and\x20revision\x20communication.'}],'rental':[{'id':'rt_compensation_full','industry':'rental','dimension':'fund','description':'Compensation\x20fully\x20covers\x20order\x20amount','weight':0x1e,'passed':compensationCoversOrder,'advice':'🔴\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20when\x20rental\x20item\x20is\x20damaged.\x20Recommend\x20choosing\x20a\x20merchant\x20with\x20sufficient\x20compensation\x20fund.'},{'id':'rt_lock_duration','industry':'rental','dimension':'fund','description':'Lock\x20duration\x20safe\x20(compensation\x20cannot\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time)','weight':0x19,'passed':lockDurationSafe,'advice':'⚠️\x20Lock\x20duration\x20not\x20safe:\x20merchant\x20may\x20withdraw\x20compensation\x20at\x20any\x20time,\x20deposit\x20safety\x20not\x20guaranteed.'},{'id':'rt_arbitration','industry':'rental','dimension':'workflow','description':'Arbitration\x20configured\x20(damage\x20dispute\x20resolution)','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20channel\x20for\x20rental\x20damage\x20disputes.'},{'id':'rt_user_operable','industry':'rental','dimension':'workflow','description':'Has\x20user-operable\x20path\x20(return/confirm)','weight':0x14,'passed':a=>userOperableForwards(a)>0x0,'advice':'🔴\x20No\x20user-operable\x20path:\x20return\x20process\x20relies\x20entirely\x20on\x20merchant,\x20may\x20be\x20maliciously\x20delayed.'}],'education':[{'id':'ed_refund_path','industry':'education','dimension':'workflow','description':'Has\x20refund\x20path\x20(refund\x20guarantee)','weight':0x1e,'passed':hasRefundPath,'advice':'🔴\x20No\x20refund\x20path:\x20course\x20refund\x20not\x20guaranteed,\x20recommend\x20asking\x20the\x20merchant\x20to\x20configure\x20a\x20refund\x20Allocator.'},{'id':'ed_compensation','industry':'education','dimension':'fund','description':'Has\x20compensation\x20fund','weight':0x19,'passed':hasCompensationFund,'advice':'⚠️\x20No\x20compensation\x20fund:\x20no\x20automatic\x20compensation\x20source\x20when\x20course\x20service\x20quality\x20is\x20not\x20up\x20to\x20standard.'},{'id':'ed_arbitration','industry':'education','dimension':'workflow','description':'Arbitration\x20configured','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20resolution\x20channel\x20for\x20course\x20quality\x20disputes.'},{'id':'ed_long_cycle_ok','industry':'education','dimension':'workflow','description':'Long\x20cycle\x20acceptable\x20(education\x20industry\x20allows\x20long\x20cycles,\x20over\x2090\x20days\x20needs\x20attention)','weight':0x14,'passed':()=>!![],'advice':'ℹ️\x20Long\x20delivery\x20cycles\x20are\x20normal\x20in\x20education,\x20but\x20if\x20the\x20actual\x20cycle\x20exceeds\x2090\x20days,\x20recommend\x20periodically\x20checking\x20learning\x20progress\x20and\x20lesson\x20consumption.'}],'travel':[{'id':'tr_urgent_delivery','industry':'travel','dimension':'workflow','description':'Urgent\x20delivery\x20configuration\x20(needs\x20milestone\x20nodes\x20for\x20phased\x20acceptance)','weight':0x1e,'passed':hasMilestoneNodes,'advice':'⚠️\x20No\x20milestone\x20nodes:\x20travel\x20itinerary\x20has\x20no\x20phased\x20acceptance,\x20recommend\x20setting\x20nodes\x20by\x20itinerary\x20stage.'},{'id':'tr_compensation_full','industry':'travel','dimension':'fund','description':'Compensation\x20fully\x20covers\x20(breach\x20compensation)','weight':0x19,'passed':compensationCoversOrder,'advice':'🔴\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20when\x20itinerary\x20breaches.'},{'id':'tr_refund_path','industry':'travel','dimension':'workflow','description':'Has\x20refund\x20path\x20(itinerary\x20change/cancellation)','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20funds\x20hard\x20to\x20recover\x20when\x20itinerary\x20changes\x20or\x20cancels\x20due\x20to\x20force\x20majeure.'},{'id':'tr_messenger','industry':'travel','dimension':'trust','description':'Messenger\x20configured\x20(emergency\x20communication)','weight':0x14,'passed':hasMessenger,'advice':'⚠️\x20Messenger\x20not\x20configured:\x20cannot\x20immediately\x20contact\x20merchant\x20during\x20travel\x20emergencies.'}],'subscription':[{'id':'sub_no_lockin','industry':'subscription','dimension':'workflow','description':'No\x20long-term\x20lock-in\x20(no\x20dead-end\x20nodes,\x20can\x20exit)','weight':0x1e,'passed':a=>deadEndCount(a)===0x0,'advice':'🔴\x20Dead-end\x20nodes\x20exist:\x20subscription\x20may\x20be\x20locked\x20and\x20unable\x20to\x20exit,\x20auto-renewal\x20trap\x20exists.'},{'id':'sub_refund_path','industry':'subscription','dimension':'workflow','description':'Has\x20refund\x20path\x20(exit\x20mechanism)','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20remaining\x20cycle\x20fees\x20hard\x20to\x20recover\x20after\x20subscription\x20exit.'},{'id':'sub_user_operable','industry':'subscription','dimension':'workflow','description':'Has\x20user-operable\x20path\x20(pause/downgrade/cancel)','weight':0x19,'passed':a=>userOperableForwards(a)>0x0,'advice':'🔴\x20No\x20user-operable\x20path:\x20subscription\x20status\x20entirely\x20controlled\x20by\x20merchant,\x20cannot\x20pause\x20or\x20cancel\x20independently.'},{'id':'sub_compensation_optional','industry':'subscription','dimension':'fund','description':'Compensation\x20optional\x20(not\x20mandatory\x20for\x20subscription\x20industry)','weight':0x14,'passed':()=>!![],'advice':'ℹ️\x20Compensation\x20is\x20not\x20mandatory\x20for\x20subscription\x20industry;\x20having\x20it\x20is\x20better.'}],'retail':[{'id':'ret_wip_verified','industry':'retail','dimension':'trust','description':'WIP\x20verified\x20(authenticity/logistics\x20traceable)','weight':0x19,'passed':wipVerified,'advice':'⚠️\x20WIP\x20not\x20verified:\x20product\x20traceability\x20info\x20missing,\x20recommend\x20confirming\x20authenticity\x20guarantee.'},{'id':'ret_compensation_full','industry':'retail','dimension':'fund','description':'Compensation\x20fully\x20covers','weight':0x19,'passed':compensationCoversOrder,'advice':'⚠️\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20return/exchange\x20disputes.'},{'id':'ret_refund_path','industry':'retail','dimension':'workflow','description':'Has\x20refund\x20path\x20(return/exchange)','weight':0x19,'passed':hasRefundPath,'advice':'🔴\x20No\x20refund\x20path:\x20return/exchange\x20not\x20guaranteed.'},{'id':'ret_arbitration','industry':'retail','dimension':'workflow','description':'Arbitration\x20configured','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20for\x20return/exchange\x20disputes.'}]};function commonNeeds(){return[{'id':'need_arbitration','tier':'common','description':'Arbitration\x20configured\x20(dispute\x20resolution\x20channel)','satisfied':hasArbitrationPath,'advice':'Arbitration\x20not\x20configured:\x20no\x20third-party\x20resolution\x20channel\x20for\x20disputes.'},{'id':'need_refund_path','tier':'common','description':'Has\x20refund\x20path','satisfied':hasRefundPath,'advice':'No\x20refund\x20path:\x20funds\x20hard\x20to\x20recover\x20when\x20delivery\x20fails.'},{'id':'need_user_operable','tier':'common','description':'Has\x20user-operable\x20Forward','satisfied':a=>userOperableForwards(a)>0x0,'advice':'No\x20user-operable\x20steps\x20in\x20workflow,\x20order\x20progress\x20depends\x20entirely\x20on\x20merchant.'},{'id':'need_messenger','tier':'common','description':'Messenger\x20configured','satisfied':hasMessenger,'advice':'Merchant\x20has\x20no\x20Messenger\x20channel,\x20cannot\x20negotiate\x20or\x20conduct\x20after-sales\x20communication.'}];}const INDUSTRY_NEEDS={'freelance':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(work\x20IP\x20traceable)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20IP\x20ownership\x20and\x20originality\x20of\x20work\x20cannot\x20be\x20traced.'},{'id':'need_milestone_nodes','tier':'personalized','description':'Milestone\x20nodes\x20(phased\x20feedback)','satisfied':hasMilestoneNodes,'advice':'No\x20milestone\x20nodes:\x20lack\x20of\x20phased\x20feedback\x20and\x20revision\x20round\x20control.'},{'id':'need_merchant_history','tier':'advanced','description':'Merchant\x20history\x20≥3\x20orders\x20(fulfillment\x20experience)','satisfied':a=>merchantTotalOrders(a)>=0x3,'advice':'Merchant\x20history\x20orders\x20less\x20than\x203:\x20fulfillment\x20experience\x20is\x20limited.'}],'rental':[...commonNeeds(),{'id':'need_lock_duration_safe','tier':'personalized','description':'Lock\x20duration\x20safe\x20(deposit\x20cannot\x20be\x20withdrawn)','satisfied':lockDurationSafe,'advice':'Lock\x20duration\x20not\x20safe:\x20deposit\x20may\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20rental\x20item\x20damage.'},{'id':'need_merchant_history','tier':'advanced','description':'Merchant\x20history\x20≥5\x20orders\x20(rental\x20experience)','satisfied':a=>merchantTotalOrders(a)>=0x5,'advice':'Merchant\x20history\x20orders\x20less\x20than\x205:\x20rental\x20service\x20experience\x20limited.'}],'education':[...commonNeeds(),{'id':'need_has_compensation','tier':'personalized','description':'Has\x20compensation\x20fund\x20(course\x20quality\x20guarantee)','satisfied':hasCompensationFund,'advice':'No\x20compensation\x20fund:\x20no\x20compensation\x20source\x20when\x20course\x20quality\x20is\x20not\x20up\x20to\x20standard.'},{'id':'need_long_cycle_ok','tier':'personalized','description':'Long\x20cycle\x20acceptable','satisfied':()=>!![],'advice':'Long\x20cycles\x20are\x20normal\x20in\x20education;\x20recommend\x20tracking\x20lesson\x20consumption\x20and\x20attendance.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20course\x20reputation\x20may\x20be\x20poor.'}],'travel':[...commonNeeds(),{'id':'need_urgent_delivery','tier':'personalized','description':'Urgent\x20delivery\x20configuration\x20(milestone\x20phasing)','satisfied':hasMilestoneNodes,'advice':'No\x20milestone\x20nodes:\x20itinerary\x20has\x20no\x20phased\x20acceptance,\x20urgent\x20delivery\x20guarantee\x20insufficient.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers\x20(breach\x20compensation)','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20itinerary\x20breach.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20travel\x20service\x20reputation\x20may\x20be\x20poor.'}],'subscription':[...commonNeeds(),{'id':'need_no_lockin','tier':'personalized','description':'No\x20long-term\x20lock-in\x20(no\x20dead-end\x20nodes)','satisfied':a=>deadEndCount(a)===0x0,'advice':'Dead-end\x20nodes\x20exist:\x20subscription\x20may\x20be\x20locked,\x20auto-renewal\x20trap\x20exists.'},{'id':'need_low_dispute','tier':'personalized','description':'Low\x20dispute\x20rate\x20(≤15%,\x20stable\x20content\x20quality)','satisfied':a=>disputeRate(a)<=0.15,'advice':'Dispute\x20rate\x20is\x20high:\x20subscription\x20content\x20quality\x20may\x20be\x20unstable.'},{'id':'need_repeat_rate','tier':'advanced','description':'Repeat\x20buyer\x20rate\x20≥20%\x20(strong\x20subscription\x20renewal\x20willingness)','satisfied':a=>repeatBuyerRate(a)>=0.2,'advice':'Repeat\x20buyer\x20rate\x20below\x2020%:\x20subscription\x20renewal\x20willingness\x20is\x20weak,\x20service\x20may\x20not\x20be\x20worth\x20long-term\x20subscription.'}],'retail':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(authenticity/logistics\x20traceability)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20product\x20authenticity\x20and\x20logistics\x20traceability\x20info\x20missing.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20return/exchange\x20disputes.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20product\x20or\x20service\x20reputation\x20may\x20be\x20poor.'}]};let _registryLookup=null;export function _setRegistryLookup(a){_registryLookup=a;}export function getIndustryRiskChecks(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['risk_checks'])return b['risk_checks'];}return INDUSTRY_RISK_CHECKS[a];}export function getIndustryNeeds(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['needs'])return b['needs'];}return INDUSTRY_NEEDS[a];}export{CUSTOMER_INTELLIGENCE_VERSION};
1
+ import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';const hasRefundPath=a=>a['workflow_analysis']?.['has_refund_path']??![],hasArbitrationPath=a=>a['workflow_analysis']?.['has_arbitration_path']??![],hasMilestoneNodes=a=>a['workflow_analysis']?.['has_milestone_nodes']??![],hasMessenger=a=>a['trust_signals']?.['has_messenger']??![],compensationCoversOrder=a=>a['fund_safety']?.['compensation_covers_order']??![],lockDurationSafe=a=>a['fund_safety']?.['lock_duration_safe']??![],userOperableForwards=a=>a['workflow_analysis']?.['user_operable_forwards']??0x0,wipVerified=a=>a['service_basics']['wip_verified']===!![],hasCompensationFund=a=>a['service_basics']['compensation_fund_balance']>0x0n,deadEndCount=a=>a['workflow_analysis']?.['dead_end_nodes']?.['length']??0x0,trustScore=a=>a['trust_signals']?.['trust_score']??0x0,merchantTotalOrders=a=>a['merchant_behavior']?.['total_orders']??0x0,repeatBuyerRate=a=>a['merchant_behavior']?.['repeat_buyer_rate']??0x0,disputeRate=a=>a['merchant_behavior']?.['dispute_rate']??0x1,INDUSTRY_RISK_CHECKS={'freelance':[{'id':'fr_wip_verified','industry':'freelance','dimension':'trust','description':'WIP\x20hash\x20verified\x20(work\x20traceable)','weight':0x1e,'passed':wipVerified,'advice':'⚠️\x20WIP\x20not\x20verified:\x20freelance\x20deliverables\x20cannot\x20be\x20traced.\x20Recommend\x20asking\x20the\x20merchant\x20to\x20provide\x20a\x20WIP\x20hash\x20and\x20write\x20it\x20into\x20WTS.'},{'id':'fr_milestone_nodes','industry':'freelance','dimension':'workflow','description':'Has\x20milestone\x20nodes\x20(phased\x20acceptance)','weight':0x19,'passed':hasMilestoneNodes,'advice':'⚠️\x20No\x20milestone\x20nodes:\x20delivery\x20is\x20completed\x20in\x20one\x20go\x20without\x20intermediate\x20acceptance.\x20Recommend\x20asking\x20the\x20merchant\x20to\x20add\x20phased\x20delivery\x20nodes.'},{'id':'fr_refund_path','industry':'freelance','dimension':'workflow','description':'Has\x20refund\x20path','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20if\x20freelance\x20order\x20delivery\x20is\x20not\x20satisfactory,\x20funds\x20are\x20hard\x20to\x20recover.'},{'id':'fr_response_time','industry':'freelance','dimension':'trust','description':'Messenger\x20configured\x20(communication\x20response\x20guarantee)','weight':0x14,'passed':hasMessenger,'advice':'⚠️\x20Messenger\x20not\x20configured:\x20cannot\x20conduct\x20requirement\x20confirmation\x20and\x20revision\x20communication.'}],'rental':[{'id':'rt_compensation_full','industry':'rental','dimension':'fund','description':'Compensation\x20fully\x20covers\x20order\x20amount','weight':0x1e,'passed':compensationCoversOrder,'advice':'🔴\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20when\x20rental\x20item\x20is\x20damaged.\x20Recommend\x20choosing\x20a\x20merchant\x20with\x20sufficient\x20compensation\x20fund.'},{'id':'rt_lock_duration','industry':'rental','dimension':'fund','description':'Lock\x20duration\x20safe\x20(compensation\x20cannot\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time)','weight':0x19,'passed':lockDurationSafe,'advice':'⚠️\x20Lock\x20duration\x20not\x20safe:\x20merchant\x20may\x20withdraw\x20compensation\x20at\x20any\x20time,\x20deposit\x20safety\x20not\x20guaranteed.'},{'id':'rt_arbitration','industry':'rental','dimension':'workflow','description':'Arbitration\x20configured\x20(damage\x20dispute\x20resolution)','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20channel\x20for\x20rental\x20damage\x20disputes.'},{'id':'rt_user_operable','industry':'rental','dimension':'workflow','description':'Has\x20user-operable\x20path\x20(return/confirm)','weight':0x14,'passed':a=>userOperableForwards(a)>0x0,'advice':'🔴\x20No\x20user-operable\x20path:\x20return\x20process\x20relies\x20entirely\x20on\x20merchant,\x20may\x20be\x20maliciously\x20delayed.'}],'education':[{'id':'ed_refund_path','industry':'education','dimension':'workflow','description':'Has\x20refund\x20path\x20(refund\x20guarantee)','weight':0x1e,'passed':hasRefundPath,'advice':'🔴\x20No\x20refund\x20path:\x20course\x20refund\x20not\x20guaranteed,\x20recommend\x20asking\x20the\x20merchant\x20to\x20configure\x20a\x20refund\x20Allocator.'},{'id':'ed_compensation','industry':'education','dimension':'fund','description':'Has\x20compensation\x20fund','weight':0x19,'passed':hasCompensationFund,'advice':'⚠️\x20No\x20compensation\x20fund:\x20no\x20automatic\x20compensation\x20source\x20when\x20course\x20service\x20quality\x20is\x20not\x20up\x20to\x20standard.'},{'id':'ed_arbitration','industry':'education','dimension':'workflow','description':'Arbitration\x20configured','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20resolution\x20channel\x20for\x20course\x20quality\x20disputes.'},{'id':'ed_long_cycle_ok','industry':'education','dimension':'workflow','description':'Long\x20cycle\x20acceptable\x20(education\x20industry\x20allows\x20long\x20cycles,\x20over\x2090\x20days\x20needs\x20attention)','weight':0x14,'passed':()=>!![],'advice':'ℹ️\x20Long\x20delivery\x20cycles\x20are\x20normal\x20in\x20education,\x20but\x20if\x20the\x20actual\x20cycle\x20exceeds\x2090\x20days,\x20recommend\x20periodically\x20checking\x20learning\x20progress\x20and\x20lesson\x20consumption.'}],'travel':[{'id':'tr_urgent_delivery','industry':'travel','dimension':'workflow','description':'Urgent\x20delivery\x20configuration\x20(needs\x20milestone\x20nodes\x20for\x20phased\x20acceptance)','weight':0x1e,'passed':hasMilestoneNodes,'advice':'⚠️\x20No\x20milestone\x20nodes:\x20travel\x20itinerary\x20has\x20no\x20phased\x20acceptance,\x20recommend\x20setting\x20nodes\x20by\x20itinerary\x20stage.'},{'id':'tr_compensation_full','industry':'travel','dimension':'fund','description':'Compensation\x20fully\x20covers\x20(breach\x20compensation)','weight':0x19,'passed':compensationCoversOrder,'advice':'🔴\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20when\x20itinerary\x20breaches.'},{'id':'tr_refund_path','industry':'travel','dimension':'workflow','description':'Has\x20refund\x20path\x20(itinerary\x20change/cancellation)','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20funds\x20hard\x20to\x20recover\x20when\x20itinerary\x20changes\x20or\x20cancels\x20due\x20to\x20force\x20majeure.'},{'id':'tr_messenger','industry':'travel','dimension':'trust','description':'Messenger\x20configured\x20(emergency\x20communication)','weight':0x14,'passed':hasMessenger,'advice':'⚠️\x20Messenger\x20not\x20configured:\x20cannot\x20immediately\x20contact\x20merchant\x20during\x20travel\x20emergencies.'}],'subscription':[{'id':'sub_no_lockin','industry':'subscription','dimension':'workflow','description':'No\x20long-term\x20lock-in\x20(no\x20dead-end\x20nodes,\x20can\x20exit)','weight':0x1e,'passed':a=>deadEndCount(a)===0x0,'advice':'🔴\x20Dead-end\x20nodes\x20exist:\x20subscription\x20may\x20be\x20locked\x20and\x20unable\x20to\x20exit,\x20auto-renewal\x20trap\x20exists.'},{'id':'sub_refund_path','industry':'subscription','dimension':'workflow','description':'Has\x20refund\x20path\x20(exit\x20mechanism)','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20remaining\x20cycle\x20fees\x20hard\x20to\x20recover\x20after\x20subscription\x20exit.'},{'id':'sub_user_operable','industry':'subscription','dimension':'workflow','description':'Has\x20user-operable\x20path\x20(pause/downgrade/cancel)','weight':0x19,'passed':a=>userOperableForwards(a)>0x0,'advice':'🔴\x20No\x20user-operable\x20path:\x20subscription\x20status\x20entirely\x20controlled\x20by\x20merchant,\x20cannot\x20pause\x20or\x20cancel\x20independently.'},{'id':'sub_compensation_optional','industry':'subscription','dimension':'fund','description':'Compensation\x20optional\x20(not\x20mandatory\x20for\x20subscription\x20industry)','weight':0x14,'passed':()=>!![],'advice':'ℹ️\x20Compensation\x20is\x20not\x20mandatory\x20for\x20subscription\x20industry;\x20having\x20it\x20is\x20better.'}],'retail':[{'id':'ret_wip_verified','industry':'retail','dimension':'trust','description':'WIP\x20verified\x20(authenticity/logistics\x20traceable)','weight':0x19,'passed':wipVerified,'advice':'⚠️\x20WIP\x20not\x20verified:\x20product\x20traceability\x20info\x20missing,\x20recommend\x20confirming\x20authenticity\x20guarantee.'},{'id':'ret_compensation_full','industry':'retail','dimension':'fund','description':'Compensation\x20fully\x20covers','weight':0x19,'passed':compensationCoversOrder,'advice':'⚠️\x20Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20return/exchange\x20disputes.'},{'id':'ret_refund_path','industry':'retail','dimension':'workflow','description':'Has\x20refund\x20path\x20(return/exchange)','weight':0x19,'passed':hasRefundPath,'advice':'🔴\x20No\x20refund\x20path:\x20return/exchange\x20not\x20guaranteed.'},{'id':'ret_arbitration','industry':'retail','dimension':'workflow','description':'Arbitration\x20configured','weight':0x19,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20for\x20return/exchange\x20disputes.'}],'licensing':[{'id':'lic_wip_verified','industry':'licensing','dimension':'trust','description':'WIP\x20verified\x20(license\x20terms\x20/\x20granted\x20rights\x20hash-anchored)','weight':0x1e,'passed':wipVerified,'advice':'🔴\x20WIP\x20not\x20verified:\x20the\x20licensed\x20rights\x20(territory,\x20term,\x20media,\x20caps)\x20are\x20prose-only\x20and\x20cannot\x20be\x20proven\x20in\x20a\x20dispute.\x20Recommend\x20anchoring\x20the\x20license\x20terms\x20as\x20a\x20WIP\x20hash\x20before\x20the\x20grant.'},{'id':'lic_compensation_full','industry':'licensing','dimension':'fund','description':'Compensation\x20fully\x20covers\x20(reporting/accounting\x20honesty\x20backstop)','weight':0x19,'passed':compensationCoversOrder,'advice':'⚠️\x20Compensation\x20not\x20fully\x20covered:\x20a\x20licensing\x20buyer\x20is\x20trusting\x20the\x20seller\x27s\x20royalty/usage\x20reporting;\x20without\x20coverage\x20there\x20is\x20no\x20recourse\x20if\x20the\x20accounting\x20is\x20dishonest.'},{'id':'lic_refund_path','industry':'licensing','dimension':'workflow','description':'Has\x20refund\x20path\x20(inspection-window\x20exit\x20before\x20the\x20grant\x20is\x20final)','weight':0x19,'passed':hasRefundPath,'advice':'⚠️\x20No\x20refund\x20path:\x20the\x20buyer\x20cannot\x20exit\x20during\x20the\x20inspection\x20window\x20if\x20the\x20delivered\x20license/terms\x20do\x20not\x20match\x20what\x20was\x20advertised.'},{'id':'lic_arbitration','industry':'licensing','dimension':'workflow','description':'Arbitration\x20configured\x20(rights/scope\x20dispute\x20resolution)','weight':0x14,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20channel\x20for\x20scope/territory/royalty\x20disputes.'}],'crowdfunding':[{'id':'cf_wip_verified','industry':'crowdfunding','dimension':'trust','description':'WIP\x20verified\x20(campaign\x20terms\x20/\x20funding\x20goal\x20/\x20deadline\x20hash-anchored)','weight':0x1e,'passed':wipVerified,'advice':'🔴\x20WIP\x20not\x20verified:\x20the\x20funding\x20goal,\x20deadline\x20and\x20reward\x20terms\x20are\x20prose-only\x20and\x20cannot\x20be\x20proven\x20in\x20a\x20dispute.\x20Recommend\x20anchoring\x20the\x20campaign\x20terms\x20as\x20a\x20WIP\x20hash\x20before\x20launch.'},{'id':'cf_refund_path','industry':'crowdfunding','dimension':'fund','description':'Has\x20refund\x20path\x20(per-contributor\x20refund\x20if\x20the\x20threshold\x20is\x20missed\x20at\x20deadline)','weight':0x1e,'passed':hasRefundPath,'advice':'🔴\x20No\x20refund\x20path:\x20on\x20an\x20all-or-nothing\x20campaign\x20a\x20missed\x20threshold\x20MUST\x20refund\x20every\x20contributor\x20automatically.\x20Without\x20a\x20refund\x20leg\x20the\x20escrowed\x20contributions\x20are\x20stranded\x20with\x20the\x20project.\x20(A\x20flexible\x20keep-it-all\x20campaign\x20has\x20no\x20refund\x20by\x20design\x20—\x20verify\x20which\x20model\x20this\x20is\x20before\x20contributing.)'},{'id':'cf_compensation_full','industry':'crowdfunding','dimension':'fund','description':'Compensation\x20fully\x20covers\x20(post-raise\x20delivery\x20backstop)','weight':0x14,'passed':compensationCoversOrder,'advice':'⚠️\x20Compensation\x20not\x20fully\x20covered:\x20after\x20a\x20successful\x20raise\x20the\x20funder\x20is\x20trusting\x20the\x20project\x20to\x20deliver;\x20without\x20coverage\x20there\x20is\x20no\x20recourse\x20for\x20non-delivery.'},{'id':'cf_arbitration','industry':'crowdfunding','dimension':'workflow','description':'Arbitration\x20configured\x20(delivery\x20/\x20non-delivery\x20dispute\x20resolution)','weight':0x14,'passed':hasArbitrationPath,'advice':'⚠️\x20Arbitration\x20not\x20configured:\x20no\x20third-party\x20ruling\x20channel\x20for\x20non-delivery\x20or\x20reward-fulfilment\x20disputes\x20after\x20a\x20successful\x20raise.'}]};function commonNeeds(){return[{'id':'need_arbitration','tier':'common','description':'Arbitration\x20configured\x20(dispute\x20resolution\x20channel)','satisfied':hasArbitrationPath,'advice':'Arbitration\x20not\x20configured:\x20no\x20third-party\x20resolution\x20channel\x20for\x20disputes.'},{'id':'need_refund_path','tier':'common','description':'Has\x20refund\x20path','satisfied':hasRefundPath,'advice':'No\x20refund\x20path:\x20funds\x20hard\x20to\x20recover\x20when\x20delivery\x20fails.'},{'id':'need_user_operable','tier':'common','description':'Has\x20user-operable\x20Forward','satisfied':a=>userOperableForwards(a)>0x0,'advice':'No\x20user-operable\x20steps\x20in\x20workflow,\x20order\x20progress\x20depends\x20entirely\x20on\x20merchant.'},{'id':'need_messenger','tier':'common','description':'Messenger\x20configured','satisfied':hasMessenger,'advice':'Merchant\x20has\x20no\x20Messenger\x20channel,\x20cannot\x20negotiate\x20or\x20conduct\x20after-sales\x20communication.'}];}const INDUSTRY_NEEDS={'freelance':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(work\x20IP\x20traceable)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20IP\x20ownership\x20and\x20originality\x20of\x20work\x20cannot\x20be\x20traced.'},{'id':'need_milestone_nodes','tier':'personalized','description':'Milestone\x20nodes\x20(phased\x20feedback)','satisfied':hasMilestoneNodes,'advice':'No\x20milestone\x20nodes:\x20lack\x20of\x20phased\x20feedback\x20and\x20revision\x20round\x20control.'},{'id':'need_merchant_history','tier':'advanced','description':'Merchant\x20history\x20≥3\x20orders\x20(fulfillment\x20experience)','satisfied':a=>merchantTotalOrders(a)>=0x3,'advice':'Merchant\x20history\x20orders\x20less\x20than\x203:\x20fulfillment\x20experience\x20is\x20limited.'}],'rental':[...commonNeeds(),{'id':'need_lock_duration_safe','tier':'personalized','description':'Lock\x20duration\x20safe\x20(deposit\x20cannot\x20be\x20withdrawn)','satisfied':lockDurationSafe,'advice':'Lock\x20duration\x20not\x20safe:\x20deposit\x20may\x20be\x20withdrawn\x20by\x20merchant\x20at\x20any\x20time.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20rental\x20item\x20damage.'},{'id':'need_merchant_history','tier':'advanced','description':'Merchant\x20history\x20≥5\x20orders\x20(rental\x20experience)','satisfied':a=>merchantTotalOrders(a)>=0x5,'advice':'Merchant\x20history\x20orders\x20less\x20than\x205:\x20rental\x20service\x20experience\x20limited.'}],'education':[...commonNeeds(),{'id':'need_has_compensation','tier':'personalized','description':'Has\x20compensation\x20fund\x20(course\x20quality\x20guarantee)','satisfied':hasCompensationFund,'advice':'No\x20compensation\x20fund:\x20no\x20compensation\x20source\x20when\x20course\x20quality\x20is\x20not\x20up\x20to\x20standard.'},{'id':'need_long_cycle_ok','tier':'personalized','description':'Long\x20cycle\x20acceptable','satisfied':()=>!![],'advice':'Long\x20cycles\x20are\x20normal\x20in\x20education;\x20recommend\x20tracking\x20lesson\x20consumption\x20and\x20attendance.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20course\x20reputation\x20may\x20be\x20poor.'}],'travel':[...commonNeeds(),{'id':'need_urgent_delivery','tier':'personalized','description':'Urgent\x20delivery\x20configuration\x20(milestone\x20phasing)','satisfied':hasMilestoneNodes,'advice':'No\x20milestone\x20nodes:\x20itinerary\x20has\x20no\x20phased\x20acceptance,\x20urgent\x20delivery\x20guarantee\x20insufficient.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers\x20(breach\x20compensation)','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20itinerary\x20breach.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20travel\x20service\x20reputation\x20may\x20be\x20poor.'}],'subscription':[...commonNeeds(),{'id':'need_no_lockin','tier':'personalized','description':'No\x20long-term\x20lock-in\x20(no\x20dead-end\x20nodes)','satisfied':a=>deadEndCount(a)===0x0,'advice':'Dead-end\x20nodes\x20exist:\x20subscription\x20may\x20be\x20locked,\x20auto-renewal\x20trap\x20exists.'},{'id':'need_low_dispute','tier':'personalized','description':'Low\x20dispute\x20rate\x20(≤15%,\x20stable\x20content\x20quality)','satisfied':a=>disputeRate(a)<=0.15,'advice':'Dispute\x20rate\x20is\x20high:\x20subscription\x20content\x20quality\x20may\x20be\x20unstable.'},{'id':'need_repeat_rate','tier':'advanced','description':'Repeat\x20buyer\x20rate\x20≥20%\x20(strong\x20subscription\x20renewal\x20willingness)','satisfied':a=>repeatBuyerRate(a)>=0.2,'advice':'Repeat\x20buyer\x20rate\x20below\x2020%:\x20subscription\x20renewal\x20willingness\x20is\x20weak,\x20service\x20may\x20not\x20be\x20worth\x20long-term\x20subscription.'}],'retail':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(authenticity/logistics\x20traceability)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20product\x20authenticity\x20and\x20logistics\x20traceability\x20info\x20missing.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20insufficient\x20payout\x20for\x20return/exchange\x20disputes.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20product\x20or\x20service\x20reputation\x20may\x20be\x20poor.'}],'licensing':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(license\x20terms\x20/\x20granted\x20rights\x20traceable)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20the\x20scope\x20of\x20the\x20granted\x20rights\x20cannot\x20be\x20traced,\x20so\x20an\x20infringement\x20or\x20over-use\x20claim\x20has\x20no\x20on-chain\x20baseline.'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers\x20(reporting-honesty\x20backstop)','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20no\x20recourse\x20if\x20the\x20seller\x27s\x20royalty/usage\x20reporting\x20turns\x20out\x20to\x20be\x20dishonest.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20licensing\x20depends\x20on\x20long-term\x20accounting\x20honesty,\x20so\x20a\x20weak\x20reputation\x20is\x20material.'}],'crowdfunding':[...commonNeeds(),{'id':'need_wip_verified','tier':'personalized','description':'WIP\x20verified\x20(campaign\x20terms\x20/\x20funding\x20goal\x20/\x20deadline\x20traceable)','satisfied':wipVerified,'advice':'WIP\x20not\x20verified:\x20the\x20funding\x20goal\x20and\x20deadline\x20cannot\x20be\x20traced,\x20so\x20a\x20\x27goal\x20reached\x27\x20or\x20\x27refund\x20due\x27\x20claim\x20has\x20no\x20on-chain\x20baseline.'},{'id':'need_threshold_refund','tier':'personalized','description':'Has\x20threshold-refund\x20path\x20(per-contributor\x20refund\x20on\x20a\x20missed\x20funding\x20goal)','satisfied':hasRefundPath,'advice':'No\x20refund\x20path:\x20on\x20an\x20all-or-nothing\x20campaign\x20the\x20contributions\x20would\x20be\x20stranded\x20with\x20the\x20project\x20if\x20the\x20goal\x20is\x20missed.\x20(A\x20flexible\x20keep-it-all\x20campaign\x20is\x20no-refund\x20by\x20design\x20—\x20confirm\x20the\x20model.)'},{'id':'need_compensation_full','tier':'personalized','description':'Compensation\x20fully\x20covers\x20(post-raise\x20delivery\x20backstop)','satisfied':compensationCoversOrder,'advice':'Compensation\x20not\x20fully\x20covered:\x20no\x20recourse\x20for\x20non-delivery\x20after\x20a\x20successful\x20raise.'},{'id':'need_high_reputation','tier':'advanced','description':'High\x20reputation\x20score\x20(trust_score\x20≥70)','satisfied':a=>trustScore(a)>=0x46,'advice':'Merchant\x20reputation\x20score\x20below\x2070:\x20crowdfunding\x20depends\x20on\x20the\x20project\x20actually\x20delivering\x20after\x20the\x20raise,\x20so\x20a\x20weak\x20reputation\x20is\x20material.'}]};let _registryLookup=null;export function _setRegistryLookup(a){_registryLookup=a;}export function getIndustryRiskChecks(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['risk_checks'])return b['risk_checks'];}return INDUSTRY_RISK_CHECKS[a];}export function getIndustryNeeds(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['needs'])return b['needs'];}return INDUSTRY_NEEDS[a];}export{CUSTOMER_INTELLIGENCE_VERSION};
@@ -1 +1 @@
1
- import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';export const SUPPORTED_INDUSTRIES=['freelance','rental','education','travel','subscription','retail'];const INDUSTRY_TEMPLATES={'freelance':{'max_acceptable_cycle':0x1e,'response_time_expectation':0x4,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'balanced','delivery_speed_priority':'normal','after_sales_expectation':'full'},'rental':{'max_acceptable_cycle':0x7,'response_time_expectation':0x8,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'normal','after_sales_expectation':'full'},'education':{'max_acceptable_cycle':0x5a,'response_time_expectation':0x18,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'flexible','after_sales_expectation':'full'},'travel':{'max_acceptable_cycle':0xe,'response_time_expectation':0x2,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'urgent','after_sales_expectation':'full'},'subscription':{'max_acceptable_cycle':0x1e,'response_time_expectation':0x18,'require_arbitration':![],'require_compensation_fund':![],'risk_appetite':'aggressive','delivery_speed_priority':'normal','after_sales_expectation':'basic'},'retail':{'max_acceptable_cycle':0x7,'response_time_expectation':0x8,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'balanced','delivery_speed_priority':'normal','after_sales_expectation':'full'}},BASE_DEFAULTS={'price_sensitivity':'medium','value_orientation':'balanced','discount_sensitivity':0.3,'delivery_speed_priority':'normal','max_acceptable_cycle':0xe,'response_time_expectation':0x8,'merchant_preference':'neutral','min_order_history':0x3,'bargain_hunting':0.3,'reward_seeking':![],'referral_participation':![],'communication_style':'friendly','transparency_demand':0.5,'after_sales_expectation':'basic','risk_appetite':'balanced','min_trust_score':0x32,'require_arbitration':!![],'require_compensation_fund':!![],'preferred_industries':[],'preferred_tokens':['0x2::wow::WOW'],'preferred_merchants':[]};export function getDefaultPreferences(a){if(!a||!INDUSTRY_TEMPLATES[a])return{...BASE_DEFAULTS};const b=INDUSTRY_TEMPLATES[a];return{...BASE_DEFAULTS,'max_acceptable_cycle':b['max_acceptable_cycle'],'response_time_expectation':b['response_time_expectation'],'require_arbitration':b['require_arbitration'],'require_compensation_fund':b['require_compensation_fund'],'risk_appetite':b['risk_appetite'],'delivery_speed_priority':b['delivery_speed_priority'],'after_sales_expectation':b['after_sales_expectation']};}let _registryLookup=null;export function _setRegistryLookup(a){_registryLookup=a;}export function getIndustryTemplate(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['preference_template'])return{...b['preference_template']};}return{...INDUSTRY_TEMPLATES[a]};}export function mergePreferences(a,b){return{...a,...b};}export function validatePreferences(a){const b=[];return a['budget_range']&&a['budget_range']['min']>a['budget_range']['max']&&b['push']('budget_range.min\x20>\x20budget_range.max'),(a['discount_sensitivity']<0x0||a['discount_sensitivity']>0x1)&&b['push']('discount_sensitivity\x20must\x20be\x20in\x20[0,1]'),(a['bargain_hunting']<0x0||a['bargain_hunting']>0x1)&&b['push']('bargain_hunting\x20must\x20be\x20in\x20[0,1]'),(a['transparency_demand']<0x0||a['transparency_demand']>0x1)&&b['push']('transparency_demand\x20must\x20be\x20in\x20[0,1]'),(a['min_trust_score']<0x0||a['min_trust_score']>0x64)&&b['push']('min_trust_score\x20must\x20be\x20in\x20[0,100]'),a['max_acceptable_cycle']<0x0&&b['push']('max_acceptable_cycle\x20must\x20be\x20≥\x200'),a['response_time_expectation']<0x0&&b['push']('response_time_expectation\x20must\x20be\x20≥\x200'),b;}export{CUSTOMER_INTELLIGENCE_VERSION};
1
+ import{CUSTOMER_INTELLIGENCE_VERSION}from'./types.js';export const SUPPORTED_INDUSTRIES=['freelance','rental','education','travel','subscription','retail','licensing','crowdfunding'];const INDUSTRY_TEMPLATES={'freelance':{'max_acceptable_cycle':0x1e,'response_time_expectation':0x4,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'balanced','delivery_speed_priority':'normal','after_sales_expectation':'full'},'rental':{'max_acceptable_cycle':0x7,'response_time_expectation':0x8,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'normal','after_sales_expectation':'full'},'education':{'max_acceptable_cycle':0x5a,'response_time_expectation':0x18,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'flexible','after_sales_expectation':'full'},'travel':{'max_acceptable_cycle':0xe,'response_time_expectation':0x2,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'urgent','after_sales_expectation':'full'},'subscription':{'max_acceptable_cycle':0x1e,'response_time_expectation':0x18,'require_arbitration':![],'require_compensation_fund':![],'risk_appetite':'aggressive','delivery_speed_priority':'normal','after_sales_expectation':'basic'},'retail':{'max_acceptable_cycle':0x7,'response_time_expectation':0x8,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'balanced','delivery_speed_priority':'normal','after_sales_expectation':'full'},'licensing':{'max_acceptable_cycle':0x3c,'response_time_expectation':0x18,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'flexible','after_sales_expectation':'full'},'crowdfunding':{'max_acceptable_cycle':0x2d,'response_time_expectation':0x18,'require_arbitration':!![],'require_compensation_fund':!![],'risk_appetite':'conservative','delivery_speed_priority':'flexible','after_sales_expectation':'full'}},BASE_DEFAULTS={'price_sensitivity':'medium','value_orientation':'balanced','discount_sensitivity':0.3,'delivery_speed_priority':'normal','max_acceptable_cycle':0xe,'response_time_expectation':0x8,'merchant_preference':'neutral','min_order_history':0x3,'bargain_hunting':0.3,'reward_seeking':![],'referral_participation':![],'communication_style':'friendly','transparency_demand':0.5,'after_sales_expectation':'basic','risk_appetite':'balanced','min_trust_score':0x32,'require_arbitration':!![],'require_compensation_fund':!![],'preferred_industries':[],'preferred_tokens':['0x2::wow::WOW'],'preferred_merchants':[]};export function getDefaultPreferences(a){if(!a||!INDUSTRY_TEMPLATES[a])return{...BASE_DEFAULTS};const b=INDUSTRY_TEMPLATES[a];return{...BASE_DEFAULTS,'max_acceptable_cycle':b['max_acceptable_cycle'],'response_time_expectation':b['response_time_expectation'],'require_arbitration':b['require_arbitration'],'require_compensation_fund':b['require_compensation_fund'],'risk_appetite':b['risk_appetite'],'delivery_speed_priority':b['delivery_speed_priority'],'after_sales_expectation':b['after_sales_expectation']};}let _registryLookup=null;export function _setRegistryLookup(a){_registryLookup=a;}export function getIndustryTemplate(a){if(_registryLookup){const b=_registryLookup(a);if(b?.['preference_template'])return{...b['preference_template']};}return{...INDUSTRY_TEMPLATES[a]};}export function mergePreferences(a,b){return{...a,...b};}export function validatePreferences(a){const b=[];return a['budget_range']&&a['budget_range']['min']>a['budget_range']['max']&&b['push']('budget_range.min\x20>\x20budget_range.max'),(a['discount_sensitivity']<0x0||a['discount_sensitivity']>0x1)&&b['push']('discount_sensitivity\x20must\x20be\x20in\x20[0,1]'),(a['bargain_hunting']<0x0||a['bargain_hunting']>0x1)&&b['push']('bargain_hunting\x20must\x20be\x20in\x20[0,1]'),(a['transparency_demand']<0x0||a['transparency_demand']>0x1)&&b['push']('transparency_demand\x20must\x20be\x20in\x20[0,1]'),(a['min_trust_score']<0x0||a['min_trust_score']>0x64)&&b['push']('min_trust_score\x20must\x20be\x20in\x20[0,100]'),a['max_acceptable_cycle']<0x0&&b['push']('max_acceptable_cycle\x20must\x20be\x20≥\x200'),a['response_time_expectation']<0x0&&b['push']('response_time_expectation\x20must\x20be\x20≥\x200'),b;}export{CUSTOMER_INTELLIGENCE_VERSION};
@@ -1,11 +1,14 @@
1
1
  import type { ArbStatus } from "../knowledge/arbitration-ledger.js";
2
2
  import { type RiskAppetite } from "./game-strategy.js";
3
+ import type { ValueRiskAssessment } from "./value-risk.js";
3
4
  export type ArbGamePerspective = "customer" | "merchant" | "arbitrator";
4
5
  export interface ArbGameAction {
5
6
  action: string;
6
7
  favorability: number;
7
8
  gain_score: number;
8
9
  risk_score: number;
10
+ gain_effects: string[];
11
+ risk_effects: string[];
9
12
  is_optimal: boolean;
10
13
  payoff_note: string;
11
14
  risk: "low" | "medium" | "high";
@@ -21,3 +24,4 @@ export interface ArbPersonaDrive {
21
24
  requirements?: string[];
22
25
  }
23
26
  export declare function evaluateArbGame(status: ArbStatus, perspective: ArbGamePerspective, drive?: ArbPersonaDrive): ArbGameAdvice;
27
+ export declare function moveAssessment(a: ArbGameAction): ValueRiskAssessment;
@@ -1 +1 @@
1
- import{getJudgmentDoc}from'../config/judgment.js';import{appetiteMultiplier}from'./game-strategy.js';function arbParams(){return getJudgmentDoc()['game']['arb'];}const ARB_MOVE_SEMANTICS={'Principal_confirming':[{'action':'principal\x20confirm','perspective':'customer','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20the\x20proposition\x20to\x20move\x20to\x20arbitrator\x20confirmation','base_risk':'low'},{'action':'proposition\x20update','perspective':'customer','gain':[],'risk':['case_extended'],'payoff':'modify\x20the\x20proposition\x20while\x20in\x20principal-confirming\x20status\x20(reachable\x20only\x20after\x20an\x20arbitrator\x20reset\x20—\x20filing\x20itself\x20lands\x20directly\x20in\x20arbitrator-confirming\x20with\x20the\x20proposition\x20final)','base_risk':'medium'}],'Arbitrator_confirming':[{'action':'confirm','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20to\x20open\x20voting','base_risk':'low'},{'action':'reset','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'reset\x20back\x20to\x20principal\x20confirmation\x20(extends\x20the\x20case)','base_risk':'high'}],'Voting':[{'action':'vote','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'vote\x20before\x20the\x20deadline','base_risk':'low'},{'action':'deadline\x20change','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'adjust\x20or\x20clear\x20the\x20voting\x20window\x20(prolongs\x20or\x20reopens\x20the\x20case)','base_risk':'medium'}],'Arbitrated':[{'action':'objection','perspective':'customer','gain':['reversal_chance'],'risk':[],'payoff':'object\x20the\x20ruling\x20(only\x20window\x20to\x20overturn)','base_risk':'medium'},{'action':'accept','perspective':'customer','gain':['case_closed'],'risk':['adverse_ruling'],'payoff':'accept\x20and\x20await\x20compensation','base_risk':'low'},{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20the\x20fee\x20balance\x2030\x20days\x20after\x20an\x20uncontested\x20ruling\x20(closes\x20the\x20case)','base_risk':'low'}],'Objectionable':[{'action':'reset','perspective':'arbitrator','gain':['case_advanced'],'risk':['case_extended'],'payoff':'reset\x20to\x20re-review;\x20the\x20ONLY\x20exit\x20—\x20the\x20fee\x20stays\x20escrowed\x20until\x20the\x20principal\x20re-confirms\x20and\x20a\x20new\x20ruling\x20goes\x20unchallenged\x20(protocol\x20141)','base_risk':'medium'}],'Finished':[{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20fees\x20/\x20compensation','base_risk':'low'}],'Withdrawn':[{'action':'done','perspective':'all','gain':['case_closed'],'risk':[],'payoff':'case\x20closed','base_risk':'low'}]};function dedupe(a){return Array['from'](new Set(a));}function resolveArbInterests(a,b){const c=arbParams(),d=c['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1},e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}function scoreMove(a,b,c){const {scoring:d}=arbParams(),e=resolveArbInterests(b,c),f=a['gain']['filter'](k=>e['prefer']['includes'](k)),g=a['risk']['filter'](k=>e['avoid']['includes'](k)),h=f['length']*d['per_gain'],i=Math['round'](g['length']*d['per_risk']*e['sensitivity']),j=Math['max'](0x0,Math['min'](0x64,d['base']+h-i));return{'favorability':j,'gain_score':h,'risk_score':i};}export function evaluateArbGame(a,b,c){const d=ARB_MOVE_SEMANTICS[a]??[],e=d['filter'](g=>g['perspective']==='all'||g['perspective']===b),f=e['map'](g=>{const h=scoreMove(g,b,c);return{'action':g['action'],'favorability':h['favorability'],'gain_score':h['gain_score'],'risk_score':h['risk_score'],'is_optimal':![],'payoff_note':g['payoff'],'risk':g['base_risk']};})['sort']((g,h)=>h['favorability']-g['favorability']);return f['length']>0x0&&(f[0x0]['is_optimal']=!![]),{'status':a,'perspective':b,'actions':f,'summary':f['length']===0x0?'No\x20recommended\x20moves\x20for\x20'+b+'\x20in\x20status\x20\x27'+a+'\x27':'Optimal\x20for\x20'+b+'\x20in\x20\x27'+a+'\x27:\x20\x27'+f[0x0]['action']+'\x27\x20('+f[0x0]['payoff_note']+')'};}
1
+ import{getJudgmentDoc}from'../config/judgment.js';import{appetiteMultiplier}from'./game-strategy.js';function arbParams(){return getJudgmentDoc()['game']['arb'];}const ARB_MOVE_SEMANTICS={'Principal_confirming':[{'action':'principal\x20confirm','perspective':'customer','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20the\x20proposition\x20to\x20move\x20to\x20arbitrator\x20confirmation','base_risk':'low'},{'action':'proposition\x20update','perspective':'customer','gain':[],'risk':['case_extended'],'payoff':'modify\x20the\x20proposition\x20while\x20in\x20principal-confirming\x20status\x20(reachable\x20only\x20after\x20an\x20arbitrator\x20reset\x20—\x20filing\x20itself\x20lands\x20directly\x20in\x20arbitrator-confirming\x20with\x20the\x20proposition\x20final)','base_risk':'medium'}],'Arbitrator_confirming':[{'action':'confirm','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'confirm\x20to\x20open\x20voting','base_risk':'low'},{'action':'reset','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'reset\x20back\x20to\x20principal\x20confirmation\x20(extends\x20the\x20case)','base_risk':'high'}],'Voting':[{'action':'vote','perspective':'arbitrator','gain':['case_advanced'],'risk':[],'payoff':'vote\x20before\x20the\x20deadline','base_risk':'low'},{'action':'deadline\x20change','perspective':'arbitrator','gain':[],'risk':['case_extended'],'payoff':'adjust\x20or\x20clear\x20the\x20voting\x20window\x20(prolongs\x20or\x20reopens\x20the\x20case)','base_risk':'medium'}],'Arbitrated':[{'action':'objection','perspective':'customer','gain':['reversal_chance'],'risk':[],'payoff':'object\x20the\x20ruling\x20(only\x20window\x20to\x20overturn)','base_risk':'medium'},{'action':'accept','perspective':'customer','gain':['case_closed'],'risk':['adverse_ruling'],'payoff':'accept\x20and\x20await\x20compensation','base_risk':'low'},{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20the\x20fee\x20balance\x2030\x20days\x20after\x20an\x20uncontested\x20ruling\x20(closes\x20the\x20case)','base_risk':'low'}],'Objectionable':[{'action':'reset','perspective':'arbitrator','gain':['case_advanced'],'risk':['case_extended'],'payoff':'reset\x20to\x20re-review;\x20the\x20ONLY\x20exit\x20—\x20the\x20fee\x20stays\x20escrowed\x20until\x20the\x20principal\x20re-confirms\x20and\x20a\x20new\x20ruling\x20goes\x20unchallenged\x20(protocol\x20141)','base_risk':'medium'}],'Finished':[{'action':'arb_withdraw','perspective':'all','gain':['fees_received','case_closed'],'risk':[],'payoff':'withdraw\x20fees\x20/\x20compensation','base_risk':'low'}],'Withdrawn':[{'action':'done','perspective':'all','gain':['case_closed'],'risk':[],'payoff':'case\x20closed','base_risk':'low'}]};function dedupe(a){return Array['from'](new Set(a));}function resolveArbInterests(a,b){const c=arbParams(),d=c['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1},e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}function scoreMove(a,b,c){const {scoring:d}=arbParams(),e=resolveArbInterests(b,c),f=a['gain']['filter'](k=>e['prefer']['includes'](k)),g=a['risk']['filter'](k=>e['avoid']['includes'](k)),h=f['length']*d['per_gain'],i=Math['round'](g['length']*d['per_risk']*e['sensitivity']),j=Math['max'](0x0,Math['min'](0x64,d['base']+h-i));return{'favorability':j,'gain_score':h,'risk_score':i,'gain_effects':f,'risk_effects':g};}export function evaluateArbGame(a,b,c){const d=ARB_MOVE_SEMANTICS[a]??[],e=d['filter'](g=>g['perspective']==='all'||g['perspective']===b),f=e['map'](g=>{const h=scoreMove(g,b,c);return{'action':g['action'],'favorability':h['favorability'],'gain_score':h['gain_score'],'risk_score':h['risk_score'],'gain_effects':h['gain_effects'],'risk_effects':h['risk_effects'],'is_optimal':![],'payoff_note':g['payoff'],'risk':g['base_risk']};})['sort']((g,h)=>h['favorability']-g['favorability']);return f['length']>0x0&&(f[0x0]['is_optimal']=!![]),{'status':a,'perspective':b,'actions':f,'summary':f['length']===0x0?'No\x20recommended\x20moves\x20for\x20'+b+'\x20in\x20status\x20\x27'+a+'\x27':'Optimal\x20for\x20'+b+'\x20in\x20\x27'+a+'\x27:\x20\x27'+f[0x0]['action']+'\x27\x20('+f[0x0]['payoff_note']+')'};}export function moveAssessment(b){return{'consistency':b['favorability'],'net':b['favorability'],'gains':[...b['gain_effects']],'risks':[...b['risk_effects']]};}
@@ -1 +1 @@
1
- import{COVERAGE_VOCABULARY}from'../../graph/onchain/facts.js';import{getEvaluationEngine}from'../engine.js';import{defaultWeight,dimensionLabel,gradeWord,severityDeduction}from'../standards.js';export const GRAPH_TRUST_EVALUATION='graph_service_trust';export const GRAPH_RISK_EVALUATION='graph_service_risk';export const GRAPH_RULE_INPUT_FACTS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};const dsGraphFacts={'id':'ds_graph_facts','description':'Unpack\x20the\x20graph-projected\x20evaluation\x20facts\x20(Task\x2013\x20projection)\x20into\x20the\x20rule\x20context','evaluation_ids':[GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION],'extract':a=>{const b=a['entities']['graph_facts'],c={'target':b['target'],'completeness':b['completeness']};for(const d of b['facts'])c[d['key']]=d;return c;}};function inputFact(a,b){const c=GRAPH_RULE_INPUT_FACTS[b];return c?a['facts'][c[0x0]]:undefined;}function factOf(a,b){return a['facts']['find'](c=>c['key']===b);}function trustArbitrationRule(){const a='trust_arbitration';return{'id':a,'description':'Arbitration\x20trust\x20dimension\x20(binding\x20material\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??[];if(d['length']===0x0)return{'score':0x0,'weight':defaultWeight(a),'reason':'No\x20arbitration\x20binding\x20configured\x20(verified\x20absence)\x20—\x20'+c['evidence'],'mismatched':['arbitration_binding']};let e=0x0;const f=[],g=[];if(d['every'](h=>h['votingGuards']>0x0))e+=0x8,f['push']('arbitrator\x20roster\x20configured');else g['push']('no\x20arbitrator\x20roster');if(d['every'](h=>BigInt(h['fee']||'0')>0x0n))e+=0x6,f['push']('arbitration\x20fee\x20funded');else g['push']('arbitration\x20fee\x20unfunded');if(!d['some'](h=>h['paused']))e+=0x6,f['push']('arbitration\x20active');else g['push']('arbitration\x20paused');return{'score':Math['round'](e/0x14*0x64),'weight':defaultWeight(a),'reason':'Arbitration\x20'+e+'/20\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function trustReviewsRule(){const a='trust_reviews';return{'id':a,'description':'Review\x20reputation\x20dimension\x20(registrar\x20votes\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??{'total':0x0,'like':0x0,'dislike':0x0,'favor':0x0};if(c['state']==='empty'||d['total']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20reputation\x20signal\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=d['like']/d['total'],f=Math['min'](0x23,Math['round'](e*0x19)+Math['min'](0xa,d['favor']));return{'score':Math['round'](f/0x23*0x64),'weight':defaultWeight(a),'reason':'Reviews\x20'+f+'/35\x20(like\x20rate\x20'+Math['round'](e*0x64)+'%)\x20—\x20'+c['evidence'],'matched':['vote\x20window\x20read\x20without\x20truncation'],'mismatched':d['like']<d['dislike']?['dislike\x20majority']:[]};}};}function trustFulfillmentRule(){const a='trust_fulfillment';return{'id':a,'description':'Fulfillment\x20dimension\x20(windowed\x20order\x20record\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d||d['observed']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20fulfillment\x20record\x20yet\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=Math['min'](0xa,Math['floor'](d['observed']/0x5)),f=d['completed']+d['inProgress'],g=f>0x0?Math['round'](d['completed']/f*0xa):0x5,h=Math['min'](0x14,e+g);return{'score':Math['round'](h/0x14*0x64),'weight':defaultWeight(a),'reason':'Fulfillment\x20'+h+'/20\x20(recent\x20orders:\x20'+d['observed']+')\x20—\x20'+c['evidence'],'matched':['completion\x20'+d['completed']+'/'+(f||d['observed'])+'\x20resolved'],'mismatched':d['completed']===0x0?['no\x20completed\x20order\x20in\x20window']:[]};}};}function trustFundSafetyRule(){const a='trust_fund_safety';return{'id':a,'description':'Fund\x20safety\x20dimension\x20(compensation\x20fund\x20vs\x20windowed\x20exposure\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=GRAPH_RULE_INPUT_FACTS[a],d=b['facts'][c[0x0]],e=b['facts'][c[0x1]];if(!d||!e||d['state']==='gap'||e['state']==='gap')return null;const f=BigInt(d['value']?.['fund']??'0'),g=[];let h;const i=e['value'],j=BigInt(i?.['windowedAmount']??'0');if(e['state']==='empty'||j===0x0n){h=f>0x0n?0xf:0x0;if(f===0x0n)g['push']('no\x20compensation\x20fund');}else{if(i['coverageMet'])h=0xf;else{const k=BigInt(i['neededCeiling']||'1');if(f>=j){const l=Number(f*0x3e8n/k)/0x3e8;h=0xa+Math['round']((l-0x1/0x3)/(0x2/0x3)*0x5);}else h=Math['round'](Number(f*0x3e8n/j)/0x3e8*0xa);g['push']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling');}}return{'score':Math['round'](Math['max'](0x0,h)/0xf*0x64),'weight':defaultWeight(a),'reason':'Fund\x20safety\x20'+Math['max'](0x0,h)+'/15\x20—\x20'+d['evidence']+'\x20'+e['evidence'],'matched':g['length']===0x0?['exposure\x20covered']:[],'mismatched':g};}};}function trustTransparencyRule(){const a='trust_transparency';return{'id':a,'description':'Transparency\x20dimension\x20(snapshot\x20self-description\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20transparency\x20profile\x20material\x20—\x20'+c['evidence']};let e=0x0;const f=[],g=[];if(d['published'])e+=0x4,f['push']('service\x20published');else g['push']('service\x20unpublished');if(d['description']!=='')e+=0x3,f['push']('description\x20present');else g['push']('empty\x20description');if(d['location']!=='')e+=0x3,f['push']('location\x20present');else g['push']('empty\x20location');return{'score':Math['round'](e/0xa*0x64),'weight':defaultWeight(a),'reason':'Transparency\x20'+e+'/10\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function riskRule(a){const b=dimensionLabel(a);return{'id':a,'description':b+'\x20structural\x20risk\x20dimension\x20(analyzer\x20findings\x20reused\x20by\x20reference)','dimension':b,get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_RISK_EVALUATION],'evaluate':c=>{const d=inputFact(c,a);if(!d||d['state']==='gap')return null;const e=d['value']??{'findings':[],'where':[]},f=e['findings'],g=new Map(f['map']((j,k)=>[j['id'],e['where'][k]??j['id']]));if(d['state']==='empty')return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20'+b+'\x20material\x20configured\x20(verified\x20absence)\x20—\x20'+d['evidence']};const h=f['reduce']((j,k)=>j+severityDeduction(k['severity']),0x0),i=Math['max'](0x0,0x64-h);return{'score':i,'weight':defaultWeight(a),'reason':f['length']>0x0?f['length']+'\x20structural\x20finding(s):\x20'+f['map'](j=>'['+j['severity']+']\x20'+(g['get'](j['id'])??j['title'])+':\x20'+j['title'])['join'](';\x20')+'\x20—\x20'+d['evidence']:'No\x20structural\x20risk\x20fired\x20—\x20'+d['evidence'],'matched':f['length']===0x0?['no\x20structural\x20findings']:[],'mismatched':[...new Set(f['map'](j=>j['title']))],'finding_refs':f['map'](j=>({'id':j['id'],'title':j['title'],'severity':j['severity']})),'red_flag':f['some'](j=>j['severity']==='critical')};}};}export function registerGraphServiceEvaluations(a=getEvaluationEngine()){a['registerDataSource'](dsGraphFacts);const b=[trustArbitrationRule(),trustReviewsRule(),trustFulfillmentRule(),trustFundSafetyRule(),trustTransparencyRule(),riskRule('risk_workflow'),riskRule('risk_fund'),riskRule('risk_trust'),riskRule('risk_behavior')];for(const c of b)a['registerRule'](c);}function collectUnverified(a){const b=new Map(a['facts']['map'](d=>[d['key'],d['state']])),c=[];for(const [d,e]of Object['entries'](GRAPH_RULE_INPUT_FACTS)){if(e['some'](f=>b['get'](f)==='gap'))c['push'](d);}return c;}function summarize(a,b,c,d){const e=['Service\x20'+b+'\x20'+a['total']+'/100\x20(grade:\x20'+gradeWord(b,a['total'])+')'],f=[...a['breakdown']]['sort']((g,h)=>g['score']-h['score'])[0x0];if(f){const g=(GRAPH_RULE_INPUT_FACTS[f['rule_id']]??[])['map'](h=>factOf(c,h)?.['evidence'])['filter'](Boolean)['join']('\x20');if(g)e['push']('weakest\x20'+dimensionLabel(f['rule_id'])+'\x20'+f['score']+'/100\x20—\x20'+g);}if(d['length']>0x0)e['push']('unverifiable\x20(excluded\x20from\x20aggregation):\x20'+d['map'](dimensionLabel)['join'](',\x20'));if(a['blocked'])e['push']('blocked:\x20'+(a['red_flags'][0x0]??'red\x20flag'));return e['join']('\x20—\x20');}export async function evaluateGraphServiceFacts(a,b){const c=getEvaluationEngine(),d={'graph_facts':a},e=await c['evaluate'](GRAPH_TRUST_EVALUATION,d,b),f=await c['evaluate'](GRAPH_RISK_EVALUATION,d,b),g=collectUnverified(a);return e['unverified']=g,f['unverified']=g,e['summary']=summarize(e,'trust',a,g),f['summary']=summarize(f,'risk',a,g),{'target':a['target'],'trust':e,'risk':f,'completeness':a['completeness'],'coverage':a['slots'],'unverified':g,'vocabulary':COVERAGE_VOCABULARY};}
1
+ import{COVERAGE_VOCABULARY}from'../../graph/onchain/facts.js';import{getEvaluationEngine}from'../engine.js';import{defaultWeight,dimensionLabel,gradeWord,severityDeduction}from'../standards.js';export const GRAPH_TRUST_EVALUATION='graph_service_trust';export const GRAPH_RISK_EVALUATION='graph_service_risk';export const GRAPH_RULE_INPUT_FACTS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};const dsGraphFacts={'id':'ds_graph_facts','description':'Unpack\x20the\x20graph-projected\x20evaluation\x20facts\x20(Task\x2013\x20projection)\x20into\x20the\x20rule\x20context','evaluation_ids':[GRAPH_TRUST_EVALUATION,GRAPH_RISK_EVALUATION],'extract':a=>{const b=a['entities']['graph_facts'],c={'target':b['target'],'completeness':b['completeness']};for(const d of b['facts'])c[d['key']]=d;return c;}};function inputFact(a,b){const c=GRAPH_RULE_INPUT_FACTS[b];return c?a['facts'][c[0x0]]:undefined;}function factOf(a,b){return a['facts']['find'](c=>c['key']===b);}function trustArbitrationRule(){const a='trust_arbitration';return{'id':a,'description':'Arbitration\x20trust\x20dimension\x20(binding\x20material\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??[];if(d['length']===0x0)return{'score':0x0,'weight':defaultWeight(a),'reason':'No\x20arbitration\x20binding\x20configured\x20(verified\x20absence)\x20—\x20'+c['evidence'],'mismatched':['arbitration_binding']};let e=0x0;const f=[],g=[];if(d['every'](h=>h['votingGuards']>0x0))e+=0x8,f['push']('arbitrator\x20roster\x20configured');else g['push']('no\x20arbitrator\x20roster');if(d['every'](h=>BigInt(h['fee']||'0')>0x0n))e+=0x6,f['push']('arbitration\x20fee\x20funded');else g['push']('arbitration\x20fee\x20unfunded');if(!d['some'](h=>h['paused']))e+=0x6,f['push']('arbitration\x20active');else g['push']('arbitration\x20paused');return{'score':Math['round'](e/0x14*0x64),'weight':defaultWeight(a),'reason':'Arbitration\x20'+e+'/20\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function trustReviewsRule(){const a='trust_reviews';return{'id':a,'description':'Review\x20reputation\x20dimension\x20(registrar\x20votes\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value']??{'total':0x0,'like':0x0,'dislike':0x0,'favor':0x0};if(c['state']==='empty'||d['total']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20reputation\x20signal\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=d['like']/d['total'],f=Math['min'](0x23,Math['round'](e*0x19)+Math['min'](0xa,d['favor']));return{'score':Math['round'](f/0x23*0x64),'weight':defaultWeight(a),'reason':'Reviews\x20'+f+'/35\x20(like\x20rate\x20'+Math['round'](e*0x64)+'%)\x20—\x20'+c['evidence'],'matched':['vote\x20window\x20read\x20without\x20truncation'],'mismatched':d['like']<d['dislike']?['dislike\x20majority']:[]};}};}function trustFulfillmentRule(){const a='trust_fulfillment';return{'id':a,'description':'Fulfillment\x20dimension\x20(windowed\x20order\x20record\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d||d['observed']===0x0)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20fulfillment\x20record\x20yet\x20(verified\x20empty\x20window)\x20—\x20'+c['evidence']};const e=Math['min'](0xa,Math['floor'](d['observed']/0x5)),f=d['completed']+d['inProgress'],g=f>0x0?Math['round'](d['completed']/f*0xa):0x5,h=Math['min'](0x14,e+g);return{'score':Math['round'](h/0x14*0x64),'weight':defaultWeight(a),'reason':'Fulfillment\x20'+h+'/20\x20(recent\x20orders:\x20'+d['observed']+')\x20—\x20'+c['evidence'],'matched':['completion\x20'+d['completed']+'/'+(f||d['observed'])+'\x20resolved'],'mismatched':d['completed']===0x0?['no\x20completed\x20order\x20in\x20window']:[]};}};}function trustFundSafetyRule(){const a='trust_fund_safety';return{'id':a,'description':'Fund\x20safety\x20dimension\x20(compensation\x20fund\x20vs\x20windowed\x20exposure\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=GRAPH_RULE_INPUT_FACTS[a],d=b['facts'][c[0x0]],e=b['facts'][c[0x1]];if(!d||!e||d['state']==='gap'||e['state']==='gap')return null;const f=BigInt(d['value']?.['fund']??'0'),g=[];let h;const i=e['value'],j=BigInt(i?.['largestAmount']??i?.['windowedAmount']??'0');if(e['state']==='empty'||j===0x0n){h=f>0x0n?0xf:0x0;if(f===0x0n)g['push']('no\x20compensation\x20fund');}else{if(i['coverageMet'])h=0xf;else{const k=BigInt(i['neededCeiling']||'1');if(f>=j){const l=Number(f*0x3e8n/k)/0x3e8;h=0xa+Math['round']((l-0x1/0x3)/(0x2/0x3)*0x5);}else h=Math['round'](Number(f*0x3e8n/j)/0x3e8*0xa);g['push']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20largest-order\x20exposure\x20ceiling');}}return{'score':Math['round'](Math['max'](0x0,h)/0xf*0x64),'weight':defaultWeight(a),'reason':'Fund\x20safety\x20'+Math['max'](0x0,h)+'/15\x20—\x20'+d['evidence']+'\x20'+e['evidence'],'matched':g['length']===0x0?['exposure\x20covered']:[],'mismatched':g};}};}function trustTransparencyRule(){const a='trust_transparency';return{'id':a,'description':'Transparency\x20dimension\x20(snapshot\x20self-description\x20from\x20the\x20graph\x20facts)',get 'dimension'(){return dimensionLabel(a);},get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_TRUST_EVALUATION],'evaluate':b=>{const c=inputFact(b,a);if(!c||c['state']==='gap')return null;const d=c['value'];if(c['state']==='empty'||!d)return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20transparency\x20profile\x20material\x20—\x20'+c['evidence']};let e=0x0;const f=[],g=[];if(d['published'])e+=0x4,f['push']('service\x20published');else g['push']('service\x20unpublished');if(d['description']!=='')e+=0x3,f['push']('description\x20present');else g['push']('empty\x20description');if(d['location']!=='')e+=0x3,f['push']('location\x20present');else g['push']('empty\x20location');return{'score':Math['round'](e/0xa*0x64),'weight':defaultWeight(a),'reason':'Transparency\x20'+e+'/10\x20—\x20'+c['evidence'],'matched':f,'mismatched':g};}};}function riskRule(a){const b=dimensionLabel(a);return{'id':a,'description':b+'\x20structural\x20risk\x20dimension\x20(analyzer\x20findings\x20reused\x20by\x20reference)','dimension':b,get 'weight'(){return defaultWeight(a);},'evaluation_ids':[GRAPH_RISK_EVALUATION],'evaluate':c=>{const d=inputFact(c,a);if(!d||d['state']==='gap')return null;const e=d['value']??{'findings':[],'where':[]},f=e['findings'],g=new Map(f['map']((j,k)=>[j['id'],e['where'][k]??j['id']]));if(d['state']==='empty')return{'score':0x32,'weight':defaultWeight(a),'reason':'No\x20'+b+'\x20material\x20configured\x20(verified\x20absence)\x20—\x20'+d['evidence']};const h=f['reduce']((j,k)=>j+severityDeduction(k['severity']),0x0),i=Math['max'](0x0,0x64-h);return{'score':i,'weight':defaultWeight(a),'reason':f['length']>0x0?f['length']+'\x20structural\x20finding(s):\x20'+f['map'](j=>'['+j['severity']+']\x20'+(g['get'](j['id'])??j['title'])+':\x20'+j['title'])['join'](';\x20')+'\x20—\x20'+d['evidence']:'No\x20structural\x20risk\x20fired\x20—\x20'+d['evidence'],'matched':f['length']===0x0?['no\x20structural\x20findings']:[],'mismatched':[...new Set(f['map'](j=>j['title']))],'finding_refs':f['map'](j=>({'id':j['id'],'title':j['title'],'severity':j['severity']})),'red_flag':f['some'](j=>j['severity']==='critical')};}};}export function registerGraphServiceEvaluations(a=getEvaluationEngine()){a['registerDataSource'](dsGraphFacts);const b=[trustArbitrationRule(),trustReviewsRule(),trustFulfillmentRule(),trustFundSafetyRule(),trustTransparencyRule(),riskRule('risk_workflow'),riskRule('risk_fund'),riskRule('risk_trust'),riskRule('risk_behavior')];for(const c of b)a['registerRule'](c);}function collectUnverified(a){const b=new Map(a['facts']['map'](d=>[d['key'],d['state']])),c=[];for(const [d,e]of Object['entries'](GRAPH_RULE_INPUT_FACTS)){if(e['some'](f=>b['get'](f)==='gap'))c['push'](d);}return c;}function summarize(a,b,c,d){const e=['Service\x20'+b+'\x20'+a['total']+'/100\x20(grade:\x20'+gradeWord(b,a['total'])+')'],f=[...a['breakdown']]['sort']((g,h)=>g['score']-h['score'])[0x0];if(f){const g=(GRAPH_RULE_INPUT_FACTS[f['rule_id']]??[])['map'](h=>factOf(c,h)?.['evidence'])['filter'](Boolean)['join']('\x20');if(g)e['push']('weakest\x20'+dimensionLabel(f['rule_id'])+'\x20'+f['score']+'/100\x20—\x20'+g);}if(d['length']>0x0)e['push']('unverifiable\x20(excluded\x20from\x20aggregation):\x20'+d['map'](dimensionLabel)['join'](',\x20'));if(a['blocked'])e['push']('blocked:\x20'+(a['red_flags'][0x0]??'red\x20flag'));return e['join']('\x20—\x20');}export async function evaluateGraphServiceFacts(a,b){const c=getEvaluationEngine(),d={'graph_facts':a},e=await c['evaluate'](GRAPH_TRUST_EVALUATION,d,b),f=await c['evaluate'](GRAPH_RISK_EVALUATION,d,b),g=collectUnverified(a);return e['unverified']=g,f['unverified']=g,e['summary']=summarize(e,'trust',a,g),f['summary']=summarize(f,'risk',a,g),{'target':a['target'],'trust':e,'risk':f,'completeness':a['completeness'],'coverage':a['slots'],'unverified':g,'vocabulary':COVERAGE_VOCABULARY};}
@@ -1 +1 @@
1
- import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../../graph/onchain/dataplane.js';import{expandTopology}from'../../graph/onchain/expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'../../graph/onchain/fixtures.js';import{buildViewport}from'../../graph/onchain/viewport.js';import{runAnalyzers}from'../../graph/onchain/analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{projectEvaluationFacts as a37a}from'../../graph/onchain/facts.js';import{evaluateGraphServiceFacts,GRAPH_RULE_INPUT_FACTS,registerGraphServiceEvaluations}from'./graph-service.js';async function evalState(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=a37a(e,b,runAnalyzers(e));return{'projected':f,'r':await evaluateGraphServiceFacts(f)};}const scoreOf=(a,b,c)=>a[b]['breakdown']['find'](d=>d['rule_id']===c);describe('graph\x20service\x20evaluation\x20—\x20fully\x20hooked\x20shop\x20(TR-14.1)',()=>{it('scores\x20all\x20nine\x20dimensions\x20from\x20material\x20facts\x20with\x20no\x20default-low\x20deductions',async()=>{const {r:a}=await evalState(fullServiceState(),FULL['svc']);expect(a['unverified'])['toEqual']([]),expect(a['completeness'])['toBe'](0x64);const c=scoreOf(a,'trust','trust_arbitration');expect(c['score'])['toBe'](0x64),expect(c['matched'])['toEqual'](expect['arrayContaining'](['arbitrator\x20roster\x20configured','arbitration\x20fee\x20funded','arbitration\x20active'])),expect(c['reason'])['toContain']('Arbitration\x2020/20'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fulfillment')['score'])['toBe'](0x19);const d=scoreOf(a,'trust','trust_fund_safety');expect(d['score'])['toBe'](0x0),expect(d['mismatched'])['toContain']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20exposure\x20ceiling'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x64),expect(a['trust']['total'])['toBe'](0x31);const e=scoreOf(a,'risk','risk_fund');expect(e['score'])['toBeLessThan'](0x64),expect(e['mismatched'])['toContain']('Payout\x20exposure:\x20compensation\x20fund\x20is\x20below\x20the\x203x\x20ceiling\x20of\x20windowed\x20order\x20amounts'),expect(e['mismatched']?.['some'](h=>h['startsWith']('R2:')))['toBe'](![]),expect(e['finding_refs']?.['map'](h=>h['id']))['toContain']('R2:'+FULL['svc']['toLowerCase']());const f=scoreOf(a,'risk','risk_trust');expect(f['score'])['toBeLessThan'](0x64),expect(f['mismatched']?.['some'](h=>h['startsWith']('R1:')))['toBe'](![]),expect(f['mismatched']?.['length'])['toBeGreaterThan'](0x0),expect(f['finding_refs']?.['some'](h=>h['id']['startsWith']('R1:')))['toBe'](!![]);for(const h of[...a['trust']['breakdown'],...a['risk']['breakdown']]){for(const i of h['mismatched']??[])expect(i)['not']['toContain']('::node::');}expect(scoreOf(a,'risk','risk_workflow')['score'])['toBe'](0x64),expect(scoreOf(a,'risk','risk_behavior')['score'])['toBe'](0x64);for(const j of[...a['trust']['breakdown'],...a['risk']['breakdown']]){const k=(j['reason']??'')['toLowerCase']();expect(k)['not']['toContain']('no\x20data'),expect(k)['not']['toContain']('default\x20low');}const g=a['trust']['trace']['filter'](l=>l['kind']==='rule'&&l['detail']['startsWith']('score='));expect(g['map'](l=>l['id']))['toEqual'](expect['arrayContaining'](Object['keys'](GRAPH_RULE_INPUT_FACTS)['filter'](l=>l['startsWith']('trust_'))));}),it('keeps\x20the\x20injection\x20+\x20requirement\x20mechanisms\x20working',async()=>{const {projected:a}=await evalState(fullServiceState(),FULL['svc']),b=await evaluateGraphServiceFacts(a,{'overrides':{'rules':{'trust_arbitration':{'weight':0x28}}}});expect(b['trust']['total'])['toBe'](0x3a);const c=await evaluateGraphServiceFacts(a,{'requirements':[{'rule_id':'trust_fund_safety','condition':'require'}]});expect(c['trust']['blocked'])['toBe'](!![]),expect(c['trust']['red_flags']['length'])['toBeGreaterThan'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20configured-empty\x20shell\x20(TR-14.1)',()=>{it('scores\x20verified\x20absence\x20as\x20a\x20configured\x20fact\x20and\x20excludes\x20only\x20the\x20gap\x20dimension',async()=>{const {r:a}=await evalState(gapServiceState(),GAP['svc']),b=scoreOf(a,'trust','trust_arbitration');expect(b['score'])['toBe'](0x0),expect(b['reason'])['toContain']('verified\x20absence'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x32),expect(a['unverified'])['toEqual'](['risk_workflow']),expect(scoreOf(a,'risk','risk_workflow'))['toBeUndefined'](),expect(a['risk']['unverified'])['toEqual'](['risk_workflow']),expect(a['trust']['unverified'])['toEqual'](['risk_workflow']);const c=a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']==='risk_workflow');expect(c?.['detail'])['toContain']('not\x20applicable'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fund_safety')['score'])['toBe'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20truncated\x20order\x20window\x20(TR-14.1)',()=>{it('excludes\x20the\x20unverifiable\x20dimensions\x20and\x20renormalizes\x20the\x20weighted\x20total',async()=>{const {r:a}=await evalState(truncatedServiceState(),FULL['svc']);expect(a['unverified'])['toEqual'](expect['arrayContaining'](['trust_fulfillment','trust_fund_safety','risk_fund','risk_behavior'])),expect(scoreOf(a,'trust','trust_fulfillment'))['toBeUndefined'](),expect(scoreOf(a,'trust','trust_fund_safety'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_fund'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_behavior'))['toBeUndefined'](),expect(a['trust']['total'])['toBe'](0x44);for(const b of['trust_fulfillment','trust_fund_safety']){expect(a['trust']['trace']['find'](c=>c['kind']==='rule'&&c['id']===b)?.['detail'])['toContain']('not\x20applicable');}for(const c of['risk_fund','risk_behavior']){expect(a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']===c)?.['detail'])['toContain']('not\x20applicable');}});}),describe('graph\x20service\x20evaluation\x20—\x20scoring\x20report\x20(TR-14.2)',()=>{it('renders\x20a\x20per-dimension\x20report\x20with\x20score,\x20weight,\x20state,\x20confidence\x20and\x20evidence',async()=>{const {projected:a,r:c}=await evalState(fullServiceState(),FULL['svc']),d=new Map(a['facts']['map'](g=>[g['key'],g])),e=[];for(const g of['trust','risk']){const h=c[g];e['push'](g['toUpperCase']()+'\x20'+h['total']+'/100\x20('+h['level']+')\x20—\x20'+h['summary']);for(const i of h['breakdown']){const j=GRAPH_RULE_INPUT_FACTS[i['rule_id']]??[],k=j['map'](o=>o+':state='+(d['get'](o)?.['state']??'missing')),l=j['map'](o=>d['get'](o)?.['provenance']['confidence']??'missing'),n=j['map'](o=>d['get'](o)?.['evidence']??'missing')['join']('\x20');e['push'](i['rule_id']+':\x20score='+i['score']+'\x20weight='+i['weight']+'\x20'+k['join'](',')+'\x20confidence='+[...new Set(l)]['join']('+')+'\x20evidence=\x22'+n+'\x22');}}expect(e)['toHaveLength'](0xb);const f=e['filter'](o=>o['includes']('score='));expect(f)['toHaveLength'](0x9);for(const o of f){expect(o)['toMatch'](/weight=\d+/),expect(o)['toContain']('state=present'),expect(o)['toMatch'](/confidence=(exact|bounded|windowed|derived)/);const p=o['match'](/evidence="(.*)"/);expect(p,o)['not']['toBeNull'](),expect(p[0x1]['length'],o)['toBeGreaterThan'](0x0);}expect(c['trust']['summary'])['toContain']('weakest\x20Fund\x20safety'),expect(c['trust']['summary'])['not']['toContain']('trust_fund_safety'),expect(c['trust']['summary'])['toMatch'](/grade: (strong|fair|weak)/),expect(c['trust']['summary'])['toContain']('Compensation\x20fund');});});
1
+ import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'../../graph/onchain/dataplane.js';import{expandTopology}from'../../graph/onchain/expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'../../graph/onchain/fixtures.js';import{buildViewport}from'../../graph/onchain/viewport.js';import{runAnalyzers}from'../../graph/onchain/analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'../../graph/onchain/strategy.js';import{projectEvaluationFacts as a37a}from'../../graph/onchain/facts.js';import{evaluateGraphServiceFacts,GRAPH_RULE_INPUT_FACTS,registerGraphServiceEvaluations}from'./graph-service.js';async function evalState(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=a37a(e,b,runAnalyzers(e));return{'projected':f,'r':await evaluateGraphServiceFacts(f)};}const scoreOf=(a,b,c)=>a[b]['breakdown']['find'](d=>d['rule_id']===c);describe('graph\x20service\x20evaluation\x20—\x20fully\x20hooked\x20shop\x20(TR-14.1)',()=>{it('scores\x20all\x20nine\x20dimensions\x20from\x20material\x20facts\x20with\x20no\x20default-low\x20deductions',async()=>{const {r:a}=await evalState(fullServiceState(),FULL['svc']);expect(a['unverified'])['toEqual']([]),expect(a['completeness'])['toBe'](0x64);const c=scoreOf(a,'trust','trust_arbitration');expect(c['score'])['toBe'](0x64),expect(c['matched'])['toEqual'](expect['arrayContaining'](['arbitrator\x20roster\x20configured','arbitration\x20fee\x20funded','arbitration\x20active'])),expect(c['reason'])['toContain']('Arbitration\x2020/20'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fulfillment')['score'])['toBe'](0x19);const d=scoreOf(a,'trust','trust_fund_safety');expect(d['score'])['toBe'](0x0),expect(d['mismatched'])['toContain']('compensation\x20fund\x20below\x20the\x20statutory\x203x\x20largest-order\x20exposure\x20ceiling'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x64),expect(a['trust']['total'])['toBe'](0x31);const e=scoreOf(a,'risk','risk_fund');expect(e['score'])['toBeLessThan'](0x64),expect(e['mismatched'])['toContain']('Payout\x20exposure:\x20compensation\x20fund\x20cannot\x20cover\x20a\x20maximum-multiple\x20award\x20on\x20the\x20largest\x20windowed\x20order'),expect(e['mismatched']?.['some'](h=>h['startsWith']('R2:')))['toBe'](![]),expect(e['finding_refs']?.['map'](h=>h['id']))['toContain']('R2:'+FULL['svc']['toLowerCase']());const f=scoreOf(a,'risk','risk_trust');expect(f['score'])['toBeLessThan'](0x64),expect(f['mismatched']?.['some'](h=>h['startsWith']('R1:')))['toBe'](![]),expect(f['mismatched']?.['length'])['toBeGreaterThan'](0x0),expect(f['finding_refs']?.['some'](h=>h['id']['startsWith']('R1:')))['toBe'](!![]);for(const h of[...a['trust']['breakdown'],...a['risk']['breakdown']]){for(const i of h['mismatched']??[])expect(i)['not']['toContain']('::node::');}expect(scoreOf(a,'risk','risk_workflow')['score'])['toBe'](0x64),expect(scoreOf(a,'risk','risk_behavior')['score'])['toBe'](0x64);for(const j of[...a['trust']['breakdown'],...a['risk']['breakdown']]){const k=(j['reason']??'')['toLowerCase']();expect(k)['not']['toContain']('no\x20data'),expect(k)['not']['toContain']('default\x20low');}const g=a['trust']['trace']['filter'](l=>l['kind']==='rule'&&l['detail']['startsWith']('score='));expect(g['map'](l=>l['id']))['toEqual'](expect['arrayContaining'](Object['keys'](GRAPH_RULE_INPUT_FACTS)['filter'](l=>l['startsWith']('trust_'))));}),it('keeps\x20the\x20injection\x20+\x20requirement\x20mechanisms\x20working',async()=>{const {projected:a}=await evalState(fullServiceState(),FULL['svc']),b=await evaluateGraphServiceFacts(a,{'overrides':{'rules':{'trust_arbitration':{'weight':0x28}}}});expect(b['trust']['total'])['toBe'](0x3a);const c=await evaluateGraphServiceFacts(a,{'requirements':[{'rule_id':'trust_fund_safety','condition':'require'}]});expect(c['trust']['blocked'])['toBe'](!![]),expect(c['trust']['red_flags']['length'])['toBeGreaterThan'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20configured-empty\x20shell\x20(TR-14.1)',()=>{it('scores\x20verified\x20absence\x20as\x20a\x20configured\x20fact\x20and\x20excludes\x20only\x20the\x20gap\x20dimension',async()=>{const {r:a}=await evalState(gapServiceState(),GAP['svc']),b=scoreOf(a,'trust','trust_arbitration');expect(b['score'])['toBe'](0x0),expect(b['reason'])['toContain']('verified\x20absence'),expect(scoreOf(a,'trust','trust_reviews')['score'])['toBe'](0x32),expect(a['unverified'])['toEqual'](['risk_workflow']),expect(scoreOf(a,'risk','risk_workflow'))['toBeUndefined'](),expect(a['risk']['unverified'])['toEqual'](['risk_workflow']),expect(a['trust']['unverified'])['toEqual'](['risk_workflow']);const c=a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']==='risk_workflow');expect(c?.['detail'])['toContain']('not\x20applicable'),expect(scoreOf(a,'trust','trust_transparency')['score'])['toBe'](0x28),expect(scoreOf(a,'trust','trust_fund_safety')['score'])['toBe'](0x0);});}),describe('graph\x20service\x20evaluation\x20—\x20truncated\x20order\x20window\x20(TR-14.1)',()=>{it('excludes\x20the\x20unverifiable\x20dimensions\x20and\x20renormalizes\x20the\x20weighted\x20total',async()=>{const {r:a}=await evalState(truncatedServiceState(),FULL['svc']);expect(a['unverified'])['toEqual'](expect['arrayContaining'](['trust_fulfillment','trust_fund_safety','risk_fund','risk_behavior'])),expect(scoreOf(a,'trust','trust_fulfillment'))['toBeUndefined'](),expect(scoreOf(a,'trust','trust_fund_safety'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_fund'))['toBeUndefined'](),expect(scoreOf(a,'risk','risk_behavior'))['toBeUndefined'](),expect(a['trust']['total'])['toBe'](0x44);for(const b of['trust_fulfillment','trust_fund_safety']){expect(a['trust']['trace']['find'](c=>c['kind']==='rule'&&c['id']===b)?.['detail'])['toContain']('not\x20applicable');}for(const c of['risk_fund','risk_behavior']){expect(a['risk']['trace']['find'](d=>d['kind']==='rule'&&d['id']===c)?.['detail'])['toContain']('not\x20applicable');}});}),describe('graph\x20service\x20evaluation\x20—\x20scoring\x20report\x20(TR-14.2)',()=>{it('renders\x20a\x20per-dimension\x20report\x20with\x20score,\x20weight,\x20state,\x20confidence\x20and\x20evidence',async()=>{const {projected:a,r:c}=await evalState(fullServiceState(),FULL['svc']),d=new Map(a['facts']['map'](g=>[g['key'],g])),e=[];for(const g of['trust','risk']){const h=c[g];e['push'](g['toUpperCase']()+'\x20'+h['total']+'/100\x20('+h['level']+')\x20—\x20'+h['summary']);for(const i of h['breakdown']){const j=GRAPH_RULE_INPUT_FACTS[i['rule_id']]??[],k=j['map'](o=>o+':state='+(d['get'](o)?.['state']??'missing')),l=j['map'](o=>d['get'](o)?.['provenance']['confidence']??'missing'),n=j['map'](o=>d['get'](o)?.['evidence']??'missing')['join']('\x20');e['push'](i['rule_id']+':\x20score='+i['score']+'\x20weight='+i['weight']+'\x20'+k['join'](',')+'\x20confidence='+[...new Set(l)]['join']('+')+'\x20evidence=\x22'+n+'\x22');}}expect(e)['toHaveLength'](0xb);const f=e['filter'](o=>o['includes']('score='));expect(f)['toHaveLength'](0x9);for(const o of f){expect(o)['toMatch'](/weight=\d+/),expect(o)['toContain']('state=present'),expect(o)['toMatch'](/confidence=(exact|bounded|windowed|derived)/);const p=o['match'](/evidence="(.*)"/);expect(p,o)['not']['toBeNull'](),expect(p[0x1]['length'],o)['toBeGreaterThan'](0x0);}expect(c['trust']['summary'])['toContain']('weakest\x20Fund\x20safety'),expect(c['trust']['summary'])['not']['toContain']('trust_fund_safety'),expect(c['trust']['summary'])['toMatch'](/grade: (strong|fair|weak)/),expect(c['trust']['summary'])['toContain']('Compensation\x20fund');});});
@@ -1,4 +1,5 @@
1
1
  import type { CommercialRole } from "../role/types.js";
2
+ import type { ValueRiskAssessment } from "./value-risk.js";
2
3
  export type OperationOutcome = "completion" | "refund" | "advance";
3
4
  export type RiskAppetite = "conservative" | "balanced" | "aggressive";
4
5
  export interface RoleInterests {
@@ -25,3 +26,8 @@ export interface OutcomeEvaluation {
25
26
  }
26
27
  export declare function evaluateOutcome(outcome: OperationOutcome, role: CommercialRole, drive?: PersonaDrive): OutcomeEvaluation;
27
28
  export declare function consistencyScore(outcome: OperationOutcome, role: CommercialRole): number;
29
+ export interface OutcomeAssessmentOptions {
30
+ costOfDelay?: string;
31
+ stake?: string;
32
+ }
33
+ export declare function outcomeAssessment(e: OutcomeEvaluation, opts?: OutcomeAssessmentOptions): ValueRiskAssessment;
@@ -1 +1 @@
1
- import{getJudgmentDoc}from'../config/judgment.js';function gameParams(){return getJudgmentDoc()['game'];}export function outcomeSemantics(){return gameParams()['outcome_semantics'];}export function roleInterests(){return gameParams()['role_interests'];}export function classifyOutcome(a){if(a?.['startsWith']('Completion'))return'completion';if(a?.['startsWith']('Refund'))return'refund';return'advance';}export function appetiteMultiplier(a){const b=gameParams()['appetite_multipliers'];if(a==='conservative')return b['conservative'];if(a==='aggressive')return b['aggressive'];return b['balanced'];}export function interestsOf(a){return gameParams()['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1};}function dedupe(a){return Array['from'](new Set(a));}export function resolveInterests(a,b){const c=gameParams(),d=interestsOf(a),e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}export function evaluateOutcome(a,b,c){const d=gameParams(),e=d['outcome_semantics'][a]??[],f=resolveInterests(b,c),g=f['sensitivity'],h=[],i=[];for(const m of e){if(f['prefer']['includes'](m))h['push'](m);if(f['avoid']['includes'](m))i['push'](m);}const j=h['length']*d['scoring']['per_gain'],k=Math['round'](i['length']*d['scoring']['per_risk']*g),l=Math['max'](0x0,Math['min'](0x64,d['scoring']['base']+j-k));return{'gain_score':j,'risk_score':k,'net_score':l,'gains':h,'risks':i};}export function consistencyScore(a,b){return evaluateOutcome(a,b)['net_score'];}
1
+ import{getJudgmentDoc}from'../config/judgment.js';function gameParams(){return getJudgmentDoc()['game'];}export function outcomeSemantics(){return gameParams()['outcome_semantics'];}export function roleInterests(){return gameParams()['role_interests'];}export function classifyOutcome(a){if(a?.['startsWith']('Completion'))return'completion';if(a?.['startsWith']('Refund'))return'refund';return'advance';}export function appetiteMultiplier(a){const b=gameParams()['appetite_multipliers'];if(a==='conservative')return b['conservative'];if(a==='aggressive')return b['aggressive'];return b['balanced'];}export function interestsOf(a){return gameParams()['role_interests'][a]??{'prefer':[],'avoid':[],'sensitivity':0x1};}function dedupe(a){return Array['from'](new Set(a));}export function resolveInterests(a,b){const c=gameParams(),d=interestsOf(a),e=d['sensitivity']*appetiteMultiplier(b?.['risk_appetite']),f=[...d['prefer']],g=[...d['avoid']];for(const h of b?.['requirements']??[]){const i=h['toLowerCase'](),j=new RegExp(c['forbid_pattern'],'i')['test'](i);for(const k of c['keyword_rules']){if(k['when_forbidden']!==j)continue;k['keywords']['some'](l=>i['includes'](l['toLowerCase']()))&&(k['anchor']==='prefer'?f:g)['push'](k['effect']);}}return{'prefer':dedupe(f),'avoid':dedupe(g),'sensitivity':e};}export function evaluateOutcome(a,b,c){const d=gameParams(),e=d['outcome_semantics'][a]??[],f=resolveInterests(b,c),g=f['sensitivity'],h=[],i=[];for(const m of e){if(f['prefer']['includes'](m))h['push'](m);if(f['avoid']['includes'](m))i['push'](m);}const j=h['length']*d['scoring']['per_gain'],k=Math['round'](i['length']*d['scoring']['per_risk']*g),l=Math['max'](0x0,Math['min'](0x64,d['scoring']['base']+j-k));return{'gain_score':j,'risk_score':k,'net_score':l,'gains':h,'risks':i};}export function consistencyScore(a,b){return evaluateOutcome(a,b)['net_score'];}export function outcomeAssessment(a,b){return{'consistency':a['net_score'],'net':a['net_score'],'gains':[...a['gains']],'risks':[...a['risks']],...b?.['costOfDelay']!==undefined?{'cost_of_delay':b['costOfDelay']}:{},...b?.['stake']!==undefined?{'commercial_stake':b['stake']}:{}};}
@@ -1,6 +1,7 @@
1
1
  import type { ExecutionPath } from "../participation/radar-core.js";
2
2
  import type { CommercialRole } from "../role/types.js";
3
3
  import { type RiskAppetite } from "./game-strategy.js";
4
+ import type { ValueRiskAssessment } from "./value-risk.js";
4
5
  export interface NodeForwardInput {
5
6
  name: string;
6
7
  to_node: string;
@@ -38,6 +39,8 @@ export interface NodeGameAction {
38
39
  favorability: number;
39
40
  gain_score: number;
40
41
  risk_score: number;
42
+ gain_effects: string[];
43
+ risk_effects: string[];
41
44
  is_optimal: boolean;
42
45
  payoff_note: string;
43
46
  risk: "low" | "medium" | "high";
@@ -60,3 +63,4 @@ export interface NodeGameAdvice {
60
63
  summary: string;
61
64
  }
62
65
  export declare function evaluateNodeGame(input: NodeGameInput): NodeGameAdvice;
66
+ export declare function actionAssessment(a: NodeGameAction, advice?: NodeGameAdvice): ValueRiskAssessment;