suzmii
|
40f0b2cd24
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
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 7m2s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 8m19s
Project CI / Frontend tests (pull_request) Successful in 3m13s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m54s
Project CI / Repository checks (pull_request) Successful in 6m11s
Project CI / Backend tests (pull_request) Successful in 8m0s
Project CI / Native shell tests (pull_request) Successful in 10m14s
|
2026-10-06 11:35:11 +08:00 |
|
suzmii
|
0619b5e833
|
合并收口:恢复 master 的不可用模型列表渲染(冲突块取并集时漏了)
Project CI / Backend tests (pull_request) Failing after 14s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 5m14s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m5s
Project CI / Repository checks (pull_request) Failing after 25s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m40s
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m32s
Project CI / Native shell tests (pull_request) Successful in 8m44s
- 合并 master 76166b08c 时,`ConversationModelSelect` 的菜单渲染冲突块取了本分支的「强度区外壳」一侧,但 master 那侧**同时**包含不可用模型列表(`unavailableModels.map` + `Lock` 图标 + `unavailableModelReasonLabel`)→ 结果那三处变成未使用(eslint 三条 error)
- 修法:把 master 的不可用模型块(含注释)原样补回 `modelMenu` 变量里(`models.map` 之后、分隔线之前),外壳一侧不动;`Lock` / `unavailableModelReasonLabel` / `unavailableModels` 全部重新被使用
- 校验:eslint 该文件 0 error;typecheck pass 3 / fail 0;`conversationModelSelect + appSurface + chatDialogFrameLayout` 257 passed / 9 skipped
|
2026-10-06 11:03:45 +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
|
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 |
|
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
|
b7440d8c39
|
语音提示不再常驻 + 模型触发钮补 title + 工具条 DOM 级断言
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m18s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m30s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m18s
Project CI / Backend tests (pull_request) Successful in 7m43s
Project CI / Frontend tests (pull_request) Successful in 4m39s
Project CI / Repository checks (pull_request) Successful in 7m7s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m53s
Project CI / Native shell tests (pull_request) Successful in 9m18s
- D-B:`voiceNotice` 只在 mic 的 `onNotice` 里 set、从不清理(会常驻到组件卸载)→ 改成「拿到转写就收掉」(`onTranscript` 里 `setVoiceNotice('')`);提示是上一次动作的回执,选这个时机而不是 6s 定时,避免与 toast 的 6s 语义混在一起
- D-B 用例(改前红):`chat-composer.suite.ts`「语音提示是上一次动作的回执:拿到转写后不再常驻」——录音 + `onerror({error:'network'})` → `project-chat-composer-notice` 出现「语音识别服务…」;再 `emitTranscript('做一个小游戏')` → 该行消失且节点脱离文档(旧实现里它一直在)
- D-C:模型触发钮最窄可缩到 64px、名字走省略号但没有 `title`,截断后无从查看 → 触发钮补 `title={triggerLabel}`(与显示名同源),并加属性断言:`title` == 触发钮文本
- 测试加强(评审说偏声明级):`chat-composer.suite.ts` 新增「AI 润色钮在工具条这一行里(DOM 位置级)」——润色钮必须位于 `.project-chat-composer-controls` 内、父链在 `-controls-actions` 挂点里、不在 `.resource-reference-input` 里、空态工具条外没有第二行按钮(用真实挂载的 Direct 输入区断言);同排几何(top 差 ≤1px、两两不相交、七宽度)由无头 Chromium 夹具实测(240/280/296/320/360/438/900 全通过)
- 校验:`appSurface + chatDialogFrameLayout` **227 passed / 9 skipped**;typecheck pass 3 / fail 0;eslint、prettier、encoding 5327 files、spacetime-schema 92 tables、diff-check 全绿
Refs #600, PR #607
|
2026-10-06 01:25:43 +08:00 |
|
suzmii
|
69a5b868ef
|
修掉润色状态行的死声明:margin-top 6px 不再被后面的 0 盖掉
- 评审 D-A:上一轮给状态行加的 `margin-top: 6px` 被紧接着的旧 `margin-top: 0`(styles.css 两条 Direct 状态规则)覆盖 → 实际间距是 0、状态紧贴编辑器末行;注释与测试注释也跟着说错
- 改法:删掉那两行 `margin-top: 0`,保留 6px,并把 CSS 注释与测试注释改成事实(输入盒 `gap` 的 row 分量为 0,间距由状态元素自带)
- 实测(无头 Chromium 夹具,438px 面板):无状态行时输入盒 **72px** / 表单 **136px**;出现「AI 润色失败,可重试」时状态行 `margin-top` 计算值 = **6px**、状态行高 16.8px,输入盒 **95px** / 表单 **159px**(= 136 + 6 + 16.8);空态仍 0 高,222 算式与空态断言不变
- 测试:`statusRowHeight = 0` 不再写死——断言 `ResourceReferenceInput` 里状态行仍是条件渲染(`polishing || polishError || polishNotice`)+ 状态规则 `margin-top` 解出 6px(谁改回常驻渲染或把间距写回 0 都会红)
Refs #600, PR #607
|
2026-10-06 01:25:42 +08:00 |
|
suzmii
|
bbd5e51d3d
|
测试:模型状态文案改走底部 toast 后改用异步查询
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m31s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m36s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m10s
Project CI / Frontend tests (pull_request) Successful in 3m19s
Project CI / Backend tests (pull_request) Successful in 7m32s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m59s
Project CI / Repository checks (pull_request) Successful in 6m26s
Project CI / Native shell tests (pull_request) Successful in 8m52s
- `conversationModelSelect.test.tsx` 两处同步 `screen.getByText('…')` 改为 `await screen.findByText(…)`:状态文案现在渲染在 portal 的 toast 里(发布 → 宿主 re-render 一次),同步查询在慢机/并行下会竞态(CI 上就是这样红的)
- 本地:`npx vitest run tests/conversationModelSelect.test.tsx` 29 passed;`appSurface + chatDialogFrameLayout` 225 passed / 9 skipped
Refs #600, PR #607
|
2026-10-06 00:35:32 +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 |
|
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 |
|
k88936
|
d917d2f4d1
|
修复(AGC模型): 会员到账后主动刷新模型目录
- confirmNativeRechargePayment 确认订单为 paid 且 kind=membership 时调用 notifyLlmConfigChanged
- 保留 applyCatalog 的 revision 门控不变,由配置变更事件重置已应用 revision 并重新读取
- 补「revision 不变但账号档位变化时,显式通知必须重新应用」的回归测试
|
2026-10-05 20:22:43 +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
|
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 |
|
k88936
|
8788c47a97
|
修复(AGC模型): 锁定模型项不再进入 Tab 序列
- 去掉锁定项的 tabIndex,原因改由 aria-label 与 hover 提示暴露,避免键盘停在不可选项
- 移除锁定项失效的 :focus-visible 样式与旧注释
- 更新单测:断言锁定项不可 Tab 聚焦且 aria-label 带原因
|
2026-10-05 18:59:57 +08:00 |
|
suzmii
|
dd6e5186b0
|
已选段终点改到圆钮中心:圆钮右侧不再露出橙色
- 现象:4× 放大图里橙色 filled 段的右端越到圆钮右侧之外(圆钮边缘能看到一小截橙色)
- 根因:渐变终点写成 `calc(20px + var(--strength-ratio) * (100% - 20px))`,而圆钮中心在 `10px + ratio * (100% - 20px)` —— 终点比圆钮中心多 10px(正好落在圆钮**右缘**),亚像素 / 圆角 / 描边误差都会让它露出来
- 改法:两个渐变停靠点都改成 `calc(10px + var(--strength-ratio, 0) * (100% - 20px))`,filled 段右端与圆钮中心重合;100% 时圆钮压在轨道右端、填充与圆钮右缘齐平
- 实测(无头 Chromium,4× 设备像素):0/25/50/75/100% 五档沿轨道中线扫描,圆钮右缘以外主色像素命中数 **0**(改前对照图能看到橙色溢出);hover / active / focus-visible / disabled 四态同样 0
- 守卫:`chatDialogFrameLayout.test.ts` 断言轨道渐变停靠点含 `calc(10px + var(--strength-ratio, 0) * (100% - 20px))` 且不含 `calc(20px + …)`
Refs #600, PR #607
|
2026-10-05 18:56:35 +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
|
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 |
|
k88936
|
b8309eb3ae
|
重构(后台金额): 抽出统一的元金额格式化
- shared AdminFormat 新增 formatAdminCurrencyCents(分 → ¥x.xx)并从 components 导出
- AdminUserDetailDialog / AdminMembershipPlanPage / AdminRechargeOrderPage / AdminRechargeProductPage 删除各自重复的 formatMoney/formatPrice
- 补充 formatAdminCurrencyCents 单测,避免后台各页面金额格式漂移
|
2026-10-05 18:12:22 +08:00 |
|
suzmii
|
fe3c1389ae
|
推理档:外部改配置后重读并重新种「最近落盘值」,重选同一档仍然落盘
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m35s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 6m59s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 6m14s
Project CI / Frontend tests (pull_request) Successful in 2m45s
Project CI / Backend tests (pull_request) Successful in 7m45s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m30s
Project CI / Repository checks (pull_request) Successful in 7m16s
Project CI / Native shell tests (pull_request) Successful in 9m2s
- 问题(评审 D5 边界):`persistedEffortRef` 只在挂载回读与自身落盘时更新,而配置还有别的写入者——`RuntimeConfigDialog` 保存后会 `notifyLlmConfigChanged()`。外部把 `llm.reasoningEffort` 改成「最高」后,常驻挂载的滑块手上仍是旧口径:用户改选「高」时 `next !== persisted` 本来成立,但若外部改成了用户要选的**同一档**(或先外部改档再重选原档),去重会把这次点击吞掉,界面显示 A、磁盘是 B
- 改法:把「读一次配置」抽成 `readEffortRef`,挂载时读一次,另外在 `LLM_CONFIG_CHANGED_EVENT` 与窗口 `focus` 时**重读并重新种 `persistedEffortRef`**(只读不写盘;`silent` 时不重复报「推理档读取失败」);写盘在途或预览未提交时不回显,避免回读旧值把界面顶回去
- 用例:`chat-composer.suite.ts`「an external config change is re-read so re-selecting that grade still commits」——挂载读到「默认」→ 外部改档 + 派发 `LLM_CONFIG_CHANGED_EVENT` → 断言回显成「最高」→ 用户改选「高」→ **必须写一次**(改前该用例红:writes 里没有 'high',界面对着旧口径把这次点击去重掉)
- 滑块 pointercancel 的用例也在这一条里(handler 随上一条提交落地):预览后 `pointercancel` → 恰好写一次
Refs #600, PR #607
|
2026-10-05 18:11:20 +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 |
|
k88936
|
8009a70bb1
|
测试(AGC模型): 目录透传用例去掉过期的映射断言
- loadClientLlmModels 已改为直接透传 Rust typed command 结果
- 用例改名为透传断言,不再期望渲染层补默认 agentMode(该逻辑已下沉到 Rust)
|
2026-10-05 17:42:46 +08:00 |
|
k88936
|
7dc056651c
|
修复(后台用户详情): 非会员不展示占位账期
- 账期仅在 membership.status === 'active' 时展示,否则显示 -
- 避免从未订阅用户显示“月付 第 1/1 期”被误读为正在计费
|
2026-10-05 17:38:01 +08:00 |
|
k88936
|
07cf7443da
|
重构(后台契约): 会员变更类型复用后端生成 token
- AdminMembershipOrderChangePayload.changeKind 改用 ProfileMembershipChangeKindToken
- 去掉手写的 'purchase' | 'upgrade' 联合,避免与后端 token 漂移
|
2026-10-05 17:37:12 +08:00 |
|
k88936
|
9707b74002
|
修复(后台会员档位): 列表加载时按 rank 排序
- refreshPlans 复用 sortPlanEntries,首屏顺序与保存后一致
- 避免加载态与保存态列表顺序不一致,与档位列“按升级基准 rank”的说明对齐
|
2026-10-05 17:35:18 +08:00 |
|
k88936
|
92a8fa1b66
|
重构(共享导出): 会员商品 id helper 提升为公共导出
- packages/shared/src/index.ts 导出 resolveMembershipProductId
- useAccountWallet 改从 @genarrative/shared 公共入口引入,去掉对弹层私有文件结构的深路径依赖
|
2026-10-05 17:34:27 +08:00 |
|
k88936
|
cebffb9dad
|
测试(AGC模型): 补齐裸目录响应兼容用例
- 新增 legacy_raw_catalog_payload_defaults_optional_fields:覆盖无 ok 信封、缺少 agentMode/protocol/unavailableModels 的旧裸目录响应
- 断言缺省按 Codex + OpenAI Responses + 空不可用桶兜底,锁定既有兼容行为
|
2026-10-05 17:28:38 +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
|
14283db943
|
修复运行页「刷新运行画面」不是真正重载
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
- 刷新时给 iframe 地址加一枚随 reloadNonce 递增的 __agc_reload 参数:同一地址的导航可能命中缓存,只换元素身份不足以保证重新请求
- 重新载入时丢掉上一版量到的内容尺寸,新页面先在容器尺寸上适配,不再被上一版的适配结果渲染
- tests/localGamePreviewFrame.test.ts 补刷新回归:换新节点 + 地址带一次性参数 + 丢弃旧测量
- tests/runPreviewRefresh.test.tsx 断言改为新契约(原地址逐字保留、参数逐次递增、节点每次都是新的)
|
2026-10-05 17:08:21 +08:00 |
|
suzmii
|
7ad412f0ec
|
修运行画面点选后预览自己缩放:高亮框不再参与尺寸上报,命中矩形裁剪到画布
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
- 根因:高亮框(body 下 data-genarrative-preview-inspect,position:fixed)被尺寸上报的 measureContentBounds 遍历计入内容尺寸;three 投影盒超出画布时把内容尺寸撑到 3756×2643(视口 900×560),宿主改 iframe 尺寸触发游戏 resize 重算相机,形成自激振荡
- 桥:measureContentBounds 的 TreeWalker 对 data-genarrative-preview-fit / data-genarrative-preview-inspect 返回 FILTER_REJECT(桥自己的节点不参与内容测量)
- 桥:新增 clipInspectRect,引擎档(three 投影盒、Phaser 世界包围盒)命中矩形统一裁剪到画布可见范围;与画布无交集时退化为指针点矩形(不出现 0/负尺寸)
- 测试:新增 localPreviewInspectSizeStability.test.ts(5 例:桥节点不参与测量、同尺寸普通节点仍计入的对照组、进入检查模式与 hover 后尺寸与宿主适配布局不变、投影盒超出画布时载荷被裁剪、与画布无交集时退化为 1×1);runtimeInspectEngines 的字段换算用例改到画布内的等价参数(原矩形落在画布外,裁剪后按新规则退化为指针点矩形)
- 文档:pitfalls 记一条「高亮框被尺寸上报当成页面内容」的根因、口径与回归
|
2026-10-05 17:08:03 +08:00 |
|
suzmii
|
278ebc570e
|
强度区也抬成共享样式面:首页带同一份思维强度,滑块点色变浅、点与轨道同高
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m7s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 4m46s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m27s
Project CI / Frontend tests (pull_request) Successful in 3m27s
Project CI / Backend tests (pull_request) Successful in 8m4s
Project CI / AI game creator shell web tests (pull_request) Successful in 3m5s
Project CI / Repository checks (pull_request) Successful in 6m48s
Project CI / Native shell tests (pull_request) Successful in 9m12s
- 用户口径:①「把思维强度也加进去,保持所有地方的样式一致,不需要做区分」;②「点的颜色做浅一点,进度条的高度和滑块高度一致」
- ① 首页:`view/home/index.tsx` 给那颗 `ConversationModelSelect` 传**同一个** `ComposerReasoningEffortSelect`(`presentation=section`),读写仍是组件自己的 `read_game_creator_app_config` / `select_game_creator_reasoning_effort`,首页不新写 state;强度区(`.project-chat-reasoning-effort.is-section` / `.project-chat-composer-strength-*`)与外壳锚点(`position: absolute; right: 0; bottom: calc(100% + 8px)`)一并抬到共享样式面,宿主作用域只剩工具栏几何
- ① 实测(无头 Chromium,同一夹具同一裁剪框):首页 1200/447 两档都是外壳 260×262.5、强度区 234×60.5、列表 234×170、滑块 222×26,与工作台逐项一致;工作台回归后外壳/强度区/列表/滑块逐值不变(抬升过程中必须删掉两条给旧独立「推理档」控件排版的死重规则,否则它们以更高特异性盖掉共享面的 `display: grid`,把强度区算宽 24px)
- ② 点色:`--platform-text-strong` → `color-mix(in srgb, var(--platform-text-strong) 60%, var(--platform-subpanel-border))`;实测点 rgb(126,100,85) / 相邻轨道 rgb(230,213,198) ⇒ 对比度 3.83:1(上一版 10.5:1,仍守住 ≥3:1)。边界:点落在橙色已选段上时只有 1.54:1——「变浅」与「已选段也 ≥3:1」不可兼得,按「不抢戏」优先,取值可由这条 color-mix 的百分比统一调
- ② 变体 A(落地,默认):填充段=轨道高度 6px(本来就是轨道渐变的一段),档位点也收到 6px(不再上下各露 0.5px);实测轨道 6.0 / 填充 6.0 / 点 6.0 / 圆钮 20(range 盒 26)。变体 B(只出图、未提交):填充段与点都做成 20px=圆钮高度;实测 20/20/20/20(range 盒 34)。447 下圆钮中心到最近可见点中心 37.5px(A) / 30.5px(B),不重叠、不溢出
- 测试:`home.suite.ts` 的首页用例补断言(首页菜单里确实有 `input[type=range]`,`aria-label=思维强度`、`aria-valuetext=默认`);`chatDialogFrameLayout.test.ts` 的强度区选择器改到共享面、并断言点 6px == 轨道高度、点色来自 color-mix、无描边
- 校验:相关 vitest 221 passed / 9 skipped、typecheck、eslint、prettier、encoding 5268 files、spacetime-schema 91 tables、diff-check;对照图与变体图见 PR #607
Refs #600, PR #607
|
2026-10-05 17:06:02 +08:00 |
|
suzmii
|
020eb92402
|
模型菜单观感抬成组件自带的共享样式面:首页那颗复用同一套卡片与列表
Project CI / AI game creator shell Rust crates (pull_request) Successful in 6m13s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 7m10s
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m54s
Project CI / Backend tests (pull_request) Successful in 8m50s
Project CI / Frontend tests (pull_request) Successful in 3m39s
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
- 成因:#600 那轮把卡片/列表的新观感挂在 `.game-workbench-chat .project-chat-surface.is-direct-codex .project-chat-composer.is-direct-codex …` 这条宿主祖先链上,同一个 `ConversationModelSelect` 换到首页(`className=home-input-model-select`)就退回基础规则:161px 窄卡、10px 圆角、5px 内边距、32px 行高、旧灰投影
- 改法:卡片/列表/行/hover/选中 pill/细滚动条抬到**组件自带类名**的共享样式面(`.conversation-model-select .conversation-model-menu-shell`、`.conversation-model-select .conversation-model-menu`、`… .conversation-model-menu button…`),不带任何宿主祖先链;合并形态(有外壳)与独立形态(首页/策划/画布)同一套值:16px 圆角 / 12px 内边距 / `--platform-line-soft` 描边 / `--platform-desktop-hover-shadow`,行 34px、圆角 9px、hover `--platform-nav-item-icon-fill`、选中 `--platform-warm-bg` + 600
- 宿主专属的东西留在工作台作用域:输入区锚点(`position: absolute; right: 0; bottom: calc(100% + 8px); z-index: 20`)、与工具栏的几何关系、强度区布局;独立形态的卡片自己就是滚动区(`max-height: 194 = 170 + 上下各 12`),外壳形态列表 `max-height: 170`(5×34,不出现半行),外壳 `max-height: none`(高度由内容决定,避免把列表挤矮)
- 首页**不加**强度区:首页那颗没有 effort 的 state/props(`view/home/index.tsx` 只传 `className` 与 `disabled`),就保持这一点
- 基础规则里那几条同属性 `!important` 由共享面按同一档 `!important` 覆盖;工作台那条「抵消宿主通用按钮样式」的规则只留几何(position/display/width/margin/border/shadow/字号),不再抄一份观感
- 测试:`home.suite.ts` 新增「首页模型菜单复用同一套共享样式面」——首页实例的菜单祖先链里没有 `.game-workbench-chat`,只靠 `.conversation-model-select …` 就能解析出 16px 圆角/12px 内边距/34px 行;`chatDialogFrameLayout.test.ts` 的外壳用例按新选择器集合更新(锚点仍来自工作台链、卡片观感来自共享面),并补上 `max-height`/`border-radius`/`background` 断言
- 真机实测(无头 Chromium 同一夹具同一裁剪框):首页那颗 161×309 / 10px / 5px / 32px → 260×194 / 16px / 12px / 34px;工作台那颗外壳 260×262.5、内层列表 234×170、行 34/9px 前后逐值不变(无视觉回退)
- 校验:相关 vitest 221 passed / 9 skipped、typecheck、eslint、prettier、encoding 5268 files、spacetime-schema 91 tables、diff-check;对照图见 PR #607
Refs #600, PR #607
|
2026-10-05 16:32:38 +08:00 |
|
suzmii
|
05f20e4c71
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
# Conflicts:
# docs/project-memory/shared-memory/pitfalls.md
|
2026-10-05 16:20:10 +08:00 |
|
suzmii
|
21c79f54a4
|
Merge pull request '修复:AGC 窗口标题栏项目标签改认当前项目(#618)' (#621) from fix/agc-titlebar-project-label into master
Project CI / AI game creator shell Rust lane 1/2 (push) Successful in 6m47s
Project CI / AI game creator shell Rust crates (push) Successful in 4m38s
Project CI / AI game creator shell Rust lane 2/2 (push) Successful in 6m6s
Project CI / Frontend tests (push) Successful in 3m41s
Project CI / Backend tests (push) Successful in 8m0s
Project CI / AI game creator shell web tests (push) Successful in 2m48s
Project CI / Repository checks (push) Successful in 7m17s
Project CI / Native shell tests (push) Successful in 9m27s
Reviewed-on: http://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/621
|
2026-10-05 16:11:16 +08:00 |
|
suzmii
|
74d67c3369
|
Merge remote-tracking branch 'origin/master' into fix/agc-composer-layout
|
2026-10-05 15:59:23 +08:00 |
|
suzmii
|
d451415edc
|
按 PR #607 复核意见修掉 9 项(D1/D2/D3/D4/D5/D6/D7/D8/D9)
- D1 档位点被轨道压住且与圆钮错位:容器改 `display: flex; justify-content: space-between; padding: 0 6.5px`(= 圆钮半径 10 − 半点宽 3.5),首末点中心因此落在圆钮两端极限位置;`z-index: 2` 抬到 range 之上;当前档位那一点 `opacity: 0`(圆钮已压在那儿);点改深暖底 `--platform-text-strong` + `--platform-input-highlight` 描边。无头 Chromium 实测(222px 轨道):5 个点中心与圆钮算式偏移全部 0.00px(旧实现 +12.19/+6.09/−0.02/−6.11/−12.20)、点与相邻轨道对比度 10.51~10.59:1(旧 1.21~1.23:1)、当前档位点被圆钮覆盖(中心差 ≤0.5px)
- D2 状态文案(`role="status"`)也会把那排控件顶成两行高:`ConversationModelSelect` 的 notice 与失败分开两条浮层通道(`onNotice` / `onUnavailable`,各自去重),`ComposerReasoningEffortSelect` 加 `noticePresentation: 'inline' | 'toast'` + `onNotice`;`toast` 形态下两种常驻行都不渲染,状态浮层用 `tone="neutral"`、失败仍 `tone="error"`。Direct 用 `toast`,首页/策划/画布默认 `inline` 行为不变
- D4 `forced-colors` 下焦点完全不可见(thumb 的 box-shadow 会被系统丢弃):加 `@media (forced-colors: active)` 回退 `outline: 2px solid Highlight; outline-offset: 2px`(系统色,亮色观感不变)
- D5 键盘长按每个事件都落盘:`selectEffort` 比对「最近一次落盘成功的档位」(`persistedEffortRef`,挂载回读时种上),相同不写。真实按键序列实测:单击 1 次;长按 1.5s(34 个重复事件)4 次(每个新档位一次);已在最高档继续长按 1.2s(28 个事件)0 次(旧行为 ~30 次/秒)
- D6 拖动中途卸载会丢档位:卸载 cleanup 里 flush 一次预览值(读 ref,不碰已卸载组件的 state)。实测:拖到「中」未松手落盘 0 次,`unmount()` 后恰好 1 次;单次拖动(按下 + 6 步横移 + 松手)全程 1 次且终值 = 松手位置
- D7 文档与实现对齐:pitfalls 里 `--strength-progress` → `--strength-ratio`、圆钮改实心 `--platform-panel-fill` + `--platform-subpanel-border` 1px 描边、输入盒最高高度 254 → 256(工具栏行高由 30px 模型钮决定)、「提示改成控件排内独占一行」按现行浮层口径改写
- D8 去掉 10 处新硬编码色值 `rgb(112 57 30 / x%)`:卡片投影改用既有 token `--platform-desktop-hover-shadow`,圆钮/焦点影由 `color-mix(in srgb, var(--platform-accent) …)` 派生,不新增 token
- D9 注释与实现不一致:`.resource-reference-input` 的 `min-height: 0 / padding: 0` 写回前面那条六类规则(不再依赖源码顺序),末尾那条只留网格与行距,注释同步改成「不依赖源码先后」
- D3 深色主题焦点环间隙不可靠:只在 pitfalls 记录(深色 `--platform-input-fill` 仅 5% 不透明;工作台根节点固定 `platform-theme--light`,暂不可达)
- 测试:`chat-composer.suite.ts` 新增「notice 走浮层且输入区无 `[role=status]`/`[role=alert]`」「键盘长按同一档位只写一次、换档仍写」「拖动中途卸载恰好提交一次」;`chatDialogFrameLayout.test.ts` 新增档位点对齐/层级/激活点隐藏的声明级断言
- 校验:相关 vitest(chat-composer / chatDialogFrameLayout / design-agent / project-development)、typecheck、eslint、prettier、encoding、spacetime-schema、diff-check
Refs #600, PR #607
|
2026-10-05 15:59:10 +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 |
|
suzmii
|
f47a8f3054
|
Merge remote-tracking branch 'origin/master' into fix/home-project-naming-async
|
2026-10-05 15:45:05 +08:00 |
|
suzmii
|
45ae29461c
|
评审后续:修正标题栏项目标签的空态、视图门控与文案
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m7s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m38s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m42s
Project CI / Frontend tests (pull_request) Successful in 3m37s
Project CI / Backend tests (pull_request) Successful in 8m12s
Project CI / AI game creator shell web tests (pull_request) Successful in 2m54s
Project CI / Repository checks (pull_request) Successful in 6m58s
Project CI / Native shell tests (pull_request) Successful in 9m32s
- 面板形态:快照读取成功但没有在跑回合时不再渲染「未能读取正在运行的项目」,补回 !readFailed 守卫
- 发布门控:currentProjectPath / currentProjectName 只在 launcherView === 'project-development' 时发布,离开工作台按口径回落到最近启动的在跑项目
- 菜单头部只报运行中数量,读取失败结论由 role=status 一行独占,避免同一句连排两遍
- 标签提示拆成「作用域 + 运行状态」:回落态记为「最近运行的项目:X」、状态位「共 N 个项目在运行」,不再重复「正在运行」
- 数量徽标补 title 说明数字含义
- 用例:新增面板空态回归与两条视图门控回归,更新两处标签断言;三条定向文件 25 passed
- 文档:决策日志补 2026-10-05 评审后续条目并修正实施计划交叉引用,里程碑补 2026-10-05 修订,实施计划与主规范同步口径
|
2026-10-05 15:35:55 +08:00 |
|
suzmii
|
19d179bde4
|
运行画面点选:three 句柄瘦身 + 命中对象 label 兜底
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
- 桥:three 句柄改读 `handle.three || handle.THREE`(旧整命名空间形态仍兼容),四个构造器缺任一即按未命中退化
- 桥:three label 链补 `object.name` → `geometry.type` → `object.type`,Phaser 补 `name` → `type`(取值超 40 字符丢弃);命中对象但取不到素材身份时芯片不再一律是 `@canvas`
- 契约:agc-web-game-development 的「运行画面点选契约」改用瘦身句柄 `three: { Raycaster, Vector2, Vector3, Box3 }`,并写明整命名空间会破坏 tree-shaking(同一 Vite 构建 517,682 B → 730,831 B,+41%);skill-pack 指纹同步到 2026-08-26.39
- 模板:threejs-3d-starter 与 blank-3d-scene 的句柄源改成瘦身形态
- 测试:runtimeInspectEngines 新增 6 例(瘦身句柄命中、旧命名空间兼容、name / geometry.type / object.type 兜底、缺构造器退化),共 33 例
- 文档:功能说明补 label 兜底与瘦身句柄的验收行和边界;pitfalls 记一条 tree-shaking 口径;实施计划阶段二进展补该轮结论
|
2026-10-05 15:23:46 +08:00 |
|
suzmii
|
f2f33aead3
|
合并 master 分支到 fix/agc-titlebar-project-label
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Successful in 7m34s
Project CI / AI game creator shell Rust crates (pull_request) Successful in 4m54s
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Successful in 5m59s
Project CI / Frontend tests (pull_request) Successful in 3m21s
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
- 合入 Direct 交付合同与租约机制重构(PR #608),涉及 direct_execution、direct_validation、direct_delivery、direct_runtime、codex_app_server 等壳层代码与提示词、agc-skills
- 合入已合入 Direct 重构临时文档的清理提交
- 解决 docs/project-memory/shared-memory/decision-log.md 冲突:保留本分支「AGC 窗口标题栏项目标签改认当前项目」条目,并追加 master 的四条 Direct 决策条目
- 合并后确认技术方案文档同时保留本分支标题栏条目(常态显示当前项目名、运行中项目降级为圆点与徽标)与 master 的 Direct 操作控制章节
- 验证:git diff --check 通过;npm run check:encoding 通过(5266 个文件)
|
2026-10-05 15:16:43 +08:00 |
|
lhk229
|
3ac8ab1c08
|
重构 Direct 交付合同与租约机制 (#608)
Project CI / AI game creator shell Rust lane 1/2 (push) Has been cancelled
Project CI / AI game creator shell Rust crates (push) Has been cancelled
Project CI / Backend tests (push) Has been cancelled
Project CI / Native shell tests (push) Has been cancelled
Project CI / Frontend tests (push) Has been cancelled
Project CI / Repository checks (push) Has been cancelled
Project CI / AI game creator shell web tests (push) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (push) Has been cancelled
当前 Direct 把交付合同作为操作准入条件,并在任意付费/执行失败后进入全局 Draining;一条无关的挂起命令可因此阻断后续代码编辑。本 PR 用于推进 #518、#529 的合同与租约机制重构。
当前仅提交草稿里程碑,运行时代码尚未修改,问题尚未修复。
- 已确认:普通操作成功或失败后返回真实结果,由 Agent 决定下一步;宿主保留回合活动状态、时间与并发控制,取消全局失败排空及返修批次门禁。
- 保留既有权限、旧回合写入归属,以及资源操作自身的幂等和不确定结果核对。
- 待细化:交付合同是否及在哪些产品场景保留、工具与提示词调整、已有配置与账本兼容;实现前同步主规范和单里程碑实现计划。
工作范围:`docs/project-memory/plans/【里程碑】Direct合同与租约机制重构-2026-10-03.md`。
验证:`npm run check:doc-index`、`npm run check:encoding`、`git diff --cached --check` 通过。本次未运行运行时测试。
关联 #518、#529;当前不关闭问题。
Reviewed-on: #608
Co-authored-by: lhk <ink29535@proton.me>
Co-committed-by: lhk <ink29535@proton.me>
|
2026-10-05 14:19:05 +08:00 |
|
k88936
|
25bca13c31
|
类型(后台会员): 会员状态文案表改用命名联合类型
- membershipStatusLabels 原为 Record<string,string>,新增/改名状态时编译期无法发现漏配
- 改用 @genarrative/shared 的 ProfileMembershipStatus(normal/active),并把 AdminProfileMembershipPayload.status 的内联字面量一并替换
|
2026-10-05 13:59:14 +08:00 |
|
k88936
|
bf2addbae3
|
重构(会员档位页): 合并模型权限的重复文案映射
- 表单选项与列表摘要原先各写一份档位文案,措辞还不一致
- 抽出 modelAccessLabels 单一表,表单选项由它派生,列表摘要直接查表
|
2026-10-05 13:53:29 +08:00 |
|
k88936
|
5dc0654426
|
重构(AGC模型文案): 合并原因到文案的重复映射
- 两个 helper 原先各维护一份 reason switch,新增 reason 时容易漏改一处
- 抽成单个 REASON_COPY 表,unknown 作为未知/缺失原因的兜底,两个 helper 共用
|
2026-10-05 13:50:16 +08:00 |
|