OKF v0.2: базовый контракт и план миграции

Исторический документ. План сохранён из ревизии исходника 61e75e9 и не является текущим руководством по реализации. Исходный документ.

1. Цель

Зафиксировать исполняемый контракт поддержки Open Knowledge Format v0.2 до изменения публичных API. Эта задача — корневая зависимость для остальных задач миграции.

Источники истины:

Нельзя ориентироваться только на текущую ветку main: воспроизводимая сборка и тесты должны ссылаться на зафиксированную ревизию спецификации.

2. Контракт версий

Поддерживаемые версии:

Правила определения версии:

  1. Явно указанная поддерживаемая версия okf_version в корневом index.md задаёт контракт.
  2. При отсутствии объявления действующая версия — 0.2, но разрешены резервные правила для старого формата из §13.
  3. Потребитель v0.2 читает неизвестную версию по мере возможностей и сохраняет её как объявленную версию.
  4. Явный селектор API/CLI — это утверждение. Конфликт с объявлением версии не должен молча менять семантику.

Модель определения версии должна различать:

Версия модуля Go, бинарного файла CLI и пакета плагина — не okf_version.

3. Матрица соответствия

Создать версионируемую матрицу: пункт спецификации → реализация → диагностика → тесты.

Обязательные ошибки [ERROR] остаются ограничены §11:

Необязательные группы полей v0.2 не становятся обязательными требованиями:

Некорректная присутствующая группа проверяется на уровне строгих проверок и политик и не должна мешать загрузке с минимальными ограничениями. Неизвестные ключи, типы и среды выполнения остаются доступными для чтения.

4. Контракт старого формата

Поддержать два резервных правила без скрытой миграции:

Представление в старом формате само по себе не нарушает соответствие. Чтение, fmt, index и операции с графом не должны переписывать документы v0.1.

Миграция должна быть отдельной операцией предпросмотра и применения с явно указанным участником и сопоставлением источников.

5. Реестр неоднозначностей

Зафиксировать решения политики инструментов отдельно от исходной спецификации:

Каждое решение должно быть одинаково отражено в bundle, validator, CLI, MCP, тестовых данных и документации.

6. Канонические тестовые данные

Добавить один общий набор:

Переиспользовать данные в тестах пакетов, сквозных тестах CLI/MCP и примерах документации.

7. Отложенный ABI

Явно исключить:

store.CommitReceipt не связан с executor.receipt.

8. Критерии приёмки

9. Граф зависимостей

Порядок:

  1. Эта задача.
  2. bundle.
  3. Параллельно: validator, graph, механизм изменений, защитные ограничения хранилища.
  4. Операции изменения и миграция.
  5. CLI и MCP.
  6. Навыки, документация и итоговая проверка соответствия на всех интерфейсах.