From abb566b2e2489699e2eec5f496053da6fcb06af6 Mon Sep 17 00:00:00 2001 From: heaven Date: Wed, 16 Sep 2026 18:43:41 +0300 Subject: [PATCH] Give the last contract anchor its token so the empty-key target is verifiable --- docs/architecture/14-api-contract/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture/14-api-contract/README.md b/docs/architecture/14-api-contract/README.md index 575b7173..61933e58 100644 --- a/docs/architecture/14-api-contract/README.md +++ b/docs/architecture/14-api-contract/README.md @@ -313,7 +313,7 @@ drop юнит несёт причину ПЕРВОГО выпавшего чле | Поле | Словарь 0.3.0 | Что было у движка | Грунт | |---|---|---|---| | `status` | `proposed · in_progress · approved` | `auto · draft · approved` | `backend/internal/store/migrate.go:192`=`auto|draft|approved (term status machine` — ⚠ испр. 16.09: было :191; только `approved` — канон | -| `kind` ◆ | `name · place · title · term · nickname` **плюс `null`** | то же | `backend/internal/terminology/classify.go:27`=`var CandidateTypes = map[string]bool` (`CandidateTypes` — единственный носитель `nickname`; ⚠ испр. 07.09: прежние `classify.go:15` + `banknote.go:74` мертвы — `Types` не несёт `nickname`, а `bankTypeOK` снесён паком «гейт вместо прозы» и сведён к `CandidateTypes`); пустое — `membank/memseed.go:323-326` | +| `kind` ◆ | `name · place · title · term · nickname` **плюс `null`** | то же | `backend/internal/terminology/classify.go:27`=`var CandidateTypes = map[string]bool` (`CandidateTypes` — единственный носитель `nickname`; ⚠ испр. 07.09: прежние `classify.go:15` + `banknote.go:74` мертвы — `Types` не несёт `nickname`, а `bankTypeOK` снесён паком «гейт вместо прозы» и сведён к `CandidateTypes`); пустое — `backend/internal/membank/memseed.go:323-326`=`if nk == "" || seen[nk]` | | `origin` | `given · annotated · found` | `seed · ruby · mined` | пути записи, см. ниже | | `sense` | свободный текст, пустая строка = «нет различителя» | то же | `store/migrate.go:182` | | окно | `since_chapter`/`until_chapter`, **`null` = без границы** | целые, `0` = без границы | `store/migrate.go:189-190` | @@ -336,7 +336,7 @@ drop юнит несёт причину ПЕРВОГО выпавшего чле **Правило пустого `kind` — и его проекция** (провенанс возврата — §6в п.0). `kind` присутствует всегда и допускает `null`; `null` значит «сервис не решил», строка при этом остаётся подписываемой, и клиенту запрещено и выбрасывать её, и додумывать тип за движок (канон, схема `BankTerm.kind`). У движка та же строка несёт `Type: -""` (`membank/memseed.go:323-326`), поэтому **проекция `""` → `null` — работа платформы**; это +""` (`backend/internal/membank/memseed.go:323-326`=`if nk == "" || seen[nk]`), поэтому **проекция `""` → `null` — работа платформы**; это единственное место, где пустая строка и `null` означают одно, и потому оно записано. **Фантом `auto` в провенансе убран ещё в 0.2.0:** комментарий схемы движка (`migrate.go:193`: