# 行为与限制

- 输入：本地普通文件、严格 UTF-8；支持一个位于文件头的 BOM。无 stdin、GBK、Excel、JSON、自动分隔符识别或远程数据源。
- CSV：逗号分隔，有表头；支持 LF/CRLF、双引号、双双引号转义、引号内换行；引号外孤立 CR 失败。不是完整 CSV 方言集合。
- 表头：非空、唯一、精确大小写/空格；不存在自动去空格、名称映射或类型推断。
- 空表：只有表头合法；空文件不合法。空物理行不跳过，按记录解析并检查列数；末尾单个分隔换行不增加空记录。
- 主键：至少一列，组成值均不能是空字符串；空格是实际字符；重复主键直接报错。主键变化表现为删除和新增。
- 模式：除显式忽略列外，两边列名集合必须相同；允许列顺序不同。忽略列至少存在一侧，不能忽略主键。至少保留一个非主键比较列。
- 比较：字符串精确比较，`1.0` 与 `1.00` 不同。引号内 LF 与 CRLF 保留，不自动统一；无数值容差、日期或空值转换。
- 限制：每文件最多 10 MiB、50,000 条数据记录、100 列，每字段最多 262,144 个 UTF-16 单元。emoji 通常占 2 个单元。达到阈值可接受，超过时报错；实际内存占用高于源文件大小。
- 运行：已测试 Windows x64 本地及干净源码导出环境，并通过 GitHub Linux CI；Node.js 24.14.0、MoonBit 0.10.14+7d59c7ec9 的 JS 后端。远程 Windows 结果及 Linux 记录见 docs/acceptance.md 的 CI 链接。
- 发布：当前是源码及本地构建交付，不是已发布到 npm 或 Mooncakes 的包；README 不要求下载不存在的包。
- CLI 参数：`--key`、`--ignore` 可重复；`--format` 只允许一次，支持 text/json/markdown。`--` 后所有参数按路径处理。列名以 `--` 开头无法通过首版 CLI 指定，但可通过库 API 传入。
- CLI 状态：退出 1 表示成功发现差异，不代表程序错误；错误为 2。报告只在标准输出，错误只在标准错误。
- 不对原始文件做写入，不生成或应用修复补丁。JSON 保留精确值，文本和 Markdown 为安全显示会转义字符。
