对话笔记直发:8.11 vikunja-任务分层-v4。分类:小程序接单。
date: 2026-08-11 tags: [计划, Vikunja, 任务管理, 实施中] status: draft
任务管理分层 v5 — 领域树 + 三类型 + 优先级(评审修订版)
版本:v5(基于 v4 经子代理评审 + 复核修订) 日期:2026-08-11 服务器:jp(
局域网IP(已脱敏),aarch64 / RK3566,Docker host) 前置:v3 闭环已验收;v4 提交子代理评审 评审结论:有条件通过(4 高危 + 8 中危缺陷,v5 已逐一修复);子代理「退回单项目」建议被否决(理由:用户已手动建「临时任务/生活」项目 + 明确认可 TickTick 三 Tab 心智) 状态:v5 定稿 → 待实施
0. 评审结论摘要(复核后)
| # | 缺陷 | 级别 | v5 处置 |
|---|---|---|---|
| H1 | 项目型「豁免封存 × 日期UID × 每日再生成」→ 项目库无限堆积重复任务 | 高 | ✅ 项目型改稳定UID(去日期)+ find-or-create,见 §2 |
| H2 | 三类任务「结转/封存/回写」规则未定义 → 回写断链 | 高 | ✅ 新增四维规则表 §2.1,逐格可判 |
| H3 | 短标题使旧 UID 全变,state 失效,「兼容」不成立 | 高 | ✅ 明确 UID 归一化输入 + 承认断代 + 切换日处置,见 §6 |
| H4 | 习惯「保留open记历史」无落地载体 | 高 | ✅ 定义载体 = Hermes 写 Obsidian 打卡日志,见 §2.1 |
| M1 | Tasks.org 上 P1/P2 折叠同档(P1→4 的坑) | 中 | ✅ 优先级映射改 P1→3/P2→2/P3→1(三档两端可分),见 §4 |
| M2 | P1→4 使官方最高档(5 DO NOW)空置 | 中 | ✅ 同上,映射收敛到 3/2/1 |
| M3 | 焦点与计划可能重复同行 → note_replace matchCount==1 失败 | 中 | ✅ 焦点=P1 唯一家,与计划互斥,见 §5 |
| M4 | v2 结构漏「昨日结转」「回写记录」两节 | 中 | ✅ §5 补全 |
| M5 | push 按项目名 find-or-create 是雷(已存在 id2/id3 双「每日待办」) | 中 | ✅ 项目用稳定ID映射 + 领域树.json,见 §6 |
| M6 | 52 存量任务迁移缺失 | 中 | ✅ §6 切换日处置清单 |
| M7 | 手机端 15-25 清单爆炸 | 中 | ✅ 三顶级 + 领域叶子限 5-7;Tasks.org 收藏只看常用 |
| M8 | 提醒 cron 数据源/判定口径未定义 | 中 | ✅ §6 Phase1 明确查 Vikunja API |
1. 核心分工(不变,v4 已确认)
语义判断归 Hermes,结构化承载归 Vikunja,脚本只做标注↔字段转译。
| 职责 | 归属 |
|---|---|
| 识别任务类型(临时/项目/习惯) | Hermes(读日记语义判断) |
| 判定优先级 P1/P2/P3(P1 帽 ≤3/天) | Hermes |
| 选出今日焦点 ≤3 | Hermes |
| 短标题(≤25字),上下文进描述 | Hermes |
| 多级子任务树(项目型) | Vikunja(v2 增强,parent_task_id) |
| 重复循环(习惯) | Vikunja(v1 用每日实例,载体见 §2.1) |
| 优先级存储/排序 | Vikunja(priority 字段) |
| 领域分组 | Vikunja(嵌套项目 parent_project_id) |
标注格式:
【P1】【项目·小程序后台】验收后台:弹窗/隐私协议/查询
【P3】【习惯·锻炼】八段锦 / 散步
【P2】买牙膏 · 丢垃圾
2. 三类任务 = 三种生命周期 = 三个顶级项目
├─ 每日待办(临时)─ 子项目 = 领域树(生活 / 工作·AI自媒体 / 工作·折腾)
│ 封存:今日到期未 done → [x](过期未完成)
├─ 项目库(项目型)─ 每项目一个子项目;v1 平铺 / v2 子任务树
│ 封存:豁免;任务用稳定UID(见下)
└─ 习惯(长期型)─ 每习惯每日新实例(UID 含日期)
封存:昨日未打卡 → 保留 open,Hermes 写 Obsidian 打卡日志
2.1 四维规则表(H2 修复,逐格可判)
| 类型 | 结转规则(03:30) | 封存规则(writeback) | 回写 Obsidian | UID |
|---|---|---|---|---|
| 临时 | 未 done → 滚入今日「昨日结转」 | 今日到期未 done → 置 done + [x](过期未完成) | 翻 [x] | sha1(日期|文本|时段) |
| 项目 | 不结转原行;Hermes 每日在今日计划按当前状态重新产出一行 | 豁免(永不自动封存) | done 时翻当前文件对应行(含历史副本,all=True) | sha1(文本|时段) 不含日期(稳定身份) |
| 习惯 | 不结转(不做每日倾倒) | 昨日未 done → 保留 open | 不回写;Hermes 把昨日各习惯 done 状态写 00_项目库/习惯/2026-08.md | sha1(日期|文本) 每日新实例 |
习惯打卡日志载体(H4 修复):Hermes 03:30 聚合时,查 Vikunja 习惯项目昨日 done 状态 → 写 Obsidian 000_Raw/00_plan/00_项目库/习惯/<年-月>.md(格式:## 2026-08-10\n- [x] 锻炼 / - [ ] 按时睡觉),当打卡日历。
3. 领域树(单点定义)
200_Rules/工作流/领域树.md(人类可读)+ 同源生成 领域树.json(脚本可解析):
生活 → 健康 / 作息 / 家庭
工作 → AI自媒体(文章 / 视频)
→ 折腾(Obsidian / 本地NAS+Hermes / 云服务器)
叶子 = Vikunja 子项目。脚本用领域树.json 的稳定 id 映射建项目(M5 修复,不用项目名)。
4. 优先级(M1/M2 修复 — 映射改为 3/2/1)
| 用户档 | Vikunja priority | CalDAV PRIORITY | Tasks.org 显示 | 官方app 显示 |
|---|---|---|---|---|
| P1 | 3 (High) | 3 | HIGH | 橙/红 |
| P2 | 2 (Medium) | 5 | MEDIUM | 黄 |
| P3 | 1 (Low) | 9 | LOW | 蓝 |
子代理关键建议(已采纳):v4 用 P1→4 会在 Tasks.org 上 P1/P2 折叠同档;改 P1→3/P2→2/P3→1 后 CalDAV 映射 3/5/9 → Tasks.org 三档 HIGH/MEDIUM/LOW 全可分。官方 app 走 JWT 直接读数字,三档同样区分。
P1 帽:Hermes 硬规则 P1 ≤3/天;脚本侧容错(焦点段超帽时报错提示)。 今日焦点 = 当日 P1 唯一家(M3 修复):P1 行只出现在「今日焦点」段,不在今日计划段重复。
5. 工作台 v2 结构(Hermes 03:30 产出)
## 今日焦点(≤3 件,P1 唯一家)
- [ ] 【P1】【项目·小程序后台】验收后台:弹窗/隐私协议/查询
## 今日计划
### 生活
- [ ] 【P2】买牙膏 · 丢垃圾
### 工作 · AI自媒体
- [ ] 【P2】【项目·公众号自动化】配图方案选型落定
### 工作 · 折腾
- [ ] 【P3】【习惯·锻炼】八段锦 / 散步
## 昨日结转
> 昨日未完成的「临时」任务滚入;项目/习惯不在此重复
- [ ] 【P3】公众号插件:多平台一键推送(结转 8/10 未完)
## 灵感清单
(仅想法库;低优先项进 000_Raw/00_plan/00_项目库/)
## 回写记录
(Hermes 把每条灵感去向回写:已发布/已执行/已沉淀/已归档)
push 解析时跳过「昨日结转」「灵感清单」「回写记录」三段的
- [ ](避免重复推送);只推「今日焦点 + 今日计划」两段。
6. 实施步骤
Phase 1 — 领域树 + Hermes prompt v2
- 建
200_Rules/工作流/领域树.md+ 同源领域树.json hermes cron edit 9eadb723492b(工作台聚合):产出焦点+类型标注+P1帽+短标题+四维规则表+打卡日志写入hermes cron edit 315476f2ad60(点位提醒):查 Vikunja API done + 工作台焦点段,按 焦点→P1→P2→P3 播报(M8 修复)- 验证:
hermes cron run 9eadb723492b生成新结构草稿
Phase 2 — push v2
- 解析标注 → priority(3/2/1) + 类型路由 + 领域子项目(用领域树.json 稳定id,M5 修复)
- 项目型:稳定UID(不含日期)find-or-create;临时/习惯:日期UID
- UID 归一化输入 = 剥离【】前缀/时间块/结转注释后的主体(H3 修复)
--dry-run全量比对 → 实跑
Phase 3 — writeback v2
- 遍历全部子项目(非按名单项目)
- 按 §2.1 规则表:项目豁免 / 习惯保留 open / 临时照常封存
- 切换日处置(M6/H3 修复):备份 → 旧 52 任务一次性封存或删除 → 清 state → 新格式首跑
--dry-run→ 实跑;清理空项目 id=3、管道项目残留
Phase 4 — 验收
- 官方app 三 Tab 树 + 领域子项目;Tasks.org 每领域一清单
- 手机实测 Tasks.org 上 P1/P2/P3 三档可区分(M1 验收点)
- 焦点 ≤3 置顶、priority 排序生效;连续两天闭环不断
v2 增强(后续)
- 项目型子任务树(parent_task_id)
- 习惯 repeat_after 自动循环(若每日实例体验不佳再切)
- Vikunja 编辑 priority/labels → 回写 Obsidian 标注
7. 风险与对策(v5 更新)
| 风险 | 对策 |
|---|---|
| Hermes 标注漂移(Px/类型写错) | 脚本容错:缺标注默认 P3+临时;prompt 写死格式示例;焦点超帽脚本报警 |
| 项目型稳定UID 与时间块冲突 | 项目型一般无时间块;若有则 UID 含时段字段但日期仍剥离 |
| 习惯 open 累积 | Hermes 周复盘收敛 7 天未打卡习惯;打卡日志当日历 |
| 项目型 long 期不 done | Hermes 每周复盘提示收敛/归档 |
| 三项目+领域清单多 | 领域叶子限 5-7;Tasks.org 收藏/只看常用 |
| 时间块已退化(8/10 起无 HH:MM-HH:MM) | 明确:v5 保留时间块解析能力,但不强制 Hermes 产出;Tasks.org Schedule 时间盒作为可选增强 |
8. 待确认(实施前)
- 领域树叶子是否含「家庭」?(用户初稿未提,建议先不含,按需后加)
- 习惯初始集?(锻炼/八段锦、按时睡觉、久坐提醒、工时≤8h)—— 确认后写入领域树.md 习惯清单
- 旧 52 任务切换日处置方式:一次性封存(留痕)vs 直接删除(干净)?
注:本文涉及的服务器公网 IP / Tailnet / 局域网 IP 已脱敏,请替换为你自己的地址。