{"record":{"id":"fb7104c41949d404","repo":"libnyanpasu/clash-nyanpasu","slug":"member-member-id-has-no-proxies-contributed-n","errorCode":null,"errorMessage":"member {member_id} has no `proxies`, contributed nothing","messagePattern":"member (.+?) has no `proxies`, contributed nothing","errorType":"console","errorClass":"StepLogEntry","httpStatus":null,"severity":"warning","filePath":"backend/nyanpasu-config/src/runtime/executor/compose.rs","lineNumber":138,"sourceCode":"/// 建列表；非序列 → WARN + 跳过，保留用户数据）。\npub(super) fn append_proxies(\n    working: &ConfigValue,\n    member: &ConfigValue,\n    member_id: &ProfileId,\n    logs: &mut Vec<StepLogEntry>,\n) -> ConfigValue {\n    let extracted: Vec<ConfigValue> = match obj_get(member, \"proxies\") {\n        Some(value) => match value.as_array_arc() {\n            Some(items) => items.to_vec(),\n            None => {\n                logs.push(StepLogEntry::warn(format!(\n                    \"member {member_id} `proxies` is not a sequence, contributed nothing\"\n                )));\n                Vec::new()\n            }\n        },\n        None => {\n            logs.push(StepLogEntry::warn(format!(\n                \"member {member_id} has no `proxies`, contributed nothing\"\n            )));\n            Vec::new()\n        }\n    };\n\n    match obj_get(working, \"proxies\") {\n        Some(value) => match value.as_array_arc() {\n            Some(items) => {\n                let mut next = items.to_vec();\n                next.extend(extracted);\n                obj_insert(working, \"proxies\", ConfigValue::Array(Arc::from(next)))\n            }\n            None => {\n                logs.push(StepLogEntry::warn(\n                    \"working config `proxies` is not a sequence, append skipped\",\n                ));\n                working.clone()","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/libnyanpasu/clash-nyanpasu/blob/f7dbce2997c633e484f54788035e770b3ee99773/backend/nyanpasu-config/src/runtime/executor/compose.rs#L120-L156","documentation":"During config composition, a member profile has no `proxies` key at all. append_proxies logs this warning and the member contributes an empty list. This is expected for config-only members (rules/dns fragments) but a warning when proxy definitions were intended.","triggerScenarios":"run_composition → append_proxies: obj_get(member, \"proxies\") returns None for a member in the composition chain.","commonSituations":"A member profile that only contains rules or proxy-groups (legitimately no proxies) triggering the warning; a subscription update that lost its proxy section; a typo like `proxy:` instead of `proxies:`.","solutions":["If the member should define proxies, add a `proxies` list to it or fix the key spelling","If the member intentionally has no proxies (rules-only fragment), ignore or suppress this warning","Verify the subscription source still includes the proxies section after updates","Check member_id in the warning to locate the offending profile"],"exampleFix":"# before (member fragment missing proxies)\nrules:\n  - MATCH,DIRECT\n# after\nproxies: []\nrules:\n  - MATCH,DIRECT","handlingStrategy":"validation","validationCode":"fn member_has_proxies(member: &ConfigValue) -> bool { obj_get(member, \"proxies\").is_some() }","typeGuard":null,"tryCatchPattern":"// Ignore expected warning for rules-only fragments\nif !member_has_proxies(&member) && member_requires_proxies(member_id) {\n    return Err(anyhow!(\"member {member_id} must define proxies\"));\n}","preventionTips":["Distinguish intentionally proxy-free fragments from accidentally empty profiles","Check spelling: `proxies`, not `proxy`","Verify subscription sources still emit the proxies section after updates"],"tags":["config","compose","schema","proxies"],"backgroundTag":"missing-required-config-field","analyzedSha":"f7dbce2997c633e484f54788035e770b3ee99773","analyzedAt":"2026-09-08T01:24:59.197Z","contentChangedAt":"2026-09-08T01:24:59.197Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}