mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-27 21:50:36 +00:00
`health_check_skip_seconds` was the only float field in SandboxConfig without `allow_inf_nan=False`, and `ge=0` alone does not stop inf (`inf >= 0` is true). A config.yaml value of `1e999` loads as the string "1e999" and pydantic's float coercion turns it into inf, so the field accepted it and the BoxLite warm-reuse site then skipped the health check permanently: `skip_seconds > 0 and (time.time() - released_at) < skip_seconds` holds forever for inf, so every box this instance recently released is promoted without validation instead of failing fast at config load. Add `allow_inf_nan=False`, matching the sibling sandbox float fields (`bash_command_timeout`, `renewal_interval_seconds`, `ttl_multiplier`) and the ownership lease-TTL model validator. Red/green: `test_sandbox_config_rejects_non_finite_health_check_skip_seconds` parametrizes inf and "1e999"; both were accepted before the fix (RED) and are rejected after. Full boxlite suite: 54 passed / 15 skipped. Regression: the sandbox/config/ownership subset fails 17 tests on this Windows host both with and without the change, with a byte-identical failure-name set (environment-type: process-spawn and file-stat behavior), so no regressions are introduced. Signed-off-by: yetuge <2219677952@qq.com>