← 回评审台

个人工作台首批开发拆解:架构分析、待办与排期

2026-10-10。输入:白晨已认可的组件与场景方案(下称「方案」;首批范围以同名讲解稿为准:18 个模块,22 个场景,其中 P0 13 个、P1 9 个),决策页工作文件夹首批只做云端,以及原型演绎与布局重构汇报稿(下称「汇报稿」,白晨 10-10 接受其中约 4 人日的首批增量)。产品范围不再改(「2711 就此为止」),本文只回答「怎么做、谁来做、要多久、缺什么」。 性质:5.2 节列出的各项是白晨已定(10-10、10-11),5.3 节还有 2 项待拍板;其余是本文提案。三条已定边界照用:文件夹首批只做云端;工作台只经宿主 HTTP 接口和渲染器包使用底座;工作台最多两人。 证据写法:本仓库文件写 路径:行号,路径相对仓库根;底座写 ../workbench-daemon/路径:行号;没核实的标【待验证】。估时单位是「人日」:一个人带 AI 代理,用一个工作日完成实现、测试、评审,并按档收口。 修订:同日两轮:先按评审意见改(必须改 M1~M9、建议改 1~9,评审原文不入库),再按白晨 10-10 的拍板改(两条切片都做、首批只用化名、保持登录即注册、截图模型先跑探针再定、批准三个解析库、向底座提两项需求、10/16 交付版本,以及按推荐定的五个小项),10-11 再按白晨对最后三项的答复改(不接钉钉日程、Agent 直接写用部署开关、海外模型通道已申请),之后按终审并入汇报稿的布局重构增量,新增 5.3 两项待拍板。 读法:正文 5 节;能力对照明细、待办明细、AC 预分配、与方案的出入、风险对策、原型章节与阶段的对应放在附录 A~F。

〇、先读这几条

  1. 待办数:P0 59 项(含 4 次收口)、85 人日;P1 16 项、21 人日;「真实学生数据入库前」另有 3 项、4 人日,首批不排期。余量 30%,假设 10-12 开工,完整 P0 约 12-31、P1 约 2027-01-21 完成(按 5.3 第 1 项的现排计;选推荐项各晚 1 个工作日)。
  2. 两条试跑切片都做(白晨 10-10 定,第三节):共用部分只做一次,先上教师、后上青年人,合计 51.5 人日。按现排,教师切片约 11-13 试跑(化名数据),青年人切片约 11-27 试跑。 教师切片要不要带上日程和第一次打开待拍板(5.3 第 1 项),推荐带上,代价是两个日期变成 11-18、11-30。
  3. 界面结构按汇报稿的重构做(白晨 10-10 接受):桌面即今日、没有左栏、全部模块面板、卡片点开成整页、「+ 收进来」统一入口;视觉基调是 C 柔彩 Bento(白晨 10-11 选定)。
  4. 架构判断:18 个模块都做成工作台原生模块。依据是底座方向稿早已定好的分工:大模型调用、确认界面归顶层应用,底座不碰业务数据和 AI(../workbench-daemon/docs/AI工作台/报告/2026-10-04-工作台架构与协议范围-方向稿.md:28-29、97)。外部系统接入继续做成插件,同时向底座提两项需求:宿主执行确认、插件声明触发条件(1.4)。
  5. 复用与新建:能直接复用的只有登录与会话、调宿主(含 C 端措辞改写)、模型网关客户端、桌面卡片框架;公共对象层、待拍板、写能力封堵、文件存储、抽取管线、后台作业、部署、试跑度量和 18 个模块都要新建。
  6. 两处现状和直觉相反:
    • 登录即注册:任何人输入一个新名字就能进系统(apps/api/app/identity/service.py:1、78-96)。白晨 10-10 定首批保持这样,但放真实数据之前必须改(K6 清单)。
    • 写操作可以绕过确认:已登录用户现在就能直接调写能力,通用调用接口、HTML 卡片桥接口、演示 Agent 都不看 kind。三条路最后都汇到 invoke_for_user(apps/api/app/invocation/service.py:109),P0 在这一处统一封堵(WB-60)。
  7. 对底座的依赖:白晨 10-11 定首批不接钉钉日程(钉钉待办只写,照常保留),教师用工作台自己的日程,钉钉日程列为后续项,所以 P0 不需要底座新增能力。
  8. 最没把握的两处:截图用国产还是海外模型、每人每天花多少钱,首周探针(WB-05)实测后定;「每句可溯源」只能保证引用的记录存在,保证不了它真的支撑那句话。
  9. 待拍板 2 项(5.3):教师切片带不带日程与第一次打开;C 风格与原生卡尺寸。白晨 10-10、10-11 已定的记在 5.2。

一、架构分析

1.1 能力对照(逐项证据见附录 A.1,逐模块见附录 A.2)

1.2 首批模块与数据流

flowchart LR
  subgraph WEB[前端 apps/web]
    TODAY[桌面即今日:顶部今天简报+卡片网格+右栏等你定(可收起)]; LIB[全部模块面板]; PAGES[模块整页(卡片点开、卡里一条直达)]; CARDS[桌面卡片:插件卡+原生卡]; DROP[+ 收进来(粘贴、上传、截图)]
  end
  subgraph API[后端 apps/api]
    INBOX[inbox 收件箱]; FILES[files 存储·上传·提取(子进程)]; JOBS[jobs 后台作业]
    EXTRACT[extract 抽取管线:校验·预算·限流]; MODEL[model 网关客户端]
    OBJ[objects 公共对象层]; MODS[各模块域]; METRICS[metrics 试跑度量]
    APPROVE[approvals 待拍板+执行器]; INVOKE[invocation.invoke_for_user:写能力只放行执行器]; HOST[host_client(已有)]
  end
  PG[(工作台 PostgreSQL)]; DISK[(文件存储:服务器磁盘卷)]
  GW[模型:公司网关或海外,探针后定]; WBD[底座宿主]; EXT[飞书日历·飞书文档·钉钉待办]
  DROP --> INBOX; PAGES --> FILES; FILES --> DISK; FILES --> JOBS; INBOX --> JOBS
  JOBS --> EXTRACT --> MODEL --> GW
  EXTRACT -->|草稿| APPROVE; MODS --> OBJ --> PG; APPROVE --> PG; JOBS --> PG; METRICS --> PG
  APPROVE -->|确认后:本地改动| MODS; APPROVE -->|确认后:kind=write| INVOKE --> HOST --> WBD --> EXT
  MODS -->|只读:飞书日程与文档| INVOKE; CARDS -->|只读| INVOKE
  TODAY -.现算.-> MODS; TODAY -->|等你定| APPROVE; LIB --> PAGES; LIB --> CARDS

界面结构照汇报稿第三节:顶栏只放日期、全部模块、搜索(首批只按模块名)、「等你定」角标、头像;卡片点开是整页,插件卡沿用现有详情弹窗。约 4 人日增量落在 WB-07、08、28、63、66 和新增的 WB-73~77(附录 B)。

三条主数据流:

分包(按 apps/api/AGENTS.md 的约定):

前端在 apps/web/src/features/ 下建同名目录。每新建一个域,同一任务里写模块说明,并同步 apps/api/AGENTS.md 的「各域」索引。

模型与代码怎么分工:模型只做判断类任务(摘要、拆分、抽字段、打标签、起草),校验、计数、冲突、名字对人的前三层、预算与重试都用代码,逐项见附录 A.3。

