Skip to content

fix(macos): 日志窗口自适应布局、恢复编辑器“LSP 日志”标签页与齿轮菜单图标 - #1700

Merged
xiaoyumuxi merged 3 commits into
previewfrom
codex/log-window-responsive-layout
Nov 4, 2026
Merged

xiaoyumuxi merged 3 commits into
previewfrom
codex/log-window-responsive-layout

Conversation

@xiaoyumuxi

@xiaoyumuxi xiaoyumuxi commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

概要

这个 PR 修复日志窗口放大或缩小后布局不跟随的问题,把语言服务器的“查看日志”恢复为编辑器区的“LSP 日志”标签页(数据改读 v2 日志),并给齿轮菜单的插件、日志项加上图标。只改 macOS,Windows 仍是 v1 日志,没有变化。

改动点

日志窗口自适应布局(LogWindowTable.swift、LogWindowView.swift)

  • 列宽跟随视口:窗口变宽时,多出的宽度分给事件、消息和字段三列;窗口变窄时保留原来可读的列宽,用横向滚动。LogScrollView.tile() 在视口变化时重新分配列宽。
  • 自动列宽不写偏好:只有拖动表头调整列宽并松手后,才保存手动列宽(commitColumnWidths(previous:))。窗口缩放、隐藏列,以及延迟到达的原生列宽通知都不会改写已保存的配置。替换了原来的 tableViewColumnDidResize 写回逻辑。
  • 详情与调用链:最小内容宽度等于视口宽度,从左上角开始显示,长内容横向滚动。详情面板默认高度改为 max(196, 窗口高度 × 0.28)。
  • 实时追加只更新末尾:实时批次只删除或插入表格末尾变化的行(beginUpdates 加 remove/insert)。选择、暂停或状态变化时不再整表重建,已选中的单元格保持不变。
  • 跟随滚动平滑:跟随最新日志时用 0.1 秒的原生滚动动画衔接批次;系统开启“减少动态效果”时直接跳到底部,不播放动画。
  • 事件分布:高度改为 72pt,并加上秒级时间刻度(起点、中点、终点)。

筛选、通道与时间范围

  • 筛选框:改用共享的 LitheSearchField,旁边的 ⓘ 说明表达式语法:AND 组合、- 排除、level>= 和 level:、字段匹配、前缀匹配、/regex/,以及与通道、级别、时间条件取交集的规则。
  • ⌘F 归属所在窗口(新增 MacWindowFindTarget.swift):日志窗口里按 ⌘F 会聚焦筛选框,不再被编辑器抢走。MacShortcutDetector 先把事件交给所在窗口的 Find 目标,再分发工作台快捷键。有 sheet 弹出或输入法正在组字时,不接管按键;窗口关闭时移除事件监听。
  • 通道列表(新增 LogChannelList.swift,删除 LogChannelRow):通过共享列表的原生渲染入口承载 NSTableView。⌘ 点击增减通道,Shift 点击连续选择,“全部通道”清除限制;分组标题不可选中。这样避免在 SwiftUI Button 的回调里读取可能已经变化的 currentEvent。
  • 时间范围选择(新增 LogTimeRangePicker.swift):用共享下拉弹层承载系统日历和时分秒编辑器,点击“应用”后才发给 Core 的时间查询。界面使用本地时区,结束时间包含该秒内的全部记录;结束早于开始时禁止应用;“清除时间范围”恢复不限时间。
  • 补充 ⓘ 说明:通道多选、实时跟随、调用链(+N ms 和条形表示相对首条记录的偏移,不是执行耗时)、时间范围。

语言服务器日志恢复为编辑器标签页“LSP 日志”

