# ТЗ — живое техническое задание дома СИНГУЛЯР

> **Статус:** ✅ Актуально · **Такт:** v10.83 «ПОД РУКОЙ» · **Обновлено:** 2026-10-13
> Это живое задание: не мёртвый формализм, а обещания дома человеку с проверяемыми критериями. Чекбокс снимается только проверкой, не декларацией. См. также: [ДОРОЖНАЯ_КАРТА.md](ДОРОЖНАЯ_КАРТА.md) — что уже сделано; [АРХИТЕКТУРА.md](АРХИТЕКТУРА.md) — как это устроено.

## Закон дома (вне приоритетов — над ними)

**ЗАКОН СИНГУЛЯРА:** эргономика, приватность, конфиденциальность, юзабилити стоят во главе угла. Проект служит человеку и не испытывает его дискомфортом. Каждая история ниже читается только через этот закон: если фича выигрывает, а человек проигрывает — фича отклоняется.

## US-01 · Дом живёт офлайн
**Как** жилец, **я хочу** открыть дом без интернета, **чтобы** петь и жить в нём где угодно.

**Критерии приёмки:**
- [x] Первая загрузка ставит ядро дома в пре-кэш service worker (`sw15.js`)
- [x] Холодный запуск без сети открывает лицо дома с 28 дверями
- [x] Кэш поколенческий: `s15-orkestrator-vNN` — новый такт = новое поколение, старое вытесняется целиком
- [x] Ядро офлайна неприкасаемо при вытеснении (док «СТАЛЬ_НИТИ_И_ЯДРО.md»)
- [x] Страховочный КОРД в каждой странице: нить порвалась — дом держит

## US-02 · Приватность без исключений
**Как** жилец, **я хочу** знать, что мои данные не покидают устройство, **чтобы** доверять дому.

**Критерии приёмки:**
- [x] Ноль внешних счётчиков, трекеров, аналитики — дом не следит
- [x] Мозг Малыша (Qwen2.5-0.5B) работает локально (wllama, wasm) — слова не уходят в облако
- [x] Слух (Whisper) — на устройстве; ключи фонда рождаются и умирают в браузере
- [x] В ПУЛЬТЕ стоит золотой щит «данные не покидают дом» — обещание видно, а не спрятано
- [x] CSP жива на всех лицах дома (постур А канона, воскрешена в v10.54) — политика исполняется, а не декорация
- [x] Публичная репа содержит только то, что можно показать миру

## US-03 · Навигация: намерение → дверь
**Как** жилец, **я хочу** сказать или написать, чего хочу, **чтобы** дом сам открыл дверь.

**Критерии приёмки:**
- [x] Нить Ариадны на лице: все двери реестра (31) видны с холодной загрузки
- [x] Поиск АРИАДНА: намерение словами → дверь (62 песни фонда + документы в индексе)
- [x] Опечатки прощаются (Левенштейн); честная пустота вместо мусора
- [x] Меню дома в правом верхнем углу каждой комнаты несёт полную навигацию по дверям
- [x] Нити дверей симметричны: из A в B и из B в A
- [x] Ни одна комната не тупик (такт v10.52 вытащил ПУЛЬС ·38)

## US-04 · Караоке: от минуса до очков
**Как** поющий, **я хочу** выбрать песню и получить сцену, **чтобы** петь с поддержкой и очками.

**Критерии приёмки:**
- [x] 62 локальные минусовки фонда (папка `minus/`) — ноль сети
- [x] Тексты вшиты; слово-вайп по весам; ТЭП-очки (ИДЕАЛ/ТОЧНО/комбо/рекорд)
- [x] Темп/сдвиг/громкость обратимы (закон I-11)
- [x] ·16 СУФЛЁР: микрофон→MIDI→очки; ·20 ФОНЕТИКА: офлайн-романизация любой письменности
- [x] 157 языков одной песни — «КОГДА ТЕРЯЕМ»: от казахского до суахили
- [x] Конвейер СИНГУЛЯР: «КОГДА ТЕРЯЕМ» — 197 языков (группы 1–2), «ГДЕ НАСТОЯЩЕЕ» — 223 языка (группы 1–7); цель владельца — 200 на песню.

## US-05 · Малыш: голос дома
**Как** жилец, **я хочу** спросить дом голосом и получить живой ответ, **чтобы** ходить по дому без пульта.

