2026-08-24 · dev2 · 按长官 8-24 口径重排(v1 见
c-end-dev-roadmap-20260822.md)长官三条新口径:
1. C 端手机端优先做,平板端压到最后 —— 因为不知道做的快慢,先减一部分工作量
2. 门店端设置(开通入口)平板端 + 手机端都要
3. 🔴 门店端零回归是铁律 —— 现有功能(你问我答 / 报告秒读 / 近视的世界)绝不能受影响;
能复用的复用,但不能改到门店端。门店端已有真实客户在用,一旦影响就是大事故。
origin/test · 全带对照组)| 复核项 | 结果 | 对照组(证明查法有效) |
|---|---|---|
| Phase 74 号是否被占 | 0 命中 · 仍空闲 | Phase 73 命中 4 文件 ✅ |
seat_auth.py 有无 seat_type |
0 命中 · 缺口仍在 | 同文件 org_features 命中 8 ✅ |
enable_parent_subseat 是否被人加 |
0 命中 · 未被占 | enable_refractive_record 命中 32 文件 ✅ |
| 门店端设置页是不是两套 | 一套 web/app/h5/settings/page.tsx |
全目录仅此 1 个 page.tsx ✅ |
| 家长端两个壳的物理入口 | 手机 h5/chat/page.tsx · 平板 h5/tablet/page.tsx + h5/tablet/pane/page.tsx |
ls-tree 实列 ✅ |
结论:v1 路线图的技术口径全部仍成立,只需按长官口径调整顺序与批次划分。
门店端设置页平板和手机共用同一个文件,页内只有一处分叉——
page.tsx:38/43 读 ?from= 决定返回目标(平板经 ?from=/h5/tablet 带入,手机不传则回 /h5/chat),
没有 isTablet 之类的两端分支。
⇒ 长官要的「门店端设置平板端 + 手机端都要」= 写一份、响应式覆盖两端,不是两倍工作量。
效果图 §8 已经是按这个画的(平板 4 张 + 手机 4 张,同一页面两个宽度)。
| 批 | 内容 | 端 | 依赖 | 分量 / 风险 |
|---|---|---|---|---|
| A · 地基 | users.seat_type 字段 + 登录返回体加 seat_type/visible_features + enable_parent_subseat 机构开关 |
后端 | 无 | 小,但动登录链路 🔴 门店零回归硬要求 |
| B · 门店端开通 | 设置页开通块(gate 在机构开关后)+ 两步开通弹层 + 开通历史 + 子席位详情 | 平板 + 手机(一份实现) | A | 中 |
| D · 家长端壳 | 名单制下发 + 首页 + 侧栏/会话历史 + 设置页第三分支堵越权 🔴 | 仅手机端 | A | 中 |
| E · 个人档案 | 档案 CRUD + 检查记录十一段 + 眼轴曲线(recharts) | 仅手机端 | D | 🔴 本期最大 |
| F · 识别复用 | 调 VLLMClient().extract() 回填 + 图片就近上传就地回填 + 存档 |
手机端 | E | 小(一行调用已验) |
| G · 秒读配额 | 6 次 / 账号 / 开通起 365 天,解析成功才扣,失败回滚 | 后端 | A | 中(新建模型) |
| C · PC 后台 | 子席位管理页(平台管理组)+ 家长端模块设置 + 机构弹框新开关 | PC 后台 | A | 低 · 碰不到门店端任何代码 |
| H · 家长端平板 | 复用 h5/tablet/pane 壳,把 D+E+F+G 的成果适配到平板 |
仅平板端 | D~G | 中 · 最后做 |
tablet/pane,长官原话:「做 C 端的时候千万一定不要影响门店端的功能,是铁律必须要遵守的。
但能复用的复用,千万不要影响现在这个,因为现在门店端已经有客户在用了,一旦影响了就是大事故。」
总原则:只做加法,不做改法。 复用 = 调用它 / 在它旁边加一支,不等于改它。
| 风险点 | 具体守法 |
|---|---|
A 批动登录返回体 seat_auth.py |
新字段只加不改,老字段一个不动;seat_type 加 server_default='store' ⇒ 存量席位全部落 store,门店登录行为与今天逐字节一致 |
前端功能名单 menu-sidebar.tsx TABLET_FEATURES(:41-50)+ filter(:72) |
🔴 门店端那份一行不动,家长端另起一份名单(D-D 已拍板) |
设置页分叉 settings/page.tsx:176/178 |
只新增第三支 seat_type==='parent';原 {isSeat && <SeatStoreCard/>} 与 {!isSeat && …} 两支一行不改 |
| 报告秒读五个文件 | four_l_report.py / four_l_orchestrator.py / four_l_summary_service.py / four_l_summary_prompt.py / vllm_client.py —— 🔴 只调不改 |
| 图片类型枚举 | 不动 classify 的 refraction/axial/oct/fundus/unknown(改了就动到门店端报告解读) |
| 秒读配额 | 只在 seat_type=='parent' 分支扣减;门店席位不进该分支(对门店 fail-open) |
| 机构开关 | enable_parent_subseat server_default false opt-in ⇒ 没开的机构完全无感,存量零影响 |
| 检查数据落表 | vision_exams 只加 nullable 列;refractive_records(门店平板端在用)不动、不迁移、不双写 |
| 活动日志 / 图片归属 | _ACTOR_TYPES 加一档子席位 + 反向清查所有按 org_id 聚合的读接口,别让家长数据混进门店统计 |
| 档案搜索 | 现端点全 require_org_seat + search_patients(seat["org_id"]) ⇒ 加归属标记(seat/parent)+ 搜索过滤,别让门店搜到家长档案 |
用 how-to-open-real-h5-pages 那套方法开真页面,逐条打勾:
enable_parent_subseat 时,设置页看不到开通块(对照组:开了就看得到)⚠️ 第 8 条必须带对照组 —— 只验"看不到"证明不了 gate 有效,可能是整块没渲染出来。
codeup/test 建 feature/phase74-c-end-parentworktree-bridge-* 落后 712 个提交,不能拿来发版)flywheel-business.md 写需求;flywheel-impl.md + flywheel-progress.mdc-end-full-mockup-20260821.html → docs/superpowers/demos/phase74-*.htmlc-end-ocr-reuse-verify-20260822.md(27 维已验),不重查plan-audit 九轮至连续两轮零发现不再重复抄,见 v1 第四节与 c-end-ocr-reuse-verify-20260822.md。要点索引:
100.68.51.72:8080 · Qwen3.6-27B-AWQ-INT4 · VLLMClient().extract() 纯函数式OrgBrainConfig,走已有 /api/h5/store-card,开通接口 fail-closed 双门seat_type 按名单渲染,不跳转vision_exams,refraction_method 枚举扩为 无/小瞳/快散/中散/慢散| 令 | 触发什么 |
|---|---|
| 「开工」 | 建分支 + 占 Phase 74 + 写 business.md + 搬 Demo 进仓库 commit 锁定 |
| 顺序确认 | A→B→D→E→F→G→C→H 这个排法对不对,C 要不要提前并行 |
| 发版粒度 | A 单独发一次验门店零回归,之后每批一发 —— 还是攒批发 |
红线不变:push / 建 MR / 合并 / 发版仍需长官现场下令,一次一令,绝不外推。
云机环境 · 非验收证据。第〇节复核证据为本机对 origin/test 的真实 git grep 输出。