28 KiB
28 KiB
Changelog / 更新日志
All notable changes to this repository should be documented in this file. 本仓库的重要变更建议统一记录在此文件中。
The format loosely follows Keep a Changelog and can be adapted to the team's habits. 本文档参考了 Keep a Changelog 的思路,也可以根据团队习惯调整。
[0.3.0] - 2026-10-01
Done / 完成
- Roadmap closing wave delivered — P8 batch-2 (③ account deletion + ④ static fallback catalog) and P3 reland (backup + observability), per owner's third directive 「实现 roadmap 所有待办事项」. Sub-repo commits: crearte-server
12b8ffb(0.15.0 — migration 0011 tombstone column; AccountService deletion kernel: password re-check, works delisted, drafts removed with best-effort object delete, pending submissions auto-rejected, sessions invalidated via token_version, email/username rewritten todeleted-<id>@deleted.invalid/gone-<id8hex>so the original address is immediately reusable, sole-admin self-deletion refused 409last_adminshared with the P7 demote guard;DELETE /api/auth/account(204/400/401/409/410,Cache-Control: no-store); CLIuser delete <email>passwordless operator path; CLIcatalog export --out DIR [--pretty]emitting the exact StaticContentRepository contract —index.jsonschemaVersion 2 +games/<user>__<slug>.json, virtual entries carry the bundle object, external entries omit it, cover/bundle.url empty whenSTORAGE_S3_*unset;user set-rolegets--by-id) and crearte7d5f338(0.21.0 — AccountView fourth 「危险区:注销账号」 section: password + acknowledgement checkbox gate, busy lock, success → invalidate session → home, failure → alert row;auth/client.tsdeleteAccountwith the code-branchingtoUserMessage; AdminUsersView now localizes validation/not_found/internal (P7 copy tail pinned by tests,7a54152) and the 409 last_admin echo stays on the admin side — the account view deliberately shows the generic internal copy because the auth client normalizes unknown codes tointernaland drops the backend message; review note aboutAuthApiErrorvsUserManagementApiErrorshape resolved in-test). crearte-deploy12f7c10(0.6.0) and crearte-serverd627e12(0.16.0) reland P3 byte-for-byte via cherry-picks7fcfe0e/6ffd1ee/93a3c70whose originals had drifted off master during the rollback window: prod backup tooling (scripts/backup.shpg_dump + mc-mirror with retention and manifest,restore-drill.shagainstdb-testonly,docs/BACKUP-RUNBOOK.md, CI dry-run leg, composeLOG_FORMAT/LOG_LEVELpassthrough) and observability (stdliblog→slogmechanical migration across 30 sites incl. the P7/P8b2-new-surface files, per-requesthttp_requestmiddleware wired outsidegin.Recoveryso panic paths log status=500, hand-rolled/metricsexposition with http/go/pgpool families,/healthz+/metricsdouble-skipped, single-instance rate-limit tradeoff documented). P3M merge commitcecfae1reconciled the observability branch with the P8b2 surface (CHANGELOG top order 0.16.0→0.15.0, router/serve both-side wiring). Acceptance: server container four-green + fresh real-DB-p 1 -count=1(skip-guard grep 0, deletion-chain + observability suites PASS) on every leg; independent reviews PASS (P3S reviewer verified byte-level identity against6ffd1ee/93a3c70; frontend review returned PASS with two minor notes, pinned before merge as7a54152; server-side LOG_LEVEL case-sensitivity divergence betweenconfig.applyLoggingandobservability.newLoggerdeferred as a documented nit); branch-build curl smoke 14/14 PASS (wrong-pw 401invalid_credentials, missing-pw 400, sole-admin 409last_adminafter verifying token rotation on role change, correct-pw 204 +no-store, old token 401, tombstone row fields, original email re-register 201, CLIuser deleteoutput shape, double-delete rejected, export schemaVersion 2); live-stack metrics smoke on the merged tree (request/duration counters withnomatchbucket, pgpool + go families, HELP/TYPE headers, both skips, slog JSON request lines). FE vitest 512 / vue-tsc clean / main e2e 71+1skip / noauth 4. Remaining manual tail for the owner: schedulebackup.sh(cron or the runbook's systemd timer) and runrestore-drill.shagainst the real prod stack once it is up — this host has no prod stack running, so the drill leg ran against throwaway containers only. Roadmap: P0–P8 all closed; P8 remainder is ④'s render-side consumption (on demand) and nothing else is 待启动. - 路线图收口波次交付——P8 第二批(③账号注销 + ④静态兜底目录导出)与 P3 重落(备份 + 可观测),依 owner 第三条指令「实现 roadmap 所有待办事项」。子仓提交:crearte-server
12b8ffb(0.15.0——迁移 0011 墓碑列;AccountService 注销内核:密码复核、名下作品全部下架、草稿删除含对象 best-effort、pending 投稿自动驳回、token_version 递增废全部会话、email/username 改写为deleted-<id>@deleted.invalid/gone-<id8hex>使原邮箱即刻可复用、唯一 admin 自拒 409last_admin(与 P7 降级护栏同源);DELETE /api/auth/account(204/400/401/409/410,Cache-Control: no-store);CLIuser delete <email>免密码运维通道;CLIcatalog export --out DIR [--pretty]按 StaticContentRepository 契约出index.json(schemaVersion 2)+games/<user>__<slug>.json,virtual 带 bundle、external 省略、未配STORAGE_S3_*时 cover/bundle.url 置空仍可浏览;user set-role加--by-id)与 crearte7d5f338(0.21.0——AccountView 第四段「危险区:注销账号」:密码 + 知晓勾选双闸门、busy 锁、成功即清会话回首页、失败出 alert 行;auth/client.ts加deleteAccount并分支toUserMessage文案;AdminUsersView 补齐 validation/not_found/internal 中文化(P7 文案尾,7a54152钉桩),409 原文回显留在管理侧——账号页有意展示通用 internal 文案,因 auth client 将未知码归一并丢弃后端原文;审查提出的错误类型形状问题已在测试内钉清)。crearte-deploy12f7c10(0.6.0)与 crearte-serverd627e12(0.16.0)以 cherry-pick7fcfe0e/6ffd1ee/93a3c70字节级重放 P3——原提交在回滚窗口脱离 master:prod 备份件(scripts/backup.shpg_dump + mc-mirror + 保留策略 + manifest、restore-drill.sh只连db-test、docs/BACKUP-RUNBOOK.md、CI dry-run 腿、compose 透传LOG_FORMAT/LOG_LEVEL)与可观测(stdliblog机械迁slog共 30 处含 P7/P8b2 新面、每请求http_request中间件挂在gin.Recovery外层使 panic 路径记 status=500、手写/metrics出 http/go/pgpool 三族、/healthz与/metrics双跳过、限流单实例权衡入档)。P3M 合流提交cecfae1把可观测分支与 P8b2 面调和(CHANGELOG 顶序 0.16.0→0.15.0、router/serve 双侧接线保留)。验收:每腿容器四连绿 + 全新真库-p 1 -count=1(skip 守卫 grep 0,注销链与 observability 套件 PASS);独立审查 PASS(P3S 审查员逐文件对6ffd1ee/93a3c70核到字节级一致;前端审查 PASS with notes——两条次要已合主前钉桩7a54152;server 侧config.applyLogging与observability.newLogger的 LOG_LEVEL 大小写策略不一致按次要 deferred);分支真产物 curl 冒烟 14/14 PASS(错密码 401invalid_credentials、缺密码 400、角色变更后先验 token 轮换再证唯一 admin 409last_admin、对密码 204 +no-store、旧 token 401、墓碑行字段、原邮箱重注册 201、CLIuser delete输出形状、二次注销被拒、导出 schemaVersion 2);合主树实栈 metrics 冒烟(请求/耗时计数含nomatch桶、pgpool 与 go 族、HELP/TYPE 头、双跳过、slog JSON 请求行)。FE vitest 512 / vue-tsc 零错 / 主 e2e 71+1skip / noauth 4。留给 owner 的手动尾巴:按 runbook 给backup.sh排定时(cron 或 systemd timer),并在真 prod 栈起来后跑一次restore-drill.sh——本机无 prod 栈在跑,演练腿只对一次性容器做过。路线图:P0–P8 全部闭合;P8 仅剩④的 render 端消费(按需),无待启动项。
[0.3.1] - 2026-10-01
Done / 完成
- P9 UX batch-1 (browser feedback pack) delivered: crearte
26cd625(0.22.0 — two-phase router-leveldocument.title:afterEachstatic baseline over the full 19-name route table + refinement watches on exactly four data pages (game/catalog/docs/author), home deliberately kept as the barecrearte 创艺string so the existing e2e pin never moved; game-pagemeta descriptionwith 120-codepoint clipping, DEFAULT fallback and per-navigation reset back to default (review ISSUE-1 patched pre-merge, pinned by a router test);StatePanelskeletons honest at last — card variant 3→6 (≥1.5 rows at each 2/3/4-column breakpoint), newlinesvariant on the six non-grid consumers (eight instances incl. AdminView ×3), index.html gains the default description meta). Zero server/deploy changes. Acceptance: vitest 551 (baseline 512 + 39 new) / vue-tsc clean / build OK / main e2e 72+1skip incl. a new title leg / noauth 4. Independent review PASS with notes — ISSUE-1 (leave-game description not restored, spec D-C sub-clause) and ISSUE-2 (spec §1 said "seven non-grid pages", CreatorCenterView does not consume StatePanel — count is six; wording fixed in spec and changelog) both resolved before merge. B (keyboard/skip-link/mobile header) and C (dark mode) batches parked pending owner go-ahead. - P9 UX 第一批(浏览器反馈包)交付:crearte
26cd625(0.22.0——两段式路由级document.title:afterEach按 19 个路由名全表设静态基线 + 恰好四个数据页(作品/目录/文档/作者)watch 精化;home 有意保持裸crearte 创艺整串,既有 e2e 钉桩一字未动;作品页meta description截 120 码点、默认回落、每次导航复位(审查 ISSUE-1 合主前补钉并以 router 测试钉桩);StatePanel骨架终诚实——cards 变体 3→6(2/3/4 列断点各≥1.5 行)、新增lines变体给六个非网格消费页(八实例含 AdminView×3);index.html 补默认 description)。server/deploy 零改动。验收:vitest 551(基线 512+新增 39)/ vue-tsc 零错 / build OK / 主 e2e 72+1skip(含新增标题腿)/ noauth 4。独立审查 PASS with notes——ISSUE-1(离开作品页 description 未恢复默认,spec D-C 子项)与 ISSUE-2(spec §1 写「7 个非网格页」,实际 CreatorCenterView 不消费 StatePanel,应为六个;spec 与 CHANGELOG 措辞已修正)均合主前处置。B(键盘/skip-link/移动端页头)与 C(暗色模式)两批挂账待 owner 发令。
[0.2.9] - 2026-10-01
Chores / 杂务
- crearte-deploy
150927e(0.5.2):.gitignoregainsbackups/so P3 backup-script snapshots (e.g.backups/prod/20260930T095727Z/) stop pollutinggit status; the on-disk snapshot is untouched. - crearte-deploy
150927e(0.5.2):.gitignore新增backups/,P3 备份脚本的本机快照(如backups/prod/20260930T095727Z/)不再污染git status;盘上既有快照原样保留。
[0.2.8] - 2026-10-01
Done / 完成
- P8 batch-1 (triage + copy + feature-switch UI) delivered: crearte-server
921443a(0.14.0 —games.Detail400 messages split intouser: invalid format/slug: invalid formatwith user precedence pinned by assertion (status/error codes unchanged); four admin work routes (unpublish/republish/features/revoke) validate :user/:slug at handler entry via sharedvalidWorkParams, malformed ids now 400invalid work idinstead of a misleading 404 (adminWorkIDuntouched); new gated concurrency testTestApproveSameWorkIDConcurrent— two same-work_id new_work approvals, exactly one winner, loser gets ErrWorkIDTaken/ErrSubmissionConflict, one row; CHANGELOG header de-templatized) and crearte70ba10c(0.20.0 — CSP editing UI opened to the full seven-key set: inlineStyle/wasm/coop/fullscreen/gamepad added to EditableFeatures/EMPTY_FEATURES/FEATURE_ITEMS/collectFeatures/featuresToForm/hasAnyFeature with Chinese label+hint per switch (risk + scenario spelled out); all three surfaces stay driven by the single FEATURE_ITEMS list — submission form, AdminView expanded row, AdminSubmissionView read-only; payload always carries seven keys preserving the missing-key-keeps-stored-value semantics; features/SubmitFormView/AdminSubmissionView tests rewritten and added; CHANGELOG header de-templatized). Zero deploy changes, zero migrations, zero new deps; runtime flag consumers untouched. Acceptance: server container four-green + fresh-empty-DB -count=1 integration (race test ran, skip-guard grep 0) +-raceleg PASS (two concurrency tests, no data races — needed the Debian golang:1.24 image, alpine lacks gcc for cgo); curl smoke on a live branch build: detail 400s distinguished, both-bad → user wins, all four admin routes 400 on malformed slug/user, legal-but-missing id still 404; FE vitest 499 / typecheck / admin-flow 7 / main suite 70+1skip (first main-suite decrypt failure was a stale serve-runtime process left by a dead subagent — killed it, rerun green). Dual independent review: crearte PASS (notes: gamepad hint leans on its label for the “what is loosened” clause, accepted); server PASS with notes (only note — user-precedence not pinned by test — fixed asee5b960before merge). Lesson landed: reviewers briefed with an explicit “spec §1–§3 full-text, not just the task brief” clause (P6 D-D gap). Task-2 implementer died mid-run; its uncommitted worktree was verified against spec, pinned as54b1f82with a full-message commit rather than redispatched. Roadmap: P8 second batch (③ account deletion awaiting product call, ④ static fallback dir on-demand) remains. - P8 第一批(triage 小项 + 文案 + 权限开关 UI)交付:crearte-server
921443a(0.14.0——games.Detail400 文案拆为user: invalid format/slug: invalid format,双非法 user 优先已用断言钉桩(状态码/错误码不变);四条 admin 作品路由(unpublish/republish/features/revoke)handler 入口经共享validWorkParams校验 :user/:slug,非法 id 改返 400invalid work id不再误导成 404(adminWorkID未动);新增门控并发测试TestApproveSameWorkIDConcurrent——同 work_id 两份 new_work 并发审批,恰一条成功、败者 ErrWorkIDTaken/ErrSubmissionConflict、库中恰一行;CHANGELOG 头部去模板腔)与 crearte70ba10c(0.20.0——CSP 编辑 UI 开放七键全集:inlineStyle/wasm/coop/fullscreen/gamepad 入 EditableFeatures/EMPTY_FEATURES/FEATURE_ITEMS/collectFeatures/featuresToForm/hasAnyFeature,每开关中文 label+hint 写清风险与适用场景;三处界面仍由单一 FEATURE_ITEMS 驱动——投稿表单、AdminView 展开行、AdminSubmissionView 只读;载荷恒含七键,保住「缺键→保留原值」语义;三套测试改写/新增;CHANGELOG 头部去模板腔)。deploy 零改动、零迁移、零新依赖,运行时 flag 消费端未碰。验收:server 容器四连绿 + 空库 -count=1 集成全绿(竞态测试实跑,skip 守卫 grep 0)+-race腿 PASS(两并发测试零数据竞争;alpine 无 gcc 需换 Debian golang:1.24 镜像);分支真产物 curl 冒烟全中:detail 400 可区分、双非法 user 赢、admin 四路非法 slug/user 全 400、合法格式不存在仍 404;FE vitest 499 / typecheck / admin-flow 7 / 主套件 70+1skip(首轮 decrypt 一腿失败系夭折子代理残留的旧 serve-runtime 进程污染环境,杀进程复跑绿)。双路独立审查:crearte PASS(注:gamepad hint 的「放宽了什么」靠 label 承载,可接受);server PASS with notes——唯一 note(user 优先缺钉桩)已以ee5b960在合主前补齐。教训落地:审查员任务书显式要求「对照 spec §1–§3 全文而非仅任务书」(P6 D-D 漏项的根治)。Task2 实现者中途夭折——其未提交工作树经逐条对 spec 核验后以完整提交信息钉成54b1f82,未盲重跑。路线图:P8 第二批(③账号注销待产品决策、④静态兜底目录按需)仍待启动。
[0.2.7] - 2026-09-30
Done / 完成
- P6 hosted submission delivered as plan A (owner call: author-hosted https URL, embedded play; no file hosting): crearte-server
3e11446(0.13.0 — D-B runtime immutable on metadata_change, D-C hosted works cannot carry a bundle, unit + fresh-empty-DB integration incl. real-HTTP draft→submit→approve→hosted_url/play_origin/fallback readback and public payload runtime/hostedUrl; zero migrations, zero new deps, Approve mapping untouched — the feared hosted_url write gap was a false alarm, PayloadToWork at import.go:39 already covers it) and creartefee5f3b(0.19.0 — content-layer WorkRuntime three modes with hostedUrl/fallback aligned to server json names, submit-form third radio 自托管内嵌 w/ https + fallback=external⇒url mirror validation, prefill refusal removed and hosted fields backfilled, new_version stays virtual-only; playback side zero changes per spec; vitest 492 / typecheck / admin-flow 6 / main suite 69 green; e2e hosted draft-payload flow added). Dual independent review PASS with notes; six-leg host acceptance green (incl. branch-backend full-loop 1 passed; first admin-flow 1-passed reading was stack-contention false alarm, rerun 6 passed RC=0). T5 CSP probe: deploy templates carry no main-site frame-src (the twoframe-src 'none'hits belong to runtime-subdomain pages only) — zero deploy changes on record. Known gaps: D-D (admin hostedUrl display row) delivered same day as crearte 0.19.19bd9372— maintainer-direct follow-up patch (Task 2 brief had omitted the row; reviews passed against the brief rather than full spec §3 — lesson: review against the spec). Plain-text row, deliberately no anchor, plus fallback label row; four legs rerun green (vitest 492 / typecheck / admin-flow 7 / main suite 70). Remaining: new_version hosted rejection is server-side only (FE no hard check, spec-accepted). See spec D-A…D-F. - P6 hosted 作品投稿以方案 A 交付(owner 拍板:作者自部署、投稿只存 https URL、站内沙箱 iframe 播;不做文件托管):crearte-server
3e11446(0.13.0——D-B metadata_change 禁改 runtime、D-C hosted 禁带 bundle;单测 + 空库集成含真 HTTP 草稿→提交→过审→hosted_url/play_origin/fallback 读回与公开载荷 runtime/hostedUrl;零迁移零新依赖,Approve 落库未动——此前担心的 hosted_url 落库缺口系误报,PayloadToWork 本就覆盖)与 creartefee5f3b(0.19.0——内容层三档 + hostedUrl/fallback 字段与 server json 名逐字对齐;表单第三 radio「自托管内嵌」+ https 校验 + fallback 默认 external 镜像校验;预填拒绝分支删除并回填;new_version 仍 virtual-only;播放端零改动;vitest 492 / typecheck / admin-flow 6 / 主套件 69 绿;e2e 新增 hosted 草稿载荷流)。双路独立审查 PASS with notes;六腿本机验收全绿(含分支后端真栈 full-loop 1 passed;admin-flow 首轮 1 passed 为栈腿争用假警报,复跑 6 passed RC=0 坐实)。T5:deploy 模板无主站 frame-src 下发(两处 'none' 属运行时子域页),零改动记录。遗留:D-D(审核面 hostedUrl 展示行)当日补交 crearte 0.19.19bd9372——控制者直改小补丁(Task 2 任务书漏列该条;审查按任务书对照未扯出——教训:审查依据应为 spec §3 全量)。纯文本无锚点行+降级中文标签行,四腿复跑全绿(vitest 492 / typecheck / admin-flow 7 / 主套件 70)。仅剩:new_version 拒 hosted 仅 server 拦(前端无硬校验,spec 已接受)。选型见 spec D-A…D-F。
[0.2.6] - 2026-09-30
Done / 完成
- P7 admin console delivered: crearte-server
ca24805(0.12.0 — audit_log table via migration 0010, audit middleware on a consolidated admin route group (owner call: no more per-route RequireAdmin), gin FullPath templates recorded for every admin request incl. GETs and failed attempts while unauthorized 401/403 stays unrecorded; user list / PATCH role / audit query endpoints; last-admin demotion guard 409 enforced in the shared service so CLI and API both obey; token invalidation on role change verified end-to-end) and crearte900f13a(0.18.0 — /admin/users with search/pagination/demote-confirm dual-point copy incl. 409 echo, /admin/audit with localized time, zh action labels w/ fallback, status coloring, route filter; apiRepo admin trio with AdminApiError; e2e admin-flow extended w/ self-recording semantics; vitest 488 / main suite 68 green). Host acceptance: six legs all green incl. fresh-empty-DB -count=1 integration (10 ok, zero FAIL/skip) and real-stack full-loop 1 passed ×2 against the branch backend. See spec §2 decisions D-A…D-D. - P7 管理后台增强交付:crearte-server
ca24805(0.12.0——迁移 0010 audit_log;审计中间件挂收敛后的 admin 路由组(owner 定稿:不再逐条手挂),admin 面全请求入史含 GET 与失败尝试(FullPath 模板),未遂 401/403 不入史;用户列表/PATCH 角色/审计查询三端点;唯一 admin 降级 409 护栏落在共享 service,CLI/API 双覆盖;角色变更废 token 端到端验证)与 crearte900f13a(0.18.0——/admin/users(搜索/分页/降级确认双要点文案含 409 原文回显)+ /admin/audit(本地化时间/中文动作标签+未知回退/状态着色/route 过滤);apiRepo 管理面三方法+AdminApiError;e2e admin-flow 扩两流含自记录语义;vitest 488 / 主套件 68 绿)。本机验收六腿全绿:容器四连、空库 -count=1 集成 10 ok 零 FAIL 零 skip、护栏矩阵(非唯一降级 OK / 唯一降级 CLI 拒 + API 409)、废 token 401、审计流水含失败尝试、分支后端真栈 full-loop 1 passed ×2。选型见 spec §2 D-A…D-D。
[0.2.5] - 2026-09-30
Docs / 文档
- Creator center
/creatordelivered (maintainer-direct need, plan 2026-09-30-creator-center.md executed): pure-frontend crearte 0.17.0 — new route + homepage-style view (hero, auth-state-aware work-data placeholder card, tutorial placeholder card linking to the submission guide) and a third header nav tab; merged & pushed as creartee2fab8aafter TDD e2e (4 new default cases + 1 appended noauth case) and a 6-lens review; server/deploy untouched by design. - 创作者中心
/creator交付(维护者直接需求,计划 2026-09-30-creator-center.md 已执行):纯前端 crearte 0.17.0——新路由 + 首页样式视图(hero、按登录态分流的作品数据占位卡、链向现有投稿指南的教程占位卡)与页头第三个导航 tab;TDD e2e(默认配置新增 4 用例 + noauth 追加 1 断言)与 6 透镜审查后以 creartee2fab8a合并推送;后端/部署仓按设计零改动。
[0.2.4] - 2026-09-30
Docs / 文档
- Roadmap P2 delivered: GitHub Actions baseline in all three repos — crearte-server
validate.yml(check + empty-DB Postgres integration with a silent-skip guard + real-stack e2e-stack hosting the cross-repo checkout pair), creartevalidate.yml(push:master trigger) pluse2e-stack.shGO/REQUIRED env knobs, crearte-deployvalidate.yml(compose config across four profiles with a negative empty-password guard test). First real-stack run uncovered a serve-runtime defect: the runtime triple (/__bootstrap, /sw.js, /agent.js) was gated behind the fixtures subdomain table, so live-registered games could never install the SW — fixed with a position-only move (crearte5e0fb2e). Merged & pushed 2026-09-30: server7b97108/ crearte711b6de/ deploy522545d; Actions enablement and branch protection are owner-manual tails (spec §2.4). - 路线图 P2 交付:三仓 GitHub Actions 基线——crearte-server
validate.yml(check + 空库 Postgres 集成层带静默 skip 守卫 + e2e-stack 真栈 job 宿主双仓 checkout)、creartevalidate.yml(push:master 触发)及e2e-stack.sh的 GO/REQUIRED 环境变量开关、crearte-deployvalidate.yml(四 profile compose config 正路 + 空密码反路守卫断言)。真栈首跑拓出 serve-runtime 缺陷:运行时三件套(/__bootstrap、/sw.js、/agent.js)被卡在夹具子域表门槛之后,活体注册的作品永远装不上 SW——已以纯位置搬移修复(crearte5e0fb2e)。2026-09-30 合并推送:server7b97108/ crearte711b6de/ deploy522545d;Actions 启用确认与分支保护为 owner 手动尾巴(spec §2.4)。
[0.2.3] - 2026-09-30
Docs / 文档
- Roadmap P5 delivered: favorites & 5-star ratings went full-stack — server
favorites/ratingstables +ReactionRepositorywith reaction-watermark ETag invalidation and user-space endpoints (crearte-servere3da246), and frontend hot sort (Bayesian prior mean + favorite log weight), game-page reaction widget, card badges, account my-reactions section (crearteeb5fbed), merged & pushed 2026-09-30 after a 9-step live prod-stack smoke; crearte-deploy untouched by design (scope revision recorded in spec). - 路线图 P5 交付:收藏与五星评分全栈落地——服务端
favorites/ratings新表 +ReactionRepository(反应水位驱动 ETag 失效)与用户态端点(crearte-servere3da246);前端热门排序(贝叶斯先验均分 + 收藏对数权重)、详情页反应组件、卡片徽标、账号页我的反应(crearteeb5fbed),2026-09-30 经 prod 演练栈 9 步冒烟后合并推送;crearte-deploy 按设计零改动(范围修订已记入 spec)。
[0.2.2] - 2026-09-29
Docs / 文档
- Roadmap P1 delivered: prod write side went live in the compose drill — minio-prod + api-prod storage/games env + templated nginx wildcard block (crearte
63bb96d/ crearte-deploy4d53d58), POSTGRES_PASSWORD default retired, TLS deferred by design with a real-server checklist in README. - 路线图 P1 交付:prod 写侧在本机演练栈完整启用——minio-prod、api-prod 存储/游玩域名环境、nginx 通配块模板化(crearte
63bb96d/ crearte-deploy4d53d58);POSTGRES_PASSWORD 默认值退役;TLS 按设计缓做,真机清单已入 README。
[0.2.1] - 2026-09-29
Fixed / 修复
clone_all.shpinsmasterforcrearteandcrearte-serverinstead of the stalefeat/submission-previewwork branch — fresh clones and updates land on the integration branch that carries the merged roadmap work. (Note:update_reposwitches clean checkouts to the pinned branch; dirty ones are skipped.)clone_all.sh中crearte与crearte-server的引导分支由过时的feat/submission-preview工作分支改为master—— 全新克隆与更新落在承载路线图已合并工作的集成分支上。(注意:update_repo会把干净的 checkout 切到钉子分支,脏工作树自动跳过切换。)
[0.2.0] - 2026-09-29
Changed / 变更
- Roadmap delivered: P0 (known-defect cleanup — CORS
If-None-Matchfix in crearte-servera8ea755, compose key-store drift cleanup in crearte-deploy27044be) and P4 (author page/users/:user, creartef12cbf1) are merged to their repos' master and pushed; roadmap statuses updated. - 路线图交付:P0(已知缺陷清理——crearte-server
a8ea755的 CORSIf-None-Match修复、crearte-deploy27044be的 compose 密钥库遗留清理)与 P4(作者主页/users/:user,creartef12cbf1)均已合并至各仓 master 并推送;路线图状态已更新。
[0.1.0] - 2026-09-29
Added / 新增
- Added
docs/ROADMAP.md: the cross-repo roadmap decomposed into sub-projects P0–P8 (ops foundation → product value → governance), with ordering rationale and a doc index for future specs and plans. - 新增
docs/ROADMAP.md:跨仓库路线图,分解为 P0–P8 子项目(上线底座 → 产品价值 → 治理长尾),含排序理由与后续 spec/计划的文档索引。
Changed / 变更
- Doc convention: all specs, implementation plans and cross-repo coordination docs now live in the monorepo
docs/instead of per-repodocs/superpowers/; this supersedes the crearte-deploy 0.3.0 "canonical home" convention. Commits in the monorepo wrapper may go directly tomaster(user-approved); the three inner repos keep their own branch rules. - 文档约定:所有 spec、实现计划与跨仓库协作文档统一收归 monorepo
docs/,不再散落各内层仓库的docs/superpowers/;此约定取代 crearte-deploy 0.3.0 的「canonical home」约定。monorepo wrapper 可直接提交master(维护者确认),内层三仓仍遵循各自分支规范。