**Критерии приёмки:**
- [x] Малыш двойной: обработчик v2 в ЛАДОМ ·31 + LLM Qwen2.5-0.5B в ОБЩЕНИИ ·21
- [x] Работает офлайн на устройстве; правила доучиваются с апстрима `rtynbirf/singulyar-llm`
- [x] Правило 13 «ЗНАНИЕ ДОМА»: карту 28 дверей знает наизусть, дверей не выдумывает
- [x] Правило 14 «ЗАКОН ДОМА»: честно говорит, чего нет, и показывает дверь, где это живёт
- [x] Правило 15 «ДОКУМЕНТАЦИЯ ДОМА»: ведёт по docs/ и отвечает фактами из data/versions.json
- [x] Стриминг ответов токенами (aria-live + кнопка «Стоп») — сделано в v10.55 «ПОТОК», проверено боем
- [x] Калм-тех точка присутствия в зале (тихая точка-дыхание, по умолчанию молчит) — сделано в v10.55, в КАЗНЕ и ЗДОРОВЬЕ
- [x] Ручки-карточки Малыша в калм-карте: 6–8 генеративных действий по контексту, каждое объясняет «почему», у обратимых — честный откат «↩» — сделано в v10.61 «РУЧКИ», проба ЗДОРОВЬЕ 26

## US-06 · ПУЛЬТ: один пульт — пять лиц
**Как** ведущий вечер, **я хочу** управлять домом с одного пульта, **чтобы** вести вечер без лишних слов.

**Критерии приёмки:**
- [x] Шесть видов реестра: ПОЛНЫЙ, РУЛЬ, ПЛИТКА, ⌘ КОМАНДА, ОМНИ (кольцо 360° в честь колонки-органа, дверь ·42), ЛИЦА — мост к 11 лицам одного протокола; все шесть — чипами в панели ВИД (память kv.pult/kv.litsa); палитра КОМАНДА — Ctrl+K, 52+ команд
- [x] Палитра КОМАНДА: Ctrl+K / Cmd+K / Ctrl+Л, поиск, стрелки, Enter, Esc
- [x] Дом помнит последний вид (`kv.pult`) и последние 5 команд (`kv.pult.команда`)
- [x] Роли: ведущий / техник / гость / ребёнок — дом подстраивается, не урезая функции (I-11)
- [x] Всё обратимо; телефон-пульт ЛАДОМ_ПУЛЬТ_ТЕЛЕФОН.html — управление из кармана

## US-07 · Человек в центре
**Как** человек с своими возможностями, **я хочу**, чтобы дом подстроился под меня, **чтобы** быть хозяином, а не гостем.

**Критерии приёмки:**
- [x] ·19 ЧЕЛОВЕК: адаптация по возможностям, «позвать спеть», личность без выноса ключей
- [x] ·21 ОБЩЕНИЕ: один смысл — разные представления (текст/Брайль/речь/вибро), голос — настройка получателя
- [x] `prefers-reduced-motion` гасит движение по всему дому
- [x] WCAG 2.2 аудит внутри дома (·29 СВОБОДА); справки при наведении вместо эха
- [x] Человек не «растёт» — он наполняется; дом подстраивается под слово

## US-08 · Знания открыты
**Как** читатель репозитория, **я хочу** взять любую часть дома и понять её, **чтобы** проверять, учиться и строить своё.

**Критерии приёмки:**
- [x] Код снабжён подробными комментариями по-русски
- [x] `docs/` — карта, ТЗ, дорога, архитектура, ритуал, наставления Малышу (этот такт)
- [x] `CHANGELOG.md` — все такты по Keep a Changelog
- [x] `AGENTS.md` + `llms.txt` — дом читаем не только человеком, но и машиной
- [x] 157 языков флагмана открыты в `ДАННЫЕ/флагман_157_языков/`
- [x] Тексты документации написаны простыми словами, без канцелярита

## US-09 · Фонд: тихая помощь
**Как** помогающий, **я хочу** поддержать дом одним движением, **чтобы** моя помощь была моей — тихой и защищённой.

**Критерии приёмки:**
- [x] ·33 ФОНД: счётчик открытой цепи одним кликом (мульти-узел)
- [x] Мастер счёта «ОДНА КНОПКА»: BIP39/BIP32/BIP84 чистым JS, ключи не покидают устройство
- [x] Аноним первичен; летопись — только по желанию
- [x] ·34 ДОМ ФОНДА: хартия, десять прав жертвователя, честное стекло независимости
- [x] Сверка счётчиков фонда — сделано в v10.55: кнопка «⌗ сверка счётчиков» в ФОНДЕ (реестр версий vs массив дверей vs манифест, обе правды о песнях — словами)

