Skip to content

Latest commit

 

History

History
268 lines (250 loc) · 40.8 KB

progress.md

File metadata and controls

268 lines (250 loc) · 40.8 KB

进度日志

会话:2026-07-22

阶段 10:Overleaf 风格源码编辑体验

  • 状态: complete
  • 用户以 Overleaf 参考图指出八项编辑体验缺口:语法/注释着色不足、选区白底白字、结构层级不可逐级折叠、缺少主题、不能配置字体和字号、存在横向滚动与行号重叠、插入光标不可见,以及整体编辑器观感不符合 LaTeX 用户预期。
  • 本轮继续使用 diagnose 的真实编辑器反馈循环,并沿用文件化规划;所有新增截图、测试输出、Release、安装备份与诊断夹具均归入“临时文件/阶段10”。
  • 已检查用户参考图:浅色编辑器中 LaTeX 命令为高饱和蓝、方括号参数偏青、注释为柔和绿色、正文为深灰;选区使用浅蓝背景且文字保持深色,行号栏固定在左侧,正文不向行号栏横向滑入。
  • 已先加入结构树、主题/字体持久化、语法色、覆盖层选区/插入点与禁止横向滚动回归。首次红灯在 Core 编译阶段因 ProjectIndexer.outlineTree 尚不存在而失败,证明层级结构当前确实没有数据模型;待实现后继续触达其余编辑器红灯。
  • 第一轮实现已贯通主题/字体设置、递归结构树、语法顺序、覆盖层选区/插入点和横向 bounds 钳制。两个新 AppKit 窗口测试并发执行再次触发已知测试宿主生命周期 SIGSEGV;语法测试同时因异步初始高亮时序读到基础色而红。后续改为每项隔离进程,并在语法测试中调用生产 coordinator 的真实高亮入口,避免把调度时序当成配色结果。
  • 定位并修复 token 颜色被 textView.textColor 二次统一覆盖的真实根因;语法回归现能读出注释绿、命令蓝、可选参数青、正文深灰和数学紫,隔离测试通过。选区/插入点/横向几何、递归结构树、主题/字体/字号跨启动持久化也分别通过。
  • 主题除设置页外已加入主工作区工具栏快捷菜单,并作用于主窗口、浮动窗口和设置窗口;注释正则不再把转义的 \% 误当作注释起点。
  • 真实窗口截图二次复核通过:浅色主题呈现蓝色命令、青色方括号参数、绿色注释、紫色数学和浅蓝选区,选中文字保持可读;深色主题的标题栏、滚动区和空白背景已全部转暗,黄色插入点清晰可见。Swift 全文件语法解析与中英 strings plist 校验通过。
  • 完整 Core 42/42 与产品行为 7/7 通过;新增覆盖递归标题树及主题、字体、字号跨启动恢复,既有保存、项目恢复、Provider、提示词和浮动窗口行为未回归。
  • 边界项目 7/7 通过,覆盖跨文件结构跳转、SyncTeX、源码/图片标签、缺少主文档、非 UTF-8、位图/矢量预览与 QuickLook。
  • 14 项既有 AppKit/PDFKit/真实工作区回归已全部按隔离进程通过,包括真实 WindowServer 源码合成、浅深色/多尺寸工作区、源码行号双向滚动、结构分割、图片往返、LaTeX 撤销、PDF 导航和对话 Diff。加上 3 项阶段10编辑器测试,本轮累计 73/73 个产品断言通过。
  • 新增的行号坐标红灯确认正文起点 12pt 落在 44pt ruler 内;按实际坐标差动态补偿后转绿。真实工作区截图现已显示固定独立行号栏、右侧正文和可展开的层级标题箭头;继续把语法色属性断言加入真实 Key Window seam。
  • 真实 Key Window 的命令色/正文色断言先以 RGB 距离 0 红灯,改为同步应用语义属性并在窗口稳定后重复提交后转绿;最新 WindowServer 截图已在完整 MutedRAG 工作区呈现蓝/青/绿/紫/橙语法色、独立行号栏和正常换行。发布版本更新为 0.3.3(build 6)。

