Skip to content

feat(desktop): 补齐六项 IDE 本体编辑能力并附无头测试截图 - #1852

Merged
1lck merged 4 commits into
previewfrom
codex/ide-essentials
Nov 13, 2026
Merged

1lck merged 4 commits into
previewfrom
codex/ide-essentials

Conversation

@1lck

@1lck 1lck commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

关联 Issue / Linked issue

PR 类型 / Type

  • feat:新功能或用户可见的改进

改动说明 / What changes

背景 / Why

Viva 工作台完成界面对齐后,IDE 本体仍缺少六项日常编辑能力。本 PR 一次补齐完整入口、持久状态、共享规则和无头流程验证,目标分支为 preview。

改动 / Changes

  1. 文件内查找替换:主修饰键 F/R、命令及编辑器右键入口;匹配高亮、前后定位、大小写/整词/正则/选区,替换当前与全部。Unicode 字节位置和正则捕获组由 Core 处理;批量替换准备在后台完成,保持单步撤销;检查查询代数、文档归属、文本和保存基线,拒绝过期结果。替换后选区范围随新长度更新。
  2. 未保存内容恢复:自动保存关闭时仍写检查点;后台流式写入应用数据目录中的私有原子文件,按文档合并写入,执行单文件 64 MiB、总量 256 MiB、64 份限制,不淘汰未保存内容。项目重新打开时恢复,文件改变/删除进入冲突;初次文件监听及手动/自动保存均不能跳过用户确认,保存成功后移除副本。
  3. 编辑器基础设置:显示行号、空白字符、竖线/方块/下划线光标、闪烁开关、自动保存延迟(实际值 250–60,000 ms)。Core 解析默认值/上下界,设置实际应用到原生绘制并持久化;恢复默认值包含新增显示设置。隐藏数字仍保留断点边距;自动保存只保留一个可关闭的文档定时器。
  4. 最近文件与最近编辑:主修饰键 E/Shift-E 与命令入口,独立访问/编辑顺序,搜索、列表打开和光标位置;项目关闭清理对话框、结果和编辑访问状态;Core 负责去重、过滤、顺序和 80 项上限,原生队列按序读写有界历史。
  5. 命名快捷键方案:旧覆盖迁入默认方案,另存、选择、重命名、删除独立方案;切换同时改变实际分发绑定,默认方案受保护,名称重复/数量和非法绑定由 Core 拒绝。打开页面只读取,不自动保存;现有录制、冲突检查和重置保持。
  6. Scratch:项目内主修饰键 N 可先写内容再选路径;关闭标签保留草稿,从持久列表继续编辑;主修饰键 Shift-S 或命令另存为真实文件后移除草稿;支持明确丢弃、另存为取消/失败保留内容和等待正在进行的保存;从列表丢弃会关闭对应标签,等待原生删除结束后再刷新列表,避免旧保存重建草稿。

同时补齐共享 i18n、功能矩阵、职责 Note、运行时资源不可复用清单及测试;完整文本、匹配词和替换内容不进入日志。没有新增运行依赖或插件宿主 API。正式 Core 契约、C 头和可执行向量随配套 Core PR 一起修改。

合入前同时修复 Windows CI 外部链接失败(首次失败运行):Rust 静态库声明了 winapi_* 导入库,但 cgo 外部链接器没有取得对应 Cargo 私有归档。Windows GNU 构建启用 winapi 0.3.9 已提供的 WINAPI_NO_BUNDLED_LIBRARIES=1,直接使用构建工具链已有的 MinGW 系统库;暂存身份记录链接模式,资源清单和拒绝复用路由同步说明,无新增下载或运行依赖。原有 Cargo 导入库发现逻辑保留供其他依赖使用。构建脚本回归覆盖 Windows 目标、环境传递及暂存产物,修复前失败、修复后通过。

Windows 链接恢复后,两次运行分别暴露两个测试同步问题:首次为窗口保存关闭等待超时,第二次为本地历史卡片 Apply 未触发(首次失败的窗口测试在第二次已通过)。本地历史测试现用可释放、有超时的 gate 固定“用量先返回、初始规则后返回”的顺序,稳定复现同一失败,再等待新增说明行实际渲染后取按钮坐标。窗口关闭测试关闭与该场景无关的自动保存,明确等待首次失败回调结束再更换 writer,并增加关闭后磁盘内容断言。这些修改仅限测试,未提高超时或改动产品逻辑。

