Skip to content

fix: preserve layout loading state across temporary overlays#60

Closed
google-labs-jules[bot] wants to merge 2 commits into
mainfrom
fix/chat-surface-monotonic-layout-14034288579553654798
Closed

fix: preserve layout loading state across temporary overlays#60
google-labs-jules[bot] wants to merge 2 commits into
mainfrom
fix/chat-surface-monotonic-layout-14034288579553654798

Conversation

@google-labs-jules

Copy link
Copy Markdown
Contributor

观察到的问题

在 Daily Lifecycle Review 中发现:ChatConversationSurfaceProjectionCoordinator 没有将界面可视状态(ShouldShow...)与界面布局加载状态(ShouldLoad...,在 Uno/WinUI 中对应 x:Load)解耦。临时显示阻塞遮罩或切换会话时,底层会话根和消息记录的 ShouldShow 会变为 false,导致同名的 ShouldLoad 跟着变 false,从而在 UI 层卸载整个结构,后续又需要重新挂载,违背了框架的最佳实践和加载状态的单调性(monotonicity)。

根本原因

ChatConversationSurfaceProjectionCoordinator 直接使用了展示状态作为加载状态,没有通过内部状态跟踪来记录“是否曾经挂载过”。只要曾经需要显示,就应该保持挂载状态。

为什么架构上是安全的

我引入了两个布尔类型的本地字段 _hasLoadedActiveConversationRoot_hasLoadedTranscriptSurface,它们只会被设为 true。通过将这两个字段传给 ChatConversationSurfaceProjection 作为加载依据,保证了单调性。这种改动保持了单一事实源(SSOT)设计,也没有在 Code-Behind 中加入任何黑客代码,并且符合跨平台的 x:Load 生命周期控制最佳实践。

验证命令

我执行了以下的验证步骤:

  1. 编译解决方案:dotnet build SalmonEgg.sln --configuration Debug(发现缺少的 WebAssembly workload 后,执行了 dotnet workload install wasm-tools 修复编译环境)。
  2. 验证修复是否通过原测试逻辑(修改了有缺陷的断言来保证新状态):dotnet test tests/SalmonEgg.Presentation.Core.Tests/SalmonEgg.Presentation.Core.Tests.csproj --configuration Debug --no-restore
  3. 执行全局测试验证契约:dotnet test SalmonEgg.sln --configuration Debug --no-build

剩余未验证的仅限 GUI 的风险

依赖了底层依赖的 Uno 平台对于 x:LoadShouldLoad 保持 true 并且 Visibility 设为 Collapsed 时的开销,这需要在不同平台的实际渲染管线上做 smoke testing 才能最后确认其完全零回归。然而架构上的变化是纯正的逻辑变更,不引入任何特定于平台的变化。


PR created automatically by Jules for task 14034288579553654798 started by @YoungSx

@google-labs-jules

Copy link
Copy Markdown
Contributor Author

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@vercel

vercel Bot commented Jun 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
salmonegg Ready Ready Preview, Comment Jun 21, 2026 12:20am

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

@YoungSx

YoungSx commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Closing during PR triage: this is a stale or duplicate layout-loading monotonicity attempt. #49 is the clean green candidate for this behavior; this PR is superseded, failing/conflicting, or mixed-scope and should not be merged as-is.

@YoungSx YoungSx closed this Jun 25, 2026
@google-labs-jules

Copy link
Copy Markdown
Contributor Author

Closing during PR triage: this is a stale or duplicate layout-loading monotonicity attempt. #49 is the clean green candidate for this behavior; this PR is superseded, failing/conflicting, or mixed-scope and should not be merged as-is.

Understood. Acknowledging that this work is now obsolete and stopping work on this task.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant