# Контракт подключения ARBD к KLT-RBDv6

## Исполнимое ядро

`from arbd.engine import analyze` принимает нормализованный Python-словарь и возвращает словарь модели. Обязательные коллекции: authors, work_families, works, occurrences, candidates; edges и conflicts опциональны. Пример минимального корректного объекта и негативные варианты находятся в `tests/test_arbd.py:fixture`. Реализация на Python 3.10+, без сторонних зависимостей.

`analyze` рассчитывает политику над уже проверенными данными. Поля source_verified и logical_binding_reviewed являются входами доверенного адаптера, а не доказательствами сами по себе: их нельзя принимать как подтверждение из произвольного клиентского JSON. В конкретной команде build адаптер run017 заново проверяет байты и строки; generic API не является открытым HTTP-приёмником непроверенных заверений.

`python3 -m arbd build --output NEW_DIRECTORY` реализует конкретный наследующий адаптер RUN-017 и сохраняет проверенный результат атомарно после завершения проверок. Код выхода 0 означает программное завершение; 2 — отклонённый вход или ошибка проверки. Успешный код выхода не означает SCIENCE=CONFIRMED.

## Машинный обмен

ARBD_MODEL.json имеет schema=`ARBD-B28-0.1`, run_id=`KANT-B28-R017-AUDIT-001`, parent_run=`KANT-RUN-017`, truth_layer_promotion=0. Идентификаторы произведений, семейств, вхождений, реперов и компонент наследуются. Новые фрагменты используют отдельные B28-SRC-ID.

Раздельные поля `summary`, `quote`, `legacy_quote`, `quote_semantics`, `source_status`, `attribution_status`, `review_required`, `domain_keys` не должны объединяться в интерфейсе. При `quote=null` нельзя показывать пересказ с оформлением цитаты. Для нескольких фрагментов нужны отдельные цитатные блоки, ссылки и границы.

Карточка репера показывает status, ACP, criteria, attribution_blockers, overlapping_occurrence_ids и открытые пробелы. Граф использует `edges`; расширения `legacy_edges` доступны для просмотра и рецензирования, но не превращаются в канонические типы автоматически. Маппинг связей не лицензирует логический вывод.

## SQLite

Новая проекция расположена в `b28_*`. Исторические таблицы, активный semantic_run017 и старые статусы не подменены. Для нового интерфейса читать `b28_candidates`, `b28_occurrences`, `b28_source_fragments`, `b28_edges`, `b28_conflicts`, `b28_gaps`, `b28_quote_audit`. Проверка `PRAGMA foreign_keys=ON` обязательна при соединении для записи; все новые таблицы имеют CHECK(truth_layer_promotion=0).

Пример запроса:

```sql
SELECT candidate_id, status, family_recurrence, acp_json
FROM b28_candidates
ORDER BY candidate_id;
```

## Граница интеграции

В этом выпуске проверено исполнение ядра, JSON, SQLite, локальный HTML-отчёт и повторная сборка. Развёртывание в живом KLT-RBDv6, импорт в рабочую базу, паритет браузерного/Flutter движка, APK и пользовательская приёмка не выполнялись. Для сервера с Python используется вызов API/CLI; для браузера или APK без Python потребуется отдельный порт либо согласованный сервисный адаптер.

Состояния следующего подключения: SOURCE_PACKAGE_READY → HOST_ADAPTER_IMPLEMENTED → STAGING_IMPORT → QA → RELEASE. Кнопка или счётчик интерфейса не должны считать этот локальный аудит опубликованной версией. Канонический вид главной страницы при будущей интеграции сохраняется.
