suzmii
|
49131fcb40
|
Merge pull request '修复 CreatorPages 回关用例在并发负载下的偶发失败(修 CI flaky)' (#646) from fix/creator-follow-flaky 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/646
|
2026-10-06 15:23:05 +08:00 |
|
suzmii
|
be9f74f420
|
Merge pull request '【付费游玩】游戏买断制泥点付费规范:主规范合同、里程碑与实施计划(#634)' (#635) from feat/game-purchase into master
Project CI / AI game creator shell Rust lane 1/2 (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 Rust crates (push) Has been cancelled
Project CI / Backend tests (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: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/635
|
2026-10-06 15:16:00 +08:00 |
|
suzmii
|
3b99da832f
|
修复 CreatorPages 回关用例在并发负载下点击被吞导致的偶发失败
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m1s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m48s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m8s
Project CI / Frontend tests (pull_request) Successful in 2m39s
Project CI / Backend tests (pull_request) Successful in 7m54s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m27s
Project CI / Repository checks (pull_request) Successful in 7m10s
Project CI / Native shell tests (pull_request) Successful in 9m41s
- 在「自己的粉丝支持回关和取消回关,移除须确认且只移除该行」用例中,先取到「回关」按钮并保留引用,不再取到后立即同步点击
- 新增等待该按钮 disabled 变为 false 再 fireEvent.click,避免关系 store 尚未 seed、按钮仍是 disabled 时 React 不派发 onClick 而把这次点击吞掉
- 补充简短中文注释,说明行首帧早于关系 store seed、必须等按钮可用再点
|
2026-10-06 15:03:25 +08:00 |
|
suzmii
|
f0cad9dddc
|
合并 origin/master(52c83cc2a,248 个提交)到 feat/game-purchase
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m28s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m26s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m41s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m56s
Project CI / Backend tests (pull_request) Successful in 9m4s
Project CI / Repository checks (pull_request) Successful in 7m13s
Project CI / Native shell tests (pull_request) Successful in 10m16s
Project CI / Frontend tests (pull_request) Successful in 2m26s
- 同步 master 侧 248 个提交:会员与泥点计费(PR #588 / #603)、创作者主页与关注粉丝(PR #638)、运行页刷新真重载(PR #640)、AGC 模板 templateVersion 递增(PR #643)等;确认 master 未触碰发行网关与 `api-server/src/modules/game_distribution.rs`。
- 冲突 1(server-rs/crates/module-runtime/src/domain.rs:1157-1162)`RuntimeProfileWalletLedgerSourceType` 两侧各自在末尾追加变体:保留 master 的 `MembershipUpgradeGrant` 为索引 16(线上已落库口径),本分支 `GamePurchase` 顺延为索引 17,并保留其「每账号每游戏一次扣费」注释。
- 冲突 2(server-rs/crates/module-runtime/src/domain.rs:1184-1188)`as_str()` 同时保留 `membership_upgrade_grant` 与 `game_purchase` 两个分支。
- 冲突 3(server-rs/crates/spacetime-client/src/active/mapper/runtime_profile.rs:95-101)bindings→领域枚举映射同时保留 `MembershipUpgradeGrant` 与 `GamePurchase` 两支,按新索引顺序排列。
- 冲突 4(server-rs/crates/spacetime-client/src/module_bindings/runtime_profile_wallet_ledger_source_type_type.rs:43-47)生成枚举按模块源码顺序合并为 …`MembershipUpgradeGrant`、`GamePurchase`;随后 `npm run spacetime:generate` 复核该文件与生成结果逐字节一致。
- 冲突 5(server-rs/crates/api-server/src/admin.rs:4849-4853)sats 索引映射改为 `16 => membership_upgrade_grant` 与 `17 => game_purchase` 两条并存。
- 冲突 6(server-rs/crates/api-server/src/admin.rs:6368-6461)索引断言并入 master 的 `[16] => membership_upgrade_grant`,并把 master 的「17 尚未映射」占位断言替换为 `[17] => game_purchase`;本分支的后台消耗统计两个用例原样保留。
- 冲突 7(server-rs/crates/api-server/src/runtime_profile.rs:219-226)来源文案格式化同时保留 `MembershipUpgradeGrant` 与 `GamePurchase` 两支,注释随 `GamePurchase` 保留。
- 冲突 8(docs/project-memory/shared-memory/decision-log.md:3-24)两条决策记录并列保留:本分支 2026-10-05「播放会话前缀在三处入口清空 Cookie」在前,master 2026-10-03「每日免费发放额为 0 时前端隐藏该池」在后。
- 保住 master 侧:发行响应 ETag/304/gzip(`release_asset_response_with_cache` 五参形态与 `release_asset_etag` / `if_none_match_matches` / `accepts_gzip_encoding` / `gzip_release_asset` / `release_asset_not_modified_response`)、共享加载面 `PlatformGameLoadingSurface` 及其使用方、三池钱包与会员档位目录改造。
- 保住本分支侧:付费作品 404 守卫(`price_mud_points > 0` 且位于 `load_package` 之前)、购买与播放会话网关路由、nginx×3 / Pingora / Vite 的播放会话 Cookie 清空与 `nginx-route-parity.matrix.json` 登记、viewer 感知公开详情、后台审核价格、`PlatformGamePricingField` 共享定价组件与两端接入、AGC 项目版本只读 + 平台派发下一版本号、schema 与迁移白名单、钱包来源 `game_purchase`。
- 验证:`git merge-base --is-ancestor origin/master HEAD` 返回 0;`check:encoding`、`check:doc-index`、`check:spacetime-schema`、`check:server-rs-ddd`、`check:rustfmt`、`check:npm-workspaces`、`check:game-distribution-dto-parity`、`check:game-distribution-price-limit-parity`、`check:pingora-route-parity`、`check:nginx-spa-routes`、根/admin-web/AGC typecheck、`git diff --check` 全绿。
- 测试:`cargo test -p module-game-distribution` 30 passed,`cargo test -p api-server game_distribution` 61 passed,`cargo test -p spacetime-module game_distribution` 7 passed;定向 vitest 28 个文件 252 个用例全通过。
- `npm run spacetime:generate` 除 11 个 procedure 文件的纯空白格式差异外无任何语义改动(`git diff -w` 为空),已保留 master 的生成产物形态,提交内无 schema/绑定语义变化。
|
2026-10-06 13:12:32 +08:00 |
|
suzmii
|
52c83cc2a1
|
Merge pull request '递增三个已更新模板的 templateVersion 以解除发布守卫' (#643) from chore/bump-template-versions into master
Project CI / AI game creator shell Rust crates (push) Successful in 6m8s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 7m11s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 8m11s
Project CI / Frontend tests (push) Successful in 2m45s
Project CI / Backend tests (push) Successful in 7m39s
Project CI / AI game creator shell web tests (push) Successful in 3m41s
Project CI / Repository checks (push) Successful in 8m0s
Project CI / Native shell tests (push) Successful in 10m20s
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/643
|
2026-10-06 11:50:24 +08:00 |
|
suzmii
|
31a3d326b3
|
项目版本改用平台派发的下一个版本号:AGC 只读展示 + 提交同一个值
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m9s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m23s
Project CI / Repository checks (pull_request) Failing after 33s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m39s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m51s
Project CI / Native shell tests (pull_request) Successful in 9m1s
- packages/shared:定价字段提示句补 `id` 并挂进 `aria-describedby`(与错误行并列),恢复「最多 1000000 泥点」的程序化关联;补两条断言(有错/无误时描述里都含上限)。
- packages/shared:分组标题改用 `PlatformFieldLabel variant="field"`(12px/700/弱化色),与网页「支持设备 / 封面与截图」的 legend 同号;价格输入中和原生 number spinner(`appearance: textfield` + 隐藏 `::-webkit-inner-spin-button`),不再压住「泥点」单位,`inputMode="numeric"` 保留。
- packages/shared:非法态去掉组件级 `!important`,改由网页宿主 remap 的 `[aria-invalid='true']` 分支给出错误色(`src/index.css`,排在 `:focus` 之后),组件侧保留正常权重同名声明供 AGC 生效。
- AGC 壳 Rust(`game_distribution_publish.rs`):作者作品条目解析 `versions[]`;新增 `resolve_owner_next_version_number`(已有版本最大 `versionNumber + 1`,对齐平台 `resolve_version_number(None)`);发布状态回读下发 `nextVersionNumber`(首次发布 `1`;刷新成功的更新 `max+1`;`unavailable` 与「有绑定但没刷新成功」为 `None`);补单测两条。
- AGC 服务层(`gameDistributionPublish.ts`):`versionNumber` 改为必填,删除按清单 `versions[]` 条数的回落;回读结果类型补 `nextVersionNumber`。
- AGC 发布面板:删除本地派生的 `projectVersion`,`项目版本` 显示并提交同一个平台版本号;字段改为只读 + 禁用观感(未知时显示 `—` 占位);平台版本未知时提交按钮禁用并提示重试;「项目版本」不再可从 AGC 手填。
- AGC 样式:新增 `__version-field` / `__version-value`(与相邻字段同形 + 灰底只读观感),并更新版本标签注释为平台口径。
- 测试:AGC 面板三条新口径断言(显示值==提交值==平台下一个版本号;本地迭代计数与遗留字段不参与;平台数据不可得时显示占位/提交禁用/不调用发布)、非 Tauri 宿主用例改为断言禁用、服务层用例改为「只认调用方传入值 + 缺省失败关闭」、live 用例补显式版本号;陈旧注释同步(`game_publish_attempt.rs`、`project/manifest.rs`、`resourceProjectionModel.ts`)。
|
2026-10-06 11:29:38 +08:00 |
|
suzmii
|
7223c05e28
|
美化买断制定价字段:分组卡片、胶囊付费方式、带单位的价格输入
Project CI / Backend tests (pull_request) Failing after 15s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m12s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m6s
Project CI / Repository checks (pull_request) Failing after 34s
Project CI / Frontend tests (pull_request) Successful in 3m26s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m34s
Project CI / Native shell tests (pull_request) Successful in 8m59s
- packages/shared:`PlatformGamePricingField` 改用 `PlatformSubpanel` 承载分组外壳(描边卡片 + 14px 黑体标题 `titleVariant="strong"`),与网页 `game-publish-fieldset`、AGC `__publication` 同族观感。
- packages/shared:付费方式从裸原生 radio 改为「原生 radio(屏外裁切,保留单选组语义/方向键/.checked/label 关联)+ 共享 chip 外观 `getPlatformCategoryChipClassName`」(未选=浅底描边,选中=实心品牌填充反白)。
- packages/shared:买断价改用共享 `PlatformTextField`(size=md / density=compact),标签与输入分离(label htmlFor),输入右对齐等宽数字、右侧留出「泥点」单位位;错误态红边红底(对网页宿主 `platform-subpanel` 输入框 remap 的 `!important` 同权重例外)、禁用态降透明度。
- packages/shared:CSS 补齐分组间距与层次、44px 触控胶囊、窄屏(≤480px)两枚等宽胶囊、`focus-visible` 焦点环;文案、props、校验与提交逻辑一律未改。
- 未触碰 AGC 发布面板「项目版本」一组及其包装/样式,也未改 `GameDistributionPublishPanel.tsx`。
|
2026-10-06 11:09:19 +08:00 |
|
suzmii
|
fdf6424e42
|
递增三个已更新模板的 templateVersion
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m37s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m52s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m52s
Project CI / Frontend tests (pull_request) Successful in 3m24s
Project CI / Backend tests (pull_request) Successful in 7m36s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m43s
Project CI / Repository checks (pull_request) Successful in 6m46s
Project CI / Native shell tests (pull_request) Successful in 9m7s
- phaser-2d-starter / threejs-3d-starter / blank-3d-scene 的 meta.json templateVersion 0.1.1 → 0.1.2
- 解除发布脚本对「同 templateVersion 的 ZIP 内容变化」的 fail-closed 守卫,其余字段一个字未动
|
2026-10-06 11:09:11 +08:00 |
|
suzmii
|
7d342856fa
|
Merge pull request '修复运行页刷新按钮不真正重载' (#640) from fix/run-preview-refresh-reload into master
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m7s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m4s
Project CI / AI game creator shell Rust crates (push) Successful in 5m19s
Project CI / Frontend tests (push) Successful in 4m25s
Project CI / Backend tests (push) Successful in 9m6s
Project CI / AI game creator shell web tests (push) Successful in 2m42s
Project CI / Repository checks (push) Successful in 6m59s
Project CI / Native shell tests (push) Successful in 11m3s
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/640
|
2026-10-06 10:59:23 +08:00 |
|
k88936
|
76166b08cf
|
Merge pull request 'Feat/陶泥儿会员订阅方案' (#588) from feat/pricing-plan 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: #588
|
2026-10-06 10:48:44 +08:00 |
|
k88936
|
3ca01351cb
|
修复(画布顶栏): 明细弹层优先展示钱包读取失败文案
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m55s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m44s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m30s
Project CI / Backend tests (pull_request) Successful in 9m6s
Project CI / Frontend tests (pull_request) Successful in 3m31s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m45s
Project CI / Native shell tests (pull_request) Successful in 6m53s
Project CI / Repository checks (pull_request) Successful in 5m18s
- walletDetailsError 改为 mudPointBalanceError || rechargeError,避免充值弹层原始错误串(network down)泄漏到顶栏明细
- 单测补齐 AuthGate 挂载时的那次余额读取,并在 hover 后等待错误文案提交(弹层先渲染 loading 态)
- 两个原本失败的用例(ImageCanvasEditorView / createProfileWalletStore)恢复通过
|
2026-10-06 10:32:00 +08:00 |
|
k88936
|
a38407344d
|
修复(钱包store): 应用余额快照时空值安全
- captureWalletBalanceSnapshot 在 owner 不匹配时返回 null,applyWalletBalanceSnapshot 之前会直接解引用
- applyWalletBalanceSnapshot 入参放宽为 ProfileWalletBalanceSnapshot | null,null 直接返回 false
- 单测去掉非空断言,锁住「他人 owner 的快照捕获为 null 且必须被拒绝」
|
2026-10-06 10:32:00 +08:00 |
|
k88936
|
796cf9843c
|
Merge remote-tracking branch 'origin/master' into feat/pricing-plan
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m0s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m43s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m42s
Project CI / Frontend tests (pull_request) Failing after 1m16s
Project CI / Backend tests (pull_request) Successful in 8m51s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m34s
Project CI / Repository checks (pull_request) Successful in 5m34s
Project CI / Native shell tests (pull_request) Successful in 7m18s
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
|
2026-10-06 10:14:15 +08:00 |
|
k88936
|
febbdd59d5
|
Merge branch 'feat/pricing-plan-fix' into feat/pricing-plan
|
2026-10-06 10:12:41 +08:00 |
|
suzmii
|
dcef9b62a8
|
修复买断制付费评审问题:后台消耗统计、定价上限校验、付费入口自动化断言
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m43s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m17s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m20s
Project CI / Frontend tests (pull_request) Successful in 3m29s
Project CI / Backend tests (pull_request) Successful in 7m53s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m23s
Project CI / Native shell tests (pull_request) Successful in 7m48s
Project CI / Repository checks (pull_request) Successful in 5m36s
- admin.rs:钱包流水来源映射补齐第 17 个变体(索引 16 → game_purchase),后台「消耗泥点」白名单新增 game_purchase,并抽出效果分类与单行累加函数
- profile.rs:消耗口径抽出 profile_wallet_ledger_source_counts_as_consumption,消费投影增量、历史花费重建、投影初始化三处一并纳入 GamePurchase
- module-game-distribution/errors.rs:价格上限文案改为插值 MAX_GAME_PRICE_MUD_POINTS,并新增文案断言
- 新增 scripts/check-game-distribution-price-limit-parity.mjs 并挂进 npm run lint(随 Repository checks 在 CI 生效):断言 TS / 服务端 Rust / AGC Rust 常量与网页侧别名四处同源
- api-server 发行网关抽出可注入 loader 的 serve_public_release_asset,付费 404 严格发生在读取包字节之前;播放会话准入抽出 resolve_paid_play_session_entitlement
- 新增 api-server 单测:付费发行路径 404 且零次读包字节、免费放行且读到包字节、未购买 403 与作者 / 已购买 / 管理员放行
- spacetime-module:把「先判定后扣费」从源码扫描改为 resolve_game_purchase_pre_charge_plan 纯函数断言,删除 include_str 源码切片用例
- E2E 脚本:平台同源断言缺配置时记 SKIP 并在报告末尾汇总 SKIP 清单,E2E_REQUIRE_PLATFORM_ORIGIN=1 时缺配置直接 FAIL,汇总行改为输出 PASS/FAIL/WARN/SKIP 计数
- 修正注释里不存在的路由 POST /api/game-distribution/play-sessions(真实为 POST /api/game-distribution/games/{gameId}/play-session)与「管理员令牌 403」口径(403 需带 admin 角色的用户令牌)
|
2026-10-06 02:24:40 +08:00 |
|
suzmii
|
4d901eec65
|
后台:撤回审核页价格客户端二次回退,改为哑渲染服务端字段
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
- AdminGameDistributionReviewPage.tsx:删除新增的 resolveFrozenPriceMudPoints,恢复「价格不在这里二次叠加」的单一实现
(服务端 version_detail_payload 已把版本冻结价优先、缺字段按 0 归一写进 game.priceMudPoints,M4 已明确客户端不得复刻该语义)
- AdminGameDistributionReviewPage.test.tsx:详情价格用例改为直接编码「客户端保持哑渲染」约束
- 服务端下发 game.priceMudPoints = 30 → 详情显示「30 泥点」(列表侧由价格列用例覆盖同一字段)
- 对抗用例:冻结资料故意传 frozenMetadata.priceMudPoints = 999,断言仍显示 30 且不出现「999 泥点」
|
2026-10-06 02:21:44 +08:00 |
|
suzmii
|
b4bf37671d
|
前端:修复买断制付费评审问题(flaky 用例、草稿恢复定价、契约口径、守卫与测试质量)
Project CI / Backend 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
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
- GameDistributionPages.test.tsx:作者补查断言包进 waitFor,消除并发下的 0 调用 flaky
- GameDistributionPages.test.tsx:购买确认改为双击只发一次请求,按格式断言幂等键而非仅非空
- GameDistributionPages.test.tsx:新增 409「价格已变化」UI 分支与「旧响应缺价格且无入口」可操作说明用例
- GameDetailPage.tsx:禁用「立即玩」且无入口时补原因说明并用 aria-describedby 关联按钮
- GamePublishPage.tsx:草稿恢复按版本冻结价预填付费模式与价格,恢复提示写明「本次将沿用版本冻结价 N 泥点 / 免费」
- GamePublishPage.test.tsx:删除与共享组件重复的定价纯函数用例,改为草稿恢复定价(游戏行 999 / 版本冻结 240)网页独有用例
- gameDistributionGuards.ts:播放会话 token 段收窄为 [A-Za-z0-9-],拒绝 `..` 逃逸
- gameDistributionGuards.test.ts:补 UUID 令牌、`..`、超长 URL、控制字符与字母表外字符用例
- gameDistributionClient.test.ts:补 purchaseGame / createGamePlaySession 路径、幂等键、expectedPriceMudPoints 序列化与 401/403/409/余额不足错误码映射
- PlatformGamePricingField.tsx:错误行加 id,价格输入补 aria-invalid / aria-describedby
- PlatformGamePricingField.test.tsx:禁用态改用「买断制 + 禁用」以覆盖价格输入;新增错误关联 a11y 用例
- packages/shared 契约与 admin-web DTO:priceMudPoints / purchased 改为可选,与 Rust #[serde(default)] 口径对齐
- AdminGameDistributionReviewPage.tsx:详情价格按「版本冻结价优先、游戏行价兜底」取值(与服务端 version_detail_payload 同口径)
- AdminGameDistributionReviewPage.test.tsx:详情价格改发散值(game=999 / frozen=30,断言 30);价格列按列名定位、去掉全局 NaN 弱断言
- adminGameDistributionReview.css:价格列 96px nowrap 放宽为 120px 并允许换行,避免最大价被硬裁
- AGC 发布面板与发布服务:深相对路径改走 @genarrative/shared/components alias
- AGC 壳 game_distribution_publish.rs:修正预填价注释为「最近版本冻结价优先,可能仍待审/被拒」
|
2026-10-06 02:18:21 +08:00 |
|
suzmii
|
d18998b712
|
文档:修正买断制合同章的定价预填口径、AGC 定价证据与后台落点
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
- docs/【玩法创作】平台入口与玩法链路-2026-05-15.md:583 入口预填规则由「预填当前价格与模式」改为「最新版本冻结价优先、缺失或为 0 时回落作品行当前价、都取不到按免费(0)」
- 同文件:595 定价与冻结段写明实际预填口径(最新版本冻结价可能是 pending_review/rejected 版本价)并补实现落点:AGC 壳 game_distribution_publish.rs:811、网页 GamePublishPage.tsx:164、后端 version_detail_payload
- 同文件:638 补 game_purchase 后台文案落点:api-server/src/admin.rs(wallet_ledger_source_type_to_string 与后台统计消耗白名单)已补齐,接口侧文案见 runtime_profile.rs,钱包消耗口径落在 spacetime-module runtime profile 统计
- 同文件:648 AGC 定价证据由「待补」改为已覆盖:发布面板 Vitest :333/342/802/819、请求层 Vitest :180/197、预填口径 Rust 单测 :1715;未覆盖项为 AGC 真实栈手点一次发布付费版本
- 同文件:658 运行时证据改为稳定口径:最近一次人工运行 76 PASS / 0 FAIL / 1 WARN 及唯一 WARN 说明,去掉 exit 0 / 耗时 / teardown 等易变且无留痕的表述
- 核对后确认无需改动:里程碑 front-matter Status 已是 implemented-awaiting-runtime-acceptance,AGC 定价 checkbox 保持未勾选且已列未覆盖原因;docs/README.md 由前一提交改好
|
2026-10-06 02:04:27 +08:00 |
|
suzmii
|
15bbb55949
|
合并 origin/feat/game-purchase(55a76ae78)到 feat/game-purchase
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m38s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m40s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 3m41s
Project CI / Frontend tests (pull_request) Successful in 2m57s
Project CI / Backend tests (pull_request) Successful in 7m54s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m16s
Project CI / Repository checks (pull_request) Successful in 7m2s
Project CI / Native shell tests (pull_request) Successful in 9m35s
- 远端 55a76ae78(文档:修正买断制里程碑的 AGC 定价证据、预填口径与 E2E 证据摘要;docs/README.md 索引行)的内容已随上一次合并进入本分支,本次合并只补齐拓扑关系,工作区内容零变化。
- 冲突解决口径:docs/README.md 由 ort 自动合并(远端索引行与 master 新增的创作者两行并存),无手工改动。
|
2026-10-06 00:31:22 +08:00 |
|
suzmii
|
959ed4fd53
|
合并 origin/master(51cb05f41,22 个提交)到 feat/game-purchase
- 逐块合并 server-rs/crates/api-server/src/modules/game_distribution.rs:以 master 的 ReleaseAssetResponseInput / 5 参 release_asset_response_with_cache / ETag / 304 / gzip 结构为准,并在其上保留本分支的付费 404 守卫(price_mud_points > 0 仍在 release_package_bytes 读包之前返回);播放会话资源响应改用同一结构(etag None、cache_control no-store、沿用 accept-encoding 协商)。
- 合并 src/components/game-distribution/GamePlayPage.tsx:接入 master 的共享 PlatformGameLoadingSurface 与 PLATFORM_GAME_LOADING_TIMEOUT_MS,删除本地重复常量 GAME_PLAY_STARTUP_TIMEOUT_MS 与裸 div,买断制播放会话准备态改由共享加载面承载。
- 合并 src/components/game-distribution/GameDetailPage.tsx:同时保留 master 的 onOpenCreator 作者插槽与本分支的买断制购买弹窗、onOpenRecharge 充值入口。
- 合并 vite.config.ts:保留 master 的 /api/creators 代理,并保留 play-sessions 前缀清 Cookie 规则(顺序仍在通用 /api/game-distribution 之前)。
- 合并 deploy/nginx/README.md:保留 master 的 SPA allowlist 门禁口径(含 /creators、/creators/connections)与本分支的播放会话前缀章节;三份 nginx 模板的 ^~ play-sessions location 与清 Cookie 原样保留。
- 合并 apps/admin-web/src/pages/AdminGameDistributionReviewPage.test.tsx:保留 master 的加载面/超时用例与本分支的审核价格(冻结价优先、历史按 0)用例。
- 合并 src/components/game-distribution/GameDistributionPages.test.tsx:保留双方 mock,并新增「付费作品在会话签发期间显示共享加载面」用例。
- 合并 docs/【玩法创作】平台入口与玩法链路-2026-05-15.md(保留买断制合同并回填 master 的创作者主页与关注粉丝合同)、decision-log.md、pitfalls.md:追加双方条目,不改写任一侧正文。
- 保留 master 侧新增能力:release_asset_etag / if_none_match_matches / accepts_gzip_encoding / gzip_release_asset / release_asset_not_modified_response、SPA 加载面、创作者主页与关注粉丝(user_follow 表、creator 查询与 author_id 过滤)。
|
2026-10-06 00:28:36 +08:00 |
|
suzmii
|
55a76ae78d
|
文档:修正买断制里程碑的 AGC 定价证据、预填口径与 E2E 证据摘要
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m13s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m27s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m25s
Project CI / Repository checks (pull_request) Failing after 36s
Project CI / Frontend tests (pull_request) Successful in 3m7s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m9s
Project CI / Native shell tests (pull_request) Successful in 9m1s
- 里程碑 AGC 定价验收项拆成「前端/Rust 已覆盖(附用例与单测路径与行号)」与「AGC 真实栈发布未覆盖」,checkbox 保持未勾选并写明未勾选原因
- 里程碑新增「验收证据摘要(真实栈 E2E)」:记录验收命令、脚本内 76 处 check 断言、最近一次人工运行 76 PASS / 0 FAIL / 1 WARN、唯一 WARN 为管理员令牌购买分支在现役登录链路不可达、WARN 为环境跳过语义、脚本是人工验收脚本且不在 CI,并删除易变的耗时秒数
- 里程碑把预填口径改为「最新版本冻结价优先(可能是 pending/rejected 版本价),缺失或为 0 才回落作品行当前价」,并注明 AGC 壳、网页与后端三处实现位置
- docs/README.md 买断制条目改为与事实一致:两个发布入口一致共用共享组件、AGC 定价前端用例与 Rust 预填单测已覆盖、AGC 真实栈发布未覆盖、真实栈 E2E 由人工脚本覆盖且不在 CI、待用户验收、未部署
|
2026-10-06 00:23:48 +08:00 |
|
suzmii
|
df30fdeec7
|
Merge remote-tracking branch 'origin/master' into fix/run-preview-refresh-reload
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m54s
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 6m12s
Project CI / Frontend tests (pull_request) Successful in 2m54s
Project CI / Backend tests (pull_request) Successful in 7m34s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m7s
Project CI / Repository checks (pull_request) Successful in 6m58s
Project CI / Native shell tests (pull_request) Successful in 9m32s
|
2026-10-06 00:21:04 +08:00 |
|
suzmii
|
430d983f65
|
修正原生壳预览边界守卫以接受刷新重载变量
Project CI / Backend tests (pull_request) Failing after 24s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m47s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m38s
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m11s
Project CI / Frontend tests (pull_request) Successful in 2m14s
Project CI / Native shell tests (pull_request) Successful in 8m40s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m25s
- 预览框 src 断言改为两种形态都接受:旧的 `src={embeddedUrl}`,或 `src={iframeUrl ?? undefined}`
- 新形态额外要求 `iframeUrl` 由 `useMemo` 定义、且定义体内引用 `embeddedUrl`(只改名不算通过)
- 其余断言(`resolveEmbeddedPreviewUrl(` / loopback 校验 / sandbox / 单 iframe 与单挂载)原样保留
- 背景:14283db94 为「刷新运行画面」引入 iframeUrl,撞红了 Native shell tests 的
Run native shell contract gates(missing src={embeddedUrl});只接受新形态会让 master 反过来红
|
2026-10-06 00:04:10 +08:00 |
|
lhk229
|
51cb05f418
|
补充创作者主页与关注粉丝工程文档 (#638)
Project CI / AI game creator shell Rust crates (push) Successful in 5m56s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m36s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m37s
Project CI / Backend tests (push) Successful in 9m22s
Project CI / Frontend tests (push) Successful in 4m40s
Project CI / AI game creator shell web tests (push) Successful in 3m50s
Project CI / Repository checks (push) Successful in 6m30s
Project CI / Native shell tests (push) Successful in 8m32s
本 PR 补齐创作者主页与关注粉丝功能的产品合同和工程设计,供后续按里程碑实施;本次只修改文档。
桌面导航第四项进入自己的创作者主页,“我的”移到第五项。游戏详情可进入作者主页并关注/取消关注;自己或他人的关注、粉丝列表均公开可查看,点击用户头像或昵称可进入其主页。本人支持取消/重新关注、回关和移除粉丝,并明确两个关注方向独立。
工程设计包含关系表与 DTO、认证和事务边界、跨页状态同步、共享组件、深链及验收要求,拆分关系查询和页面交互两个里程碑。按用户要求,游戏列表沿用最多 48 项的现有限制,不增加游戏目录分页改造。
验证:
- 已合入最新 origin/master(21c79f54a);共享决策记录冲突保留双方新增内容。
- npm run check:encoding 通过。
- npm run check:doc-index 通过。
- git diff --check 与暂存差异检查通过。
- 相对 master 仅六份文档发生变化;没有业务代码或 schema 修改,未执行业务测试或部署。
Reviewed-on: #638
Co-authored-by: Linghong <ink29535@proton.me>
Co-committed-by: Linghong <ink29535@proton.me>
|
2026-10-05 22:05:11 +08:00 |
|
k88936
|
39327f1c8a
|
修复(门禁): 清理指向已删除 profile.rs 的失效检查条目
- check-spacetime-runtime-access 的 6 条 runtime/profile.rs 规则改指向现役 runtime/active/profile.rs,恢复索引扫描守卫
- check-server-rs-ddd-boundaries 从退役源集合移除 runtime/profile.rs;active/profile.rs 是现役文件,加入退役集合会漏扫表定义
- npm run check:server-rs-ddd 恢复通过(schema / runtime-access / module-runtime-artifact / DDD 边界)
|
2026-10-05 20:22:57 +08:00 |
|
k88936
|
d917d2f4d1
|
修复(AGC模型): 会员到账后主动刷新模型目录
- confirmNativeRechargePayment 确认订单为 paid 且 kind=membership 时调用 notifyLlmConfigChanged
- 保留 applyCatalog 的 revision 门控不变,由配置变更事件重置已应用 revision 并重新读取
- 补「revision 不变但账号档位变化时,显式通知必须重新应用」的回归测试
|
2026-10-05 20:22:43 +08:00 |
|
k88936
|
e27ce5573f
|
修复(会员档位): 缺行目录改为逐档回填并在写入前校验覆盖
- ensure_default_profile_membership_plan 从「空表整表播种」改为按目录逐档补齐缺失行,已存在行不覆盖后台改价
- 新增 missing_runtime_profile_membership_plan_rows 纯函数并在 module-runtime 根导出,回填逻辑可单测
- validate_runtime_profile_membership_plan_row_against_catalog 增加「existing 必须覆盖除 candidate 外全部档位」校验,缺行直接拒绝写入
- 更新 init 注释:懒补齐而非懒播种,全部档位补齐后幂等无写
- 补缺行拒绝与回填幂等两条目录单测
|
2026-10-05 20:22:37 +08:00 |
|
suzmii
|
ce737f4e8b
|
AGC 发布面板接入买断制定价并抽取共享定价组件
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m0s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m47s
Project CI / Repository checks (pull_request) Failing after 56s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m28s
Project CI / Frontend tests (pull_request) Successful in 4m18s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m7s
Project CI / Native shell tests (pull_request) Successful in 9m27s
packages/shared/src/components:新增 PlatformGamePricingField(.tsx/.css/.test.tsx)与 platformGamePricingModel(上限常量与解析),并从 components/index.ts 导出;组件只表达付费方式单选、买断价输入、上限提示、禁用态与错误行,校验由使用方持有。
src/components/common/PlatformGamePricingField.tsx:按既有的 common 适配约定新增网页端再导出。
src/components/game-distribution/GamePublishPage.tsx:把内联的付费方式 fieldset 与买断价输入替换为共享组件,文案、校验、禁用逻辑与既有用例保持不变。
src/components/game-distribution/gamePublishMetadata.ts:买断价上限与解析改为复用共享常量与共享函数,不再各写一份。
apps/ai-game-creator-shell/src/components/game-distribution/GameDistributionPublishPanel.tsx:首次发布与更新两条路径都加入共享定价组件,默认免费;提交前本地校验并透传价格。
apps/ai-game-creator-shell/src/services/gameDistributionPublish.ts:发布命令载荷透传 priceMudPoints,并做 0..=1000000 兜底校验;发布草稿回读新增 priceMudPoints 字段。
apps/ai-game-creator-shell/src-tauri/src/game_distribution_publish.rs:Tauri 命令新增可选 price_mud_points(旧前端不传按免费,向后兼容)并替换硬编码的 0;回读作者作品时解析 priceMudPoints,按「最近版本冻结价优先、回退游戏行当前价」预填,避免已上线付费作品被静默改成免费;发布摘要纳入价格,只改价格也会换幂等键,不会重放上一次收据。
apps/ai-game-creator-shell/tests:补充买断价透传、本地校验拦截、更新模式价格预填与免费兜底用例。
packages/shared/src/components/PlatformGamePricingField.test.tsx:覆盖免费/买断制切换、价格输入、上限提示、禁用态与错误行。
|
2026-10-05 20:20:53 +08:00 |
|
suzmii
|
93de2a0d6c
|
文档:AGC 发布面板补齐买断制定价口径
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 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 / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
- 主规范「入口与边界」改为网页与 AGC 两个发布入口一致支持定价,并写明给已上线作品发新版本的预填规则
- 主规范「定价与冻结」补充发布新版本必须预填并保持现有价格、不允许因默认免费静默改价,定价 UI 由 packages/shared 共享组件承载
- 主规范「契约与迁移」补记 AGC 版本请求 priceMudPoints 字段与 #[serde(default)] 仅作旧客户端兼容的口径
- 主规范验收表新增「定价(AGC 入口)」行,AGC 侧证据标注待补及其来源
- 里程碑范围补上 AGC 发布面板定价,删除「不在范围内」的 AGC 后续切片条目
- 里程碑验收标准新增 AGC 入口复选框(保持未勾选并注明等待实现证据)
- 排障记录 pitfalls 把 AGC 按免费提交改为历史口径 + 现行口径,保留「改请求 DTO 必须同时编译 AGC 壳」的排障经验
- docs/README.md 合同/里程碑条目同步为两个入口一致并标注 AGC 证据待补
|
2026-10-05 20:04:43 +08:00 |
|
suzmii
|
b1e40d8b68
|
修复买断制购买分支遗留的 Rust 格式偏差
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
- server-rs/crates/pingora-gateway/src/main.rs:播放会话代理测试中的 assert! 断言按 rustfmt 收成单行。
- server-rs/crates/spacetime-client/src/active.rs:游戏分发购买相关 use 导入列表按 rustfmt 重新断行。
- server-rs/crates/spacetime-client/src/active/mapper.rs:游戏分发记录类型与映射函数的 pub use 导入列表按 rustfmt 重新断行(两处)。
- server-rs/crates/spacetime-client/src/active/mapper/game_distribution.rs:购买结果映射的 result.purchase.map 链式调用按 rustfmt 换行。
- 仅格式变动,不改变行为;改动前 npm run check:rustfmt 在上一提交 8d8e74ca6 报这 4 个文件,改动后转绿(master 96859666f 上同为绿)。
|
2026-10-05 20:00:30 +08:00 |
|
suzmii
|
8d8e74ca60
|
修复 AGC 壳版本请求缺少买断制价格字段导致的编译失败
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
apps/ai-game-creator-shell/src-tauri/src/game_distribution_publish.rs:构造 GameDistributionCreateVersionRequest 时补 price_mud_points: 0;AGC 发布面板没有买断制定价入口,显式按免费提交,与升级前行为一致。
docs/project-memory/shared-memory/pitfalls.md:新增排障记录——shared-contracts 请求 DTO 加字段后必须同时编译 AGC 壳(独立 cargo workspace),#[serde(default)] 不能救 Rust 结构体字面量,并写明正确的本地检查命令与既有的 CI lane。
|
2026-10-05 19:54:26 +08:00 |
|
k88936
|
a938a4ef9e
|
兼容(契约): 响应 DTO 新增字段一律可选默认
- ProfileMudPointBalanceResponse.monthly_points 缺省为 0
- ProfileMembershipResponse 的 cycleIndex / cycleCount / cycleKind 缺省 1 / 1 / yearly
- ProfileMembershipPlanResponse 的 recommended / unlimitedConcurrency 缺省 false
- ProfileRechargeCenterResponse.membershipPlans 缺省空数组
- 补「旧服务端缺字段仍可整包解析」契约测试,身份与状态字段仍保持必填
- 后端架构文档新增 shared-contracts DTO 变更规则,并同步团队约定
|
2026-10-05 19:37:48 +08:00 |
|
k88936
|
00bb2a7b15
|
修复(会员审计): 后台改档时间改用 SpacetimeDB 事务时间
- upsert_profile_membership_plan_record 不再信任入参 updated_at_micros
- updated_at / created_at 统一取 ctx.timestamp,客户端时钟无法伪造审计时间
|
2026-10-05 19:24:57 +08:00 |
|
k88936
|
6374c7c445
|
重构(会员升级): 目录倒挂用独立 rejection 与配置错误码
- 新增 RuntimeProfileMembershipUpgradeRejection::CatalogPricingInverted
- 报价遇到价格 / 每期泥点相等或倒挂时返回该变体,不再复用 InvalidQuoteInput
- rejection.error_code() 把目录倒挂映射为 InvalidPlanConfig,人读文案保留原因
- profile.rs 三处统一用 membership_upgrade_rejection_error,并重导出该 rejection 类型
- api-server 补 400 + invalid_plan_config 映射断言
|
2026-10-05 19:23:00 +08:00 |
|
suzmii
|
386fe4b64f
|
Merge remote-tracking branch 'origin/master' into fix/run-preview-refresh-reload
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m10s
Project CI / Native shell tests (pull_request) Failing after 1m6s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m1s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m21s
Project CI / Frontend tests (pull_request) Successful in 2m21s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m32s
Project CI / Backend tests (pull_request) Successful in 7m35s
Project CI / Repository checks (pull_request) Successful in 5m52s
|
2026-10-05 19:17:50 +08:00 |
|
suzmii
|
96859666ff
|
Merge pull request 'AGC 运行画面点选:canvas 玩法上识别 Phaser 4 / three.js 的已登记素材(#612)' (#624) from feat/agc-runtime-picking-engines into master
Project CI / AI game creator shell Rust crates (push) Successful in 5m29s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m5s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m28s
Project CI / Backend tests (push) Successful in 9m14s
Project CI / Frontend tests (push) Successful in 4m4s
Project CI / AI game creator shell web tests (push) Successful in 3m36s
Project CI / Repository checks (push) Successful in 7m37s
Project CI / Native shell tests (push) Successful in 10m32s
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/624
|
2026-10-05 19:16:03 +08:00 |
|
suzmii
|
fa42cdb139
|
Merge pull request '修复在线游玩加载体验:加载期黑屏/空白与发行资源传输开销(#636)' (#639) from fix/game-play-loading 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/639
|
2026-10-05 19:13:44 +08:00 |
|
k88936
|
8788c47a97
|
修复(AGC模型): 锁定模型项不再进入 Tab 序列
- 去掉锁定项的 tabIndex,原因改由 aria-label 与 hover 提示暴露,避免键盘停在不可选项
- 移除锁定项失效的 :focus-visible 样式与旧注释
- 更新单测:断言锁定项不可 Tab 聚焦且 aria-label 带原因
|
2026-10-05 18:59:57 +08:00 |
|
k88936
|
9a00700447
|
修复(AGC模型): 添加协议字段并确保无可用模型时 unavailableModels 返回空数组
Project CI / Backend tests (pull_request) Failing after 1m3s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m16s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m23s
Project CI / Frontend tests (pull_request) Failing after 1m28s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m35s
Project CI / AI game creator shell web tests (pull_request) Failing after 3m56s
Project CI / Native shell tests (pull_request) Successful in 9m33s
Project CI / Repository checks (pull_request) Successful in 7m9s
|
2026-10-05 18:51:53 +08:00 |
|
suzmii
|
df221f4eb9
|
收口评审 P2:点选条款限定引擎档、对象名上限入边界、素材 id 格式写入 skill
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m29s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m6s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m50s
Project CI / Frontend tests (pull_request) Successful in 3m26s
Project CI / Backend tests (pull_request) Successful in 7m48s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m3s
Project CI / Repository checks (pull_request) Successful in 7m15s
Project CI / Native shell tests (pull_request) Successful in 9m30s
- 功能说明第 8 条「命中区域裁剪在画布内」限定为引擎档,并说明 DOM 档仍是元素矩形;证据表对应行同步对齐
- 功能说明「边界与非目标」新增一条:引擎档对象名超过 40 字符按取不到处理(有意保留),宿主侧标签上限另为 120
- SKILL.md「运行画面点选契约」第 3 条补一句:素材 id 不含空白与路径分隔符(localAssetId 由客户端生成)
- skill-pack 指纹同步(agc-web-game-development version 2026-08-26.42 与 sha256)
|
2026-10-05 18:31:59 +08:00 |
|
suzmii
|
3145ef472e
|
合并 origin/master(21c79f54a)到 feat/game-purchase
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 2m28s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 3m52s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 5m23s
Project CI / Repository checks (pull_request) Failing after 56s
Project CI / Frontend tests (pull_request) Successful in 3m7s
Project CI / Native shell tests (pull_request) Failing after 7m11s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m47s
Project CI / Backend tests (pull_request) Successful in 9m28s
- 冲突 docs/project-memory/shared-memory/decision-log.md:两侧都是在「# 决策记录」顶部新增条目,保留双份——本分支「2026-10-05 播放会话前缀在三处入口清空 Cookie」在前,master「2026-10-03 首页自动建项与 AI 项目命名解耦(Issue 599)」在后。
- 冲突 docs/project-memory/shared-memory/pitfalls.md:同为顶部新增条目,保留双份——本分支「2026-10-05 付费游戏播放会话前缀落在 /api/*」在前,master「2026-10-04 生成任务账本 taskType 维度与 v1 兼容」「2026-10-03 后台异步回填被进项目覆盖」在后。
- 其余逐处核对:master 本次只改了 apps/ai-game-creator-shell 与 docs(首页建项与 AI 命名解耦、AGC 标题栏项目标签、相关计划/记忆文档),与买断制付费功能文件无交集,全部吸收;master 未触碰 SpacetimeDB schema、钱包流水来源类型、游戏分发契约、边缘路由与生成绑定。
- 合并后回归核对:GameDistributionGame.price_mud_points 仍在结构体末尾且带默认值 0;migration 白名单仍含 game_distribution_purchase;RuntimeProfileWalletLedgerSourceType::GamePurchase(game_purchase)仍在。
|
2026-10-05 18:28:13 +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
|
c32097ab18
|
回写游戏买断制泥点付费真实栈验收证据并删除实施计划
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
主规范合同章「验收标准与证据」表逐行回写真实本地栈 E2E 与单元/组件门禁结果,缺证据的覆盖边界如实标注未覆盖
主规范合同章补充说明运行时证据来自人工验收脚本 check:game-distribution-purchase-e2e(76 PASS / 0 FAIL / 1 WARN),不在 CI 自动门禁内
主规范合同章「实现约束与已知风险」新增 E2E 人工脚本不在 CI 覆盖、上线前私有桶 E2E_REQUIRE_PRIVATE_BUCKET 复核两条
主规范合同章表头删除已废弃的实施计划链接
里程碑验收复选框勾选已满足项并补证据说明,新增「未覆盖边界」保持未勾选(管理员安全下架会话失效、多账号/多游戏混合并发)并注明原因
里程碑「证据要求」补充已执行的人工验收结果与唯一 WARN 说明,Status 保持 implemented-awaiting-runtime-acceptance
删除 docs/project-memory/plans/【实施计划】游戏买断制泥点付费与播放鉴权-2026-10-05.md 并同步 docs/README.md 条目为已实现、E2E 76 PASS、待用户验收、未部署
|
2026-10-05 18:19:36 +08:00 |
|
suzmii
|
9662b56fa6
|
补齐买断制付费验收脚本的免购买、并发与边界用例
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
- 作者本人免购买:详情有入口但 purchased=false、自购 400 GAME_PURCHASE_OWNER_EXEMPT 且余额与流水不变、可直接创建播放会话
- 管理员免购买:管理员令牌可直接创建播放会话并可玩;购买路径记录真实返回码(当前为用户鉴权前置 401,403 GAME_PURCHASE_ADMIN_NOT_ALLOWED 需带 admin 角色的用户令牌)
- 真并发购买:同一未购买账号同时发两个不同幂等键,断言无 5xx、只扣一次、流水与购买记录各 1 条、详情 purchased=true
- 审核员试玩待审付费版本:admin preview session 入口与包内资源同包可用、可反复创建不限次、钱包与购买记录不变
- 定价边界:priceMudPoints=1000001 被 400 拒绝且不落版本,0 与 1000000 可通过
- 下架后失效:旧播放会话入口与包内资源 404、公开详情与新建会话都关闭
- 购买记录/版本条数用 spacetime sql 直读本地表交叉验证,CLI 不可用时降级为 WARN
- 脚本头部写明这是人工验收脚本、不在 CI 自动门禁内,且需要 E2E_ADMIN_USER/E2E_ADMIN_PASSWORD
|
2026-10-05 18:17:18 +08:00 |
|
k88936
|
e90929057c
|
修复(会员补差): ceil_div 零分母不再静默返回 0
- 删除 denominator == 0 时的静默 0 元兜底,保留 debug_assert 并在 release 下除零 panic
- 与函数注释「零分母属程序员错误,应立刻暴露」保持一致,避免潜在少收金额
|
2026-10-05 18:15:36 +08:00 |
|
k88936
|
b8309eb3ae
|
重构(后台金额): 抽出统一的元金额格式化
- shared AdminFormat 新增 formatAdminCurrencyCents(分 → ¥x.xx)并从 components 导出
- AdminUserDetailDialog / AdminMembershipPlanPage / AdminRechargeOrderPage / AdminRechargeProductPage 删除各自重复的 formatMoney/formatPrice
- 补充 formatAdminCurrencyCents 单测,避免后台各页面金额格式漂移
|
2026-10-05 18:12:22 +08:00 |
|
suzmii
|
f7d3652878
|
同步游戏买断制泥点付费与播放鉴权文档闭环
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
主规范路由表新增 POST /games/{gameId}/purchase 行,写明幂等键、请求体与余额不足/作者自购/管理员令牌/价格变化错误口径
主规范路由表新增 POST /games/{gameId}/play-session 行,写明付费需登录、免费回公开入口与 { playUrl, expiresAt } 响应
主规范路由表新增 GET /game-distribution/play-sessions/{token}[/{assetPath}] 行,写明凭令牌、不读 Cookie、no-store、失效一律 404
主规范路由表更新 GET /games/{gameId} 行,补充 priceMudPoints 与 purchased,付费未购买时 currentVersion.entryUrl 为 null
主规范路由表更新发行网关行,当前公开版本 price_mud_points > 0 时统一 404
主规范合同 Status 由 proposed 改为 implemented(本地验证通过,待用户验收;未部署)
主规范收口价格上限 1_000_000 与免购买范围(作者本人 + 后台管理员令牌),删除正文悬置措辞并注明日期
主规范补充播放会话进程内会话、始终解析当前公开版本两条实现约束,记录后台待审预览前缀未清 Cookie 的同类风险
里程碑 Status 由 proposed 改为 implemented-awaiting-runtime-acceptance
docs/README.md 该合同/里程碑/实施计划条目描述改为已实现、本机真实栈 E2E 通过、待用户验收、未部署
|
2026-10-05 18:12:10 +08:00 |
|
suzmii
|
1e13563a5e
|
新增游戏买断制泥点付费真实本地栈 E2E 检查脚本
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
- 新增 scripts/check-game-distribution-purchase-e2e.mjs:覆盖付费游戏发布与审核、未购买用户无可播放入口且直连 404、购买扣泥点与幂等重放、播放会话可玩与重复进入不扣费、免费游戏回归、余额不足失败无副作用
- 脚本端口只读 .app/dev-stack.json 的实际地址,E2E_START_STACK=1 时自行拉起并收束本地 dev 栈
- 追加播放会话网关取证:伪造令牌 404、带平台 refresh Cookie 直连 403、经 dev 代理按前缀清空 Cookie 后仍可播放
- package.json 增加 check:game-distribution-purchase-e2e 别名
|
2026-10-05 18:08:35 +08:00 |
|
suzmii
|
d7c4f82d7d
|
修复自查发现的门禁与体验问题:格式、超时态语义、压缩 CPU 边界
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m48s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m3s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m33s
Project CI / Frontend tests (pull_request) Successful in 3m24s
Project CI / Backend tests (pull_request) Successful in 7m29s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m55s
Project CI / Repository checks (pull_request) Successful in 6m33s
Project CI / Native shell tests (pull_request) Successful in 9m0s
- 新增 Rust 测试补齐 cargo fmt;ESLint 按仓库约定收口:常量与解析函数拆到 platformGameLoadingSurfaceModel.ts,删除 GAME_PLAY_STARTUP_TIMEOUT_MS 常量别名(测试直接用共享常量)
- 共享加载面新增 stalled:宿主判定等待不再推进时停掉进度动画并把 aria-busy 置回 false(去掉与 role=status 重复的 aria-live)
- 后台试玩超时时传入 stalled,避免「一边转圈一边说超时」
- Accept-Encoding 权重参数名改为大小写不敏感(RFC 9110 §12.5.3),GZIP;Q=0 视为拒绝并补用例
- 发行资源压缩分级:≥2 MiB 改用 level 1(zlib 端实测约 1/3 耗时、压缩比差约 3%),小文件仍用 level 6
- 文档:主规范补压缩与条件请求契约(并写明 60 秒窗口与撤销窗口不放宽)、nginx README 修正 Pingora 压缩关闭时的口径、pitfalls 补 CPU 边界与措辞修正
|
2026-10-05 18:02:48 +08:00 |
|
k88936
|
6738cf1aa9
|
Merge remote-tracking branch 'origin/master' into feat/pricing-plan
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
|
2026-10-05 18:00:09 +08:00 |
|