# MoonCurveFit 本地验收报告

审查日期：2026-09-16；适用 `osc2026-guide`，时间与申报特别要求以用户提供的九月 `1.txt` 为准。报告范围为本地仓库，不代替主办方评审。审核对象：`yyyt0807/curvefit`，计划仓库 `yyyt0807/moonbit-curvefit`。

## 总体判断

核心交付已实现，可在声明的受控小型稠密数值场景中使用；不是模板或纯包装。**本地可交付，但尚不能宣布通过最终赛事验收**：公开仓库、最近远端 CI 成功记录、mooncakes 实际发布仍缺少，这些按用户要求后置。正式本人申报书也未提供，无法核对全部正式承诺。

## 【1. 总体评价】

优先级最高的数值风险已有防护：参数/输入验证，稳定范数，解析与边界差分，列主元 QR，预算控制，非有限梯度拒绝，真实拒绝步与停止条件，条件式不确定度输出。库、CLI、例子、测试、文档、开源声明与 CI 配置均存在。无绝对全局最优、任意数据稳定性或临床适用性保证。

剩余主要边界：局部投影 LM 可能对劣初值/近不可识别数据停滞；低层函数要求可信维度，公开结果数组不可随意破坏；CLI 在解析上限检查前读取文件；用户回调无法保证终止/不 panic。README/API/safety 文档明确了这些限制。

## 【2. 算法与性能分析】

基本流程：验证 → 加权残差 → 自由参数缩放 Jacobian → 鲁棒局部线性化 → 带阻尼增广 QR → 可行投影步 → 真实目标接受比 → 停止/最终诊断。每轮 QR 时间 O(mn²)，存储 O(mn+n²)；数值 Jacobian 额外最多 2n 次残差调用，最终诊断再增加一次 QR。多起点成本乘以起点数。CSV/JSON 解析线性，SVG 排序 O(m log m)。

主要瓶颈是稠密数组分配/复制与 QR 列尾扫描，而不是小参数数量的三角回代。当前先保证稳定性，未采用法方程 O(mn²+n³) 捷径；其条件数平方会破坏病态问题的正确性。后续可复用工作区减少分配，不改变渐近复杂度，但引入生命周期/别名复杂度，需先真实 profiling 后实施，不值得无依据重写。

100/1,000/10,000 点的准确性检查工作负载已运行。指数解析 Jacobian 使用 7–8 次残差调用，数值版本 55–56 次，迭代均为 7；Gaussian 6 次迭代，鲁棒直线 4–5 次。这里不是时间 benchmark，不声明相对 SciPy 更快。

## 【3. 具体优化步骤】

1. 已用缩放参数和可行差分处理不同单位及边界，避免不合法探测；回归测试验证尺度与固定值。
2. 已用列主元 Householder QR 替代法方程求解，增强数值秩诊断；验证列交换、极小/极大单位、生成系统的正规残差。
3. 已拒绝非有限梯度/目标/统计量，并加入百万 Jacobian 条目上限；非可表示 R² 置空，不输出 Infinity 假结果。
4. 已对鲁棒损失、固定/边界参数和缺少自由度禁用不适用协方差；以警告表达不可识别性。
5. 已补充独立 SciPy 黑盒对照及全后端测试；后续性能优化应先分析分配热点，再以相同测试/误差标准回归。

## 【4. 推荐修改后的代码】

修复均已落实在 `src/`，可通过 Git 历史追溯，不修改其他现有项目。关键修复示意：

```text
if not finite(projected_gradient_norm): return InvalidJacobian
if observations * free_parameters > 1_000_000: return InvalidData
if not converged or robust_loss or rank_deficient or active_bound:
    covariance = None
```

实际范数检查见 numeric/solver/diagnostics；统计溢出见 statistics；QR 检查见 qr；种子 arity 检查见 initialization。保留按领域文件拆分的单包组织，避免增加没有独立职责的包装层。

## 【5. 测试建议与已检查证据】

工具链：moon/moonrun 0.1.20260827，moonc 0.10.11+6ff76a5f9（2026-08-28）。

- `moon check --target all --deny-warn`：通过。
- `moon build --target all --deny-warn`：通过。
- `moon test --target all --deny-warn`：86 项，在 wasm、wasm-gc、JS、native 各全部通过（不是 344 个不同用例）。
- `moon run examples/demo --target native/js/wasm-gc`：三个完整合成场景全部运行且断言通过，各后端参数/停止状态一致。
- `moon run examples/benchmark --target native`：12 组准确性检查通过，最多 10,000 点。
- 原生 CLI 实际导出 JSON 可解码，CSV→SVG 可作 XML 解析；缺失输入实际退出 2；nonconverged.json 耗尽预算实际退出 3，JSON converged=false。
- `python tools/differential.py`：SciPy 1.17.1、NumPy 2.4.6，13 个独立合成对照通过；包括加权、约束、固定参数、指数、Gaussian、4/5 参数 logistic、saturation/Hill 和三种鲁棒损失。最大归一化参数误差约 8.46e-7，最大归一化目标误差约 6.23e-14；适用 OLS 协方差也对照。
- `moon fmt` / `moon info` 后 `git diff --exit-code`：通过；生成接口已提交。
- Apache-2.0 根许可证、来源说明及忽略规则存在；无患者数据，Python 虚拟环境/构建产物不入 Git。

测试覆盖正常恢复、边界投影/固定变量、非法输入、非有限/溢出、奇异矩阵、极端单位、预算耗尽、回调参数隔离、CSV 引号/未知列、JSON 未知键、SVG 转义及重复观测。建议发布后继续补充独立真实匿名测量和接近秩阈值的数据；不应仅扩充测试数量。

## 源码规模和提交记录

统计口径：仓库 `.mbt`，排除 `_build/.mooncakes/.venv`，有效行为非空且非整行 `//` 注释。未把 Markdown、Python、生成接口、许可证算作 MoonBit 行。有效 MoonBit 超过 4,000 行；**其中约 2,706 行为库实现，141 行 CLI、153 行示例，其余为有效测试代码**。因此不声称库实现单独达到 4,000 行；主办方若不计测试，规模判断需另行确认，不应灌水补行。

最终报告提交后本地提交数至少 30，均为 2026-09-15/16 新增功能、修复、测试或文档工作，无空提交/回填日期。作者显示 yyyt0807，但配置不是本人身份核验；参赛者需确认实际贡献关系。

## 提交前必须处理

1. 创建公开 GitHub 仓库并推送当前完整历史，确认真正默认分支包含代码。
2. 在远端实际运行 CI 并确认最近相关运行成功；现阶段仅配置/本地命令通过，不虚构远端结果。
3. 获授权后发布 `yyyt0807/curvefit`，查询 mooncakes 验证版本和可安装性。
4. 参赛者本人编写一页正式 Markdown 申报书（至少三个完整场景），确认身份、一个参赛者一个项目及材料一致性，9 月 24 日 24:00 前完成对应流程。
5. 发布后按 osc2026-guide 再验收；是否获准/获奖由主办方决定。

## 进一步确认与可选环境建议

邻近 owl_mbt/moon-certified 存在基础数学/线性诊断交集，但没有在已检查接口发现与本项目整体高度重合的成熟非线性拟合链路；详见 landscape。无法穷尽生态或保证选题审核。Gitlink 是否仍需同步按九月实际报名入口/主办方要求确认，不机械套用旧七月版本。

当前工具链足够新。未发现安装 moonbitlang/skills；可选安装该官方技能辅助后续维护，不是本项目构建缺陷，也不作为当前发布阻塞。