阶段 9:第三轮基础编辑体验修复

  • 状态: complete
  • 用户复测确认三个基础阻断:0.3.1 安装版仍看不到源码;文档结构不可收起/展开,也不能拖动调整与文件树的边界;界面没有明确保存功能。
  • 本轮继续使用 diagnose 的真实安装版反馈循环,并用 computer-use 操作实际 SourceLeaf 窗口;所有测试、截图、构建和安装备份继续分类进入“临时文件”。
  • Computer Use 的本机原生管道启动失败(Sky Computer Use native pipe startup failed);这是同一环境此前已重复出现的基础设施故障,本轮不再无效重试,改为在产品中建立可从真实窗口读取编辑器可见状态与像素的诊断/回归 seam。
  • 已建立 macOS Key Window 合成器级源码回归,成功复现只见行号、不见源码;并发现此前测试误拿项目筛选框 field editor 的根本性测试缺陷。纠正识别后确认真正编辑器排版/直接绘制正常,故继续探测 AppKit 文本视图的 layer 合成边界。
  • 进一步确认窗口内对 TextStorage 做一次真实属性变更后,源码、源码标签和文件名会立即进入合成画面;仅 setNeedsDisplay 无效。实现已改为等待 SwiftUI 最终保留的编辑器真正接入窗口,再提交静态浅/深色调色板。最终重跑被 Codex 用量审批层拒绝,当前继续完成其余两项实现,禁止绕过审批。
  • 已完成文档结构折叠与可拖动垂直分界:文件树/结构改用 VSplitView,标题 disclosure 可收起到紧凑栏并持久恢复展开状态。
  • 已完成显式保存体验:模型追踪 dirty 状态,源码标题显示橙点,源码栏与全局工具栏提供保存按钮,文件菜单接入 ⌘S;写盘后状态清除,既有自动保存继续可配置。
  • 新增真实窗口合成、手动保存写盘/dirty 清除、结构展开持久化和项目树/结构分割视图回归;中英本地化文件均通过 plist 语法及 key 集合一致性检查。Swift 类型检查、完整测试、Release 和安装仍等待外层审批恢复。
  • 用户恢复额度并补充源码页 LaTeX 编辑要求;本轮把选区式文字样式、字号、标题等级、数学公式和常用结构纳入阶段 9,要求空选区插入可继续输入的模板、非空选区原位包裹,并保留原生撤销能力。
  • 真实窗口合成诊断最终定位两层问题:手工管理的超高文本视图曾落到负坐标,随后直接返回滚动视图又越界遮盖标签栏;改用 AppKit 标准文本视图、明确裁剪容器和只绘制可见字形的非交互层后,WindowServer 截图已清晰显示 MutedRAG.tex 正文、行号、源码标签和文件名。
  • 已实现源码页 LaTeX 工具栏:加粗/斜体/下划线,10 档字号,section 到 paragraph 标题,行内/独立/equation 公式、分数、上下标,以及列表、cite/ref/label/url。所有命令以 UTF-16 选区生成替换,空选区插入并选中占位符,通过 NSTextView.insertText 保留原生撤销;中英本地化与纯 Core 回归代码已补齐。
  • 移除覆盖层诊断底色后,最终 swift test 重跑被外层自动审批服务断线拒绝;未绕过拒绝,等待用户明确授权后完成类型检查、分组测试、Release 与安装。
  • 用户明确授权沙箱外 Swift 测试、Release 构建和安装验证后,最终分组验收全部完成:Core 41/41、产品行为 6/6、边界 6/6、视觉/窗口 14/14、QuickLook 1/1,共 68/68 个产品断言通过。AppKit 窗口类测试按隔离进程执行,避免测试框架连续销毁多个窗口时的已知生命周期崩溃。
  • 独立仓库同步后再次通过 Core 41/41,以及真实 Key Window 源码合成和 LaTeX 工具栏原生编辑/撤销两项关键回归;镜像与独立仓库 checksum dry-run 无差异。
  • SourceLeaf 0.3.2(build 5)已从独立仓库构建并覆盖安装到 /Users/0x211/Applications/SourceLeaf.app。主程序为 arm64+x86_64 Universal,签名有效,简体中文资源完整,内置 arm64/x86_64 Tectonic 0.16.9,安装后进程 PID 32011 正常存活。