不在本 PR 范围内 / Out of scope

类型专属:feat

多平台对齐

  • 两端都具备:macOS/Windows 使用同一 Viva 实现、Core 规则和平台用户数据适配。运行证据为 macOS 测试及无头界面;两端原生窗口验证状态均保留 pending。

范围检查 / Scope checks

功能矩阵 / Feature matrix

  • 新增四项独立能力,并更新显示偏好、快捷键两项;实现、验证状态、证据、owner 和具体动作如实填写。
  • 矩阵本体和相对 origin/preview 的变更门禁通过。
  • 未提交 .artifacts/ 生成视图。
  • [N/A] 没有更新矩阵的理由:本 PR 已更新,不使用 matrix-exempt。

统一日志系统 / Structured logging

  • 复用固定 Core 目录事件及 Viva 的 performed/emit 入口记录用户动作、恢复和处理边界的失败。
  • 取消/过期结果隔离不重复记终态,输入不逐项写 INFO。
  • 不记录源码、匹配/替换文本、凭据或未脱敏环境数据;文件错误先去掉私人路径包装。
  • 历史 scripts/logging/generate-log-events.mjs / verify-log-usage.mjs 已从分支删除,无法运行;按 Skill 标记门禁未完成并关联 [Feature] 恢复 Viva 日志事件类型生成和目录使用门禁 #1802,未添加豁免名单。没有把不存在的校验记作通过。

界面文案 / i18n

  • 新文案在共享 i18n 补齐中英词条并生成桌面表;未手改生成文件。
  • 本地化检查、生成一致性和 41 项 i18n 测试通过;未放宽脚本。

逻辑归属 / Logic placement

性能与内存 / Performance and memory

  • 无新增空闲轮询、后台进程或语言服务器;队列、历史、匹配结果和存储均有明确上限;关闭文档/项目释放查询和定时器。
  • 快照取得为 O(1);展开、匹配、替换准备、行宽计算、持久化及长行 UTF-16 位置计算在后台。进程内借用不可变 UTF-8 快照,全文不进入 JSON、不复制到 Rust 常驻缓存。
  • 同一机器改动前后各六次原有编辑器基线,未改预算或场景。结果见下方。

同一 Apple M4,100 KiB / 10 MiB 全部原场景,前后各 6 次,112 项均有基线:109 项在预算内,3 项既有语法整篇染色超预算保持,未出现新的超预算项目。所有 Paint / Scroll 场景仍为 0 B/op、0 allocs/op。

场景 改动前 改动后 说明
Paint Go 100 KiB / 10 MiB 44.4 / 41.2 µs 45.3 / 41.7 µs +2.0% / +1.2%,0 分配
Scroll Go 100 KiB / 10 MiB 45.2 / 40.7 µs 46.6 / 41.7 µs +3.1% / +2.5%,0 分配
后台 Prepare Markdown 100 KiB 77.8 µs 105 µs +34.8%,预算内
后台 Prepare Markdown 10 MiB 5.91 ms 7.06 ms +19.6%,预算内
后台 Prepare Log 100 KiB 38.6 µs 56.8 µs +47.2%,预算内
后台 Prepare Log 10 MiB 3.58 ms 4.49 ms +25.3%,预算内
整篇染色 Go / Java / Markdown 100 KiB 56.3 / 41.8 / 15.5 ms 56.1 / 41.7 / 15.5 ms 同为既有超预算,#1816

perfhistory compare 共给出 9 条相对回归提示:上述 4 条 Prepare 时间,以及 SyntaxViewportCold Go 10 MiB(757→758 allocs)、SyntaxFirstUse Java(23099→23101)、Markdown(35201→35205)、Paste Go 100 KiB(1969→1979)和 10 MiB(2085→2087)。这些项目仍在预算内。Prepare 算法和语法路径未在此 PR 修改,但测量差异尚未归因,保留数据供评审,不将其写成性能提升或直接认定为噪声。

原始文件在本地 .artifacts/editor-perf/ide-essentials-{before,after}.txt,报告为同名 Markdown。未改预算、场景、文档规模或基准生成方式。

