龙虾云印 盒端 0.6.15（2026-10-22）

【本版＝新装盒子的关键修复版，建议所有盒子升级】

一、装不上的问题（全新盒子必看）
1. 解包安装（sudo sh install.sh）以前会漏装 detect-printers.js / netguard.sh / VERSION
   —— 装完盒子能上线，但「重新识别打印机」点了没反应，网络自愈也用不了。
   0.6.15 补齐了安装清单，并且缺文件会直接报错，不再静默装出半个盒子。
2. 安装脚本的 Node 门槛统一为 18 起（原来线上脚本只查 16）。agent.js 用了 Node 的
   全局 fetch，Node 16/17 上会「自检通过但维护通道开通失败」，排查起来很费劲。
3. 补上 clawprint-netguard.service / .timer：以前安装脚本会 enable 一个不存在的
   unit，网络巡检从来没跑过。现在每 5 分钟只做一次「只读检测」写状态文件，
   不会自己改网络（改网络仍需本机 PIN 或云端下发）。

二、取消打印不再「假取消」
4. 用户点取消时，如果任务还在下载文件 / Office 转 PDF 阶段，以前会立刻回「已取消」，
   但盒子其实还在跑，纸最后照样出来。现在加了一道取消闸门：
   下载中、转 PDF 中、lp 提交前，任一处发现已取消就立刻放弃，绝不提交打印。
5. 取消失败不再一律报「失败」：先查一次打印队列，
   作业还在队列 → 回报「可能仍在打印」；作业已打完离开队列 → 回报「已完成，无需取消」。
6. 取消/接单的判重记录改成立刻落盘（原来有 500ms 防抖窗口，这期间断电会重打）。

三、任务不再「永远停在打印中」
7. 断链时不再清空作业跟踪定时器。以前断一次网，正在打的任务就再也收不到终态，
   云端会一直显示「打印中」。现在断链期间继续盯 CUPS，拿到终态就记下来，
   重连后中继重发时直接回真实结果。
8. 重启/断电时停在「打印中」的旧记录，启动时统一归成终态并说明原因
   （「是否出纸未知，请到打印机旁确认；没出来请重新提交」），
   既不重复出纸，也不让云端卡死。

四、稳定性与安全
9. 判重表 seen-jobs.json 落盘改为 fsync + 备份 .bak + 主表损坏自动从 .bak 恢复，
   写盘失败会留日志（以前静默失败，磁盘满时判重直接失效 → 重复出纸）。
10. 纯文本任务加大小上限（跟随「单文件上限」设置），防止一段超长文本写满 eMMC。
11. 8760 的 /api/print 与 /api/preview 增加来源校验：只接受局域网/本机来源。
    路由器做过端口映射时，以前公网任何人都能匿名投文件打印并写盘。
12. 上传超限不再提前掐断连接：以前客户端只看到「网络错误」，看不到「超过上限」。
13. 限流计数不再整体清零（以前造 500 个来源就能重置自己的额度）。
14. 崩溃兜底提前到启动最开始注册，启动期异常不会再「无日志直接退出」。

升级：sudo sh install.sh（保留 config.json 里的设备令牌与本机 PIN）
全新安装：curl -fsSL https://dayin.xmei.online/downloads/box/install.sh | sudo sh
