BGM生成路径优化 #142

Merged
kdletters merged 30 commits from codex/bgm-generation-opt-v1 into master 2026-08-06 17:54:40 +08:00
Owner
No description provided.
lhk229 added 14 commits 2026-08-05 21:49:08 +08:00
融合画板音乐权威设计,固定BGM原样Prompt、预设、补全、简化、撤销和提交锁口径。
追加长期决策,明确SFX、字段名、External v1和LLM日志策略保持不变。
新增前端 Unicode code point 与有效字符计数规则
新增 Rust BGM 原样校验并覆盖生成和补全边界
新增 Prompt 助手 camelCase 内部 DTO 与契约测试
补齐跨语言 Unicode、200 字和 SFX 回归测试
补全T0一键简化两轮输入、结构化结果和互斥状态规则
新增TypeScript Unicode White_Space canonicalizer与生成、补全、简化状态
新增Rust零分配canonicalizer并让计数和校验返回规范化Prompt
补齐跨语言Unicode及200/201字符边界测试
新增登录态补全与简化内部BFF及共享请求约束
实现OpenAI Chat四字段严格响应解析与180到170两轮简化
隔离上游错误与未通过候选并补齐重试和协议测试
同步权威设计与项目决策记录
冻结简化输入上限、请求体边界与未完成响应规则

拒绝不完整模型响应并补齐2000字和413校验

补充助手路由埋点、回归测试与长期决策记录
增加补全与简化内部客户端及共享DTO
实现对话框级状态、取消、迟到响应保护和交换式撤销
接入画布生成工作流并将submitting设为排他锁
补齐同步读取、项目切换和字符边界回归测试
- Prompt 助手 scope 改为账号与项目联合绑定:hook 接收 currentUserId / projectId 两个原始值,内部生成稳定 scope key,调用方无法再传入按引用比较的对象。
- 删除 render 阶段的 scope ref 改写,scope 身份只在已提交的 React 生命周期中推进,被放弃的并发 render 不再污染迟到响应判断。
- scope 切换改用 useLayoutEffect 在 commit 阶段同步原子清理:中止旧请求、清空 active operation、reset 状态模型、清空错误与公开 dialog 状态、重建已知 dialog 集合。修复新 scope 已 commit 而 passive effect 未执行时,旧账号 / 旧项目候选被写入同 ID dialog 的竞态。
- 迟到响应判定为 stale 时先让状态模型完成 reject 再移除 active operation,不再残留 completing / simplifying 忙状态。
- Prompt 助手 client 增加 EDITOR_BACKGROUND_MUSIC_PROMPT_ASSIST_TIMEOUT_MS = 180_000 并透传 timeoutMs,仍不启用前端重试;超时按现有失败路径恢复 idle,保留 canonical Prompt,不产生撤销快照。
- 补充定向测试:账号切换中止与清理、scope 清理早于任何 passive effect 的相位回归、等值 scope props 不误判 stale、StrictMode 双渲染、浏览器超时恢复,以及两个助手路由的超时透传与无重试断言。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 权威设计「单层撤销」增加撤销按钮可见性与可用性小节:可见条件为存在可撤销快照或本次 AI 操作的临时快照,启用条件为可见且面板未处于 completing / simplifying / submitting / generating 锁定状态,并补 10 行状态矩阵。
- 说明发起 AI 操作时可撤销快照被本次临时快照取代,「处理中没有可撤销快照」不等于「没有快照」,不得据此隐藏按钮;禁止为让处理期间按钮可见而保留旧快照,避免与 AI 失败不恢复旧快照冲突。
- 权威设计「AI 操作与方案 A 提交锁」限定「禁用撤销」指显示并禁用,可见性按单层撤销矩阵判定,不得隐藏。
- 权威设计验收增加撤销按钮逐行验收,要求处理期间按钮仍在可访问树中且为真实禁用态,不得用隐藏或视觉伪装代替禁用。
- decision-log 追加对应长期交互决策,标注不修改状态模型字段且不适用于 SFX。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- 新增 ImageCanvasBackgroundMusicPresetModel:三组 30 个固定预设(用途 12 / 氛围 3 / 场景 15)与追加纯函数;按 Unicode code point 读取末位字符,标点用 \p{Punctuation} 判定,非标点先补中文句号,不去重、不截断、不改内部空白。
- 新增独立 BGM composer:canonical preview 计数不改写输入框,AI 补全、一键简化、撤销与生成按动作矩阵启用,错误复用 PlatformStatusMessage,底部保留固定 Suno 胶囊与动态泥点价格。
- 撤销按钮按权威设计矩阵渲染:可见条件为存在可撤销快照或本次临时快照,启用条件为可见且面板未锁定;AI 处理与提交期间显示并禁用,不隐藏。
- 新增预设轨道组件:多份等宽队列 + ResizeObserver 实测宽度 + rAF 按帧步进取模归位实现无缝循环;左右 15% 加速、中间 70% 暂停、箭头 hover 加速与点击离散滚动,底部细线标记当前控制区。
- 轨道只保留一份可聚焦预设按钮,视觉克隆移出可访问树但点击映射到同一动作;收起、锁定、页面不可见、dialog 切换和卸载都取消 rAF。
- 桌面 hover 控制区按 (hover: hover) and (pointer: fine) 启用,能力丢失时清空当前控制区,避免没有 pointerleave 的设备永久停在暂停态;reduced-motion 初值与运行中变化都生效。
- 触摸抬手后等待滚动事件停止再恢复 rAF,不使用固定等待时长,且不把 rAF 自身写 scrollLeft 触发的 scroll 计入空闲判定。
- 加速档按真机实测定为 238 px/s,左右控制区与箭头共用,避免两者之间出现速度突变。
- 将原共享音频 composer 收窄为 SFX-only,BGM 路由到独立组件并按 dialog ID 设置 key;SFX 的 Vidu 胶囊、时长滑块、默认 Prompt 与价格行为不变。
- 补充 ImageCanvasBackgroundMusicPresetModel、独立 composer 与预设轨道的定向测试,并扩展现有 composer 的 SFX 回归与 BGM 路由断言。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
明确 BGM 正式提交在 queue 与 inline 模式下的结算时点
关闭 BGM 正式 POST 的 unsafe 自动重试并冻结非扩展边界
删除请求侧固定泥点价格并改为服务端动态价格口径
收紧归档与账号项目切换后的 scope-safe 写回规则
前端接入规范化提示词、同步排他锁及账号与项目分层回调门禁

