61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# Goal:执行 7-76(AI 主体 · Web PAT · 鉴权硬化 · 用户级密码箱)
|
||||
|
|
|
|||
|
|
> 创建:2026-07-26
|
|||
|
|
> 状态:`P0–P1b DONE`(P2 deferred;§12 部分 e2e 残留见设计稿 12.5)
|
|||
|
|
> 设计 SSOT:`design/07-ai/process/7-76-ai-principal-web-pat-and-auth-hardening-v1.md`
|
|||
|
|
> 触发:用户要求「设置 goal,开始执行 7-76」
|
|||
|
|
|
|||
|
|
## Goal 文案(可贴任务板)
|
|||
|
|
|
|||
|
|
**在 7-76 边界下,分阶段交付:开发对标生产鉴权、Web PAT 机机访问、AI 主体隔离面、一人一密码箱 + share-to-AI;本迭代先完成 P0(撤登录页快速登录后门并校准测试/文档/smoke 登录路径)。**
|
|||
|
|
|
|||
|
|
## 成功标准(整条 7-76)
|
|||
|
|
|
|||
|
|
1. `/auth` 无测试快速登录、无测试密码 DOM;开发与生产登录形态一致。
|
|||
|
|
2. 外部 AI 可凭 Web PAT 在授权范围内完成笔记/树 CRUD,默认不接 Pi。
|
|||
|
|
3. `mnote-e2e` 为 AI 主体:私有笔记/知识库/vault;普通用户不可进。
|
|||
|
|
4. 密码箱按用户隔离;share-to-AI 可验;admin 代签可审计。
|
|||
|
|
5. cookie / PAT / mnv1 / mnext1 分职。
|
|||
|
|
|
|||
|
|
## 阶段看板
|
|||
|
|
|
|||
|
|
| 阶段 | 内容 | 状态 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| **P0** | 删除快速登录;测试/文档/smoke 改标准登录或 API | `done` |
|
|||
|
|
| **P0.5** | `api_access_tokens` + Bearer 中间件 + `/user/ai` PAT UI(可复显) | `done` |
|
|||
|
|
| **P1** | 用户级 vault root + owner + share-to-AI | `done`(复用既有一人一箱路径 + share-to-AI;补 Web 签发 vault token) |
|
|||
|
|
| **P1b** | Admin 代签 PAT/vault token、AI 主体运营、审计 | `done` |
|
|||
|
|
| **P2** | exchange 短会话、break-glass、reveal 模式开关等 | `deferred`(非本轮阻塞) |
|
|||
|
|
|
|||
|
|
## P0 Checklist
|
|||
|
|
|
|||
|
|
- [x] `AuthPage` 移除快速登录按钮、`TEST_ACCOUNT_*` DOM、quickLogin 脚本分支
|
|||
|
|
- [x] `gateway` SSR 测试:断言 **不存在** 快速登录与 `data-test-password`
|
|||
|
|
- [x] `scripts/tree-shell-smoke-helpers.js` UI 登录改为表单标准登录
|
|||
|
|
- [x] 各 smoke 中「点击测试账号快速登录」改为表单/API(共享 helper)
|
|||
|
|
- [x] `AGENTS.md` / `TESTING_REFERENCE.md` 去掉「优先快速登录」
|
|||
|
|
- [x] `cargo test -p mnote-web` 定向 auth 相关通过
|
|||
|
|
|
|||
|
|
## 当前切片
|
|||
|
|
|
|||
|
|
- **已完成:** P0 → P1b 主交付(P2 延后)
|
|||
|
|
- **实现要点:** 见下节「交付清单」
|
|||
|
|
|
|||
|
|
## 交付清单(本轮代码)
|
|||
|
|
|
|||
|
|
- [x] P0 撤 `/auth` 快速登录;smoke 标准登录 helper
|
|||
|
|
- [x] Web PAT:`/api/ai-tokens*` 签发/列表/复显/吊销;sealed 可复显
|
|||
|
|
- [x] Bearer `mnpat1.*` 中间件;PAT 忽略 cookie;scope 接线 notes/tree/tools
|
|||
|
|
- [x] `/user/ai` 与 `/admin/ai` UI:API 访问令牌 + 密码箱 AI 访问
|
|||
|
|
- [x] vault agent token:`POST /api/vault/ai/token`(本人/admin 代签 + 审计)
|
|||
|
|
- [x] AI 主体:`mnote-e2e` 注册 `role=ai_service`;用户列表 `principalKind`
|
|||
|
|
- [x] 密码箱 share-to-AI / 用户 vault 路径沿用 12-x 既有实现
|
|||
|
|
|
|||
|
|
## 变更记录
|
|||
|
|
|
|||
|
|
| 日期 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| 2026-07-26 | 建 goal;完成 P0–P1b 实现与定向单测。 |
|
|||
|
|
| 2026-07-26 | **方案 A 账户分离**:新建 `mnote-admin`(ops);`liaibo`/`mnote-e2e` 去 admin;`mnote-e2e` → `ai_service`;`MNOTE_ADMIN_USER_IDS` + `access-policy.admins` 仅 admin;Pi Lab smoke admin seed 改 `withAdminBrowserSession`。 |
|
|||
|
|
| 2026-07-26 | 对照代码核验;设计稿 §12 勾选已完成项;修 `test-handle-qa.js` 残留快速登录。 |
|