6.5 KiB
6.5 KiB
PROGRESS · 引擎卫生:限流状态、静默失败、功能吉凶兜底
- 日期:2026-10-15
- 分支:
codex/python-hygiene-20261013 - 基线:
origin/staginge4ff62c73856d1e10d44f42f998e94835b8acdf0 - 前置:
dbba127e715759f0e225fc57faf12508a01d2380是该基线的祖先 - BUG:BUG-1340。本分支最大已用编号是 BUG-1357,1340 空着,按任务书使用,不顺延。
做了什么
- 免费层「是否在限流」改成读适配器里的真实判断:官方公共端点、没有 API key、配额窗口大于 0。三个旧变量名还在,只在诊断里标成已废弃,不能拿来关掉限流。网关离线排队仍用原来的另一组变量。
- 功能吉凶兜底收成
scripts/functional_layer.py一处。引擎、接口、MCP 都转发到它。正常成功的结果与原来逐字节一致。functional_benefics.py未改。 - 会让结果少一块的静默失败改为记下模块名、函数名和错误类型。预期内的失败保持安静,并写明原因。裸
except里任务点名的两处引擎、星宿大运和星宿命令已改成except Exception。 - 快速门加入静默失败计数和
scripts/根目录.py数量两条只许下降的守卫。
T3 分类
写作时口径是 29 处。本基线多了 scripts/api_scratch_retention.py::_loop(前序单新增),收尾 30 处。A 类 14 处不计入守卫;B 类 16 处改为记日志。未收窄 A 类的异常类型:不能证明只会抛某一种。
| 类 | 位置 | 处理 |
|---|---|---|
| A | annual_tajika_pack._iana_timezone_id |
时区名解析失败保持安静,# noqa: BLE001 |
| A | api_scratch_retention._loop |
清理循环必须活着,保持安静 |
| A | jyotishganit_shadbala_surface_probe.clean |
探针清理失败保持安静 |
| A | jyotish_engine.write_pl9_pdf 字体循环 |
换下一个字体,最后仍可用 Helvetica |
| A | local_oss_observation_inventory.git_commit |
读不到提交号保持安静 |
| A | muhurta 导入 swisseph |
Windows 上动态库失败不一定是 ImportError,保持安静 |
| A | nakshatra_dasha.calc_nakshatra_dasha_breakdown |
日期文本解析失败不改变年龄明细;裸 except 已改为 except Exception |
| A | oracle_boundary_audit._date_delta_days |
日期文本解析失败保持安静 |
| A | tajika._resolve_external_pyjhora_python |
外部解释器探测失败保持安静 |
| A | vedastro_gateway._sdk_version |
可选依赖版本读不到保持安静 |
| A | vedastro_python_bridge 序列化兜底 |
对象转 JSON 失败再走原兜底 |
| A | yoga_engine 自定义表达式 3 处 |
每条规则都可能失败,保持安静 |
| B | cmd_muhurta._get_sun_moon_lons |
记下错误类型后仍走近似日月位置 |
| B | cmd_nakshatra_adv.cmd_nakshatra_dasha |
过境位置失败记日志;裸 except 已改为 except Exception |
| B | daily_guidance_service._current_mahadasha |
记日志,返回值不变 |
| B | jyotish_engine._conflict_arbitration |
记日志;裸 except 已改为 except Exception |
| B | jyotish_engine.cmd_planetary_congregation |
记日志 |
| B | jyotish_engine.cmd_full_reading 过境位置 |
记日志;裸 except 已改为 except Exception |
| B | muhurta 日出、儒略日、日月位置 3 处 |
记日志,返回值不变 |
| B | pl9_full_data_export 中英 Sudarshana 各 1 处 |
记日志。报告正文不写「本段数据缺失」(需拍板) |
| B | reference_transparency_contract._case_chart |
记日志 |
| B | solar_return._get_sun_lon_jd |
记日志 |
| B | tajika._year_lord_is_daytime |
记日志 |
| B | transit_trigger._get_transit_lon_precise |
记日志 |
| B | mcp_server.strict_workflow |
记日志 |
引擎里另外三处裸 except 会赋值(记忆统计、两处年龄推算),不在本口径,未改。
断言
| 位置 | 原值 | 新值 | 原因 |
|---|---|---|---|
tests/test_api_server_security.py 高严谨官方摘要 queue_enabled |
False | True | 没设置已废弃开关时,官方免费层默认仍在限流 |
tests/test_vedastro_user_entrypoint.py 两处 free_tier_queue_enabled / queue_enabled |
True | True | 该用例没有 key、端点是官方地址、配额为正。字段跟随真实限流,不再跟随废弃开关 |
全量解读对照
同一虚构盘、同一随机种子、关闭网络。退出码 0,标准错误 20 字节。标准输出 5236527 字节,摘要哈希与开工前基线不同。逐项对比只有 29 处差异:缓存创建和过期时间、耗时、最慢阶段的名次、结果哈希、一份大运的参照时钟。modules.functional_benefic_malefic 排序后逐字节相同,长度 1442。
反向验证
人为在 scripts/functional_layer.py 加一处 except Exception: pass,并在根目录加一个空 .py,然后立刻删掉。
FAILED tests/test_python_hygiene_budget.py::test_silent_except_budget_does_not_grow
AssertionError: ['scripts/functional_layer.py:46']
assert 1 <= 0
FAILED tests/test_python_hygiene_budget.py::test_scripts_root_py_count_does_not_grow
AssertionError: 447
assert 447 <= 446
撤回后根目录仍是 446。守卫测试 2 通过。
检查
| 检查 | 命令 | 结果数字 |
|---|---|---|
| 定向测试 | 任务书 Grok 自测清单,外加功能层快照 3 条、改过的安全断言 1 条 | 77 项,76 通过,1 失败 |
| 失败项 | test_gateway_completion_archives_official_raw_response |
st_mode & 511 实得 438,期望 384 |
| 静默守卫 | tests/test_python_hygiene_budget.py |
2 通过;未标记静默 0;带 noqa 的 A 类 14 |
| 功能层快照 | tests/test_functional_layer_snapshot.py |
3 通过 |
根目录 .py |
scripts/*.py |
446(含新建的 functional_layer.py) |
失败的那条断言检查归档文件权限必须是 0o600。本单在 vedastro_gateway.py 只加了一行静默原因注释,os.chmod(..., 0o600) 未改。Windows 回报的权限位是 0o666。断言不放宽。
偏离
- T4 测试脚本归位未做。任务书让步顺序第一项,避免搬动被证据索引或冻结清单钉住的文件。
- T5 第 2 条做了:根目录上限按收尾实测 446,只许下降。
- A 类没有收窄异常类型。
- 报告正文不增加「本段数据缺失」。
skills/jyotish-vedic-astrology/scripts/里的旧排队开关解析未改。任务书文件清单不含它,也没有字节对照测试。- 不改前端、依赖、
.gitea/**、生产配置、冻结文件。