Правка, блок за блоком
Правка устроена так же, как исправление опечатки в Википедии: вы редактируете тот абзац, на который смотрите, а не гигантскую textarea со всей страницей. В режиме редактирования (npm run wiki) войдите, наведите курсор на любой блок любой заметки — включая этот — и нажмите ✎.
§1.1Цикл
Отрисованный блок прячется, и на его месте разворачивается редактор CodeMirror с Markdown-исходником этого блока. Пока вы печатаете, ниже отрисовывается живой предпросмотр — диалектом движка плюс плагинами, которые сайт передаёт в inkbrush({ markdown }): тем же набором правил, который монтирует конвейер страниц, — поэтому предпросмотр и страница разойтись не могут. ⌘/Ctrl + Enter сохраняет; Esc отменяет.
Frontmatter — тоже блок: полоса таксономии в шапке каждой здешней заметки несёт собственный ✎, открывающий YAML заметки, — поменяйте статус или дату, и шапка отрисуется заново из обновлённого frontmatter.
§1.2Две страховки
Оптимистическая блокировка. Каждый блок несёт хеш исходника, из которого был вырезан. Если кто-то другой изменил файл у вас под руками, сохранение отклоняется с конфликтом, вместо того чтобы молча затереть чужую работу, — обновите страницу и повторите.
Рубеж сборки. Прежде чем что-либо будет записано на диск, весь файл прогоняется через Markdown-конвейер сайта — диалект, контроль контента, собственные плагины сайта и компилятор MDX для .mdx. Сохранение, которое сломало бы страницу — непарная **, незакрытый тег компонента, кривое выражение, — отклоняется с точным текстом ошибки, а файл на диске остаётся нетронутым. Полный список отказов контроля показан в конце «Всё и сразу».
§1.3Куда уходят сохранения
Сохранение записывает Markdown-файл и — с включённым autocommit — становится git-коммитом за авторством вошедшего пользователя. Базы данных нет нигде: файлы контента — единственный источник истины, git — долговечная история. Тонкий поблочный журнал, на котором работает история версий, едет поверх.
Сам диалект — GFM с дружелюбным к CJK правилом выделения плюс контроль контента, отклоняющий молча деформирующийся Markdown, — определён в движке однажды и разделяется рендерером страниц, предпросмотром этого редактора и CLI check-content (пять проверок). Одна грамматика, три потребителя, ноль расхождений.