关闭BGM正式POST自动重试并补充真实传输层单次请求回归

后端统一站内BGM规范载荷并保留External v1原始载荷幂等语义

补齐队列、直返、平台音频及生命周期边界测试

新增并更新T5独立实施记录
保留BGM独立composer与提示词优化链路

合入master最新编辑器和项目能力

解决决策日志与音频输入组件冲突
增加 TypeScript/Rust 共用 canonicalization fixture
补齐 BGM 跨层等值、SFX 和后端边界测试
将 BGM 补全与简化请求模型改为 gpt-5.6-luna,保留画布 Agent gpt-5.4-mini
同步权威设计、项目记忆和 T6 发布门禁记录
验证本地定向测试与真实 VectorEngine 补全/简化请求
合并:同步最新master
Project CI / Native shell tests (pull_request) Successful in 14m13s
Project CI / Frontend tests (pull_request) Failing after 2m22s
Project CI / Backend tests (pull_request) Successful in 4m6s
Project CI / Repository checks (pull_request) Failing after 43s
de98219a94
合并 origin/master 8f19964e3 到 BGM 优化分支

保留 BGM 记录、完美像素改动及双方前端测试

通过冲突相关前端定向测试(61项)
lhk229 added 1 commit 2026-08-05 21:55:24 +08:00
Merge branch 'master' of ssh://genarrative-station:2222/GenarrativeAI/Genarrative into codex/bgm-generation-opt-v1
Project CI / Repository checks (pull_request) Failing after 43s
Project CI / Frontend tests (pull_request) Failing after 2m17s
Project CI / Backend tests (pull_request) Successful in 4m13s
Project CI / Native shell tests (pull_request) Successful in 13m17s
2a0a4238d1
lhk229 self-assigned this 2026-08-06 10:41:28 +08:00
lhk229 added 2 commits 2026-08-06 11:04:08 +08:00
按 simple-import-sort 要求调整完美像素与 BGM 助手导入顺序

