ZON
Task System Reality Map · 2026-03-19

任务系统统一现状图:飞书日推、Today-Focus、todo-board、Public Pages 的真实链路与收敛顺序

这次不再抽象讲“系统应该统一”,而是把当前已经在跑的真实链路摊开:到底是谁在定义任务语义、谁只是做通知、哪些页面在看同一层、哪些页面其实看的是完全不同的层,以及为什么你会感到“有的地方有,有的地方没有”。

结论:问题核心不是页面多,而是状态契约没统一 当前主调度器:OpenClaw GitHub Actions:9 条 workflow 均为 disabled_manually 目标:先统一真相层,再统一通知和看板
127 `todo-board` 当前从 Obsidian 读到的任务总数
1 / 0 `Today-Focus` 当前是 1 条 focus、0 条待确认
1489 `priority.json` 当前导出的全仓优先级任务数
4+ 并行存在的任务语义产物层数,不是一个统一 read model
TL;DR

一句话判断

飞书不是主问题

飞书现在主要只是输出层。它之所以让你感觉“发得不对”,是因为上游的 `Today-Focus`、`public pages`、`todo-board` 没有共享同一套状态定义。

Today-Focus 已经是最接近主入口的层

`09:10` 的 daily push 真实读取的是 `Today-Focus.md`,而不是昨日 `DailyRecord`。但它目前只保证“有 Top1”,还没保证这条 Top1 的治理字段完整。

todo-board 不是没接入,而是接得太独立

它已经能读 `TODO-Inbox`、`Today-Focus`、review、`DailyRecord Top1`,是最像全局驾驶舱的一层。但它使用自己的 parser 和 sync,不是公共站点唯一共享的数据源。

最小正确做法

不是立刻重写所有页面,而是先导出一份唯一 `task-state.json`。让 `Today Focus / Daily / Priority / todo-board / Feishu` 都从同一个任务状态主表切片,而不是各自重解析 markdown。

As-Is Flow

当前真实链路:谁在跑、谁在改、谁在看

现在的真实系统并不是“没有主链”,而是已经有主链,但主链外还残留了多个各自解释任务的消费者。 主调度器已经是 OpenClaw;真相层主要是 `TODO-Inbox`、`Today-Focus`、`DailyRecord`;问题出在这几个输出层没有共享同一个任务语义核心。

TRUTH LAYER GOVERNANCE / JOBS READ MODELS OUTPUTS TODO-Inbox 库存池,含状态前缀与 #exec/* 31 tasks in todo-board sync Today-Focus 今日人工入口,规则已明确 current: 1 focus / 0 check DailyRecord 另存一套 Top1 / day context 21 daily_top1 + 36 daily_record 02:05 public-board 生成 docs/public 并发布 diary.zondev.top OpenClaw job: myobsidian-public-board 09:10 daily-tasks 读取 Today-Focus,发 Feishu 必要时自动补位 / 回写 DailyRecord Top1 latest send: 2026-03-19 09:10 09:20-09:50 review jobs 周 / 月 / 季 / 年 review 生成 但还没回写主任务真相层 weekly/monthly/quarterly/yearly today-focus/latest.json Today Focus 专用切片 priority.json 全仓 checklist 优先级导出 todo-board board.json / D1 最接近全局驾驶舱 但不是 public 站点共享真相层 127 tasks / 7 source kinds Feishu daily push 你每天最先看到的入口 diary.zondev.top Today Focus / Daily / Health task-execution 还在展示 2 月旧语义 todo.zondev.top 操作驾驶舱,但语义未共享
这张图最关键的点是:当前至少有 3 个消费者在独立解释同一批 Obsidian 任务文件,而 `09:10 daily push` 本身甚至还在发送前回写真相层,所以“通知层看起来不对”其实是上游语义层未统一。
Surface Split

为什么你会感觉“有的地方有,有的地方没有”

