{"record":{"id":"dcd408a3ffa1565a","repo":"nautechsystems/nautilus_trader","slug":"commission-only-position-correction-requires-autho","errorCode":null,"errorMessage":"commission-only position correction requires authoritative reconciliation for fill {}","messagePattern":"commission-only position correction requires authoritative reconciliation for fill (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/execution/src/engine/mod.rs","lineNumber":3975,"sourceCode":"                                .1\n                                .map_or(removed, |commission| commission + removed),\n                        );\n                    })\n                    .or_insert((Quantity::zero(event.voided_qty.precision), Some(removed)));\n                remaining_commission = remaining_commission - removed;\n            }\n            anyhow::ensure!(\n                remaining_commission.is_zero(),\n                \"position fragments do not cover voided commission for fill {}\",\n                event.trade_id\n            );\n        }\n\n        let mut corrected_positions = Vec::new();\n\n        for (position_id, (voided_qty, commission_voided)) in allocations {\n            if voided_qty.is_zero() {\n                anyhow::bail!(\n                    \"commission-only position correction requires authoritative reconciliation for fill {}\",\n                    event.trade_id\n                );\n            }\n            let mut position = self\n                .cache\n                .borrow()\n                .position_owned(&position_id)\n                .ok_or_else(|| anyhow::anyhow!(\"position {position_id} is not cached\"))?;\n            let previous = position\n                .fill_voids\n                .iter()\n                .rev()\n                .find(|record| {\n                    record.event.client_order_id == event.client_order_id\n                        && record.event.trade_id == event.trade_id\n                })\n                .map(|record| (record.voided_qty, record.commission_voided));","sourceCodeStart":3957,"sourceCodeEnd":3993,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/execution/src/engine/mod.rs#L3957-L3993","documentation":"Guard in position-correction handling: a correction that only adjusts commission (no quantity) is ambiguous unless applied against an authoritative reconciliation fill; without that authoritative source the correction is rejected to prevent fabricated state.","triggerScenarios":"Thrown at crates/execution/src/engine/mod.rs:3975 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Supply the correction via reconciliation data for the referenced fill","Include a quantity component so the correction is not commission-only"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}