通过目标文件 ESLint 与 git diff --check
文档:恢复音频生成共享分流并停止跟踪本地方案
Project CI / Repository checks (pull_request) Failing after 11s
Project CI / Backend tests (pull_request) Failing after 11s
Project CI / Frontend tests (pull_request) Failing after 2m48s
Project CI / Native shell tests (pull_request) Successful in 14m43s
3a363c98ff
新增共享音频 Composer 重构方案并收口权威设计
更新实施记录、决策日志、踩坑记录与文档索引
停止跟踪 local-docs 中的 T5 实施方案并保留本地文件
lhk229 added 1 commit 2026-08-06 11:11:21 +08:00
合并:同步最新master
Project CI / Repository checks (pull_request) Failing after 44s
Project CI / Frontend tests (pull_request) Failing after 2m51s
Project CI / Backend tests (pull_request) Successful in 5m29s
Project CI / Native shell tests (pull_request) Successful in 13m32s
477eb1a003
合并 origin/master 最新提交 7b075df39
保留当前分支的 BGM 优化与共享音频面板方案

# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
#	docs/project-memory/shared-memory/pitfalls.md
#	server-rs/crates/api-server/src/editor_generation_queue.rs
#	src/components/image-editor/useImageCanvasGenerationSurface.tsx
#	src/services/image-editor/editorProjectClient.ts
lhk229 added 1 commit 2026-08-06 11:26:29 +08:00
BGM音频模块迁移回isSoundEffect
Project CI / Repository checks (pull_request) Successful in 1m26s
Project CI / Frontend tests (pull_request) Successful in 3m33s
Project CI / Backend tests (pull_request) Successful in 5m52s
Project CI / Native shell tests (pull_request) Successful in 15m1s
eba8f25995
lhk229 added 1 commit 2026-08-06 11:54:22 +08:00
文档:同步T6提交与视觉验证状态
Project CI / Frontend tests (pull_request) Successful in 3m14s
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Backend tests (pull_request) Failing after 8s
Project CI / Native shell tests (pull_request) Successful in 14m18s
fe08a2643c
记录T6收口已提交并推送

补记共享音频Composer浏览器视觉验证结果
Author
Owner

Agent审查时应明确问题是否构成PR阻断,不得随意夸大问题影响面与严重程度。

Agent审查时应明确问题是否构成PR阻断,不得随意夸大问题影响面与严重程度。
lhk229 added 1 commit 2026-08-06 11:56:10 +08:00
合并:同步最新master
Project CI / Repository checks (pull_request) Successful in 1m21s
Project CI / Frontend tests (pull_request) Failing after 2m15s
Project CI / Backend tests (pull_request) Successful in 4m2s
Project CI / Native shell tests (pull_request) Failing after 10m23s
5b4599f147
纳入远端master最新变更
lhk229 marked the pull request as ready for review 2026-08-06 11:56:19 +08:00
kdletters requested changes 2026-08-06 12:52:20 +08:00
Dismissed
kdletters left a comment
Member

基于最新 master ef6281e1 与当前 head 5b4599f1 复审。确认 1 个由本 PR 引入的可访问性阻断,详见 inline comment:当前可见的预设视觉克隆仍可获得焦点,会把屏幕阅读器焦点放入 aria-hidden 子树。另当前 Frontend、Native shell 两项 required CI 未通过,且提交历史仍有英文空正文 merge commit 与中文空正文提交。请修复焦点边界、补齐点击/Tab/触摸回归,整理提交历史并让当前 head 的全部 required jobs 通过后再请求复审。

基于最新 master ef6281e1 与当前 head 5b4599f1 复审。确认 1 个由本 PR 引入的可访问性阻断,详见 inline comment:当前可见的预设视觉克隆仍可获得焦点,会把屏幕阅读器焦点放入 aria-hidden 子树。另当前 Frontend、Native shell 两项 required CI 未通过,且提交历史仍有英文空正文 merge commit 与中文空正文提交。请修复焦点边界、补齐点击/Tab/触摸回归,整理提交历史并让当前 head 的全部 required jobs 通过后再请求复审。
@@ -0,0 +376,4 @@
className="image-canvas-editor__background-music-presets-queue"
// 只有第一份队列进入可访问树,其余视觉克隆不可聚焦,
// 保证每个预设只有一个键盘入口。
aria-hidden={copyIndex === 0 ? undefined : true}
Member

