diff --git a/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md b/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md index 1a30c469..0b9d4072 100644 --- a/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md +++ b/backend-rewrite-tasklist/01_M0_M2_FOUNDATION_AND_AUTH.md @@ -23,7 +23,8 @@ 交付物:[M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md](./M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md) - [x] 确认旧 `server-node/` 在迁移期继续保留,不提前删除 交付物:[M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md](./M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md) -- [ ] 确认前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB +- [x] 确认前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB + 交付物:[M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md](./M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md) - [ ] 确认外部副作用统一收口在 Axum,不放进 SpacetimeDB 模块 ### 交付物 diff --git a/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md b/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md index de5f6af6..a47023ac 100644 --- a/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md +++ b/backend-rewrite-tasklist/M0_REPOSITORY_BOUNDARY_DECISIONS_2026-04-20.md @@ -20,7 +20,7 @@ | --- | --- | --- | | Rust 后端新目录名与根目录落位方案 | 已确认 | 新 Rust 后端固定为仓库根目录下的 `server-rs/`,与 `server-node/` 同级。 | | 旧 `server-node/` 在迁移期继续保留,不提前删除 | 已确认 | `server-node/` 在 `M0 ~ M6` 期间持续保留,直到 `M7` 切流与回退验证完成后再评估清理。 | -| 前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB | 待确认 | 后续补充。 | +| 前端第一阶段仍然只访问 Axum,不直连 SpacetimeDB | 已确认 | `M0 ~ M6` 前端统一只访问 Axum 暴露的 `/api/*`、`/healthz`、SSE 与静态资源兼容层,不新增直连 SpacetimeDB 原生协议路径。 | | 外部副作用统一收口在 Axum,不放进 SpacetimeDB 模块 | 待确认 | 后续补充。 | ## 3. 已确认决议一:`server-rs/` 固定落在仓库根目录 @@ -123,3 +123,36 @@ Genarrative/ 1. `M1` 搭建 `server-rs/` 时,不改动 `server-node/` 的存在性。 2. `M2 ~ M6` 迁移功能时,旧 `server-node/` 继续作为验收基线与回退锚点。 3. 真正评估清理旧 Node 后端的动作,只能放到 `M7` 切流完成之后。 + +## 6. 已确认决议三:前端第一阶段只访问 Axum + +### 6.1 决议内容 + +在 `M0 ~ M6` 迁移期内,前端访问新后端的唯一入口固定为 Axum。 + +第一阶段允许前端继续访问的面固定为: + +1. `/api/*` +2. `/healthz` +3. 当前已冻结的 SSE 路由 +4. 当前已冻结的 `/generated-*` 静态资源兼容前缀 + +第一阶段明确不做的事: + +1. 不让 Web 前端直接接 SpacetimeDB 原生 HTTP 接口。 +2. 不让 Web 前端直接接 SpacetimeDB 订阅协议。 +3. 不要求前端新增一套“Axum + SpacetimeDB 双后端并行直连”调用模式。 + +### 6.2 这样决议的原因 + +1. 当前前端已经直接依赖现有 `/api/*` 路由、response envelope、SSE、`/generated-*` 路径习惯。 +2. 如果在第一阶段就让前端同时认识 Axum 与 SpacetimeDB,会把迁移面从“后端平移”扩大成“前后端协议双重重写”。 +3. Axum 需要承担统一鉴权、cookie、JWT、OSS 签名、错误格式与 contract 兼容职责,这些都不应分散到前端直连多个后端协议。 + +### 6.3 对后续任务的直接约束 + +从这一条决议开始,后续任务必须遵守: + +1. `M1 ~ M2` 的 Axum 中间件与鉴权必须先跑通,再谈前端联调。 +2. `M3 ~ M6` 新增的 SpacetimeDB reducer/view 先通过 Axum facade 暴露,不直接要求前端改成原生 SpacetimeDB 客户端。 +3. 若后续要让前端直连 SpacetimeDB,只能作为第二阶段优化事项,不能混入当前重写主链。 diff --git a/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md b/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md index bd3bb3ca..1af552b8 100644 --- a/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md +++ b/docs/technical/SPACETIMEDB_AXUM_OSS_BACKEND_REWRITE_DESIGN_2026-04-20.md @@ -90,6 +90,7 @@ - Axum 是唯一 BFF / API Gateway。 - 前端第一阶段仍然只认识 Axum,不直接依赖 SpacetimeDB 原生接口。 +- 在 `M0 ~ M6` 迁移期内,不新增前端直连 SpacetimeDB 的主链方案。 ### 3.3 OSS 的边界