Преглед на файлове

docs(roadmap): mark M1 complete — deployment_mode + webui + dogfood

M1 (Desktop runtime + 单 mode 改造) 全部交付, 提前于 7-21 计划完成。

更新内容:
- "Next (M1)" 段改为 "✅ M1 完成", Phase B + Phase C 全部勾选 + commit 引用
- 记录 dogfood 抓到的 2 个 bug + 修复 (webui-dist 回归 / FR-001 死路)
- 记录 2 个已知小瑕疵 (step3 文案 / Dashboard header 未 mode-aware) 留 M2
- 现状段更新: 132 → 156 test; M1 完成; 下一步 = M0 3 非软件项 + M2 软件
- M0 spike 标完成 (Claude owner), 剩 3 项 (Apple/Windows EV/alpha) 是 Kenny 手动项

不发 v1.0.0-rc3:
  M1 是基础设施层 (mode flag + UI 重构), 对外用户可见价值要等 M2 的
  AgentPack + 内置科研 pack 才完整。rc3/v1.1 留到 M2 收尾时一起发,
  避免 "空有 desktop 壳没有 agent pack" 的半成品 release。

CR rev.2 核心假设已实测验证: 319 处 tenant_id 零改动, Q10 三档
mode-transition 全绿 — 多租户能力 100% 保留。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
kenny67nju преди 3 месеца
родител
ревизия
e58605acf7
променени са 1 файла, в които са добавени 43 реда и са изтрити 32 реда
  1. 43 32
      ROADMAP.md

+ 43 - 32
ROADMAP.md

@@ -16,10 +16,14 @@ paas     → 云端/私有化 (N tenant)             (v2+, 已有完整能力)
 
 ## 现状(截至 2026-06-07)
 
-- `v1.0.0-rc2` 已发布,CI 全绿,132 测试通过 Python 3.10/3.11/3.12
+- `v1.0.0-rc2` 已发布,CI 全绿,**156 测试**通过 Python 3.10/3.11/3.12
 - audit 84 finding 关闭 28 个(critical 7/7、high 22/33)
 - 仓库 private,PaaS 叙事完整
 - CR rev.2 + 12 个开放问题决策已 commit
+- **M1 完成**:`deployment_mode` 三档落地(desktop 默认),webui mode-aware,
+  FR-001 一键登录 + FR-002 数据目录就位,dogfood 三档 UI 验收通过
+- **下一步 = M0 的 3 个非软件项**(Apple Developer / Windows EV / alpha 用户)
+  + **M2 软件**(AgentPack format + PDF 引用 + 3 个内置 pack)
 
 ---
 
@@ -31,48 +35,55 @@ paas     → 云端/私有化 (N tenant)             (v2+, 已有完整能力)
 |---|---|---|---|
 | 答 CR §13.1 + §13.2 共 12 个开放问题,记录到 CR doc | Kenny | CR rev.2-decisions commit ✓ | ✅ 完成 |
 | 起草 `ROADMAP.md` | Kenny | 本文档 ✓ | ✅ 完成 |
-| 申请 Apple Developer 账号 ($99/年) | Kenny | 收到 Apple ID 启用确认邮件 | 🔲 待办 |
-| 启动 Windows EV 代码签名证书申请(需 ≥3 个月) | Kenny | DigiCert/Sectigo 申请单提交 | 🔲 待办 |
-| 决定第一批 alpha 用户名单(3-5 位教授/博士) | Kenny | 名单 + 试用承诺 | 🔲 待办 |
-| spike: `deployment_mode` flag 200 LOC 估算 | Kenny | 1 个 PR 跑通 desktop / lab / paas mode 切换,132 test 全绿 | 🔲 待办 |
+| spike: `deployment_mode` flag 200 LOC 估算 | Claude | 88bdddb: 143 LOC + 11 test; 132 老 test 全绿 ✓ | ✅ 完成 |
+| 申请 Apple Developer 账号 ($99/年) | Kenny | 收到 Apple ID 启用确认邮件 | 🔲 待办 (M0) |
+| 启动 Windows EV 代码签名证书申请(需 ≥3 个月) | Kenny | DigiCert/Sectigo 申请单提交 | 🔲 待办 (M0) |
+| 决定第一批 alpha 用户名单(3-5 位教授/博士) | Kenny | 名单 + 试用承诺 | 🔲 待办 (M0) |
+
+> **M0 备注**: 软件侧(spike)已完成并直接滚入 M1。剩 3 项是账号/证书/
+> 人脉,需 Kenny 手动推进,不阻塞 M1 代码工作。
 
 ---
 
