From 470b54c89e60207442e16f74df0d18b71ca99d29 Mon Sep 17 00:00:00 2001 From: ila Date: Thu, 20 Aug 2026 23:07:07 +0800 Subject: [PATCH] docs: record Go schema baseline (#6) --- docs/00-project-profile.md | 17 ++++++------ docs/02-architecture-and-code-map.md | 12 +++++++-- docs/04-local-development-and-verification.md | 27 ++++++++++++++++--- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/docs/00-project-profile.md b/docs/00-project-profile.md index 1f6ecbf..f8fb4fb 100644 --- a/docs/00-project-profile.md +++ b/docs/00-project-profile.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Project-Profile wiki_url: https://git.ilapage.cn/OPC/chorus/wiki/Project-Profile.- -wiki_revision: 3bbe90891a4d2bdf0f6af5160f0b687792e0f19f -synchronized_at: 2026-08-20T14:49:59Z +wiki_revision: 662746817d09f4d182c6cf6db71e963d330141e8 +synchronized_at: 2026-08-20T15:04:43Z # 项目档案 @@ -106,7 +106,7 @@ synchronized_at: 2026-08-20T14:49:59Z ## 常用命令 -所有命令默认从仓库根目录执行。标注“MVP-0 落地后可用”的命令在首个实现工单完成前不存在。 +所有命令默认从仓库根目录执行。Go 骨架、配置、迁移和种子命令已由 #6 落地;HTTP 服务仍需等待对应实现工单。 | 用途 | 命令 | 预期结果 | |---|---|---| @@ -114,11 +114,12 @@ synchronized_at: 2026-08-20T14:49:59Z | 检查文档结构 | `python dev_scripts/harness.py check --strict` | 输出“DevHarness 检查通过” | | 运行 Harness 测试 | `python -m unittest discover -s tests -v` | 所有测试通过 | | 检查核心 Wiki 镜像 | `python dev_scripts/harness.py sync --check` | Wiki 初始化后输出核心镜像一致 | -| 编译(MVP-0 落地后可用) | `go build ./...` | 无错误 | -| 单元测试(MVP-0 落地后可用) | `go test ./...` | 全部通过 | -| 静态检查(MVP-0 落地后可用) | `go vet ./...` | 无输出 | -| 数据库迁移(MVP-0 落地后可用) | `migrate -path migrations -database "$CHORUS_DSN" up` | 迁移版本前进且无错误 | -| 启动用户端(MVP-0 落地后可用) | `go run ./portal` | 监听 `:8080`,日志显示 worker 已启动 | +| 编译 | `go build ./...` | 无错误 | +| 单元测试 | `go test ./...` | 全部通过 | +| 静态检查 | `go vet ./...` | 无输出 | +| 数据库迁移 | `migrate -path migrations -database "$CHORUS_MIGRATE_URL" up` | 迁移版本前进且无错误 | +| 幂等种子 | `go run ./cmd/chorus-seed` | 只输出完成状态,不输出凭据 | +| 启动用户端(#11 后可用) | `go run ./portal` | 当前 #6 仅校验配置并退出;#11 才监听 HTTP | ## 目录边界 diff --git a/docs/02-architecture-and-code-map.md b/docs/02-architecture-and-code-map.md index 45e607b..dc1bb30 100644 --- a/docs/02-architecture-and-code-map.md +++ b/docs/02-architecture-and-code-map.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Architecture-and-Code-Map wiki_url: https://git.ilapage.cn/OPC/chorus/wiki/Architecture-and-Code-Map.- -wiki_revision: 5ecd4ee8ad3522e75cb8fc0f031238c3beaac85a -synchronized_at: 2026-08-20T08:30:20Z +wiki_revision: a4a15b3cdb690590a8ce7a85edc42cfc7c400a2d +synchronized_at: 2026-08-20T15:08:05Z # 架构与代码地图 @@ -50,6 +50,14 @@ chorus/ MVP-0 第一张上传图自动作为 `primary`,其余为 `reference`;不提供角色编辑、备注和拖拽。默认中性模板已于 2026-08-20 确认,使用 Go `text/template` 且只开放 `{{.UserPrompt}}`,具体内容见业务规则;模板作为数据管理,不硬编码。 +### #6 已落地的共享基线 + +- `go.mod` 固定 Go 1.26.5;`internal/config` 只从环境读取配置,生产缺少 DSN、会话密钥、Provider 主密钥或存储目录时失败关闭且不输出值。 +- `migrations/000001_mvp0_base` 建立 `users`、`providers`、`provider_models`、`prompt_templates`、`generations`、`generation_inputs`、`generation_outputs`,生产启动不调用 AutoMigrate。 +- 迁移显式定义用户幂等唯一键、队列/历史索引、5 个外键和删除规则,以及状态、租约、错误、attempt 数组和输出内容检查约束。 +- `internal/seed/defaults.json` 保存已确认 Prompt 和 mock ProviderModel 数据;`cmd/chorus-seed` 在事务中幂等 upsert 构造用户、mock Provider/Model 和 Prompt,不保存或输出明文凭据。 +- `portal` 当前只是配置门禁骨架,尚未注册 HTTP 路由或 worker;后续工单不得把它当作已完成服务。 + ## 代码地图 | 想改什么 | 从哪里开始读 | 必要验证 | diff --git a/docs/04-local-development-and-verification.md b/docs/04-local-development-and-verification.md index 44517d6..802e8c1 100644 --- a/docs/04-local-development-and-verification.md +++ b/docs/04-local-development-and-verification.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Local-Development-and-Verification wiki_url: https://git.ilapage.cn/OPC/chorus/wiki/Local-Development-and-Verification.- -wiki_revision: c5dd8e3415c206839b1252ae32c61f48bdb21198 -synchronized_at: 2026-08-20T14:51:55Z +wiki_revision: c26069b43dadcab393678caf8f579c13cfa90068 +synchronized_at: 2026-08-20T15:08:16Z # 本地开发与验证 @@ -37,7 +37,10 @@ synchronized_at: 2026-08-20T14:51:55Z | 变量 | 用途 | |---|---| -| `CHORUS_DSN` | MySQL 连接 | +| `CHORUS_DSN` | Go 应用和种子命令使用的 GORM/MySQL DSN | +| `CHORUS_MIGRATE_URL` | golang-migrate 专用 MySQL URL | +| `CHORUS_SEED_USER_EMAIL` / `CHORUS_SEED_USER_PASSWORD` | 构造种子用户;仅通过环境注入 | +| `CHORUS_SEED_PROVIDER_BASE_URL` | mock Provider 基础 URL;不得指向生产 | | `CHORUS_MASTER_KEY` / 对应 key ring 配置 | Provider Key AES-GCM 解密与轮换 | | `CHORUS_SESSION_KEY` | portal 会话,必须与主密钥分离 | | `CHORUS_STORAGE_ROOT` | 受保护生成物目录 | @@ -98,7 +101,23 @@ mysql --protocol=tcp --host=$env:CHORUS_MYSQL_HOST ` $env:MYSQL_PWD = $null ``` -业务迁移落地后,每个迁移必须在该隔离库执行 up、down、再 up,并从空库重放全部迁移。`chorus_codegen` 只在 MVP-1 的 go-admin 结构研究/代码生成工单中另行创建,不提前扩大当前账号权限。 +#6 已提供首个迁移和幂等种子命令。只在明确的隔离库执行: + +```powershell +migrate -path migrations -database $env:CHORUS_MIGRATE_URL up + +$env:CHORUS_SEED_USER_EMAIL = "mvp0-test@chorus.invalid" +$env:CHORUS_SEED_USER_PASSWORD = "<本次构造密码>" +$env:CHORUS_SEED_PROVIDER_BASE_URL = "" +go run ./cmd/chorus-seed +go run ./cmd/chorus-seed + +migrate -path migrations -database $env:CHORUS_MIGRATE_URL down -all +migrate -path migrations -database $env:CHORUS_MIGRATE_URL up +``` + +两次种子执行后应仍是一个构造用户、一个 mock Provider、两个 ProviderModel 和两个 Prompt。`down -all` 会删除隔离库业务数据,只能用于明确可丢弃的测试库。`chorus_codegen` 只在 MVP-1 的 go-admin 结构研究/代码生成工单中另行创建,不提前扩大当前账号权限。 + ### 3. go-admin schema-first 生成(MVP-1) 1. 先在 `chorus_codegen` 执行同一套版本化 SQL。