File-first: файлы — источник истины
Единица данных в Notarium — обычный Markdown-файл на вашем диске. Не строка в чужой базе, не блок в проприетарном хранилище, а файл, который открывается любым редактором и остаётся полноценным без Notarium. Это принцип file-first, из которого следует всё остальное.
Что «истина», а что производное
Источник истины — сами .md-файлы. Всё, что можно вычислить из их содержимого, — производное и восстановимое:
- производное (пересобирается с нуля ресканом): поисковый индекс, граф
[[wikilinks]], дерево, сниппеты. Удалить индекс не страшно — движок переиндексирует файлы при следующем старте; - невыводимое (живёт в отдельной служебной БД): история версий, пользователи, членство и доступы. Это то, что из текста файлов не восстановить, — поэтому оно вынесено в один явно отделённый дом.
Идентичность, наоборот, закреплена в самих файлах: notarium-id заметки — во frontmatter, а идентификаторы пространства и проекта — в файлах-маркерах (.notariummeta). Поэтому таблицы пространств и проектов в служебной БД — это восстановимый сканом кэш, а не единственный дом идентичности: она переживает даже внешний перенос папки.
Потеря индекса не страшна: он просто пересобирается. Файлы при этом не трогаются никогда — запись атомарна (пишем во временный файл, затем переименовываем), а внешние правки (git, другой редактор) считаются нормальным режимом, а не ошибкой.
Внешняя правка подхватывается, даже если файл сохранил прежние размер и время изменения, — а так бывает после git checkout, синхронизации или восстановления из архива. Notarium не доверяет одним лишь метаданным файла: последнее слово остаётся за содержимым, поэтому производные поверхности (список, поиск, граф) сходятся с диском, а не залипают на устаревшей версии.
Файл-заметка, а не блок
Граница принципа проведена сознательно: единица данных — файл-заметка целиком, а не абзац или блок внутри него. Notarium не вводит отдельных сущностей мельче файла — заметка целиком остаётся минимальной единицей; именно здесь файловые заметочники обычно переходят на базу как источник истины и теряют переносимость. Заметка остаётся файлом, а структура внутри — это просто Markdown.
Отрисовка — GitHub Flavored Markdown; служебные поля хранятся во frontmatter в начале файла.
Идентичность переживает переезд
У каждой заметки есть стабильный внутренний идентификатор notarium-id — 12-символьный URL-safe ключ во frontmatter файла:
---
notarium-id: aB3kR7xQ_2mv
title: Моя заметка
---
Текст заметки в обычном Markdown.
Идентичность живёт в самом файле, а не только в базе. Поэтому переименование, перенос между папками и даже внешний перенос мимо Notarium не осиротят историю версий и связи: журнал и ссылки привязаны к notarium-id, а не к пути. Имя файла — производное (kebab-case через транслитерацию, slug(title).md) и идентичностью не является.
Никакого lock-in
Забрать папку с файлами и уйти можно в любой момент — без Notarium заметки остаются читаемыми и полноценными. Экспорт как отдельная операция не нужен: вы никогда и не «внутри» — данные всегда лежат обычными файлами на вашем диске. git может быть источником истины: версионируйте папку, синхронизируйте её, читайте историю привычными инструментами.
Это же — основа приватности Notarium: она держится не на сквозном шифровании (умный сервер намеренно видит содержимое — иначе не было бы поиска, семантики и агентов), а на том, что сервер и файлы вы держите у себя. Подробнее — в разделах Пространства и проекты и Модель доступа.