1.3 关键选择(每项两种方案,给推荐)

K1 模块放在哪里,底座补什么。

K2 数据模型。

K3 文件存储。

K4 上传之后怎么处理。

K5 待拍板怎么执行。

K6 学生数据:已定(白晨 10-10):首批只用化名,不录入真实学生信息;姓名换编号在真实数据入库前做(WB-44)。

K7 截图与口述。

1.4 需底座提供(逐项现状与证据见附录 A.4)

  1. 宿主执行 confirm 并提供确认接口;2. 插件声明触发条件、宿主负责触发。白晨 10-10 定首批期间就提,需求说明写在 WB-01 设计稿里一并交出。工作台先用应用内的办法顶着,底座做好后切换:
    • 确认:先由 WB-60(invoke_for_user 拦截写能力)加 WB-06(待拍板执行器)顶着。切换点是工作台把支持的协议版本升到「宿主执行确认」那一版:在同一个任务里,执行器改为调宿主的确认接口,WB-60 的拦截保留为第二道防线。
    • 触发:先由「打开时现算」加工作台自己的后台作业(WB-03)顶着。切换点是宿主能按插件声明推送触发:工作台改为接收推送,WB-03 只留文件处理这类内部作业。
    • 两次切换都按大档做,时间看底座排期,不在本文估时内。
  2. 钉钉日程读写插件:白晨 10-11 定首批不接钉钉日程,列为后续项,不进 P0;钉钉待办只写,照常保留(WB-15)。 4~8. 钉钉待办读回、邮件收信插件、invoke 写操作幂等键、飞书日历参会人与全天日程,都排 P1;会议转写来源(飞书妙记等)排第二批。

二、待办拆解

明细见附录 B。每项写明动哪些文件、前置依赖、验收(含端到端由哪个场景覆盖,或按什么理由豁免)、是否命中风险区、估时和负责人。标题里的〔共用〕〔教师〕〔青年〕表示它属于哪条试跑切片。

附录 B 按内容分组(M1~M4 加「后续」组),执行顺序按第四节的阶段走:

内容分组 内容 项数 估时
M1 基座 设计稿、界面设计、探针、对象层、作业、抽取、待拍板、写能力封堵、文件、门禁配置、端到端编排、部署、全部模块面板、卡片前后移、卡里直达整页、窄屏、两次切片收口 21 28.25 人日
M2 通用模块 设计稿、界面设计、待办、日程(原生、接飞书)、收件箱、随手记、文档、项目、文件夹、会议、今天简报、表格、联系人、试跑度量、青年人第一次打开、收口 22 31.75 人日
M3 教师模块 设计稿、界面设计、名册、课表、开学向导、档案、口述拆分、一人一页、家长沟通、学校填报、接龙回执、班级日常、化名试跑数据、收口 16 25 人日
M4(P1) 设计稿、界面设计,9 个 P1 场景,读飞书文档、公共检索、手机收集入口、Agent 写操作改走待拍板 16 21 人日
后续:真实学生数据入库前 邀请制账号、字段加密、脱敏与导出删除 3 4 人日

分档:宪章规定跨两个模块或命中风险区即为大档(../workbench-daemon/docs/standards/2026-10-02-AI-Coding工程宪章.md:19-21),本仓库只有前端、后端两个模块(tools-config/gate.toml:86)。因此每个阶段当作一个大档任务,各配一份设计稿(WB-01 覆盖两条切片,WB-64、67、69 分别覆盖阶段三、四、五;都含多视角评审、白晨复核和实现计划),收口跑 make check 加 make mutation。附录 B 每项都是子任务,不单独判档,「风险区」标「是」的按风险区标准评审;WB-05 探针不进产品代码,按小档做。

覆盖门禁:动 apps/api/app 或 apps/web/src 的子任务都写明端到端由哪个场景覆盖;界面细节写成补充用例放 testing/e2e/e2e/specs/,豁免照底座 tools/coverage/README.md 的写法;每个阶段中途就跑一次 make coverage。

两人并行的规矩:

分工(合写的项一人算一半;甲偏后端,乙偏前端,两人都写前后端):

阶段 甲 乙
一:共用+教师切片 01、05、02、04、06、60、15、19、32(粘贴部分)、36、74、75、77、14(19 人日) 01、63、08、07、12、13、62、66、16、21、28、73、30、33、71、14(19 人日)
二:青年人切片 03、09、10、24、76、72(7 人日) 17、79、18、25、72(6.5 人日)
三:通用模块补全 64、20、26、29、31(6.5 人日) 64、65、22、23、27、31(7 人日)
四:教师模块补全 67、68、32(其余)、35、40、41、38、42、45(10.5 人日) 67、68、34、37、39、43、45(9.5 人日)
五:P1 69、70、58、47、48、53、54、56、59(10.5 人日) 69、46、49、50、51、52、55、57、59(10.5 人日)

关键路径:把各阶段的设计稿和收口闸门都算进去,按附录 B 的依赖算,最长的一条到 WB-45 共 33.5 人日:WB-01 → 02 → 06 → 15 → 19 → 28 → 77 → 14(教师切片收口)→ 72(青年人切片收口)→ 64 → 65 → 22 → 26 → 27 → 31 → 67 → 68 → 34 → 37 → 45。每人分到的 P0 约 42~43 个工作日,比这条链长,所以决定工期的是总量,不是依赖链。

三、两条试跑切片(白晨 10-10 定:教师和青年人都做)

切片里的项都取自附录 B,估时按原值或按裁剪后的范围算,余量 30%。共用部分只做一次。

块 项(编号与估时,人日) 小计
共用基座 WB-01 切片设计稿 2;WB-63 两条切片的界面设计 2;WB-05 探针(国产与海外模型对比)1.5;WB-02 对象层 2;WB-04 抽取 2;WB-06 待拍板 2;WB-60 写能力封堵 1;WB-07 待拍板前端 1;WB-08 前端骨架 2;WB-73 全部模块面板 1.25;WB-74 卡片前后移 0.5;WB-75 卡里直达整页 0.5;WB-77 窄屏 0.5;WB-12 门禁 0.5;WB-13 端到端编排 1;WB-62 部署 1.5;WB-66 试跑度量 1.25 22.5
共用模块 WB-15、16 待办 2.5;WB-19 收件箱 2.5;WB-21 随手记 1.5;WB-28 今天简报 2 8.5
教师专属 WB-30 联系人 1;WB-32 名册(只做粘贴名单)1.5;WB-33 名册前端 1;WB-36 档案 2;WB-71 化名试跑数据与提示 0.5 6
青年专属 WB-03 作业 1.5;WB-09 文件 2;WB-10 文本提取 1.5;WB-17、79、18 日程 3.5;WB-24 项目 1;WB-25 文件夹 2.5;WB-76 第一次打开 0.5 12.5
收口与发布 WB-14 教师切片 1;WB-72 青年人切片 1 2
合计 51.5

先后与重叠:

阶段一做共用部分和教师专属:

阶段二做青年专属:

能跑的场景:

切片 完整能跑 部分能跑
教师切片 T13(AC-A23) T12:私信截图认出家长和学生,生成待回待办
Y02、Y03:没有日程
第一次打开:空桌面加全部模块面板,没有入门清单
青年人切片 Y02、Y04 Y03 主体

四、排期建议

