feat: 实现核心领域模型与 Prompt 渲染 #7

Closed
opened 2026-08-20 18:01:00 +08:00 by ila · 0 comments
Owner

基本信息

  • 类型:需求
  • 所属 Epic:#3
  • 所属 MVP / 版本:#4(MVP-0)
  • 阶段:已完成

依赖与并行

  • 前置工单:#6
  • 是否允许与前置工单并行:否
  • 原因:依赖项定义本工单所需的可执行环境、共享模型、接口或已确认设计;未满足时保持待实施,不标记阻塞。

子项目影响

  • 仅影响的子项目 / 交付单元:internal/core
  • 是否跨子项目:否
  • 是否修改共享接口或契约:是;定义模型、仓储和 provider/queue/storage/crypto 接口
  • 各子项目需要执行的验证:见“验证方式”和验收标准。

原始需求

  • 来源:用户对话;Product-Requirements-Overview、Architecture-and-Code-Map、Business-Rules-and-Glossary
  • 提出时间:2026-08-20
  • 关键原话或脱敏摘要:用户要求“为 MVP-0 的生产实现拆分单元工单”;本工单负责 实现核心领域模型、状态规则和已确认 Prompt 渲染。

要解决什么

后续队列、Provider、portal 和 platform 需要稳定且不依赖 Gin/go-admin 的领域契约。本工单只建立核心模型、接口和可纯单测的业务规则。

做什么 / 不做什么

做

  • 映射迁移定义的核心模型和枚举,明确状态机与终态不可回退规则。
  • 定义 provider、queue、storage、crypto 的最小接口和错误类型。
  • 实现 chat、images_edits Prompt 渲染,使用 Go text/template 且只开放 UserPrompt。
  • 第一张图片标记 primary,其余 reference,保持上传顺序并生成可持久化 rendered_prompt。
  • 定义 retryable 分类契约和稳定错误码,不在本工单实现 HTTP。

不做

  • 不 import Gin、go-admin、gobreaker、imaging 或具体 HTTP/文件系统实现。
  • 不访问上游、数据库队列或用户会话,不实现多 Provider 选路。
  • 不加入点数、配额、计费或 MVP-1 图片角色编辑。

已确认方案

  • core 只依赖 GORM 和标准库;以接口反转平台依赖。
  • 模板解析使用 missingkey=error 等失败关闭策略,缺少变量或非法模板返回可定位错误。
  • retryable 契约固定:429/5xx/超时/连接可重试,400/401/策略拒绝立即失败;MVP-0 不换家。

预计修改文件:

  • internal/core/model/
  • internal/core/provider/
  • internal/core/generate/
  • internal/core/router/
  • internal/core/storage/、internal/core/crypto/ 接口
  • 同目录 Go 单元测试

需求变化记录

  • 2026-08-20:#6 已通过实现验收并提供 migration version 1 的已验证 schema;#7 只映射该 schema,不运行或新增迁移。GORM 固定为用户指定 go-admin 提交使用的 v1.31.2。实现中若范围、接口、数据、依赖、验收或风险发生变化,必须先更新本工单;改变已确认结果时重新等待用户确认。

设计与原型门禁

  • 修改类型:非 UI
  • 所需设计证据:已确认的架构、数据、安全或流程设计;不要求 UI 原型
  • 事实来源:核心 Wiki 与父工单 #4
  • 状态:已确认;具体实现差异仍须按工单变化规则处理
  • 无需 UI 原型原因:本工单不改变用户界面

文档影响

  • 不影响长期文档
  • 按实际变化更新 Project-Profile、Architecture-and-Code-Map、Local-Development-and-Verification、Deployment-and-Operations 或 Business-Rules-and-Glossary
  • Wiki 先改、在线回读后再同步 docs/,不得直接维护镜像

交付文档影响

  • 无交付文档影响,原因:内部实现任务;若实际改变部署、配置或支持方式,执行前更新本项
  • 更新已有交付文档
  • 新增交付文档

验收标准

  • core 依赖检查确认无 Gin、go-admin、gobreaker、imaging。
  • chat 原样渲染 UserPrompt;images_edits 与已确认模板逐字一致。
  • 缺少变量、模板解析失败和空输入返回明确错误。
  • 图片顺序和 primary/reference 规则正确,rendered_prompt 可直接落库。
  • retryable 四类红线用例全部覆盖且结果符合项目红线。