-## Next (1.5 个月内 — M1, 至 2026-07-21)
+## ✅ M1 完成 (2026-06-07, 至 2026-07-21 计划 → 提前完成)
+
+**主题**: Desktop runtime + 单 mode 改造 — **全部交付,CI 全绿,dogfood 验收通过**
+
+实测成本: CR rev.2 估算 ~200 LOC,实际生产代码约 480 LOC(含 FR-002 +
+FR-001 + dogfood 修复),新增 24 个 test(132 → 156 root tests)。
+
+### Phase B — Desktop runtime ✅ (88bdddb + 56eebc7)
+
+- [x] `config.py` 加 `deployment_mode = desktop|lab|paas`(默认 desktop)+ 非法值 fail-fast
+- [x] `setup.py` `auto_bootstrap_desktop()`:首启建 `tenant_id="tn_local_{hex}"`(Q11 匿名)+ `tenants.name="{hostname}/{user}"` alias + admin key 写 `~/.agentpaas/config.json`;幂等
+- [x] `app.py` mode-aware 路由 gating:desktop 下 `/admin/*` `/billing/*` 强制 404(Q9 oracle 防御)
+- [x] mode-transition smoke test(Q10):desktop→lab→paas→desktop 四档全跑通 + tenant scope assert
+- [x] Network bind 默认值:desktop/lab `127.0.0.1`、paas `0.0.0.0`(Q12),`AGENTPAAS_HOST` 可覆盖
+- [x] data_dir mode 分流(FR-002):desktop `~/LambdAgentDesktop`、lab/paas `~/.agentpaas/data`
+- [x] `GET /setup/mode` 端点(Q8 webui 接口)
 
-**主题**: Desktop runtime + 单 mode 改造
+### Phase C — Webui Desktop 工作台改造 ✅ (ff61e59 + 9e933e4 + 891775f + 904c876)
 
-按 CR §十一 M1 + §10.2 的实现细节展开:
+- [x] 顶栏 mode chip(Q8):🖥️ Desktop / 👥 Lab · {tenant} / ☁️ PaaS · {tenant}(teal/amber/indigo)
+- [x] 文案重命名:Dashboard→今日工作、Knowledge→资料库、Providers→模型与隐私、Chat→研究任务工作台(desktop)
+- [x] 首次启动向导 mode-aware brand(ResearchAgent Desktop)+ 数据目录展示(FR-002)+ Claude Code 推荐(Q4)
+- [x] SR-002 隐私 modal:会发送/不会发送两列对照,desktop 首次强制弹窗(持久化 ack)
+- [x] FR-001 一键登录:desktop + bootstrapped → `/setup/desktop-key` 自动取 key 跳 dashboard,教授双击即用
 
-### Phase B — Desktop runtime(≈1 周)
+### dogfood 验收 (904c876) — 真实服务 + 浏览器走通三档
 
-- [ ] `agentpaas/src/agentpaas/config.py` 加 `deployment_mode: Literal["desktop", "lab", "paas"]`
-- [ ] `agentpaas/src/agentpaas/api/v1/setup.py` 加 `mode=desktop` 自动 bootstrap 路径
-  - 首次启动: 创建 `tenant_id="local-{uuid}"`, `tenants.name="{hostname}/{user}"` (Q11), admin API key 写入 `~/.agentpaas/config.json`
-  - 后续启动: 直接读 config,跳过 wizard
-- [ ] `agentpaas/src/agentpaas/api/app.py` mode-aware 路由 mount
-  - `mode=desktop`: `/tenants/*` `/billing/*` `/admin/*` 路由仍 mount 但 middleware 强制 404 (Q9)
-  - `mode=lab|paas`: 完整暴露
-- [ ] mode-transition smoke test(Q10): 三档全跑通 + tenant scope assert
-- [ ] Network bind 默认值: desktop `127.0.0.1` / lab `127.0.0.1`(Q12 默认安全)/ paas `0.0.0.0`
+抓到并修复 2 个单元测试查不出的真 bug:
+- **webui-dist 静态服务回归**(src-layout 迁移后 `../../webui-dist` 失效 → 整个 desktop app 不出 UI)→ `_resolve_webui_dist()` 多候选路径探测
+- **FR-001 向导死路**(auto-bootstrap 写了 key 但向导让用户贴 key)→ `/setup/desktop-key` + 向导自动登录
 
-### Phase C — Webui Desktop 工作台改造(≈1-2 周
+### 已知小瑕疵(非阻塞,留 M2 打磨)
 
-- [ ] 顶栏 mode chip(Q8): `🖥️ Desktop` / `👥 Lab · {tenant}` / `☁️ PaaS · {tenant}`
-- [ ] 文案重命名(无逻辑改动)
-  - `Dashboard` → 今日工作 / 最近报告 / 知识库状态
-  - `Knowledge` → 本地资料库
-  - `Providers` → 模型与隐私
-  - `Chat` → 专业任务工作台
-- [ ] 首次启动向导:数据目录 `~/LambdAgentDesktop/`(FR-002)+ provider 选择(Q4: Claude Code 默认)
-- [ ] SR-002 隐私警告 dialog: 调用云端模型前列出 "将发送 / 不发送" 清单
-- [ ] mode=desktop 时隐藏 webui 侧栏的 admin / billing / tenants 入口
+- 向导 step3 panel 内文案 "初始化平台" 未 mode-aware(pill 已是 "完成设置";desktop 一键登录后看不到此步)
+- Dashboard PageHeader "仪表盘" 未 mode-aware(sidebar 已是 "今日工作")
 
-### 关键依赖与风险
+### 验证的核心假设
 
-- Apple Developer 账号必须本月内 active(M3 才能 notarize macOS 包)
-- Windows EV 证书排队期间,Phase B+C 完全可以并行
-- `319 处 tenant_id 引用` 完全不动,Q10 smoke test 是这条假设的最终验证
+✅ **CR rev.2 战略成立**:`319 处 tenant_id 引用` 完全没动,Q10 mode-transition smoke 全绿 — 多租户能力 100% 保留,desktop 只是默认隐藏。从 desktop 升 lab/paas = 改一行 `AGENTPAAS_DEPLOYMENT_MODE` + 重启。
 
 ---