Files
Genarrative/apps
suzmii 7b8c3153b1
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
feat(游戏共创): 首页内联 Fork 面板改为侧边栏「共创」页
用户看了真机截图判定首页那张内联卡片太丑,撤掉并改成独立一页。

- 删掉首页内联面板:`src/view/home/PlatformGameForkSection.tsx`(整文件)与首页里的渲染块、两个
  专属 props(`onPlatformGameProjectCreated`)及其 import(该 prop 一路从 shell 传下来,一并清掉,
  不留死代码);首页恢复成「最近项目 + 模板库推荐」。旧组件测试文件
  `tests/platformGameFork.test.tsx` 删除,其中仍有价值的解析/分类用例抽成
  `tests/platformGameForkModel.test.ts`(纯模型,不依赖组件)。
- 侧边栏新增「共创」:`LauncherView` 加 `co-creation`,`view/layout.tsx` 的 rail 加一个按钮
  (icon 用仓库既有的 lucide-react,选 `GitFork` 对应「像 git fork」的口径;`aria-label`/`title`
  都是「共创」,与既有 rail 项的悬停提示方式一致)。
- 新页 `src/view/co-creation/index.tsx`:
  · 数据源是平台公开目录(匿名可读):新增原生命令 `list_platform_game_catalog(limit, cursor)`
    (不带 Bearer——带鉴权头会把「匿名可读」变成依赖登录态;仍取会话只为拿 base URL;limit
    与服务端同口径:缺省 20 / 上限 50,用 `url` 拼查询串避免手拼游标)。
  · 只保留支持共创的:`forkAuthorization !== 'forbidden'`(字段缺省按 forbidden)。
  · 排序:只按接口顺序(新 → 旧);推荐算法留 TODO,替换点在 `loadForkableGames`
    (UI 只消费它的返回值)。
  · 翻页:最多 3 页 / 150 条,扫到 12 个可 Fork 作品就提前停;被上限截断时页头如实标注
    「已检查最新 N 个作品(M 页,最多 3 页)」。理由写在常量注释里:目录是新→旧的、可 Fork
    的作品可能稀疏,3 页足够填满一屏,同时把最坏请求数与耗时钉住。
  · 卡片:与首页「最近项目」同一套视觉语言(同尺寸圆角卡、首字占位块用作品的 `coverColor`),
    展示标题 / 作者 / 类型 / 更新时间,卡片内一个「Fork」按钮——**一步可达**,点击即走取件建项。
  · 空态:扫完仍没有可 Fork 作品时给明确文案(而不是空白);加载态 / 失败态(含重试)照既有写法。
- 「填详细内容」随页搬走:原来的「输入作品 ID 或链接」输入框放到列表上方,解析仍用
  `parsePlatformGameId`(与 deep link 完全同一份,没有第二套)。
- 提交路径只留一份实现:新增 `usePlatformFork` 状态机,卡片按钮与粘贴输入共用它
  (取件、失败分类、加载态、进项目与埋点都是同一段代码;`busy` 用 ref 挡同一 tick 的重复提交)。
- deep link:`genarrative://fork?gameId=…` 现在切到「共创」页并预填输入框(仍**不自动下载**),
  不再指向首页内联面板;正停在项目工作区时行为不变(不强行切走,请求留着)。

测试:新增 `tests/coCreation.test.tsx`(12 条:目录模型过滤/提前停/页数上限、列表渲染与过滤、
点卡片 Fork 的参数与「点击前不发请求」、粘贴链接同一解析、非法输入本地拦截、空态、失败态与重试、
深链预填且不自动下载、深链错误原因、取件失败分类);`tests/platformForkDeepLink.test.tsx` 收窄为
事件解析 + 订阅(预填行为改由共创页测试覆盖,不重复断言);`tests/appSurface/home.suite.ts` 增两条
外壳级回归:首页不再出现内联面板(标题与按钮都不在)、侧边栏「共创」可切换并落在共创页;
Rust 增一条 `catalog_limit_clamps_to_server_range`。
2026-10-06 11:47:20 +08:00
..