假设:10-12(周一)开工,两人全职,余量 30%;按工作日算,扣除 2027-01-01 元旦;不含等白晨复核的时间(按 1 天内回复算);各阶段之间串行。

阶段 每人工作量(取两人中较大的) 含余量的工作日 起止 结束时能看到什么
一:共用+教师切片 19 人日 25 10-12~11-13 教师切片试跑(化名数据)
二:青年人切片 7 人日 10 11-16~11-27 青年人切片试跑
三:通用模块补全 7 人日 10 11-30~12-11 会议、文档、表格、改期更新;Y01、Y06、T09
四:教师模块补全 10.5 人日 14 12-14~12-31 13 个 P0 场景全部跑通
五:P1 10.5 人日 14 2027-01-04~01-21 9 个 P1 场景,加 Agent 写操作改走待拍板

五、风险与未决

5.1 技术风险(13 项,对策见附录 E)

影响最大的四项:截图读不准(影响 6 个 P0 场景);模型成本与限流还不知道;开放注册之下任何人都能注册并消耗模型额度;老师在化名环境里录入了真实学生信息。

5.2 已定(白晨 10-10、10-11)

  1. 试跑人群:教师和青年人两条都做,排法见第三节。
  2. 学生数据:首批只用化名,不录入真实学生信息;姓名换编号在真实数据入库前做(WB-44)。入库前要补的事项见 K6 清单。
  3. 开放注册:保持登录即注册,不做邀请制。WB-11 移到「真实数据入库前」组;放真实数据之前必须再处理(附录 E 第 11 项)。
  4. 截图模型:先跑探针,同时测公司网关里的国产多模态模型和海外模型,按识别准确率与成本定(WB-05 的验收)。
  5. 批准 pypdf、python-docx、openpyxl:由 WB-10 开工时在底座 .claude/approved-packages.txt 登记,按该文件 :3 的格式另起一段注释,出处写「白晨 10-10,AIC-2711 拆解」。这是一次底座仓库的提交,单独提交、不和工作台的改动混在一起。Pillow 看探针结果,要加时另行批准。
  6. 向底座提「宿主执行确认」「插件声明触发」:首批期间就提。工作台先用应用内的拦截顶着,底座做好后切换,切换点见 1.4。
  7. 10/16 交付版本:M1 设计稿、截图探针结论、按新风格重做的可点击原型、基座进度(AIC-2715)。原型是演示用;WB-63 是真产品的界面设计,视觉 C 柔彩 Bento(白晨 10-11 选定)。
  8. 按推荐定的五个小项:
    • 文件存储先用服务器磁盘卷加存储接口(K3)。
    • 公开分享页放 P1(WB-50)。
    • 邮件首批不做。
    • 界面设计由两人用 AI 做高保真原型,白晨看过再开发(WB-63、65、68、70)。
    • 余量 30%。
  9. 不接钉钉日程,钉钉待办(只写)保留(10-11):钉钉日程优先级低,首批教师用工作台自己的日程,钉钉日程插件列为后续项,不进 P0(附录 A.4 第 3 项);待办同步钉钉(WB-15,经待拍板)照做。
  10. 演示 Agent 直接写两种都支持(10-11):保留 WB-60 的部署开关,试跑环境默认关、演示环境可以开。AC-A13 在开关打开的环境里继续验;WB-58 做完后,Agent 的写操作也改走待拍板。
  11. 海外模型通道(10-11):已申请好。WB-05 直接对比国产与海外两类模型;密钥按仓库规则放在仓库外(~/.config/workbench-app/),不写进文档。
  12. 布局重构的首批增量约 4 人日接受(10-10,汇报稿第七节第 3 条):逐项落在 WB-07、08、28、63、66 和 WB-73~77。汇报稿第七节第 4 条(青年人第一次打开,0.5 人日)没有单独回复,它本就算在这 4 人日里,随之一并接受(WB-76)。

5.3 待拍板(2 项)

  1. 教师切片带不带日程与第一次打开。 5.2 第 9 条定了教师用工作台自己的日程,但现排里日程(WB-17、18)在阶段二,教师的第一次打开并在 WB-35(阶段四),所以 11-13 教师试跑时没有日程,第一天是空桌面。
    • A(推荐):把原生日程 WB-17、18 挪进阶段一,另加 WB-78「教师第一次打开:两问加入门清单(不含课表)」0.5 人日(WB-35 到阶段四再补课表与开学向导)。教师切片到 11-18,青年人切片到 11-30,P0 完成到 2027-01-04;代价是两条切片分别晚 3 个、1 个工作日,P0 多 0.5 人日。
    • B:维持现排,在试跑说明里写明教师切片 11-13 没有日程和入门清单:日程 11-27 之后才有,入门清单要到阶段四(12-31)。日期即第四节的表。
    • 推荐 A:今天简报的日程部分和 AC-A16 在教师切片里才跑得通,第一次见面就是空桌面也最伤试跑。
  2. C 柔彩 Bento 和原生卡尺寸。 C 的观感靠一桌大小不一的色块(风格样张),而首批原生卡只做一种尺寸(汇报稿第五节),真产品里效果会打折。
    • 一:接受落差,首批原生卡只做一种尺寸,靠状态色区分,0 人日。
    • 二(推荐):待办、日程、随手记三个高频模块首批支持小、中、大三档,约 2 人日(尺寸框架 0.5,每个模块 0.5),排在阶段三,不推迟两条切片的试跑日期,P0 完成日约晚 1~2 个工作日。
    • 推荐二:这三个模块每天都会打开,2 人日换到主要的视觉效果;其余模块仍一种尺寸,原定的约 8 人日「三种尺寸」照旧放到以后。本文的数字都没含这 2 人日。

附录 A 能力对照明细

A.1 公共能力