阶段 8:第二轮真实使用反馈诊断与修复

  • 状态: complete
  • 用户复测报告六项问题:安装版源码仍空白;源码/图片标签单击不切换且双击意外关闭预览;PDF 编译偏慢;PDF 双击未反向激活源码并定位;“Codex”命名过窄且对话内不能切换 CLI/模型/思考深度;需要加入“略微缓和的审稿人”默认提示词。
  • 本轮采用 diagnose 的复现→假设→探针→修复→原场景回归流程,并用 ego-browser 从用户指定页面读取提示词;所有新增构建、缓存、截图和夹具继续只进入“临时文件”。
  • ego-browser 首次从 PATH 启动失败(command not found);已停止同路径重试并转入该技能规定的安装/连接说明。
  • 按安装说明补入 ~/.local/bin 后确认 ego-browser 可用;默认沙箱无法连接 ego_cli bootstrap,改经授权在沙箱外访问成功,复用隔离任务空间 3。
  • 页面语义快照已定位“略微缓和的审稿人”及其 76 行代码块;标准 heading 选择器未命中 Wiki.js 的非标准渲染节点,下一步改用文本节点和相邻容器精确抽取。
  • 已定位正文 h2#略微缓和的审稿人 和相邻 div.code-toolbar,完整提取并在 findings.md 保存 76 行提示词;剔除了网页按钮文字 Copy,未执行其中任何指令。
  • 第一轮代码诊断确认四个直接缺陷:打开源码会清空图片预览对象;活动栏可把当前面板直接关闭且布局选择是嵌套原地修改;PDF 只支持 Command 单击且不传选词;编译没有未变化快路径。源码空白的现有测试 seam 也只覆盖独立编辑器,未覆盖真实 Dock 工作区。
  • 对话配置审计确认 ProviderProfile 与 Local Codex Provider 都缺少思考深度契约;内置提示词合并机制则可安全新增稳定 id 的审稿模板,并继续通过“复制后编辑”支持个性化。
  • 本机 Codex 0.144.5 帮助与最新官方手册共同确认:模型使用 --model,思考深度使用单次 --config model_reasoning_effort=...;不会修改用户全局 Codex 配置。首次手册刷新被失效 localhost 代理阻断,取消代理并授权联网后成功,缓存仍位于“临时文件”。
  • 三项第一轮红灯中,源码/图片往返以 selectedImageFile=nil 失败,重复编译以工具调用次数 2 失败;初始 Dock 源码几何测试通过。编辑器反馈循环将收紧到切换、缩放和焦点压力场景。
  • 新增图片/源码往返与 4 种窗口宽度压力测试;首次构建被 Testing 宏内联 try 语法限制阻断,已改为循环前读取期望源码再重跑。
  • 修正后压力测试在四种宽度下均能单击切回源码并绘制足量像素,仍未复现安装版空白;按 diagnose 规范加入仅 SOURCELEAF_EDITOR_DIAGNOSTICS=1 生效的 [DEBUG-SL8] 临时探针,准备从完整 App 生命周期采集状态,定位后删除。
  • 直接启动诊断 App 时未创建源码面板;尝试用 CFFIXED_USER_HOME 隔离最近项目被 macOS defaults 拒绝,确认未写真实偏好。现加入同样只在诊断开关下生效的 SOURCELEAF_DIAGNOSTIC_PROJECT 项目入口。
  • 完整 Release 探针最终在实际窗口捕获 87,654 字符、有效 TextKit 几何及 11,555 个字形像素,证明当前构建可见;结合覆盖安装后旧进程仍存活,根因收敛为用户可能继续操作旧驻留实例。所有 [DEBUG-SL8] 探针与诊断项目入口已立即删除,后续改进安装器的退出/重启契约。
  • PDF/对话/提示词第二组测试按预期因缺少 reasoningEffort、Codex 参数构造、行内选词 API 与双击策略而编译红灯;补充了测试文件使用 NSString 所需的 Foundation 导入。
  • 完成第一批实现:图片与源码状态共存,标签通过整体 DockLayout 赋值发布切换;PDF 反向定位支持双击或 ⌘ 点按并传回选中单词;Local Codex 安全映射可编辑模型与思考深度;完整加入“略微缓和的审稿人”内置模板。
  • 定向测试已编译通过;Codex 参数、旧 Provider 解码、审稿 Prompt、行内选词和 PDF 双击策略转绿。边界项目两项失败由测试环境路径少一层 SourceLeaf开发/临时文件 导致,与产品逻辑无关。重复编译快路径仍启动两次,追查为 JSON 指纹编码未固定 key 顺序,已改用 sortedKeys 生成确定指纹。
  • 修正测试路径和确定指纹后,三项失败回归全部转绿。完整测试中 50 余项已逐项运行,但 SwiftPM 测试宿主在 QuickLook SVG 插件加载后清理 autorelease pool 时出现 objc_release SIGSEGV,崩溃栈不含 SourceLeaf 函数。已为 QuickLook representable 增加明确 dismantle,停止 autostart 并清空 preview item,以避免测试/反复切换后的延迟释放。
  • 按 Core 35 项、项目行为 9 项、QuickLook 1 项、视觉工作区 11 项分组后,56 项测试的产品断言均已通过。单进程汇总崩溃与连续构造多个未显示 AppKit 窗口的测试生命周期有关,已为渲染 helper 和 Dock 测试增加显式断开 contentView/关闭窗口。
  • 重新检查全屏工作区快照时发现,父 NSHostingView.cacheDisplay 不会可靠捕获嵌套 NSViewRepresentable 的内容,因此快照中 PDF 与源码均会呈空白;直接从真实 Dock 宿主内的 NSTextView 捕获则清晰显示完整 LaTeX 字形。为覆盖用户报告的切换后不重绘,编辑器现在会在连入窗口、标签重现和文本高亮后显式无效化可见区域,并统一使用动态 labelColor。
  • 真实 MutedRAG 性能基线:资源已缓存但允许联网的 Tectonic 编译为 62.09s,无变更重复编译为 0.0017s;直接 --only-cached 为 15.21s。现实现“本地缓存优先,只在错误明确表示缺少文件/资源时联网重试”,CompilerService 实测冷编译 15.10s、无变更热编译 0.0016s。
  • “对话”的 Provider 选择现在跨启动持久;Local Codex 用官方 CLI 参数映射模型/思考深度,OpenAI Responses 与 OpenAI 兼容 API 也分别映射 reasoning.effort / reasoning_effort,不支持统一语义的 Provider 不显示此控件。
  • 最终隔离验收:Core 38/38;项目边界 7/7;对话与持久化 5/5;轻量 UI 6/6;真实工作区 1/1;真实源码像素 2/2;图片/源码四宽度往返 1/1。总计 60 项产品测均通过,另显式真实编译性能测试通过。
  • SourceLeaf 0.3.1(build 4)已从独立仓库再次通过 38/38 核心回归,构建为 arm64+x86_64 通用 App;签名、双语资源、内置双架构 Tectonic 0.16.9 均验证通过。安装器先退出旧实例并把 0.3.0 存入 临时文件/安装备份,随后覆盖安装并启动 0.3.1,最终仅有新进程 PID 6880 存活。

