docs: add shared todo plan naming rules

This commit is contained in:
2026-05-14 15:45:25 +08:00
parent 10e8beea80
commit 332f887c66
7 changed files with 85 additions and 4 deletions

15
.hermes/todos/README.md Normal file
View File

@@ -0,0 +1,15 @@
# 项目共享 TODO 计划
本目录用于存放已经讨论定稿、需要后续执行,但当前尚未实施的项目级计划文档。
## 使用规则
- 每个 TODO 计划单独一个 Markdown 文件,文件名优先使用可检索的中文标题与日期。
- 每个 TODO 计划文件名必须以分类标签开头,格式为 `【标签名】中文标题-日期.md`
- 计划内容必须足够明确,后续开发者可以直接据此开始实施。
- 已执行完成的计划应迁移到对应 `docs/` 技术/规划文档,或在本文档中标记完成并移出 TODO 队列。
- 不在这里保存个人私密路径、密钥、临时聊天记录或未确认猜测。
## 当前待执行
- [【后端架构】api-server 能力模块化与图片资产 Adapter 收口计划](./【后端架构】api-server能力模块化与图片资产Adapter收口计划-2026-05-14.md)

View File

@@ -0,0 +1,54 @@
# api-server 能力模块化与图片资产 Adapter 收口计划
状态:待执行
## Summary
把两份计划合并成一个分阶段重构:先把 `api-server` 从扁平 `src/*.rs` 收成按能力组织的 Module + Router 结构;同时把散落在玩法 handler 里的“图片生成 -> 下载 -> OSS 写入/head -> asset_object 确认 -> entity binding”收成 `generated_image_assets` 深 Module。
本轮不改变 HTTP contract、DTO、前端行为、SpacetimeDB schema 或计费语义。
## Key Changes
- 新增 `server-rs/crates/api-server/src/modules/`,每个能力 Module 暴露 `router(state) -> Router<AppState>``app.rs` 只负责全局 middleware 和 `.merge(...)`
- 能力分组建议:`admin``auth``assets``creation``runtime``platform`,核心基础设施继续保留在根层或 `core`
-`modules/assets/generated_image_assets` 新增内部 Adapter ModuleInterface 固定为“生成并入库”:
- 输入包含 provider、prompt、size、参考图、OSS 路径、asset kind、entity kind/id、slot、owner/profile/source_job_id。
- 输出包含 `asset_object_id``legacy_public_path``object_key`、mime/extension、task_id/actual_prompt。
- `asset_billing.rs` 不改语义;调用方继续在外层显式包 `execute_billable_asset_operation*`,图片 Adapter 不读写钱包。
- 首批迁移稳定单图链路Big Fish 正式图片、Square Hole 图片、Custom World 场景图/封面类图片入库路径。
- 暂不迁移 Puzzle VectorEngine edits/multipart、Match3D 5x5 sheet/切图/绿幕后处理以及音频、视频、GLB 转存链路。
## Implementation Notes
- `generated_image_assets` 内部集中处理 OSS 缺配置、下载图片 mime/extension 归一、空内容/上游错误映射、`put_object -> head_object -> confirm_asset_object -> bind_asset_object_to_entity`
- 调用方玩法文件只保留领域上下文拼装、prompt 构造、计费包裹和响应映射。
- `openai_image_generation.rs` 继续保留底层 VectorEngine 能力;本轮只让新 Adapter 封装“provider 结果 + OSS/asset_object 持久化”的更深 Interface。
- 第一阶段不拆 `match3d.rs``puzzle.rs``custom_world.rs` 等超大 handler 内部实现;后续再单独切第二阶段。
## Docs
- 新增或更新 `server-rs/crates/api-server/README.md`,说明能力 Module 目录规则、Router 暴露规则和 Adapter 边界。
- 新增 `docs/technical` 说明,并挂到 `docs/technical/README.md`
- 文档明确:`api-server` 仍是 HTTP/SSE/BFF Adapter 与平台编排层,不承接领域规则主逻辑。
## Test Plan
- 结构与路由回归:
- `cargo check -p api-server --manifest-path server-rs/Cargo.toml`
- `cargo test -p api-server --manifest-path server-rs/Cargo.toml`
- `npm run check:server-rs-ddd`
- `npm run check:encoding`
- `git diff --check`
- 图片 Adapter 单测覆盖 OSS 缺配置、asset object/binding 输入构造、URL/base64 结果归一、上游错误和空图片内容映射。
- 迁移点回归:
- `cargo test -p api-server big_fish --manifest-path server-rs/Cargo.toml`
- `cargo test -p api-server square_hole --manifest-path server-rs/Cargo.toml`
- `cargo test -p api-server custom_world --manifest-path server-rs/Cargo.toml`
- API smoke 使用 `npm run api-server` 并检查 `/healthz`;不使用 `api-server:maincloud`
## Assumptions
- 本轮目标是提升 locality、降低重复和减少 `app.rs` 路由树压力。
- `generated_image_assets` 先留在 `api-server` 内部,不新增 workspace crate。
- Match3D、Puzzle 的复杂图片链路作为第二阶段迁移,不阻塞第一阶段收口。