@wowok/agent-mcp 3.1.2 → 3.1.4
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.
- package/dist/config/config-audit.spec.d.ts +1 -0
- package/dist/config/config-audit.spec.js +1 -0
- package/dist/config/exposure.d.ts +108 -0
- package/dist/config/exposure.js +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +1 -1
- package/dist/config/judgment.d.ts +1228 -0
- package/dist/config/judgment.js +1 -0
- package/dist/config/judgment.spec.d.ts +1 -0
- package/dist/config/judgment.spec.js +1 -0
- package/dist/config/rule-engine.d.ts +299 -0
- package/dist/config/rule-engine.js +1 -0
- package/dist/config/rule-engine.spec.d.ts +1 -0
- package/dist/config/rule-engine.spec.js +1 -0
- package/dist/config/runtime.js +1 -1
- package/dist/config/severity.d.ts +7 -0
- package/dist/config/severity.js +1 -0
- package/dist/customer/index.d.ts +3 -9
- package/dist/customer/index.js +1 -1
- package/dist/customer/industry-risks.d.ts +3 -17
- package/dist/customer/industry-risks.js +1 -1
- package/dist/customer/order-monitor.d.ts +3 -1
- package/dist/customer/order-monitor.js +1 -1
- package/dist/customer/types.d.ts +1 -165
- package/dist/customer/types.js +1 -1
- package/dist/customer/user-preferences.d.ts +0 -49
- package/dist/customer/user-preferences.js +1 -1
- package/dist/evaluation/acceptance.d.ts +1 -0
- package/dist/evaluation/acceptance.js +1 -1
- package/dist/evaluation/arbitration-game.js +1 -1
- package/dist/evaluation/architecture.spec.d.ts +1 -0
- package/dist/evaluation/architecture.spec.js +1 -0
- package/dist/evaluation/builtins/demand-match.js +1 -1
- package/dist/evaluation/builtins/graph-service.d.ts +16 -0
- package/dist/evaluation/builtins/graph-service.js +1 -0
- package/dist/evaluation/builtins/graph-service.spec.d.ts +1 -0
- package/dist/evaluation/builtins/graph-service.spec.js +1 -0
- package/dist/evaluation/builtins/index.d.ts +1 -1
- package/dist/evaluation/builtins/index.js +1 -1
- package/dist/evaluation/builtins/purity.spec.d.ts +1 -0
- package/dist/evaluation/builtins/purity.spec.js +1 -0
- package/dist/evaluation/engine.js +1 -1
- package/dist/evaluation/facets/catalog.d.ts +19 -0
- package/dist/evaluation/facets/catalog.js +1 -0
- package/dist/evaluation/game-strategy.d.ts +2 -2
- package/dist/evaluation/game-strategy.js +1 -1
- package/dist/evaluation/guard-scan.d.ts +10 -0
- package/dist/evaluation/guard-scan.js +1 -0
- package/dist/evaluation/match-operation.d.ts +2 -2
- package/dist/evaluation/match-operation.js +1 -1
- package/dist/evaluation/standards.d.ts +9 -0
- package/dist/evaluation/standards.js +1 -0
- package/dist/evaluation/standards.spec.d.ts +1 -0
- package/dist/evaluation/standards.spec.js +1 -0
- package/dist/evaluation/types.d.ts +11 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/business-modules.js +1 -1
- package/dist/extensions/custom-registry-file.js +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.js +1 -1
- package/dist/extensions/industry-audit.spec.d.ts +1 -0
- package/dist/extensions/industry-audit.spec.js +1 -0
- package/dist/extensions/industry-layers.d.ts +14 -5
- package/dist/extensions/industry-layers.js +1 -1
- package/dist/extensions/industry-pack.d.ts +2 -0
- package/dist/extensions/industry-pack.js +1 -1
- package/dist/extensions/mode-evaluator.js +1 -1
- package/dist/extensions/modes.js +1 -1
- package/dist/graph/onchain/analyze.d.ts +16 -1
- package/dist/graph/onchain/analyze.js +1 -1
- package/dist/graph/onchain/analyze.spec.js +1 -1
- package/dist/graph/onchain/dataplane.d.ts +1 -1
- package/dist/graph/onchain/dataplane.js +1 -1
- package/dist/graph/onchain/edge-batch.spec.d.ts +1 -0
- package/dist/graph/onchain/edge-batch.spec.js +1 -0
- package/dist/graph/onchain/edge-schema.d.ts +11 -2
- package/dist/graph/onchain/edge-schema.js +1 -1
- package/dist/graph/onchain/entity-profile.spec.d.ts +1 -0
- package/dist/graph/onchain/entity-profile.spec.js +1 -0
- package/dist/graph/onchain/event-history.spec.d.ts +1 -0
- package/dist/graph/onchain/event-history.spec.js +1 -0
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exploration.d.ts +28 -0
- package/dist/graph/onchain/exploration.js +1 -0
- package/dist/graph/onchain/exploration.spec.d.ts +1 -0
- package/dist/graph/onchain/exploration.spec.js +1 -0
- package/dist/graph/onchain/exposure.d.ts +18 -0
- package/dist/graph/onchain/exposure.js +1 -0
- package/dist/graph/onchain/exposure.spec.d.ts +1 -0
- package/dist/graph/onchain/exposure.spec.js +1 -0
- package/dist/graph/onchain/extract-deep.spec.d.ts +1 -0
- package/dist/graph/onchain/extract-deep.spec.js +1 -0
- package/dist/graph/onchain/extract.d.ts +11 -3
- package/dist/graph/onchain/extract.js +1 -1
- package/dist/graph/onchain/facet-projection.d.ts +99 -0
- package/dist/graph/onchain/facet-projection.js +1 -0
- package/dist/graph/onchain/facet-projection.spec.d.ts +1 -0
- package/dist/graph/onchain/facet-projection.spec.js +1 -0
- package/dist/graph/onchain/facts.d.ts +103 -0
- package/dist/graph/onchain/facts.js +1 -0
- package/dist/graph/onchain/facts.spec.d.ts +1 -0
- package/dist/graph/onchain/facts.spec.js +1 -0
- package/dist/graph/onchain/field-manifest.d.ts +29 -0
- package/dist/graph/onchain/field-manifest.js +1 -0
- package/dist/graph/onchain/field-manifest.spec.d.ts +1 -0
- package/dist/graph/onchain/field-manifest.spec.js +1 -0
- package/dist/graph/onchain/fixtures.d.ts +80 -0
- package/dist/graph/onchain/fixtures.js +1 -0
- package/dist/graph/onchain/fixtures.spec.d.ts +1 -0
- package/dist/graph/onchain/fixtures.spec.js +1 -0
- package/dist/graph/onchain/graph-policy.spec.d.ts +1 -0
- package/dist/graph/onchain/graph-policy.spec.js +1 -0
- package/dist/graph/onchain/index.d.ts +14 -2
- package/dist/graph/onchain/index.js +1 -1
- package/dist/graph/onchain/interest.js +1 -1
- package/dist/graph/onchain/interest.spec.js +1 -1
- package/dist/graph/onchain/label-lint.spec.d.ts +1 -0
- package/dist/graph/onchain/label-lint.spec.js +1 -0
- package/dist/graph/onchain/names.d.ts +23 -0
- package/dist/graph/onchain/names.js +1 -0
- package/dist/graph/onchain/names.spec.d.ts +1 -0
- package/dist/graph/onchain/names.spec.js +1 -0
- package/dist/graph/onchain/onchain.spec.js +1 -1
- package/dist/graph/onchain/policy.d.ts +8 -0
- package/dist/graph/onchain/policy.js +1 -0
- package/dist/graph/onchain/proposal-graph.d.ts +11 -0
- package/dist/graph/onchain/proposal-graph.js +1 -0
- package/dist/graph/onchain/proposal-graph.spec.d.ts +1 -0
- package/dist/graph/onchain/proposal-graph.spec.js +1 -0
- package/dist/graph/onchain/sdk-batch.d.ts +5 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/graph/onchain/strategy.d.ts +16 -0
- package/dist/graph/onchain/strategy.js +1 -1
- package/dist/graph/onchain/strategy.spec.js +1 -1
- package/dist/graph/onchain/synthesis.d.ts +20 -0
- package/dist/graph/onchain/synthesis.js +1 -0
- package/dist/graph/onchain/synthesis.spec.d.ts +1 -0
- package/dist/graph/onchain/synthesis.spec.js +1 -0
- package/dist/graph/onchain/table-ledger.spec.d.ts +1 -0
- package/dist/graph/onchain/table-ledger.spec.js +1 -0
- package/dist/graph/onchain/types.d.ts +57 -7
- package/dist/graph/onchain/viewport.d.ts +1 -0
- package/dist/graph/onchain/viewport.js +1 -1
- package/dist/harness/index.d.ts +1 -5
- package/dist/harness/index.js +1 -1
- package/dist/harness/verify.d.ts +6 -1
- package/dist/harness/verify.js +1 -1
- package/dist/index.js +1 -1
- package/dist/keeper/keeper.spec.js +1 -1
- package/dist/knowledge/alloc-audit-policy.spec.d.ts +1 -0
- package/dist/knowledge/alloc-audit-policy.spec.js +1 -0
- package/dist/knowledge/allocation-ledger.js +1 -1
- package/dist/knowledge/allocation-puzzle.d.ts +1 -1
- package/dist/knowledge/allocation-puzzle.js +1 -1
- package/dist/knowledge/allocation-risk.d.ts +4 -3
- package/dist/knowledge/allocation-risk.js +1 -1
- package/dist/knowledge/allocation-templates.js +1 -1
- package/dist/knowledge/arb-risk.d.ts +6 -6
- package/dist/knowledge/arb-risk.js +1 -1
- package/dist/knowledge/arbitration-ledger.d.ts +4 -4
- package/dist/knowledge/arbitration-ledger.js +1 -1
- package/dist/knowledge/arbitration-puzzle.d.ts +1 -1
- package/dist/knowledge/arbitration-puzzle.js +1 -1
- package/dist/knowledge/arbitration-risk.d.ts +4 -3
- package/dist/knowledge/arbitration-risk.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +1 -0
- package/dist/knowledge/baselines/guard-lint-baseline.spec.js +1 -0
- package/dist/knowledge/baselines/judgment-baselines.json +289 -0
- package/dist/knowledge/baselines/risk-baselines.spec.d.ts +1 -0
- package/dist/knowledge/baselines/risk-baselines.spec.js +1 -0
- package/dist/knowledge/baselines/risk-cases.d.ts +8 -0
- package/dist/knowledge/baselines/risk-cases.js +1 -0
- package/dist/knowledge/baselines/rules/alloc_audit.json +290 -0
- package/dist/knowledge/baselines/rules/allocation.json +492 -0
- package/dist/knowledge/baselines/rules/arb.json +155 -0
- package/dist/knowledge/baselines/rules/arbitration.json +366 -0
- package/dist/knowledge/baselines/rules/bridge.json +197 -0
- package/dist/knowledge/baselines/rules/contact.json +152 -0
- package/dist/knowledge/baselines/rules/demand.json +158 -0
- package/dist/knowledge/baselines/rules/graph.json +453 -0
- package/dist/knowledge/baselines/rules/guard.json +981 -0
- package/dist/knowledge/baselines/rules/machine.json +706 -0
- package/dist/knowledge/baselines/rules/order.json +549 -0
- package/dist/knowledge/baselines/rules/payment.json +205 -0
- package/dist/knowledge/baselines/rules/permission.json +330 -0
- package/dist/knowledge/baselines/rules/personal.json +139 -0
- package/dist/knowledge/baselines/rules/progress.json +346 -0
- package/dist/knowledge/baselines/rules/proof.json +158 -0
- package/dist/knowledge/baselines/rules/registrar.json +159 -0
- package/dist/knowledge/baselines/rules/repository.json +244 -0
- package/dist/knowledge/baselines/rules/resource.json +117 -0
- package/dist/knowledge/baselines/rules/reward.json +471 -0
- package/dist/knowledge/baselines/rules/service.json +595 -0
- package/dist/knowledge/baselines/rules/treasury.json +440 -0
- package/dist/knowledge/baselines/rules/util.json +101 -0
- package/dist/knowledge/bridge-risk.d.ts +6 -6
- package/dist/knowledge/bridge-risk.js +1 -1
- package/dist/knowledge/builtin-templates.d.ts +26 -0
- package/dist/knowledge/builtin-templates.js +1 -0
- package/dist/knowledge/contact-risk.d.ts +6 -6
- package/dist/knowledge/contact-risk.js +1 -1
- package/dist/knowledge/contract-invariants.d.ts +1 -0
- package/dist/knowledge/contract-invariants.js +1 -1
- package/dist/knowledge/demand-risk.d.ts +6 -6
- package/dist/knowledge/demand-risk.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/facts-sync.spec.d.ts +1 -0
- package/dist/knowledge/facts-sync.spec.js +1 -0
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-eval.d.ts +15 -0
- package/dist/knowledge/guard-eval.js +1 -0
- package/dist/knowledge/guard-eval.spec.d.ts +1 -0
- package/dist/knowledge/guard-eval.spec.js +1 -0
- package/dist/knowledge/guard-field-cognition.d.ts +1 -1
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-ledger.js +1 -1
- package/dist/knowledge/guard-lint.d.ts +1 -1
- package/dist/knowledge/guard-lint.js +1 -1
- package/dist/knowledge/guard-risk.d.ts +7 -19
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.d.ts +51 -45
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/industry-rule-node.d.ts +7 -0
- package/dist/knowledge/industry-rule-node.js +1 -0
- package/dist/knowledge/industry-strategy.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/machine-ledger.js +1 -1
- package/dist/knowledge/machine-risk.d.ts +4 -7
- package/dist/knowledge/machine-risk.js +1 -1
- package/dist/knowledge/machine-templates.js +1 -1
- package/dist/knowledge/machine-translation.js +1 -1
- package/dist/knowledge/migration-preflight.js +1 -1
- package/dist/knowledge/operation-dictionary.js +1 -1
- package/dist/knowledge/order-ledger.js +1 -1
- package/dist/knowledge/order-puzzle.d.ts +3 -3
- package/dist/knowledge/order-puzzle.js +1 -1
- package/dist/knowledge/order-risk.d.ts +7 -12
- package/dist/knowledge/order-risk.js +1 -1
- package/dist/knowledge/order-templates.js +1 -1
- package/dist/knowledge/passport-ledger.js +1 -1
- package/dist/knowledge/passport-templates.js +1 -1
- package/dist/knowledge/payment-risk.d.ts +8 -7
- package/dist/knowledge/payment-risk.js +1 -1
- package/dist/knowledge/payment-tracker.js +1 -1
- package/dist/knowledge/permission-ledger.js +1 -1
- package/dist/knowledge/permission-puzzle.d.ts +12 -12
- package/dist/knowledge/permission-puzzle.js +1 -1
- package/dist/knowledge/permission-risk.d.ts +4 -10
- package/dist/knowledge/permission-risk.js +1 -1
- package/dist/knowledge/permission-templates.js +1 -1
- package/dist/knowledge/personal-risk.d.ts +6 -6
- package/dist/knowledge/personal-risk.js +1 -1
- package/dist/knowledge/progress-ledger.js +1 -1
- package/dist/knowledge/progress-puzzle.d.ts +2 -2
- package/dist/knowledge/progress-puzzle.js +1 -1
- package/dist/knowledge/progress-risk.d.ts +4 -3
- package/dist/knowledge/progress-risk.js +1 -1
- package/dist/knowledge/progress-templates.js +1 -1
- package/dist/knowledge/proof-risk.d.ts +6 -6
- package/dist/knowledge/proof-risk.js +1 -1
- package/dist/knowledge/puzzle-projections.d.ts +11 -0
- package/dist/knowledge/puzzle-projections.js +1 -0
- package/dist/knowledge/recipient-constraint.d.ts +20 -1
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/registrar-risk.d.ts +6 -6
- package/dist/knowledge/registrar-risk.js +1 -1
- package/dist/knowledge/repository-risk.d.ts +7 -7
- package/dist/knowledge/repository-risk.js +1 -1
- package/dist/knowledge/resource-risk.d.ts +6 -6
- package/dist/knowledge/resource-risk.js +1 -1
- package/dist/knowledge/reward-ledger.d.ts +1 -1
- package/dist/knowledge/reward-ledger.js +1 -1
- package/dist/knowledge/reward-puzzle.d.ts +2 -2
- package/dist/knowledge/reward-puzzle.js +1 -1
- package/dist/knowledge/reward-risk.d.ts +5 -6
- package/dist/knowledge/reward-risk.js +1 -1
- package/dist/knowledge/rule-node-analyzers.d.ts +43 -0
- package/dist/knowledge/rule-node-analyzers.js +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.d.ts +1 -0
- package/dist/knowledge/rule-node-analyzers.spec.js +1 -0
- package/dist/knowledge/rule-outcome.d.ts +5 -0
- package/dist/knowledge/rule-outcome.js +1 -0
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/scenario-modes.d.ts +2 -2
- package/dist/knowledge/scenario-modes.js +1 -1
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/service-allocator-audit-node.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/service-puzzle.d.ts +2 -2
- package/dist/knowledge/service-puzzle.js +1 -1
- package/dist/knowledge/service-risk-node.js +1 -1
- package/dist/knowledge/service-risk.d.ts +4 -4
- package/dist/knowledge/service-risk.js +1 -1
- package/dist/knowledge/service-templates.js +1 -1
- package/dist/knowledge/strategy-manuals.d.ts +1 -1
- package/dist/knowledge/strategy-manuals.js +1 -1
- package/dist/knowledge/template-loader.d.ts +84 -0
- package/dist/knowledge/template-loader.js +1 -0
- package/dist/knowledge/template-loader.spec.d.ts +1 -0
- package/dist/knowledge/template-loader.spec.js +1 -0
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.d.ts +17 -0
- package/dist/knowledge/template-scanner.js +1 -0
- package/dist/knowledge/template-scanner.spec.d.ts +1 -0
- package/dist/knowledge/template-scanner.spec.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/treasury-ledger.d.ts +1 -1
- package/dist/knowledge/treasury-ledger.js +1 -1
- package/dist/knowledge/treasury-puzzle.d.ts +3 -3
- package/dist/knowledge/treasury-puzzle.js +1 -1
- package/dist/knowledge/treasury-risk.d.ts +6 -4
- package/dist/knowledge/treasury-risk.js +1 -1
- package/dist/knowledge/treasury-templates.js +1 -1
- package/dist/knowledge/util-risk.d.ts +6 -6
- package/dist/knowledge/util-risk.js +1 -1
- package/dist/knowledge/workflow-guidance.d.ts +4 -0
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/knowledge/workspace-lists.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/arbitrator-interest.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/persona/analyzer.js +1 -1
- package/dist/persona/bridge.js +1 -1
- package/dist/persona/facet-profile.d.ts +33 -0
- package/dist/persona/facet-profile.js +1 -0
- package/dist/persona/index.js +1 -1
- package/dist/persona/model.d.ts +2 -1
- package/dist/persona/model.js +1 -1
- package/dist/persona/persona-audit.spec.d.ts +1 -0
- package/dist/persona/persona-audit.spec.js +1 -0
- package/dist/persona/topology-focus.d.ts +2 -2
- package/dist/persona/topology-focus.js +1 -1
- package/dist/persona/types.d.ts +14 -0
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/facet-money.d.ts +33 -0
- package/dist/playbooks/service-build/facet-money.js +1 -0
- package/dist/playbooks/service-build/facet-money.spec.d.ts +1 -0
- package/dist/playbooks/service-build/facet-money.spec.js +1 -0
- package/dist/playbooks/service-build/machine-panorama.d.ts +20 -0
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.d.ts +2 -2
- package/dist/playbooks/service-build/migration-planner.d.ts +43 -0
- package/dist/playbooks/service-build/migration-planner.js +1 -0
- package/dist/playbooks/service-build/object-panorama.d.ts +65 -24
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/pipeline-actions.d.ts +3 -3
- package/dist/playbooks/service-build/pipeline-actions.js +1 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +1 -0
- package/dist/playbooks/service-build/reverse-mapping.js +1 -1
- package/dist/playbooks/service-build/risk-aggregator.d.ts +4 -2
- package/dist/playbooks/service-build/risk-aggregator.js +1 -1
- package/dist/playbooks/service-build/semantic-graph.js +1 -1
- package/dist/playbooks/service-build/service-panorama.d.ts +56 -9
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +1 -0
- package/dist/playbooks/service-build/topology-evaluation.spec.js +1 -0
- package/dist/playbooks/service-build/topology-query.d.ts +13 -2
- package/dist/playbooks/service-build/topology-query.js +1 -1
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +2 -2
- package/dist/playbooks/service-build/workflow-design-assessment.js +1 -1
- package/dist/relationship/registry.js +1 -1
- package/dist/review/arb.d.ts +0 -2
- package/dist/review/arb.js +1 -1
- package/dist/review/machine.js +1 -1
- package/dist/review/order.d.ts +0 -1
- package/dist/review/order.js +1 -1
- package/dist/review/service.js +1 -1
- package/dist/review/types.d.ts +7 -0
- package/dist/role/profiles.js +1 -1
- package/dist/rules.d.ts +1 -2
- package/dist/rules.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +207 -0
- package/dist/schema/benchmark-migration/index.js +1 -0
- package/dist/schema/call/allocation.d.ts +1 -1
- package/dist/schema/call/allocation.js +1 -1
- package/dist/schema/call/arbitration.d.ts +1 -1
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +3374 -670
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/contact.d.ts +1 -1
- package/dist/schema/call/demand.d.ts +1 -1
- package/dist/schema/call/guard.d.ts +3 -3
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +5 -5
- package/dist/schema/call/order.d.ts +3 -3
- package/dist/schema/call/payment.js +1 -1
- package/dist/schema/call/permission-handler.d.ts +1 -1
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.d.ts +16 -16
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/personal.d.ts +8 -8
- package/dist/schema/call/personal.js +1 -1
- package/dist/schema/call/progress.d.ts +3 -3
- package/dist/schema/call/receipt.d.ts +28 -0
- package/dist/schema/call/receipt.js +1 -0
- package/dist/schema/call/repository.d.ts +11 -11
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.d.ts +1 -1
- package/dist/schema/call/semantic-customer-advice.spec.d.ts +1 -0
- package/dist/schema/call/semantic-customer-advice.spec.js +1 -0
- package/dist/schema/call/semantic.d.ts +5 -2
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +7 -7
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/call/treasury.d.ts +1 -1
- package/dist/schema/call/treasury.js +1 -1
- package/dist/schema/common/index.d.ts +6 -6
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/config/index.d.ts +50 -1
- package/dist/schema/config/index.js +1 -1
- package/dist/schema/evaluation/index.d.ts +307 -213
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +6 -6
- package/dist/schema/goal/planning.d.ts +17 -17
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +1 -1
- package/dist/schema/interaction/index.d.ts +1 -1
- package/dist/schema/keeper/index.d.ts +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +26 -26
- package/dist/schema/operations.d.ts +59 -43
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +4732 -24
- package/dist/schema/persona/index.js +1 -1
- package/dist/schema/query/bi.d.ts +830 -10
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +44 -44
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +1 -1
- package/dist/schema/workspace/index.d.ts +2 -2
- package/dist/schema-query-impl/index.d.ts +9 -0
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.output.json +1 -1
- package/dist/schemas/benchmark_migration_operation.output.json +793 -0
- package/dist/schemas/benchmark_migration_operation.schema.json +83 -0
- package/dist/schemas/bridge_operation.output.json +1 -1
- package/dist/schemas/bridge_operation.schema.json +5 -5
- package/dist/schemas/config_operation.output.json +252 -0
- package/dist/schemas/config_operation.schema.json +21 -1
- package/dist/schemas/evaluation_operation.output.json +702 -162
- package/dist/schemas/evaluation_operation.schema.json +0 -429
- package/dist/schemas/goal_operation.schema.json +8 -8
- package/dist/schemas/guard2file.schema.json +1 -1
- package/dist/schemas/index.json +7 -7
- package/dist/schemas/keeper_operation.output.json +1 -1
- package/dist/schemas/local_history_operation.output.json +1 -1
- package/dist/schemas/local_info_operation.output.json +1 -1
- package/dist/schemas/local_mark_operation.output.json +1 -1
- package/dist/schemas/machineNode2file.schema.json +1 -1
- package/dist/schemas/messenger_operation.output.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +24 -12
- package/dist/schemas/monitor_events.output.json +1 -1
- package/dist/schemas/monitor_subscription.output.json +1 -1
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.output.json +6359 -3724
- package/dist/schemas/onchain_operations.schema.json +191 -141
- package/dist/schemas/onchain_operations_allocation.schema.json +13 -11
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -8
- package/dist/schemas/onchain_operations_contact.schema.json +7 -5
- package/dist/schemas/onchain_operations_demand.schema.json +7 -5
- package/dist/schemas/onchain_operations_gen_passport.schema.json +5 -3
- package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_guard.schema.json +5 -3
- package/dist/schemas/onchain_operations_machine.schema.json +22 -18
- package/dist/schemas/onchain_operations_order.schema.json +11 -7
- package/dist/schemas/onchain_operations_payment.schema.json +3 -3
- package/dist/schemas/onchain_operations_permission.schema.json +19 -11
- package/dist/schemas/onchain_operations_personal.schema.json +16 -10
- package/dist/schemas/onchain_operations_progress.schema.json +11 -7
- package/dist/schemas/onchain_operations_proof.schema.json +5 -3
- package/dist/schemas/onchain_operations_repository.schema.json +12 -8
- package/dist/schemas/onchain_operations_reward.schema.json +11 -9
- package/dist/schemas/onchain_operations_service.schema.json +28 -22
- package/dist/schemas/onchain_operations_treasury.schema.json +13 -11
- package/dist/schemas/onchain_table_data.output.json +88 -88
- package/dist/schemas/persona_operation.output.json +15875 -1
- package/dist/schemas/persona_operation.schema.json +3056 -478
- package/dist/schemas/query_toolkit.output.json +1325 -212
- package/dist/schemas/query_toolkit.schema.json +60 -2
- package/dist/schemas/workflow_operation.schema.json +4 -2
- package/dist/strategy/metrics.js +1 -1
- package/dist/strategy/scorecard.js +1 -1
- package/dist/tools/handlers/benchmark-migration.d.ts +2 -0
- package/dist/tools/handlers/benchmark-migration.js +1 -0
- package/dist/tools/handlers/bridge.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/dispatch-expectations.d.ts +3 -0
- package/dist/tools/handlers/dispatch-expectations.js +1 -0
- package/dist/tools/handlers/evaluation.js +1 -1
- package/dist/tools/handlers/industry-pack.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/schema-query.js +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.d.ts +3 -0
- package/dist/tools/move-fn-index.gen.js +1 -0
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/evaluation.d.ts +2 -0
- package/dist/tools/registry/evaluation.js +1 -0
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/sanitize-output.d.ts +3 -0
- package/dist/tools/sanitize-output.js +1 -0
- package/dist/tools/sanitize-output.spec.d.ts +1 -0
- package/dist/tools/sanitize-output.spec.js +1 -0
- package/dist/tools/shared.d.ts +0 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +9 -3
- package/dist/customer/customer-advice.d.ts +0 -32
- package/dist/customer/customer-advice.js +0 -1
- package/dist/customer/info-puzzle.d.ts +0 -146
- package/dist/customer/info-puzzle.js +0 -1
- package/dist/customer/order-strategy.d.ts +0 -17
- package/dist/customer/order-strategy.js +0 -1
- package/dist/customer/preorder-compare.d.ts +0 -24
- package/dist/customer/preorder-compare.js +0 -1
- package/dist/customer/reminder-system.d.ts +0 -42
- package/dist/customer/reminder-system.js +0 -1
- package/dist/customer/risk-assessment.d.ts +0 -13
- package/dist/customer/risk-assessment.js +0 -1
- package/dist/evaluation/builtins/service-risk.d.ts +0 -7
- package/dist/evaluation/builtins/service-risk.js +0 -1
- package/dist/knowledge/trust-metrics.d.ts +0 -66
- package/dist/knowledge/trust-metrics.js +0 -1
- package/dist/schema/trust/index.d.ts +0 -334
- package/dist/schema/trust/index.js +0 -1
- package/dist/schemas/trust_score.output.json +0 -847
- package/dist/schemas/trust_score.schema.json +0 -364
- package/dist/tools/handlers/trust.d.ts +0 -16
- package/dist/tools/handlers/trust.js +0 -1
- package/dist/tools/registry/trust.d.ts +0 -2
- package/dist/tools/registry/trust.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_VOTING_GUARD_COUNT}from'@wowok/wowok';import{getDualGuardMatrixEntry,isValidArbStatusTransition}from'./arbitration-ledger.js';export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create_arbitration','target_arb':a['target_arb'],'target_order':a['target_order'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_AB_01_coin_type_valid':!![],'F_AB_02_permission_address_valid':!![],'F_AB_03_bPaused_default_true':!![],'F_AB_04_fee_u64_nonneg':!![],'F_AB_05_voting_guard_count_le_50':!![],'F_AB_06_voting_guard_no_duplicate':!![],'F_AB_07_usage_guard_single':!![],'F_AB_08_arb_status_transition_valid':!![],'F_AB_09_arb_belongs_to_arbitration':!![],'F_AB_10_order_op_permission':!![],'F_AB_11_dispute_fee_sufficient':!![],'F_AB_12_dual_guard_coherent':!![]},b['voting_guard']={'guards':[],'weight_mode':'none'},b['usage_guard']={'guard':null,'passport_required':![],'filter_rules':[]},b;}export function checkPuzzleCompleteness(a){const b=[],c=[];if(!a['intent'])b['push']('A'),c['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else{if(!a['intent']['rule_sentence'])b['push']('A'),c['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'});else{const d=a['intent']['action'];(d==='file_dispute'||d==='vote'||d==='confirm_materials'||d==='provide_feedback'||d==='make_ruling'||d==='reset_arbitration'||d==='withdraw_fees')&&!a['intent']['target_arb']&&!a['intent']['target_order']&&(b['push']('A'),c['push']({'dimension':'A','reason':d+'\x20requires\x20target_arb\x20or\x20target_order'})),d==='file_dispute'&&!a['intent']['target_order']&&(b['push']('A'),c['push']({'dimension':'A','reason':'file_dispute\x20requires\x20target_order'}));}}if(!a['arbitration_config']){const e=a['intent']?.['action']==='create_arbitration'||a['intent']?.['action']==='configure';e&&(b['push']('B'),c['push']({'dimension':'B','reason':'Arbitration\x20config\x20not\x20specified'}));}else a['intent']?.['action']==='create_arbitration'&&(!a['arbitration_config']['coin_type']&&(b['push']('B'),c['push']({'dimension':'B','reason':'coin_type\x20(generic\x20T)\x20required\x20for\x20create_arbitration'})),!a['arbitration_config']['permission_address']&&(b['push']('B'),c['push']({'dimension':'B','reason':'permission_address\x20required\x20for\x20create_arbitration'})));if(!a['voting_guard'])(a['intent']?.['action']==='configure_voting_guard'||a['intent']?.['action']==='vote')&&(b['push']('C'),c['push']({'dimension':'C','reason':'voting_guard\x20config\x20not\x20specified'}));else a['intent']?.['action']==='vote'&&a['voting_guard']['guards']['length']>0x0&&(a['voting_guard']['weight_mode']==='none'&&(b['push']('C'),c['push']({'dimension':'C','reason':'weight_mode\x20must\x20be\x20set\x20when\x20guards\x20non-empty'})));!a['usage_guard']&&((a['intent']?.['action']==='configure_usage_guard'||a['intent']?.['action']==='file_dispute')&&(b['push']('D'),c['push']({'dimension':'D','reason':'usage_guard\x20config\x20not\x20specified'})));if(!a['arbiter_config'])(a['intent']?.['action']==='vote'||a['intent']?.['action']==='make_ruling')&&(b['push']('E'),c['push']({'dimension':'E','reason':'Arbiter\x20config\x20not\x20specified'}));else a['intent']?.['action']==='vote'&&a['arbiter_config']['arbitrators']['length']===0x0&&(b['push']('E'),c['push']({'dimension':'E','reason':'At\x20least\x20one\x20arbitrator\x20required\x20for\x20voting'}));if(!a['constraints'])b['push']('F'),c['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'});else{const f=['confirm_materials','vote','provide_feedback','make_ruling','reset_arbitration','withdraw_fees'];a['intent']&&f['includes'](a['intent']['action'])&&(!a['current_arb_status']&&(b['push']('F'),c['push']({'dimension':'F','reason':'current_arb_status\x20required\x20for\x20Arb\x20operations'})),!a['expected_arb_status']&&a['intent']['action']!=='provide_feedback'&&(b['push']('F'),c['push']({'dimension':'F','reason':'expected_arb_status\x20required\x20(non-feedback\x20Arb\x20ops)'})));}return{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':c,'complete':b['length']===0x0,'next_step':b['length']===0x0?'Puzzle\x20complete\x20—\x20ready\x20for\x20confirmation\x20text\x20generation':'Next:\x20complete\x20dimension\x20'+b[0x0]+'\x20—\x20'+c[0x0]['reason']};}export function validateConstraints(a){const b=[];a['voting_guard']&&a['voting_guard']['guards']['length']>MAX_VOTING_GUARD_COUNT&&b['push']({'constraint_id':'F-AB-05','severity':'HIGH','message':'voting_guard\x20count\x20'+a['voting_guard']['guards']['length']+'\x20exceeds\x20MAX_VOTING_GUARD_COUNT\x20'+MAX_VOTING_GUARD_COUNT,'current_value':a['voting_guard']['guards']['length'],'limit':MAX_VOTING_GUARD_COUNT});if(a['voting_guard']&&a['voting_guard']['guards']['length']>0x0){const c=a['voting_guard']['guards']['map'](e=>e['guard']),d=c['filter']((e,f)=>c['indexOf'](e)!==f);d['length']>0x0&&b['push']({'constraint_id':'F-AB-06','severity':'MEDIUM','message':'Duplicate\x20voting_guard\x20addresses:\x20'+d['join'](',\x20'),'current_value':d['join'](',')});}a['current_arb_status']&&a['expected_arb_status']&&(a['current_arb_status']!==a['expected_arb_status']&&!isValidArbStatusTransition(a['current_arb_status'],a['expected_arb_status'])&&b['push']({'constraint_id':'F-AB-08','severity':'CRITICAL','message':'Invalid\x20Arb\x20status\x20transition:\x20'+a['current_arb_status']+'\x20→\x20'+a['expected_arb_status'],'current_value':a['current_arb_status']+'\x20→\x20'+a['expected_arb_status']}));a['intent']?.['action']==='file_dispute'&&a['arbitration_config']?.['fee']&&(a['arbitration_config']['fee']==='0'&&b['push']({'constraint_id':'F-AB-11','severity':'HIGH','message':'Dispute\x20fee\x20is\x200\x20—\x20likely\x20below\x20arbitration.fee\x20threshold','current_value':'0'}));if(a['voting_guard']&&a['usage_guard']){const e=getDualGuardMatrixEntry(a['voting_guard']['guards']['length']===0x0,a['usage_guard']['guard']===null);a['intent']?.['action']==='file_dispute'&&(a['usage_guard']['guard']!==null&&!a['usage_guard']['passport_required']&&b['push']({'constraint_id':'F-AB-12','severity':'HIGH','message':'usage_guard\x20is\x20Some\x20but\x20passport_required=false\x20—\x20dispute\x20will\x20fail\x20with\x20E_NEED_PASSPORT'})),a['intent']?.['action']==='vote'&&(a['voting_guard']['guards']['length']>0x0&&!a['intent']['target_arb']&&b['push']({'constraint_id':'F-AB-12','severity':'HIGH','message':'voting_guard\x20is\x20non-empty\x20but\x20vote\x20target_arb\x20missing\x20—\x20must\x20use\x20vote_with_voting_guard'}));}if(a['intent']?.['action']==='file_dispute'){}return b;}export function generateConfirmationText(a){const b=[];b['push']('═══\x20Arbitration\x20Confirmation\x20═══'),b['push']('');if(a['intent']){b['push']('Action:\x20'+a['intent']['action']);if(a['intent']['target_arb'])b['push']('Target\x20Arb:\x20'+a['intent']['target_arb']);if(a['intent']['target_order'])b['push']('Target\x20Order:\x20'+a['intent']['target_order']);b['push']('Rule:\x20'+a['intent']['rule_sentence']);if(a['intent']['failure_conditions']['length']>0x0){b['push']('Failure\x20conditions:');for(const e of a['intent']['failure_conditions'])b['push']('\x20\x20-\x20'+e);}b['push']('');}if(a['arbitration_config']){b['push']('─\x20Arbitration\x20Config\x20──────────────');const f=a['arbitration_config'];if(f['description'])b['push']('Description:\x20'+f['description']);if(f['location'])b['push']('Location:\x20'+f['location']);if(f['fee']!==undefined)b['push']('Fee:\x20'+f['fee']);if(f['bPaused']!==undefined)b['push']('bPaused:\x20'+f['bPaused']+'\x20(default\x20true\x20on\x20creation)');if(f['coin_type'])b['push']('Coin\x20type\x20(T):\x20'+f['coin_type']);if(f['permission_address'])b['push']('Permission:\x20'+f['permission_address']);if(f['um']!==undefined)b['push']('UM:\x20'+(f['um']??'(none)'));b['push']('');}if(a['voting_guard']&&a['voting_guard']['guards']['length']>0x0){b['push']('─\x20voting_guard\x20Config\x20──────────────'),b['push']('Count:\x20'+a['voting_guard']['guards']['length']+'\x20/\x20'+MAX_VOTING_GUARD_COUNT),b['push']('Weight\x20mode:\x20'+a['voting_guard']['weight_mode']);for(const h of a['voting_guard']['guards']){const i='GuardIdentifier'in h['vote_weight']?'GuardIdentifier('+h['vote_weight']['GuardIdentifier']+')':'FixedValue('+h['vote_weight']['FixedValue']+')';b['push']('\x20\x20'+h['guard']+':\x20'+i);}a['voting_guard']['cooperation_matrix']&&b['push']('Cooperation:\x20'+a['voting_guard']['cooperation_matrix']['scenario']),b['push']('');}if(a['usage_guard']&&a['usage_guard']['guard']!==null){b['push']('─\x20usage_guard\x20Config\x20──────────────'),b['push']('Guard:\x20'+a['usage_guard']['guard']),b['push']('Passport\x20required:\x20'+a['usage_guard']['passport_required']);if(a['usage_guard']['filter_rules']['length']>0x0){b['push']('Filter\x20rules:');for(const j of a['usage_guard']['filter_rules'])b['push']('\x20\x20-\x20'+j);}b['push']('');}if(a['arbiter_config']&&a['arbiter_config']['arbitrators']['length']>0x0){b['push']('─\x20Arbiter\x20Config\x20──────────────'),b['push']('Arbitrators\x20('+a['arbiter_config']['arbitrators']['length']+'):\x20'+a['arbiter_config']['arbitrators']['join'](',\x20')),b['push']('Vote\x20distribution:\x20'+a['arbiter_config']['vote_distribution']),b['push']('Ruling\x20authority:\x20'+a['arbiter_config']['ruling_authority']);if(a['arbiter_config']['fees_split']){b['push']('Fees\x20split:');const k=a['arbiter_config']['fees_split'];if(k['allocation'])b['push']('\x20\x20→\x20Allocation:\x20'+k['allocation']);if(k['treasury'])b['push']('\x20\x20→\x20Treasury:\x20'+k['treasury']);if(k['remark'])b['push']('\x20\x20Remark:\x20'+k['remark']);if(k['payment_index']!==undefined)b['push']('\x20\x20Payment\x20index:\x20'+k['payment_index']);}b['push']('');}if(a['current_arb_status']||a['expected_arb_status']){b['push']('─\x207-State\x20Flow\x20──────────────');if(a['current_arb_status'])b['push']('Current:\x20'+a['current_arb_status']);if(a['expected_arb_status'])b['push']('Expected\x20after:\x20'+a['expected_arb_status']);b['push']('');}const d=validateConstraints(a);if(d['length']>0x0){b['push']('─\x20Constraint\x20Violations\x20──────────────');for(const l of d){b['push']('\x20\x20['+l['severity']+']\x20'+l['constraint_id']+':\x20'+l['message']);}b['push']('');}return b['join']('\x0a');}
|
|
1
|
+
import{MAX_VOTING_GUARD_COUNT}from'@wowok/wowok';import{getDualGuardMatrixEntry,isValidArbStatusTransition}from'./arbitration-ledger.js';export function initPuzzleFromIntent(a){const b={};return(a['action']||a['rule_sentence'])&&(b['intent']={'action':a['action']??'create_arbitration','target_arb':a['target_arb'],'target_order':a['target_order'],'rule_sentence':a['rule_sentence']??'','failure_conditions':a['failure_conditions']??[]}),b['constraints']={'F_AB_01_coin_type_valid':!![],'F_AB_02_permission_address_valid':!![],'F_AB_03_bPaused_default_true':!![],'F_AB_04_fee_u64_nonneg':!![],'F_AB_05_voting_guard_count_le_50':!![],'F_AB_06_voting_guard_no_duplicate':!![],'F_AB_07_usage_guard_single':!![],'F_AB_08_arb_status_transition_valid':!![],'F_AB_09_arb_belongs_to_arbitration':!![],'F_AB_10_order_op_permission':!![],'F_AB_11_dispute_fee_sufficient':!![],'F_AB_12_dual_guard_coherent':!![]},b['voting_guard']={'guards':[],'weight_mode':'none'},b['usage_guard']={'guard':null,'passport_required':![],'filter_rules':[]},b;}export function checkPuzzleCompleteness(a){const b=[],c=[];if(!a['intent'])b['push']('A'),c['push']({'dimension':'A','reason':'Intent\x20not\x20specified\x20(action\x20+\x20rule_sentence)'});else{if(!a['intent']['rule_sentence'])b['push']('A'),c['push']({'dimension':'A','reason':'rule_sentence\x20is\x20empty'});else{const d=a['intent']['action'];(d==='file_dispute'||d==='vote'||d==='confirm_materials'||d==='provide_feedback'||d==='make_ruling'||d==='reset_arbitration'||d==='withdraw_fees')&&!a['intent']['target_arb']&&!a['intent']['target_order']&&(b['push']('A'),c['push']({'dimension':'A','reason':d+'\x20requires\x20target_arb\x20or\x20target_order'})),d==='file_dispute'&&!a['intent']['target_order']&&(b['push']('A'),c['push']({'dimension':'A','reason':'file_dispute\x20requires\x20target_order'}));}}if(!a['arbitration_config']){const e=a['intent']?.['action']==='create_arbitration'||a['intent']?.['action']==='configure';e&&(b['push']('B'),c['push']({'dimension':'B','reason':'Arbitration\x20config\x20not\x20specified'}));}else a['intent']?.['action']==='create_arbitration'&&(!a['arbitration_config']['coin_type']&&(b['push']('B'),c['push']({'dimension':'B','reason':'coin_type\x20(generic\x20T)\x20required\x20for\x20create_arbitration'})),!a['arbitration_config']['permission_address']&&(b['push']('B'),c['push']({'dimension':'B','reason':'permission_address\x20required\x20for\x20create_arbitration'})));if(!a['voting_guard'])(a['intent']?.['action']==='configure_voting_guard'||a['intent']?.['action']==='vote')&&(b['push']('C'),c['push']({'dimension':'C','reason':'voting_guard\x20config\x20not\x20specified'}));else a['intent']?.['action']==='vote'&&a['voting_guard']['guards']['length']>0x0&&(a['voting_guard']['weight_mode']==='none'&&(b['push']('C'),c['push']({'dimension':'C','reason':'weight_mode\x20must\x20be\x20set\x20when\x20guards\x20non-empty'})));!a['usage_guard']&&((a['intent']?.['action']==='configure_usage_guard'||a['intent']?.['action']==='file_dispute')&&(b['push']('D'),c['push']({'dimension':'D','reason':'usage_guard\x20config\x20not\x20specified'})));if(!a['arbiter_config'])(a['intent']?.['action']==='vote'||a['intent']?.['action']==='make_ruling')&&(b['push']('E'),c['push']({'dimension':'E','reason':'Arbiter\x20config\x20not\x20specified'}));else a['intent']?.['action']==='vote'&&a['arbiter_config']['arbitrators']['length']===0x0&&(b['push']('E'),c['push']({'dimension':'E','reason':'At\x20least\x20one\x20arbitrator\x20required\x20for\x20voting'}));if(!a['constraints'])b['push']('F'),c['push']({'dimension':'F','reason':'Constraints\x20not\x20checked'});else{const f=['confirm_materials','vote','provide_feedback','make_ruling','reset_arbitration','withdraw_fees'];a['intent']&&f['includes'](a['intent']['action'])&&(!a['current_arb_status']&&(b['push']('F'),c['push']({'dimension':'F','reason':'current_arb_status\x20required\x20for\x20Arb\x20operations'})),!a['expected_arb_status']&&a['intent']['action']!=='provide_feedback'&&(b['push']('F'),c['push']({'dimension':'F','reason':'expected_arb_status\x20required\x20(non-feedback\x20Arb\x20ops)'})));}return{'dimensions':['A','B','C','D','E','F'],'missing':b,'missing_details':c,'complete':b['length']===0x0,'next_step':b['length']===0x0?'Puzzle\x20complete\x20—\x20ready\x20for\x20confirmation\x20text\x20generation':'Next:\x20complete\x20dimension\x20'+b[0x0]+'\x20—\x20'+c[0x0]['reason']};}export function validateConstraints(a){const b=[];a['voting_guard']&&a['voting_guard']['guards']['length']>MAX_VOTING_GUARD_COUNT&&b['push']({'constraint_id':'F-AB-05','severity':'high','message':'voting_guard\x20count\x20'+a['voting_guard']['guards']['length']+'\x20exceeds\x20MAX_VOTING_GUARD_COUNT\x20'+MAX_VOTING_GUARD_COUNT,'current_value':a['voting_guard']['guards']['length'],'limit':MAX_VOTING_GUARD_COUNT});if(a['voting_guard']&&a['voting_guard']['guards']['length']>0x0){const c=a['voting_guard']['guards']['map'](e=>e['guard']),d=c['filter']((e,f)=>c['indexOf'](e)!==f);d['length']>0x0&&b['push']({'constraint_id':'F-AB-06','severity':'medium','message':'Duplicate\x20voting_guard\x20addresses:\x20'+d['join'](',\x20'),'current_value':d['join'](',')});}a['current_arb_status']&&a['expected_arb_status']&&(a['current_arb_status']!==a['expected_arb_status']&&!isValidArbStatusTransition(a['current_arb_status'],a['expected_arb_status'])&&b['push']({'constraint_id':'F-AB-08','severity':'critical','message':'Invalid\x20Arb\x20status\x20transition:\x20'+a['current_arb_status']+'\x20→\x20'+a['expected_arb_status'],'current_value':a['current_arb_status']+'\x20→\x20'+a['expected_arb_status']}));a['intent']?.['action']==='file_dispute'&&a['arbitration_config']?.['fee']&&(a['arbitration_config']['fee']==='0'&&b['push']({'constraint_id':'F-AB-11','severity':'high','message':'Dispute\x20fee\x20is\x200\x20—\x20likely\x20below\x20arbitration.fee\x20threshold','current_value':'0'}));if(a['voting_guard']&&a['usage_guard']){const e=getDualGuardMatrixEntry(a['voting_guard']['guards']['length']===0x0,a['usage_guard']['guard']===null);a['intent']?.['action']==='file_dispute'&&(a['usage_guard']['guard']!==null&&!a['usage_guard']['passport_required']&&b['push']({'constraint_id':'F-AB-12','severity':'high','message':'usage_guard\x20is\x20Some\x20but\x20passport_required=false\x20—\x20dispute\x20will\x20fail\x20with\x20E_NEED_PASSPORT'})),a['intent']?.['action']==='vote'&&(a['voting_guard']['guards']['length']>0x0&&!a['intent']['target_arb']&&b['push']({'constraint_id':'F-AB-12','severity':'high','message':'voting_guard\x20is\x20non-empty\x20but\x20vote\x20target_arb\x20missing\x20—\x20must\x20use\x20the\x20Passport-verified\x20voting\x20path'}));}if(a['intent']?.['action']==='file_dispute'){}return b;}export function generateConfirmationText(a){const b=[];b['push']('═══\x20Arbitration\x20Confirmation\x20═══'),b['push']('');if(a['intent']){b['push']('Action:\x20'+a['intent']['action']);if(a['intent']['target_arb'])b['push']('Target\x20Arb:\x20'+a['intent']['target_arb']);if(a['intent']['target_order'])b['push']('Target\x20Order:\x20'+a['intent']['target_order']);b['push']('Rule:\x20'+a['intent']['rule_sentence']);if(a['intent']['failure_conditions']['length']>0x0){b['push']('Failure\x20conditions:');for(const e of a['intent']['failure_conditions'])b['push']('\x20\x20-\x20'+e);}b['push']('');}if(a['arbitration_config']){b['push']('─\x20Arbitration\x20Config\x20──────────────');const f=a['arbitration_config'];if(f['description'])b['push']('Description:\x20'+f['description']);if(f['location'])b['push']('Location:\x20'+f['location']);if(f['fee']!==undefined)b['push']('Fee:\x20'+f['fee']);if(f['bPaused']!==undefined)b['push']('bPaused:\x20'+f['bPaused']+'\x20(default\x20true\x20on\x20creation)');if(f['coin_type'])b['push']('Coin\x20type\x20(T):\x20'+f['coin_type']);if(f['permission_address'])b['push']('Permission:\x20'+f['permission_address']);if(f['um']!==undefined)b['push']('UM:\x20'+(f['um']??'(none)'));b['push']('');}if(a['voting_guard']&&a['voting_guard']['guards']['length']>0x0){b['push']('─\x20voting_guard\x20Config\x20──────────────'),b['push']('Count:\x20'+a['voting_guard']['guards']['length']+'\x20/\x20'+MAX_VOTING_GUARD_COUNT),b['push']('Weight\x20mode:\x20'+a['voting_guard']['weight_mode']);for(const h of a['voting_guard']['guards']){const i='GuardIdentifier'in h['vote_weight']?'GuardIdentifier('+h['vote_weight']['GuardIdentifier']+')':'FixedValue('+h['vote_weight']['FixedValue']+')';b['push']('\x20\x20'+h['guard']+':\x20'+i);}a['voting_guard']['cooperation_matrix']&&b['push']('Cooperation:\x20'+a['voting_guard']['cooperation_matrix']['scenario']),b['push']('');}if(a['usage_guard']&&a['usage_guard']['guard']!==null){b['push']('─\x20usage_guard\x20Config\x20──────────────'),b['push']('Guard:\x20'+a['usage_guard']['guard']),b['push']('Passport\x20required:\x20'+a['usage_guard']['passport_required']);if(a['usage_guard']['filter_rules']['length']>0x0){b['push']('Filter\x20rules:');for(const j of a['usage_guard']['filter_rules'])b['push']('\x20\x20-\x20'+j);}b['push']('');}if(a['arbiter_config']&&a['arbiter_config']['arbitrators']['length']>0x0){b['push']('─\x20Arbiter\x20Config\x20──────────────'),b['push']('Arbitrators\x20('+a['arbiter_config']['arbitrators']['length']+'):\x20'+a['arbiter_config']['arbitrators']['join'](',\x20')),b['push']('Vote\x20distribution:\x20'+a['arbiter_config']['vote_distribution']),b['push']('Ruling\x20authority:\x20'+a['arbiter_config']['ruling_authority']);if(a['arbiter_config']['fees_split']){b['push']('Fees\x20split:');const k=a['arbiter_config']['fees_split'];if(k['allocation'])b['push']('\x20\x20→\x20Allocation:\x20'+k['allocation']);if(k['treasury'])b['push']('\x20\x20→\x20Treasury:\x20'+k['treasury']);if(k['remark'])b['push']('\x20\x20Remark:\x20'+k['remark']);if(k['payment_index']!==undefined)b['push']('\x20\x20Payment\x20index:\x20'+k['payment_index']);}b['push']('');}if(a['current_arb_status']||a['expected_arb_status']){b['push']('─\x207-State\x20Flow\x20──────────────');if(a['current_arb_status'])b['push']('Current:\x20'+a['current_arb_status']);if(a['expected_arb_status'])b['push']('Expected\x20after:\x20'+a['expected_arb_status']);b['push']('');}const d=validateConstraints(a);if(d['length']>0x0){b['push']('─\x20Constraint\x20Violations\x20──────────────');for(const l of d){b['push']('\x20\x20['+l['severity']+']\x20'+l['constraint_id']+':\x20'+l['message']);}b['push']('');}return b['join']('\x0a');}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type Facts, type FindingExposure } from "../config/rule-engine.js";
|
|
1
2
|
import { type ArbStatus } from "./arbitration-ledger.js";
|
|
2
|
-
export type RiskLevel = "
|
|
3
|
+
export type RiskLevel = "critical" | "high" | "medium" | "low";
|
|
3
4
|
export type RiskCategory = "structural" | "semantic" | "authority" | "lifecycle" | "cross_object";
|
|
4
5
|
export interface ArbitrationRisk {
|
|
5
6
|
id: string;
|
|
@@ -11,6 +12,7 @@ export interface ArbitrationRisk {
|
|
|
11
12
|
scenario: string;
|
|
12
13
|
mitigation: string;
|
|
13
14
|
evidence?: string;
|
|
15
|
+
exposure?: FindingExposure;
|
|
14
16
|
}
|
|
15
17
|
export type ArbitrationStakeholder = "owner" | "arbiter" | "voter" | "disputant" | "system";
|
|
16
18
|
export interface RiskRule {
|
|
@@ -97,10 +99,9 @@ export interface RiskCheckContext {
|
|
|
97
99
|
current_timestamp_ms?: number;
|
|
98
100
|
target_objects_types?: string[];
|
|
99
101
|
}
|
|
102
|
+
export declare function arbitrationRiskFacts(ctx: RiskCheckContext): Facts;
|
|
100
103
|
export declare const ARBITRATION_RISK_VERSION = "1.0.0";
|
|
101
104
|
export declare function getAllRiskRules(): RiskRule[];
|
|
102
|
-
export declare function getRiskRulesCount(): number;
|
|
103
|
-
export declare function getRiskRulesByCategory(category: RiskCategory): RiskRule[];
|
|
104
105
|
export interface ArbitrationRiskAssessment {
|
|
105
106
|
summary: string;
|
|
106
107
|
risks: ArbitrationRisk[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MAX_VOTING_GUARD_COUNT}from'@wowok/wowok';import{isTerminalArbStatus,isValidArbStatusTransition}from'./arbitration-ledger.js';const R_AB_1_01={'id':'R-AB-1-01','category':'structural','trigger':'voting_guard\x20count\x20exceeds\x20MAX_VOTING_GUARD_COUNT\x20(50)','check':a=>{if(!a['voting_guard'])return null;if(a['voting_guard']['op']==='add'||a['voting_guard']['op']==='set'){const b=a['voting_guard']['op']==='set'?a['voting_guard']['guards']['length']:(a['current_voting_guard_count']??0x0)+a['voting_guard']['guards']['length'];if(b>MAX_VOTING_GUARD_COUNT)return{'id':'R-AB-1-01','level':'HIGH','category':'structural','title':'voting_guard\x20count\x20exceeds\x20limit','description':'voting_guard\x20would\x20have\x20'+b+'\x20entries,\x20exceeds\x20MAX_VOTING_GUARD_COUNT\x20'+MAX_VOTING_GUARD_COUNT,'affected_stakeholders':['owner','arbiter'],'scenario':'Adding\x20too\x20many\x20voting\x20guards','mitigation':'Remove\x20unused\x20guards\x20before\x20adding\x20new\x20ones;\x20max\x20'+MAX_VOTING_GUARD_COUNT,'evidence':'count='+b};}return null;}},R_AB_1_02={'id':'R-AB-1-02','category':'structural','trigger':'Dispute\x20fee\x20below\x20arbitration.fee\x20threshold','check':a=>{if(!a['dispute']||a['current_arbitration_fee']===undefined)return null;const b=typeof a['current_arbitration_fee']==='string'?BigInt(a['current_arbitration_fee']):BigInt(a['current_arbitration_fee']),c=typeof a['dispute']['fee']==='object'&&a['dispute']['fee']!==null&&'balance'in a['dispute']['fee']?BigInt(a['dispute']['fee']['balance']??0x0):BigInt(0x0);if(c<b)return{'id':'R-AB-1-02','level':'CRITICAL','category':'structural','title':'Dispute\x20fee\x20insufficient\x20(E_FEE_NOT_ENOUGH)','description':'Provided\x20fee\x20'+c['toString']()+'\x20<\x20required\x20'+b['toString'](),'affected_stakeholders':['disputant'],'scenario':'Filing\x20dispute\x20with\x20insufficient\x20fee','mitigation':'Increase\x20dispute.fee.balance\x20to\x20>=\x20'+b['toString'](),'evidence':'provided='+c['toString']()+',\x20required='+b['toString']()};return null;}},R_AB_1_03={'id':'R-AB-1-03','category':'structural','trigger':'Arbitration\x20paused\x20(bPaused=true)\x20—\x20dispute\x20will\x20fail\x20with\x20E_PAUSED','check':a=>{if(a['dispute']&&a['current_bPaused']===!![])return{'id':'R-AB-1-03','level':'HIGH','category':'structural','title':'Arbitration\x20paused\x20—\x20cannot\x20file\x20dispute','description':'Arbitration.bPaused=true;\x20dispute()\x20will\x20abort\x20with\x20E_PAUSED','affected_stakeholders':['disputant'],'scenario':'Filing\x20dispute\x20against\x20a\x20paused\x20Arbitration','mitigation':'Call\x20pause(false)\x20(requires\x20ARBITRATION_PAUSE=356)\x20to\x20resume','evidence':'bPaused=true'};return null;}},R_AB_1_04={'id':'R-AB-1-04','category':'structural','trigger':'voting_deadline\x20in\x20the\x20past\x20—\x20vote\x20will\x20be\x20rejected','check':a=>{const b=a['confirm']?.['voting_deadline']??a['voting_deadline_change']?.['voting_deadline'];if(b!==undefined&&b!==null&&a['current_timestamp_ms']!==undefined){if(b<a['current_timestamp_ms'])return{'id':'R-AB-1-04','level':'HIGH','category':'structural','title':'voting_deadline\x20in\x20the\x20past','description':'Deadline\x20'+b+'\x20is\x20before\x20current\x20time\x20'+a['current_timestamp_ms'],'affected_stakeholders':['voter','arbiter'],'scenario':'Setting\x20voting\x20deadline\x20to\x20an\x20already-elapsed\x20timestamp','mitigation':'Use\x20a\x20future\x20timestamp\x20(e.g.\x20now\x20+\x207\x20days\x20in\x20ms)','evidence':'deadline='+b+',\x20now='+a['current_timestamp_ms']};}return null;}},R_AB_2_01={'id':'R-AB-2-01','category':'semantic','trigger':'voting_guard\x20misconfiguration\x20—\x20dispute\x20cannot\x20be\x20resolved','check':a=>{if(a['vote']&&a['vote']['voting_guard']){if(!a['current_voting_guard_addresses']||a['current_voting_guard_addresses']['length']===0x0)return{'id':'R-AB-2-01','level':'HIGH','category':'semantic','title':'voting_guard\x20misconfiguration\x20—\x20dispute\x20cannot\x20be\x20resolved','description':'vote.voting_guard\x20provided\x20but\x20Arbitration.voting_guard\x20is\x20empty;\x20E_VOTING_GUARD_NOT_FOUND\x20will\x20abort','affected_stakeholders':['voter','arbiter','disputant'],'scenario':'voting_guard\x20misconfiguration\x20prevents\x20vote\x20—\x20dispute\x20stuck','mitigation':'Either\x20add\x20the\x20Guard\x20to\x20voting_guard\x20list\x20(354)\x20or\x20use\x20open\x20vote()\x20without\x20voting_guard','evidence':'vote.voting_guard='+a['vote']['voting_guard']};if(!a['current_voting_guard_addresses']['includes'](a['vote']['voting_guard']))return{'id':'R-AB-2-01','level':'HIGH','category':'semantic','title':'voting_guard\x20misconfiguration\x20—\x20dispute\x20cannot\x20be\x20resolved','description':'vote.voting_guard\x20'+a['vote']['voting_guard']+'\x20not\x20in\x20Arbitration.voting_guard\x20list','affected_stakeholders':['voter','arbiter','disputant'],'scenario':'Voter\x27s\x20Guard\x20not\x20registered\x20—\x20vote\x20will\x20fail\x20with\x20E_VOTING_GUARD_NOT_FOUND','mitigation':'Add\x20guard\x20'+a['vote']['voting_guard']+'\x20via\x20voting_guard_add\x20(354),\x20or\x20use\x20a\x20registered\x20guard','evidence':'provided='+a['vote']['voting_guard']+',\x20registered='+a['current_voting_guard_addresses']['join'](',')};}return null;}},R_AB_2_03={'id':'R-AB-2-03','category':'semantic','trigger':'VoteValue.GuardIdentifier\x20with\x20non-numeric\x20Guard\x20submission\x20type','check':a=>{if(a['voting_guard']&&(a['voting_guard']['op']==='add'||a['voting_guard']['op']==='set'))for(const b of a['voting_guard']['guards']){const c=b['vote_weight'];if('GuardIdentifier'in c&&c['GuardIdentifier']!==undefined){if(c['GuardIdentifier']>0xff)return{'id':'R-AB-2-03','level':'HIGH','category':'semantic','title':'GuardIdentifier\x20index\x20>\x20u8::max\x20(255)','description':'GuardIdentifier\x20'+c['GuardIdentifier']+'\x20exceeds\x20u8\x20max\x20(255)','affected_stakeholders':['owner'],'scenario':'Setting\x20GuardIdentifier\x20index\x20beyond\x20u8\x20range','mitigation':'Use\x20GuardIdentifier\x20index\x200-255','evidence':'identifier='+c['GuardIdentifier']};}if('FixedValue'in c&&c['FixedValue']!==undefined){if(c['FixedValue']>0xffffffff)return{'id':'R-AB-2-03','level':'HIGH','category':'semantic','title':'FixedValue\x20>\x20u32::max\x20(4294967295)','description':'FixedValue\x20'+c['FixedValue']+'\x20exceeds\x20u32\x20max','affected_stakeholders':['owner'],'scenario':'Setting\x20FixedValue\x20beyond\x20u32\x20range','mitigation':'Use\x20FixedValue\x200-4294967295','evidence':'fixed='+c['FixedValue']};}}return null;}},R_AB_3_01={'id':'R-AB-3-01','category':'authority','trigger':'Arbiter\x20collusion\x20—\x20single\x20voter\x20controls\x20>50%\x20of\x20total\x20weight','check':a=>{if(!a['voting_guard']||a['voting_guard']['op']!=='add'&&a['voting_guard']['op']!=='set')return null;const b=a['voting_guard']['guards'];if(b['length']<0x2)return null;const c=b['filter'](f=>'FixedValue'in f['vote_weight']&&f['vote_weight']['FixedValue']!==undefined)['map'](f=>f['vote_weight']['FixedValue']);if(c['length']===0x0)return null;const d=c['reduce']((f,g)=>f+g,0x0),e=Math['max'](...c);if(d>0x0&&e/d>0.5)return{'id':'R-AB-3-01','level':'MEDIUM','category':'authority','title':'Arbiter\x20collusion\x20risk\x20—\x20single\x20guard\x20controls\x20>50%\x20weight','description':'One\x20voting_guard\x20has\x20'+e+'\x20of\x20'+d+'\x20total\x20weight\x20('+(e/d*0x64)['toFixed'](0x1)+'%)','affected_stakeholders':['owner','disputant'],'scenario':'Weighted\x20voting\x20with\x20dominant\x20arbiter\x20—\x20can\x20single-handedly\x20decide\x20rulings','mitigation':'Distribute\x20weight\x20more\x20evenly,\x20or\x20require\x20multi-arbiter\x20consensus','evidence':'max='+e+',\x20total='+d+',\x20ratio='+(e/d*0x64)['toFixed'](0x1)+'%'};return null;}},R_AB_3_02={'id':'R-AB-3-02','category':'authority','trigger':'Permission\x20over-concentration\x20—\x20single\x20admin\x20(owner)','check':a=>{if(a['builder'])return{'id':'R-AB-3-02','level':'HIGH','category':'authority','title':'Arbitration\x20ownership\x20transfer\x20—\x20IRREVERSIBLE','description':'Transferring\x20Arbitration\x20to\x20'+a['builder']+';\x20original\x20owner\x20loses\x20all\x20control\x20permanently','affected_stakeholders':['owner'],'scenario':'Transferring\x20Arbitration\x20ownership','mitigation':'1)\x20Verify\x20new\x20owner\x20twice.\x202)\x20Confirm\x20new\x20owner\x20has\x20350-368\x20permissions\x20configured.\x203)\x20Coordinate\x20before\x20transfer.','evidence':'new_owner='+a['builder']};return null;}},R_AB_3_03={'id':'R-AB-3-03','category':'authority','trigger':'ARBITRATION_ARBITRATION\x20(359)\x20granted\x20to\x20wide\x20audience','check':a=>{if(a['arbitration']&&!a['current_voting_guard_addresses']?.['length'])return{'id':'R-AB-3-03','level':'MEDIUM','category':'authority','title':'Ruling\x20without\x20voting_guard\x20—\x20single-arbiter\x20can\x20rule\x20unchallenged','description':'make_ruling\x20(359)\x20without\x20voting_guard\x20means\x20any\x20permission\x20holder\x20can\x20unilaterally\x20decide','affected_stakeholders':['disputant','voter'],'scenario':'Single-arbiter\x20Arbitration\x20without\x20consensus\x20check','mitigation':'Configure\x20voting_guard\x20(354)\x20to\x20require\x20multi-arbiter\x20consensus\x20before\x20ruling','evidence':'voting_guard=empty'};return null;}},R_AB_4_01={'id':'R-AB-4-01','category':'lifecycle','trigger':'Invalid\x20Arb\x20status\x20transition\x20(7-state\x20flow\x20violation)','check':a=>{if(!a['current_arb_status']||!a['expected_arb_status'])return null;if(a['current_arb_status']===a['expected_arb_status'])return null;if(!isValidArbStatusTransition(a['current_arb_status'],a['expected_arb_status']))return{'id':'R-AB-4-01','level':'CRITICAL','category':'lifecycle','title':'Invalid\x20Arb\x20status\x20transition','description':a['current_arb_status']+'\x20→\x20'+a['expected_arb_status']+'\x20is\x20not\x20a\x20valid\x207-state\x20flow\x20transition','affected_stakeholders':['arbiter','disputant'],'scenario':'Attempting\x20operation\x20out\x20of\x20order\x20(e.g.\x20vote\x20before\x20confirm)','mitigation':'Follow\x20the\x207-state\x20flow:\x20Principal_confirming\x20→\x20Arbitrator_confirming\x20→\x20Voting\x20→\x20Arbitrated\x20→\x20Objectionable\x20→\x20Finished/Withdrawn','evidence':a['current_arb_status']+'\x20→\x20'+a['expected_arb_status']};return null;}},R_AB_4_02={'id':'R-AB-4-02','category':'lifecycle','trigger':'Operation\x20on\x20terminal\x20Arb\x20status\x20(Finished/Withdrawn)','check':a=>{if(!a['current_arb_status'])return null;if(isTerminalArbStatus(a['current_arb_status'])){const b=a['arb_withdraw'];if(!b&&(a['vote']||a['confirm']||a['arbitration']||a['reset']||a['feedback']))return{'id':'R-AB-4-02','level':'HIGH','category':'lifecycle','title':'Operation\x20on\x20terminal\x20Arb\x20status\x20—\x20irreversible','description':'Arb\x20is\x20in\x20terminal\x20status\x20'+a['current_arb_status']+';\x20only\x20arb_withdraw\x20is\x20allowed','affected_stakeholders':['arbiter','disputant'],'scenario':'Voting/ruling/reset\x20on\x20a\x20Finished\x20or\x20Withdrawn\x20Arb','mitigation':'Open\x20a\x20new\x20Arb\x20case\x20via\x20dispute()\x20if\x20further\x20arbitration\x20is\x20needed','evidence':'status='+a['current_arb_status']};}return null;}},R_AB_4_03={'id':'R-AB-4-03','category':'lifecycle','trigger':'reset\x20operation\x20—\x20may\x20indefinitely\x20extend\x20arbitration','check':a=>{if(!a['reset'])return null;return{'id':'R-AB-4-03','level':'MEDIUM','category':'lifecycle','title':'reset\x20operation\x20—\x20arbitration\x20lifecycle\x20extended','description':'reset\x20on\x20Arb\x20'+a['reset']['arb']+'\x20restarts\x20lifecycle\x20to\x20Principal_confirming;\x20feedback\x20required','affected_stakeholders':['arbiter','disputant'],'scenario':'Disputant\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials','mitigation':'Track\x20reset\x20count\x20—\x20consider\x20capping\x20resets\x20to\x20prevent\x20abuse','evidence':'arb='+a['reset']['arb']};}},R_AB_5_01={'id':'R-AB-5-01','category':'cross_object','trigger':'fees_alloc/fees_transfer\x20unfair\x20distribution\x20—\x20destination\x20not\x20verified','check':a=>{if(!a['fees_transfer'])return null;const b='allocation'in a['fees_transfer']['to']?'Allocation\x20'+a['fees_transfer']['to']['allocation']:'Treasury\x20'+a['fees_transfer']['to']['treasury'];return{'id':'R-AB-5-01','level':'MEDIUM','category':'cross_object','title':'fees_alloc/fees_transfer\x20—\x20verify\x20destination\x20fairness','description':'All\x20Arbitration.balance\x20will\x20be\x20transferred\x20to\x20'+b+';\x20ensure\x20destination\x20policy\x20is\x20fair\x20to\x20arbiters','affected_stakeholders':['arbiter','owner'],'scenario':'Distributing\x20arbitration\x20fees\x20without\x20verifying\x20allocation\x20rules','mitigation':'Verify\x20'+b+'\x20has\x20fair\x20distribution\x20policy;\x20consider\x20allocating\x20to\x20arbiters\x27\x20Allocation','evidence':'dest='+b+',\x20remark='+a['fees_transfer']['payment_remark']};}},R_AB_5_02={'id':'R-AB-5-02','category':'cross_object','trigger':'Dispute\x20filed\x20but\x20Order\x20op\x20permission\x20not\x20verified\x20—\x20E_NOT_OP_PERMISSION','check':a=>{if(!a['dispute'])return null;return{'id':'R-AB-5-02','level':'HIGH','category':'cross_object','title':'Order\x20op\x20permission\x20required\x20for\x20dispute','description':'dispute\x20on\x20Order\x20'+a['dispute']['order']+'\x20requires\x20order::assert_op_permission;\x20signer\x20must\x20have\x20Order\x27s\x20dispute\x20permission','affected_stakeholders':['disputant'],'scenario':'Filing\x20dispute\x20without\x20Order\x20op\x20permission','mitigation':'Ensure\x20signer\x20has\x20Order\x27s\x20dispute\x20operation\x20permission\x20(custom\x20index\x20or\x20builtin)','evidence':'order='+a['dispute']['order']};}},ALL_RULES=[R_AB_1_01,R_AB_1_02,R_AB_1_03,R_AB_1_04,R_AB_2_01,R_AB_2_03,R_AB_3_01,R_AB_3_02,R_AB_3_03,R_AB_4_01,R_AB_4_02,R_AB_4_03,R_AB_5_01,R_AB_5_02];export const ARBITRATION_RISK_VERSION='1.0.0';export function getAllRiskRules(){return[...ALL_RULES];}export function getRiskRulesCount(){return ALL_RULES['length'];}export function getRiskRulesByCategory(a){return ALL_RULES['filter'](b=>b['category']===a);}export function assessArbitrationRisks(a){const b=[];for(const f of ALL_RULES){const g=f['check'](a);if(g)b['push'](g);}const c=b['length']===0x0?'LOW':b['some'](h=>h['level']==='CRITICAL')?'CRITICAL':b['some'](h=>h['level']==='HIGH')?'HIGH':b['some'](h=>h['level']==='MEDIUM')?'MEDIUM':'LOW',d={};for(const h of b){d[h['category']]=(d[h['category']]??0x0)+0x1;}const e={};for(const i of b){for(const j of i['affected_stakeholders']){if(!e[j])e[j]=[];e[j]['push'](i['id']+':\x20'+i['mitigation']);}}return{'summary':'Assessed\x20'+b['length']+'\x20risk(s)\x20across\x20'+Object['keys'](d)['length']+'\x20categories','risks':b,'overall_risk':c,'risks_by_category':d,'stakeholder_advice':e,'needs_human_review':b['some'](k=>k['level']==='CRITICAL'||k['level']==='HIGH')};}
|
|
1
|
+
import{MAX_VOTING_GUARD_COUNT}from'@wowok/wowok';import{getJudgmentDoc,factoryRulePack}from'../config/judgment.js';import{evaluateRuleBook}from'../config/rule-engine.js';import{isTerminalArbStatus,isValidArbStatusTransition}from'./arbitration-ledger.js';const U8_MAX=0xff,U32_MAX=0xffffffff;export function arbitrationRiskFacts(a){const b=a['voting_guard'],c=!!b&&(b['op']==='add'||b['op']==='set'),d=c?b['op']==='set'?b['guards']['length']:(a['current_voting_guard_count']??0x0)+b['guards']['length']:undefined;let e,f;if(c)for(const E of b['guards']){const F=E??{},G=F['vote_weight'];if(!G||typeof G!=='object')continue;if('GuardIdentifier'in G&&G['GuardIdentifier']!==undefined&&Number(G['GuardIdentifier'])>U8_MAX){e=Number(G['GuardIdentifier']);break;}if('FixedValue'in G&&G['FixedValue']!==undefined&&Number(G['FixedValue'])>U32_MAX){f=Number(G['FixedValue']);break;}}let h=![],i,j,k;if(c){const H=b['guards'];if(H['length']>=0x2){const I=H['filter'](J=>{const K=J?.['vote_weight'];return!!K&&typeof K==='object'&&'FixedValue'in K&&K['FixedValue']!==undefined;})['map'](J=>Number(J['vote_weight']['FixedValue']));if(I['length']>0x0){const J=I['reduce']((L,M)=>L+M,0x0),K=Math['max'](...I);J>0x0&&K/J>0.5&&(h=!![],i=K,j=J,k=(K/J*0x64)['toFixed'](0x1));}}}let l=![],m,n;if(a['dispute']&&a['current_arbitration_fee']!==undefined)try{const L=BigInt(a['current_arbitration_fee']),M=a['dispute']['fee'],N=typeof M==='object'&&M!==null&&'balance'in M?BigInt(M['balance']??0x0):BigInt(0x0);m=N['toString'](),n=L['toString'](),l=N<L;}catch{}const o=!!a['dispute'],p=a['confirm']?.['voting_deadline']??a['voting_deadline_change']?.['voting_deadline'],q=a['current_timestamp_ms'],r=p!==undefined&&p!==null&&q!==undefined&&p<q,s=a['vote']?.['voting_guard'],t=a['current_voting_guard_addresses'],u=!t||t['length']===0x0,v=a['current_arb_status'],x=a['expected_arb_status'],y=!!v&&!!x&&v!==x&&!isValidArbStatusTransition(v,x),z=!!v&&isTerminalArbStatus(v),A=z&&!a['arb_withdraw']&&!!(a['vote']||a['confirm']||a['arbitration']||a['reset']||a['feedback']),B=a['reset']?String(a['reset']['arb']):undefined;let C,D;if(a['fees_transfer']){const O=a['fees_transfer']['to']??{};C='allocation'in O?'Allocation\x20'+O['allocation']:'Treasury\x20'+O['treasury'],D=String(a['fees_transfer']['payment_remark']);}return{'voting_guard_add_set':c,'voting_guard_new_count':d,'max_voting_guard_count':MAX_VOTING_GUARD_COUNT,'voting_guard_count_exceeded':d!==undefined&&d>MAX_VOTING_GUARD_COUNT,'weight_guard_identifier_over':e!==undefined,'weight_guard_identifier_value':e,'weight_fixed_over':f!==undefined,'weight_fixed_value':f,'weight_collusion_dominant':h,'weight_max':i,'weight_total':j,'weight_ratio_pct':k,'dispute_present':o,'dispute_fee_insufficient':l,'dispute_fee_provided':m,'arbitration_fee_required':n,'current_bPaused':a['current_bPaused'],'voting_deadline_selected':p??undefined,'current_timestamp_ms':q,'voting_deadline_in_past':r,'vote_voting_guard':s,'voting_guard_list_empty':u,'vote_guard_registered':!u&&s!==undefined?t['includes'](s):![],'registered_voting_guards':!u?t['join'](','):undefined,'builder':a['builder'],'arbitration_op_present':!!a['arbitration'],'current_arb_status':v,'expected_arb_status':x,'arb_transition_invalid':y,'arb_status_terminal':z,'arb_terminal_op_blocked':A,'reset_present':!!a['reset'],'reset_arb':B,'fees_transfer_present':!!a['fees_transfer'],'fees_transfer_dest':C,'fees_transfer_remark':D,'dispute_order':a['dispute']?String(a['dispute']['order']):undefined};}function arbitrationRuleBook(){const a=getJudgmentDoc()['rules']['domains']['arbitration'];if(!a)throw new Error('factory\x20rule\x20pack\x20\x27arbitration\x27\x20missing\x20—\x20broken\x20installation');return a['rules'];}function findingToArbitrationRisk(a){return{'id':a['rule_id'],'level':a['level'],'category':a['dimension']??'structural','title':a['title'],'description':a['description'],'affected_stakeholders':a['stakeholders']??[],'scenario':a['scenario']??'','mitigation':a['mitigation']??'','evidence':a['evidence'],...a['exposure']!=null?{'exposure':a['exposure']}:{}};}export const ARBITRATION_RISK_VERSION='1.0.0';export function getAllRiskRules(){const a=factoryRulePack('arbitration');if(!a)return[];return a['rules']['map'](b=>({'id':b['rule_id'],'category':b['dimension']??'structural','trigger':b['trigger']??'','check':c=>{const {findings:d}=evaluateRuleBook([b],arbitrationRiskFacts(c));return d['length']>0x0?findingToArbitrationRisk(d[0x0]):null;}}));}export function assessArbitrationRisks(a){const {findings:b}=evaluateRuleBook(arbitrationRuleBook(),arbitrationRiskFacts(a)),c=b['map'](findingToArbitrationRisk),d=c['length']===0x0?'low':c['some'](g=>g['level']==='critical')?'critical':c['some'](g=>g['level']==='high')?'high':c['some'](g=>g['level']==='medium')?'medium':'low',e={};for(const g of c){e[g['category']]=(e[g['category']]??0x0)+0x1;}const f={};for(const h of c){for(const i of h['affected_stakeholders']){if(!f[i])f[i]=[];f[i]['push'](h['id']+':\x20'+h['mitigation']);}}return{'summary':'Assessed\x20'+c['length']+'\x20risk(s)\x20across\x20'+Object['keys'](e)['length']+'\x20categories','risks':c,'overall_risk':d,'risks_by_category':e,'stakeholder_advice':f,'needs_human_review':c['some'](j=>j['level']==='critical'||j['level']==='high')};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const ARBITRATION_TEMPLATES=[{'id':'T-AB-01','name':'Single-arbiter\x20quick\x20ruling','description':'Simplest\x20Arbitration:\x20one\x20arbiter\x20makes\x20all\x20rulings.\x20voting_guard\x20empty\x20(open\x20vote,\x20but\x20only\x20arbiter\x20has\x20358\x20perm).\x20Suitable\x20for\x20small-scale\x20/\x20fast\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_ruling','arbitration_confirm'],'industry_tags':['retail','freelance','small_business'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner\x20(also\x20admin)','required':!![]},{'name':'arbiter_address','type':'address','description':'Single\x20arbiter\x20address\x20(gets\x20ARBITRATION_VOTE=358\x20+\x20ARBITRATION_ARBITRATION=359)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type\x20for\x20arbitration\x20fee\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20application\x20fee\x20(u64,\x20in\x20Coin\x20base\x20units)','required':![],'default':0x0},{'name':'arbitration_name','type':'string','description':'Local\x20name\x20for\x20the\x20Arbitration\x20object','required':![]}],'body':a=>({'object':{'name':a['arbitration_name']??'single_arb_arbitration','type_parameter':a['coin_type'],'permission':{'name':(a['arbitration_name']??'single_arb')+'_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![]}),'notes':['voting_guard\x20remains\x20empty\x20→\x20vote()\x20uses\x20open\x20vote\x20(1\x20person\x201\x20vote)','Only\x20arbiter_address\x20should\x20be\x20granted\x20ARBITRATION_VOTE\x20(358)\x20+\x20ARBITRATION_ARBITRATION\x20(359)','Fast\x20ruling:\x20arbiter\x20confirms\x20materials\x20→\x20votes\x20→\x20makes\x20ruling\x20in\x20one\x20session','Not\x20suitable\x20for\x20high-value\x20disputes\x20(no\x20consensus\x20check)']},{'id':'T-AB-02','name':'Multi-arbiter\x20voting\x20(weighted)','description':'Multiple\x20arbiters\x20vote\x20with\x20weighted\x20voting_guard.\x20Each\x20arbiter\x27s\x20Guard\x20has\x20FixedValue\x20weight.\x20Ruling\x20requires\x20majority\x20weight.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['governance','dao','committee'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'arbiter_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20arbiter\x20(will\x20be\x20added\x20to\x20voting_guard)','required':!![]},{'name':'vote_weights','type':'string[]','description':'FixedValue\x20weights\x20for\x20each\x20arbiter\x20(parallel\x20to\x20arbiter_guards)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee','required':![],'default':0x0}],'body':a=>{const b=a['arbiter_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['vote_weights'][d]??0x1)}}));return{'object':{'name':'weighted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'weighted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![],'voting_guard':{'op':'set','guards':b}};},'notes':['voting_guard\x20non-empty\x20→\x20vote\x20MUST\x20use\x20vote_with_voting_guard','Each\x20arbiter\x27s\x20Guard\x20must\x20be\x20a\x20valid\x20Guard\x20object\x20they\x20can\x20submit\x20Passport\x20for','Consider:\x20max(arbiter_weights)\x20/\x20total_weights\x20<\x200.5\x20to\x20avoid\x20collusion\x20(see\x20R-AB-3-01)','Max\x2050\x20voting_guards\x20(MAX_VOTING_GUARD_COUNT)']},{'id':'T-AB-03','name':'Public\x20voting\x20arbitration','description':'voting_guard\x20allows\x20public\x20to\x20vote\x20(anyone\x20with\x20a\x20Guard\x20can\x20vote).\x20Suitable\x20for\x20community-driven\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['community','public_goods','social'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'public_guard','type':'address','description':'Guard\x20address\x20anyone\x20can\x20submit\x20Passport\x20for\x20(e.g.\x20based\x20on\x20account\x20existence)','required':!![]},{'name':'vote_weight','type':'number','description':'FixedValue\x20weight\x20per\x20public\x20voter\x20(e.g.\x201)','required':![],'default':0x1},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]}],'body':a=>({'object':{'name':'public_arbitration','type_parameter':a['coin_type'],'permission':{'name':'public_arb_permission'}},'description':a['description'],'fee':'0','pause':![],'voting_guard':{'op':'set','guards':[{'guard':a['public_guard'],'vote_weight':{'FixedValue':Number(a['vote_weight']??0x1)}}]}}),'notes':['Public\x20voting:\x20anyone\x20holding\x20the\x20public_guard\x20can\x20vote','Consider\x20using\x20GuardIdentifier\x20(dynamic\x20weight)\x20for\x20token-weighted\x20voting','Low/zero\x20fee\x20to\x20encourage\x20participation\x20—\x20but\x20watch\x20for\x20spam\x20disputes','Suitable\x20for\x20community\x20moderation,\x20content\x20disputes,\x20public\x20goods\x20arbitration']},{'id':'T-AB-04','name':'Scope-restricted\x20arbitration','description':'usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed.\x20Only\x20users\x20passing\x20the\x20Guard\x20can\x20file\x20disputes.\x20Suitable\x20for\x20verified-merchant\x20/\x20KYC\x20arbitration.','applicable_scenes':['arbitration_create','arbitration_usage_guard_config','arbitration_dispute'],'industry_tags':['kyc','verified_merchant','enterprise'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'usage_guard_address','type':'address','description':'Guard\x20address\x20that\x20filters\x20who\x20can\x20file\x20disputes\x20(KYC/verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20address\x20(single\x20arbiter\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(higher\x20to\x20deter\x20spam)','required':![],'default':0x3b9aca00}],'body':a=>({'object':{'name':'restricted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'restricted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x3b9aca00),'pause':![],'usage_guard':a['usage_guard_address']}),'notes':['usage_guard\x20set\x20→\x20dispute\x20MUST\x20use\x20dispute_with_passport\x20variant','Guard\x20verifies:\x20KYC\x20/\x20membership\x20/\x20token-balance\x20/\x20etc.','Higher\x20fee\x20(default\x201\x20WOW)\x20to\x20deter\x20spam\x20from\x20verified\x20users','Arbiter\x20should\x20also\x20be\x20Guard-verified\x20for\x20consistency']},{'id':'T-AB-05','name':'Arbitration\x20committee','description':'Multi-arbiter\x20committee\x20with\x20weighted\x20voting\x20+\x20usage_guard.\x20Most\x20controlled\x20configuration\x20—\x20restricted\x20dispute\x20filing\x20+\x20weighted\x20voting\x20+\x20multi-arbiter\x20ruling.','applicable_scenes':['arbitration_create','arbitration_voting_guard_config','arbitration_usage_guard_config','arbitration_ruling'],'industry_tags':['enterprise','legal','high_value'],'params':[{'name':'owner_address','type':'address','description':'Committee\x20owner','required':!![]},{'name':'committee_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20committee\x20member','required':!![]},{'name':'member_weights','type':'string[]','description':'Vote\x20weights\x20for\x20each\x20member\x20(parallel\x20to\x20committee_guards)','required':!![]},{'name':'membership_guard','type':'address','description':'usage_guard\x20for\x20dispute\x20filing\x20(membership\x20verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(high\x20for\x20high-value\x20disputes)','required':![],'default':0x2540be400}],'body':a=>{const b=a['committee_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['member_weights'][d]??0x1)}}));return{'object':{'name':'committee_arbitration','type_parameter':a['coin_type'],'permission':{'name':'committee_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x2540be400),'pause':![],'voting_guard':{'op':'set','guards':b},'usage_guard':a['membership_guard']};},'notes':['Most\x20restrictive\x20config:\x20weighted\x20voting\x20+\x20restricted\x20filing','Suitable\x20for\x20high-value\x20B2B\x20disputes,\x20legal\x20arbitration,\x20enterprise\x20SLA\x20enforcement','Committee\x20members\x20should\x20have\x20clear\x20escalation\x20/\x20tiebreaker\x20rules','All\x20disputes\x20require\x20Passport\x20(both\x20filing\x20and\x20voting)']},{'id':'T-AB-06','name':'Fee-split\x20arbitration','description':'Pre-configured\x20fees_alloc\x20/\x20fees_transfer\x20destination.\x20After\x20arb_withdraw,\x20fees\x20are\x20automatically\x20distributed\x20to\x20Allocation\x20(for\x20arbiter\x20compensation).','applicable_scenes':['arbitration_create','arbitration_arb_withdraw','arbitration_fees_alloc'],'industry_tags':['marketplace','service','platform'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'allocation_address','type':'address','description':'Allocation\x20object\x20address\x20for\x20fee\x20distribution\x20to\x20arbiters','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20(single\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(will\x20be\x20split\x20to\x20arbiters\x20via\x20Allocation)','required':![],'default':0x12a05f200}],'body':a=>({'object':{'name':'feesplit_arbitration','type_parameter':a['coin_type'],'permission':{'name':'feesplit_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x12a05f200),'pause':![]}),'notes':['Fee-split\x20is\x20a\x202-step\x20process:\x20arb_withdraw\x20→\x20fees_transfer','arb_withdraw\x20(364)\x20moves\x20fees\x20from\x20Arb\x20→\x20Arbitration.balance','fees_alloc\x20(365)\x20or\x20fees_transfer\x20(366)\x20moves\x20fees\x20→\x20Allocation/Treasury','Allocation\x20policy\x20determines\x20how\x20fees\x20are\x20split\x20among\x20arbiters','Payment\x20object\x20is\x20created\x20for\x20bookkeeping\x20(payment_remark\x20+\x20payment_index)']},{'id':'T-AB-07','name':'Appeal\x20arbitration\x20(reset\x20flow)','description':'Template\x20for\x20reset\x20operation\x20—\x20disputant\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials.\x20Restarts\x20Arb\x20lifecycle\x20from\x20Principal_confirming.','applicable_scenes':['arbitration_reset','arbitration_ruling'],'industry_tags':['legal','appeal','high_value'],'params':[{'name':'arbitration_address','type':'address','description':'Existing\x20Arbitration\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arb\x20object\x20address\x20to\x20reset\x20(must\x20be\x20in\x20Objectionable/Arbitrated\x20status)','required':!![]},{'name':'reset_feedback','type':'string','description':'Feedback\x20explaining\x20why\x20disputant\x20objects\x20to\x20the\x20ruling','required':!![]}],'body':a=>({'object':a['arbitration_address'],'reset':{'arb':a['arb_address'],'feedback':a['reset_feedback']}}),'notes':['Precondition:\x20Arb\x20must\x20be\x20in\x20Objectionable\x20(4)\x20or\x20Arbitrated\x20(3)\x20status','Post-condition:\x20Arb\x20status\x20→\x20Principal_confirming\x20(0),\x20lifecycle\x20restarts','Original\x20ruling\x20is\x20invalidated\x20—\x20new\x20voting\x20+\x20ruling\x20required','Consider\x20capping\x20reset\x20count\x20to\x20prevent\x20infinite\x20appeals','reset\x20feedback\x20is\x20permanent\x20—\x20recorded\x20on-chain\x20for\x20audit\x20trail']}];export const ARBITRATION_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...ARBITRATION_TEMPLATES];}export function getTemplateById(a){return ARBITRATION_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ARBITRATION_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ARBITRATION_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return ARBITRATION_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
|
|
1
|
+
export const ARBITRATION_TEMPLATES=[{'id':'T-AB-01','name':'Single-arbiter\x20quick\x20ruling','description':'Simplest\x20Arbitration:\x20one\x20arbiter\x20makes\x20all\x20rulings.\x20voting_guard\x20empty\x20(open\x20vote,\x20but\x20only\x20arbiter\x20has\x20358\x20perm).\x20Suitable\x20for\x20small-scale\x20/\x20fast\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_ruling','arbitration_confirm'],'industry_tags':['retail','freelance','small_business'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner\x20(also\x20admin)','required':!![]},{'name':'arbiter_address','type':'address','description':'Single\x20arbiter\x20address\x20(gets\x20ARBITRATION_VOTE=358\x20+\x20ARBITRATION_ARBITRATION=359)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type\x20for\x20arbitration\x20fee\x20(e.g.\x200x2::wow::WOW)','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20application\x20fee\x20(u64,\x20in\x20Coin\x20base\x20units)','required':![],'default':0x0},{'name':'arbitration_name','type':'string','description':'Local\x20name\x20for\x20the\x20Arbitration\x20object','required':![]}],'body':a=>({'object':{'name':a['arbitration_name']??'single_arb_arbitration','type_parameter':a['coin_type'],'permission':{'name':(a['arbitration_name']??'single_arb')+'_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![]}),'notes':['voting_guard\x20remains\x20empty\x20→\x20vote()\x20uses\x20open\x20vote\x20(1\x20person\x201\x20vote)','Only\x20arbiter_address\x20should\x20be\x20granted\x20ARBITRATION_VOTE\x20(358)\x20+\x20ARBITRATION_ARBITRATION\x20(359)','Fast\x20ruling:\x20arbiter\x20confirms\x20materials\x20→\x20votes\x20→\x20makes\x20ruling\x20in\x20one\x20session','Not\x20suitable\x20for\x20high-value\x20disputes\x20(no\x20consensus\x20check)']},{'id':'T-AB-02','name':'Multi-arbiter\x20voting\x20(weighted)','description':'Multiple\x20arbiters\x20vote\x20with\x20weighted\x20voting_guard.\x20Each\x20arbiter\x27s\x20Guard\x20has\x20FixedValue\x20weight.\x20Ruling\x20requires\x20majority\x20weight.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['governance','dao','committee'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'arbiter_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20arbiter\x20(will\x20be\x20added\x20to\x20voting_guard)','required':!![]},{'name':'vote_weights','type':'string[]','description':'FixedValue\x20weights\x20for\x20each\x20arbiter\x20(parallel\x20to\x20arbiter_guards)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee','required':![],'default':0x0}],'body':a=>{const b=a['arbiter_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['vote_weights'][d]??0x1)}}));return{'object':{'name':'weighted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'weighted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x0),'pause':![],'voting_guard':{'op':'set','guards':b}};},'notes':['voting_guard\x20non-empty\x20→\x20votes\x20MUST\x20be\x20submitted\x20via\x20the\x20Passport-verified\x20voting\x20path','Each\x20arbiter\x27s\x20Guard\x20must\x20be\x20a\x20valid\x20Guard\x20object\x20they\x20can\x20submit\x20Passport\x20for','Consider:\x20max(arbiter_weights)\x20/\x20total_weights\x20<\x200.5\x20to\x20avoid\x20collusion\x20(see\x20R-AB-3-01)','Max\x2050\x20voting_guards\x20(MAX_VOTING_GUARD_COUNT)']},{'id':'T-AB-03','name':'Public\x20voting\x20arbitration','description':'voting_guard\x20allows\x20public\x20to\x20vote\x20(anyone\x20with\x20a\x20Guard\x20can\x20vote).\x20Suitable\x20for\x20community-driven\x20dispute\x20resolution.','applicable_scenes':['arbitration_create','arbitration_vote','arbitration_voting_guard_config'],'industry_tags':['community','public_goods','social'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'public_guard','type':'address','description':'Guard\x20address\x20anyone\x20can\x20submit\x20Passport\x20for\x20(e.g.\x20based\x20on\x20account\x20existence)','required':!![]},{'name':'vote_weight','type':'number','description':'FixedValue\x20weight\x20per\x20public\x20voter\x20(e.g.\x201)','required':![],'default':0x1},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]}],'body':a=>({'object':{'name':'public_arbitration','type_parameter':a['coin_type'],'permission':{'name':'public_arb_permission'}},'description':a['description'],'fee':'0','pause':![],'voting_guard':{'op':'set','guards':[{'guard':a['public_guard'],'vote_weight':{'FixedValue':Number(a['vote_weight']??0x1)}}]}}),'notes':['Public\x20voting:\x20anyone\x20holding\x20the\x20public_guard\x20can\x20vote','Consider\x20using\x20GuardIdentifier\x20(dynamic\x20weight)\x20for\x20token-weighted\x20voting','Low/zero\x20fee\x20to\x20encourage\x20participation\x20—\x20but\x20watch\x20for\x20spam\x20disputes','Suitable\x20for\x20community\x20moderation,\x20content\x20disputes,\x20public\x20goods\x20arbitration']},{'id':'T-AB-04','name':'Scope-restricted\x20arbitration','description':'usage_guard\x20filters\x20which\x20disputes\x20can\x20be\x20filed.\x20Only\x20users\x20passing\x20the\x20Guard\x20can\x20file\x20disputes.\x20Suitable\x20for\x20verified-merchant\x20/\x20KYC\x20arbitration.','applicable_scenes':['arbitration_create','arbitration_usage_guard_config','arbitration_dispute'],'industry_tags':['kyc','verified_merchant','enterprise'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'usage_guard_address','type':'address','description':'Guard\x20address\x20that\x20filters\x20who\x20can\x20file\x20disputes\x20(KYC/verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20address\x20(single\x20arbiter\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(higher\x20to\x20deter\x20spam)','required':![],'default':0x3b9aca00}],'body':a=>({'object':{'name':'restricted_arbitration','type_parameter':a['coin_type'],'permission':{'name':'restricted_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x3b9aca00),'pause':![],'usage_guard':a['usage_guard_address']}),'notes':['usage_guard\x20set\x20→\x20disputes\x20MUST\x20be\x20filed\x20via\x20the\x20Passport-verified\x20dispute\x20variant','Guard\x20verifies:\x20KYC\x20/\x20membership\x20/\x20token-balance\x20/\x20etc.','Higher\x20fee\x20(default\x201\x20WOW)\x20to\x20deter\x20spam\x20from\x20verified\x20users','Arbiter\x20should\x20also\x20be\x20Guard-verified\x20for\x20consistency']},{'id':'T-AB-05','name':'Arbitration\x20committee','description':'Multi-arbiter\x20committee\x20with\x20weighted\x20voting\x20+\x20usage_guard.\x20Most\x20controlled\x20configuration\x20—\x20restricted\x20dispute\x20filing\x20+\x20weighted\x20voting\x20+\x20multi-arbiter\x20ruling.','applicable_scenes':['arbitration_create','arbitration_voting_guard_config','arbitration_usage_guard_config','arbitration_ruling'],'industry_tags':['enterprise','legal','high_value'],'params':[{'name':'owner_address','type':'address','description':'Committee\x20owner','required':!![]},{'name':'committee_guards','type':'string[]','description':'Guard\x20addresses\x20for\x20each\x20committee\x20member','required':!![]},{'name':'member_weights','type':'string[]','description':'Vote\x20weights\x20for\x20each\x20member\x20(parallel\x20to\x20committee_guards)','required':!![]},{'name':'membership_guard','type':'address','description':'usage_guard\x20for\x20dispute\x20filing\x20(membership\x20verification)','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(high\x20for\x20high-value\x20disputes)','required':![],'default':0x2540be400}],'body':a=>{const b=a['committee_guards']['map']((c,d)=>({'guard':c,'vote_weight':{'FixedValue':Number(a['member_weights'][d]??0x1)}}));return{'object':{'name':'committee_arbitration','type_parameter':a['coin_type'],'permission':{'name':'committee_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x2540be400),'pause':![],'voting_guard':{'op':'set','guards':b},'usage_guard':a['membership_guard']};},'notes':['Most\x20restrictive\x20config:\x20weighted\x20voting\x20+\x20restricted\x20filing','Suitable\x20for\x20high-value\x20B2B\x20disputes,\x20legal\x20arbitration,\x20enterprise\x20SLA\x20enforcement','Committee\x20members\x20should\x20have\x20clear\x20escalation\x20/\x20tiebreaker\x20rules','All\x20disputes\x20require\x20Passport\x20(both\x20filing\x20and\x20voting)']},{'id':'T-AB-06','name':'Fee-split\x20arbitration','description':'Pre-configured\x20fee-distribution\x20destination.\x20After\x20the\x20fee\x20withdrawal\x20(364),\x20fees\x20are\x20automatically\x20distributed\x20to\x20the\x20Allocation\x20(for\x20arbiter\x20compensation).','applicable_scenes':['arbitration_create','arbitration_arb_withdraw','arbitration_fees_alloc'],'industry_tags':['marketplace','service','platform'],'params':[{'name':'owner_address','type':'address','description':'Arbitration\x20owner','required':!![]},{'name':'allocation_address','type':'address','description':'Allocation\x20object\x20address\x20for\x20fee\x20distribution\x20to\x20arbiters','required':!![]},{'name':'coin_type','type':'string','description':'Coin\x20type','required':!![]},{'name':'description','type':'string','description':'Arbitration\x20description','required':!![]},{'name':'arbiter_address','type':'address','description':'Arbiter\x20(single\x20for\x20simplicity)','required':!![]},{'name':'fee_amount','type':'number','description':'Dispute\x20fee\x20(will\x20be\x20split\x20to\x20arbiters\x20via\x20Allocation)','required':![],'default':0x12a05f200}],'body':a=>({'object':{'name':'feesplit_arbitration','type_parameter':a['coin_type'],'permission':{'name':'feesplit_arb_permission'}},'description':a['description'],'fee':String(a['fee_amount']??0x12a05f200),'pause':![]}),'notes':['Fee-split\x20is\x20a\x202-step\x20process:\x20withdraw\x20fees\x20from\x20the\x20Arb\x20object\x20(364)\x20→\x20transfer\x20them\x20out\x20of\x20the\x20Arbitration\x20balance\x20(365/366)','Fee\x20withdrawal\x20(364)\x20moves\x20fees\x20from\x20the\x20Arb\x20object\x20into\x20the\x20Arbitration\x20balance','Fee\x20distribution\x20(365)\x20or\x20the\x20balance\x20transfer\x20(366)\x20moves\x20fees\x20to\x20the\x20Allocation/Treasury','Allocation\x20policy\x20determines\x20how\x20fees\x20are\x20split\x20among\x20arbiters','Payment\x20object\x20is\x20created\x20for\x20bookkeeping\x20(payment_remark\x20+\x20payment_index)']},{'id':'T-AB-07','name':'Appeal\x20arbitration\x20(reset\x20flow)','description':'Template\x20for\x20reset\x20operation\x20—\x20disputant\x20objects\x20to\x20ruling\x20and\x20resubmits\x20materials.\x20Restarts\x20Arb\x20lifecycle\x20from\x20Principal_confirming.','applicable_scenes':['arbitration_reset','arbitration_ruling'],'industry_tags':['legal','appeal','high_value'],'params':[{'name':'arbitration_object','type':'address','description':'Existing\x20Arbitration\x20object\x20address','required':!![]},{'name':'arb_address','type':'address','description':'Arb\x20object\x20address\x20to\x20reset\x20(must\x20be\x20in\x20Objectionable/Arbitrated\x20status)','required':!![]},{'name':'reset_feedback','type':'string','description':'Feedback\x20explaining\x20why\x20disputant\x20objects\x20to\x20the\x20ruling','required':!![]}],'body':a=>({'object':a['arbitration_object'],'reset':{'arb':a['arb_address'],'feedback':a['reset_feedback']}}),'notes':['Precondition:\x20Arb\x20must\x20be\x20in\x20Objectionable\x20(4)\x20or\x20Arbitrated\x20(3)\x20status','Post-condition:\x20Arb\x20status\x20→\x20Principal_confirming\x20(0),\x20lifecycle\x20restarts','Original\x20ruling\x20is\x20invalidated\x20—\x20new\x20voting\x20+\x20ruling\x20required','Consider\x20capping\x20reset\x20count\x20to\x20prevent\x20infinite\x20appeals','reset\x20feedback\x20is\x20permanent\x20—\x20recorded\x20on-chain\x20for\x20audit\x20trail']}];export const ARBITRATION_TEMPLATES_VERSION='1.0.0';export function getAllTemplates(){return[...ARBITRATION_TEMPLATES];}export function getTemplateById(a){return ARBITRATION_TEMPLATES['find'](b=>b['id']===a);}export function getTemplatesByScene(a){return ARBITRATION_TEMPLATES['filter'](b=>b['applicable_scenes']['includes'](a));}export function getTemplatesByIndustry(a){return ARBITRATION_TEMPLATES['filter'](b=>b['industry_tags']['includes'](a)||b['industry_tags']['includes']('universal'));}export function suggestTemplateForScene(a){const b=getTemplatesByScene(a);return b['length']>0x0?b[0x0]:undefined;}export function listTemplates(){return ARBITRATION_TEMPLATES['map'](a=>({'id':a['id'],'name':a['name'],'description':a['description'],'scenes':a['applicable_scenes']}));}export function fillTemplate(a,b){const c=getTemplateById(a);if(!c)return{'ok':![],'error':'Template\x20'+a+'\x20not\x20found'};for(const d of c['params']){if(d['required']&&!(d['name']in b))return{'ok':![],'error':'Missing\x20required\x20param:\x20'+d['name']};}return{'ok':!![],'body':c['body'](b)};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{readFileSync,writeFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{dirname,join}from'node:path';import{lintGuard}from'../guard-lint.js';const CASES={'whitelist':{'description':'Whitelist\x20purchase\x20validation','table':[{'identifier':0x0,'b_submission':![],'value_type':'VecAddress','value':['0xabc','0xdef'],'name':'Authorized\x20purchase\x20whitelist'}],'root':{'type':'vec_contains_address','nodes':[{'type':'identifier','identifier':0x0},{'type':'context','context':'Signer'}]}},'allocator_identifier':{'description':'Allocator\x20selector','table':[{'identifier':0x0,'b_submission':![],'value_type':'Address','value':'0xabc','name':'selector'}],'root':{'type':'identifier','identifier':0x0},'binding_hint':{'host_object':'Service','binding_field':'order_allocators'}}};async function runCase(a){const b=await lintGuard(a,{'auto_fix':![]});return{'risk_diagnostics':b['diagnostics']['filter'](c=>c['source']==='risk')['map'](c=>({'code':c['code'],'severity':c['severity'],'path':c['location']['path']})),'risk_assessment':(b['risk_assessment']?.['risks']??[])['map'](c=>({'id':c['id'],'level':c['level']})),'summary':{'errors':b['summary']['errors'],'warnings':b['summary']['warnings'],'infos':b['summary']['infos'],'ready':b['summary']['ready']}};}const here=dirname(fileURLToPath(import.meta.url)),SNAPSHOT=join(here,'guard-lint-baseline.json');describe('guard-lint\x20risk\x20section\x20—\x20pre-migration\x20baseline',()=>{it('matches\x20the\x20committed\x20snapshot\x20(regenerate\x20only\x20with\x20UPDATE_RISK_BASELINE=1)',async()=>{const a={};for(const [c,d]of Object['entries'](CASES)){a[c]=await runCase(d);}if(process['env']['UPDATE_RISK_BASELINE']==='1'){writeFileSync(SNAPSHOT,JSON['stringify'](a,null,0x2)+'\x0a','utf8');return;}const b=JSON['parse'](readFileSync(SNAPSHOT,'utf8'));expect(a)['toEqual'](b);}),it('every\x20case\x20reaches\x20the\x20risk\x20section\x20(at\x20least\x20one\x20risk\x20diagnostic)',async()=>{for(const [a,b]of Object['entries'](CASES)){const c=await runCase(b);expect(c['risk_diagnostics']['length'],a+':\x20risk\x20section\x20silent')['toBeGreaterThan'](0x0);}});});
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"description": "Judgment baselines — the factory defaults for every judgment this process makes. Sections: evaluation (scoring standards), game (strategy-game parameters), match (demand↔service matching), monitor (order-monitor thresholds), mode (mode-evaluator posture), scorecard (strategy scorecard tuning), rules (declarative rule book — factory rule packs load from knowledge/baselines/rules/<domain>.json into this namespace and merge with your overrides at rule granularity). Layering: this factory document < your user document (<config dir>/judgment-baselines.json, key-granularity merge — it can replace values or disable rules, never delete these entries) < session runtime overrides < persona < explicit request. The user document hot-reloads on every save; an invalid edit is rejected with the last good version kept in force (see config_operation judgment_list). Example patch (any subset, deep-merged at key granularity, unknown keys rejected): {\"evaluation\": {\"severity_deduction\": {\"critical\": 40}}, \"monitor\": {\"thresholds\": {\"messenger_timeout_hours\": 12}}, \"match\": {\"top_n\": 3}}.",
|
|
4
|
+
"evaluation": {
|
|
5
|
+
"comment": "Graph service evaluation standards. Weights are relative; the aggregate renormalizes over the enabled rules. An account persona may override per-dimension weights at runtime (persona layer 'evaluation.weights'), and an explicit request injection wins over persona.",
|
|
6
|
+
"weights": {
|
|
7
|
+
"trust_arbitration": 20,
|
|
8
|
+
"trust_reviews": 35,
|
|
9
|
+
"trust_fulfillment": 20,
|
|
10
|
+
"trust_fund_safety": 15,
|
|
11
|
+
"trust_transparency": 10,
|
|
12
|
+
"risk_workflow": 35,
|
|
13
|
+
"risk_fund": 25,
|
|
14
|
+
"risk_trust": 20,
|
|
15
|
+
"risk_behavior": 20
|
|
16
|
+
},
|
|
17
|
+
"dimensions": {
|
|
18
|
+
"trust_arbitration": {
|
|
19
|
+
"label": "Arbitration",
|
|
20
|
+
"description": "Binding arbitration coverage of the service's payment paths."
|
|
21
|
+
},
|
|
22
|
+
"trust_reviews": {
|
|
23
|
+
"label": "Reputation",
|
|
24
|
+
"description": "Verified review votes on the service's review window."
|
|
25
|
+
},
|
|
26
|
+
"trust_fulfillment": {
|
|
27
|
+
"label": "Fulfillment",
|
|
28
|
+
"description": "Observed orders and a verifiable machine workflow (terminal set)."
|
|
29
|
+
},
|
|
30
|
+
"trust_fund_safety": {
|
|
31
|
+
"label": "Fund safety",
|
|
32
|
+
"description": "Compensation fund vs 3x windowed order volume (statutory ceiling)."
|
|
33
|
+
},
|
|
34
|
+
"trust_transparency": {
|
|
35
|
+
"label": "Transparency",
|
|
36
|
+
"description": "Snapshot self-description, lock duration and published flag."
|
|
37
|
+
},
|
|
38
|
+
"risk_workflow": {
|
|
39
|
+
"label": "Workflow risk",
|
|
40
|
+
"description": "Structural analyzer findings on the machine workflow."
|
|
41
|
+
},
|
|
42
|
+
"risk_fund": {
|
|
43
|
+
"label": "Fund risk",
|
|
44
|
+
"description": "Structural analyzer findings on fund paths and payouts."
|
|
45
|
+
},
|
|
46
|
+
"risk_trust": {
|
|
47
|
+
"label": "Trust-surface risk",
|
|
48
|
+
"description": "Structural analyzer findings on the trust surface (arb/review/fund hooks)."
|
|
49
|
+
},
|
|
50
|
+
"risk_behavior": {
|
|
51
|
+
"label": "Behavior risk",
|
|
52
|
+
"description": "Structural analyzer findings on operator behavior controls."
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"severity_deduction": {
|
|
56
|
+
"critical": 50,
|
|
57
|
+
"high": 25,
|
|
58
|
+
"medium": 10,
|
|
59
|
+
"low": 5,
|
|
60
|
+
"info": 0
|
|
61
|
+
},
|
|
62
|
+
"level_bands": [
|
|
63
|
+
{ "min": 85, "level": "low" },
|
|
64
|
+
{ "min": 70, "level": "medium_low" },
|
|
65
|
+
{ "min": 50, "level": "medium_high" },
|
|
66
|
+
{ "min": 0, "level": "high" }
|
|
67
|
+
],
|
|
68
|
+
"grade_words": {
|
|
69
|
+
"comment": "Readable per-side grade rendered from the score. trust: higher score = better service; risk: higher score = fewer findings (safer).",
|
|
70
|
+
"trust": [
|
|
71
|
+
{ "min": 70, "word": "strong" },
|
|
72
|
+
{ "min": 50, "word": "fair" },
|
|
73
|
+
{ "min": 0, "word": "weak" }
|
|
74
|
+
],
|
|
75
|
+
"risk": [
|
|
76
|
+
{ "min": 80, "word": "low risk" },
|
|
77
|
+
{ "min": 50, "word": "moderate risk" },
|
|
78
|
+
{ "min": 0, "word": "high risk" }
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"game": {
|
|
83
|
+
"comment": "Strategy-game parameters: role value anchors, appetite multipliers and scoring constants for the gain/risk consistency evaluation (net = base + per_gain*gains − per_risk*risks*sensitivity, clamped 0-100). Keyword rules re-anchor a role's interests from a persona's natural-language red lines (Q5 dictionary — users retune keywords/effects, never invent outcome vocabulary).",
|
|
84
|
+
"outcome_semantics": {
|
|
85
|
+
"completion": ["fund_released_to_merchant", "refund_leverage_given_up"],
|
|
86
|
+
"refund": ["fund_returned_to_buyer", "arbitration_review_triggered"],
|
|
87
|
+
"advance": ["node_advanced"]
|
|
88
|
+
},
|
|
89
|
+
"role_interests": {
|
|
90
|
+
"customer": {
|
|
91
|
+
"prefer": ["fund_returned_to_buyer"],
|
|
92
|
+
"avoid": ["fund_released_to_merchant", "refund_leverage_given_up"],
|
|
93
|
+
"sensitivity": 1.0
|
|
94
|
+
},
|
|
95
|
+
"merchant": {
|
|
96
|
+
"prefer": ["fund_released_to_merchant"],
|
|
97
|
+
"avoid": ["fund_returned_to_buyer", "arbitration_review_triggered"],
|
|
98
|
+
"sensitivity": 1.0
|
|
99
|
+
},
|
|
100
|
+
"demander": { "prefer": ["node_advanced"], "avoid": [], "sensitivity": 1.0 },
|
|
101
|
+
"collaborator": { "prefer": ["node_advanced"], "avoid": [], "sensitivity": 1.0 },
|
|
102
|
+
"supplier": {
|
|
103
|
+
"prefer": ["fund_released_to_merchant", "node_advanced"],
|
|
104
|
+
"avoid": ["fund_returned_to_buyer"],
|
|
105
|
+
"sensitivity": 1.0
|
|
106
|
+
},
|
|
107
|
+
"prospect": {
|
|
108
|
+
"prefer": ["fund_returned_to_buyer"],
|
|
109
|
+
"avoid": ["fund_released_to_merchant", "arbitration_review_triggered", "refund_leverage_given_up"],
|
|
110
|
+
"sensitivity": 1.0
|
|
111
|
+
},
|
|
112
|
+
"arbitrator": { "prefer": [], "avoid": ["arbitration_review_triggered"], "sensitivity": 1.0 },
|
|
113
|
+
"neutral": { "prefer": [], "avoid": [], "sensitivity": 1.0 },
|
|
114
|
+
"system": { "prefer": [], "avoid": [], "sensitivity": 1.0 }
|
|
115
|
+
},
|
|
116
|
+
"appetite_multipliers": { "conservative": 1.5, "balanced": 1.0, "aggressive": 0.6 },
|
|
117
|
+
"scoring": { "base": 60, "per_gain": 20, "per_risk": 25 },
|
|
118
|
+
"keyword_rules": [
|
|
119
|
+
{
|
|
120
|
+
"id": "kw_arbitration",
|
|
121
|
+
"keywords": ["arbitration"],
|
|
122
|
+
"effect": "arbitration_review_triggered",
|
|
123
|
+
"anchor": "avoid",
|
|
124
|
+
"when_forbidden": true
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "kw_refund",
|
|
128
|
+
"keywords": ["refund"],
|
|
129
|
+
"effect": "fund_returned_to_buyer",
|
|
130
|
+
"anchor": "prefer",
|
|
131
|
+
"when_forbidden": false
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "kw_upfront",
|
|
135
|
+
"keywords": ["upfront", "before delivery"],
|
|
136
|
+
"effect": "fund_released_to_merchant",
|
|
137
|
+
"anchor": "avoid",
|
|
138
|
+
"when_forbidden": true
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "kw_milestone",
|
|
142
|
+
"keywords": ["milestone"],
|
|
143
|
+
"effect": "node_advanced",
|
|
144
|
+
"anchor": "prefer",
|
|
145
|
+
"when_forbidden": false
|
|
146
|
+
}
|
|
147
|
+
],
|
|
148
|
+
"forbid_pattern": "forbid|never|\\bno\\b",
|
|
149
|
+
"arb": {
|
|
150
|
+
"comment": "Arbitration 7-state game tunables — a PARALLEL case-lifecycle interest model (effects are about the dispute case, not the fund lifecycle; it shares only the appetite multiplier with the fund game). effect_semantics publishes the kernel effect vocabulary; keyword_rules re-anchor a perspective's prefer/avoid from persona red lines (an unconditional keyword entry is expressed as a pair with when_forbidden true AND false); scoring: favorability = clamp(base + per_gain × gains − per_risk × risks × sensitivity).",
|
|
151
|
+
"effect_semantics": {
|
|
152
|
+
"case_advanced": ["the case moves forward"],
|
|
153
|
+
"case_extended": ["the case is prolonged — more cost and delay"],
|
|
154
|
+
"reversal_chance": ["a chance to overturn a ruling"],
|
|
155
|
+
"adverse_ruling": ["an unfavorable ruling lands"],
|
|
156
|
+
"case_closed": ["the case reaches a terminal state"],
|
|
157
|
+
"fees_received": ["fees or indemnity are collected"]
|
|
158
|
+
},
|
|
159
|
+
"role_interests": {
|
|
160
|
+
"arbitrator": {
|
|
161
|
+
"prefer": ["case_advanced", "fees_received", "case_closed"],
|
|
162
|
+
"avoid": ["case_extended"],
|
|
163
|
+
"sensitivity": 1.0
|
|
164
|
+
},
|
|
165
|
+
"customer": {
|
|
166
|
+
"prefer": ["reversal_chance", "case_closed"],
|
|
167
|
+
"avoid": ["adverse_ruling", "case_extended"],
|
|
168
|
+
"sensitivity": 1.0
|
|
169
|
+
},
|
|
170
|
+
"merchant": {
|
|
171
|
+
"prefer": ["case_closed", "fees_received"],
|
|
172
|
+
"avoid": ["adverse_ruling", "reversal_chance", "case_extended"],
|
|
173
|
+
"sensitivity": 1.0
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"keyword_rules": [
|
|
177
|
+
{
|
|
178
|
+
"id": "arb_kw_arbitration_forbid",
|
|
179
|
+
"keywords": ["arbitration"],
|
|
180
|
+
"effect": "case_extended",
|
|
181
|
+
"anchor": "avoid",
|
|
182
|
+
"when_forbidden": true
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"id": "arb_kw_refund",
|
|
186
|
+
"keywords": ["refund"],
|
|
187
|
+
"effect": "reversal_chance",
|
|
188
|
+
"anchor": "prefer",
|
|
189
|
+
"when_forbidden": false
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"id": "arb_kw_prolong",
|
|
193
|
+
"keywords": ["prolong", "delay"],
|
|
194
|
+
"effect": "case_extended",
|
|
195
|
+
"anchor": "avoid",
|
|
196
|
+
"when_forbidden": false
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"id": "arb_kw_prolong_forbid",
|
|
200
|
+
"keywords": ["prolong", "delay"],
|
|
201
|
+
"effect": "case_extended",
|
|
202
|
+
"anchor": "avoid",
|
|
203
|
+
"when_forbidden": true
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
"forbid_pattern": "forbid|never|\\bno\\b",
|
|
207
|
+
"scoring": { "base": 60, "per_gain": 20, "per_risk": 25 }
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"match": {
|
|
211
|
+
"comment": "Demand↔service matching standing defaults (builtin evaluation 'demand_match'): region relation scores, per-dimension weights, trust bands and neutrality. A per-request UserInjection can still reweight or disable dimensions; trust_bands match FIRST entry whose min ≤ trust (keep descending order).",
|
|
212
|
+
"region_scores": { "exact": 100, "contains": 85, "compatible": 60, "overlap": 40, "mismatch": 0 },
|
|
213
|
+
"weights": {
|
|
214
|
+
"region": 15,
|
|
215
|
+
"industry": 20,
|
|
216
|
+
"price": 15,
|
|
217
|
+
"trust": 15,
|
|
218
|
+
"capabilities": 30,
|
|
219
|
+
"tags": 5,
|
|
220
|
+
"acceptance": 10
|
|
221
|
+
},
|
|
222
|
+
"trust_bands": [
|
|
223
|
+
{ "min": 75, "score": 100 },
|
|
224
|
+
{ "min": 50, "score": 60 },
|
|
225
|
+
{ "min": 25, "score": 30 },
|
|
226
|
+
{ "min": 0, "score": 0 }
|
|
227
|
+
],
|
|
228
|
+
"neutral_score": 50,
|
|
229
|
+
"price_over_budget_tolerance_pct": 10,
|
|
230
|
+
"top_n": 5
|
|
231
|
+
},
|
|
232
|
+
"monitor": {
|
|
233
|
+
"comment": "In-progress order monitoring standing defaults. A caller-supplied per-order threshold (MonitorThresholds on the monitor input) always wins over thresholds here. progress_stall_hours = 0 derives the stall threshold from the expected advancement duration (expected × stall_expected_multiplier); escalation holds the critical-grade posture.",
|
|
234
|
+
"thresholds": {
|
|
235
|
+
"progress_stall_hours": 0,
|
|
236
|
+
"compensation_drop_ratio": 0.3,
|
|
237
|
+
"compensation_coverage_min": 1.0,
|
|
238
|
+
"messenger_timeout_hours": 24,
|
|
239
|
+
"review_window_closing_days": 3,
|
|
240
|
+
"arb_window_closing_days": 3
|
|
241
|
+
},
|
|
242
|
+
"escalation": {
|
|
243
|
+
"default_expected_progress_hours": 24,
|
|
244
|
+
"stall_expected_multiplier": 2,
|
|
245
|
+
"stall_escalation_multiplier": 2,
|
|
246
|
+
"messenger_escalation_multiplier": 2,
|
|
247
|
+
"ratio_critical_threshold": 0.5
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"mode": {
|
|
251
|
+
"comment": "Mode-evaluator posture: risk/benefit recommendation thresholds per risk appetite (merchant_guide evaluation preview). risk_benefit_ratio is computed by the kernel; only the posture thresholds are tunable here.",
|
|
252
|
+
"appetite_thresholds": {
|
|
253
|
+
"conservative": { "max_risk": 30, "min_benefit": 50 },
|
|
254
|
+
"balanced": { "max_risk": 60, "min_benefit": 60 },
|
|
255
|
+
"aggressive": { "max_risk": 100, "min_benefit": 80 }
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
"scorecard": {
|
|
259
|
+
"comment": "Strategy scorecard numeric tuning (Q7 — one scoring document): per-metric posture weights and advisory good/bad scoring anchors, plus the shop-evidence gate. Catalog identity (source/unit/direction/labels) stays kernel-owned; only these numbers are data. Anchors: full score at/beyond good, zero at/beyond bad, linear between (direction lives in the good/bad ordering). A factory anchor can be retuned, never removed; metric ids can never be invented here. Shop-evidence gate BY DESIGN: document layers (user doc / persona / industry) can retune shop_evidence_metrics but can never EMPTY it — array merges never delete entries, so a numeric overall grade always demands at least one available own-commercial metric. To browse without the gate for one session, use a runtime override (config_operation judgment_set path scorecard.shop_evidence_metrics value []).",
|
|
260
|
+
"metrics": {
|
|
261
|
+
"order_count": { "weight": { "volume": 0.2, "balanced": 0.15, "margin": 0.05 }, "good_threshold": 20, "bad_threshold": 5 },
|
|
262
|
+
"completed_count": { "weight": { "volume": 0.1, "balanced": 0.1, "margin": 0.1 } },
|
|
263
|
+
"completion_rate": { "weight": { "volume": 0.15, "balanced": 0.2, "margin": 0.15 }, "good_threshold": 0.9, "bad_threshold": 0.6 },
|
|
264
|
+
"repeat_customer_rate": { "weight": { "volume": 0.2, "balanced": 0.25, "margin": 0.2 }, "good_threshold": 0.25, "bad_threshold": 0.1 },
|
|
265
|
+
"dispute_rate": { "weight": { "volume": 0.1, "balanced": 0.15, "margin": 0.2 }, "good_threshold": 0.02, "bad_threshold": 0.05 },
|
|
266
|
+
"dd_to_order_rate": { "weight": { "volume": 0.15, "balanced": 0.1, "margin": 0.05 }, "good_threshold": 0.2, "bad_threshold": 0.05 },
|
|
267
|
+
"market_recent_orders": { "weight": { "volume": 0.05, "balanced": 0.02, "margin": 0.02 } },
|
|
268
|
+
"market_recent_gmv": { "weight": { "volume": 0.02, "balanced": 0.02, "margin": 0.02 } },
|
|
269
|
+
"supply_demand_ratio": { "weight": { "volume": 0.02, "balanced": 0.03, "margin": 0.05 }, "good_threshold": 1, "bad_threshold": 4 },
|
|
270
|
+
"market_active_services": { "weight": { "volume": 0.01, "balanced": 0.01, "margin": 0.01 } },
|
|
271
|
+
"competitor_count": { "weight": { "volume": 0.02, "balanced": 0.05, "margin": 0.1 }, "good_threshold": 5, "bad_threshold": 30 },
|
|
272
|
+
"category_enumerated_count": { "weight": { "volume": 0.02, "balanced": 0.05, "margin": 0.1 } },
|
|
273
|
+
"arbitration_trust_score": { "weight": { "volume": 0.05, "balanced": 0.1, "margin": 0.15 }, "good_threshold": 80, "bad_threshold": 50 },
|
|
274
|
+
"open_attention_count": { "weight": { "volume": 0.03, "balanced": 0.03, "margin": 0.05 }, "good_threshold": 0, "bad_threshold": 5 }
|
|
275
|
+
},
|
|
276
|
+
"shop_evidence_metrics": [
|
|
277
|
+
"order_count",
|
|
278
|
+
"completion_rate",
|
|
279
|
+
"repeat_customer_rate",
|
|
280
|
+
"dispute_rate",
|
|
281
|
+
"dd_to_order_rate",
|
|
282
|
+
"arbitration_trust_score"
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
"rules": {
|
|
286
|
+
"comment": "Declarative rule book. Factory rule packs live in knowledge/baselines/rules/<domain>.json and merge into this namespace at load time (Q11 split files, single document view). Override at rule granularity: retune levels/wording or disable with enabled=false (a trace is left) — factory rules can never be deleted or invented here.",
|
|
287
|
+
"domains": {}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{readFileSync,writeFileSync}from'node:fs';import{fileURLToPath}from'node:url';import{dirname,join}from'node:path';import{RISK_CASES}from'./risk-cases.js';import{aggregateProjectRisks}from'../../playbooks/service-build/risk-aggregator.js';import{assessTreasuryRisks}from'../treasury-risk.js';import{assessRewardRisks}from'../reward-risk.js';function toArray(a){if(Array['isArray'](a))return a;if(a&&typeof a==='object')for(const b of['risks','detected_risks']){const c=a[b];if(Array['isArray'](c))return c;}return[];}function normalize(a){return toArray(a)['map'](b=>{const c=b??{};return{'id':String(c['id']??c['risk_rule_id']??c['rule_id']??'?'),'level':String(c['level']??c['severity']??'?')['toLowerCase'](),...c['evidence']!=null?{'evidence':String(c['evidence'])}:{}};})['sort']((c,d)=>c['id']===d['id']?(c['evidence']??'')['localeCompare'](d['evidence']??''):c['id']['localeCompare'](d['id']));}function runCase(a,b){try{return{'risks':normalize(a(b)),'threw':![]};}catch(c){return{'risks':[],'threw':!![]};}}function collect(){const a={};for(const b of RISK_CASES){const d=runCase(b['run'],b['empty']),e=runCase(b['run'],b['trigger']);a[b['pack']]={'objectType':b['objectType'],'empty':d['risks'],'emptyThrew':d['threw'],'trigger':e['risks']};}return a;}const here=dirname(fileURLToPath(import.meta.url)),SNAPSHOT=join(here,'risk-baselines.json'),AGG_SNAPSHOT=join(here,'aggregator-baselines.json');function puzzlesFrom(a){const b={};for(const d of RISK_CASES){if(d['pack']==='arb')continue;b[d['objectType']]={'puzzle':a(d)};}return b;}async function runAggregator(a){const b=await aggregateProjectRisks({'project_prefix':'baseline','version':'v1','industry':'general','puzzles':puzzlesFrom(a)});return{'severity_summary':b['severity_summary'],'status':b['status'],'findings':b['findings']['map'](c=>({'risk_rule_id':c['risk_rule_id'],'object_type':c['object_type'],'severity':c['severity']})),'warnings':b['warnings']};}describe('write-side\x20risk\x20packs\x20—\x20pre-migration\x20baseline',()=>{it('every\x20pack\x20trigger\x20context\x20fires\x20at\x20least\x20one\x20pack-specific\x20rule',()=>{for(const a of RISK_CASES){const {risks:b}=runCase(a['run'],a['trigger']);expect(b['length'],'pack\x20'+a['pack']+'\x20trigger\x20fired\x20nothing')['toBeGreaterThan'](0x0);}}),it('matches\x20the\x20committed\x20snapshot\x20(regenerate\x20only\x20with\x20--update)',()=>{const a=collect();if(process['env']['UPDATE_RISK_BASELINE']==='1'){writeFileSync(SNAPSHOT,JSON['stringify'](a,null,0x2)+'\x0a','utf8');return;}const b=JSON['parse'](readFileSync(SNAPSHOT,'utf8'));expect(new Set(Object['keys'](a)))['toEqual'](new Set(Object['keys'](b)));for(const c of Object['keys'](a)['sort']()){expect(a[c],'pack\x20'+c+'\x20drifted')['toEqual'](b[c]);}});}),describe('risk\x20aggregator\x20—\x20Task\x2026\x20parity\x20(id/severity/status)',()=>{const a=[['empty',b=>b['empty']],['trigger',b=>b['trigger']]];it('matches\x20the\x20committed\x20snapshot\x20(regenerate\x20only\x20with\x20--update)',async()=>{const b={};for(const [d,e]of a)b[d]=await runAggregator(e);if(process['env']['UPDATE_RISK_BASELINE']==='1'){writeFileSync(AGG_SNAPSHOT,JSON['stringify'](b,null,0x2)+'\x0a','utf8');return;}const c=JSON['parse'](readFileSync(AGG_SNAPSHOT,'utf8'));expect(b)['toEqual'](c);}),it('trigger\x20row\x20produces\x20CRITICAL\x20blockers\x20(sanity:\x20status\x20machine\x20alive)',async()=>{const b=await runAggregator(d=>d['trigger']);expect(b['findings']['some'](c=>c['severity']==='critical'))['toBe'](!![]),expect(b['status'])['not']['toBe']('RISK_PASSED');}),it('TR-26.2\x20every\x20finding\x20carries\x20its\x20proposal-graph\x20path\x20(explainability)',async()=>{const b=await aggregateProjectRisks({'project_prefix':'baseline','version':'v1','industry':'general','puzzles':puzzlesFrom(d=>d['trigger'])});expect(b['findings']['length'])['toBeGreaterThan'](0x0);for(const c of b['findings']){expect(c['details']?.['proposal_node'],'finding\x20'+c['risk_rule_id']+'\x20has\x20no\x20proposal\x20node')['toMatch'](/^proposal::/),expect(c['details']?.['rule_source'],'finding\x20'+c['risk_rule_id']+'\x20has\x20no\x20analyzer\x20source')['not']['toBe']('');}});}),describe('R-T-2-04\x20—\x20external_withdraw\x20pays\x20only\x20the\x20transaction\x20sender',()=>{const a={'withdraw':{'amount_by_external_withdraw_guard':'release-guard','recipient':'0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}};it('flags\x20HIGH\x20(code\x2010\x20abort\x20ahead)\x20when\x20recipient\x20!=\x20known\x20sender',()=>{const {risks:b}=assessTreasuryRisks({...a,'sender_address':'0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'}),c=b['find'](d=>d['id']==='R-T-2-04');expect(c?.['level'])['toBe']('high'),expect(c?.['description']??'')['toContain']('code\x2010');}),it('stays\x20silent\x20when\x20recipient\x20equals\x20the\x20sender',()=>{const {risks:b}=assessTreasuryRisks({...a,'sender_address':'0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'});expect(b['some'](c=>c['id']==='R-T-2-04'))['toBe'](![]);}),it('advises\x20MEDIUM\x20when\x20the\x20sender\x20is\x20not\x20known\x20at\x20analysis\x20time',()=>{const {risks:b}=assessTreasuryRisks(a),c=b['find'](d=>d['id']==='R-T-2-04');expect(c?.['level'])['toBe']('medium');}),it('does\x20not\x20fire\x20on\x20the\x20fixed\x20(permissioned)\x20withdraw\x20path',()=>{const {risks:b}=assessTreasuryRisks({'withdraw':{'amount_fixed':'1000','recipient':'0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'},'sender_address':'0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'});expect(b['some'](c=>c['id']==='R-T-2-04'))['toBe'](![]);});}),describe('R-T-4-04\x20—\x20mounting\x20external\x20Guards\x20(owner\x20diligence\x20reminder)',()=>{it('flags\x20MEDIUM\x20when\x20mounting\x20external\x20withdraw\x20Guards',()=>{const {risks:a}=assessTreasuryRisks({'external_withdraw_guard':{'op':'add','guards':[{'guard':'0xg1','identifier':0x0}]}}),b=a['find'](c=>c['id']==='R-T-4-04');expect(b?.['level'])['toBe']('medium'),expect(b?.['description']??'')['toContain']('code\x2010');}),it('flags\x20LOW\x20when\x20mounting\x20external\x20deposit\x20Guards',()=>{const {risks:a}=assessTreasuryRisks({'external_deposit_guard':{'op':'add','guards':[{'guard':'0xg2'}]}}),b=a['find'](c=>c['id']==='R-T-4-04');expect(b?.['level'])['toBe']('low');}),it('stays\x20silent\x20on\x20remove/clear',()=>{const {risks:a}=assessTreasuryRisks({'external_withdraw_guard':{'op':'remove','guards':['0xg1']}});expect(a['some'](b=>b['id']==='R-T-4-04'))['toBe'](![]);});}),describe('R-R-2-05\x20—\x20mounting\x20a\x20claim\x20Guard\x20with\x20a\x20GuardIdentifier\x20payout\x20slot',()=>{const a={'guard':'0xg1','amount':{'type':'fixed','value':'100'}};it('flags\x20MEDIUM\x20when\x20the\x20recipient\x20is\x20a\x20GuardIdentifier\x20slot',()=>{const {risks:b}=assessRewardRisks({'guard_add':[{...a,'recipient':{'GuardIdentifier':0x0}}]}),c=b['find'](d=>d['id']==='R-R-2-05');expect(c?.['level'])['toBe']('medium'),expect(c?.['description']??'')['toContain']('GuardIdentifier');}),it('stays\x20silent\x20for\x20Entity/Signer\x20recipients',()=>{const {risks:b}=assessRewardRisks({'guard_add':[{...a,'recipient':{'Entity':'0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}}]});expect(b['some'](c=>c['id']==='R-R-2-05'))['toBe'](![]);});});
|