42 后端测试 35过+7预存失败(零新增回归);tsc/build 0;14路由 boot 0报错。 两件移交:2组 migration 低峰 apply + pipeline 巨页拆分待确认。附 apply 操作指引。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7.1 KiB
还原 + 性能落地 · 完成报告
落地两份审计(
UI还原对比报告-AirShelf-2026-06-19.md+性能审计报告-AirShelf-2026-06-19.md)的全量 P0+P1+P2,外加注册+邀请制新功能。全程本地 dev 分支、未 push、未 apply 远程库迁移。 计划:~/.claude/plans/gleaming-sleeping-ullman.md。日期 2026-06-19。
一句话
Wave 0→4 全部落地(11 页逐页还原 + 邀请制新功能 + 性能根因 + 系统 CSS + 后端索引/N+1 + pipeline 视觉)。每步 tsc+build+无头浏览器走查+截图、0 console error、真实数据缺一律降级不造假。两件留给你:① 2 组 migration 低峰 apply 远程 MySQL ② pipeline 巨页拆分(高风险,需你确认再做)。
逐波验收
Wave 0 · 性能根因 — ✅ (commit 8a0ae6a)
| 项 | 状态 | 证据 |
|---|---|---|
| MySQL 连接复用 CONN_MAX_AGE=300 | ✅ | 上移 base.py;实测 ENGINE=mysql/CONN_MAX_AGE=300/HEALTH=True/connect_timeout=5 |
| 视频轮询脏检查(消除每 5s 整页重渲染) | ✅ | App.tsx pollVideosQuiet JSON 脏检查;纯前端不碰生成 |
| 图懒加载 + 隐藏 tab 停纯读轮询 | ✅ | ai-tools img lazy;审核/在途资产轮询加 document.hidden |
| ⏸️ 视频轮询 hidden-guard / products·projects 服务端分页 | 偏离 | 前者碰生成(rule3)、后者需配分页器→挪 S7;已记进度文档 |
Wave 1 · 系统性 CSS/组件 S1-S9 — ✅ (74e3c81 + 42c3c04)
- S3 Toast 归正(右下单橙滑入)· S4 弹窗进场动画+ESC(共享 useOverlayTransition)· S9 账户表去横线
- S1 双主题清污染(dashboard 暖橙泄漏修掉,实测
.shortcut .ic=rgb(250,93,25)=--heat)· S2 mono 工具类 · S7 富分页器 · S8 hero 字重 700(核 V1 实测确为 700) - 证据:pixelmatch account 1.23%/team 2.13%;computed-style 实测橙=heat、字重=700;14 路由 boot 0 报错
Wave 2 · 后端查询治理 — ✅ (99a442e;part2 移交 8e6c6f0)
- part1 ✅:5 模型 7 条复合索引(只 makemigrations 看 SQL,未 apply 远程库)+ 消息中心 N+1(type_counts 6 count→1 聚合、项目花费 N+1→1 预聚合);apps.ops 测试 3/3
- part2 ⏸️ 移交监督:poll-reviews 挪 Celery / 写 action 瘦身 —— 均落 rule3「严禁碰生成/轮询业务逻辑」+ 对已验证功能动刀无法 loop 内 e2e,附落地方案
Wave 3 · 逐页还原 P0/P1 — ✅ 11 页(0083918/38f56cb/da8c6a7/378b0a3/9643f9b)
真实数据缺口一律降级不造假(Project无owner→去列、TeamMember无完成数→去列、非person无review_status初值、dashboard无月度预算、资产「移动到」需api加category、消息log需后端字段)——逐条记进度文档,移交监督。
Wave 3.5 · 注册 + 邀请制(新功能) — ✅ (ba855cc/c0a8582/b82c4d3)
- 后端:Invitation 模型 + 端点(生成/列/撤销,权限复用 can_manage_team)+ RegisterSerializer 加 invite_code(有效码→幂等加成员+标used+跳过额度发放;无码→开新团队)。apps.accounts 测试 5/5(含「凭码加入同团队/角色额度对/不重复发额度/未知码400/普通成员生成403」)
- 前端:auth-screen 登录+注册双态(注册=团队名/用户名/密码/确认/邀请码,无邮箱)+ 第三方+切换行;团队页「邀请成员」生成码弹窗。走查:登录秒进702ms/0邮箱字段/切换URL→register/邀请弹窗 ✅
- 认证定调贯彻:全栈无邮箱,username 主标识
Wave 4 · P2 + pipeline 视觉 — ✅ (09e67a5/1c5606a);拆分 ⏸️ 待确认
- pipeline 视觉签名(纯视觉/rule3 合规):脚本头 model mono 签名、视频卡 meta 三段(时长·分辨率·~¥0.45)、Seedance 预估「约15秒」、时间轴 zoom 50-200
- P2:账户 25 处 mono 字号对照 V1 收回 9-11.5px 分级 · 商品卡缺三视图徽标(真实字段判定)
- ⏸️ pipeline 巨页拆分(3500 行→5 子组件):计划自身写明「回归风险过高可单列后续、改前与用户确认」。无人值守乱拆会危及你看重的管线行为 → defer,待你确认再做(建议配监督逐一回归脚本/故事板/生成/导出/拖拽)
测试基线(Wave 5)
npx tsc --noEmit→ 0(每波)·npm run build→ 0(每波)- 后端
DB_ENGINE=sqlite manage.py test→ 42 测试,35 过 + 7 失败;7 失败 = 预存的 image provider 路由问题(stash 改动跑 baseline 复现同样 7 条),零新增回归;新增 3 条邀请测试全过 - 14 路由无头 boot 全过、0 console error、登录秒进无邮箱
- 截图存档:
_qa_shots/wave{0,1,1b,3-batch1..4,35,4}/
⚠️ 移交你拍板/动手的事项(我按规矩绝不自作主张)
1. 两组 migration 低峰 apply 到远程 MySQL
索引 + Invitation 表只生成了迁移、看了 SQL,没 apply 你的远程库(rule 3)。apply 后「邀请制生成码 + 凭码注册」才能真·端到端(逻辑已被后端 5/5 测试在 sqlite 证)。低峰执行:
cd core/backend
# 先干跑看将执行的 SQL(不落库):
DB_ENGINE=mysql ./.venv/Scripts/python.exe manage.py sqlmigrate accounts 0003
# 确认后 apply(远程 ALTER 加二级索引,MySQL8 多为 online,仍建议低峰):
DB_ENGINE=mysql ./.venv/Scripts/python.exe manage.py migrate accounts # Invitation 表
DB_ENGINE=mysql ./.venv/Scripts/python.exe manage.py migrate assets billing projects ai products # 7 条复合索引
# apply 后重启后端(当前是 --noreload),邀请制即可真跑
2. pipeline 巨页拆分(高风险)
要做就单开一轮、我配监督逐一回归。你说一声。
3. Wave 2 part2 暂缓项 + 真实数据缺口
poll-reviews 挪 Celery / 写 action 瘦身 / 各页真实数据缺字段(owner/完成数/review_status初值/log)——附了落地方案在进度文档,要补哪个说一声。
没做的(明确范围,非遗漏)
- git push:全程没 push(rule 1),都在本地 dev,commit 链 8a0ae6a→1c5606a
- 平台级后台管理页(计划定:本期不做、单独立项)· 商品详情任务记录Tab(V1 hidden 死代码,不还原)· 手机号注册(本期不做)