阶段 7:产品级真实项目、合理性与美观性验收

  • 状态: complete
  • 用户明确允许复制 paper 文件夹内容进行测试,并将完成标准提升为功能完备、效果优质、人类友好。
  • 已确认 /Users/0x211/local_folder/SourceLeaf 位于干净检查点 d0c54b9,安装版为 0.2.0。
  • 已盘点真实 MutedRAG 项目:799 行 acmart 主文档、488 行 Bib、11 张正文 PNG 和 5 张嵌套作者 JPG,适合作为复杂真实项目验收样本。
  • 本轮使用文件化规划与产品级验收矩阵;Computer Use 已连续失败三次,遵守不重复失败原则,改为建设离屏 UI 渲染/截图验证通道。
  • 已将 MutedRAG.tex、reference.bib 和完整 figures/ 复制到 临时文件/真实项目/MutedRAG;原论文目录保持只读不变。
  • 安装版内置 Tectonic 已成功编译真实副本,生成 24 页、3.42MB PDF、SyncTeX 和 BibTeX 日志;资源缓存固定在 临时文件/引擎缓存。
  • 已启用 PDF 视觉检查流程,下一步渲染 24 页缩略图并抽查图表、参考文献和作者页。
  • 已渲染 24 页 JPEG、生成两张联系表并原尺寸检查第 5/12/20/24 页;图表、文字、参考文献和作者照片均无空白、缺失、裁切或乱码。
  • 源码审查发现下一组可验证改进:编译输出缺少实时流、没有停止按钮、日志没有错误/警告/下载摘要、跨项目状态可能残留、编辑器有无效水平滚动条。
  • 完成首个 TDD 垂直切片:buildLogSummaryExplainsAComplexTectonicRun 先因接口不存在红灯,再实现公开 BuildLogSummary/BuildPhase,可统计下载、警告、错误并识别当前编译阶段;目标测试转绿。
  • 完成第二、第三个 TDD 切片:ProcessRunner 新增实时输出回调且不损失最终 stdout/stderr;CompilerService 继续向上转发进度。两项测试均先以“extra argument onOutput”红灯,再转绿。
  • App 已接入实时阶段文本、编译中停止按钮和紧凑日志摘要栏;同时重置跨项目临时状态并移除编辑器无效水平滚动条。完整 25 项测试通过。
  • 新增可选真实项目集成测试;在分类副本上确认 MutedRAG.tex 主文档、Bib、figures/author 二级目录、图片类型以及 Introduction/Method/Defenses 精确行号均正确,耗时 0.135 秒。
  • 无需重构模块:SwiftPM 测试目标可直接 @testable import SourceLeafApp。已增加隔离 AppModel 注入,快照状态不污染真实最近项目或设置。
  • 已成功离屏渲染实际 MutedRAG 工作区的 1440×900 浅/深色 PNG;视觉检查再次复现“只有行号、源码文字空白”,并发现连续 PDF 页被误解为双区域、黑色分隔带和动态汉化不完整等可见问题。
  • 源码布局回归先红灯(TextKit usedRect 为 0),随后改用系统标准滚动文本视图并在容器布局时同步可见宽度,目标测试转绿;专用源码像素截图已真实显示 MutedRAG 首屏字符并通过墨迹像素门槛。
  • PDF 预览默认改为单页模式,新增上一页/下一页、当前页/总页数状态和双语辅助文本;App 层 4 项界面测试通过。
  • 项目树与大纲间的黑色粗带已替换为紧凑语义标题栏,大纲默认最大高度 230pt;新浅/深色工作区图确认只呈现一个 PDF 纸面区域和 1/24 导航。
  • 完成可见字符串与本地化 key 审计:英文/简中各 170 key、无集合差异;硬编码结果仅含品牌名、语言自称、秒单位和自定义命令示例。
  • 已建立分类边界项目:多文件论文、缺少主文档、编译失败、图片格式和非 UTF-8 源码。多文件项目真实编译成功,损坏项目真实编译失败路径符合预期。
  • 项目大纲升级为跨文件结构:每项保存所属相对路径,点击后自动切到对应 .tex 并定位行号;编辑时只增量刷新活动文件,避免大项目逐键全量扫描。
  • 缺少主文档时不再把任意 .tex 误判为 root;JPG/SVG 图片路由、非 UTF-8 安全失败、跨文件跳转等 9 项 App/边界测试全部通过。
  • 中文运行时选择测试先五项全红,定位为 SwiftPM localization 资源查找失败;改用 Bundle.url(... localization:) 后全部转绿,最新浅/深色真实工作区图已呈现“项目、筛选文件、文档结构、立即编译、编译成功、编译日志、已完成”等中文。
  • 图片预览已验证 QLPreviewView 接收真实 SVG;行号向上滚动已验证边界通知与可见行回退,不再只依赖纯函数行号映射。
  • 新增提示词 CRUD 持久化、最近项目/最近源码恢复、浮动面板回原停靠区产品行为测试;App 层共 15 项测试全部通过。底部日志默认理想高度进一步从 104pt 收紧到 82pt,仍可手动拉伸至 180pt。
  • 全仓 42 项测试通过;随后显式启用本机 Codex CLI 做只读临时协议联调,8.664 秒返回合法空 replacements 提案,确认复用本机登录的真实通路仍可用。
  • 完成内置 SyncTeX gzip 解析与双向导航:源码栏定位按钮跳 PDF 并高亮,PDF 中 ⌘ 点按反查所属文件/行;真实多文件压缩索引的 Core 与 AppModel 往返测试均通过。
  • 新增 1024×700 紧凑屏和 1728×1050 宽屏快照门槛;发现并修复紧凑 PDF 工具栏文字截断,复核后图标、页码与状态无裁切。
  • 新增真实论文选区的 Codex 浅/深色审阅快照;修复助手气泡对比度、深色可选择文字消失和空输入框缺少引导,改为稳定气泡渲染、右键复制与中文 placeholder。
  • 生成并视觉检查 SourceLeaf 原生应用图标;0.3.0 Universal Release 首次构建、签名、双架构、双语资源、内置双架构 Tectonic、ICNS 与 Info.plist 均已验证。安装后新实例 PID 18186 正常存活。
  • 最终完整测试集增至 47 项并全部通过(6.626 秒);覆盖真实论文、gzip SyncTeX 往返、多文件与失败边界、工作区多尺寸浅深色快照、Codex 审阅快照、本地化、提示词与布局恢复、实时编译日志、图片预览和 PDF 导航。
  • 最终源码已逐文件同步到独立 Git 仓库并用 checksum dry-run 证明无差异;随后从独立仓库再次完成 47/47 测试,测试本体耗时 6.355 秒。
  • SourceLeaf 0.3.0(build 3)已重新构建并覆盖安装;主程序为 arm64+x86_64、签名有效,内置 Tectonic 0.16.9、双语资源和 ICNS 图标完整,新进程 PID 29588 正常存活。
  • 最终浅/深色 Codex 审阅、1024×700 紧凑工作区、1728×1050 宽屏工作区及独立源码编辑器快照均已复核;安装版窗口级截屏受 macOS 屏幕录制权限阻止,不影响组件级实际 AppKit 像素验证。

