Merge branch 'master' of http://82.157.175.59:3000/GenarrativeAI/Genarrative
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-05-01 02:15:36 +08:00
5 changed files with 43 additions and 15 deletions

View File

@@ -0,0 +1,27 @@
# 抓大鹅创作入口敬请期待 2026-05-01
## 1. 背景
抓大鹅 Match3D 玩法域已存在创作工作区、结果承接和后续后端接入文档,但当前产品节奏需要先收起创作页入口,避免玩家从创作页直接进入未完全开放的抓大鹅创作链路。
## 2. 落地边界
本轮只调整平台创作入口展示与点击防线:
1. `PLATFORM_CREATION_TYPES``match3d` 保持展示,标题仍为 `抓大鹅`
2. `match3d` 的副标题与 badge 统一显示 `敬请期待`
3. `match3d.locked` 设为 `true`,创作页首屏卡片和创作类型弹层都会变为不可点击。
4. 平台分流回调继续保留 `match3d` 防御返回,避免旧 UI 状态或旧入口绕过锁定态。
## 3. 非目标
1. 不删除 `src/components/match3d-creation/``src/services/match3d-creation/` 或已完成的 Match3D 玩法域代码。
2. 不修改 SpacetimeDB 表、procedure、bindings 或 `migration.rs`
3. 不改变已发布抓大鹅作品的详情、运行态和后续恢复入口能力。
## 4. 验收点
1. 创作页能看到 `抓大鹅` 卡片。
2. 该卡片显示 `敬请期待`,且按钮 disabled。
3. 创作类型弹层中的 `抓大鹅` 同样显示 `敬请期待`,且不可点击。
4. 相关测试、类型检查和编码检查通过。

View File

@@ -13,6 +13,7 @@
- [MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md](./MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md):记录抓大鹅 F1 创作入口、Agent 工作区、参考图入口、本地 mock client 与后续 B5 HTTP facade 替换点。 - [MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md](./MATCH3D_F1_CREATION_ENTRY_AND_AGENT_UI_2026-04-30.md):记录抓大鹅 F1 创作入口、Agent 工作区、参考图入口、本地 mock client 与后续 B5 HTTP facade 替换点。
- [MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md](./MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md):冻结抓大鹅 F2 结果页、基础信息编辑、发布前试玩入口、发布门槛、自动保存和已发布作品二次编辑恢复口径。 - [MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md](./MATCH3D_F2_RESULT_AND_PUBLISH_2026-04-30.md):冻结抓大鹅 F2 结果页、基础信息编辑、发布前试玩入口、发布门槛、自动保存和已发布作品二次编辑恢复口径。
- [MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md](./MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md):记录抓大鹅 B4+B5 已落地的 SpacetimeDB bindings、`spacetime-client` facade、`api-server` HTTP 路由、shared contract 对齐和验收命令。 - [MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md](./MATCH3D_SPACETIME_CLIENT_AND_API_FACADE_2026-04-30.md):记录抓大鹅 B4+B5 已落地的 SpacetimeDB bindings、`spacetime-client` facade、`api-server` HTTP 路由、shared contract 对齐和验收命令。
- [MATCH3D_CREATION_ENTRY_COMING_SOON_2026-05-01.md](./MATCH3D_CREATION_ENTRY_COMING_SOON_2026-05-01.md):记录抓大鹅创作页入口临时改为“敬请期待”、不可点击,以及保留既有 Match3D 能力不删除的边界。
- [PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md](./PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md):记录平台首页底部 dock 在手机浏览器地址栏展开时脱离可见区域的根因,以及 `100dvh`、固定底部锚点和安全区占位的修复口径。 - [PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md](./PLATFORM_MOBILE_BOTTOM_DOCK_VIEWPORT_FIX_2026-04-30.md):记录平台首页底部 dock 在手机浏览器地址栏展开时脱离可见区域的根因,以及 `100dvh`、固定底部锚点和安全区占位的修复口径。
- [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md):记录 SpacetimeDB private 表迁移 JSON 导出/导入 procedure、迁移操作员授权、HTTP 413 分片导入、Jenkins 自动迁移回灌和导入脚本参数。 - [SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md](./SPACETIMEDB_JSON_STRING_MIGRATION_PROCEDURE_2026-04-27.md):记录 SpacetimeDB private 表迁移 JSON 导出/导入 procedure、迁移操作员授权、HTTP 413 分片导入、Jenkins 自动迁移回灌和导入脚本参数。
- [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md):记录 `Genarrative-Database-Export` / `Genarrative-Database-Import` 两条 SCM-backed 数据库迁移流水线参数、默认 dry-run、token 边界和 `CHUNK_SIZE` 413 规避参数。 - [JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md](./JENKINS_SPACETIMEDB_DATABASE_MIGRATION_PIPELINES_2026-04-29.md):记录 `Genarrative-Database-Export` / `Genarrative-Database-Import` 两条 SCM-backed 数据库迁移流水线参数、默认 dry-run、token 边界和 `CHUNK_SIZE` 413 规避参数。

