交付出件箱

← 返回出件箱

🔴 云机会话交接件 · 2026-09-06 晚(终版 · B线视光档案 + 视宜生补录 + 近视预测立项)

新会话:从头到尾读完再说话。变傻的真因是「没查就说」——每条硬事实都附了验证命令,引用前先跑;memory 和交接件只是参考,代码赢。
上一份(9-05):~/reports/CLOUD-SESSION-HANDOFF-20260905.md(第 0 节防呆表仍有效,本文件覆盖其后全部增量)。

第 0 节 · 防呆速查表(说错任何一条 = 事故)

事实 值 自证命令
工作 worktree /home/dev2/doctor-ai-brain/.claude/worktrees/s2-rework git -C <路径> branch --show-current
分支 · tip feature/stage2-rework-vf-ui2 · 27141210 · 工作区干净 git status --short(空)
🔴 生产 一次没发过,本批也不发(长官令) 别信任何"已发生产"
test 上现在是 8b7f0fbf(= MR#632 合并,含 4 commit 到 58b6571d,9-06 14:28 上线) sudo test-inspect deploy 第一行
分支比 test 多 4 commit:5fe6df31 ce76f3ee 00bbfb40 27141210 git log --oneline 58b6571d..HEAD
🔴 MR#633 已创建(源 tip 00bbfb40,含前 3 个)但自动合并 405 卡住,已报 root 手工合并;合并后 27141210 还要再发一次 test git --git-dir=/srv/git/mirror.git merge-base --is-ancestor 00bbfb40 refs/heads/test && echo 已合
部署判据 只认 sudo test-inspect deploy,云效红绿无视;上线后等 10 分钟再请验 —
发 test 命令 在 s2-rework 里 sudo release-to-test --yes "标题"(脚本自己 push codeup;桥 outbox→mirror 约 2-5 分钟,Everything up-to-date/"跟 test 一致"可能是假象,等桥) 桥探活 git --git-dir=/srv/git/mirror.git cat-file -e <sha>^{commit}
报告秒读守门 pytest tests/unit/test_report_scene_prompt_baseline.py -q → 14 passed;近视样本 md5 0f20dfec4d58adbcc26d82d31105967e(第 6 节 canonical 命令) —
四张禁语表 42/38/26/16(ast 数,AnnAssign) 第 6 节
红线文件 md5(本批必须不变) four_l_summary_service.py d9458a75… · parent_patients.py 60b80cb2… · four-l-detail-sheet.tsx dcd79643… · four-l-mapper.ts e7f38502… md5sum
后端守门 10 个测试文件 164 passed(见第 6 节命令);PG 共享内存丢 → 5 errors,pg_isready 后重跑,别用 pg_ctl -w(挂过 6.5h) —
前端守门 tsc --noEmit 0;vitest run __tests__/tablet-refractive- 165 passed / 4 failed(4 红 = frame4-conclusion 存量,改前就红);登录 vitest run seat-login seat-wx wx-oauth 67 passed;vitest run StoreConclusionCard 4 passed 都在 web/ 目录跑
测试孩子(test 库) 周思源 patient 662d89ab-41e5-4b60-b94d-93709c7c6212(我造的,6 条 2025-07-06→2026-09-06,可随意重新生成);刘予曦(长官的,9-06 长官用日期滚轮补了 2024-09-02/2025-09-01/2026-03-02 三条老记录);王小甜(长官的) sudo db-query test "..."
test 门店账号 0034202607 / 814017(API 登录 POST /api/seat/login;Playwright 见 memory how-to-open-real-h5-pages) —
本机 27B 连不上(403)→ prompt 改动零真机验证;根分区曾 100% 满,现 ~5G 空闲,别跑 next build;web/node_modules 软链目标 phase74-c-end 被我删了,s2-rework 已 npm ci 补回,其他 worktree 用到时 npm ci df -h /
主模型 长官在用 fable-5-1;memory 说本项目医疗内容撞分类器,遇到就换 Opus —

第 1 节 · 长官这两天立的规矩(违者重罚 · 全部有实例)

  1. 「这是你认真思考后给我的吗?」= 你有推断没验证 / 有洞没补 / 改口太快。本会话被问 6 次,每次都真有问题(推荐 28% 又推 v3 又推 v4 再改回 v2;年增率分档自相矛盾;把 haiku 误读当结论)。正确反应:停下,把没验的前提列出来,先查再答;不要为了显得笃定硬撑。
  2. 先沟通,再改:长官说"先沟通/先不用着急改"就停手;实施 agent 被中断后先 git status 确认没留半截。
  3. 一次只问一个简单问题;回复短、用表格、带表情;"没看懂"就用大白话重说(本会话被"没看懂"打回 8 次:少用术语、少用代号、先说结论)。
  4. 改前必 verify(物理 grep · 8+ 维 · 带对照组 · 不漏证据);改后 4 步 verify + 守门;修完别急着发 test,等长官令;生产零发。
  5. 派 agent 只一层;写码 sonnet、检索 haiku;agent 回来自己跑 verify(本会话 agent 虚报 3 次:100 vs 89 passed、"9-04 已修"误读、"md5 是注释串")。
  6. 报告秒读不动(报告秒读 L1 掷骰子长官定不改);视光档案改动 scene 隔离;共用件不动。
  7. 长官已定不做:趋势图红点、"距同龄均值"小字、"共几次检查"字样、门店端检查单传图(memory todo-store-exam-image-upload)、L4 复述度数。
  8. 图表定稿:保持现网两层结构,渐变 28%→6%(v2),不换结构;眼轴一律两位小数。

第 2 节 · 本批代码(分支上 8 个 commit,按时间)

commit test? 内容
53e1ae2f ✅#632 历次对比 3 段→2 段(数据后端直出 + AI 只写判读)
f7920ee1 ✅#632 A:三窗口按 ≥183/≥365 最近一次/第一次比;首行"对比 X→Y·隔 N 天";年增率分档;合并年化=183;泄漏治理
9c55c4d2 ✅#632 B:红光铁律(7-18 岁已近视强制启动)·角膜散光 K2−K1 行·大远视 L1/L3 按 scene 拆用家长端软话·不喂趋势·4L/补剂必填+finish_reason·守门 case e
58b6571d ✅#632 C:frame4 新契约展示;删死面板 comparison-panel/record-summary-rail+3 旧测试;date-wheel 月日上限条件化+todayStr 本地;趋势图 6 处
5fe6df31 ⏳#633 对比表两位小数;interval_days 北京日历日差;历次对比 prompt 接红光铁律(red_light_required);气泡夹紧
ce76f3ee ⏳#633 年增率只看跨度(≥183 显示·<365 估算·all≥365 年均);「重新验证微信身份」3 按钮+3 处 401 先 clearWxIdentity() 清四项(11 维 verify 过)
00bbfb40 ⏳#633 plan_adjust 无条件禁逐条重述 L1-L4,未变项只写"维持现方案"
27141210 ❌未发 家长端 StoreConclusionCard 分段渲染(【小标题】加粗、L1-L4 各行、老文本兜底)

真打结论(长官 9-06 重新生成周思源/刘予曦/王小甜):红光铁律、角膜散光行(王小甜 1.62/1.95→中度散光,不再"曲率正常")、大远视软话、三窗口基准、年增率估算/偏快、脏数据复测警示、4L 必填全部生效。4L 缺失现在显式"生成失败"可重试(模型抽风可见,周思源首次重生成失败重试成功)。

第 3 节 · 悬着的事(按优先级)

  1. MR#633 等 root 手工合并(已发消息);合并→test-inspect deploy 见新 commit→等 10 分钟→再 release-to-test 发 27141210→再验。
  2. 视宜生眼科结算补录:脚本+凭证+说明书齐了,等 root 暂存进生产容器跑 dry-run→长官看数→批准闸→commit。说明书 ~/reports/to-root-backfill-shiyisheng-20260906.md;脚本 worktree backfill-sys 分支 feature/backfill-shiyisheng-offline commit 3241db51(未 push);脚本 sha256 275822f2…b10d75;凭证 ~/inbox-vouchers/凭证归档/视宜生眼科-付款凭证-2380-20260902.jpg sha 4eae4f00…d7578c。口径:UPDATE 现有档案 10000011(不新建)·core_org_id=22·2380·付款日=开通日 2026-09-02·付款方 四川视宜生眼科诊所有限公司·1 席位·到期 2027-09-03 08:13(对齐席位)·线下转账(门店对公打款到平台)·凭证附件按凭证图(上面付款方/日期与口径不符,长官明令"凭证只作附件")·确认人先例留空·微信待支付单不碰·分成快照按现行费率 一级50−二级30=20%(714/476)。
  3. 近视预测(新立项 · 9-06 长官提):三方接口 POST https://store.myopia88.com/dev-api/system/openapi/childArchives/eyeAxisPredict,Header JTSJ-API-Key-Encrypted(RSA 加密的 API-Key),Body age("9岁"/"9岁3个月")+eyeAxisOd/Os+odK1/odK2/osK1/osK2(全字符串),返回每眼四条到 18 岁的曲线(Almyo 近视临界/Alaccept 防控优秀/NoAlaccept 不防控/Alhealth 健康远储)+sysAgeVos 年龄序列+odMin/Max+CrossPointAge(交叉点年龄)+NoAlacceptValue(18 岁不防控值);错误码只有 200/500。长官拍板:门店端+家长端都做;不分几个 L,按"整体防控"(不防控线 vs 防控线 + 我们自己的实测点叠上去 = 独有价值);家长端措辞另设计。待办:①三方问题清单(正式地址/RSA 公钥+填充+示例/API-Key 申请/调用量计费/年龄步长范围/交叉点定义/超时;顺带问"防控优秀线是否=全套 4L")②root 放行云机/test/生产出网 store.myopia88.com:443③出 spec+效果图(门店端「近视预测」页签在眼轴趋势旁;图=四条线+实测点+左右眼切换+大字"不防控预计 X 岁达临界";recharts;API-Key/公钥只在服务器 .env;每条完成记录自动算一次并存 JSON)④按需求变更 6 阶段流程立项。4L 权重一句话(长官要拿去问人):「在'不防控'和'全套 4L 防控'的眼轴增长差距里,红光、补光、远像、离焦镜各能占几成?叠加要不要打折?」
  4. 挂账不做:报告秒读 L1 掷骰子;报告秒读 in_progress 误判;门店端传图(memory 有现状清单)。

第 4 节 · #633 + 27141210 上 test 后验收清单(给长官)

看谁 看什么
周思源第 4 次 → 历次对比 三个按钮都显示"年增率 0.42 估算";方案调整不再写"暂不启动 L1/下次评估 L1";基准/本次列 23.80/24.15 两位小数;"隔 304 天"
周思源第 6 次 近半年"对比 2026-02-06 → 09-06 · 隔 212 天"(不再 211)
眼轴趋势 → 裸眼视力 右眼 0.3 气泡回来了,和 0.4 错开
刘予曦 → 历次对比 → 方案调整 不再逐条"调整L1/L3/L4",未变的写"维持现方案"
登录页 放 10 分钟→点登录报"令牌无效"→点"重新验证微信身份"→出授权落地页→授权→登录成功
家长端 → 检查单详情 → 门店结论 分段显示:【4L 防控方案】等小标题加粗、L1-L4 各一行(要门店重新"复制本次分析→推送"一次才是新格式)

第 5 节 · 本会话踩的坑(别重蹈)

  1. pg_ctl restart -w 后台挂 6.5 小时无通知 → 用 pg_isready;长命令加 timeout。
  2. next build 把 40G 根盘撑满;pip 缓存 3.6G/npm 788M 已清;本机不跑 build。
  3. pkill -f "<含在自己命令行里的串>" 会杀自己(exit 144)。
  4. grep -c 命中 0 返回码 1 会掐断 && 链 → verify 命令串用 ;。
  5. haiku 子代理跑错目录(在 bridge worktree 跑,报"文件不存在/md5 不同")→ 派单时每条命令写死 cd <路径> &&,含 [id] 的路径加双引号。
  6. 实施 agent 虚报/误读三次(见第 1 节 5)→ 判据命令自己跑,尤其 canonical md5(第 6 节)。
  7. 粗活守卫 10 分钟 >8 次锁工具 → 派一个 haiku 做机械活即解锁,别硬等。
  8. 登录 401「微信身份令牌无效或已过期」= 令牌 10 分钟寿命;关浏览器从微信入口重进即可;非本批引入。
  9. 我先说"页面改不了检查日期"是 grep 范围太窄下的全仓结论(被长官截图打脸)——报 0 命中必写范围。

第 6 节 · 验证命令(照抄可用)

W=/home/dev2/doctor-ai-brain/.claude/worktrees/s2-rework
cd $W && git status --short && git log --oneline -4
# 报告秒读守门(14 passed)
python3 -m pytest tests/unit/test_report_scene_prompt_baseline.py -q | tail -1
# 四表(42/38/26/16)
python3 -c "
import ast
t=ast.parse(open('app/services/four_l_summary_prompt.py',encoding='utf-8').read())
print([(n.target.id,len(ast.literal_eval(n.value))) for n in ast.walk(t) if isinstance(n,ast.AnnAssign) and isinstance(n.target,ast.Name) and 'PHRASES' in n.target.id])"
# 报告秒读近视样本 md5(0f20dfec4d58adbcc26d82d31105967e)· 这是 canonical 命令,别换构造
PYTHONPATH=$W python3 -c "
import datetime,dataclasses,hashlib
from app.services.four_l_summary_prompt import build_summary_messages, SummaryHint
v={x.name:None for x in dataclasses.fields(SummaryHint)}
v.update(exam_date=datetime.date(2026,9,4),age_years=10.0,myopia_level='低度近视',sph_od_d=-2.0,sph_os_d=-2.0)
m=build_summary_messages(SummaryHint(**v),[],scene='report')
print(hashlib.md5((m[0]['content']+'\n<<<USER>>>\n'+m[1]['content']).encode()).hexdigest())"
# 后端守门(164 passed)
timeout 240 python3 -m pytest tests/unit/test_report_scene_prompt_baseline.py tests/unit/test_refractive_prompt_batch_9_06.py tests/unit/test_refractive_comparison_windows.py tests/unit/test_refractive_comparison_red_light.py tests/unit/test_refractive_comparison_two_section.py tests/unit/test_refractive_ai_comparison.py tests/unit/test_refractive_analysis_correctness_fix.py tests/unit/test_refractive_second_round_fixes_9_03.py tests/unit/test_refractive_topic_guard.py tests/unit/test_four_l_summary_prompt.py -q | tail -1
# 红线 md5
md5sum app/services/four_l_summary_service.py app/api/parent_patients.py web/app/h5/chat/components/four-l-detail-sheet.tsx web/app/h5/chat/lib/four-l-mapper.ts | cut -c1-8,33-
# 前端(在 web/)
cd web; npx tsc --noEmit; echo tsc=$?; npx vitest run __tests__/tablet-refractive- 2>&1 | grep -E "Test Files|Tests "

第 7 节 · 相关文件