入口 主数据源 它展示的语义 为什么会让你误会
Today Focus `Today-Focus.md` 今天 1-3 条真正需要你动手或确认的事 它已经是“人工入口”,但目前没强制补齐所有治理字段,所以会出现“有 Top1,但你仍不知道为什么是它”的半成品。
Daily `report-*.data.js` + `priority.json` + day json 日报 / issue / 报告运营态 它名字像“今天要做什么”,但本质上不是 canonical task list,所以会和 Today Focus 对不上。
Priority 全仓 markdown checklist 扫描 全仓优先级分类 它任务数很多,当前是 1489 条,更像导出视图,不该直接充当“今日入口”。
Task Ops 旧执行日志 + TODO-Inbox 执行流水 / 待确认审计 页面仍在展示 2 月 20-25 日旧“待你确认”语义,所以你看到它时会以为今天系统里还有很多确认项没进 Today Focus。
todo-board `TODO-Inbox` + `Today-Focus` + reviews + `DailyRecord` 最接近全局驾驶舱的 read model 它已经接得最深,但和公共站点没有共享同一个导出 JSON,所以看起来像另一套系统。
今日唯一人工动作 全仓库存 执行流水 驾驶舱 报告/日报 Today Focus 最接近 不是库存池 不是流水页 能提供驾驶舱入口 不是 issue 日报 Priority 不能直接当今日入口 可作为排序参考 Task Ops 当前会误导 todo-board 已能表达 Top1 / Support 最强 Daily 名字容易误导
不是所有页面都应该合并成一个页面,但它们至少应该共享同一个状态主表。现在的问题是:同一个任务在不同页面里被当成了“今日入口 / 优先级导出 / 执行流水 / issue 日报 / 驾驶舱任务”,名字相似、含义不同。
Feishu Audit

飞书每日推送审计:现在到底发的是什么

真实 job

`myobsidian-daily-tasks @09:10` 是当前每天飞书日推的真实 job。它属于 OpenClaw,而不是 GitHub Actions。

当前主链存在
真实来源

脚本默认 `source-mode=focus-file`,所以 09:10 发送时真实读取的是 `Today-Focus.md`。cron 文案里残留的 `DailyRecord task digest` 只是过时描述。

描述已漂移
最近一次发送

最新成功发送是 2026-03-19 09:10。消息内容是一条纯文本 `【今日聚焦】`,而不是图片卡片。

发送正常
为什么你会觉得不对

因为飞书发出的是 09:10 当时版本;而 `Today-Focus.md` 在当天之后继续被改过,所以飞书、当前文件、公开页可能看起来不是同一版内容。

同日内容漂移
09:10 render send public view later edits Today-Focus 快照 发送瞬间读的是这一版 _build_focus_message 拼成纯文本 “今日聚焦” 不上传图片,不发卡片 Feishu 发出 latest: 2026-03-19 09:10 diary.zondev.top today-focus 页面来自另一条 job 它不是“刚刚发出的消息体” 同日继续改文件 于是你会看到内容不完全一致
用户体感中的“飞书发错了”常常不是因为发送失败,而是因为发送时刻的文本快照、之后更新过的 Today-Focus、以及公共页生成时刻不是同一时间点。

当前飞书层的四个具体问题

  • job 描述还写着 `DailyRecord task digest`,但真实行为已切到 `Today-Focus`。
  • `Today-Focus` 只要有一条 focus 就会发,但并不会强制这条任务补齐 `目标 / 现状 / 差距 / AI还能做 / 为何需要你`。
  • `待你确认` 为空时,系统现在会老实说“今天没有新的待确认事项”,但没有继续解释“为什么空、是否该自动补位”。
  • OpenClaw job state 里的 `lastDelivered=false` 容易误导,因为实际发信发生在脚本内部,不走 job delivery 字段。
Evidence

可验证的当前事实

GitHub Actions 已停用

远端 `EOMZON/myObsidian` 的 9 条 workflow 当前全部是 `disabled_manually`。仓库里的 `.github/workflows/*.yml` 还在,但已经不是现在的主调度器。

OpenClaw 才是现行控制面

`02:05 public-board`、`09:10 daily-tasks`、`09:20~09:50 periodic review` 都已经在 OpenClaw cron 里。

`todo-board` 已接真实 Obsidian

