@wowok/agent-mcp 3.4.4 → 3.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-stamp.json +3 -3
- package/dist/chain-semantics/composition-truth.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/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/param-disclosure.js +1 -1
- package/dist/composition/plan-run-store.js +1 -0
- package/dist/composition/reflux.js +1 -1
- package/dist/composition/role-bindings.js +1 -0
- package/dist/composition/shape-expand.js +1 -1
- package/dist/composition/supply-chain-emit.js +1 -1
- package/dist/config/judgment.d.ts +13 -25
- package/dist/config/judgment.js +1 -1
- package/dist/config/match-policy-file.js +1 -1
- package/dist/config/rule-engine.d.ts +4 -10
- package/dist/config/rule-engine.js +1 -1
- package/dist/config/template-params.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/harness/forward-roster-preflight.js +1 -0
- package/dist/keeper/detectors.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-operation-face.js +1 -1
- package/dist/knowledge/arbitration-rail-verifier.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +17 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/allocation.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arb.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arbitration.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/bridge.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/contact.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/demand.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/graph.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/guard.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/machine.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/oracle.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/order.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/payment.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/permission.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/personal.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/plan.json +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/progress.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/proof.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/registrar.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/repository.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/resource.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/reward.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/service.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/treasury.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/util.json.good.sha256 +1 -0
- package/dist/knowledge/builtin-templates.d.ts +1 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +3 -2
- package/dist/knowledge/guard-templates.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/knob-docs.js +1 -1
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -1
- package/dist/knowledge/path-oracle/products/amazon.js +1 -1
- package/dist/knowledge/path-oracle/products/booking-com.js +1 -1
- package/dist/knowledge/path-oracle/products/contra.js +1 -1
- package/dist/knowledge/path-oracle/products/costco.js +1 -1
- package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -1
- package/dist/knowledge/path-oracle/products/etsy.js +1 -1
- package/dist/knowledge/path-oracle/products/gamefound.js +1 -1
- package/dist/knowledge/path-oracle/products/gofundme.js +1 -1
- package/dist/knowledge/path-oracle/products/klook.js +1 -1
- package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -1
- package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -1
- package/dist/knowledge/path-oracle/products/shansong.js +1 -1
- package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork.js +1 -1
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/publish-gate.js +1 -1
- package/dist/knowledge/publish-surface-contract.js +1 -1
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/time-units.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/radar-core.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/migration-planner.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/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +110 -2
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/boundary-coercion.js +1 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +56 -8
- package/dist/schema/call/order.d.ts +37 -10
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/permission.d.ts +210 -30
- package/dist/schema/call/personal.d.ts +56 -8
- package/dist/schema/call/progress.d.ts +28 -4
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +84 -12
- package/dist/schema/common/index.d.ts +14 -2
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +1 -1
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +168 -24
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +655 -22
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +22 -110
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +4 -0
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/benchmark_migration_operation.schema.json +1 -1
- package/dist/schemas/evaluation_operation.schema.json +1 -1
- package/dist/schemas/goal_operation.schema.json +1 -1
- package/dist/schemas/guard_rebind_replacement.schema.json +1 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +1 -1
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
- package/dist/schemas/onchain_operations_contact.schema.json +1 -1
- package/dist/schemas/onchain_operations_demand.schema.json +1 -1
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +1 -1
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_permission.schema.json +1 -1
- package/dist/schemas/onchain_operations_personal.schema.json +1 -1
- package/dist/schemas/onchain_operations_progress.schema.json +1 -1
- package/dist/schemas/onchain_operations_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_repository.schema.json +1 -1
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +1 -1
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
- package/dist/schemas/persona_operation.schema.json +1 -1
- package/dist/schemas/time_convert.schema.json +1 -0
- package/dist/schemas/wip_file.schema.json +1 -1
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/fund-rail-recipe.js +1 -1
- package/dist/tools/handlers/guard-rebind-replacement.js +1 -0
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/mark-namespace.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/settle-sweep.js +1 -1
- package/dist/tools/handlers/time-convert.js +1 -0
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/wip-verify-ledger.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +6 -5
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
"first_pinned_away_exit_node": "First non-terminal machine node whose EVERY outgoing edge is guard-pinned to OTHER nodes — exhaust every exit guard and no edge can fire while the order rests here, so a never-ruling arb case strands the escrow at a mid-flow node (W5-02, ddmc4 B-29: dismissed fails closed on a None indemnity and withdraw/reset leave both ruling roots silent; NODE-MATCH-01 reports each dead edge, this is the node-level rollup; a node with NO edge at all is a terminal — its coverage stays FUND-EXIT-01/02, entry stranding stays ENTRY-ABANDON-01) (FUND-EXIT-COMPLETENESS-01)",
|
|
45
45
|
"direction_blind_pay_edge_count": "Fund-track pay rows (refund / settle / recover) whose guard carries NO beneficiary-anchoring leg: no progress node pin, no machine-edge binding, no dispute freeze leg (query 1576), and no order identity leg (order.owner / order.agent has / order.service)",
|
|
46
46
|
"first_direction_blind_pay_edge": "First such direction-blind pay row — the payee is fixed by the row shape alone, indifferent to order state and identity, so the residual principal sweeps merchant-ward even when the buyer WON the award (ktt4 RT-01) and an outsider can drive the rail (W5-01 b: h1w9 F-01/F-04/F-09, ddmc4 B-26/B-27, pdd F-01/F-05, tbpr7 F-V3-01/16, ks7 F-21) (FUND-DIRECTION-BLIND-01)",
|
|
47
|
+
"state_pinned_identity_blind_pay_edge_count": "Fund-track pay rows whose guard anchors ORDER STATE only (progress node pin / machine-edge binding / dispute freeze) with NO order identity leg (order.owner / order.agent has / order.service) — driver-blind within the pinned state: the machine dispatch authenticates the resting node, never the caller, so any address may fire the rail while the order rests there (ctr9 F-T17 / beatstars T11) (RAIL-DRIVER-BLIND-01, medium advisory; W5-01 b ruling intact)",
|
|
48
|
+
"first_state_pinned_identity_blind_pay_edge": "First such state-pinned-only rail, rendered as: <track> row on guard '<key>' (<step>) — state-pinned only (<mechanism>); no order identity leg — any address may drive the rail while the order rests in the pinned state",
|
|
49
|
+
"arb_gated_money_row_count": "Money rows whose guard reads arbitration state (order.claimed_by / arb queries) — their ratio split is AWARD-INDEPENDENT (decision 11: the two tracks are decoupled on chain), so the row's guard legs and description are the only statement of where the principal goes when the buyer WINS the award (ddmc3 F-D3-05) (ARB-PAIRING-DISCLOSURE-01, info — decision 11 intact)",
|
|
50
|
+
"first_arb_gated_money_row": "First such arbitration-gated money row — carry this line into the quote/mandatory disclosure face verbatim: on a buyer-won award the principal's destination follows this row's guard legs and description; the arbitration ruling does not change the split ratios",
|
|
47
51
|
"first_refund_guard_missing_claimed_by": "First refund-track guard step id whose queries never read order.claimed_by (DUAL-RAIL-01, A-3)",
|
|
48
52
|
"first_path_dependent_anchor": "First guard step id using a path-dependent time query (TIME-ANCHOR-01, E-10)",
|
|
49
53
|
"path_sensitive": "The anchored node is reachable by more than one path, so the anchor can shift",
|
|
@@ -89,6 +93,8 @@
|
|
|
89
93
|
"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)",
|
|
90
94
|
"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)",
|
|
91
95
|
"entry_strand_node": "First stranded entry node name (ENTRY-ABANDON-01 judgment gate)",
|
|
96
|
+
"entry_payer_strand_nodes": "Comma-joined entry landing nodes whose EVERY exit forward rides the order-holder rail (namedOperator \"\") with no permission/keeper rail — the kernel defaults entry edges to the buyer rail, so a buyer who pays and never signs pins Progress there forever and the entry escrow locks with no clock even involved (ENTRY-ABANDON-01 case ③, upw-mn-261110 P0-1)",
|
|
97
|
+
"entry_payer_strand_count": "How many entry landing nodes are buyer-signature-only (ENTRY-ABANDON-01 case ③ judgment gate)",
|
|
92
98
|
"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
99
|
"window_strand_count": "How many non-entry rest nodes are window-stranded (ENTRY-ABANDON-01 case ② judgment gate)",
|
|
94
100
|
"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)",
|
|
@@ -145,18 +151,21 @@
|
|
|
145
151
|
"guard_find_polarity_count": "Total find:\"first\" periodic-node anchors across the plan's guards",
|
|
146
152
|
"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
153
|
"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",
|
|
154
|
+
"reward_anchor_conflict_count": "Consumer guards (Reward claim guards + repository policy write guards) mounted as the edge guard of a forward LEAVING a node the guard anchors (REWARD-ANCHOR-CONFLICT, mtw-mn-261109 MN-29 / amz-mn-261109 F-16 sibling)",
|
|
155
|
+
"first_reward_anchor_conflict": "First anchor-consuming mount, rendered as: guard 'id' anchors progress.current == 'node' yet also drives the forward prev -> next — the forward consumes the guard's own anchor",
|
|
156
|
+
"reward_anchor_conflict_display": "Semicolon-joined list of ALL anchor-consuming mounts",
|
|
157
|
+
"unguarded_rail_count": "Machine edges carrying NO guard mount (MACHINE-PUBLISH RAIL FACE, mtw-mn-261109 MN-13). The kernel still gates them behind the operator permission rail (default merchant 1000) — disclosed, not open",
|
|
158
|
+
"first_unguarded_rail": "First unguarded edge, rendered as prev -> next (forward names)",
|
|
159
|
+
"unguarded_rail_display": "Semicolon-joined list of ALL unguarded edges",
|
|
160
|
+
"nodeless_reused_guard_count": "One guard mounted on ≥2 machine edges with NO progress.node accepted-leg (GUARD-BINDING-SCOPE, amz-mn-261109 F-13/F-16 sibling) — it fires in every node context its other legs allow",
|
|
161
|
+
"first_nodeless_reused_guard": "First node-less reused mount, rendered with the guard id and its edge list",
|
|
162
|
+
"nodeless_reused_guard_display": "Semicolon-joined list of ALL node-less reused mounts",
|
|
163
|
+
"plan_hand_built": "Present ONLY when the plan carries no templateId — the hand-built provenance marker that scopes MACHINE-PUBLISH-RAIL-FACE (template plans carry their reviewed rail design)",
|
|
148
164
|
"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
|
-
"
|
|
150
|
-
"
|
|
151
|
-
"withdraw_no_case_bind_display": "Semicolon-joined list of ALL unbound withdraw edges",
|
|
165
|
+
"dispute_withdraw_edge_count": "Machine edges whose forward name matches /withdraw/i AND /claim|dispute/i on the SAME name (the WithdrawClaim/WithdrawClaimReturn withdrawal-of-a-filed-claim family). D2 no-withdraw doctrine (2026-11-10): a filed arbitration claim cannot be withdrawn anywhere on WOWOK — DISPUTE-WITHDRAW-BANNED (critical)",
|
|
166
|
+
"dispute_withdraw_edges": "Semicolon-joined list of ALL dispute-withdraw edges, rendered as prev->next",
|
|
152
167
|
"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)"
|
|
168
|
+
"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)"
|
|
160
169
|
},
|
|
161
170
|
"rules": [
|
|
162
171
|
{
|
|
@@ -264,7 +273,7 @@
|
|
|
264
273
|
"level": "critical",
|
|
265
274
|
"title": "Every exit of '${first_pinned_away_exit_node}' is guard-pinned to other nodes — the order strands here",
|
|
266
275
|
"description": "While the order rests at '${first_pinned_away_exit_node}', none of its outgoing edges can fire: every edge guard pins progress.current to a DIFFERENT node (NODE-MATCH-01 already reports each such edge; this is the node-level rollup — exhaust every exit guard, find no live exit). The order and its escrow are unreachable-by-construction from here on (W5-02, ddmc4 B-29 D6: the never-ruling arb case — tpl_forward_arb_ruling_won needs a positive award and dismissed fails closed on a None indemnity, so withdraw/reset leave BOTH ruling roots silent and an arb waypoint gated only by rulings is this same deadlock expressed through guard pins; ETSY-T1 catalog deadEndLock is the catalog-level twin). Exit coverage is evaluated ONLY on fund-exit grounds (R2-01 lesson): node-level rollup, no whole-graph topology walk. A node with NO outgoing edge at all is a terminal — its coverage is FUND-EXIT-01/02's face, not this gate.",
|
|
267
|
-
"mitigation": "Re-pin the guards so at least one edge accepts the node the order actually rests on, or add an unpinned escape edge. For an arb waypoint the
|
|
276
|
+
"mitigation": "Re-pin the guards so at least one edge accepts the node the order actually rests on, or add an unpinned escape edge. For an arb waypoint, the D2 no-withdraw doctrine (2026-11-10) BANS the former buyer void escape ({ prev: <waypoint>, forward: 'WithdrawClaim', operator: 'order_payer' } — a filed claim cannot be withdrawn); the canonical shapes are a conclude/compensate-class ruling edge (stamps arb.claimed_by) and a ForceSettleExpired clock edge (buyer-directed); never gate the only live exit on a ruling that can fail closed. A live exit means: an edge whose guards are empty, or whose guard's acceptedNodes includes this node.",
|
|
268
277
|
"stakeholders": ["merchant", "customer"]
|
|
269
278
|
}
|
|
270
279
|
]
|
|
@@ -283,6 +292,34 @@
|
|
|
283
292
|
}
|
|
284
293
|
]
|
|
285
294
|
},
|
|
295
|
+
{
|
|
296
|
+
"rule_id": "RAIL-DRIVER-BLIND-01",
|
|
297
|
+
"dimension": "fund_flow",
|
|
298
|
+
"cases": [
|
|
299
|
+
{
|
|
300
|
+
"when": { "all": [ { "field": "first_state_pinned_identity_blind_pay_edge", "op": "present" } ] },
|
|
301
|
+
"level": "medium",
|
|
302
|
+
"title": "Money rail '${first_state_pinned_identity_blind_pay_edge}' — state-pinned but driver-blind: any address can fire it in the pinned state",
|
|
303
|
+
"description": "A refund/settle/recover rail's guard anchors the ORDER STATE (node pin / edge mount / dispute freeze) but carries no order identity leg (order.owner / order.agent has / order.service). The machine dispatch authenticates the resting node, never the CALLER — so while the order rests in the pinned state, any address may drive the rail and its pay split executes (ctr9-mn-261110 F-T17 / beatstars T11: a stranger fired the recover gate, the rail swept through the recover split, and the merchant contract fee left with it). FUND-DIRECTION-BLIND-01 stays the critical gate for fully-unanchored rails (W5-01 b ruling); this advisory exposes the residual window state pins alone leave open. Medium tier per CHARTER §3.4 — new rules enter the non-blocking tier first; catalog surgery precedes any high/critical upgrade.",
|
|
304
|
+
"mitigation": "Graft one identity leg onto the rail's guard: order.service (1563 == this service) as the minimum tenant check, or order.owner (1562) / order.agent has (1567) when the driver must be a specific party — the canonical guard_refund leg-2 shape, no node literals. Keep the state pin.",
|
|
305
|
+
"stakeholders": ["merchant", "customer"]
|
|
306
|
+
}
|
|
307
|
+
]
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"rule_id": "ARB-PAIRING-DISCLOSURE-01",
|
|
311
|
+
"dimension": "fund_flow",
|
|
312
|
+
"cases": [
|
|
313
|
+
{
|
|
314
|
+
"when": { "all": [ { "field": "first_arb_gated_money_row", "op": "present" } ] },
|
|
315
|
+
"level": "info",
|
|
316
|
+
"title": "Arbitration-gated money row '${first_arb_gated_money_row}' — carry the buyer-won principal destination into the disclosure face",
|
|
317
|
+
"description": "Decision 11 (permanent): the escrow/refund track and the arbitration are decoupled on chain — a ruling never re-splits the pool's ratios. Any money row whose guard reads arbitration state (order.claimed_by / arb queries) is therefore award-INDEPENDENT: when the buyer WINS, the principal goes wherever the row's guard legs route it, not to the award winner. K3 TRIAGE-261110 ruling 1 (ddmc3 F-D3-05): \"protocol allows it\" is not \"report it as a defect\", but the MCP disclosure face MUST state where the principal goes on a buyer-won award — the row's guard legs and description are the only such statement. Info level, non-blocking, catalog-wide.",
|
|
318
|
+
"mitigation": "Carry the disclosure line verbatim into service_quote / mandatory_disclosures: on a buyer-won award the principal's destination follows this row's guard legs and description; the arbitration ruling does not change the split ratios. Template authors who intend award-following payouts must implement them as explicit paired rows (one gated on award-paid, one on award-unpaid), each with its own description.",
|
|
319
|
+
"stakeholders": ["merchant", "customer"]
|
|
320
|
+
}
|
|
321
|
+
]
|
|
322
|
+
},
|
|
286
323
|
{
|
|
287
324
|
"rule_id": "FUND-ZERO-01",
|
|
288
325
|
"dimension": "fund_flow",
|
|
@@ -326,6 +363,14 @@
|
|
|
326
363
|
"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
364
|
"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
365
|
"stakeholders": ["merchant", "customer"]
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"when": { "field": "entry_payer_strand_nodes", "op": "truthy" },
|
|
369
|
+
"level": "critical",
|
|
370
|
+
"title": "Entry node(s) '${entry_payer_strand_nodes}' exit ONLY through buyer-signature forwards — an absent buyer locks the escrow at genesis",
|
|
371
|
+
"description": "Every forward leaving '${entry_payer_strand_nodes}' — where orders land at entry — rides the order-holder rail (namedOperator \"\"), so only the BUYER's signature can advance the order past it. A buyer who pays and never acts — the routine abandonment case — pins Progress at this node forever: no merchant or keeper forward exists to fire, and unlike a closing-window strand no clock is even involved (the lockup is total from the first block). The escrow taken at buy can never refund and the work can never start; Machine topology freezes at publish (IMMUT-001), so nothing can be added afterwards. This is the live upw-mn-261110 P0-1 shape: catalog-tiers' genesis state had only the buyer's requirement-submission advance, so every never-started order locked its escrow until the template shipped the keeper EntryAbandonTimeout entry pair.",
|
|
372
|
+
"mitigation": "Give the node at least one NON-buyer exit: a keeper/merchant OPENING-window timeout (Clock >= anchor on a permissionIndex rail) into a refund-covered terminal, or an unguarded merchant advance. Reuse the deadline the template already declares where possible — one unpinned, order.time-anchored Guard object may legally gate several mounts (E_DUPLICATE_NODE_PREV is per target node, so a second entry pair prev:\"\" is chain-legal).",
|
|
373
|
+
"stakeholders": ["merchant", "customer"]
|
|
329
374
|
}
|
|
330
375
|
]
|
|
331
376
|
},
|
|
@@ -1093,6 +1138,51 @@
|
|
|
1093
1138
|
}
|
|
1094
1139
|
]
|
|
1095
1140
|
},
|
|
1141
|
+
{
|
|
1142
|
+
"rule_id": "REWARD-ANCHOR-CONFLICT",
|
|
1143
|
+
"dimension": "incentive",
|
|
1144
|
+
"trigger": "A CONSUMER guard — a Reward claim guard or a repository policy write guard (the refs of the plan's reward/repository create steps) — is ALSO mounted as the edge guard of a machine forward LEAVING a node the guard anchors (acceptedProgressNodes ∩ edge.prev). Taking that forward flips progress.current and consumes the guard's own anchor: every later claim/write through the guard aborts with code 7 forever (mtw-mn-261109 MN-29; amz-mn-261109 F-16 sibling — the rating write shares the review forward's guard, so past the review window neither the review, nor the rating, nor the bounty can ever land). Claims made BEFORE the forward in the SAME tx remain legal, so this discloses at warning severity — but the gate must say it: guards freeze at publish and the conflict was discovered at claim time on mainnet.",
|
|
1145
|
+
"cases": [
|
|
1146
|
+
{
|
|
1147
|
+
"when": { "field": "first_reward_anchor_conflict", "op": "present" },
|
|
1148
|
+
"level": "medium",
|
|
1149
|
+
"title": "Consumer guard consumes its own anchor via the forward it drives: ${first_reward_anchor_conflict}",
|
|
1150
|
+
"description": "${reward_anchor_conflict_count} mount(s) couple a claim/write guard with the business forward it anchors. Once the forward fires, progress.current leaves the anchored node and every later claim or policy write through this guard aborts permanently (guards freeze at publish; the anchor cannot be re-pointed on a live shop). Legitimate ONLY when the claim/write is intended to precede the forward within the same transaction.",
|
|
1151
|
+
"mitigation": "Split the guard: keep the forward's edge guard, and give the claim/write its own guard whose accepted-node set includes every post-forward state the claim must survive (or drop the node leg and gate on the policy/reward record). If claim-then-forward-in-one-tx is the intent, state it in the guard description and train the operator flow accordingly.",
|
|
1152
|
+
"stakeholders": ["merchant", "customer"]
|
|
1153
|
+
}
|
|
1154
|
+
]
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
"rule_id": "MACHINE-PUBLISH-RAIL-FACE",
|
|
1158
|
+
"dimension": "composition",
|
|
1159
|
+
"trigger": "A machine edge carries NO guard mount on a HAND-BUILT plan (templateId absent — mtw-mn-261109 MN-13). The kernel still gates the edge behind the machine's operator permission rail (default merchant index 1000), so it is not world-open, but that face is invisible: every rail holder can drive cancel/refund-class edges and no finding ever said so. Template plans carry their reviewed rail design, so the finding is scoped to hand-built plans; the fact stays emitted for every plan so the panorama/quote layer can show it. This is the machine-publish counterpart of settlement_triggers (service publish) — together they close the 'who can drive this state exit' disclosure at the gate instead of at the abort.",
|
|
1160
|
+
"cases": [
|
|
1161
|
+
{
|
|
1162
|
+
"when": { "all": [ { "field": "first_unguarded_rail", "op": "present" }, { "field": "plan_hand_built", "op": "present" } ] },
|
|
1163
|
+
"level": "info",
|
|
1164
|
+
"title": "Hand-built machine edge with no guard — kernel operator rail is the only gate: ${first_unguarded_rail}",
|
|
1165
|
+
"description": "${unguarded_rail_count} edge(s) carry no guard mount. Anyone holding the machine's operator permission rail (default: merchant index 1000) can fire these forwards — including cancel/refund-class exits that move state on a money-adjacent rail. Funds still move only through allocator guards, but the STATE exit is rail-gated, not guard-gated.",
|
|
1166
|
+
"mitigation": "Mount an explicit guard on each listed edge (order.owner leg for buyer-initiated exits, or a permission-scoped guard for staff-initiated ones), or accept the rail face and record it in the shop's operating notes.",
|
|
1167
|
+
"stakeholders": ["merchant", "customer"]
|
|
1168
|
+
}
|
|
1169
|
+
]
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
"rule_id": "GUARD-BINDING-SCOPE",
|
|
1173
|
+
"dimension": "composition",
|
|
1174
|
+
"trigger": "One guard is mounted on ≥2 machine edges while carrying NO progress.node accepted-leg (amz-mn-261109 F-13/F-16 sibling — the reused/custom-guard hazard the user asked the gate to catch at BIND time). A node-less guard fires in every node context its other legs allow: when the same guard object is reused across edges, one context's legs leak into the other (evidence accepted at the wrong node, windows opened at the wrong state). Single-mount node-less guards are a legitimate design (pure time/policy guards) and stay silent.",
|
|
1175
|
+
"cases": [
|
|
1176
|
+
{
|
|
1177
|
+
"when": { "field": "first_nodeless_reused_guard", "op": "present" },
|
|
1178
|
+
"level": "low",
|
|
1179
|
+
"title": "Reused guard has no node scoping — one context leaks into the other: ${first_nodeless_reused_guard}",
|
|
1180
|
+
"description": "${nodeless_reused_guard_count} reused mount(s) lack a progress.node leg. Guards freeze at publish; a guard meant for one node silently governs every node it is mounted on. This is the binding-time risk check for custom and reused guards: the gate now says what the runtime would have discovered by abort.",
|
|
1181
|
+
"mitigation": "Give each mount its own guard copy with an explicit progress.current leg, or add the node leg to the shared guard so every context is discriminated.",
|
|
1182
|
+
"stakeholders": ["merchant", "customer"]
|
|
1183
|
+
}
|
|
1184
|
+
]
|
|
1185
|
+
},
|
|
1096
1186
|
{
|
|
1097
1187
|
"rule_id": "R-REFUND-CONVERGENCE",
|
|
1098
1188
|
"dimension": "fund_flow",
|
|
@@ -1108,6 +1198,21 @@
|
|
|
1108
1198
|
}
|
|
1109
1199
|
]
|
|
1110
1200
|
},
|
|
1201
|
+
{
|
|
1202
|
+
"rule_id": "R-CONVERGENCE-DRIVE-RAIL",
|
|
1203
|
+
"dimension": "fund_flow",
|
|
1204
|
+
"trigger": "Disclosure face (of-e2e-261109 F-16/F-17/B-08 misjudgment family): the machine carries a refund-latch convergence edge — a forward whose bound guard queries order.principal_refunded (chain-query 1579). Chain truth (progress.move:632-637 vs 686-688): the ORDER-SCOPED advance runs assert_zombie_order and aborts (code 15) once the escrow principal is fully refunded, while the GENERIC scope (`operate.scope='generic'` → next_with_passport, order=false threading) skips the shield by design and is the SANCTIONED rail for exactly this edge class (UCAT-261109 F-02, K3 CHAIN-TRUTH.md option b). The convergence rail itself is correct design — this rule exists so the drive rail is taught at publish instead of being (mis)discovered by an abort and misread as a kernel deadlock.",
|
|
1205
|
+
"cases": [
|
|
1206
|
+
{
|
|
1207
|
+
"when": { "field": "first_convergence_rail", "op": "present" },
|
|
1208
|
+
"level": "info",
|
|
1209
|
+
"title": "Refund-latch convergence edge — drive it with operate.scope='generic': ${first_convergence_rail}",
|
|
1210
|
+
"description": "${convergence_rail_count} convergence edge(s): ${convergence_rail_display}. These edges' guards read order.principal_refunded, so they only become satisfiable AFTER the escrow principal is fully refunded — and at that point the order-scoped advance refuses by chain design (zombie-order shield, abort 15: no fulfillment on a fully refunded order). This is NOT a deadlock: the generic scope rail drives the same forward without order threading (guard, task binding and permission still verify; no zombie check). Note the latch fires only at the FULL order amount — partial refunds never latch it, so a partially refunded order converges through the dispute/ruling rails instead.",
|
|
1211
|
+
"mitigation": "Operate the listed forwards with operate.scope='generic' (the SDK progress operate accepts the scope flag). Never re-drive generic scope on FULFILLMENT edges — the shield exists to stop delivering work on a refunded order; generic scope is for convergence bookkeeping rails only. Partial refunds do not latch the 1579 stamp: route those through the dispute/arbitration close.",
|
|
1212
|
+
"stakeholders": ["merchant", "customer"]
|
|
1213
|
+
}
|
|
1214
|
+
]
|
|
1215
|
+
},
|
|
1111
1216
|
{
|
|
1112
1217
|
"rule_id": "R-LATE-REMEDY",
|
|
1113
1218
|
"dimension": "fund_flow",
|
|
@@ -1139,46 +1244,61 @@
|
|
|
1139
1244
|
]
|
|
1140
1245
|
},
|
|
1141
1246
|
{
|
|
1142
|
-
"rule_id": "
|
|
1143
|
-
"dimension": "
|
|
1144
|
-
"trigger": "
|
|
1247
|
+
"rule_id": "DEADLINE-ENTRY-GATE",
|
|
1248
|
+
"dimension": "time_semantics",
|
|
1249
|
+
"trigger": "gf-e2e-7q3mzt F-R3-06 / ksk-mn-261110 ISSUE-012 (verified 2026-11-10): order::buy performs NO deadline check — every campaign close is a guard leg. A plan that declares a deadline input (campaign_deadline_ms family) while the machine ENTRY edge (prev=\"\") carries no guard lets pledges enter AFTER the close, and the deadline legs on the exit rails then strand the late entry (withdraw denied, refund rails node-mismatched).",
|
|
1145
1250
|
"cases": [
|
|
1146
1251
|
{
|
|
1147
|
-
"when": { "field": "
|
|
1148
|
-
"level": "
|
|
1149
|
-
"title": "
|
|
1150
|
-
"description": "${
|
|
1151
|
-
"mitigation": "
|
|
1252
|
+
"when": { "field": "deadline_entry_unguarded", "op": "truthy" },
|
|
1253
|
+
"level": "high",
|
|
1254
|
+
"title": "Deadline declared but entry edge unguarded: late pledges can enter after the close (entry → ${first_entry_edge_node})",
|
|
1255
|
+
"description": "The plan declares '${deadline_input_key}' yet the machine entry edge into '${first_entry_edge_node}' carries no guard. The chain's buy verb is Clock-blind — only guard legs close a campaign. Pledges entering after the deadline hit the deadline legs on the withdraw/refund rails and strand: the late entry has no exit (gf o8-late: bought post-deadline → withdraw denied → funds stuck; ksk: deadline passed 18 minutes before Enter was still accepted).",
|
|
1256
|
+
"mitigation": "Bind a time-window guard on the entry edge before publish: template_guard 'tpl_time_window_upper_absolute' with value_key '${deadline_input_key}' (Clock <= deadline), the same absolute instant the exit rails already read — machine topology freezes permanently at publish (IMMUT-002). If the business intends an open-ended intake, drop the deadline input instead of leaving the pair divergent.",
|
|
1152
1257
|
"stakeholders": ["merchant", "customer"]
|
|
1153
1258
|
}
|
|
1154
1259
|
]
|
|
1155
1260
|
},
|
|
1156
1261
|
{
|
|
1157
|
-
"rule_id": "
|
|
1158
|
-
"dimension": "
|
|
1159
|
-
"trigger": "
|
|
1262
|
+
"rule_id": "ENTRY-DEADLINE-SYNC",
|
|
1263
|
+
"dimension": "time_semantics",
|
|
1264
|
+
"trigger": "VFY-5 (ktt T2, verified 2026-11-11): order::buy is Clock-blind and never reads the machine graph, so an ENTRY edge gated by an ABSOLUTE closing window (Clock <= identifier resolving to an epoch instant; per-order anchors — order.time / progress.current_time / progress.session.forward.time — are exempt because no order exists at buy time) protects escrow only when the Service buy_guard enforces the SAME instant at buy time. Without the sync leg a buyer buys after the close, the entry deadline then rejects every forward, and the escrow strands at the entry node (keeper refund rail only).",
|
|
1160
1265
|
"cases": [
|
|
1161
1266
|
{
|
|
1162
|
-
"when": { "field": "
|
|
1267
|
+
"when": { "field": "entry_deadline_buy_desync", "op": "truthy" },
|
|
1268
|
+
"level": "critical",
|
|
1269
|
+
"title": "Entry deadline without a synced buy gate: purchases stay open past the close (entry → ${entry_deadline_node})",
|
|
1270
|
+
"description": "The machine entry edge into '${entry_deadline_node}' (guard ${entry_deadline_guard}) closes on the absolute instant ${entry_deadline_value}, but the buy face does not read it (${buy_guard_deadline_state}). A purchase after the close succeeds, then every forward off the entry node is rejected by the deadline leg — the escrow can only leave through the keeper refund rail (ktt T2: a coupon order bought post-deadline locked its escrow at the entry node).",
|
|
1271
|
+
"mitigation": "Sync the pair BEFORE publish: mount the same closing window (Clock <= ${entry_deadline_value}) on the Service buy_guard — template_guard 'tpl_time_window_upper_absolute_ms' reading the shared deadline value/key — so the buy is refused once the entry edge is dead. If the intake is meant to stay open, drop the entry deadline instead of leaving the pair divergent. Machine topology freezes at publish (IMMUT-002) and the buy_guard slot freezes with the service.",
|
|
1272
|
+
"stakeholders": ["merchant", "customer"]
|
|
1273
|
+
}
|
|
1274
|
+
]
|
|
1275
|
+
},
|
|
1276
|
+
{
|
|
1277
|
+
"rule_id": "TIME-WINDOW-CLOSED-AT-BIRTH",
|
|
1278
|
+
"dimension": "time_semantics",
|
|
1279
|
+
"trigger": "K3 round-2 (2026-11-10), found while curing the deadline-entry gate: a closing window (kernel form logic_as_u256_lesser_or_equal[Clock, identifier]) whose identifier resolves to 0 evaluates to `Clock <= 0` — shut since genesis. The plan SHAPE is healthy (the guard is mounted on the right edge with the right root), so shape-level gates pass and the defect only shows at runtime as 'this rail can never fire' / 'the service cannot be ordered at all'. Typical cause: a deadline input that was never derived (campaign/build clock absent) leaving the 0 sentinel in the identifier table.",
|
|
1280
|
+
"cases": [
|
|
1281
|
+
{
|
|
1282
|
+
"when": { "field": "time_window_closed_at_birth", "op": "truthy" },
|
|
1163
1283
|
"level": "high",
|
|
1164
|
-
"title": "
|
|
1165
|
-
"description": "
|
|
1166
|
-
"mitigation": "
|
|
1284
|
+
"title": "Closing window anchored at 0: '${closed_window_node}' can never fire (guard ${closed_window_guard})",
|
|
1285
|
+
"description": "The guard '${closed_window_guard}' on the edge into '${closed_window_node}' compares Clock against an identifier whose value is 0, so the window is closed from genesis. Every forward behind it is permanently unreachable — for an entry edge this means the service cannot be ordered at all; on an exit rail it means the money can never leave through that path. Shape-level gates do not catch this: the guard is mounted correctly, only its VALUE is unusable.",
|
|
1286
|
+
"mitigation": "Make the window anchor derivable before publish: supply the deadline input (campaign_deadline_ms family) or the build clock/duration the template derives it from, then re-generate. If the business genuinely wants an open-ended window, remove the time-window guard instead of shipping one anchored at 0 — a mounted-but-dead guard silently blocks the whole rail.",
|
|
1167
1287
|
"stakeholders": ["merchant", "customer"]
|
|
1168
1288
|
}
|
|
1169
1289
|
]
|
|
1170
1290
|
},
|
|
1171
1291
|
{
|
|
1172
|
-
"rule_id": "
|
|
1292
|
+
"rule_id": "DISPUTE-WITHDRAW-BANNED",
|
|
1173
1293
|
"dimension": "fund_flow",
|
|
1174
|
-
"trigger": "
|
|
1294
|
+
"trigger": "D2 no-withdraw doctrine (user ruling 2026-11-10): WOWOK does not support withdrawing a filed arbitration claim, anywhere. Once a dispute is filed, no withdrawal path may exist in any template or hand-built plan, and the arbitration fee is NON-REFUNDABLE. Chain truth: order.move's withdraw-family verbs move only the Progress node — they never clear order.dispute and never write claimed_by (only conclude/compensate stamp it), so a withdrawal PERMANENTLY freezes every dispute-gated refund rail on the order. This rule supersedes the former R-WITHDRAW-NO-CASE-BIND / R-DISPUTE-EXIT-REACHABILITY / R-DISPUTE-EXIT-INDIRECT-STAMP advisories (the kernel's andDisputeBindLeg auto-mount and the PT-26 case-bind doctrine are retired with them).",
|
|
1175
1295
|
"cases": [
|
|
1176
1296
|
{
|
|
1177
|
-
"when": { "field": "
|
|
1178
|
-
"level": "
|
|
1179
|
-
"title": "Dispute
|
|
1180
|
-
"description": "
|
|
1181
|
-
"mitigation": "
|
|
1297
|
+
"when": { "field": "dispute_withdraw_edge_count", "op": "gt", "value": 0 },
|
|
1298
|
+
"level": "critical",
|
|
1299
|
+
"title": "Dispute withdrawal is banned: ${dispute_withdraw_edge_count} dispute-withdraw edge(s) — a filed claim cannot be withdrawn",
|
|
1300
|
+
"description": "Dispute-withdraw edge(s): ${dispute_withdraw_edges}. A filed arbitration claim CANNOT be withdrawn on WOWOK: the withdrawal moves only the Progress node, never clears order.dispute, and permanently freezes the order's dispute-gated refund rails. Remove the withdrawal edge and route the dispute to a ruling (conclude/compensate) instead. Filed claims cannot be withdrawn; the arbitration fee is non-refundable.",
|
|
1301
|
+
"mitigation": "Delete the WithdrawClaim/WithdrawClaimReturn-family edge (any forward whose name matches /withdraw/i AND /claim|dispute/i on the same name) and its withdraw_claim guard binding BEFORE publish — machine topology freezes permanently (IMMUT-002). Route the dispute waypoint to the ruling rails (ArbRefund / ResumeAfterDismissal / conclude / compensate) as the only exits.",
|
|
1182
1302
|
"stakeholders": ["merchant", "customer"]
|
|
1183
1303
|
}
|
|
1184
1304
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
63ff024f74e0e2b9daec6d4d8e2723c1eb12533043c9b82036d00a8b4b2abd5e
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0c053b0e17e52d6b796fc233bc3b8d412aba4abdaca052802ffd8fc83caad039
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
754bed1bdd9bfa4460f278b7ab55397d6ca3c9ee2d4e3f66909d095e0bfab371
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
aa2a28971a6b4ea0eb23aac29cce8a02b78e843180cedb87c86eda7279546197
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
36ee444b764ea29e81b6aa6a4f5fc322079c0c034ea381b13f9d86971bb4cecb
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
283dfd6687bfbb5add354b6ff78bf1dab5a93cf4e251b1840336610f1f0707cb
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fd9b942daf8ed1b94e42decb7a9cec7bf097bcf1784fefd3a5e72ed2b54a3765
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fd076383bfb53f6f9f0e369cafcc8a8570f0e2f76ffa34767b567ec39b9ef191
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4d8892a430fcaf9263553702be25ee0cf130bb15ea07fb889fe5b94995bc38b9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fe02ed5def08fa23abfba9f018ad5b3cdc89fd4c3c21cbcb59504d576b60d063
|
|
@@ -71,7 +71,7 @@ export interface ArchetypeTemplate {
|
|
|
71
71
|
logistics_mode?: "none" | "carrier" | "merchant_managed" | "courier" | "pickup_point";
|
|
72
72
|
crowdfunding_mode?: "none" | "threshold" | "flexible";
|
|
73
73
|
}
|
|
74
|
-
export declare const BUILTIN_TEMPLATES_VERSION =
|
|
74
|
+
export declare const BUILTIN_TEMPLATES_VERSION = 224;
|
|
75
75
|
export declare const BUILTIN_TEMPLATES: ArchetypeTemplate[];
|
|
76
76
|
export declare const TEMPLATE_KEYWORDS: Record<string, string[]>;
|
|
77
77
|
export declare const TEMPLATE_TAGS: Record<string, string[]>;
|