Как находится чек-лист¶
Внутри выбранного файла пункт попадает в первый чек-лист, после его последней строки. Эта страница — целиком про это правило, потому что именно оно должно вести себя предсказуемо на файле, который вы писали не для машины.
Правило¶
- Пропустить YAML-фронтматтер, если файл с него начинается.
- Пропустить блоки кода в ограждениях — пример markdown внутри тройных обратных кавычек не чек-лист.
- Найти первую строку вида
- [ ]или- [x], с любым отступом и маркером-,*или+. Это и есть чек-лист. - Дойти до конца блока: следующие пункты, вложенные пункты, их строки-продолжения и пустые строки между ними принадлежат ему. Блок заканчивается на первой строке, вернувшейся на меньший уровень вложенности, или на ограждении блока кода.
- Вставить новый пункт сразу после этой последней строки.
Новый пункт наследует отступ и маркер первого пункта чек-листа и всегда пишется выполненным — [x]. Переводы строк сохраняются, включая CRLF, как и отсутствие перевода строки в конце файла.
Разобранный пример¶
Дан такой файл:
---
tags: [daily]
---
# 2026-09-06
- [x] просмотрел релизный чек-лист
- [ ] вернуться к падающей джобе
всё ещё жду раннер
- [ ] разобраться с падениями импорта
## Заметки
- [ ] прочитать RFC
Вызов append с текстом исправил импорт CSV в сервисе отчётов даёт:
---
tags: [daily]
---
# 2026-09-06
- [x] просмотрел релизный чек-лист
- [ ] вернуться к падающей джобе
всё ещё жду раннер
- [ ] разобраться с падениями импорта
- [x] исправил импорт CSV в сервисе отчётов
## Заметки
- [ ] прочитать RFC
Отсюда читаются три вещи: список во фронтматтере не приняли за чек-лист, вложенный пункт со строкой-продолжением остался внутри блока, а чек-лист под Заметками не тронут, потому что побеждает первый.
Когда чек-листа нет¶
Лог-файлу, в котором чек-листа нет, он заводится в конце, и вызов возвращается со статусом created, а не written. Файл, который существует, но пока пуст по структуре, — это день, в котором ещё не писали, а не повод отказать в записи.
Новый список минимален: маркер -, без отступа и без собственного заголовка:
превращается в
Пустая строка перед списком — не косметика: список, приклеенный к абзацу выше, списком уже не является, и файл отрисуется одним сплошным абзацем.
Дальше файл ничем не отличается от любого другого с чек-листом, поэтому следующая запись — обычный written, который его продолжает.
Это единственное, что сервер создаёт. Сам лог-файл по-прежнему не создаётся — см. Ограничения, — и check тоже не заводит список: он возвращает no_checklist и не трогает файл.
Почему первый¶
Дневная заметка обычно открывается тем списком, который важен, — что делается сегодня, — а другие списки собираются ниже: чтение, дела, чужие задачи. Дописывание в последний чек-лист клало бы работу в тот список, который в этот день оказался внизу. Первый устойчив, и именно на него вы смотрите.
Если ваш файл устроен наоборот, настройки для этого нет. Перенесите рабочий список наверх или укажите серверу каталог, где файлы устроены так.
Описание¶
Фраза, переданная в append, сворачивается в одну строку: цепочки пробелов становятся одним пробелом, переводы строк исчезают. Ведущий маркер списка или чекбокса срезается, поэтому описание, пришедшее как - [ ] исправил импорт, запишется одним пунктом, а не маркером внутри пункта.
Описание, от которого после этого ничего не осталось, возвращается статусом empty, и запись не производится.
Дубликаты¶
Перед записью существующие пункты блока сравниваются с новым — без учёта маркеров и различий в пробелах. Совпадение возвращает duplicate и ничего не трогает. Именно это делает перезапуск сценария безопасным: два одинаковых вызова оставляют одну строку, а не две.