彭峰 f82356bc3c fix: harden backend migration and verify live launch release 5 days ago
..
report-previews bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
README.md f82356bc3c fix: harden backend migration and verify live launch release 5 days ago
dependency-summary.json bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
export-fixture.pdf bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
local-page-probes.json bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
migration-plan.json bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
payroll-cutoff.png bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
probe-local-pages.cjs bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
report-ui-check.cjs bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
security-ui-check.cjs bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
security-ui-results.json bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
student-home-unavailable.png bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
teacher-home-unavailable.png bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
verification-summary.json bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago
verification.log bf7c8b0f01 fix: close three-end launch audit with guarded local verification 5 days ago

README.md

三端审查问题修复与本地验收(2026-10-13)

后续状态:用户追加授权后,配套云函数和数据库迁移已发布并完成真实接口验证,见 后端发布报告。下文保留本地修复阶段的验证记录;前端仍由用户发布。

对应 docs/qa/launch-audit-2026-10-13/README.md,修复基线 6d4e042。学生和老师共用移动应用,分别验证身份路径;后台单独构建和测试。本次没有发布前端、云函数、SQL,没有修改真实会员、课时、工资或同步数据,也没有更新正在运行的 Mac 定时任务。

优先级与处理结果

项目 本地修复 验证与边界
A01 P1 旧密码覆盖新密码 显式一次性迁移资格;密码版本比较;数据库触发器关闭旧回退、原子撤销旧会话;新系统网络错误不启动密码迁移 VM 与 PGlite 测试覆盖首次迁移、拒绝重置账号/未知历史、身份不匹配、并发密码版本和会话撤销。历史不明的既有账号默认关闭旧密码回退,首次登录失败时须由管理员重置;没有批量假定其“从未改密”
A02 P1 迟到 401 清会话 对比请求 token,复核当前会话;断网/503/验证超时保留会话 迟到旧 token、有效当前 token、复核失败及后台会话测试通过
A03 P1 密码规则 新建/注册/改密/重置统一 8–72 位;登录兼容已有短密码、最大 72 位 8/18/19/72 位客户端用例及浏览器 72 位请求;超界拒绝。后台通用重置入口同步限制上界
A04 P1 临时密码 三端返回并执行强制改密;提供当前密码验证、新密码确认、失败保留、成功重新登录 前端与服务端门禁;浏览器模拟首次保存 503、重试成功;改密会撤销该账号其他会话
A05 P1 工资截止核验 改用旧系统直接接口的成功批次/业务编号/校验和;按月份显示差异并逐条记录“保留新系统”依据,经理确认截止来源 缺投影/无凭据仍阻断;只有姓名/录入人差异可不影响计薪;当前月可草稿,整月同步后才可审核;新同步或源记录变化使确认失效。SQL 锁定财务来源及冲突表,提交时再次核验。不调用同步桥,不伪造 ready/checkpoint
A06 P1 依赖 Angular 20.3.33/CLI 20.3.39、TS 5.9、SheetJS 官方 0.20.3、html2pdf 0.14、jsPDF 4.2 生产依赖扫描 0 条;完整树仍有 12 个开发工具条目,均由同一 braces 公告传播,详见下文;Excel/PDF/两端构建已回归
B01 P2 失败显示假零 首页及用户中心无成功查询时显示“—”;余额刷新,缓存结果标明上次时间和失败 三端故障页面与状态测试;不把空字符串当真实零
B02 P2 错误与空状态混淆 学生/教师课程列表及后台排课将加载、失败、真空、保留旧结果分开 503 浏览器矩阵无“错误同时宣称无排课”的误导;首次未成功不显示零统计
B03 P2 隐私注销 学员申请/查询,管理员分页处理,版本冲突与帐套隔离;实际会员注销后才能登记完成;协议入口统一文章 120242/120243 SQL 重复申请、跨帐套、版本和完成前置条件通过;申请不等于删除完成。协议内容及保留期限仍由运营发布者确认
B04 P2 请求悬挂 三端请求统一 20 秒超时;会话复核 10 秒;写入超时提示结果待核对,无自动重放 悬挂请求测试释放等待;教学保存沿用原幂等键;后台操作失败后应先刷新核对
B05 P2 Excel 解析 5 MB 压缩体、20 MB 实际展开、2000 ZIP 条目、101 列;会员 200 行,词库 2000 行;只接收 xlsx 解压前目录核验及流式实测展开量;伪造展开大小、超行/超体积、正常压缩文件测试通过;浏览器大文件拒绝/正常预览通过
B06 P2 外链 HTTPS 精确主机名单、拒绝凭据/端口及异常编码;iframe 仅必要脚本,去掉同源/弹窗/下载能力 URL 边界测试通过。允许域名为 test.fmode.cn、a018.2018.z01.com;旧外部页依赖额外权限的功能需发布者复核,不能任意扩大名单
B07 P2 会话同步 监听跨标签身份/退出;身份切换清教学草稿并重新加载;正常退出撤销当前服务端 token 单元测试覆盖跨标签切换与撤销请求。主动改密撤销全部会话;普通退出只撤销当前会话
B08 P2 测试过期 更新课程绑定接口和缓存键;固定月份时钟;修复 HEAD 中三条测试错误嵌套;提供 verify:local 完整门禁 在工作区和独立暂存树副本分别检查,避免靠未提交修改才通过
B09 P2 同步告警 最终失败通知、24 小时去重、恢复通知、保留差异显著增长提醒;只含固定文字和汇总数 注入通知器测试通过。安装器包含新模块,但本次没有重新安装,当前活动任务仍是旧运行器;Mac 通知权限与自然 23 点触发待发布时验收
B10 P3 诊断 两端安全本地错误缓冲(50 条)、版本/请求编号、异常恢复提示、诊断下载;网关失败日志关联同一编号 不记录请求正文、token、学员资料或异常原文;测试脱敏、容量和提示去重;浏览器同时断言 pageerror 和 Angular 运行错误缓冲
B11 P3 可访问性 登录持久 label、触控目标;后台主要图标命名;工资/专项/词库弹层焦点、Esc 与回焦 浏览器验证聚焦/Tab 圈定/Esc/回焦。属于关键路径抽验,不是全站无障碍认证