验证方式

  • go test ./internal/core/...
  • go vet ./internal/core/...
  • 依赖导入扫描
  • Prompt golden tests 和 retryable 表驱动测试

未执行或因环境不足无法执行的验证必须如实回写,不得把预期结果记为通过。

风险和回退

  • 风险:共享接口设计错误会扩散到所有子项目;只保留 MVP-0 必需接口,不预先设计 MVP-1 扩展。
  • 风险:错误分类变化触及红线;任何变化必须更新工单并重新确认。
  • 回退:回退本工单提交;数据库 schema 不在本工单改变。

实施与验证证据(2026-08-20)

  • 实现:7 个 GORM 模型、状态机、model/provider/queue/storage/crypto 接口、Prompt 渲染、图片角色和 retryable 分类。
  • GORM:固定 v1.31.2,与用户指定 go-admin 提交一致;schema parser 核对 7 表完整列集合。
  • Prompt:chat 原文、images_edits golden、空输入/非法语法/缺少或未知变量/额外构造均有测试。
  • 红线:429、5xx、超时、连接为 retryable;400、401、策略拒绝和未知错误不可重试。
  • 验证:core test/vet/race、全项目 build、禁用依赖扫描、Harness 严格检查、42 项 Python 测试、Wiki 镜像检查和 diff 检查均通过。
  • 核心 Wiki Architecture revision:525b833916552d1f2203ef462ea42f5e8a853270。
  • 任务归档 revision:78fc8b7b2c9a79446cb89c19a6182cbb47b32169。
  • 提交:11789d8071a1ce621cca3eeda63448772738502b、62017df9b083e19ef26886f7ae2130427fe1e862,均已推送。
  • 未验证:上游、队列、文件系统与会话属于后续工单。

当前状态:待用户验收,不关闭。#8 可顺序继续。

验收结论

  • 用户于 2026-08-21 明确确认 #7 验收通过。
  • MVP-0 单元验收文档提交:919e11f,已推送到 main。
  • 任务归档 revision:deaab0f378f4。
