# MoonSEGY：保留原始道位置的文件交换与道集QC

## 谁会用，解决什么问题

在MoonBit中开发地震数据导入、预览或质量复核流程的开发者。
目标任务：读入SEG-Y，扫描头与道索引，按道集分组检查振幅/非有限值/分析范围，输出带原始道号与字节位置的问题清单，再由调用方筛选或导出。

IBM/IEEE与整数样本、大小端、变长道和权重影响数据解释；先筛选再重编号会让问题清单失去原文件定位，忽略坏值也会扭曲整体统计。

## 为什么不只是换一种语言重写解析器

编解码、头字段访问、窗口、分组和总体矩是公共能力；QC阈值由调用方给出，不内置“某地层/某设备正确”的规则。不是简单扩充已知警告列表。

已有替代：[segyio](https://github.com/equinor/segyio)。大规模成熟Python/C地震处理链应优先考虑既有segyio工具。本库的增量是MoonBit内可组合的数据交换/索引/QC，不在运行时调用segyio；不声称工业吞吐量或反演能力。
“可以用MoonBit实现”不是需求证明；价值成立的前提是调用方确实需要在MoonBit程序内复用这些处理能力。

## 0.2.0公开输入补证

USGS DS259公开航测数据的明确300道节选，检出36条零振幅道并保持原文件字节偏移；225000个整数与独立struct/NumPy对照、300道与segyio对照。显式版本字兼容不会使默认解析放宽，报告保留假设。完整流程和源站当前不可访问限制见 [PUBLIC-USGS](docs/PUBLIC-USGS.md)。它是公开采集记录的复现，不是已有用户或设备故障诊断。

## 评审可直接运行的证据

在仓库根目录运行（无需Python参考工具）：

```sh
moon run examples/quality_check --target js
moon run examples/quality_check --target wasm-gc
```

预期：输出两组数据的QC与可定位问题；零振幅与阈值问题是预期发现。真实文件CLI qc遇到发现返回3，输入/结构错误返回2，不能混淆。
这是合成数据的可复现示范，不是客户案例。
处理自己的真实文件见[完整工作流](docs/QUALITY.md)；[公共API](pkg.generated.mbti)供其他MoonBit项目导入。
独立数值/互操作验证入口：[tools/verify-quality.py](tools/verify-quality.py)；已有回执：[检查记录](evidence/quality-20260922.json)。
测试数量仅表示覆盖，不能代替实用价值或用户需求证明。

## 通用性与不能承诺的内容

输入/输出及明细有资源上限；不可分析的整道显式排除，原始振幅不冒充标定值，不猜CRS、不作地质结论，不支持任意rev2.1私有布局。
公开USGS采集记录仅验证所标注的300道节选；没有生产部署证明，合成矩阵另用于边界契约。
本项目不声称“生态首个/唯一/此前没有任何实现”；公开搜索也不能证明不存在同类项目。
所有比较限于可核验功能和部署条件；发现MoonBit同类项目时应逐项比较API/语义/边界，不以语言名或包装差异算独立价值。

## 交付状态

本地实现、可运行示例和独立参考证据与公开发布是两回事。
模块命名空间为 chenglong-coding/segy，与公开仓库及 Mooncakes 账号一致。
仓库可匿名克隆、默认分支内容、对应SHA的CI和正式链接需在提交时核对；不能用个人主页或历史截图代替。