## US-10 · Треки — братья, не чужие
**Как** автор трека (СИНГУЛЯР_01/02 и другие), **я хочу**, чтобы мои работы были полноправными дверями дома, **чтобы** вселенная росла в ладу, а не в разброде.

**Критерии приёмки:**
- [x] Треки самодостаточны: один файл = вся платформа
- [x] Двери треков стоят в АРИАДНЕ и в летописи дверей
- [x] Горн-протокол интеграции: байты трека принимаются/резкуются с честной летописью
- [x] Ноль изображений там, где всё рисуется кодом — канон дома

## Как читать это ТЗ

- ✅ — обещание исполнено и проверено ((vm-тест и/или живая поверка ЭП-06));
- [ ] пустой чекбокс — обещание живёт, берётся ближайшим тактом;
- Новая история добавляется по логике вновь открывшихся обстоятельств: голос владельца, боль жильца, мировой тренд, доказанный практикой.
- Смежное: [СВОД_ЗАКОНОВ.md](../ДОКУМЕНТЫ/СВОД_ЗАКОНОВ.md) — инварианты I-01..I-10, доказанные тестом; [ИНЖЕНЕРНЫЙ_ПАРАМЕТР.md](../ДОКУМЕНТЫ/ИНЖЕНЕРНЫЙ_ПАРАМЕТР.md) — закон I-11.

## US-11 · Дверь ·42 КОЛОНКА — автономная умная колонка трека
**Как** жилец, **я хочу** в доме умную колонку, которая слушает, думает и действует строго локально, **чтобы** дом заботился без облака и не испытывал моим дискомфортом.

**Критерии приёмки:**
- [x] Дверь ·42 КОЛОНКА (`СИНГУЛЯР_39_КОЛОНКА.html`) открыта с хаба; нити дома симметричны (хаб ⇄ ·41 ⇄ ·42 ⇄ хаб)
- [x] DAG-оркестратор живой: цель словами → план шагов с рисками; Policy Engine останавливает medium/high (подтверждение кнопкой) и critical (PIN); инструмент вне policy_rules.json честно отклоняется (default_action: deny)
- [x] Hash-Chain аудит — настоящий SHA-256 (`crypto.subtle`); цепь копируется и стирается кнопками; «Стоп» честно рвёт конвейер
- [x] Аппаратная приватность: микрик обесточивает «ухо» (LED + бейдж + запись в аудит), механическая шторка двигает объектив; VLAN-матрица объясняет каждое правило словами
- [x] Вкладка Сеть·IaC показывает настоящие файлы дистрибутива КОЛОНКА/ (compose, policy, nftables, terraform, ansible) с копированием в клик
- [x] Пробы ЗДОРОВЬЕ: 10 органов живы (organism-тест 47/47 — каждая кнопка отвечает наблюдаемым откликом); 0 ошибок консоли; мобайл 390px без переполнений
- [x] Дом помнит выбор человека (вкладка, цель, рубильники, параметры корпуса) и умеет его забыть одной кнопкой
- [x] Service worker: дверь ·42 в пре-кэше ядра (поколение v113)
- [x] **Решение владельца (2026-10-13):** «колонка любая у клиента, какая есть — он просто подключает к нашему УУП; наш Малыш всё делает: говорит погоду, ставит будильник и всё, что положено». Отдельное железо не закупается (К1/К2 сняты); обещание выполнено через УУП в зале ·31 (US-21)
## US-13 · Руки дома · ПУЛЬТ — карточки-действия с честной отменой
**Как** жилец, **я хочу**, чтобы ПУЛЬТ предлагал типовые жесты вечера карточками и после нажатия держал честную «↩ отменить», **чтобы** действовать одним касанием и всегда иметь обратный ход. (Калм-карта зала — ручки Малыша — закрыта в v10.61 «РУЧКИ»; ПУЛЬТ — второй хост той же строки.)

