- 状态: 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)。
- 状态: 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 正常存活。
- 状态: 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_releaseSIGSEGV,崩溃栈不含 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 存活。
- 状态: 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 像素验证。
- 状态: complete
- 执行的操作:
- 完成平台、编辑权限、项目模型、编译、Provider、提示词、布局、隐私、发布与许可证访谈。
- 检查 Texifier 扩展接口、Codex 官方接口和 Episteme 工程结构。
- 创建/修改的文件:
- 无产品文件;形成已确认的设计决策。
- 状态: complete
- 执行的操作:
- 在
/Users/0x211/local_folder/SourceLeaf初始化独立 Git 仓库。 - 建立可删除的分类编辑镜像
临时文件/SourceLeaf开发。 - 创建持久化计划文件。
- 建立 Swift Package、Core/App 分层、正式许可证、DCO、贡献规范和安装脚本。
- 在
- 创建/修改的文件:
task_plan.mdfindings.mdprogress.md
- 状态: complete
- 执行的操作:
- 完成项目发现、主文档推断、源码读写、结构大纲和上下文分档。
- 完成带行号与语法着色的 AppKit 源码编辑器、选区浮动按钮、行号目标解析和过期目标保护。
- 完成四区停靠、标签切换、拖放换区、关闭和独立窗口。
- 完成 PDFKit 预览、最后成功 PDF 保留、编译日志和自动编译防抖。
- 完成本机 Codex、OpenAI、兼容接口、Anthropic、Gemini、Ollama、LM Studio Provider。
- 完成上下文只读隔离、结构化提案、并排 Diff、静态检查、接受/拒绝/继续调整和持久历史。
- 完成 Keychain、缓存清理、内置提示词以及英文/简体中文界面。
- 根据实际冒烟反馈补充应用内“跟随系统/English/简体中文”即时切换,并实现自定义提示词的新增、复制、编辑、启停、删除与全局持久化。
- 后续可选扩展:
- 自定义 CLI Provider 的高级安全启用策略;当前默认关闭,不影响 Local Codex 与内置 HTTP Provider。
- 状态: 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 回归全部通过 |
- 状态: 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 |
| 我做了什么? | 已完成需求收敛、研究和仓库初始化 |
- 状态: 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。
- 状态: 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,与 SwiftUIView.body冲突;已更名为bodyBinding后继续回归。 - 对话输入拖动条首次使用了当前 macOS SwiftUI 不提供的
.cursormodifier,导致编译失败;已移除该装饰,保留明确拖动把手与DragGesture。 - 已完成快捷 Prompt/连接状态/Provider/模型/思考深度/上下文单行工具栏,对话输入高度可拖动且跨启动保留。
- 已完成长提示词设置页重构和内置审稿 Prompt 英文翻译,中英文正文分离回归通过。
- 已完成统一
helloProvider 健康检查和绿/红/未检测/检测中状态;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 arm64Release 构建和 ad-hoc 签名,已安装至/Users/0x211/Applications/SourceLeaf.app;内置双架构 Tectonic 0.16.9、中英文资源、版本/构建号、签名和进程存活均已验证。
- 状态: 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 均已验证。
| 时间戳 | 错误 | 尝试次数 | 解决方案 |
|---|---|---|---|
| 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;保留隔离运行策略 |
- 状态: 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 正常运行。