Commit Graph

5801 Commits

Author SHA1 Message Date
suzmii eeb345f2ad feat(游戏共创): 上架时即可指定共创授权档位(创建作品请求增量)
- TS 契约 `GameDistributionCreateGameRequest` 新增可选 `forkAuthorization?: GameDistributionForkAuthorization`,注释写明缺省禁止共创、非法值整请求 400、上架后只能单向提升
- Rust 契约同结构体新增 `#[serde(default)] pub fork_authorization: GameDistributionForkAuthorization`(非 `Option`):省略与显式传 `forbidden` 得到同一个值,**幂等摘要因此相同**——创建请求的摘要取自整个请求体,若写成 `Option` + `skip_serializing_if`,两种写法会变成「同 key 不同请求」而互相冲突;未知取值由反序列化直接拒绝
- api-server `create_game`:载荷改为 `Result<Json<..>, JsonRejection>`,拒绝统一映射成平台信封 400(与 `set_fork_authorization` 同修法),并按 rejection 文本区分文案(含 `forkAuthorization` → 「共创授权档位不合法,只接受 forbidden / nonCommercial / full」,其余 → 「创建作品请求字段不合法」;框架文本只用于选文案,不回传客户端);创建记录入参新增 `fork_authorization: fork_authorization_value(payload.fork_authorization)`
- spacetime-client:`GameDistributionCreateGameRecordInput` 新增 `fork_authorization: String` 并透传给 procedure;重新生成的 `GameDistributionCreateGameInput` 同步带上该字段
- spacetime-module:`GameDistributionCreateGameInput` 新增 `fork_authorization: String`;创建事务里用 `ForkAuthorization::parse` 解析,未知取值失败关闭(`FORK_AUTHORIZATION_UNKNOWN`,**不静默落成 forbidden**),并把原来的硬编码 `FORK_AUTHORIZATION_FORBIDDEN` 换成解析结果
- 资料编辑复用创建校验的转换函数与既有测试夹具按新字段补默认值;AGC 侧测试字面量同步(AGC 发布面板的 UI 接线留到后续,缺省值等价于不传)
- 测试:`create_game_request_defaults_fork_authorization_without_changing_digest`(缺省 → forbidden;显式 forbidden 与原缺省**摘要相同**;`nonCommercial` / `full` 原样保留;`"allowed"` 反序列化失败)与 `create_game_rejects_unknown_fork_authorization_with_envelope_bad_request`(未知档位 → 400 + 平台信封且无框架纯文本;非档位字段问题走通用文案;合法载荷不会被误拒——测试态发布灰度未配置,得到 503 而非 400,即证明载荷路径已通过且未触达创建)
- 文档:技术方案 §2.4(发布入口上架时即选档位)、§3.4(`POST /games` 请求增量补 `forkAuthorization`)、§3.9(补充说明上架指定档位已支持、事后提升仍保留)
2026-10-05 17:30:46 +08:00
suzmii 775dea02ea 修正 M3 族谱口径注释并抽出图装配纯函数(第二批)
- 修正 spacetime-module 里 get_game_distribution_lineage_and_return 的文档注释:锚点不存在/已软删除/未公开一律 found=false(api-server 映射 404),并写明理由——用空标题占位或空树代替 404 等于确认该 gameId 的存在、代际与血缘位置
- 修正 shared-contracts 里节点 status 的注释:当前只有已公开作品会成为节点(未公开节点被过滤、未公开锚点直接 404),线上取值实际恒为 published;保留该字段是为将来允许非公开节点进入树时不必再改契约
- 新增纯函数 assemble_lineage_tree_entries:家族归属校验(只保留 root_game_id 命中的血缘行)、根行以 0 代入集合、游戏行缺失的行安全跳过、重复行去重(根行优先);module 侧只负责取行与按根查索引
- 新增纯函数 resolve_lineage_author_name:账号昵称优先(trim 后非空)→ 退回发布时冻结的作者名 → 两者都空白则 None(不占位)
- 新增纯函数 lineage_entry_from_game_facts:族谱装配与衍生列表共用同一份字段映射
- module 删除 game_distribution_lineage_entry,衍生列表 tx 改用共用构造函数并复用同一份行事实折叠
- 新增 6 条单测:整族装配、旁支排除、缺行跳过、无根行回退、重复行去重、作者名归一三态
- 本批未改前端;package.json 与 lineage e2e 脚本属第三个 session,未触碰
2026-10-05 17:30:46 +08:00
suzmii c6758e5e20 style(游戏共创): 按 rustfmt 修正本分支新增代码的格式(无语义变化)
判定依据(先判定再动手):仓库根 `rustfmt.toml`(edition 2024 / max_width 100 / use_small_heuristics=Default)与本地 rustfmt 1.9.0-stable 一致;`cargo fmt --all --manifest-path server-rs/Cargo.toml -- --check` 的红项(24 处 hunk / 7 个文件)**全部落在本分支新增的代码上**,且 master 版本的同名文件在同样配置下是干净的(`git show 6c9566058:...errors.rs` 单文件 --check 通过),另三个 workspace(tauri / unity / godot)也 CLEAN。因此是本分支引入的格式漂移,不是环境差异——仓库 `npm run check:rustfmt`(在 `npm run lint` 里)会因此失败,故修正。