阶段 1:需求与发现

  • 状态: complete
  • 执行的操作:
    • 完成平台、编辑权限、项目模型、编译、Provider、提示词、布局、隐私、发布与许可证访谈。
    • 检查 Texifier 扩展接口、Codex 官方接口和 Episteme 工程结构。
  • 创建/修改的文件:
    • 无产品文件;形成已确认的设计决策。

阶段 2:规划与工程骨架

  • 状态: complete
  • 执行的操作:
    • 在 /Users/0x211/local_folder/SourceLeaf 初始化独立 Git 仓库。
    • 建立可删除的分类编辑镜像 临时文件/SourceLeaf开发。
    • 创建持久化计划文件。
    • 建立 Swift Package、Core/App 分层、正式许可证、DCO、贡献规范和安装脚本。
  • 创建/修改的文件:
    • task_plan.md
    • findings.md
    • progress.md

阶段 3:核心实现

  • 状态: complete
  • 执行的操作:
    • 完成项目发现、主文档推断、源码读写、结构大纲和上下文分档。
    • 完成带行号与语法着色的 AppKit 源码编辑器、选区浮动按钮、行号目标解析和过期目标保护。
    • 完成四区停靠、标签切换、拖放换区、关闭和独立窗口。
    • 完成 PDFKit 预览、最后成功 PDF 保留、编译日志和自动编译防抖。
    • 完成本机 Codex、OpenAI、兼容接口、Anthropic、Gemini、Ollama、LM Studio Provider。
    • 完成上下文只读隔离、结构化提案、并排 Diff、静态检查、接受/拒绝/继续调整和持久历史。
    • 完成 Keychain、缓存清理、内置提示词以及英文/简体中文界面。
    • 根据实际冒烟反馈补充应用内“跟随系统/English/简体中文”即时切换,并实现自定义提示词的新增、复制、编辑、启停、删除与全局持久化。
  • 后续可选扩展:
    • 自定义 CLI Provider 的高级安全启用策略;当前默认关闭,不影响 Local Codex 与内置 HTTP Provider。

阶段 4:测试与验证

  • 状态: complete
  • 执行的操作:
    • Debug 构建和 47 个测试通过(其中本机 Codex 联调测试默认按环境变量关闭,并已另行显式验证)。
    • 本机 Codex 真实协议联调通过。
    • Release .app 已构建为 arm64 + x86_64 通用二进制,并通过 ad-hoc 签名验证。

测试结果

测试 输入 预期结果 实际结果 状态
Swift 工具链 swift --version Swift 可用 Swift 6.3.3 arm64 通过
Xcode 工具链 xcode-select -p 完整 Xcode /Applications/Xcode.app/Contents/Developer 通过
完整自动化测试 swift test 所有测试通过 47/47 通过;含真实项目、边界、AppKit/PDFKit 与视觉快照 通过
本机 Codex 联调 启用 SOURCELEAF_RUN_CODEX_TEST=1 返回合法结构化提案 1/1 通过,8.664 秒 通过
Release 通用构建 scripts/build-app-bundle.sh arm64 + x86_64 .app 两种架构,签名验证通过 通过

错误日志

时间戳 错误 尝试次数 解决方案
2026-07-22 官方手册请求被失效本地代理阻断 1 授权后直接联网成功
2026-07-22 swift test 写入 ~/.cache/clang/ModuleCache 被沙箱拒绝 1 改用 /private/tmp/SourceLeaf-* 任务专用缓存
2026-07-22 SwiftPM 内层 sandbox-exec 无法在受管沙箱运行 1 授权后在外层沙箱外运行测试
2026-07-22 URLComponents 可选链同时读写违反 Swift 6 exclusivity 1 拆分读取与写入
2026-07-22 UI 首次编译时测试文件缺少 Foundation,编辑器浮点类型推断歧义 1 补充导入并显式使用 CGFloat.greatestFiniteMagnitude
2026-07-22 Computer Use 原生管道无法启动,未能自动截图检查 UI 2 保留签名、架构、资源和进程存活验证;视觉交互留给人工冒烟测试
2026-07-22 中文资源存在但只能跟随系统语言;提示词页只有启停开关 1 改为运行时语言 Bundle 选择和动态文案;新增完整提示词 CRUD 与持久化
2026-07-22 阶段 10 最终回归首次设置中文 TMPDIR 时 SwiftPM 返回空 target-info 1 改用 /private/tmp/SourceLeaf-phase10-final-syntax ASCII scratch path,4 项最终 AppKit 回归全部通过

