@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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { GraphServiceEvaluation } from "../../evaluation/builtins/graph-service.js";
|
|
2
|
+
import { type FacetId } from "../../evaluation/facets/catalog.js";
|
|
3
|
+
import type { GraphEvaluationFacts } from "./facts.js";
|
|
4
|
+
import type { Finding, InterestPayload, TopologyGraph, Viewport } from "./types.js";
|
|
5
|
+
export type FacetState = "present" | "empty" | "gap";
|
|
6
|
+
export interface FacetMoney {
|
|
7
|
+
raw: string;
|
|
8
|
+
coin_type?: string;
|
|
9
|
+
display?: string;
|
|
10
|
+
symbol?: string;
|
|
11
|
+
decimals?: number;
|
|
12
|
+
precision_known: boolean;
|
|
13
|
+
tip?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface FacetAmount {
|
|
16
|
+
key: string;
|
|
17
|
+
label: string;
|
|
18
|
+
money: FacetMoney;
|
|
19
|
+
}
|
|
20
|
+
export interface FacetSignal {
|
|
21
|
+
key: string;
|
|
22
|
+
label: string;
|
|
23
|
+
state: "configured" | "missing" | "unknown";
|
|
24
|
+
detail?: string;
|
|
25
|
+
gloss?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface FacetScoreRef {
|
|
28
|
+
evaluation: "trust" | "risk";
|
|
29
|
+
rule_id: string;
|
|
30
|
+
}
|
|
31
|
+
export interface FacetGraphRef {
|
|
32
|
+
id: string;
|
|
33
|
+
label: string;
|
|
34
|
+
full?: string;
|
|
35
|
+
role?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface FacetGraph {
|
|
38
|
+
kind: "workflow" | "fund_flow" | "supply_chain";
|
|
39
|
+
summary: string;
|
|
40
|
+
refs: FacetGraphRef[];
|
|
41
|
+
}
|
|
42
|
+
export interface FacetResult {
|
|
43
|
+
id: FacetId;
|
|
44
|
+
label: string;
|
|
45
|
+
question: string;
|
|
46
|
+
state: FacetState;
|
|
47
|
+
scores?: FacetScoreRef[];
|
|
48
|
+
signals?: FacetSignal[];
|
|
49
|
+
amounts?: FacetAmount[];
|
|
50
|
+
graph?: FacetGraph;
|
|
51
|
+
evidence: string[];
|
|
52
|
+
gap_reason?: string;
|
|
53
|
+
threshold?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface FacetsBlock {
|
|
56
|
+
profile: {
|
|
57
|
+
role?: string;
|
|
58
|
+
industry?: string;
|
|
59
|
+
persona_applied: boolean;
|
|
60
|
+
sources: string[];
|
|
61
|
+
};
|
|
62
|
+
items: FacetResult[];
|
|
63
|
+
}
|
|
64
|
+
export interface FacetProjectionProfile {
|
|
65
|
+
role?: string;
|
|
66
|
+
industry?: string;
|
|
67
|
+
persona_applied: boolean;
|
|
68
|
+
sources: string[];
|
|
69
|
+
facets: Record<string, {
|
|
70
|
+
visible: boolean;
|
|
71
|
+
order: number;
|
|
72
|
+
weight?: number;
|
|
73
|
+
threshold?: number;
|
|
74
|
+
}>;
|
|
75
|
+
}
|
|
76
|
+
export interface FacetWorkflowShape {
|
|
77
|
+
machine: string;
|
|
78
|
+
transitions: Array<{
|
|
79
|
+
node: string;
|
|
80
|
+
prev_node: string;
|
|
81
|
+
forward?: string;
|
|
82
|
+
guard: string | null;
|
|
83
|
+
named_operator: string | null;
|
|
84
|
+
permission_index: unknown;
|
|
85
|
+
}>;
|
|
86
|
+
terminal_names: string[];
|
|
87
|
+
}
|
|
88
|
+
export interface ProjectFacetsInput {
|
|
89
|
+
graph: TopologyGraph;
|
|
90
|
+
viewport: Viewport;
|
|
91
|
+
target: string;
|
|
92
|
+
facts: GraphEvaluationFacts;
|
|
93
|
+
evaluation: GraphServiceEvaluation;
|
|
94
|
+
workflows: FacetWorkflowShape[];
|
|
95
|
+
profile: FacetProjectionProfile;
|
|
96
|
+
roleInterest?: InterestPayload;
|
|
97
|
+
findings?: Finding[];
|
|
98
|
+
}
|
|
99
|
+
export declare function projectFacets(input: ProjectFacetsInput): FacetsBlock;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{FACET_CATALOG}from'../../evaluation/facets/catalog.js';import{findingWhereResolved}from'./analyze.js';import{buildNameIndex,createNameResolver}from'./names.js';const SIGNAL_GLOSS={'arbitration_binding':'A\x20binding\x20points\x20the\x20shop\x20at\x20an\x20on-chain\x20arbitration\x20service\x20that\x20can\x20adjudicate\x20disputes\x20and\x20move\x20escrowed\x20funds.','voting_roster':'Voting\x20guards\x20define\x20who\x20is\x20eligible\x20to\x20vote\x20on\x20a\x20dispute;\x20without\x20a\x20roster,\x20arbitration\x20cannot\x20reach\x20a\x20verdict.','arbitration_fee':'The\x20fee\x20pre-funded\x20into\x20the\x20arbitration\x20service\x20to\x20pay\x20adjudicators\x20for\x20taking\x20a\x20case;\x20zero\x20means\x20disputes\x20are\x20not\x20financially\x20backed.','arbitration_active':'Paused\x20arbitration\x20bindings\x20reject\x20new\x20dispute\x20cases,\x20so\x20the\x20shop\x20effectively\x20has\x20no\x20working\x20dispute\x20channel\x20while\x20paused.','published':'A\x20published\x20shop\x20is\x20visible\x20and\x20discoverable\x20on-chain;\x20unpublished\x20shops\x20cannot\x20be\x20found\x20through\x20normal\x20market\x20reads.','active':'A\x20paused\x20shop\x20stops\x20accepting\x20new\x20orders;\x20the\x20pause\x20is\x20set\x20by\x20the\x20merchant\x20on\x20the\x20service\x20object\x20itself.','service_permission':'The\x20permission\x20group\x20attached\x20to\x20the\x20shop\x20—\x20its\x20entity\x20table\x20decides\x20which\x20accounts\x20may\x20operate\x20the\x20service.','buy_guard':'A\x20buy\x20guard\x20is\x20an\x20on-chain\x20gate\x20every\x20new\x20order\x20must\x20pass\x20(e.g.\x20buyer\x20allowlist/conditions);\x20none\x20means\x20ordering\x20is\x20ungated.','admins':'Admin\x20EOAs\x20in\x20the\x20bound\x20permission\x20group\x20hold\x20the\x20operator\x20powers\x20over\x20the\x20shop\x20and\x20its\x20guards.'};function withGloss(a){const b=SIGNAL_GLOSS[a['key']];return b?{...a,'gloss':b}:a;}function toBigInt(a){if(a==null)return 0x0n;try{return BigInt(typeof a==='number'?Math['trunc'](a):String(a));}catch{return 0x0n;}}function nodeData(a,b){const c=a['nodes']['get'](b['toLowerCase']()),e=c?.['raw'],f=e?.['data']??e;return f&&typeof f==='object'?f:undefined;}const RULE_FACT_KEYS={'trust_arbitration':['arbitration.binding'],'trust_reviews':['reviews.votes'],'trust_fulfillment':['fulfillment.orders'],'trust_fund_safety':['fund.compensation','fund.exposure'],'trust_transparency':['transparency.profile'],'risk_workflow':['risk_workflow.findings'],'risk_fund':['risk_fund.findings'],'risk_trust':['risk_trust.findings'],'risk_behavior':['risk_behavior.findings']};function readOffers(a,b){const c=nodeData(a,b),e=c?.['sales'];if(Array['isArray'](e))return e['map'](f=>{const g=f??{};return{'name':typeof g['name']==='string'?g['name']:'','price':toBigInt(g['price'])['toString'](),...g['stock']!=null?{'stock':toBigInt(g['stock'])['toString']()}:{},'suspended':g['suspension']===!![]};})['filter'](f=>f['price']!=='0'||f['name']!=='');if(typeof e==='string'&&e!==''){const f=toBigInt(e)['toString']();return f!=='0'?[{'name':'','price':f,'suspended':![]}]:[];}return[];}export function projectFacets(a){const {graph:b,viewport:c,target:d,facts:e,evaluation:f,workflows:g,profile:h,roleInterest:i}=a,j=d['toLowerCase'](),k=createNameResolver(buildNameIndex(b)),l=new Map(e['facts']['map'](H=>[H['key'],H])),m=new Set(f['unverified']),n=b['nodes']['get'](j)?.['coinType'],o=e['slots']['find'](H=>H['slot']==='service_snapshot')?.['state']??'gap',p=o==='present',q=H=>H['startsWith']('trust_')?f['trust']['breakdown']['find'](I=>I['rule_id']===H):f['risk']['breakdown']['find'](I=>I['rule_id']===H),r=H=>{const I=[],J=[],K=[],L=new Set();for(const M of H){if(m['has'](M)){for(const P of RULE_FACT_KEYS[M]??[]){const Q=l['get'](P);if(Q?.['state']==='gap'&&Q['evidence'])K['push'](Q['evidence']);}continue;}const N=M['startsWith']('trust_')?'trust':'risk';I['push']({'evaluation':N,'rule_id':M});const O=q(M);for(const R of O?.['finding_refs']??[]){const S=findingWhereResolved(R,k),T=R['title']+'\x20—\x20Where:\x20'+S;!L['has'](T)&&(L['add'](T),J['push'](T));}}return{'scores':I,'evidence':J,...I['length']===0x0&&K['length']>0x0?{'gap_reason':K['join']('\x20')}:{}};},s=(H,I)=>({'raw':H,...I?{'coin_type':I}:{},'precision_known':![]}),u=(H,I,J)=>({'id':H['id'],'label':H['label'],'question':H['question'],'state':'gap',...J?.['length']?{'scores':J}:{},'evidence':[],'gap_reason':I['filter'](Boolean)['join']('\x20')}),v=()=>{const H=FACET_CATALOG[0x0],I=r(H['ruleIds']??[]),J=[],K=[],L=l['get']('fund.compensation'),M=l['get']('fund.exposure'),N=L?.['value'],O=M?.['value'],P=N?.['coinType']??n;L?.['state']!=='gap'&&N&&(J['push']({'key':'fund','label':'Compensation\x20fund','money':s(N['fund']??'0',P)}),K['push']('Compensation\x20fund:\x20{fund}.'));if(M?.['state']==='gap')K['push'](M['evidence']);else{if(O){const R=l['get']('fulfillment.orders')?.['value']??{'observed':O['windowedCount'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':O['windowedAmount']};R['observed']===0x0||O['windowedAmount']==='0'?K['push']('No\x20recent\x20orders\x20in\x20the\x20window\x20—\x20no\x20payout\x20exposure\x20to\x20cover.'):(J['push']({'key':'windowed','label':'Windowed\x20order\x20volume','money':s(O['windowedAmount'],P)}),J['push']({'key':'ceiling','label':'Required\x20ceiling\x20(3x\x20windowed\x20volume)','money':s(O['neededCeiling'],P)}),K['push']('Windowed\x20order\x20volume:\x20{windowed}\x20across\x20'+R['observed']+'\x20order(s);\x20statutory\x20ceiling\x20(3x):\x20{ceiling};\x20coverage\x20'+(O['coverageMet']?'met':'not\x20met')+'.'));}}K['push'](...I['evidence']);const Q=I['scores']['length']>0x0?'present':'gap';return{'id':H['id'],'label':H['label'],'question':H['question'],'state':Q,'scores':I['scores'],...J['length']?{'amounts':J}:{},'evidence':K,...I['gap_reason']?{'gap_reason':I['gap_reason']}:{}};},w=()=>{const H=FACET_CATALOG[0x1],I=r(H['ruleIds']??[]),J=[],K=[];for(const M of['reviews.votes','transparency.profile']){const N=l['get'](M);if(!N)continue;K['push'](N['state']==='gap'?'gap':N['state']==='empty'?'empty':'present');if(N['evidence'])J['push'](N['evidence']);}J['push'](...I['evidence']);const L=I['scores']['length']===0x0?'gap':K['includes']('present')?'present':'empty';return{'id':H['id'],'label':H['label'],'question':H['question'],'state':L,'scores':I['scores'],'evidence':J,...I['gap_reason']?{'gap_reason':I['gap_reason']}:{}};},x=()=>{const H=FACET_CATALOG[0x2],I=r(H['ruleIds']??[]),J=[],K=[],L=l['get']('arbitration.binding'),M=L?.['value']??[];let N='gap';if(L&&L['state']!=='gap'){N='present';const O=M['filter'](R=>R['votingGuards']>0x0)['length'],P=M['filter'](R=>toBigInt(R['fee'])>0x0n)['length'],Q=M['filter'](R=>!R['paused'])['length'];K['push']({'key':'arbitration_binding','label':'Arbitration\x20service\x20bound',...M['length']>0x0?{'state':'configured','detail':M['length']+'\x20binding(s)\x20on\x20the\x20service\x20snapshot'}:{'state':'missing','detail':'No\x20arbitration\x20service\x20configured\x20(verified\x20absence)'}}),K['push']({'key':'voting_roster','label':'Voting\x20roster\x20configured',...O>0x0?{'state':'configured','detail':O+'\x20binding(s)\x20carry\x20voting\x20guards'}:{'state':'missing'}}),K['push']({'key':'arbitration_fee','label':'Arbitration\x20fee\x20funded',...P>0x0?{'state':'configured','detail':P+'\x20binding(s)\x20with\x20a\x20funded\x20fee'}:{'state':'missing'}}),K['push']({'key':'arbitration_active','label':'Arbitration\x20active\x20(not\x20paused)',...Q>0x0?{'state':'configured'}:{'state':'missing','detail':'Every\x20binding\x20is\x20paused'}});if(L['evidence'])J['push'](L['evidence']);}return J['push'](...I['evidence']),{'id':H['id'],'label':H['label'],'question':H['question'],'state':I['scores']['length']===0x0?'gap':N,'scores':I['scores'],'signals':K['map'](withGloss),'evidence':J,...I['gap_reason']?{'gap_reason':I['gap_reason']}:{}};},y=()=>{const H=FACET_CATALOG[0x3],I=r(H['ruleIds']??[]),J=[];let K='gap';for(const L of['fulfillment.orders','fulfillment.workflow']){const M=l['get'](L);if(!M)continue;if(M['state']!=='gap')K='present';if(M['evidence'])J['push'](M['evidence']);}return J['push'](...I['evidence']),{'id':H['id'],'label':H['label'],'question':H['question'],'state':I['scores']['length']===0x0?'gap':K,'scores':I['scores'],'evidence':J,...I['gap_reason']?{'gap_reason':I['gap_reason']}:{}};},z=()=>{const H=FACET_CATALOG[0x4];if(!p)return u(H,['Offering\x20and\x20price\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.']);const I=nodeData(b,j)??{},J=l['get']('transparency.profile')?.['value'],K=J?.['published']??I['bPublished']===!![],L=J?.['paused']??I['bPaused']===!![],M=readOffers(b,j),N=M['map']((Q,R)=>({'key':'price_'+R,'label':Q['name']?'Offer:\x20'+Q['name']:'Service\x20sale\x20price','money':s(Q['price'],n)})),O=[{'key':'published','label':'Service\x20published',...K?{'state':'configured'}:{'state':'missing','detail':'Service\x20is\x20not\x20published'}},{'key':'active','label':'Service\x20active\x20(not\x20paused)',...!L?{'state':'configured'}:{'state':'missing','detail':'Service\x20is\x20paused'}}],P=M['map']((Q,R)=>{const S=Q['name']?'\x22'+Q['name']+'\x22':'the\x20service',T=Q['stock']!==undefined?',\x20stock\x20'+Q['stock']:'',U=Q['suspended']?',\x20suspended':',\x20on\x20shelf';return S+'\x20listed\x20at\x20{price_'+R+'}'+T+U+'.';});if(M['length']===0x0)P['push']('No\x20sale\x20items\x20configured\x20on\x20the\x20service\x20snapshot\x20(verified\x20absence).');return{'id':H['id'],'label':H['label'],'question':H['question'],'state':M['length']>0x0?'present':'empty','signals':O['map'](withGloss),...N['length']?{'amounts':N}:{},'evidence':P};},A=()=>{const H=FACET_CATALOG[0x5],I=r(H['ruleIds']??[]),J=l['get']('fulfillment.workflow'),K=[];if(J?.['evidence'])K['push'](J['evidence']);K['push'](...I['evidence']);if(J?.['state']==='empty')return{'id':H['id'],'label':H['label'],'question':H['question'],'state':'empty','scores':I['scores'],'evidence':K};if(J?.['state']==='gap'||g['length']===0x0)return u(H,[J?.['evidence']??'Workflow\x20graph\x20unverifiable:\x20no\x20machine\x20transitions\x20were\x20expanded.'],I['scores']);const L=[],M=new Set();let N=0x0,O=0x0,P=0x0;const Q=S=>{!M['has'](S['id'])&&(M['add'](S['id']),L['push'](S));};for(const S of g){const T=k['resolve'](S['machine']);Q({'id':S['machine'],'label':T['label'],...T['full']?{'full':T['full']}:{},'role':'machine'});const U=new Set();for(const V of S['transitions']){N+=0x1;if(V['guard'])O+=0x1;if(V['permission_index']!=null||V['named_operator'])P+=0x1;for(const W of[V['prev_node'],V['node']]){if(W)U['add'](S['machine']+'::node::'+W);}}for(const X of S['terminal_names'])U['add'](S['machine']+'::node::'+X);for(const Y of[...U]['sort']()){const Z=k['resolve'](Y);Q({'id':Y,'label':Z['label'],...Z['full']?{'full':Z['full']}:{},'role':'workflow\x20node'});}}const R=g['length']+'\x20machine(s),\x20'+L['filter'](a0=>a0['role']==='workflow\x20node')['length']+'\x20node(s),\x20'+(N+'\x20forward(s)\x20—\x20'+O+'\x20guard-gated,\x20'+P+'\x20permission-bound.');return{'id':H['id'],'label':H['label'],'question':H['question'],'state':'present','scores':I['scores'],'graph':{'kind':'workflow','summary':R,'refs':L},'evidence':K};},B=()=>{const H=FACET_CATALOG[0x6];if(!p)return u(H,['Fund\x20flow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.']);const I=c['visibleEdges'],J=[],K=new Set(I['filter'](U=>U['schema']==='service.order'&&U['from']===j)['map'](U=>U['to'])),L=new Set();for(const U of I){if(U['schema']==='order.allocation'&&K['has'](U['from']))L['add'](U['to']);}const M=new Set(),N=new Set();for(const V of I){if(V['schema']==='allocation.payment'&&L['has'](V['from']))M['add'](V['to']);(V['schema']==='allocation.guard'&&L['has'](V['from'])||V['schema']==='service.order_allocator_guard')&&N['add'](V['to']);}const O=new Set(),P=[];let Q=0x0;for(const W of I){if(W['schema']!=='payment.recipient'||!M['has'](W['from']))continue;O['add'](W['to']);const X=k['resolve'](W['from'])['label'],Y=k['resolve'](W['to'])['label'],Z=toBigInt(W['payload']?.['amount'])['toString'](),a0=W['payload']?.['coinType']??n;Z!=='0'&&(P['push']({'key':'pay_'+Q,'label':'Payment\x20leg\x20to\x20'+Y,'money':s(Z,a0)}),J['push'](X+'\x20pays\x20{pay_'+Q+'}\x20to\x20'+Y+'.'),Q+=0x1);}const R=[],S=(a1,a2)=>{const a3=k['resolve'](a1);R['push']({'id':a1,'label':a3['label'],...a3['full']?{'full':a3['full']}:{},'role':a2});};for(const a1 of[...L]['sort']())S(a1,'allocation\x20pool');for(const a2 of[...M]['sort']())S(a2,'payment\x20leg');for(const a3 of[...N]['sort']())S(a3,'split\x20guard');for(const a4 of[...O]['sort']())S(a4,'recipient');const T=L['size']>0x0||M['size']>0x0||O['size']>0x0;return J['unshift'](T?M['size']+'\x20payment\x20leg(s)\x20across\x20'+L['size']+'\x20allocation\x20pool(s);\x20'+N['size']+'\x20guard-gated\x20split(s),\x20'+O['size']+'\x20recipient(s).':'No\x20allocation\x20pools,\x20payment\x20legs\x20or\x20recipients\x20reached\x20in\x20this\x20expansion\x20(verified\x20absence\x20for\x20the\x20visible\x20window).'),{'id':H['id'],'label':H['label'],'question':H['question'],'state':T?'present':'empty','graph':{'kind':'fund_flow','summary':L['size']+'\x20pool(s),\x20'+M['size']+'\x20payment\x20leg(s),\x20'+N['size']+'\x20guard(s),\x20'+O['size']+'\x20recipient(s).','refs':R},...P['length']?{'amounts':P}:{},'evidence':J};},C=()=>{const H=FACET_CATALOG[0x7];if(!p)return u(H,['Supply\x20chain\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.']);const I=[],J=new Set(),K=(O,P)=>{const Q=O+'|'+P;if(J['has'](Q))return;J['add'](Q);const R=k['resolve'](O);I['push']({'id':O,'label':R['label'],...R['full']?{'full':R['full']}:{},'role':P});};for(const O of c['visibleEdges']){if(O['schema']==='order.service'&&O['to']!==j)K(O['to'],'upstream\x20service');}for(const P of b['nodes']['values']()){if(P['kind']==='object'&&P['objectType']==='Service'&&P['id']!==j)K(P['id'],'service');}for(const Q of c['visibleEdges']){if(Q['schema']!=='allocation.for_object')continue;const R=b['nodes']['get'](Q['to']);if(R?.['objectType']==='Service'&&Q['to']!==j)K(Q['to'],'sub-order\x20routing');else{if(R?.['objectType']==='Order'){const S=nodeData(b,Q['to'])?.['service'];typeof S==='string'&&S['toLowerCase']()!==j&&K(Q['to'],'sub-order\x20routing');}}}const L=I['filter'](T=>T['role']==='upstream\x20service'||T['role']==='service')['length'],M=I['length']-L,N=[];return I['length']===0x0?N['push']('No\x20upstream\x20services\x20or\x20sub-order\x20routing\x20links\x20reached\x20in\x20this\x20expansion\x20(verified\x20absence\x20for\x20the\x20visible\x20window).'):N['push'](L+'\x20other\x20service(s)\x20and\x20'+M+'\x20sub-order\x20routing\x20link(s)\x20visible\x20in\x20the\x20graph.'),{'id':H['id'],'label':H['label'],'question':H['question'],'state':I['length']>0x0?'present':'empty','graph':{'kind':'supply_chain','summary':L+'\x20service(s),\x20'+M+'\x20routing\x20link(s).','refs':I},'evidence':N};},D=()=>{const H=FACET_CATALOG[0x8],I=r(H['ruleIds']??[]),J=[...I['evidence']],K=[],L=c['visibleEdges'],M=L['filter'](O=>O['schema']==='service.permission'&&O['from']===j)['map'](O=>O['to']),N=new Set(L['filter'](O=>O['schema']==='service.buy_guard'&&O['from']===j)['map'](O=>O['to']));K['push']({'key':'service_permission','label':'Permission\x20group\x20bound\x20to\x20the\x20service',...M['length']>0x0?{'state':'configured','detail':M['map'](O=>k['resolve'](O)['label'])['join'](',\x20')}:p?{'state':'missing','detail':'No\x20permission\x20group\x20on\x20the\x20service\x20snapshot'}:{'state':'unknown'}}),K['push']({'key':'buy_guard','label':'Buy\x20guard\x20gating\x20new\x20orders',...N['size']>0x0?{'state':'configured','detail':[...N]['map'](O=>k['resolve'](O)['label'])['join'](',\x20')}:p?{'state':'missing'}:{'state':'unknown'}});if(M['length']>0x0){const O=new Set(M),P=new Set(L['filter'](Q=>Q['schema']==='permission.admin'&&O['has'](Q['from']))['map'](Q=>Q['to']));K['push']({'key':'admins','label':'Admin\x20EOAs\x20of\x20the\x20bound\x20permission\x20group',...P['size']>0x0?{'state':'configured','detail':P['size']+'\x20admin(s):\x20'+[...P]['map'](Q=>k['resolve'](Q)['label'])['join'](',\x20')}:{'state':'missing'}});}if(!p&&M['length']===0x0)return{'id':H['id'],'label':H['label'],'question':H['question'],'state':'gap','scores':I['scores'],'signals':K['map'](withGloss),'evidence':J,'gap_reason':'Permission\x20posture\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'};return{'id':H['id'],'label':H['label'],'question':H['question'],'state':'present','scores':I['scores'],'signals':K['map'](withGloss),'evidence':J};},E=()=>{if(!i)return undefined;const H=FACET_CATALOG[0x9],I=i['stakes']['slice'](0x0,0xc)['map']((L,M)=>{const N=k['resolve'](L['object']);return{'key':'stake_'+M,'label':N['label']+'\x20—\x20'+L['positions']['join']('/'),'state':'configured','detail':[L['object_type'],L['state']]['filter'](Boolean)['join']('\x20·\x20')};}),J=i['counterparties']['filter'](L=>L['alignment']==='conflict')['length'],K=[i['summary'],i['actions']['length']+'\x20in-flight\x20order\x20action\x20plan(s),\x20'+i['arb_actions']['length']+'\x20arbitration\x20move(s),\x20'+J+'\x20counterparty\x20conflict(s).'];return{'id':H['id'],'label':H['label'],'question':H['question'],'state':'present','signals':I['map'](withGloss),'evidence':K};},F={'fund_safety':v,'reputation':w,'arbitration':x,'fulfillment':y,'offering_price':z,'workflow':A,'fund_flow':B,'supply_chain':C,'permission':D,'my_stakes':E},G=FACET_CATALOG['map'](H=>{const I=h['facets'][H['id']];if(!I?.['visible'])return undefined;const J=F[H['id']]();if(!J)return undefined;if(I['threshold']!==undefined)J['threshold']=I['threshold'];return{'item':J,'order':I['order']};})['filter'](H=>!!H)['sort']((H,I)=>H['order']-I['order'])['map'](H=>H['item']);return{'profile':{...h['role']?{'role':h['role']}:{},...h['industry']?{'industry':h['industry']}:{},'persona_applied':h['persona_applied'],'sources':h['sources']},'items':G};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology}from'./expand.js';import{FULL,GAP,T_USDT,fullServiceState,gapServiceState,truncatedServiceState}from'./fixtures.js';import{buildViewport}from'./viewport.js';import{runAnalyzers}from'./analyze.js';import{workflowSubgraphFromEdges}from'./order-status.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'./strategy.js';import{projectEvaluationFacts}from'./facts.js';import{projectFacets}from'./facet-projection.js';import{FACET_IDS}from'../../evaluation/facets/catalog.js';import{evaluateGraphServiceFacts,registerGraphServiceEvaluations}from'../../evaluation/builtins/graph-service.js';import{resolveFacetProfile}from'../../persona/facet-profile.js';const TYPE_TAG_NODE='0x2::machine::Node<0x2::wow::WOW>';async function assemble(a,b){registerGraphServiceEvaluations();const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=projectEvaluationFacts(e,b,runAnalyzers(e)),g=await evaluateGraphServiceFacts(f),h=[...new Set(d['edges']['filter'](j=>j['schema']==='wf.transition')['flatMap'](j=>[j['from'],j['to']])['map'](j=>{const k=j['indexOf']('::node::');return k>0x0?j['slice'](0x0,k):'';})['filter'](Boolean))]['sort'](),i=h['map'](j=>{const k=workflowSubgraphFromEdges(d['edges'],j);return{'machine':j,'transitions':k['transitions']['map'](l=>({'node':l['node'],'prev_node':l['prevNode'],...l['forward']!==undefined?{'forward':l['forward']}:{},'guard':l['guard']??null,'named_operator':l['namedOperator']??null,'permission_index':l['permissionIndex']??null})),'terminal_names':[...k['terminalNames']]['sort']()};});return{'graph':d,'viewport':e,'facts':f,'evaluation':g,'workflows':i};}function project(b,c,d=resolveFacetProfile(),e,f){return projectFacets({'graph':b['graph'],'viewport':b['viewport'],'target':c,'facts':b['facts'],'evaluation':b['evaluation'],'workflows':f??b['workflows'],'profile':{'role':d['role'],'industry':d['industry'],'persona_applied':d['personaApplied'],'sources':d['sources'],'facets':d['facets']},...e?{'roleInterest':e}:{}});}const itemOf=(a,b)=>a['items']['find'](c=>c['id']===b);describe('facet\x20projection\x20—\x20fully\x20hooked\x20shop',()=>{it('emits\x20nine\x20catalog\x20facets\x20in\x20order,\x20my_stakes\x20gated\x20out\x20without\x20an\x20observer',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=project(b,FULL['svc']);expect(c['items']['map'](d=>d['id']))['toEqual'](FACET_IDS['filter'](d=>d!=='my_stakes')),expect(c['profile']['sources'])['toContain']('catalog\x20defaults'),expect(c['profile']['persona_applied'])['toBe'](![]);}),it('business\x20facets\x20carry\x20no\x20score\x20refs\x20at\x20all',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=project(b,FULL['svc']);for(const d of['offering_price','fund_flow','supply_chain']){expect(itemOf(c,d)?.['scores'])['toBeUndefined']();}expect(itemOf(c,'fund_safety')?.['scores']?.['map'](e=>e['rule_id'])['sort']())['toEqual'](['risk_fund','trust_fund_safety']['sort']()),expect(itemOf(c,'workflow')?.['scores'])['toEqual']([{'evaluation':'risk','rule_id':'risk_workflow'}]),expect(itemOf(c,'permission')?.['scores'])['toEqual']([{'evaluation':'risk','rule_id':'risk_behavior'}]);for(const e of itemOf(c,'fund_safety')['scores']){const f=e['evaluation']==='trust'?b['evaluation']['trust']:b['evaluation']['risk'];expect(f['breakdown']['some'](g=>g['rule_id']===e['rule_id']))['toBe'](!![]);}}),it('projects\x20fund_safety\x20raw\x20amounts\x20with\x20coin\x20types\x20and\x20placeholder\x20evidence',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'fund_safety');expect(c['state'])['toBe']('present');const d=Object['fromEntries']((c['amounts']??[])['map'](e=>[e['key'],e]));expect(d['fund']?.['money']['raw'])['toBe']('0'),expect(d['windowed']?.['money']['raw'])['toBe']('1000000'),expect(d['ceiling']?.['money']['raw'])['toBe']('3000000');for(const e of Object['values'](d))expect(e['money']['coin_type'])['toBe'](T_USDT);expect(d['fund']?.['money']['precision_known'])['toBe'](![]),expect(d['fund']?.['money']['display'])['toBeUndefined'](),expect(c['evidence']['some'](f=>f['includes']('{windowed}')&&f['includes']('{ceiling}')))['toBe'](!![]);}),it('projects\x20offering_price\x20from\x20the\x20seed\x20raw\x20with\x20published/active\x20signals',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'offering_price');expect(c['state'])['toBe']('present'),expect(c['amounts'])['toHaveLength'](0x1),expect(c['amounts'][0x0]['money']['raw'])['toBe']('1000000'),expect(c['amounts'][0x0]['money']['coin_type'])['toBe'](T_USDT);const d=Object['fromEntries']((c['signals']??[])['map'](e=>[e['key'],e]));expect(d['published']['state'])['toBe']('configured'),expect(d['active']['state'])['toBe']('configured');}),it('projects\x20arbitration\x20binding/roster/fee/active\x20signals',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'arbitration'),d=Object['fromEntries']((c['signals']??[])['map'](e=>[e['key'],e['state']]));expect(d)['toMatchObject']({'arbitration_binding':'configured','voting_roster':'configured','arbitration_fee':'configured','arbitration_active':'configured'});for(const e of c['signals']??[]){expect(e['gloss']?.['length'])['toBeGreaterThan'](0x14);}}),it('emits\x20coverage\x20slot\x20glosses\x20+\x20the\x20coverage\x20vocabulary',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),{evaluation:c}=b;for(const e of c['coverage']){expect(e['label']['length'])['toBeGreaterThan'](0x2),expect(e['gloss']['length'])['toBeGreaterThan'](0x14);}const d=c['vocabulary'];expect(d['present'])['toMatch'](/present/i),expect(d['empty'])['toMatch'](/verified/i),expect(d['gap'])['toMatch'](/unverifiable|not retrieved|truncated/i),expect(d['unverified']['length'])['toBeGreaterThan'](0x14),expect(d['completeness']['length'])['toBeGreaterThan'](0x14);}),it('projects\x20the\x20workflow\x20graph\x20with\x20resolved\x20machine/node\x20names\x20and\x20no\x20synthetic\x20ids',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'workflow');expect(c['state'])['toBe']('present'),expect(c['graph']?.['kind'])['toBe']('workflow');const d=c['graph']['refs']['filter'](f=>f['role']==='workflow\x20node')['map'](f=>f['label']);expect(d)['toEqual'](expect['arrayContaining'](['start','shipping','done'])),expect(c['graph']['refs']['some'](f=>f['role']==='machine'))['toBe'](!![]);const e=[...c['graph']['refs']['map'](f=>f['label']+'\x20'+(f['full']??'')),c['graph']['summary'],...c['evidence']]['join']('\x20');expect(e)['not']['toContain']('::node::'),expect(c['graph']['refs']['filter'](f=>f['role']==='workflow\x20node')['some'](f=>f['label']['startsWith']('0x')))['toBe'](![]);}),it('humanizes\x20Move\x20type-tag\x20node\x20names\x20into\x20Node<WOW>\x20with\x20full\x20kept',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=[{'machine':FULL['mac']['toLowerCase'](),'transitions':[{'node':TYPE_TAG_NODE,'prev_node':'start','guard':null,'named_operator':null,'permission_index':null}],'terminal_names':[TYPE_TAG_NODE]}],d=itemOf(project(b,FULL['svc'],undefined,undefined,c),'workflow'),e=d['graph']['refs']['find'](f=>f['label']==='Node<WOW>');expect(e)['toBeDefined'](),expect(e['full'])['toBe'](TYPE_TAG_NODE);}),it('projects\x20fund_flow\x20pools,\x20payment\x20legs,\x20recipients,\x20guards\x20and\x20leg\x20amounts',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'fund_flow');expect(c['state'])['toBe']('present');const d=(c['graph']['refs']??[])['reduce']((f,g)=>{return f[g['role']??'']=(f[g['role']??'']??0x0)+0x1,f;},{});expect(d['allocation\x20pool'])['toBe'](0x1),expect(d['payment\x20leg'])['toBe'](0x2),expect(d['recipient'])['toBe'](0x2),expect(d['split\x20guard'])['toBe'](0x1);const e=(c['amounts']??[])['map'](f=>f['money']['raw'])['sort']();expect(e)['toEqual'](['10000','50000','990000']),expect(c['evidence']['some'](f=>f['includes']('{pay_0}')||f['includes']('{pay_')))['toBe'](!![]);}),it('keeps\x20supply_chain\x20empty\x20for\x20the\x20single-shop\x20fixture\x20(own\x20orders\x20excluded)',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'supply_chain');expect(c['state'])['toBe']('empty'),expect(c['graph']?.['refs'])['toEqual']([]);}),it('projects\x20permission\x20signals\x20incl.\x20bound\x20group,\x20buy\x20guard\x20and\x20admins',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=itemOf(project(b,FULL['svc']),'permission'),d=Object['fromEntries']((c['signals']??[])['map'](e=>[e['key'],e['state']]));expect(d['service_permission'])['toBe']('configured'),expect(d['buy_guard'])['toBe']('configured'),expect(d['admins'])['toBe']('configured');}),it('carries\x20risk\x20finding\x20titles\x20+\x20graph-aware\x20where\x20lines\x20as\x20evidence,\x20never\x20raw\x20ids',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=project(b,FULL['svc']),d=c['items']['flatMap'](f=>f['evidence']),e=itemOf(c,'fund_safety')['evidence']['join']('\x20');expect(e)['toContain']('Payout\x20exposure'),expect(e)['not']['toContain']('::node::'),expect(d['some'](f=>/0x[0-9a-f]{40,}/['test'](f)))['toBe'](![]);}),it('projects\x20my_stakes\x20only\x20when\x20role\x20interest\x20is\x20supplied',async()=>{const b=await assemble(fullServiceState(),FULL['svc']);expect(itemOf(project(b,FULL['svc']),'my_stakes'))['toBeUndefined']();const c={'role':'customer','observer':FULL['buyer'],'stakes':[{'object':FULL['svc'],'object_type':'Service','positions':['buyer'],'state':'in_flight','evidence':[]}],'actions':[],'arb_actions':[],'counterparties':[],'risk_finding_ids':[],'summary':'Buyer\x20has\x20one\x20in-flight\x20order\x20at\x20stake.'},d=itemOf(project(b,FULL['svc'],resolveFacetProfile(),c),'my_stakes');expect(d['state'])['toBe']('present'),expect(d['signals'])['toHaveLength'](0x1),expect(d['signals'][0x0]['label'])['toContain']('buyer'),expect(d['evidence']['join']('\x20'))['toContain']('one\x20in-flight\x20order');});}),describe('facet\x20projection\x20—\x20configured-empty\x20shell',()=>{it('marks\x20verified\x20absences\x20empty/missing\x20and\x20the\x20dangling\x20machine\x20a\x20gap',async()=>{const b=await assemble(gapServiceState(),GAP['svc']),c=project(b,GAP['svc']);expect(itemOf(c,'workflow')?.['state'])['toBe']('gap'),expect(itemOf(c,'workflow')?.['gap_reason'])['toBeTruthy'](),expect(itemOf(c,'workflow')?.['graph'])['toBeUndefined'](),expect(itemOf(c,'offering_price')?.['state'])['toBe']('empty'),expect(itemOf(c,'fund_flow')?.['state'])['toBe']('empty'),expect(itemOf(c,'supply_chain')?.['state'])['toBe']('empty');const d=itemOf(c,'arbitration');expect(d['state'])['toBe']('present'),expect(d['signals']['find'](f=>f['key']==='arbitration_binding')?.['state'])['toBe']('missing');const e=itemOf(c,'permission');expect(e['state'])['toBe']('present'),expect(e['signals']['find'](f=>f['key']==='buy_guard')?.['state'])['toBe']('missing'),expect(e['signals']['find'](f=>f['key']==='service_permission')?.['state'])['toBe']('configured');});}),describe('facet\x20projection\x20—\x20truncated\x20order\x20window',()=>{it('exposes\x20fund_safety/fulfillment\x20as\x20gaps\x20with\x20no\x20score\x20refs\x20and\x20a\x20reason',async()=>{const b=await assemble(truncatedServiceState(),FULL['svc']),c=project(b,FULL['svc']);for(const d of['fund_safety','fulfillment']){const e=itemOf(c,d);expect(e['state'])['toBe']('gap'),expect(e['scores']??[])['toEqual']([]),expect(e['gap_reason'])['toBeTruthy']();}expect(itemOf(c,'reputation')?.['state'])['toBe']('present');});}),describe('facet\x20projection\x20—\x20profile\x20lens',()=>{it('orders\x20facets\x20by\x20role\x20emphasis\x20and\x20hides\x20profile-hidden\x20facets',async()=>{const b=await assemble(fullServiceState(),FULL['svc']),c=resolveFacetProfile({'role':'merchant'}),d=project(b,FULL['svc'],c);expect(d['items'][0x0]['id'])['toBe']('fund_flow'),expect(d['profile']['role'])['toBe']('merchant'),expect(d['profile']['sources']['some'](g=>g['startsWith']('role\x20default:merchant')))['toBe'](!![]);const e=resolveFacetProfile({'request':{'fund_safety':{'visible':![]},'reputation':{'order':0x1}}}),f=project(b,FULL['svc'],e);expect(f['items']['some'](g=>g['id']==='fund_safety'))['toBe'](![]),expect(f['items'][0x0]['id'])['toBe']('reputation');});});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Confidence, EntityProfileRecord, Finding, Retention, Viewport } from "./types.js";
|
|
2
|
+
export type FactState = "present" | "empty" | "gap";
|
|
3
|
+
export type EvaluationDimension = "arbitration" | "reviews" | "fulfillment" | "fund_safety" | "transparency" | "risk_workflow" | "risk_fund" | "risk_trust" | "risk_behavior";
|
|
4
|
+
export interface FactProvenance {
|
|
5
|
+
path: string[];
|
|
6
|
+
retention: Retention;
|
|
7
|
+
confidence: Confidence;
|
|
8
|
+
window?: {
|
|
9
|
+
observed: number;
|
|
10
|
+
limit: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface Fact {
|
|
14
|
+
dimension: EvaluationDimension;
|
|
15
|
+
key: string;
|
|
16
|
+
state: FactState;
|
|
17
|
+
value?: unknown;
|
|
18
|
+
provenance: FactProvenance;
|
|
19
|
+
findingIds?: string[];
|
|
20
|
+
evidence: string;
|
|
21
|
+
}
|
|
22
|
+
export interface CoverageSlot {
|
|
23
|
+
slot: string;
|
|
24
|
+
label: string;
|
|
25
|
+
gloss: string;
|
|
26
|
+
required: boolean;
|
|
27
|
+
state: FactState;
|
|
28
|
+
facts: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface CoverageVocabulary {
|
|
31
|
+
present: string;
|
|
32
|
+
empty: string;
|
|
33
|
+
gap: string;
|
|
34
|
+
unverified: string;
|
|
35
|
+
completeness: string;
|
|
36
|
+
}
|
|
37
|
+
export declare const COVERAGE_VOCABULARY: CoverageVocabulary;
|
|
38
|
+
export interface EntityProfileAttributes {
|
|
39
|
+
nodeId: string;
|
|
40
|
+
registeredAt?: number;
|
|
41
|
+
hasDescription: boolean;
|
|
42
|
+
recordCount: number;
|
|
43
|
+
description?: string;
|
|
44
|
+
profileRecords?: EntityProfileRecord[];
|
|
45
|
+
}
|
|
46
|
+
export interface GraphEvaluationFacts {
|
|
47
|
+
target: string;
|
|
48
|
+
role: string;
|
|
49
|
+
facts: Fact[];
|
|
50
|
+
slots: CoverageSlot[];
|
|
51
|
+
completeness: number;
|
|
52
|
+
profiles: EntityProfileAttributes[];
|
|
53
|
+
}
|
|
54
|
+
export interface ArbitrationBinding {
|
|
55
|
+
id: string;
|
|
56
|
+
paused: boolean;
|
|
57
|
+
fee: string;
|
|
58
|
+
votingGuards: number;
|
|
59
|
+
usageGuard: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface VoteCounts {
|
|
62
|
+
total: number;
|
|
63
|
+
like: number;
|
|
64
|
+
dislike: number;
|
|
65
|
+
favor: number;
|
|
66
|
+
}
|
|
67
|
+
export interface OrderWindowStats {
|
|
68
|
+
observed: number;
|
|
69
|
+
completed: number;
|
|
70
|
+
inProgress: number;
|
|
71
|
+
unknown: number;
|
|
72
|
+
windowedAmount: string;
|
|
73
|
+
}
|
|
74
|
+
export interface WorkflowShape {
|
|
75
|
+
machine: string;
|
|
76
|
+
nodes: number;
|
|
77
|
+
}
|
|
78
|
+
export interface FundPosition {
|
|
79
|
+
fund: string;
|
|
80
|
+
coinType?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface FundExposure {
|
|
83
|
+
fund: string;
|
|
84
|
+
windowedCount: number;
|
|
85
|
+
windowedAmount: string;
|
|
86
|
+
neededCeiling: string;
|
|
87
|
+
coverageMet: boolean;
|
|
88
|
+
}
|
|
89
|
+
export interface TransparencyProfile {
|
|
90
|
+
description: string;
|
|
91
|
+
location: string;
|
|
92
|
+
settingLockDuration: number;
|
|
93
|
+
published: boolean;
|
|
94
|
+
paused: boolean;
|
|
95
|
+
}
|
|
96
|
+
export interface RiskFindingRefs {
|
|
97
|
+
findings: Array<{
|
|
98
|
+
id: string;
|
|
99
|
+
severity: string;
|
|
100
|
+
title: string;
|
|
101
|
+
}>;
|
|
102
|
+
}
|
|
103
|
+
export declare function projectEvaluationFacts(v: Viewport, target: string, findings: Finding[]): GraphEvaluationFacts;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RETENTION_RANK,pathConfidence}from'./analyze.js';import{orderCompletionInGraph}from'./expand.js';import{profileOf}from'./viewport.js';const STATE_RANK={'present':0x0,'empty':0x1,'gap':0x2};function worstState(c,d){return STATE_RANK[c]>=STATE_RANK[d]?c:d;}export const COVERAGE_VOCABULARY={'present':'present\x20—\x20evidence\x20retrieved\x20and\x20non-empty;\x20real\x20material\x20the\x20rules\x20can\x20score.','empty':'empty\x20—\x20the\x20read\x20completed\x20and\x20verified\x20the\x20absence\x20of\x20data\x20(e.g.\x20no\x20review\x20votes);\x20an\x20answered\x20fact\x20the\x20rules\x20may\x20score,\x20never\x20a\x20fetch\x20failure.','gap':'gap\x20—\x20the\x20evidence\x20was\x20not\x20retrieved,\x20errored,\x20or\x20was\x20truncated;\x20it\x20is\x20unverifiable,\x20so\x20it\x20is\x20excluded\x20from\x20scoring\x20and\x20listed\x20in\x20unverified,\x20never\x20defaulted\x20to\x20a\x20low\x20score.','unverified':'unverified\x20—\x20rule\x20ids\x20excluded\x20from\x20the\x20score\x20because\x20their\x20evidence\x20is\x20gap-state;\x20missing\x20here\x20means\x20every\x20rule\x20was\x20scored\x20on\x20fetched\x20facts.','completeness':'completeness\x20—\x20percentage\x20of\x20required\x20evidence\x20slots\x20that\x20carry\x20material\x20(present);\x20verified-empty\x20slots\x20lower\x20it\x20but\x20stay\x20fully\x20scoreable.'};const REQUIRED_SLOTS=[{'slot':'service_snapshot','label':'Service\x20snapshot','gloss':'The\x20service\x27s\x20own\x20on-chain\x20record\x20(publish/pause\x20status,\x20price,\x20fund\x20and\x20bindings),\x20fetched\x20directly\x20from\x20chain.'},{'slot':'arbitration','label':'Arbitration\x20binding','gloss':'Dispute-resolution\x20services\x20bound\x20to\x20this\x20shop\x20—\x20whether\x20one\x20exists,\x20carries\x20a\x20voter\x20roster,\x20has\x20a\x20funded\x20fee,\x20and\x20is\x20not\x20paused.'},{'slot':'reviews','label':'Review\x20votes','gloss':'On-chain\x20like/dislike\x20votes\x20left\x20by\x20completed-order\x20counterparties;\x20an\x20empty\x20window\x20means\x20nobody\x20voted\x20yet,\x20not\x20a\x20bad\x20rating.'},{'slot':'fulfillment_orders','label':'Recent\x20orders','gloss':'Orders\x20in\x20the\x20shop\x27s\x20recent\x20order\x20window\x20with\x20completion\x20and\x20refund\x20outcomes,\x20used\x20to\x20measure\x20real\x20fulfillment.'},{'slot':'fulfillment_workflow','label':'Fulfillment\x20workflow','gloss':'The\x20bound\x20machine\x27s\x20nodes\x20and\x20forwards\x20that\x20every\x20paid\x20order\x20must\x20progress\x20through\x20to\x20reach\x20completion\x20or\x20refund.'},{'slot':'fund_safety','label':'Compensation\x20fund\x20vs\x20exposure','gloss':'The\x20merchant\x27s\x20compensation\x20fund\x20balance\x20measured\x20against\x20recent\x20order\x20volume\x20(the\x20safety\x20buffer\x20for\x20payouts).'},{'slot':'transparency','label':'Transparency\x20profile','gloss':'The\x20shop\x27s\x20public\x20on-chain\x20profile\x20—\x20description\x20and\x20publish/pause\x20flags\x20a\x20buyer\x20can\x20verify\x20before\x20paying.'}],SLOT_FACTS={'service_snapshot':[],'arbitration':['arbitration.binding'],'reviews':['reviews.votes'],'fulfillment_orders':['fulfillment.orders'],'fulfillment_workflow':['fulfillment.workflow'],'fund_safety':['fund.compensation','fund.exposure'],'transparency':['transparency.profile']},RISK_RULE_SOURCES={'risk_workflow':{'slots':['fulfillment_workflow'],'ruleIds':['R4']},'risk_fund':{'slots':['fund_safety','fulfillment_orders'],'ruleIds':['R2','R7','AC3','AC4']},'risk_trust':{'slots':['arbitration','transparency'],'ruleIds':['R1','R3','R6']},'risk_behavior':{'slots':['fulfillment_orders'],'ruleIds':['AC1','AC2']}};function nodeData(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']()),e=c?.['raw'],f=e?.['data']??e;return f&&typeof f==='object'?f:undefined;}function isFetched(a,b){const c=a['graph']['nodes']['get'](b['toLowerCase']());return!!c&&a['visibleNodes']['has'](c['id'])&&!!c['raw']&&c['state']!=='error'&&c['state']!=='stub';}function truncationOf(a,b,c){const d=a['graph']['truncations']['find'](e=>e['nodeId']===b&&e['schema']===c);return d?{'observed':d['observed'],'limit':d['limit']}:undefined;}function outEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['from']===b['toLowerCase']()&&d['schema']===c);}function incEdges(a,b,c){return a['visibleEdges']['filter'](d=>d['to']===b['toLowerCase']()&&d['schema']===c);}function toBigInt(a){if(a==null)return 0x0n;try{return BigInt(typeof a==='number'?Math['trunc'](a):String(a));}catch{return 0x0n;}}function flag(a){return a===!![]||a===0x1||a==='1';}function snapProvenance(a){return{'path':a,'retention':'complete','confidence':'exact'};}function edgeProvenance(a,b,c){const {confidence:d,window:e}=pathConfidence(a,c),f=c['reduce']((g,h)=>RETENTION_RANK[h['retention']]>RETENTION_RANK[g]?h['retention']:g,'complete');return{'path':b,'retention':f,'confidence':d,...e?{'window':e}:{}};}export function projectEvaluationFacts(a,b,c){const f=b['toLowerCase'](),g=[],h=new Map(),i=new Map(),j=(U,V,W='exact')=>{h['set'](U,V),i['set'](U,W);},k=a['graph']['nodes']['get'](f),l=a['visibleNodes']['has'](f),m=!!(l&&k&&k['raw']&&k['state']!=='error'&&k['state']!=='stub'&&k['objectType']==='Service'),o=m?nodeData(a,f)??{}:{},q=k?.['coinType'];j('service_snapshot',m?'present':'gap');const r=Array['isArray'](o['arbitrations'])?o['arbitrations']['map'](String)['filter'](Boolean):[],u=outEdges(a,f,'service.arbitration'),w=[];let x=!![];for(const U of r){if(!isFetched(a,U)){x=![];continue;}const V=nodeData(a,U)??{},W=Array['isArray'](V['voting_guard'])?V['voting_guard']:[];w['push']({'id':U['toLowerCase'](),'paused':flag(V['bPaused']),'fee':toBigInt(V['fee'])['toString'](),'votingGuards':W['length'],'usageGuard':typeof V['usage_guard']==='string'&&V['usage_guard']!==''});}if(!m)j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','provenance':snapProvenance([f]),'evidence':'Arbitration\x20configuration\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(r['length']===0x0)j('arbitration','empty'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'empty','value':[],'provenance':snapProvenance([f,'Service.arbitrations']),'evidence':'Service\x20snapshot\x20shows\x20no\x20arbitration\x20service\x20configured\x20(verified\x20absence).'});else!x?(j('arbitration','gap'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'gap','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'/'+r['length']+'\x20arbitration\x20service(s)\x20resolved;\x20the\x20rest\x20failed\x20to\x20fetch.'})):(j('arbitration','present',u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u)['confidence']:'exact'),g['push']({'dimension':'arbitration','key':'arbitration.binding','state':'present','value':w,'provenance':u['length']>0x0?edgeProvenance(a,[f,'service.arbitration'],u):snapProvenance([f,'Service.arbitrations']),'evidence':w['length']+'\x20arbitration\x20service(s)\x20resolved\x20from\x20the\x20snapshot\x20with\x20voting\x20rosters.'}));}const y=outEdges(a,f,'target.vote'),z=truncationOf(a,f,'target.vote'),A={'total':y['length'],'like':0x0,'dislike':0x0,'favor':0x0};for(const X of y){const Y=typeof X['payload']?.['voteBits']==='number'?X['payload']['voteBits']:0x0;if(Y&0x2)A['like']+=0x1;if(Y&0x4)A['dislike']+=0x1;if(Y&0x8)A['favor']+=0x1;}const B=y['length']>0x0?edgeProvenance(a,[f,'target.vote'],y):snapProvenance([f,'registrar.votes']);if(!m)j('reviews','gap'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','provenance':snapProvenance([f]),'evidence':'Reputation\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{if(z)j('reviews','gap',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'gap','value':A,'provenance':{...B,'window':z},'evidence':'Vote\x20window\x20truncated\x20at\x20'+z['limit']+';\x20'+A['total']+'\x20vote(s)\x20visible\x20—\x20counts\x20are\x20a\x20floor.'});else A['total']===0x0?(j('reviews','empty'),g['push']({'dimension':'reviews','key':'reviews.votes','state':'empty','value':A,'provenance':B,'evidence':'No\x20registrar\x20votes\x20recorded\x20for\x20the\x20service\x20(window\x20read\x20empty,\x20no\x20truncation).'})):(j('reviews','present',B['confidence']),g['push']({'dimension':'reviews','key':'reviews.votes','state':'present','value':A,'provenance':B,'evidence':A['total']+'\x20registrar\x20vote(s):\x20'+A['like']+'\x20like,\x20'+A['dislike']+'\x20dislike,\x20'+A['favor']+'\x20favor.'}));}const C=outEdges(a,f,'service.order'),D=truncationOf(a,f,'service.order'),E={'observed':C['length'],'completed':0x0,'inProgress':0x0,'unknown':0x0,'windowedAmount':'0'};let F=0x0n;for(const Z of C){const a0=orderCompletionInGraph(a['graph'],Z['to'])['status'];if(a0==='completed')E['completed']+=0x1;else{if(a0==='in_progress')E['inProgress']+=0x1;else E['unknown']+=0x1;}F+=toBigInt(nodeData(a,Z['to'])?.['amount']);}E['windowedAmount']=F['toString']();const G=C['length']>0x0?edgeProvenance(a,[f,'service.order','Order'],C):snapProvenance([f,'service.order']);let H;if(!m)H='gap';else{if(D)H='gap';else H=C['length']===0x0?'empty':'present';}j('fulfillment_orders',H,G['confidence']);if(H==='gap'&&m)g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','value':E,'provenance':{...G,'window':D},'evidence':'Order\x20window\x20truncated\x20at\x20'+D?.['limit']+'\x20(observed\x20'+D?.['observed']+');\x20'+E['observed']+'\x20order(s)\x20visible\x20—\x20completion\x20stats\x20are\x20a\x20partial\x20floor.'});else{if(H==='empty')g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'empty','value':E,'provenance':G,'evidence':'No\x20orders\x20in\x20the\x20service\x20window\x20(verified\x20absence).'});else H==='present'?g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'present','value':E,'provenance':G,'evidence':E['observed']+'\x20recent\x20order(s):\x20'+E['completed']+'\x20completed,\x20'+E['inProgress']+'\x20in\x20progress,\x20'+E['unknown']+'\x20unresolved.'}):g['push']({'dimension':'fulfillment','key':'fulfillment.orders','state':'gap','provenance':snapProvenance([f]),'evidence':'Order\x20window\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});}const I=typeof o['machine']==='string'?o['machine']:'',J=I!==''&&isFetched(a,I),K=I===''?'':I['toLowerCase']()+'::node::',L=K===''?[]:a['graph']['edges']['filter'](a1=>a1['schema']==='wf.transition'&&a1['from']['startsWith'](K)),M=new Set();for(const a1 of L){M['add'](a1['from']);const a2=String(a1['payload']?.['node']??'');if(a2!=='')M['add'](''+K+a2);}let N,O;if(!m)N='gap',O='Workflow\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.';else{if(I==='')N='empty',O='No\x20workflow\x20template\x20configured\x20(verified\x20absence).';else{if(!J)N='gap',O='Machine\x20template\x20referenced\x20but\x20not\x20fetched\x20(fetch\x20gap).';else L['length']===0x0?(N='gap',O='Machine\x20fetched\x20but\x20no\x20wf.transition\x20edges\x20—\x20terminal\x20set\x20unverifiable;\x20completion\x20states\x20stay\x20unknown.'):(N='present',O='Machine\x20template\x20resolved\x20with\x20'+M['size']+'\x20workflow\x20node(s);\x20terminal\x20set\x20verifiable.');}}j('fulfillment_workflow',N,N==='present'?'exact':N==='empty'?'exact':'windowed'),g['push']({'dimension':'fulfillment','key':'fulfillment.workflow','state':N,...I!==''&&J?{'value':{'machine':I['toLowerCase'](),'nodes':M['size']}}:{},'provenance':N==='present'?edgeProvenance(a,[f,'service.machine','wf.transition'],L):snapProvenance([f,'Service.machine']),'evidence':O});const P=toBigInt(o['compensation_fund']);if(!m)j('fund_safety','gap'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'gap','provenance':snapProvenance([f]),'evidence':'Fund\x20backing\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'}),g['push']({'dimension':'fund_safety','key':'fund.exposure','state':'gap','provenance':snapProvenance([f]),'evidence':'Payout\x20exposure\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{j('fund_safety','present'),g['push']({'dimension':'fund_safety','key':'fund.compensation','state':'present','value':{'fund':P['toString'](),...q?{'coinType':q}:{}},'provenance':snapProvenance([f,'Service.compensation_fund']),'evidence':'Compensation\x20fund\x20'+P['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'.'});const a3=F*0x3n,a4=worstState('present',H),a5=c['find'](a6=>a6['id']==='R2:'+f);g['push']({'dimension':'fund_safety','key':'fund.exposure','state':a4,'value':{'fund':P['toString'](),'windowedCount':E['observed'],'windowedAmount':F['toString'](),'neededCeiling':a3['toString'](),'coverageMet':P>=a3},'provenance':C['length']>0x0?edgeProvenance(a,[f,'service.order','Order.amount','Service.compensation_fund'],C):snapProvenance([f,'Service.compensation_fund']),'findingIds':a5?[a5['id']]:undefined,'evidence':H==='empty'?'No\x20recent\x20orders;\x20no\x20payout\x20exposure\x20to\x20cover.':'Recent\x20orders\x20total\x20'+F['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+'\x20across\x20'+E['observed']+'\x20order(s);\x20the\x20compensation\x20fund\x20should\x20cover\x20at\x20least\x203x\x20that\x20('+a3['toString']()+'\x20base\x20units'+(q?'\x20in\x20'+q:'')+')\x20—\x20coverage\x20'+(P>=a3?'met':'not\x20met')+(D?'\x20(older\x20orders\x20outside\x20the\x20fetch\x20window,\x20floor\x20value\x20only)':'')+'.'});}if(!m)j('transparency','gap'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'gap','provenance':snapProvenance([f]),'evidence':'Transparency\x20unverifiable:\x20the\x20service\x20snapshot\x20is\x20missing.'});else{const a6=typeof o['setting_lock_duration']==='number'?o['setting_lock_duration']:Number(toBigInt(o['setting_lock_duration'])),a7=flag(o['bPublished']);j('transparency','present'),g['push']({'dimension':'transparency','key':'transparency.profile','state':'present','value':{'description':typeof o['description']==='string'?o['description']:'','location':typeof o['location']==='string'?o['location']:'','settingLockDuration':Number['isFinite'](a6)?a6:0x0,'published':a7,'paused':flag(o['bPaused'])},'provenance':snapProvenance([f,'Service.bPublished','Service.setting_lock_duration']),'findingIds':c['some'](a8=>a8['id']==='R6:'+f)?['R6:'+f]:undefined,'evidence':'Service\x20profile:\x20description\x20'+(typeof o['description']==='string'&&o['description']!==''?'provided':'not\x20provided')+',\x20location\x20'+(typeof o['location']==='string'&&o['location']!==''?'provided':'not\x20provided')+',\x20service\x20lock\x20'+a6+'\x20ms,\x20'+(a7?'published':'unpublished')+'.'});}for(const a8 of['risk_workflow','risk_fund','risk_trust','risk_behavior']){const a9=RISK_RULE_SOURCES[a8];let aa='present',ab,ac=-0x1;for(const ag of a9['slots']){const ah=h['get'](ag)??'gap';STATE_RANK[ah]>ac&&(ac=STATE_RANK[ah],aa=ah,ab=ag);}let ae;if(aa==='gap')ae='windowed';else{if(aa==='empty')ae='bounded';else ae=ab&&i['get'](ab)||'exact';}const af=c['filter'](ai=>a9['ruleIds']['some'](aj=>ai['id']['startsWith'](aj+':')));g['push']({'dimension':a8,'key':a8+'.findings','state':aa,'value':{'findings':af['map'](ai=>({'id':ai['id'],'severity':ai['severity'],'title':ai['title']}))},'provenance':{'path':[f,...a9['slots']],'retention':'derived','confidence':ae},'findingIds':af['map'](ai=>ai['id']),'evidence':aa==='gap'?'Input\x20evidence\x20has\x20fetch\x20gaps;\x20the\x20risk\x20conclusion\x20is\x20unverifiable.':aa==='empty'?'Input\x20evidence\x20is\x20configured-empty;\x20the\x20risk\x20rules\x20are\x20not\x20applicable.':af['length']>0x0?af['length']+'\x20structural\x20risk\x20finding(s)\x20reused\x20from\x20the\x20analyzer\x20registry.':'No\x20risk\x20fired;\x20input\x20evidence\x20slots\x20are\x20fully\x20materialized.'});}const Q=[];for(const ai of a['visibleNodes']){const aj=profileOf(a,ai);if(!aj)continue;const ak=Array['isArray'](aj['profileRecords'])?aj['profileRecords']:undefined;Q['push']({'nodeId':ai,...typeof aj['registeredAt']==='number'?{'registeredAt':aj['registeredAt']}:{},'hasDescription':!!aj['hasDescription']||typeof aj['description']==='string','recordCount':typeof aj['recordCount']==='number'?aj['recordCount']:ak?.['length']??0x0,...typeof aj['description']==='string'?{'description':aj['description']}:{},...ak?{'profileRecords':ak}:{}});}const R=REQUIRED_SLOTS['length'],S=REQUIRED_SLOTS['filter'](({slot:al})=>h['get'](al)==='present')['length'],T=R===0x0?0x64:Math['round'](S/R*0x64);return{'target':f,'role':String(a['role']),'facts':g,'slots':REQUIRED_SLOTS['map'](({slot:al,label:am,gloss:an})=>({'slot':al,'label':am,'gloss':an,'required':!![],'state':h['get'](al)??'gap','facts':[...SLOT_FACTS[al]??[]]})),'completeness':T,'profiles':Q};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{ENTRYPOINT}from'@wowok/wowok';import{FakeDataPlane}from'./dataplane.js';import{expandTopology}from'./expand.js';import{FULL,GAP,fullServiceState,gapServiceState,truncatedServiceState}from'./fixtures.js';import{buildViewport}from'./viewport.js';import{runAnalyzers}from'./analyze.js';import{EVALUATION_SERVICE_INTENTS,resolveExpansionStrategy,withEvaluationBundle}from'./strategy.js';import{projectEvaluationFacts}from'./facts.js';async function evalFacts(a,b){const c=withEvaluationBundle(resolveExpansionStrategy({'intents':[...EVALUATION_SERVICE_INTENTS]})),d=await expandTopology(new FakeDataPlane(a),{'network':ENTRYPOINT['Mainnet'],'seed':b,'edges':c['edges'],'budget':c['budget']}),e=buildViewport(d,b,'neutral'),f=runAnalyzers(e);return projectEvaluationFacts(e,b,f);}const slotOf=(a,b)=>a['slots']['find'](c=>c['slot']===b),factOf=(a,b)=>{const c=a['facts']['find'](d=>d['key']===b);return expect(c,'fact\x20'+b+'\x20must\x20exist')['toBeDefined'](),c;},EMPTY_STATE={'objects':new Map(),'keyedFields':new Map(),'tables':new Map(),'events':new Map()};describe('facts\x20—\x20fully\x20hooked\x20service\x20(TR-13.1)',()=>{it('classifies\x20every\x20required\x20slot\x20present\x20with\x20material\x20facts',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'reviews')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x64);const b=factOf(a,'arbitration.binding');expect(b['state'])['toBe']('present'),expect(b['value'])['toMatchObject']([{'id':FULL['arbsvc']['toLowerCase'](),'paused':![],'votingGuards':0x1,'usageGuard':!![]}]),expect(b['provenance']['path'])['toContain']('service.arbitration'),expect(factOf(a,'reviews.votes')['value'])['toMatchObject']({'total':0x2,'like':0x1,'dislike':0x1,'favor':0x1}),expect(factOf(a,'fulfillment.orders')['value'])['toMatchObject']({'observed':0x2,'completed':0x1,'inProgress':0x1,'unknown':0x0,'windowedAmount':'1000000'});const c=factOf(a,'fulfillment.workflow');expect(c['state'])['toBe']('present'),expect(c['value'])['toMatchObject']({'machine':FULL['mac']['toLowerCase'](),'nodes':0x3}),expect(factOf(a,'fund.compensation')['value'])['toMatchObject']({'fund':'0'});const d=factOf(a,'fund.exposure');expect(d['value'])['toMatchObject']({'windowedCount':0x2,'windowedAmount':'1000000','neededCeiling':'3000000','coverageMet':![]}),expect(d['findingIds'])['toEqual'](['R2:'+FULL['svc']['toLowerCase']()]),expect(factOf(a,'transparency.profile')['findingIds'])['toEqual'](['R6:'+FULL['svc']['toLowerCase']()]);}),it('reuses\x20analyzer\x20findings\x20by\x20reference\x20in\x20the\x20risk\x20dimensions',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=factOf(a,'risk_trust.findings');expect(b['state'])['toBe']('present'),expect(b['findingIds']['some'](g=>g['startsWith']('R1:')))['toBe'](!![]);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('present'),expect(c['findingIds'])['toContain']('R2:'+FULL['svc']['toLowerCase']());const d=factOf(a,'risk_behavior.findings');expect(d['state'])['toBe']('present'),expect(d['findingIds'])['toEqual']([]);const e=factOf(a,'risk_workflow.findings');expect(e['state'])['toBe']('present'),expect(e['evidence'])['toContain']('fully\x20materialized');});}),describe('facts\x20—\x20configured-empty\x20shell\x20merchant\x20(TR-13.1)',()=>{it('scores\x20configured\x20absence\x20as\x20empty\x20and\x20the\x20dangling\x20machine\x20as\x20gap',async()=>{const a=await evalFacts(gapServiceState(),GAP['svc']);expect(slotOf(a,'service_snapshot')['state'])['toBe']('present'),expect(slotOf(a,'arbitration')['state'])['toBe']('empty'),expect(factOf(a,'arbitration.binding')['state'])['toBe']('empty'),expect(slotOf(a,'reviews')['state'])['toBe']('empty'),expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('gap'),expect(factOf(a,'fulfillment.workflow')['evidence'])['toContain']('fetch\x20gap'),expect(slotOf(a,'fund_safety')['state'])['toBe']('present'),expect(slotOf(a,'transparency')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x39),expect(factOf(a,'risk_workflow.findings')['state'])['toBe']('gap'),expect(factOf(a,'risk_workflow.findings')['provenance']['confidence'])['toBe']('windowed'),expect(factOf(a,'risk_trust.findings')['state'])['toBe']('empty');});}),describe('facts\x20—\x20truncated\x20order\x20window\x20(TR-13.1)',()=>{it('marks\x20the\x20truncated\x20window\x20slot\x20gap\x20and\x20cascades\x20into\x20risk_fund',async()=>{const a=await evalFacts(truncatedServiceState(),FULL['svc']);expect(slotOf(a,'fulfillment_orders')['state'])['toBe']('gap');const b=factOf(a,'fulfillment.orders');expect(b['state'])['toBe']('gap'),expect(b['provenance']['window'])['toBeDefined'](),expect(b['value']['observed'])['toBeGreaterThan'](0x0);const c=factOf(a,'risk_fund.findings');expect(c['state'])['toBe']('gap'),expect(c['evidence'])['toContain']('unverifiable'),expect(slotOf(a,'arbitration')['state'])['toBe']('present'),expect(slotOf(a,'fulfillment_workflow')['state'])['toBe']('present'),expect(a['completeness'])['toBe'](0x56);});}),describe('facts\x20—\x20completeness\x20(TR-13.2)',()=>{it('is\x20an\x20integer\x200..100\x20consistent\x20with\x20present/required\x20on\x20every\x20fixture',async()=>{const a=await Promise['all']([evalFacts(fullServiceState(),FULL['svc']),evalFacts(gapServiceState(),GAP['svc']),evalFacts(truncatedServiceState(),FULL['svc'])]);for(const b of a){expect(Number['isInteger'](b['completeness']))['toBe'](!![]),expect(b['completeness'])['toBeGreaterThanOrEqual'](0x0),expect(b['completeness'])['toBeLessThanOrEqual'](0x64);const c=b['slots']['filter'](e=>e['required']&&e['state']==='present')['length'],d=b['slots']['filter'](e=>e['required'])['length'];expect(b['completeness'])['toBe'](Math['round'](c/d*0x64));for(const e of b['facts']){expect(e['provenance']['path']['length'])['toBeGreaterThan'](0x0),expect(e['provenance']['retention'])['toBeDefined'](),expect(e['evidence']['length'])['toBeGreaterThan'](0x0);if(e['dimension']['startsWith']('risk_'))continue;const g=e['dimension']==='fulfillment'?e['key']['includes']('workflow')?'fulfillment_workflow':'fulfillment_orders':e['dimension'];expect(slotOf(b,g)['facts'])['toContain'](e['key']);}}}),it('collapses\x20to\x200\x20with\x20all\x20slots\x20gap\x20when\x20the\x20target\x20is\x20missing',async()=>{const a=await evalFacts(EMPTY_STATE,FULL['svc']);expect(a['slots']['every'](b=>b['state']==='gap'))['toBe'](!![]),expect(a['completeness'])['toBe'](0x0),expect(factOf(a,'risk_behavior.findings')['state'])['toBe']('gap');});}),describe('facts\x20—\x20entity\x20profile\x20attributes',()=>{it('projects\x20viewport-cropped\x20payloads;\x20absence\x20yields\x20no\x20entry',async()=>{const a=await evalFacts(fullServiceState(),FULL['svc']),b=a['profiles']['map'](e=>e['nodeId']);expect(b)['toContain'](FULL['supplier']['toLowerCase']());const c=a['profiles']['find'](e=>e['nodeId']===FULL['supplier']['toLowerCase']());expect(c['description'])['toBe']('Acme\x20logistics\x20co.'),expect(c['registeredAt'])['toBe'](0x18bcfe57b88),expect(c['recordCount'])['toBe'](0x1),expect(c['profileRecords'])['toEqual']([{'name':'region','valueType':0x1,'value':'cn-east'}]);const d=a['profiles']['find'](e=>e['nodeId']===FULL['member']['toLowerCase']());expect(d['hasDescription'])['toBe'](!![]),expect(d['recordCount'])['toBe'](0x0),expect(b)['not']['toContain'](FULL['buyer']['toLowerCase']());});});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type FieldDisposition = {
|
|
2
|
+
readonly kind: "edge";
|
|
3
|
+
readonly schema: string;
|
|
4
|
+
readonly coSchemas?: readonly string[];
|
|
5
|
+
readonly note?: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly kind: "attribute";
|
|
8
|
+
readonly note: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: "transient";
|
|
11
|
+
readonly note: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: "nonAddress";
|
|
14
|
+
readonly note: string;
|
|
15
|
+
};
|
|
16
|
+
export interface FieldEntry {
|
|
17
|
+
readonly field: string;
|
|
18
|
+
readonly disposition: FieldDisposition;
|
|
19
|
+
readonly evidence: string;
|
|
20
|
+
readonly oq?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ObjectManifest {
|
|
23
|
+
readonly object: string;
|
|
24
|
+
readonly moveStruct: string;
|
|
25
|
+
readonly fields: readonly FieldEntry[];
|
|
26
|
+
}
|
|
27
|
+
export declare const FIELD_MANIFEST: readonly ObjectManifest[];
|
|
28
|
+
export declare const MANIFEST_BY_OBJECT: ReadonlyMap<string, ObjectManifest>;
|
|
29
|
+
export declare const BUSINESS_OBJECTS: readonly string[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{PackageAddress}from'@wowok/wowok';const SYS=a=>({'field':'id','disposition':{'kind':'nonAddress','note':'Object\x20identity\x20(UID);\x20system-managed,\x20never\x20a\x20business\x20reference'},'evidence':a}),SERVICE={'object':'Service','moveStruct':'service.move\x20L174-193\x20Service<T>','fields':[SYS('service.move\x20L174-193'),{'field':'description','disposition':{'kind':'attribute','note':'Shop\x20self-description;\x20node\x20property'},'evidence':'service.move\x20L174-193'},{'field':'location','disposition':{'kind':'attribute','note':'Service\x20area\x20/\x20market-opportunity\x20routing\x20key'},'evidence':'service.move\x20L174-193'},{'field':'sales','disposition':{'kind':'attribute','note':'Catalog\x20items\x20for\x20sale\x20(what\x20the\x20shop\x20sells)'},'evidence':'service.move\x20L174-193'},{'field':'repositories','disposition':{'kind':'edge','schema':'service.repository'},'evidence':'service.move\x20L174-193\x20(<=100)'},{'field':'buy_guard','disposition':{'kind':'edge','schema':'service.buy_guard'},'evidence':'service.move\x20L174-193'},{'field':'machine','disposition':{'kind':'edge','schema':'service.machine'},'evidence':'service.move\x20L174-193'},{'field':'bPublished','disposition':{'kind':'attribute','note':'Publish\x20flag;\x20freezes\x20machine/guard\x20settings;\x20analyzer\x20input'},'evidence':'service.move\x20L174-193'},{'field':'bPaused','disposition':{'kind':'attribute','note':'Pause\x20flag;\x20purchasability;\x20analyzer\x20input'},'evidence':'service.move\x20L174-193'},{'field':'customer_required','disposition':{'kind':'attribute','note':'Custom\x20info\x20fields\x20the\x20shop\x20requires\x20from\x20buyers'},'evidence':'service.move\x20L174-193'},{'field':'arbitrations','disposition':{'kind':'edge','schema':'service.arbitration'},'evidence':'service.move\x20L174-193\x20(<=20)'},{'field':'compensation_fund','disposition':{'kind':'attribute','note':'Escrowed\x20compensation\x20balance\x20(arbitration\x20solvency\x20signal)'},'evidence':'service.move\x20L174-193'},{'field':'paused_time','disposition':{'kind':'attribute','note':'When\x20the\x20shop\x20was\x20paused\x20(timestamp-ms)'},'evidence':'service.move\x20L174-193'},{'field':'setting_lock_duration','disposition':{'kind':'attribute','note':'Lock\x20duration\x20gating\x20post-pause\x20setting\x20changes'},'evidence':'service.move\x20L174-193'},{'field':'order_allocators','disposition':{'kind':'edge','schema':'service.order_allocator_guard','note':'Allocators\x20container;\x20guard\x20members\x20are\x20the\x20edge,\x20sharing\x20amounts\x20ride\x20the\x20payload'},'evidence':'service.move\x20L174-193;\x20allocation.move\x20L194-200'},{'field':'rewards','disposition':{'kind':'edge','schema':'service.reward'},'evidence':'service.move\x20L174-193\x20(<=20)'},{'field':'um','disposition':{'kind':'edge','schema':'service.um'},'evidence':'service.move\x20L174-193'},{'field':'permission','disposition':{'kind':'edge','schema':'service.permission'},'evidence':'service.move\x20L174-193'}]},ORDER={'object':'Order','moveStruct':'order.move\x20L59-74\x20Order','fields':[SYS('order.move\x20L59-74'),{'field':'items','disposition':{'kind':'attribute','note':'Purchased\x20line\x20items\x20(what\x20was\x20bought)'},'evidence':'order.move\x20L59-74'},{'field':'discount','disposition':{'kind':'edge','schema':'order.discount'},'evidence':'order.move\x20L59-74'},{'field':'progress','disposition':{'kind':'edge','schema':'order.progress'},'evidence':'order.move\x20L59-74,L130'},{'field':'machine','disposition':{'kind':'edge','schema':'order.machine'},'evidence':'order.move\x20L59-74,L130'},{'field':'amount','disposition':{'kind':'attribute','note':'Total\x20paid\x20(order\x20value\x20signal)'},'evidence':'order.move\x20L59-74'},{'field':'owner','disposition':{'kind':'edge','schema':'order.builder','note':'SDK\x20normalizes\x20owner\x20to\x20builder'},'evidence':'order.move\x20L59-74\x20(owner)'},{'field':'service','disposition':{'kind':'edge','schema':'order.service'},'evidence':'order.move\x20L59-74'},{'field':'dispute','disposition':{'kind':'edge','schema':'order.dispute'},'evidence':'order.move\x20L59-74'},{'field':'agent','disposition':{'kind':'edge','schema':'order.agent'},'evidence':'order.move\x20L59-74,L179\x20(<=10)'},{'field':'allocation','disposition':{'kind':'edge','schema':'order.allocation'},'evidence':'order.move\x20L59-74,L130'},{'field':'claimed_by','disposition':{'kind':'edge','schema':'order.claimed_by'},'evidence':'order.move\x20L59-74,L86-96'},{'field':'required_info','disposition':{'kind':'edge','schema':'order.required_info'},'evidence':'order.move\x20L73,L77-80','oq':'IM\x20book\x20or\x20WTS\x20proof\x20(b11/b12)'},{'field':'time','disposition':{'kind':'attribute','note':'Creation\x20time\x20(timestamp-ms)'},'evidence':'order.move\x20L59-74'}]},DISCOUNT={'object':'Discount','moveStruct':'service.move\x20L109-119\x20Discount','fields':[SYS('service.move\x20L109-119'),{'field':'name','disposition':{'kind':'attribute','note':'Discount\x20campaign\x20name'},'evidence':'service.move\x20L109-119'},{'field':'discount_type','disposition':{'kind':'attribute','note':'RATIO\x20(off%)\x20or\x20MINUS\x20(-N)\x20pricing\x20mode'},'evidence':'service.move\x20L109-119'},{'field':'benchmark','disposition':{'kind':'attribute','note':'Minimum-spend\x20condition\x20for\x20the\x20discount'},'evidence':'service.move\x20L109-119'},{'field':'off','disposition':{'kind':'attribute','note':'Discount\x20magnitude\x20(rate\x20or\x20fixed\x20amount)'},'evidence':'service.move\x20L109-119'},{'field':'time_start','disposition':{'kind':'attribute','note':'Validity\x20window\x20start\x20(timestamp-ms)'},'evidence':'service.move\x20L109-119'},{'field':'time_end','disposition':{'kind':'attribute','note':'Validity\x20window\x20end\x20/\x20expiry'},'evidence':'service.move\x20L109-119'},{'field':'service','disposition':{'kind':'edge','schema':'discount.service'},'evidence':'service.move\x20L117','oq':'OQ-3\x20(Discount\x20joins\x20COVERED\x20types)'},{'field':'transferable','disposition':{'kind':'attribute','note':'Whether\x20the\x20discount\x20may\x20be\x20handed\x20to\x20a\x20receiver'},'evidence':'service.move\x20L109-119'}]},PROGRESS={'object':'Progress','moveStruct':'progress.move\x20L75-85\x20Progress','fields':[SYS('progress.move\x20L75-85'),{'field':'machine','disposition':{'kind':'edge','schema':'progress.machine'},'evidence':'progress.move\x20L75-85'},{'field':'context_repositories','disposition':{'kind':'edge','schema':'progress.context_repository'},'evidence':'progress.move\x20L78,L199-208'},{'field':'current','disposition':{'kind':'attribute','note':'Current\x20node\x20name\x20(completion\x20determination\x20input)'},'evidence':'progress.move\x20L75-85'},{'field':'task','disposition':{'kind':'edge','schema':'progress.task'},'evidence':'progress.move\x20L80'},{'field':'namedOperator','disposition':{'kind':'edge','schema':'progress.named_operator','note':'Container\x20struct;\x20operators[]\x20members\x20are\x20the\x20edge'},'evidence':'progress.move\x20L81\x20(<=80)'},{'field':'session','disposition':{'kind':'attribute','note':'Per-node\x20session\x20records\x20(runtime\x20state)'},'evidence':'progress.move\x20L82'},{'field':'history','disposition':{'kind':'attribute','note':'Node-history\x20ParentTableVec\x20(runtime\x20audit\x20trail,\x20not\x20enumerated\x20as\x20edges)'},'evidence':'progress.move\x20L83'},{'field':'current_time','disposition':{'kind':'attribute','note':'Last\x20activity\x20clock\x20(staleness\x20signal)'},'evidence':'progress.move\x20L84'}]},MACHINE={'object':'Machine','moveStruct':'machine.move\x20L298-307\x20Machine','fields':[SYS('machine.move\x20L298-307'),{'field':'description','disposition':{'kind':'attribute','note':'Workflow\x20description'},'evidence':'machine.move\x20L298-307'},{'field':'nodes','disposition':{'kind':'edge','schema':'machine.node','coSchemas':['wf.transition','wf.forward_guard'],'note':'ParentLinkedTable\x20walk\x20yields\x20node\x20rows;\x20transitions\x20and\x20forward\x20guards\x20derive\x20from\x20the\x20same\x20rows'},'evidence':'machine.move\x20L301'},{'field':'consensus_repositories','disposition':{'kind':'edge','schema':'machine.consensus_repository'},'evidence':'machine.move\x20L302'},{'field':'bPaused','disposition':{'kind':'attribute','note':'Workflow\x20pause\x20flag'},'evidence':'machine.move\x20L298-307'},{'field':'bPublished','disposition':{'kind':'attribute','note':'Publish\x20flag;\x20freezes\x20the\x20node\x20table'},'evidence':'machine.move\x20L298-307'},{'field':'um','disposition':{'kind':'edge','schema':'machine.um'},'evidence':'machine.move\x20L305'},{'field':'permission','disposition':{'kind':'edge','schema':'machine.permission'},'evidence':'machine.move\x20L306'}]},ALLOCATION={'object':'Allocation','moveStruct':'allocation.move\x20L196-202\x20Allocation<T>','fields':[SYS('allocation.move\x20L196-202'),{'field':'balance','disposition':{'kind':'attribute','note':'Remaining\x20pool\x20balance\x20(solvency\x20signal)'},'evidence':'allocation.move\x20L196-202'},{'field':'allocators','disposition':{'kind':'edge','schema':'allocation.guard','note':'Allocator\x20segments;\x20guard\x20members\x20are\x20the\x20edge,\x20sharing\x20amounts\x20ride\x20the\x20payload'},'evidence':'allocation.move\x20L199,L194-200'},{'field':'payment_info','disposition':{'kind':'edge','schema':'allocation.for_object','coSchemas':['allocation.for_guard'],'note':'PaymentInfo\x20captured\x20at\x20pool\x20create;\x20remark/index\x20are\x20attributes'},'evidence':'allocation.move\x20L200;\x20payment.move\x20L66-71'},{'field':'payment','disposition':{'kind':'edge','schema':'allocation.payment'},'evidence':'allocation.move\x20L201,L307-316'}]},ARBITRATION={'object':'Arbitration','moveStruct':'arbitration.move\x20L47-58\x20Arbitration<T>','fields':[SYS('arbitration.move\x20L47-58'),{'field':'description','disposition':{'kind':'attribute','note':'Arbitration\x20service\x20self-description'},'evidence':'arbitration.move\x20L47-58'},{'field':'location','disposition':{'kind':'attribute','note':'Jurisdiction\x20/\x20service\x20area'},'evidence':'arbitration.move\x20L47-58'},{'field':'voting_guard','disposition':{'kind':'edge','schema':'arbitration.voting_guard','note':'Empty\x20vector\x20=\x20open\x20voting;\x20members\x20carry\x20vote\x20weight'},'evidence':'arbitration.move\x20L51'},{'field':'usage_guard','disposition':{'kind':'edge','schema':'arbitration.usage_guard'},'evidence':'arbitration.move\x20L52'},{'field':'fee','disposition':{'kind':'attribute','note':'Case\x20filing\x20fee'},'evidence':'arbitration.move\x20L53'},{'field':'balance','disposition':{'kind':'attribute','note':'Service\x20balance\x20(solvency\x20signal)'},'evidence':'arbitration.move\x20L54'},{'field':'bPaused','disposition':{'kind':'attribute','note':'Service\x20pause\x20flag'},'evidence':'arbitration.move\x20L55'},{'field':'um','disposition':{'kind':'edge','schema':'arbitration.um'},'evidence':'arbitration.move\x20L56'},{'field':'permission','disposition':{'kind':'edge','schema':'arbitration.permission'},'evidence':'arbitration.move\x20L57'}]},ARB={'object':'Arb','moveStruct':'arb.move\x20L95-110\x20Arb<T>','fields':[SYS('arb.move\x20L95-110'),{'field':'description','disposition':{'kind':'attribute','note':'Case\x20description'},'evidence':'arb.move\x20L95-110'},{'field':'order','disposition':{'kind':'edge','schema':'arb.order'},'evidence':'arb.move\x20L98'},{'field':'arbitration','disposition':{'kind':'edge','schema':'arb.arbitration_service'},'evidence':'arb.move\x20L99'},{'field':'voted','disposition':{'kind':'edge','schema':'arb.voter','note':'Voter\x20members\x20are\x20the\x20edge;\x20weights/agrees\x20ride\x20the\x20payload'},'evidence':'arb.move\x20L100\x20(<=520)'},{'field':'proposition','disposition':{'kind':'attribute','note':'Propositions\x20and\x20votes\x20(state-machine\x20input)'},'evidence':'arb.move\x20L101'},{'field':'fee','disposition':{'kind':'attribute','note':'Escrowed\x20case\x20fee'},'evidence':'arb.move\x20L102'},{'field':'feedback','disposition':{'kind':'attribute','note':'Ruling\x20feedback\x20text'},'evidence':'arb.move\x20L103'},{'field':'indemnity','disposition':{'kind':'attribute','note':'Ruled\x20indemnity\x20(compensation\x20outcome)'},'evidence':'arb.move\x20L104'},{'field':'voting_deadline','disposition':{'kind':'attribute','note':'Voting\x20deadline\x20(timestamp-ms)'},'evidence':'arb.move\x20L105'},{'field':'objection','disposition':{'kind':'attribute','note':'Objection\x20record'},'evidence':'arb.move\x20L106'},{'field':'status','disposition':{'kind':'attribute','note':'Case\x20state-machine\x20stage\x20(analyzer\x20input)'},'evidence':'arb.move\x20L107'},{'field':'compensation_time','disposition':{'kind':'attribute','note':'When\x20compensation\x20executed\x20(timestamp-ms)'},'evidence':'arb.move\x20L108'},{'field':'time','disposition':{'kind':'attribute','note':'Case\x20creation\x20time\x20(timestamp-ms)'},'evidence':'arb.move\x20L109'}]},DEMAND={'object':'Demand','moveStruct':'demand.move\x20L67-76\x20Demand','fields':[SYS('demand.move\x20L67-76'),{'field':'description','disposition':{'kind':'attribute','note':'What\x20the\x20demanding\x20side\x20asks\x20for'},'evidence':'demand.move\x20L67-76'},{'field':'location','disposition':{'kind':'attribute','note':'Demand\x20area'},'evidence':'demand.move\x20L67-76'},{'field':'rewards','disposition':{'kind':'edge','schema':'demand.reward'},'evidence':'demand.move\x20L71'},{'field':'guards','disposition':{'kind':'edge','schema':'demand.guard','note':'Empty\x20=\x20bare\x20present\x20(no\x20acceptance\x20gate)'},'evidence':'demand.move\x20L72'},{'field':'presenters','disposition':{'kind':'edge','schema':'demand.presenter','coSchemas':['demand.presenter_service'],'note':'One\x20ParentTable\x20read\x20backs\x20both\x20the\x20presenter\x20edge\x20and\x20the\x20same-row\x20sub-service\x20co-edge'},'evidence':'demand.move\x20L73,L46-54'},{'field':'um','disposition':{'kind':'edge','schema':'demand.um'},'evidence':'demand.move\x20L74'},{'field':'permission','disposition':{'kind':'edge','schema':'demand.permission'},'evidence':'demand.move\x20L75'}]},REWARD={'object':'Reward','moveStruct':'reward.move\x20L129-138\x20Reward<T>','fields':[SYS('reward.move\x20L129-138'),{'field':'description','disposition':{'kind':'attribute','note':'Pool\x20purpose\x20description'},'evidence':'reward.move\x20L129-138'},{'field':'guards','disposition':{'kind':'edge','schema':'reward.guard','note':'Members\x20carry\x20recipient/amount/expiration\x20semantics\x20in\x20the\x20payload'},'evidence':'reward.move\x20L132'},{'field':'balance','disposition':{'kind':'attribute','note':'Remaining\x20pool\x20balance\x20(solvency\x20signal)'},'evidence':'reward.move\x20L133'},{'field':'guard_not_added_expiration_time','disposition':{'kind':'attribute','note':'Claim-window\x20expiry\x20when\x20guards\x20were\x20never\x20added'},'evidence':'reward.move\x20L134'},{'field':'record','disposition':{'kind':'edge','schema':'reward.claim'},'evidence':'reward.move\x20L135,L117-138'},{'field':'um','disposition':{'kind':'edge','schema':'reward.um'},'evidence':'reward.move\x20L136'},{'field':'permission','disposition':{'kind':'edge','schema':'reward.permission'},'evidence':'reward.move\x20L137'}]},REPOSITORY={'object':'Repository','moveStruct':'repository.move\x20L461-469\x20Repository','fields':[SYS('repository.move\x20L461-469'),{'field':'description','disposition':{'kind':'attribute','note':'Repository\x20description'},'evidence':'repository.move\x20L461-469'},{'field':'policies','disposition':{'kind':'edge','schema':'repository.policy_guard','coSchemas':['repository.quote_guard'],'note':'PolicyRule\x20vector;\x20write_guard[].guard\x20members\x20and\x20quote_guard\x20are\x20two\x20deep\x20edges;\x20policy\x20name\x20is\x20an\x20attribute'},'evidence':'repository.move\x20L464,L106-113'},{'field':'data','disposition':{'kind':'edge','schema':'repository.data_about','note':'DataKey.id\x20carries\x20the\x20about-object;\x20row\x20key\x20name\x20rides\x20the\x20payload'},'evidence':'repository.move\x20L465,L456-459'},{'field':'rewards','disposition':{'kind':'edge','schema':'repository.reward'},'evidence':'repository.move\x20L466'},{'field':'um','disposition':{'kind':'edge','schema':'repository.um'},'evidence':'repository.move\x20L467'},{'field':'permission','disposition':{'kind':'edge','schema':'repository.permission'},'evidence':'repository.move\x20L468'}]},CONTACT={'object':'Contact','moveStruct':'contact.move\x20L25-31\x20Contact','fields':[SYS('contact.move\x20L25-31'),{'field':'description','disposition':{'kind':'attribute','note':'Roster\x20description'},'evidence':'contact.move\x20L25-31'},{'field':'location','disposition':{'kind':'attribute','note':'Roster\x20area'},'evidence':'contact.move\x20L25-31'},{'field':'ims','disposition':{'kind':'edge','schema':'contact.im','note':'Im.at\x20members\x20are\x20the\x20edge;\x20status/join_time/description\x20ride\x20the\x20payload'},'evidence':'contact.move\x20L29,L18-23,L85-105','oq':'OQ-1\x20(at\x20verified\x20EOA)'},{'field':'permission','disposition':{'kind':'edge','schema':'contact.permission'},'evidence':'contact.move\x20L30'}]},PERMISSION={'object':'Permission','moveStruct':'permission.move\x20L33-41\x20Permission','fields':[SYS('permission.move\x20L33-41'),{'field':'owner','disposition':{'kind':'edge','schema':'permission.owner'},'evidence':'permission.move\x20L35,L537-543'},{'field':'admin','disposition':{'kind':'edge','schema':'permission.admin'},'evidence':'permission.move\x20L36'},{'field':'description','disposition':{'kind':'attribute','note':'Group\x20description'},'evidence':'permission.move\x20L37'},{'field':'remark','disposition':{'kind':'attribute','note':'Permission\x20remark\x20records'},'evidence':'permission.move\x20L38'},{'field':'table','disposition':{'kind':'edge','schema':'permission.entity','note':'ParentLinkedTable\x20of\x20EOA/Guard\x20members\x20with\x20perm-index\x20bits'},'evidence':'permission.move\x20L39'},{'field':'um','disposition':{'kind':'edge','schema':'permission.um'},'evidence':'permission.move\x20L40'}]},GUARD={'object':'Guard','moveStruct':'guard.move\x20L84-94\x20Guard','fields':[SYS('guard.move\x20L84-94'),{'field':'description','disposition':{'kind':'attribute','note':'Gate\x20description'},'evidence':'guard.move\x20L84-94'},{'field':'table','disposition':{'kind':'attribute','note':'Submission\x20slot\x20definitions\x20(identifier\x20->\x20type\x20mapping;\x20Gate\x20analysis\x20property)'},'evidence':'guard.move\x20L87'},{'field':'validated','disposition':{'kind':'attribute','note':'Validated\x20slot\x20types\x20(Gate\x20analysis\x20property)'},'evidence':'guard.move\x20L88'},{'field':'input','disposition':{'kind':'attribute','note':'Static\x20input\x20bytes\x20for\x20the\x20gate\x20predicate'},'evidence':'guard.move\x20L89'},{'field':'relies','disposition':{'kind':'edge','schema':'guard.relies'},'evidence':'guard.move\x20L90\x20(<=4,\x20one\x20level)'},{'field':'relies_logic_and','disposition':{'kind':'attribute','note':'AND/OR\x20combination\x20of\x20relied\x20gates'},'evidence':'guard.move\x20L91'},{'field':'immutable','disposition':{'kind':'attribute','note':'Whether\x20the\x20gate\x20definition\x20is\x20frozen'},'evidence':'guard.move\x20L92'},{'field':'rep','disposition':{'kind':'attribute','note':'Last\x20query-validation\x20outcome\x20flag'},'evidence':'guard.move\x20L93'}]},PASSPORT={'object':'Passport','moveStruct':'passport.move\x20L41-50\x20Passport','fields':[SYS('passport.move\x20L41-50'),{'field':'guard','disposition':{'kind':'edge','schema':'passport.guard','coSchemas':['passport.ticket_relies'],'note':'GuardInfo\x20tickets;\x20ticket.guard\x20is\x20the\x20primary\x20edge,\x20ticket.relies\x20the\x20same-ticket\x20co-edge;\x20result/impack\x20flags\x20are\x20attributes'},'evidence':'passport.move\x20L43,L32-39'},{'field':'result','disposition':{'kind':'attribute','note':'Overall\x20verification\x20outcome'},'evidence':'passport.move\x20L44'},{'field':'tx_hash','disposition':{'kind':'attribute','note':'Verification\x20transaction\x20digest'},'evidence':'passport.move\x20L45'},{'field':'impack','disposition':{'kind':'edge','schema':'passport.impack'},'evidence':'passport.move\x20L46,L227-242'},{'field':'time','disposition':{'kind':'attribute','note':'Verification\x20time\x20(timestamp-ms)'},'evidence':'passport.move\x20L47'},{'field':'signer','disposition':{'kind':'edge','schema':'passport.signer'},'evidence':'passport.move\x20L48,L94-98'},{'field':'has_verified','disposition':{'kind':'attribute','note':'Whether\x20the\x20credential\x20was\x20consumed'},'evidence':'passport.move\x20L49'}]},PROOF={'object':'Proof','moveStruct':'proof.move\x20L13-24\x20Proof','fields':[SYS('proof.move\x20L13-24'),{'field':'description','disposition':{'kind':'attribute','note':'Evidence\x20description'},'evidence':'proof.move\x20L13-24'},{'field':'proof','disposition':{'kind':'attribute','note':'Evidence\x20payload\x20string'},'evidence':'proof.move\x20L13-24'},{'field':'item_count','disposition':{'kind':'attribute','note':'Item\x20count\x20covered\x20by\x20the\x20evidence'},'evidence':'proof.move\x20L13-24'},{'field':'server_pubkey','disposition':{'kind':'attribute','note':'Witness\x20server\x20public\x20key'},'evidence':'proof.move\x20L13-24'},{'field':'server_signature','disposition':{'kind':'attribute','note':'Witness\x20server\x20signature'},'evidence':'proof.move\x20L13-24'},{'field':'about','disposition':{'kind':'edge','schema':'proof.about'},'evidence':'proof.move\x20L20'},{'field':'signer','disposition':{'kind':'edge','schema':'proof.signer'},'evidence':'proof.move\x20L21'},{'field':'proof_type','disposition':{'kind':'attribute','note':'Evidence\x20kind\x20discriminator'},'evidence':'proof.move\x20L22'},{'field':'time','disposition':{'kind':'attribute','note':'Signing\x20time\x20(timestamp-ms)'},'evidence':'proof.move\x20L23'}]},TREASURY={'object':'Treasury','moveStruct':'treasury.move\x20L72-83\x20Treasury<T>','fields':[SYS('treasury.move\x20L72-83'),{'field':'description','disposition':{'kind':'attribute','note':'Treasury\x20description'},'evidence':'treasury.move\x20L72-83'},{'field':'balance','disposition':{'kind':'attribute','note':'Current\x20balance\x20(solvency\x20signal)'},'evidence':'treasury.move\x20L75'},{'field':'history','disposition':{'kind':'edge','schema':'treasury.record'},'evidence':'treasury.move\x20L76,L39-46'},{'field':'external_deposit_guard','disposition':{'kind':'edge','schema':'treasury.deposit_guard'},'evidence':'treasury.move\x20L77,L61-65,L138-194'},{'field':'external_withdraw_guard','disposition':{'kind':'edge','schema':'treasury.withdraw_guard'},'evidence':'treasury.move\x20L78,L67-71,L197-250'},{'field':'inflow','disposition':{'kind':'attribute','note':'Lifetime\x20inflow\x20(throughput\x20signal)'},'evidence':'treasury.move\x20L79'},{'field':'outflow','disposition':{'kind':'attribute','note':'Lifetime\x20outflow\x20(throughput\x20signal)'},'evidence':'treasury.move\x20L80'},{'field':'um','disposition':{'kind':'edge','schema':'treasury.um'},'evidence':'treasury.move\x20L81'},{'field':'permission','disposition':{'kind':'edge','schema':'treasury.permission'},'evidence':'treasury.move\x20L82'}]},PAYMENT={'object':'Payment','moveStruct':'payment.move\x20L93-101\x20Payment<T>','fields':[SYS('payment.move\x20L93-101'),{'field':'amount','disposition':{'kind':'attribute','note':'Total\x20payment\x20amount'},'evidence':'payment.move\x20L93-101'},{'field':'time','disposition':{'kind':'attribute','note':'Payment\x20time\x20(timestamp-ms)'},'evidence':'payment.move\x20L93-101'},{'field':'info','disposition':{'kind':'edge','schema':'payment.for_object','coSchemas':['payment.for_guard'],'note':'PaymentInfo\x20struct;\x20for_object/for_guard\x20are\x20the\x20two\x20routing\x20edges;\x20remark/index\x20are\x20attributes'},'evidence':'payment.move\x20L97,L66-71'},{'field':'from_object','disposition':{'kind':'edge','schema':'payment.from_object'},'evidence':'payment.move\x20L98,L149-161'},{'field':'signer','disposition':{'kind':'edge','schema':'payment.signer'},'evidence':'payment.move\x20L99,L111'},{'field':'record','disposition':{'kind':'edge','schema':'payment.recipient','note':'Revenue\x20entries;\x20recipient\x20members\x20are\x20the\x20edge,\x20amounts\x20ride\x20the\x20payload'},'evidence':'payment.move\x20L100,L93-101\x20(<=200)'}]},COIN_WRAPPER={'object':'CoinWrapper','moveStruct':'payment.move\x20L40-44\x20CoinWrapper<T>','fields':[SYS('payment.move\x20L40-44'),{'field':'balance','disposition':{'kind':'transient','note':'Escrowed\x20coin\x20inside\x20the\x20in-flight\x20wrapper;\x20consumed\x20by\x20unwrap'},'evidence':'payment.move\x20L42'},{'field':'payment','disposition':{'kind':'transient','note':'Back-reference\x20to\x20the\x20Payment\x20under\x20construction;\x20process\x20object,\x20deliberately\x20not\x20a\x20graph\x20edge'},'evidence':'payment.move\x20L43,L46-53'}]},RESOURCE={'object':'Resource','moveStruct':'resource.move\x20L18-21\x20Resource','fields':[SYS('resource.move\x20L18-21'),{'field':'table','disposition':{'kind':'nonAddress','note':'AddressTag\x20rows\x20(user\x20tags/nick);\x20projected\x20as\x20node\x20attributes\x20for\x20display,\x20deliberately\x20no\x20structural\x20edge'},'evidence':'resource.move\x20L20'}]},ENTITY_ORDERS={'object':'EntityOrders','moveStruct':'entity_order.move\x20L31-34\x20EntityOrders','fields':[SYS('entity_order.move\x20L31-34'),{'field':'table','disposition':{'kind':'edge','schema':'eoa.order','note':'Per-entity\x20FIFO\x205200\x20order-membership\x20rows\x20(role\x20bits\x20in\x20payload)'},'evidence':'entity_order.move\x20L33,L12'}]},ENTITY_PERMISSION={'object':'EntityPermission','moveStruct':'entity_permission.move\x20L32-35\x20EntityPermission','fields':[SYS('entity_permission.move\x20L32-35'),{'field':'table','disposition':{'kind':'edge','schema':'eoa.permission'},'evidence':'entity_permission.move\x20L34,L32\x20(role\x20bits)'}]},ENTITY_CONTACT={'object':'EntityContact','moveStruct':'entity_contact.move\x20L24-27\x20EntityContact','fields':[SYS('entity_contact.move\x20L24-27'),{'field':'table','disposition':{'kind':'edge','schema':'eoa.contact'},'evidence':'entity_contact.move\x20L26'}]},ENTITY={'object':'Entity','moveStruct':'registrar.move\x20L176-179\x20Entity\x20(0xaab)','fields':[SYS('registrar.move\x20L176-179'),{'field':'table','disposition':{'kind':'edge','schema':'entity.profile','coSchemas':['entity.referrer','entity.resource'],'note':'One\x20AddressInfo\x20row\x20per\x20account\x20backs\x20three\x20co-edges;\x20description/records\x20are\x20attributes'},'evidence':'registrar.move\x20L178,L146-152,L236-242'}]},REGISTRAR={'object':'Registrar','moveStruct':'registrar.move\x20L171-174\x20Registrar\x20(0xaaa)','fields':[SYS('registrar.move\x20L171-174'),{'field':'table','disposition':{'kind':'edge','schema':'target.vote','note':'Per-target\x20ring\x205200\x20of\x20like/dislike/favor\x20votes'},'evidence':'registrar.move\x20L173,L154-171'}]},OBJECT_LINKER_CORE={'object':'ObjectLinkerCore','moveStruct':'object_linker.move\x20L37-40\x20ObjectLinkerCore','fields':[SYS('object_linker.move\x20L37-40'),{'field':'table','disposition':{'kind':'edge','schema':'permission.core_binding','note':'Exact\x20(non-evicting)\x20linker\x20registry'},'evidence':'object_linker.move\x20L39,L88'}]},OBJECT_LINKER_TX={'object':'ObjectLinkerTx','moveStruct':'object_linker.move\x20L43-46\x20ObjectLinkerTx','fields':[SYS('object_linker.move\x20L43-46'),{'field':'table','disposition':{'kind':'edge','schema':'permission.tx_binding','coSchemas':['service.order'],'note':'FIFO\x205200\x20runtime\x20buffer;\x20service.order\x20is\x20the\x20Order-filtered\x20view\x20of\x20the\x20same\x20rows'},'evidence':'object_linker.move\x20L45,L136-140'}]},EVENT_STREAMS={'object':'EventStreams','moveStruct':'append-only\x20event\x20streams\x20(channel\x20D;\x20no\x20struct\x20fields)','fields':[{'field':PackageAddress+'::order::NewOrderEvent','disposition':{'kind':'edge','schema':'service.order_history','coSchemas':['eoa.order_history']},'evidence':'order.move\x20L51-58,L142','oq':'OQ-2/OQ-4'},{'field':PackageAddress+'::arb::ArbEvent','disposition':{'kind':'edge','schema':'arb.history'},'evidence':'arb.move\x20L33-43,L122,L227','oq':'OQ-4'}]};export const FIELD_MANIFEST=[SERVICE,ORDER,DISCOUNT,PROGRESS,MACHINE,ALLOCATION,ARBITRATION,ARB,DEMAND,REWARD,REPOSITORY,CONTACT,PERMISSION,GUARD,PASSPORT,PROOF,TREASURY,PAYMENT,COIN_WRAPPER,RESOURCE,ENTITY_ORDERS,ENTITY_PERMISSION,ENTITY_CONTACT,ENTITY,REGISTRAR,OBJECT_LINKER_CORE,OBJECT_LINKER_TX,EVENT_STREAMS];export const MANIFEST_BY_OBJECT=new Map(FIELD_MANIFEST['map'](a=>[a['object'],a]));export const BUSINESS_OBJECTS=['Service','Order','Discount','Progress','Machine','Allocation','Arbitration','Arb','Demand','Reward','Repository','Contact','Permission','Guard','Passport','Proof','Treasury','Payment'];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{describe,expect,it}from'vitest';import{EDGE_SCHEMAS,EDGE_SCHEMA_BY_ID}from'./edge-schema.js';import{BUSINESS_OBJECTS,FIELD_MANIFEST,MANIFEST_BY_OBJECT}from'./field-manifest.js';import{fullServiceObjects}from'./fixtures.js';const HAS_KEY_STRUCTS={'Service':['id','description','location','sales','repositories','buy_guard','machine','bPublished','bPaused','customer_required','arbitrations','compensation_fund','paused_time','setting_lock_duration','order_allocators','rewards','um','permission'],'Order':['id','items','discount','progress','machine','amount','owner','service','dispute','agent','allocation','claimed_by','required_info','time'],'Discount':['id','name','discount_type','benchmark','off','time_start','time_end','service','transferable'],'Progress':['id','machine','context_repositories','current','task','namedOperator','session','history','current_time'],'Machine':['id','description','nodes','consensus_repositories','bPaused','bPublished','um','permission'],'Allocation':['id','balance','allocators','payment_info','payment'],'Arbitration':['id','description','location','voting_guard','usage_guard','fee','balance','bPaused','um','permission'],'Arb':['id','description','order','arbitration','voted','proposition','fee','feedback','indemnity','voting_deadline','objection','status','compensation_time','time'],'Demand':['id','description','location','rewards','guards','presenters','um','permission'],'Reward':['id','description','guards','balance','guard_not_added_expiration_time','record','um','permission'],'Repository':['id','description','policies','data','rewards','um','permission'],'Contact':['id','description','location','ims','permission'],'Permission':['id','owner','admin','description','remark','table','um'],'Guard':['id','description','table','validated','input','relies','relies_logic_and','immutable','rep'],'Passport':['id','guard','result','tx_hash','impack','time','signer','has_verified'],'Proof':['id','description','proof','item_count','server_pubkey','server_signature','about','signer','proof_type','time'],'Treasury':['id','description','balance','history','external_deposit_guard','external_withdraw_guard','inflow','outflow','um','permission'],'Payment':['id','amount','time','info','from_object','signer','record'],'CoinWrapper':['id','balance','payment'],'Resource':['id','table'],'EntityOrders':['id','table'],'EntityPermission':['id','table'],'EntityContact':['id','table'],'Entity':['id','table'],'Registrar':['id','table'],'ObjectLinkerCore':['id','table'],'ObjectLinkerTx':['id','table']},NON_STRUCT_KEYS=new Set(['EventStreams']);function walk(a,b){if(b['length']===0x0)return a!==undefined;if(a===null||a===undefined)return![];if(Array['isArray'](a))return a['some'](c=>walk(c,b));if(typeof a==='object'){const c=a[b[0x0]];if(c===undefined)return![];return walk(c,b['slice'](0x1));}return![];}function readResolves(a,b){switch(a['kind']){case'field':case'fields':case'structFields':return walk(b,a['path']['split']('.'));case'deep':{if(!walk(b,a['segments']))return![];return a['field']===''||walk(b,[...a['segments'],a['field']]);}default:return!![];}}describe('field\x20manifest\x20—\x20coverage\x20(TR-12.1)',()=>{it('manifest\x20keys\x20equal\x20the\x20audited\x20has-key\x20struct\x20registry\x20plus\x20EventStreams',()=>{const a=FIELD_MANIFEST['map'](c=>c['object'])['sort'](),b=[...Object['keys'](HAS_KEY_STRUCTS),...NON_STRUCT_KEYS]['sort']();expect(a)['toEqual'](b);}),it('every\x20manifest\x20object\x27s\x20field\x20set\x20matches\x20its\x20audited\x20Move\x20struct\x20(both\x20directions)',()=>{for(const [a,b]of Object['entries'](HAS_KEY_STRUCTS)){const c=MANIFEST_BY_OBJECT['get'](a);expect(c,'missing\x20manifest\x20for\x20'+a)['toBeDefined']();const d=c['fields']['map'](e=>e['field'])['sort']();expect(d,a+'\x20field\x20mismatch')['toEqual']([...b]['sort']());}}),it('no\x20field\x20row\x20is\x20left\x20unclassified\x20(TR-12.2)',()=>{for(const a of FIELD_MANIFEST){for(const b of a['fields']){expect(['edge','attribute','transient','nonAddress'],a['object']+'.'+b['field']+'\x20kind')['toContain'](b['disposition']['kind']),b['disposition']['kind']!=='edge'&&expect(b['disposition']['note']['trim']()['length'],a['object']+'.'+b['field']+'\x20note\x20empty')['toBeGreaterThan'](0x0);}}});}),describe('field\x20manifest\x20—\x20schema\x20cross-reference',()=>{it('every\x20referenced\x20schema\x20id\x20is\x20registered\x20(primary\x20and\x20co-edges)',()=>{for(const a of FIELD_MANIFEST){for(const b of a['fields']){if(b['disposition']['kind']!=='edge')continue;expect(EDGE_SCHEMA_BY_ID['has'](b['disposition']['schema']),a['object']+'.'+b['field']+':\x20unknown\x20schema\x20'+b['disposition']['schema'])['toBe'](!![]);for(const c of b['disposition']['coSchemas']??[]){expect(EDGE_SCHEMA_BY_ID['has'](c),a['object']+'.'+b['field']+':\x20unknown\x20co-schema\x20'+c)['toBe'](!![]);}}}}),it('every\x20non-E\x20schema\x20is\x20referenced\x20by\x20the\x20manifest\x20(registry\x20completeness)',()=>{const a=new Set();for(const c of FIELD_MANIFEST){for(const d of c['fields']){if(d['disposition']['kind']!=='edge')continue;a['add'](d['disposition']['schema']);for(const e of d['disposition']['coSchemas']??[])a['add'](e);}}const b=EDGE_SCHEMAS['filter'](g=>g['family']!=='E'&&!a['has'](g['id']));expect(b['map'](g=>g['id']),'schemas\x20with\x20no\x20manifest\x20row')['toEqual']([]);}),it('business-object\x20edge\x20rows\x20are\x20sourced\x20from\x20their\x20own\x20object',()=>{for(const a of BUSINESS_OBJECTS){const b=MANIFEST_BY_OBJECT['get'](a);for(const c of b['fields']){if(c['disposition']['kind']!=='edge')continue;const d=EDGE_SCHEMA_BY_ID['get'](c['disposition']['schema']);expect(d['source'],a+'.'+c['field']+'\x20->\x20'+d['id'])['toBe'](a);}}});}),describe('field\x20manifest\x20—\x20fixture\x20resolvability',()=>{const a=fullServiceObjects();function b(c){return a['filter'](d=>d['type']===c||(d['type_raw']??'')['startsWith'](c+'<'));}it('every\x20field-family\x20read\x20path\x20resolves\x20on\x20at\x20least\x20one\x20fixture\x20instance',()=>{let c=0x0;for(const d of BUSINESS_OBJECTS){const e=MANIFEST_BY_OBJECT['get'](d),g=b(d);expect(g['length'],'no\x20fixture\x20instance\x20for\x20'+d)['toBeGreaterThan'](0x0);for(const h of e['fields']){if(h['disposition']['kind']!=='edge')continue;const i=EDGE_SCHEMA_BY_ID['get'](h['disposition']['schema']);if(i['read']['kind']!=='field'&&i['read']['kind']!=='fields'&&i['read']['kind']!=='structFields'&&i['read']['kind']!=='deep')continue;const j=g['some'](k=>readResolves(i['read'],k['data']));expect(j,i['id']+':\x20read\x20path\x20unresolvable\x20on\x20any\x20'+d+'\x20fixture')['toBe'](!![]),c+=0x1;}}expect(c,'sanity:\x20fixture-checked\x20field-family\x20edges')['toBeGreaterThan'](0x32);});});
|