能力 判定 证据与说明
登录与会话 已有(白晨 10-10 定首批保持登录即注册) 新名字直接建号(apps/api/app/identity/service.py:78-96),现有场景「新名字第一次登录即注册」也验了这一点(acceptance/演示账号与登录.feature:21);cli.py:63 只是建演示账号的命令。放真实数据前改为邀请或白名单(WB-11,后续组)
按用户隔离 已有 调宿主时带 X-On-Behalf-Of:../workbench-daemon/protocol/v0/07-宿主对外接口.md:12
读写飞书日历 已有,经宿主 list_events 的查询区间必须小于 40 天:../workbench-daemon/plugins/feishu-calendar/plugin.yaml:25-29。create_event 不邀请参会人、不支持全天日程:同文件 :126-132
建钉钉待办;读飞书文档 已有,前者只能写,后者只读 ../workbench-daemon/plugins/dingtalk-todo/plugin.yaml:21、33;../workbench-daemon/plugins/feishu-docs/plugin.yaml:13、49、86、116
代用户调能力、改写成 C 端措辞 已有 invoke_for_user:apps/api/app/invocation/service.py:109。user_facing:同文件 :68
写外部前先确认 需新建(待拍板),并且要封堵现有的绕行路径 协议的 confirm 只是声明(../workbench-daemon/protocol/v0/02-能力说明.md:15),底座自己也写明 HTML 卡片绑写能力会绕过确认(06-视图.md:130)。工作台现在有三条路能直接写:
① 通用调用接口 POST /api/invoke,声明式按钮和首屏取数都走它,任意已装插件的任意能力都能调(apps/api/app/cards/router.py:170-191);
② HTML 卡片桥接口,只查能力有没有绑定,不看读写(apps/api/app/cards/service.py:261-283);
③ 演示 Agent 不区分读写(apps/api/app/agent/tools.py:70),AC-A13 就是不经确认直接建日程(acceptance/对话框与演示Agent.feature:53-61)
调模型 需改造 请求的 messages 原样透传(apps/api/app/agent/gateway.py:112-118),解析回复时要求 content 是字符串(同文件 :92-97)。缺的是:拼图片消息的代码、JSON 输出校验、限流(429)处理;模型能不能读图也还不知道。模型是 glm-5.3-flash,白晨 1005 定(docs/specs/2026-10-05-工作台首个可演示版本-design.md:70)
业务对象存储 需新建 宿主对外接口没有应用数据接口(07-宿主对外接口.md:26-71)。方向稿也规定底座不碰业务数据(方向稿:29)
文件上传与存储 需新建 能力入参只允许 JSON 子集,没有二进制类型(02-能力说明.md:25-28);插件单次调用 30 秒超时(04-调用与结果.md:84)。工作台全局请求体上限是 512 KiB(apps/api/app/body_limit.py:25)。上传要用表单解析库 python-multipart:已批准,但还没写进 apps/api/pyproject.toml:8-24
后台作业 需新建 工作台目前没有。这件事不需要底座:底座缺的是事件推送(05-事件.md:3)
桌面卡片、页面路由 需改造 卡片必须对应插件视图(apps/api/app/cards/models.py:50-51);前端只有三个路由(apps/web/src/routes/router.tsx:30、54、59)
端到端用的假模型 需改造 只会按「工具调用 → 回答」的脚本作答(testing/fake-gateway/fake_gateway/engine.py:140)
门禁 需改造 风险区五项(tools-config/gate.toml:88-94);覆盖规则是后端每行要三层都命中,前端每行要单元和端到端两层都命中(同文件 :43)
主动推送到用户 首批不做 底座没有事件推送,工作台也没有通知通道

A.2 逐模块

模块 首批核心能力(讲解稿) 判定 能复用的 要新建的,或需底座的
今日一屏(桌面顶部的今天简报) 汇总新增、到期、状态变化、待决事项 需新建 无(apps/web/src/features/desktop/DesktopPage.tsx:35 只有卡片网格) app/today/;时间安排建议用代码排
待拍板 确认、修改、拒绝、批量 需新建 外部写走 invoke_for_user(invocation/service.py:109) app/approvals/;以后对接宿主确认(1.4 第 1 项)
收件箱 拆分、归类、识别更新 需新建 网关客户端(agent/gateway.py:105) 抽取管线;读图【待验证】;邮件需底座
云端文件夹 摘要、按项目归组、重新上传时比对 需新建 无 存储、上传、子进程解析、作业;上传路径单独设请求体上限
待办 新建、排期、完成、同步钉钉 需新建;写钉钉已有 create_todo 读回需底座
日程 读写飞书、查空档、检测冲突 读写飞书已有;其余需新建 feishu-calendar/plugin.yaml:25、88、126、188、254 参会人与全天需底座;钉钉日程首批不接(白晨 10-11),列为后续项
会议 会前摘要、纪要、行动项、下次排期 需新建 get_event 带描述(:88) 首批由用户上传转写稿
项目 模板、步骤、材料缺口 需新建 对象层 P0 只做最小项目
接龙与投票 收集、分享页、截图比对 需新建 名字对人 分享页放 P1
文档 生成、导出、逐句溯源 需新建;读飞书文档已有 read_doc(feishu-docs/plugin.yaml:49) 引用校验
随手记 自动标签、调取、成文 需新建 抽取管线 pg_trgm 对中文是否有效【待验证】
表格 截图抽字段、逐格溯源、汇总 需新建 无(渲染器声明式组件里没有表格,06-视图.md:16) table_rows
联系人 纪念日、承诺、往来 需新建 对象层 纪念日与承诺放 P1
课表与校历 下一节、抽本人排班、顺延、进度对比 需新建 日程域 课题目录由老师粘贴
学生名册 名字对人、名单比对 需新建 联系人域 首批只放化名数据;字段加密(WB-61)在真实数据入库前做;xlsx 导入要 openpyxl
学生档案 一人一页、长期未记录提示 需新建 随手记、文档 同上
家长沟通 待回复与承诺、草稿只复制 需新建 联系人、待办 不代发消息
学校填报 拆任务、预填、比差异、已提交 需新建 待办、表格 openpyxl
公共:账号 首批保持登录即注册 已有 identity/service.py:78-96 真实数据入库前:邀请制、重置口令、停用(WB-11)
公共:写能力 只经待拍板写外部 需改造 invoke_for_user 是唯一的汇合点 默认拒写、执行器放行、部署开关

A.3 模型与代码的分工(用户级规则:模型只做判断类任务,流程控制用代码)

交给代码 交给模型
文本提取(子进程里跑,设超时与内存上限)、按 sha256 去重、版本链、改动段落定位 摘要、一句话写出「差在哪」、从已有项目里选一个归组
校验输出是否符合 JSON Schema(不合格纠错重试一次);429 退避重试;每用户与全局每日预算 拆分投入物、从截图或文字里抽字段、自动打标签
日期、计数、冲突、空档、进度对表、名单差集;名字对人的前三层(精确、别名、编辑距离);引用存在性校验 起草纪要、一人一页、家长消息、评语;名字对人的兜底只给候选,由人确认
真实数据入库后:送模型前把姓名换成编号、结果回填;加密字段只在内存里解密后再比对 —

A.4 需底座提供

前两项是向底座提的协议需求,不阻塞首批。第 3 项白晨 10-11 定首批不接,列为后续项。

# 能力 现状 谁要用 优先级
1 宿主执行 confirm,并提供确认接口 只是声明(02-能力说明.md:15),pending_confirmation 占了位(04-调用与结果.md:22) 工作台的待拍板对接到宿主,共建方的应用也能用 首批期间提出(白晨 10-10 定),不阻塞。先由 WB-60、WB-06 顶着;切换点是工作台支持「宿主执行确认」那一版协议时,执行器改调宿主的确认接口
2 插件声明触发条件,宿主负责触发 没有(05-事件.md:3) 「后台·待建设」类场景,以及把事情推到用户眼前 首批期间提出(白晨 10-10 定),第二批用。先由「打开时现算」加 WB-03 顶着;切换点是宿主能推送触发时,工作台改为接收推送
3 钉钉日程读写插件 plugins/ 下没有 教师日后接钉钉日程 后续项,不进 P0(白晨 10-11 定首批不接)
4 钉钉待办读回列表与完成状态 只有 create_todo(dingtalk-todo/plugin.yaml:33) 待办同步后回读状态 P1
5 邮件收信插件(授权码走填写型凭据) 没有 收件箱的邮件渠道 P1
6 invoke 写操作支持幂等键 协议里没有 执行失败后安全重试 P1
7 飞书日历的参会人与全天日程 底座计划写明不做(docs/superpowers/plans/2026-10-08-飞书知识库与日程写入.md:89-90) 「下次会」带参会人;校历全天节点 P1
8 会议转写来源(飞书妙记等) 没有 会议自动拉转写 第二批

附录 B 待办明细

列说明:

M1 基座(P0)