- api-server/src/modules/game_distribution.rs:两处 import 列表按宽度重排;`derived_games_payload` / `lineage_tree_payload` / `set_game_distribution_fork_authorization` 调用与 `fork_source_target` 的 `Err(...)`、取件相关测试的换行与尾逗号
- spacetime-module/src/game_distribution.rs:3 处 `return Err(...)` 与 `let Some(game) = ctx.db...` 的换行
- spacetime-client:`active.rs` 的 import 列表、`mapper/game_distribution.rs` 的 `collect()` 链、`game_distribution.rs` 的 procedure 回调换行
- module-game-distribution:`domain.rs` 的错误码字面量元组、`errors.rs` `Display` 分支的换行

验证:`cargo fmt --all --manifest-path server-rs/Cargo.toml -- --check` 退出 0;逐文件比对「删除全部空白后」的字符流,差异仅为 rustfmt 展开/折叠时增删的**尾逗号**(每文件长度差 ≤4 字符),无语义变化;格式化后 `cargo check --all-targets` 与 `cargo test -p api-server game_distribution`(52 passed)仍通过。
2026-10-05 17:30:45 +08:00
suzmii 8f87c826cf feat(游戏共创): M2a 受鉴权内容下发通道(fork-source 元数据 + 整包取件)
- 契约:新增 `GameDistributionForkSourceKind` / `GameDistributionForkSource` / `GameDistributionForkSourceResponse`(shared-contracts + TS 镜像 + parity 登记),字段 `gameId / versionId / source / sha256 / bytes / downloadPath`,**不含对象键**
- 读取:spacetime-module 新增 `GameDistributionForkSourceInput`、扁平结果类型与 procedure `get_game_distribution_fork_source_and_return`;tx 把「行是否存在 / 能否作为来源(未删+已公开+有当前公开版本)/ 授权档位原值」分开回传——既有 owner-or-public 读会把「已软删除」与「未公开」都折成 None,HTTP 层就没法区分 404 与 409;`sha256` / `bytes` 取自版本行,不重算
- 客户端:spacetime-client 新增 record + mapper + `get_game_distribution_fork_source`(生成绑定把 `package_sha256` 折成 `package_sha_256`,与版本快照同约定)
- 路由:新增 `fork_sources` 子路由(`require_bearer_auth` + `add_no_store_response_headers`,**不叠加发布灰度**),两条:`GET …/fork-source`(元数据)与 `GET …/fork-source/package`(ZIP 字节)
- 校验:抽出纯函数 `fork_source_target` 供两个 handler 共用——404 `FORK_SOURCE_NOT_FOUND` / 409 `FORK_SOURCE_NOT_AVAILABLE` / 403 `FORK_NOT_AUTHORIZED`(未知档位按禁止解释);`available` 为真却缺版本元数据时失败关闭为 409
- 取件本体:复用发行网关的 `release_package_bytes`(整包进内存 + 进程内缓存,4 条 / 256 MiB),不新造 OSS 客户端;缓存值由 `Arc<Vec<u8>>` 改为 `Bytes`,整包交给响应体只加引用计数、不复制;响应**不做**引用归一化与 `RELEASE_STORAGE_BOOTSTRAP` 注入(下发原始构建产物,客户端按摘要校验后离线解压);`RELEASE_PACKAGE_CACHE` 顺手改用 `LazyLock`(初始值编译期已知)
- 路径:`downloadPath` 为同源相对路径,复用新抽出的 `is_path_safe_game_id`(与发行入口同一判据),绝不下发对象键
- 测试:新增 4 条——两条路由未带 Bearer → 401;`fork_source_target` 的 404 / 409 / 403 / 未知档位 / 缺元数据失败关闭逐项断言(409 先于 403);元数据 payload 的 sha256/bytes 取自行、downloadPath 形状、序列化后不含对象键;取件包头与长度(`application/zip`、`Content-Length` = 行 `package_bytes`、`Content-Disposition`、`no-store`)
- 文档:技术方案 §3.4 把两个接口从「规划」改成与实现一致的形状,并单独拆出「登录用户(Bearer,不叠加发布灰度)」小节;§3.5.1 的「下载通道(当前不存在)」改为 M2a 已实现,写明它只服务当前公开版本、不做归一化、大包续传仍待做
2026-10-05 17:30:45 +08:00
suzmii 1ce3adb8d0 修复 M3 复核问题(第一批):族谱页双重空态、节点上限常量未钉住、窄屏网格溢出
- 族谱页空态收敛为一条:nodes 为空时只给整体空态(这部作品还没有可展示的族谱节点),有节点但无衍生时才给衍生空态,两者互斥不再同时渲染
- 新增两条组件用例覆盖该组合:空树只出现一条空态且无 .game-lineage-tree;只有母版时渲染母版节点 + 衍生空态且不出现整体空态
- 纯函数测试改用 GAME_DISTRIBUTION_LINEAGE_NODE_LIMIT 常量,并新增 node_limit_constant_is_pinned_and_governs_truncation:同时钉住常量值 200(合同值)与满量/超量时的 truncated 行为,改常量或改截断实现都必须过门
- LineageTreeNode 文档写明作者名空值语义:空串/纯空白归一为 None 与 M1 的 fork_lineage_visible_identity 三态刻意保留属有意为之,两端展示层按 falsy 判断、行为等价
- 族谱节点网格列下限改为 min(13rem, 100%):桌面列宽不变,极窄视口不再横向溢出
- 未动涉及 M2a session 的 spacetime-module / shared-contracts 注释与 lineage_entries 图装配测试,留待第二批
2026-10-05 17:30:45 +08:00
suzmii 39669763fe 实现游戏共创 M3:创作族谱树与衍生列表
- 新增 module-game-distribution/src/lineage.rs:锚点可读性、可见性过滤、稳定排序、上限截断的纯函数,附 15 个单测(复用 M1 的软删除判定,不重写第二套规则)
- 新增公开只读 procedure get_game_distribution_lineage / list_game_distribution_derived_games;锚点必须公开可读(未公开/已软删除/不存在一律按不存在处理),树内只出现未软删除且已公开的节点,不补 null 占位节点
- api-server 新增 GET /games/{id}/lineage 与 /games/{id}/derived(匿名可读、no-store),响应走结构化 DTO,节点键集合由测试钉死,杜绝下发对象键/素材键
- 作者自有游戏聚合追加 forkCount(与公开详情 forkCount 同口径),供「被改编 N」入口使用
- shared-contracts 与 TS 契约新增 LineageNode / LineageResponse / DerivedResponse 三型并登记 DTO 一致性检查
- 前端新增 /games/lineage 族谱页,登记 stage 类型、路由表、页面标题与壳层渲染分支;详情页共创卡新增「查看创作族谱」入口(仅已公开作品)
- 我的作品页新增「被改编 N」行内展开,列出直接子代的标题/作者/代际/状态,含空态与失败重试(仅已公开作品)
- 补前端组件/路由/标题/客户端用例与 api-server 路由、负载映射用例;同步里程碑验收标准与技术方案 §3.4 的锚点可读性口径
2026-10-05 17:30:45 +08:00
suzmii 3d51d1309a docs(游戏共创): 技术方案里提升共创授权的方法改为 PUT,与实现一致
- §2.6 流程图 A:`后续提升授权(POST fork-authorization,仅升)` → `后续提升授权(PUT /games/{gameId}/fork-authorization,仅升)`
- §3.4 作者路由表:`POST /games/{gameId}/fork-authorization`(新) → `PUT /games/{gameId}/fork-authorization`(新)
- 依据:实现侧(api-server `set_fork_authorization` 的 PUT 路由 + 前端 `updateGameForkAuthorization` 的 PUT + M1 实施计划 `PUT /api/game-distribution/games/{game_id}/fork-authorization`)一致为 PUT;表中路径沿用本节开头声明的 `/api/game-distribution` 命名空间,故未重复写前缀
- 顺手扫了全仓 `docs/`:除本文件这两处外没有其它把该路由写成 POST 的地方(`POST /games` 是既有的创建作品路由,与本次无关,未动)
2026-10-05 17:30:45 +08:00
suzmii 1f243f4edf test(游戏共创): 新增作品级共创授权端到端验收脚本
- 新增 scripts/check-game-distribution-fork-authorization-e2e.mjs(789 行):
  真实 HTTP + 浏览器端到端验收作者侧共创授权链路 —— 从 .app/dev-stack.json 读栈地址;
  开 game-distribution:publish 灰度;注册两个真实作者;上传封面并创建作品;
  断言三态提升阶梯(forbidden→nonCommercial→full)、降级 409、过期 CAS 409、
  未知档位 400、非作者 403、未带 Bearer 401、同 key 同 body 重放 replayed=true、
  以及越权/非法请求无副作用;浏览器侧用 Playwright 在 /games/mine 断言入口与三态
  编辑器(当前档位不可点、更高档位可点)并真跑一次网页提升,截图留档。
