docs: P10 UX batch-1 booked — ROADMAP P10 row + spec/plan index entry, CHANGELOG 0.3.2 (crearte ee4edf7 / 0.23.0: toast system, dirty-form guard, clickable tags, copy-link, recently-played strip, header dropdown; five legs green vitest 601 / e2e 77+1skip / noauth 4; four review pins)
This commit is contained in:
@@ -6,6 +6,13 @@ 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.2] - 2026-10-01
|
||||
|
||||
### Done / 完成
|
||||
|
||||
- P10 UX batch-1 (daily-interaction pack) delivered: crearte `ee4edf7` (0.23.0, merge-base `26cd625`) — six user-facing capabilities across six tasks, each through implement → task-level review → adjudication, plus a whole-branch final review cross-checking spec §3/§4/§5 in full. **Toast system** (`composables/useToast.ts` module singleton: success/info 3s, error 5s, max 3 visible oldest-dropped, silent quota/private-mode failures; `ToastHost.vue` mounted in `App.vue`, bottom-right `role=status`/`aria-live=polite`, per-kind hard-shadow styling, TransitionGroup folded into the global reduced-motion branch). **Dirty-form leave guard** on `/submit/new` and `/submit/:id` (`onBeforeRouteLeave` confirm + `beforeunload`; deep-watch of form/kind/both upload ids; edit-mode prefill suppressed in the same window as the existing AAD watcher, manual prefill deliberately counts as an edit; save-success disarms before its `router.push`). **Clickable tags** (game-page + game-card tags → `RouterLink` to `/games?tag=`, card tags keep `relative z-10` above the stretched link, `+N` fold badge stays a span). **Copy-link share** (game detail page writes the canonical in-site URL — `location.origin + router.resolve(...)`, never `location.href` — to clipboard, confirmed via toast, single try/catch also absorbing a missing `navigator.clipboard`). **Recently played** (`lib/recent.ts` local `crearte.recent.v1`: dedup-to-front, cap 12, corrupt JSON reads empty; `GameHost` records on frame phase `ready` via a sync-flush watch so a hosted-target restart that folds booting→ready in one tick still re-bubbles; external works never recorded; landing page renders a 继续游玩 strip between hero and featured, resolving ids against the live catalog, capping at 6, and rendering nothing at all when history is empty so the landing DOM is unchanged for first-time visitors). **Header dropdown** now closes on outside-click and Escape (returning focus to the summary toggle), preserving the existing route-change auto-close. Zero server/deploy changes. Acceptance (five legs, green on merge tip): vitest 601 (baseline 551) / vue-tsc clean / build + build-runtime OK / main e2e 77+1skip (baseline 72+1skip) / noauth 4. Four review pins landed on the branch: `fc0270e` (AppHeader unmount cleanup asserted via removeEventListener spy), `dbf4bf0` (hosted restart re-records via sync-flush phase watch; spec D-H re-pinned), `bb9bb35` (e2e acceptance fixes — the spec's own test plan had picked external-runtime fixtures 2048/a-dark-room that never reach GameHost ready; switched to abs-paths/storage, plus a latent optional-fields pre-navigation race pinned by h1 level), `836b2fb` (AppHeader route-change collapse regression, a spec §5 listed item). Final review verdict 「需修复后合并」 — both closing conditions met before merge. B (keyboard/skip-link/mobile header), C (dark mode), OG social cards, play-count and later batches parked pending owner go-ahead.
|
||||
- P10 UX 第一批(日常交互包)交付:crearte `ee4edf7`(0.23.0,merge-base `26cd625`)——六任务落地六个用户可感能力,每任务经实现→任务级审查→裁定,另加全分支终审对 spec §3/§4/§5 全量对照。**Toast 体系**(`composables/useToast.ts` 模块单例:success/info 3s、error 5s、同屏上限 3 条超限移最旧、配额/隐私模式写失败静默;`ToastHost.vue` 挂入 `App.vue`,右下角 `role=status`/`aria-live=polite`、按 kind 配色硬阴影、TransitionGroup 折入全局 reduced-motion 分支)。**投稿表单脏数据离开守卫**(`/submit/new` 与 `/submit/:id`:`onBeforeRouteLeave` confirm + `beforeunload`;深度观察 form/kind/两个 upload id;编辑回填与既有 AAD watcher 同窗抑制、手动 prefill 有意计为修改;save 成功先解除守卫再 `router.push`)。**标签可点**(作品页+作品卡 tags → `/games?tag=` 的 `RouterLink`,卡内标签保留 `relative z-10` 浮于拉伸链接之上,`+N` 折叠角标维持 span)。**复制链接分享**(作品详情页写入规范站内 URL——`location.origin + router.resolve(...)`,绝不用 `location.href`——经 toast 确认,单一 try/catch 同时兜住 `navigator.clipboard` 缺失)。**最近玩过**(`lib/recent.ts` 本地 `crearte.recent.v1`:去重前插、上限 12、损坏 JSON 读回空;`GameHost` 在 frame phase `ready` 时经 sync-flush watch 记录,hosted 目标重开同 tick 折叠的 booting→ready 仍会重新冒泡;external 作品不记;落地页在 hero 与精选之间渲染「继续游玩」条带,id 对实时目录解析、上限 6、无记录时整段不渲染使首访者落地页 DOM 零变化)。**页头下拉**现支持外点与 Esc 关闭(焦点回 summary),保留既有路由变化自动收起。零后端/部署改动。验收(五腿,合并 tip 全绿):vitest 601(基线 551)/ vue-tsc 零错 / build+build-runtime OK / 主 e2e 77+1skip(基线 72+1skip)/ noauth 4。分支上落四处审查补钉:`fc0270e`(AppHeader 卸载清理经 removeEventListener spy 钉桩)、`dbf4bf0`(hosted 重开经 sync-flush phase watch 再记;spec D-H re-pin)、`bb9bb35`(e2e 验收修正——spec 测试计划自身误选 external-runtime 夹具 2048/a-dark-room 永达不到 GameHost ready,换 abs-paths/storage,另钉住 optional-fields 一处潜伏的导航前竞态)、`836b2fb`(AppHeader 路由变化收起回归,spec §5 明列项)。终审裁定「需修复后合并」——两个闭合条件均在合并前满足。B(键盘/skip-link/移动端页头)、C(暗色模式)、OG 社交卡片、播放计数及后续批挂账待 owner 启动。
|
||||
|
||||
## [0.3.0] - 2026-10-01
|
||||
|
||||
### Done / 完成
|
||||
|
||||
Reference in New Issue
Block a user