# STLKIT 0.1.4

[Mooncakes](https://mooncakes.io/docs/mik1e80/stlkit@0.1.4/) · [固定源码 v0.1.4](https://github.com/mik1e80/stlkit/tree/v0.1.4) · [GitHub Release](https://github.com/mik1e80/stlkit/releases/tag/v0.1.4)

## GitHub 说明修改

新增 [格式兼容性说明](https://github.com/mik1e80/stlkit/blob/v0.1.4/docs/format-compatibility.md)，按 STL 1989 布局、OBJ Advanced Visualizer 3.0 Appendix B1、PLY 1.0、3MF Core 1.3.0 核心几何读取子集列出参考、必需行为、拒绝条件、未支持语义和测试证据。

Core 1.3.0 是固定参考，不宣称完整 ISO/OPC/XSD/3MF conformance 或完整 Core 1.4.0 支持。参考资料注明权利并只链接，不把未知许可 PDF 放入仓库。README、接口说明、COMPARISON 和公开申报说明使用同一边界。

## 代码修改

- OBJ 建立 vt 表，检查四种一致面引用的独立索引范围；缺声明、0、越界、空段、多斜杠、非十进制索引失败。v/vn/vt 缺字段和非单位 w 失败；UV 和材质不保存。
- PLY 验证 ASCII 整数词法及类型范围，计数/内部索引防溢出，list 长度与 face 索引须声明整数。未知/不完整 header、额外字段及 0/1/2 顶点的面失败。
- 3MF 默认检查根关系与内容类型：唯一内部模型关系、正确 MIME、存在目标和无歧义声明。模型按完整 Core URI 与局部命名空间解析，验证对象 Id 和已处理几何层级；保留引用、单位、变换、有限数和必需扩展检查。
- `parse_3mf(data, compatibility=true)` 显式恢复旧包定位；默认 parse_3mf、parse_mesh、CLI 和网页不自行回退。该选项不放宽 XML/几何。

输入接受范围收紧。依赖未声明 vt、错误 PLY 类型/短面或猜测 3MF 定位的调用方应修复输入；仅有明确旧包定位需求时显式启用兼容。旧包与标签保留，不移动标签。

## 报名表修改

[公开申报说明](https://github.com/mik1e80/stlkit/blob/v0.1.4/docs/submission.md) 用固定参考和精确读取子集替代“支持部分常用规范”；删除“零第三方依赖”，披露 ZIP/XML/CLI 依赖；保留有限几何、采样及存储边界。

申报填写包 0.1.4、标签 v0.1.4 和 Release 中完整提交 SHA。个人信息只保留在私有报名文件。桌面修改不会自动提交主办方的在线表单。

## 验证与证据

四后端各 352 项测试；实际 CLI/网页增加同组 OBJ/PLY/3MF 负向回归。重新执行 67 次模型读取、5 组修复后重读和 10 组采样。Cura 4.5 私有 XML 根由严格入口拒绝，不以可读取模型冒充完整工程兼容。

```sh
moon check --target all --deny-warn
moon test --target wasm
moon test --target wasm-gc
moon test --target js
moon test --target native
node cmd/main/smoke.cjs
bash web/build.sh
node web/smoke.cjs
python scripts/prepare-scan.py
node scripts/corpus-cases.cjs --check
node scripts/review-cases.cjs
```

原始模型、哈希、条件和反馈见 [COMPARISON.md](https://github.com/mik1e80/stlkit/blob/v0.1.4/COMPARISON.md)。10月21日性能记录保持历史日期与口径，不当作本次重新测量。
