Skip to content

feat: TaskForge Kanban 与 Apple 提醒事项实时状态同步 - #1

Merged
ezbug merged 34 commits into
mainfrom
codex/kanban-status-sync
Aug 4, 2026
Merged

feat: TaskForge Kanban 与 Apple 提醒事项实时状态同步#1
ezbug merged 34 commits into
mainfrom
codex/kanban-status-sync

Conversation

@ezbug

@ezbug ezbug commented Aug 4, 2026

Copy link
Copy Markdown
Owner

概要

e29db3f 增加默认 custom-list 的 TaskForge Kanban Today 同步:

  • tasks.v6.bin + flutter.ctl_<列表 ID> 的真实过滤组计算成员,不按日期猜测。
  • 通过多个彩色 EventKit 提醒事项列表表达 TaskForge 状态。
  • Apple 状态移动与完成操作反向写回;完成只写 TaskForge done,不删除源任务。
  • EKEventStoreChanged 防抖、1 秒轮询、60 秒全量校准及 07:00/11:00/15:00 兜底。
  • 私有列表 ID、状态字典、源引用、映射和哈希使用 0700/0600 本机状态。
  • 双扫描清理、备份/回滚、历史重复归档和 fail-closed 源写回。

状态与安全边界

  • 默认源为固定的 TaskForge 自定义 Kanban Today 列表;删除或丢失固定列表 ID 会停止同步。
  • 状态列表为 TaskForge · 待办已计划就绪进行中,其余开放状态按需创建;done/cancelled 只完成提醒,不删除 TaskForge 源任务。
  • 反向写回只接受已学习且无冲突的 [ ][>][/][x];源身份、原始行、权限、哈希或回读无法确认时整轮安全降级,并把提醒移回当前 TaskForge 状态。
  • 普通 Apple 列表不会被扫描删除;受管提醒移出状态列表会被纠正;清理须经过至少 60 秒双扫描和备份。
  • 私有列表 ID、提醒映射、源引用、哈希、备份和状态字典不会进入公共仓库。

自动化验证

  • Core:swift run TaskForgeReminderCoreTests,85/85。
  • CLI parser:swift run TaskForgeReminderCLITests,26/26。
  • EventKit 隔离测试代码已覆盖列表、移动、完成、恢复、清理和普通列表保护;默认不访问真实提醒权限,需显式 opt-in 才运行。
  • 正式产品:swift build -c release --product TaskForgeReminderSync
  • Gitleaks、git diff --check、路径/账户/私有 ID 扫描:通过。

本机人工验收(不含私有标识)

  • 真实 Today 任务完成了 TaskForge 开放状态移动到已计划、进行中的正向同步,进行中符号学习为 [/]
  • Apple 完成链路曾暴露一次 TaskForge 缓存与 Markdown 源行分叉;在私有 0600 备份后校准源行并验证哈希,随后 Apple 完成成功反向写回源行 [x]
  • 完成后的源文件仍存在,提醒保持已完成,私有索引状态为 done;定向反向预演候选 0,重复组 0。
  • 当前 watcher 由用户级 LaunchAgent 持续运行,已超过 61 秒运行门槛;最终 Today 开放成员为 22 项(待办 21、已计划 1)。

安装与回滚

./scripts/install-daily-sync.sh

写入前备份涉及的源文件、提醒迁移数据和私有索引,并记录权限与哈希。回滚时先停止 watcher,再从私有备份恢复,完成 TaskForge 回读后重新运行只读预演。

本 PR 保持 draft,不自动批准权限,不合并 main

ezbug added 30 commits July 30, 2026 02:06
记录目标列表隔离、重要提醒保护、双扫描确认、删除前备份、恢复命令和隐私边界。

影响范围:设计规格,不改变当前运行行为。
按 TDD 拆分候选策略、源存在性、双扫描状态机、本机备份、EventKit 隔离测试、生产部署和隐私验收。

同时将已批准的设计规格状态更新为复核通过。
避免在中间提交中保留没有断言的占位测试;真实隔离测试目标在任务 7 一次性创建。
@ezbug

ezbug commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

生产验收补充记录(2026-08-05):

  • 采用 Today 中一条计划日期为今天、无优先级、无重复提醒的真实任务作为验收候选,当前仍为 todo,提醒位于 TaskForge · 待办
  • 尝试通过受保护的源编辑写入 [>] 后,TaskForge 重载仍以 tasks.v6.bin 为准,将源行恢复为 [ ];任务库状态未进入 scheduled,提醒保持待办。
  • 因 TaskForge 2.x 无可依赖的 CLI/API,且本项目不使用 Computer Use,状态链必须由用户在 TaskForge 界面完成一次移动;watcher 会继续监听并验证后续 Apple 状态移动。
  • TaskForge 重载后列表动态成员从 31 变为 22,状态数量仍为 todo;重复候选和反向候选均为 0。

@ezbug

ezbug commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

更正前一条本机验收记录(2026-08-05):

  • 前一条记录描述的是源缓存分叉期间的中间状态,不代表最终结果。
  • 已在私有 0600 备份后修复 TaskForge 缓存与 Markdown 源行不一致问题。
  • 最终人工验收已完成:TaskForge 状态移动到进行中后,在 Apple 完成提醒,源任务写回 [x];源文件保留,提醒保持已完成,不删除 TaskForge 任务。
  • 最终定向反向预演候选 0,去重预演重复组 0;Core 85/85、CLI 26/26,正式产品构建和 Gitleaks 通过。
  • 本评论不包含任何私有列表 ID、任务 ID、任务标题、源路径或提醒索引。

@ezbug

ezbug commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

最终收尾补充:

  • 增加匿名反向写回失败类别日志:只记录 source-status-validationsource-write-or-readbackunknown-write-failure,不记录标题、路径、Vault、任务 ID 或 EventKit ID。
  • 失败仍保持 fail-closed:提醒恢复到当前 TaskForge 状态,源文件不被猜测写入。
  • Core 85/85、CLI 26/26、正式产品构建、Gitleaks 和 diff 检查通过。
  • 本机 watcher 已使用新构建重启并连续运行超过 61 秒,LaunchAgent 正常。

@ezbug
ezbug marked this pull request as ready for review August 4, 2026 17:01
@ezbug

ezbug commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

CI 收尾结果:

  • 最新提交的 GitHub Actions CI 已通过。
  • Core tests、release product build、plist 校验、shell syntax 校验和 App bundle 验证全部通过。
  • PR 保持 ready for review;未合并 main

@ezbug
ezbug merged commit 31e5bd4 into main Aug 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant