fix: 配置接线审查修复(push数值哨兵化/恒真测试修正/哨兵防漂移/种子映射消双路径)

Important-1: push 数值字段(timeout/max_attempts/retry_backoff_base)
出厂默认改 None 哨兵(与 ai.model 同款),resolve_push_settings 对 None
回退 env——根治 truthy 出厂默认永久遮住 env 覆盖;恒真测试修正(env 数值
patch 成 7.5/5/2.0 与出厂区分)+租户显式数值优先断言;ai.provider 遮
env 的边界记入 docstring。Minor-2: 出厂 model 哨兵与 DEFAULT_CONFIG
一致性测试 + defaults.py 双源注释(model/rate_limit_per_hour)。
Minor-4: allowed_seed_keys → context_seed_map(返回映射,单一取值路径)。
Minor-6/7/3/8: WS 配置冻结时机注释/name_to_region 查表序注释改准确/
chat_rest limit 0 语义注释/resolver None 路径仅供测试注释。404 全绿。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-12 21:57:57 +08:00
parent 32b582aac8
commit 49e2b476f5
7 changed files with 74 additions and 29 deletions
+16 -5
View File
@@ -37,8 +37,14 @@ logger = logging.getLogger(__name__)
def resolve_push_settings(config_data: dict | None) -> dict:
"""租户 config.push → 推送参数(Task 9 接线; env settings 回退)。
出厂默认的空槽(False/空串)视同"未设置"→ 回退 env PUSH_*——部署级
.env 开关是平台默认集的一部分,租户未配置时继承,不静默关停。
空槽回退哨兵(审查 Important-1, 与 ai.model 同款纪律):
- 布尔/字符串: falsy 出厂默认(False/空串)视同"未设置"→ 回退 env
PUSH_*——部署级 .env 开关是平台默认集的一部分,租户未配置时继承,
不静默关停;
- 数值字段(timeout/max_attempts/retry_backoff_base): 出厂 None =
"未设置"→ 回退 env(settings 自带默认 10.0/3/1.0,最终行为与出厂
truthy 默认时一致),租户显式数值(含显式 0)优先于 env。
config_data=None 路径仅供测试直调,生产调用一律传 runtime.config.data。
已知边界: env 开 + 租户显式 false 无法区分于未配置(布尔空槽只有
False),Phase 2 admin 落地时以"平台清 env、配置显式写 false"解决。
"""
@@ -48,10 +54,15 @@ def resolve_push_settings(config_data: dict | None) -> dict:
"url": p.get("url") or settings.PUSH_API_URL,
"api_key": p.get("api_key") or settings.PUSH_API_KEY,
"prefix": p.get("prefix") or settings.PUSH_EXTERNAL_KEY_PREFIX,
"timeout": p.get("timeout") or settings.PUSH_TIMEOUT_SECONDS,
"max_attempts": p.get("max_attempts") or settings.PUSH_MAX_ATTEMPTS,
# 数值哨兵: None(出厂/显式清空)→ env;显式数值优先
"timeout": (p.get("timeout") if p.get("timeout") is not None
else settings.PUSH_TIMEOUT_SECONDS),
"max_attempts": (p.get("max_attempts")
if p.get("max_attempts") is not None
else settings.PUSH_MAX_ATTEMPTS),
"retry_backoff_base": (p.get("retry_backoff_base")
or settings.PUSH_RETRY_BACKOFF_BASE),
if p.get("retry_backoff_base") is not None
else settings.PUSH_RETRY_BACKOFF_BASE),
}
# 对方契约(docs/AI_INQUIRY_PUSH_API.md): phone/whatsapp/email 至少一个有效