[P2] 视觉克隆不能保留可获得焦点的按钮。轨道初始化会把 viewport 定位到第二份队列,但这里仅用 aria-hiddentabIndex={-1} 隐藏克隆;鼠标或触摸点击原生 button 仍会使其获得焦点,导致焦点落入 aria-hidden 子树,屏幕阅读器无法感知,后续 Tab 还会跳回屏外的第一份队列。请让视觉克隆成为真正不可聚焦的展示节点并把选择映射到唯一可访问实例,或采用等效方案确保点击后焦点不进入隐藏子树;同时补充初始中间队列点击后的 activeElement、Tab 与触摸回归测试。

[P2] 视觉克隆不能保留可获得焦点的按钮。轨道初始化会把 viewport 定位到第二份队列,但这里仅用 `aria-hidden` 和 `tabIndex={-1}` 隐藏克隆;鼠标或触摸点击原生 `button` 仍会使其获得焦点,导致焦点落入 `aria-hidden` 子树,屏幕阅读器无法感知,后续 Tab 还会跳回屏外的第一份队列。请让视觉克隆成为真正不可聚焦的展示节点并把选择映射到唯一可访问实例,或采用等效方案确保点击后焦点不进入隐藏子树;同时补充初始中间队列点击后的 `activeElement`、Tab 与触摸回归测试。
lhk229 marked this conversation as resolved
Author
Owner

native shell tests ci错误与本分支无关,且涉及生产代码,不在本分支修改。相同错误不应继续作为阻断条件。
结论:这是生产代码的 Runner 关闭契约缺陷,不是测试脆弱,也与 BGM 无关。

唯一失败是 process_session_runner_shutdown_reaps_active_session

  • 子进程已成功进入 terminated / runner-shutdown
  • shutdown_all_process_sessions_and_wait 只等待状态不再是 running。
  • finalize_live_process_session 会先发布 terminal 状态,之后才写 transcript、持久化 record,并在第 1442 行删除 registry。
  • 因此 shutdown 可以提前返回成功,测试随即在 tests.rs 看到 registry 条目仍存在。
  • Runner 正式关闭路径直接依赖该函数结果,存在进程退出时 durable finalization 尚未完成的风险。

最小正确修复:成功条件改为同时满足:

  • process_session_registry.sessions.is_empty()
  • Linux pending launch registry 为空

若存在 needs-reconciliation,等待超时并返回错误符合失败关闭语义。不要只给测试增加 sleep 或重试。

CI 其余 1754 项通过;失败代码与当前 master 完全一致,master 通过只是没有撞到该时序窗口。