#1683 删除了编辑器里的 LSP 日志标签,“查看日志”改为打开应用日志窗口并改写它的通道筛选。本 PR 把这个入口恢复成编辑器标签页,数据改读 v2 日志:

  • 入口:状态栏语言服务菜单里某个服务器的“查看日志”打开或聚焦“LSP 日志”标签页,并选中该服务器;菜单底部的“查看日志”选中列表中的第一个服务器。不再打开应用日志窗口,也不改写它的通道筛选。
  • 标签页行为(EditorTabItem.languageLogs):每个工作区窗口最多一个,再次打开只切换服务器。它复用混合标签顺序、拖动重排、分组、选择和关闭(含 ⌘W),接线在 EditorAreaView、EditorTabOrderFeatureModel、AppModel+FeatureState、AppModel+Media、AppModel+WorkbenchClose。选中它会清除活动文件、媒体和终端投影;文件通过功能模型直接打开时,日志标签让出选择(EditorSessionCoordinator);工作区重置时移除标签并停止查询。
  • 顶部工具栏(LanguageServerLogsView.swift):服务器选择、“服务器日志”和 ⓘ 说明(数据来自已脱敏的诊断日志,不提供 Server Trace 和 RPC 消息捕获,应用日志在“日志与诊断”中查看)、最低级别(信息 / 警告 / 错误,默认信息)、“清空视图”。窗口变窄时工具栏换成两行。输出复用 OutputTextView,每行是 [级别] 时间 消息 加字段,查询失败时显示“重试”。
  • 数据与模型(LanguageServerLogsModel.swift):
    • 内部持有一个不折叠重复记录的 LogWindowModel,数据来源仍是 MacLogStore 中已脱敏的 v2 磁盘记录和实时广播,和应用日志窗口、诊断导出是同一份证据,没有新增内存缓冲或日志文件。
    • 选中服务器后由 Core 的 windowEngineChannel 解析该服务器的通道,拿到通道后才开始查询,所以不会显示未过滤的整个 lsp 前缀,也没有“全部语言服务器”选项。Swift 不自己拼通道名。
    • 用 revision 防止过期的通道解析结果覆盖当前选择;解析失败时显示错误,并记录 AppLoggingDiagnosticsFailed。
    • 按服务器清空:“清空视图”只隐藏当前服务器已显示的记录,不删除磁盘日志。模型为每个服务器保存自己的清空点,切换服务器时换入(LogWindowModel 新增 displayWatermarks)。清空 Java 后切到 Go,Go 的记录照常显示;切回 Java 仍是清空状态,只显示清空后的新记录。
    • 生命周期属于标签页:关闭标签页或重置工作区时停止查询和订阅,切到别的标签页不停止。
  • 删除的独立窗口:本 PR 早期版本新增的“语言服务器日志”独立窗口(LanguageServerLogsCoordinator、language-server-logs 窗口场景)已全部删除,LitheApp、RootView、AppServices 相对 preview 没有改动。

齿轮菜单图标

  • 新增 WorkbenchSettingsMenu.swift,集中声明齿轮菜单项。WorkbenchView 改为使用它。
  • “插件…”使用 expui/nodes/plugin.svg 图标,“日志与诊断…”使用 fileTypes/text.svg 图标。其余菜单项和顺序不变。

文案、笔记与功能矩阵

  • i18n:新增文案都在 shared/i18n/ 里补齐中英词条,并重新生成 Localizable.strings。词条包括 logs.window.*Help、时间范围,以及 logs.language.*:标签标题“LSP 日志”、最低级别、ⓘ 说明、“清空视图”提示、“服务器日志”和空状态。服务器选择、级别名称、“清空视图”和“重试”复用已有词条。
  • Agent Note:
    • 2026-11-03-structured-logging-log-window.md 新增“窗口尺寸、筛选与实时呈现”和“语言服务器日志在编辑器标签页里看”两节;结论、备选方案和后果改为“应用日志一个入口,LSP 日志在编辑器标签页里看,数据同源”。备选方案记录了被否的三种做法:借用应用日志窗口、单独开窗口、提供“全部语言服务器”。
    • 语言服务 Note(2026-09-13-language-tooling-and-lsp-runtime-ownership.md)和编辑器分组 Note(2026-10-12-editor-tab-split-docking.md)改写 LSP 日志一段:编辑器标签页、单服务器、按服务器清空,以及标签参与重排和分组。
  • 平台功能矩阵:
    • diagnostics-export 补充本次新文件作为证据,并追加自适应布局回归说明。
    • lsp-status-logs 补充 LSP 日志标签页的证据(模型、视图、EditorAreaView、评审测试)和验证说明。
    • 真实 Java 项目上的整机验收保持 pending。

