M1 契约与数据地基(波次 1,无依赖)
决策依据:§6.6、requirements #23-26。
- packages/contracts:MailProvisioner 四方法接口(createAccount / disableAccount / enableAccount / resetPassword),只开 M1 用到的方法,不为想象需求加方法
- core D1 迁移:
· users 表扩展(issuer+sub 唯一约束、email claim 列、status、个人邮箱列)
· invites 表(一次性令牌哈希、状态机:pending/approved/rejected/consumed/expired、个人邮箱、前缀)
· notification_types 表(type/文案模板/渠道位)+ notifications 表
· DROP TABLE IF EXISTS oidc_flows(M0 死表,全仓零引用)
- zod schema 全部带导出类型;单测覆盖状态机非法迁移拒绝
文件归属:packages/contracts/*、services/core-api 迁移目录。分支 m1/issue-47,PR base m1/dev。
验收:typecheck/test/build 三件套全绿;迁移在本地 miniflare D1 幂等重跑通过。
M1 契约与数据地基(波次 1,无依赖)
决策依据:§6.6、requirements #23-26。
· users 表扩展(issuer+sub 唯一约束、email claim 列、status、个人邮箱列)
· invites 表(一次性令牌哈希、状态机:pending/approved/rejected/consumed/expired、个人邮箱、前缀)
· notification_types 表(type/文案模板/渠道位)+ notifications 表
· DROP TABLE IF EXISTS oidc_flows(M0 死表,全仓零引用)
文件归属:packages/contracts/*、services/core-api 迁移目录。分支 m1/issue-47,PR base m1/dev。
验收:typecheck/test/build 三件套全绿;迁移在本地 miniflare D1 幂等重跑通过。