4.1 KiB
4.1 KiB
P8 长尾打包(第一批)· 实施计划
依据:docs/specs/2026-10-01-p8-long-tail-design.md(D-1…D-5)。分支名 feat/p8-long-tail,各仓实现者自拉自提交不 push;合主由控制者 --no-ff。
Task 1 · server(crearte-server,→0.14.0)
基线 master(3e11446 起)。改动点:
- ②-1
games.Detail400 细分(src/internal/handler/games.go:44-50):把单一"invalid game id"拆为可区分消息——user 不合UsernamePattern→user: invalid format;slug 不合SlugPattern→slug: invalid format(两者都错时按 user 优先,或返回逗号并列,实现者择一但须有测试钉住)。沿用WriteError(400,"invalid_request",…),不改状态码。核既有games_test.go/router_test.go是否断言该文案,有则同步。 - ②-2 admin 工作路由校验:
handler/admin.go四条 handler(Unpublish/Republish/SetWorkFeatures/RevokeVersion)入口补UsernamePattern/SlugPattern前置校验(与games.Detail:47同款),非法即WriteError(400,"invalid_request","invalid work id")并 return。不改adminWorkID(:115,纯拼接 helper)。若抽出小 helper(如validWorkParams(c) bool)四 handler 共用,允许。 - ②-3 approve 同名竞态测试:新增测试(
internal/service/content_test.go或新文件,视该包既有并发测试风格)——并发对同一work_id的两个 new_work 提交走 approve,断言:仅一条成功;其余返回ErrWorkIDTaken/ErrSubmissionConflict;库中该 work 恰一行。只加测试不改行为。若既有测试用真库则归集成腿、若用 memory store 则单测即可(实现者按仓内既有模式定,注明)。 - ⑤ CHANGELOG 头部(
docs/CHANGELOG.md顶部):去「模板/建议统一记录」腔,改为项目口径(保留一句格式出处),不动历史条目。 docs/CHANGELOG.md追加## [0.14.0] - 2026-10-01(Fixed:②-1/②-2;Tests:②-3;Docs:⑤),中英成对。
红线:zero 新依赖/迁移;approve 行为不变;路由常量不动。
验证:容器内 gofmt -l 空、go vet ./...、go build ./...、go test -p 1 ./internal/... RC=0(容器姿势同 AGENTS.md,goproxy.cn)。集成腿由控制者跑。
Task 2 · crearte(→0.20.0)
基线 master(9bd9372 起),源码根 crearte/src。改动点:
- ① 权限开关全量(
app/content/features.ts):EditableFeatures扩至七键eval, inlineScript, inlineStyle, wasm, coop, fullscreen, gamepad;EMPTY_FEATURES七键 false;FEATURE_ITEMS补五条(每条中文 label + hint 写清风险与适用场景——这是本任务主要工作量);collectFeatures输出七键齐全;featuresToForm回读七键缺省 false;hasAnyFeature自然覆盖。 - 三处 UI 自动同步(均读
FEATURE_ITEMS,核实无硬编码遗漏):投稿表单勾选区、AdminView.vue作品展开行、AdminSubmissionView.vue只读展示。若某处有超出FEATURE_ITEMS的定制文案/布局,补齐。 - 测试:
features单测(collectFeatures 七键、featuresToForm 回读、hasAnyFeature);投稿表单/审核详情相关 vitest 补断言(新开关出现、勾选进载荷)。 - ⑤ CHANGELOG 头部(
docs/CHANGELOG.md顶部):「本模板…建议统一记录」改为项目口径。 docs/CHANGELOG.md追加## [0.20.0] - 2026-10-01,中英成对。
红线:不动运行时三件套 / GameHost / useGameFrame(flag 消费端已存在);不为单处 UI 另开硬编码;不动管理面路由。
验证(crearte/src):npx vitest run、npm run typecheck、npx playwright test e2e/admin-flow.spec.ts、npm run e2e 全 RC=0。
合主与验收(控制者)
双路独立审查(依据 spec §1-§3 全量对照)→ 六腿验收 → --no-ff 合主推送 → wrapper 记账 0.2.8 → 删分支。
注(教训落地):审查员任务书须显式要求「对照 spec 全文,任务书与 spec 冲突时以 spec 为准,并报告 spec 中未落地项」——P6 D-D 的漏项即由此产生。