native shell tests ci错误与本分支无关,且涉及生产代码,不在本分支修改。相同错误不应继续作为阻断条件。 结论:这是生产代码的 Runner 关闭契约缺陷,不是测试脆弱,也与 BGM 无关。 唯一失败是 `process_session_runner_shutdown_reaps_active_session`: - 子进程已成功进入 `terminated / runner-shutdown`。 - 但 [shutdown_all_process_sessions_and_wait](C:/projects/narrative/bgm-generation-opt-v1/apps/ai-game-creator-shell/src-tauri/src/process_session/recovery.rs:169) 只等待状态不再是 running。 - [finalize_live_process_session](C:/projects/narrative/bgm-generation-opt-v1/apps/ai-game-creator-shell/src-tauri/src/process_session/lifecycle.rs:1386) 会先发布 terminal 状态,之后才写 transcript、持久化 record,并在第 1442 行删除 registry。 - 因此 shutdown 可以提前返回成功,测试随即在 [tests.rs](C:/projects/narrative/bgm-generation-opt-v1/apps/ai-game-creator-shell/src-tauri/src/process_session/tests.rs:1115) 看到 registry 条目仍存在。 - Runner 正式关闭路径直接依赖该函数结果,存在进程退出时 durable finalization 尚未完成的风险。 最小正确修复:成功条件改为同时满足: - `process_session_registry.sessions.is_empty()` - Linux pending launch registry 为空 若存在 `needs-reconciliation`,等待超时并返回错误符合失败关闭语义。不要只给测试增加 sleep 或重试。 CI 其余 `1754` 项通过;失败代码与当前 master 完全一致,master 通过只是没有撞到该时序窗口。
lhk229 added 1 commit 2026-08-06 13:17:25 +08:00
测试:修复画布缓存断言竞态
Project CI / Backend tests (pull_request) Failing after 13s
Project CI / Repository checks (pull_request) Failing after 9s
Project CI / Frontend tests (pull_request) Successful in 2m50s
Project CI / Native shell tests (pull_request) Successful in 14m54s
ee474b8ec8
等待会话缓存完成revision更新后再校验内容
lhk229 added 1 commit 2026-08-06 13:19:24 +08:00
合并:同步最新master
Project CI / Repository checks (pull_request) Successful in 57s
Project CI / Frontend tests (pull_request) Successful in 3m51s
Project CI / Backend tests (pull_request) Successful in 4m2s
Project CI / Native shell tests (pull_request) Failing after 3m59s
9671944e0f
纳入远端master最新变更
lhk229 added 1 commit 2026-08-06 14:37:31 +08:00
修复背景音乐预设克隆焦点
Project CI / Repository checks (pull_request) Successful in 9m55s
Project CI / Backend tests (pull_request) Successful in 12m19s
Project CI / Frontend tests (pull_request) Successful in 15m31s
Project CI / Native shell tests (pull_request) Successful in 27m2s
a786fa7562
将中间队列设为唯一可访问按钮并移除视觉克隆的焦点能力
为键盘预设补充可见焦点样式
补充克隆点击、锁定及键盘导航回归测试
lhk229 added 1 commit 2026-08-06 15:22:54 +08:00
配置BGM助手中等推理强度
Project CI / Repository checks (pull_request) Failing after 7s
Project CI / Backend tests (pull_request) Failing after 8s
Project CI / Frontend tests (pull_request) Successful in 3m42s
Project CI / Native shell tests (pull_request) Successful in 14m59s
c3e8be719d
将BGM补全与简化请求统一设置reasoning_effort为medium
补充请求对象和HTTP载荷断言并同步权威设计
lhk229 added 1 commit 2026-08-06 15:26:42 +08:00
合并:同步最新master
Project CI / Repository checks (pull_request) Successful in 1m6s
Project CI / Backend tests (pull_request) Successful in 3m26s
Project CI / Frontend tests (pull_request) Successful in 3m18s
Project CI / Native shell tests (pull_request) Successful in 14m13s
59b92123b9
合入远端 master 的最新提交
kdletters requested review from kdletters 2026-08-06 15:30:43 +08:00
lhk229 marked the pull request as work in progress 2026-08-06 15:36:48 +08:00
Author
Owner

前端UI需要调整一下

前端UI需要调整一下
lhk229 added 1 commit 2026-08-06 16:45:11 +08:00
优化BGM生成面板界面
Project CI / Frontend tests (pull_request) Successful in 3m7s
Project CI / Backend tests (pull_request) Successful in 3m51s
Project CI / Repository checks (pull_request) Successful in 1m27s
Project CI / Native shell tests (pull_request) Successful in 12m40s
b79f72391b
按设计稿重排 BGM composer 的控件布局,并统一输入框行为。

- 字数计数移到「预设」标题行右端,与预设展开控件同排
- AI补全 / 一键简化 / 撤销 移入底部行,与 Suno、生成同区域
- 助手按钮补图标并压回 2.25rem 高度与胶囊圆角;shape="pill" 与
  size="xs" 走的是 Tailwind 分层 utility,压不过未分层的
  .platform-button,因此显式写死
- 预设展开 / 收起改为裸 chevron 图标按钮,可访问名由 aria-label 承担
- 预设滚动箭头去边框,hover 才出淡底
- BGM footer 改 flex 并作用域隔离,共享的 5 列 grid 不受影响
- 生成按钮收到 2.25rem,样式、文案与泥点角标保持不变
- 面板 min-height 归零并移除多余显式行,消除收起预设时的空白
- 输入框改用 AutoGrowTextArea,与生图 / 生视频 / 角色 / 图标同源,
  53.6px 起自动增高至 128px 后内滚

交互逻辑未改动。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
lhk229 marked the pull request as ready for review 2026-08-06 16:47:41 +08:00
Member

图呢

