3.9 KiB
FAIL
crates/ely-ipc/src/relay.rs:10 — 原样记录引擎 stderr 会把文档正文写入诊断日志,违反 PRD §18.2。复现:生成一页 PDF,内容流包含 (ZqxPrivate42) Tj 和损坏的操作符 ZqxPrivate42;对本轮独立构建的 PDF worker 发 OPEN、TEXT,stderr 出现 syntax error: unknown keyword: 'ZqxPrivate42'。同一 relay 将该行逐字写入应用的 ely.log;默认诊断导出也会携带该正文。证据:/tmp/ely-c18-2-r1/pdf-privacy.log、relay.log。修复方向:在引擎原生错误/警告输出与应用日志之间建立内容边界,日志仅记录经过审核的诊断字段;包含文档数据的原始错误通过用户错误通道交付。增加损坏 PDF 的真实 worker 日志回归。
crates/ely-platform/src/diagnostics.rs:101 — “去掉路径与个人姓名”仅替换家目录前缀,仍导出其他完整路径。复现:日志为 opened /Volumes/ClientSecret/payroll.pdf,使用家目录 /Users/ana 的默认 Redact 调用 bundle,导出的内容仍含 /Volumes/ClientSecret/payroll.pdf,文件分隔标题也保留原始路径。补充测试 probe_bundle、probe_paths_and_names 均失败,见 /tmp/ely-c18-2-r1/probes.log;现有 privacy.sh 只检查家目录,两个完整运行均打印成功。修复方向:脱敏日志正文与文件标题中的文件路径及 URL,覆盖外置卷、家目录外的目录和各平台路径形式,并加入对应导出断言。
crates/ely-platform/src/diagnostics.rs:105 — 按原顺序逐个替换姓名会让长姓名被短姓名提前拆开,个人信息仍进入默认导出。复现:账户名为 Ana、设置作者名为 Ana Lee;of_account 将账户名排在作者名前,apply(Ana Lee) 得到 <user> Lee,姓氏仍保留。probe_overlapping_names 实测失败,见 /tmp/ely-c18-2-r1/probes.log。修复方向:优先匹配完整的最长姓名,避免替换结果破坏后续匹配;为账户名与作者名重叠的情况加入回归断言。
crates/ely-platform/src/diagnostics.rs:26 — ely.log 元数据查询的错误被吞掉,诊断页面将读取失败显示为空列表。复现:将日志位置设为指向自身的符号链接,metadata 返回 ELOOP,gather 却返回 Ok([]),页面显示“暂无可导出的内容”;目录权限导致的 PermissionDenied 也走同一路径。probe_log_error 实测失败,见 /tmp/ely-c18-2-r1/probes.log。修复方向:仅将 NotFound 作为日志尚未创建处理,其余元数据错误返回给现有诊断错误界面,并测试读取失败的情况。
crates/ely-ipc/src/relay.rs:10 — relay 将 worker 原始模块 target 改为 lok-worker/pdf-worker 后再次过滤,导致两端共享 ELY_LOG 时丢失按模块开启的日志。复现:设置 ELY_LOG=ely_lok=warn,worker 的 [... WARN ely_lok::worker] worker reached 满足其日志过滤条件;应用 relay 使用 lok-worker target,落盘日志为 0 字节。独立构建的 relay 探针在 ELY_LOG=info 下记录同一告警,见 /tmp/ely-c18-2-r1/relay.log、relay-filter.log。修复方向:保留结构化 worker 记录的原始模块 target 与等级,使同一 ELY_LOG 过滤规则在汇总后继续有效,并覆盖模块过滤配置的回归。
tests/scripts/privacy.sh:8 — EXIT trap 中终止子进程后直接 wait,在 set -e 下以子进程的 SIGTERM 状态中断清理,成功验收也返回失败。复现:本轮两次完整真窗口运行均输出 ok: privacy,随后退出码为 143,两个临时目录均残留;相同 trap 的最小子进程复现也返回 143,后续清理语句跳过。证据:/tmp/ely-c18-2-r1/privacy.log、privacy-repeat.log、verification.log。修复方向:保存验收退出状态,对已设置的 pid 执行终止与回收,显式处理预期的 wait 状态,确保临时目录清理完成后返回原验收状态;同时覆盖成功和启动失败的清理路径。