编号 标题 动哪些文件、新建哪些包 前置 验收(含端到端覆盖) 风险区 估时 负责
WB-01 首批架构与两条切片设计稿〔共用〕 新建 docs/specs/2026-10-1x-个人工作台首批-design.md:模块边界、表、待拍板状态机、敏感字段的集中位置(为以后加密留位)、能力定义形状、迁移号;附一节给底座的需求说明(宿主执行确认、插件声明触发),首批期间交出 无 多视角评审记录;白晨复核;实现计划 — 2 甲+乙
WB-63 两条切片的界面设计〔共用〕 真产品的高保真可点击原型,视觉基调 C 柔彩 Bento(白晨 10-11 选定):桌面即今日(顶部今天简报、右栏等你定、无左栏)、顶栏、全部模块面板、模块整页、「+ 收进来」、待办、收件箱、随手记、名册、档案、日程、文件夹。AIC-2715 的样板间原型只作演示参照 01 白晨看过 — 2 乙
WB-05 截图识别与成本探针(国产与海外模型对比)〔共用〕 脚本放仓库外;结论写进 WB-01 附录 无 同一批 20 张不含真实个人信息的中文截图(群通知、课表、回执、私信),分别跑公司网关的国产多模态模型与海外模型,比较字段准确率、耗时、token 数与每人每日成本,按准确率与成本给出选型;图片要不要压缩 —(小档) 1.5 甲
WB-02 公共对象层〔共用〕 新建 apps/api/app/objects/,迁移 0003_objects 01 单:载荷校验、三种关联、归属校验。集:跨用户返回 404。端:经各模块场景命中;AC-A28 否 2 甲
WB-03 后台作业〔青年〕 新建 app/jobs/,迁移 0004_jobs;app/main.py 生命周期里起停 worker。宿主能推送触发后,触发类作业改为接收推送(1.4 第 2 项) 01 单:重试、超时。集:不重复领取、关停不丢。端:经 AC-A19 命中 否 1.5 甲
WB-04 模型抽取管线〔共用〕 app/agent/gateway.py 移到 app/model/gateway.py,加图片消息与 429 退避;新建 app/extract/(runner、schemas、budget:每用户与全局每日预算);假网关加抽取脚本 01 单:Schema 纠错、预算、429。集:经假网关抽取。端:经 AC-A17 命中 是(Agent) 2 甲
WB-06 待拍板后端〔共用〕 新建 app/approvals/,迁移 0005_approvals;执行器以「放行写」的方式调 invoke_for_user。底座执行 confirm 后切换为调宿主的确认接口(1.4 第 1 项) 02 单:状态机,重复确认不会重复执行。集:确认后模拟飞书出现日程;拒绝后外部不变。端:AC-A27 是 2 甲
WB-60 写能力封堵〔共用〕 app/invocation/service.py 默认拒绝 kind=write,只有执行器放行;app/agent/tools.py 过滤写能力;app/cards/service.py 遇到写能力返回明确错误;app/config.py 加部署开关(试跑环境默认关、演示环境可开,白晨 10-11 定)。底座执行 confirm 后保留为第二道防线 06 单:三条路都拒。集:通用调用、卡片桥、Agent 都写不出去;开关打开时 AC-A13 照旧。端:AC-A27「卡片与对话框调写能力被拒」 是 1 甲
WB-07 待拍板前端〔共用〕 新建 apps/web/src/features/approvals/:落在桌面右栏「等你定」,可点开整页 06、08 单:批量确认、改一下再提交。端:AC-A27 否 1 乙
WB-08 前端骨架与原生卡片〔共用〕 router.tsx、AppLayout.tsx:桌面即首页、无左栏,顶栏放日期、全部模块、搜索、等你定角标、头像,右栏「等你定」可收起;新建 src/features/modules/registry.ts;app/cards/models.py 加 kind、module(迁移 0006_card_kind),改 cards/service.py 01、63 单:原生卡与插件卡并存、右栏收起与展开。集。端:补充「桌面加待办卡」 是(卡片) 2 乙
WB-73 全部模块面板与模块名搜索〔共用〕 在 src/features/modules/ 下建全部模块面板:平铺、打开、放上桌面、标出来自插件的;顶栏搜索只按模块名过滤;取代空桌面的「去插件页添加」 08 单:过滤、放上桌面。端:补充「从全部模块把待办放上桌面」 否 1.25 乙
WB-74 卡片菜单「往前/往后」〔共用〕 卡片菜单加两项,调现有改卡片接口的 position(apps/api/app/cards/router.py:142) 08 单;端:补充「卡片往前一位,刷新后仍在新位置」 否 0.5 甲
WB-75 卡里一条直达整页〔共用〕 原生卡的每一条带锚点,点开模块整页并定位到该条;插件卡沿用现有详情弹窗(apps/web/src/features/cards/DetailDialog.tsx) 08、16 单:锚点解析。端:补充「点待办卡里一条,整页定位到该条」 否 0.5 甲
WB-77 窄屏单列〔共用〕 桌面和模块整页在窄屏下单列排布,「今天」在最上、「等你定」紧随其后 08、28 端:补充(窄屏视口下桌面单列可用) 否 0.5 甲
WB-09 文件存储与上传〔青年〕 新建 app/files/(models、storage、service、router),迁移 0007_files;app/body_limit.py 给上传路径单独设上限;pyproject 加 python-multipart 02、03 单:路径规范化、拒绝穿越、类型白名单、按用户去重、版本链。集:上传整个文件夹、超配额 413、他人文件 404。端:AC-A19;补充(超限) 是(文件) 2 甲
WB-10 安全的文本提取〔青年〕 新建 app/files/text.py:在子进程里解析,设超时与内存上限,检查 zip 解压比;支持 txt、md、pdf、docx、xlsx;pyproject 加 pypdf、python-docx、openpyxl。开工时先在底座 .claude/approved-packages.txt 登记这三个包(出处「白晨 10-10,AIC-2711 拆解」),作为一次单独的底座提交 09 单:每种格式一份样例;解压炸弹、加密 PDF、超时都报看得懂的错。端:经 AC-A19 命中 是(文件) 1.5 甲
WB-12 门禁配置〔共用〕 tools-config/gate.toml 的风险区加待拍板、写能力、文件、敏感数据;affected.toml;only_mutate 加入本表末尾列的核心文件 02、06、60(文件风险区随 WB-09 补登记) make tools-test;按 --tier 能判进风险区 门禁资产 0.5 乙
WB-13 端到端编排扩展〔共用〕 testing/e2e/:下发假网关抽取脚本、上传文件夹、隔离文件存储目录、开关环境 04(上传部分等 09) make harness-check;冒烟场景 否 1 乙
WB-62 部署与运维〔共用〕 部署说明写进 docs/guides/部署/;核实磁盘卷与备份、部署库的 pg_trgm 与 LC_CTYPE、worker 的进程模型、反向代理的上传上限与读超时(参照 app/host_client/deadline.py:13)、发布脚本【放在哪里待验证】 02(worker 与上传部分等 03、09) 阶段一在试跑环境走通登录、抽取、待拍板;阶段二再走通上传 否 1.5 乙
WB-14 教师切片收口与发布〔教师〕 收口档案 docs/reports/acceptance/2026-11-xx-个人工作台教师切片.md;发布到试跑环境 阶段一各项 make check、make mutation 全绿并留证 — 1 甲+乙
WB-72 青年人切片收口与发布〔青年〕 收口档案;发布到试跑环境 14、03、09、10、17、79、18、24、25、76 make check、make mutation 全绿并留证 — 1 甲+乙

