k88936
|
4f3ef93098
|
游戏表保留 cover_asset_id 并标记退役
- GameDistributionGame 在原位恢复 cover_asset_id,注明退役、只占位不再写入,避免 SpacetimeDB 破坏性 schema 变更
- 新建与测试行构造补 cover_asset_id: None;migration.rs 注释与实施计划改成「保留退役」口径
- 重新生成 spacetime-client 该表绑定,补回 cover_asset_id 字段
|
2026-10-07 15:31:28 +08:00 |
|
k88936
|
0119a329aa
|
发布媒体上传标注整体缓冲的性能隐患
- game_distribution_media.rs 在 Field::bytes() 处补 TODO(perf),说明峰值约 2× part 与 field.chunk() 流式限长改法
|
2026-10-07 14:26:51 +08:00 |
|
k88936
|
f4582fe5b3
|
游戏分发建游/建版先校验 local_project_id 再上传媒体
- create_game 与 create_version 把 normalize_local_project_id 提前到 resolve_publish_media 之前,避免用户输入非法时提前返回、已上传的封面/截图成为孤儿对象
|
2026-10-07 14:07:52 +08:00 |
|
k88936
|
2fa7923362
|
合并 origin/master 到 feat/adapt-taonier-skill:保留陶泥儿退役链路并吸收 master 错误详情改动
Project CI / Backend tests (pull_request) Failing after 1m12s
Project CI / Native shell tests (pull_request) Failing after 3m48s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m43s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 6m39s
Project CI / Repository checks (pull_request) Failing after 1m0s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 6m51s
Project CI / Frontend tests (pull_request) Successful in 1m58s
Project CI / AI game creator shell web tests (pull_request) Failing after 54s
- commands/desktop.rs:按本分支「exports 全退役」保留删除,不回填 master 改动的 playtest 打包/读取/列举命令
- project/export.rs:保留本分支删除,旧导出实现已由 export/draft 陶泥儿与小工具链路替换
- useGameDistributionPublishForm.ts:保留本分支删除,发布表单已由 export/state 与 tabs/taonier 面板替换
- game_distribution_publish.rs:保留本分支新增的 owner 媒体读路由与图片直传辅助函数,删除 master 改动的封面生成与 AI 资料建议退役代码
- game_distribution_publish.rs:吸收 master 的错误详情改动(parse_error_payload、response_data、map_http_error、request_json、request_json_for_read、describe_distribution_request_failure、emit_publish_progress 及对应测试)
- resolve_preview_url:合并为本分支 owner_media_read_url 加错误日志
|
2026-10-07 12:57:59 +08:00 |
|
k88936
|
08771d39e8
|
媒体公开读授权按 objectKey 反解 gameId 改 O(1) 查找
- 从 GAME_DISTRIBUTION_MEDIA_PREFIX 后的首段反解 game_id,按主键读那一行核对媒体归属
- 不再逐行扫描全部游戏及其 screenshots_json
- 补充 key 布局(非本前缀、缺 gameId、缺文件名、多级路径)的单测
|
2026-10-07 12:09:20 +08:00 |
|
k88936
|
7aeac536e0
|
游戏分发媒体读写加固为先校验后上传并清理孤儿对象
- 图片 part 改按文件头嗅探 PNG/JPEG/WebP/GIF/AVIF,声明 image/svg+xml 之类主动内容一律拒绝
- 同源字节中转新增内容策略:游戏媒体只放行栅格类型,其余降级为 attachment,并统一加 nosniff
- 同源字节中转复用进程级 OSS HTTP 客户端,不再每次 reqwest::Client::new(),连接复用与超时一并生效
- upload_media_image 取 UploadedImage 所有权,去掉最多 8 MiB 的整段克隆
- 更新资料先按刚读到的游戏行做 revision CAS,再决定是否写图;事务失败或幂等重放时补偿删除本次新传对象
- 媒体内部前缀抽到 shared-contracts,供写路径与只读授权端共用同一常量
|
2026-10-07 12:09:09 +08:00 |
|
kdletters
|
8ceada8690
|
合并 codex/agc-error-convergence-20261004:交付核心以 master 新设计为准并保留分支错误明细
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 5m43s
Project CI / AI game creator shell Rust crates (push) Successful in 4m52s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 5m40s
Project CI / Frontend tests (push) Successful in 2m48s
Project CI / Backend tests (push) Successful in 7m14s
Project CI / AI game creator shell web tests (push) Failing after 3m50s
Project CI / Native shell tests (push) Successful in 8m27s
Project CI / Repository checks (push) Successful in 7m9s
冲突处理:交付合同/租约相关现场取 master(#608 重构),分支侧错误明细在可安全保留处回补
编译修复:direct_tool_bridge 回执结算失败正文、direct_patch 指纹读取、direct_delivery 终态读取按 Result 形状对齐
前端修复:DirectProjectChatView 取 master,其余缺失的错误正文 import/参数回补
重新生成 AuthServiceUnavailable 绑定以匹配 Rust 声明
|
2026-10-07 11:33:18 +08:00 |
|
k88936
|
fede8cc161
|
作品资料更新的幂等摘要纳入 game_id
- update_owner_game_metadata 的 request_digest 与 create_version 同口径,带上 game_id 作用域
- 幂等账本按 (owner, action, key) 归档不含 game_id,摘要不带作用域会把另一部作品的同资料更新当成重放
- 补跨作品摘要区分断言
|
2026-10-07 11:05:45 +08:00 |
|
k88936
|
d24a16ad02
|
发布资料 multipart 路由显式放行请求体上限
- create_game / create_version / update_owner_game_metadata 三条 multipart 路由补 DefaultBodyLimit
- 放行封面 + 最多 6 张截图 + metadata/boundary 余量,否则 Axum 默认 2 MiB 会在抽取前 413
- MAX_SINGLE_MEDIA_BYTES 提升为 pub(crate),补口径断言
|
2026-10-07 11:04:15 +08:00 |
|
k88936
|
9cd6357946
|
游戏分发媒体读新增 owner 作用域路由
- 新增 GET /api/game-distribution/my-games/{gameId}/media/read-url 与 .../media/read-bytes,需 bearer
- 判定 = gameId 属于当前登录主体且 objectKey 命中该作品当前行 cover_object_key/screenshots_json
- 抽出 game_media_object_keys 与换签/字节中转共用函数,公开读判定与响应形状不变
- 新增媒体键提取单测与 owner 路由挂载/鉴权断言
|
2026-10-07 10:26:37 +08:00 |
|
kdletters
|
594ac321bf
|
归一化 Claude Agent SDK 身份句,避免上游内容策略误拦
在 Anthropic Messages 代理转发前,把被上游内容策略误判的身份句替换为等价表述,其余字段原样透传
新增归一化单测:只改命中片段,保留 cache_control 等其它 system 形状
|
2026-10-07 08:17:23 +08:00 |
|
k88936
|
6ccb9f4571
|
AGC 陶泥儿面板文件草稿化与发布媒体直传
- 新增 export/state/taonier 状态层:字段校验、四命令失败载体、失败分类与 adapt/repair/fill 指令、600ms 自动保存与 2s 轮询
- 新增 tabs/taonier 面板:ArtifactsPane/FormCard/OnlineValuesCard/ConflictCard 与三个对话框,线上值并排显示与沿用动作
- 发布媒体改直传:草稿本地图读字节发 cover/screenshot part,空路径沿用线上 objectKey,幂等摘要纳入图片字节
- 退役 AI 资料建议/封面生成:删前端调用、Rust 命令与注册、api-server 路由与专属 DTO
- 删除旧 PublishPane、GameDistributionPublishFormView、GamePublishBlockedDialog、useGameDistributionPublishForm
- 新增 tests/taonierFields、taonierContract、taonierExport,check-config 与 dto parity 同步
|
2026-10-07 01:12:34 +08:00 |
|
k88936
|
b04aceb57d
|
AGC 陶泥儿打包链路落地与 exports 全退役
- 新增 vite-export-taonier skill:vite.config.taonier.mjs 构建到 dist-taonier,pack.mjs 产出存档根含 index.html 的 .export/taonier.zip
- skill pack 锁步登记:EXPECTED_SKILL_NAMES、AGC_SKILL_PACK_FILES、manifest.json sha 与版本、codex mock 名单
- 新增 export/draft/taonier 文件草稿模块:build:taonier 脚本发现、.export/taonier.json 注册表、四个 tauri 命令与产物读取入口
- 发布暂存改读固定 .export/taonier.zip,删除 phaser/vite 发布门与 exports 打包读取链路
- 删除 exports 初始化目录、exports/README.md 生成与渲染、playtest-package 打包/读取/列举命令
- 生成契约与 prompts 去掉 publish-package artifact 声明,run-trace 白名单与五处排除列表同步
- 同步 ts-rs 生成绑定与 export/generated 行尾空白豁免
|
2026-10-07 00:54:31 +08:00 |
|
k88936
|
d202c76099
|
游戏分发发布媒体改 objectKey 与 multipart 直传
- 契约:创建/编辑/建版请求去掉 `coverAssetId`,改为 `coverObjectKey` 与 `screenshots: (string|null)[]`,Rust 与 TS 同步。
- schema:`game_distribution_game` 删除 `cover_asset_id`;创建输入末尾追加 `cover_object_key`/`screenshots_json`;冻结资料截图改为 objectKey 数组并删除 `GameDistributionFrozenScreenshot`;同步迁移登记与生成绑定。
- 授权:删除按 assetId 的公开读授权,新增按 objectKey 的 `get_game_distribution_media_read_access` procedure;公开可见判定抽成 `game_distribution_game_is_publicly_visible`。
- api-server:三条写路径改收 `multipart/form-data`(`metadata` 文本 + `cover` + 重复 `screenshot`),新图直写项目快照桶、沿用图校验归属与数量;新增匿名 `GET /api/game-distribution/media/read-url` 与 `read-bytes`;幂等摘要覆盖图片字节。
- web:发布/编辑客户端改 FormData;封面与截图读取切到新读路由;移除发布前素材登记与 assetId 状态。
- AGC:发布命令先按 objectKey 做存在性校验以保持编译,multipart 直传改造留待 M3。
- 文档:实施计划与玩法链路合同章节同步新的 multipart 字段口径。
|
2026-10-07 00:30:26 +08:00 |
|
k88936
|
77126e06f9
|
抽取对象读签名与同源字节中转公共模块
- 新增 api-server::object_read:签名读地址、过期收敛、同源字节中转与错误映射
- assets.rs 的 read-url/read-bytes 改为复用该模块,授权判定仍留在素材域
- 移除 assets.rs 内重复的常量、作用域枚举与字节中转实现,行为不变
- 过期收敛单测随实现迁到 object_read
|
2026-10-07 00:10:05 +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 |
|
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 |
|
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
|
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 |
|
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
|
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
|
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 |
|
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 |
|
k88936
|
e90929057c
|
修复(会员补差): ceil_div 零分母不再静默返回 0
- 删除 denominator == 0 时的静默 0 元兜底,保留 debug_assert 并在 release 下除零 panic
- 与函数注释「零分母属程序员错误,应立刻暴露」保持一致,避免潜在少收金额
|
2026-10-05 18:15:36 +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 |
|
suzmii
|
d1bfe4c08b
|
修复游戏买断制付费的作者豁免、价格口径与契约可空性
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
- H1:购买事务在扣费前判定 `game.owner_user_id == user_id` 并失败关闭,领域 `resolve_game_purchase_decision` 新增 `is_owner` 标记返回 `OwnerCannotPurchase`(文案「作者本人无需购买」);api-server `map_purchase_error` 映射为 400 `GAME_PURCHASE_OWNER_EXEMPT`;购买路由按角色显式拒绝管理员令牌(403 `GAME_PURCHASE_ADMIN_NOT_ALLOWED`),管理员免购买不扣费。
- M1:`version_detail_payload` 的历史版本价格改为 `frozen_version_price_mud_points(version).unwrap_or(0)`,与待审列表及审核通过后生效的游戏行价格统一;同步把既有断言改为「历史版本缺 `priceMudPoints` 按免费(0)」。
- M2:`shared-contracts::GameDistributionVersionSummary.entry_url` 改为 `#[serde(default)] Option<String>`,与公开投影对未购买者下发的 `entryUrl: null` 一致。
- M3/L5:SpacetimeDB 购买事务改为复用 `module_game_distribution::resolve_game_purchase_decision`(新增 `game_distribution_visibility` 与 `resolve_game_distribution_purchase_decision` 包装),可购买性口径统一为「活动版本存在且 `status = published`」(复用 `public_game_distribution_version`),删除事务内联判定。
- 测试:内存领域作者自购拒绝;SpacetimeDB 购买判定五分支(免费 / 未公开 / 版本未公开 / 已拥有 / 作者自购)、事务源扫描(先判定后扣费、公开投影口径)、审核通过时历史版本价格生效为 0;api-server 管理员令牌 403、公开投影 `entryUrl: null` 可被 Rust DTO 解析、错误映射补作者豁免。
- `scripts/check-game-distribution-dto-parity.mjs` 增加可空性一致性比对(TS `| null` ⟺ Rust `Option`,允许 `?` 表示可省略),已用负例验证能拦住同类漂移。
- 同步更新 docs/【后端架构】server-rs与SpacetimeDB数据契约:登记作者豁免 / 管理员 403 / 可玩性口径 / 历史价格按 0;顺带修复 `module-game-distribution` 与 `spacetime-module` 既有未格式化行。
|
2026-10-05 18:00:03 +08:00 |
|
k88936
|
87a3794423
|
文档(会员契约): 后台改档请求并发上限不再硬编码 128
- AdminUpsertProfileMembershipPlanRequest.concurrentJobLimit 改为引用后端下发的 unlimitedConcurrencyThreshold
- 同步重新生成 ts-rs 绑定
|
2026-10-05 17:56:02 +08:00 |
|
k88936
|
8e9d2389e0
|
文档(会员契约): 并发上限不再硬编码 128 哨兵
- ProfileMembershipPlanResponse.concurrentJobLimit 改为引用后端下发的 unlimitedConcurrencyThreshold
- 同步重新生成 ts-rs 绑定,避免哨兵值变更时注释误导消费方
|
2026-10-05 17:54:38 +08:00 |
|
suzmii
|
d40df89e2c
|
修复付费游戏播放会话在边缘转发 Cookie 导致 403 不可玩
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
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
- nginx:三份模板在通用 /api location 之前新增 location ^~ /api/game-distribution/play-sessions/,代理头与通用 /api 一致并清空 Cookie
- nginx:^~ 保证该前缀不被正则 location ~ ^/api(?:/|$) 抢先;只匹配带尾斜杠的前缀,创建会话端点继续走通用 /api 并保留 Cookie
- pingora:新增 RouteDecision::PlaySessionGateway,走 api 上游并同样套用 api 限流分组、大小上限与维护闸
- pingora:抽出 route_clears_cookie,发行入口 ReleaseGateway 与播放会话入口在上游代理阶段统一清空 Cookie
- pingora:classify_path 在通用 /api 分支之前命中播放会话前缀,并新增播放会话路由、Cookie 清除与保护等级用例
- 路由矩阵:新增 play_sessions_gateway 用例,声明清空 Cookie 与 protectionClass api
- 门禁 check:nginx-spa-routes:新增播放会话前缀断言——三份模板存在 ^~ location、块内清空 Cookie、代理头齐全且排在通用 /api location 之前
- 门禁 check:pingora-route-parity:新增断言——平台内容网关用例必须清空 Cookie 且不得复用通用 /api location,Rust 播放会话分支必须排在通用 /api 之前并由 route_clears_cookie 清理
- 门禁 check:pingora-gateway-smoke:新增真实网关用例——播放会话前缀转发到 api 上游并清空 Cookie、创建会话端点保留 Cookie
- dev:vite.config.ts 在 /api/game-distribution 规则之前新增同名前缀代理并清除 Cookie
- 文档:同步 Pingora 试点文档、本地开发运维文档、deploy/nginx/README 与 shared-memory 决策/踩坑记录
|
2026-10-05 17:53:51 +08:00 |
|
k88936
|
759bcf98a8
|
文档(会员契约): 澄清 status 兜底只作用于 Rust 客户端
- ProfileMembershipResponse.status 注释改为“Rust 反序列化未知取值按 active 兜底,TS 侧不归一化”
- 同步重新生成 ts-rs 绑定,避免 Web 消费方误以为前端也会 fail-open
|
2026-10-05 17:53:23 +08:00 |
|
suzmii
|
c732a3f851
|
实现游戏买断制泥点付费的 api-server HTTP 层、公开投影与播放鉴权
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/api-server/src/runtime_profile.rs:钱包流水来源类型补 GamePurchase 分支并导入 game_purchase 常量,修复 non-exhaustive match 编译错误。
- server-rs/crates/api-server/src/modules/game_distribution.rs:创建版本接受并校验 priceMudPoints(复用 normalize_game_price_mud_points,越界 400),随版本冻结资料一起落库。
- server-rs/crates/api-server/src/modules/game_distribution.rs:新增 POST /api/game-distribution/games/{gameId}/purchase(require_bearer_auth + 必填 Idempotency-Key,请求体 { expectedPriceMudPoints }),经 facade 原子扣费并返回 GameDistributionPurchaseResponse。
- server-rs/crates/api-server/src/modules/game_distribution.rs:购买错误映射——余额不足 400 INSUFFICIENT_MUD_POINTS、价格已变化 409、免费游戏 400、游戏未公开或不存在 404、缺幂等键 400。
- server-rs/crates/api-server/src/modules/game_distribution.rs:新增 POST /api/game-distribution/games/{gameId}/play-session;免费作品直接回既有公开入口,付费作品接受管理员令牌(沿用现有 admin 鉴权,免购买)与用户令牌,校验已购买 / 作者本人,未登录 401、未购买 403,签发绑定 gameId + userId 的 2 小时会话。
- server-rs/crates/api-server/src/modules/game_distribution.rs:新增 GET /api/game-distribution/play-sessions/{token}[/{assetPath}] 网关,无登录中间件、凭令牌读取,能解析平台刷新会话 Cookie 时 403,令牌过期 / 不存在、游戏下架或封禁、缺少有效公开版本一律 404,复用发行包读取与 CSP/MIME/nosniff/CORP 并全程 no-store。
- server-rs/crates/api-server/src/modules/game_distribution.rs:公开发行网关 releases/{gameId} 在当前公开版本 price_mud_points > 0 时返回 404,付费作品只能走播放会话路径。
- server-rs/crates/api-server/src/modules/game_distribution.rs:game_payload 发出 priceMudPoints 与 purchased 默认值;public_game_payload 按查看者解析 purchased,并对未购买且非作者 / 非管理员的付费作品把 currentVersion.entryUrl 置 null;公开详情接口可选鉴权读取当前用户,坏令牌按匿名、购买态读取失败按未购买。
- server-rs/crates/api-server/src/modules/game_distribution.rs:private_version_payload 发出该版本冻结价(历史缺字段为 0);作者 / 管理员版本详情的 game payload 按「冻结价优先、否则游戏行价」。
- server-rs/crates/api-server/src/state.rs:新增付费游戏播放会话的进程内存储与读写方法,读取时清理过期会话。
- server-rs/crates/api-server/src/admin.rs:抽出 resolve_admin_session,新增 try_authenticate_admin_from_headers 供同时接受管理员 / 用户令牌的端点复用,require_admin_auth 的校验与鉴权行为不变。
- server-rs/crates/spacetime-client/src/active.rs:补出 GameDistributionPurchaseRecordInput 的 re-export。
- docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md:登记购买、播放会话、公开详情入口隐藏与公开发行网关的 HTTP 契约。
- 补齐 api-server game_distribution 定向测试:价格校验 400、公开投影入口门禁(未购买 / 已购买 / 作者 / 管理员 / 免费)、冻结价回读、购买错误映射、购买路由鉴权与幂等键、播放会话网关 Cookie / 未知与过期令牌 / 路由挂载。
|
2026-10-05 17:32:40 +08:00 |
|
suzmii
|
3206f8f49b
|
修复在线游玩加载体验:加载期黑屏/空白与发行资源传输开销
- packages/shared 新增共享游戏加载面 PlatformGameLoadingSurface:封面/标题 + 动效进度 + 按时长推进的阶段文案(准备/资源/引擎)+ 慢加载提示,附用例
- 网页游玩页用共享加载面替换近黑壳上的一行小字,加载上限改为共享常量 PLATFORM_GAME_LOADING_TIMEOUT_MS
- 后台审核试玩补加载面、20 秒超时与「重新创建试玩会话」入口,新会话重置加载态;补两条用例
- 发行网关(api-server)对文本类发行资源按 Accept-Encoding 下发 gzip,并下发强 ETag、命中 If-None-Match 返回 304;补 5 条 Rust 用例
- E2E 脚本 check-game-distribution-ops-rollback-e2e 补压缩/Vary/ETag/304/不接受 gzip 四条断言
- 同步 pitfalls、开发运维文档、nginx README 与两份里程碑记录
|
2026-10-05 17:14:32 +08:00 |
|
suzmii
|
80fd5a9fea
|
新增游戏买断制泥点付费领域规则、SpacetimeDB schema、钱包来源与 Rust DTO
Project CI / Backend tests (pull_request) Failing after 19s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Failing after 4m10s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Failing after 4m18s
Project CI / Repository checks (pull_request) Failing after 26s
Project CI / AI game creator shell Rust crates (pull_request) Failing after 5m5s
Project CI / Frontend tests (pull_request) Successful in 3m48s
Project CI / AI game creator shell web tests (pull_request) Successful in 4m4s
Project CI / Native shell tests (pull_request) Failing after 8m31s
- server-rs/crates/module-game-distribution:新增价格校验 normalize_game_price_mud_points(0..=1000000,0 为免费)、购买资格 resolve_game_purchase_decision、GamePurchaseSnapshot 与 game_purchase_id(前缀 gdpurchase_);GameSnapshot/GameVersionSnapshot 增加 price_mud_points,审核通过时随版本价格生效;新增购买服务方法与纯内存测试。
- server-rs/crates/spacetime-module/src/game_distribution.rs:GameDistributionGame 末尾追加 #[default(0u64)] price_mud_points;新增私有表 game_distribution_purchase(purchase_id 主键 + user_id/game_id btree 索引);新增 purchase_game_distribution_game_and_return(同事务校验可见性/价格 CAS/未购买并原子扣费、幂等收据 action=purchase)与只读 get_game_distribution_purchase_and_return;approve 在同一事务内把冻结资料 priceMudPoints 生效到游戏行;公开游戏投影带出 priceMudPoints。
- server-rs/crates/spacetime-module/src/runtime/active/profile.rs:新增 consume_profile_wallet_points_for_game_purchase 复用通用钱包写入路径(来源类型 game_purchase、流水 ID game_purchase:{userId}:{gameId}、metadata_json 记 kind/gameId);profile_wallet_balance 提升为 pub(crate)。
- server-rs/crates/spacetime-module/src/migration.rs:迁移表白名单登记 game_distribution_purchase。
- server-rs/crates/module-runtime/src/domain.rs:RuntimeProfileWalletLedgerSourceType 追加 GamePurchase 变体与 game_purchase 文案,未改 profile_wallet_ledger 表结构。
- server-rs/crates/shared-contracts:新增 PROFILE_WALLET_LEDGER_SOURCE_TYPE_GAME_PURCHASE;公开游戏摘要/详情增加 priceMudPoints 与 purchased;GameDistributionPrivateVersion 与 GameDistributionCreateVersionRequest 增加 priceMudPoints;新增 GameDistributionPurchaseRequest/GameDistributionPurchase/GameDistributionPurchaseResponse/GameDistributionPlaySessionResponse。
- server-rs/crates/spacetime-client:新增购买与回读 typed facade、GameDistributionPurchaseRecord 与 row mapper,GameDistributionGameRecord 带出 price_mud_points,钱包来源 mapper 支持 GamePurchase。
- docs/【后端架构】server-rs与SpacetimeDB数据契约-2026-05-15.md:登记 price_mud_points、game_distribution_purchase 与 game_purchase 流水来源。
- 重新生成 SpacetimeDB Rust 绑定(购买表/过程与价格字段)。
|
2026-10-05 17:02:56 +08:00 |
|
k88936
|
bc3e36ff33
|
重构(会员契约): 会员结构体改用 ts-rs 生成类型
- shared-contracts 为 10 个会员结构体补 ts_rs::TS / ts(export),64 位整数字段补 ts(type = "number") 对齐前端 number
- 新增 10 个生成绑定;packages/shared 与 admin-web 改为 re-export 生成类型,仅 kind / status 等前端收窄联合用 Omit 组合保留
- 同步设计文档 §2.5 与决策日志
|
2026-10-05 15:51:07 +08:00 |
|
k88936
|
0930e402be
|
修复(会员错误码): 修正 ProductIdUnparseable 拼写
- module-runtime 变体 ProductIdUnparsable 改名为 ProductIdUnparseable,wire 串 product_id_unparsable 同步改为 product_id_unparseable(本 PR 未上线,不留兼容)
- 同步 spacetime-module 拒绝点、spacetime-client mapper 与 api-server 测试引用,并重新生成 SpacetimeDB 绑定
- 同步设计文档 §5.8 与决策日志
|
2026-10-05 15:32:19 +08:00 |
|
k88936
|
42c4cacf72
|
修复(会员契约): 响应 token 反序列化前向兼容
- shared-contracts 为会员响应 DTO 的 plan / status / cycle_kind / model_access 字段加 deserialize_with,未知取值 fail-open 兜底到已知最高档,避免 AGC Tauri shell 等旧 Rust 客户端因后端新增 token 整包解析失败
- 入参 DTO 保持严格拒绝,不改枚举自身 Deserialize,避免 Unknown 变体污染入参
- 补响应兼容与入参严格测试;同步设计文档 §2.5 与决策日志
|
2026-10-05 15:11:47 +08:00 |
|
k88936
|
c85da3a983
|
修复(AGC模型): 档位无可用模型改用独立错误码
- module-runtime 新增 MODEL_UNAVAILABLE / MODEL_UNAVAILABLE_FOR_TIER 常量,NoModelForTier.code() 由共用 MODEL_UNAVAILABLE 改为 MODEL_UNAVAILABLE_FOR_TIER(仍 503),与单个模型不可用的 422 区分
- 更新 resolve_error_codes_are_stable 与 api-server llm 单测;收窄 llm/model_access 模块注释
- 同步设计文档 §11.4 与决策日志
|
2026-10-05 15:11:06 +08:00 |
|
k88936
|
c3866b4267
|
修复(后台邀请码): 拒绝补机器可读错误码走 400
- module-runtime 新增 RuntimeProfileInviteCodeAdminErrorCode(invalid_field / in_use),两个后台邀请码 procedure 结果末尾追加 error_code
- module 侧用 ProfileInviteCodeAdminProcedureError 在拒绝点赋码,字段校验统一 invalid_field、被他人占用归 in_use
- spacetime-client mapper 有码走 ProcedureRejected,并把 api-server 映射注释收窄为「带 typed code 的四条链路」
- 重新生成 SpacetimeDB 绑定;补 client 与 api-server 单测;同步设计文档 §5.8 与决策日志
|
2026-10-05 14:22:39 +08:00 |
|
k88936
|
f1a6c1eaac
|
修复(公历换算): days_from_civil 全量改用 i64 运算
- i32 年份区间内 era * 146_097 会超过 i32::MAX,debug 下 panic、release 下静默回绕
- 年、月、日中间量提升到 i64,返回类型仍是 i64;补 i32::MIN/MAX 边界回归测试
|
2026-10-05 14:05:07 +08:00 |
|
k88936
|
4f3faa04b5
|
修复(后台兑换码): 管理拒绝补机器可读错误码走 400
Project CI / Backend tests (pull_request) Failing after 53s
Project CI / Native shell tests (pull_request) Failing after 3m51s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m25s
Project CI / Frontend tests (pull_request) Failing after 48s
Project CI / AI game creator shell web tests (pull_request) Failing after 43s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m17s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m6s
Project CI / Repository checks (pull_request) Successful in 4m37s
- module-runtime 新增 RuntimeProfileRedeemCodeAdminErrorCode(not_found / invalid_field / allowed_users_required),后台兑换码增改与列表 procedure 结果末尾追加 error_code
- module 侧用 ProfileRedeemCodeAdminProcedureError 在拒绝点赋码,字段校验统一 invalid_field、私有码缺用户 allowed_users_required
- spacetime-client 后台 mapper 有码走 ProcedureRejected,api-server 由此返回 400 而不是 502
- 重新生成 SpacetimeDB 绑定;补 client 与 api-server 单测;同步设计文档 §5.8 与决策日志
|
2026-10-05 12:35:55 +08:00 |
|
k88936
|
cc0c07223c
|
重构(会员契约): 充值中心会员状态改用强类型 token
- ProfileMembershipResponse.status 由裸 String 改为 ProfileMembershipStatusToken,与前端 ProfileMembershipStatus 对齐
- BFF 直接用 From<RuntimeProfileMembershipStatus> 转换,测试改用具名枚举
|
2026-10-05 12:22:28 +08:00 |
|
k88936
|
4bd080eff5
|
修复(LLM目录契约): 响应枚举未知取值前向兼容
- LlmModelsResponse 内 agentMode / protocol 遇到未知 token 回退 Codex / 由 agentMode 推导默认协议,不再让旧客户端整份反序列化失败
- 输入校验仍走严格 parse;补未知 token 用例
|
2026-10-05 12:19:15 +08:00 |
|
k88936
|
c7150b590c
|
修复(LLM目录契约): protocol 缺省改为按 agent_mode 推导
- LlmModelSummary/LlmUnavailableModel 反序列化缺失 protocol 时取 agent_mode 的默认协议,不再一律 openai_responses
- 补 cc / anthropic 别名 / 显式 protocol 用例;同步生成绑定注释
|
2026-10-05 12:18:05 +08:00 |
|
k88936
|
7579213bea
|
清理(AGC模型): 删除无档位校验的遗留 resolver
- 移除 AgcModelCatalog::resolve / resolve_requested,统一走带会员档位的 resolve_requested_for
- validate 内联默认项检查,测试改用 resolve_requested_for
|
2026-10-05 12:15:58 +08:00 |
|
k88936
|
6d9125586a
|
文档(AGC模型): access 字段注释改为访问级别
- AdminAgcModel.access 与 AgcModel.access 的注释不再写成「会员档位」,避免与会员 plan 档位混淆
|
2026-10-05 12:01:43 +08:00 |
|
k88936
|
8bc48e9e61
|
修复(会员账期): 北京时间年份越界先收口再进历法换算
- beijing_local_micros 增加 ±292_278 年范围检查,避免 days_from_civil 内部 i32 乘法溢出
- 补充 10_000_000 年等溢出用例
|
2026-10-05 12:01:32 +08:00 |
|
k88936
|
0c9a16ba1a
|
修复(AGC模型): 未知权限档反序列化失败开放为 basic
- AgcModelAccess 将 Basic 放到最后一个变体并加 #[serde(other)],未知 access 不再让整份目录解析失败
- 补充未知 access 反序列化回退 Basic 的单测
|
2026-10-05 12:01:12 +08:00 |
|
k88936
|
a48b7f8de8
|
Merge remote-tracking branch 'origin/master' into feat/pricing-plan
Project CI / Backend tests (pull_request) Failing after 48s
Project CI / Native shell tests (pull_request) Failing after 3m50s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m21s
Project CI / Frontend tests (pull_request) Failing after 47s
Project CI / AI game creator shell web tests (pull_request) Failing after 39s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m6s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m23s
Project CI / Repository checks (pull_request) Successful in 6m31s
# Conflicts:
# docs/project-memory/shared-memory/decision-log.md
|
2026-10-05 10:50:30 +08:00 |
|