Бэкап доски
{
"manifest": {
"format": "remo.board.backup",
"version": 2,
"boardId": "roadmap-1a2b3c4d",
"title": "Roadmap",
"exportedAt": "2026-10-29T12:00:00.000Z",
"checksum": "sha256:…",
"counts": { "widgets": 12, "connectors": 3, "assets": 0 },
"files": ["widgets", "texts", "textDeltas", "kanbans", "meta",
"groupNames", "tags", "presentation", "comments", "assets"]
},
"format": "remo.board",
"version": 2,
"board": { "id": "roadmap-1a2b3c4d", "title": "Roadmap" },
"widgets": {},
"texts": {},
"textDeltas": {},
"kanbans": {},
"meta": {},
"groupNames": {},
"tags": {},
"presentation": [],
"comments": [],
"assets": []
}
Версия 2 добавляет имена групп, словарь тегов, порядок презентации и комментарии.
Замок объекта (locked, lockedBy, lockedByName, lockedAt) лежит внутри widgets
и восстанавливается вместе с объектом: бэкап возвращает доску как была, а не делает копию.
Проверки при импорте:
manifest.formatиmanifest.versionсовпадают с ожидаемыми.- Контрольная сумма
checksumсходится с содержимым. - Объекты соответствуют обещанным в
counts.
Импорт заменяет доску: объекты, теги, порядок презентации и комментарии берутся из файла. Пустой список комментариев очищает обсуждение. Имена авторов сохраняются, а связь с аккаунтом — нет, потому что в бэкапе нет идентификаторов пользователей. Старые бэкапы версии 1 читаются: отсутствующие поля считаются пустыми.
Формат намеренно доменный: widgets, texts, kanbans — это карты документа, а не
таблицы базы. Внутреннее состояние документа в файл не попадает: импорт собирает документ заново.
Манифест приложения
| Поле | Значение |
|---|---|
id |
идентификатор в реестре, например app.hello |
version |
целое, растёт при изменении |
nameKey, descriptionKey |
ключи словаря интерфейса |
capabilities |
что приложению нужно от доски |
panel |
схема панели: panel, text, button, field |
actions |
действия кнопок и их capabilities |
Строки в манифесте — только ключи словаря, не текст: язык и формулировки остаются у продукта.
Конверт события
Поля и подпись — в справочнике событий. Коротко: id, type, orgId, boardId, actor, subject, payload, occurredAt; подпись t=<unix>,v1=<hex> по строке "<t>.<тело>".
Куда дальше
Лимиты — числовые пределы, которые влияют на эти форматы.