- package.json:新增 npm script check:game-distribution-fork-authorization-e2e,
  命名与既有 check:game-distribution-*-e2e 保持一致。
- 实测:本地 dev 栈 + Chrome(E2E_PLAYWRIGHT_DIR 临时 playwright)跑 48 项断言
  48 PASS / 0 FAIL;npm run check:encoding 通过。
2026-10-05 17:30:45 +08:00
suzmii e9003a33bd fix(游戏共创): 未知共创档位回平台信封 400,而不是框架 422 纯文本
- api-server `set_fork_authorization`:载荷由裸 `Json(..)` 改为 `Result<Json<GameDistributionSetForkAuthorizationRequest>, JsonRejection>`,拒绝统一映射成 400 + 平台信封(对齐同模块评价保存 / 评价管理两处的既有写法),文案「共创授权档位不合法,只接受 forbidden / nonCommercial / full」
- 保留领域层 `FORK_AUTHORIZATION_UNKNOWN`(map_spacetime_error 里映射 400):procedure 读到库里存的未知档位字符串时仍由它兜底,HTTP 面不再可达不需要删
- 新增 HTTP 级用例 `set_fork_authorization_maps_unknown_authorization_to_envelope_bad_request`:目标档位未知、期望档位未知各断言 400、平台信封(`ok=false` / `data=null` / `error.code=BAD_REQUEST` / message 含「共创授权档位不合法」/ `meta.apiVersion` 存在),并断言响应体不含框架的 `Failed to deserialize` 纯文本;用生产同一套 `attach_request_context` 中间件 + `x-genarrative-response-envelope: v1` 才拿得到信封形状
- 既有的「共创授权路由未带 Bearer 必须 401」用例保持不变(`catalog_and_publish_routes_are_mounted` 通过)
- 技术方案 §5.1:新增「未知共创档位(HTTP 面合同)」证据行
2026-10-05 17:30:45 +08:00
suzmii 036989d1cc test(游戏共创): 软删除×Fork 三条规则提取为纯函数并补单测
- domain.rs:新增三个不依赖 SpacetimeDB / ReducerContext 的纯函数
  · `can_serve_as_fork_source(is_deleted, is_published)`:来源可用性 = 未软删除 且 已公开
  · `counts_as_public_derivative(is_deleted, is_published)`:衍生计数纳入,同条件但动机不同(避免虚报热度、避免泄露「这里曾有个作品」),单独成函数以免两条规则将来互相牵连
  · `fork_lineage_visible_identity(parent_available, parent_title, parent_author_name)`:父可用才透传;父不可用必须返回 (None, None),不做任何「拿不到标题就回退用行数据」的降级