**Критерии приёмки:**
- [x] Полоса «РУКИ ДОМА · КАРТОЧКИ» в ПУЛЬТе собирает карточки из живого контекста (без дубля чутья и ручек зала): песня идёт → «⏸ ПАУЗА», «◻ ТИШИНА», «⏪/⏩ 10 С», «СВЕТ: …», «СЦЕНА · СВЕТ (слой)» — «открыть дверь», «⌂ ЗАКРЫТЬ ПУЛЬТ»; пауза → «▶ ПРОДОЛЖИТЬ»; тишина → «↩ ЗВУК ОБРАТНО»; личная ветка → «ЛИЦО ПУЛЬТА: ДАЛЬШЕ», «ЛЮДИ · ЗАЛ»; в старте руки молчат честно
- [x] После нажатия карточка держит «✓ сделано» и честную «↩ отменить» (закон I-11) там, где обратный ход достижим: пауза/тишина — рука-близнец; отскоки — дельта в момент отмены (точный возврат даже у играющей песни); сцена — возврат к текущей; слои — «закрыть пульт целиком»; «⌂ ЗАКРЫТЬ ПУЛЬТ» уходит вместе с пультом — обещаний без дела ноль
- [x] Роль-гард: неведаемое не показывается (канон РОЛЕЙ); ветка-гард: зал — общий руль, лицо и люди — личный
- [x] Карточки честно регенерируют из контекста (без kv-памяти); исполнение — через единую шину намерений (`src` «жест»/«жест-откат»), двойного состояния нет
- [x] Проба ЗДОРОВЬЕ жестов зелёная; мобайл 390px: цели ≥44px; консоль живого чиста
- [x] Паспорт пульта несёт строку жестов (под строкой ручек [10.61])

## US-12 · Чутьё пульта — дом угадывает следующий шаг
**Как** жилец, **я хочу**, чтобы пульт угадывал моё следующее действие по контексту вечера и честно объяснял догадку, **чтобы** рулить одной кнопкой без поиска по вкладкам и не испытывать дискомфорта.

**Критерии приёмки:**
- [x] Полоса «ЧУТЬЁ» в ПУЛЬТе показывает предчувствия по контексту (старт → «▶ НАЧАТЬ ВЕЧЕР»; песня идёт → «⏸ ПАУЗА», «◻ ТИШИНА»; пауза → «▶ ПРОДОЛЖИТЬ»; сцена N → следующая) — каждое с объяснением «почему»
- [x] «Недавние» помнят последние действия (до 8, `kv.pult.чутьё`); у тишины и юстировки — честный откат «↩», где откат нечестен — кнопки нет (закон I-11)
- [x] Ветка ◉ ОБЩИЙ РУЛЬ / ◈ ЛИЧНЫЙ помнится (`kv.pult.ветка`) и открывается по умолчанию; фильтр недавних и предчувствий честный
- [x] Отказы роли и неопознанные намерения не попадают в память; приватность: всё в `kv.*` этого браузера, ноль сети
- [x] Роль-гард: неведаемое не предлагается (канон РОЛЕЙ)
- [x] Проба ЗДОРОВЬЕ чутья зелёная; мобайл 390px: цели ≥44px, ноль переполнений; vm-тест 19/19, консоль чиста
- [x] Паспорт пульта несёт строку чутья (строка двери ·42 — ход «СИНТЕЗ»)

## US-16 · НАВИГАТОР — шаг назад и все двери на каждой странице
**Как** жилец, **я хочу** с любой страницы дома видеть ⌂ ДОМ, ↑ НАЗАД и ☰ ВСЕ ДВЕРИ, **чтобы** никогда не застревать: из первого меню выходы есть, из подменю — есть, из под-подменю — есть, и откат на шаг назад возможен всегда.

**Критерии приёмки:**
- [x] НАВИГАТОР (нить ⌂ · ↑ · ☰) стоит на 41 странице дома; меню «ВСЕ ДВЕРИ» открывает все 41 дверь + хаб группами, работает без JS (`<details>`) и скрыто в печати
- [x] «↑ НАЗАД» честен: есть история — откат по истории браузера; истории нет — фоллбэк на родителя (для под-подменю — ·45 ДОКУМЕНТАЦИЯ и ·42 КОЛОНКА)
- [x] Тупиков ноль: растеризатор, adapter-os и прототип колонки (было 0 внутренних выходов) получили нить; граф-аудит 43 страниц — каждая достижима от хаба и имеет выходы
- [x] 10 дверей ·43–·52 вшиты в манифест МОДУЛИ, versions.json (счётчик 41), поиск АРИАДНА и статические двери хаба (полный дом виден без JS)
- [x] ЛАДОМ: «· ВСЕ ДВЕРИ» в шапке и команда пульта; 404 несёт полное меню по абсолютным путям
- [x] Кэш v120; vm-проба: синтаксис ядра чист, повторный граф-аудит зелёный

## US-17 · ЛАДОНЬ: основные настройки всегда под рукой
**Как** жилец, **я хочу** язык, звук, текст, пуск и пульт видеть в одном блоке на самом верху и перетаскивать его целиком, **чтобы** не ходить за каждым движением в пульт.

