Commit Graph

883 Commits

Author SHA1 Message Date
k88936 80a801c166 对齐游戏分发对外术语并补齐作者侧权威版本号
对外字段 `lineage` 改为 `network`、Fork 取件响应体 `forkSource` 改为 `source`(shared-contracts、api-server 手拼响应、TS 契约与读取方、DTO parity 脚本、相关文档)
作者侧投影新增 `latestVersionNumber`(全部版本最大号,不受列表 10 条截断影响),贯通 module 快照、spacetime-client 记录、api-server 手拼与生成绑定
网页发布与 AGC 更新发布改用 `latestVersionNumber` 推下一个版本号,不再按 `latestVersion`(最近更新)推
统一发布事务插入同号版本前先作废旧的 `pending_review` 行,与旧两步路径同一口径
AGC 发布资料封面/截图预览改为并发解析,保持截图槽位顺序
AGC 送审改用响应回执的权威版本号构造提交路径
补充软删作品复活即覆盖(`created_at` 一并重置)的模块注释与实施计划说明
补充 `updateGameForkAuthorization` 必须传完整投影的文档
2026-10-08 12:19:08 +08:00
k88936 54e37cea77 清理 AGC 壳 exports/bootstrap 退役遗留的 14 条 Rust 告警并收缩白名单
- 删除 project/bootstrap.rs 整模块及 project.rs 的 mod 与 glob 再导出
- command_exec.rs 删除 run_project_bootstrap_command_at,resolve_project_bootstrap_spec_at 按真实使用面收窄为 Linux 测试专用
- project/verification.rs 删除仅用例调用的薄包装 run_project_verification_with_commit_at 并修正 doc 链接
- game_package_upload 删除死常量 GAME_PACKAGE_UPLOAD_PROGRESS_EVENT 及其再导出
- game_package_upload 的 ensure_staging_path_in_dir 与 NpmScript.package_json_relative 按真实使用面收窄为 test-only
- export/draft/taonier 移除多余再导出 TaonierArtifactPackage 并删除无调用方的 read_form
- 前端 gamePackageUploadProgress.ts 注释不再指向已删的 Rust 常量
- scripts/warning-baseline.json 收缩:agc-windows 17→3、agc-linux 72→58
- 同步开发运维文档的告警存量记述
2026-10-08 11:24:25 +08:00
k88936 ce32f4a1bd 校验 AGC 发布媒体前缀与 Rust 常量一致
- check-game-distribution-dto-parity 增加发布媒体 objectKey 前缀的逐字比对
- 前缀漂移会让 UI 把沿用键当本地路径(或反之),此前无门禁覆盖
2026-10-08 11:12:40 +08:00
k88936 764526988f 合并 origin/master 到 style/polish-taonier-publish
解决 game_distribution_publish.rs 冲突:保留本分支统一发布重构,并移植 master 的 Rust warning 门禁修复(OwnerGameEntry.project_key 加 #[cfg(test)],注释改为仅测试态编译)
解决 gameDistributionPublish.test.ts 冲突:保留本分支断言(metadata.coverObjectKey 期望 null),不采用 master 的 'generated/cover.png'
核对 pitfalls.md 冲突:保留本分支 owner 媒体按作品命名空间判定与 projectKey 口径,并入 master 新增条目
2026-10-08 10:57:49 +08:00
k88936 adde641ae9 血缘与发布 DTO 改由 ts-rs 生成,删除手写 TS 镜像
GameDistributionForkMetadata / GameDistributionNetworkNode / GameDistributionForksResponse 增加 ts-rs 导出
GameDistributionUpdateGameMetadataRequest / NewGameVersionRequest 增加 ts-rs 导出,字段按可空语义标注
packages/shared 删除 5 份手写镜像,改为从 contracts/generated 再导出
DTO 对齐检查把这 5 个类型移入 GENERATED_RUST_TYPES,结构一致性交给 check:generated-bindings
2026-10-08 00:44:41 +08:00
k88936 54094b5c15 refactor(game-distribution): 共创授权并入资料 PATCH,公开读路由对齐 forks/network
- 删除 PUT /games/{game_id}/fork-authorization 与 GameDistributionSetForkAuthorizationRequest,档位并入 PATCH /my-games/{game_id}(forkAuthorization 可选,缺省不动档位)
- 资料 PATCH 在 metadata 事务成功后串行调用提升事务(派生幂等键 {key}:fork,自有收据可重放),只升不降与衍生终态仍由同一领域纯函数裁决
- web 客户端 updateGameForkAuthorization 改为用当前投影资料组装资料 PATCH,去掉 expectedForkAuthorization 入参
- 公开读路由改名:/lineage→/network、/derived→/forks、/contribution→/network/stats、/fork-source→/source(含 /package /project),同步取件 downloadUrl 与 AGC 取件 URL
- 同步 packages/shared 契约、DTO parity 注册表、生成绑定注释与测试
2026-10-08 00:29:42 +08:00
k88936 565d6ad7e1 refactor(game-distribution): 发布面 clean cut 到 {game_id}/versions/{version_number}
- 删除统一 POST /versions 与旧两步 POST /games/{game_id}/versions,改由 POST /games(新作品 + 首版,首版号固定 1)与 POST /games/{game_id}/versions/{version_number}(追加 / 重放)承担
- NewGameVersionRequest 去掉 gameId / versionNumber:身份只在路径,body 不重复路径参数
- 删除 GameDistributionCreateGameRequest / GameDistributionCreateVersionRequest 及 From<..> for GameMetadata,并同步 DTO parity 注册表
- 作者版本族路由(package / project-bundle / submit / cancel / 版本详情)迁到 {game_id}/versions/{version_number},按 (game_id, version_number) 取最新一条并校验归属
- 删除只服务旧两步的 validate_game_creation_metadata / validate_legacy_version_declaration / normalize_local_project_id
- web 客户端 publishGameVersion / getGameVersion / cancelGameVersion / submitGameVersion / uploadGamePackage 改按新路径签名,调用方与测试同步
- 同步 packages/shared 手写契约与 api-server 路由挂载测试
2026-10-08 00:12:55 +08:00
k88936 026fd4b15e refactor(游戏分发): fork-source 家族改名 source,ForkDeclaration 改名 ForkMetadata
- GameDistributionForkSourceKind/ForkSource/ForkSourceResponse/ForkSourceRecord 全部改名 GameDistributionSource*(kind=package|project 与 JSON 字段 forkSource 不动)。
- GameDistributionForkDeclaration→GameDistributionForkMetadata;AGC game_fork/desktop.rs 与 game_distribution_publish.rs 同步。
- api-server handler get_fork_source{,_package,_project}→get_source{,_package,_project};parity 注册表登记新名。
- 路由路径 /fork-source 保持不变,路径收敛在 M3 统一处理。
2026-10-07 23:33:00 +08:00
k88936 c55e2ffe2f refactor(游戏分发): contribution 家族 DTO/记录改名 network/stats
- GameDistributionContribution{Totals,Generation,Child,Response} 与对应 *Record 全部改名 GameDistributionNetworkStats*。
- spacetime-client facade/mapper 与 parity 注册表同步;handler get_game_contribution→get_game_network_stats。
- 路由路径与 JSON 字段名本步不动,路由收敛在 M3 统一处理。
2026-10-07 23:27:21 +08:00
k88936 b321fc29af refactor(游戏分发): forks/network 家族 DTO/记录改名对齐 GitHub 术语
- shared-contracts:GameDistributionDerivedResponse→GameDistributionForksResponse、GameDistributionDerivedGamesRecord→GameDistributionForksRecord、GameDistributionLineage→GameDistributionNetwork、GameDistributionLineage{Response,Node,Record,NodeRecord,TreeRecord}→GameDistributionNetwork*。
- TS 手写契约与读面(gameDistributionClient、GameLineagePage、LineageRelationLists、GameDetailPage、MyGamesPage)同步改名;JSON 字段名 lineage 保持不变。
- spacetime-client facade/mapper 记录同步改名;parity 注册表登记新名;handler get_game_derived_games→get_game_forks、get_game_lineage→get_game_network。
- module_bindings 与 spacetime-module 的 game_distribution_lineage 表行类型不动:表名与生成绑定不参与 DTO 改名,只按词边界改手写文件。
- 按 cargo fmt 结果重整导入顺序与函数签名换行。
2026-10-07 23:23:41 +08:00
suzmii 411ba98054 Merge branch 'master' into chore/rust-compile-warnings
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m54s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m13s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m45s
Project CI / Backend tests (pull_request) Successful in 8m46s
Project CI / Native shell tests (pull_request) Failing after 2m11s
Project CI / AI game creator shell web tests (pull_request) Failing after 1m15s
Project CI / Frontend tests (pull_request) Successful in 3m50s
Project CI / Repository checks (pull_request) Successful in 6m0s
2026-10-07 22:24:32 +08:00
k88936 2acf55cf67 合并 origin/master 游戏共创(作品 Fork)并保留统一发布接口
- 保留统一 POST /api/game-distribution/versions 与旧两步 POST /games、POST /games/{gameId}/versions 两支发布路径并存。
- GameMetadata 恢复 forkAuthorization/fork;fork 标为可选,渲染层不提交,改由原生链路从项目内 .agent/fork-source.json 读取。
- NewGameVersionRequest 增加可选 changeSummary,统一发布事务按血缘行判定衍生后校验并落库,母版忽略;网页 gamePublishSubmission 与 AGC 原生发布均透传。
- 恢复 resolve_version_number(max_existing, requested) 与 VersionNumberExhausted,以及旧两步 procedure、路由、DTO 与 spacetime-client facade 方法。
- 恢复 GAME_DISTRIBUTION_ACTION_CREATE_GAME 常量与旧 create_version 收据 action 常量。
- 恢复 GameDistributionCreateGameRequest、GameDistributionCreateVersionRequest 与 From<&...> for GameMetadata,并在 DTO parity 中登记两组。
- local_project_id → project_key 为模块未上线前的硬切改名,继续按 SPACETIME_SCHEMA_GUARD_ALLOW_BREAKING=1 走窗口。
- 同步 decision-log 合并处理记录。
- 验证:cargo check --workspace --all-targets;cargo test -p module-game-distribution、shared-contracts、spacetime-client、spacetime-module game_distribution、api-server game_distribution;AGC cargo test -- game_fork;check:generated-bindings、check:game-distribution-dto-parity、check:spacetime-schema、check:encoding、git diff --check;网页与 AGC 定向 vitest 全绿。
2026-10-07 21:52:14 +08:00
lhk229 5eab1660aa 修复抠图幂等重放与动画轮询结果契约不一致 (#676)
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Frontend 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
修复 #495 的抠图幂等重放误报 409,并统一动画轮询精简结果的文档与测试。

抠图同一请求、同一幂等键重试时,旧读取路径把完整任务转换为摘要兼容快照,丢失 dedupe_key 和原始请求指纹,导致身份校验误判。本次按任务主键和账号读取原始记录,保留同键不同参数返回 409 与跨账号隔离。

动画轮询维持现有精简结果:顶层 frames / durationSeconds 提供有序帧与秒级时长,resource / asset 只提供精简引用;完整 imageSequenceFrames / imageSequenceDurationMs 从项目或素材库读取。删除未被接口引用的旧响应定义,修正 Skill 和 Python 自测,并补充真实精简函数的回归测试。动画生成与持久化行为、数据库 schema 和公开接口行为均未调整。

验证:
- SpacetimeDB release WASM 构建通过;隔离运行时 smoke 验证 pending、running、completed 的身份保留、同键重放及跨账号拒绝,不调用 Provider。
- 抠图相关 Rust 测试 7 项、smoke 脚本测试 4 项通过。
- 动画精简、正式序列字段、OpenAPI 和 Skill 打包 Rust 测试共 16 项通过;Python helper 自测和 Skill 校验通过。
- OpenAPI JSON 解析及 264 个本地引用解析通过;编码、文档索引、SpacetimeDB runtime access、Rust 格式和 diff 检查通过。
- 全文件 Prettier 检查仍有原有支付等段落的格式问题,未扩大修改范围。

未进行真实 Provider 生成、完整 HTTP 联调或线上部署验证。

Closes #495

Reviewed-on: #676
2026-10-07 21:48:47 +08:00
suzmii aa36e691a7 Merge origin/master (0576f0a3c) into chore/rust-compile-warnings:第二轮同步(游戏共创/作品 Fork 等 186 提交)
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
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
冲突分桶:预检 `git merge-tree --write-tree HEAD origin/master` 返回 0 冲突 ⇒ M/D/G 三桶本轮无需人工分桶,
全部走自动合并;本轮未触碰 codex 区域(`agent/codex_app_server` / `agent/codex_provider` 的挂载与
HEAD 逐字一致),未改 `.gitea/` workflow,未改 `scripts/check-rust-warnings.mjs` 与其判定语义。

同步后收口两处 master 侧遗留:

1. `game_fork.rs` 的两处用例断言调用 `project_has_runnable_prototype`,而该函数随 master 的
   `b04aceb57`(AGC 陶泥儿打包链路落地与 exports 全退役)删掉 `project/export.rs` 一起消失
   ——**master 自己的树就没有定义**(`git grep project_has_runnable_prototype origin/master`
   只有 2 处调用 + 文档,没有定义),所以 master 的 bin 测试 harness 会 E0425。
   本分支同步时就地按最小集恢复该谓词(与 `32714298b` 提升为 `pub(crate)` 的那份逐字同义),
   且只服务本文件用例 ⇒ 按本仓「仅测试使用的项收窄到 `#[cfg(test)]`」的既定口径放进 `game_fork.rs`
   的测试模块,不新增 `#[allow]`、不恢复 `project/export.rs` 整块模块、生产口径零影响。

2. 取 master 版本带来的回流告警登记进 `scripts/warning-baseline.json`:
   `game_distribution_publish.rs | snapshot | unused_variables`(匿名公开读函数
   `get_public_platform_json` 的 `snapshot` 形参在该文件里没被用,随 master 的
   `dab99e82a`「Fork 真实阶段事件 + 公开作品详情读取」进来;master 侧同样报)。
   基线现为:agc-windows **17** / server-rs **0** / agc-linux **72**(本地只能验前两档)。
2026-10-07 21:21:07 +08:00
k88936 e99b473f9a Merge remote-tracking branch 'origin/master' into style/polish-taonier-publish
Project CI / Backend tests (pull_request) Failing after 40s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m46s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m39s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m57s
Project CI / Repository checks (pull_request) Failing after 1m32s
Project CI / Frontend tests (pull_request) Successful in 2m27s
Project CI / AI game creator shell web tests (pull_request) Failing after 3m38s
Project CI / Native shell tests (pull_request) Successful in 9m10s
# Conflicts:
#	docs/project-memory/shared-memory/pitfalls.md
2026-10-07 21:03:10 +08:00
suzmii 888ea76cb2 Merge origin/master (b1c89fbba) into chore/rust-compile-warnings:按「让路 master + 最小集恢复」收口跨文件契约冲突
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
解冲突口径(本次同步 master 16 个提交):

- `agent/generation/canvas_generation.rs`、`command_exec.rs` 两个冲突文件不再整文件取一边,改为按
  hunk 三分法:master 的功能 hunk 全量移植;我们的清理只在 master 调用方不依赖时才保留。
  未恢复整块模块 / 整文件,未新增任何 `#[allow]` / `#[expect]`。
- 成对回退我们的「摘掉 brief 传参空转」清理:master #628 等新代码仍按带 briefs 的契约调用生成链,
  故 cg 的 8 处签名与 6 个调用方(direct_runtime / direct_tool_bridge / commands / commands/desktop /
  asset_generation_tasks)回到 master 形状,并按最小集恢复 `main.rs` 的 `AgentRoleBrief` /
  `AgentGroupBrief`(未恢复其它已删模块)。
- master #628 已收敛切片用途判定:客户端不再暴露/发送 `sliceCount`,本次跟 master 走(
  `PlatformArtAssetGenerationOptions` 不再有该字段),只保留结果侧 256 上限门。
- command_exec 的 `project_command_actual_target` 采用 master 的 `Vec<OsString>` 字节精确契约,
  同时保留我们「调用点全在 Linux 编译面」的 `#[cfg(target_os = "linux")]` 收窄(与 master 调用方不冲突)。
- 脚本缺陷修复:`scripts/check-rust-warnings.mjs` 编译失败不再可能假通过(cargo 退出码非 0 一律 exit 1,
  并把 stderr 尾部提到前面打印;去掉 `warnings.length === 0` 条件)。
- 取 master 版本带来的回流告警 2 条(`main.rs` 两个 brief 结构体的字段未被读)已登记进
  `scripts/warning-baseline.json`(agc-windows 16 条 / agc-linux 71 条,server-rs 0 条);
  按既定口径「不修上游告警」,只做记账。
2026-10-07 21:01:34 +08:00
suzmii 6c5f2175c4 Merge remote-tracking branch 'origin/master' into feat/game-fork
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 4m25s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 6m11s
Project CI / Frontend tests (pull_request) Failing after 1m38s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 5m39s
Project CI / Native shell tests (pull_request) Failing after 3m46s
Project CI / AI game creator shell web tests (pull_request) Failing after 42s
Project CI / Repository checks (pull_request) Failing after 4m54s
Project CI / Backend tests (pull_request) Successful in 10m28s
# Conflicts:
#	apps/ai-game-creator-shell/scripts/check-config.mjs
#	apps/ai-game-creator-shell/src-tauri/src/commands/desktop.rs
#	apps/ai-game-creator-shell/src-tauri/src/desktop.rs
#	apps/ai-game-creator-shell/src-tauri/src/game_distribution_publish.rs
#	apps/ai-game-creator-shell/src-tauri/src/project/export.rs
#	apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishFormView.tsx
#	apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts
#	apps/ai-game-creator-shell/tests/gameDistributionPublishForm.test.tsx
#	docs/project-memory/shared-memory/pitfalls.md
#	docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md
#	server-rs/crates/api-server/src/modules/game_distribution.rs
#	server-rs/crates/shared-contracts/src/game_distribution.rs
#	server-rs/crates/spacetime-client/src/game_distribution.rs
#	server-rs/crates/spacetime-client/src/module_bindings.rs
#	server-rs/crates/spacetime-client/src/module_bindings/game_distribution_create_game_input_type.rs
#	server-rs/crates/spacetime-module/src/game_distribution.rs
#	server-rs/crates/spacetime-module/src/migration.rs
#	src/components/game-distribution/MyGamesPage.test.tsx
#	src/components/game-distribution/MyGamesPage.tsx
#	src/services/gameDistributionClient.test.ts
2026-10-07 20:56:50 +08:00
k88936 8a42d20ee5 refactor(发行契约): 资料类型改名 GameMetadata 并去掉重复 projectKey
- shared-contracts:GameDistributionCreateGameRequest 改名 GameMetadata 并删掉 project_key(身份字段只留外层),统一发布请求改名 NewGameVersionRequest
- GameMetadata 用 ts-rs 生成 TS 绑定到 generated/GameMetadata.ts,TS 侧删除手写镜像;GameDistributionPublishVersionRequest 改名 NewGameVersionRequest 并引用生成类型
- AGC 命令把 projectKey 拆成独立参数,gameMetadata 不再重复携带;网页/AGC 调用点同步改名
- parity 脚本登记 NewGameVersionRequest;GameMetadata 交给 check:generated-bindings 逐字节校验,不再手写字段清单
2026-10-07 20:50:13 +08:00
suzmii 32dab26426 chore(scripts): 入册 agc-linux 告警基线(CI 首采,69 条)
Project CI / Backend tests (pull_request) Failing after 39s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m15s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 7m9s
Project CI / Frontend tests (pull_request) Successful in 3m56s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m54s
Project CI / Repository checks (pull_request) Failing after 23s
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
来源:run 3729 的 ai-game-creator-shell-rust-lane-2 里新增步骤 “Run AGC shell Rust warning check (Linux)” 的首采输出(该步骤首采模式逐条打印清单、不判失败)。键=路径|符号|lint(不含行号),共入册 69 条;自本条起 agc-linux 档从“首采”转为“只拦新增”。
2026-10-07 20:40:21 +08:00
suzmii a5138d2eca fix(scripts): 补上首采模式逐条打印(上一次编辑未覆盖到)
Project CI / Backend tests (pull_request) Failing after 37s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m44s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 7m46s
Project CI / Repository checks (pull_request) Failing after 28s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 8m14s
Project CI / Native shell tests (pull_request) Successful in 11m10s
Project CI / Frontend tests (pull_request) Successful in 4m3s
Project CI / AI game creator shell web tests (pull_request) Failing after 4m15s
prettier 把 for 循环重排成无花括号形式,导致上一次插入点没匹配上:现在真正逐条打印 [首采] 路径:行 | lint | 符号 + 条数与入册命令;--json 的 report[name].collected 已带上完整条目。实测:临时移除 agc-windows 基线条目 → 首采打印 14 行、exit 0;还原后 14/14 exit 0。
2026-10-07 20:25:21 +08:00
suzmii 8db5861f15 feat(scripts): 告警检查首采模式逐条打印清单(并把条目放进 --json)
collectOnly(尚无基线条目的 profile,如首次 CI 的 agc-linux)以前只打印条数,导致首轮日志里拿不到可入册的键;现在逐条打印 `[首采] 路径:行 | lint | 符号` 并在末尾给条数 + 入册命令,同时在 --json 的 report[name].collected 里带上完整条目;非首采路径的打印与退出码语义不变。
2026-10-07 20:24:15 +08:00
suzmii ce22a682e5 fix(scripts): pre-push 保留原钩子末行、告警检查改按内容触发;文档补基线白名单纪律
.husky/pre-push:refs 先落临时文件→告警检查用 --refs-file 读→exec < 还原 stdin→最后一行仍是 npm run check:pre-push-master -- "$@"(git-hooks.test.mjs 断言逐字不变,故 check:git-hooks 仍绿)。文档:基线 = 告警白名单(显式入册/可审计/可回收)、与 #[allow] 的区别(白名单只吞键相同的那一条)、审计入口 git log -p scripts/warning-baseline.json、SKIP=1 是整段跳过而非入册机制;并修正“feature 分支不跑”的过时表述。
2026-10-07 20:19:15 +08:00
suzmii 823e668c9e feat(scripts): pre-push 钩子对所有分支按内容触发告警检查;CI 挂到已有缓存的 Rust job
本地:.husky/pre-push 无条件调用 node scripts/check-rust-warnings.mjs --only-if-changed(脚本按 refs 判断本次推送是否触碰 *.rs/Cargo.toml/Cargo.lock,不碰则打印一行并 exit 0);推 master 才做 repository parity 的既有约定保持原样。package.json:把 check:rust-warnings 从 lint 链里摘掉(避免 master 推送跑两次、也不拖慢 repository-checks),脚本保留供手工与 CI 使用。CI:ai-game-creator-shell-rust-lane-2 加一步 --profile=agc-linux,ai-game-creator-shell-rust-crates 加一步 --profile=server-rs(两 job 已有 cargo fetch + sccache 缓存);repository-checks 不动。文档同步接法、失败模式与应急放行(GENARRATIVE_SKIP_RUST_WARNINGS=1)。
2026-10-07 20:15:18 +08:00
suzmii 3420eb2cd1 fix(scripts): 告警检查默认复用仓库常规 target 目录(热依赖),并写明 CI 侧代价与待定接线
默认 target 目录改为 cargo metadata 报的 target_directory(开发者本来就在用的、依赖已热),保留 GENARRATIVE_WARNCHECK_TARGET_DIR 覆盖供 CI 使用;fresh 完整性断言仍是安全网(本 profile 的包没被重编就 exit 1 报测量不完整,不会静默给出新增 0)。热目录实测:agc-windows 7.9s、server-rs 9.0s。文档补一句:CI 挂在 repository-checks(有工具链与依赖、不会红,但无 cargo 预热缓存,估 25-40 分钟),接线方案待定。
2026-10-07 20:01:35 +08:00
suzmii 8e2b81007a fix(scripts): 让 Rust 告警取数确定性(挂进 npm run lint;clean 本 profile 包 + fresh 完整性断言 + 精确包集 + first-party 过滤)
接法:挂进 npm run lint(CI 的 Repository checks 与推 master 时的 pre-push 共用那条命令),不新增 job/hook;此前自造的 pre-push 触发接线(.husky/pre-push 改动、scripts/pre-push-rust-warnings.mjs、额外 CI job)已撤。
确定性:profile 专属 target 目录 + 对本 profile first-party 包逐个 cargo clean -p <包名> + 取数后 fresh 完整性断言(每个包必须出现 compiler-artifact 且 fresh=false,否则 exit 1 报测量不完整);只收 first-party 路径前缀下的告警。
修掉两个口径 bug:包集把 AGC 壳下的 vendor/ 路径依赖误算成自己(改精确目录判定);normalizeId 只取 id 的 # 片段导致server-rs 27 个同版本成员碰撞(断言永远为假)。
否决“整体清空 target 目录”:实测 AGC 壳清空后需重建 tauri/webkit 全链依赖 15-25 分钟。
实测:A 干净 agc-windows 1/1·14/14 exit 0、server-rs 27/27·0/0 exit 0;B 播种 unused import → agc-windows 15 条/新增 1、server-rs 1 条/新增 1,均 exit 1 并逐条打印;C 撤销 → 均 exit 0;负向测试(GENARRATIVE_WARNCHECK_SKIP_CLEAN 漏清一个成员)→ 26/27 + 测量不完整 → exit 1。
基线:agc-windows 14 条 / server-rs 0 条 / agc-linux 首采(首次 CI 只采集不判失败,需一次 --update-baseline)。
文档:dev 运维「Rust 编译告警门禁」同步接法、首采、开关、否决清空的原因与局限。
2026-10-07 19:57:17 +08:00
lhk229 27e385785f 修正美术包 API 指南、AGC 调用与切片用途判定 (#628)
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend 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
AGC 美术包此前把内容、风格和排布要求放在未被提示词消费的元数据中,并要求恰好四张切片、按返回顺序分配用途。本 PR 完成以下三项修正:

- [x] API 文档:修正整个 `generationInputs` 的定位、保存与读取方式、接口保留/重建规则及已知消费者。任意元数据不会自动进入提示词,服务端行为和校验约束保持不变。
- [x] AGC 请求:美术包将原 brief 和内容、风格、排布要求写入实际消费的 `iconDescriptions`;普通图标入口继续原文单项透传。参考图、比例和尺寸使用正式参数,同步工具说明与随包 skill。
- [x] 客户端切片处理:美术包和直接生图工具不再暴露或发送 `sliceCount`,取消固定四片和按序赋义;按实际产物保存、登记和返回。切片目录按源图集隔离,文件名使用中性序号,普通清单指向真实总图。

四类素材需求只表达内容覆盖,不能证明四个连通区域或固定语义顺序。两个工具返回总图、完整切片路径及资源身份,预览逐项标注路径,未内嵌的图片列出路径供 Agent 查看。Agent 看图识别实体、状态和用途后再接入或处理;有效总图零切片时仍交付并保留告警。

本轮切片改造仅限客户端:服务端 API、请求侧 sliceCount 契约、切分算法和计费行为不变。不新增为数量不符找回、补切或凑数的工作流。保留文件完整性、平台身份、资源预算、事务与重生成恢复;兼容历史四用途产物和旧数量参数账本,旧请求正文、幂等键及 operation 不改写,候选身份不唯一时要求对账。完成结果快照补存切分声明,避免重放丢失响应字段。

验证:

- API 文档阶段:MCP 25 项、External editor API 30 项测试及 OpenAPI 约束等价检查通过。
- 本轮:317 项定向 Rust 测试通过(生成 118、Direct 运行时 93、工具桥 44、MCP 32、账本 6、提示词 24)。覆盖新请求完全省略字段、0/2/4/6 片、目录隔离、完整资源投影、动态事务回滚、旧请求和旧输出槽恢复;已受理任务恢复不新增生成 POST。
- cargo check、rustfmt、skill-pack:check、文档索引、变更文件编码及 git diff --check 通过。
- 未调用真实付费 Provider,未做客户端视觉试玩;PR 保持草稿,等待视觉及产品验收。

Closes #525

Reviewed-on: #628
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
2026-10-07 19:35:20 +08:00
suzmii b846f04dab chore: 加 Rust 告警的 pre-push + CI 基线感知检查(单一脚本 + 基线)
目的:不再用 Werror,改为「推送前 + CI」的显式检查,并且只拦**基线之外的新增**告警,
这样上游新代码的存量不会挡住任何人,本地开发构建也不会因为告警变红。

单一真源(本地与 CI 调同一份实现):
- 新增 `scripts/check-rust-warnings.mjs` + `npm run check:rust-warnings`:
  用 `cargo check --message-format=json` 收集告警,键 = `路径|符号|lint`(**不含行号**,抗上游行号漂移),
  与 `scripts/warning-baseline.json` 比对:新增 → 退出码 1 并逐条打印;存量减少 → 只提示可更新;
  更新用 `--profile=<name> --update-baseline`。
- 新增 `scripts/pre-push-rust-warnings.mjs`:读 pre-push 的 ref 行,**只在本次推送触碰
  `*.rs`/`Cargo.toml`/`Cargo.lock`** 时才跑(无关推送不受影响);Windows 跑 `agc-windows`+`server-rs`,
  Linux/macOS 只跑 `server-rs`。
- `.husky/pre-push`:把 ref 行落一份临时文件供两段检查共用,然后调用上面的脚本(原有的
  `check:pre-push-master` 保持不变)。
- `.gitea/workflows/project-ci.yml`:新增 `rust-warning-check` job(`runs-on: genarrative-ci`,Linux),
  跑 `--profile=server-rs --profile=agc-linux`,复用 Rust lane 的隔离编译缓存,只 `cargo check` 不 build。
- `scripts/warning-baseline.json`:`agc-windows` 14 条(上游 `b04aceb57` 等引入,逐条见
  `local://commit-1a86675f4-inventory.md`);`agc-linux` 433 条(从 CI lane 日志抽取去重,**刻意取超集**,
  含测试实例产物,首轮 CI 的多余项只显示为「存量减少」不判失败);`server-rs` 0 条。
- 文档:dev 运维「Rust 编译告警门禁」改写为现役口径(目的/命令/基线更新/覆盖分工与缺口/局限),
  旧 Werror 段落标注为历史;development-workflow 的门禁句同步改写。

覆盖分工:CI 覆盖 `server-rs` + AGC 壳 **Linux** 档;AGC 壳 **Windows 生产口径**(GTK/ring 无法在
Linux 交叉编译)**只由本地 pre-push 覆盖**。局限:`--no-verify` 可绕过;本机 target 目录污染要先
`cargo clean -p`;CI 不跑 clippy;基线只保证「不新增」。
2026-10-07 19:22:29 +08:00
k88936 8a38ce35a7 chore(游戏分发): 清理旧发布 procedure 与退役 DTO 并回写收口证据
- api-server 删除 VERSION_NUMBER_CONFLICT → 409 映射与常量,已无调用方的退役对象直接清理实现
- shared-contracts 删除无调用方的 GameDistributionCreateVersionRequest 及其单测,packages/shared 同步移除,parity 条目删除
- spacetime-module 删除 create_game_distribution_game_and_return / create_game_distribution_version_and_return 两个 procedure、对应 tx 与输入结构,以及只服务旧路径的 create_game 收据动作常量
- spacetime-client 删除两个旧 facade 方法与记录输入,重新生成绑定并补入 M2 新增的两个 procedure/input 文件
- 实施计划新增第 9 节实际提交与验证证据,里程碑标记已实现,decision-log/pitfalls 回写验证与清理结论
2026-10-07 18:27:25 +08:00
k88936 7a710bb2b6 feat(游戏分发): 统一发布走单一 POST /versions 并冻结网页版本号
- api-server 新增 game_distribution_publish::publish_version 统一 handler:multipart metadata 必填 versionNumber,有 gameId 走 owner 校验、无则确定性派生 gameId,封面/截图只解析一次
- 删除 POST /games 与 POST /games/{gameId}/versions;自然幂等键 = (owner, projectKey | gameId, versionNumber),不读 Idempotency-Key
- shared-contracts 新增 GameDistributionPublishVersionRequest/Response,packages/shared 镜像并登记 parity 脚本
- 网页 publishGameVersion 单次调用替换 createGame + createGameVersion;新增 gamePublishSubmission 深模块承载「定 key → 发布 → 传包 → 送审」
- gamePublishDraft 在调接口前持久化 projectKey/versionNumber;响应丢失重试命中同一自然键,不新建游戏或版本
- 首次发布送 projectKey + versionNumber=1,更新送 gameId + 冻结 max+1;送审 CAS 用响应 game.publicationRevision
- 更新 web 单测、发布页测试、草稿夹具与 parity 门禁
2026-10-07 18:10:39 +08:00
suzmii ffd7510143 feat(游戏共创): 公开投影新增 coCreationCount(公开可见的全部后代数)
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
会议口径:共创页卡片要突出「共创次数(= 该作品有多少个子项目/衍生作品)」。前端已按 `coCreationCount`
接字段(TS 侧先声明 ⇒ 上轮 **dto parity 变红**:`GameDistributionGame 多出未登记字段/变体:coCreationCount`),
本提交把服务端补齐并让 parity 回绿。

- **字段**:公开投影新增 `coCreationCount`(Rust `co_creation_count: u64`)= **该作品子树里「公开可见的全部后代」
  数,不含自己**;沿血缘边 BFS 整棵子树,只数「未软删除 + 已公开」的后代(与 `forkCount` 同一批规则
  `module_game_distribution::counts_as_public_derivative`,只是深度不同)。已删/未公开的后代不进任何一层计数;
  **中间作品不可见也不断链**(它可见的后代仍计入祖先);血缘环/自引用按 visited 去重,自己永不计数。
- **与 `forkCount` 并存、互不推导**:`forkCount` = **直接**子代(「被改编 N」),`coCreationCount` = **全部**后代
  (「共创 N」);同卡上前者 ≤ 后者。
- **发出范围**:公开投影**恒发**(公开目录、公开详情、我的收藏、主题成员 `roots` 都走同一个 `public_game_payload`);
  **无后代时发 `0` 而不是缺键**;作者侧同形响应不发(与 `currentVersion`/`ratingSummary` 同类)⇒ 前端读取建议
  `coCreationCount ?? forkCount`。
- **算法与成本**:在 spacetime **只读事务内现算** —— 先建一次 `PublicDerivativeIndex`(父→直接子代边 + 可见性集合),
  再对本页每行做一次 BFS 子树计数(visited 去重);目录/详情/收藏/主题各自事务内建一次。
  **不新增表/列/索引、不落物化计数,api-server 只发键不遍历**;边际成本 O(作品数)(当前 51)。
- **契约/门禁**:parity 的 `public_game_payload` 构建器 `mustEmit` 把 `coCreationCount` 与 `forkCount` 一起钉住
  ⇒ **parity 由红转绿(EXIT 0)**;TS 契约里两字段注释改为最终口径。
- **文档**:主规范公开投影一行写明两字段口径、BFS 算法与成本。
- **测试**:+4(根带 3 直接子代、其中一个再带 1 孙代 ⇒ **`forkCount == 3`、`coCreationCount == 4`**;无后代两键恒发且为 0;
  不可见后代不计且**中间不可见不断链**;环/自引用安全)→ `module-game-distribution` **153 passed**。

门禁:`cargo check --all-targets` 0;`cargo test -p module-game-distribution` **153 passed**;
`cargo test -p api-server game_distribution` 见下文;**`check-game-distribution-dto-parity` 0(66 组 / 19 构建器 /
15 手拼类型)**;`check:spacetime-schema` 0(98 表);`cargo fmt --all -- --check` 0;`git diff --check` 0。
2026-10-07 18:02:13 +08:00
lhk229 d7ddf5fbc1 修复 CI 领取冲突导致网关永久锁定
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
识别 Gitea 已回滚的任务分配冲突,允许 runner 正常重试。
保留未知响应与未完成领取的保护,增加脱敏原因日志。
补充冲突重试及错误边界测试,同步部署文档与共享记忆。
2026-10-07 09:20:04 +00:00
k88936 b4ca794660 修复 hook 夹具在 home 为 Git 仓库时的误判
- 夹具建在 homedir()/data/tmp;home 自身是仓库时,尚未 init 的夹具被 rev-parse 向上解析成父仓库
- isolatedGitEnvironment 增加 GIT_CEILING_DIRECTORIES 指向夹具临时根,阻止 git 发现 home 仓库
2026-10-07 15:13:14 +08:00
k88936 3a0d275746 购买 E2E 定价边界建游失败时提前退出
- boundsGameId 为空时先记录失败再 process.exit(1),避免后续请求 /undefined 级联掩盖根因
2026-10-07 14:10:14 +08:00
k88936 11c8c2789a 重启校验 E2E 恢复封面前查回当前 coverObjectKey
- 旧 STATE_FILE 只有 coverAssetId(素材对象 ID,不是对象存储 key),恢复续跑时先查游戏当前封面 key,不再拿它冒充 coverObjectKey
2026-10-07 14:09:16 +08:00
k88936 28be35239e 修 creator-runtime 夹具缺失 price_mud_points
- fixtures 的 game 字典补上必填非 Option 的 price_mud_points=0,避免迁移导入报 missing field
2026-10-07 14:09:00 +08:00
k88936 0f127dbc70 移除游戏分发 E2E helper 中无引用的导出
- 删除 coverImagePart:各 E2E 脚本都有自己的本地实现,仓库内无人导入
- COVER_PNG 只作 imagePart 的默认值,收回 export
2026-10-07 13:55:05 +08:00
suzmii 94cd35e8f7 Merge remote-tracking branch 'origin/master' into feat/game-fork
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m11s
Project CI / Frontend tests (pull_request) Successful in 3m40s
Project CI / Backend tests (pull_request) Successful in 8m55s
Project CI / Repository checks (pull_request) Successful in 8m33s
Project CI / Native shell tests (pull_request) Successful in 10m15s
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 web tests (pull_request) Has been cancelled
# Conflicts:
#	apps/ai-game-creator-shell/src/components/game-distribution/useGameDistributionPublishForm.ts
#	docs/project-memory/shared-memory/decision-log.md
2026-10-07 11:53:17 +08:00
k88936 009a772ebd 媒体验证 E2E 去掉对服务端存储前缀的硬编码断言
- 「公开投影只暴露服务端派生的媒体 objectKey」改为结构断言:非空去空白、含路径分隔符、不是客户端 part 文件名
- 不再断言 agc/project-snapshots/v1/game-distribution/media/ 这一内部布局常量
- 与服务端返回键的一致性仍由相邻的 owner/公开投影相等断言覆盖
2026-10-07 11:43:17 +08:00
k88936 1f239a96ce 游戏分发 E2E 抽出共享 multipart 发布 helper
- 新增 scripts/game-distribution-e2e-helpers.mjs:COVER_PNG、imagePart、coverImagePart、publishFormData、resolveApiRequest
- 11 个 E2E 脚本删除各自的重复实现,改为 import;api() 的 body 分支收敛到 resolveApiRequest
- 各脚本的封面文件名前缀、envelope 与鉴权头合并顺序、返回形状保持不变
2026-10-07 11:42:45 +08:00
suzmii 1bdffcdef0 test(族谱截图): 造树模式的越权提示不再引用已下线的 npm 条目
Project CI / Backend tests (pull_request) Failing after 29s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m31s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m11s
Project CI / Repository checks (pull_request) Failing after 34s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m4s
Project CI / Frontend tests (pull_request) Successful in 3m2s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m12s
Project CI / Native shell tests (pull_request) Successful in 8m44s
2026-10-07 11:27:59 +08:00
suzmii 6e5cf195f8 feat(游戏共创): 公开目录补真游标分页(修「48 硬上限 + 无游标」导致最老作品永久不可见)
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
真实库实证:51 条 published 时**最老的 3 条**(含最关键的 A0/A1/A11 母版与主干)在公开目录里不可见
(AGC 共创页显示「已检查最新 48 个作品(1 页)」;数据本身没丢)。根因:handler 写死
`limit: MAX_LIST_LIMIT(48)`(并忽略客户端 `limit`),事务过滤排序后 `truncate(limit)`,**既无 has_more
也无游标**。

- **页大小**:默认 **48**(保持既有 AGC 共创页首屏语义——48 只该是默认值而非硬上限)、上限 **100**
  (单响应体量);`0` 取默认、超界**截断**(不报错);api-server 与事务共用同一归一函数。
- **游标**:`"{created_at_micros}:{game_id}"`(复用仓库既有 `"{micros}:{id}"` 惯例,与主题列表同构);
  排序键 `created_at` **倒序** + `game_id` **升序**兜底(与改前比较器逐字同序 ⇒ 首页顺序不变;全序 ⇒
  翻页不重不漏);**先过滤再切页**;「多取一条」判 has_more;`nextCursor` 为真值、**末页为 `null`**。
- **非法游标**:模块产出 `CATALOG_INVALID_CURSOR: 目录游标格式无效` → api-server 新增 `CATALOG_` 前缀分支
  (**排在 owner 不匹配 / 不存在 / 状态 等子串分支之前**)→ **400 + 稳定码 `CATALOG_INVALID_CURSOR`**,
  并纳入「码由模块真实文案可达」的枚举测试(防上次那种不可达码);未登记的 `CATALOG_` 码兜底
  `CATALOG_ERROR`(400)。
- **响应形状不变**:仍是 `{ games, nextCursor }`(`nextCursor` 从恒 `null` 变成真值);抽命名构建器
  `public_games_payload` 并登记 parity(构建器 18→**19**,`mustEmit: ['games','nextCursor']`)。
- **生成绑定**:`game_distribution_public_game_list_input_type.rs`(+`cursor`)、
  `game_distribution_game_list_procedure_result_type.rs`(+`next_cursor`);client facade 改返回
  `(games, next_cursor)`,mapper 同步。
- **文档**(同批):主规范 HTTP 表 `GET /games` 行改为真游标分页;创作者主页工程设计两处「最多 48 / 不分页」
  改写(并注明前端尚未消费游标);`docs/README.md` 索引行同步。
- **测试 +15**:纯函数 9(**51 条能翻到最老那条**、恰好整页不产生空游标、同 `created_at` 用 `game_id` 兜底、
  **先过滤再切页**、游标指向页内最后一条、limit 0/超界、非法游标 7 种);事务结构断言 1;api-server 5
  (形状、`limit` 默认与截断、非法游标 400 + 稳定码、码可达性枚举、**51 条走真实 handler 链路翻页且
  未公开/已软删/无公开版本三种不可见行不出现**)。

门禁:wasm build 0;`cargo check --all-targets` 0;`cargo test -p module-game-distribution` **143 passed**;
`-p spacetime-module` **307 passed / 1 ignored**;`-p spacetime-client` 44 passed;`-p api-server game_distribution`
**112 passed**;DTO parity 0(66 组 / **19** 构建器 / 15 手拼类型);`check:spacetime-schema` 0(98 表);
`check:encoding` 0(5548 files);`cargo fmt --all --manifest-path server-rs/Cargo.toml -- --check` 0;
`git diff --check` 0。
2026-10-07 11:23:59 +08:00
k88936 9184e92774 运维回滚 E2E:封禁态建游请求去掉歧义的沿用封面键
- 带二进制 cover part 时把 metadata.coverObjectKey 显式置 null,与套件其余「新图」语义一致
- 避免同一请求同时携带 objectKey 与 cover 字节,在网关检查顺序变化时结论漂移
2026-10-07 11:12:20 +08:00
k88936 152cdc6177 可达性 E2E:创建游戏失败时先退出再解引用封面键
- 在 gameId 取值后补 if (!gameId) process.exit(1)
- 创建失败时 created.data 为空,提前取 coverObjectKey 会抛未捕获 TypeError 打崩脚本
2026-10-07 11:12:08 +08:00
k88936 9c822c098d 重启校验 E2E 续跑兼容旧 STATE_FILE 的 coverAssetId
- runResume 读封面键时回退 state.coverAssetId
- 旧版状态文件没有 coverObjectKey,直接读会得到 undefined 且被 JSON.stringify 丢掉,v3 会缺封面
2026-10-07 11:11:58 +08:00
k88936 8e59e11f0d 重启校验 E2E:创建游戏失败时先退出再解引用
- 在 check('创建游戏成功') 后补 if (!gameId) process.exit(1)
- check 只记失败不中断,created.data 为空时继续取 coverObjectKey 会抛未捕获 TypeError 打崩脚本
2026-10-07 11:11:41 +08:00
suzmii dd9e3b0019 族谱:父代/子代可断言区分 + 「只看父代与子代」可取消开关;侧栏卡文案对齐口径
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
2026-10-07 11:08:22 +08:00
suzmii 70bba0f7b2 test(e2e): 夹具类脚本默认打隔离栈并加护栏/自清理,dev 栈标记可重定向 2026-10-07 11:00:28 +08:00
k88936 069df704fd 真实链路脚本补 owner 媒体读检查
- 待审期间断言作者本人可经 owner 路由预览自己的封面
- 断言匿名走 owner 路由被拒(401)、非本作品媒体的 objectKey 换不出来(404)
2026-10-07 10:26:50 +08:00
suzmii 5caefe297d test(共创): 窄屏图谱视图复盘——面包屑改由大纲形态验证,补可见节点数
Project CI / AI game creator shell Rust lane 1/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
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
2026-10-07 01:55:08 +08:00
suzmii 32f4025516 test(共创): 新增 AGC 客户端 CDP 真机 Fork 验收 + 窄屏三档核验,并同步实测覆盖文档
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m56s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m15s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m17s
Project CI / Backend tests (pull_request) Successful in 9m29s
Project CI / Frontend tests (pull_request) Successful in 3m27s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m30s
Project CI / Repository checks (pull_request) Successful in 5m28s
Project CI / Native shell tests (pull_request) Successful in 6m55s
2026-10-07 01:27:26 +08:00