- lib.rs:在既有 `pub use domain::{...}` 列表中导出上述三个函数(一行)
- spacetime-module:三处调用点改为调用纯函数,行为完全不变——来源守卫合并为一个 `if`(仍统一映射 FORK_SOURCE_NOT_AVAILABLE)、衍生计数 filter 传入两个布尔、血缘快照的父身份与根标题共用同一函数;`visibility` 判定仍由 module 侧折叠成布尔
- domain.rs 测试:新增 `fork_soft_delete_tests` 5 条——来源可用性四组合(含「已删但 visibility 仍是 published」必须 false)、计数纳入四组合、父可用透传、父不可用即使传入非空标题/作者名也必须 (None, None)、作者名三态(None→None / 空串→空串 / 只含空白原样透传)
- 技术方案 §5.1:把「权限与边界」行的说明改为已由纯函数单测覆盖的三条规则(真实栈用例仍标注待补);「软删除语义收敛 ③溯源摘要」行补上 `fork_lineage_visible_identity` 单测证据
2026-10-05 17:30:45 +08:00
suzmii d9c53a5b75 docs(游戏共创): 按只读侦察事实修正 M2a 方案:成品包只能试玩不能重发
- 技术方案 §2.5:把「成品包 = 产物级改造(可发布)」改成四列表(新增「能不能再发布」列),写明成品包只能试玩与提取素材、**不能直接重新发布**;补「被否证的旧表述」对照段并指向 §3.5.1/§3.5.4
- 技术方案 §1.3:新增三行缺口事实——无「按版本取 ZIP」的下载通道、导出/发布强制 Phaser 4 + Vite 声明、发行包只含 dist + 根 assets + exports/README(不含 package.json 与源码)
- 技术方案 §3.5:加术语更正块;§3.5.1 重写为「零新增上传资产,但只到『可玩参考』」——试玩成立(verification.rs:49-66)与发布必然被拦(export.rs:262-265 → :405-470;注释 :407-408、反例测试 :1239-1243)、成品包无工程声明可补、下载通道当前不存在及其内存/无续传代价
- 技术方案 §3.5.4(新增):A 参考式改编 / B 只做工程源包 / C 伪工程三条路线与推荐(A 先行、B 为正解排后续、C 不做),标注为待用户拍板材料;附 A 路线的脚手架触发互斥点
- 技术方案 §2.4 / §2.6:唤起方式(deep link 当前未注册)标为待拍板;审核队列标注文案改为「仅成品包可玩参考,不能直接发布」;用户流程图改为目标形态并加说明
- 技术方案 §5:验收表把「一键改造闭环 / 产物级改造路径」拆成源码路径闭环、参考路径(试玩 + 素材,且界面不得承诺可发布)、交付口径一致三条
- 技术方案 §6:M2a 行改名为「参考式改编(只试玩 + 素材 + 血缘,不含重新发布)」并注明成立前提;M2b 行标注为「一键复刻完整工程」的唯一正解路径
- 技术方案 §7:改写原第 1 条(其「成品包路径默认要做」的前提已被否证),追加第 8–12 条待拍板项(对外表述 / 血缘承载位 / 是否立刻做工程源包 / 唤起方式 / 是否允许伪工程)
- 里程碑「成品包改造闭环」:按事实重写「目标 / 范围 / 不在范围内 / 依赖与前置条件 / 验收标准」,新增「事实依据」四条与「前置决策(未拍板前不得实现)」五项,删除全部「能发布」的验收项,改为「本地试玩 + 素材提取 + 在自建合规工程里发布时携带血缘」
- 里程碑「作品工程源包与一键改造」:标注为正解路径;新增前置依赖①「工程包下载/授权」接口(当前不存在)与②包内禁项定义(服务端已拒绝 node_modules / .git / .env* / *.map / *.pem / *.key 与嵌套 zip),并同步「降到试玩+素材参考」的口径
2026-10-05 17:30:45 +08:00
suzmii 1e7ec6dbe7 实现游戏共创 M1:作品级共创授权与改编血缘
- game_distribution_game 表尾追加 fork_authorization(默认 forbidden,只升不降,旧行自动取默认)
- 新增 game_distribution_lineage 表,记录父作品、来源版本、根作品与代际,并按 parent/root/owner 建索引
- migration.rs 登记新表并注明血缘随迁移导出
- 新增 set_game_distribution_fork_authorization_and_return procedure 与幂等收据、期望值 CAS
- 创建作品时校验改编声明:来源存在、已公开、授权开放、来源版本等于当前公开版本;复用既有身份时拒绝携带血缘
- 公开与后台响应增量:forkAuthorization、forkCount、lineage、generation、forkedFromGameId、derivedCount
- 公开快照的作者名与头像改为读时联 user_account,不再落到「创作者」兜底文案
- api-server 新增 PUT /api/game-distribution/games/{game_id}/fork-authorization(Bearer、幂等键、期望值校验)
- 错误映射新增 FORK_ 前缀分支并置于通用子串分支之前,避免被误判成 409 或 404
- module-game-distribution 增加授权阶梯、代际计算与错误码,并补单测覆盖阶梯与错误码前缀
- 网页端详情页新增共创信息卡,我的作品页新增授权提升入口,补服务层调用与定向测试
- 重新生成 SpacetimeDB 绑定,登记 DTO 一致性脚本的共创类型
2026-10-05 17:30:44 +08:00
suzmii 6678c9e0c0 补充游戏共创与作品 Fork 的产品设计与技术方案
- 新增【技术方案】游戏共创与作品Fork-2026-10-03.md:用户视角入口、授权三态与状态流转、数据模型、接口契约、验收标准、未决问题
- 新增里程碑规范:游戏共创授权与血缘 M1、成品包改造闭环 M2a、作品工程源包与一键改造 M2b、创作族谱与衍生列表 M3
- 新增 M1 实施计划,明确修改边界、顺序、验证命令、风险与回滚点
- 记录与 PR #565(作品管理与 Phaser4 客户端发布)的重叠面与软删除语义影响
- docs/README.md 登记主规范索引
2026-10-05 17:30:44 +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 6af965dab8 Merge pull request '修复 #599:首页建项不再等待 AI 项目命名,改为后台条件改名' (#606) from fix/home-project-naming-async into master
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
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/606
2026-10-05 16:06:47 +08:00
kdletters 7b1d57c5da Merge pull request '修复 Mac release 构建的 Git 心跳' (#625) from codex/release-macos-fetch-heartbeat into master
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
Reviewed-on: #625
2026-10-05 15:52:04 +08:00
suzmii a299252f2a 收口 #599 评审:文档补面板补读的门控条件、PR 正文用例数字与真实计数对齐
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m47s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m14s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m17s
Project CI / Frontend tests (pull_request) Successful in 3m16s
Project CI / Backend tests (pull_request) Successful in 7m37s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m7s
Project CI / Repository checks (pull_request) Successful in 6m46s
Project CI / Native shell tests (pull_request) Successful in 9m3s
- 文档口径对齐:pitfalls 的「前端读快照的时序」边界与 decision-log 同段补上门控条件——面板打开时**仅当列表里确实存在在途命名行时才补读**(不给没有命名任务的项目多打一次账本 IPC,避免改变「轮询计数」这类外部可观测行为);不再写成「无条件补读」。
- PR #606 正文数字统一为实测值:测试节 asset_generation_task 22 例 → 27 例、conditional_project_rename_tests 6 例 → 7 例(并补上新用例名),验证节全量 1934 → 1964 passed / 17 skipped,合并段补上 76cd1f057(merge f47a8f305)。
- 用例计数命令与输出:cargo test … asset_generation_task → running 27 tests / 27 passed;cargo test … conditional_project_rename_tests → running 7 tests / 7 passed;静态计数(按测试模块内 #[test] 计数)同为 27 / 7;前端 npx vitest run homeProjectNamingAsync projectNamingGenerationTaskRow → 12 + 3 passed,appSurface.test.ts → 209 tests(200 passed / 9 skipped)。
- 本轮同时把分支合并到最新 origin/master tip 76cd1f057(merge f47a8f305,含 #608 Direct 交付合同重构与临时文档清理)——与本文档/hunk 无冲突,合并后 git merge-base --is-ancestor origin/master HEAD 返回 0。
- 未改动项(评审判定非阻塞):useHomeProjectCreation.ts 的改名 revision 回写沿用既有改名路径同形写法,本轮无改动。
- 门禁:cargo 定向 27 + 7、cargo fmt --check、agc:typecheck、lint:eslint(0 problems)、check:encoding、check:spacetime-schema(91 表)、git diff --check 全过;前端命名/面板 15 passed、appSurface 200 passed / 9 skipped。
2026-10-05 15:51:41 +08:00
kdletters c70186f610 Merge branch 'master' into codex/release-macos-fetch-heartbeat
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m28s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m8s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m14s
Project CI / Frontend tests (pull_request) Successful in 3m33s
Project CI / Backend tests (pull_request) Successful in 8m19s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m37s
Project CI / Repository checks (pull_request) Successful in 6m50s
Project CI / Native shell tests (pull_request) Successful in 9m49s
2026-10-05 15:47:04 +08:00
suzmii f47a8f3054 Merge remote-tracking branch 'origin/master' into fix/home-project-naming-async 2026-10-05 15:45:05 +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 f2f33aead3 合并 master 分支到 fix/agc-titlebar-project-label
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m34s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m54s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m59s
Project CI / Frontend tests (pull_request) Successful in 3m21s
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
- 合入 Direct 交付合同与租约机制重构(PR #608),涉及 direct_execution、direct_validation、direct_delivery、direct_runtime、codex_app_server 等壳层代码与提示词、agc-skills
- 合入已合入 Direct 重构临时文档的清理提交
- 解决 docs/project-memory/shared-memory/decision-log.md 冲突:保留本分支「AGC 窗口标题栏项目标签改认当前项目」条目,并追加 master 的四条 Direct 决策条目
- 合并后确认技术方案文档同时保留本分支标题栏条目(常态显示当前项目名、运行中项目降级为圆点与徽标)与 master 的 Direct 操作控制章节
- 验证:git diff --check 通过;npm run check:encoding 通过(5266 个文件)
2026-10-05 15:16:43 +08:00
lhk229 76cd1f057d 清理已合入的 Direct 重构临时文档
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 1/2 (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 / AI game creator shell Rust crates (pull_request) Successful in 5m40s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m18s
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 crates (push) Successful in 6m0s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m42s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m44s
Project CI / Backend tests (push) Successful in 8m43s
Project CI / Frontend tests (push) Successful in 3m33s
Project CI / AI game creator shell web tests (push) Successful in 3m6s
Project CI / Repository checks (push) Successful in 5m11s
Project CI / Native shell tests (push) Successful in 7m5s
删除合同、租约及收尾修复的六份临时里程碑和实施计划
移除主规范中的过期计划引用并保留验证边界
更新共享记忆中的合入状态与权威文档入口
2026-10-05 07:21:59 +01:00
lhk229 3ac8ab1c08 重构 Direct 交付合同与租约机制 (#608)
Project CI / AI game creator shell Rust lane 1/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
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
当前 Direct 把交付合同作为操作准入条件,并在任意付费/执行失败后进入全局 Draining;一条无关的挂起命令可因此阻断后续代码编辑。本 PR 用于推进 #518、#529 的合同与租约机制重构。

当前仅提交草稿里程碑,运行时代码尚未修改,问题尚未修复。

- 已确认:普通操作成功或失败后返回真实结果,由 Agent 决定下一步;宿主保留回合活动状态、时间与并发控制,取消全局失败排空及返修批次门禁。
- 保留既有权限、旧回合写入归属,以及资源操作自身的幂等和不确定结果核对。
- 待细化:交付合同是否及在哪些产品场景保留、工具与提示词调整、已有配置与账本兼容;实现前同步主规范和单里程碑实现计划。

工作范围:`docs/project-memory/plans/【里程碑】Direct合同与租约机制重构-2026-10-03.md`。

验证:`npm run check:doc-index`、`npm run check:encoding`、`git diff --cached --check` 通过。本次未运行运行时测试。

关联 #518、#529;当前不关闭问题。

Reviewed-on: #608
Co-authored-by: lhk <ink29535@proton.me>
Co-committed-by: lhk <ink29535@proton.me>
2026-10-05 14:19:05 +08:00
kdletters a377ece48e 修复 Mac release 构建的 Git 心跳
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m49s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m35s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m19s
Project CI / Backend tests (pull_request) Successful in 8m31s
Project CI / Frontend tests (pull_request) Successful in 3m30s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m6s
Project CI / Repository checks (pull_request) Successful in 5m21s
Project CI / Native shell tests (pull_request) Successful in 7m3s
为 macOS Jenkins Checkout 增加 SSH 保活与 fetch 心跳。\n增加 fetch 超时诊断并补充生产运维门禁。\n更新 Mac 构建运维说明。
2026-10-05 11:47: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 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 29f7d157cd Merge pull request '作品管理与Phaser4客户端发布' (#565) from feat/game-works-management into master
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 1/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 / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
Reviewed-on: #565
2026-10-04 20:03:38 +08:00
suzmii 42364befb1 同步发布面板测试:删除已废弃的「按首版」提示断言
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m9s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m26s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m16s
Project CI / Backend tests (pull_request) Successful in 8m52s
Project CI / Frontend tests (pull_request) Successful in 2m58s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m59s
Project CI / Native shell tests (pull_request) Successful in 7m10s
Project CI / Repository checks (pull_request) Successful in 5m26s
- tests/gameDistributionPublishPanel.test.tsx:删除「已有绑定时进入更新模式,回填线上资料并按派生项目版本提交原 gameId」用例中对 /本次发布按首版 v1。/ 的断言(该文案随 5a651f3ea 删除 projectVersionHint 一并下线,属遗漏同步)
- 版本派生本身仍由同用例的「项目版本」只读值 1、提交参数 versionNumber=1 覆盖,断言能力未削弱
2026-10-04 19:43:27 +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 65514328f3 Merge pull request '修复:AGC 工具调用组折叠箭头展开时仍朝下(#617)' (#619) from fix/agc-tool-call-group-chevron into master
Project CI / AI game creator shell Rust crates (push) Successful in 5m29s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 7m33s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 8m17s
Project CI / Backend tests (push) Successful in 7m18s
Project CI / Frontend tests (push) Successful in 3m37s
Project CI / AI game creator shell web tests (push) Failing after 4m3s
Project CI / Repository checks (push) Successful in 7m12s
Project CI / Native shell tests (push) Successful in 9m5s
Reviewed-on: #619
2026-10-04 18:25:07 +08:00
suzmii e593236f9b 公开作品详情页不再显示占位作者名「创作者」,按作者 ID 补查真实昵称
Project CI / Backend tests (pull_request) Failing after 30s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m27s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m23s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m15s
Project CI / Repository checks (pull_request) Failing after 33s
Project CI / Frontend tests (pull_request) Successful in 3m59s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m10s
Project CI / Native shell tests (pull_request) Successful in 8m37s
- useGameAuthorName.ts(新增):useGameAuthorDisplayName —— 回包名是占位词(「创作者」/「未知作者」)或空时,按 author.id 调 GET /api/auth/public-users/by-id/{id} 取 displayName;查询中返回 null(避免先闪占位词),查不到返回空串、不编造名字
- GameDetailPage.tsx:详情页用解析后的作者名装配展示对象(displayGame),替代直接用公开投影里的 author.name
- packages/shared/src/components/GameDetailDisplay/index.tsx:作者名为空时不渲染「由 X 制作」那一行;头像首字改用 Array.from(name)[0](避免 emoji 代理对被截断);作者行补 title 悬浮显示完整名字
2026-10-04 17:59:02 +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 160b7e6cfa Merge remote-tracking branch 'origin/master' into fix/home-project-naming-async
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m11s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m33s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m34s
Project CI / Frontend tests (pull_request) Successful in 2m35s
Project CI / Backend tests (pull_request) Successful in 9m11s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m20s
Project CI / Repository checks (pull_request) Failing after 4m28s
Project CI / Native shell tests (pull_request) Successful in 8m8s
2026-10-04 17:25: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
k88936 a2f2503647 Merge pull request 'test/静默测试成功用例' (#614) from test/silent-is-gold into master
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 8m6s
Project CI / AI game creator shell Rust crates (push) Successful in 4m6s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m54s
Project CI / Frontend tests (push) Successful in 3m17s
Project CI / Backend tests (push) Successful in 7m49s
Project CI / AI game creator shell web tests (push) Successful in 3m13s
Project CI / Repository checks (push) Successful in 6m36s
Project CI / Native shell tests (push) Successful in 9m26s
Reviewed-on: #614
2026-10-04 17:02:12 +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 aa4d178956 去掉与 master 重复的游戏评价页排布实现
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 5m57s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 2m42s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m50s
Project CI / Frontend tests (pull_request) Successful in 3m30s
Project CI / Backend tests (pull_request) Successful in 7m0s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m47s
Project CI / Native shell tests (pull_request) Successful in 7m59s
Project CI / Repository checks (pull_request) Successful in 6m43s
- AdminGameReviewsPage.tsx:删除我们新增的重复 tableClassName(master 已在同一组件上有一份,保留 master 那处),保证同名 JSX 属性只剩一处
- AdminGameReviewsPage.tsx:操作列 td 去掉 className="admin-game-reviews-actions-cell"(该 class 的唯一样式来源已随本提交删除,留着就是死代码)
- styles/admin.css:整段删除我们尾部新增的平行实现(.admin-game-reviews-table th:last-child 与 .admin-game-reviews-actions-cell .admin-action-row 的 width/nowrap/flex-end)
- 保留 master 的评价列表排布体系:.admin-game-reviews-table .admin-status、td:last-child .admin-action-row{flex-wrap:nowrap;justify-content:flex-start} 与 >button{flex-shrink:0}
- 自证:tableClassName="admin-game-reviews-table" 命中 1 处;admin-game-reviews-actions-cell 命中 0 处
2026-10-04 16:37:56 +08:00
k88936 a79b9e9f9c Merge branch 'master' into test/silent-is-gold
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m7s
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 8m6s
Project CI / Backend tests (pull_request) Successful in 8m51s
Project CI / Frontend tests (pull_request) Successful in 2m49s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m14s
Project CI / Native shell tests (pull_request) Successful in 7m46s
Project CI / Repository checks (pull_request) Successful in 6m8s
2026-10-04 16:31:59 +08:00
suzmii ee6f1d43c9 Merge remote-tracking branch 'origin/master' into feat/game-works-management 2026-10-04 16:23:57 +08:00
suzmii 620ac52461 后台游戏审核页展示游戏名与作者,不再只显示 gameId
- AdminGameDistributionReviewPage.tsx:待审列表只回版本字段,新增 resolveGameMeta 用既有后台作品列表接口按 gameId 反查标题/作者,逐游戏去重并按会话缓存;单个游戏取不到只回落显示 gameId,不阻断审核列表
- 同文件:loadReviews 在拿到 entries 后并行补齐本页 distinct gameId 的元数据
- 同文件:游戏列由单个 gameId 文本改为「游戏名(主行)+ 作者名与 user_id(副行,截断显示,完整值放 title)」
- adminGameDistributionReview.css:以 .admin-game-review-game 网格布局替换 .admin-game-review-game-id,保留窄视口截断与 title 出口
- AdminGameDistributionReviewPage.test.tsx:补 listAdminGameDistributionGames 的 mock 与游戏列表 fixture,断言由 gameId 改为游戏名
2026-10-04 16:15:24 +08:00
suzmii 137898d182 游戏评价页操作列按内容取宽,避免按钮换行错行
- AdminGameReviewsPage.tsx:评价列表加 tableClassName="admin-game-reviews-table",操作列单元格加 admin-game-reviews-actions-cell(与游戏管理页操作列同口径)
- styles/admin.css:新增本页专属规则,操作列 width:1% + white-space:nowrap,动作行 flex-wrap:nowrap 并右对齐,避免「删除 / 查看详情 / 隐藏」被挤到第二行
- 选择器全部框在 .admin-game-reviews-table 内,不影响其它后台页面
2026-10-04 16:15:18 +08:00