Give the last contract anchor its token so the empty-key target is verifiable

This commit is contained in:
heaven 2026-09-16 18:43:41 +03:00
parent 3251aec90e
commit abb566b2e2

View file

@ -313,7 +313,7 @@ drop юнит несёт причину ПЕРВОГО выпавшего чле
| Поле | Словарь 0.3.0 | Что было у движка | Грунт | | Поле | Словарь 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` — канон | | `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` | пути записи, см. ниже | | `origin` | `given · annotated · found` | `seed · ruby · mined` | пути записи, см. ниже |
| `sense` | свободный текст, пустая строка = «нет различителя» | то же | `store/migrate.go:182` | | `sense` | свободный текст, пустая строка = «нет различителя» | то же | `store/migrate.go:182` |
| окно | `since_chapter`/`until_chapter`, **`null` = без границы** | целые, `0` = без границы | `store/migrate.go:189-190` | | окно | `since_chapter`/`until_chapter`, **`null` = без границы** | целые, `0` = без границы | `store/migrate.go:189-190` |
@ -336,7 +336,7 @@ drop юнит несёт причину ПЕРВОГО выпавшего чле
**Правило пустого `kind` — и его проекция** (провенанс возврата — §6в п.0). `kind` присутствует всегда и допускает `null`; `null` **Правило пустого `kind` — и его проекция** (провенанс возврата — §6в п.0). `kind` присутствует всегда и допускает `null`; `null`
значит «сервис не решил», строка при этом остаётся подписываемой, и клиенту запрещено и выбрасывать значит «сервис не решил», строка при этом остаётся подписываемой, и клиенту запрещено и выбрасывать
её, и додумывать тип за движок (канон, схема `BankTerm.kind`). У движка та же строка несёт `Type: её, и додумывать тип за движок (канон, схема `BankTerm.kind`). У движка та же строка несёт `Type:
""` (`membank/memseed.go:323-326`), поэтому **проекция `""` → `null` — работа платформы**; это ""` (`backend/internal/membank/memseed.go:323-326`=`if nk == "" || seen[nk]`), поэтому **проекция `""` → `null` — работа платформы**; это
единственное место, где пустая строка и `null` означают одно, и потому оно записано. единственное место, где пустая строка и `null` означают одно, и потому оно записано.
**Фантом `auto` в провенансе убран ещё в 0.2.0:** комментарий схемы движка (`migrate.go:193`: **Фантом `auto` в провенансе убран ещё в 0.2.0:** комментарий схемы движка (`migrate.go:193`: