Frontmatter как контракт
Контент сайта лежит в Markdown-файлах, а frontmatter в них — это схема данных. Пока схема нигде не описана, она всё равно существует: просто живёт в шаблонах, которые молча отрендерят пустоту, если я опечатаюсь в имени поля.
Поэтому каждый frontmatter проходит через Pydantic-модель с extra="forbid".
Лишнее поле — ошибка, тег не из списка — ошибка, статус не из трёх допустимых значений — ошибка.
Синхронизация падает до записи в базу, и сайт остаётся в прежнем состоянии.
Отдельно проверяю, что slug совпадает с именем файла. slug попадает во внешние ссылки
и служит ключом для счётчика просмотров, так что после публикации он неизменяем.
Переименованный файл при живом slug внутри — это тихо разъехавшийся URL и обнулённая статистика,
и лучше узнать об этом от скрипта, чем от рекрутера с битой ссылкой.
0 просмотров