M2 通用模块(P0)

编号 标题 动哪些文件、新建哪些包 前置 验收(含端到端覆盖) 风险区 估时 负责
WB-64 阶段三设计稿(M2 其余) docs/specs/…-M2-design.md+实现计划 72 多视角评审;白晨复核 — 1.5 甲+乙
WB-65 阶段三界面设计(会议、文档、表格等) 阶段三模块的高保真原型 64 白晨看过 — 2 乙
WB-15 待办后端〔共用〕 新建 app/todos/:状态、期限、来源回链、计数、排进日程;同步钉钉时提交待拍板 02、06 单:按用户时区算逾期。集:确认后模拟钉钉出现待办。端:AC-A16 是(外部写提交) 1.5 甲
WB-16 待办前端〔共用〕 新建 src/features/todos/ 08、15、63 单;端:AC-A16 否 1 乙
WB-17 日程后端:原生部分〔青年〕 新建 app/calendar/:原生日程项、周期日程项;slots.py 查空档、检测冲突 02、06 单:冲突与空档。集:只有原生日程项时增改删。端:AC-A16 否 1.5 乙
WB-79 日程接飞书〔青年〕 app/calendar/ 加飞书来源:打开时经宿主现取,与原生合并显示;写飞书时提交待拍板 06、17 集:未连接飞书只显示原生,连接后合并;确认后模拟飞书出现日程。端:AC-A16 是(外部写提交) 0.5 乙
WB-18 日程前端〔青年〕 新建 src/features/calendar/ 08、17、63 单;端:AC-A16 否 1.5 乙
WB-19 收件箱:投入与拆分〔共用〕 新建 app/inbox/、src/features/inbox/;教师切片里截图走单独的小上限 04、05、06、07、08、15、63(收文件另需 09) 单:拆分结果到草稿的映射。集:假网关拆出三条。端:AC-A17 否 2.5 甲
WB-20 收件箱:识别同一件事的更新 app/inbox/merge.py 17、19 单:候选匹配。端:AC-A17「改期通知进来时原日程改期」 否 1 甲
WB-21 随手记〔共用〕 新建 app/notes/、src/features/notes/;迁移里启用 pg_trgm(不可用时退回 ILIKE) 04、08、63 单:改过的标签进提示词、调出排序。端:AC-A20 否 1.5 乙
WB-22 文档 新建 app/documents/、src/features/documents/:句子加引用、引用校验、导出 Markdown 02、08、65 单:引用不存在或不属于本人即拒。集。端:AC-A20 否 2 乙
WB-23 随手记整理成文 app/notes/compile.py 21、22 端:AC-A20 否 0.5 乙
WB-24 项目(最小)〔青年〕 新建 app/projects/、src/features/projects/ 02、08、63 单;集;端:经 AC-A19「按项目分组」命中 否 1 甲
WB-25 云端文件夹〔青年〕 新建 src/features/folder/、app/files/{pipeline,diff}.py 03、04、09、10、24 单:改动段落定位、sha 相同不重算。集。端:AC-A19 是(文件) 2.5 乙
WB-26 会议后端 新建 app/meetings/:绑定日程、同系列、会前一页、导入转写、纪要、行动项、下次会提交待拍板 04、06、15、17、22 单:系列串联、时间点解析。集。端:AC-A14 是(外部写提交) 2 甲
WB-27 会议前端 新建 src/features/meetings/ 07、26 端:AC-A14、AC-A15 否 1 乙
WB-28 今天简报(桌面顶部)〔共用〕 新建 app/today/(suggest.py);前端做成桌面顶部的「今天」简报条,不另建页面 06、08、15、16、19(日程部分等 17、18) 单:不压会、期限早的优先。端:AC-A16 否 2 乙
WB-29 表格 新建 app/tables/(table_rows)、src/features/tables/ 02、04、08、65 单:汇总、记录表余额按记录算。集。端:经 AC-A18 和 AC-A26 命中;M2 内先写一个补充用例「截图加一行」 否 2 甲
WB-30 联系人(基础)〔教师〕 新建 app/contacts/、src/features/contacts/ 02、08、63 单;集;端:补充「加一个联系人并挂上来往记录」 否 1 乙
WB-66 试跑度量〔共用〕 新建 app/metrics/:打开、录入、纠正、分享、打开模块、放上桌面六种事件,只记计数,不记内容;加一条导出命令 02 单;集;端:补充(打开桌面计一次);命令行部分照 cli.py:34 的写法豁免 否 1.25 乙
WB-76 青年人第一次打开〔青年〕 新建 src/features/onboarding/:两问(做什么的、用不用飞书日历)后推荐 5~6 张卡放上桌面,第一天的今天简报条显示入门清单 08、28、73 单;端:AC-A41 否 0.5 甲
WB-31 阶段三收口与发布 收口档案;矩阵入库;发布到试跑环境 本里程碑全部 make check、make mutation 全绿 — 1.5 甲+乙

M3 教师模块(P0)

编号 标题 动哪些文件、新建哪些包 前置 验收(含端到端覆盖) 风险区 估时 负责
WB-67 阶段四设计稿(M3 其余) docs/specs/…-M3-design.md+实现计划 31 多视角评审;白晨复核 — 1.5 甲+乙
WB-68 阶段四界面设计(教师模块) 教师模块的高保真原型 67 白晨看过 — 2 甲+乙
WB-32 学生名册后端〔教师〕(切片只做粘贴名单) 新建 app/roster/(matching.py),迁移建别名表;支持粘贴、xlsx、截图导入 04、30(xlsx 导入另需 10,截图导入另需 05 结论,班务记一笔另需 29) 单:四层匹配、同名必问(变异核心)。集。端:AC-A21、AC-A23 是(敏感数据) 2 甲
WB-33 学生名册前端〔教师〕 新建 src/features/roster/ 32、63 单;端:AC-A21 否 1 乙
WB-34 课表与校历 新建 app/timetable/、src/features/timetable/ 04、17、18、68 单:进度对表、下一节。集。端:AC-A21、AC-A22 否 2.5 乙
WB-35 开学初始化向导(教师第一次打开) 在 src/features/onboarding/(WB-76 建)加教师两问、入门清单与课表、名单导入 32、34、76 端:AC-A21 否 1 甲
WB-36 学生档案〔教师〕 新建 app/profiles/、src/features/profiles/ 21、32 单:按用户时区算周界。集。端:AC-A23 是(敏感数据) 2 甲
WB-37 课后口述拆分 app/timetable/debrief.py 21、34、36 端:AC-A22 否 1.5 乙
WB-38 一人一页与会后按人回写 app/profiles/report.py;app/meetings/ 加按人拆分 22、26、36 单:引用校验、记录不足标出。端:AC-A24 是(敏感数据) 2 甲
WB-39 家长沟通 新建 app/parents/、src/features/parents/ 19、30、32、36 端:AC-A25 是(敏感数据) 2 乙
WB-40 学校填报:拆任务 新建 app/school_tasks/ 15、19 端:AC-A18 否 1 甲
WB-41 学校填报:预填与比对 app/school_tasks/prefill.py 09、10、29、40 单:对照与差异(变异核心)。集。端:AC-A18 否 2 甲
WB-42 接龙(基础)与回执比对 新建 app/polls/、src/features/polls/ 04、32 单:差集。端:AC-A26 否 1.5 甲
WB-43 班级日常 app/roster/attendance.py;家长版通知改写;未回执名单附私信草稿 29、39、42 端:AC-A26 否 1 乙
WB-71 化名试跑数据与提示〔教师〕 app/cli.py 加一条命令,载入化名示例数据(名单、随手记样例);名册、档案页面常驻「请勿录入真实学生信息」提示 32、36 单;端:补充(页面提示可见);命令行部分照 cli.py:34 的写法豁免 否 0.5 乙
WB-45 阶段四收口与发布 收口档案、矩阵、发布 本里程碑全部 make check、make mutation 全绿 — 1.5 甲+乙

