08_归档04_VOZEB任务卡
VOZEB-UI-MIGRATION-02-M02 — API 与密钥 Ocean Foundation 视觉切片
Task ID: VOZEB-UI-MIGRATION-02-M02
目标用户结果: 登录用户可以在 OceanWay 壳层中安全地管理自己的通用 API Key
Feature ID / Atomic Requirement IDs: KEY-P0-001-R02、KEY-P0-001-R03、KEY-P0-001-R05、KEY-P0-002
Base SHA: 834e4cb1cda8573d2bcb56e2758f6fbe4ed78a23
必须阅读: VOZEB-UI-FOUNDATION-01.md;VOZEB-RETAIL-NEXT-KEY-MODEL-USAGE-01.md;现有 Retail Key 契约
允许修改: 本任务包;web/src/app/(user)/keys/page.tsx;同目录 Key 页面 contract test
禁止修改: Retail BFF、contracts、服务 API、Foundation/shared components、左侧导航、其它页面、数据库、迁移和部署文件
范围: 用已完成 Ocean Foundation 组件重构 Key 列表、创建、显式取回、复制和删除确认的布局与状态反馈
非目标: 改变 Secret、会话、所有权、删除失效、存储、日志、端点或任何其它路由语义
已冻结契约与数据模型: list/create/reveal/delete typed adapter;列表只含脱敏 metadata;Secret 仅在当前用户对单 Key 明确操作后短暂进入内存
安全与数据限制: Secret 不进入 URL、LocalStorage、SessionStorage、普通列表、toast、分析事件或批量响应;创建成功与取回成功均支持显式复制
验收命令: pnpm exec vitest run src/app/(user)/keys/page.test.tsx;pnpm exec tsc --noEmit --pretty false;pnpm exec eslint src/app/(user)/keys/page.tsx src/app/(user)/keys/page.test.tsx --quiet;pnpm exec prettier --check docs/oceanway/VOZEB-UI-MIGRATION-02-M02-KEYS.md web/src/app/(user)/keys/page.tsx web/src/app/(user)/keys/page.test.tsx;git diff --check
人工决策点: 本切片为 LOCAL_CANDIDATE / CANDIDATE_EVIDENCE / NOT_FORMAL_TEST;需独立 Testing 与用户确认后方可进入后继页面集成
交付物: Ocean Foundation Key 管理页面候选、页面 contract test、该切片任务包验收边界
- 页面继续调用既有 typed Retail API;不复制业务校验、不读取浏览器 Cookie、不改变 Secret 响应或所有权边界。
- 列表、创建、取回、删除确认和成功/失败提示均使用 Ocean Foundation 的单层 Glass/Card/Dialog 语义;不叠加第二个玻璃边框或页面内自造材质。
- 删除确认明确说明“立即失效、不可恢复、历史用量保留”,并支持键盘焦点与 Escape 取消;不使用浏览器原生确认框。
- 创建表单校验错误留在 Dialog 内,列表加载错误只在列表区域提供原位重试;不同动作的错误不互相覆盖。
- 完整 Secret 只在创建成功或单 Key 显式取回状态中存在,并在关闭成功提示、隐藏或页面离开后清空对应状态;不进入 URL、持久化存储或普通通知。
- active/disabled/expired 使用现有 DTO 状态;未知状态不改变契约,页面以安全的中性文案回退。
- 桌面、窄桌面和 390/430 移动视口不得水平溢出;loading/refreshing/empty/error/forbidden/submitting、浅深主题、reduced-motion/transparency 和 forced-colors 保持可理解。
- 本候选不提升 Product、Design、Development、Testing 或 Operations 正式状态。