Smail/docs/日志改造任务.md
smail 9c450f1734
Some checks are pending
Security Checks / security (push) Waiting to run
运行时配置清理阶段检查点
2026-10-05 01:31:34 +08:00

166 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 日志存储与可视化改造
## 2026-09-09 三类日志补齐操作与结果
- [✓] 需求确认:操作、收发信、运行日志均显示触发操作和结果;补充操作对象、处理阶段及安全的结果说明。
- [✓] 修改前检查点 `b50e5bd` 已推送;保留现有配置、账号、邮件和历史日志,不恢复独立配置审计。
- [✓] 写入侧补充明确的事件元数据;等待验证、开始执行、对端接收和最终成功分别记录;旧记录缺失信息不编造。
- [✓] 日志列表与详情展示操作、对象或阶段、结果说明;MCP 已核对三类切换、历史操作与收发信详情,以及新运行事件的操作、端口、结果和原始记录。
- [✓] 全量回归 `test-log/run-2026-09-08T18-43-37-462Z-45220`:前端 153 项、部署 4 项及后端全包通过。
- [✓] 补充收信策略丢弃、读取失败、投递人数状态和中继验证码脱敏测试;并发检测 `test-log/run-2026-09-08T18-46-29-763Z-34164`:配置、三类日志、验证码、HTTP、SMTP、投递及初始化相关包通过。
- [✓] 实现提交 `dd6258c` 已推送至 `smail/main`;完整编译前端、三个插件、主程序和管理员工具,部署至 `yunx-test` 并重启。运行版本 `dev-bbcd991eb268`,源码指纹及部署程序哈希校验通过。
- [✓] 后端进程 `8680` 使用 `yunx-test/smail.exe --dev-disable-admin-reset` 监听 5201;原前端开发进程 `31496` 继续监听 80/443。2026-09-09 10:10 再次核验部署及健康检查通过,未因补充验收文档重启业务服务。
- [✓] MCP 复用 `https://example.com/` 原窗口,忽略缓存刷新后保持登录。运行日志区分监听“已开始”、健康检查“成功”和代理 HTTPS“已跳过”;详情保留代码来源与完整原文,不将绑定前的事件误报为监听成功。
- [✓] 三类真实查询返回 HTTP 200、业务码 0;历史操作记录 4 条、收发信记录 1 条,缺失的对象、来源和结果说明明确显示未记录,不补造历史信息。未为验收提交业务修改或发送真实邮件。
- [✓] 运行日志前两页各 10 条,时间倒序且均在固定二十四小时时段内;接口与页面检查均无重叠,重复查询稳定,点击上一页准确恢复首屏。10:11 点击最近二十四小时后,时段更新为当前时间,回到第 1–10 条且无错误提示。
- [✓] 1707×876 桌面页面与现场截图复审通过:页面及表格无横向溢出,分页位于视口内,表格内部允许滚动。控制台未发现错误或警告。截图写入 `test-log` 被 MCP 工作区限制拒绝,改为现场查看;不将未生成的截图文件作为证据。
- [✓] 重启前后 17 个配置与证书文件 SHA-256 未变,核对结果为 `test-log/log-results-20260909/file-verification.json`;构建启动输出为同目录 `deploy-20260909-024843.stdout.log` 和同名错误输出文件。未清空账号、邮件或历史日志。
- [!] 覆盖边界:新格式为旧调用保留函数来源与“状态记录”,不猜业务完成态;关键启动、停止、监听、证书及日志维护点显式标记结果。操作日志沿用变更路由白名单,不复制请求正文,对象只标类别;会话或 CSRF 前置拒绝不保证经过此记录器。投递人数状态有自动测试,未新增真实外部多收件人投递验收。数据库复用三库既有载荷字段,未新增 MySQL、PostgreSQL 实库验收。
## 2026-09-09 取消独立配置审计
- [✓] 需求确认:取消配置审计分类、维护菜单及查询导出;配置修改仅在现有运行日志文件记录简短结果,操作记录与收发信存储方式不变。
- [✓] 修改前检查点 `42a173f` 已提交并推送;不删除历史审计文件或清空数据库。
- [✓] 默认配置管理器改用运行日志,停止数据库审计写入与历史审计导入;旧审计接口返回已停用,不再返回记录或下载文件。
- [✓] 配置保存、回滚、迁移仍使用原有事务、备份、权限与二次验证;运行日志不写配置前后值、密钥、密码或用户名称。跨数据库迁移不再创建目标库审计写入器,保留复制校验和源库写锁。
- [✓] 全量回归 `test-log/run-2026-09-08T17-37-37-092Z-35572`:前端 152 项、部署 4 项及后端全包通过。并发检测 `test-log/run-2026-09-08T17-42-33-063Z-34044`:配置、数据库日志、数据库迁移、HTTP 和运行日志包通过。
- [✓] 实现提交 `ae22464` 已推送至 `smail/main`;完整编译前端、三个插件、主程序和管理员工具,部署 `yunx-test` 后源码指纹与程序哈希核验通过,运行版本为 `dev-362d34a54453`。
- [✓] 后端新进程 `37784` 监听 5201,运行根目录为 `yunx-test`;原前端开发进程 `31496` 继续监听 80/443。仅开发启动明确停用本机管理员恢复通道,正式部署保护不变。
- [✓] MCP 在原 Smail 窗口忽略缓存刷新,保持登录;配置维护仅显示数据库迁移、服务重启、备份与回滚,日志仅有操作记录、收发信记录、运行日志三类。
- [✓] MCP 带当前会话和 CSRF 请求旧查询、详情和导出地址:三个地址的 GET、POST 均返回 410,禁止缓存且没有下载响应头;日志查询 `kind=config` 返回 422。三类保留日志接口均成功,操作记录 4 条、收发信记录 1 条、运行日志每页 10 条。
- [✓] MCP 运行日志第一页和第二页切换、警告详情、返回第一页通过,可查本次新版本启动记录;浏览器最终停留在运行日志第一页。
- [✓] 重启前后 18 个配置、证书和历史审计文件的 SHA-256 未变;实际配置指定的 `smail_temp.db` 中,配置审计仍为 22 条,最大记录时间未变,操作记录仍为 4 条。只读核对记录为 `test-log/audit-retirement-20260909/database-before.json`、`database-after.json`,文件清单为同目录 `files-before.json`。
- [✓] 完整构建启动输出保存为 `test-log/audit-retirement-20260909/deploy-20260909-014820.stdout.log` 和同名错误输出文件。
- [!] 验收边界:配置保存并写入运行日志、敏感内容不落盘、旧文件不变及拒绝数据库审计写入由独立测试验证;未为浏览器验收改动真实配置或清空现有账号、邮件。MySQL、PostgreSQL 实库未新增验收;既有前端大分包告警不属于本轮范围。
## 2026-09-09 倒序查询与写入前过滤
- [✓] 需求确认:四类日志统一倒序、每页十条、支持起止时间,默认最近二十四小时;翻页固定查询时段。
- [✓] 修改前检查点 `161bc3a` 已推送;不清空现有业务库、不删除历史日志文件。
- [✓] 无价值记录在写入前过滤:空内容、纯装饰分隔线、已识别的旧启动横幅;警告、错误、结构化信息、安全操作及未知事件保留。数据库只丢弃没有动作、对象、结果及有效载荷的空壳,不猜测未知事件价值。
- [✓] 运行日志跨日和压缩文件按真实时间倒序查询;相同时间按文件与行位置稳定排序,过滤在分页前完成。只保存有上限的行位置索引和最多两兆本页内容,不加载全部历史原文;等待归档和扫描均支持取消。
- [✓] 修复 Windows 目录枚举返回正在写入文件旧长度的问题,改为文件句柄取长度;读取前在短锁内冻结长度,避免两次扫描读到新增的半条记录。
- [✓] 文本格式器保留结构化错误和业务字段,不再只留下消息标题;无法序列化字段只保留类型提示,不导致整条有效记录丢失。
- [✓] 前端统一时间筛选、十条分页,保留详情、短页回退和请求竞态保护;查询及分类切换才采纳新筛选,翻页固定上一次查询时段。
- [✓] 全量回归 `test-log/run-2026-09-08T17-03-28-009Z-39800`:前端 151 项、部署 4 项及后端全包通过。并发检测 `test-log/run-2026-09-08T17-05-13-325Z-35604`:运行日志、数据库日志、程序启动和配置包通过。
- [✓] 完整编译并部署 `yunx-test`、浏览器 MCP 真实验收。
- [✓] 首次实现 `bb4ac4d` 已推送并部署,版本 `dev-7e835b59cdba`,后端进程 `26532`;浏览器刷新后保持登录。随后复审补充保护:附带结构化字段的旧横幅文案仍保留,不因标题相似而隐藏错误证据。
- [✓] MCP 真实接口检查:配置审计 12 条(10+2)、操作记录 4 条、收发信记录 1 条、运行日志 90 条(九页十条),均倒序且位于固定二十四小时时段内。运行日志纯分隔线与独立构建信息为零,三条历史启动事件及六条警告保留。
- [✓] MCP 页面检查:四类切换正常无错误;运行日志下一页显示 11–20 条,与首屏不重叠,上一页准确恢复;实际填写本地 00:30–00:50 后请求携带对应 UTC 时段。警告详情保留完整来源、消息和原文,最近二十四小时按钮恢复默认范围;1707×876 桌面截图无横向溢出,分页在视口内,表格内部允许滚动。
- [✓] 最终补丁全量回归 `test-log/run-2026-09-08T17-15-42-888Z-24832`:前端 151 项、部署 4 项及后端全包通过;补充并发检测 `test-log/run-2026-09-08T17-19-41-041Z-40224`:运行日志、数据库日志和格式器所在配置包通过。
- [✓] 最终代码提交 `c4e9a2f` 已推送;完整重建前端、三个插件、主程序及管理员工具,部署版本 `dev-f40f8bdc6fb3`。后端进程 `30984` 监听 5201,前端开发进程 `31496` 保持 80/443;`node deploy/build-state.mjs verify --deployed` 与健康检查通过,配置、证书、数据库未覆盖。构建诊断保存于 `test-log/log-filter-final-20260909-012039.stdout.log` 和同名错误输出文件。
- [✓] 最终部署再次通过 MCP 忽略缓存刷新与登录保持检查;四类日志在指定二十四小时时段内倒序返回。运行日志首两页各十条且无重叠,上一页精确恢复,新版本启动记录可查;页面无错误提示和横向溢出,分页底部 858 像素位于 876 像素视口内,浏览器停留在运行日志第一页。
- [!] 压缩归档、空记录不落库/不创建日志文件、损坏文件保留、并发取消通过独立测试验证;没有在部署库伪造数据或为了验收清空现有账号、邮件和日志。已有编译大分包告警不属于本轮日志需求。
- [!] 三十天滚动留存、七天压缩不变;三库保持通用设计,MySQL 和 PostgreSQL 实库验收仍需专用测试连接。
## 2026-09-09 精简启动日志
- [✓] 范围已核对:不再显示无业务价值的启动分隔线,以及单独占行的版本、提交号、编译时间、Go 版本;修改前检查点 `0dc459d` 已推送。
- [✓] 新程序只生成一条带运行版本的“服务启动”记录;不把进入启动流程误写成所有监听服务已就绪。
- [✓] 历史启动横幅在后端查询分页前过滤,旧启动事件显示为一条中文记录;过滤仅匹配主程序来源和信息级别,其他来源、未知格式、警告和错误保留。
- [✓] 不修改原日志文件,不调整三十天保留、七天压缩、数据库和访问权限。
- [✓] 回归测试明文和压缩日志、分页、尾部冗余记录、仅含冗余记录及原文件不变;历史启动摘要中文化,详情保留原文。
- [✓] 最终全量回归 `test-log/run-2026-09-08T16-36-44-859Z-5048`,前端 150 项、部署 4 项及后端全包通过;并发检测 `test-log/run-2026-09-08T16-37-55-398Z-17556`,运行日志与程序启动包通过。
- [✓] 实现提交 `ea2808f` 已推送;完整编译前端、三个插件、主程序及管理员工具,更新 `yunx-test` 并重启。运行版本 `dev-4111bf81e769`,后端进程 `9376` 监听 5201,原前端开发进程 `31496` 继续监听 80/443;部署指纹及程序哈希校验通过。
- [✓] MCP 忽略缓存刷新后仍保持登录,真实日志接口与表格均无旧分隔线及独立构建信息;第一页 50 条,第二页 18 条,末页禁用下一页,返回上一页正常。四条警告完整保留,三个历史启动事件与本次启动事件均可查询;旧启动事件在列表显示中文,详情保留原文。
- [✓] 真实文件核对:重启前 10,891 字节逐字节未变,本次追加 17 条记录,无新横幅;证据为 `test-log/startup-log-20260909/file-verification.json`,完整构建启动输出为同目录 `deploy.log`。
- [✓] 最终桌面视口 1707×876 的 MCP 截图与页面检查通过,没有横向溢出,浏览器停留在运行日志列表。测试使用独立临时数据库,不清空现有账号、邮件和日志。
- [!] 验证边界:压缩历史日志过滤已做自动化测试,未在真实部署目录人为生成压缩文件用于浏览器验收;本轮没有扩展数据库方言、排序或其他日志内容。前端构建仍有既有的大分包告警。
## 2026-09-09 运行日志目录简化
- [✓] 已确认:保留顶层 `log/`,取消 `log/运行日志/` 这一层;修改前检查点 `3d8d1c8` 已推送。
- [✓] 复审通过:新部署直接写入 `log/runtime-YYYY-MM-DD.log`,压缩文件也直接保存在 `log/`。
- [✓] 复审通过:启动写入和维护之前自动迁移旧目录的受管日志;预检同名冲突,排他创建目标,流式复制完整落盘后才移除源文件,保留内容与修改时间。
- [✓] 复审通过:仅移除迁移后的空目录;未知文件、旧审计文件和启动诊断不动。迁移期间必须停止旧服务;遇到同名冲突(包括异常中断残留)保留现场并明确报错,需人工核对,不自动覆盖或合并。
- [✓] 复审通过:新部署、旧文件及压缩文件迁移、重复启动、空目录、同日两种格式、同名冲突、源文件变化和原有日志保留策略回归。
- [!] 验证限制:Windows 普通权限不能创建符号链接,目标链接、旧目录链接和源文件链接三个测试分支跳过;拒绝链接逻辑已实现,不声明这些分支已实测通过。
- [✓] 全量回归:`test-log/run-2026-09-08T16-12-55-458Z-37964`,前端 149 项、部署 4 项和后端全包通过;测试使用独立临时目录,不清空现有账号或邮件。
- [✓] 复审通过:全量构建部署到 `yunx-test`、重启以及 MCP 日志列表、分页和详情验收。
### 本轮验收记录
- 实现提交 `fda4786` 已推送至 `smail/main`,部署运行版本为 `dev-2a86357508e9`;完整构建包含前端、三个插件、后端及管理员工具,`node deploy/build-state.mjs verify --deployed` 通过。
- 最终并发检测:`test-log/run-2026-09-08T16-14-10-861Z-30608`,运行日志与程序启动包 `-race -count=1` 通过。先前一次并行发起被工作区互斥锁拒绝,已在全量回归结束后串行重跑,不将被拒绝的执行计为通过。
- 2026-09-09 00:17 实际文件核对:`log/运行日志` 已不存在;原日志前 7,260 字节逐字节一致,新程序继续追加至 10,891 字节。顶层另外 25 个历史文件 SHA-256 均未改变。证据保存于 `test-log/runtime-log-flat-20260909/migration-verification.json` 和同目录的历史文件核对清单。
- 后端进程 `26492` 使用 `yunx-test/smail.exe --dev-disable-admin-reset`,监听 `5201`;原前端开发进程 `31496` 继续监听 `80/443`。健康检查返回 `pong`,生产管理员恢复通道保护未改变。
- MCP 复用原 Smail 页面,忽略缓存刷新后登录状态保持;配置审计仍可查询 22 条旧记录,运行日志第一页显示第 1–50 条,第二页显示第 51–69 条。旧启动记录与新提交启动记录均可读取,最新警告详情显示完整中文内容;控制台未发现错误或警告。浏览器停留在运行日志页面。
- 日文件名称沿用 UTC 日期,因此本地 9 月 9 日凌晨的记录仍写入 `runtime-2026-09-08.log`,本轮不更改日期规则。
- 当前没有真实压缩文件可供浏览器选择;压缩迁移、读取和保留策略通过独立测试验证,不声明新增了压缩归档的真实浏览器验收。完整前端构建仍有既有的大分包告警,本轮未扩展修改前端打包配置。
## 已确认需求
- 操作记录、配置审计、收发信记录兼容 SQLite、MySQL、PostgreSQL,默认沿用当前业务数据库连接,不要求额外安装 MySQL,不自动迁移业务数据库。
- 设置导航在插件配置后增加日志入口,支持分类、时间筛选、分页与详情。
- 运行日志直接保存在 `log/`,按天写入;满七天的日文件压缩为独立的 `.log.gz`,启动补做,避免整周归档跨越清理边界。
- 压缩后的运行日志仍可在后台查看;仅在压缩校验通过后替换对应明文文件。
- 配置审计展示操作者、时间、具体字段及修改前后值;秘密只显示配置状态。
- 旧配置审计幂等迁移并保留原文件,不伪造历史缺失的变更详情。
- 用户于 2026-09-08 补充授权:三类日志均只保留最近 30×24 小时,启动补清理,运行期间定时滚动清理;压缩不重置保留时间。
- 数据库按记录时间分批删除;运行日志同时覆盖明文、压缩归档和边界日内的过期记录。查询也应用同一截止时间,不能展示等待下一次清理的过期记录。
- 清理仅作用于受管日志表和运行日志,绝不清理账号、邮件正文、附件、验证码业务表或其他项目数据库。15 GB 是容量预算而不是容量保证。
- 配置仍在原有五个 JSON 文件中,复用既有数据库配置,不新增 MySQL 专用日志连接。
## 实施状态
- [✓] 复审通过:需求确认与修改前 Git 检查点,`5faadcd`、`b77b272` 已成功推送至 `smail/main`;后续修正提交 `b4337dc`、`b3935d1` 也已推送。
- [x] 已完成,等待复审:三数据库兼容存储、30 天滚动清理及旧配置审计幂等迁移;SQLite 已真实执行,MySQL、PostgreSQL 等待专用连接验收。
- [x] 已完成,等待复审:操作及收发信记录接入;登录完成的身份与二次验证入口补充审计。
- [✓] 复审通过:运行日志日文件、七天压缩、边界日精确清理和压缩查询;损坏归档保留原文件;归档不阻塞当天已打开日志句柄追加。
- [✓] 复审通过:具体配置变更明细、敏感字段脱敏及审计导出回归。
- [x] 已完成,等待复审:日志管理页面,访问权限、筛选、短页回退、过期文件切换、请求竞态回归通过;浏览器已验证分类切换、筛选、历史审计详情和当前运行日志,真实业务写入与压缩文件查看尚未完整端到端验收。
- [✓] 复审通过:完整构建并同步最新部署包至 `yunx-test`,后端重启成功,源码指纹及部署程序哈希校验通过;前端开发服务继续运行。
- [!] 暂缓或存在阻塞:MySQL、PostgreSQL 活库测试缺少本项目专用测试连接,不能用其他项目数据库替代。
## 当前验证记录
- 全量回归:`test-log/run-2026-09-08T14-40-12-728Z-20120`,前端 144 项、部署 4 项及后端全包通过。
- 并发检测:`test-log/run-2026-09-08T14-44-59-839Z-25272`,运行日志与数据库日志包 `-race -count=1` 通过。
- 补充修正后的全量回归:`test-log/run-2026-09-08T14-51-24-127Z-17952`,前端 144 项、部署 4 项及后端全包通过,包含完整登录审计身份及致命错误落盘测试。
- 最新部署源码全量回归:`test-log/run-2026-09-08T15-03-33-242Z-25356`,前端 145 项、部署 4 项及后端全包通过,执行退出码为 0;汇总在 `test-log/log-final-deployed-regression-20260908.log`。
- 完整构建发现日志页错误使用 Axios 默认导出,已改为现有的命名导出 `http`,并新增导入契约回归。修正后的前端、三个插件、主程序及管理员工具均构建成功,记录在 `test-log/log-deploy-final-second-20260908.log`。
- 部署包源码提交为 `b3935d1`,运行版本为 `dev-2f06b03f2afd`,数据库结构版本为 17。2026-09-08 23:06 再次执行 `node deploy/build-state.mjs verify --deployed`,退出码为 0;后续仅更新本文档不改变源码指纹。
- MySQL、PostgreSQL 日志专项集成入口:`node test/run.mjs backend -v -run TestLogStoreServerDatabaseIntegration ./services/logstore`。需设置 `SMAIL_TEST_MYSQL_DSN`、`SMAIL_TEST_POSTGRES_DSN`,只创建连接私有临时日志表,不改动既有业务表;测试连接断线后禁止自动重连。当前变量未设置,相关活库测试跳过。
- MySQL、PostgreSQL 跳过记录:`test-log/run-2026-09-08T15-01-05-642Z-29732`。当前 SQLite 部署库只读核验记录在 `test-log/log-live-database-check-20260908.txt`,确认时间索引及分类时间索引存在;没有清空当前账号或邮件数据。
- 启动补清理,之后每小时执行,数据库每批最多删除 1000 条;查询立即应用最近 30×24 小时窗口。物理清理存在调度间隔,不声称每秒即时删除。
- 运行日志文件名采用 UTC 日期,每条记录含明确时区;后台显示本地时间。已压缩文件也按记录时间清理,压缩不重新计时。
- 模拟部署启动器的控制台诊断写入 `test-log/service-launch`,不在 `yunx-test/log` 重复生成散乱的启动文件;旧文件保留。
## 浏览器与运行验收
- MCP 使用现有 Smail 窗口访问 `https://example.com/`,前端监听 80/443,后端监听 5201。后端使用 `yunx-test/smail.exe --dev-disable-admin-reset`;生产本地管理员恢复通道的权限要求未放宽。
- 刷新后保留已有登录状态,设置导航末尾可进入日志页面;已依次切换配置审计、操作记录、收发信记录、运行日志。
- 已查看 22 条导入的历史配置审计及详情。旧记录缺失修改前后值时明确说明,不补造历史详情。
- 操作者编号筛选可返回空结果,清空后可恢复查询;当前运行日志文件与真实启动内容可读取。页面最终停留在运行日志分类。
- 本轮未执行新的业务修改或真实收发信,因此操作记录和收发信页面只验证空状态;新配置变更明细、完整登录审计链路及真实邮件日志仍需后续端到端验收。
- 压缩读取、七天压缩及三十天清理使用独立测试数据验证,未在真实部署目录伪造过期日志,也没有等待真实七天或三十天;压缩文件的浏览器读取仍未实测。
- MCP 快照写入 `test-log` 被工具的工作区限制拒绝,没有生成快照文件;页面树已通过工具响应现场检查,不将不存在的文件作为验收证据。
- 完整前端构建仍有既有编辑器分包大小告警:约 808.91 kB,gzip 后约 282.55 kB。此项不属于日志保留策略改造,未扩展修改。
## 验收边界
数据库连接沿用部署者当前配置,不能猜测或复用其他项目的密码。SQLite 实测通过不等于 MySQL、PostgreSQL 真实连接验收通过;方言检查与真实数据库测试必须分别报告。写入或清理失败必须可观察、可重试,不能无限排队或静默丢弃。
过期删除让数据库页可重用,但不保证数据库文件立即缩小;不在在线清理中执行全库 VACUUM、OPTIMIZE 或重建表,以免长时间锁住邮件业务。数据库保留期以记录创建时间为准,不因升级、迁移、压缩而延长。旧审计源文件仅用于迁移核对,不继续双写,暂不擅自删除。
## 2026-09-08 日志表格可视化优化
### 需求与任务
- [✓] 运行日志从整段原文改为表格,拆分本地时间、中文级别、内容及详情入口;保留完整原始记录,不修改存储、接口和清理策略。
- [✓] 信息、警告、错误使用不同颜色标签,警告与错误行浅色高亮;统计明确标注为本页数据,不冒充整个文件总量。
- [✓] 长消息最多展示两行,代码来源次要显示;详情弹窗展示完整来源、请求标识及消息,原文可展开。
- [✓] 文件选择展示文件大小和压缩状态,分页显示实际记录区间,空页不再错误显示从第一条开始。
- [✓] 配置审计、操作记录、收发信记录统一表头、时间样式、结果标签和分页布局。
- [✓] 修改前检查点 `5f44235` 已推送;实现提交 `d5b2f9c` 已推送并完成全量构建部署。
### 验证记录
- 前端 149 项回归通过,记录:`test-log/run-2026-09-08T15-52-47-300Z-37628`。新增解析测试覆盖纳秒时间、中文消息、请求标识、Windows 来源路径、未知格式、非法时间、原始 HTML 字符串、分隔线、统计及空页范围;保留旧的请求竞态和分页回归。
- 完整编译包含前端、三个插件、后端和管理员工具,部署日志:`test-log/log-table-deploy-20260908.log`。源码提交 `d5b2f9c`,运行版本 `dev-1c641972e68f`,`yunx-test` 部署指纹与程序哈希校验通过。
- 后端使用 `yunx-test` 配置和数据库重新启动在 5201;前端开发服务继续监听 80/443。本轮没有清空现有账号和邮件数据。
- MCP 真实访问 `https://example.com/`,配置审计显示 22 条历史记录,运行日志显示 46 条记录、本页信息 44 条、警告 2 条、错误 0 条。刷新查询无页面错误,浏览器控制台未发现错误或警告。
- 桌面视口 1707×876、窄桌面视口 1100×720 均检查通过:设置内容区和表格没有横向溢出,分页始终在视口内,纵向滚动限制在表格内。现场截图确认表格、标签及次要来源的真实渲染。
- 已打开警告日志详情,确认完整中文内容和来源;原始记录展开后与消息对应。未知格式不会被丢弃或作为 HTML 执行。
- 本轮没有真实压缩归档可供浏览器选择,未新增错误业务日志;压缩格式使用相同的行解析路径,错误级别以自动化测试覆盖,不宣称新增了对应真实业务端到端验收。