Smail/docs/日志改造任务.md
smail 23d01798b7
Some checks are pending
Security Checks / security (push) Waiting to run
记录三类日志操作结果的部署与浏览器验收
2026-09-09 10:12:20 +08:00

26 KiB
Raw Blame History

日志存储与可视化改造

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://xuans.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 也已推送。
  • 已完成,等待复审:三数据库兼容存储、30 天滚动清理及旧配置审计幂等迁移;SQLite 已真实执行,MySQL、PostgreSQL 等待专用连接验收。
  • 已完成,等待复审:操作及收发信记录接入;登录完成的身份与二次验证入口补充审计。
  • [✓] 复审通过:运行日志日文件、七天压缩、边界日精确清理和压缩查询;损坏归档保留原文件;归档不阻塞当天已打开日志句柄追加。
  • [✓] 复审通过:具体配置变更明细、敏感字段脱敏及审计导出回归。
  • 已完成,等待复审:日志管理页面,访问权限、筛选、短页回退、过期文件切换、请求竞态回归通过;浏览器已验证分类切换、筛选、历史审计详情和当前运行日志,真实业务写入与压缩文件查看尚未完整端到端验收。
  • [✓] 复审通过:完整构建并同步最新部署包至 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://xuans.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://xuans.com/,配置审计显示 22 条历史记录,运行日志显示 46 条记录、本页信息 44 条、警告 2 条、错误 0 条。刷新查询无页面错误,浏览器控制台未发现错误或警告。
  • 桌面视口 1707×876、窄桌面视口 1100×720 均检查通过:设置内容区和表格没有横向溢出,分页始终在视口内,纵向滚动限制在表格内。现场截图确认表格、标签及次要来源的真实渲染。
  • 已打开警告日志详情,确认完整中文内容和来源;原始记录展开后与消息对应。未知格式不会被丢弃或作为 HTML 执行。
  • 本轮没有真实压缩归档可供浏览器选择,未新增错误业务日志;压缩格式使用相同的行解析路径,错误级别以自动化测试覆盖,不宣称新增了对应真实业务端到端验收。