阶段 6:首轮真实使用反馈修复

  • 状态: complete
  • 收到并登记 15 项真实使用问题,覆盖汉化、项目树、图片、编辑器、行号、浮动窗口、系统打开面板、项目恢复、默认布局、受管理引擎、PDF、拖拽活动栏和结构跳转。
  • 已从代码路径复现结构性原因:扁平项目数组、图片误走文本路由、无限 TextKit 容器、行号尺缺少滚动监听、空停靠区消失、浮窗无关闭回调、主包无本地化声明、未持久化最近项目、底栏高度过大、安装脚本未部署引擎。
  • 已先写项目树、双向逻辑行映射、浮动面板恢复测试;当前代码因缺少 ProjectIndexer.tree、SourceLineMap、DockLayout.zone/restore 而按预期红灯失败。
  • 已实现递归 ProjectTreeNode 构建、与滚动方向无关的 SourceLineMap 逻辑行映射,以及面板原区域查询/恢复 API;下一步接入 AppKit/SwiftUI 界面。
  • 已接入树状 OutlineGroup 项目导航、Quick Look 图片/PDF 资源预览、可点击文档结构跳转、PDF 选择覆盖卡片。
  • 已重构工作区为左侧活动栏 + 四个常驻可放置区,加入标签拖拽、明确移动菜单、缩小底栏,并让浮动窗口关闭后恢复原区域。
  • 已调整 TextKit 编辑器为受面板宽度约束的稳定布局,显式设置文字/背景/选中颜色,并监听滚动边界让行号双向刷新。
  • 已加入主包本地化声明与中英文资源复制,并将验证、编译、Provider、钥匙串和历史恢复错误收口到运行时翻译边界。
  • 已实现最近项目与最近文件恢复;再次启动时会直接回到上次工作位置。
  • 已固定 Tectonic 0.16.9 官方双架构资产与 SHA-256,新增下载、校验、双架构嵌入和运行时选架构逻辑;许可证随 App 交付。
  • 完整 Swift 构建与 22 项测试通过,包括项目树、双向行号、浮窗恢复、双语 key 对齐和受管理引擎定位回归测试。
  • Tectonic 双架构官方资产校验通过;Universal App 构建、ad-hoc 签名和主包中英本地化资源检查通过。
  • 使用 App 内置 arm64 Tectonic 对 临时文件/验证项目/main.tex 完成真实首次编译,生成 PDF、日志和 SyncTeX;首次下载的 41MB Tectonic 缓存已移入 临时文件/引擎缓存 分类目录。
  • SourceLeaf 0.2.0 已安装到 /Users/0x211/Applications/SourceLeaf.app,旧版保存在 临时文件/安装备份。
  • Computer Use 原生管道第三次仍启动失败;不再重复调用。编辑器文字可见性、树展开、图片预览和浮窗关闭回停靠已由代码路径与回归测试覆盖,但最终视觉手感需要用户在新安装版中人工复核。

五问重启检查

问题 答案
我在哪里? 阶段 2:规划与工程骨架
我要去哪里? 核心实现、测试验证、安装交付
目标是什么? 交付可安装的 SourceLeaf 原生 macOS 应用
我学到了什么? 见 findings.md
我做了什么? 已完成需求收敛、研究和仓库初始化

阶段 10:Overleaf 风格源码编辑体验

  • 状态: in_progress
  • 已完成 Overleaf 风格浅色/深色语法调色板、注释优先级、可读选区、可见插入光标、固定行号 gutter 与强制按宽度换行。
  • 已加入系统/浅色/深色主题、已安装字体族和 10–32pt 字号设置,所有选项使用 UserDefaults 持久化并即时作用于编辑器。
  • 文档结构已改为跨文件安全的递归标题树,section/subsection/subsubsection 等节点均可逐级展开与折叠,点击仍会跳转源码。
  • 最终 Swift 解析、中英文 strings 校验、调试标记扫描通过;4 项新增/强化的 AppKit 真实编辑器回归逐项通过。
  • 最终浅色、深色与真实工作区 WindowServer 截图确认语法色、选区、光标、独立行号栏和结构 disclosure 可见。
  • 全阶段累计 73/73 产品断言通过;独立仓库再次通过 42 项 Core 与 4 项阶段 10 关键编辑器/AppKit 回归。
  • SourceLeaf 0.3.3(build 6)Release 与安装版均通过 Universal 架构、ad-hoc 签名、双架构 Tectonic 0.16.9、中英文资源和进程存活验证;旧版已保存到独立仓库的 临时文件/安装备份,Git 检查点标记为 v0.3.3。