测试

  • LogWindowTests:
    • 新增 findBelongsOnlyToTheWindowThatInstalledItsTarget:⌘F 只由安装了目标的窗口处理。
    • 新增 tableColumnsUseTheViewportWithoutSavingAutomaticWidths:自动分配列宽,但不写偏好。
    • 新增 languageServerEntryOpensEditorTabWithoutChangingApplicationLogs:打开后只有一个“LSP 日志”标签且被聚焦、选中对应服务器、应用日志窗口没有收到请求;再次打开另一个服务器复用同一标签;关闭后标签移除。
    • 删除对菜单源码文本顺序的检查。
  • DiagnosticsWorkflowTests:测试窗口改为带标题栏、可缩放。新增 verifyLogWindowInteractions 和 verifyTimeRangePicker,覆盖单元格保持、⌘F 聚焦、⌘ 点击通道、时间范围弹层(4 个 NSDatePicker)和视口宽度。
  • 新增 LogWindowReviewTests:
    • serverTabShowsOneServerAndClearsOnlyThatServer:用真实 MacLogStore 验证级别只有信息 / 警告 / 错误且默认信息;选中 java 时查询只有 lsp/java 通道;清空 java 后切到 go 仍显示 lsp/go 记录;切回 java 时之前的记录仍隐藏,只显示清空后新写入的记录。
    • 一个可选的本地截图评审用例,只有设置 LITHE_REVIEW_LOG_SESSION 和 LITHE_LOGGING_SCREENSHOTS 时才运行,默认跳过。

变基说明

变基到最新 preview 时与 #1695 在 MacShortcutDetector 冲突:#1695 把终端快捷键延后判断移到了快捷键匹配之后。本 PR 只在原位置保留 MacWindowFindTarget.handle(event),终端判断沿用 #1695 的新位置。

本地验证

  • node scripts/i18n/verify-app-language-localization.mjs
  • node scripts/i18n/generate-i18n.mjs --check
  • node --test --test-timeout=60000 scripts/i18n/test-i18n.mjs
  • node scripts/logging/generate-log-events.mjs --check
  • node scripts/logging/verify-log-usage.mjs
  • ./.agents/skills/write-stable-tests/scripts/verify-test-stability.sh
  • ./scripts/architecture/verify-service-boundaries.sh(包含运行时 bundle 只读检查)
  • ./scripts/agent-notes/verify-agent-notes.sh
  • ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh
  • ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD
  • ./scripts/macos/test/test-macos.sh --filter 'LitheTests\.(LogWindowTests|LogWindowReviewTests|DiagnosticsWorkflowTests|EditorTabOrderFeatureModelTests|EditorTabLayoutTests|LanguageServerStatusTests)'(“LSP 日志”标签页这一版):6 个套件、90 个测试,85 个通过、5 个失败。
    • 5 个套件全部通过:应用日志窗口、日志窗口评审、日志与诊断流程、编辑器标签布局、语言服务器状态与日志。
    • “Editor tab order”套件有 5 个用例失败:floatingPreviewCancelsWithoutTakingFocus、nativeMultilineRowReleaseReordersWithoutSplitting、fileAndDiffTabsCanReorder、nativeTabDragSplitsOnReleaseAndEscCancels、repositoryDiffSharesOrderAndSurvivesDocumentSelection。它们都靠合成 NSEvent 拖动标签或 Esc 关闭拖动预览子窗口;单独运行这个套件结果相同。
    • 在本 PR 上一个提交 1d3672986(还没有 LSP 日志标签页)上单独运行这个套件,这 5 个用例同样失败,另外 explicitNewDiffTabKeepsAnIndependentSessionWhileOrdinaryOpenReusesItsPreview 也失败。所以这些失败和本次改动无关,是本机测试环境里事件和子窗口的问题。floatingPreviewCancelsWithoutTakingFocus 只用到 EditorTabDragPreviewAnchor,完全不经过本次改动的代码。最终以 CI 结果为准。
  • 上一个提交 1d3672986 上跑过 --filter 'LitheTests\.(LogWindowTests|LogWindowReviewTests|DiagnosticsWorkflowTests|TerminalShortcutInputPolicyTests|MacKeyboardShortcut.*Tests|HTMLPreviewFindShortcutTests)':6 个套件、34 个测试全部通过。终端快捷键测试也包含在内,因为它和本 PR 改动的 MacShortcutDetector 键盘监听是同一处;这次的提交没有改动 MacShortcutDetector。
  • 完整的 ./scripts/macos/test/test-macos.sh 在本机没有跑通,需要看 CI 结果:
    • 并行负载下,多个与本 PR 无关的套件等待超时,包括 MacProcessRunnerTests、MacLoginShellEnvironmentTests、MacBuildProviderSessionsTests、LitheGitModuleTests、VcsProviderHostTests、MybatisFeatureModelTests、MarkdownPreviewHTMLTests。随后 LitheTests 进程中止(signal 6),原因是 AgentManagementFeatureModelTests 里的 actor executor 断言(Incorrect actor executor assumption)。
    • 这些套件单独运行仍然失败,都会用到子进程、登录 shell 或文件监听。本 PR 没有改动这些代码,但还没有在本机的 preview 上做对比,无法排除本地命令沙盒的影响。
  • 修复了 LogWindowReviewTests 一处编译错误:原来调用了不存在的 AppServices.makeDiagnosticsExportService(),已改为使用已有的 diagnosticsExportService 属性。