**Критерии приёмки:**
- [x] ЛАДОНЬ стоит в гавани под шапкой; тащится за ⠿ целиком, место помнится, двойное нажатие — домой
- [x] Ручки компануются в любом порядке (⠿), прячутся (✕) и возвращаются из каталога
- [x] Замок закрыт по умолчанию — случайные касания ничего не переставляют
- [x] Справка на каждой ручке; РЕЛАКС и ТИХО блок не ломают; колонка текста честно уступает полосу

## US-18 · ЯЩИКИ: всё хозяйство по краям
**Как** жилец, **я хочу** выезжающие ящики слева и справа, где сам раскладываю хоть сколько кнопок в удобном порядке, **чтобы** всё было под рукой без открывания пульта.

**Критерии приёмки:**
- [x] ЯЩИК · РУЛЬ (пуск, песни, полюс, свет, хлопок, тишина) и ЯЩИК · ХОЗЯЙСТВО (свой звук, библиотека, здоровье, паспорт, люди, свобода, справка, двери, лимиты)
- [x] Компоновка перетаскиванием, замок каждого ящика, порядок помнится
- [x] Esc/✕ закрывают, фокус возвращается вкладке; кнопки бьют по публичным API дома (дублей ручек нет)

## US-19 · Живой штрих-код автора
**Как** слушатель, **я хочу** чтобы штрих-код автора вел на страницу той песни, которая играет, **чтобы** камера телефона открывала именно её.

**Критерии приёмки:**
- [x] QR и ссылка следуют за играющим треком (все 62 песни каталога)
- [x] Свой файл — честный фолбэк «дом автора»; без QR-движка — прежний штрих-код, имитаций нет
- [x] Проба ЗДОРОВЬЕ сверяет href с текущим треком

## US-20 · Палитра-закон и центр текста
**Как** жилец, **я хочу** строгую палитру — антрацит/ОЛЕД-чёрный, имперское золото, серый — и текст, выведенный чётко по центру, **чтобы** дом выглядел императорски и читался из дальнего угла.

**Критерии приёмки:**
- [x] 187 цветов дома сведены законом; зелёного/красного/прочего нет (второй прогон закона = 0 изменений)
- [x] Строки песни, метка голоса, шапка песни — по центру
- [x] «Лапти» сняты: ручки 44px, диалоги компактнее, тач ≥44px сохранён
- [x] Диалог ЛИМИТЫ: только честные лимиты GitHub; лимита 80 МБ в доме нет

## US-21 · УУП — любая колонка + будильник + погода
**Как** жилец, **я хочу** подключить любую колонку, что у меня есть, к Устройству Управления Приёмника, и чтобы Малыш говорил погоду, ставил будильник и делал всё, что положено, **чтобы** дом звучал где угодно без покупки специализированного железа.

**Критерии приёмки:**
- [x] Седьмой вид пульта «◈ УУП» в зале ·31 (реестр `__ПУЛЬТЫ.виды`, чип в панели ВИД); память вида — kv.pult
- [x] «♪ ПРОВЕРИТЬ ЗВУК» — тестовый тон в аудиовыход устройства (один AudioContext, закрывается по F-15); честная пометка: выбор устройства — системный, дом в систему не лезет
- [x] Будильник: локальный, офлайн, ничего не отдаёт наружу; потолок 8 (честный), дедуп «прозвенел сегодня», однократный гаснет сам; работает в РЕЛАКСе; честная пометка «будит, пока вкладка открыта»
- [x] Погода: open-meteo без ключей, коды WMO 4677 (промышленный стандарт); сеть трогается только явной кнопкой; офлайн — последнее запомненное с временем или честный отказ; Малыш озвучивает
- [x] Канон `ДОКУМЕНТЫ/ТРЕКИ/OMNISPEAKER-1/src/uup-core.js` (uup-core/0.1): 0 сети · 0 document · 0 localStorage · 0 eval · 0 Date; тесты 17/17 node:vm тем же файлом; ленивая догрузка + пре-кэш v143
- [x] Пробы ЗДОРОВЬЕ `__HEALTH32` (7); КАЗНА — семья «малыш·ууп»; DOM-экран (закон v10.86)

## US-22 · Тюнинг под свои потребности — по умолчанию
**Как** жилец, **я хочу** уметь тюнинговать каждую вещь дома под свои потребности без просьб и правок кода, **чтобы** дом подстраивался под меня, а не я под дом (закон владельца: «каждому надо просто дать возможность тюнинговать под свои потребности»).

