textmachine/docs/glossary.md

87 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Глоссарий — жаргон и сокращения проекта (один экран)
Читать при онбординге по мере надобности; термин непонятен → сюда. Пополняет оркестратор.
## Роли и фазы
- **Оркестратор / Бэкенд / Полигон / Фронт / Платформа** — роли сессий с зонами записи (CLAUDE.md §Роли); платформа = SaaS control plane (`platform/`, D39.81). «Оркестратор №N» — канонический счётчик преемственности роли (текущий N — CURRENT-STATE `docs/PROGRESS.md`, единственный носитель; выдаёт номер автор промта передачи, D39.112 п.6).
- **Хендофф(-промт)** — передача роли новой сессии файлом-промтом; аддендумы к бегущей сессии доезжают только релеем владельца.
- **Владелец** — человек; ратифицирует деньги, скоуп-сдвиги, продукт, 18+; связной между сессиями.
- **Ф0Ф3** — фазы: Ф0 скелет · Ф1 инфраструктура · Ф2 качество (судья/гейты) · Ф2.5 пилот · Ф3 продукт (веб-фронт, ридер-IDE).
- **S-этапы (S0…) / P-этапы (P0…)** — нумерация кодовых сессий зон: **S** — фронт (S0S4 приняты; ⚠ зона ЗАМОРОЖЕНА, разморозка отдельным словом владельца и к паку платформы НЕ привязана — D39.136 п.2 + D39.147), **P** — платформа (P0 бутстрап … P13, D39.188); не путать с фазами Ф0Ф3, и не всякий пак несёт P-номер (пак `sqlc` не несёт, D39.172). ⚠ Живой перечень принятых паков со статусами — реестр `architecture/05-decisions-index.md` (греп номера: `grep -inE '\bP-?[0-9]+\b' docs/architecture/05-decisions-index.md`); здесь только расшифровка обозначения. ⚠ P-номер этапа платформы не путать с P-номером ПРОБЫ в отчётах полигона (там контекст локален).
- **Зонный журнал / зонный бэклог** — `frontend/docs/frontend-PROGRESS.md` · `platform/docs/platform-PROGRESS.md` и BACKLOG зоны: прогресс/пинги фронта и платформы живут ТОЛЬКО там (D39.100); их строки единый бэклог не принимает (D39.84).
- **D-номер с подпунктом** (`D20.4`, `D22.7`, `D39.153 п.9б`) — ПОДПУНКТ внутри тела родительской ноты. Реестр `architecture/05-decisions-index.md` несёт ноты ВЕРХНЕГО уровня, своей строки у подпункта там нет и не должно быть (дисциплина грепа — CLAUDE.md §«Источники истины»).
- **Шиппинг-конфиг** — конфиг пайплайна, по которому идёт БОЕВОЙ прогон, в отличие от тестового и от ран-локального. ⚠ Читать строго: «шиппинг-конфиг» = ШАБЛОН в `backend/configs/`; конфиг РЕАЛЬНОГО прогона живёт РЯДОМ С КНИГОЙ, вне git, — он «ран-локальный», и утверждения о нём проверяются в каталоге книги, а не грепом по репозиторию (клейм «гейт не включён ни в одном шиппинг-конфиге» верен про шаблоны и ложен про прогон).
- **Полигон** — eval-зона платных/бесплатных экспериментов (`eval/`; отчёты — `docs/experiments/`, статус эксп-аего баннер/D-лог).
## Решения и документы
- **D-номер (D39.x)** — ратифицированная запись в `architecture/05-decisions-log.md`; **голова** — последний номер; **эра** — куст решений одного курса; **лендинг** — коммит работ сессии оркестратором после приёмки.
- **Р-номер — ДВА смысла по контексту:** Р1Р10 = десять ранних принципов (`01-decisions.md`, историчны); Р1Р7 в записях эры D39.5x6x = вопросы/решения владельца по банку и промптам (D39.63 и соседние) — «Р2 = ЗНАЧЕНИЕ» (D39.63) не про принцип Р2. **H1H18 / L1L8** — находки стратегического аудита (`09-target-architecture.md` §3); H — HIGH, в т.ч. незакрытые владельческие требования.
- **Q1Qn** — нумерованные вопросы КОНКРЕТНОГО пакета/отчёта — контекст локален, Q2 пака-19 ≠ Q2 чекер-пака.
- **V0Vn** — секции идей владельца в `START_PROMT.MD` (живой бриф; разобраны в `product-requirements.md`).
- **Ш-1/Ш-2** — стоячие трипваеры голден-дрейфа стандартной библиотеки; Ш-2 = пересмотр `unicode.Version`-зависимых мест (memnorm/classifier/style + chunker/estimator) до перехода на go1.27 (детали — grep «Ш-2» по D-логу).
- **PD-классика** — public-domain тексты из претрейна моделей; эмпирика на них предварительна до вебновелл-среза (CLAUDE.md §Дисциплина).
- **Харнесс** — обвязка исполнения (наш пайплайн-транспорт или конкурентные agent-обвязки; калибровка — research/2122).
- **⚠-баннер** — шапка «тело superseded, чему верить»; **ревью-шапка** — вердикты приёмки поверх отчёта в `archive/reports/`.
- **Пак** — пакет работ одной сессии; **свип** — полная перепроверка обязательств (D39.66: 951 позиция); **добор идеала** — очередь качества после ре-пробы flash; **МАСШТАБ** — прогон целой книги.
- **Строка N** — стабильный ID строки единого бэклога (`docs/BACKLOG.md`; не перенумеровывается); **вес** — блокер-очереди / скоро / когда-нибудь; **носитель** — артефакт, в котором обязательство живёт; **хвост** — незакрытый остаток; **петля** — вопрос, обязанный получить диспозицию; **слот** — зарезервированное место в будущем пакете/замере.
- **Гвоздь / пин** — регрессионный тест, прибивающий контракт (негативный гвоздь — тест на ОТСУТСТВИЕ поведения). ⚠ Замер 11.09 по 167 живым `.md`: «пин»/«запинить»/«пин пуст» — **244** вхождения в двух главных доках (90 в `docs/BACKLOG.md`, 154 в D-логе; счёт очищен от «пинг», «пиньинь», «Репин», «спина»), тогда как «гвоздь» вне этой статьи встречается всего **4 раза в двух доках** (`docs/architecture/13-tech-debt-anchors.md`, `eval/softsign-decl/README.md`), а в `BACKLOG.md` и D-логе — НИ РАЗУ; статья держит оба имени, потому что определён был редкий синоним, а не рабочее слово. **Мутация / мутант** — намеренная порча исходника, которой проверяют, что пин ЛОВИТ; инструмент `backend/cmd/tmmutate` с каталогом `mutations.json` сажает мутацию, гоняет тесты одного пакета и возвращает исходник (110 упоминаний в тех же двух доках при нуле в глоссарии). ⛔ Мутация засчитывается по ТЕКСТУ падения, а не по факту красноты (`D39.217` п.2в); гоняется на КОПИИ дерева; пин, флейковый на мутанте, измеряет пустой сценарий, а пин, удовлетворённый ЧУЖОЙ уликой, пуст (гардрейлы `CLAUDE.md`).
- **Реестр 108 / «жилец реестра»** — строка 108 единого бэклога: реестр ЗАГЕЙЧЕННЫХ ТРИГГЕРОВ (отложенных реопенов с условием «когда вернуться»); «жилец» = такой реопен; норма «каждое отложено получает строку или жильца» — D39.66/D39.90.
- **Контракт 14 (API v0)** — ратифицированный контракт фронт↔платформа: `architecture/14-api-contract/` — нормативная спека OpenAPI 3.1 + компаньон-README; ⚠ **зонная копия — НЕ байт-зеркало (испр. 10.09):** равенство приостановлено на время фриза фронта (`D39.142` п.5), и расхождение сегодня измеримо — канон 3467 строк против 1444 в зоне. Прежняя формулировка: зонная копия `frontend/docs/api-contract/` — байт-зеркало (D39.99; статус зеркала и версий — карта `README.md`, здесь не пинятся). **Провенанс ✓/◆/○** — классы утверждений компаньона: выведено из кода/ратификации · предложено (подтверждает названная зона) · открыто (К-вопросы). **spectral / openapi-typescript** — линт спеки и генерация типов фронта с дрифт-тестом (⚠ 3.1-условия генератор игнорирует — К-11).
- **ПТ-N** — стабильный ID требования в `product-requirements.md`; не путать со строками единого бэклога. **paused / лимиты «как Claude Code»** — статус книги при стопе по потолку + страница статуса использования в настройках (ПТ-35, D39.100) ⚠ **испр. 05.09: «сумм на экране нет» ОТОЗВАНО — D39.196**; баланс, потолок и холд показываются деньгами, запрет остался только на структуру НАШИХ расходов.
## Пайплайн и код
- **`tmctl build`** — $0-глагол ПИСАТЕЛЯ книги: собирает EPUB 3 и чистый txt из `BookExport` (прод-пакет `backend/internal/bookfile`, только stdlib), ОДИН файл на книгу на формат рядом с `ProjectDB`; пути — `StatusArtifacts.book_files` (канал, который читает дверь выдачи платформы — `createExport`/`getExport`/`downloadExport`, ПОСТРОЕНА 04.09, D39.194), stdout — конверт `tm-build-v1`, отказ — `book_incomplete` (exit 16). D39.175.
- **Состояния честности файла** (писатель книги) — pending · withheld (текст удержан) · incomplete (юнит отгружен с дырой) · **ghost** (остаток источника после укрупнения нарезки: без него книга выглядит «молча полной») · **stale** (финал сделан под исчезнувший исходник; под дрейфом честное `stale_unknown`, никогда не «нет») — все пять ДЫРЫ (поведение отказа и `--partial` — ПТ-44, D39.175). Шестое, **drift**, — НЕ дыра: носитель `BuildReport`/WARN для оператора, байты файла = байты прогона (слово владельца 30.08, D39.175 п.2). Читательские слова — данные `configs/langpacks/<цель>/reader.txt`, вне `Pack.Version()`; без пака цели — несловесная форма.
- **Волны** — waveDraft (черновик) → терминолог → waveEdit (редактура); имена только полные, аббревиатуры W0/W1 запрещены (решение владельца 19.07).
- **Чанк** — единица нарезки книги; **edit-unit (юнит редактуры)** — member-чанки, схлопнутые редактором в один финальный текст: гранулярность финала и экспорта пар (~1.9 юнита/главу; якорь синхронизации фронта — D39.84; draft-only-пайплайн шипит по чанкам).
- **Поверхность — слово с ТРЕМЯ смыслами, и без соседей оно не читается** (замер 11.09: 53 употребления — 22 в `docs/BACKLOG.md` и 31 в D-логе, — статьи не было ни одной). **(1) банковская** — исходное НАПИСАНИЕ термина, ключ, под которым он живёт в банке; ключ уникальности банка — `(src, sense, since, until)`, поэтому «одна поверхность ЗАКОННО несёт несколько ПОДПИСАННЫХ канонов (фамилия и направление у одного написания)» (`D39.193` п.3), а дедуп по голому `src` ронял подпись молча. **(2) продуктовая/сетевая** — внешняя грань, которой продукт повёрнут к пользователю или к соседней зоне: читающая поверхность платформы, операторская ручка, SSE-поток, «поверхностей у продукта ДВЕ, а не одна» — лендинг и IDE (`D39.239` п.1). **(3) кодовая** — место в коде, до которого прогон или тест реально добрался: «Первый живой прогон НЕ КОСНУЛСЯ поверхностей, ради которых часть кода построена» (строка 255). ⚠ Смыслы (1) и (2) сталкиваются в одних и тех же строках про банк и дверь.
- **Банк (памяти)** — термины/имена/голоса книги на весь прогон; **сид** — стартовый банк книги (YAML; подпись владельца — только вкусовые поля, D39.77); **бриф** — книжные вводные; **банкнота** — канал выноса кандидатов из ответа переводчика; **майнер** — $0-извлечение кандидатов из исходника; **KWIC** — конкорданс-контекст кандидата; **терминолог** — роль перевода/подписи терминов батчами.
- **Доктрина инжекта (закон)** — банк на проводе обязателен для всех ролей НЕЗАВИСИМО от статуса строки; право «перевести иначе, если сомнительно» упразднено, свобода — только оговоркой ОБЛАСТИ употребления (не-терминные пассажи: игра слов, разбор знаков); на проводе — единый закон-блок редактора, маркер ⟨проверить⟩ снят; статусы строк и подписная таблица не меняются (D39.104; ВНЕСЕНО вайр-батчем, пак принят D39.199; строка 134 закрыта).
- **Гейты** — детерминированные $0-проверки перевода; **чекеры K1K12** — классы дефектов рубрики; **DC1DC7** — data-driven чекеры на данных пары; **репэйр** — платная петля ремонта (построена, выключена — строка 13).
- **Строгая и якорная колонка** — две колонки прибора консистентности по ОТГРУЖЕННОМУ тексту (носитель — строка 406, правило выбора там же помечено как ратифицируемое приёмкой 11.09): СТРОГАЯ требует «равенства стеммов, как у пост-проверки» и ошибается в сторону ЛОЖНОЙ ТРЕВОГИ; ЯКОРНАЯ «признаёт склонённую передачу» и ошибается в сторону СОКРЫТИЯ. **«Первичная — ЯКОРНАЯ, строгая идёт полом точности рядом»** (на прогоне A точность 0.78 против 0.39); основание НЕ «ложная тревога дешевле сокрытия» — строка 406 прямо говорит, что этот довод аргументирует ОБРАТНОЕ, — а «детектор, врущий в 61 % сообщений, … перестают читать». ⚠ Правило действует, ПОКА прибор флагует и не отказывает: станет он гейтом отгрузки — асимметрия перевернётся и порядок колонок решается заново (строка 406 называет ДВА триггера пере-открытия). ⚠ Не путать с «якорной половиной» канон-проверок (строка 339) — там слово про другое.
- **Судья** — Ф2-оценка качества (gemini); **канал B** — путь чувствительного контента (Mistral+grok); **лейблы (labels)** — размеченный корпус для precision/recall чекеров, метрики заморожены числами в приёмках.
- **Голден** — байт-фиксированный снапшот прогона; **маскированный дифф** — сверка голдена с маской hex/версий; **CheapGateVersion (CGVER)** — версия контракта гейтов; **парити**`TM_MINER_PARITY=1` EXACT-сверка майнера.
- **Эхо-мина** — DeepSeek без thinking эхоит вход вместо перевода; гейт `echoMineViolation` принуждает thinking-ON.
- **Langpack / пар-файл** — данные языковой пары (`backend/configs/langpacks/`); книжное в пар-слое = утечка; **общность** — ревью-вопрос «заработает ли пара/вторая книга без правки Go».
- **Ведро B/D** — корзины триажа карты общности D39.60 (B «пар-модуль без гейта» · D «удалить»).
- **tmctl** — CLI бэкенда. Полный список глаголов — ОДИН в коде (`backend/cmd/tmctl/main.go`, `dispatchCommands`), и он же печатается в usage (паритет «список ↔ usage ↔ switch» прибит тестом `cmd/tmctl/invocation_test.go`); сверка одной командой: `grep -n -A3 "dispatchCommands = " backend/cmd/tmctl/main.go`. ⚠ Копия списка стояла здесь и трижды отставала от кода — снята: носитель один, отдельные глаголы (`build`, `bank-apply`) расшифрованы строками ниже.
- **Подстановка цены** — тихий фолбэк прайсера: провайдер вернул слаг, которого в каталоге нет, и `PriceForResponse` (`backend/internal/ledger/pricing.go:88`=`func (p *Pricer) PriceForResponse`) пробует `actual`, потом `requested`, потом якорь, а ни одно из трёх мест вызова не различает, какая ветвь сработала. Пока подмена падает внутрь той же семьи, счёт верен; опасна не подстановка, а её НЕВИДИМОСТЬ — при маршрутизации провайдера ВНИЗ это «×3.3 из кармана читателя, молча». Носитель — строка 413. ⚠ Сводя такое по диску, помнить строку 428: обход файлов `*.db` умножает трату на число КОПИЙ базы (замер 11.09 — множитель 10.88×), поэтому деньги считаются по УНИКАЛЬНОМУ `(book_id, date)` либо по одной авторитетной базе.
- **COGS** — себестоимость перевода; **ре-проба** — дешёвый повторный замер провайдера после аномалии (носитель события — строка 188; исходная 74 закрыта D39.91).
### Неймспейсы номеров
- **PD-N** — регистр дефектов ПЛАТФОРМЫ (`platform/docs/DEFECT_REGISTER.md`; счёт — `counts.py`); **П-N** — зонный бэклог платформы (`platform/BACKLOG.md`); **Ф-N** — зонный бэклог фронта (`frontend/docs/BACKLOG.md`); **В-N** — вопрос ВЛАДЕЛЬЦУ от фронта (журнал `frontend-PROGRESS.md`); **К-N** — вопрос контракта API (`14-api-contract/README.md`). «Строка N» без префикса = ЕДИНЫЙ бэклог `docs/PROGRESS.md` (НЕ номер строки файла).
- **Глава** — единица структуры книги: детект `chunk/ingest.go` (txt: CJK-шапки/form-feed; epub: документ spine), нумерация плотная позиционная + титульная политика `chunk/chunker.go` (`stripHeading`/`ApplyHeading` по `langpacks/*/heading.txt`), идентичность = контент-хеш в манифесте (`pipeline/manifest.go`), деньги ключуются ПОЗИЦИЕЙ (сдвиг границы = перекупка хвоста). Дизайн будущего — `research/27`.
- **Деньги платформы:** **холд** — резервация суммы прироста на счёте ДО спавна; **прирост** — купленные главы × ставка ($0.03, `platform/internal/pricing/pricing.go`); **аргумент потолка** — что уходит движку в `--ceiling-usd` = committed книги + прирост (PD-158; ЭТО НЕ ХОЛД — он больше холда на committed); **baseline** — счётчик книги на старте попытки, списание = разница; **settle/расчёт** — закрытие холда по фигуре движка; **leftover-reserved** — висячий reserved движка после краша (зануляется его write-open); **SpendBound** — верхняя граница отложенного расчёта по baseline следующей попытки (PD-159).
- **Лексикон экспериментов:** **жилец** — модель на роли; **арм** — вариант в бейк-оффе; **однопроходка/второй проход** — топологии редактуры; **закон-блок** = доктрина инжекта (D39.104); **пол/floor** — нижний якорь шкалы судьи; **Холм** — поправка Холма на множественные сравнения; **порог различимости** — минимальная дельта, отличимая от шума риге.
- **Входная дверь шва** — входная половина контракта движок↔платформа (почему понадобилась — D39.156
п.2). Закон — D39.156 (`17-seam-inbound-law.md`), построена и заленджена D39.158.
- **`tmctl bank-apply`** — $0-глагол входной двери: кладёт правки банка памяти, сделанные пользователем.
Проекция `--dry-run`, всё-или-ничего, байтовый no-op идемпотентен, лок проекта неблокирующий.
- **Стоп банка** — ФЛАЖОК, а не развилка: движок останавливается на границе майнинга, показывает банк
и ждёт «ОК» = продолжить. Подписывается БАНК целиком либо правится отдельный термин — пер-термной
масс-подписи НЕТ (модель владельца 16.08, D39.144). Предъявленное помнится (`bank_stop_presented`,
схема store v16), поэтому стоп срабатывает ОДИН раз на одно и то же.
- **Остановка прогона — с 10.09 их ДВЕ, и без прилагательного это слово не пишется** (`D39.234` п.1а).
**МЯГКАЯ** — первое нажатие: новых единиц работы не раздаём, начатое ДОИГРЫВАЕМ, выходим сами; ничего
не рвётся ⇒ ни одна позиция не получает пометки `cancelled` и никто не платит дважды. **ЖЁСТКАЯ**
второе нажатие: контекст отменяется, летящие вызовы рвутся, доставленные книжатся по ОЦЕНКЕ и метятся
`cancelled`, резюм их пере-делывает. ⚠ **В коде на 10.09 построена только ЖЁСТКАЯ** (`backend/cmd/tmctl/main.go`,
греп `signal.NotifyContext`); мягкая ратифицирована и заказана паком — строка бэклога **381**.
**Оба стопа отдают код выхода 5** (полоса кодов заморожена): какой именно случился, говорит ПРИЗНАК
в кадре `finished`, а не код. Не путать со **стопом банка** (флажок границы майнинга, статья выше) и со
**стопом по потолку** (`paused`, код 4) — это четыре разных предмета, и слово «стоп» само по себе не
различает ни одного.
- **Полоса отказов [10,19]** — коды выхода движка, отличающие «отказал ЗАКОННО» от «сломался»:
10 конфиг · 11 источник · 12 лок · 13 схема · 14 решения отклонены · **15 `write_incomplete`** ·
**16 `book_incomplete`** (`tmctl build` без `--partial` на книге с дырами, D39.175) · 19 без имени.
- **Онтология банка** — `architecture/18-bank-ontology.md`: три роли носителей (источники · вид ·
проекции · память флага), их писатели и моменты коммита. Названный там класс дефекта — «проекция
без названного потребителя и без якоря свежести в кадре».
- **`ОСПОРЕНО(PD-N)`** — грепаемый токен реестра дефектов платформы: строка стоит `fixed`, но пак
доказал, что её пин доказывает свойство СЛАБЕЕ, чем строка гласит. Статус НЕ меняется, живой пробел
несёт новая строка `PD-N`. Ратифицирован D39.159 при условии двусторонней ссылки.