Прикладная система взаимодействует с Recoverable через опубликованные интерфейсы. Для интегратора значимы входные данные, результат проверки и разрешённый дальнейший путь. Внутренние процессы, расположение сервисов и способ их запуска не входят в публичный контракт.
Adapter может знать формат приложения и передавать ему проверенное редактируемое состояние, но находится после решения Recoverable. Он не заменяет проверку собственным правилом и не соединяет компоненты по внешнему сходству.
Среда интегратораПриложениеФормирует запрос
→Публичная границаRecoverableПроверяет объект
→Переносимый результатFP + ED + RОдна ревизия
Схема описывает только публично значимые сущности. Аутентификация, управление доступом, защита рабочих станций и политика хранения проектируются отдельно в среде интегратора.
FP — fixed representation, фиксированное представление. ED — editable state, редактируемое состояние. Предусмотренные descriptors/hashes сопоставляют содержимое каждого компонента с ожидаемым описанием.
Положительная локальная проверка говорит о соответствии компонента своему descriptor. Она не доказывает совместимость двух компонентов: локально целые FP18 и ED17 могут относиться к разным ревизиям.
Component 01FPiHfpi ↔ descriptor
Component 02EDiHedi ↔ descriptor
Пока локальная целостность и согласованность ревизии не подтверждены в требуемом объёме, интеграция не переходит к восстановлению ED как проверенного состояния.
- 01
Component checkFP и ED соответствуют своим descriptors.
- →
- 02
Revision checkFP, ED и R принадлежат одной ревизии.
- →
- 03
Verification gateРезультаты обязательных проверок определяют дальнейший путь.
Проверки положительныRestore разрешёнAdapter или прикладной слой может продолжить поддерживаемый путь восстановления.
Проверка отрицательнаОстановка и отчётED не передаётся как проверенное согласованное состояние; причина сохраняется для диагностики.
Разрешение не означает, что Recoverable берёт на себя семантику внутреннего формата приложения. Отказ restore также не означает уничтожение объекта: фиксированное представление может оставаться доступным в отдельно разрешённых сценариях.
Транспортный сбой не доказывает повреждение объекта, а отрицательная содержательная проверка не равна недоступности сервиса. Клиенту важно сохранять это различие и не открывать restore через автоматический fallback.
01Сервис недоступенПроверка не завершена; состояние объекта не определяется.
Не восстанавливать как проверенное
02Некорректный входЗапрос или переданный формат не принят для обработки.
Исправить входные данные
03Ошибка локальной целостностиКомпонент не соответствует ожидаемому descriptor.
Остановить и сообщить причину
04Ошибка согласованности ревизииЛокально допустимые компоненты не подтверждены как один набор.
Остановить mixed-revision набор
После T0 recorder учитывает классифицированные завершённые операции на публичных app/API surfaces. Публичная статистика отдаёт summary, временную серию и распределение по категориям, но не публикует тела запросов, содержимое объектов, имена файлов или отдельные operational events.
Сбой записи телеметрии не должен ломать успешно выполняемую продуктовую операцию. Это fail-open правило относится только к измерению: оно не меняет отрицательный verification result и не открывает restore gate.
Граница утвержденияRecoverable описывает проверяемые integrity, revision-consistency, restore-gating и telemetry controls. Эти механизмы не являются обещанием абсолютной защиты всей инфраструктуры интегратора.
API key хранится как SHA-256 hash, а запрос получает principal с ролями и scopes. Контекст tenantId/projectId проходит в authorization и audit actor; lifecycle tenant/project проверяется до выполнения защищённой операции.
Маршруты требуют конкретный scope: например, ingest — object:ingest, чтение событий — event:read, управление webhooks — webhook:manage. Отсутствующее разрешение не подменяется успешным fallback.
CredentialAPI key / OIDC principalService accounts работают сейчас; OIDC foundation подготовлен для операторской конфигурации.
Scopetenant/project boundaryУчётные данные и события несут явную область принадлежности.
Auditactor + correlationЗапрос связывается с principal, request ID и correlation ID.
Revocationключ отозванВ authenticated release-smoke временный API key был отозван после проверки.
Граница доступаПубличная документация не означает открытый анонимный доступ к операциям. Рабочий credential и его scopes выдаются для согласованного tenant/project; API-ключ можно самостоятельно выпустить в личном кабинете после создания проекта.
Ежедневная процедура формирует PostgreSQL dump и manifest объектного хранилища, рассчитывает контрольные суммы, шифрует архив с помощью age, проверяет расшифрование и внутреннюю целостность, затем применяет retention policy.
После локальной проверки зашифрованный архив копируется во внешнее хранилище Cloudflare R2. Загруженный объект сверяется по контрольной сумме. Отдельный restore-preflight подтвердил PostgreSQL и один синтетический объект. В последнем штатном backup manifest содержал 0 объектов, поэтому восстановление непустого набора пользовательских S3-артефактов ещё не подтверждено.
Confidentialityage encryptionВо внешнее хранилище передаётся зашифрованный архив.
IntegritySHA-256 + restore checkАрхив и вложенные материалы проверяются до признания backup успешным.
Availabilitydaily + retentionПроцедура запускается по расписанию и сохраняет ограниченное число копий.
SeparationCloudflare R2Внешняя копия не находится только на том же сервере, что рабочие данные.
Граница утвержденияСнимок проверки относится к техническому контуру на 8 сентября 2026 года. Успешный backup и синтетический restore-preflight уменьшают риск потери данных, но не являются подтверждением полного production rollout и не гарантируют восстановление при любом возможном сценарии.