{"record":{"id":"2d3baa3b2ed656b3","repo":"libnyanpasu/clash-nyanpasu","slug":"remove-path-dotted-not-found-skipped","errorCode":null,"errorMessage":"remove path `{dotted}` not found, skipped","messagePattern":"remove path `(.+?)` not found, skipped","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"backend/nyanpasu-config/src/runtime/executor/overlay.rs","lineNumber":274,"sourceCode":"                let segments = parse_dotted_path(dotted);\n                match remove_at(&current, &segments) {\n                    Some(next) => current = next,\n                    None => logs.push(StepLogEntry::warn(format!(\n                        \"remove path `{dotted}` not found, skipped\"\n                    ))),\n                }","sourceCodeStart":256,"sourceCodeEnd":292,"githubUrl":"https://github.com/libnyanpasu/clash-nyanpasu/blob/f7dbce2997c633e484f54788035e770b3ee99773/backend/nyanpasu-config/src/runtime/executor/overlay.rs#L256-L292","documentation":"Soft-failure path in remove_from_item: a remove rule with a string dotted path was applied to a mapping item, parse_dotted_path/remove_at walked the path, but the target key was not found. The item is kept unchanged and a StepLogEntry::warn is recorded instead of erroring — matching legacy parity where removing a non-existent path is a no-op warning, not a failure of the overlay step.","triggerScenarios":"A `remove: [\"a.b.c\"]` entry where key `a.b.c` does not exist on the matched item.","commonSituations":"Typos in removal paths; paths valid in one core/profile version but absent after schema changes; items that vary in shape so some lack the key.","solutions":["Check the dotted path spelling and nesting against actual item contents","Make removal conditional via `when` so it only targets items that have the key","Treat the warning as benign if the key is expected to be optionally absent","Use logging output to list skipped paths and correct them"],"exampleFix":"// before\nremove: [\"udp-x\"]\n// after\nremove: [\"udp\"]","handlingStrategy":"validation","validationCode":"if let Some(ConfigValue::Object(item)) = items.first() {\n    for path in [\"udp\"] {\n        if !item.contains_key(path) {\n            eprintln!(\"remove path `{path}` absent from items; fix or make conditional\");\n        }\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify remove paths exist on target items in a sample profile","Make removals conditional with `when` when keys are optional","Treat benign 'not found' warnings as intentional optional-key removals and document them"],"tags":["config","filter","remove","missing-field"],"backgroundTag":"missing-config-key","analyzedSha":"f7dbce2997c633e484f54788035e770b3ee99773","analyzedAt":"2026-09-08T01:24:59.197Z","contentChangedAt":"2026-09-08T01:24:59.197Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}