当前同步到的 source kinds 是:`today-focus`、`todo-inbox`、`daily-top1`、`daily-record`、`monthly-review`、`weekly-review`、`project-seed`。

旧页面仍在制造噪音

`task-execution` 页面现在还停留在 2 月的旧待确认流水,所以它会和 `Today-Focus` 的新口径互相打架。

Target Model

理想统一架构:谁是唯一真相层,谁只是投影

最小正确方案不是让所有页面只剩一个,而是让所有页面都建立在同一份任务主表之上。推荐做法是: 把 Obsidian 多源任务先导出成唯一 `task-state.json`,然后 `Today Focus / Daily / Priority / todo-board / Feishu` 都只消费它的不同切片。

Obsidian 真相层 TODO-Inbox Today-Focus DailyRecord Weekly / Monthly / Quarterly / Yearly review task-state.json 唯一共享任务主表 byId / status / priority / lane / sourceKind humanRole / focusRole / dueDate / evidence today.top1Id / today.focusIds / today.humanGateIds priority buckets / execution refs / quality refs Feishu 只发 today.top1 + humanGate Today Focus page 只显示 today.* 切片 Priority page 只做 buckets 投影,不再重扫全仓 todo-board 驾驶舱 / 操作界面 Daily / Ops / Health 只读衍生层
统一之后,页面还可以有很多,但它们不再各自拥有自己的 parser 和状态定义。真正共享的是 `task-state.json`,页面只是各取所需的投影层。
{ "generatedAt": "2026-03-19T04:34:05Z", "focusDate": "2026-03-19", "tasks": { "byId": { "task_1": { "id": "task_1", "title": "确定 E waitlist 现阶段是否退出公开入口", "status": "doing", "priority": "high", "dueDate": "2026-05-03", "lane": "今日聚焦", "sourceKind": "obsidian-today-focus", "sourcePath": "00-LifeOS/INFO/Today-Focus.md", "humanRequired": true, "humanRole": "act", "focusRole": "top1" } } }, "today": { "top1Id": "task_1", "focusIds": ["task_1"], "humanGateIds": [] } }
Roadmap

推荐收敛顺序:先统一状态,再统一体验

Step 1. 明确唯一真相字段

先定 `status / exec_mode / humanRole / focusRole / sourceKind / sourcePath / evidence` 这些字段的唯一含义,不再允许不同页面各自发明。

Step 2. 提取共享 parser

把 `Today-Focus`、`TODO-Inbox`、`DailyRecord`、review 的解析收成一个共享层,替换 `daily push`、`today-focus page`、`todo-board` 的重复实现。

Step 3. 导出 `task-state.json`

先只做导出,不重写 UI。让 public pages 与 `todo-board` 都能消费同一份读模型,这是收益最高、风险最低的一步。

Step 4. 再收敛页面分工

`Today Focus` 负责今日人类入口,`todo-board` 负责驾驶舱,`Priority` 退成排序参考,`Task Ops` 退成历史执行审计,不再装作今日入口。

已完成 OpenClaw 已成为主调度器 下一步 共享 parser + task-state.json 再下一步 Feishu / public pages 改为只读投影 最后 统一驾驶舱入口与提醒策略
不推荐先从 UI 开始。因为只要状态定义没统一,你今天把页面画得再清楚,过几天还是会重新分裂。
Decision

当前最推荐的动作

只做一件事:先把 `todo-board` 的 Obsidian 聚合结果正式导出为 `docs/public/data/task-state.json`

因为这是你现有系统里“最接近统一状态模型”的一层,而且它已经吸收了 `Today-Focus`、`TODO-Inbox`、review、`DailyRecord Top1`。 先把这份聚合结果变成共享 JSON,再让 `Today Focus / Daily / Priority / Feishu` 去消费它,能最直接地减少“同一任务在不同地方说不同的话”。

  • 它能直接解决飞书口径、页面口径、驾驶舱口径三方不一致的问题。
  • 它不要求你立刻推翻现有站点和通知,只是先统一真相层导出。
  • 它也最适合后续继续拆给子 agent 并行实现。