未验证:在真实应用里手动缩放窗口、打开 Java 项目查看 jdtls 日志的整机验收,功能矩阵中保持 pending。

- 日志表格按视口分配多余宽度,只在表头拖动结束后保存手动列宽
- 实时批次只增量替换末尾行,跟随滚动平滑衔接并遵守减少动态效果
- ⌘F 由所属窗口处理,工作台快捷键分发前先交给日志窗口
- 通道列表改用原生表格,支持 ⌘ 点击增减和 Shift 连选
- 新增时间范围弹层(系统日历与时分秒),事件分布显示秒级刻度
- 筛选、通道、跟随、调用链、时间范围补充 ⓘ 说明
- 语言服务器“查看日志”打开独立窗口,不再改写应用日志窗口的筛选
- 齿轮菜单的插件与日志项增加图标
@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 4, 2026
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review November 4, 2026 02:44
@lithe-code-review

lithe-code-review Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Lithe Review

结论: ⚠️ 有建议
范围: preview ← codex/log-window-responsive-layout · head: 1d36729

未发现需要阻塞合并的问题。

Findings

  1. [P2] 避免手动列宽在松手后再次扩张
    macos/Sources/Lithe/Views/Diagnostics/LogWindowTable.swift:249

    • 实际影响:拖动结束后的列宽偏离用户松手位置,并把自动扩张部分混入持久化偏好。
    • 触发条件:视口存在剩余宽度,用户调整事件、消息或字段列。
    • 复现步骤:按默认列宽设置,将表格视口设为约 1900pt,事件列自动扩为约 483pt;拖至约 493pt 后松手。这里把 493 写成 preferredWidths,随后调用 fitColumnsToViewport(),再次分配余量,事件列会变成约 750pt。该结果可由新增宽度公式直接推导。
    • 来源:本次引入。base 没有提交宽度后再次自动扩张的路径。
  2. [P2] 避免每批日志更新都在主线程重建全文
    macos/Sources/Lithe/Views/Language/LanguageServerLogsView.swift:43

    • 实际影响:每次刷新都为全部保留记录创建字符串并拼接全文,主线程工作和临时分配随历史内容增长。原生输出控件的增量渲染无法消除这一步的全量格式化成本。
    • 触发条件:独立日志窗口持续接收批次,保留记录接近模型的 20,000 条上限。
    • 复现步骤:持续写入内容不同、带较长诊断字段的 lsp/java 记录,达到保留上限后逐批追加。LogWindowModel.append 每批发布 state,触发该视图重新执行整个 records.map(...).joined();即使批次没有新增匹配记录,状态更新也会触发这条路径。
    • 来源:本次引入。此前入口使用具有逐记录呈现缓存的应用日志表格。

