Carve form B and the seam's fixed names out of the inbound law, pin the busy-lock refusal to exit 12, and flag the research claim that named a carrier which never carried it
This commit is contained in:
parent
8cbcab643a
commit
bf3d60404f
1 changed files with 23 additions and 3 deletions
|
|
@ -4,7 +4,8 @@
|
|||
> со сторонним архитектором 22–23.08.2026. До слова владельца это ЗАПИСКА, а не контракт: ссылаться
|
||||
> на неё как на норму нельзя. Ратифицируется одной D-нотой; после неё двери встают паками без
|
||||
> возврата к владельцу — ровно так, как код выхода `13` встал в ратифицированную полосу 10–19 без
|
||||
> новой ратификации (D39.131 п.2а → D39.132 п.2г → D39.134).
|
||||
> нового решения ВЛАДЕЛЬЦА (D39.131 п.2а → D39.132 п.2г → D39.134: код 13 прошёл через направление и
|
||||
> финализацию приёмкой, то есть через ратификации ОРКЕСТРАТОРА — именно это свойство норма и обещает).
|
||||
>
|
||||
> **Зачем понадобилось.** Контракт фронт↔платформа ратифицирован (`14-api-contract/`), а контракт
|
||||
> платформа↔движок — нет: исследование шва дошло до «события пишутся в `events.jsonl`» и дальше
|
||||
|
|
@ -34,7 +35,13 @@
|
|||
1. **Вход — это аргументы при спавне и файлы, названные аргументами.** Данные, которыми владеет
|
||||
пользователь продукта, доезжают движковым ГЛАГОЛОМ; движок — единственный писатель файлов своей
|
||||
схемы и владелец их путей и конвенций. Платформа читает только версионированные артефакты по
|
||||
путям, которые ей СООБЩЕНЫ, и никогда не выводит путь сама.
|
||||
путям, которые ей СООБЩЕНЫ ДВИЖКОМ **ИЛИ РАТИФИЦИРОВАНЫ КОНТРАКТОМ ШВА**, и никогда не выводит путь сама.
|
||||
⚠ **Два выноса, без которых буква закона объявляет вне закона уже ратифицированное:**
|
||||
**(а) форма Б** — одноразовый рендер стартового `book.yaml` при рождении книги (D39.130 п.2б): платформа пишет пять
|
||||
ключей идентичности, всё остальное проходит из шаблона непрочитанным
|
||||
(`platform/internal/books/render.go:29-33`=`comes from the template unread and unjudged`); живёт до формы В (строка 170).
|
||||
**(б) фикс-имена ратифицированной конвенции шва** — `events.jsonl` никто платформе не «сообщает», это константа
|
||||
(`platform/internal/ingest/tail.go:17`=`const JournalFile = "events.jsonl"`, D39.106); без этого выноса буква ломает главный канал самого шва.
|
||||
*Прецеденты:* потолок аргументом (D39.110 п.2б → `--ceiling-usd`, D39.122) · `--verify-bank`
|
||||
флагом (`platform/internal/runner/engine.go:83-87`=`func TranslateArgs(workdir string, verifyBank bool`) · дефолт `project_db` по конвенции каталога
|
||||
(`backend/internal/config/book.go:163-167`=`b.ProjectDB = filepath.Join(dir, b.BookID+".db")`) · конвенционное опциональное чтение `.auto-bank.yaml`
|
||||
|
|
@ -43,7 +50,10 @@
|
|||
2. **Посреди прогона внутрь идёт ТОЛЬКО сигнал.** `SIGTERM` = «дочти чанк и отпусти лок»; всё
|
||||
остальное — на границах процессов. Арбитр — эксклюзивный flock проекта на всю жизнь прогона
|
||||
(`backend/internal/store/store.go:55`=`EXCLUSIVE flock on`), мутирующий глагол берёт его неблокирующе и при занятости
|
||||
отказывает классом «конфиг/лок».
|
||||
отказывает **ровно классом 12** (`platform/internal/ingest/exit.go:58`=`ExitProjectLocked = 12`), а НЕ 10:
|
||||
полоса различает их не косметически — 10 (`platform/internal/ingest/exit.go:51`=`ExitConfigInvalid = 10`) значит «деплой сломан,
|
||||
чинит человек, книги ждут», 12 значит «ничего не произошло, подожди и повтори» (D39.134 п.2а). Запись через слэш
|
||||
позволила бы исполнителю выбрать 10, и платформа отнесла бы занятый лок к операторским ошибкам.
|
||||
*Почему жёстко:* движок пере-читает сид ПОСРЕДИ прогона (`mining.go:221`), запись в живой прогон
|
||||
въехала бы в снапшот недетерминированно. Потолок посреди прогона менять НЕЛЬЗЯ — он едет со
|
||||
стартом и после не меняется, лекарство — новый прогон
|
||||
|
|
@ -93,6 +103,11 @@
|
|||
| consent-флаги `--resnapshot`/`--accept-rebill` от платформы | строка **199(б)**, гейчена 192 |
|
||||
| `tmctl init` (форма В) | строка **170**; приоритет ПАДАЕТ после двери 199(а) — та забирает её главный довод |
|
||||
|
||||
**Не установлено, проверить при постановке:** строка **198** (апгрейд стирает замечания) — возможно, подразумевает
|
||||
глагол пере-анонса или бэкфилла, потому что движок анонсирует юнит один раз за жизнь книги
|
||||
(`backend/internal/pipeline/events.go:399-400`=`func (e *emitter) unitOnceKey(k unitWave) string`); направление фикса консилиум НЕ установил. Записано третьей
|
||||
категорией, чтобы читатель ратификации не счёл свип дырявым.
|
||||
|
||||
**Из чего двери НЕ следует** (экономия паков): **202** — потребитель всего набора, своих команд не
|
||||
несёт · **208** — фикс транспорта внутри движка · **210** — развилка данных/промпта, вайр-батч 182 ·
|
||||
**164** — не команда, а починка: смета уже едет в `status --json`.
|
||||
|
|
@ -102,6 +117,11 @@
|
|||
- **Инбокс-каталог входящих команд** как зеркало `events.jsonl`. Все трассированные нужды садятся на
|
||||
границы процессов; единственный мид-ран кандидат закрыт каноном (п.2); инбокс-файл возвращает
|
||||
гонку, ради исключения которой существует flock.
|
||||
⚠ **Эррата, которую ратифицирующая нота обязана поставить на `research/25`:** там «поднятие потолка файлом через
|
||||
atomic rename» отнесено к носителям D39.106 — в теле D39.106 этого механизма НЕТ вовсе (проверено грепом по слайсу
|
||||
`archive/architecture/05-decisions-D39-106-123.md`; первый хит темы — только в D39.110). Строка была КАНДИДАТОМ и
|
||||
никогда не ратифицировалась, а живой канон решил ось иначе (п.2).
|
||||
|
||||
- **Пере-открытие транспорта** (gRPC/сокет/брокер/пуш) — `research/25`, у каждой альтернативы 0
|
||||
голосов из ~18, решение владельца принято.
|
||||
- **Общий Go-пакет типов на две системы** — сварка независимых деплоев против D39.81/85; перевод
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue