62 lines
9.3 KiB
Markdown
62 lines
9.3 KiB
Markdown
# crearte 路线图 / Roadmap
|
||
|
||
跨三个仓库(`crearte` 前端 / `crearte-server` 后端 / `crearte-deploy` 编排)的子项目路线图与索引,维护在 monorepo wrapper(本仓库)。
|
||
|
||
- **版本 v0**:2026-09-29 与维护者确认的分解与顺序。
|
||
- **现状基线**:crearte 0.13.0 / crearte-server 0.11.0 / crearte-deploy 0.3.1。
|
||
|
||
## 分解原则
|
||
|
||
- 按「依赖关系 + 是否阻塞上线」排序;每个子项目的规模控制在一份 spec 能装下。
|
||
- 每个子项目独立走 **spec → 实现计划 → 实现 → 验证** 的循环。
|
||
- 隐藏复杂度出现时升级路径(拆出新子项目),不硬塞进当前子项目。
|
||
|
||
## 第一波:上线底座(运维 / 可靠性,顺序敏感)
|
||
|
||
| # | 子项目 | 内容 | 涉及仓库 | 依赖 | 状态 |
|
||
|---|--------|------|----------|------|------|
|
||
| P0 | 已知缺陷清理 | ① CORS `Access-Control-Allow-Headers` 补 `If-None-Match`(解锁 e2e:stack Step5:revoke 410 + 降级)② 清理 compose 配置漂移(`BUNDLE_KEY_STORE` 环境变量、`bundle-keys-*` 卷——密钥自 server 0.6.0 起在 Postgres)③ `crearte-deploy` CHANGELOG 补账 | server, deploy | 无 | **完成**(server `a8ea755` / deploy `27044be`,2026-09-29 合并推送) |
|
||
| P1 | prod 写侧可用 | prod 栈补对象存储(prod MinIO 或外部 S3)+ `api-prod` 配 `STORAGE_S3_*` / `GAMES_BASE_DOMAIN` / `CORS_ALLOWED_ORIGINS`;密码默认值、TLS 起步。现状:prod 无对象存储时写侧路由(上传/投稿/审核/预览)不注册,生产只读 | deploy(少量 server) | P0 | **完成**(crearte `63bb96d` / deploy `4d53d58`,2026-09-29 合并推送;TLS 与真域名留清单,见 spec §6) |
|
||
| P2 | CI + 测试基线 | 后端 / 部署仓建 CI(gofmt/vet/test + `TEST_DATABASE_URL` 集成层 + e2e:stack 全链路);与前端已有 `validate.yml` 对齐。现状:后端/部署仓无 CI,Postgres 集成测试无 `TEST_DATABASE_URL` 时静默 skip | 三仓 | P0(e2e 依赖其修复) | **完成**(server `7b97108` / crearte `711b6de` / deploy `522545d`,2026-09-30 合并推送;e2e-stack 宿主仓修订见 spec §2.2;首跑拓出 serve-runtime 子域缺陷已修(`5e0fb2e`);Actions 启用与分支保护为 owner 手动尾巴,见 spec §2.4) |
|
||
| P3 | 备份 + 可观测 | `pg_dump` 定时备份 + MinIO 数据保护 + 恢复演练 runbook;结构化 / 请求日志 + `/metrics`;限流器单实例问题记录权衡 | server, deploy | P1(拓扑定型) | 待启动 |
|
||
|
||
## 第二波:产品价值(可与第一波部分并行)
|
||
|
||
| # | 子项目 | 内容 | 涉及仓库 | 依赖 | 状态 |
|
||
|---|--------|------|----------|------|------|
|
||
| P4 | 作者主页 | `/users/:user` 聚合页(该作者全部已上架作品,前端按命名空间过滤,**零后端改动**),按最新上架排序;顺带 `/games/:user/:slug` 面包屑与作者名互链。spec:`docs/specs/2026-09-29-author-page-design.md` | crearte(前端) | 无强依赖,可提前并行 | **完成**(crearte `f12cbf1`,2026-09-29 合并推送) |
|
||
| P5 | 收藏 / 评分 | 新数据表 + 用户态 API + 目录/详情页 UI;产品线里最大的一块 | 三仓 | 建议 P2 先落地 | **完成**(server `e3da246` / crearte `eb5fbed`,2026-09-30 合并推送;范围修订 deploy 零改动,见 spec) |
|
||
| P6 | hosted 作品投稿(方案 A 自托管内嵌) | 作者把游戏部署在别处,投稿填 https URL,站内沙箱 iframe 播放;播放端机件已全存在,打通的是入口:后端 D-B runtime 不可变 + D-C hosted 禁 bundle 两护栏,前端表单第三档+预填解锁 | 三仓 | owner 已拍 A | **完成**(owner 拍板方案 A:只存 URL、站内沙箱 iframe 播;server `3e11446` 0.13.0 / crearte `fee5f3b` 0.19.0,2026-09-30 合并推送。勘查正误:Approve 落库映射本就全(PayloadToWork import.go:39),无需动;真实缺口只在校验两处——D-B metadata_change 禁改 runtime(根治前端拒预填的降级风险)+ D-C hosted 禁带 bundle。前端:类型三档/表单第三 radio「自托管内嵌」/hostedUrl https+fallback 默认 external 镜像校验/预填解锁;播放端零改动(GameHost/useGameFrame 既有)。双路审查 PASS with notes;六腿全绿:容器四连、空库 -count=1 集成 151 PASS 零 FAIL(含 TestHostedPublishChainOnPostgres 真 HTTP 全链)、真栈 full-loop 分支后端 1 passed、vitest 492/typecheck/admin-flow 6(首轮 1 passed 系栈腿争用假警报,复跑坐实)/主套件 69。T5:deploy 模板层无主站 frame-src 下发(仅两处属运行时子域页 CSP),零改动记录在案。遗留仅剩:new_version 对 hosted 仅 server 拦(前端无硬校验,spec 决策)。D-D(审核面 hostedUrl/fallback 展示行)当日补交:控制者直改维护者小补丁,分支 feat/p6-dd-adminrow(Task 2 任务书漏列该条;审查按任务书对照未扯出——教训:审查依据应是 spec §3 全量),纯文本无锚点+降级中文标签,四腿复跑 vitest 492/typecheck/admin-flow 7/主套件 70 全 RC=0,crearte 合主 `9bd9372`(0.19.1) |
|
||
|
||
## 第三波:治理与长尾(随时可插队)
|
||
|
||
| # | 子项目 | 内容 | 状态 |
|
||
|---|--------|------|------|
|
||
| P7 | 管理后台增强 | 用户列表 / 角色管理 UI(替代 CLI `user set-role`)+ 审计日志 | **完成**(server `ca24805` 0.12.0 / crearte `900f13a` 0.18.0,2026-09-30 合并推送。audit_log 表 0010 + 组中间件统一记录(owner 定稿:admin 路由收敛为组,Full-Path 模板入史,GET 也记,失败尝试照记,未遂 401/403 不记);用户列表/PATCH 角色/审计查询三端点;唯一 admin 降级 409 护栏 CLI/API 双覆盖;前端 /admin/users + /admin/audit 两页,降级确认双要点文案;本机六腿验收全绿:容器四连+fresh-DB `-count=1` 10 ok 零 FAIL 零 skip、废 token 端到端 401、护栏矩阵(非唯一降 OK/唯一降 CLI 拒+API 409)、审计流水含 409 失败尝试、真栈 full-loop 分支后端 1 passed×2、vitest 488/typecheck/admin-flow 6/主套件 68) |
|
||
| P8 | 长尾打包 | 权限开关 UI 全量(`inlineStyle/wasm/coop/fullscreen/gamepad`)、后端 triage 小项(`games.Detail` 400 细分、admin 路由 slug 校验、approve 同名竞态测试)、账号注销、静态兜底目录、CHANGELOG 模板文案 | **第一批完成**(②⑤①,2026-10-01 合并推送:server `921443a` 0.14.0 / crearte `70ba10c` 0.20.0。容器四连+空库 `-count=1` 集成全绿(新竞态测试含,skip 守卫 0)+`-race` 竞态腿 PASS;curl 冒烟全中:detail 400 细分 user:/slug: 且双非法 user 优先、admin 四路非法 400 `invalid work id`、合法格式不存在仍 404;FE vitest 499/typecheck/admin-flow 7/主套件 70+1skip;双审 PASS(server PASS with notes—唯一 note 双非法优先级缺钉桩,已以 `ee5b960` 测试断言补上);deploy 零改动。**第二批余下=③账号注销(待产品决策)、④静态兜底目录(按需)**,CHANGELOG 头部去模板腔两仓已随第一批完成、wrapper 头部不在 spec 范围 |
|
||
|
||
## 排序理由
|
||
|
||
- **P0 最先**:几十行的修复,却解锁整条 e2e 回归链路——后面每一波都靠它做验证保障。
|
||
- **P1 紧随**:不做则生产环境投稿 / 审核根本不可用,产品功能再丰富也上不了线。
|
||
- **P4 可提前**:无依赖且范围清晰,若想先看到用户可感知的产品变化,可与第一波并行。
|
||
|
||
## 文档与提交约定
|
||
|
||
- 所有 spec / 实现计划 / 跨仓库协作文档统一放在本仓库 `docs/`(`docs/specs/`、`docs/plans/`、`docs/ROADMAP.md`),并在下表登记;内层仓库只保留各自的 `docs/CHANGELOG.md` 与 `docs/README.md`。此约定取代 crearte-deploy 0.3.0 确立的「crearte-deploy 为跨仓库文档 canonical home」。
|
||
- monorepo(本仓库)可直接在 `master` 提交;内层三仓仍遵循各自 `AGENTS.md` 的分支与合并规范。
|
||
|
||
## 子项目文档索引
|
||
|
||
| 子项目 | spec | 实现计划 |
|
||
|--------|------|----------|
|
||
| P4 作者主页 | `docs/specs/2026-09-29-author-page-design.md` | `docs/plans/2026-09-29-author-page.md`(已执行,2026-09-29) |
|
||
| P1 prod 写侧可用 | `docs/specs/2026-09-29-prod-write-side-design.md` | `docs/plans/2026-09-29-prod-write-side.md`(已执行,2026-09-29) |
|
||
| P5 收藏/评分 | `docs/specs/2026-09-30-favorites-ratings-design.md` | `docs/plans/2026-09-30-favorites-ratings.md`(已执行,2026-09-30) |
|
||
| P6 hosted 投稿(方案 A) | `docs/specs/2026-09-30-hosted-submission-design.md` | `docs/plans/2026-09-30-hosted-submission.md`(已执行,2026-09-30) |
|
||
| 创作者中心 `/creator`(维护者直接需求) | `docs/specs/2026-09-30-creator-center-design.md` | `docs/plans/2026-09-30-creator-center.md`(已执行,2026-09-30) |
|
||
| P2 CI+测试基线 | `docs/specs/2026-09-30-ci-test-baseline-design.md` | `docs/plans/2026-09-30-ci-test-baseline.md`(已执行,2026-09-30) |
|
||
| P3 备份+可观测 | `docs/specs/2026-09-30-backup-observability-design.md` | `docs/plans/2026-09-30-backup-observability.md` |
|
||
| P7 管理后台增强 | `docs/specs/2026-09-30-admin-console-design.md` | `docs/plans/2026-09-30-admin-console.md`(已执行,2026-09-30) |
|
||
| P8 长尾打包(第一批:②⑤①) | `docs/specs/2026-10-01-p8-long-tail-design.md` | `docs/plans/2026-10-01-p8-long-tail.md`(第一批已执行,2026-10-01;第二批③④待启动) |
|