按顺序读:第 0 节防呆 → 第 1 节手上的活 → 第 2 节别再犯的错 → 第 3 节等长官下的令。
上一会话(dev2)交接。本会话完成 Phase 74 的 A/D/E/F 四批,24 个 commit。
长官原话:「每次换新会话就会变傻就会经常犯错,这个一定要教好。」
下面每一条都是本会话真犯过、被长官或 root 当场抓到的,不是通用建议。
| 我这次犯的错(真事) | 正确做法 |
|---|---|
| 🔴 抠了 CSS 令牌就直接写页面,没并排量 → 长官贴图打回「和方案图做的不一样」,一次揪出 6 处 | 照效果图做页面六步一步不能少:抠源码 → 写 → 渲染 → 量化对比 getComputedStyle → 修 → 截图眼检 |
🔴 量得对 ≠ 看着对:26 项样式量化 24 项一致,但验光方式显示成英文 small_pupil、标签写成"已完成"(图上是"AI 识别") |
量化之后必须 Read 截图肉眼看:文案语义、缺件、漏翻译,量不出来 |
🔴 count(*) 返 0 就说"没有" → 报告「test 没有席位账号」,长官说"我有账号" |
users 表开了 RLS,dev_ro 被挡。0 命中要用同一张表交叉验证(pg_stat_user_tables.n_live_tup),拿旁边的表当对照无效 |
| 🔴 对照组选错:拿 organizations 有 77 行 证明 users 的 0 是真 0 | 两张表权限面不同,不能互为对照 |
| 🔴 说「已实装 · 物理生效」不写环境 → root 抓到:生产根本没那两列 | 状态声明必须点名环境(分支 / test / 生产)· 缺环境 = 缺主语 |
| 🔴 自检查法本身会骗人:溢出检测比"子元素 vs 父元素右缘",父元素被撑大时报 0 而页面真溢出 | 判据用 documentElement.scrollWidth > innerWidth |
🔴 守门测试自身假阳性:扫端点源码禁 quota 字样,结果注释里写"禁止配额"把自己触发了 |
守门测试也要剥注释只查代码行 + 带对照组 |
🔴 凭函数名下结论:见 Depends(verify_api_key) 就判"只认机构、配额落不了地" |
读实现才发现它认席位 Bearer 且返 seat_<id> —— 函数名不是事实,实现才是 |
🔴 猜字段名:以为眼别表是 k1/k2,实际 keratometry_k1/k2;验光方式以为存中文,实际是英文枚举(提交真 500) |
写前 grep,别猜 |
🔴 自检时查法写错反诬文档:\bgap-2\b 把 gap-2.5 算进来,以为文档错了 |
结果对不上时先怀疑查法,不是先改文档 |
cd /home/dev2/doctor-ai-brain/.claude/worktrees/phase74-c-end # ⚠️ 不是主仓
git branch --show-current # feature/phase74-c-end-parent
git log --oneline -1 # 070104ce(24 commit · 领先 test 16 个)
git status --short | wc -l # 0
⚠️ worktree 开工前两件事(否则测试/聊天链路会炸):
cp ../bridge-cse_01SwexbXUUUeRpnregSsBquU/.env .env # 主仓没有 .env
ln -sfn /home/dev2/doctor-ai-brain/data/faiss_indices data/faiss_indices
| 批 | 做了什么 | 环境 |
|---|---|---|
| A 地基 | 席位类型列 / 手机号三端各一 / 机构开关 / 登录返回体加字段 | 已发 test(MR #508) |
| D 家长壳 | 同页分流 / 设置第三分支 / 平板挡板 / 微信多账号弹框选 | 已发 test |
| E 档案 | 5 页面 + 4 端点 + 归属双向隔离 + migration phase74_002 | 仅分支 |
| F 识别 | 拍照识别复用 27B · 502 可控降级 | 仅分支 |
h5_reports;守门外挂 main.py:119,four_l_report.py 零改动;门店 fail-openrequire_role("admin"),seat_service 七件套,主要是加过滤 + 做页面TABLET_FEATURES 冻结测试必须保持绿,另起家长名单,绝不改那个测试require_org_seat 只校验 role、不认 seat_type,而家长子席位物理上就是 role='org_seat'。
RED 阶段真打实证:家长 token 打门店档案端点返 200,拿到门店的孩子档案(跨租户越权)。
⇒ 新增 require_store_seat(纯加法),门店 10 端点换用它;家长侧用 _require_parent 对偶封死。
检查单表单只收「矫正视力」,而记录卡要显示「裸眼视力」—— 中间没有来源,数据链断的。
补齐依据不是拍脑袋:识别 extract 明确提取 va_od/va_os、眼别表有独立列 unaided_va_decimal。
文档写「检查数据只用 vision_exams」,实际实现走 patients + refractive_records。
判定:实现对、文档错 —— vision_exams 生产 88 行 patient_id 全 NULL,它无档案主体。
两处文档已标作废,以 tech §八之二 为唯一事实源。
保留但隔离 —— 不清理(门店平板 refractive_records.patient_id NOT NULL 强依赖)、
不迁移(7 条演示数据)。隔离已实装于分支 · 生产待迁移生效(A/E 批 migration 都还没上生产)。
需求变更六阶段:1/2/3/5 走了;阶段 4 缺两样 —— test-coverage 已补齐;
plan-audit 九轮经长官同意跳过(价值在动手前,代码已完成)。
📌 后面 G/B/C/H 四批严格按规程走:impl 前先写测试清单、先跑九轮审计。
| 令 | 触发什么 |
|---|---|
| 发 test(E+F) | sudo release-to-test "标题" · 发前 push 等 60 秒 · 发完查流水线 + 物理验列 |
| test 上开家长账号 | test 目前没有家长账号,家长端点不了 —— 我自己造不出来(要管理员凭据) |
| 发生产 | sudo release-to-prod --mr <编号> · 🔴 发前必查生产存量 phone 重复 |
| 顺序确认 | G→B→C→H 还是另有优先级 |
🔴 红线:push / 建 MR / 合并 / 发版一次一令,绝不外推(哪怕上文有"可以"字样)。
| 记忆 | 一句话 |
|---|---|
ui-must-measure-not-eyeball |
照效果图做页面:抠 CSS ≠ 做对,必须并排量 + 截图眼检,六步不能少 |
state-claims-must-name-environment |
「已实装/已生效」缺环境 = 缺主语;分支 ≠ test ≠ 生产 |
pitfall-rls-hides-rows-false-zero |
RLS 让 count(*) 恒返 0;对照组必须同表,拿旁边的表无效 |
另更新:project-c-end-phase74-pending(手上的活全量状态)。
~/reports/dev2-ui-design-standard-20260824.md#2fa37c 193 次全站第一),DESIGN.md(它写"改用蓝色",而现网蓝色只有 1 个文件)。DESIGN.md 标作废。尚未提交进仓库,待长官定位置。~/reports/phase74-patients-disposition-for-root-20260824.md云机环境 · 非验收证据。本文所有 commit 号、行数、环境状态均为交接时 git/sudo db-prod 真实输出。