新会话:从头到尾读完再说话。变傻的真因是「没查就说」——每条硬事实都附了验证命令,引用前先跑;memory 和交接件只是参考,代码赢。
上一份(9-05):~/reports/CLOUD-SESSION-HANDOFF-20260905.md(第 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 | — |
git status 确认没留半截。| 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 缺失现在显式"生成失败"可重试(模型抽风可见,周思源首次重生成失败重试成功)。
test-inspect deploy 见新 commit→等 10 分钟→再 release-to-test 发 27141210→再验。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)。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 次 → 历次对比 | 三个按钮都显示"年增率 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 各一行(要门店重新"复制本次分析→推送"一次才是新格式) |
pg_ctl restart -w 后台挂 6.5 小时无通知 → 用 pg_isready;长命令加 timeout。next build 把 40G 根盘撑满;pip 缓存 3.6G/npm 788M 已清;本机不跑 build。pkill -f "<含在自己命令行里的串>" 会杀自己(exit 144)。grep -c 命中 0 返回码 1 会掐断 && 链 → verify 命令串用 ;。cd <路径> &&,含 [id] 的路径加双引号。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 "