Repository navigation
fix(macos): 工作树状态刷新、历史撑满与独立提交面板 - #1579
Conversation
Lithe Review结论: ⛔ 有阻塞 Findings
Scope Check
Suggestions
Summary主要实现沿用现有架构,新增测试覆盖了状态刷新、单根提交和布局边界。合并前应修复嵌套仓库过滤问题;暂存互斥遗漏属于非阻塞修改建议。 Verification
|
|
已在 511f135 修复本轮两个 finding,更新同一个 PR(未 force push)。 P1:独立嵌套仓库过滤
P2:Diff 直接入口互斥
验证先运行新增测试复现两项缺陷,再应用修复验证通过。最终 276 项测试 / 22 个 suite 全部通过;新增并发测试 3ms,真实 Git 两个参数场景合计 3700ms(软耗时警告,无硬预算失败)。 ./.agents/skills/write-stable-tests/scripts/test-stability-macos.sh \
--suite-timeout-seconds 900 \
--report .artifacts/test-stability/worktree-review.json \
-- --filter 'GitModuleTests|GitWorktreeAppearanceTests|GitStatusObservationTests|CommitWorkflow|GitChangeSectionsCacheTests|GitLocalChangelistsTests|LitheSplitPane|LitheTreeListTests|LitheTreeRowStyleTests'本地 test-stability、service boundary、shared contracts、runtime bundle immutability、i18n 校验/生成检查、Agent Notes、能力矩阵生成/校验/change gate、Git graph 和 diff whitespace 检查均通过。同步更新 Note 和 Worktree 能力矩阵,运行时验证状态保持 pending。 限制:本次无新增视觉样式,尚未补齐打包产品前后深浅/窄宽截图;组件测试不代替完整工作台拖动、确认弹窗与真实远端推送验收;Windows 未运行。 另外,更新前 macOS CI gate 红灯来自复用的 Swift job: |
* perf(windows): deliver LSP diagnostics as one batch per Core drain Each publishDiagnostics event used its own frontend `emit` (a full IPC round trip broadcast to every window) and its own diagnostics store update, which copied both maps per file. Importing a large Java project published hundreds of files at once and the editor stalled behind them. The adapter now keeps the newest set per URI within one `lsp.waitEvents` drain and emits a single `lsp://diagnostics` batch, flushing before a lifecycle change so ordering is kept. The LSP client resolves workspace state once per batch and applies every file with one store update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): render large Markdown previews without repeated work Code-block highlighting replaced each block with `String.replace` over the whole document, rescanning and copying it once per block: a document with a thousand fences took about 1.9 s, and code containing `$&` or `$1` was corrupted by replacement-pattern expansion. The blocks are now substituted in one pass with a replacer function (about 7 ms). The preview also swapped in the unhighlighted HTML on every edit and then the highlighted HTML, rebuilding and laying out the whole preview twice. It now keeps the current preview until the edited document is highlighted; only an empty preview shows plain HTML first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): run blocking host commands off the WebView2 UI thread Tauri runs a synchronous command inline on the thread that dispatches IPC, which on Windows is the WebView2 UI thread. Commands that read or write files, walk or delete directories, start processes or register native watches froze painting and input and queued every other invoke while they ran: Java language-server launch resolution (fingerprint, JDT LS and java probes, cache cleanup), toolchain discovery, run configuration resolution and writes, file reads and writes, clipboard paste, terminal and Agent creation, plugin rescans and launches, and document watch registration. These commands are now async and run their body through a shared `run_blocking` helper on Tauri's blocking pool. The develop-lithe skill records the rule together with the batching rule for frequent events. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): move PATH searches and plugin settings I/O off the UI thread Profiling the Windows build showed `get_tool_path` called thirty times while a project opens, each searching every PATH directory on the WebView2 UI thread, and cheap commands such as `plugin:event|listen` waiting up to 1.4 s behind such work. `get_tool_path`, the declarative plugin settings, run/test plan and web file commands, disk-install cancellation and the Agent panel settings commit now run through `run_blocking` as well. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Merge pull request #1497 from frankxii/windows-optimise-1025 fix(windows): 对齐 Commit 面板与 macOS,并支持隐藏变更列表和父仓库引用选项 * perf(mybatis): index only mapper-named Java files and rebuild on mapper edits The MyBatis index tree-sitter-parsed every Java file in the workspace, and both hosts rebuilt it on every Java edit. On ruoyi-vue-pro this ran 11 times (108 s total, 22 s max) while typing, starving completion requests. - Core reads mapper XML first and parses only Java files whose stem matches a namespace segment (a.b.Outer.Inner names Outer.java). - Windows and macOS rebuild only when an XML mapper or a Java file already paired with a statement changes; newly opened buffers still reload. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(markdown): skip layout for off-screen preview blocks Opening an 86k-line preview spent 26 s in native layout. Top-level text and code blocks now use content-visibility: auto with an intrinsic size hint; tables are excluded because paint containment would clip their overflow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(markdown): drive preview highlighting with a controlled highlighter The preview test waited on a real setTimeout, which the test-stability gate rejects. useHighlightedMarkdown now takes the highlighter as an optional argument (defaulting to highlightMarkdownCodeBlocks), and the test completes each highlight itself. It also asserts that the previous highlighted preview stays visible while an edit is being highlighted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(macos): 工作树状态刷新、历史撑满与独立提交面板 (#1579) * fix(macos): 改进工作树历史与状态刷新并复用独立提交面板 * fix(macos): preserve worktree status exclusions and diff commit locking * fix: preserve settings transactions and queued agent lifecycle * fix(windows): guard background saves, clipboard and terminal ownership --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: 若水 <frankw.wang@qq.com> Co-authored-by: Xiaoyumuxi <23722032@bjtu.edu.cn>
* fix(ci): align AutoBuild macOS release timeout budgets (#1572) * fix(macos): 修复硬链接文件打开并提供三种保存选择 (#1419) (#1575) * fix(macos): support explicit hard-link save choices Allow regular hard-linked documents to open and require a fresh per-save choice to detach the current path, update shared contents, or cancel. Pause autosave, retain conflict and object-identity guards, and reconcile open aliases after shared writes. Classify document access failures with actionable localized messages, preserve drafts on cancellation and write failures, and add native/workflow/router regressions with updated decision notes and platform evidence. Fixes #1419 * fix(macos): continue explicit hard-link saves after autosave checks * fix(ci): decouple AutoBuild publication from plugin mirrors (#1576) * Merge pull request #1497 from frankxii/windows-optimise-1025 fix(windows): 对齐 Commit 面板与 macOS,并支持隐藏变更列表和父仓库引用选项 * fix(macos): 工作树状态刷新、历史撑满与独立提交面板 (#1579) * fix(macos): 改进工作树历史与状态刷新并复用独立提交面板 * fix(macos): preserve worktree status exclusions and diff commit locking * fix(macos): #1550 缓存 LSP 设置页语言摘要并减少主线程布局 (#1551) * fix(macos): #1550 缓存 LSP 设置页语言摘要并减少主线程布局 * docs: update LSP cancellation validation script paths --------- Co-authored-by: Lichenkang <2188718831@qq.com> * fix(git-host): launch Git through forward-slash paths and report empt… (#1574) * fix(git-host): launch Git through forward-slash paths and report empty version probes On some Windows hosts (disk-encryption or endpoint-security filters), a Git started through a backslash path prints nothing to a captured pipe, while the same executable started through a forward-slash path behaves normally. The version probe therefore returned an empty string, which validate_version reported as "Git 2.31 or newer is required" even for Git 2.48.1, leaving every repository unreadable regardless of the selected executable. - Normalize the resolved executable path to forward slashes on Windows, keeping UNC and verbatim paths untouched. - Treat a successful but empty version probe as a probe failure with its own message instead of a too-old Git, and do not cache it. - Cover the path normalization with a unit test. Refs #1566 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * test(git-host): cover Windows executable resolution with forward slashes Add a Windows-only test that executable() returns the selected path with forward slashes, so the launch-path normalization cannot be dropped silently. The test fails when the normalization is removed. Refs #1566 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * perf(windows): 消除 Windows 端 UI 卡顿与补全卡死的根因 (#1577) * perf(windows): deliver LSP diagnostics as one batch per Core drain Each publishDiagnostics event used its own frontend `emit` (a full IPC round trip broadcast to every window) and its own diagnostics store update, which copied both maps per file. Importing a large Java project published hundreds of files at once and the editor stalled behind them. The adapter now keeps the newest set per URI within one `lsp.waitEvents` drain and emits a single `lsp://diagnostics` batch, flushing before a lifecycle change so ordering is kept. The LSP client resolves workspace state once per batch and applies every file with one store update. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): render large Markdown previews without repeated work Code-block highlighting replaced each block with `String.replace` over the whole document, rescanning and copying it once per block: a document with a thousand fences took about 1.9 s, and code containing `$&` or `$1` was corrupted by replacement-pattern expansion. The blocks are now substituted in one pass with a replacer function (about 7 ms). The preview also swapped in the unhighlighted HTML on every edit and then the highlighted HTML, rebuilding and laying out the whole preview twice. It now keeps the current preview until the edited document is highlighted; only an empty preview shows plain HTML first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): run blocking host commands off the WebView2 UI thread Tauri runs a synchronous command inline on the thread that dispatches IPC, which on Windows is the WebView2 UI thread. Commands that read or write files, walk or delete directories, start processes or register native watches froze painting and input and queued every other invoke while they ran: Java language-server launch resolution (fingerprint, JDT LS and java probes, cache cleanup), toolchain discovery, run configuration resolution and writes, file reads and writes, clipboard paste, terminal and Agent creation, plugin rescans and launches, and document watch registration. These commands are now async and run their body through a shared `run_blocking` helper on Tauri's blocking pool. The develop-lithe skill records the rule together with the batching rule for frequent events. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(windows): move PATH searches and plugin settings I/O off the UI thread Profiling the Windows build showed `get_tool_path` called thirty times while a project opens, each searching every PATH directory on the WebView2 UI thread, and cheap commands such as `plugin:event|listen` waiting up to 1.4 s behind such work. `get_tool_path`, the declarative plugin settings, run/test plan and web file commands, disk-install cancellation and the Agent panel settings commit now run through `run_blocking` as well. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Merge pull request #1497 from frankxii/windows-optimise-1025 fix(windows): 对齐 Commit 面板与 macOS,并支持隐藏变更列表和父仓库引用选项 * perf(mybatis): index only mapper-named Java files and rebuild on mapper edits The MyBatis index tree-sitter-parsed every Java file in the workspace, and both hosts rebuilt it on every Java edit. On ruoyi-vue-pro this ran 11 times (108 s total, 22 s max) while typing, starving completion requests. - Core reads mapper XML first and parses only Java files whose stem matches a namespace segment (a.b.Outer.Inner names Outer.java). - Windows and macOS rebuild only when an XML mapper or a Java file already paired with a statement changes; newly opened buffers still reload. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * perf(markdown): skip layout for off-screen preview blocks Opening an 86k-line preview spent 26 s in native layout. Top-level text and code blocks now use content-visibility: auto with an intrinsic size hint; tables are excluded because paint containment would clip their overflow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(markdown): drive preview highlighting with a controlled highlighter The preview test waited on a real setTimeout, which the test-stability gate rejects. useHighlightedMarkdown now takes the highlighter as an optional argument (defaulting to highlightMarkdownCodeBlocks), and the test completes each highlight itself. It also asserts that the previous highlighted preview stays visible while an edit is being highlighted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(macos): 工作树状态刷新、历史撑满与独立提交面板 (#1579) * fix(macos): 改进工作树历史与状态刷新并复用独立提交面板 * fix(macos): preserve worktree status exclusions and diff commit locking * fix: preserve settings transactions and queued agent lifecycle * fix(windows): guard background saves, clipboard and terminal ownership --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: 若水 <frankw.wang@qq.com> Co-authored-by: Xiaoyumuxi <23722032@bjtu.edu.cn> * docs: 添加 APINEBULA、TIMI CC 和 Zeus 赞助商 (#1583) * docs: add APINEBULA as the third sponsor banner * docs: add TIMI CC and Zeus to sponsor tables * docs: move Zeus below CCSub and shorten sponsor copy * test(macos): expect the typed symlink error in agent edit rollback (#1582) #1575 made document reads open with O_NOFOLLOW and report a symlink as DocumentFileAccessError.symbolicLink instead of a CocoaError. The rollback test that swaps the created file for a symlink during the trash operation still expected CocoaError, so Swift tests failed on preview. The test now expects the typed error; its checks that the link and its target are left untouched and the recovered copy is removed are unchanged. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * docs: refresh README product screenshots (#1585) * docs: lead README gallery with IDE workflows (#1587) * docs: remove IDEA comparison annotations from README screenshots (#1588) * docs: 调整 README 徽章并修正发行版链接 (#1589) * docs: center trending badge in README * docs: point release links to current repository --------- Co-authored-by: Xiaoyumuxi <23722032@bjtu.edu.cn> Co-authored-by: 若水 <frankw.wang@qq.com> Co-authored-by: lincoco <77844710+lin-coco@users.noreply.github.com> Co-authored-by: AACS111 <103710223+AACS111@users.noreply.github.com> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
改动说明
工作树历史与状态刷新
“更改”页布局与交互
提交范围与生命周期保护
git-worktrees功能矩阵。Windows 当前只有工作树管理弹窗,本 PR 不增加 Windows 对等详情入口,不宣称跨平台运行验收完成。验证
git diff --check通过。.app的构建、资源打包、签名与启动,未修改已安装程序包。./.agents/skills/write-stable-tests/scripts/test-stability-macos.sh \ --suite-timeout-seconds 900 \ --report .artifacts/test-stability/worktree-pr.json \ -- --filter 'GitModuleTests|GitWorktreeAppearanceTests|GitStatusObservationTests|CommitWorkflow|GitChangeSectionsCacheTests|GitLocalChangelistsTests|LitheSplitPane|LitheTreeListTests|LitheTreeRowStyleTests' ./.agents/skills/write-stable-tests/scripts/verify-test-stability.sh ./scripts/architecture/verify-service-boundaries.sh ./scripts/architecture/verify-shared-contracts.sh ./scripts/git-graph/verify-git-graph.sh ./scripts/macos/verify/verify-runtime-bundle-immutability.sh 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 ./scripts/agent-notes/verify-agent-notes.sh node scripts/platform-feature-matrix/generate-platform-feature-matrix.mjs ./scripts/platform-feature-matrix/verify-platform-feature-matrix.sh ./scripts/platform-feature-matrix/verify-platform-feature-matrix-change.sh origin/preview HEAD git diff --check验证边界 / Draft 原因
pending。