GET /api/projects/:id/doc-content/:nodeId/history — История версий блока
Сгенерировано из матриц + кода. Правки вносить в источники (
docs/matrices/,server/routes/), не здесь.
| Поле | Значение |
|---|---|
| HTTP | GET /api/projects/:id/doc-content/:nodeId/history |
| Auth | optionalAuth, requireProjectAccess — гость + авторизованный, доступ к проекту (read/write) |
| Scope токена | read |
| PG-функции | api.list_block_doc_history |
| Таблицы | block_doc_content_history |
| SRM | SRM-202 |
| RP (права) | RP-115 |
| Файл роута | server/routes/projects.js |
| Статус | done |
Аргументы запроса (best-effort из хендлера; путь-параметры опущены):
аргументов не обнаружено (подтвердить вручную по server/routes/projects.js)
Коды ответов/ошибок (из хендлера): 500 (+ 200) — уточнить причины вручную
Для человека
Как открыть: откройте проект → переключитесь на вид «Дизайн-документ» → найдите нужный блок. Под содержимым блока есть навигатор версий (стрелки ← v3 →) — он и листает историю правок этого блока.
Содержимое каждого блока версионируется: при любом сохранении предыдущий текст уходит в историю, а текущая версия получает следующий номер. Этот метод отдаёт список версий блока — что и когда менялось, кто автор правки и какого она была типа (ручная, генерация, инлайн-коррекция, восстановление). Сам текст версии здесь не возвращается — только метаданные; чтобы увидеть содержимое конкретной версии, откройте её через просмотр версии.
Версии идут от новой к старой. Если у блока ещё ни одной правки не было, история пустая.
Кто может. Историю версий видят сотрудники, менеджеры спейса, наблюдатели и администраторы организации — в проектах, к которым у них есть доступ. Гостю и администратору платформы история недоступна (RP-115).
Для агента
Чтение — достаточно токена со scope read (см. Конвенции). Доступ проверяется по проекту (requireProjectAccess): токен видит историю только тех проектов, к которым у его владельца есть доступ.
Путь-параметры:
| Параметр | Назначение |
|---|---|
:id | UUID проекта |
:nodeId | id блока (ноды) внутри графа проекта |
Тела запроса нет.
Пример запроса:
curl https://specbuilder.vnimanie.ai/api/projects/{id}/doc-content/{nodeId}/history \ -H "Authorization: Bearer tak_..."Ответ 200 — массив версий, метаданные без текста, отсортирован по убыванию version (новые сверху):
[ { "id": 412, "version": 3, "edit_type": "llm_generate", "edited_by": "f9e8d7c6-...", "edited_by_name": "Иван П.", "created_at": "2026-06-20T11:04:00Z", "content_length": 4820 }, { "id": 388, "version": 2, "edit_type": "manual", "edited_by": "f9e8d7c6-...", "edited_by_name": "Иван П.", "created_at": "2026-06-19T09:12:00Z", "content_length": 4190 }, { "id": 350, "version": 1, "edit_type": "restore", "edited_by": null, "edited_by_name": "User", "created_at": "2026-06-18T16:40:00Z", "content_length": 3905 }]edit_type — как именно правилась версия: manual (вручную), llm_generate / llm_full (генерация), llm_inline (инлайн-коррекция фрагмента), restore (восстановление прошлой версии). content_length — длина текста в символах; сам текст версии берётся отдельным вызовом версии блока. У блока без правок ответ — пустой массив [].
Формат. Метод отдаёт только JSON — Markdown-зеркала и ETag/304 у истории нет (в отличие от содержимого блока). Заголовки Accept: text/markdown / ?format=md игнорируются. Это плоский служебный список, не аффордансный ресурс, поэтому блок affordances к нему не строится (server/agent/affordances.js).