**Критерии приёмки:**
- [x] Ручки дома (`#volSlider`, `#lyrSlider`), РУЧКИ-карточки с объяснением и откатом, ПРОФИЛЬ (ось haptic), ЛАДОНЬ (перетаскивание, замок от случайных касаний), ЯЩИКИ (компоновка хоть скольких кнопок) — тюнинг уже по дому
- [x] УУП: город погоды, время/метка/повтор будильников, тумблеры — каждый настраивается в панели; память — kv.ууп.* (СКЛАД), удаление настоящее
- [x] «Один факт — одно место»: настройки не дублируются между домами; дефолт честный, тюнинг не ломает закон палитры и честности (пометки «сети нет»/«память» остаются)


---

US-23 · Связь — способность человека, а не приложение
**Как** человек с любыми физическими ограничениями (немой, слабослышащий, без коммерческих аккаунтов, без сети), **я хочу** формулировать намерение связи (написать, позвать, передать файл/ценность, пригласить), **чтобы** дом подбирал представление и транспорт под меня, а не требовал приложений и регистрации (прототип владельца «Контур человеческой связи» v1.2, такт v11.29 «КОНТУР»; Фаза 0 — их такт v11.27 «СВЯЗЬ»).

**Критерии приёмки:**
- [x] Дверь ·53 СВЯЗЬ ЧЕЛОВЕКА: намерения с протокольными именами (text/file/voice/call_invite/value_intent/contact_invite), SHA-256 манифест payload, честная машина состояний до recipient_acknowledged только по ACK собеседника
- [x] E2EE-ключи ECDH P-256 на устройстве + отпечаток ABCD:EF01:… для сверки по второму каналу; внешний STUN — выключенный по умолчанию тумблер (ноль внешних запросов; включение — явное слово)
- [x] Доступность WCAG 2.2 AA: крупный шрифт, высокий контраст, TTS-озвучка статуса (Фаза 0 их ходом), профиль локально; «Стереть базу контура» — настоящий deleteLocalData с подтверждением
- [x] 9 багов двери комплекта v1.2 переплавлены в фичи (ЖУРНАЛ_БАГОВ_ДВЕРИ_53.md); их SHA256SUMS 32/32 целы; ядро комплекта в песочнице дома
- [x] P2P-сеанс воспроизводим: две вкладки на живом сайте + ПК↔телефон по serve_p2p.py (РУКОВОДСТВО_P2P_LAN_RU.md)
- [x] Межсетевые маршруты через ·24/·25/·26 — контракт singulyar.transport/0.1 (js/transport-adapter.js, WP-07: network отклонён по И-01, fake-loopback, 18/18) + честные карточки маршрутов (WP-10 почта/линия, WP-11 ценность); СЕТЕВЫЕ адаптеры — только по явному слову владельца (ЩИТ_ЧЕЛОВЕКА, И-01) *(v11.33 «ГЕРМЕТИЧНО»)*

---

US-24 · QR-сигналинг и сессия AES-256-GCM в контуре ·53
**Как** человек без общей сети (air-gapped, LAN, «тихая комната»), **я хочу** переносить SDP-токены и публичные ключи QR-кодами и вести разговор шифрованным каналом, **чтобы** связь не требовала ни сервера, ни интернета, ни доверия третьим лицам (такт v11.33 «ГЕРМЕТИЧНО»; шаги WP-06 карты ЗЕЛЁНОЙ + К.10).

**Критерии приёмки:**
- [x] Канон qr-token/0.1 (js/qr-token.js): ISO 18004 byte mode EC-L v1–40, эталонная сверка 7/7 (пакет qrcode, клетка-в-клетку), декодеры cv2/pyzbar, честный отказ >2953 байт, детерминизм; страж 9/9 node --test
- [x] Дверь ·53 КОНТУР v1.3: QR SDP-токена + QR публичного ключа (эмуляторы П.7 живым каналом), без камеры и сети — читает человек
- [x] Сессия: ECDH P-256 → SHA-256 → AES-256-GCM; отпечаток сессии для сверки по независимому каналу; шифрованный ACK; честный отказ отправки без сессии/на закрытом канале; живой стенд E2E зелёный
- [x] Контракт singulyar.transport/0.1 (WP-07): defineAdapter с честными отказами, network отклонён (И-01), fake-loopback встроен, append-only журнал, идемпотентность; страж 18/18