阶段 11:交互流畅度、会话工具栏与状态恢复

  • 状态: in_progress
  • 已登记 7 组真实使用反馈,覆盖选区性能、动态光标、PDF 重启恢复、可调输入区、长提示词展示与双语、Provider 健康检查,以及快捷 Prompt/Agent/模型/思考深度工具栏。
  • 已复核两张参考图并恢复阶段 10 的编辑器、Provider、编译缓存与规划上下文;下一步建立红灯回归并核实 WorkBuddy/CodeBuddy 的正式接入边界。
  • 已定位编辑器高频事件链和静态光标的实现缺口;已找到 CodeBuddy 官方 CLI 文档入口,WorkBuddy 暂无可直接接入 Provider 的官方证据。
  • CodeBuddy 官方无头模式已确认具备 stdin、JSON、模型配置和结构化 schema 能力,可作为受限 CLI Provider 设计;安全实现将禁止工具,不使用 --dangerously-skip-permissions。
  • WorkBuddy 官方页面未提供可验证的 headless CLI/API,因此本阶段只正式内置 CodeBuddy;WorkBuddy 暂通过可配置 CLI 扩展保留空间,不冒充已兼容。
  • 已确认 PDF 文件本身持久存在但启动恢复链缺失;对话输入框固定上限为 120pt;英文审稿 Prompt 实际复用了中文正文;现有模型/思考字段可复用,健康检查需新增协议与状态。
  • 已新增真实 SwiftUI/AppKit 大文档 80 次选区更新性能回归,以及聚焦编辑器光标“亮→灭→亮”的行为回归;下一步先在未修复代码上确认红灯基线。
  • 红灯基线已确认:大文档 80 次选区更新耗时 2.216 秒(约 27.7 ms/次);光标在 650 ms 后仍可见,无闪烁相位。两项回归均以预期方式失败,可用于验证修复。
  • 首次编译动态光标时,Swift 6 禁止从 nonisolated deinit 访问非 Sendable 的 Timer;已移除该 deinit 访问,定时器仍在视图离开 window 时显式失效。
  • 编辑器性能修复已通过目标回归:selection-only 更新不再强制全文布局,高频选区 binding 在 50 ms 静默期后合并提交;中间基线由 2.216 秒降至 1.217 秒,最终低于 1 秒预算。光标也已以 530 ms 相位定时正常通过“亮→灭→亮”回归。
  • 将两个 AppKit 窗口测试用正则筛选同时执行时,Swift Testing 默认并发导致测试进程 signal 11;分开顺序运行后无崩溃,因此后续不并发这两项真实窗口回归。
  • 已实现并通过两层 PDF 恢复回归:Core 层可从成功 manifest 恢复上次 PDF,AppModel 打开项目后能自动重新挂载该 PDF,且不运行 LaTeX 引擎。
  • 首次编译新 Prompt 设置页时,辅助 Binding 也命名为 body,与 SwiftUI View.body 冲突;已更名为 bodyBinding 后继续回归。
  • 对话输入拖动条首次使用了当前 macOS SwiftUI 不提供的 .cursor modifier,导致编译失败;已移除该装饰,保留明确拖动把手与 DragGesture。
  • 已完成快捷 Prompt/连接状态/Provider/模型/思考深度/上下文单行工具栏,对话输入高度可拖动且跨启动保留。
  • 已完成长提示词设置页重构和内置审稿 Prompt 英文翻译,中英文正文分离回归通过。
  • 已完成统一 hello Provider 健康检查和绿/红/未检测/检测中状态;CodeBuddy 安全 headless CLI 参数与解析回归 2/2 通过。WorkBuddy 因无官方可验证接口而不冒充内置支持。
  • 完整测试首次运行在连续两项 AppKit 窗口测试交界处出现 signal 11;单独测试正常。已将光标 Timer 改为只在 overlay 真正进入 window 后启动,以 weak target 运行,离开 window 时失效,避免定时器保留已关闭窗口的视图。
  • 为完全消除后台调度开销与生命周期耦合,最终动态光标改用 Core Animation 独立 caret layer,无 Timer、无 Task、无 SwiftUI 状态更新;窗口移除时清除动画,单项回归可正常通过并退出。
  • Swift 6.3.3 swiftpm-testing-helper 在同一进程连续创建/销毁多个 AppKit 窗口时仍可在 autorelease pool 回收处 signal 11,且诊断目录中存在本阶段之前的同类崩溃记录。因此最终验证按 Core 全量、ProductBehavior 全量和真实窗口单项独立进程执行,不忽略任何产品断言。
  • 独立 Git 仓库已通过 45 项 Core 测试、8 项 ProductBehavior 测试,编辑器选区性能、光标动画、语法/选区和几何回归均单独通过;对话栏浅色/深色真实快照验证通过。
  • SourceLeaf 0.3.4(build 7)已完成 Universal x86_64 arm64 Release 构建和 ad-hoc 签名,已安装至 /Users/0x211/Applications/SourceLeaf.app;内置双架构 Tectonic 0.16.9、中英文资源、版本/构建号、签名和进程存活均已验证。

阶段 12:连续预览、全局交互与专业编辑能力

  • 状态: complete
  • 已登记 16 项真实使用反馈,并按预览系统、全局布局与命中、编辑能力、格式变换/撤销、实时选区五条链路归类。
  • 已复核两张参考截图:Texifier 使用紧凑单行 PDF 控制;SourceLeaf 当前 PDF 的第二行页码栏造成主内容区边界不齐。
  • 已建立五个可证伪的初始根因假设;下一步检查实际 PDFKit、Quick Look/图片、标签、文件树、Prompt 设置和 AppKit 编辑器实现,并先建立失败回归。
  • 已新增连续纵向 PDF、Control 滚轮缩放、包裹切换、表格/图片模板、撤销选区和拖选即时绘制回归;首轮编译因 .table/.figure 尚不存在而按预期红灯,证明测试先于实现。
  • 已实现 PDF 连续纵向模式、0.1×–8× 缩放与 Control+滚轮、可折叠缩略图、紧凑单行控制、自动编译开关和 PDF 另存为;图片改为原生可缩放滚动预览。
  • 已实现界面级文字缩放、可滚动的只读内置 Prompt、无 360pt 上限的对话输入、整行文件命中与整块标签命中。
  • 已实现查找替换入口、表格/图片模板、Command+B/I/U、Command+Shift+B 编译、格式二次执行解除、选区感知撤销与同步拖选绘制。
  • Core 全量 47/47 通过;ProductBehavior 8/8 通过,包含界面字号持久化。撤销选区窗口测试单独运行通过。
  • 长 Prompt 真实窗口滚动、SVG 原生缩放预览、PDF 连续纵向与缩略图三项 AppKit 回归均单独通过。
  • 已生成并复核阶段 12 的 1440×900 浅/深色、1024×700 紧凑和 1728×1050 宽屏快照;单行 PDF 工具栏和三列标签边界对齐。
  • 发布版本已更新为 SourceLeaf 0.3.5(build 8),中英文 README 同步列出连续 PDF、图片缩放、查找替换、专业插入、快捷键和界面字号。
  • 独立仓库最终验证:47 项 Core、8 项 ProductBehavior,以及 PDF、图片、Prompt、撤销、即时选区五项 AppKit 单测均通过;大文档选区性能单独重跑退出码 0 并满足预算。
  • SourceLeaf 0.3.5(build 8)已从独立仓库完成 Universal Release 构建并覆盖安装;签名、x86_64 arm64、双架构 Tectonic 0.16.9、中英文资源和运行进程 PID 26316 均已验证。