图呢
Author
Owner
image.png image.png
<img width="449" alt="image.png" src="attachments/d16154c9-aba7-4624-a23e-ae4a85cb8651"> <img width="476" alt="image.png" src="attachments/266122c7-0966-4357-9007-926f1f16236f">
145 KiB
181 KiB
Author
Owner
image.png
<img width="491" alt="image.png" src="attachments/000324b0-7a74-4037-8f4f-ef39583b056f">
204 KiB
lhk229 added 1 commit 2026-08-06 17:02:16 +08:00
格式化BGM界面涉及的两个文件
Project CI / Backend tests (pull_request) Failing after 10s
Project CI / Repository checks (pull_request) Failing after 10s
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
5256599380
对 index.css 与 ImageCanvasBackgroundMusicPresetMarquee.tsx 执行 Prettier,
消除评审提到的格式检查告警。纯格式改动,语义不变。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
lhk229 added 1 commit 2026-08-06 17:03:57 +08:00
合并:同步最新master
Project CI / Repository checks (pull_request) Failing after 24s
Project CI / Frontend tests (pull_request) Failing after 2m18s
Project CI / Backend tests (pull_request) Successful in 3m48s
Project CI / Native shell tests (pull_request) Successful in 14m22s
a0b213e718
合入远端 master 的最新提交
kdletters reviewed 2026-08-06 17:14:34 +08:00
kdletters left a comment
Member

复审最新提交,发现 1 个仍存在的响应式布局问题,详见行内评论。

