Files
MCM-ICM_Toolkit/docs
guzhujushi 953e988983 fix(solve): 审查 mm1_metrics + 第二批入口改动(工程侧收口 + 6 条测试)
用户本轮改了 markov_simulate / markov_steady_state 的入口校验,并写完 mm1_metrics,
三处算法本体都正确(mm1 的 5 个公式经探针与闭式解逐位对拍通过,含 W = Wq + 1/mu)。
Codex 只动工程侧:

Fixed
- mm1_metrics 的稳定性分界 "<" 应为 "<="(docstring 与既有测试的口径都是 lambda >= mu 不稳定):
  lambda == mu 原先掉进 try、rho == 1.0 触发 ZeroDivisionError,被 except 吞成 success=False。
  两个分支的可观测输出完全相同(success=False / metrics={} / data=None),只有 message 不同,
  故按决策 31 直接修并加回归测试,未改动任何口径。
- 三处报错文案的参数名抄错:markov_steady_state 的 max_iter <= 0 写成 "tol 必须是正数",
  mm1_metrics 的 service_rate 两条报错都写成 "tol";半角逗号统一为全角。

Changed
- mm1_metrics 的 docstring 补 Raises 与 data 说明;call_params = {...} 补空格;
  ruff 6 条(W293 x5 / F541 f-string 无占位符 / W292 文件末尾无换行)。
- markov_steady_state 的 try 前 3 个空行 -> 1;"异常: " -> "异常:"。
- tests/test_solve.py:摘掉 2 条 mm1_metrics 的 skip,新增 4 条(lambda == mu 的回归、
  非负校验回归、max_iter=3 未收敛判 success=False)。
- STATUS.md 决策 56 / 57 更新办结项 + 新增决策 58(mm1 的 4 条待拍板);CHANGELOG;易错点 29。

校验:pytest 202 passed / 28 skipped(230 收集);ruff 0;pyright 0
2026-10-09 23:52:53 +08:00
..

文档索引

本目录是 MCM/ICM Toolkit 的需求、架构、方案与开发规范的唯一落盘处。

文档 内容
01-suggestion-review.md 对 ChatGPT 建库建议的审查与精简:留什么、砍什么、补什么
02-architecture.md 精简后的包结构、边界划分、统一接口约定
03-roadmap.md 功能清单分级(L0 / L1 / L2 / 不做)与开发纪律
04-environment.md conda / venv 环境配置、镜像、离线约束
dev/function-card-template.md S 档算法的「函数卡片」模板
05-git-workflow.md Git 工作流、Gitea 远程(SSH 走 Tailscale)、行尾策略
dev/personal-pitfalls.md 个人易错点清单:只追加,追加前不通读

阅读顺序

  1. 先读 01-suggestion-review.md —— 它决定后面所有事。
  2. 再读 02-architecture.md —— 它决定代码往哪写。
  3. 开工前读 03-roadmap.md 的对应条目 —— 它决定这次做什么、做到什么程度。
  4. 环境出问题看 04-environment.md。

项目级进度看根目录的 STATUS.md;本目录只放不会频繁变的内容。