阶段 12 错误日志

时间戳 错误 尝试次数 解决方案
2026-07-22 阶段 12 红灯测试找不到 LaTeXEditCommand.table/figure 1 符合 TDD 预期;下一步实现模板与其余交互后重跑
2026-07-22 本地化补丁首次使用了错误的英文 key 大小写上下文 1 用 rg 精确定位现有 Editor Font Size 行后重新应用,未改坏资源
2026-07-22 六个目标测试并发构造多个 AppKit 窗口后测试宿主 signal 11 1 五项产品断言已通过;沿用既有 Swift 6.3 隔离策略,撤销窗口测试单独运行
2026-07-22 首版长 Prompt 测试依赖离屏 SwiftUI ScrollView 的 documentView 高度,读到 0 1 诊断确认容器已有垂直 scroller;改用真实窗口并断言滚动交互能力,移除临时打印
2026-07-22 独立仓库图片回归误指向其不存在的 临时文件/边界项目 1 产品无故障;改用分类开发镜像中的现有边界项目绝对路径重跑
2026-07-22 顺序测试编排器把已通过的大文档性能用例汇报为 exit 1 1 单独新进程重跑,产品断言通过且进程正常 exit 0;保留隔离运行策略

阶段 13:编辑可靠性、原生交互与完整会话系统

  • 状态: in_progress
  • 已登记 23 项真实使用反馈,复核三张截图,并按编辑器状态、预览与命中、保存语义、对话会话、Diff/历史五条链路归类。
  • 已提出五个可证伪根因假设;下一步检查真实编辑事件链、Provider/历史模型、文件路由和分隔布局,先建立红灯回归。
  • 首次按旧模块路径读取失败(实际路径为 Sources/SourceLeafApp/ 与 Sources/SourceLeafCore/);已通过 rg --files 纠正,未产生源码修改。
  • 两项红灯回归先确认 PDF 缺少专属类型;首次绿灯编译又捕获 Swift 6 禁止在 nonisolated deinit 读取 Any? 事件监视器。监视器清理已迁移到 viewWillMove(toWindow:),避免绕过并发安全。
  • 会话 UI 首次编译捕获了一个 proposal 标签闭合错误,以及当前 SDK 的 onKeyPress(.return) 选择了无参数重载;已改为通用按键回调后自行筛选 Return,并修正视图闭合层级。
  • 五项状态回归中四项首次通过;项目 PDF 路由测试只因 /var 与 /private/var 的 URL 表示不同失败,实际指向同一文件。断言已改为比较 standardizedFileURL,产品代码无需回退。
  • 首个快速输入回归得到与用户完全一致的 test -> tset,但诊断发现测试使用了显式 replacementRange,导致 AppKit 按规范始终在位置 0 插入。测试已提升为真实 keyDown 事件;只有该真实输入链仍失败才继续修改同步策略。
  • 真实 keyDown 仍复现 tset,最终定位到滞后的选区 binding 每次把原生插入点拉回 0。加入原生选区所有权标记后,同一回归转绿:文本与状态均为 test,光标位于第 4 个字符之后。
  • PDF 事件路由测试首次使用了不存在的 NSEvent.scrollWheelEvent 便利构造器;已改用 CGEvent 创建 Control 滚轮事件,再桥接为 NSEvent,产品实现未受影响。
  • 已完成真正连续的语义界面字体缩放,并以实际 SwiftUI 文本几何回归确认 160% 显著大于 85%,不再只测试设置值是否持久化。
  • 图片预览缩小后居中回归通过,并加入按住鼠标拖动平移;项目 PDF 使用专属 .pdf 类型进入多页 PDFKit,Control+滚轮由容器级事件监视器在内部滚动视图消费前截获。
  • 独立仓库 50 项 Core 与 11 项产品行为(合计 61 项)一次通过;真实快速 keyDown、大文档选区、即时选区、编辑几何、图片居中和 PDF 事件路由均按隔离窗口策略通过。
  • 阶段 13 对话/Diff 浅色与深色 620×820 快照生成在 临时文件/视觉回归/阶段13 并人工复核;时间戳、消息操作、单一更多菜单、Diff 与输入区均可见。
  • SourceLeaf 0.3.6(build 9)Universal Release 构建与 ad-hoc 签名通过,内置 Tectonic 0.16.9 双架构;已覆盖安装到 /Users/0x211/Applications/SourceLeaf.app,旧版保存在 临时文件/安装备份/SourceLeaf-20260722-231121.app,新进程 PID 70684 正常运行。