Scope Check

  • 未找到可验证的关联 Issue;按 PR 声明的需求核对。
  • 已接入自适应布局、原生通道选择、时间范围编辑、窗口级 ⌘F、独立 LSP 日志窗口和菜单图标,并更新词条、笔记与功能矩阵。
  • 复用了现有日志存储、Core 通道解析、共享控件和原生输出视口,未新增语言服务领域实现。
  • 两项 Finding 均由本次变更引入,属于本次布局及日志呈现职责范围。
  • 真实 Java 项目验收和视觉验证仍未完成,矩阵保持 pending 与现有证据一致。

Suggestions

  1. 分开保存用户宽度与视口扩张量,确保重新布局后保持松手位置;补充“自动扩宽后拖动,再缩窄、重开窗口”的回归覆盖。
  2. 按记录身份缓存呈现文本,只处理新增、淘汰或变化部分;需要全量准备时移出主线程,并保护取消及过期结果。补充长输出场景的耗时、内存基线。
  3. 补充日志窗口、时间弹层、独立 LSP 窗口及齿轮菜单截图;已有界面提供修改前后对比。当前上下文未附截图。

Summary

整体复用边界清晰,测试覆盖了主要接线和基础交互;手动列宽提交及长日志刷新仍有上述非阻塞问题。

Verification

  • 静态检查了完整文件清单中的非生成改动,并追踪 LogWindowModel、MacLogStore、OutputTextView、Core 通道解析及快捷键分发;未读取两个生成字符串表的正文。
  • 作者报告聚焦的 6 个套件、34 个测试通过,以及 i18n、日志、架构等检查通过;提供的 Check Run 中共享 i18n、结构化日志和 Rust Core 检查成功。
  • 完整 Swift CI 仍在进行,macOS gate 有取消记录。作者报告本地全量测试失败,尚无 base 对照,不能确认这些失败均与 PR 无关。
  • 本次未运行代码、测试、构建或应用,未访问网络。视觉效果、整机交互及性能尚未独立验证。

@lithe-code-review

Copy link
Copy Markdown

Lithe 运行验收

版本:1d3672986d92e8334cb50246dc2f2e6efe9aef21;状态:partial。
本报告独立于代码审查;只报告实际执行的场景,不代表所有问题均已修复。

对照:共同祖先 ced042289b5fbf9b6562eacd8da1f15428b5849d → PR head;当前目标分支合并适用性:未运行。

  • 条件不足,未验证:Responsive log columns, manual-only column-width persistence, readable detail/chain layouts, and preservation of existing cells during append and status changes. Includes the reviewer's reported post-release width-jump risk.
    • Requires macOS, AppKit/SwiftUI, the pinned Swift 6.3.3/Xcode 26.6 toolchain, and an interactive desktop. None is available. A native harness must also isolate logs and settings within the attempt fixture.
  • 条件不足,未验证:Shared search-field behavior; window-owned Command-F with sheet/IME deferral and cleanup; native channel multiselection; draft-only local-time editing, inclusive ending seconds, validation and filter intersections.
    • Requires a macOS desktop for genuine keyboard focus, modifier-click events, sheets, IME composition and native date-picker interaction. Windows headless execution cannot exercise these production controls.
  • 条件不足,未验证:A separate language-server log window, selected/all-server routing through Core-resolved channels, unfolded records from the existing redacted v2 store, live updates, and isolation from application-log state.
    • The coordinator, model, MacLogStore and window presentation require macOS frameworks and a native desktop harness. Node or Rust Core probes cannot establish that these Swift paths are wired correctly.