## 基本信息 - 类型:需求 - 所属 Epic:#3 - 所属 MVP / 版本:#4(MVP-0) - 阶段:已完成 ## 依赖与并行 - 前置工单:#6 - 是否允许与前置工单并行:否 - 原因:依赖项定义本工单所需的可执行环境、共享模型、接口或已确认设计;未满足时保持待实施,不标记阻塞。 ## 子项目影响 - 仅影响的子项目 / 交付单元:internal/core - 是否跨子项目:否 - 是否修改共享接口或契约:是;定义模型、仓储和 provider/queue/storage/crypto 接口 - 各子项目需要执行的验证:见“验证方式”和验收标准。 ## 原始需求 - 来源:用户对话;Product-Requirements-Overview、Architecture-and-Code-Map、Business-Rules-and-Glossary - 提出时间:2026-08-20 - 关键原话或脱敏摘要:用户要求“为 MVP-0 的生产实现拆分单元工单”;本工单负责 实现核心领域模型、状态规则和已确认 Prompt 渲染。 ## 要解决什么 后续队列、Provider、portal 和 platform 需要稳定且不依赖 Gin/go-admin 的领域契约。本工单只建立核心模型、接口和可纯单测的业务规则。 ## 做什么 / 不做什么 ### 做 - 映射迁移定义的核心模型和枚举,明确状态机与终态不可回退规则。 - 定义 provider、queue、storage、crypto 的最小接口和错误类型。 - 实现 `chat`、`images_edits` Prompt 渲染,使用 Go `text/template` 且只开放 `UserPrompt`。 - 第一张图片标记 primary,其余 reference,保持上传顺序并生成可持久化 `rendered_prompt`。 - 定义 retryable 分类契约和稳定错误码,不在本工单实现 HTTP。 ### 不做 - 不 import Gin、go-admin、gobreaker、imaging 或具体 HTTP/文件系统实现。 - 不访问上游、数据库队列或用户会话,不实现多 Provider 选路。 - 不加入点数、配额、计费或 MVP-1 图片角色编辑。 ## 已确认方案 - core 只依赖 GORM 和标准库;以接口反转平台依赖。 - 模板解析使用 `missingkey=error` 等失败关闭策略,缺少变量或非法模板返回可定位错误。 - retryable 契约固定:429/5xx/超时/连接可重试,400/401/策略拒绝立即失败;MVP-0 不换家。 预计修改文件: - `internal/core/model/` - `internal/core/provider/` - `internal/core/generate/` - `internal/core/router/` - `internal/core/storage/`、`internal/core/crypto/` 接口 - 同目录 Go 单元测试 ## 需求变化记录 - 2026-08-20:#6 已通过实现验收并提供 migration version 1 的已验证 schema;#7 只映射该 schema,不运行或新增迁移。GORM 固定为用户指定 go-admin 提交使用的 v1.31.2。实现中若范围、接口、数据、依赖、验收或风险发生变化,必须先更新本工单;改变已确认结果时重新等待用户确认。 ## 设计与原型门禁 - 修改类型:非 UI - 所需设计证据:已确认的架构、数据、安全或流程设计;不要求 UI 原型 - 事实来源:核心 Wiki 与父工单 #4 - 状态:已确认;具体实现差异仍须按工单变化规则处理 - 无需 UI 原型原因:本工单不改变用户界面 ## 文档影响 - [ ] 不影响长期文档 - [x] 按实际变化更新 Project-Profile、Architecture-and-Code-Map、Local-Development-and-Verification、Deployment-and-Operations 或 Business-Rules-and-Glossary - Wiki 先改、在线回读后再同步 `docs/`,不得直接维护镜像 ## 交付文档影响 - [x] 无交付文档影响,原因:内部实现任务;若实际改变部署、配置或支持方式,执行前更新本项 - [ ] 更新已有交付文档 - [ ] 新增交付文档 ## 验收标准 - [x] core 依赖检查确认无 Gin、go-admin、gobreaker、imaging。 - [x] `chat` 原样渲染 `UserPrompt`;`images_edits` 与已确认模板逐字一致。 - [x] 缺少变量、模板解析失败和空输入返回明确错误。 - [x] 图片顺序和 primary/reference 规则正确,`rendered_prompt` 可直接落库。 - [x] retryable 四类红线用例全部覆盖且结果符合项目红线。 ## 验证方式 - `go test ./internal/core/...` - `go vet ./internal/core/...` - 依赖导入扫描 - Prompt golden tests 和 retryable 表驱动测试 未执行或因环境不足无法执行的验证必须如实回写,不得把预期结果记为通过。 ## 风险和回退 - 风险:共享接口设计错误会扩散到所有子项目;只保留 MVP-0 必需接口,不预先设计 MVP-1 扩展。 - 风险:错误分类变化触及红线;任何变化必须更新工单并重新确认。 - 回退:回退本工单提交;数据库 schema 不在本工单改变。 ## 实施与验证证据(2026-08-20) - 实现:7 个 GORM 模型、状态机、model/provider/queue/storage/crypto 接口、Prompt 渲染、图片角色和 retryable 分类。 - GORM:固定 v1.31.2,与用户指定 go-admin 提交一致;schema parser 核对 7 表完整列集合。 - Prompt:chat 原文、images_edits golden、空输入/非法语法/缺少或未知变量/额外构造均有测试。 - 红线:429、5xx、超时、连接为 retryable;400、401、策略拒绝和未知错误不可重试。 - 验证:core test/vet/race、全项目 build、禁用依赖扫描、Harness 严格检查、42 项 Python 测试、Wiki 镜像检查和 diff 检查均通过。 - 核心 Wiki Architecture revision:`525b833916552d1f2203ef462ea42f5e8a853270`。 - 任务归档 revision:`78fc8b7b2c9a79446cb89c19a6182cbb47b32169`。 - 提交:`11789d8071a1ce621cca3eeda63448772738502b`、`62017df9b083e19ef26886f7ae2130427fe1e862`,均已推送。 - 未验证:上游、队列、文件系统与会话属于后续工单。 当前状态:待用户验收,不关闭。#8 可顺序继续。 ## 验收结论 - 用户于 2026-08-21 明确确认 #7 验收通过。 - MVP-0 单元验收文档提交:`919e11f`,已推送到 `main`。 - 任务归档 revision:`deaab0f378f4`。
ila closed this issue 2026-08-21 11:59:11 +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#7