# 进度用"注入的钩子",这是对"模块不持有运行状态"的一次有意例外 TUI 需要知道"正在处理哪个条目、处在哪个阶段",而目前唯一的通道是日志文本。解析日志行是脆的 ——这个仓库已经因为"从文本里反推结构"吃过一次亏(方向标记贴在名字上时解析不出来,27/28 个条目 被静默跳过)。 所以核心在几个确定的点上调用一个**可注入的进度回调**(建暂存 / 压缩 / 校验 / 安全描述符); 无头路径下它是 `$null`,行为与今天**完全一致**。 **为什么这不是"又把全局可变状态请回来"**:它是一个注入点,不是一份状态——除了运行期被调用之外 不被读、不被写、不跨条目累积,也不参与任何判断。ADR-0007(运行锁用文件句柄而非模块级变量)的 同一条原则仍然成立:**状态属于调用方,模块只提供能力**。 代价:这些回调点会成为核心里的"缝"。以后新增或改动回调点时,要同时想清楚它对**两个前端** (TUI 与无头)分别意味着什么——尤其是"跳过"这种既不是成功也不是失败的状态,两个前端都得有说法。