diff --git a/docs/architecture/14-api-contract/openapi.yaml b/docs/architecture/14-api-contract/openapi.yaml index 9b1eb10d..60d9bddd 100644 --- a/docs/architecture/14-api-contract/openapi.yaml +++ b/docs/architecture/14-api-contract/openapi.yaml @@ -1834,6 +1834,21 @@ components: Displayed ordinal, or `null` when the book has no numbering — a legal book. **Not a key:** numbering is dense, so editing the source shifts every later chapter. + + ⚠ **ЭРРАТА 05.09 — КОНТРАКТ ПРОТИВОРЕЧИТ СЕБЕ, И ШОВ РЕАЛИЗУЕТ ДРУГУЮ ПОЛОВИНУ.** + `null` объявлен здесь ЗАКОННЫМ, но платформа его ОТВЕРГАЕТ: `Whole()` в + `platform/internal/ingest/manifest.go` проверяет `c.Number < 1` и возвращает ошибку + «chapter numbering is 1-based», а JSON-овый `null` декодируется в ноль. То есть + книга, которую этот абзац называет законной, через шов не проходит вовсе. + Противоречие — ВНУТРИ поля: «нумерация плотная, номер не ключ» и «`null` законен» + несовместимы, и реализована первая половина. + + ⇒ До структурного пака **считать законной только плотную 1-based нумерацию**; + ненумерованная книга сегодня НЕ поддерживается ни одним концом, и обещание обратного + здесь — единственный её носитель. Пак, который научит движок резать книги без + нумерации, обязан снять это противоречие ЯВНО: либо шов принимает `null`, либо + контракт перестаёт его обещать. Версия контракта здесь НЕ двинута намеренно — + поведение провода не изменилось, изменилась только честность его описания. heading: type: [string, 'null'] maxLength: 200