未覆盖:

  • All requirements selected in the three scenarios remain unverified because their required macOS capabilities are unavailable.
  • Column persistence remains unverified for actual header release, delayed resize notifications, hidden-column changes and reopening, including the reviewer's reported second expansion after a drag.
  • Native detail/chain geometry, initial proportional detail height, horizontal overflow, status-bar clearance, and live suffix-update/cell-preservation behavior remain unverified.
  • Window-level Find focus, sheet/IME deferral, monitor cleanup, and regressions involving editor, terminal and HTML-preview shortcuts remain unverified.
  • Channel toggling/range selection, nonselectable headings and filter intersections remain unverified. The full documented expression grammar also needs explicit cases for AND, exclusion, exact/threshold levels, fields, prefixes, regex, quoted values and invalid-expression retention.
  • Native date-picker draft/application behavior, local-zone conversion, inclusive ending seconds, reversed-range rejection, clearing, and consistent historical/live filtering remain unverified.
  • Independent LSP window routing, default sizing, all-server selection, Core channel resolution, repeated records, shared evidence and application-window isolation remain unverified.
  • LSP stale-selection rejection, cancellation on close, channel-resolution failure display, AppLoggingDiagnosticsFailed emission, output retry, clear-without-file-deletion, line wrapping and empty states are outside the selected happy-path LSP protocol.
  • Follow-scroll animation, the Reduce Motion direct-scroll path and visual smoothness are unverified. Performance acceptance remains blocked until a prespecified statistical protocol defines workload, batch schedule, repetitions, metrics and thresholds; this also applies to the reviewer's 20,000-record formatting concern.
  • The 72pt histogram, second-resolution start/middle/end labels, click-to-jump and drag-range interactions are not selected and remain unverified.
  • Gear-menu plugin/log SVG rendering, colors, unchanged item order and action destinations are not selected and remain unverified.
  • English/Chinese rendered strings, all information tips, accessibility labels, and light/dark visual appearance remain unverified. Generated localization parity, Agent Note updates and feature-matrix accuracy require separate repository validation.
  • Real Java/jdtls acceptance remains blocked by the missing macOS product runtime, Java executable and pinned Java-project/server fixture.
  • Windows v1 logging compatibility and the author's reported full Swift-suite failures have no runtime baseline/head comparison in this plan.

工作副本与运行状态已清理;可复用编译缓存按 12 GiB / 7 天预算保留。
详细步骤和原始证据保存在服务器受限目录(14 天、总计不超过 1 GiB);当前没有公开下载链接。

- 状态栏语言服务器菜单的“查看日志”改为打开编辑器标签页“LSP 日志”,
  删除上一版的独立语言服务器日志窗口;每个工作区只有一个该标签,
  再次打开其他服务器时复用并切换服务器。
- 标签页参与混合标签顺序、拖动排序和分组,⌘W 与关闭按钮走统一关闭路径,
  切换文档时让出选中,重置工作区内容时移除并停止查询。
- 顶部工具栏:服务器选择、“服务器日志”说明 ⓘ、最低级别(信息/警告/错误)、
  “清空视图”。清空只隐藏当前服务器已显示的记录,切换服务器后各自保留清空点,
  不删除已采集的诊断日志。
- 数据来自结构化日志的 lsp/<id> 通道,按 Core 解析出的通道查询;
  不提供“全部服务器”视图,也不提供 Server Trace 和 RPC 捕获。
- 新增 i18n 词条并重新生成 Localizable.strings;更新三份 Agent Note 与
  lsp-status-logs 功能矩阵条目。
- 测试:LogWindowTests 改为验证入口打开编辑器标签且不影响应用日志窗口;
  LogWindowReviewTests 新增按服务器显示与清空的用例。
@xiaoyumuxi xiaoyumuxi changed the title fix(macos): 日志窗口自适应布局、语言服务器日志独立窗口与齿轮菜单图标 fix(macos): 日志窗口自适应布局、恢复编辑器“LSP 日志”标签页与齿轮菜单图标 Nov 4, 2026
@lithe-code-review

Copy link
Copy Markdown

Lithe 运行验收

版本:a4c39fe08cd9f960bb40be48ef12be7202ba59a0;状态:partial。
本报告独立于代码审查;只报告实际执行的场景,不代表所有问题均已修复。

