真实案例
作者自用案例Notepad-- · Codex + TaskBelay

用 TaskBelay 推进Notepad-- macOS 原生迁移

把一个 Qt 编辑器迁移到 macOS 原生组件,需要协调功能取舍、技术实现和反复验证。Notepad-- 使用 Codex 与 TaskBelay 配合推进:Codex 负责分析与实现,TaskBelay 把计划、进度和检查结果留在同一任务中。

先把计划说清楚,再把每一步接起来。

从需求确认到测试返工,TaskBelay 让约定、当前进度与接下来的工作保持连贯。

作者自用案例 · 根据开发过程编辑整理

01 / 目标与分工

目标明确,分工清楚。

用户
提出需求、确认计划与取舍,检查最终功能。
Codex
分析代码、提出方案、实现功能、执行检查并提交结果。
TaskBelay
保存任务状态与约定,核对范围和验证安排,按提交结果推进阶段。
开发目标
把 Notepad-- 迁移到 Apple 原生组件,目标兼容 macOS 15,采用 macOS 27 可用能力,并减少低版本动效。
明确取舍
保留约定范围内的已有功能;不使用 Qt、Scintilla,不实现对比功能和旧 Qt 插件兼容。
实际产物
AppKit、SwiftUI、NSTextView/TextKit 原生工程,需求与实施文档,以及本地 Universal DMG。

02 / 开发过程

从一个想法,到可执行的工作。

明确范围、确认计划、处理返工、核对进展。把大任务拆成能理解、能继续的每一步。

  1. 需求与职责

    先把目标说清楚,开发才有方向

    目标很明确:让 Notepad-- 成为真正的 macOS 原生应用,同时保留日常编辑所需的能力。讨论很快从“用什么技术”落到了更具体的问题:哪些功能必须保留,哪些内容明确不做。

    TaskBelay 如何参与
    把确认后的需求和排除项留在任务中,让后续设计、实现与复查围绕同一份约定展开。
    推进结果
    技术方向和功能范围明确下来,计划可以围绕具体目标展开。
    展开过程:技术与功能怎样取舍
    选择原生路线
    采用 AppKit、SwiftUI 与系统文本编辑组件,不再依赖 Qt 或 Scintilla。窗口、菜单、文档操作与编辑体验都围绕 macOS 重新实现。
    守住功能范围
    保留多文档、搜索替换、列编辑、高亮折叠、编码转换与恢复等约定能力;排除对比功能和旧插件兼容,大文件与十六进制继续只读。
    提前约定兼容方式
    最低支持目标设为 macOS 15,新系统采用可用的新能力,旧系统减少动效。现有 Qt 工程保留,原生版本独立开发。
  2. 拆解实施计划

    先确认完整计划,再进入实现

    Codex 将原生迁移整理成 10 项工作和 12 项验收要求,覆盖工程、编辑器、搜索、工具与验证。TaskBelay 保存计划并等待确认;用户回复“开始”后,任务进入实现阶段。

    TaskBelay 如何参与
    把计划与确认状态保存在一起,让后续工作围绕已同意的范围展开。
    推进结果
    用户确认的是已经保存的计划;后续实现可以回到这份计划核对。
    展开任务操作

    这次任务中的计划确认与阶段切换。

    1. 草稿保存后TASKS · COMPLETE_TASKS

      允许读取与整理计划,等待确认。

    2. 用户回复开始

      确认后提交同一份计划。

    3. TaskBelay 返回IMPLEMENT · COMPLETE_IMPLEMENTATION

      当前允许的行为开始包含修改产品文件。

    展开过程:工作与验收怎样对应
    先对照,再迁移
    先梳理原版真正具备的功能,为保留能力建立对应关系,再安排工程、编辑器、搜索和工具等实现工作。
    改动位置清楚
    新增独立原生工程与配套文档,列出预计修改的文件范围,旧 Qt 源码保持不动。
    检查跟着功能走
    把中文输入、多光标撤销、安全保存和恢复等关键行为列入验证,初始安排 20 次自动检查命令。没有实机环境的兼容性项目单独记录。
  3. 测试与修复

    遇到失败,修复与复测接着走

    保存状态和 UI 检查发现问题后,Codex 提交失败原因,TaskBelay 将任务带回实现阶段。修正文档通知和启动参数后,再次提交实现并复测。需要用户处理的系统提示也留在当前任务中,处理后接着推进。

    TaskBelay 如何参与
    记录失败并切回需要修复的阶段。TaskBelay 接收检查结果;定位问题和修复代码由 Codex 执行。
    推进结果
    从修复代码到重跑检查,再到更新安装包,每一步都能回到同一任务查看。

    一次补充验证的安排

    原额度已用完
    20 次
    补充明确的检查
    +4 次

    修复已经改变了源码,还需要重新跑原生回归、构建并检查安装包,才能确认这次修改的结果。

    • 完整原生测试
    • 当前 Release 构建
    • DMG 打包
    • DMG 校验

    这是第一次追加检查。整份迁移记录共保存 8 次额度调整,自动命令额度从 20 增至 37;每次都附有原因和待执行的检查。

    20 → 24 → 28 → 29 → 30 → 31 → 32 → 36 → 37

    展开任务操作

    这次任务中的计划确认与阶段切换。

    1. 提交失败结果taskbelay_submit_test

      记录失败原因,选择返回实现。

    2. 记录中的阶段变化TEST → IMPLEMENT

      下一步重新包含产品文件修改。

    3. 修复后的下一步IMPLEMENT → TEST

      提交修复,按当前内容继续检查。

    展开过程:两次失败如何处理
    文件存好了,界面却没更新
    保存后的内容完整,但侧栏仍显示旧文件名和“未保存”标记。排查后修正了文档状态的通知方式,让列表随保存结果更新。
    测试没跑通,先找阻断原因
    一个测试参数被误当成文件名,触发对话框,挡住查找和撤销操作。调整测试启动设置后,重新运行相关流程。
    修复与交付保持一致
    修复后重新运行 UI、文档与编辑检查,再按最新源码构建和校验 Universal 安装包。
  4. 核对进展

    回到最初的计划,明确接下来做什么

    原生工程和安装包产出后,用户与 Codex 再次对照实施计划和原版功能。跨文档搜索、批量操作、语言样式等能力被逐项核对,后续需要补齐的工作有了具体内容。

    TaskBelay 如何参与
    保留最初的约定和开发过程,为逐项核对功能提供参照。
    推进结果
    已经实现的能力与后续工作更加清楚,下一步可以围绕具体功能展开。
    展开过程:如何核对功能
    对照搜索场景
    围绕单个文档与全部已打开文档,分别核对查找和替换能力。
    细化批量操作
    把多组替换规则、规则导入导出和批量重命名分别列出,逐项检查。
    明确继续完善的内容
    将语言样式、摘要工具与本地化纳入后续功能完善,保持与原计划的对应关系。