M4(P1)

编号 标题 动哪些文件、新建哪些包 前置 验收(含端到端覆盖) 风险区 估时 负责
WB-69 M4 设计稿 docs/specs/…-M4-design.md+实现计划 45 多视角评审;白晨复核 — 1.5 甲+乙
WB-70 M4 界面设计 P1 功能的高保真原型 69 白晨看过 — 1 甲
WB-46 周报(Y05) app/documents/weekly.py 15、17、22、26 端:AC-A30 否 1 乙
WB-47 项目模板、步骤、材料缺口(Y15) app/projects/templates.py 与前端 15、24、29 端:AC-A34 否 1.5 甲
WB-48 求职看板(Y08) 截图认出是哪家公司,原地更新那一行 19、47 端:AC-A31 否 1.5 甲
WB-49 联系人的纪念日、承诺、礼物候选(Y13) app/contacts/ 与前端 17、30 端:AC-A33 否 1 乙
WB-50 公开分享页、用空档投票定时间、AA(Y12) 新建 app/polls/share.py、免登录页面路由 17、42 单:令牌、限流。端:AC-A32 是(新风险区) 2.5 乙
WB-51 抽本人排班与监考,考试周节点成待办(T06) app/timetable/extract_mine.py 34 端:AC-A35 否 1.5 乙
WB-52 调代课与课题顺延(T10) app/timetable/ 51 端:AC-A36 否 1 乙
WB-53 期末评语(T17) app/profiles/comments.py 38 端:AC-A37 是(敏感数据) 1 甲
WB-54 机构课后反馈与课时包(T20) 记录表加扣减、家长反馈草稿 29、37、39 端:AC-A38 是(敏感数据) 1.5 甲
WB-55 文档读飞书文档 app/documents/external.py 22 集:模拟飞书。端:补充 否 0.5 乙
WB-56 公共检索 新建 app/search/(加密字段不参与检索) 主要模块 单;集;端:补充 否 1 甲
WB-57 手机网页收集入口 响应式收件箱页、Android PWA 分享目标 19 端:补充(窄屏) 否 1.5 乙
WB-58 演示 Agent 写操作改走待拍板 app/agent/tools.py、loop.py;改 AC-A13 的场景;去掉 WB-60 的开关 06、60 端:AC-A39 是(Agent) 1.5 甲
WB-59 阶段五收口与发布 收口档案 本里程碑全部 make check、make mutation — 1.5 甲+乙

后续:真实学生数据入库前(不在首批排期,见 K6 清单)

编号 标题 动哪些文件、新建哪些包 前置 验收(含端到端覆盖) 风险区 估时 负责
WB-11 账号准入:邀请制 app/identity/service.py 加「只允许受邀名字注册」,用部署开关区分试跑与演示;app/cli.py 加 invite、reset-password、disable-user;迁移号届时分配;端到端夹具预先建好用户 K6 清单第 1 项 单;集:没受邀被拒、停用后会话失效。端:AC-A40。命令行部分照 cli.py:34 的写法豁免端到端 是(身份) 1.5 甲
WB-61 字段加密 新建 apps/api/app/crypto/;apps/api/pyproject.toml 加 cryptography;app/config.py 加密钥配置(repr=False) 02、K6 清单第 1 项 单:加解密、换密钥、坏密文报错。集:库里存的是密文。端:经 AC-A23 命中 是(敏感数据) 1 甲
WB-44 送模型前脱敏、导出与删除我的数据 新建 app/extract/redact.py 并接入名册;新建导出与删除接口 32、36、61 单:脱敏回填。集:假网关收到的请求里没有学生姓名。端:AC-A29;补充(导出与删除) 是(敏感数据) 1.5 甲

建议纳入变异范围(only_mutate)的核心文件:

后续组做的时候,再把 app/extract/redact.py 和 app/crypto/ 加进去。

附录 C AC 预分配与场景名

AC 验收要求(一句话) 场景文件:场景名〔回归等级〕 实现项
AC-A14 周例会:会前一页列出上次没完成的待办;导入转写后得到纪要,以及带出处的待办草稿 会议闭环.feature:上次例会留下的待办出现在本次会前一页〔回归 P0〕;导入转写稿后得到纪要与带出处的待办草稿〔回归 P0〕 26、27
AC-A15 年级组会:只列与本人有关的遗留;会后布置给本人的事成待办,要交学校的事成填报 同上:年级组会只列出与本人有关的遗留事项〔回归 P0〕;会上要交学校的事成为学校填报〔回归 P1〕 26、27、40
AC-A16 打开桌面,顶部「今天」简报显示今天的日程、到期和逾期的待办,以及放进空档的建议 今日一屏.feature:打开桌面看到今天简报里的日程与到期待办〔回归 P0〕;到期待办被建议放进当天空档〔回归 P1〕 15~18、28、79
AC-A17 投进来的东西拆成草稿,核对后落成对象;改期通知经确认后改掉原日程 统一收集.feature:群通知截图拆成待办与日程草稿〔回归 P0〕;改期通知进来时原日程改期〔回归 P1〕;分错的条目改归后按新类型落地〔回归 P1〕 19、20
AC-A18 学校通知拆成填报待办;表格按底表预填并标出不一致;点「已交」后完成 同上:学校通知拆成填报待办〔回归 P0〕;表格按底表预填并标出不一致〔回归 P0〕;点已交后填报待办完成〔回归 P1〕 40、41
AC-A19 上传整个文件夹后逐份出摘要、按项目分组;重新上传时标出差在哪 工作文件夹.feature:上传整个文件夹后逐份出摘要并按项目分组〔回归 P0〕;重新上传改过的文件标出差在哪〔回归 P1〕 24、25
AC-A20 随手记按主题调出后整理成文档,每句能点回原记录 随手记与文档.feature:随手记按主题调出并整理成文档〔回归 P0〕;文档每句能点回原记录〔回归 P0〕 21~23
AC-A21 导入课表、名单、校历后,建好课节、班级、编号和教学计划 开学与课表.feature:导入课表名单校历后建好课节与班级〔回归 P0〕 32~35
AC-A22 课后口述拆成反思、学生观察、进度标记;落后时标黄 同上:课后口述拆成反思观察与进度〔回归 P0〕;进度落后时标黄〔回归 P1〕 37
AC-A23 随手一句认领进学生档案;每周列出没有记录的学生 学生档案.feature:随手一句认领到学生档案〔回归 P0〕;每周列出没有记录的学生〔回归 P1〕 36
AC-A24 家长会前每人一页,逐句标出来源;会后按人写回档案 同上:家长会前每人一页逐句标出来源〔回归 P0〕;会后纪要按人写回档案〔回归 P1〕 38
AC-A25 私信截图认出家长和学生,进待回;回复里答应的事成待办 家长沟通与班级日常.feature:家长私信截图认出家长与学生并进待回〔回归 P0〕;回复里答应的事成为待办〔回归 P1〕 39
AC-A26 一句话考勤进班务记录;回执截图比出没回执的人 同上:一句话考勤记进班务记录〔回归 P0〕;回执截图比出未回执名单〔回归 P0〕 42、43
AC-A27 写能力只在用户确认后执行;拒绝后外部不变;卡片和对话框不能直接写 待拍板.feature:确认后飞书日历出现日程〔回归 P0〕;拒绝后外部系统不变〔回归 P0〕;卡片与对话框调写能力被拒〔回归 P0〕;执行失败显示原因且不自动重试〔回归 P1〕 06、07、60
AC-A28 别人的对象、文件、待拍板项查不到也改不了 数据归属与隐私.feature:他人的对象与文件不可见〔回归 P0〕 02、09
AC-A29 〔后续组〕送模型的内容里学生姓名已换成编号,结果里换回姓名 同上:送模型的内容不含学生姓名〔回归 P0〕;真实学生数据入库前才登记 44
AC-A30~A38 P1 场景各一条:Y05、Y08、Y12、Y13、Y15、T06、T10、T17、T20 实施时各建场景 46~54
AC-A39 演示 Agent 的写操作先进待拍板(AC-A13 的场景跟着改) 对话框与演示Agent.feature 58
AC-A40 〔后续组〕关闭开放注册后,没受邀的名字登录被拒,停用的账号进不去 演示账号与登录.feature;真实学生数据入库前才登记 11
AC-A41 第一次打开回答两问后,推荐的卡片放上桌面,今天简报条显示入门清单 第一次打开.feature:青年人回答两问后桌面放好推荐卡片〔回归 P1〕;教师场景随 WB-35(选 5.3 第 1 项 A 时随 WB-78)补 76、35

