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

Как выбирается файл

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

Правило

  1. Прочитать сам каталог. Подкаталоги не обходятся, каталоги кандидатами не бывают.
  2. Отбросить имена, начинающиеся с точки. Черновики редактора и скрытые метаданные — не логи.
  3. Если задан паттерн, оставить только подходящие под него имена.
  4. Из оставшегося взять созданный последним.

Если на шаге 4 выбирать не из чего, вызов возвращает no_file и останавливается.

Почему время создания, а не сегодняшняя дата

Вычислять имя файла из текущей даты — очевидная альтернатива, и она хуже ровно в двух отношениях.

Ей нужно знать вашу схему именования: формат, а для имени, в котором есть название месяца или дня недели, — ещё и язык, на котором они записаны. Это таблица внутри сервера, которая начнёт молча выдавать неверное имя в тот день, когда изменится шаблон заметки.

И она ошибается ночью. Работа, законченная в половине первого, относится к только что закончившемуся дню — к файлу, в котором вы писали весь вечер, а не к файлу за дату, которая формально уже наступила. Выбор самого свежего файла кладёт строку туда, где её ждёт автор.

Различается и характер отказа. Отсутствие подходящего файла вырождается в «лог-файл не найден» — сообщение, с которым можно что-то сделать; вычисленное имя вырождается в запись в файл, на который никто не смотрел.

Время создания там, где оно есть

macOS хранит время создания, и используется именно оно. На файловых системах, где его нет — прежде всего в Linux, — вместо него берётся время изменения. Файлы, созданные один за другим, оно упорядочивает так же; разница видна, только если отредактировать старый файл, — тогда он окажется самым свежим.

Что считать логом

Без паттерна кандидатом становится любой нескрытый файл в каталоге. Это верная настройка для каталога, в котором нет ничего, кроме логов.

Если там лежит что-то ещё — заметка по проекту, список покупок, картинка, — задайте паттерн, и выбор сузится до файлов, чьё имя говорит, что это логи:

worklog-mcp serve --dir ~/notes --pattern '^\d{4}-\d{2}-\d{2}\.md$'

Паттерн — единственный фильтр. Отбора по содержимому нет: файл, подходящий по имени, но без чек-листа, вернёт no_checklist, а не уступит место следующему кандидату. Это сделано намеренно — иначе запись ушла бы во вчерашний лог просто потому, что сегодняшний ещё пуст.