mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-11-07 19:20:34 +00:00
* fix(skills): fail closed when the extensions config cannot be read * test(skills): cover a disabled skill when the extensions config cannot be read * style(tests): format the fail-closed regression for ruff * style(tests): fit the docstring and signature inside the 240-column limit * fix(skills): fail closed in the user-scoped listing when the config cannot be read * test(skills): cover the user-scoped listing with an unreadable extensions config * fix(gateway): keep skill read surfaces loud about an unreadable extensions config Folding the user-scoped degraded mode in (#7704) also stopped the skill read endpoints from failing on a config that cannot be read: the storage now answers with an all-disabled listing, which regressed the #7155 contract (a generic 500 with the host path only in the server log) into a 200 that presents a broken deployment as a legitimately empty one. Keep both properties: the storage still fails closed for the runtime gate, and the read surfaces re-validate the config explicitly so the raised error reaches each handler's generic 500 branch unchanged. First-run behavior is untouched: no config file resolves to an empty config without raising, so default-enabled still applies. * fix(skills): redact config-load failures and keep the read preflight off the event loop Review follow-ups: - Log the failure shape instead of the exception text in both degraded modes: from_file resolves $VAR placeholders before validation, so its message can embed resolved credentials. Reuse _describe_load_failure, the loader's own redaction helper. - Run the gateway read preflight through asyncio.to_thread in the capability adapter, matching the scan it precedes. - Cover the user-scoped degraded branch with a CUSTOM skill that has per-user state on disk, so the second read's guard is directly regression-tested (verified red with the guard removed). --------- Co-authored-by: Jay0130-a <309071492+Jay0130-a@users.noreply.github.com>