refactor: move server rs workspace entries into crates
This commit is contained in:
@@ -45,73 +45,73 @@
|
||||
交付物:[../server-rs/README.md](../server-rs/README.md)
|
||||
- [x] 创建 workspace `Cargo.toml`
|
||||
交付物:[../server-rs/Cargo.toml](../server-rs/Cargo.toml)
|
||||
- [x] 创建 `apps/api-server`
|
||||
交付物:[../server-rs/apps/api-server/README.md](../server-rs/apps/api-server/README.md)
|
||||
- [x] 创建 `apps/spacetime-module`
|
||||
交付物:[../server-rs/apps/spacetime-module/README.md](../server-rs/apps/spacetime-module/README.md)
|
||||
- [x] 创建 `packages/module-auth`
|
||||
交付物:[../server-rs/packages/module-auth/README.md](../server-rs/packages/module-auth/README.md)
|
||||
- [x] 创建 `packages/module-runtime`
|
||||
交付物:[../server-rs/packages/module-runtime/README.md](../server-rs/packages/module-runtime/README.md)
|
||||
- [x] 创建 `packages/module-story`
|
||||
交付物:[../server-rs/packages/module-story/README.md](../server-rs/packages/module-story/README.md)
|
||||
- [x] 创建 `packages/module-combat`
|
||||
交付物:[../server-rs/packages/module-combat/README.md](../server-rs/packages/module-combat/README.md)
|
||||
- [x] 创建 `packages/module-inventory`
|
||||
交付物:[../server-rs/packages/module-inventory/README.md](../server-rs/packages/module-inventory/README.md)
|
||||
- [x] 创建 `packages/module-npc`
|
||||
交付物:[../server-rs/packages/module-npc/README.md](../server-rs/packages/module-npc/README.md)
|
||||
- [x] 创建 `packages/module-progression`
|
||||
交付物:[../server-rs/packages/module-progression/README.md](../server-rs/packages/module-progression/README.md)
|
||||
- [x] 创建 `packages/module-quest`
|
||||
交付物:[../server-rs/packages/module-quest/README.md](../server-rs/packages/module-quest/README.md)
|
||||
- [x] 创建 `packages/module-runtime-item`
|
||||
交付物:[../server-rs/packages/module-runtime-item/README.md](../server-rs/packages/module-runtime-item/README.md)
|
||||
- [x] 创建 `packages/module-custom-world`
|
||||
交付物:[../server-rs/packages/module-custom-world/README.md](../server-rs/packages/module-custom-world/README.md)
|
||||
- [x] 创建 `packages/module-assets`
|
||||
交付物:[../server-rs/packages/module-assets/README.md](../server-rs/packages/module-assets/README.md)
|
||||
- [x] 创建 `packages/module-ai`
|
||||
交付物:[../server-rs/packages/module-ai/README.md](../server-rs/packages/module-ai/README.md)
|
||||
- [x] 创建 `packages/shared-contracts`
|
||||
交付物:[../server-rs/packages/shared-contracts/README.md](../server-rs/packages/shared-contracts/README.md)
|
||||
- [x] 创建 `packages/shared-kernel`
|
||||
交付物:[../server-rs/packages/shared-kernel/README.md](../server-rs/packages/shared-kernel/README.md)
|
||||
- [x] 创建 `packages/platform-auth`
|
||||
交付物:[../server-rs/packages/platform-auth/README.md](../server-rs/packages/platform-auth/README.md)
|
||||
- [x] 创建 `packages/platform-oss`
|
||||
交付物:[../server-rs/packages/platform-oss/README.md](../server-rs/packages/platform-oss/README.md)
|
||||
- [x] 创建 `packages/platform-llm`
|
||||
交付物:[../server-rs/packages/platform-llm/README.md](../server-rs/packages/platform-llm/README.md)
|
||||
- [x] 创建 `packages/spacetime-client`
|
||||
交付物:[../server-rs/packages/spacetime-client/README.md](../server-rs/packages/spacetime-client/README.md)
|
||||
- [x] 创建 `packages/tests-support`
|
||||
交付物:[../server-rs/packages/tests-support/README.md](../server-rs/packages/tests-support/README.md)
|
||||
- [x] 创建 `crates/api-server`
|
||||
交付物:[../server-rs/crates/api-server/README.md](../server-rs/crates/api-server/README.md)
|
||||
- [x] 创建 `crates/spacetime-module`
|
||||
交付物:[../server-rs/crates/spacetime-module/README.md](../server-rs/crates/spacetime-module/README.md)
|
||||
- [x] 创建 `crates/module-auth`
|
||||
交付物:[../server-rs/crates/module-auth/README.md](../server-rs/crates/module-auth/README.md)
|
||||
- [x] 创建 `crates/module-runtime`
|
||||
交付物:[../server-rs/crates/module-runtime/README.md](../server-rs/crates/module-runtime/README.md)
|
||||
- [x] 创建 `crates/module-story`
|
||||
交付物:[../server-rs/crates/module-story/README.md](../server-rs/crates/module-story/README.md)
|
||||
- [x] 创建 `crates/module-combat`
|
||||
交付物:[../server-rs/crates/module-combat/README.md](../server-rs/crates/module-combat/README.md)
|
||||
- [x] 创建 `crates/module-inventory`
|
||||
交付物:[../server-rs/crates/module-inventory/README.md](../server-rs/crates/module-inventory/README.md)
|
||||
- [x] 创建 `crates/module-npc`
|
||||
交付物:[../server-rs/crates/module-npc/README.md](../server-rs/crates/module-npc/README.md)
|
||||
- [x] 创建 `crates/module-progression`
|
||||
交付物:[../server-rs/crates/module-progression/README.md](../server-rs/crates/module-progression/README.md)
|
||||
- [x] 创建 `crates/module-quest`
|
||||
交付物:[../server-rs/crates/module-quest/README.md](../server-rs/crates/module-quest/README.md)
|
||||
- [x] 创建 `crates/module-runtime-item`
|
||||
交付物:[../server-rs/crates/module-runtime-item/README.md](../server-rs/crates/module-runtime-item/README.md)
|
||||
- [x] 创建 `crates/module-custom-world`
|
||||
交付物:[../server-rs/crates/module-custom-world/README.md](../server-rs/crates/module-custom-world/README.md)
|
||||
- [x] 创建 `crates/module-assets`
|
||||
交付物:[../server-rs/crates/module-assets/README.md](../server-rs/crates/module-assets/README.md)
|
||||
- [x] 创建 `crates/module-ai`
|
||||
交付物:[../server-rs/crates/module-ai/README.md](../server-rs/crates/module-ai/README.md)
|
||||
- [x] 创建 `crates/shared-contracts`
|
||||
交付物:[../server-rs/crates/shared-contracts/README.md](../server-rs/crates/shared-contracts/README.md)
|
||||
- [x] 创建 `crates/shared-kernel`
|
||||
交付物:[../server-rs/crates/shared-kernel/README.md](../server-rs/crates/shared-kernel/README.md)
|
||||
- [x] 创建 `crates/platform-auth`
|
||||
交付物:[../server-rs/crates/platform-auth/README.md](../server-rs/crates/platform-auth/README.md)
|
||||
- [x] 创建 `crates/platform-oss`
|
||||
交付物:[../server-rs/crates/platform-oss/README.md](../server-rs/crates/platform-oss/README.md)
|
||||
- [x] 创建 `crates/platform-llm`
|
||||
交付物:[../server-rs/crates/platform-llm/README.md](../server-rs/crates/platform-llm/README.md)
|
||||
- [x] 创建 `crates/spacetime-client`
|
||||
交付物:[../server-rs/crates/spacetime-client/README.md](../server-rs/crates/spacetime-client/README.md)
|
||||
- [x] 创建 `crates/tests-support`
|
||||
交付物:[../server-rs/crates/tests-support/README.md](../server-rs/crates/tests-support/README.md)
|
||||
|
||||
### Axum 基础能力
|
||||
|
||||
- [x] 搭建 `main.rs` / `Router` / `with_state`
|
||||
交付物:[../server-rs/apps/api-server/src/main.rs](../server-rs/apps/api-server/src/main.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/main.rs](../server-rs/crates/api-server/src/main.rs)
|
||||
- [x] 接入统一配置加载
|
||||
交付物:[../server-rs/apps/api-server/src/config.rs](../server-rs/apps/api-server/src/config.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/config.rs](../server-rs/crates/api-server/src/config.rs)
|
||||
- [x] 接入统一日志与 tracing
|
||||
交付物:[../server-rs/apps/api-server/src/logging.rs](../server-rs/apps/api-server/src/logging.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)、[../server-rs/apps/api-server/src/main.rs](../server-rs/apps/api-server/src/main.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/logging.rs](../server-rs/crates/api-server/src/logging.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)、[../server-rs/crates/api-server/src/main.rs](../server-rs/crates/api-server/src/main.rs)
|
||||
- [x] 接入 `request_id` 中间件
|
||||
交付物:[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)
|
||||
- [x] 接入统一错误处理中间件
|
||||
交付物:[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs)、[../server-rs/apps/api-server/src/error_middleware.rs](../server-rs/apps/api-server/src/error_middleware.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/http_error.rs](../server-rs/crates/api-server/src/http_error.rs)、[../server-rs/crates/api-server/src/error_middleware.rs](../server-rs/crates/api-server/src/error_middleware.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)
|
||||
- [x] 接入当前项目兼容的 response envelope
|
||||
交付物:[../server-rs/apps/api-server/src/api_response.rs](../server-rs/apps/api-server/src/api_response.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)、[../server-rs/apps/api-server/src/http_error.rs](../server-rs/apps/api-server/src/http_error.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/api_response.rs](../server-rs/crates/api-server/src/api_response.rs)、[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs)、[../server-rs/crates/api-server/src/http_error.rs](../server-rs/crates/api-server/src/http_error.rs)
|
||||
- [x] 接入 `x-request-id`
|
||||
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)
|
||||
- [x] 接入 `x-api-version`
|
||||
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)
|
||||
- [x] 接入 `x-route-version`
|
||||
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)
|
||||
- [x] 接入 `x-response-time-ms`
|
||||
交付物:[../server-rs/apps/api-server/src/response_headers.rs](../server-rs/apps/api-server/src/response_headers.rs)、[../server-rs/apps/api-server/src/request_context.rs](../server-rs/apps/api-server/src/request_context.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/response_headers.rs](../server-rs/crates/api-server/src/response_headers.rs)、[../server-rs/crates/api-server/src/request_context.rs](../server-rs/crates/api-server/src/request_context.rs)
|
||||
- [x] 实现 `/healthz`
|
||||
交付物:[../server-rs/apps/api-server/src/health.rs](../server-rs/apps/api-server/src/health.rs)、[../server-rs/apps/api-server/src/app.rs](../server-rs/apps/api-server/src/app.rs)
|
||||
交付物:[../server-rs/crates/api-server/src/health.rs](../server-rs/crates/api-server/src/health.rs)、[../server-rs/crates/api-server/src/app.rs](../server-rs/crates/api-server/src/app.rs)
|
||||
|
||||
### 基础工程脚本
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
这里的“迁移归属”不是简单把旧目录名照搬到 Rust,而是要求后续重写必须先明确:
|
||||
|
||||
1. 每个旧模块在新架构中的主归属 package。
|
||||
1. 每个旧模块在新架构中的主归属 crate。
|
||||
2. 每个旧模块是否需要拆成“SpacetimeDB 状态层 + Axum/application 编排层”。
|
||||
3. 每个旧模块的状态真相应该进入 `SpacetimeDB`、`OSS` 还是开发态本地文件适配。
|
||||
4. 每个旧模块优先落在哪个迁移阶段,避免后续任务拆分时反复改口径。
|
||||
@@ -24,7 +24,7 @@
|
||||
命名补充说明:
|
||||
|
||||
1. 本文中仍出现的 `application::...`、`auth-service`、`oss-service`、`llm-service` 等名称,统一表示逻辑职责,不再要求它们必须继续作为顶层独立 crate 存在。
|
||||
2. 在新的多 package 结构下,这些逻辑职责默认落到对应 `packages/module-*` 的内部子层次,或落到 `packages/platform-*`、`packages/shared-*` 等共享 package 中。
|
||||
2. 在新的多 crate 结构下,这些逻辑职责默认落到对应 `crates/module-*` 的内部子层次,或落到 `crates/platform-*`、`crates/shared-*` 等共享 crate 中。
|
||||
|
||||
补充边界:
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
重写后的冻结要求:
|
||||
|
||||
1. 该模块在 `server-node/` 中的存在事实继续保留,用于历史基线与后续清理对照。
|
||||
2. 自 `2026-04-21` 起,不再为 `server-rs/` 创建 `module-editor` package,也不再把它纳入 `M1 ~ M6` 主线迁移。
|
||||
2. 自 `2026-04-21` 起,不再为 `server-rs/` 创建 `module-editor` crate,也不再把它纳入 `M1 ~ M6` 主线迁移。
|
||||
3. 若未来仍需清理或替代 editor,必须在遗留链路依赖确认后单独立项,不能夹带进当前 Rust 重写主链。
|
||||
4. 不允许为了简化本轮任务而篡改其历史存在事实。
|
||||
|
||||
@@ -281,11 +281,11 @@
|
||||
- 重写后次归属
|
||||
- 目标迁移阶段
|
||||
3. 本轮 active rewrite modules 为 `11` 个,且 `editor` 的遗留/不迁移口径已经冻结。
|
||||
4. 后续拆 `server-rs/` 多 package、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。
|
||||
4. 后续拆 `server-rs/` 多 crate、建 SpacetimeDB bounded context、排 M3~M6 任务时,可以直接引用本文,不再靠口头记忆。
|
||||
|
||||
## 8. 后续直接依赖这份基线的任务
|
||||
|
||||
1. 设计 `server-rs/` workspace 与 package 边界
|
||||
1. 设计 `server-rs/` workspace 与 crate 边界
|
||||
2. 设计 SpacetimeDB `runtime / gameplay / custom_world / asset_metadata` 表分层
|
||||
3. 设计 story action reducer 的跨模块协作边界
|
||||
4. 设计 custom world / assets 的 Axum facade
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
| 阶段 | 入口条件 | 核心交付 | 退出条件 | 回归焦点 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `M0` 冻结能力与边界 | 已完成当前 Node 后端摸底;已明确目标架构为 `SpacetimeDB + Axum + 阿里云 OSS` | 冻结能力基线、路由矩阵、模块归属、SSE、静态资源前缀、前端响应契约、仓库边界决议、阶段验收矩阵 | `6` 个挂载面、`96` 条路由、`12` 个模块、`6` 条 SSE、`6` 个静态资源前缀全部形成书面基线;`server-rs/`、`server-node/`、Axum 边界、副作用收口原则全部冻结 | 文档口径一致性;前端 contract 依赖项是否被遗漏;迁移阶段是否还存在多套边界说法 |
|
||||
| `M1` Rust 工作区与 Axum 基础设施 | `M0` 全部退出条件满足 | `server-rs/` workspace、`apps/api-server`、`apps/spacetime-module`、独立模块 packages、统一配置、日志、request id、中间件、response envelope、`/healthz`、开发脚本 | Axum 可独立启动;`/healthz` 与当前工程兼容;`x-request-id`、`x-api-version`、`x-route-version`、`x-response-time-ms` 行为稳定;workspace 完整编译通过;主工程与模块 package 引用边界稳定 | 基础头部兼容;健康检查兼容;目录结构与 package 归属是否偏离 `M0` 决议 |
|
||||
| `M1` Rust 工作区与 Axum 基础设施 | `M0` 全部退出条件满足 | `server-rs/` workspace、`crates/api-server`、`crates/spacetime-module`、独立模块 crates、统一配置、日志、request id、中间件、response envelope、`/healthz`、开发脚本 | Axum 可独立启动;`/healthz` 与当前工程兼容;`x-request-id`、`x-api-version`、`x-route-version`、`x-response-time-ms` 行为稳定;workspace 完整编译通过;主工程与模块 crate 引用边界稳定 | 基础头部兼容;健康检查兼容;目录结构与 crate 归属是否偏离 `M0` 决议 |
|
||||
| `M2` 鉴权、会话、JWT 与 refresh cookie | `M1` 已可稳定启动;Axum 中间件与配置链可用 | 身份表、会话表、JWT claims、refresh cookie、密码登录、手机验证码登录、微信登录、OIDC 透传、旧鉴权接口兼容 | 密码登录、refresh cookie、手机验证码、微信登录主链可用;旧鉴权接口 contract 回归通过;SpacetimeDB 可识别 Axum 签发身份 | Cookie 与 JWT 兼容;`CAPTCHA_REQUIRED` 与 `details.captchaChallenge` 是否保持;登录态吊销与刷新是否稳定 |
|
||||
| `M3` runtime snapshot / settings / profile | `M2` 鉴权稳定;用户身份可透传到 SpacetimeDB | `runtime_snapshot`、`runtime_setting`、profile 相关主表与 facade;存档、设置、浏览历史、save archive 兼容接口 | 登录用户可正常保存、读取、删除存档;profile dashboard / browse history / save archive 行为一致;前端恢复流程可直接跑通 | 快照恢复准确性;兼容路径与主路径是否返回一致;历史记录排序与去重逻辑 |
|
||||
| `M4` story action 与 gameplay reducer | `M3` 快照与用户状态主链稳定 | story / combat / inventory / npc / quest / progression / runtime-item 表与 reducer;story 兼容接口与 view model | 前端 story 主循环可用;`story state` 恢复链可用;NPC / quest / treasure / combat 主循环行为不回退;旧 Node story route 回归平移完成 | `RuntimeStoryActionResponse` 结构;战斗与奖励联动;状态投影是否与旧前端恢复逻辑一致 |
|
||||
@@ -71,7 +71,7 @@
|
||||
- 迁移期保留 `server-node/`
|
||||
- 前端 `M0 ~ M6` 期间只访问 Axum
|
||||
- 外部副作用统一收口在 Axum
|
||||
- `server-rs/` 内部采用 `apps/* + packages/*` 多 package 组织
|
||||
- `server-rs/` 内部采用 `crates/*` 多 crate 组织
|
||||
- `editor` 已于 `2026-04-21` 退出本轮 Rust 重写范围
|
||||
4. `M1` 以后任何任务引用路由、模块、SSE、静态资源与响应契约时,都必须能追溯到本阶段产出的冻结文档。
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
| 旧 `server-node/` 在迁移期继续保留,不提前删除 | 已确认 | `server-node/` 在 `M0 ~ M6` 期间持续保留,直到 `M7` 切流与回退验证完成后再评估清理。 |
|
||||
| 前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB | 已确认 | `M0 ~ M6` 前端统一只访问 Axum 暴露的 `/api/*`、`/healthz`、SSE 与静态资源兼容层,不新增直连 SpacetimeDB 原生协议路径。 |
|
||||
| 外部副作用统一收口在 Axum,不放进 SpacetimeDB 模块 | 已确认 | OSS、LLM、短信、微信 OAuth、本地文件系统等外部副作用统一落在 Axum/application/infra,不进入 SpacetimeDB reducer/module。 |
|
||||
| `server-rs/` 内部采用多 package 组织,由主工程统一引用模块包 | 已确认 | `server-rs/` 采用 `apps/* + packages/*` 工作区结构,`apps/api-server` 与 `apps/spacetime-module` 作为主工程,独立模块以 `packages/module-*` 形式被主工程引用。 |
|
||||
| `server-rs/` 内部采用多 crate 组织,由主工程 crate 统一引用模块 crate | 已确认 | `server-rs/` 采用 `crates/*` 工作区结构,`crates/api-server` 与 `crates/spacetime-module` 作为主工程 crate,独立模块以 `crates/module-*` 形式被主工程 crate 引用。 |
|
||||
| `editor` 为遗留无用模块,不纳入 `server-rs` 本轮重写范围 | 已确认 | `server-node/src/modules/editor` 与 `/api/editor/*` 仅作为历史基线保留对照;自 `2026-04-21` 起退出本轮 Rust 后端重写范围。 |
|
||||
|
||||
## 3. 已确认决议一:`server-rs/` 固定落在仓库根目录
|
||||
@@ -61,19 +61,19 @@ Genarrative/
|
||||
|
||||
### 3.3 这样落位的原因
|
||||
|
||||
1. 与当前重写设计文档、任务清单、后续 `M1` 多 package 规划保持一致。
|
||||
1. 与当前重写设计文档、任务清单、后续 `M1` 多 crate 规划保持一致。
|
||||
2. 允许 `server-node/` 与 `server-rs/` 在迁移期并行存在,便于逐阶段切流。
|
||||
3. 让 Rust 工作区边界清晰,不污染现有前端 `src/`、`packages/`、Vite 工具链。
|
||||
4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`apps/*`、`packages/*` 时路径最直接,不需要额外中间层。
|
||||
4. 后续新增 `server-rs/scripts/*`、`Cargo.toml`、`crates/*` 时路径最直接,不需要额外中间层。
|
||||
|
||||
### 3.4 对后续任务的直接约束
|
||||
|
||||
从这一条决议开始,后续任务必须统一按以下路径落位:
|
||||
|
||||
1. `M1` 的工作区初始化在 `server-rs/`
|
||||
2. Axum 主工程在 `server-rs/apps/api-server`
|
||||
3. SpacetimeDB 主工程在 `server-rs/apps/spacetime-module`
|
||||
4. 独立模块包在 `server-rs/packages/module-*`
|
||||
2. Axum 主工程 crate 在 `server-rs/crates/api-server`
|
||||
3. SpacetimeDB 主工程 crate 在 `server-rs/crates/spacetime-module`
|
||||
4. 独立模块 crate 在 `server-rs/crates/module-*`
|
||||
5. 相关脚本在 `server-rs/scripts/`
|
||||
|
||||
## 4. 本条任务完成定义
|
||||
@@ -197,63 +197,62 @@ Genarrative/
|
||||
|
||||
从这一条决议开始,后续任务必须遵守:
|
||||
|
||||
1. `M1` package 设计时,`platform-oss`、`platform-llm`、`platform-auth` 固定属于 Axum / 模块应用层一侧。
|
||||
1. `M1` crate 设计时,`platform-oss`、`platform-llm`、`platform-auth` 固定属于 Axum / 模块应用层一侧。
|
||||
2. `M2 ~ M6` 设计 reducer 时,只写状态变更,不直接发外部请求。
|
||||
3. 若确实需要异步副作用,也必须由 Axum worker 或应用层作业执行,再把结果回写 SpacetimeDB。
|
||||
|
||||
## 8. 已确认决议五:`server-rs/` 内部采用多 package 组织
|
||||
## 8. 已确认决议五:`server-rs/` 内部采用多 crate 组织
|
||||
|
||||
### 8.1 决议内容
|
||||
|
||||
从当前版本开始,`server-rs/` 内部结构固定采用:
|
||||
|
||||
1. `apps/*`:主工程 package
|
||||
2. `packages/*`:独立模块 package
|
||||
3. `scripts/*`:开发、发布、回归脚本
|
||||
1. `crates/*`:统一收口主工程 crate、独立模块 crate 与共享 crate
|
||||
2. `scripts/*`:开发、发布、回归脚本
|
||||
|
||||
主工程固定包含:
|
||||
主工程 crate 固定包含:
|
||||
|
||||
1. `apps/api-server`
|
||||
2. `apps/spacetime-module`
|
||||
1. `crates/api-server`
|
||||
2. `crates/spacetime-module`
|
||||
|
||||
独立模块 package 固定按“每个独立模块一个 package”推进,至少覆盖:
|
||||
独立模块 crate 固定按“每个独立模块一个 crate”推进,至少覆盖:
|
||||
|
||||
1. `packages/module-auth`
|
||||
2. `packages/module-runtime`
|
||||
3. `packages/module-story`
|
||||
4. `packages/module-combat`
|
||||
5. `packages/module-inventory`
|
||||
6. `packages/module-npc`
|
||||
7. `packages/module-progression`
|
||||
8. `packages/module-quest`
|
||||
9. `packages/module-runtime-item`
|
||||
10. `packages/module-custom-world`
|
||||
11. `packages/module-assets`
|
||||
12. `packages/module-ai`
|
||||
1. `crates/module-auth`
|
||||
2. `crates/module-runtime`
|
||||
3. `crates/module-story`
|
||||
4. `crates/module-combat`
|
||||
5. `crates/module-inventory`
|
||||
6. `crates/module-npc`
|
||||
7. `crates/module-progression`
|
||||
8. `crates/module-quest`
|
||||
9. `crates/module-runtime-item`
|
||||
10. `crates/module-custom-world`
|
||||
11. `crates/module-assets`
|
||||
12. `crates/module-ai`
|
||||
|
||||
跨模块共享 package 固定包含:
|
||||
跨模块共享 crate 固定包含:
|
||||
|
||||
1. `packages/shared-contracts`
|
||||
2. `packages/shared-kernel`
|
||||
3. `packages/platform-auth`
|
||||
4. `packages/platform-oss`
|
||||
5. `packages/platform-llm`
|
||||
6. `packages/spacetime-client`
|
||||
7. `packages/tests-support`
|
||||
1. `crates/shared-contracts`
|
||||
2. `crates/shared-kernel`
|
||||
3. `crates/platform-auth`
|
||||
4. `crates/platform-oss`
|
||||
5. `crates/platform-llm`
|
||||
6. `crates/spacetime-client`
|
||||
7. `crates/tests-support`
|
||||
|
||||
### 8.2 这样决议的原因
|
||||
|
||||
1. 用户已经明确要求后端采用多 package 模式,独立模块不能继续堆回单个技术层大包。
|
||||
2. 当前后端已有 `12` 个内部模块边界,多 package 方案更容易保持一一映射与独立演进。
|
||||
3. `apps/api-server` 与 `apps/spacetime-module` 只做组合与发布,更符合“主工程引用模块包”的组织方式。
|
||||
1. 用户已经明确要求后端采用 Rust workspace 下的多 crate 模式,独立模块不能继续堆回单个技术层大包。
|
||||
2. 当前后端已有 `12` 个内部模块边界,多 crate 方案更容易保持一一映射与独立演进。
|
||||
3. `crates/api-server` 与 `crates/spacetime-module` 只做组合与发布,更符合“主工程 crate 引用模块 crate”的组织方式。
|
||||
|
||||
### 8.3 对后续任务的直接约束
|
||||
|
||||
从这一条决议开始,后续任务必须遵守:
|
||||
|
||||
1. `M1` 后续目录创建任务统一按 `apps/* + packages/*` 执行,不再新增 `crates/*` 目录规划。
|
||||
2. 每个业务模块默认先有自己的 workspace package,再由主工程引用。
|
||||
3. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 package,而不是业务模块混装。
|
||||
1. `M1` 及后续目录任务统一按 `crates/*` 执行,不再保留 `apps/*` 与 `packages/*` 并行规划。
|
||||
2. 每个业务模块默认先有自己的 workspace crate,再由主工程 crate 引用。
|
||||
3. 只有共享 contract、共享领域内核、平台适配、SpacetimeDB client 这类跨模块能力,才允许使用共享 crate,而不是业务模块混装。
|
||||
|
||||
## 9. 已确认决议六:`editor` 退出本轮 Rust 重写范围
|
||||
|
||||
@@ -264,19 +263,19 @@ Genarrative/
|
||||
当前固定口径为:
|
||||
|
||||
1. 历史基线继续保留 `server-node/src/modules/editor` 与 `/api/editor/*` 的存在事实。
|
||||
2. `server-rs/` 不再保留 `packages/module-editor`。
|
||||
3. `M1 ~ M6` 的主线任务、阶段验收与 package 规划,不再把 `editor` 计入 active rewrite scope。
|
||||
2. `server-rs/` 不再保留 `crates/module-editor`。
|
||||
3. `M1 ~ M6` 的主线任务、阶段验收与 crate 规划,不再把 `editor` 计入 active rewrite scope。
|
||||
|
||||
### 9.2 这样决议的原因
|
||||
|
||||
1. 用户已明确确认 `editor` 为遗留无用模块,应从本轮重写目标中剔除。
|
||||
2. 保留历史事实有助于后续对照清理,不会把“旧系统曾存在该模块”的信息抹掉。
|
||||
3. 从当前阶段开始继续为 `editor` 预留 Rust package,只会增加主线迁移噪音与工程负担。
|
||||
3. 从当前阶段开始继续为 `editor` 预留 Rust crate,只会增加主线迁移噪音与工程负担。
|
||||
|
||||
### 9.3 对后续任务的直接约束
|
||||
|
||||
从这一条决议开始,后续任务必须遵守:
|
||||
|
||||
1. 不再为 `editor` 创建或维护 `server-rs` 下的新 package、Axum 路由树与迁移验收项。
|
||||
1. 不再为 `editor` 创建或维护 `server-rs` 下的新 crate、Axum 路由树与迁移验收项。
|
||||
2. 所有涉及挂载面、模块、路由总量的文档,都要区分“历史基线”与“本轮 active rewrite target”。
|
||||
3. 若未来仍要清理 `editor`,应在 `server-node/` 遗留链路依赖核对完成后单独立项。
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
- [07_CROSS_CUTTING_AND_ACCEPTANCE.md](./07_CROSS_CUTTING_AND_ACCEPTANCE.md):横向专项、执行顺序与最终验收清单。
|
||||
- [M0_CAPABILITY_SURFACE_BASELINE_2026-04-20.md](./M0_CAPABILITY_SURFACE_BASELINE_2026-04-20.md):当前 Node 后端 `6` 个挂载面的冻结基线,用于后续接口映射、模块迁移与验收对照。
|
||||
- [M0_ROUTE_MIGRATION_MATRIX_2026-04-20.md](./M0_ROUTE_MIGRATION_MATRIX_2026-04-20.md):当前 `96` 条后端路由的“旧接口 -> 新实现”迁移矩阵,用于 Axum 路由树和 application service 落位。
|
||||
- [M0_MODULE_MIGRATION_BASELINE_2026-04-20.md](./M0_MODULE_MIGRATION_BASELINE_2026-04-20.md):当前 `12` 个内部模块的迁移归属基线,用于锁定 Rust package、SpacetimeDB bounded context 与 Axum/application 分工。
|
||||
- [M0_MODULE_MIGRATION_BASELINE_2026-04-20.md](./M0_MODULE_MIGRATION_BASELINE_2026-04-20.md):当前 `12` 个内部模块的迁移归属基线,用于锁定 Rust crate、SpacetimeDB bounded context 与 Axum/application 分工。
|
||||
- [M0_SSE_INTERFACE_BASELINE_2026-04-20.md](./M0_SSE_INTERFACE_BASELINE_2026-04-20.md):当前 `6` 条 SSE 接口及其事件格式冻结基线,用于 Axum SSE 兼容和前端 contract 回归。
|
||||
- [M0_GENERATED_STATIC_PREFIX_BASELINE_2026-04-20.md](./M0_GENERATED_STATIC_PREFIX_BASELINE_2026-04-20.md):当前正式 `/generated-*` 静态资源前缀冻结基线,用于 Axum 静态资源兼容层与 OSS 对象键规划。
|
||||
- [M0_FRONTEND_RESPONSE_CONTRACT_BASELINE_2026-04-20.md](./M0_FRONTEND_RESPONSE_CONTRACT_BASELINE_2026-04-20.md):当前前端直接依赖的响应头、envelope 与错误格式冻结基线,用于 Axum 中间件与错误响应兼容。
|
||||
|
||||
Reference in New Issue
Block a user