附录 D 与方案不一致或方案没覆盖的地方

  1. 「后台·待建设」的归因:方案归因于底座没有后台触发。实际上工作台后端可以自己跑后台作业(WB-03)。真正缺的是把事情推到用户眼前的通道,这正是要向底座提的「触发」需求(1.4 第 2 项)。
  2. 账号:方案没提。现状是登录即注册(apps/api/app/identity/service.py:78-96)。白晨 10-10 定首批保持不变,放真实数据前必须改(WB-11)。
  3. 写操作的保证:方案的原则是「写出去先拍板」,现状有三条绕行路径(1.1),要靠 WB-60 封堵。
  4. 口述与截图:没有语音识别来源,按输入法语音转文字处理。截图依赖多模态模型,用国产还是海外模型由探针对比后定(白晨 10-10)。
  5. 飞书前提:C 端用户未必用飞书,教师多用钉钉,首批的日程和会议以原生数据为主。
  6. 溯源强度:工程上只能保证引用存在、属于本人。
  7. 教材目录预置:这是内容工作,首批由老师自己粘贴课题目录。
  8. 学校填报格式:首批只支持单张 xlsx、首行表头。
  9. 公开分享页:方案没提免登录入口的安全问题和家长个人信息的收集,本文放在 P1。
  10. 本机与云端:方案里「计算在本机做」「名册只存本机」首批都不成立。白晨 10-10 定首批不存真实学生数据,只用化名或模拟数据,见 K6。
  11. 方案没写到的工作:部署、界面设计、试跑度量、文件安全、模型成本。本文都补成了待办项(WB-62、63、65、68、70、66、10、05)。
  12. 伟华「先做前端(可以是假的)」:本文按真实实现来拆,假前端用本周的原型代替。
  13. 界面结构:方案写的是今日一屏做首页、待拍板台单独成页;白晨 10-10 接受汇报稿的重构(桌面即今日、无左栏、全部模块、卡片点开成整页、「+ 收进来」),本文按汇报稿拆(WB-07、08、28、73~77)。原生卡三种尺寸、拖动换位、放大转场、「为你推荐」、手机底部页签按汇报稿第五节放到以后(尺寸的部分提前见 5.3 第 2 项)。

附录 E 技术风险与对策

# 风险 对策
1 截图读不准,6 个 P0 场景受影响 首周做探针,国产与海外模型一起比;都不行就改走 OCR,或者首批只收文字和文件
2 模型成本和限流:每个试跑用户每天要花多少钱还不知道,网关可能返回 429 探针时实测每次调用的 token 数,算出每人每天的成本;抽取管线做退避重试,加每用户和全局的每日预算
3 抽取不准 抽取结果一律先进待拍板;纠正率由 WB-66 采集
4 学校表格五花八门 首批只支持单张 xlsx、首行是表头
5 名字对错人 低置信度和同名必须由人确认,可以撤销
6 溯源只能证明引用存在 界面上并排显示原文,不宣称「已核实」
7 有恶意或畸形的文件 类型白名单;解析放在子进程里,设超时和内存上限;限制大小与配额
8 写操作绕过待拍板 WB-60 在 invoke_for_user 统一封堵,用端到端场景验证三条路都被拒
9 公开分享页滥用 放在 P1。令牌不可猜、可撤销,并限流
10 估时偏乐观 余量 30%;先做切片拿到真实反馈;裁剪按回归等级 @P0 → @P1 进行,不裁测试层
11 开放注册(白晨 10-10 定首批保持):任何人输入新名字就能注册,消耗模型额度、占用存储 全局每日模型预算与每人存储配额(WB-04、WB-09);试跑地址不公开传播;放真实数据前必须改成邀请或白名单(WB-11)
12 老师在化名环境里录入了真实学生信息 名册、档案页面常驻提示,试跑说明写明要求,提供化名示例数据(WB-71);试跑库在真实数据入库前清理或隔离(K6 清单第 7 项)
13 探针选了海外模型,数据会出境 首批只有化名和试跑用户自己的数据;真实学生数据入库前,重新确认能否送海外模型(K6 清单第 1 项)

附录 F 原型章节在首批哪个阶段能用

对照样板间原型的两条故事线(章节见汇报稿第四节)。日期按第四节现排;选 5.3 第 1 项 A 时在括号里注明。

线 章节 首批哪个阶段能用
教师 1 考勤 完整要到阶段四(WB-43)
教师 2 课后说两句 阶段四(WB-34、37);「本周还没记过」的计数阶段一就有(WB-36)
教师 3 家长私信 阶段一能截图认人、生成待回待办;完整要到阶段四(WB-39)
教师 4 年级组会 阶段三(WB-26、27)
教师 5 教务处通知与填报 阶段四(WB-40、41)
教师 6 接龙比对 阶段四(WB-42)
教师 7 一人一页、8 家长会后按人写回档案 阶段四(WB-38)
教师 末章 第一次打开 阶段四(WB-35);选 A 时阶段一就有两问与入门清单,不含课表(WB-78)
青年 1 日程「就这样排」写飞书 阶段二(WB-17、79;选 A 时原生日程阶段一就有)
青年 2 转进来自动拆分 阶段一(WB-19)
青年 3 周会 阶段三(WB-26、27)
青年 4 文件夹 阶段二(WB-25)
青年 5 随手记整理成文 阶段三(WB-23)
青年 6 改期截图 阶段三(WB-20)
青年 7 一天小结 今天简报阶段一(WB-28),日程部分阶段二
青年 末章 第一次打开 阶段二(WB-76)