03 / 成果与收获

工作在推进,过程始终清楚。

长任务中的三个帮助

  • 开工前,把功能、文件范围和检查安排放在一起确认。
  • 返工时,带着失败原因和已有进度继续处理。
  • 追加检查时,说明具体用途,让每次验证有明确目标。

已经落地的成果

  • AppKit、SwiftUI 与系统文本组件组成的原生工程。
  • 文档读写、编辑、搜索与恢复等核心功能。
  • 可回看的需求与实施计划,以及本地 Universal DMG 安装包。

原生工程与 Universal 安装包已产出

原生工程和核心功能已经落地。完整功能迁移与兼容性验收,是接下来继续完善的重点。

从界面操作到安装包,逐项检查。

  • 3 / 3UI 复测

    三项 UI 流程通过

  • 9 / 9相关回归

    文档与编辑相关检查

  • DMG安装包校验

    Universal 安装包校验通过

UI、文档与编辑检查在本机环境执行,安装包按当前源码重新构建。

04 / 体验打磨

从原生工程,继续打磨日常体验。

原生应用建立后,项目继续完善中英文界面,让设置、菜单与系统面板使用同一种语言。

后续开发 · Codex 直接实现

中英文切换,让界面语言保持一致

在设置中选择简体中文或 English,重启后应用菜单、设置和系统文件面板使用所选语言。双语改造通过了 43 项单元测试、5 项 UI 测试,并完成双架构 Release 构建。

05 / 下载任务摘要

把这次开发的关键过程带走。

带走这次原生迁移的计划安排、测试修复与验证过程,作为你组织下一个长任务的参考。

根据作者开发经历整理,保留关键决策和操作过程。

下载任务摘要

TXT · 中文 · 编辑整理的过程摘要

06 / 开始你的任务

从你自己的一个长任务开始。

在熟悉的编程工具里提出需求,用 TaskBelay 整理计划、确认范围,再沿着保存的进度持续推进。