本地验证结果

最终独立暂存树验证及命令退出状态见 verification-summary.json。

  • npm run verify:local:移动端 209、后台 261、服务端 169 项通过,0 失败;两端生产构建通过,11 个云函数定义语法验证通过。
  • 离线 action 清单:requested 118、implemented 104、blocked 21、missing 0。三类有交集,不能相加当覆盖率;21 个已明确关闭的历史功能没有因此变成已实现。
  • 故障矩阵:375/1366 宽,学生首页/课表/个人中心/改密、老师首页/课表、后台工作台/排课/工资;18 个页面状态检查,以及两次未登录跳转检查。无横向溢出、无浏览器或 Angular 运行异常。
  • 学习报告、预约详情、报告编辑:375/812 宽及横屏,取消、跳转修改、保存一次通过,表单无溢出。
  • 72 位登录与强制改密重试、工资差异/月份确认、弹层键盘操作、Excel 超限/合法导入预览通过。
  • 真实 html2pdf 库生成 3 页隔离测试 PDF(export-fixture.pdf),不含客户数据。
  • 浏览器所有外部网络被阻断,接口是隔离模拟数据。PGlite 是本地数据库,不是生产 PostgreSQL;没有通过模拟请求给真实学员结课、扣费或发工资。

升级后仍有原项目样式预算和 CommonJS 警告。Angular 20 的输出使个别既有组件 CSS 略超过 20 kB,单组件错误阈值调整为 22 kB、8 kB 警告保留;这不是体积或速度优化结论。真实设备、微信音频、长课断网恢复、生产吞吐及端到端性能仍需对应环境验收。