复审最新提交,发现 1 个仍存在的响应式布局问题,详见行内评论。
@@ -16854,0 +17157,4 @@
width: 15%;
}
@media (max-width: 640px) {
Member

[P1] BGM footer 的换行断点与既有 760px 规则不一致

这里直到 640px 才开启 flex-wrap,但上方 @media (max-width: 760px) 已把模型容器和生成按钮设置为 width: 100%。因此 641–760px 内 footer 仍被强制放在一行:在 700px Chromium 中,动作组 clientWidth=102pxscrollWidth=180px,动作按钮会与 Suno 区域重叠;即使未展示“撤销”也仍会溢出。请将 footer 的换行断点与 760px 对齐,或在该区间覆盖 width: 100%,并补一项覆盖该宽度区间的浏览器回归。

[P1] BGM footer 的换行断点与既有 760px 规则不一致 这里直到 640px 才开启 `flex-wrap`,但上方 `@media (max-width: 760px)` 已把模型容器和生成按钮设置为 `width: 100%`。因此 641–760px 内 footer 仍被强制放在一行:在 700px Chromium 中,动作组 `clientWidth=102px`、`scrollWidth=180px`,动作按钮会与 Suno 区域重叠;即使未展示“撤销”也仍会溢出。请将 footer 的换行断点与 760px 对齐,或在该区间覆盖 `width: 100%`,并补一项覆盖该宽度区间的浏览器回归。
Author
Owner

你说得对,这个门槛把整件事推翻了。

关键数字

[platformEntryResponsive.ts:3](src/components/platform-entry/platformEntryResponsive.ts:3):

export const PLATFORM_DESKTOP_LAYOUT_QUERY = '(min-width: 1024px)';

[PlatformEntryActiveFlowShell.tsx:307-313](src/components/platform-entry/PlatformEntryActiveFlowShell.tsx:307):selectionStage === 'image-editor'!isDesktopLayout 时,直接 return 那块桌面端提示,整个画布编辑器根本不渲染

也就是说:

  • < 1024px:进不去画布,BGM composer 压根不存在
  • ≥ 1024px@media (max-width: 760px) 那条 width: 100% 不生效

641–760px 这个带子完全落在门槛之内,两边差着 264px。所以:

这个 P1 是假问题

不是"不易复现",是在产品里不可达。评审那些数字(clientWidth=102、scrollWidth=180)应该是把组件单独挂在 700px 视口下量的——脱离了外层的 1024px 准入门槛。我上一轮说"你得手动把窗口拖到 641–760 之间才看得到"也是错的:拖到那个宽度只会看到"请在桌面端打开创作工具",你的质疑正好点在这上面。

顺带这也意味着 [index.css:8927](src/index.css:8927) 整个 @media (max-width: 760px) 块里所有 .image-canvas-editor__* 的规则目前都是死代码——不止 footer 这几条。那是历史遗留,不是我这次引入的。

同理,我自己加的那条 ≤640pxflex-wrap: wrap 也一样够不着,属于白写。当时的理由("手机上一行塞不下")在有 1024px 准入门槛的前提下不成立。

建议

  1. 这条 P1 可以驳回,理由写清楚:编辑器有 min-width: 1024px 准入门槛,641–760px 不可达。
  2. 我加的 ≤640px footer flex-wrap 要不要删掉,你定——留着无害(死规则),删掉更干净,但会和周围一堆同样够不着的 760px 规则显得不一致。
  3. 真正值得单独提的是:@media (max-width: 760px) 里那一大块画布编辑器规则已经全是死代码,清理它是另一个独立的事,不该混进这个 PR。

有一点还没验证:isDesktopLayout 是这条平台入口路径上的门槛,我没有逐一确认所有进入画布的路径(比如直接敲 /editor/canvas URL、或 RPG 入口)是不是都走这个 shell。如果存在绕过它的入口,结论要重估。要我查一下吗?

你说得对,这个门槛把整件事推翻了。 ## 关键数字 [[platformEntryResponsive.ts:3](https://claude.ai/epitaxy/src/components/platform-entry/platformEntryResponsive.ts:3)](src/components/platform-entry/platformEntryResponsive.ts:3): ```ts export const PLATFORM_DESKTOP_LAYOUT_QUERY = '(min-width: 1024px)'; ``` [[PlatformEntryActiveFlowShell.tsx:307-313](https://claude.ai/epitaxy/src/components/platform-entry/PlatformEntryActiveFlowShell.tsx:307)](src/components/platform-entry/PlatformEntryActiveFlowShell.tsx:307):`selectionStage === 'image-editor'` 且 `!isDesktopLayout` 时,**直接 return 那块桌面端提示,整个画布编辑器根本不渲染**。 也就是说: - **< 1024px**:进不去画布,BGM composer 压根不存在 - **≥ 1024px**:`@media (max-width: 760px)` 那条 `width: 100%` 不生效 **641–760px 这个带子完全落在门槛之内**,两边差着 264px。所以: ## 这个 P1 是假问题 不是"不易复现",是**在产品里不可达**。评审那些数字(clientWidth=102、scrollWidth=180)应该是把组件单独挂在 700px 视口下量的——脱离了外层的 1024px 准入门槛。我上一轮说"你得手动把窗口拖到 641–760 之间才看得到"也是错的:拖到那个宽度只会看到"请在桌面端打开创作工具",你的质疑正好点在这上面。 顺带这也意味着 [[index.css:8927](https://claude.ai/epitaxy/src/index.css:8927)](src/index.css:8927) 整个 `@media (max-width: 760px)` 块里所有 `.image-canvas-editor__*` 的规则**目前都是死代码**——不止 footer 这几条。那是历史遗留,不是我这次引入的。 同理,我自己加的那条 `≤640px` 的 `flex-wrap: wrap` 也一样够不着,属于白写。当时的理由("手机上一行塞不下")在有 1024px 准入门槛的前提下不成立。 ## 建议 1. **这条 P1 可以驳回**,理由写清楚:编辑器有 `min-width: 1024px` 准入门槛,641–760px 不可达。 2. 我加的 `≤640px` footer `flex-wrap` 要不要删掉,你定——留着无害(死规则),删掉更干净,但会和周围一堆同样够不着的 760px 规则显得不一致。 3. 真正值得单独提的是:`@media (max-width: 760px)` 里那一大块画布编辑器规则已经全是死代码,清理它是另一个独立的事,不该混进这个 PR。 有一点还没验证:`isDesktopLayout` 是这条平台入口路径上的门槛,我没有逐一确认所有进入画布的路径(比如直接敲 `/editor/canvas` URL、或 RPG 入口)是不是都走这个 shell。如果存在绕过它的入口,结论要重估。要我查一下吗?
Author
Owner

链路
App.tsx / ActiveApp.tsx → PlatformEntryFlowShell.tsx:1 → PlatformEntryActiveFlowShell.tsx(它导出的函数叫 PlatformEntryFlowShellImpl,和同名文件不是一回事)。RpgEntryFlowShell 也是转手到同一个 PlatformEntryFlowShell。

所以线上走的就是我上一轮查的那个:PlatformEntryActiveFlowShell.tsx:307-313,selectionStage === 'image-editor' 且 !isDesktopLayout 直接 return 桌面端提示。门槛成立,1024px 结论不变。

但有个没门槛的渲染点
PlatformEntryFlowShellImpl.tsx:15716-15731(那个 18000 行的同名文件)里,selectionStage === 'image-editor' 是无条件渲染 ImageCanvasEditorView 的——那个文件里的 isDesktopLayout 只用来挡「创作主页」(creationLandingContent,提示语是"请在桌面端打开创作主页",比活跃 shell 那句"创作工具"少一个词),没挡编辑器。

而这个文件目前只被 RpgEntryFlowShellImpl.tsx:2-3 重导出,而 RpgEntryFlowShell.tsx 实际用的又是 PlatformEntryFlowShell(活跃 shell)。也就是说这条重导出没有消费者,看起来是迁移剩下的旧实现。

所以
P1 依然可以驳回:线上唯一可达的入口有 1024px 门槛,641–760px 进不去。
我上一轮说"整个 @media (max-width: 760px) 块都是死代码"这个说法要收窄——前提是那个旧 shell 确实无人使用。我只顺着 import 追了一层,没有完全排除动态导入或别的入口,所以这句我不敢打包票。

链路 App.tsx / ActiveApp.tsx → PlatformEntryFlowShell.tsx:1 → PlatformEntryActiveFlowShell.tsx(它导出的函数叫 PlatformEntryFlowShellImpl,和同名文件不是一回事)。RpgEntryFlowShell 也是转手到同一个 PlatformEntryFlowShell。 所以线上走的就是我上一轮查的那个:PlatformEntryActiveFlowShell.tsx:307-313,selectionStage === 'image-editor' 且 !isDesktopLayout 直接 return 桌面端提示。门槛成立,1024px 结论不变。 但有个没门槛的渲染点 PlatformEntryFlowShellImpl.tsx:15716-15731(那个 18000 行的同名文件)里,selectionStage === 'image-editor' 是无条件渲染 ImageCanvasEditorView 的——那个文件里的 isDesktopLayout 只用来挡「创作主页」(creationLandingContent,提示语是"请在桌面端打开创作主页",比活跃 shell 那句"创作工具"少一个词),没挡编辑器。 而这个文件目前只被 RpgEntryFlowShellImpl.tsx:2-3 重导出,而 RpgEntryFlowShell.tsx 实际用的又是 PlatformEntryFlowShell(活跃 shell)。也就是说这条重导出没有消费者,看起来是迁移剩下的旧实现。 所以 P1 依然可以驳回:线上唯一可达的入口有 1024px 门槛,641–760px 进不去。 我上一轮说"整个 @media (max-width: 760px) 块都是死代码"这个说法要收窄——前提是那个旧 shell 确实无人使用。我只顺着 import 追了一层,没有完全排除动态导入或别的入口,所以这句我不敢打包票。
lhk229 added 1 commit 2026-08-06 17:21:51 +08:00
修复索引样式测试的选择器字面量
Project CI / Repository checks (pull_request) Successful in 1m7s
Project CI / Frontend tests (pull_request) Successful in 3m38s
Project CI / Backend tests (pull_request) Successful in 4m0s
Project CI / Native shell tests (pull_request) Successful in 14m8s
f7379247ce
Prettier 把 .creation-landing__asset-waterfall--masonry 与
> .creation-landing__asset-card 合并成单行后,index.test.ts 里按原始换行
硬编码的选择器字面量匹配不到,getCssBlock 返回 -1。

字面量改为与格式化后的源码一致。选择器语义未变。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Author
Owner

P1实际上不可达

P1实际上不可达
kdletters scheduled this pull request to auto merge when all checks succeed 2026-08-06 17:54:01 +08:00
kdletters approved these changes 2026-08-06 17:54:38 +08:00
kdletters merged commit 281c84b7bf into master 2026-08-06 17:54:40 +08:00
kdletters deleted branch codex/bgm-generation-opt-v1 2026-08-06 17:54:41 +08:00
Sign in to join this conversation.