对照:共同祖先 ced042289b5fbf9b6562eacd8da1f15428b5849d → PR head;当前目标分支合并适用性:未运行。

  • 条件不足,未验证:Responsive log-table columns, persistence only after manual header resizing, no post-release width jump, and preservation of unaffected native cells during append, selection and status changes.
    • Requires macOS, AppKit/SwiftUI, the pinned Swift 6.3.3/Xcode 26.6 toolchain, and an interactive desktop for genuine header dragging and window resizing. These capabilities are unavailable on headless Windows. A native harness must also confine logs, preferences and caches to the attempt fixture.
  • 条件不足,未验证:Window-owned Find, native channel multiselection, shared search/filter intersections, and draft-only local-time selection with inclusive ending seconds.
    • Requires a macOS interactive desktop for genuine keyboard focus, modifier clicks, sheets, IME composition and NSDatePicker interaction. Node or mocked frontend controls cannot exercise MacWindowFindTarget, LogChannelList or LogTimeRangePicker.
  • 条件不足,未验证:Restore LSP logs as one editor tab per workspace window, using the shared redacted v2 evidence, single-server routing, minimum levels, independent clear points and tab-owned query lifetime.
    • The production routing, LanguageServerLogsModel, MacLogStore and editor presentation require unavailable macOS frameworks and toolchain; genuine status-menu and tab workflows additionally require a desktop. A model/store probe on macOS would be integration evidence, not end-to-end UI verification. Real Java/jdtls acceptance also lacks Java and a pinned offline project/server fixture.

未覆盖:

  • All three selected scenarios remain unverified, including their normal-path guards. No baseline/head runtime comparison exists. Once prerequisites are available, identical protocols must run twice per revision in fresh fixtures, with bounded waits and complete resource cleanup.
  • Details and call-chain geometry are outside the selected layout protocol: viewport minimum width, top-left alignment, horizontal overflow, proportional default detail height with split-pane constraints, and clearance above the status bar.
  • Follow-scroll behavior remains unverified: 0.1-second native animation, Reduce Motion direct scrolling, pause/resume positioning and perceived smoothness. Performance acceptance is blocked until a prespecified workload, batch schedule, repetition count, metrics, statistical rule and thresholds are supplied.
  • The reviewer's long-output concern near 20,000 retained records remains unverified. Main-thread formatting time, allocations, memory and responsiveness need the same prespecified performance protocol; one successful append cannot establish acceptance.
  • The 72pt event distribution, second-resolution start/middle/end labels, histogram click-to-jump and drag-range behavior are not selected.
  • Filter edge cases beyond the selected grammar cases remain unverified: quoted/escaped values, invalid-expression diagnostics and retention of previous valid results, debounce/cancellation races, and daylight-saving ambiguities.
  • LSP channel-resolution races, rejection of stale results, resolution failure display, AppLoggingDiagnosticsFailed emission, query failure/retry and cancellation while work is in flight are outside the selected happy-path protocol.
  • LSP tab drag reordering, split-group placement/focus, mixed-tab fallback selection, clearing file/media/terminal projections, and file opens performed directly through the feature model remain unverified.
  • LSP toolbar switching to two rows, rendered level/time/message/field formatting, selection/scroll behavior, empty states and absence of an All Servers option require additional native presentation checks.
  • Shared evidence provenance and redaction across the LSP tab, application-log window and actual diagnostics export are not established by the selected store protocol. Absence of extra log files/buffers and package immutability also remain unverified.
  • Real Java-project/jdtls acceptance remains blocked by the missing macOS product runtime, desktop, Java executable and pinned offline project/server resources. Seeded store records do not prove language-server integration.
  • Gear-menu rendering and actions are not selected: plugin.svg and text.svg appearance, original colors, unchanged item order, Plugins destination and Logs and Diagnostics destination.
  • English/Chinese rendered strings, all information tips, accessibility labels, light/dark appearance and explanations of call-chain offsets, filter intersections, clearing and unsupported Trace/RPC capture remain unverified.
  • Localization generation/parity checks, Agent Note consistency and feature-matrix validation were not executed. The matrix’s pending status is not runtime evidence.
  • Windows v1 logging compatibility has no selected runtime scenario. The author's reported Swift-suite failures and baseline comparisons were not independently reproduced.

工作副本与运行状态已清理;可复用编译缓存按 12 GiB / 7 天预算保留。
详细步骤和原始证据保存在服务器受限目录(14 天、总计不超过 1 GiB);当前没有公开下载链接。

…esponsive-layout

# Conflicts:
#	shared/platform-feature-matrix/features/diagnostics-export.json
#	shared/platform-feature-matrix/features/lsp-status-logs.json
@xiaoyumuxi
xiaoyumuxi merged commit e3cb1b7 into preview Nov 4, 2026
4 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant