Compare
单任务日记 Inbox:如何确保仅 1 条顶层复选任务且无嵌套
2026-01-25 23:27 · Zon · Issue → AI → Report
面向 GitHub/Obsidian 的 Markdown 自动写入、校验与回归测试(daily_days_ago:2)
前天 Inbox:仅保留 1 条顶层待办,避免嵌套复选
TL;DR
- 本报告将“复选任务”定义为:在 GitHub Flavored Markdown 与多数编辑器中会被渲染为可勾选任务的列表项;“顶层”指不缩进、不嵌套在其他列表项之下。
- 最稳妥的实现方式是:生成端只产出 1 条 todo,其余动作与说明用普通项目符号或编号列表承载,从源头避免出现多个可勾选项。
- 为防回归,建议在提交前或 CI 中做 AST 级校验:任务项数量必须等于 1,且深度为 0(无嵌套)。
Key Insights
- “意外出现多条复选任务”的常见原因是:导出器把多个要点统一转换为任务;或在列表中缩进导致产生嵌套任务;或不同渲染器对任务语法的容忍度不同。
- 仅靠正则检索不够稳:容易误伤代码块、引用块、或转义文本;建议解析 Markdown AST,再统计任务节点及其深度。
- 生成与校验分层更可靠:生成层控制输出结构(仅 1 条可执行项),校验层保证仓库中任何变更都不破坏约束。
Playbook
- 规范定义:约定每日 Inbox 只允许 1 条“可勾选任务”;其它信息一律写成“备注/下一步/问题”普通列表,不参与勾选渲染。
- 生成端落地:在你的写入脚本里显式限制 todo 数组长度为 1;若输入包含多个动作,将其自动降级为普通要点并放入 next 字段。
- 校验端落地:用 Node 生态的 unified/remark 解析 Markdown,并配合 remark-gfm 识别任务节点;遍历 AST 统计任务数量与深度,超出则 CI 失败或自动修复为普通列表。
Diagrams
Options
- 生成端强约束(推荐):上游就只允许 1 条 todo,其他动作全部转为普通要点;优点是简单、稳定,缺点是需要明确区分“任务”和“建议”。
- 仓库级 lint 强约束:允许作者随手写,但在提交时自动把多余任务降级为普通列表或移动到 next;优点是兼容手工编辑,缺点是需要维护自动修复逻辑。
- 若你的“任务”其实指 Obsidian Tasks 插件的查询对象:需额外约束任务的元数据(如 due、priority)字段写法,并确认插件是否把嵌套列表也计入任务统计。
Expert Views
- Markdown 工具链维护者(paraphrase):更偏好用 AST 解析而非文本匹配,因为任务语法在不同上下文(代码块、引用、表格)会产生大量边界条件。
- Obsidian 插件作者(paraphrase):建议将“可勾选任务”与“笔记要点”严格分层;否则 Tasks 类插件与编辑器自动格式化容易把要点误当任务并参与统计与查询。
- 产品经理(paraphrase):单任务 Inbox 的价值在于降低选择成本;但需要保留“后续动作池”,可用 next/notes 承载多条普通动作,避免牺牲信息完整性。
- QA 自动化工程师(paraphrase):最怕规则靠人工自觉;应给出可执行的验收标准与自动化用例(含反例样本),并接入 pre-commit 或 CI 阶段做阻断。
Evidence & Confidence
- 任务列表在 GitHub 与多种 Markdown 渲染器中属于常见扩展能力(high:有官方文档与规范页面可查,但此处无法在线核验当前链接可用性)。
- 用 remark-gfm 获取任务节点并统计深度可实现稳定校验(medium:方案成熟,但具体 AST 结构与版本、插件配置相关,需在你的仓库样本上验证)。
- markdownlint 支持自定义规则,可用于实现“任务数量=1”的检查(high:项目长期维护且有明确扩展机制,但仍需在你的 Node 版本与 CI 环境试跑)。
Next Steps
- 明确目标渲染链路:最终展示在 GitHub(issue/README)、仓库 daily note 文件,还是 Obsidian 本地;不同环境对任务语法、缩进与列表混排的容忍度不同。
- 在仓库新增一个最小回归样本文件(含:合法 1 条任务、非法多条任务、非法嵌套任务、代码块内伪任务文本),作为 CI 测试夹具。
- 选型并落地:优先用 remark + remark-gfm 写一个校验脚本;可选再用 markdownlint 自定义规则做二次兜底;把验收标准写进 issue 16 的描述中。
Details (Optional)
Details
TL;DR
- 本报告将“复选任务”定义为:在 GitHub Flavored Markdown 与多数编辑器中会被渲染为可勾选任务的列表项;“顶层”指不缩进、不嵌套在其他列表项之下。
- 最稳妥的实现方式是:生成端只产出 1 条 todo,其余动作与说明用普通项目符号或编号列表承载,从源头避免出现多个可勾选项。
- 为防回归,建议在提交前或 CI 中做 AST 级校验:任务项数量必须等于 1,且深度为 0(无嵌套)。
Key Insights
- “意外出现多条复选任务”的常见原因是:导出器把多个要点统一转换为任务;或在列表中缩进导致产生嵌套任务;或不同渲染器对任务语法的容忍度不同。
- 仅靠正则检索不够稳:容易误伤代码块、引用块、或转义文本;建议解析 Markdown AST,再统计任务节点及其深度。
- 生成与校验分层更可靠:生成层控制输出结构(仅 1 条可执行项),校验层保证仓库中任何变更都不破坏约束。
Playbook
- 规范定义:约定每日 Inbox 只允许 1 条“可勾选任务”;其它信息一律写成“备注/下一步/问题”普通列表,不参与勾选渲染。
- 生成端落地:在你的写入脚本里显式限制 todo 数组长度为 1;若输入包含多个动作,将其自动降级为普通要点并放入 next 字段。
- 校验端落地:用 Node 生态的 unified/remark 解析 Markdown,并配合 remark-gfm 识别任务节点;遍历 AST 统计任务数量与深度,超出则 CI 失败或自动修复为普通列表。
Expert Views
- Markdown 工具链维护者(paraphrase):更偏好用 AST 解析而非文本匹配,因为任务语法在不同上下文(代码块、引用、表格)会产生大量边界条件。
- Obsidian 插件作者(paraphrase):建议将“可勾选任务”与“笔记要点”严格分层;否则 Tasks 类插件与编辑器自动格式化容易把要点误当任务并参与统计与查询。
- 产品经理(paraphrase):单任务 Inbox 的价值在于降低选择成本;但需要保留“后续动作池”,可用 next/notes 承载多条普通动作,避免牺牲信息完整性。
- QA 自动化工程师(paraphrase):最怕规则靠人工自觉;应给出可执行的验收标准与自动化用例(含反例样本),并接入 pre-commit 或 CI 阶段做阻断。
Options
- 生成端强约束(推荐):上游就只允许 1 条 todo,其他动作全部转为普通要点;优点是简单、稳定,缺点是需要明确区分“任务”和“建议”。
- 仓库级 lint 强约束:允许作者随手写,但在提交时自动把多余任务降级为普通列表或移动到 next;优点是兼容手工编辑,缺点是需要维护自动修复逻辑。
- 若你的“任务”其实指 Obsidian Tasks 插件的查询对象:需额外约束任务的元数据(如 due、priority)字段写法,并确认插件是否把嵌套列表也计入任务统计。
Evidence & Confidence
- 任务列表在 GitHub 与多种 Markdown 渲染器中属于常见扩展能力(high:有官方文档与规范页面可查,但此处无法在线核验当前链接可用性)。
- 用 remark-gfm 获取任务节点并统计深度可实现稳定校验(medium:方案成熟,但具体 AST 结构与版本、插件配置相关,需在你的仓库样本上验证)。
- markdownlint 支持自定义规则,可用于实现“任务数量=1”的检查(high:项目长期维护且有明确扩展机制,但仍需在你的 Node 版本与 CI 环境试跑)。
Next Steps
- 明确目标渲染链路:最终展示在 GitHub(issue/README)、仓库 daily note 文件,还是 Obsidian 本地;不同环境对任务语法、缩进与列表混排的容忍度不同。
- 在仓库新增一个最小回归样本文件(含:合法 1 条任务、非法多条任务、非法嵌套任务、代码块内伪任务文本),作为 CI 测试夹具。
- 选型并落地:优先用 remark + remark-gfm 写一个校验脚本;可选再用 markdownlint 自定义规则做二次兜底;把验收标准写进 issue 16 的描述中。
Sources
- GitHub Flavored Markdown 规范(无法在线核验):https://github.github.com/gfm/
- GitHub Docs:Task list 相关说明(无法在线核验):https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/about-task-lists
- remark-lint / unified 生态(无法在线核验):https://github.com/remarkjs/remark-lint
- markdownlint(无法在线核验):https://github.com/DavidAnson/markdownlint
Sources
- GitHub Flavored Markdown 规范(无法在线核验):https://github.github.com/gfm/
- GitHub Docs:Task list 相关说明(无法在线核验):https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/about-task-lists
- remark-lint / unified 生态(无法在线核验):https://github.com/remarkjs/remark-lint
- markdownlint(无法在线核验):https://github.com/DavidAnson/markdownlint
Closing Summary
- 结论:前天 Inbox:仅保留 1 条顶层待办,避免嵌套复选
- 下一步:下一步:确认目标渲染环境(GitHub/Obsidian/其他);决定“只允许 1 条任务”的落地位置(生成端或校验端);在仓库里补一条自动校验(CI 或 pre-commit)防回归。
One next action
下一步:确认目标渲染环境(GitHub/Obsidian/其他);决定“只允许 1 条任务”的落地位置(生成端或校验端);在仓库里补一条自动校验(CI 或 pre-commit)防回归。
先闭环,再上强度。
— AI pipeline