feat: 实现 MVP-1 可逆迁移与 admin 基线 (#19) #20

Closed
opened 2026-08-21 16:07:25 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:需求
  • 所属 Epic:#3
  • 所属 MVP / 版本:#19 / MVP-1
  • 阶段:已完成

原始需求

  • 来源:用户对话与已确认 MVP-1 技术设计、管理端原型 #17、用户端原型 #18。
  • 提出时间:2026-08-21
  • 脱敏摘要:按已确认 MVP-1 范围建立生产实现单元工单。

文档影响

  • 不影响长期文档,原因:本工单实现已确认设计;入口、契约、规则或验证方法确有变化时,在验收前更新相应核心 Wiki。
  • 更新项目档案或本地开发与验证
  • 更新架构与代码地图
  • 更新业务规则与术语
  • 更新常见修改或故障排查
  • 更新其他 Wiki 页面:

交付文档影响

  • 无交付文档影响,原因:本工单交付内部实现,最终用户操作文档待功能集成后统一评估。
  • 更新已有交付文档,受众与页面:
  • 新增交付文档,受众与页面:

变更控制

  • 不增加计费扣点、支付、配额、内容审核、公开注册、MVP-2 API Key/openapi 或其他已排除范围。
  • 不使用真实 Provider 额度进行调试;自动化与开发使用 mock。
  • 实施开始前复核依赖工单、工作区和已确认设计;完成后保持“待验收”,由用户明确验收后关闭。

依赖与并行

  • 前置工单:无(#16/#17/#18 已完成设计门禁)
  • 是否允许并行:否;其他 MVP-1 生产工单依赖本迁移提供的表、字段、约束与种子。

目标与范围

实现 00002_admin_baseline、00003_mvp1_routing、00004_mvp1_admin_seed 的 up/down,覆盖锁定 go-admin 的最小 sys_* 基线、Provider 凭据版本、能力、路由池、熔断 runtime、连通性检查、审计以及 generation/generation_inputs/prompt_templates 增量字段。

不实现路由算法、上游调用、管理 API 或页面逻辑。

已确认方案

严格按 #16 固定顺序 000002→000003→000004 和反向 down;生产禁止 AutoMigrate。00003 先建新表并回填校验,再添加外键/检查约束并清空旧密钥列;down 从活动 credential 恢复旧列。00004.down 只按稳定唯一键删除本项目种子;00002.down 只在无管理员业务数据时允许。

验收标准

  • 空 MySQL 8 和含 MVP-0 数据的隔离库均完成 up/down/up,保留行数与 MVP-0 可读性。
  • 表、外键、索引、CHECK、回填与删除规则符合 #16 数据设计。
  • 凭据信封、active credential、路由与 generation 增量字段的 up/down 数据恢复被验证。
  • 管理菜单/API/权限种子可逆且不按模糊名称删除。

验证

  • 隔离 MySQL 8 上执行全部 up/down/up 和 schema/assertion 测试。
  • 运行受影响 Go 测试、go test ./... 与迁移静态检查。

实施结果与证据(2026-08-21)

  • 已新增 000002_admin_baseline、000003_mvp1_routing、000004_mvp1_admin_seed 三对可逆 SQL。生产结构仍只由 migrations/ 演进,未引入 AutoMigrate。
  • 000002 固化固定 go-admin 提交 f06540883b41d03782bb6b2c4150f298f328c6b6 所需的身份、权限和 CRUD 元数据基线;不创建管理员账号或任何已知密码。000004 仅以角色键、菜单路径和 API handle 写入/删除 Chorus 种子。
  • 000003 完成 AES-GCM 凭据信封回填与可逆恢复、active credential、模型能力、路由/熔断 runtime、连通性检查、审计、generation 路由快照和图片 note 的数据演进。
  • 新增迁移静态契约测试与显式 MySQL 集成测试。后者仅在 CHORUS_RUN_MIGRATION_TESTS=1 时运行,并只使用本机 chorus_test 隔离库。
  • 隔离 MySQL 8:up -> legacy MVP-0 fixture -> up -> down 3 -> up 通过,验证凭据回填/恢复、MVP-0 generation 保留、能力、admin 种子和 schema。另一次空库 up -> down -all -> up 通过,最终版本为 4;无终端用户、1 个 Chorus 角色、18 个 Chorus API 种子。
  • 通过:go build ./...、go vet ./...、go test -count=1 ./...、go test -race -count=1 ./migrations、python dev_scripts/harness.py check --strict、python -m unittest discover -s tests -v(42 项)。
  • 提交:6035ac4d9a4da2f52f5dc05f4e7a9e3791f39b95,已推送至 main。
  • 长期文档影响:无。已确认的数据设计、迁移编号与验证入口均已记录在现有核心 Wiki;本次没有改变对外入口或稳定业务规则。
  • 未验证:尚未接入 go-admin 二进制、管理 API 或管理 UI;这些由 #21-#24 依赖工单实现。未调用真实 Provider,也未使用真实用户或生产数据。
  • 任务归档:Task-20-MVP-1-可逆迁移与-admin-基线,revision ff507c8a540f239f76d8daf33bd0d8321352b7e2;harness.py sync --check 通过,未导出 docs/task/。

验收结论(2026-08-21)

  • 用户明确确认 #20 验收通过。

  • MySQL 8 迁移、回退、静态契约与全仓验证结果维持有效;未增加任何真实 Provider 调用或敏感数据。

  • 验收镜像提交:0dc73eed76b2bd467e98f598d4d629f423bcc6d,已推送至 main。

## 基本信息 - 类型:需求 - 所属 Epic:#3 - 所属 MVP / 版本:#19 / MVP-1 - 阶段:已完成 ## 原始需求 - 来源:用户对话与已确认 MVP-1 技术设计、管理端原型 #17、用户端原型 #18。 - 提出时间:2026-08-21 - 脱敏摘要:按已确认 MVP-1 范围建立生产实现单元工单。 ## 文档影响 - [x] 不影响长期文档,原因:本工单实现已确认设计;入口、契约、规则或验证方法确有变化时,在验收前更新相应核心 Wiki。 - [ ] 更新项目档案或本地开发与验证 - [ ] 更新架构与代码地图 - [ ] 更新业务规则与术语 - [ ] 更新常见修改或故障排查 - [ ] 更新其他 Wiki 页面: ## 交付文档影响 - [x] 无交付文档影响,原因:本工单交付内部实现,最终用户操作文档待功能集成后统一评估。 - [ ] 更新已有交付文档,受众与页面: - [ ] 新增交付文档,受众与页面: ## 变更控制 - 不增加计费扣点、支付、配额、内容审核、公开注册、MVP-2 API Key/openapi 或其他已排除范围。 - 不使用真实 Provider 额度进行调试;自动化与开发使用 mock。 - 实施开始前复核依赖工单、工作区和已确认设计;完成后保持“待验收”,由用户明确验收后关闭。 ## 依赖与并行 - 前置工单:无(#16/#17/#18 已完成设计门禁) - 是否允许并行:否;其他 MVP-1 生产工单依赖本迁移提供的表、字段、约束与种子。 ## 目标与范围 实现 00002_admin_baseline、00003_mvp1_routing、00004_mvp1_admin_seed 的 up/down,覆盖锁定 go-admin 的最小 sys_* 基线、Provider 凭据版本、能力、路由池、熔断 runtime、连通性检查、审计以及 generation/generation_inputs/prompt_templates 增量字段。 不实现路由算法、上游调用、管理 API 或页面逻辑。 ## 已确认方案 严格按 #16 固定顺序 000002→000003→000004 和反向 down;生产禁止 AutoMigrate。00003 先建新表并回填校验,再添加外键/检查约束并清空旧密钥列;down 从活动 credential 恢复旧列。00004.down 只按稳定唯一键删除本项目种子;00002.down 只在无管理员业务数据时允许。 ## 验收标准 - [x] 空 MySQL 8 和含 MVP-0 数据的隔离库均完成 up/down/up,保留行数与 MVP-0 可读性。 - [x] 表、外键、索引、CHECK、回填与删除规则符合 #16 数据设计。 - [x] 凭据信封、active credential、路由与 generation 增量字段的 up/down 数据恢复被验证。 - [x] 管理菜单/API/权限种子可逆且不按模糊名称删除。 ## 验证 - 隔离 MySQL 8 上执行全部 up/down/up 和 schema/assertion 测试。 - 运行受影响 Go 测试、go test ./... 与迁移静态检查。 ## 实施结果与证据(2026-08-21) - 已新增 `000002_admin_baseline`、`000003_mvp1_routing`、`000004_mvp1_admin_seed` 三对可逆 SQL。生产结构仍只由 `migrations/` 演进,未引入 AutoMigrate。 - `000002` 固化固定 go-admin 提交 `f06540883b41d03782bb6b2c4150f298f328c6b6` 所需的身份、权限和 CRUD 元数据基线;不创建管理员账号或任何已知密码。`000004` 仅以角色键、菜单路径和 API handle 写入/删除 Chorus 种子。 - `000003` 完成 AES-GCM 凭据信封回填与可逆恢复、active credential、模型能力、路由/熔断 runtime、连通性检查、审计、generation 路由快照和图片 note 的数据演进。 - 新增迁移静态契约测试与显式 MySQL 集成测试。后者仅在 `CHORUS_RUN_MIGRATION_TESTS=1` 时运行,并只使用本机 `chorus_test` 隔离库。 - 隔离 MySQL 8:`up -> legacy MVP-0 fixture -> up -> down 3 -> up` 通过,验证凭据回填/恢复、MVP-0 generation 保留、能力、admin 种子和 schema。另一次空库 `up -> down -all -> up` 通过,最终版本为 4;无终端用户、1 个 Chorus 角色、18 个 Chorus API 种子。 - 通过:`go build ./...`、`go vet ./...`、`go test -count=1 ./...`、`go test -race -count=1 ./migrations`、`python dev_scripts/harness.py check --strict`、`python -m unittest discover -s tests -v`(42 项)。 - 提交:`6035ac4d9a4da2f52f5dc05f4e7a9e3791f39b95`,已推送至 `main`。 - 长期文档影响:无。已确认的数据设计、迁移编号与验证入口均已记录在现有核心 Wiki;本次没有改变对外入口或稳定业务规则。 - 未验证:尚未接入 go-admin 二进制、管理 API 或管理 UI;这些由 #21-#24 依赖工单实现。未调用真实 Provider,也未使用真实用户或生产数据。 - 任务归档:[Task-20-MVP-1-可逆迁移与-admin-基线](https://git.ilapage.cn/OPC/chorus/wiki/Task-20-MVP-1-%E5%8F%AF%E9%80%86%E8%BF%81%E7%A7%BB%E4%B8%8E-admin-%E5%9F%BA%E7%BA%BF.-),revision `ff507c8a540f239f76d8daf33bd0d8321352b7e2`;`harness.py sync --check` 通过,未导出 `docs/task/`。 ## 验收结论(2026-08-21) - 用户明确确认 #20 验收通过。 - MySQL 8 迁移、回退、静态契约与全仓验证结果维持有效;未增加任何真实 Provider 调用或敏感数据。 - 验收镜像提交:0dc73eed76b2bd467e98f598d4d629f423bcc6d,已推送至 main。
ila closed this issue 2026-08-21 17:04:48 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/chorus#20