开发依赖剩余风险

dependency-summary.json:生产树公告 0;完整树 12 个 high 条目来自 braces 深度嵌套模式栈耗尽公告,检查时 registry 最新 3.0.3 仍受影响、无修复版。没有强行降级 Angular 工具链去消除扫描数字。

该包只进入构建/测试链,浏览器生产包不调用它。开发服务器和 Karma 仅绑定本机回环地址,构建只使用可信仓库中的 glob;不应把开发服务器暴露公网或把用户输入作为构建模式。这里记录限定范围的风险处置,不宣称完整依赖扫描为零或该公告已修复。出现修复版后仍需升级复测。

你自行发布的顺序

  1. 备份数据库、云函数基线、前端旧包和现有 Mac 运行器,确认可恢复。选择维护窗口,停下直接同步写入和账号/财务修改;不在执行同步途中改数据库。
  2. 环境须已具有现行工资及直接同步 SQL 基础表/函数。node scripts/migrate-launch-fixes.mjs --plan 是离线清单;只有发布时才执行 --apply。脚本从环境读取 XIAOSHU_MASTER_KEY 与实际超级管理员的 XIAOSHU_MIGRATION_OPERATOR_TOKEN,不把密钥写入文档/任务;先添加 Parse 字段元数据,再在同一事务应用四份 SQL,最后删除临时迁移函数。失败时不要继续发布。
  3. SQL 通过后,发布本次云函数代码,版本应为 2026-10-13-launch-security-v7,再核对真实 migration_status 和新增改密/注销 action。旧线上网关尚未包含本次能力;本地页面接现有线上网关时,不能把它当新版功能验收环境。
  4. 从同一 Git 版本 npm ci && npm run verify:local 生成前端,发布 dist/xiaoshu-mobile/browser、dist/xiaoshu-admin/browser。核对 HTTPS、域名、代理/CORS、SPA 回退和缓存;登录失败且密码迁移历史不明的旧账号走管理员重置,不批量重开旧密码回退。
  5. 云端稳定后,在这台 Mac 执行 npm run sync-worker:install-mac 更新原 LaunchAgent,带入告警模块;安装的 RunAtLoad 会触发检查,不能把它当纯拷贝。凭据仍用已有 0600 文件,沿用直接接口;nightly/once/start 三个入口均已收敛到同一个安全执行器(start 为单次受控执行,持续调度由 LaunchAgent 完成)。检查 macOS 通知许可,用隔离通知或故障演练验收。实际 23 点执行仍要求 Mac 开机并登录。
  6. 用隔离学生、老师、管理员完成登录→改密→开课/排课→当天开始→多词库学习→结课→修改报告→学生评价→工资核验。核验后先生成草稿,月底来源齐全再审核;无需制造真实发薪。随后核对下一次 23 点自然触发回执、失败恢复、iOS/Android/微信与音频/PDF。

SQL 和新版网关是配套变更;回滚不能只撤掉账号保护触发器。应维护窗口内按已备份兼容版本成套恢复并重新验证密码、会话及财务门禁。

复现与交付范围

  • 根目录执行 npm run verify:local,全部离线验证,不自动部署或同步生产。
  • 本地开发服务使用 4202/4302 时,执行本目录三个 *.cjs 浏览器脚本;需要 Chrome 和 Playwright(可用 PLAYWRIGHT_MODULE 指定)。只允许本机地址及模拟接口,不能替换成生产地址跑写操作。
  • 本目录截图、JSON、PDF 均为隔离测试证据。私有凭据和真实客户原始数据不入库。
  • Git 仅交付本次修复;保留原工作区的学习页修改、原测试重排位置及旧迁移产物。暂存版本将错误嵌套的三条测试独立移到 describe 末尾,未采纳用户原来的另一种重排位置。