View File

@@ -106,12 +106,17 @@ test('creation hub reflects updated draft title summary and counts after rerende
expect(screen.queryByText('地点 4')).toBeNull(); expect(screen.queryByText('地点 4')).toBeNull();
const rpgButton = screen.getByRole('button', { name: //u }); const rpgButton = screen.getByRole('button', { name: //u });
const puzzleButton = screen.getByRole('button', { name: /.*/u }); const puzzleButton = screen.getByRole('button', { name: /.*/u });
const match3dButton = screen.getByRole('button', { name: //u });
expect( expect(
puzzleButton.compareDocumentPosition(rpgButton) & puzzleButton.compareDocumentPosition(rpgButton) &
Node.DOCUMENT_POSITION_FOLLOWING, Node.DOCUMENT_POSITION_FOLLOWING,
).toBeTruthy(); ).toBeTruthy();
expect((rpgButton as HTMLButtonElement).disabled).toBe(true); expect((rpgButton as HTMLButtonElement).disabled).toBe(true);
expect(within(rpgButton).getAllByText('敬请期待').length).toBeGreaterThan(0); expect(within(rpgButton).getAllByText('敬请期待').length).toBeGreaterThan(0);
expect((match3dButton as HTMLButtonElement).disabled).toBe(true);
expect(
within(match3dButton).getAllByText('敬请期待').length,
).toBeGreaterThan(0);
expect(puzzleButton).toBeTruthy(); expect(puzzleButton).toBeTruthy();
expect(screen.queryByRole('button', { name: //u })).toBeNull(); expect(screen.queryByRole('button', { name: //u })).toBeNull();

View File

@@ -1645,7 +1645,12 @@ export function PlatformEntryFlowShellImpl({
const handleCreationHubCreateType = useCallback( const handleCreationHubCreateType = useCallback(
(type: PlatformCreationTypeId) => { (type: PlatformCreationTypeId) => {
if (type === 'rpg' || type === 'airp' || type === 'visual-novel') { if (
type === 'rpg' ||
type === 'match3d' ||
type === 'airp' ||
type === 'visual-novel'
) {
return; return;
} }
@@ -1660,13 +1665,6 @@ export function PlatformEntryFlowShellImpl({
return; return;
} }
if (type === 'match3d') {
runProtectedAction(() => {
void openMatch3DAgentWorkspace();
});
return;
}
if (type === 'puzzle') { if (type === 'puzzle') {
runProtectedAction(() => { runProtectedAction(() => {
void openPuzzleAgentWorkspace(); void openPuzzleAgentWorkspace();
@@ -1675,7 +1673,6 @@ export function PlatformEntryFlowShellImpl({
}, },
[ [
openBigFishAgentWorkspace, openBigFishAgentWorkspace,
openMatch3DAgentWorkspace,
openPuzzleAgentWorkspace, openPuzzleAgentWorkspace,
prepareCreationLaunch, prepareCreationLaunch,
runProtectedAction, runProtectedAction,
@@ -4560,9 +4557,7 @@ export function PlatformEntryFlowShellImpl({
}); });
}} }}
onSelectMatch3D={() => { onSelectMatch3D={() => {
runProtectedAction(() => { // 抓大鹅创作入口当前为敬请期待;保留回调防御,避免旧入口绕过锁定态。
void openMatch3DAgentWorkspace();
});
}} }}
onSelectPuzzle={() => { onSelectPuzzle={() => {
runProtectedAction(() => { runProtectedAction(() => {

View File

@@ -68,9 +68,9 @@ export const PLATFORM_CREATION_TYPES: PlatformCreationTypeCard[] = [
{ {
id: 'match3d', id: 'match3d',
title: '抓大鹅', title: '抓大鹅',
subtitle: '经典消除玩法', subtitle: '敬请期待',
badge: '可创建', badge: '敬请期待',
locked: false, locked: true,
}, },
{ {
id: 'airp', id: 'airp',