suzmii
|
f94946ef8e
|
feat(游戏共创): 注册并处理 Fork 深链 genarrative://fork?gameId=…
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
冻结约定:`genarrative://fork?gameId=<gameId>`,同时接受 `genarrative://fork/<gameId>`。
方案(用官方两个插件,不手搓单实例与注册表):
- `tauri-plugin-single-instance`(开 `deep-link` feature)**第一个注册**:Windows/Linux 上深链是
「带 URL 启动第二个进程」,该插件把第二个实例的 argv 转交给已有实例,并(feature 生效时)
交给 deep-link 插件发事件——否则用户点第二次链接会再开一个窗口。macOS 上它用 Unix socket
做同样的收口(系统本身也只会有一个 .app 实例)。
- `tauri-plugin-deep-link`:`tauri.conf.json > plugins.deep-link.desktop.schemes = ["genarrative"]`。
· macOS:打包器按该配置往 `Info.plist` 注入 `CFBundleURLTypes`(插件 `config.rs` 里那句
`// Used in tauri-bundler` 是代码级证据),运行时由系统把 URL 交给已运行的 .app。
· Windows:运行时 `register_all()` 写 `HKCU\Software\Classes\genarrative`(`URL Protocol` 标记 +
`DefaultIcon` + `shell\open\command`,不需要管理员);安装器侧同样按该配置注册。
· Linux:运行时写用户级 `applications/<exe>-handler.desktop` 并调 xdg-mime(AGC 未以此平台分发,
但仍走同一条运行时路径)。
- 冷启动:插件在插件初始化阶段就解析 argv 并暂存,而应用 `setup` 晚于插件,因此
`initialize_fork_deep_link` **先取 `get_current()`**、再 `on_open_url` 订阅后续链接(漏了前者会
丢冷启动那一次)。
- 收到 URL 后:聚焦主窗口(unminimize + show + set_focus)→ 发 `game-fork-deep-link` 事件
`{ gameId | message }` → 渲染层把请求存进 store 并切回首页;**不自动下载**,用户按
「Fork 到我的项目」才走与手工输入完全相同的提交路径。正停在项目工作区时不强行切走
(避免把用户从进行中的项目里踢出来),请求留在 store 里等用户回到首页。
- 非法链接:解析出可读原因(空链接 / 非 genarrative 方案 / 非 fork 形式 / 缺 gameId / gameId 不合法)
一并聚焦窗口并交给渲染层展示,不做静默失败。
测试:`fork_game_id_from_deep_link` 的合法(两种形式、大小写、多余参数、game_id/id 别名)与
非法(空、错方案、错形式、缺 gameId、`../escape`、URL 编码斜杠、非 URL)各一组;`gameId` 形状
判据与取件路径共用(`is_safe_fork_game_id`);TS 侧覆盖载荷解析、订阅映射、深链预填后**不自动
下载**、非法链接展示原因且不请求。
|
2026-10-06 01:05:04 +08:00 |
|
suzmii
|
4cf00ac07d
|
refactor(游戏共创): Fork 口径收敛为「把整个工程复制到你的项目里继续改造」
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
产品裁定:不再对外解释「可玩参考 + 素材 / 不能一键复刻工程 / 需自建合规工程」那套口径。
统一一句话:**Fork = 把整个工程复制一份到你的项目里继续改造(与 git fork 同理)**,动作名统一
叫 Fork。必要告知只保留一句:开启共创并上传工程时,整个工程(含素材与文档)会对他人可见,
且不可撤销。
- 入口(首页):`从平台作品 Fork` + 角标 `Fork`,说明压成一句「把平台上的作品整个工程复制到
你的项目里继续改造(像 git fork)。输入要 Fork 的作品 ID 或作品链接即可。」;按钮
`Fork 到我的项目`、加载态「正在 Fork:下载、校验并创建项目…」;成功态只留
「已创建项目《X》,Fork 自平台作品 <gameId>(来源已记录在 …fork-source.json)」,
删掉按取件形态分岔的长句。
- 发布面板:授权区只留一句「授权非「禁止共创」即允许他人 Fork 你的作品;开启共创并上传工程时,
整个工程(含素材与文档)会对他人可见,且不可撤销。」;确认项压成一句
「我已确认工程里没有不愿公开的内容,同意随本次发布公开整个工程(含素材与文档);一经发布
不可撤销。」,其后一行写「默认已勾选,可随时取消;不勾选则本次不上传工程源码。」
- 错误与进度文案:取件失败四态改为 Fork 措辞(`无法 Fork` / `该作品当前不能被 Fork(未公开、
已下架或没有公开版本)`),读取/下载/响应类错误改为 `读取 Fork 信息失败` / `下载 Fork 内容失败`,
超限提示改为「Fork 内容超过客户端下载上限,无法完成」;「未上传工程源码」提示改为
「他人 Fork 时只能拿到平台已发布的成品」;默认项目名前缀 `改编项目` → `Fork 项目`;
记录标签 `项目改编来源记录` → `项目 Fork 来源记录`。
- 实现事实(成品包形态的脚手架 + `reference/<gameId>/`)保留在 Rust 文档注释里,不再作为对外
表述;`collect_project_bundle_files` 等实现注释不动。
- 测试:入口用例改为断言一句话口径与「Fork 自平台作品」并断言旧的解释性表述已消失;面板用例
断言新的简短告知与「默认已勾选,可随时取消;不勾选则本次不上传工程源码」;错误文案断言同步。
|
2026-10-06 00:55:53 +08:00 |
|
suzmii
|
bdcefe91d1
|
Merge remote-tracking branch 'origin/master' into feat/game-fork
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m31s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m20s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m3s
Project CI / Frontend tests (pull_request) Successful in 2m54s
Project CI / Backend tests (pull_request) Successful in 7m36s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m26s
Project CI / Repository checks (pull_request) Successful in 6m25s
Project CI / Native shell tests (pull_request) Successful in 9m34s
# Conflicts:
# deploy/container/nginx.conf
# deploy/nginx/genarrative-dev-http.conf
# deploy/nginx/genarrative.conf
# server-rs/crates/api-server/src/modules/game_distribution.rs
# src/components/game-distribution/GameDetailPage.tsx
# src/components/game-distribution/GameDistributionPages.test.tsx
# src/components/platform-entry/PlatformEntryActiveFlowShell.tsx
|
2026-10-06 00:19:40 +08:00 |
|
suzmii
|
364b1aa342
|
Merge remote-tracking branch 'origin/master' into feat/agc-runtime-picking-engines
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
- 冲突解决(3 处):
- agc-game-production-workflow/SKILL.md:双方都保留——第 4 条用本分支版本(含「运行画面点选契约」指针),第 5 条用 master 的新构建验证口径
- agc-skills/manifest.json:先取 master 侧,再用 `agc:skill-pack:sync` 按合并后内容重新生成 version 与指纹(2026-08-26.41),`skill-pack:check` 通过
- pitfalls.md:两侧新增条目全部保留(按日期倒序:本分支 10-05 / 10-04 条目在前,master 的 10-04 / 10-03 条目紧随,未改动任一方内容)
- 无冲突但人工核对:`agc-web-game-development/SKILL.md`(本分支「运行画面点选契约」小节 + master 内容都在)、
`index.tsx`(我们的 `handleRuntimeInspectSelection` 回调体逐字不变,master 新增内容都在)
- 桥脚本 sha256 未变(9513020cfffa79128fb6355d44cdaabe666eefecbd96b7e807b15d2c4601bf76),真机证据对应字节不变
|
2026-10-05 18:25:49 +08:00 |
|
suzmii
|
18d19d5d54
|
fix(游戏共创): 源码公开确认改回默认勾选(与「允许共创即开放源码」口径一致)
按产品裁定回落默认值:保留主动取消能力与全部知情告知,但确认项**默认已勾选**——
「允许共创本身就意味着源码开放,不设独立开关」,默认不勾选等于第二个开关,与本面板
自己写着的那句「没有单独的源码可见性开关」自相矛盾。
- `projectBundleConfirmed` 初值 true;每次重新选择授权档位都重置为「非禁止档位即已勾选」,
避免把上一次的取消状态带到新的档位选择上(禁止共创时不显示该确认项,值本身无意义)。
- 告知文案一字不减(整个项目目录原样公开、含文档/截图/设计稿/笔记、只自动排除依赖/版本库/
构建产物/常见凭据、一经发布不可撤销、无法收回已下载内容)。
- 新增一句提示说明默认值来源:「上面这项默认已勾选(平台按「允许共创即开放源码」的默认帮你
勾上,不是替你做决定——你可以随时取消)。」——避免作者以为平台偷偷替他决定。
- 未勾选时的后果提示保留,仍写清「不勾选则本次不上传工程源码……」。
测试(面板 23 条):默认「禁止共创」无确认项;切到非禁止档位后确认项出现且**已勾选**,
并逐条断言告知文案 + 「默认已勾选/可随时取消」;默认状态提交不携带 `includeProjectBundle`
(交给原生按授权执行上传);作者主动取消后提交携带 `includeProjectBundle: false`(这是
「作者能退出」的证据);重新选择档位回到已勾选;切回「禁止共创」确认项消失。
|
2026-10-05 17:30:50 +08:00 |
|
suzmii
|
7972089a5f
|
fix(游戏共创): 工程源码公开改成作者的主动知情确认,文案如实告知外发范围
背景(对抗性复核 D.7):工程源包的拒绝规则是**黑名单**,作者的 `docs/`、`*.pdf`、`notes.txt`、
截图、设计稿、会议记录等不在任何拒绝集内,会被原样外发。也就是说「授权非禁止 + 上传工程源码」
= **整个项目目录(除少数排除项)对任何登录用户公开**。原来那句「同时公开工程源码……取消勾选则
只能被试玩」是免责声明式措辞,不足以构成知情同意。
文案(最终措辞):
- 授权三态说明统一口径:「授权非「禁止共创」即允许他人改编(**没有单独的源码可见性开关**);
是否随本次发布把工程源码一起交出去,由下面的确认决定。上架后授权只能单向提升,不能撤销。」
- 确认项(仅授权非「禁止共创」且首次发布时出现):
「我已确认项目里没有不愿公开的内容,同意随本次发布公开**整个项目目录**:源码、素材与其中
其它文件(含文档、截图、设计稿、笔记等)都会对任何登录用户公开;只会自动排除依赖目录、
版本库、构建产物与常见凭据文件。一经发布**不可撤销**:即使之后把授权降级,也无法收回别人
已经下载的内容。」
- 紧随其后写清不勾选的后果:「不勾选则本次不上传工程源码:作品仍可正常发布,但他人只能拿到
已构建成品试玩与参考,不能直接重新发布。」
交互选择:**默认不勾选 + 不勾选就不上传**(不是禁用发布按钮)。
- 选它的理由:① 它把第 3 点做成了真正的「主动确认动作」;② 发布本身不被阻断——工程包缺失本来
就不影响发布(服务端与原生链路都按「可选资产」设计),禁用按钮反而会把「禁止共创 / 只想先发
出去」的作者一起挡住;③ 勾选状态只作用于本次版本上传,不引入平台侧的独立开关,授权语义不变。
- 注意:这一条**取代**了早先「授权非禁止时默认帮作者上传」的默认值——知情同意优先于默认帮忙;
若要把默认值改回勾选,只需把 `projectPackageConfirmed` 初值改成 true 并翻转对应断言。
测试:改写两条面板用例——授权开放后确认项出现且**默认未勾选**、九处告知文案逐条断言(整个项目
目录 / 含文档截图设计稿笔记 / 只自动排除四类 / 不可撤销 / 无法收回已下载内容 / 不勾选则不上传 /
没有单独的源码可见性开关)、未确认时显式传 `includeProjectBundle: false`(不上传但照常发布)、
确认后不带该字段(由原生按授权执行上传)。
|
2026-10-05 17:30:49 +08:00 |
|
suzmii
|
09a11ac215
|
fix(游戏共创): 取件成功提示按两种取件形态如实措辞
M2b 之后取件有两种形态:工程源包解压即可编辑工程(没有 reference/ 参考副本),成品包才放在
reference/<gameId>/ 作可玩参考。原来的成功提示写死「参考产物在 reference/<gameId>/ 下」,
对工程源包形态是错的。改为两种情形都说明,并同步测试断言(仍保留「改编自 X」这条来源事实)。
|
2026-10-05 17:30:49 +08:00 |
|
suzmii
|
1fc78faff2
|
feat(游戏共创): 授权非禁止时随版本上传工程源包(M2b 上传链路,失败不阻断发布)
上传链路(复用既有分片续传,不另写一套):
- `PackageUploadAsset` 收拢两条资产的差异(URL 资源段 `package` / `project-bundle`、文案、
偏移错误码 `PACKAGE_UPLOAD_OFFSET_MISMATCH` / `PROJECT_BUNDLE_UPLOAD_OFFSET_MISMATCH`、
是否有创建版本时预登记大小),`upload_staged_game_package` 改名
`upload_staged_version_asset`,发行包与工程源包共用同一段主循环与重试/续传语义。
- 发布流程:建游戏 → 建版本 → 上传发行包 → 〔授权非「禁止共创」且作者没取消时〕打包工程源包
并上传 → 送审。插入点必须在送审**之前**:服务端只允许 `awaiting_upload` / `upload_failed`
档位补传工程包,送审后即 409。
- 失败关闭与不阻断:工程源包打包/上传任何失败都只写进结果的 `projectBundleWarning`
(「未上传工程源码,本作品只能被产物级改编:…」),发布本身照常成功;作者的作品仍可玩可发布。
- 进度复用既有 `game-package-upload-progress` 事件(phase 仍用 upload/verify,文案区分资产),
渲染层的阶段联合是闭集,不新增阶段名。
面板与渲染层:
- 新增「同时公开工程源码」勾选:仅当授权非「禁止共创」且为首次发布时出现,默认勾选,
文案写清「允许他人下载并使用你的工程源文件(含素材),且不可撤销」;
取消勾选才显式传 `includeProjectBundle: false`,其余情况交给原生按「授权非禁止即上传」判断,
渲染层不重复实现同一套默认值。
- 成功页如实展示 `projectBundleWarning`,避免作者误以为源码已随版本公开。
测试:Rust 新增「两条资产的路由段/偏移错误码/预登记大小差异」用例,并更新既有 `upload_url` 用例;
TS 新增勾选默认值、取消勾选显式 false、未上传提示三条,服务层新增「true/缺省不带字段、
false 才带」用例。
|
2026-10-05 17:30:49 +08:00 |
|
suzmii
|
d2698cbb1d
|
fix(门禁): 补 /games/lineage 的 Pingora 登记,并修掉被掩盖的 eslint 失败
- `server-rs/crates/pingora-gateway/src/main.rs`(MAIN_SPA_PATHS,:64-79):插入 `"/games/lineage"`(放在 `"/games/detail"` 之后,保持既有字典序)。这是主站 SPA 深链在 Pingora 网关下的登记,漏一条就把该深链打成 404;与上一提交补的三份 nginx 模板属同一条「新 SPA 路由三处同批更新」规则
- 矩阵与文档无需改:`deploy/pingora/nginx-route-parity.matrix.json` 的既有 `games_spa_fallback` 用例仍前缀匹配同一行 `location`(本次只改交替项、未新增 `location`),Pingora 试点文档的取值表同理未受影响
- `src/components/game-distribution/GameLineagePage.tsx:146`:把 `lineage?.nodes ?? []` 用 `useMemo(..., [lineage])` 稳定下来,消掉两条 `react-hooks/exhaustive-deps`。取值仍是同一表达式的结果,identity 只在 `lineage` 变化时改变,因此两个下游 useMemo(代际分组、可见 ID 集合)取值不变、只少做无谓重算;未用 disable 注释压掉告警
- 6 处 `simple-import-sort/imports` 用 `eslint --fix` 机械修(`apps/.../view/home/PlatformGameForkSection.tsx`、`apps/.../view/home/index.tsx`、`src/components/game-distribution/GameDetailPage.tsx`、`MyGamesPage.test.tsx`、`MyGamesPage.tsx`、`src/services/gameDistributionClient.ts`):逐文件比对「剥掉 import 行后的正文」——5 个文件完全一致,`GameDetailPage.tsx` 仅多一个 import 分组空行
- 这批修的是「修 nginx 时被前一道红掩盖的第二、第三个失败」:CI run 3387 卡在 `check:nginx-spa-routes`,`check:pingora-route-parity` 与 `lint:eslint` 从未跑到
- 本地验证:`check:repository-ci` 的 15 个 lint 环节 + `appSurface` vitest + `npm run build` + `git diff --check 6c9566058...HEAD` 全绿,仅两个**本机不可执行**项(`check:git-hooks` 的 Windows EBUSY、`check:generated-bindings` 的 AGC `export_bindings` 本地构建);另跑 `cargo test -p pingora-gateway` 40 passed、`npx vitest run apps/ai-game-creator-shell/tests` 1957 passed / 17 skipped
|
2026-10-05 17:30:47 +08:00 |
|
suzmii
|
d89e21ffd5
|
feat(游戏共创): 首页新增「从平台作品开始创作」入口(唯一可点的客户端路径)
- 入口位置:首页模板库推荐位之后新增一节「从平台作品开始创作」。与模板库同属「从现成内容
起步」,但这条拿的是平台作品的已构建成品(可玩参考 + 素材),不是可编辑工程,因此单独成节
而不是塞进模板库;未登录用户进不到首页,服务端也确实对任何登录用户开放取件,无需额外灰度。
- 交互:输入平台作品 ID 或作品链接 → 解析出作品 ID(裸 ID / `?id=` / `?gameId=` / `/games/<id>`,
也容忍不带 scheme 的粘贴;解析不出就本地拦截、不发请求)→ 调
`create_local_project_from_platform_game`(name/planning 走默认,与模板链路一致)→
成功后复用模板那条「原生已落盘 → 登记最近项目并进入工作区」通道进项目。
- 三类结果:① 未登录/登录过期(`authentication-required:`)→「请重新登录后重试」;
② 403 未开放授权(`permission-denied:`)与 409 未公开/已下架(`fork-source-not-available:`)
按服务端文案分别展示,且都不建项目、按钮可重试;③ 成功展示「改编自平台作品 <gameId>」
与 `reference/<gameId>/` 参考产物位置,让来源事实可见。
- 为此给取件的 404/409 补了与 401/403 同族的稳定前缀(`fork-source-not-found:` /
`fork-source-not-available:`):渲染层按前缀精确分类,不做文案子串猜测。
- 加载态:取件期间按钮禁用 + 明确提示「下载、校验、解压需要几分钟」,并用 ref 守卫挡住同一
tick 的重复提交(只认最后一次请求)。
- 文案严守产品口径:拿到的是「已构建成品」= 可玩参考 + 素材,不能直接再次发布,需在新工程里
改造后发布;不出现「一键复刻工程」这类说法。
- 门禁登记:命令已接回 App 入口,因此从 `scripts/check-config.mjs` 的 native-only 白名单移除
(该脚本要求「已接入」与「未接入」两个集合互斥)。
- 测试:新增 `tests/platformGameFork.test.tsx`(纯解析/失败分类 + 组件:空与非法输入不发请求、
403/409/401 各自提示且不建项目、加载态与重复提交、成功时命令参数与「改编自」展示)。
|
2026-10-05 17:30:47 +08:00 |
|
suzmii
|
e3bae05351
|
feat(游戏共创): 发布自动带改编声明,上架可选共创授权档位(AGC 面板三态)
- 改编声明:`publish_local_project_game` 在**首次发布**(不带 gameId)时读取项目内
`.agent/fork-source.json`,把 `fork: { parentGameId, parentVersionId }` 并入创建作品请求;
带 gameId 的更新发布不重复带声明(服务端对「复用既有作品身份时再声明来源」失败关闭,
重复带会变成不可恢复的 409)。判据与注入点都在原生链路,渲染层既传不进也伪造不了;
声明在 `metadata_digest` 之前并入,幂等根键随之变化属预期行为。
- 授权档位:`GameDistributionPublishMetadata` / `normalizeMetadata` / `toCreateGameRequest`
接通 `forkAuthorization`(缺省 `forbidden`),发布面板新增「授权共创」三态单选,
文案复用 `packages/shared/src/contracts/gameDistribution.ts` 的标签常量;更新发布时该栏只读
并提示「共创授权只在首次发布时生效」——档位只在创建作品时生效,上架后只能单向提升。
附带按 `styles.css` 既有面板变量补齐这组 radio 的样式(不能套用整行输入框那条规则)。
- 门禁登记:新命令本轮只落 native 能力,按 `scripts/check-config.mjs` 的 native-only 清单登记。
- 测试:Rust 钉住「资料摘要同内容稳定、并入声明即变」;TS 钉住请求体形状
(带/不带档位、声明不由渲染层提交)与面板三态受控行为、更新模式只读。
|
2026-10-05 17:30:46 +08:00 |
|
suzmii
|
21c79f54a4
|
Merge pull request '修复:AGC 窗口标题栏项目标签改认当前项目(#618)' (#621) from fix/agc-titlebar-project-label into master
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 6m47s
Project CI / AI game creator shell Rust crates (push) Successful in 4m38s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m6s
Project CI / Frontend tests (push) Successful in 3m41s
Project CI / Backend tests (push) Successful in 8m0s
Project CI / AI game creator shell web tests (push) Successful in 2m48s
Project CI / Repository checks (push) Successful in 7m17s
Project CI / Native shell tests (push) Successful in 9m27s
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/621
|
2026-10-05 16:11:16 +08:00 |
|
suzmii
|
45ae29461c
|
评审后续:修正标题栏项目标签的空态、视图门控与文案
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m7s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m38s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m42s
Project CI / Frontend tests (pull_request) Successful in 3m37s
Project CI / Backend tests (pull_request) Successful in 8m12s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m54s
Project CI / Repository checks (pull_request) Successful in 6m58s
Project CI / Native shell tests (pull_request) Successful in 9m32s
- 面板形态:快照读取成功但没有在跑回合时不再渲染「未能读取正在运行的项目」,补回 !readFailed 守卫
- 发布门控:currentProjectPath / currentProjectName 只在 launcherView === 'project-development' 时发布,离开工作台按口径回落到最近启动的在跑项目
- 菜单头部只报运行中数量,读取失败结论由 role=status 一行独占,避免同一句连排两遍
- 标签提示拆成「作用域 + 运行状态」:回落态记为「最近运行的项目:X」、状态位「共 N 个项目在运行」,不再重复「正在运行」
- 数量徽标补 title 说明数字含义
- 用例:新增面板空态回归与两条视图门控回归,更新两处标签断言;三条定向文件 25 passed
- 文档:决策日志补 2026-10-05 评审后续条目并修正实施计划交叉引用,里程碑补 2026-10-05 修订,实施计划与主规范同步口径
|
2026-10-05 15:35:55 +08:00 |
|
suzmii
|
67d06bc168
|
独立评审收口 #599:命名行事件时序、命名任务 update 门禁、失败关闭与 legacy 用例
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m1s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m35s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m21s
Project CI / Frontend tests (pull_request) Successful in 3m36s
Project CI / Backend tests (pull_request) Successful in 7m48s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m12s
Project CI / Repository checks (pull_request) Successful in 7m2s
Project CI / Native shell tests (pull_request) Successful in 8m41s
- P2-2:命名行的账本订阅与恢复读合并为同一次 effect 的「先订阅、后读、只读一次」(与素材队列先订阅后派发同口径),并在「生成任务」面板打开且**确有在途命名行**时补读一次兜底——多读会改变既有生成任务链路可观测的轮询计数,因此不给没有命名任务的项目加读。新增 2 条 appSurface 用例(错过终态事件仍到终态 / 面板打开补读),并做了「改前红」验证:退回「先读后订阅 + 面板不补读」两条即红。
- P2-3:update_local_project_naming_task 补 project.rename 权限门禁(与 enqueue 同口径)、校验记录 project_id 与项目一致、终态只接受同状态幂等重放(completed→failed 一律 Err 且不写盘);新增 3 条 Rust 用例。
- P2-4:新增失败关闭与 schema 分支用例——超长项目名条件改名 Err 且 manifest/revision 不变、不支持 schemaVersion Err、缺 schemaVersion 按 v1 接受。
- P3-1:legacy v1 兼容用例改为断言兼容性质(字段原样保留),不再引用 phase 文案常量。
- 文档:pitfalls 补「兼容是单向的(旧构建读含命名记录的账本会整份失败,含影响面/触发条件/潜在低成本正向兼容方向)」与「先订阅后读快照」「update 门禁与终态语义」三条边界;decision-log 同步边界与数字。
- 门禁:AGC 全量 1964 passed / 17 skipped(appSurface 200 passed / 9 skipped);cargo asset_generation_task 27 passed、conditional_project_rename_tests 7 passed;agc:typecheck、lint:eslint(0 problems)、check:encoding、check:spacetime-schema、cargo fmt --check、git diff --check 全过。
|
2026-10-05 00:55:29 +08:00 |
|
suzmii
|
d550d882d4
|
合并 master 6c9566058:保留 v2 账本/命名任务与 master 侧改动
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m17s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m44s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m26s
Project CI / Frontend tests (pull_request) Successful in 2m58s
Project CI / Backend tests (pull_request) Successful in 7m24s
Project CI / Repository checks (pull_request) Successful in 6m23s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m47s
Project CI / Native shell tests (pull_request) Successful in 9m34s
- 冲突仅在 docs/project-memory/shared-memory/decision-log.md 与 pitfalls.md(双方都在顶部追加条目):两边条目全部保留——本分支的 Issue 599 条目(AI 项目命名解耦 / 生成任务账本 taskType + live 集合)在前,master 侧新增条目(发布版本标签派生、随包 plugins feature 档位、.worktrees 下 Vite 忽略规则、并发 dev 栈、Windows 阻塞模态用例)原样保留,逐条核对无丢失。
- 其余文件(desktop.rs、check-config.mjs、view/project-development/index.tsx、src-tauri 多处、admin-web、game distribution 等)均为自动合并,无冲突。
- 合并后自证:v2 账本常量/命令注册/命名任务命令名/条件改名空 expected 校验/entrySettled 顺序/命名行与事件刷新/三个测试文件的关键断言全部在位(脚本逐条核对 ALL_OK)。
|
2026-10-04 23:37:57 +08:00 |
|
suzmii
|
b2307a5c5c
|
Merge remote-tracking branch 'origin/master' into feat/agc-runtime-picking-engines
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m10s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m28s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m15s
Project CI / Backend tests (pull_request) Successful in 8m43s
Project CI / Frontend tests (pull_request) Successful in 2m47s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m27s
Project CI / Native shell tests (pull_request) Successful in 8m14s
Project CI / Repository checks (pull_request) Successful in 6m38s
# Conflicts:
# docs/project-memory/shared-memory/pitfalls.md
|
2026-10-04 21:47:51 +08:00 |
|
suzmii
|
6264fed6b4
|
运行画面点选结果收敛到 manifest 现有素材 id
- 新增匹配纯函数:显式 id、精确路径后缀、文件名、序列帧地址四档,未知值一律丢弃
- 恰好命中一个素材且标签由文件名派生时,芯片名归一化为资源显示名
- 点选处理改为调用该纯函数,派发载荷字段与顺序不变
- 新增匹配与标签归一化的单元用例
|
2026-10-04 20:50:26 +08:00 |
|
suzmii
|
9755b381c1
|
Merge branch 'master' into fix/agc-titlebar-project-label
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m11s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m3s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m29s
Project CI / Frontend tests (pull_request) Successful in 3m45s
Project CI / Backend tests (pull_request) Successful in 8m5s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m25s
Project CI / Repository checks (pull_request) Successful in 6m1s
Project CI / Native shell tests (pull_request) Successful in 7m41s
|
2026-10-04 20:05:42 +08:00 |
|
suzmii
|
6c95660588
|
Merge pull request '优化 AGC 工作台顶栏布局:一行到底、版本入口钉右分级、播放并入运行页签(Issue #613)' (#615) from fix/agc-toolbar-layout into master
Project CI / AI game creator shell Rust crates (push) Successful in 6m22s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 7m32s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 8m17s
Project CI / Backend tests (push) Successful in 9m12s
Project CI / Frontend tests (push) Successful in 4m13s
Project CI / AI game creator shell web tests (push) Successful in 4m34s
Project CI / Repository checks (push) Successful in 8m36s
Project CI / Native shell tests (push) Successful in 10m32s
Reviewed-on: #615
|
2026-10-04 20:04:30 +08:00 |
|
suzmii
|
c9df6edc63
|
修复:AGC 窗口标题栏项目标签改认当前项目(#618)
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m40s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m15s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m17s
Project CI / Frontend tests (pull_request) Successful in 2m51s
Project CI / Backend tests (pull_request) Successful in 7m38s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m58s
Project CI / Repository checks (pull_request) Successful in 6m18s
Project CI / Native shell tests (pull_request) Has been cancelled
- 窗口标题栏标签主文案恒为当前项目名:WindowChromeActiveProjectRuns 新增 currentProjectName,由 WorkspaceLauncher 发布当前项目清单名,WindowChrome 透传给标题栏入口
- 正在运行的项目降级为圆点、运行中数量徽标与展开菜单:ActiveProjectRunsPanel 主文案不再取开始时间最晚的在跑项目
- 展开菜单里当前项目那一行沿用清单项目名,meta 首位标「当前」,aria-current 保留
- 运行快照读取失败不再整块替换标签:圆点转告警色,结论落在菜单内一行;既无在跑项目又无当前项目名时保留原来的纯提示
- 新增 .launcher-runs-panel-dot.is-warning 与 .launcher-runs-titlebar-menu-note 样式
- 用例:directActiveTurns 新增三条回归(别的项目在跑时标签仍是当前项目、当前项目自己跑时列表带「当前」、读取失败不顶掉当前项目名),WindowChrome 新增当前项目优先级用例,并把「只显示最后开始的项目」用例改名为「不在项目内时…」
- 文档:修正主规范 2026-09-15 段的标题栏条目、里程碑与实施计划文末修订,decision-log 追加 2026-10-04 决策
|
2026-10-04 18:57:20 +08:00 |
|
suzmii
|
93deb694b0
|
Merge remote-tracking branch 'origin/master' into fix/home-project-naming-async
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m30s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m25s
Project CI / Frontend tests (pull_request) Successful in 2m33s
Project CI / Backend tests (pull_request) Successful in 7m46s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m33s
Project CI / Repository checks (pull_request) Successful in 7m33s
Project CI / Native shell tests (pull_request) Successful in 10m6s
|
2026-10-04 18:56:12 +08:00 |
|
suzmii
|
5a651f3eae
|
删除发布面板冗余提示文案
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m58s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m52s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m47s
Project CI / Frontend tests (pull_request) Successful in 3m32s
Project CI / Backend tests (pull_request) Successful in 8m33s
Project CI / Repository checks (pull_request) Successful in 7m6s
Project CI / AI game creator shell web tests (pull_request) Failing after 3m42s
Project CI / Native shell tests (pull_request) Successful in 10m57s
- GameDistributionPublishPanel.tsx:删除「项目版本」下的说明段(projectVersionHint 派生逻辑与其 useMemo、以及渲染它的 hint span),面板不再写「发布将使用最新内部版本 v{N}…」「线上最近提交 vN 是平台侧事实…」
- GameDistributionPublishPanel.tsx:删除简介/分类的三态提示文案(「正在根据创作内容生成简介和分类…」/「AI 已根据创作内容生成…」/「已根据创作内容预填…」)及支撑它们的 metadataSuggestionPending、metadataSuggestionReady 两个 state 与请求完成后的置位,保留静默预填行为
- apps/ai-game-creator-shell/src/styles.css:删除随上述提示一起作废的样式(-7 行)
- tests/gameDistributionPublishPanel.test.tsx:同步删除对已废弃提示文案的断言(-15 行)
|
2026-10-04 18:45:56 +08:00 |
|
suzmii
|
f418ecfee9
|
Merge branch 'master' into fix/agc-toolbar-layout
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m48s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m30s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m12s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Backend tests (pull_request) Successful in 7m47s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m42s
Project CI / Repository checks (pull_request) Successful in 7m5s
Project CI / Native shell tests (pull_request) Successful in 9m43s
|
2026-10-04 18:37:56 +08:00 |
|
suzmii
|
cd07b7375a
|
修复 Repository checks 的 ESLint 报错:import 顺序按 simple-import-sort 归位
Project CI / Backend tests (pull_request) Failing after 22s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m33s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m30s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m14s
Project CI / Repository checks (pull_request) Failing after 34s
Project CI / Frontend tests (pull_request) Successful in 3m39s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m43s
Project CI / Native shell tests (pull_request) Successful in 9m12s
- CI「Repository checks」红在 lint:eslint:apps/ai-game-creator-shell/src/view/project-development/index.tsx 的 import 顺序未按 simple-import-sort 排序(type 导入与值导入混排)。
- 只调整该文件 import 顺序(1 行),无行为改动;已实跑 npm run lint:eslint(0 problems)、npx prettier --check、homeProjectNamingAsync + projectNamingGenerationTaskRow 15 passed、npm run agc:typecheck。
|
2026-10-04 18:35:55 +08:00 |
|
suzmii
|
ab1045f72d
|
Merge remote-tracking branch 'origin/master' into feat/game-works-management
|
2026-10-04 18:28:11 +08:00 |
|
suzmii
|
2e74092743
|
发布版本文案去诱导:卡面角标只写最新,面板写明发布固定取最新内部版本
- resourceProjectionModel.ts:publicationTag 注释改为「值是内部版本序数(versions.length),也就是发布时会提交的那个标签」,并注明卡面只渲染中性的「最新」角标,不再写「发布标签 v{N}」
- GameDistributionPublishPanel.tsx:「项目版本」说明注释写明发布提交的标签是 versions.length(最新内部版本序数),不读任何「选中版本」;画布上的选中/「当前版本」只影响当前版本素材与运行播放哪一版
- index.tsx / styles.css:版本卡角标由「最新 · 发布标签 v{N}」改为中性的「最新」,并换用卡面既有的中性 pill 样式
- gameDistributionPublishPanel.test.tsx:同步旧的角标/文案断言
|
2026-10-04 17:58:50 +08:00 |
|
suzmii
|
8ada23ea0e
|
修复:AGC 工具调用组折叠箭头展开时仍朝下
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m12s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m10s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m7s
Project CI / Backend tests (pull_request) Successful in 9m2s
Project CI / Frontend tests (pull_request) Successful in 2m54s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m55s
Project CI / Native shell tests (pull_request) Successful in 6m57s
Project CI / Repository checks (pull_request) Successful in 5m3s
- 删除 .agent-tool-call-group-head[aria-expanded='true'] .agent-tool-call-group-chevron 的 rotate(180deg),消除与共享 AgentProcessSummary wrapper 叠加的 360° 旋转
- 在 .agent-tool-call-group-chevron 上方补注释,写明换向唯一来源在共享 wrapper,避免再次重复旋转
|
2026-10-04 17:34:27 +08:00 |
|
suzmii
|
3dcfbb1d10
|
合并 origin/master(33552d2ed):文档冲突两边条目都保留
- 冲突仅在 docs/project-memory/shared-memory/decision-log.md 与 pitfalls.md(双方都在文件顶部追加最新条目)。
- 解决方式:两边条目全部保留——本分支的 Issue 599 条目(AI 项目命名解耦 / 生成任务账本 taskType)在前,master 侧的新条目(#604 游戏游玩次数两条、#602 AGC 画布引用、AGC 渠道更新两条)原样保留,逐条核对无丢失。
|
2026-10-04 17:17:30 +08:00 |
|
suzmii
|
206c625a58
|
顶栏两端留给两枚大分组:排序分段收行尾,版本入口移到它左边
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m14s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m11s
Project CI / Repository checks (pull_request) Failing after 25s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m4s
Project CI / Frontend tests (pull_request) Successful in 2m37s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m9s
Project CI / Native shell tests (pull_request) Successful in 5m32s
- index.tsx:把「依赖 / 类型」分段从动作区中部挪到动作行最后一个子元素,版本入口紧邻其左(版本不再是最右那一枚)
- styles.css:排序分段左边距的注释改成与左邻无关(现在左邻是版本入口)
- 用例:资源版本切换新增顶栏顺序断言(版本入口在排序分段之前、排序分段是动作行行尾);生成任务侧栏用例改判排序分段为动作行最后一个子元素
- 文档:PRD 两端分组条款、验收用例 S16 入口位置、决策记录、改动后对照图与 README 重拍
|
2026-10-04 17:14:26 +08:00 |
|
suzmii
|
a554b0c7ca
|
把 AI 项目命名接进「生成任务」体系:账本 v2 任务类型、命名任务入队与推进、面板命名行
- 账本 v2:记录新增 taskType(asset-generation / project-naming,缺省 asset-generation,旧壳按素材任务读回),kind 改为可选;schema 升 agc-asset-generation-task.v2,读取同时接受 v1 与 v2。
- 新增 enqueue_local_project_naming_task / update_local_project_naming_task:命名任务入队时登记 live、终态写盘后摘除(写盘失败只回滚本轮插入),中断残留按命名口径收口为 failed(文案不含「目标素材」)。
- 首页命名链路改为推进这条任务:入队 → 命名中 → 已完成(已应用 AI 名称 / 建议名与现状一致 / 用户已手动改名而跳过)或失败(无可用名称 / 自动改名失败,均保留兜底名);账本只作展示旁路,推进失败只写诊断日志。
- 前端模型与面板支持命名行:按 taskType 把命名记录从素材任务分支剔除,命名行固定展示名「AI 项目命名」、只在终态显示结论、不渲染缩略图/提示词/定位动作;命令名写字面量以满足 check-config 静态枚举门禁。
- 工作台订阅账本变更事件做一次受控快照读取刷新命名行(不新增固定频率轮询);另修:命名行的 useLiveNow 收进独立组件,避免行种类变化导致 hooks 数量变化。
- 测试:homeProjectNamingAsync 12 例(新增入队→命名中→终态推进序列断言)、projectNamingGenerationTaskRow 3 例、appSurface 建项后命名行可见 + 事件刷新出终态结论 + 标题/列表同步;Rust asset_generation_task 22 例(含 naming_task_stays_in_flight_across_ledger_reads_until_terminal、legacy_v1_ledger_reads_back_*)。
- 文档:decision-log 改写为「生成任务体系里的后台任务」、pitfalls 新增 taskType/live 集合条目、实施计划专题补任务接入口径。
- 门禁:AGC 全量 1925 passed / 17 skipped;cargo 定向 22 + 6;npm run agc:typecheck(含 check:tests:types 与 check-config);cargo fmt --check;check:encoding;git diff --check。
|
2026-10-04 16:59:59 +08:00 |
|
suzmii
|
9eb537c6ff
|
运行视图没有画面时自动补一次载入(进入项目/切项目的运行页空态)
- index.tsx:新增 autoRunPreviewProjectRef 记账,站在运行视图却没有可嵌入预览且可运行时自动补发一次 onPlay,同一个项目只补一次
- index.tsx:showRunView 先记账再发播放,避免点页签时被自动补发重复触发一次
- 用例:新增 runAutoLoadOnEnter(切项目自动补发一次、同项目不重复、点页签只发一次、有活体预览时不补发)
- 文档:PRD 顶栏条款、验收用例 S17 判据、decision-log 同步自动载入口径
|
2026-10-04 15:56:41 +08:00 |
|
suzmii
|
7c5bcc4fb0
|
内部版本登记后立即宣告清单失效,版本卡不再需要重开项目才出现
- 根因:版本追加只写盘、不发「清单已变」事件,而前端被当作「回合结束刷新」的那次调用实际发生在入队时(useDirectProjectChatController.ts:588-592 紧跟 startTurn 的 finally,await 的只是 enqueue_direct_codex_turn),于是 agent 追加版本后无人重读清单,新卡必须先重开项目才出现(旁证:resource-layouts/dependency.json 里 74 分钟缺该版本,直到重开项目才补齐)
- 修复:版本真正追加成功时才 emit_game_creator_manifest_invalidated(root, "direct-codex.version")(与素材工具桥同口径),订阅侧立刻重读清单
- 版本卡显示顺序:orderIndex(内部版本序数)+ compareResourceOrder,修正初始版本被排到最后(4 版读作 2/3/4/1 → 现为 1..N 单调);不带 orderIndex 的资源排序与坐标逐值不变
- 最新版本卡角标:`最新 · 发布标签 v{N}`(只给 versions 最后一条,N = versions.length = 发布面板取的标签)
- 发布面板文案:「本次发布标签 = 最新内部版本 v{N};agent 再改进一次后,下一次发布将是 v{N+1}」,并保留「平台线上号是平台侧事实、与本标签互不推导」
- 验证:vitest apps/ai-game-creator-shell/tests 1935 passed / 0 failed;cargo check(带编辑器 feature)通过;encoding / typecheck 通过;真机未验(环境重新拉起前无法核验,待补)
|
2026-10-04 15:13:31 +08:00 |
|
suzmii
|
b8849b8c01
|
优化 AGC 工作台顶栏布局:一行到底、版本入口钉右分级、播放并入运行页签
- 顶栏去掉两侧 flex-wrap、工具条改 overflow: hidden,空间不足按 data-layout 三档降级而不是换行
- 新增 workbenchToolbarModel(档位顺序与 1px 判据)与 useWorkbenchToolbarLayout(ResizeObserver 管宽度、MutationObserver 管内容,实测内容宽度写档位)
- 版本入口 margin-left: auto 钉在动作区最右,标识改「版本 N(原因 · 时间)」,窄档只留「版本 N」(序号复用资源画布版本卡编号口径)
- 新增 WorkbenchMoreActionsMenu:「打开项目目录 / 资源面板 / 整理画布」在 collapsed-actions 档收进「更多」下拉
- 删除独立「播放」按钮,运行页签前加 ▶ 图标,点页签即切视图并载入游戏资源
- 运行画面右下角新增「刷新运行画面」,LocalGamePreviewFrame 新增 reloadNonce 换 iframe 元素身份重新载入页面
- 用例:新增 workbenchToolbarLayout / runPreviewRefresh;改写 appSurface 顶栏与播放/刷新断言、版本标识断言与顶栏样式断言
|
2026-10-04 14:04:02 +08:00 |
|
suzmii
|
3cca4fb99c
|
项目版本卡按内部版本序数排序,修正初始版本被排到最后
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
- 根因:版本投影的显示顺序走依赖视图、同层按 opaque 资源 id 做字符串排序,而 `version:initial-*` 的字符串序大于 `version:agent-*`,于是初始版本被排到最后(4 个版本读作 2/3/4/1,既与卡面「版本 N」序号冲突,也与「最新版本 = 发布标签」冲突;已落盘坐标 agent-22(0,0) agent-42(228,0) agent-46(0,168) initial-13(228,168) 为证)
- 改法:`ProjectResource` / `ResourceCanvasItem` 增加 `orderIndex`(= 内部版本序数,仅项目版本资源携带),新增 `compareResourceOrder`(先比序键、再回落 opaque id)并替换依赖视图 4 处 `compareStableIdentifier`;类型视图在 mediaType 之后插入序键比较(顺带修掉 ≥10 个版本时「版本 10」被字符串序排到「版本 2」之前的错位)
- 兼容性:不带 `orderIndex` 的其它资源排序结果与落盘坐标逐值不变
- 验证:`npx vitest run apps/ai-game-creator-shell/tests` 199 文件 / 1935 passed / 0 failed;`npm run agc:typecheck` exit 0;`npm run check:encoding` passed;`git diff --check` 干净;真机 CDP 用 Vite 现网真实模块 + 真实 manifest 复算落位:修复前 2→3→4→5→1,修复后 1→2→3→4→5
|
2026-10-04 13:11:37 +08:00 |
|
suzmii
|
fa0427e595
|
去掉 AGC 发布抽屉的可见滚动条
- 改动规则:apps/ai-game-creator-shell/src/styles.css 的 `.game-distribution-publish-panel` 追加 `scrollbar-width: none` 与其 `::-webkit-scrollbar { display: none; }`
- 为什么用 scrollbar-width: none:该抽屉自身就是唯一滚动区(用户口径:这条抽屉里的滚动条太丑);实测隐藏后引擎不再为滚动条预留槽位,内容宽度恒定、无宽度跳变
- 另一条 webkit 规则的必要性:`scrollbar-width` 只覆盖标准路径(Firefox / 新引擎),Chromium / WebView2(AGC 真机)仍需 `::-webkit-scrollbar` 才能隐藏,否则真机上滚动条依旧可见
- 真机实测结论(CDP,WebView2):滚动条布局占位 15px → 0,`clientWidth` 503 → 518,`scrollTopMax` 231 不变,滚轮与键盘仍可滚到底
- 验证命令:`npm run check:encoding`、`git diff --check`
|
2026-10-04 12:29:15 +08:00 |
|
suzmii
|
0168aa7bc3
|
Merge remote-tracking branch 'origin/master' into feat/game-works-management
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m3s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m33s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m18s
Project CI / Backend tests (pull_request) Successful in 6m35s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m50s
Project CI / Native shell tests (pull_request) Successful in 6m32s
Project CI / Repository checks (pull_request) Successful in 5m9s
Project CI / Frontend tests (pull_request) Successful in 1m53s
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
# docs/project-memory/shared-memory/pitfalls.md
|
2026-10-04 11:27:10 +08:00 |
|
suzmii
|
4144c04b1c
|
自审收口 #599:空 expected 失败关闭、异步回填生命周期守卫、合并 master 后过测试类型门禁
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m0s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 3m49s
Project CI / Backend tests (pull_request) Failing after 3m43s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m23s
Project CI / Frontend tests (pull_request) Successful in 3m11s
Project CI / Repository checks (pull_request) Failing after 4m13s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m5s
Project CI / Native shell tests (pull_request) Successful in 7m13s
- 合并 origin/master tip ccd271572(merge commit eeac2c759),无冲突;本分支不修 master 既有共享红(check:nginx-spa-routes / external_mcp::semantic 32 与 30 / http_tracing 偶发 / AGC Rust shard 4/4,由 fix/ci-master-red 处理)。
- 按 master 新增的测试类型门禁(check:tests:types)把两处直接赋值 window.__TAURI__ 迁到 installTauriRuntime / resetTauriRuntime(tests/tauriRuntimeFake.ts 是全仓唯一安装点),否则 appSurface/home.suite.ts 报 TS2322。
- Rust:rename_local_game_project_if_unchanged_at 对空 expectedProjectId / expectedName 按仓库同类入口口径失败关闭(不再静默 renamed:false);非空但不匹配仍是正常跳过。新增 1 条单测,含「非空不匹配不是错误」的反向保护。
- 前端:applyAutomaticProjectName 在 await entrySettled 之后加壳生命周期守卫(mounted + 代次,与 enterProjectDevelopment 同口径):关窗 / 卸载后只保留已落盘的改名,不再写当前项目上下文、不再重检最近项目。新增 2 条 hook 用例(unmount / pagehide),去掉守卫即变红。
- 注释口径:把 suggestName 判据与 ProjectStartMode 的映射写清(planning 覆盖「做方案」与勾选「策划补全」的「做游戏」,见 view/home/homeStartMode.ts),行为不变。
- 文档:decision-log 的验证数字更新为 12 例 / 6 例 / 全量 1922 passed,并补记生命周期守卫与空 expected 口径。
- 定向验证:homeProjectNamingAsync 12 passed;appSurface.test.ts 197 passed / 9 skipped;AGC 全量 1922 passed / 17 skipped;cargo conditional_project_rename_tests 6 passed;cargo fmt --check、npm run agc:typecheck(含 check:tests:types)、check:encoding、git diff --check 全过。
|
2026-10-04 00:38:34 +08:00 |
|
suzmii
|
3f18e3dc77
|
按独立评审的三条 P2 收口:空批次不误报、重复注册留线索、文档与实测对齐
Project CI / AI game creator shell Rust crates (pull_request) Failing after 1m35s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m20s
Project CI / Backend tests (pull_request) Failing after 4m39s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m18s
Project CI / Frontend tests (pull_request) Successful in 3m19s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m43s
Project CI / Native shell tests (pull_request) Successful in 7m28s
Project CI / Repository checks (pull_request) Failing after 4m32s
App.tsx 的监听处对空批次直接返回:空批次没有要插的东西,不能报成「没有可用的聊天输入区」(原因指向错了方向)
activeChatComposer.registerActiveChatComposer 增加重复注册检测:dev 下 console.warn 指出后注册者顶替了前者,不改运行时语义(仍然后注册者接管、身份校验照旧兜住乱序卸载)
tests/activeChatComposer.test.ts 补两条:空批次不打扰已挂载输入区;重复注册出现告警且乱序注销清不掉更新的句柄
tests/resourceCanvasChatReferenceDrop.test.tsx 补一条:直接构造空批次引用事件时不产生「没有可用的聊天输入区」告警
decision-log 的「影响范围」补记 tests/activeChatComposer.test.ts,「验证」换成合并 master 后的实跑数字;功能说明的用例表补两行
反向证伪:去掉空批次短路、去掉重复注册告警后,上面两条新用例各红一处
|
2026-10-04 00:38:06 +08:00 |
|
suzmii
|
455b265a75
|
合并 master 到 fix/agc-canvas-reference-insert:按新测试替身与类型门禁解冲突
master 侧(PR #601)新增 tests/tauriRuntimeFake.ts(全仓唯一 window.__TAURI__ 安装点)与 tsconfig.tests.json,测试统一改用 installTauriRuntime / resetTauriRuntime,并新增 check:tests:types 门禁
冲突三处测试文件(resourceCanvasChatReferenceDrop.test.tsx、appSurface/project-development.suite.ts、appSurface/design-agent.suite.ts)按语义两边保留:采用 master 的替身安装点与类型收窄(ResourceReference 过滤),保留本分支的真实 DirectProject 聊天面挂载与端到端草稿断言
App 的 props 类型未导出,新增的两处 chat 节点改用 AppComponent 组件类型别名(与 design-agent.suite.ts 同一写法),通过新的 check:tests:types
docs 侧 pitfalls.md / decision-log.md 自动合并:本分支的 issue #602 条目与 master 的「根因 7/8」条目都保留
未在本分支修 master 既有红(check:nginx-spa-routes 缺 /pay 与 /profile/payment、external_mcp::semantic 32 vs 30、http_tracing 偶发、AGC Rust shard 4/4),由上游 fix/ci-master-red 处理
|
2026-10-04 00:28:19 +08:00 |
|
suzmii
|
759ae616d4
|
Merge remote-tracking branch 'origin/master' into feat/game-works-management
# Conflicts:
# apps/ai-game-creator-shell/tests/gameDistributionPublishLive.test.ts
|
2026-10-04 00:24:45 +08:00 |
|
suzmii
|
eeac2c759a
|
Merge remote-tracking branch 'origin/master' into fix/home-project-naming-async
|
2026-10-04 00:21:43 +08:00 |
|
suzmii
|
daae35a1a1
|
AGC 发布版本标签改由工程内部版本派生,拆除 projectVersion 写链路
- shared contracts:resolveGameCreationAppProjectVersion 改为按 manifest.versions 条数派生,删除 isGameCreationAppProjectVersion,projectVersion 注释降级为遗留兼容位
- Rust shared-contracts:删除 resolve_game_creation_app_project_version / is_game_creation_app_project_version / GAME_CREATION_APP_FIRST_PROJECT_VERSION,project_version 注释改遗留位并重写往返测试
- AGC 发布面板:项目版本改为 useMemo 派生只读输入框,删除本地 state、失焦落盘与 onManifestUpdated 回调
- AGC 发布服务:删除 saveGameDistributionProjectVersion,提交版本号缺省改为按 versions 派生
- AGC 原生:发布成功回写与绑定回填不再写 project_version(置空),删除 update_game_distribution_project_version 命令
- AGC 命令注册与白名单:desktop.rs 注销命令、check-config.mjs 移除白名单条目
- AGC 前端装配:App.tsx 移除两处 onManifestUpdated 传递
- AGC 测试:publish/panel 两条测试改为覆盖派生口径,删除四条写回用例
- 注释对齐:game_publish_attempt.rs / project/manifest.rs / styles.css / shared-contracts 的 game_distribution.rs 把版本标签口径改为「由 versions[] 派生」,清掉 projectVersion 遗留位表述
- 文档:decision-log 追加本决策条目,两份 2026-10-02 计划加取代标注,新增 2026-10-03 里程碑与实施计划
|
2026-10-04 00:16:14 +08:00 |
|
suzmii
|
f4ada50612
|
自审加固:注册表按 ref 转发注册、插入成功语义与失败留痕对齐
Project CI / Backend tests (pull_request) Failing after 17s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m50s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m19s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m43s
Project CI / Repository checks (pull_request) Failing after 32s
Project CI / Frontend tests (pull_request) Successful in 2m35s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m23s
Project CI / Native shell tests (pull_request) Successful in 6m26s
ActiveChatComposerHandle.insertReferences 改为返回 boolean:由句柄回答这一批有没有真的递到输入区,注册表不再用「有句柄」冒充「插进去了」
insertChatReferences 增加第三种 false(句柄报落空),且只有插入成功才 focus,失败不抢焦点
DirectProjectChatView 改为注册「按 ref 转发」的句柄,注册时不再读 composerHandleRef.current,去掉对父子 effect 顺序的隐式依赖(内层输入区重挂载也不会留下死句柄)
DirectProjectComposer 与 PlanningChatView 的转发句柄同步返回 boolean
App.tsx 的 dev 失败线索文案改为「没有可用的聊天输入区(未挂载或已卸载)」,覆盖句柄落空这一种
新增 tests/activeChatComposer.test.ts:钉住注册表合同(空批次 / 无输入区 / 句柄报落空不聚焦 / 注销身份校验);反向证伪:去掉身份校验后该用例变红
同步 docs/【功能说明】AGC聊天素材引用-2026-09-08.md 与 shared-memory 决策记录
|
2026-10-04 00:12:24 +08:00 |
|
suzmii
|
e3c91c4e2c
|
修复 #599:首页建项不再等待 AI 项目命名,改为后台条件改名
Project CI / Backend tests (pull_request) Failing after 17s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m31s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m6s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m9s
Project CI / Repository checks (pull_request) Failing after 30s
Project CI / Frontend tests (pull_request) Successful in 3m21s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m24s
Project CI / Native shell tests (pull_request) Successful in 7m5s
- 首页自动建项:预检通过后立即以宿主兜底名创建工作区并进入项目,create_automatic_local_game_project 固定传 name: null,不再等待 suggest_automatic_project_name。
- 命名请求在建项前并行打出,结果交给后台任务;命名慢、超时、失败或返回非法内容都不影响建项、附件导入与首轮创作。
- 新增 Rust 命令 rename_local_game_project_if_unchanged(expectedProjectId + expectedName 条件改名):项目 ID 不符、用户已手动改名、名称未变一律返回 renamed: false 并保持现状,空名/控制字符/超长失败关闭,改名不推进项目 revision。
- 后台改名结果等「建项主体收尾」再写当前项目上下文与最近项目行重检,避免被进项目的兜底上下文覆盖。
- 新增前端时序测试 tests/homeProjectNamingAsync.test.tsx(9 例,promise 闸门而非 sleep)与 appSurface 客户端流程用例。
- 新增 Rust 条件改名单测 5 例;更新实施计划专题、decision-log、pitfalls。
验证:npx vitest run apps/ai-game-creator-shell/tests/homeProjectNamingAsync.test.tsx(9 passed);npm run test -- apps/ai-game-creator-shell/tests(1910 passed / 17 skipped);cargo test --features=cocos-editor-execute,unity-editor-execute,godot-editor-execute --bin genarrative-ai-game-creator-shell conditional_project_rename_tests(5 passed);cargo check 同 features 通过;npm run agc:typecheck、cargo fmt --check、npm run check:encoding、git diff --check 全绿。
|
2026-10-03 19:44:00 +08:00 |
|
suzmii
|
a22e8ee447
|
修复 AGC 画布素材卡「引用」无消费者:新增活跃聊天输入区注册表
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m44s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m2s
Project CI / Repository checks (pull_request) Failing after 30s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m10s
Project CI / Frontend tests (pull_request) Successful in 2m43s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m16s
Project CI / Native shell tests (pull_request) Successful in 5m58s
新增 features/project-workspace/activeChatComposer.ts:模块级保存当前挂载的输入区句柄,registerActiveChatComposer 注销时校验身份,insertChatReferences 空批次或无句柄返回 false
DirectProjectComposer 用 useImperativeHandle 暴露 DirectProjectComposerHandle(按 ref 转发,句柄稳定),新增可选 ref 入参
DirectProjectChatView 挂载期间注册、卸载注销,并把 composerHandleRef 传给 DirectProjectComposer
PlanningChatView 同样注册(句柄按 composerRef 转发),两条链路互斥渲染,同一时刻只有一个句柄
App.tsx 收敛为一处监听:单条「引用」与批量拖拽两个事件都走 insertChatReferences,返回 false 时 dev 下 console.warn
chatComposerRef 只保留给策划输入盒自己的 getDraft / clear,不再承担跨面板插入
project-development.suite.ts:工具条「引用」用例改为渲染真实 DirectProject 聊天面,断言草稿里出现引用芯片(键盘 + 鼠标两条通路、光标留在插入之后)
resourceCanvasChatReferenceDrop.test.tsx:换成真实 DirectProject 聊天面,批量拖拽断言整批一次落进草稿且顺序 = 拖动集合顺序;新增未登记素材不出「引用」按钮、拖拽只给原因的用例
design-agent.suite.ts:新增策划链路引用插入不回归用例
同步 docs/【功能说明】AGC聊天素材引用-2026-09-08.md、shared-memory 的 pitfalls 与 decision-log
|
2026-10-03 19:43:18 +08:00 |
|
kdletters
|
d4be3dd97a
|
补齐 Claude 上游错误展示与 MCP 并发隔离
Project CI / AI game creator shell Rust crates (push) Successful in 3m15s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 4m30s
Project CI / Backend tests (push) Failing after 4m50s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 6m23s
Project CI / Frontend tests (push) Successful in 3m38s
Project CI / Native shell tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
前端保留 401/403/408/429/5xx 状态并补回归测试
按项目隔离 Claude MCP 注册表并防止旧回合误停新桥
更新 DirectProject 排障记录
|
2026-10-03 19:21:18 +08:00 |
|
suzmii
|
6edda2ae68
|
Merge remote-tracking branch 'origin/master' into feat/game-works-management
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m56s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m55s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 6m19s
Project CI / Backend tests (pull_request) Failing after 4m14s
Project CI / Frontend tests (pull_request) Successful in 2m48s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m36s
Project CI / Repository checks (pull_request) Failing after 3m50s
Project CI / Native shell tests (pull_request) Successful in 6m0s
|
2026-10-03 18:26:19 +08:00 |
|
suzmii
|
86e74867ae
|
review 反馈:补齐 targetCategory 的文档与注释口径(#359)
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m27s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m37s
Project CI / Backend tests (pull_request) Failing after 31s
Project CI / Repository checks (pull_request) Failing after 28s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m54s
Project CI / Frontend tests (pull_request) Successful in 3m18s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m28s
Project CI / Native shell tests (pull_request) Successful in 7m28s
- 实施计划合同补上「GUI 上传与图片类生成同一 targetCategory 口径,不传时仍按内容证据派生 kind」
- 栏目画布底部工具栏入口矩阵 §1 一句话补上「带当前栏目 targetCategory」
- 工具栏模型里上传入口的类型注释写明入口栏目与「待归类」的因果
- 修正占位落点 effect 里陈旧的示例:普通图片只在 Agent / Direct 不传 targetCategory 时才落「待归类」
|
2026-10-03 17:42:50 +08:00 |
|
suzmii
|
3a1ccf312d
|
修复审核与发布页面 import 排序
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 2m34s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 4m30s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m18s
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 / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
按仓库 eslint simple-import-sort 规则整理五个相关文件,保持行为不变。
|
2026-10-03 17:20:02 +08:00 |
|
suzmii
|
72d6ea2180
|
Merge remote-tracking branch 'origin/master' into feat/game-works-management
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m5s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 3m28s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m5s
Project CI / Frontend tests (pull_request) Successful in 2m43s
Project CI / Backend tests (pull_request) Successful in 6m12s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m37s
Project CI / Repository checks (pull_request) Failing after 3m54s
Project CI / Native shell tests (pull_request) Successful in 5m59s
|
2026-10-03 17:06:04 +08:00 |
|