Перейти к содержанию

Как находится чек-лист

Внутри выбранного файла пункт попадает в первый чек-лист, после его последней строки. Эта страница — целиком про это правило, потому что именно оно должно вести себя предсказуемо на файле, который вы писали не для машины.

Правило

  1. Пропустить YAML-фронтматтер, если файл с него начинается.
  2. Пропустить блоки кода в ограждениях — пример markdown внутри тройных обратных кавычек не чек-лист.
  3. Найти первую строку вида - [ ] или - [x], с любым отступом и маркером -, * или +. Это и есть чек-лист.
  4. Дойти до конца блока: следующие пункты, вложенные пункты, их строки-продолжения и пустые строки между ними принадлежат ему. Блок заканчивается на первой строке, вернувшейся на меньший уровень вложенности, или на ограждении блока кода.
  5. Вставить новый пункт сразу после этой последней строки.

Новый пункт наследует отступ и маркер первого пункта чек-листа и всегда пишется выполненным — [x]. Переводы строк сохраняются, включая CRLF, как и отсутствие перевода строки в конце файла.

Разобранный пример

Дан такой файл:

---
tags: [daily]
---

# 2026-09-06

- [x] просмотрел релизный чек-лист
    - [ ] вернуться к падающей джобе
      всё ещё жду раннер

- [ ] разобраться с падениями импорта

## Заметки

- [ ] прочитать RFC

Вызов append с текстом исправил импорт CSV в сервисе отчётов даёт:

---
tags: [daily]
---

# 2026-09-06

- [x] просмотрел релизный чек-лист
    - [ ] вернуться к падающей джобе
      всё ещё жду раннер

- [ ] разобраться с падениями импорта
- [x] исправил импорт CSV в сервисе отчётов

## Заметки

- [ ] прочитать RFC

Отсюда читаются три вещи: список во фронтматтере не приняли за чек-лист, вложенный пункт со строкой-продолжением остался внутри блока, а чек-лист под Заметками не тронут, потому что побеждает первый.

Когда чек-листа нет

Лог-файлу, в котором чек-листа нет, он заводится в конце, и вызов возвращается со статусом created, а не written. Файл, который существует, но пока пуст по структуре, — это день, в котором ещё не писали, а не повод отказать в записи.

Новый список минимален: маркер -, без отступа и без собственного заголовка:

# 2026-09-06

Спокойное утро, в основном встречи.

превращается в

# 2026-09-06

Спокойное утро, в основном встречи.

- [x] исправил импорт CSV в сервисе отчётов

Пустая строка перед списком — не косметика: список, приклеенный к абзацу выше, списком уже не является, и файл отрисуется одним сплошным абзацем.

Дальше файл ничем не отличается от любого другого с чек-листом, поэтому следующая запись — обычный written, который его продолжает.

Это единственное, что сервер создаёт. Сам лог-файл по-прежнему не создаётся — см. Ограничения, — и check тоже не заводит список: он возвращает no_checklist и не трогает файл.

Почему первый

Дневная заметка обычно открывается тем списком, который важен, — что делается сегодня, — а другие списки собираются ниже: чтение, дела, чужие задачи. Дописывание в последний чек-лист клало бы работу в тот список, который в этот день оказался внизу. Первый устойчив, и именно на него вы смотрите.

Если ваш файл устроен наоборот, настройки для этого нет. Перенесите рабочий список наверх или укажите серверу каталог, где файлы устроены так.

Описание

Фраза, переданная в append, сворачивается в одну строку: цепочки пробелов становятся одним пробелом, переводы строк исчезают. Ведущий маркер списка или чекбокса срезается, поэтому описание, пришедшее как - [ ] исправил импорт, запишется одним пунктом, а не маркером внутри пункта.

Описание, от которого после этого ничего не осталось, возвращается статусом empty, и запись не производится.

Дубликаты

Перед записью существующие пункты блока сравниваются с новым — без учёта маркеров и различий в пробелах. Совпадение возвращает duplicate и ничего не трогает. Именно это делает перезапуск сценария безопасным: два одинаковых вызова оставляют одну строку, а не две.