@wowok/agent-mcp 3.4.3 → 3.4.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/.build-stamp.json +3 -3
- package/dist/build-stamp.js +1 -0
- package/dist/chain-semantics/composition-truth.js +1 -1
- package/dist/chain-semantics/eval-order.js +1 -1
- package/dist/chain-semantics/freeze-map.js +1 -1
- package/dist/chain-semantics/fund-flow.js +1 -1
- package/dist/chain-semantics/object-graph.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.js +1 -1
- package/dist/composition/generate.js +1 -1
- package/dist/composition/guard-fill.js +1 -1
- package/dist/composition/input-normalize.js +1 -1
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.js +1 -1
- package/dist/composition/plan.js +1 -1
- package/dist/composition/product-card.js +1 -1
- package/dist/composition/shape-expand.js +1 -0
- package/dist/config/judgment.js +1 -1
- package/dist/config/template-params.js +1 -1
- package/dist/data/sync/cdc.js +1 -1
- package/dist/data/sync/graphql-source.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/graph/onchain/sdk-batch.js +1 -1
- package/dist/harness/entry-ignite-selfheal.js +1 -0
- package/dist/harness/forward-leg-preflight.js +1 -0
- package/dist/harness/recover.js +1 -1
- package/dist/keeper/detectors.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-operation-face.js +1 -0
- package/dist/knowledge/arbitration-rail-verifier.js +1 -1
- package/dist/knowledge/arbitration-templates.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +15 -0
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json.good +310 -0
- package/dist/knowledge/baselines/rules/allocation.json.good +568 -0
- package/dist/knowledge/baselines/rules/arb.json.good +174 -0
- package/dist/knowledge/baselines/rules/arbitration.json.good +393 -0
- package/dist/knowledge/baselines/rules/bridge.json.good +197 -0
- package/dist/knowledge/baselines/rules/contact.json.good +152 -0
- package/dist/knowledge/baselines/rules/demand.json.good +158 -0
- package/dist/knowledge/baselines/rules/graph.json.good +534 -0
- package/dist/knowledge/baselines/rules/guard.json +18 -5
- package/dist/knowledge/baselines/rules/guard.json.good +1192 -0
- package/dist/knowledge/baselines/rules/machine.json.good +734 -0
- package/dist/knowledge/baselines/rules/oracle.json +1 -1
- package/dist/knowledge/baselines/rules/oracle.json.good +120 -0
- package/dist/knowledge/baselines/rules/order.json.good +549 -0
- package/dist/knowledge/baselines/rules/payment.json.good +205 -0
- package/dist/knowledge/baselines/rules/permission.json.good +330 -0
- package/dist/knowledge/baselines/rules/personal.json.good +139 -0
- package/dist/knowledge/baselines/rules/plan.json +343 -1
- package/dist/knowledge/baselines/rules/plan.json.good +1187 -0
- package/dist/knowledge/baselines/rules/progress.json.good +364 -0
- package/dist/knowledge/baselines/rules/proof.json.good +158 -0
- package/dist/knowledge/baselines/rules/registrar.json.good +159 -0
- package/dist/knowledge/baselines/rules/repository.json.good +244 -0
- package/dist/knowledge/baselines/rules/resource.json.good +117 -0
- package/dist/knowledge/baselines/rules/reward.json +10 -10
- package/dist/knowledge/baselines/rules/reward.json.good +586 -0
- package/dist/knowledge/baselines/rules/service.json.good +595 -0
- package/dist/knowledge/baselines/rules/treasury.json.good +440 -0
- package/dist/knowledge/baselines/rules/util.json.good +101 -0
- package/dist/knowledge/builtin-templates.d.ts +13 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/chain-query-registry.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/fund-layer.d.ts +2 -0
- package/dist/knowledge/fund-layer.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-binding-verifier.js +1 -1
- package/dist/knowledge/guard-create-preflight.js +1 -0
- package/dist/knowledge/guard-field-cognition.js +1 -1
- package/dist/knowledge/guard-host-context.js +1 -1
- package/dist/knowledge/guard-leg-eval.js +1 -0
- package/dist/knowledge/guard-node-gates.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/guard-quality.js +1 -0
- package/dist/knowledge/guard-render.js +1 -1
- package/dist/knowledge/guard-risk.js +1 -1
- package/dist/knowledge/guard-semantic-walk.js +1 -0
- package/dist/knowledge/guard-templates.d.ts +1 -0
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/guard-translation.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/coverage.js +1 -1
- package/dist/knowledge/path-oracle/index.js +1 -1
- package/dist/knowledge/path-oracle/products/airbnb.js +1 -0
- package/dist/knowledge/path-oracle/products/algora.js +1 -0
- package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -0
- package/dist/knowledge/path-oracle/products/amazon.js +1 -0
- package/dist/knowledge/path-oracle/products/beatstars.js +1 -0
- package/dist/knowledge/path-oracle/products/booking-com.js +1 -0
- package/dist/knowledge/path-oracle/products/contra.js +1 -0
- package/dist/knowledge/path-oracle/products/costco.js +1 -0
- package/dist/knowledge/path-oracle/products/coursera.js +1 -0
- package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -0
- package/dist/knowledge/path-oracle/products/etsy.js +1 -0
- package/dist/knowledge/path-oracle/products/food-delivery.js +1 -1
- package/dist/knowledge/path-oracle/products/gamefound.js +1 -0
- package/dist/knowledge/path-oracle/products/gofundme.js +1 -0
- package/dist/knowledge/path-oracle/products/hackerone.js +1 -0
- package/dist/knowledge/path-oracle/products/kickstarter.js +1 -0
- package/dist/knowledge/path-oracle/products/klook.js +1 -0
- package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -0
- package/dist/knowledge/path-oracle/products/onlyfans.js +1 -0
- package/dist/knowledge/path-oracle/products/patreon.js +1 -0
- package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -0
- package/dist/knowledge/path-oracle/products/royalty-exchange.js +1 -0
- package/dist/knowledge/path-oracle/products/shansong.js +1 -0
- package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -0
- package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -0
- package/dist/knowledge/path-oracle/products/upwork.js +1 -0
- package/dist/knowledge/path-oracle/products/yuanfudao.js +1 -0
- package/dist/knowledge/path-oracle/products/ziroom.js +1 -0
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/product-detail-source.js +1 -1
- package/dist/knowledge/product-doc-b5.js +1 -1
- package/dist/knowledge/product-doc-facets.js +1 -0
- package/dist/knowledge/projection.js +1 -1
- package/dist/knowledge/publish-gate.js +1 -1
- package/dist/knowledge/publish-surface-contract.js +1 -1
- package/dist/knowledge/recipient-constraint.d.ts +20 -0
- package/dist/knowledge/recipient-constraint.js +1 -1
- package/dist/knowledge/rule-declaration-types.d.ts +13 -0
- package/dist/knowledge/rule-declaration-types.js +1 -0
- package/dist/knowledge/rule-declarations.js +1 -0
- package/dist/knowledge/scenario-modes.d.ts +6 -0
- package/dist/knowledge/scenario-topology.js +1 -1
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-prose.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- 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/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/review/service.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +9 -0
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/call/arbitration.d.ts +8 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.d.ts +8 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +2 -0
- package/dist/schema/call/error-codes.d.ts +1 -1
- package/dist/schema/call/error-codes.js +1 -1
- package/dist/schema/call/handler.d.ts +2 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/order.d.ts +10 -0
- package/dist/schema/call/permission-handler.js +1 -1
- package/dist/schema/call/permission.js +1 -1
- package/dist/schema/call/progress.d.ts +15 -0
- package/dist/schema/call/progress.js +1 -1
- package/dist/schema/call/receipt.d.ts +1 -0
- package/dist/schema/call/receipt.js +1 -1
- package/dist/schema/call/repository.d.ts +12 -0
- package/dist/schema/call/repository.js +1 -1
- package/dist/schema/call/reward.js +1 -1
- package/dist/schema/call/semantic.d.ts +1 -0
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +5 -3
- package/dist/schema/call/service.js +1 -1
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/envelope-unify.js +1 -1
- package/dist/schema/goal/index.d.ts +23 -0
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/industry-pack/index.d.ts +2 -2
- package/dist/schema/local/index.d.ts +20 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/local/wip.d.ts +4 -0
- package/dist/schema/local/wip.js +1 -1
- package/dist/schema/messenger/index.d.ts +5 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +944 -1
- package/dist/schema/operations.js +1 -1
- package/dist/schema/query/bi.js +1 -1
- package/dist/schema/query/index.d.ts +5 -5
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workspace/index.d.ts +2 -2
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/account_operation.schema.json +1 -257
- package/dist/schemas/ask_user.schema.json +1 -78
- package/dist/schemas/benchmark_migration_operation.schema.json +1 -626
- package/dist/schemas/bridge_operation.schema.json +1 -1069
- package/dist/schemas/config_operation.schema.json +1 -82
- package/dist/schemas/employee_operation.schema.json +1 -319
- package/dist/schemas/evaluation_operation.schema.json +1 -3932
- package/dist/schemas/goal_operation.schema.json +1 -1650
- package/dist/schemas/guard2file.schema.json +1 -137
- package/dist/schemas/index.json +1 -285
- package/dist/schemas/industry_pack_operation.schema.json +1 -582
- package/dist/schemas/intent_radar.schema.json +1 -155
- package/dist/schemas/keeper_operation.schema.json +1 -364
- package/dist/schemas/local_cache_operation.schema.json +1 -116
- package/dist/schemas/local_history_operation.schema.json +1 -105
- package/dist/schemas/local_info_operation.schema.json +1 -140
- package/dist/schemas/local_mark_operation.schema.json +1 -124
- package/dist/schemas/machineNode2file.schema.json +1 -137
- package/dist/schemas/messenger_operation.schema.json +1 -2068
- package/dist/schemas/monitor_events.schema.json +1 -87
- package/dist/schemas/monitor_subscription.schema.json +1 -327
- package/dist/schemas/onchain_events.schema.json +1 -207
- package/dist/schemas/onchain_operations.schema.json +1 -28699
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1376
- package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1355
- package/dist/schemas/onchain_operations_contact.schema.json +1 -988
- package/dist/schemas/onchain_operations_demand.schema.json +1 -1146
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -663
- package/dist/schemas/onchain_operations_gen_proof.schema.json +1 -180
- package/dist/schemas/onchain_operations_guard.schema.json +1 -8518
- package/dist/schemas/onchain_operations_machine.schema.json +1 -1879
- package/dist/schemas/onchain_operations_order.schema.json +1 -1121
- package/dist/schemas/onchain_operations_payment.schema.json +1 -316
- package/dist/schemas/onchain_operations_permission.schema.json +1 -1036
- package/dist/schemas/onchain_operations_personal.schema.json +1 -1463
- package/dist/schemas/onchain_operations_progress.schema.json +1 -1041
- package/dist/schemas/onchain_operations_proof.schema.json +1 -750
- package/dist/schemas/onchain_operations_repository.schema.json +1 -2046
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1286
- package/dist/schemas/onchain_operations_service.schema.json +1 -2602
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1527
- package/dist/schemas/onchain_table_data.schema.json +1 -1146
- package/dist/schemas/permission_operation.schema.json +1 -43
- package/dist/schemas/persona_operation.schema.json +1 -10424
- package/dist/schemas/query_toolkit.schema.json +1 -1867
- package/dist/schemas/schema_query.schema.json +1 -116
- package/dist/schemas/service_clone_operation.schema.json +1 -49
- package/dist/schemas/settle_sweep.schema.json +1 -0
- package/dist/schemas/strategy_review_operation.schema.json +1 -66
- package/dist/schemas/verify_guard_dry_run.schema.json +1 -0
- package/dist/schemas/watch_operation.schema.json +1 -145
- package/dist/schemas/wip_file.schema.json +1 -299
- package/dist/schemas/workflow_operation.schema.json +1 -722
- package/dist/schemas/workspace_operation.schema.json +1 -104
- package/dist/schemas/wowok_buildin_info.schema.json +1 -758
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/entry-edge-recipe.js +1 -1
- package/dist/tools/handlers/file-export.js +1 -1
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/pending-settlement-recipe.js +1 -0
- package/dist/tools/handlers/plan-recovery.js +1 -0
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/repository-row-id.js +1 -0
- package/dist/tools/handlers/review-chain.js +1 -1
- package/dist/tools/handlers/settle-sweep.js +1 -0
- package/dist/tools/handlers/stale-build-check.js +1 -1
- package/dist/tools/handlers/submission-assembly.js +1 -1
- package/dist/tools/handlers/verify-guard-dry-run.js +1 -0
- package/dist/tools/handlers/wip-upload.js +1 -1
- package/dist/tools/index.d.ts +3 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/move-fn-index.gen.js +1 -1
- package/dist/tools/publish-gate-state.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +11 -4
- package/dist/chain-semantics/composition-truth.d.ts +0 -102
- package/dist/chain-semantics/eval-order.d.ts +0 -17
- package/dist/chain-semantics/field-capability.d.ts +0 -11
- package/dist/chain-semantics/freeze-map.d.ts +0 -11
- package/dist/chain-semantics/fund-flow.d.ts +0 -10
- package/dist/chain-semantics/guard-verbs.d.ts +0 -22
- package/dist/chain-semantics/index.d.ts +0 -12
- package/dist/chain-semantics/object-graph.d.ts +0 -18
- package/dist/communication/evidence.d.ts +0 -6
- package/dist/communication/message-cursors.d.ts +0 -35
- package/dist/communication/proof-reuse.d.ts +0 -9
- package/dist/communication/wts-attestation.d.ts +0 -39
- package/dist/composition/audit.d.ts +0 -15
- package/dist/composition/blueprint-view.d.ts +0 -63
- package/dist/composition/compile.d.ts +0 -83
- package/dist/composition/emit-phases.d.ts +0 -234
- package/dist/composition/generate.d.ts +0 -40
- package/dist/composition/guard-fill.d.ts +0 -52
- package/dist/composition/inflight.d.ts +0 -86
- package/dist/composition/input-normalize.d.ts +0 -15
- package/dist/composition/materialize.d.ts +0 -78
- package/dist/composition/mode-gates.d.ts +0 -35
- package/dist/composition/param-disclosure.d.ts +0 -61
- package/dist/composition/plan-retry-ledger.d.ts +0 -37
- package/dist/composition/plan.d.ts +0 -121
- package/dist/composition/product-card.d.ts +0 -94
- package/dist/composition/reflux.d.ts +0 -28
- package/dist/composition/supply-chain-emit.d.ts +0 -46
- package/dist/config/config-audit.spec.d.ts +0 -1
- package/dist/config/config-audit.spec.js +0 -1
- package/dist/config/config-warnings.d.ts +0 -2
- package/dist/config/index.d.ts +0 -4
- package/dist/config/judgment.spec.d.ts +0 -1
- package/dist/config/judgment.spec.js +0 -1
- package/dist/config/match-policy-file.d.ts +0 -34
- package/dist/config/match-policy-file.spec.d.ts +0 -1
- package/dist/config/match-policy-file.spec.js +0 -1
- package/dist/config/rule-engine.spec.d.ts +0 -1
- package/dist/config/rule-engine.spec.js +0 -1
- package/dist/config/runtime.d.ts +0 -29
- package/dist/config/store-policy.d.ts +0 -14
- package/dist/config/store-policy.spec.d.ts +0 -1
- package/dist/config/store-policy.spec.js +0 -1
- package/dist/config/template-params.d.ts +0 -42
- package/dist/config/template-params.spec.d.ts +0 -1
- package/dist/config/template-params.spec.js +0 -1
- package/dist/customer/account-events.d.ts +0 -32
- package/dist/data/api/api.spec.d.ts +0 -1
- package/dist/data/api/api.spec.js +0 -1
- package/dist/data/api/cli.d.ts +0 -1
- package/dist/data/api/head.d.ts +0 -16
- package/dist/data/api/head.spec.d.ts +0 -1
- package/dist/data/api/head.spec.js +0 -1
- package/dist/data/api/index.d.ts +0 -2
- package/dist/data/api/match.d.ts +0 -69
- package/dist/data/api/match.spec.d.ts +0 -1
- package/dist/data/api/match.spec.js +0 -1
- package/dist/data/api/server.d.ts +0 -13
- package/dist/data/projection/cli.d.ts +0 -1
- package/dist/data/projection/edges.d.ts +0 -8
- package/dist/data/projection/edges.spec.d.ts +0 -1
- package/dist/data/projection/edges.spec.js +0 -1
- package/dist/data/projection/facets.d.ts +0 -18
- package/dist/data/projection/facets.spec.d.ts +0 -1
- package/dist/data/projection/facets.spec.js +0 -1
- package/dist/data/projection/facts.d.ts +0 -40
- package/dist/data/projection/index.d.ts +0 -6
- package/dist/data/projection/project.d.ts +0 -10
- package/dist/data/projection/projection.spec.d.ts +0 -1
- package/dist/data/projection/projection.spec.js +0 -1
- package/dist/data/projection/schema.d.ts +0 -1
- package/dist/data/projection/store.d.ts +0 -51
- package/dist/data/projection/types.d.ts +0 -169
- package/dist/data/sync/cdc.d.ts +0 -33
- package/dist/data/sync/cdc.spec.d.ts +0 -1
- package/dist/data/sync/cdc.spec.js +0 -1
- package/dist/data/sync/graphql-source.d.ts +0 -16
- package/dist/data/sync/index.d.ts +0 -5
- package/dist/data/sync/reconciler.d.ts +0 -14
- package/dist/data/sync/reconciler.spec.d.ts +0 -1
- package/dist/data/sync/reconciler.spec.js +0 -1
- package/dist/data/sync/schema.d.ts +0 -1
- package/dist/data/sync/store.d.ts +0 -24
- package/dist/data/sync/sync.spec.d.ts +0 -1
- package/dist/data/sync/sync.spec.js +0 -1
- package/dist/data/sync/synchronizer.d.ts +0 -10
- package/dist/data/sync/types.d.ts +0 -164
- package/dist/evaluation/acceptance.d.ts +0 -33
- package/dist/evaluation/architecture.spec.d.ts +0 -1
- package/dist/evaluation/architecture.spec.js +0 -1
- package/dist/evaluation/builtins/arbitration-score.d.ts +0 -42
- package/dist/evaluation/builtins/demand-match.d.ts +0 -16
- package/dist/evaluation/builtins/graph-service.spec.d.ts +0 -1
- package/dist/evaluation/builtins/graph-service.spec.js +0 -1
- package/dist/evaluation/builtins/index.d.ts +0 -4
- package/dist/evaluation/builtins/purity.spec.d.ts +0 -1
- package/dist/evaluation/builtins/purity.spec.js +0 -1
- package/dist/evaluation/composer.d.ts +0 -38
- package/dist/evaluation/facets/catalog.d.ts +0 -19
- package/dist/evaluation/gap.d.ts +0 -2
- package/dist/evaluation/guard-scan.d.ts +0 -10
- package/dist/evaluation/index.d.ts +0 -14
- package/dist/evaluation/injection.d.ts +0 -6
- package/dist/evaluation/location-match.d.ts +0 -42
- package/dist/evaluation/match-operation.d.ts +0 -23
- package/dist/evaluation/match-policy-resolver.d.ts +0 -9
- package/dist/evaluation/match-policy.spec.d.ts +0 -1
- package/dist/evaluation/match-policy.spec.js +0 -1
- package/dist/evaluation/path-reasoning.d.ts +0 -37
- package/dist/evaluation/standards.d.ts +0 -11
- package/dist/evaluation/standards.spec.d.ts +0 -1
- package/dist/evaluation/standards.spec.js +0 -1
- package/dist/evaluation/structured-lines.d.ts +0 -8
- package/dist/evaluation/user-injection.d.ts +0 -6
- package/dist/experience/experience-reuse.d.ts +0 -10
- package/dist/experience/index.d.ts +0 -7
- package/dist/experience/persistence-config.d.ts +0 -6
- package/dist/experience/persistence.d.ts +0 -21
- package/dist/experience/realtime-feedback.d.ts +0 -5
- package/dist/experience/user-profile.d.ts +0 -25
- package/dist/extensions/capability.d.ts +0 -91
- package/dist/extensions/industry-audit.spec.d.ts +0 -1
- package/dist/extensions/industry-audit.spec.js +0 -1
- package/dist/goal/GoalClassifier.d.ts +0 -17
- package/dist/goal/GoalEngine.d.ts +0 -175
- package/dist/goal/GoalStore.d.ts +0 -27
- package/dist/goal/next-steps.d.ts +0 -12
- package/dist/goal/plan-approval.d.ts +0 -5
- package/dist/goal/pursue.d.ts +0 -18
- package/dist/graph/base.d.ts +0 -8
- package/dist/graph/onchain/analyze.d.ts +0 -59
- package/dist/graph/onchain/analyze.spec.d.ts +0 -1
- package/dist/graph/onchain/analyze.spec.js +0 -1
- package/dist/graph/onchain/anti-cheat.d.ts +0 -69
- package/dist/graph/onchain/anti-cheat.spec.d.ts +0 -1
- package/dist/graph/onchain/anti-cheat.spec.js +0 -1
- package/dist/graph/onchain/dataplane.d.ts +0 -44
- package/dist/graph/onchain/edge-batch.spec.d.ts +0 -1
- package/dist/graph/onchain/edge-batch.spec.js +0 -1
- package/dist/graph/onchain/edge-schema.d.ts +0 -69
- package/dist/graph/onchain/entity-profile.spec.d.ts +0 -1
- package/dist/graph/onchain/entity-profile.spec.js +0 -1
- package/dist/graph/onchain/event-history.spec.d.ts +0 -1
- package/dist/graph/onchain/event-history.spec.js +0 -1
- package/dist/graph/onchain/expand.d.ts +0 -4
- package/dist/graph/onchain/exploration.d.ts +0 -28
- package/dist/graph/onchain/exploration.spec.d.ts +0 -1
- package/dist/graph/onchain/exploration.spec.js +0 -1
- package/dist/graph/onchain/exposure.d.ts +0 -18
- package/dist/graph/onchain/exposure.spec.d.ts +0 -1
- package/dist/graph/onchain/exposure.spec.js +0 -1
- package/dist/graph/onchain/extract-deep.spec.d.ts +0 -1
- package/dist/graph/onchain/extract-deep.spec.js +0 -1
- package/dist/graph/onchain/extract.d.ts +0 -29
- package/dist/graph/onchain/facet-projection.d.ts +0 -99
- package/dist/graph/onchain/facet-projection.spec.d.ts +0 -1
- package/dist/graph/onchain/facet-projection.spec.js +0 -1
- package/dist/graph/onchain/facts.spec.d.ts +0 -1
- package/dist/graph/onchain/facts.spec.js +0 -1
- package/dist/graph/onchain/field-manifest.d.ts +0 -29
- package/dist/graph/onchain/field-manifest.spec.d.ts +0 -1
- package/dist/graph/onchain/field-manifest.spec.js +0 -1
- package/dist/graph/onchain/fixtures.d.ts +0 -80
- package/dist/graph/onchain/fixtures.spec.d.ts +0 -1
- package/dist/graph/onchain/fixtures.spec.js +0 -1
- package/dist/graph/onchain/graph-policy.spec.d.ts +0 -1
- package/dist/graph/onchain/graph-policy.spec.js +0 -1
- package/dist/graph/onchain/index.d.ts +0 -29
- package/dist/graph/onchain/interest.d.ts +0 -10
- package/dist/graph/onchain/interest.spec.d.ts +0 -1
- package/dist/graph/onchain/interest.spec.js +0 -1
- package/dist/graph/onchain/label-lint.spec.d.ts +0 -1
- package/dist/graph/onchain/label-lint.spec.js +0 -1
- package/dist/graph/onchain/names.d.ts +0 -23
- package/dist/graph/onchain/names.spec.d.ts +0 -1
- package/dist/graph/onchain/names.spec.js +0 -1
- package/dist/graph/onchain/object-held-receipts.d.ts +0 -20
- package/dist/graph/onchain/object-held-receipts.spec.d.ts +0 -1
- package/dist/graph/onchain/object-held-receipts.spec.js +0 -1
- package/dist/graph/onchain/onchain.spec.d.ts +0 -1
- package/dist/graph/onchain/onchain.spec.js +0 -1
- package/dist/graph/onchain/policy.d.ts +0 -8
- package/dist/graph/onchain/project-relationship.d.ts +0 -3
- package/dist/graph/onchain/proposal-graph.d.ts +0 -11
- package/dist/graph/onchain/proposal-graph.spec.d.ts +0 -1
- package/dist/graph/onchain/proposal-graph.spec.js +0 -1
- package/dist/graph/onchain/sdk-batch.d.ts +0 -129
- package/dist/graph/onchain/sdk-dataplane.d.ts +0 -44
- package/dist/graph/onchain/strategy.spec.d.ts +0 -1
- package/dist/graph/onchain/strategy.spec.js +0 -1
- package/dist/graph/onchain/synthesis.d.ts +0 -20
- package/dist/graph/onchain/synthesis.spec.d.ts +0 -1
- package/dist/graph/onchain/synthesis.spec.js +0 -1
- package/dist/graph/onchain/table-ledger.spec.d.ts +0 -1
- package/dist/graph/onchain/table-ledger.spec.js +0 -1
- package/dist/graph/onchain/viewport.d.ts +0 -6
- package/dist/harness/auto-escalation.d.ts +0 -15
- package/dist/intent/enrich.d.ts +0 -1
- package/dist/intent/index.d.ts +0 -23
- package/dist/intent/matcher.d.ts +0 -2
- package/dist/intent/store.d.ts +0 -19
- package/dist/intent/types.d.ts +0 -32
- package/dist/keeper/KeeperScan.d.ts +0 -41
- package/dist/keeper/KeeperStore.d.ts +0 -43
- package/dist/keeper/detectors.d.ts +0 -42
- package/dist/keeper/keeper.spec.d.ts +0 -1
- package/dist/keeper/keeper.spec.js +0 -1
- package/dist/keeper/types.d.ts +0 -67
- package/dist/knowledge/account-marks.d.ts +0 -36
- package/dist/knowledge/allocation-ledger.d.ts +0 -75
- package/dist/knowledge/allocation-puzzle.d.ts +0 -138
- package/dist/knowledge/allocation-risk.d.ts +0 -82
- package/dist/knowledge/allocation-templates.d.ts +0 -38
- package/dist/knowledge/allocator-rail-verifier.d.ts +0 -59
- package/dist/knowledge/anti-cheat.d.ts +0 -2
- package/dist/knowledge/arb-fund-facts.d.ts +0 -51
- package/dist/knowledge/arb-risk.d.ts +0 -39
- package/dist/knowledge/arbitration-puzzle.d.ts +0 -84
- package/dist/knowledge/arbitration-rail-verifier.d.ts +0 -35
- package/dist/knowledge/arbitration-risk.d.ts +0 -114
- package/dist/knowledge/arbitration-templates.d.ts +0 -39
- package/dist/knowledge/arbitration-venue-order.d.ts +0 -25
- package/dist/knowledge/baselines/guard-lint-baseline.spec.d.ts +0 -1
- package/dist/knowledge/baselines/guard-lint-baseline.spec.js +0 -1
- package/dist/knowledge/baselines/risk-baselines.spec.d.ts +0 -1
- package/dist/knowledge/baselines/risk-baselines.spec.js +0 -1
- package/dist/knowledge/baselines/risk-cases.d.ts +0 -8
- package/dist/knowledge/baselines/semantic-facts.d.ts +0 -12
- package/dist/knowledge/bridge-risk.d.ts +0 -36
- package/dist/knowledge/catalog-facts.d.ts +0 -4
- package/dist/knowledge/chain-query-registry.d.ts +0 -14
- package/dist/knowledge/commission-landing.d.ts +0 -26
- package/dist/knowledge/component-schema.d.ts +0 -64
- package/dist/knowledge/contact-risk.d.ts +0 -32
- package/dist/knowledge/contact-templates.d.ts +0 -26
- package/dist/knowledge/contract-invariants.d.ts +0 -54
- package/dist/knowledge/demand-risk.d.ts +0 -30
- package/dist/knowledge/discount-threshold.d.ts +0 -26
- package/dist/knowledge/dynamic-pricing.d.ts +0 -29
- package/dist/knowledge/entity-recipient-guard.d.ts +0 -21
- package/dist/knowledge/event-semantics.d.ts +0 -23
- package/dist/knowledge/evidence-review.d.ts +0 -35
- package/dist/knowledge/fee-param-bindings.d.ts +0 -28
- package/dist/knowledge/flywheel-loop.d.ts +0 -41
- package/dist/knowledge/game-scenarios.d.ts +0 -21
- package/dist/knowledge/getting-started.d.ts +0 -37
- package/dist/knowledge/goal-completion.d.ts +0 -31
- package/dist/knowledge/guard-anchor-reach.d.ts +0 -19
- package/dist/knowledge/guard-binding-table.d.ts +0 -52
- package/dist/knowledge/guard-binding-verifier.d.ts +0 -37
- package/dist/knowledge/guard-bindings.d.ts +0 -21
- package/dist/knowledge/guard-blueprint.d.ts +0 -68
- package/dist/knowledge/guard-design-patterns.d.ts +0 -38
- package/dist/knowledge/guard-eval.d.ts +0 -15
- package/dist/knowledge/guard-field-cognition.d.ts +0 -48
- package/dist/knowledge/guard-host-context.d.ts +0 -24
- package/dist/knowledge/guard-ledger.d.ts +0 -19
- package/dist/knowledge/guard-leg-map.d.ts +0 -5
- package/dist/knowledge/guard-lint.d.ts +0 -79
- package/dist/knowledge/guard-node-gates.d.ts +0 -9
- package/dist/knowledge/guard-puzzle.d.ts +0 -188
- package/dist/knowledge/guard-render.d.ts +0 -71
- package/dist/knowledge/guard-risk.d.ts +0 -71
- package/dist/knowledge/guard-submission-brief.d.ts +0 -94
- package/dist/knowledge/guard-submission-prompt.d.ts +0 -63
- package/dist/knowledge/guard-translation.d.ts +0 -58
- package/dist/knowledge/index.d.ts +0 -299
- package/dist/knowledge/industry-evolution.d.ts +0 -82
- package/dist/knowledge/industry-generalizer.d.ts +0 -63
- package/dist/knowledge/industry-rule-node.d.ts +0 -7
- package/dist/knowledge/industry-strategy.d.ts +0 -91
- package/dist/knowledge/intent-metrics.d.ts +0 -43
- package/dist/knowledge/jsonrpc-enum.d.ts +0 -102
- package/dist/knowledge/knob-docs.d.ts +0 -5
- package/dist/knowledge/machine-fork-watch.d.ts +0 -9
- package/dist/knowledge/machine-ledger.d.ts +0 -42
- package/dist/knowledge/machine-puzzle.d.ts +0 -206
- package/dist/knowledge/machine-risk.d.ts +0 -72
- package/dist/knowledge/machine-templates.d.ts +0 -92
- package/dist/knowledge/machine-topology.d.ts +0 -116
- package/dist/knowledge/machine-translation.d.ts +0 -96
- package/dist/knowledge/market-metrics.d.ts +0 -34
- package/dist/knowledge/market-operations.d.ts +0 -46
- package/dist/knowledge/migration-preflight.d.ts +0 -27
- package/dist/knowledge/object-dependency.d.ts +0 -31
- package/dist/knowledge/operation-dictionary.d.ts +0 -18
- package/dist/knowledge/order-ledger.d.ts +0 -69
- package/dist/knowledge/order-puzzle.d.ts +0 -162
- package/dist/knowledge/order-risk.d.ts +0 -62
- package/dist/knowledge/order-templates.d.ts +0 -50
- package/dist/knowledge/param-schema.d.ts +0 -93
- package/dist/knowledge/param-tiers.d.ts +0 -27
- package/dist/knowledge/passport-ledger.d.ts +0 -60
- package/dist/knowledge/passport-templates.d.ts +0 -40
- package/dist/knowledge/path-oracle/coverage.d.ts +0 -16
- package/dist/knowledge/path-oracle/index.d.ts +0 -5
- package/dist/knowledge/path-oracle/products/food-delivery.d.ts +0 -2
- package/dist/knowledge/path-oracle/schema.d.ts +0 -188
- package/dist/knowledge/pattern-resolutions.d.ts +0 -110
- package/dist/knowledge/payment-risk.d.ts +0 -38
- package/dist/knowledge/payment-tracker.d.ts +0 -63
- package/dist/knowledge/permission-ledger.d.ts +0 -49
- package/dist/knowledge/permission-puzzle.d.ts +0 -122
- package/dist/knowledge/permission-risk.d.ts +0 -70
- package/dist/knowledge/permission-templates.d.ts +0 -38
- package/dist/knowledge/personal-risk.d.ts +0 -36
- package/dist/knowledge/product-detail-source.d.ts +0 -37
- package/dist/knowledge/product-doc-b5.d.ts +0 -16
- package/dist/knowledge/progress-ledger.d.ts +0 -63
- package/dist/knowledge/progress-puzzle.d.ts +0 -82
- package/dist/knowledge/progress-risk.d.ts +0 -75
- package/dist/knowledge/progress-templates.d.ts +0 -38
- package/dist/knowledge/projection.d.ts +0 -54
- package/dist/knowledge/projection.spec.d.ts +0 -1
- package/dist/knowledge/projection.spec.js +0 -1
- package/dist/knowledge/proof-risk.d.ts +0 -33
- package/dist/knowledge/protocol-facts.d.ts +0 -17
- package/dist/knowledge/publish-gate.d.ts +0 -20
- package/dist/knowledge/publish-readiness.d.ts +0 -25
- package/dist/knowledge/publish-surface-contract.d.ts +0 -16
- package/dist/knowledge/puzzle-projections.d.ts +0 -11
- package/dist/knowledge/rail-exit-satisfiability.d.ts +0 -25
- package/dist/knowledge/registrar-risk.d.ts +0 -34
- package/dist/knowledge/release-sentinel.d.ts +0 -12
- package/dist/knowledge/repository-risk.d.ts +0 -46
- package/dist/knowledge/repository-write-semantics.d.ts +0 -27
- package/dist/knowledge/reputation-rules.d.ts +0 -36
- package/dist/knowledge/requirement-families.d.ts +0 -13
- package/dist/knowledge/resource-risk.d.ts +0 -32
- package/dist/knowledge/reward-ledger.d.ts +0 -97
- package/dist/knowledge/reward-puzzle.d.ts +0 -98
- package/dist/knowledge/reward-risk.d.ts +0 -86
- package/dist/knowledge/reward-templates.d.ts +0 -25
- package/dist/knowledge/rule-node-analyzers.d.ts +0 -49
- package/dist/knowledge/rule-outcome.d.ts +0 -5
- package/dist/knowledge/scenario-topology.d.ts +0 -48
- package/dist/knowledge/semantic-ir.d.ts +0 -136
- package/dist/knowledge/service-allocation-semantics.d.ts +0 -36
- package/dist/knowledge/service-allocator-audit-node.d.ts +0 -3
- package/dist/knowledge/service-ledger.d.ts +0 -87
- package/dist/knowledge/service-puzzle.d.ts +0 -158
- package/dist/knowledge/service-risk-node.d.ts +0 -3
- package/dist/knowledge/service-risk.d.ts +0 -110
- package/dist/knowledge/service-templates.d.ts +0 -41
- package/dist/knowledge/settlement-semantics.d.ts +0 -1
- package/dist/knowledge/strategy-manuals.d.ts +0 -15
- package/dist/knowledge/supply-chain.d.ts +0 -35
- package/dist/knowledge/template-index.d.ts +0 -19
- package/dist/knowledge/template-loader.d.ts +0 -425
- package/dist/knowledge/template-nav.d.ts +0 -9
- package/dist/knowledge/template-prose.d.ts +0 -50
- package/dist/knowledge/template-registry.d.ts +0 -48
- package/dist/knowledge/template-scanner.d.ts +0 -158
- package/dist/knowledge/template-test-profiles.d.ts +0 -17
- package/dist/knowledge/template-validation.d.ts +0 -3
- package/dist/knowledge/tools-reference.d.ts +0 -17
- package/dist/knowledge/treasury-ledger.d.ts +0 -42
- package/dist/knowledge/treasury-puzzle.d.ts +0 -163
- package/dist/knowledge/treasury-risk.d.ts +0 -88
- package/dist/knowledge/treasury-templates.d.ts +0 -38
- package/dist/knowledge/universal-template.d.ts +0 -22
- package/dist/knowledge/util-risk.d.ts +0 -30
- package/dist/knowledge/workflow-guidance.d.ts +0 -194
- package/dist/knowledge/workspace-lists.d.ts +0 -61
- package/dist/monitor/SuggestionBridge.spec.d.ts +0 -1
- package/dist/monitor/SuggestionBridge.spec.js +0 -1
- package/dist/participation/arbitrator-interest.d.ts +0 -22
- package/dist/participation/demander-interest.d.ts +0 -23
- package/dist/participation/employee-kpi.d.ts +0 -37
- package/dist/participation/employee-kpi.spec.d.ts +0 -1
- package/dist/participation/employee-kpi.spec.js +0 -1
- package/dist/participation/employee-store.d.ts +0 -16
- package/dist/participation/game-context.d.ts +0 -25
- package/dist/participation/index.d.ts +0 -2
- package/dist/participation/node-action-advisor.d.ts +0 -68
- package/dist/participation/time-window.d.ts +0 -48
- package/dist/persona/facet-profile.d.ts +0 -33
- package/dist/persona/persona-audit.spec.d.ts +0 -1
- package/dist/persona/persona-audit.spec.js +0 -1
- package/dist/playbooks/service-build/business-puzzle.d.ts +0 -48
- package/dist/playbooks/service-build/context-assembly.d.ts +0 -32
- package/dist/playbooks/service-build/facet-money.d.ts +0 -33
- package/dist/playbooks/service-build/facet-money.spec.d.ts +0 -1
- package/dist/playbooks/service-build/facet-money.spec.js +0 -1
- package/dist/playbooks/service-build/game-theory.d.ts +0 -47
- package/dist/playbooks/service-build/index.d.ts +0 -15
- package/dist/playbooks/service-build/intent-analyzer.d.ts +0 -72
- package/dist/playbooks/service-build/machine-nodes.d.ts +0 -27
- package/dist/playbooks/service-build/machine-panorama.d.ts +0 -71
- package/dist/playbooks/service-build/merchant-guide.d.ts +0 -382
- package/dist/playbooks/service-build/migration-planner.d.ts +0 -61
- package/dist/playbooks/service-build/mode-actions.d.ts +0 -260
- package/dist/playbooks/service-build/object-panorama.d.ts +0 -317
- package/dist/playbooks/service-build/object-type.d.ts +0 -1
- package/dist/playbooks/service-build/participation-radar.d.ts +0 -20
- package/dist/playbooks/service-build/pipeline-actions.d.ts +0 -108
- package/dist/playbooks/service-build/process.d.ts +0 -6
- package/dist/playbooks/service-build/relationship-profile.d.ts +0 -3
- package/dist/playbooks/service-build/reverse-mapping-nk4.spec.d.ts +0 -1
- package/dist/playbooks/service-build/reverse-mapping-nk4.spec.js +0 -1
- package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.d.ts +0 -1
- package/dist/playbooks/service-build/reverse-mapping-refund-p0-5.spec.js +0 -1
- package/dist/playbooks/service-build/reverse-mapping.d.ts +0 -66
- package/dist/playbooks/service-build/risk-aggregator.d.ts +0 -59
- package/dist/playbooks/service-build/service-panorama.d.ts +0 -229
- package/dist/playbooks/service-build/service-quote.d.ts +0 -2
- package/dist/playbooks/service-build/service-quote.spec.d.ts +0 -1
- package/dist/playbooks/service-build/service-quote.spec.js +0 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.d.ts +0 -1
- package/dist/playbooks/service-build/topology-evaluation.spec.js +0 -1
- package/dist/playbooks/service-build/topology-query.d.ts +0 -25
- package/dist/playbooks/service-build/workflow-design-assessment.d.ts +0 -33
- package/dist/relationship/derivation.d.ts +0 -95
- package/dist/relationship/derivation.spec.d.ts +0 -1
- package/dist/relationship/derivation.spec.js +0 -1
- package/dist/relationship/incentive.d.ts +0 -38
- package/dist/relationship/index.d.ts +0 -4
- package/dist/relationship/registry.d.ts +0 -13
- package/dist/relationship/types.d.ts +0 -45
- package/dist/review/arb.d.ts +0 -4
- package/dist/review/demand.d.ts +0 -3
- package/dist/review/index.d.ts +0 -3
- package/dist/review/machine.d.ts +0 -3
- package/dist/review/order.d.ts +0 -8
- package/dist/review/progress.d.ts +0 -3
- package/dist/review/repository.d.ts +0 -3
- package/dist/review/service.d.ts +0 -5
- package/dist/review/types.d.ts +0 -163
- package/dist/role/derivation.d.ts +0 -35
- package/dist/role/index.d.ts +0 -6
- package/dist/role/intent.d.ts +0 -23
- package/dist/role/model.d.ts +0 -9
- package/dist/role/profiles.d.ts +0 -26
- package/dist/role/resolution.d.ts +0 -27
- package/dist/runtime/instance-registry.d.ts +0 -14
- package/dist/safety/index.d.ts +0 -3
- package/dist/schema/call/permission-handler.d.ts +0 -5
- package/dist/schema/call/semantic-customer-advice.spec.d.ts +0 -1
- package/dist/schema/call/semantic-customer-advice.spec.js +0 -1
- package/dist/schema/common/tokentype-short-probe.spec.d.ts +0 -1
- package/dist/schema/common/tokentype-short-probe.spec.js +0 -1
- package/dist/schema/envelope-unify.d.ts +0 -5
- package/dist/schema/goal/planning.d.ts +0 -742
- package/dist/schema/industry-pack/modes.d.ts +0 -447
- package/dist/schema/query/bi.d.ts +0 -3369
- package/dist/schema/utils/guard-query-utils.d.ts +0 -18
- package/dist/schema/utils/permission-index-utils.d.ts +0 -2
- package/dist/schema/utils/skills-recommendation.d.ts +0 -2
- package/dist/schema-query-impl/index.d.ts +0 -83
- package/dist/schemas/account_operation.output.json +0 -3869
- package/dist/schemas/ask_user.output.json +0 -54
- package/dist/schemas/benchmark_migration_operation.output.json +0 -1669
- package/dist/schemas/bridge_operation.output.json +0 -1548
- package/dist/schemas/config_operation.output.json +0 -896
- package/dist/schemas/employee_operation.output.json +0 -307
- package/dist/schemas/evaluation_operation.output.json +0 -4716
- package/dist/schemas/guard2file.output.json +0 -83
- package/dist/schemas/industry_pack_operation.output.json +0 -2985
- package/dist/schemas/intent_radar.output.json +0 -326
- package/dist/schemas/keeper_operation.output.json +0 -1441
- package/dist/schemas/local_cache_operation.output.json +0 -1718
- package/dist/schemas/local_history_operation.output.json +0 -1644
- package/dist/schemas/local_info_operation.output.json +0 -1530
- package/dist/schemas/local_mark_operation.output.json +0 -1622
- package/dist/schemas/machineNode2file.output.json +0 -88
- package/dist/schemas/messenger_operation.output.json +0 -4692
- package/dist/schemas/monitor_events.output.json +0 -1602
- package/dist/schemas/monitor_subscription.output.json +0 -1629
- package/dist/schemas/onchain_events.output.json +0 -4053
- package/dist/schemas/onchain_operations.output.json +0 -7788
- package/dist/schemas/onchain_table_data.output.json +0 -11868
- package/dist/schemas/permission_operation.output.json +0 -205
- package/dist/schemas/persona_operation.output.json +0 -64612
- package/dist/schemas/query_toolkit.output.json +0 -28302
- package/dist/schemas/schema_query.output.json +0 -81
- package/dist/schemas/service_clone_operation.output.json +0 -247
- package/dist/schemas/strategy_review_operation.output.json +0 -532
- package/dist/schemas/watch_operation.output.json +0 -930
- package/dist/schemas/wip_file.output.json +0 -360
- package/dist/schemas/workflow_operation.output.json +0 -422
- package/dist/schemas/workspace_operation.output.json +0 -477
- package/dist/schemas/wowok_buildin_info.output.json +0 -2477
- package/dist/strategy/collectors.d.ts +0 -66
- package/dist/strategy/collectors.spec.d.ts +0 -1
- package/dist/strategy/collectors.spec.js +0 -1
- package/dist/strategy/index.d.ts +0 -5
- package/dist/strategy/metrics.d.ts +0 -20
- package/dist/strategy/review.d.ts +0 -48
- package/dist/strategy/scorecard.d.ts +0 -32
- package/dist/strategy/store.d.ts +0 -26
- package/dist/task/ProcessStore.d.ts +0 -98
- package/dist/task/playbook.d.ts +0 -11
- package/dist/task/substep-trace.d.ts +0 -91
- package/dist/tools/build-fingerprint.d.ts +0 -28
- package/dist/tools/error-catalog.d.ts +0 -17
- package/dist/tools/handlers/ask-user.d.ts +0 -3
- package/dist/tools/handlers/benchmark-migration.d.ts +0 -121
- package/dist/tools/handlers/bridge.d.ts +0 -8
- package/dist/tools/handlers/config.d.ts +0 -2
- package/dist/tools/handlers/dispatch-expectations.d.ts +0 -2
- package/dist/tools/handlers/dispatch-expectations.spec.d.ts +0 -1
- package/dist/tools/handlers/dispatch-expectations.spec.js +0 -1
- package/dist/tools/handlers/employee.d.ts +0 -8
- package/dist/tools/handlers/employee.spec.d.ts +0 -1
- package/dist/tools/handlers/employee.spec.js +0 -1
- package/dist/tools/handlers/entry-edge-recipe.d.ts +0 -101
- package/dist/tools/handlers/escrow-deficit.d.ts +0 -10
- package/dist/tools/handlers/evaluation.d.ts +0 -2
- package/dist/tools/handlers/evaluation.spec.d.ts +0 -1
- package/dist/tools/handlers/evaluation.spec.js +0 -1
- package/dist/tools/handlers/file-export.d.ts +0 -3
- package/dist/tools/handlers/fund-rail-recipe.d.ts +0 -10
- package/dist/tools/handlers/goal.d.ts +0 -4
- package/dist/tools/handlers/industry-pack.d.ts +0 -3
- package/dist/tools/handlers/intent-radar.d.ts +0 -2
- package/dist/tools/handlers/keeper.d.ts +0 -12
- package/dist/tools/handlers/local.d.ts +0 -6
- package/dist/tools/handlers/mark-namespace.d.ts +0 -30
- package/dist/tools/handlers/messenger.d.ts +0 -24
- package/dist/tools/handlers/monitor.d.ts +0 -26
- package/dist/tools/handlers/name-resolution.d.ts +0 -4
- package/dist/tools/handlers/name-resolution.spec.d.ts +0 -1
- package/dist/tools/handlers/name-resolution.spec.js +0 -1
- package/dist/tools/handlers/network.d.ts +0 -1
- package/dist/tools/handlers/onchain-name-registration.d.ts +0 -49
- package/dist/tools/handlers/onchain-name-registration.spec.d.ts +0 -1
- package/dist/tools/handlers/onchain-name-registration.spec.js +0 -1
- package/dist/tools/handlers/onchain.d.ts +0 -132
- package/dist/tools/handlers/permission.d.ts +0 -2
- package/dist/tools/handlers/persona.d.ts +0 -4
- package/dist/tools/handlers/publish-binding-echo.d.ts +0 -22
- package/dist/tools/handlers/review-chain.d.ts +0 -19
- package/dist/tools/handlers/schema-query.d.ts +0 -2
- package/dist/tools/handlers/service-clone.d.ts +0 -20
- package/dist/tools/handlers/stale-build-check.d.ts +0 -9
- package/dist/tools/handlers/strategy-review.d.ts +0 -2
- package/dist/tools/handlers/submission-assembly.d.ts +0 -55
- package/dist/tools/handlers/watch.d.ts +0 -2
- package/dist/tools/handlers/winner-derivation.d.ts +0 -20
- package/dist/tools/handlers/wip-upload.d.ts +0 -22
- package/dist/tools/handlers/wip.d.ts +0 -2
- package/dist/tools/handlers/workflow.d.ts +0 -2
- package/dist/tools/handlers/workspace.d.ts +0 -4
- package/dist/tools/move-fn-index.gen.d.ts +0 -3
- package/dist/tools/publish-gate-state.d.ts +0 -5
- package/dist/tools/registry/agent.d.ts +0 -2
- package/dist/tools/registry/bridge.d.ts +0 -2
- package/dist/tools/registry/business.d.ts +0 -2
- package/dist/tools/registry/config.d.ts +0 -2
- package/dist/tools/registry/evaluation.d.ts +0 -2
- package/dist/tools/registry/files.d.ts +0 -2
- package/dist/tools/registry/identity.d.ts +0 -2
- package/dist/tools/registry/interaction.d.ts +0 -2
- package/dist/tools/registry/local.d.ts +0 -2
- package/dist/tools/registry/messenger.d.ts +0 -2
- package/dist/tools/registry/monitor.d.ts +0 -2
- package/dist/tools/registry/onchain.d.ts +0 -2
- package/dist/tools/registry/query.d.ts +0 -2
- package/dist/tools/retry.d.ts +0 -8
- package/dist/tools/rules-hook.d.ts +0 -5
- package/dist/tools/runtime-health.d.ts +0 -10
- package/dist/tools/sanitize-description-roundtrip.spec.d.ts +0 -1
- package/dist/tools/sanitize-description-roundtrip.spec.js +0 -1
- package/dist/tools/sanitize-output.d.ts +0 -4
- package/dist/tools/sanitize-output.spec.d.ts +0 -1
- package/dist/tools/sanitize-output.spec.js +0 -1
- package/dist/tools/shared.d.ts +0 -20
- package/dist/tools/transport-integrity.d.ts +0 -7
- package/dist/tools/upgrade-check.d.ts +0 -75
- package/dist/tools/wip-deploy-assist.d.ts +0 -34
- package/dist/tools/wip-verify-ledger.d.ts +0 -16
- package/dist/tools/wrap.d.ts +0 -45
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comment": "Personal rule pack (R-PERSONAL) — declarative form of the retired in-code Personal risk rules. Facts are produced by the kernel extractor (personal-risk.ts, bound to the inherited registrar record caps and the sensitive-content heuristic); rules only reference fact names. Levels/wording can be retuned per rule and rules can be disabled (enabled=false, trace left) via the judgment document — factory rules can never be deleted or invented here.",
|
|
3
|
+
"facts": {
|
|
4
|
+
"sensitive_hits_found": "True when the sensitive-content heuristic matched at least one information entry (phone / email / private key / mnemonic / secret-named).",
|
|
5
|
+
"sensitive_patterns_text": "Pre-rendered match list ('name=kind' entries joined by '; ') for the evidence text.",
|
|
6
|
+
"is_mark_destroy": "The caller is invoking the irreversible mark destroy operation.",
|
|
7
|
+
"has_referrer": "A referrer address is set (self-attested, unverified on-chain).",
|
|
8
|
+
"is_mark_transfer": "The caller is invoking the mark transfer operation (the source address loses the mark).",
|
|
9
|
+
"information_count": "Raw information record count, passed through for evidence text.",
|
|
10
|
+
"information_count_over_limit": "True when information_count is provided and meets or exceeds the inherited record-count cap.",
|
|
11
|
+
"expects_dedicated_move_struct": "The caller assumes a dedicated Personal Move struct exists (it does not — Personal composes Entity + Resource).",
|
|
12
|
+
"singleton_enforced": "True when the SDK enforces the one-record-per-account singleton invariant.",
|
|
13
|
+
"max_record_count_registrar": "KERNEL CONSTANT — record-count cap Personal inherits from the registrar entity layer.",
|
|
14
|
+
"max_record_length": "KERNEL CONSTANT — per-record length cap inherited from the registrar entity layer.",
|
|
15
|
+
"max_address_count": "KERNEL CONSTANT — address-list cap that applies via the entity layer.",
|
|
16
|
+
"max_tags_count": "KERNEL CONSTANT — tag cap that applies via the resource layer."
|
|
17
|
+
},
|
|
18
|
+
"rules": [
|
|
19
|
+
{
|
|
20
|
+
"rule_id": "R-PERSONAL-01",
|
|
21
|
+
"dimension": "semantic",
|
|
22
|
+
"trigger": "sensitive-content heuristic matched an information entry",
|
|
23
|
+
"cases": [
|
|
24
|
+
{
|
|
25
|
+
"when": { "field": "sensitive_hits_found", "op": "eq", "value": true },
|
|
26
|
+
"level": "high",
|
|
27
|
+
"title": "Sensitive information leakage — on-chain data is permanent",
|
|
28
|
+
"description": "information is stored via Entity.info_add as on-chain Records. The schema description warns 'NEVER: phone, address, private keys' but the Move layer does not validate content. Once a phone number, physical address, email, or private key is written on-chain, it is permanent and publicly readable — there is no delete (info_remove only removes the named entry from the user's record; the data remains in the transaction history).",
|
|
29
|
+
"scenario": "User adds information {name: 'phone', value: '+8613800000000'}; number is public forever",
|
|
30
|
+
"mitigation": "MCP schema description MUST warn. AI agents MUST re-confirm before adding any information entry. Business layer should run a sensitive-data regex (phone/email/private-key/mnemonic) and reject matches. Use the 'local' tool for private data.",
|
|
31
|
+
"evidence": "sensitive patterns: ${sensitive_patterns_text}",
|
|
32
|
+
"stakeholders": ["user"]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"rule_id": "R-PERSONAL-02",
|
|
38
|
+
"dimension": "lifecycle",
|
|
39
|
+
"trigger": "mark destroy is being invoked",
|
|
40
|
+
"cases": [
|
|
41
|
+
{
|
|
42
|
+
"when": { "field": "is_mark_destroy", "op": "eq", "value": true },
|
|
43
|
+
"level": "medium",
|
|
44
|
+
"title": "mark destroy is irreversible — identity mark permanently lost",
|
|
45
|
+
"description": "The 'destroy' mark op permanently deletes the Resource object backing the user's identity mark. There is no archive, no event, and no rollback. After destroy, the user has no on-chain identity mark until they create a new one, and any external system keyed on the old Resource address breaks.",
|
|
46
|
+
"scenario": "User destroys their mark; downstream services keyed on the old Resource address fail",
|
|
47
|
+
"mitigation": "Require explicit confirmation before destroy. SDK should refuse destroy if any live consumer still references the mark. Provide a 'replace' alternative that swaps the underlying Resource without losing continuity.",
|
|
48
|
+
"evidence": "is_mark_destroy=true (irreversible)",
|
|
49
|
+
"stakeholders": ["user", "consumer"]
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"rule_id": "R-PERSONAL-03",
|
|
55
|
+
"dimension": "semantic",
|
|
56
|
+
"trigger": "a referrer address is set",
|
|
57
|
+
"cases": [
|
|
58
|
+
{
|
|
59
|
+
"when": { "field": "has_referrer", "op": "eq", "value": true },
|
|
60
|
+
"level": "medium",
|
|
61
|
+
"title": "referrer chain can be abused to fabricate trust signals",
|
|
62
|
+
"description": "When registering, a user may specify any referrer address. There is no on-chain verification that the referrer actually invited the user. A sybil attacker can register many accounts chained to a reputable address, fabricating an association to borrow trust. The Registrar records referrer but does not validate consent.",
|
|
63
|
+
"scenario": "Attacker registers 100 accounts all citing a reputable merchant as referrer",
|
|
64
|
+
"mitigation": "Business layer should treat referrer as a self-attested hint, not a verified trust signal. Audit referrer chains off-chain; require the referrer to co-sign if used for trust scoring.",
|
|
65
|
+
"evidence": "has_referrer=true (self-attested, unverified)",
|
|
66
|
+
"stakeholders": ["user", "consumer"]
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"rule_id": "R-PERSONAL-04",
|
|
72
|
+
"dimension": "structural",
|
|
73
|
+
"trigger": "information record count meets or exceeds the inherited cap",
|
|
74
|
+
"cases": [
|
|
75
|
+
{
|
|
76
|
+
"when": { "field": "information_count_over_limit", "op": "eq", "value": true },
|
|
77
|
+
"level": "low",
|
|
78
|
+
"title": "information inherits MAX_RECORD_COUNT_REGISTRAR=${max_record_count_registrar} — permissive",
|
|
79
|
+
"description": "Personal does not define its own record cap; it inherits Entity's MAX_RECORD_COUNT_REGISTRAR=${max_record_count_registrar} and MAX_RECORD_LENGTH=${max_record_length} per record. ${max_record_count_registrar} records per user is generous and can bloat on-chain storage if users add many entries. MAX_ADDRESS_COUNT=${max_address_count} and MAX_TAGS_COUNT=${max_tags_count} also apply via Entity/Resource.",
|
|
80
|
+
"scenario": "User adds 1000 information entries; Entity record storage is heavy and slow to read",
|
|
81
|
+
"mitigation": "Business layer should self-limit information count (e.g. ≤50). For bulk profile data, store off-chain and reference via a Repository or Proof.",
|
|
82
|
+
"evidence": "information_count=${information_count}, limit=${max_record_count_registrar}",
|
|
83
|
+
"stakeholders": ["user", "system"]
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"rule_id": "R-PERSONAL-05",
|
|
89
|
+
"dimension": "lifecycle",
|
|
90
|
+
"trigger": "mark transfer is being invoked",
|
|
91
|
+
"cases": [
|
|
92
|
+
{
|
|
93
|
+
"when": { "field": "is_mark_transfer", "op": "eq", "value": true },
|
|
94
|
+
"level": "medium",
|
|
95
|
+
"title": "mark transfer loses identity mark at the source address",
|
|
96
|
+
"description": "The 'transfer' mark op moves the Resource backing the identity mark to a new address. After transfer, the source address has no mark — any service that keyed identity on the source address loses the binding. There is no automatic forwarding stub left behind.",
|
|
97
|
+
"scenario": "User transfers mark to a new wallet; old-wallet-based logins all break",
|
|
98
|
+
"mitigation": "Surface a 'transfer will detach the mark from this address' warning. Consumers should track marks by Resource address, not by user address. Provide a migration window where both addresses are valid.",
|
|
99
|
+
"evidence": "is_mark_transfer=true (source loses mark)",
|
|
100
|
+
"stakeholders": ["user", "consumer"]
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"rule_id": "R-PERSONAL-06",
|
|
106
|
+
"dimension": "cross_object",
|
|
107
|
+
"trigger": "caller assumes a dedicated Personal Move struct",
|
|
108
|
+
"cases": [
|
|
109
|
+
{
|
|
110
|
+
"when": { "field": "expects_dedicated_move_struct", "op": "eq", "value": true },
|
|
111
|
+
"level": "low",
|
|
112
|
+
"title": "Personal has no dedicated Move struct — depends entirely on Entity + Resource",
|
|
113
|
+
"description": "Personal is an SDK-layer construct: there is no dedicated Move module. The SDK composes Entity (information/description) and Resource (mark) on behalf of the user. Any breaking change in Entity or Resource directly affects Personal. The MCP layer cannot fix Personal bugs without touching Entity/Resource.",
|
|
114
|
+
"scenario": "Entity schema changes; Personal.information silently breaks",
|
|
115
|
+
"mitigation": "Track Entity and Resource changelogs as first-order dependencies of Personal. Add integration tests that exercise Personal flows whenever Entity/Resource change.",
|
|
116
|
+
"evidence": "expects_dedicated_move_struct=true (none exists)",
|
|
117
|
+
"stakeholders": ["system"]
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"rule_id": "R-PERSONAL-07",
|
|
123
|
+
"dimension": "lifecycle",
|
|
124
|
+
"trigger": "singleton invariant not enforced by the SDK",
|
|
125
|
+
"cases": [
|
|
126
|
+
{
|
|
127
|
+
"when": { "field": "singleton_enforced", "op": "falsy" },
|
|
128
|
+
"level": "medium",
|
|
129
|
+
"title": "Singleton assumption — if violated, multiple Personal instances conflict",
|
|
130
|
+
"description": "Personal assumes each account has exactly one Entity record (and one Resource mark). The Move layer enforces this via the registration operation's idempotency (returns the existing Resource for already-registered users). But if the SDK ever bypasses registration and creates duplicates (e.g. via the forced re-registration path), downstream code that assumes a singleton would see inconsistent state.",
|
|
131
|
+
"scenario": "SDK calls the forced re-registration path; user now has two Resource marks",
|
|
132
|
+
"mitigation": "SDK MUST enforce the singleton invariant: refuse to call the forced re-registration path unless the user explicitly opts in. Document that forced re-registration invalidates the old Resource address.",
|
|
133
|
+
"evidence": "singleton_enforced=false (needs SDK guard)",
|
|
134
|
+
"stakeholders": ["user", "consumer"]
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
@@ -48,6 +48,9 @@
|
|
|
48
48
|
"first_path_dependent_anchor": "First guard step id using a path-dependent time query (TIME-ANCHOR-01, E-10)",
|
|
49
49
|
"path_sensitive": "The anchored node is reachable by more than one path, so the anchor can shift",
|
|
50
50
|
"first_write_only_unenforced_field": "First write-only param set with no guard query covering it (WRITE-ONLY-01, A-1/A-10)",
|
|
51
|
+
"write_once_removable_count": "Configure steps that dissolve a write_once policy attestation — policies op:'set' dropping it, op:'remove'/'clear' touching it, or a same-name op:'add' without write_once (WRITE-ONCE-REMOVABLE, W8-5 / N-10)",
|
|
52
|
+
"first_write_once_removable": "First write_once-dissolving configure step, rendered as: step 'id': <violation>: policy names",
|
|
53
|
+
"write_once_removable_display": "Semicolon-joined list of ALL write_once-dissolving configure steps",
|
|
51
54
|
"first_orphan_guard": "First guard step id never referenced by any host binding (HOST-GRAPH-01, B-2)",
|
|
52
55
|
"first_repo_query_without_repository": "First guard step id querying repository.* while the plan creates no repository (HOST-GRAPH-01, B-2)",
|
|
53
56
|
"first_edge_guard_missing_254": "First guard step id bound on a machine forward whose table declares no {identifier: 254, b_submission: true} row (TASKBIND-01, N-K20: progress::assert_task_binding aborts code 11)",
|
|
@@ -86,6 +89,8 @@
|
|
|
86
89
|
"fund_arb_route_unfunded": "A post-settlement arbitration re-route exists AND the compensation pool is absent or deposits 0 — the ruling payout aborts 27 (E_COMPENSATION_NOT_MATCH), so the promised exit is dead by construction (FUND-ZERO-01)",
|
|
87
90
|
"entry_no_open_exit": "The order-landing node (entry-edge target) exits only through CLOSING time windows (Clock <= anchor legs, no opening leg, no unguarded alternative) — once a window closes nothing can advance the order and the entry escrow is locked (ENTRY-ABANDON-01, gf26 GF2-30)",
|
|
88
91
|
"entry_strand_node": "First stranded entry node name (ENTRY-ABANDON-01 judgment gate)",
|
|
92
|
+
"window_strand_nodes": "Comma-joined NON-ENTRY rest nodes whose EVERY exit is gated by a CLOSING time window (Clock <= anchor, no opening leg, no unguarded alternative) — once the window elapses the order cannot advance and the escrow held at that rest state has no firing rail (ENTRY-ABANDON-01 case ②, ctrx-mn-261108 O14/O15/O19: 1.10 WOW stranded after a claim_window's only exits closed)",
|
|
93
|
+
"window_strand_count": "How many non-entry rest nodes are window-stranded (ENTRY-ABANDON-01 case ② judgment gate)",
|
|
89
94
|
"arb_promise_without_settle_rail": "A machine guard reads the arbitration ruling family while NO $ref-visible allocator row releases money on the ruling (none reads the family, none rides the ruling edge node-free, and the ruling edge's destination has no FUND-EXIT-01-style allocator coverage); guard_key-declared rails are plan-opaque and left to the freeze gate — the verdict moves state, never money (POST-ARB-SETTLE-01, gf26 GF2-31)",
|
|
90
95
|
"arb_promise_node": "First node whose exit edge carries the arbitration-promise guard (POST-ARB-SETTLE-01 judgment gate)",
|
|
91
96
|
"arb_key_plane_opaque": "The machine carries arbitration-promise guards while the allocator rail plane carries guard_key declarations — rails the $ref plane cannot verify, so the POST-ARB-SETTLE-01 verdict rule stays silent there by ruling; this shape is the freeze gate's red line: ARB-KEY-PLANE-01 fires high and preflightPlan refuses the publish until the keys resolve into structured guard steps (user ruling 2026-10-26)",
|
|
@@ -94,13 +99,64 @@
|
|
|
94
99
|
"repo_gate_key_unbacked_count": "Composite where-query scans over a plan-local repository whose static key no declared policy uses (REPO-GATE-KEY-01, ZR-32)",
|
|
95
100
|
"first_repo_gate_key_unbacked": "First unbacked gate key, rendered as 'key' in guard 'step-id'",
|
|
96
101
|
"repo_gate_key_unbacked_display": "Comma-joined list of ALL unbacked gate keys",
|
|
102
|
+
"wip_query_totality_count": "Guard order.item.wip_hash comparisons whose static String operand is NOT a case-exact sale name in the plan's sales catalog — find_sale_item misses at delivery, the native Err wedges the order with a primitive error inside verify_guard (R-QUERY-TOTALITY, kl F-ORDER-02); service.sale.wip_hash is out of scope (WIP-listing namespace); present only when a sales catalog exists AND at least one unprovable comparison burns",
|
|
103
|
+
"first_wip_query_totality": "First unprovable comparison, rendered as guard 'step-id': <query> vs '<constant>'",
|
|
104
|
+
"wip_query_totality_display": "Semicolon-joined list of ALL unprovable wip-hash comparisons",
|
|
105
|
+
"wip_query_totality_sku_display": "Comma-joined case-exact sale names the plan's catalog declares — the only shippable comparison constants",
|
|
106
|
+
"late_remedy_edge_count": "Machine edges whose forward name ends with `_late` — the K3 D3 after-hours twins a plan ships (late_remedy_mode = 'keeper_reopen' mounts one per closing-window edge, or the plan declares twins by hand). Present whenever a late rail exists: shipping one is itself a disclosure (an intent to operate outside the declared window)",
|
|
107
|
+
"late_remedy_gate_missing": "TRUE when any `{forward}_late` edge is bound to guards NONE of which carry the 1008 keeper membership leg (permission.entity.perm) — an ANONYMOUS after-hours rail: no keeper identity behind the reopen key (R-LATE-REMEDY, K3 D3)",
|
|
108
|
+
"first_late_remedy_gate_missing": "First anonymous late edge, rendered as 'prev -> next (forward)'",
|
|
109
|
+
"late_remedy_gate_missing_display": "Semicolon-joined list of ALL anonymous late edges",
|
|
110
|
+
"repo_agg_submitted_count": "Guard sum-where aggregates whose repository operand resolves to a SUBMITTED table cell — the advancing caller fills the ledger identity at forward time and can point the aggregate anywhere (REPO-AGG-SUBMITTED-01, W6-03 / upynjab P0-1)",
|
|
111
|
+
"first_repo_agg_submitted": "First submitted aggregate slot, rendered as 'slot N of guard 'step-id''",
|
|
112
|
+
"repo_agg_submitted_display": "Comma-joined list of ALL submitted aggregate slots",
|
|
113
|
+
"alloc_overlap_payee_count": "Allocator row pairs whose accepted-node sets INTERSECT but which pay DIFFERENT recipient sets — a double-pay race on the shared order state (INV-ALLOC-OVERLAP-PAYEE, W6-06; node overlap itself is the sanctioned C-F01/decision-11 shape)",
|
|
114
|
+
"first_alloc_overlap_payee": "First conflicting pair, rendered as row#i(track,guard,pays …) vs row#j(…) share node(s) [x,y] with different payees",
|
|
115
|
+
"alloc_overlap_payee_display": "Semicolon-joined list of ALL conflicting pairs",
|
|
97
116
|
"sales_step_present": "The plan materializes at least one sellable SKU (a service create with a non-empty sales list, or a configure step with method 'sales') — the order entry's existence predicate (PLAN-SALES-01)",
|
|
98
117
|
"dead_sku_count": "Sales whose name exceeds the on-chain 64-byte BUY limit (the listing path accepts up to 256 bytes but the buy path caps buyer-sent item names at 64 and matches EXACTLY — a 65..256-byte name is publishable yet every order_new aborts E_NAME_LENGTH_EXCEEDED) — present only when at least one dead SKU is listed (SKU-NAME-64 advisory, F-RQ-01 / rqd3-tn-261030)",
|
|
99
118
|
"first_dead_sku_name": "First over-limit sale name",
|
|
100
119
|
"first_dead_sku_bytes": "That name's UTF-8 byte length",
|
|
101
120
|
"guard_reach_contradiction_count": "Root-AND-chain legs carrying proof-level structural unreachability (ordering interval crossing; == to two different numeric constants or to opposite Bools; == X conjoined with a strict ordering past X; same-binding self-comparison with a strict direction) — the guard predicate is unsatisfiable by construction (GUARD-REACH-01, S3 plane)",
|
|
102
121
|
"first_guard_reach_contradiction": "First contradiction, rendered as: guard 'step-id' (channel): OP X contradicts OP X — unsatisfiable",
|
|
103
|
-
"guard_reach_contradiction_display": "Semicolon-joined list of ALL proof-level unreachability contradictions in the plan's guard roots"
|
|
122
|
+
"guard_reach_contradiction_display": "Semicolon-joined list of ALL proof-level unreachability contradictions in the plan's guard roots",
|
|
123
|
+
"fractional_day_knob_count": "Fractional `*_days` knobs riding the PRESENTED plan's step params or resolved inputs — the publish-face semantic twin of the build face's PLAN-P0-18 blocker (TWIN-WINDOW-ZERO); absent when none",
|
|
124
|
+
"first_fractional_day_knob": "First fractional day knob, rendered as: step 'step-id': param.path = value — the U64 day slot truncates to N at BCS encode",
|
|
125
|
+
"fractional_day_knob_display": "Semicolon-joined list of ALL fractional day knobs on the presented plan",
|
|
126
|
+
"fractional_hour_knob_count": "Fractional `*_hours`/`*_minutes` leaves riding the PRESENTED plan's step params — the publish-face semantic twin of the build face's pdd F-09 hours blocker (TWIN-WINDOW-ZERO-HOURS); absent when none",
|
|
127
|
+
"first_fractional_hour_knob": "First fractional hours leaf, rendered as: step 'step-id': param.path = value — the U64 hour/minute slot truncates to N at BCS encode",
|
|
128
|
+
"fractional_hour_knob_display": "Semicolon-joined list of ALL fractional hours/minutes leaves on the presented plan's step params",
|
|
129
|
+
"guard_equality_drift_count": "Guards whose description promises hash/wip equality while the root carries NO logic_equal leg — existence-only enforcement, a forged hash clears it (GUARD-EQUALITY-DRIFT, ofnz8 F-49; shared predicate knowledge/guard-quality.ts, same function the template scanner runs)",
|
|
130
|
+
"first_guard_equality_drift": "First equality-drift guard, rendered as: guard 'step-id': description promises hash/wip equality but the root carries no logic_equal leg",
|
|
131
|
+
"guard_equality_drift_display": "Semicolon-joined list of ALL equality-drift guards",
|
|
132
|
+
"guard_threshold_literal_count": "Guards carrying a threshold-named U64 row whose value is the literal 1 — a 1-raw-unit floor is no floor (GUARD-THRESHOLD-LITERAL, ofnz8 F-70)",
|
|
133
|
+
"first_guard_threshold_literal": "First threshold-literal guard, rendered as: guard 'step-id': row 'name' = literal 1 (U64 threshold floor)",
|
|
134
|
+
"guard_threshold_literal_display": "Semicolon-joined list of ALL threshold-literal guards",
|
|
135
|
+
"guard_set_collapse_count": "Guards whose table repeats one String literal across >= 2 non-submission rows — the declared set collapsed to one member (GUARD-SET-COLLAPSE, ofnz8 F-51/F-52)",
|
|
136
|
+
"first_guard_set_collapse": "First set-collapse guard, rendered as: guard 'step-id': literal 'v' repeated across N rows (a, b)",
|
|
137
|
+
"guard_set_collapse_display": "Semicolon-joined list of ALL set-collapse guards",
|
|
138
|
+
"guard_input_trust_count": "Guards whose repository find/keys_where ids operand resolves to a caller-SUBMITTED (b_submission:true) table row — the candidate row set is self-attested (GUARD-INPUT-TRUST, ofnz8 P0-4(b))",
|
|
139
|
+
"first_guard_input_trust": "First input-trust guard, rendered as: guard 'step-id': find/keys ids operand resolves to caller-submitted row 'name' (identifier N)",
|
|
140
|
+
"guard_input_trust_display": "Semicolon-joined list of ALL input-trust guards",
|
|
141
|
+
"guard_abort_unsafe_count": "Guards referencing a verb whose native handler aborts (W_FIELD_NOT_FOUND) when the addressed record is absent — the guard engine evaluates every leaf before the boolean merge, so no structure shields the abort (GUARD-ABORT-SAFE-01, B-30)",
|
|
142
|
+
"first_guard_abort_unsafe": "First abort-unsafe guard, rendered as: guard 'step-id': query 'verb' aborts when the target record is absent",
|
|
143
|
+
"guard_abort_unsafe_display": "Semicolon-joined list of ALL abort-unsafe guards",
|
|
144
|
+
"first_guard_find_polarity": "First guard anchoring a history clock at find:\"first\" on a renewal/charge loop node — period 2+ reads the FIRST visit's timestamp (GUARD-FIND-POLARITY, ofnz8 F-61). Per-guard attribution (ofn-mn-261108 F-02): names the per-period CLAIMING guard when one exists, else the first bare anchor",
|
|
145
|
+
"guard_find_polarity_count": "Total find:\"first\" periodic-node anchors across the plan's guards",
|
|
146
|
+
"guard_find_polarity_per_period": "At least one such anchor's description claims PER-PERIOD semantics the find:\"first\" polarity cannot deliver — the critical face of the family",
|
|
147
|
+
"guard_find_polarity_display": "Semicolon-joined list of ALL periodic-anchor guards, each rendered with its own guard id, target node, and per-period verdict",
|
|
148
|
+
"refund_convergence_missing": "The plan ships a refund-track allocator row but NO machine edge into closed_refunded is gated by order.principal_refunded (chain-query 1579, the RefundStamp latch) — the refund loop has no provable close (R-REFUND-CONVERGENCE, K3 C3). CHAIN-TRUTH CORRECTION (upw-b7k2 R3, 2026-11-09): the O-F22 zombie-order shield (progress.move:600) aborts EVERY order-scoped advance/hold AFTER the principal is fully refunded, and the abort fires BEFORE guard evaluation (progress.move:634/672) — so this convergence edge can NEVER fire: full refund latches the guard's own precondition but the advance aborts first; partial refund leaves the latch false. The latch QUERY itself (1579) is the refund loop's real close proof; the edge is bookkeeping-dead pending the kernel whitelist proposal (see PG-ZOMBIE-01). Do not treat reaching closed_refunded as a live path",
|
|
149
|
+
"withdraw_no_case_bind_count": "WithdrawClaim machine edges whose bound guards read NO order.dispute.open leg (chain-query 1576) — a withdrawal with no case binding: replay farming (file->withdraw cycles need no new on-file dispute) and phantom/foreign cases satisfy nothing but also block nothing (R-WITHDRAW-NO-CASE-BIND, PT-26/ssng6)",
|
|
150
|
+
"first_withdraw_no_case_bind": "First such unbound withdraw edge, rendered as prev->next",
|
|
151
|
+
"withdraw_no_case_bind_display": "Semicolon-joined list of ALL unbound withdraw edges",
|
|
152
|
+
"settlement_triggers_display": "Semicolon-joined per-settlement-rail caller-identity faces: each rail's bound guard identity legs (order.owner==signer / order.agent has signer / order.service binding / permission role), or the kernel edge-rail default when the guard carries no caller face — the 'who can trigger settlement' disclosure (K3 C4)",
|
|
153
|
+
"settlement_buyer_only_count": "Settlement rails whose ONLY caller face is the order-holder leg (order.owner/order.agent) with no service-binding or permission-role face — the buyer triggers the merchant's settlement (role-reversal advisory, SETTLEMENT-TRIGGER-SCOPE)",
|
|
154
|
+
"dispute_freeze_rail_count": "Machine edges OTHER than withdraw edges whose bound guards read order.dispute.open (chain-query 1576) — dispute-freeze money rails gated on the open-dispute state (R-DISPUTE-EXIT-REACHABILITY, ss10 F-SS10-01)",
|
|
155
|
+
"dispute_freeze_rail_display": "Semicolon-joined list of ALL dispute-freeze rail edges, rendered as prev->next",
|
|
156
|
+
"dispute_exit_live_withdraw_count": "Withdraw-class edges whose guards read order.dispute.open (case-bound) but carry NO order.claimed_by disposition precondition — taking the edge leaves the case live forever (dispute vector is push-only, claimed_by has no clearer), freezing every dispute-freeze rail (ss10 F-SS10-01)",
|
|
157
|
+
"dispute_exit_live_withdraw_display": "Semicolon-joined list of ALL live-withdraw edges, rendered as prev->next",
|
|
158
|
+
"dispute_exit_dead_topology": "Flag: freeze rails + live withdraw edges coexist AND the machine exposes NO conclude/compensate-class forward — NOTHING can stamp claimed_by, the frozen rails are unreachable, escrow locks with no recovery path (high)",
|
|
159
|
+
"dispute_exit_indirect_stamp": "Flag: freeze rails + live withdraw edges coexist AND a conclude/compensate-class forward exists — recovery only via a FULL fresh arbitration cycle filed after the withdraw (medium disclosure)"
|
|
104
160
|
},
|
|
105
161
|
"rules": [
|
|
106
162
|
{
|
|
@@ -262,6 +318,14 @@
|
|
|
262
318
|
"description": "Every forward leaving '${entry_strand_node}' — the node orders land on at entry — is gated by a closing time window (Clock <= anchor) with no opening leg and no unguarded alternative. Once the window passes the guard aborts forever: the order can never advance, and the escrow collected at entry is locked with no abandon/refund path. This is the GF2-30 live loss shape (7.65 WOW); shipping it bakes the lockup in permanently.",
|
|
263
319
|
"mitigation": "Add a self-healing exit from '${entry_strand_node}' gated on an OPENING window (logic_as_u256_greater_or_equal[Clock, anchor] — the abandon/refund edge that fires when the claim window elapses) targeting a fund-bearing node, so the escrow always keeps an after-window path; or leave one exit unguarded / gated on an any-time condition.",
|
|
264
320
|
"stakeholders": ["merchant", "customer"]
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"when": { "field": "window_strand_nodes", "op": "truthy" },
|
|
324
|
+
"level": "high",
|
|
325
|
+
"title": "Rest state(s) '${window_strand_nodes}' exit only through closing windows — the escrow strands once they elapse",
|
|
326
|
+
"description": "Every forward leaving '${window_strand_nodes}' is gated by a closing time window (Clock <= anchor) with no opening leg and no unguarded alternative. Those nodes are not entry nodes, but the escrow is still HELD while the order rests there — and a machine has no rail that can fire at an arbitrary node: once the last window closes nothing advances the order and no allocator row covers that state, so the money sits until the protocol changes. This is the live ctrx-mn-261108 C shape (O14/O15/O19, 1.10 WOW): a claim_window whose FileDispute/WithdrawClaim exits both aborted after the window, while the fund rails only covered completed / closed_cancel / return_closed / claim_withdrawn. Filing is deliberately unrestricted in time (arbitration.move order-anchored filing-window gate removed 2026-11-08), so a late filing can pin an otherwise settleable order — the fix must exist in the MACHINE, not in a filing clock.",
|
|
327
|
+
"mitigation": "Give every such rest state at least one exit that stays walkable after its windows close — an OPENING-window fallback (Clock >= anchor), an unguarded advance, or a node-free/any-time guard — and route it to a node covered by a fund rail (or make the cover rail accept this node explicitly). A state where money rests with no after-window exit is a publish-time defect, not an operator duty.",
|
|
328
|
+
"stakeholders": ["merchant", "customer"]
|
|
265
329
|
}
|
|
266
330
|
]
|
|
267
331
|
},
|
|
@@ -440,6 +504,21 @@
|
|
|
440
504
|
}
|
|
441
505
|
]
|
|
442
506
|
},
|
|
507
|
+
{
|
|
508
|
+
"rule_id": "WRITE-ONCE-REMOVABLE",
|
|
509
|
+
"dimension": "field_capability",
|
|
510
|
+
"trigger": "A plan declares a write_once policy (a non-repudiable on-chain attestation) and a later configure step dissolves it: policies op:'set' that omits the policy, op:'remove'/'clear' that touches it, or a same-name op:'add' without write_once:true (W8-5, N-10).",
|
|
511
|
+
"cases": [
|
|
512
|
+
{
|
|
513
|
+
"when": { "field": "first_write_once_removable", "op": "present" },
|
|
514
|
+
"level": "high",
|
|
515
|
+
"title": "Write-once attestation dissolved: ${first_write_once_removable}",
|
|
516
|
+
"description": "Row-level deletion under a write_once policy is chain-refused since P155-14③ (repository data_remove aborts E_POLICY_WRITE_ONCE_CONFLICT under enable_repo_write_once_remove_guard, the v140 rider flag) — but the write_once BIT lives in a mutable PolicyRule. ${first_write_once_removable} replaces, removes, or downgrades the POLICY itself, so whoever holds the policy-management permission (index 102) can rewrite the attestation and, via re-add, delete the very rows it promised to keep. op:'set' REPLACES THE WHOLE policy list, and once the Permission is locked a dropped policy cannot be restored.",
|
|
517
|
+
"mitigation": "Maintain repository policies with op:'add' appends only; never ship a configure step whose op:'set'/'remove'/'clear' — or a same-name op:'add' lacking write_once:true — touches a write_once policy declared earlier in the plan.",
|
|
518
|
+
"stakeholders": ["merchant", "customer"]
|
|
519
|
+
}
|
|
520
|
+
]
|
|
521
|
+
},
|
|
443
522
|
{
|
|
444
523
|
"rule_id": "TASKBIND-01",
|
|
445
524
|
"dimension": "fund_flow",
|
|
@@ -598,6 +677,51 @@
|
|
|
598
677
|
}
|
|
599
678
|
]
|
|
600
679
|
},
|
|
680
|
+
{
|
|
681
|
+
"rule_id": "R-QUERY-TOTALITY",
|
|
682
|
+
"dimension": "composition",
|
|
683
|
+
"trigger": "A guard compares the per-item listing query (order.item.wip_hash) against a STATIC String constant that is NOT a case-exact sale name in the plan's sales catalog (kl F-ORDER-02: the delivery guard burned 'Adult Ticket' while the order bought '2-Day Ticket'). At delivery the native resolves the constant with find_sale_item; a miss returns None -> Err, the error bubbles through passport::verify_guard as a MovePrimitiveRuntimeError, and the order WEDGES on its current node — no completion, no refund, no structured abort code. Guards freeze at creation, so this is the last point the mismatch can be caught; repository-key totality is REPO-GATE-KEY-01's face, this rule owns the query-arg totality face. service.sale.wip_hash resolves against the WIP LISTING namespace (not the sales catalog) and stays out of scope.",
|
|
684
|
+
"cases": [
|
|
685
|
+
{
|
|
686
|
+
"when": { "field": "wip_query_totality_count", "op": "gt", "value": 0 },
|
|
687
|
+
"level": "critical",
|
|
688
|
+
"title": "wip-hash comparison constant '${first_wip_query_totality}' is not a sale name — the order will wedge at delivery",
|
|
689
|
+
"description": "Unprovable comparisons: ${wip_query_totality_display}. The plan's sales catalog: ${wip_query_totality_sku_display}. A wip-hash guard comparison burns its String operand at guard creation; find_sale_item over a non-SKU name returns None and the native's Err surfaces as a primitive error inside verify_guard — the delivery forward cannot advance and the order cannot refund (kl F-ORDER-02, wedged until a kernel upgrade). Only constants that ARE sale names are provably total.",
|
|
690
|
+
"mitigation": "Fix the burned constant to a case-exact sale name from the catalog (${wip_query_totality_sku_display}) BEFORE the guard is created — or re-point the comparison leg at a dynamic operand (the submitted SKU name / the order's own field) if the gate must accept any bought SKU. Guards are immutable once created: never publish first and patch later.",
|
|
691
|
+
"stakeholders": ["merchant", "customer"]
|
|
692
|
+
}
|
|
693
|
+
]
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
"rule_id": "REPO-AGG-SUBMITTED-01",
|
|
697
|
+
"dimension": "composition",
|
|
698
|
+
"trigger": "A guard's sum-where aggregate (query_repository_data_sum_where*) reads its ledger through a SUBMITTED table cell (b_submission:true). The cell is filled by whoever ADVANCES the guarded forward — so the ledger IDENTITY is a per-forward caller choice. An honest keeper submitting the wrong repository (e.g. the review ledger instead of the campaign ledger) reads sum=0 and permanently flips the decision — the release polarity aborts code 7 while the refund polarity passes on the same state; a hostile submission aims the gate at a forged ledger. Guards are IMMUTABLE once created, so nothing can repair a mis-pointed aggregate after publish (W6-03, upynjab P0-1). The catalog's threshold twins are pinned since the W6-03 fix (b_submission:false + a resolved value); this rule closes the same class for INLINE and hand-built guards at the machine-publish face.",
|
|
699
|
+
"cases": [
|
|
700
|
+
{
|
|
701
|
+
"when": { "field": "repo_agg_submitted_count", "op": "gt", "value": 0 },
|
|
702
|
+
"level": "high",
|
|
703
|
+
"title": "Aggregate gate '${first_repo_agg_submitted}' lets the advancing caller swap the ledger",
|
|
704
|
+
"description": "Submitted aggregate slots: ${repo_agg_submitted_display}. A sum-where aggregate is a CAMPAIGN-WIDE CONSTANT decision basis — the ledger it sums must never be chosen per-forward. With a submitted cell, the same on-chain state can read as goal-met (release) or goal-missed (refund) depending on which repository the caller submits — a decision flip that is UNREPAIRABLE after the guard is created (guards freeze at creation; the escrow only settles one way).",
|
|
705
|
+
"mitigation": "Pin the aggregate's object cell at guard creation: b_submission:false with a resolved value — the plan's own ledger ({$ref}/{$late} object, or a '$'-seeded name like ${repository_name}) or an explicit external address if the ledger is genuinely foreign. After fixing, re-verify with analyze_guard_semantics compare_with after creation.",
|
|
706
|
+
"stakeholders": ["merchant", "customer"]
|
|
707
|
+
}
|
|
708
|
+
]
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"rule_id": "INV-ALLOC-OVERLAP-PAYEE",
|
|
712
|
+
"dimension": "composition",
|
|
713
|
+
"trigger": "Two allocator rows whose accepted-node sets INTERSECT pay DIFFERENT recipient sets. Scope discipline: node-set overlap across rails is itself the SANCTIONED shape (C-F01 ruling 2026-11-04 rejected the node-disjoint proposal; recover∈settle terminal sharing is the decision-11 doctrine — recover is an order-terminal liquidation). The money hazard is narrower: when the SAME order state can drive two rails with different payees, whichever forward advances first chooses where the escrow goes, and the losing rail still holds a live claim — a race that materializes only at runtime, i.e. AFTER the guards are immutable (W6-06, §0.26 user ruling ③). ADVISORY, not a blocker, by the catalog-clean rule (K3 discipline 8): the supply-chain composition family EMITS exactly this shape by design (a second settlement rail beside the shop's own; the emission note documents the firing-order discipline — advance the composition gate only after the fulfilment fact is true), so blocking it would refuse a supported feature; the audit DISCLOSES the race and the discipline instead. Rows with an unresolved guard design or an unresolvable payee vector are out of scope here (pending_allocator_guard_count and the S4 third-party-leg rule own those faces).",
|
|
714
|
+
"cases": [
|
|
715
|
+
{
|
|
716
|
+
"when": { "field": "alloc_overlap_payee_count", "op": "gt", "value": 0 },
|
|
717
|
+
"level": "medium",
|
|
718
|
+
"title": "Intersecting allocator rails '${first_alloc_overlap_payee}' — firing order decides the payee",
|
|
719
|
+
"description": "Conflicting pairs: ${alloc_overlap_payee_display}. Two rails fire on the same order state but pay different recipients — settlement order becomes a race: the first advancing forward drains the escrow to ITS payee while the other rail's claim stays live. Unrepairable after publish (guards and allocator configuration are immutable). NOTE: if one rail is a supply-chain composition rail, this is the documented shape — the discipline is FIRING ORDER (advance the fulfilment gate before the shop's own settlement; the emission notes carry it), and this advisory is your pre-publish reminder that the discipline is now load-bearing.",
|
|
720
|
+
"mitigation": "Either converge the payees (identical GuardIdentifier slots — payment_info binds slot N to one address, so slot equality is address equality — or the same Entity addresses), narrow one rail's accepted-node set so the shared state drives exactly one rail, partition the rails by rate (each row declares its share instead of competing for the whole), or — for the sanctioned supply-chain shape — adopt and document the firing-order discipline operationally. After fixing, re-verify with analyze_guard_semantics compare_with after creation.",
|
|
721
|
+
"stakeholders": ["merchant", "customer"]
|
|
722
|
+
}
|
|
723
|
+
]
|
|
724
|
+
},
|
|
601
725
|
{
|
|
602
726
|
"rule_id": "REPO-WRITE-ONCE-01",
|
|
603
727
|
"dimension": "composition",
|
|
@@ -840,6 +964,224 @@
|
|
|
840
964
|
"stakeholders": ["customer", "merchant"]
|
|
841
965
|
}
|
|
842
966
|
]
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
"rule_id": "TWIN-WINDOW-ZERO",
|
|
970
|
+
"dimension": "composition",
|
|
971
|
+
"trigger": "A FRACTIONAL `*_days` knob rides the PRESENTED plan (step params or resolved inputs). This is the publish-face semantic twin of the build face's PLAN-P0-18 blocker: the day knob lands in a guard-table U64 slot as a DAY COUNT, which BCS truncates (0.002 → 0), and a `<=` closing window fed by that slot computes anchor + 0 and welds shut the instant its anchor entry lands — Guards are immutable, so the rail is closed forever (the tbp taobao-presale mainnet run compiled a 0.002-day test window into exactly this shape). The compiler refuses the fractional input at generation; this twin re-fires the same predicate on the plan AS PRESENTED at the publish gate, so a hand-edited or drifted plan cannot carry the hazard past preflightPlan. campaign_duration_days is exempt — the compile converts it to an ABSOLUTE epoch-ms deadline in TS, so a fraction IS representable there (no U64 day slot involved).",
|
|
972
|
+
"cases": [
|
|
973
|
+
{
|
|
974
|
+
"when": { "field": "first_fractional_day_knob", "op": "present" },
|
|
975
|
+
"level": "critical",
|
|
976
|
+
"title": "Fractional day count on the presented plan — the window welds shut on-chain",
|
|
977
|
+
"description": "${first_fractional_day_knob}. The leg multiplies the slot by the 86400000 ms_per_day row ON-CHAIN, so the fraction the knob declares is unrepresentable: the closing window reads anchor + 0 and never reopens. ${fractional_day_knob_display}.",
|
|
978
|
+
"mitigation": "Answer whole days, or the PARALLEL `*_ms` knob (e.g. review_window_ms: 600000 = a 10-minute window) — the compiler then emits the ms-denominated slot pair (duration_ms beside a day-factor of 1). Rebuild the plan from the template instead of hand-editing: a hand-patched fractional day bypassed the generation-time input gate, and this publish-face twin is the gate that caught it.",
|
|
979
|
+
"stakeholders": ["merchant", "customer"]
|
|
980
|
+
}
|
|
981
|
+
]
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"rule_id": "TWIN-WINDOW-ZERO-HOURS",
|
|
985
|
+
"dimension": "composition",
|
|
986
|
+
"trigger": "A FRACTIONAL `*_hours`/`*_minutes` leaf rides the PRESENTED plan's step params. This is the publish-face semantic twin of the build face's pdd F-09 hours blocker (mtw-mainnet 2026-11-04): an hours knob whose binding rows carry NO scale lands RAW in a U64 slot that speaks the param's own unit (lower_hours / upper_hours / free_cancel_hours — the travel fee ladder's cancellation-tier seams), and BCS truncates the fraction to 0, so the band collapses to `tier + 0` and two cancellation tiers melt into one — Guards are immutable, so the ladder is wrong forever. The compiler refuses the fractional answer at generation unless EVERY binding row for that param carries a scale (a duration_ms TS-side conversion, where a fraction IS representable); this twin re-fires the predicate on the plan's step params AS PRESENTED at the publish gate. plan.inputs is not an hours verdict site: a scaled fractional answer legally rides it.",
|
|
987
|
+
"cases": [
|
|
988
|
+
{
|
|
989
|
+
"when": { "field": "first_fractional_hour_knob", "op": "present" },
|
|
990
|
+
"level": "critical",
|
|
991
|
+
"title": "Fractional hours count on the presented plan — the band truncates to zero on-chain",
|
|
992
|
+
"description": "${first_fractional_hour_knob}. A fractional hour/minute is unrepresentable in a U64 unit slot: the band or window the slot bounds collapses to 0 at BCS encode (the mtw-mainnet run fed 0.5 hours to the travel fee ladder and the tier seam compiled to tier + 0). ${fractional_hour_knob_display}.",
|
|
993
|
+
"mitigation": "Answer a whole number, or resolve the guard via guard_resolutions with an inline ms-denominated table (duration_ms) where the fraction is representable. Rebuild the plan from the template instead of hand-editing: this publish-face twin exists to catch plans that bypassed the generation-time input gate.",
|
|
994
|
+
"stakeholders": ["merchant", "customer"]
|
|
995
|
+
}
|
|
996
|
+
]
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
"rule_id": "GUARD-EQUALITY-DRIFT",
|
|
1000
|
+
"dimension": "composition",
|
|
1001
|
+
"trigger": "A guard's description promises the delivered content MATCHES the committed hash/wip while its root carries NO logic_equal leg (ofnz8-mn-261105 F-49: the compiled guard enforced EXISTENCE of a hash-shaped row only, and content_hash=\"fake-hash-does-not-match-committed-wip\" cleared it on 4/4 orders — escrow released). Judged by the SAME shared predicate the template scanner runs (knowledge/guard-quality.ts equalityFaceCheck) over every guard create step — inline guard_resolutions included, since compile materializes them into create steps BEFORE this audit runs. The ≤16-char proximity window and the \"same writer\" phrase strip keep naming contracts and writer-authorization prose from false-firing.",
|
|
1002
|
+
"cases": [
|
|
1003
|
+
{
|
|
1004
|
+
"when": { "field": "first_guard_equality_drift", "op": "present" },
|
|
1005
|
+
"level": "critical",
|
|
1006
|
+
"title": "Guard description promises hash/wip equality with no equality leg: ${first_guard_equality_drift}",
|
|
1007
|
+
"description": "${guard_equality_drift_count} guard(s) claim content-matching while the root enforces existence only. Guards freeze at creation, so the drift is unrepairable after publish: any forged hash-shaped row passes, which is exactly the mainnet failure this rule encodes.",
|
|
1008
|
+
"mitigation": "Mount the equality leg before publish: resolve the guard (guard_resolutions) to tpl_repository_row_equals_order_field (default source order.item.wip_hash) or add an inline logic_equal over the row's hash vs the order's committed wip — or rewrite the description to state the weaker existence check the tree actually enforces. Never keep a matching promise over an existence-only guard.",
|
|
1009
|
+
"stakeholders": ["merchant", "customer"]
|
|
1010
|
+
}
|
|
1011
|
+
]
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
"rule_id": "GUARD-THRESHOLD-LITERAL",
|
|
1015
|
+
"dimension": "fund_flow",
|
|
1016
|
+
"trigger": "A guard table row whose name is a bare threshold identifier (min_/minimum_/threshold_/floor_/at_least_ prefix, no whitespace) carries value_type U64 with the literal value 1 (ofnz8 F-70: 1 MIST qualified for the rebate — any 1-unit order satisfies the \"threshold\", so the payout rate over qualifying volume is unbounded). Prose-annotated rows (query-range documentation) and submission rows are exempt — same predicate as the template scanner (knowledge/guard-quality.ts thresholdLiteralCheck).",
|
|
1017
|
+
"cases": [
|
|
1018
|
+
{
|
|
1019
|
+
"when": { "field": "first_guard_threshold_literal", "op": "present" },
|
|
1020
|
+
"level": "high",
|
|
1021
|
+
"title": "Threshold row ships as the literal 1 raw unit: ${first_guard_threshold_literal}",
|
|
1022
|
+
"description": "${guard_threshold_literal_count} threshold row(s) are bare 1-raw-unit literals. The floor filters nothing (1 smallest unit qualifies), the fixed reward over 1-unit orders makes the payout rate unbounded, and a bare literal is invisible to the operator's config plane — no knob exists to tune it.",
|
|
1023
|
+
"mitigation": "Derive the threshold from a declared fee param (value_from / FEE_PARAM_BINDINGS row) with a sane default, or state the intended floor in raw units as a named param the merchant can tune. Resolve via guard_resolutions with an inline table before publish — guards freeze at creation.",
|
|
1024
|
+
"stakeholders": ["merchant", "customer"]
|
|
1025
|
+
}
|
|
1026
|
+
]
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
"rule_id": "GUARD-SET-COLLAPSE",
|
|
1030
|
+
"dimension": "composition",
|
|
1031
|
+
"trigger": "A guard table repeats ONE String literal across >= 2 distinct non-submission row names (ofnz8 F-51/F-52: the terminal \"set\" was \"expired\" four times and \"reviewed\" twice) — either dead OR legs or placeholder rows that mislead every later editor into assuming a diversity that does not exist on chain. Non-`${…}` non-numeric strings only; same predicate as the template scanner (knowledge/guard-quality.ts setCollapseCheck).",
|
|
1032
|
+
"cases": [
|
|
1033
|
+
{
|
|
1034
|
+
"when": { "field": "first_guard_set_collapse", "op": "present" },
|
|
1035
|
+
"level": "medium",
|
|
1036
|
+
"title": "Declared set collapsed to one literal: ${first_guard_set_collapse}",
|
|
1037
|
+
"description": "${guard_set_collapse_count} guard(s) carry a repeated literal across distinct row names. If the design intended a SET of qualifying values, the extra members are dead OR legs; if it intended one value, the duplicated rows are placeholders — either way the table lies to the next editor, and guards freeze at publish.",
|
|
1038
|
+
"mitigation": "Collapse to the single row that carries the real value, or differentiate the members — each row should either earn its name with a distinct literal or be deleted. Fix via guard_resolutions (inline table) before publish.",
|
|
1039
|
+
"stakeholders": ["merchant", "customer"]
|
|
1040
|
+
}
|
|
1041
|
+
]
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"rule_id": "GUARD-INPUT-TRUST",
|
|
1045
|
+
"dimension": "fund_flow",
|
|
1046
|
+
"trigger": "A guard's repository find_where/keys_where ids operand resolves to a caller-SUBMITTED table row ({identifier:N, b_submission:true}) — the candidate row set the query judges is self-attested (ofnz8 P0-4(b)): an attacker submits only their own row, the scan returns exactly that row, and every membership/equality leg built on it passes. Identifier resolution follows the kernel convention (composition/audit.ts acceptedProgressNodes). Same predicate as the template face (knowledge/guard-quality.ts submissionRowIdTrustCheck).",
|
|
1047
|
+
"cases": [
|
|
1048
|
+
{
|
|
1049
|
+
"when": { "field": "first_guard_input_trust", "op": "present" },
|
|
1050
|
+
"level": "high",
|
|
1051
|
+
"title": "Candidate row set is caller-submitted: ${first_guard_input_trust}",
|
|
1052
|
+
"description": "${guard_input_trust_count} guard(s) read their candidate rows from a submission row. Whoever executes the guard chooses what the scan sees, so the gate's authority collapses to self-attestation — the caller-reported candidate set is the very thing the guard was supposed to verify.",
|
|
1053
|
+
"mitigation": "Anchor the candidate set at a FIXED point: an Order-anchored non-submission row (identifier 0 / id_from the host order) or context(Signer), so the caller cannot choose what the scan sees. If the ids list must be dynamic, pin it with a vec_contains_address order-pin (ddmc2 F-10) so padding the list satisfies nothing.",
|
|
1054
|
+
"stakeholders": ["merchant", "customer"]
|
|
1055
|
+
}
|
|
1056
|
+
]
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"rule_id": "GUARD-ABORT-SAFE-01",
|
|
1060
|
+
"dimension": "fund_flow",
|
|
1061
|
+
"trigger": "A guard queries a verb whose native handler ABORTS (W_FIELD_NOT_FOUND) when the addressed record does not exist, and the guard engine does not short-circuit — all leaves evaluate before the boolean merge (passport.rs TYPE_LOGIC_AND/OR), so no logic_and(presence leg, aborting verb) shape protects the guard. Verified 13 verbs against the native handlers: entityLinker votes 1802-1808, resource name/tags 1852-1855, entity_order role/time 2252/2255 (B-30, UNEXPRESSIBLE §6.3; N-11). Same predicate as the template face (knowledge/guard-quality.ts abortSafeVerbCheck).",
|
|
1062
|
+
"cases": [
|
|
1063
|
+
{
|
|
1064
|
+
"when": { "field": "first_guard_abort_unsafe", "op": "present" },
|
|
1065
|
+
"level": "critical",
|
|
1066
|
+
"title": "Guard queries an abort-on-absent verb: ${first_guard_abort_unsafe}",
|
|
1067
|
+
"description": "${guard_abort_unsafe_count} guard leg(s) read verbs that return W_FIELD_NOT_FOUND instead of a zero/false value when the target record is missing (reputation votes, resource name/tags, entity-order role/time). The engine evaluates every leaf before merging, so the first absent target aborts the entire guard evaluation and every order path the guard gates fails at runtime. Guards freeze at creation — the defect is unrepairable after publish.",
|
|
1068
|
+
"mitigation": "Read the safe sibling verb instead: entityLinker.entity has (1801), resource.object has (1851), entity_order.entity has (2250) / count (2251) / is_owner (2253) / is_agent (2254) all return false/0 on absence. PT-12 (protocol train) will widen the aborting natives to typed zero values — until it lands on-chain, these verbs are unusable inside guards.",
|
|
1069
|
+
"stakeholders": ["merchant", "customer"]
|
|
1070
|
+
}
|
|
1071
|
+
]
|
|
1072
|
+
},
|
|
1073
|
+
{
|
|
1074
|
+
"rule_id": "GUARD-FIND-POLARITY",
|
|
1075
|
+
"dimension": "fund_flow",
|
|
1076
|
+
"trigger": "A guard anchors a history clock at find:\"first\" on a node lying on a renewal/charge loop of the plan's machine graph — the node re-enters per billed period, so period 2+ reads the FIRST visit's timestamp and the measured window is already closed (or already open) at birth (ofnz8 F-61). Loop tiers rebuilt with the shared findLoopCycles + classifyLoopCycle over the machine edges; remedy-loop nodes are exempt (one-shot acceptance deadlines). Severity follows the contract the description states: a per-period claim over the stale anchor is critical; a bare anchor is a low disclosure (most likely the intended once-per-life gate).",
|
|
1077
|
+
"cases": [
|
|
1078
|
+
{
|
|
1079
|
+
"when": { "field": "guard_find_polarity_per_period", "op": "truthy" },
|
|
1080
|
+
"level": "critical",
|
|
1081
|
+
"title": "find:\"first\" anchor on a periodic node while the description claims per-period semantics: ${first_guard_find_polarity}",
|
|
1082
|
+
"description": "${guard_find_polarity_count} periodic anchor(s) in the plan; this one promises per-period behavior the find:\"first\" polarity cannot deliver — from period 2 the window reads the FIRST visit's clock, so every later period's window is already expired (or already open) at birth. Guards freeze at publish; the polarity cannot be repaired on a live shop.",
|
|
1083
|
+
"mitigation": "Anchor the leg with find:\"last\" (the schema's stated polarity for re-entrant anchors), or re-point the where at a node each period enters exactly once — or rewrite the description to state the once-per-life semantics the anchor actually enforces.",
|
|
1084
|
+
"stakeholders": ["merchant", "customer"]
|
|
1085
|
+
},
|
|
1086
|
+
{
|
|
1087
|
+
"when": { "field": "first_guard_find_polarity", "op": "present" },
|
|
1088
|
+
"level": "low",
|
|
1089
|
+
"title": "find:\"first\" anchors a periodic node — confirm the once-per-life intent: ${first_guard_find_polarity}",
|
|
1090
|
+
"description": "The description does NOT claim per-period semantics, so this is most likely the intended once-per-life polarity (e.g. a one-time bounty claimable N days after the FIRST review). Disclosed, not blocked — confirm the intent before publish, because the anchor freezes with the guard.",
|
|
1091
|
+
"mitigation": "No action needed if the once-per-life reading is intended; otherwise anchor with find:\"last\" before publish.",
|
|
1092
|
+
"stakeholders": ["merchant", "customer"]
|
|
1093
|
+
}
|
|
1094
|
+
]
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
"rule_id": "R-REFUND-CONVERGENCE",
|
|
1098
|
+
"dimension": "fund_flow",
|
|
1099
|
+
"trigger": "A plan ships a refund-track allocator row (refund_row_count > 0) but the machine projection carries NO convergence close: no edge INTO a `closed_refunded` node whose bound guard queries order.principal_refunded (chain-query 1579 — the RefundStamp latch, order.move:395-430, set once by the chain when the refund principal is paid back in FULL and never forgeable). The compile kernel injects the terminal + shared `refund_latch_convergence` guard (emitRefundConvergence, K3 C3); hand-built plans must declare the equivalent shape (K3 C3, 2026-11-08).",
|
|
1100
|
+
"cases": [
|
|
1101
|
+
{
|
|
1102
|
+
"when": { "all": [ { "field": "refund_row_count", "op": "gt", "value": 0 }, { "field": "refund_convergence_missing", "op": "truthy" } ] },
|
|
1103
|
+
"level": "critical",
|
|
1104
|
+
"title": "Refund track has no latch-gated close: no closed_refunded convergence edge",
|
|
1105
|
+
"description": "The plan moves money on the refund track (${refund_row_count} refund row(s)) but the machine graph has no edge into closed_refunded gated by order.principal_refunded (1579). Without the latch-gated close, nothing in the topology PROVES the refund loop ended — a partial-refund or disputed order reads structurally identical to a closed one on every downstream face (buyer diligence, market scan, dispute evidence), and the refund state stays a private convention of this one template.",
|
|
1106
|
+
"mitigation": "Compile through the kernel (emitRefundConvergence injects the terminal + the shared refund_latch_convergence guard: order.principal_refunded == true on the 254 task-binding slot, edges riding the merchant permission rail), or declare the equivalent node + 1579-gated edges by hand BEFORE publish — allocator rows and forwards freeze permanently at publish (IMMUT-002).",
|
|
1107
|
+
"stakeholders": ["merchant", "customer"]
|
|
1108
|
+
}
|
|
1109
|
+
]
|
|
1110
|
+
},
|
|
1111
|
+
{
|
|
1112
|
+
"rule_id": "R-LATE-REMEDY",
|
|
1113
|
+
"dimension": "fund_flow",
|
|
1114
|
+
"trigger": "A plan ships a `{forward}_late` machine edge (late_remedy_edge_count > 0 — the K3 D3 after-hours twin of a closing-window edge, mounted by the kernel when fee_params.late_remedy_mode = 'keeper_reopen' or declared by hand) but NO guard bound to the edge carries the 1008 keeper membership leg (permission.entity.perm has, index-bound). The late rail is then ANONYMOUS: whoever can submit a permission can operate outside the declared window with no keeper attribution (K3 D3, 2026-11-08).",
|
|
1115
|
+
"cases": [
|
|
1116
|
+
{
|
|
1117
|
+
"when": { "all": [ { "field": "late_remedy_edge_count", "op": "gt", "value": 0 }, { "field": "late_remedy_gate_missing", "op": "truthy" } ] },
|
|
1118
|
+
"level": "critical",
|
|
1119
|
+
"title": "Late-remedy edge has no keeper leg: anonymous after-hours rail (${first_late_remedy_gate_missing})",
|
|
1120
|
+
"description": "The machine ships `{forward}_late` edge(s) (${late_remedy_gate_missing_display}) whose guards carry no 1008 keeper membership leg. The strict window edge keeps its weld, but its late twin is then driveable by ANY permission submitter, not just the keeper role — an undeclared after-hours bypass of a frozen business deadline. The kernel mounts the twin with tpl_late_remedy_keeper_forward (node pin + dynamic permission + 1008 keeper slot, edge permission_index 1002) and discloses it on the machine step's notes.",
|
|
1121
|
+
"mitigation": "Compile through the kernel (late_remedy_mode = 'keeper_reopen' mounts attributed twins), or rebind the late edge to a guard carrying the 1008 keeper leg (tpl_late_remedy_keeper_forward shape) BEFORE publish — machine topology freezes permanently at publish (IMMUT-002). If no after-hours rail is intended, drop the _late edge entirely and let the strict window stay absolute.",
|
|
1122
|
+
"stakeholders": ["merchant", "customer"]
|
|
1123
|
+
}
|
|
1124
|
+
]
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
"rule_id": "SETTLEMENT-TRIGGER-SCOPE",
|
|
1128
|
+
"dimension": "fund_flow",
|
|
1129
|
+
"trigger": "Disclosure face (K3 C4, 2026-11-08): the plan ships settlement-track allocator rows and the settlement_triggers_display fact names who can fire each rail. The buyer-only shape (the ONLY caller face is order.owner/order.agent — the buyer triggers the merchant's settlement) keeps the legacy role-reversal WARN as an advisory; service-binding and permission-role faces are legal and never warned.",
|
|
1130
|
+
"cases": [
|
|
1131
|
+
{
|
|
1132
|
+
"when": { "field": "settlement_buyer_only_count", "op": "gt", "value": 0 },
|
|
1133
|
+
"level": "medium",
|
|
1134
|
+
"title": "Buyer-triggered settlement (role-reversal disclosure): ${settlement_buyer_only_count} rail(s) fire only on the buyer's identity",
|
|
1135
|
+
"description": "${settlement_triggers_display}. Every settlement rail above carries ONLY the order-holder caller face (order.owner/order.agent == signer) — the BUYER's signature is what releases the merchant's money. This is the disclosed role reversal: legal by design (e.g. buyer-claimed completion), but the buyer can time or withhold the merchant's payout and the merchant cannot settle unilaterally. Rails whose face is a service binding or a permission role are NOT listed here — those are merchant-side by construction.",
|
|
1136
|
+
"mitigation": "If unilateral merchant settlement is intended, widen the rail's caller face: a permission-index role leg (permission.owner/admin == signer, riding the merchant rail 1000/1001) or an order.service binding leg — the C4-legal identity set. Keep the buyer-only face only where buyer-controlled release is the contract.",
|
|
1137
|
+
"stakeholders": ["merchant", "customer"]
|
|
1138
|
+
}
|
|
1139
|
+
]
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"rule_id": "R-WITHDRAW-NO-CASE-BIND",
|
|
1143
|
+
"dimension": "fund_flow",
|
|
1144
|
+
"trigger": "A plan ships a machine edge with the WithdrawClaim forward whose bound guards read NO order.dispute.open leg (chain-query 1576, order.dispute.open — mirrors order::has_open_dispute). The compile kernel mounts the bind leg on every catalog withdraw edge (guard-fill andDisputeBindLeg, PT-26 2026-11-08); this twin judges hand-built plans and inline guard_resolutions overrides, which own their root outright.",
|
|
1145
|
+
"cases": [
|
|
1146
|
+
{
|
|
1147
|
+
"when": { "field": "withdraw_no_case_bind_count", "op": "gt", "value": 0 },
|
|
1148
|
+
"level": "medium",
|
|
1149
|
+
"title": "WithdrawClaim edge with no case binding: ${withdraw_no_case_bind_count} withdraw edge(s) read no open-dispute leg",
|
|
1150
|
+
"description": "${withdraw_no_case_bind_display}. A withdrawal whose guard carries only the identity leg (order-holder set, no dispute-state read) admits with NO case on file: the same buyer can farm file->withdraw cycles for free (each cycle re-anchors keeper clocks and perturbs the public state face), and a case on a DIFFERENT order neither helps nor blocks — the withdraw reads no arbitration object at all. The kernel mounts the case-binding leg (query 1576 must read TRUE on THIS order) automatically on catalog templates; a hand-built plan shipping without it keeps the ssng6 residuals live.",
|
|
1151
|
+
"mitigation": "AND a tpl_order_has_open_dispute leg onto the withdraw edge's guard (the kernel does this for every catalog WithdrawClaim edge; the hand-built equivalent is the bare positive query order.dispute.open on the order's submission slot). Protocol gate (v139): 1576 is flag-gated (enable_order_dispute_state) — on an older binary the leg reads false and the withdraw edge goes dark (degrade polarity is INVERTED vs the settlement freeze leg, which degrades open); check upgrade_check (DEPLOY-K1).",
|
|
1152
|
+
"stakeholders": ["merchant", "customer"]
|
|
1153
|
+
}
|
|
1154
|
+
]
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
"rule_id": "R-DISPUTE-EXIT-REACHABILITY",
|
|
1158
|
+
"dimension": "fund_flow",
|
|
1159
|
+
"trigger": "Cross-EDGE state reachability (ss10 F-SS10-01, 2026-11-09): the plan ships BOTH a dispute-freeze money rail (a guard reading order.dispute.open on a NON-withdraw edge) AND a withdraw edge whose guards read order.dispute.open (case-bound) but carry NO order.claimed_by disposition precondition. Each shape is correct alone; the composition locks escrow: order::dispute() is push-only and claimed_by has no clearer, so a file->withdraw cycle leaves has_open_dispute TRUE forever and every freeze rail is unreachable from the withdrawn state.",
|
|
1160
|
+
"cases": [
|
|
1161
|
+
{
|
|
1162
|
+
"when": { "field": "dispute_exit_dead_topology", "op": "gte", "value": 1 },
|
|
1163
|
+
"level": "high",
|
|
1164
|
+
"title": "Dispute-exit dead topology: ${dispute_exit_live_withdraw_count} withdraw edge(s) strand ${dispute_freeze_rail_count} dispute-frozen rail(s) with NO recovery path",
|
|
1165
|
+
"description": "Freeze rail(s): ${dispute_freeze_rail_display}. Live withdraw edge(s): ${dispute_exit_live_withdraw_display}. Chain truth (order.move): dispute() only pushes (no removal verb), claimed_by is stamped ONLY by compensate()/conclude(), and has_open_dispute() = dispute non-empty && claimed_by none. A buyer who files a dispute and takes the withdraw edge leaves the case live forever; this machine exposes NO conclude/compensate forward, so NOTHING can ever turn has_open_dispute false — the frozen rails (refunds gated on NOT dispute.open) are unreachable and the escrow locks (ss10 mainnet: 0.20 WOW permanently locked exactly here).",
|
|
1166
|
+
"mitigation": "Wire a disposition path: a conclude/compensate-class forward reachable from the withdrawn node (the arb case_conclude rail stamps claimed_by), or add a claimed_by disposition precondition leg to the withdraw edge so withdrawal is only possible AFTER the case was stamped. Root cure is protocol-train PT-26 Plan C (order::withdraw_dispute clearing verb) — register, do not hand-patch.",
|
|
1167
|
+
"stakeholders": ["merchant", "customer"]
|
|
1168
|
+
}
|
|
1169
|
+
]
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"rule_id": "R-DISPUTE-EXIT-INDIRECT-STAMP",
|
|
1173
|
+
"dimension": "fund_flow",
|
|
1174
|
+
"trigger": "Same coexistence as R-DISPUTE-EXIT-REACHABILITY, but the machine DOES expose a conclude/compensate-class forward — recovery exists only through a FULL re-arbitration cycle filed AFTER the withdraw (no dispute removal verb means the withdrawn case keeps has_open_dispute TRUE until some case stamps claimed_by).",
|
|
1175
|
+
"cases": [
|
|
1176
|
+
{
|
|
1177
|
+
"when": { "field": "dispute_exit_indirect_stamp", "op": "gte", "value": 1 },
|
|
1178
|
+
"level": "medium",
|
|
1179
|
+
"title": "Dispute exit is indirect: ${dispute_exit_live_withdraw_count} withdraw edge(s) leave the case live; recovery only via a fresh arbitration cycle",
|
|
1180
|
+
"description": "Freeze rail(s): ${dispute_freeze_rail_display}. Live withdraw edge(s): ${dispute_exit_live_withdraw_display}. After a file->withdraw cycle the withdrawn case stays open forever (push-only dispute vector, no clearing verb); the conclude/compensate forward on this machine can stamp claimed_by only when a NEW dispute is filed and driven to a stamped ruling. Disclose in the service terms: a withdrawn dispute freezes every dispute-gated refund until a fresh case reaches compensate/conclude — buyers perceive 'I withdrew, why is my refund blocked'. Root cure stays protocol-train PT-26 Plan C (order::withdraw_dispute).",
|
|
1181
|
+
"mitigation": "Disclose the two-step recovery in build_note/quote terms, or add the claimed_by disposition precondition leg to the withdraw edge so withdrawal requires a stamped (resolved) case up front.",
|
|
1182
|
+
"stakeholders": ["merchant", "customer"]
|
|
1183
|
+
}
|
|
1184
|
+
]
|
|
843
1185
|
}
|
|
844
1186
|
]
|
|
845
1187
|
}
|