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

Decision Map ↑ Control / Consistency Speed / Convenience → 1 生成端强约束(推荐):上游就只… 2 仓库级 lint 强约束:允许… 3 若你的“任务”其实指 Obsi…
Options · 速度 vs 可控性 的决策图(基于 Options 文本自动定位)
Execution Steps 1 规范定义 2 生成端落地 3 校验端落地
Playbook · 执行步骤时间线(基于 Playbook 文本自动提取)

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

Sources

Closing Summary

  • 结论:前天 Inbox:仅保留 1 条顶层待办,避免嵌套复选
  • 下一步:下一步:确认目标渲染环境(GitHub/Obsidian/其他);决定“只允许 1 条任务”的落地位置(生成端或校验端);在仓库里补一条自动校验(CI 或 pre-commit)防回归。

One next action

下一步:确认目标渲染环境(GitHub/Obsidian/其他);决定“只允许 1 条任务”的落地位置(生成端或校验端);在仓库里补一条自动校验(CI 或 pre-commit)防回归。

先闭环,再上强度。
— AI pipeline