k88936
|
7bcef53494
|
合并 origin/master 到 feat/adapt-xhs-skill:发布表单吸收平台版本号与买断定价,并合入播放会话网关与导出 Skill 更新
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m56s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m16s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m24s
Project CI / Repository checks (pull_request) Failing after 59s
Project CI / Backend tests (pull_request) Successful in 8m46s
Project CI / Frontend tests (pull_request) Successful in 2m31s
Project CI / AI game creator shell web tests (pull_request) Failing after 2m27s
Project CI / Native shell tests (pull_request) Successful in 6m17s
- 发布表单 hook 保留本分支的 hook + 视图拆分,移植 master 的平台版本号回读(nextVersionNumber)、买断定价状态与提交校验,删除由工程内部版本派生的 projectVersion
- GameDistributionPublishFormView 接入只读「项目版本」与共享 PlatformGamePricingField,版本号未知时禁用提交
- DirectProjectComposer 同时保留本分支的草稿回填 / 回写 props 与 master 的 actionsPortalTarget 挂点
- 发布表单测试改用平台版本号 mock(nextVersionNumber: 1),补齐买断定价与缺省版本号禁用用例,并修正 Promise 类型标注
- decision-log.md 保留双方新增条目(小红书导出与 Skill 安装工具 + 播放会话前缀清 Cookie)
|
2026-10-06 23:28:57 +08:00 |
|
k88936
|
3e6d0f39e5
|
合并 origin/master 到 feat/adapt-xhs-skill:发布入口迁入导出产物面板并吸收发布绑定、内部版本与上传进度
Project CI / Backend tests (pull_request) Failing after 18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m18s
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 4m20s
Project CI / Repository checks (pull_request) Failing after 33s
Project CI / Frontend tests (pull_request) Successful in 3m7s
Project CI / AI game creator shell web tests (pull_request) Failing after 2m55s
Project CI / Native shell tests (pull_request) Successful in 8m39s
- 陶泥儿 tab 发布面板去掉前端灰度:删除 readGamePublishAvailability 调用、发布权限占位与对应测试 mock,与 master 删除原生灰度命令保持一致,只在项目清单就绪前显示「正在读取项目清单」
- App.tsx 保留本分支导出产物面板架构,发布入口不再挂 Direct 聊天头;useTaonierTab 收敛 allowed/availabilityPending 状态并同步注释
- 发布表单 hook 合并本分支表单状态与 master 的发布绑定回读、AGC 工程内部版本派生、线上最近提交与上传进度阶段
- GameDistributionPublishFormView 接入发布状态面板、只读「项目版本」标签、发布阶段步骤与「更新游戏」等文案
- 合并发布表单与发布反馈测试:恢复封面/试玩包断言,补 readGameDistributionPublication mock
- agc-skills/manifest.json 取本分支新增的 platform-abstract、vite-export-xhs-minitool 与 master 的三处 sha256,version 提升到 2026-08-26.66
- decision-log.md 保留双方新增条目;技术方案文档补回双方新增章节;玩法链路文档取 master 重写后的发行合同
|
2026-10-06 20:01:16 +08:00 |
|
lhk229
|
256e6fe346
|
清理已合入的GameAgent时间上限临时文档
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m51s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m48s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m28s
Project CI / Backend tests (pull_request) Successful in 9m21s
Project CI / Frontend tests (pull_request) Successful in 3m41s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m28s
Project CI / Repository checks (pull_request) Successful in 7m2s
Project CI / Native shell tests (pull_request) Successful in 8m45s
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 7m15s
Project CI / AI game creator shell Rust crates (push) Successful in 4m34s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m15s
Project CI / Backend tests (push) Successful in 8m36s
Project CI / AI game creator shell web tests (push) Successful in 3m48s
Project CI / Native shell tests (push) Successful in 9m30s
Project CI / Repository checks (push) Successful in 7m41s
Project CI / Frontend tests (push) Successful in 2m57s
删除已完成的里程碑规范与实施计划
移除主规范中的临时文档链接,保留现行合同与验证边界
|
2026-10-06 11:17:10 +01:00 |
|
lhk229
|
9f1c5df446
|
规划移除GameAgent宿主运行时间上限 (#652)
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 Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/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 web tests (push) Has been cancelled
补充移除累计执行与整轮墙钟上限的行为规范
新增里程碑及实施计划,明确保留独立超时与生命周期控制
明确删除退役代码并限制旧配置和执行账本的数据迁移范围
Reviewed-on: #652
Co-authored-by: lhk <ink29535@proton.me>
Co-committed-by: lhk <ink29535@proton.me>
|
2026-10-06 18:13:39 +08:00 |
|
k88936
|
f3f52dc5e0
|
小红书导出技能:Chrome 61 能力改为硬性 ERROR,pack 自带白名单
- validate.mjs 恢复 CSS_UNSUPPORTED_PATTERNS / MODERN_RUNTIME_API,命中判 ERROR
- 删除「基线层 + 增强层」写法,references 明确 Chrome 61 为硬基线
- pack.mjs 复制白名单与遍历实现,不再 import validate.mjs
- SKILL.md 参数表补 validate / pack / vite.config 的默认值
- 修正 decision-log 中与本次相反的旧结论
|
2026-10-06 18:03:00 +08:00 |
|
k88936
|
727aae5844
|
AGC 陶泥儿发布表单内联进左栏并把状态提升到面板根
- 陶泥儿 tab 改为左右两栏:左半内联发布资料表单,右半第二个会话 chatbox
- 去掉「发布到游戏广场」二次跳转与弹窗表单,主行动改为内容末尾的橙色「打包并发布」
- 打包并发布一次点击先按需构建打包(沿用进度 / 阻断弹窗),成功后直接提交发布
- 抽出 useGameDistributionPublishForm 与 GameDistributionPublishFormView,弹窗与内联共用同一份表单
- 发布表单状态提升到面板根 useTaonierTab,切 tab 不丢已填资料;只在首次进入陶泥儿 tab 时初始化
- 同步更新发布反馈用例与玩法链路文档
|
2026-10-06 17:48:58 +08:00 |
|
k88936
|
a96c0e6209
|
AGC 小红书导出:validate 去 strict 与增强层告警,pack 加落点预警
- validate.mjs:scanJsSyntax 先 stripJsNoise 剥注释与字符串,`"#e8f4ff"` / `'#hit'` 不再误判为 ES2018
- validate.mjs:删除 MODERN_RUNTIME_API、CSS_MODERN_PATTERNS / CSS_MODERN_FEATURE 与 --strict,退出码只由 ERROR 决定
- pack.mjs:--zip-out 相对 cwd 且落在 <cwd>/.export/ 时打 workdir 警告,打印 cwd 与绝对落点
- SKILL.md:产物为项目根 .export/xhs-minitool.zip,game/ 子工程写 ../.export/...;参数表去掉 --strict
- 测试:增强层放行、JS 噪音不误报、真私有字段仍报、warning 也退出 0、workdir 预警
- manifest:vite-export-xhs-minitool 指纹与 version 同步到 2026-08-26.56
- decision-log.md:记录本次 validate/pack 收敛
|
2026-10-06 17:09:49 +08:00 |
|
k88936
|
df744ae155
|
新增 agc_install_skill_resource:宿主直落 Skill 附件,复用写入合同门
- 新增内置 MCP 工具 agc_install_skill_resource(skillName/relativePath/destinationPath),宿主直接读 AGC_SKILL_PACK_FILES 已审核字节
- 组装成 agc_write_file 的 {path,content} 转发客户端工具桥,复用同一份合同、lease、项目写锁与保护面校验
- read/install 共用 skill_resource_relative_path_is_unsafe;模型自带正文无旁路,正文不过模型上下文,不依赖原生 cp 审批
- direct-tools.json 增补工具描述与 destinationPath,direct.json engineering 指引改用本工具复制 Skill 文件
- 新增两条 install_skill_resource 测试并登记工具目录;同步技术方案与 decision-log
|
2026-10-06 16:47:32 +08:00 |
|
k88936
|
58f8c2065f
|
AGC 小红书导出 skill:测试按模块命名,取舍记录改回清单
- 隐藏测试 .vite-config.test.mjs 重命名为 .vite.config.xhs-minitool.test.mjs,与 pack.mjs → .pack.test.mjs、validate.mjs → .validate.test.mjs 的命名口径一致;
- .selective_rule.txt 去掉日期段落,把「二次清理」的条目并进 SKILL.md / zip-artifact-spec.md 对应条目,恢复为逐文件「删除与去处」清单;
- decision-log 补记 dist 收尾归 Vite 插件、pack 只读打 zip 的决策、失败语义与验证口径;
- skill-pack 指纹无需重算:本次改动均为隐藏文件与文档,manifest 仍为 2026-08-26.51。
|
2026-10-06 16:21:19 +08:00 |
|
k88936
|
eccaa5f79c
|
回退 sandbox 启动失败诊断日志,恢复 application.log 默认脱敏
- 回退 6311bb583:移除 sandbox 启动失败时采集子进程 stdout/stderr 的宿主日志及保留绝对路径的变体;
- application.log 恢复对所有行统一脱敏绝对路径的既有行为;
- 真实 npm 启动故障改从宿主 Node 环境修复,不改日志代码。
|
2026-10-06 15:41:58 +08:00 |
|
k88936
|
6311bb5837
|
为 sandbox 启动失败补保留源路径的宿主诊断日志
- `command.exec` 在 sandbox-ready 失败时先取走子进程 stdout/stderr,再终止受控进程组,避免 `Child` 回收时丢掉 bwrap/trampoline 的真实报错;
- 采集结果在有界时间(2s)和字节(8 KiB/流)内读空;新增 `sanitize_diagnostic_message_preserving_paths`、`append_application_log_line_preserving_paths` 与 `app_log_with_paths!`,只做凭据脱敏、保留绝对路径(bwrap `Can't find source path` 的路径就是唯一证据),写入宿主 `application.log`;
- 默认 `sanitize_diagnostic_message` 仍整行脱敏绝对路径,新增项按 `target_os = "linux"` 门控;诊断只进宿主诊断包,不进入模型可见错误、command log、receipt 或 Agent DB;
- 新增 `sandbox_launch_diagnostics_keep_source_paths_and_redact_secrets`,覆盖源路径保留、凭据脱敏与空白流不产出行;
- `pitfalls.md` 记录 sandbox 启动失败丢弃子进程 stderr 的排障经验。
|
2026-10-06 15:30:36 +08:00 |
|
suzmii
|
d2e05dbeb7
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
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 5m24s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m14s
Project CI / Frontend tests (pull_request) Successful in 3m48s
Project CI / Backend tests (pull_request) Successful in 8m5s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m0s
Project CI / Repository checks (pull_request) Successful in 7m30s
Project CI / Native shell tests (pull_request) Successful in 9m44s
合并 master be9f74f42(付费游玩泥点付费规范 #635 等):保留双方条目/内容
- 唯一冲突:`docs/project-memory/shared-memory/pitfalls.md` —— 本分支 2 条(2026-10-05「PR #607 复核修复」+「模型菜单的观感是组件自带的共享样式面」)在前,master 新增 2 条(「给 shared-contracts 请求 DTO 加字段」+「付费游戏播放会话前缀落在 /api/*」)紧随其后,**两侧 4 条都保留**(grep 逐条命中 1)
- 其余 286 个文件自动合并(master 侧含 server-rs / admin-web / 主站 / vite.config.ts 等,与本分支不重叠;`styles.css` 也是自动合并、无冲突)
- 门禁(本轮只合并、未改内容):`vitest run appSurface + chatDialogFrameLayout + conversationModelSelect` **258 passed / 9 skipped**;`npm run agc:typecheck` pass 3 / fail 0;`npm run check:encoding` 5418 files;`git diff --check` rc=0;prettier 已对合并后的 pitfalls 重新折行
|
2026-10-06 15:19:31 +08:00 |
|
k88936
|
af19af0a2f
|
清掉错误类型相关的过时文档
- 删两份 ADR:`AGC命令错误结构化与错误报告口径`、`AGC认证失败的JS侧载体与抛出时机`;错误通道的现行口径只留在代码与该专题技术方案里;
- 删导出面板的【实施计划】与【里程碑】两份计划,落地情况回到技术方案里一句话;
- `docs/README.md` 去掉对上述四份的链接,技术方案里的失败通道段落跟着删;
- `decision-log` 去掉 2026-10-01 那一段,2026-10-05 那段的标题与四条决策改成「同步细节与文案归属」;`pitfalls` 去掉两份 ADR 的引用。
|
2026-10-06 14:32:16 +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
|
25315299a5
|
AGC 发布入口迁到导出产物面板陶泥儿 tab
- 新增 useTaonierTab:接管试玩包导出、发布灰度、构建进度与阻断反馈、发布资料面板开关,状态挂在导出面板根上,切 tab 不丢
- usePanel 接入 taonier slice,TAB_PAGES 把 taonier state 交给 TaonierPage
- 重写 tabs/taonier/Page.tsx:渲染「发布到游戏广场」入口,并按 state 挂发布资料面板与进度/阻断弹窗
- useDirectProjectManifest 额外返回完整 manifest,供陶泥儿 tab 复用
- App.tsx 移除发布相关 state、灰度 effect、requestGamePublish、发布面板与两条弹窗的挂载,以及 export_local_project_package invoke
- 移除 DirectProjectChatHeader 的「发布到游戏广场」按钮,并删掉 DirectProjectChatView / DirectProjectChatBox 的 onRequestGamePublish 透传
- gamePublishFeedback 用例改为从导出面板陶泥儿 tab 进入发布;directProjectChatHeader 用例改为覆盖导出入口与「不再有发布入口」
- 同步权威合同文档:发布入口位置由聊天头改为导出产物面板陶泥儿 tab
|
2026-10-06 11:24:30 +08:00 |
|
suzmii
|
811efc102c
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
合并 master 76166b08c(模型目录不可用项 / 管理端等):保留双方条目
- apps/ai-game-creator-shell/src/services/clientApi.ts:取 master 的 typed 目录读取(`ClientLlmModelCatalog` 已含 unavailableModels,不再手写 agentMode 映射),但保留本分支的文案「模型服务不可用」(本 PR 的口径,master 那侧还是旧的「本地…」)
- ConversationModelSelect.tsx:import 取并集(`Lock` + `ReactNode`),渲染结构保留本分支的「强度区外壳」(`strengthSection ? <shell>{strengthSection}{modelMenu}</shell> : modelMenu`)——master 把菜单内联展开、并加了不可用项列表,那段已自动合并进 `modelMenu` 变量里,两边语义都在
- tests/conversationModelSelect.test.tsx:取 master 的新文案「所选模型已下线,已切换为默认模型」,保留本分支的异步查询(`await screen.findByText`,文案走 portal toast)
- docs/project-memory/shared-memory/pitfalls.md:两侧条目都保留(本分支在前,master 新增在后)
- 校验:typecheck pass 3 / fail 0;`appSurface + chatDialogFrameLayout + conversationModelSelect` 257 passed / 9 skipped
|
2026-10-06 11:00:40 +08:00 |
|
suzmii
|
7e036a7199
|
润色钮挪到发送钮左边(右组相邻成组)
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
- 口径:AI 润色 / 恢复原文与发送钮同为圆角矩形按钮,放一起更协调 → 从「左组 `@` `+` 之后」挪到**右组最末、发送钮左侧**,最终顺序 `@` `+` | 模型 麦克风 润色 发送(`space-between` 左右分组不变)
- 实现:portal 挂点搬进右组(`DirectProjectComposer` 里把 `.project-chat-composer-controls-actions` 移到 `-controls-right` 内、发送钮之前),`actionsPortalTarget` 的「可选 prop、不传则行为不变」契约保持;用显式槽位而不是 CSS `order`,因为 DOM 顺序即 Tab 与读屏顺序(现在就是 模型 → 麦克风 → 润色 → 发送,与视觉一致)
- 注释/文档同步:composer 与 styles.css 里「与 `@` / `+` 同组、排在左组最后一个」那类旧口径全部改成新口径(「与发送同为圆角矩形按钮、相邻成组」),pitfalls 同段一并更新;全仓 grep `输入类动作` / `生成类动作` / `排在左组` / `左组最后一个` 命中 0
- 测试:`chat-composer.suite.ts` 的 DOM 断言改成新挂点——润色钮必须在 `.project-chat-composer-controls` 内、父链是 `-controls-right`、**`slot.nextElementSibling` 就是发送钮**、且 `compareDocumentPosition` 证明润色在发送之前;`chatDialogFrameLayout.test.ts` 的源码顺序断言改成「挂点在 `-controls-right` 之后、`{canStopTurn` 之前」;空态「工具条之外无第二个按钮」计数仍为 6;七宽度单行/不相交用例不变(含新位置)
- min-width 复核(无头 Chromium 夹具,240/280/296/320/360/438/900 七档):控件排仍 **252px** 所需、外壳仍 **278px**;自然宽度 290.4(438/900 档)→ 算式不变;七档 `topSpread ≤ 1px`、控件两两相交 **0** 处、`outsideControlsRow` 空、润色钮与发送钮间距固定 **8px**(同一行、同一组)
- 截图:240px 改前→改后 + 438px 改后 + 438px toast 已换新(正文引用与附件 1:1:12 = 12,未引用的旧图已删)
Refs #600, PR #607
|
2026-10-06 10:57:19 +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
|
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
|
57ae4d5251
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
合并 master 51cb05f41(创作者主页 / 关注链路等):保留双方条目
- docs/project-memory/shared-memory/pitfalls.md 冲突:本分支 2 条(2026-10-05 PR #607 复核修复 / 模型菜单共享样式面)在前,master 新增 2 条(自定义作者插槽昵称降级 / 页面返回兜底不新增历史)紧随其后,其余各节原样保留
- 其余文件自动合并(master 侧的 CreatorControls / GameCard / creator 服务与本分支不重叠)
- 顺带修本分支行为:模型状态文案改走底部 toast 后,conversationModelSelect.test.tsx 两处同步 getByText 改成 await findByText(toast 是 portal 的异步更新,同步查询在慢机上会竞态)
|
2026-10-06 00:34:02 +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
|
870d6457bc
|
输入区工具条改回唯一一行:润色钮并入工具条,nowrap + 实测 min-width
Project CI / Backend tests (pull_request) Failing after 26s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m45s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m30s
Project CI / Repository checks (pull_request) Failing after 14s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m4s
Project CI / Frontend tests (pull_request) Successful in 2m51s
Project CI / AI game creator shell web tests (pull_request) Failing after 4m12s
Project CI / Native shell tests (pull_request) Successful in 10m32s
- 口径:工具条只允许一行——`@` / `+` / 「AI 润色 / 恢复原文」/ 模型 / 语音 / 发送 六颗控件平铺,任何面板宽下都不换行、不堆叠、不重叠;宽度不够时按 `min-width` 横向溢出可见,发送钮仍在可视区内
- 换行来源(首轮为「避免重叠」加的 wrap):styles.css:11893 `.project-chat-composer-controls`(6 类)`flex-wrap: wrap`、styles.css:11933 `.project-chat-composer-controls-left` `flex-wrap: wrap`、styles.css:13747 `.conversation-model-select` `flex-wrap: wrap` → 三处都改 `nowrap`;左组补 `flex: 0 0 auto`(固定 28px 动作钮不参与收缩,否则槽位被压窄会把润色钮挤到模型钮上)
- 润色钮进工具条:`ResourceReferenceInput` 新增 `actionsPortalTarget`(portal 目标,不传时行为不变,策划面照旧),`DirectProjectComposer` 在左组 `+` 之后放挂点 `.project-chat-composer-controls-actions` 并传入 → 空输入态不再为它留一行;输入盒第二行只剩「润色状态」(无内容时 0 高,`gap` 的 row 分量 6→0、状态自带 `margin-top: 6px`)
- min-width 算式(落到两个元素):控件排 `.project-chat-composer-controls` = `@`28 + `+`28 + 润色28 + 模型钮 64(`min-width: 64px`,名字省略号)+ 语音28 + 发送28 = 204,加 5×8px 列间距 = 244,再留 8 余量 → **252px**;外壳 `form.project-chat-composer.is-direct-codex` = 252 + 左右内边距 12×2 + 边框 1×2 → **278px**。夹具实测:自然宽度 290.4、七档(240…900)控件 `top` 差值 ≤1px、两两相交 0 处、`outsideControlsRow` 空
- 低于 min-width:外壳保持 278px、**内容按自身宽度溢出可见**(面板与 composer 都不裁切,选它而不是给工具条 `overflow-x: auto` 是因为工具条里挂着模型菜单浮层,加滚动容器会把它裁掉——#600 的老问题);240px 实测发送钮 rect 仍在窗口内且 `elementFromPoint` 命中它
- 测试:`chatDialogFrameLayout.test.ts` 新增「工具条只有一行…」——七个宽度下 `flex-wrap` 必须 `nowrap`(右组本来就不换行)、控件排 `min-width: 252` / 外壳 `min-width: 278`、组件源码里润色钮渲染在控件排之后的挂点;最高高度算式按新结构更新为 222。**改前红已记录**:把三个源文件 stash 回旧实现后单跑,`240px 下工具条必须保持单行: expected 'wrap' to be 'nowrap'` 与 `expected 228 to be 222` 两条同时红
- 校验:`npx vitest run tests/appSurface.test.ts tests/chatDialogFrameLayout.test.ts` → **225 passed / 9 skipped**;`agc:typecheck` pass 3 / fail 0;eslint、prettier、encoding 5280 files、spacetime-schema 91 tables、`git diff --check` 全绿;对照图与 PR 正文已更新
Refs #600, PR #607
|
2026-10-06 00:19:17 +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
|
ca53daaec4
|
删掉 artifactsPanel 那份只有存在性断言的外壳测试
- 四个用例里三个是「元素渲染出来了」:三个目标卡片、切 tab 后的文案、tablist 存在;关闭按钮只是把 onClose 转发一次
- 唯一有内容的那条「挂载的是主聊天同一个 .project-chat-surface」已由 chatDialogFrameLayout.test.ts 覆盖,不是唯一防线
- 面板真实行为(表单、冲突、失败卡片、自动重读、入队)由 xhsMinitoolExport.test.tsx 覆盖;前端 vitest 25 → 21 例,里程碑与实施计划的证据口径同步
|
2026-10-05 21:06:34 +08:00 |
|
suzmii
|
342cc75d20
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m59s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m17s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m38s
Project CI / Frontend tests (pull_request) Successful in 3m1s
Project CI / Backend tests (pull_request) Successful in 7m16s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m15s
Project CI / Repository checks (pull_request) Successful in 5m19s
Project CI / Native shell tests (pull_request) Successful in 7m2s
合并 master 96859666f(AGC 运行画面点选 #624 等):保留双方条目
- docs/project-memory/shared-memory/pitfalls.md 冲突:本分支 2 条(2026-10-05 PR #607 复核修复 / 模型菜单共享样式面)在前,master 新增 6 条(运行画面点选 ×5、Phaser 4 ×2)紧随其后,其余各节原样保留
- 其余文件自动合并(master 侧改动与本分支不重叠)
|
2026-10-05 21:01:39 +08:00 |
|
suzmii
|
3204758f34
|
模型不可用与模型状态一律走组件自带的底部 toast:删掉宿主分支
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m40s
Project CI / Backend tests (pull_request) Failing after 21s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m34s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m52s
Project CI / Repository checks (pull_request) Failing after 29s
Project CI / Frontend tests (pull_request) Successful in 2m54s
Project CI / AI game creator shell web tests (pull_request) Failing after 4m1s
Project CI / Native shell tests (pull_request) Successful in 9m1s
- 现象:`errorPresentation` 默认 `inline`,只有工作台那只传 `toast` + 宿主回调;首页/策划/画布的输入区里「模型服务不可用」还是**常驻占位文本**,不是浮层——同一个组件在不同宿主表现不一致
- 改法:浮层收进组件内部。新增 `components/common/composerNotice.ts`(模块级单例:`publishComposerNotice` + `useComposerNoticeHost`)与 `components/common/ComposerNoticeToast.tsx`(portal 到底部居中、6s 自动收起);`ConversationModelSelect` 与 `ComposerReasoningEffortSelect` 自己在失败/状态出现时报一条(各自去重:同一条只弹一次、清空后可再弹),失败 `tone="error"`、状态 `tone="neutral"`
- 单宿主:同一输入区里两个调用点只有一个真正渲染(编号最小的那个),保证同一时刻只有一条浮层、不会互相叠;输入区整体卸载时把待显示的提示一并丢掉,不留给下一个宿主
- 删宿主分支:`errorPresentation` / `onUnavailable` / `onNotice` / `noticePresentation` 四个 prop 与工作台宿主的 toast state / `pushModelNotice` / `pushModelStatus` 一并删除(grep 命中 0);任何宿主的输入区子树里都不再有常驻 `role="alert"` / `role="status"` 行
- 语义不变:不可用时发送仍禁用(`!modelReady`);文案仍是「模型服务不可用」;档位持久化通道不变
- 测试:新增「首页模型不可用与状态也走组件自己的底部 toast(子树不留常驻行)」;`design-agent.suite` 的推理档保存失败改成断言底部 toast + 控件子树无 `role="status"`;`chat-composer.suite` 的失败去重用例改成断言 toast 节点(同一条不重复弹、清空后再出现换新节点)
Refs #600, PR #607
|
2026-10-05 20:22:41 +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
|
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
|
f5a3ef8241
|
导出面板的用例去掉恒真的存在性断言
- getBy* / findBy* 找不到元素就抛,外面那层 expect(...).not.toBeNull() 永远不会失败:删掉它,等待出现改用 findBy*,需要对照的用 queryBy* + toBeNull()
- 能写成行为的就别写成存在:有脚本时点按钮行的「适配」看 adapt 是否被调用;读失败时同样点一下证明入口没变成摆设;切 tab 后补一条「卡片没有重新长回来」的负向断言
- artifactsPanel 三个目标改用 role=button(可点入口,不是三行说明文字),保留 querySelector 那几条(它们真的会返回 null)
- team-conventions 记下这条断言口径,并给「不建立固定频率轮询」补上导出面板对 .export/ 的显式例外(那两件事实没有事件源,只能现读)
|
2026-10-05 19:51:52 +08:00 |
|
k88936
|
832fca8ae1
|
layout 的用例不再把实现抄一遍,改成只钉关系的四条
- 原来的 artifact_relative_path_stays_inside_the_export_directory 断言的是 format!("{EXPORT_WORK_RELATIVE_DIR}/{ARTIFACT_FILE_NAME}") 本身,只重复实现、挡不住任何真实改动
- 改成:前端字符串相对路径与宿主 PathBuf 必须指向同一文件;相对路径必须项目内、单层、无 .. 且不出现反斜杠(跨平台的线上字符串);注册表与产物共用一个项目根锚定的 flat 目录;脚本名保住 build:<后缀> 形式且不许退化成裸 build(否则跑掉的是项目自己的构建)
- 逐条反证:把产物路径改成 .export/xhs-minitool/ 子目录、把 export_dir 挪进子目录、把 SCRIPT_NAME 改成 build,对应用例分别变红;export:: 50 → 53 例
|
2026-10-05 19:44:43 +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
|
9a3e211205
|
导出的文档按 ADR 收口回写:失败通道、输出尾部事实与门禁口径
- decision-log 新增一条:同步细节不进对外状态(内容与指纹两条命令)、自动重读取代刷新按钮、失败通道按 ADR 两道口子分流、宿主不预拼用户可见文案、契约常量以 Rust 为唯一权威并用跨语言测试钉住;顺带修掉上一条里「只有 3 个 per-target 命令」的过时说法
- 主规范导出一节补失败通道与文案归属;README 的状态从「未实现」改成已实现待运行时验收
- 里程碑与实施计划的证据口径同步:export:: 50 例(xhs_minitool 34 例)、export_bindings 116 例、生成文件 118、前端 25 例(19 + 契约 2 + 既有 4);记下本机 check:rust:shell 唯一失败是 4 个 process_session 真 PTY 用例(既有环境噪声),并补上 dffe4de55 / df3a6826b 两条提交
|
2026-10-05 19:25:56 +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
|
7d73a0a3ce
|
文档:pitfalls 新增段落的措辞改成中性口径陈述(去掉引述)
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m42s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m49s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m22s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Backend tests (pull_request) Successful in 8m37s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m12s
Project CI / Native shell tests (pull_request) Successful in 9m38s
Project CI / Repository checks (pull_request) Successful in 7m0s
- 2026-10-05 两条与 2026-10-04 两条里「用户口径是…」这类引述改成直接陈述(删点、视觉口径、首页强度区分两步收敛)
- 只改措辞与一处顺序说明,技术结论与实测数字不变
Refs #600, PR #607
|
2026-10-05 18:56:41 +08:00 |
|
k88936
|
dfd392e25d
|
记录契约常量的单一来源与前端契约用例
- 实施计划:补「Rust 是权威、前端副本由 xhsMinitoolContract 钉住」这条边界,前端 vitest 口径 21 例(新增 15 + 契约 2 + 既有 4),并说明指令正文与用例的期望值都从常量组合。
- 里程碑:证据里加 tests/xhsMinitoolContract.test.ts 这条(读 layout.rs / export/mod.rs 逐条比对)。
|
2026-10-05 18:42:47 +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 |
|
k88936
|
17044f0504
|
回写自动重读与命令切分的口径
- 主规范:四条命令与内容/指纹的切分理由、自动重读的两条采纳规则(hasScript 随时采纳、表单只在用户没在编辑时采纳)、指纹不进对外状态、验收项补「自动重读不覆盖未保存输入」。
- 实施计划与里程碑:命令清单改 4 条、面板改两颗按钮、运行时验收去掉「点刷新」一步、前端 vitest 口径 19 例(新增 15 + 既有 4),并说明刷新撤掉待保存输入那条行为已被取代。
|
2026-10-05 18:29:11 +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
|
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
|
9c350eeda5
|
删掉强度滑块的档位圆点;pointercancel 与「松手」同口径提交预览
- 用户口径:「你干脆把圆点删了吧,很丑…要做就做成几乎透明的」→ 按第一选择**删除**(不做半透明备选)
- 标记:`.project-chat-composer-strength-slider` 里那组 `<span class="project-chat-composer-strength-stops">` + 5 个点整体删除
- CSS:`space-between` 排布、`z-index: 2` 抬层、`.is-active{opacity:0}`、点的 `color-mix` 底色、以及只服务点对齐的 `padding: 0 7px` 一并删除;强度区横向内边距 `4px 6px 2px` → `4px 0 2px`(滑块直接铺满卡片内容宽度,填充段与圆钮两端与轨道贴齐,不再留多余空白);滑块容器去掉已无用的 `position: relative`
- 保留:圆钮(实心暖白 + 柔影 + 2px 间隙焦点环)、filled 段铺满轨道高度 6px、`--strength-ratio`、`当前:X`、`aria-valuetext`、←/→/Home/End、点轨道跳档、拖动连续跟手(预览 / 松手提交)
- pointercancel:触屏取消时与「松手」同口径提交当前预览(否则预览值会滞留到下一次提交或卸载 flush)
- 测试:`chatDialogFrameLayout.test.ts` 原来那组「点」断言整段换成**反向守卫**(样式表里不再有 `.project-chat-composer-strength-stops` 规则、组件源码也不再渲染该类名;滑块契约:宽 100% / 高 26 / 圆钮 20×20、强度区左右内边距 0);`home.suite.ts` 首页用例补一条「菜单里不再有那组点」
- 文档:pitfalls 的 D1 条改为现行口径(圆点已删、原因与判据;历史成因「被 6px 轨道盖住 / 与圆钮错位 ±12.2px」只留一句、由 Git 追溯)
Refs #600, PR #607
|
2026-10-05 18:11:13 +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 |
|
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
|
6dd0dc00cc
|
回写未适配入口与失败卡片三向分派
- 主规范:说明未适配结论只在注册表读回来之后下、提示卡片自带入队按钮、失败卡片按 action 分派适配/修/重试,同一时刻只有一张卡片一个入口。
- 实施计划与里程碑:补提交、前端 vitest 口径改为 18 例(新增 14 + 既有 4),并把 14 例覆盖到的内容逐项列出。
|
2026-10-05 17:54:30 +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 |
|
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 |
|
k88936
|
ac666daad8
|
回写本轮补的提交与前端用例数
- 实施计划补 1b7741ac6 / f8ed4e898 / 90f651ddf 三条提交,前端 vitest 口径改为 16 例(新增 12 + 既有 4)。
- 里程碑把前端 12 例覆盖的内容逐项列出,便于验收时对照。
|
2026-10-05 17:27:49 +08:00 |
|