设置 / Settings

  • 自动保存延迟有 ⓘ 并显示 Core 返回的实际值,光标样式显示实际选择。
  • 编辑 Lithe 自己的真实设置文件;只在用户操作时提交修改,打开页面不写入。未新增敏感字段或影子配置。
  • [N/A] 未新增或移动设置页,新增控件保持在既有 Editor / Keymap 页面。

插件契约 / Plugin contract

N/A:没有更改插件契约、SDK、宿主方法、通知或协议版本。Core 内部桌面 API 与固定修订见 #22。

发行包与资源 / Bundle and resources

  • 恢复/草稿/历史属于平台用户数据,安装目录保持只读;已说明生命周期、所有权、私有路径和签名/增量更新影响,统一桌面只读边界检查通过。
  • 注册 viva-editor-user-state 为不可复用,同步注册表、拒绝路由、测试及 docs/ci-builds.md;资源复用 37 项测试通过。

无用代码与重构 / Dead code and refactoring

验证 / Verification

命令或操作 平台 结果
desktop-go.sh test -json -count=1 -p 1 -timeout 10m ./...(计时入口) macOS 3,370 条结果,无失败;按条件跳过的真实工具/平台集成测试未记作通过
最终新增流程及绘制/撤销测试,含 -race(计时入口) macOS 18 项通过,无竞态报告;HTML/JUnit 位于本地 .artifacts/test-stability/ide-essentials-race.*
desktop-go.sh test -tags vivahead,lithevisual ... -run '^TestVisualEditorEssentials' macOS 无头 两个测试包通过,生成 14 张生产界面截图
不设 LITHE_CORE_RUST_DIR 的已发布固定 Core 桥接测试 macOS 通过;固定修订可从远端取得,无本地路径替换
Core cargo test ... -p lithe-core --lib macOS 1,763 项通过;最终 ABI 向量 2 项、查找模块 5 项再次通过
Core 注释/Rustdoc、i18n、功能矩阵、Agent Notes、安装资源只读、资源复用、测试稳定性门禁 macOS 通过;稳定性检查采用 --base origin/preview,仅审查本次已提交范围
Core squash 修订可取、与原 PR head 的树完全一致 macOS / Git 通过;应用固定到 Core main 的 65cf82343c5e315aae2e335b2e8f0217b703e89a
Windows 构建适配器回归 2 项(含 -race) macOS fixture 通过;计时 HTML/JUnit:.artifacts/test-stability/desktop-core-linking.*;最慢 1.220s,非 Windows 本机编译证据
资源复用回归、构建语法、远端 pin 与安装包只读静态检查 macOS 37 项资源测试及所有检查通过
关闭窗口 / 本地历史 Apply 同步回归,各 -count=100 macOS 全部通过;本地历史 gate 固定的失败顺序在补同步前稳定失败,补同步后通过
上述两项 -race,计时入口 macOS 2 项通过,无竞态;最慢 1.590s,HTML/JUnit:.artifacts/test-stability/desktop-ci-async-race.*
调整后的设置页、工作台完整测试包,-count=1 -timeout=180s macOS 均通过,分别 2.783s / 140.824s
最终提交 199cfe536aaa1a435d2b817c579b7c7ecfca5166 的 三平台 CI Linux / macOS / Windows 全部通过;Linux 4m57s、macOS 9m57s、Windows 10m51s,另有 4 项脚本/元数据检查通过;未跳过失败测试
编辑器原有基线,改动前/后各 --count 6 同一 Apple M4 见性能结果;报告告警不放宽预算

