# 核心设计与边界

## 执行路径

CSV/JSONL → MoonBit 表格解析 → 样例约束 → 原子表达式枚举 → 输出引导的有界程序搜索 → 候选在真实输入行上分组 → 人工补充样例或明确选择 → JSON 配方 → 按列名绑定并批量解释执行。

`model.mbt` 是纯解释器；`calendar.mbt` 负责公历日期；`table.mbt` 负责 CSV/JSONL；`synthesis.mbt` 生成候选；`disagreement.mbt` 选择分歧行；`recipe.mbt` 负责版本化 AST 与批处理；`protocol.mbt` 提供统一 JSON 边界。`api/` 仅导出函数。浏览器 Worker 和 Node CLI 共用编译后的 MoonBit 核心。JavaScript 只负责 UI、文件 I/O、调用和下载。

## 有界搜索，不是固定场景匹配

1. 从第一个样例建立观察到的有限语法：输入列、去空白、分隔词、ASCII 数字/字母连续段、两端锚定的字符区间、大小写转换和显式日期格式。
2. 一个原子必须在所有样例上可执行，其结果必须是对应目标的子串，且至少在一个样例上非空。不同程序即使在训练样例上同值也保留，因此 `end-4` 与分隔符提取可以产生不同预测。
3. 搜索状态为每个目标输出已消费的位置向量和程序片段。原子只有匹配所有输出的当前位置才产生转移；各目标剩余串的公共前缀可产生常量片段。不枚举相邻常量的等价拆分。
4. 最小堆按成本和稳定序号扩展路径；完成所有输出时得到 `Concat` 程序。最多保留一定数量候选，限制路径片段数、原子尝试数、搜索步骤和队列长度。触及资源限制返回 `truncated=true`。配置里的片段数定义本次语法边界。
5. 排名是偏好简单结构的启发式：字段成本 2，trim 基础 3，分隔词 5，连续段 6，位置截取 12，常量 40+长度；转换再加成本。**成本不是准确率，也不是完备或最优性证明。**队列容量不足会舍弃转移并明确报告。

该实现是独立编写的有界枚举/搜索器，不调用 LLM、PROSE 或其他项目。程序合成、候选排名、交互消歧本身是已有技术。未实现 Flash Fill 完整的正则上下文位置、VSA、循环或任意条件分支。

观察语法依赖第一个样例；当大小写/trim 在第一个样例上无变化时不生成部分包装变体。日期候选只来自观察到的有效显式格式。此限制会漏掉某些可用规则，增加预算也不能消除语法限制。请将有代表性的样例排在首位。

## 分歧选择

对每个未标注输入，计算保留候选的输出（包括失败），按相同结果分组。分数为 `n² - Σ group_size²`，平衡分割的行优先，同分按原始行号。分数仅表示当前候选分歧，无分歧不证明规则正确。界面/CLI 最多检查前 5000 行，界面默认显示前 200 行以及额外标注行。

## 数据语义

- 所有单元格都是文本。CSV 不推断数字；JSONL 只接受同构 string/null 对象，null 转为空文本，数字、嵌套结构、重复键和不一致字段集合拒绝。
- 字符区间按 Unicode scalar value 计数，不按 UTF-16 code unit，也不按用户感知字素；组合附加符与 emoji ZWJ 序列可能由多个字符构成。ASCII 大小写与连续段不声称完整 Unicode 分词/大小写支持。
- `Token` 保留连续分隔符产生的空字段，索引从 0 开始，负索引从末尾计算。越界、缺列、空分隔符不会静默降级。`Run` 为 ASCII 字母或数字最大连续段。
- 支持 `YYYY-MM-DD`、`YYYY/MM/DD`、`YYYYMMDD`、`DD/MM/YYYY`、`MM/DD/YYYY`。年份 0001–9999；不猜月日顺序，不支持时区，严格检查闰年和每月天数。
- 配方 version=1，按保存的列名在下一批数据中重绑定。结果包含每行成功值或错误；任一行失败时不生成部分 CSV。结果 JSON 保留输入行顺序。
- 面向电子表格的 CSV 默认为可能被解释为公式的值添加单引号；精确机器往返可通过 API `spreadsheet_safe:false` 关闭。此机制不是通用安全审计产品，也不保证所有表格软件行为完全相同。

## 限制与资源预算

| 边界 | 默认/上限 |
| --- | --- |
| 学习样例 | 1–32 个；输入 1–16 列；每个输入/目标 ≤128 Unicode 字符 |
| 候选 | 默认 64，最多 256 |
| 搜索片段 | 默认 6，最多 8 |
| 原子尝试 | 默认 30000，最多 100000（每次最多检查全部样例） |
| 搜索步骤 | 默认 200000，最多 1000000；到达限额停止并报告 |
| 前沿队列 | 默认 2048，最多 8192 |
| 表格 | 最多 20000 行、64 列；单元格 ≤65536 UTF-16 units |
| 文本/协议 | CSV/JSONL 输入 ≤2000000 UTF-16 units；JSON 请求 ≤4000000 |
| 配方 | 最大表达式深度 16、节点数 256、单次拼接 ≤32 段 |
| 批量输出 | 全批单元格总长度 ≤2000000 UTF-16 units |

JSON API 已有输入字节/结构边界；库调用方直接传入的数组仍应在业务入口控制大小。无外部网络和动态代码执行。工作台 Worker 支持取消；CSV/JSONL 当前为内存模式，不是流式大数据处理器。

## 后续可验证工作

优先扩大独立留出数据集，补充真实用户反馈，优化日期场景搜索截断，研究保持候选多样性的程序集压缩。随后再考虑用户可配置分隔符、正则上下文位置、条件分支和更强 Unicode 处理。每项扩展都要同步语义、来源、对照测试和预算，不以功能堆积替代价值验证。