未能执行的检查和原因: Windows 和 macOS 原生窗口人工验收未执行;无头渲染不能替代。已退役的日志和旧共享边界校验入口缺失(#1802),没有伪报通过。#1851 基于既有源码调用关系登记,未把它写成两端运行时已复现。

测试截图

以下截图来自生产 Page 的真实无头流程,使用隔离临时项目与演示内容。

能力 深色中文 浅色英文
文件内查找替换 文件内查找替换 深色 文件内查找替换 浅色
恢复后磁盘冲突 恢复后磁盘冲突 深色 恢复后磁盘冲突 浅色
最近编辑 最近编辑 深色 最近编辑 浅色
Scratch 编辑 Scratch 编辑 深色 Scratch 编辑 浅色
持久草稿列表 持久草稿列表 深色 持久草稿列表 浅色
编辑器设置 编辑器设置 深色 编辑器设置 浅色
命名快捷键方案 命名快捷键方案 深色 命名快捷键方案 浅色

提交前确认 / Final checks

  • 从最新 preview(82fbb8aa5)创建,目标为 preview。
  • 先创建 Draft;本地可执行检查完成后才标记 ready,不在 ready 后反复推送。
  • 无无关工作、构建产物、凭据或私人路径;截图为合成演示数据。
  • 本次测试没有残留 Lithe 原生窗口/进程;任务拥有的测试、工作队列和临时资源已清理。

@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Nov 13, 2026
@lithe-code-review

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

Copy link
Copy Markdown

Lithe Review

结论: ⛔ 有阻塞
范围: preview ← codex/ide-essentials · head: e781164

Findings

  1. [P1 / 本次引入] Scratch 关闭必须等待检查点成功,避免丢失内容
    desktop/internal/workbench/documents.go:729

    • 实际影响:恢复存储写入失败时,Scratch 标签仍被关闭,最新内容没有可恢复副本。错误通知声称内容仍在编辑器中,但编辑器已经释放。
    • 触发条件:新增的 Scratch 分支只调用异步 flushCheckpoint,随即执行 done(true);后台失败仅显示通知。配额拒绝见 desktop/internal/draftstore/store.go:179。
    • 复现步骤:存满 64 份草稿 → 新建第 65 份并输入内容 → 关闭标签 → 写入被配额拒绝,标签仍消失,草稿列表无法恢复该内容。磁盘满或权限失败也会触发。
    • 修复方向:检查点返回带错误的完成结果;只有最新文本持久化成功才允许关闭标签、项目或窗口。失败时保留编辑器并中止关闭。
  2. [P1 / 本次引入] 未解决的恢复冲突不能在下一次检查点中重设基线
    desktop/internal/workbench/editor_recovery.go:125

    • 实际影响:第一次恢复显示的磁盘冲突,在再次崩溃后可能消失;随后自动保存会未经用户确认覆盖外部版本。
    • 触发条件:prepareRecoveredDocument 将重启时的磁盘内容作为 PreparedEdit 的保存基线(第 182–183 行)。恢复应用后通过 OnEdit → checkpointDocument 再写检查点,此处无条件用新基线重新计算 BaseHash,没有持久保留未解决冲突。
    • 复现步骤:文件基线 A,检查点内容 C → 外部将磁盘改为 B → 重启并恢复出冲突 → 不选择任何解决动作,等待检查点写入 → 再次强制退出并重启。此时检查点的 BaseHash 已是 B,与磁盘 B 相等,无法再识别此前未确认的冲突。
    • 修复方向:独立保留原检查点基线或持久化未解决冲突标记;只有明确解决冲突后才能更新。补充连续两次恢复的回归测试。
  3. [P2 / 本次引入] 最近文件查询完成前不要将旧列表视为当前结果
    desktop/internal/workbench/recent_files.go:83

    • 实际影响:输入新过滤条件后立即回车,可能打开不符合条件的旧结果。
    • 触发条件:queryRecentFiles 在请求入队时就更新 computed,但保留旧 list;第 167 行据此允许提交,真正的新结果要到第 143 行才安装。
    • 复现步骤:先得到查询 A 的列表 → 阻滞历史读取工作线程 → 输入查询 B → 在 B 返回前按回车;会打开 A 的第一项。切换“最近文件/最近编辑”也会沿用旧列表。
    • 修复方向:区分请求中的查询与已安装结果的查询;等待期间禁止提交旧结果,安装当前代结果后再启用。

Scope Check

架构归属对账

下表的向量 V 指配套 Core 的 rust/fixtures/editor/ide-essentials-v1.json,路径来自职责 Note;本次未读取外部 Core 契约或向量正文。

逻辑块 归属 依据
desktop/internal/core/editor_essentials.go:ResolveEditorPreferences Rust Core editor.preferences.resolve;向量 V
desktop/internal/workbench/editor_find.go:runEditorFind 的匹配与替换计划 Rust Core editor.find;向量 V
desktop/internal/workbench/editor_recovery.go:prepareRecoveredDocument 的恢复决策 Rust Core editor.recovery.decide;向量 V
desktop/internal/workbench/recent_files.go:enqueueRecent 的过滤与排序 Rust Core editor.recent.reduce;向量 V
desktop/internal/settingswindow/keymap_schemes_view.go:reduceScheme Rust Core keymap.schemes.reduce;向量 V
desktop/internal/core/bridge.go:executeDocumentJSON 原生桥接 C ABI、借用字节指针及 runtime.KeepAlive
desktop/internal/draftstore/store.go:SaveSource、检查点队列 原生 I/O os.CreateTemp、File.Sync、os.Rename、原生定时器
desktop/internal/editorview/prepared_edit.go、presentation.go 原生文本适配与绘制 操作 rope.Rope、editorview.View、gfx.Canvas
Scratch、查找栏、最近文件与设置界面 原生交互 app.SaveFile、ui.ModalWith、ui.List、ui.TextField
命令及快捷键接线 原生输入呈现 gfx.KeyEvent、keymap.Chord
  • 未沉入清单:本次触及的应用偏好独立快照与合并发布问题,已由 #1851 跟踪;没有新增存量未建单阻塞项。

Checked and cleared

  • macOS/Windows 使用同一套 desktop/ 实现,没有新增两端匹配规则副本。
  • 替换应用前核对文档身份、请求代次、文本快照和保存基线,并拒绝只读及输入法组合状态。
  • 新增界面文案使用共享 i18n,中英源词条及参数声明已补充;生成表正文按要求未读取。
  • 恢复数据从平台配置目录派生,资源清单、拒绝复用测试和文档同步更新,没有发现新增安装目录写入目标。
  • 功能矩阵保留两端原生验收为 pending,没有将无头截图视为原生验收通过。

Suggestions

  1. 对 Finding 1 增加配额耗尽、写入失败时关闭标签/项目仍保留文本的测试。
  2. 对 Finding 2 增加“恢复冲突 → 再写检查点 → 再次恢复”的测试,并检查手动和自动保存仍被保护。
  3. 对 Finding 3 使用可控工作线程验证旧结果在新查询等待期间不能提交。
  4. 已提供 14 张无头截图链接;现有编辑器设置、快捷键页面还需补改动前对照。本次未读取图片,视觉效果尚未验证。

Observations

  • 存量(#1851):desktop/internal/workbench/app.go:saveSettings 与 settings.go 的回调继续保存各 App 的整份偏好快照;多窗口发布与旧快照覆盖已有独立跟踪。
  • 存量(#1802):desktop/internal/workbench/app.go:emit 仍使用字符串事件入口,等价日志生成和使用门禁尚未恢复;不能将该门禁记为通过。

Summary

六项功能的接线与 Core 归属整体清楚,但两处保存/恢复缺陷会损害用户数据,应先修复。现有测试覆盖正常恢复和正常草稿保存,未覆盖上述失败与连续恢复路径。

Verification

  • 实际检查:固定 82fbb8a...e781164 的聚焦 diff、相关实现和测试,以及关闭、保存、冲突处理、后台队列和编码调用链;未检查工作区状态。
  • 已提供结果:作者报告 macOS Go、竞态、Core、i18n、资源和性能检查通过。本次未复跑;提供的 Linux/macOS/Windows 测试 Check Runs 仍为 in_progress,格式、固定修订、矩阵及 Notes 检查为成功。
  • 本次未执行任何仓库代码、测试、边界脚本或网络访问。
  • 验证缺口:外部 Core 固定修订的正式契约与向量未直接核验;两端原生窗口、Windows ABI 和实际发行包资源不变性仍需目标平台证据。图片与生成表正文按审查限制跳过。

@lithe-code-review

Copy link
Copy Markdown

Lithe 运行验收

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

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

  • 条件不足,未验证:Scratch must retain its latest contents when checkpoint persistence fails, including closing a tab, project or window. Focus: documents.go saveBeforeClose and draftstore quota enforcement.
    • No interactive Windows desktop, native input driver or supplied product executable. The Go 1.27.3 toolchain, Windows cgo/MinGW build tools and revision-matched Core artifacts needed for a native alternative are also unavailable. Native dialogs and window-close behavior cannot be proven with a mocked frontend.
  • 条件不足,未验证:Native component-level recovery/checkpoint behavior must preserve an unresolved conflict across two fresh recovery owners. This is filesystem/API evidence, not end-to-end window verification.
    • The executable inventory lacks Go and the required Windows native linker. This checkout contains the Go bridge but no external pinned Rust Core checkout or callable built library. A frozen native harness usable on both revisions is therefore unavailable. Missing new baseline symbols or build failures must remain blockers rather than being emitted as behavioral bug evidence.
  • 条件不足,未验证:Recent-file and recent-edit selection must correspond to the completed current query and mode, including submission while native history I/O is pending.
    • No interactive desktop or native keyboard/focus automation is available. A deterministic gate around actual history I/O is also required for repeatable event ordering. The existing Go/Viva harness cannot run with the supplied toolchain inventory, and a mock-host frontend would not verify native submission behavior.

未覆盖:

  • All three selected scenarios remain unverified. The supplied review findings informed planning; source inspection does not establish runtime reproduction.
  • Find/replace: shortcuts, commands, context menu, highlighting, navigation, case/whole-word/regex/selection modes, Unicode offsets, capture expansion, replace-current/all, single-step undo, updated selection bounds, stale-result rejection, read-only/composition protection, and cleanup.
  • Recovery beyond the selected conflict scenario: automatic checkpoints with autosave disabled, atomic/private streaming writes, coalescing, 64 MiB per-file and 256 MiB total limits, 64-document limit without eviction, write-failure cleanup, and successful-save removal.
  • Scratch beyond the selected close scenario: native Save As success/cancellation/failure, waiting for an ongoing save, persistent-list reopening, explicit discard closing the corresponding tab, and deletion/list-refresh ordering preventing resurrection.
  • Editor preferences: Core defaults and 250–60,000 ms bounds, actual-value display, persistence, native line-number/whitespace/caret/blink rendering, retained breakpoint gutter, restoring defaults, and ownership/cancellation of one autosave timer.
  • Recent files/edits beyond pending-query submission: independent ordering, filtering, deduplication, 80-item limit, persisted caret position, ordered bounded I/O, and project-close cleanup/isolation.
  • Named keymap schemes: legacy migration, independent save/select/rename/delete, actual dispatch changes, default protection, duplicate/name/count/binding rejection, recording/conflict/reset regression checks, and opening settings without writing.
  • Windows GNU build/link correction and native Core ABI: Go, MinGW/cgo and Bash executables are absent from the supplied inventory; revision-matched external Core sources, headers, fixtures and built libraries are not present in this checkout.
  • Runtime resource boundaries: installation-directory hashes remaining unchanged, platform storage placement/privacy, and exclusion of editor user state from worktree resource reuse.
  • English/Chinese native presentation, accessibility labels, explanations, structured failure logging, and exclusion of source/query/replacement contents from logs. Localization/resource gates were not executed; the PR also reports missing logging gates under [Feature] 恢复 Viva 日志事件类型生成和目录使用门禁 #1802.
  • Performance and memory: background work, bounded queues/resources, cancellation, idle behavior, rendering allocations and native responsiveness remain unverified. Performance acceptance needs a prespecified statistical protocol, workloads and thresholds; single-run assertions would be insufficient.
  • macOS native workflows, ABI, bundle immutability and signature/Sparkle effects require capability macos and remain blocked.
  • Issue [Feature] Windows/macOS 统一 Viva 工作台与原生编辑器,保留 Rust Core 和插件体系(分阶段重构) #1794's body and the external Core contract/vector contents were not supplied, so requirements beyond the provided PR description and comments cannot be established.

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

@lithe-code-review

Copy link
Copy Markdown

Lithe 运行验收

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

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

  • 条件不足,未验证:Scratch must preserve its latest contents when checkpoint persistence fails, including closing a tab, project or window. Exercise the production paths in documents.go saveBeforeClose, scratch_files.go and draftstore/store.go.
    • There is no interactive desktop, native input/window automation or supplied revision-matched product executable. The Go/Viva native alternative also needs unavailable Go 1.27.3, Windows GNU cgo tools and matching Core artifacts. Actual tab/project/window closure cannot be established by a mock-host frontend. A supported fixture-only application-data configuration is also required.
  • 条件不足,未验证:Native recovery/checkpoint behavior must preserve an unresolved external-file conflict across successive fresh recovery owners. This is production component/filesystem acceptance, not end-to-end window verification. Focus on editor_recovery.go, document_observation.go and saveDocumentMode.
    • The checkout contains Go adapters but no external Core checkout, C header, callable library or native component runner. Go 1.27.3 and the Windows GNU linker are unavailable in the supplied inventory; Cargo/Rust alone cannot execute these Go production paths. A frozen runner usable on both revisions is also missing: the new recovery methods do not exist on baseline, and failure to compile against them would be a setup blocker, not a legitimate baseline outcome.
  • 条件不足,未验证:Recent-file and recent-edit submission must use completed results for the current query and mode, including Enter and list submission while native history I/O is pending. Focus on recent_files.go queryRecentFiles, result installation and recentFilesPopup.
    • No interactive desktop or native keyboard/focus automation is available. Repeatable ordering additionally requires a supplied native gate and completion observation around actual history I/O; none is externally drivable here. The existing Go/Viva harness cannot run with the supplied tool inventory and absent Core artifacts. A mock-host frontend would not prove native keyboard, focus or submission behavior.

未覆盖:

  • All three selected scenarios remain unverified. Source inspection and supplied review reports do not establish runtime reproduction. The baseline predates these feature APIs; missing symbols or compilation failures must not be classified as behavioral bug evidence.
  • Find/replace: shortcuts, commands, context menu, highlighting, forward/backward navigation, case/whole-word/regex/selection modes, Unicode byte positions, capture expansion, current/all replacement, single-step undo, selection resizing, stale-query/document/text/baseline rejection, read-only/composition protection and cleanup.
  • Recovery beyond the selected repeated-conflict scenario: checkpoints with autosave disabled, project-reopen discovery, deleted-file conflicts, private atomic streaming writes, coalescing, 64 MiB document and 256 MiB storage bounds, the 64-document limit without eviction, and write-failure cleanup.
  • Scratch beyond the selected close-failure scenario: shortcut/command entry, persistent-list reopening, native Save As success/cancellation/failure, edits during an ongoing save, explicit discard, closing the corresponding tab, and deletion/list-refresh ordering preventing draft resurrection.
  • Editor preferences: Core defaults and 250–60,000 ms bounds, actual-value display, settings persistence, native line-number/whitespace/caret/blink rendering, retained breakpoint gutter, restoring defaults, and ownership/cancellation of a single autosave timer.
  • Recent files/edits beyond pending-result submission: independent access/edit ordering, filtering, deduplication, the 80-item limit, persisted caret positions across restarts, bounded ordered I/O, and project-close cleanup and isolation.
  • Named keymap schemes: migration of legacy overrides, independent save/select/rename/delete, actual shortcut dispatch changes, default protection, name/count/binding validation, recording/conflict/reset behavior, and opening settings without writing.
  • Windows GNU linking correction, staging identity and native Core ABI remain unverified. Go 1.27.3, Bash/cygpath and MinGW/cgo tools are absent from the supplied inventory; revision-matched external Core sources, headers and libraries are absent from this checkout.
  • The window-close retry and local-history Apply synchronization changes remain unverified. Claims about reduced intermittency require a prespecified repeated-run protocol and failure criteria.
  • Runtime storage placement/privacy, installation-resource hash invariance, and refusal to reuse mutable editor user state across worktrees remain unverified. No installed product or packaged-resource fixture was supplied.
  • English/Chinese native presentation, accessibility labels, explanatory text, structured failure logging, and exclusion of source/query/replacement text from logs remain unverified. Localization/resource checks were not executed; the PR reports missing logging gates under [Feature] 恢复 Viva 日志事件类型生成和目录使用门禁 #1802.
  • Background execution, bounded memory/queues, cancellation, idle behavior, rendering allocations and native responsiveness remain unverified. Performance acceptance is blocked pending a prespecified statistical protocol, workloads, sample sizes and thresholds; supplied macOS measurements do not establish Windows behavior.
  • macOS native workflows, ABI, bundle immutability, code-signature and Sparkle effects require capability macos and remain blocked.
  • Issue [Feature] Windows/macOS 统一 Viva 工作台与原生编辑器,保留 Rust Core 和插件体系(分阶段重构) #1794's body and the external Core contracts/vectors were not available locally or supplied. Requirements beyond the provided PR description and comments cannot be established.

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

@1lck
1lck merged commit 10385ee into preview Nov 13, 2026
7 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