# СИНГУЛЯР — офлайн-вселенная караоке RUVSON

Полностью автономная караоке-платформа: **64 песни · флагман «Когда теряем» на 157 языках (конвейер: 197) · ОРКЕСТРАТОР ·15 · ОС из 17 модулей · PWA**.
Один HTML-файл = вся платформа: без сервера, без установки, без интернета. Скачал — открыл — поёшь.

**Живой сайт (PWA):** https://rtynbirf.github.io/singulyar/

<!--СНГ:АТЛАС-ПРАВДА--> Исторические числа дверей в абзацах ниже (18/19/21/22/23) — летопись своего такта; истина — здесь и в `data/versions.json`.

## Текущее состояние дома (одна правда)

<!--СНГ:ПРАВДА-НАЧАЛО-->
| Что | Сколько | Где проверять |
|---|---|---|
| Такт | **11.50 «НАПОЛНЕНИЕ»** | `data/versions.json` → `дом` |
| Поколение кэша | **s15-orkestrator-v200** | `sw15.js` → `S15_CACHE` |
| Двери | **хаб + 44** (счётчик versions.json: жилые залы + доки + лаборатория, включая ·54 ПИР — живая связь без посредников; включая ·42 КОЛОНКА, ·53 СВЯЗЬ ЧЕЛОВЕКА и ·55 ЕДИНОЕ ОКНО — дверь пакета владельца, файл `_43_`, номер дома ·55: ·43 занят ШТАБОМ РЕВИЗИИ) | манифест ядра `singulyar-modules.js` (`SNG.модуль`, v1.20.0) |
| Песни фонда | **62** | папка `minus/`, СЦЕНА ·32 |
| Языки флагмана | **200** | versions.json → `счётчики.языков` (сырьё 157 srt — `ДАННЫЕ/флагман_157_языков/`) |
| Пульт | **7 видов реестра** (ПОЛНЫЙ · РУЛЬ · ПЛИТКА · ⌘ КОМАНДА · ОМНИ · ЛИЦА · ◈ УУП) — все чипами в панели ВИД | ЛАДОМ ·31 |
| Малыш | **v0.9**, 17 правил (+ части 7 «Уроки КОЛОНКИ», 8 «Наука старшего», 9 «Уроки РУЧКИ») | апстрим `rtynbirf/singulyar-llm` |
<!--СНГ:ПРАВДА-КОНЕЦ-->
**Живая документация:** [docs/СИНТЕЗ.md](docs/СИНТЕЗ.md) — дом одним взглядом (с этого начинай); [docs/README.md](docs/README.md) — карта; [docs/ТЗ.md](docs/ТЗ.md) — обещания; [docs/ДОРОЖНАЯ_КАРТА.md](docs/ДОРОЖНАЯ_КАРТА.md) — дорога; [CHANGELOG.md](CHANGELOG.md) — летопись тактов; [AGENTS.md](AGENTS.md) — правила для агентов; [SECURITY.md](SECURITY.md) — безопасность и сообщение об уязвимостях; [CONTRIBUTING.md](CONTRIBUTING.md) — как попасть в такт.

---

## Быстрый старт — три пути

| Путь | Как | Что получишь |
|---|---|---|
| **Сайт (рекомендуется)** | Открой https://rtynbirf.github.io/singulyar/ | Платформа онлайн, устанавливается как PWA, работает офлайн после первого визита (service worker `sw15.js`) |
| **Единый файл ОС** | Скачай `SINGULYAR_OS_v17_13_MODULES.html` (= СИНГУЛЯР_ОС v1.7, GitHub хранит имена релизов латиницей) из [Release v1.7](https://github.com/rtynbirf/singulyar/releases/tag/v1.7) и открой в браузере | Все 13 модулей в одном файле, 100% офлайн с первого открытия |
| **Локальная копия репо** | `git clone` → открой `index.html` (или `python -m http.server`) | Полная копия сайта на своём диске |

Подробности, горячие клавиши и диагностика — в [ИНСТРУКЦИЯ_СТАРТ.md](ИНСТРУКЦИЯ_СТАРТ.md).

---

## Что в репозитории

```
index.html                        Лендинг-навигатор по платформе
СИНГУЛЯР_01_Когда_теряем_…        Платформа ·01: караоке флагмана ×157 языков (14.9 МБ)
СИНГУЛЯР_02_ФАБРИКА_…             ·02 «ФАБРИКА» — эмерджентная архитектура (7.4 МБ)
СИНГУЛЯР_15_ОРКЕСТРАТОР.html      ·15 «ОРКЕСТРАТОР» v1.1 — дирижёр всей системы (0.7 МБ)
СИНГУЛЯР_16_СУФЛЁР.html           ·16 «СУФЛЁР» — UltraStar Edge: микрофон→MIDI→очки (59 КБ)
СИНГУЛЯР_17_ЗАЛ.html              ·17 «ЗАЛ» — P2P двойной экран (зал+пульт) без сервера + air-gapped WebRTC:
                                  телефон-микрофон/пульт по QR-коду, свой QR-энкодер (60 КБ)
СИНГУЛЯР_18_СОБЫТИЕ.html          ·18 «СОБЫТИЕ» — SOCIAL CORE: зал совместного пения по коду/QR без аккаунтов (93 КБ):
СИНГУЛЯР_19_ЧЕЛОВЕК.html          ·19 «ЧЕЛОВЕК» — Human-First: адаптация по возможностям, личность ECDSA
                                  non-exportable, мои люди, «позвать спеть» (40 КБ)
СИНГУЛЯР_20_ФОНЕТИКА.html         ·20 «ФОНЕТИКА» — фонетический подсказчик и вокальный гид:
                                  офлайн-романизация любой письменности (any-ascii ISC), слог-чипы,
                                  локальный TTS, мост ·16 СУФЛЁР (32 КБ)
СИНГУЛЯР_21_ОБЩЕНИЕ.html          ·21 «ОБЩЕНИЕ» — смысл один — представления разные: маршрутизатор
                                  представлений (текст/Брайль/речь/вибро), голос — личная настройка
                                  получателя, без классификации людей; живой мост со СВЯЗЬЮ ·22
                                  (33 КБ, редакция 0.3.0)
СИНГУЛЯР_22_СВЯЗЬ.html            ·22 «СВЯЗЬ» — девять каналов связи поверх ·18/·19/·21: текст, файл,
                                  субтитры, голосовое, озвучка, аудио-/видеозвонок, экран, совместное пение;
                                  fallback-граф до базового «Текста», выбор человека выше автоматики;
                                  живой мост ·21 — входящие тексты зала уходят в ОБЩЕНИЕ на представление,
                                  «В зал ·22» приносит ответ (65 КБ, редакция 1.1)
СИНГУЛЯР_27_ФУНДАМЕНТ.html        ·27 «ФУНДАМЕНТ» — визуальный канон v3.0 «Ambient OS»: 15 страниц
                                  из дизайн-пакета владельца (WebP, фасет-бейджи) — 27 ЛВЛ дома
СИНГУЛЯР_28_УЗЕЛ.html             ·28 «СУВЕРЕННЫЙ УЗЕЛ» — математическая философия автономии вживую:
                                  Ŝ = 1_H + λ(I⊗I†), три живых холста (буря/решето/холм), протокол
                                  ЯКОРЬ→ФИЛЬТР→АРХИТЕКТОР, аксиомы I–V, инвариант ⟨M(t), Σ(t)⟩ ≡ 0;
                                  ноль изображений — всё рисуется кодом (такт v1.29.0, 50 КБ)
СИНГУЛЯР_29_СВОБОДА.html          ·29 «СВОБОДА» — живой UI над Composition Engine: человек произносит
                                  намерение, машина предлагает среды из примитивов (статус «предложено»),
                                  жить средой решает человек; своё слово без правки ядра (EMERGENCE);
                                  WCAG 2.2 аудит под капотом (такт v1.38.0, 54 КБ)
СИНГУЛЯР_30_ТКАНЬ.html            ·30 «ТКАНЬ» — P2P Human Information Fabric своим путём: 7 ES-модулей
                                  в БИБЛИОТЕКИ/ткань/, MEANING ≠ TRANSPORT, решение за человеком
СИНГУЛЯР_31_ЛАДОМ.html       ·31 «ЛАДОМ» — пульт вечера: 4 строки на экране (текст
                                  выбранного языка · транскрипция кириллицей · оригинал · АВТОАКОРД
                                  без файла), телефоны по Wi-Fi (КРЫША, WebRTC + Whisper-автосинхрон),
                                  реестр параметров I-11, simple/full, ЗДОРОВЬЕ-томограф (такт v10.15)
СИНГУЛЯР_32_СЦЕНА.html            ·32 «СЦЕНА» — караоке фонда дома: 64 песни — играют оригинал с голосом автора
                                  (minus/голос/, 48 kHz stereo) и натуральная минусовка (minus/чистый-минус/, вокал
                                  убран из оригинала; RUM23-7 «ДИЕТА»: webm-мастера и моно-дубл ушли, в корне minus/
                                  2 спец-mp3: дом-песня и мастер «Сборника» (сама безголосая); «Где настоящее» оживлено голосом автора — виток v11.50), тексты 64 песен
                                  вшиты, слово-вайп по весам, ТЭП-очки (ИДЕАЛ/ТОЧНО/комбо/рекорд),
                                  темп/сдвиг/громкость обратимы, мост слова ·16/·20 (такт v1.46.0, 353 КБ)
СИНГУЛЯР_33_ФОНД.html            ·33 «ФОНД» — общак дома: счётчик открытой цепи онлайн,
                                  два пути (аноним / летопись), домовой QR-энкодер ·17,
                                  честное стекло приватности (такт v1.47.0); с v1.48.0 —
                                  дверь на хартию фонда ·34, внешние кассы убраны
СИНГУЛЯР_34_ДОМ_ФОНДА.html        ·34 «ДОМ ФОНДА» — хартия фонда Хелены Келлер вживую:
                                  наследие (1880–1968, Рэдклифф 1904, ACLU), миссия и программы,
                                  правила дома (ЧЕЛОВЕК РЕШАЕТ, ноль кассы, цепь помнит),
                                  десять прав жертвователя по Donor Bill of Rights AFP (дом держит
                                  все и усиливает: аноним первичен, списков нет, данных нет),
                                  честное стекло независимости (не helenkellerfoundation.org,
                                  не helenkellerintl.org — общих денег/людей/слова нет),
                                  живой холст «свет сквозь стекло» (такт v1.48.0)
ФОНД/                             Касса и устав фонда: ОБЩАК.json (источник правды:
                                  адреса/узлы/летопись/независимость) + УСТАВ_ФОНДА.md
                                  (открытый устав, 11 разделов) (такт v1.48.0)
singulyar-modules.js              ЯДРО МОДУЛЕЙ SNG v1.3.0 — манифест 19 узлов, 6 модальностей,
                                  живой Кристалл: шар рассыпается на 18 осколков-дверей (v1.32+),
                                  (СЛОВО ¶ ГОЛОС ◉ ЗВУК ∿ ОБРАЗ ◈ ТАКТ ⌇ ЖЕСТ ⤳), живая призма,
                                  модульная бирка на каждой странице (такт v1.29.0); API — window.SNG
server/                           SINGULAR SERVER v1 — опциональный сервер связей: люди, приглашения,
                                  записи 7 дней → память, GC (ws, 0 нативных зависимостей)
                                  голоса WebRTC mesh, синхронный старт, запись микса, TEMPORARY 7 дней → ◈ ПАМЯТЬ
БИБЛИОТЕКИ/                       Вендорные зависимости и нормативное ядро:
                                  кристалл/ (crystal-core.mjs + journal.mjs + схема — нормативная тройка с SHA-отпечатком;
                                  bridges.mjs, крипта.mjs, composition.mjs, space.schema.json — надстройки);
                                  adapter-os/ (CapabilityModel · AdapterRegistry · MeaningRouter); wllama/ (LLM в WASM);
                                  trystero-nostr.bundle.mjs (60 КБ, MIT) — сигналинг WebRTC;
                                  any-ascii.bundle.mjs (534 КБ, ISC) — офлайн-романизация ·20
singulyar-ux-engine-v9.js         UX-движок v9.4: шестерёнка-панель, drag (v9.3 «ТАМ ГДЕ ПОСТАВИЛ»),
                                  подсказки везде (v9.4), нативное ПКМ свободно, a11y, ТВ — у хаба и модулей
ИНСТРУКЦИЯ_СТАРТ.md               Инструкция: запуск, клавиши, хостинг, диагностика
ДАННЫЕ/                           Тексты 61 песни (srt/lrc/txt),
                                  LRC-корпус, флагман_157_языков (INDEX + 157 srt + 157 txt)
ИНСТРУМЕНТЫ/                      Grabber + алгоритм + тесты ·16/·17/·18/·19/·20/·21 (Fusion, QR, зал, сервер,
                                  фонетика, общение) и харнесс UX v2 (node) + serve_repo.mjs (статический сервер тестов)
ДОКУМЕНТЫ/                        Полный отчёт, мастер-план 157 языков, ревизии, стратегия
СИНГУЛЯР_16_СУФЛЁР.html           ·16 «СУФЛЁР» — офлайн-оценка вокала UltraStar-стиля (73 КБ, v1.1):
                                  S15_*-коды ошибок, watchdog тишины, a11y (role/aria),
                                  Fusion-автосборщик UltraStar .txt (ASR-слова × DSP-ноты, мелизмы ~,
                                  квант 1/16 бита, нарезка строк), тесты в ИНСТРУМЕНТЫ/
minus/                            62 минусовки (ремастер 128 кбит/с, клиппинг снят) — ХОР ·15 и СУФЛЁР ·16 поют сами
СКРИНШОТЫ/                        64 снимка: ОРКЕСТРАТОР_15 (20), ПЛАТФОРМА_01 (16), РЕЗОНАНС_02 (4),
                                  ФАБРИКА_02 (4), UX_ДВИЖОК (3), ЗАЛ_17 (6), ЗАЛ_18 (5), ОБЩЕНИЕ_21 (2),
                                  СВЯЗЬ_22 (3), СУФЛЁР_16
icons/, manifest.webmanifest, sw15.js   PWA-слой (установка + офлайн; прекэш v48 — ядро модулей, все двери, СВОД-доки и композиция)
```

**Приватность (такт v10.20 «ЭТАЛОН»)**: `АРХИВ_V3/` (77 МБ старых билдов, AUDIO_B64) и
`ДАННЫЕ/RUVSON_каталог_канала_2026-09-30.xlsx` (аналитика канала) убраны из Pages —
сайтом больше не отдаются. Файлы остаются в git-истории, восстановление:
`git checkout <sha> -- путь`. Приватные выгрузки в репо не вернутся:
`.gitignore` закрывает `АРХИВ_V3/` и `ДАННЫЕ/*.xlsx`.

## Release v1.7

- **SINGULYAR_OS_v17_13_MODULES.html** (40 МБ, = СИНГУЛЯР_ОС v1.7 «13 модулей») — вся платформа (13 модулей: ·01, ·02, ·15 и связки)
  одним файлом. Это сборка «всё-в-одном»: открывается двойным кликом, интернет не нужен.
- **RUVSON_AUDIO_MINUS_61.zip** (208 МБ) и **RUVSON_AUDIO_FULLS_61.zip** (208 МБ) — аудио-библиотеки
  **в ремастер-версии** (mp3 128 кбит/с, клиппинг снят, кодек-мусор вычищен) для локальных копий
  платформы (распаковать рядом с HTML в папку `minus/`).

## Release v1.8

- **СИНГУЛЯР_18_СОБЫТИЕ.html** — SOCIAL CORE поверх локального ядра: комната по коду/QR (без аккаунтов),
  голоса участников WebRTC mesh, синхронный старт по clock-offset, запись микса (голоса+минусовка) у каждого,
  TEMPORARY 7 дней → ◈ ПАМЯТЬ, GC при старте, «МОИ ВОСПОМИНАНИЯ» с фото/подписью и экспортом webm.
- **БИБЛИОТЕКИ/trystero-nostr.bundle.mjs** — сигналинг без сервера (trystero 0.25.4, MIT, вендорный esbuild-бандл, 0 bare-imports).
  Сеть используется ТОЛЬКО для зала ·18 по жесту пользователя; офлайн-ядро от неё не зависит.
- Тесты: логика 55/55 (node, реальный код страницы), браузер 29/29 (Playwright: полный цикл события + реле).

## Release v1.9

- **СИНГУЛЯР_19_ЧЕЛОВЕК.html** — Human-First слой «событие одно — каналы разные»:
  адаптация по возможностям+предпочтениям (крупные цели, вибрация, уведомления, меньше движения;
  автоматика предлагаемая, человек распоряжается — override всегда выигрывает), личность
  (ECDSA P-256 non-exportable в IndexedDB, вызов→подпись→вход, технический UUID ≠ имя),
  «мои люди» (связь принимает человек; kick ≠ разрыв дружбы; блок закрывает дверь),
  «позвать спеть» (создать зал и позвать / пригласить в существующий; доставка WS + push + очередь офлайн).
- **server/** — SINGULAR SERVER v1 (см. server/README.md): REST+WS, identity/relations/invites,
  записи final.webm + manifest.json + participants/, TEMPORARY 7 дней → ◈ MEMORY, GC метаданные+блоб,
  CORS для Pages-клиента. Интеграционный тест ТЗ: CREATE→TEMP→EXPIRE→GC→absent+absent — зелёный.
- **Мост ·19↔·18**: `?зал=КОД` (гость, было) и `?хост=КОД` (ведущий создаёт зал с заданным кодом — новое);
  клик «создать зал» защищён от передачи MouseEvent как кода.
- **SINGULYAR_OS_v18_17_MODULES.html** — пересборка единой ОС: 17 модулей (добавлены ·16/·17/·18/·19),
  b64 модулей сверен байт-в-байт, ORDER/boot/метаданные/JSON-LD обновлены.
- Тесты: ·19+сервер 12/12 (node --test, живой сервер на случайном порту), ·18 логика 55/55 (после патча),
  ·17 Fusion — ОК; найдено и исправлено 3 косяка прототипа Human-First (см. ОТЧЁТ_ПОЛНЫЙ, Этап 13).

## Release v1.10

- **СИНГУЛЯР_20_ФОНЕТИКА.html** — «Фонетический подсказчик и вокальный гид» из ТЗ KARAOKE_TREND (лакуна №3):
  офлайн-романизация любой письменности в латиницу (any-ascii 0.3.3, ISC, вшит в `БИБЛИОТЕКИ/any-ascii.bundle.mjs`,
  динамический import как в ·18), прогон-разбор Unicode (хань/кана/хангыль/прочее), слог-чипы
  (хань/хангыль — капитальный сплит по слогам, кана — кластеры с малыми и ー), детект языка → BCP-47
  (uk/be/sr/kk отличимы от ru по буквам; han/kana эвристика для ja/zh), ручной override 38 языков,
  локальный вокальный гид через Web Speech API (точный голос → префикс → дефолт, честный статус если голоса нет,
  ⌇ rate 0.55 для разучивания), мост «СУФЛЁР ·16»: только-слушатель STATE ver:1 по `singulyar-hall`
  (BroadcastChannel + localStorage-фолбэк + разовый опрос свежего ключа) — текущее слово крупно с романизацией
  и «далее» 6 слов, тап = произнести. Ядро ·16 не тронуто.
- Честные границы (в самом модуле): тоны пиньиня не подаются, арабский/иврит без огласовок, хангыль без
  сандхи, малая цу аппроксимирована (きっぷ → kitpu), TTS зависит от ОС-голосов, IPA нет — выбрана романизация.
- Тесты: логика **51/51** (`node ИНСТРУМЕНТЫ/test_s20_logic.js` — синтаксис, романизация 11, прогоны, чипы 5,
  языки 18, фильтр моста 9, голос 6, сплит-регрессии), браузер **28/28** (Playwright: бандл грузится, чипы
  zh/ru/hangul точные, тап без голосов не падает, мост STATE → слово/далее/romani/aria, фильтр мусора,
  0 ошибок консоли). Косяк среды: python `http.server` в песочнице виснет → тесты ·18/·20 переведены на
  `ИНСТРУМЕНТЫ/serve_repo.mjs` (node, защита от traversal).
- Регрессия: ·16 логика 5/5, ·17 Fusion, ·18 логика 55/55, ·19+сервер — зелёные.

## Release v1.21

- **СИНТЕЗ с HUMAN RUNTIME v0.1** (`ДОКУМЕНТЫ/СИНТЕЗ_HUMAN_RUNTIME.md`) —
  уважительный разбор внешнего прототипа (собран двумя ИИ из нашего контекста)
  и полимат-аудита (`ПРОЕКТ.txt`): что у нас уже было и сильнее, что взяли —
  с уважением к источнику, что не взяли и почему. Восемь совпадающих принципов
  = сходимость независимых выводов.
- Принято нашим путём (AD-S1/S2/S3): **след маршрутизации** в ·21 v0.4.0
  (trace на каждом представлении + след маршрута, контракт не сломан);
  **мост memory.decide** в bridges.mjs v1.1.0 (решение человека «хранить/забыть»
  = отдельное неизменяемое семантическое событие, дедуп бережёт акт, а не
  свободу передумать); **провенанс** — ГОТОВНОСТЬ.manifest.json
  (машиночитаемый честный статус) + ЯДРО_SHA256SUMS.txt (отпечаток
  нормативной тройки, подмена = провал теста).
- Аудит безопасности принят без спора: форвард-секретность, encrypted backup,
  device attestation — внесены в known_nonproduction честно.
- Тесты: мосты 21/21 (+6 memory.decide), ·21 логика расширена (след), новый
  test_core_integrity.py, каталог 16/16; ядро/журнал/схема не тронуты.
- Обвязка: SW v20→v21, сборка v1.20.0→v1.21.0, каталог актуализирован
  (647 файлов, 11 классов, сумма сходится).

## Release v1.20

- **СИСТЕМАТИЗАЦИЯ ВСЕЛЕННОЙ** — канонический каталог вселенной
  (`ДОКУМЕНТЫ/СИСТЕМАТИЗАЦИЯ_ВСЕЛЕННОЙ.md`): 11 классов (К0–К9), **641 файл,
  каждый учтён ровно один раз**; числа вычислены скриптом-инвентаризацией из
  файлов, не зашиты. Классы: инфраструктура 7 · сцена 4 · дом 12 · кристалл 6 ·
  мозг 30 · транспорт 9 · данные 384 · тесты/инструменты 54 · документы 14 ·
  архив/доказательства 121.
- На главной (`index.html`) появился раздел **«Каталог вселенной»** — вся карта
  по полкам прямо на визитке + честный статус **ДЕНЬГИ ·25 / ВЕБ МАНИ**:
  внутренний подписанный append-only кошелёк работает на устройстве (баланс из
  фактов, тихие переводы, ХОТЕЛКИ, бумажки-токены, PIN); внешние рельсы
  (WebMoney, карты, Lightning) честно НЕ подключены — в модуле рецепты, а не
  провода; платёжные секреты в репозиторий не попадают никогда.
- Починена мёртвая ссылка на «Караоке-ЛАБ» (папки нет — честнее убрать, чем
  обещать). Новый тест `ИНСТРУМЕНТЫ/test_catalog_index.py` сканирует ВСЕ ссылки
  index.html по файловой системе: мёртвая ссылка = провал теста.
- Обвязка: SW v19→v20, сборка v1.19.0→v1.20.0.

## Release v1.19

- **КРИПТА — тёрки зала остаются в зале** (`БИБЛИОТЕКИ/кристалл/крипта.mjs`,
  ненормативный слой, ядро/журнал/схема не тронуты). Проведено в ·22 СВЯЗЬ:
  необязательная **фраза зала** → PBKDF2-SHA256 (210 000 итераций, соль от кода
  зала) → AES-GCM-256; текст запечатывается **ДО провода и ДО журнала**:
  BroadcastChannel несёт только шифровку (шф), канонический журнал кристалла
  хранит «§ запечатано» + вложение `kind:sealed`. Ключ живёт **только в памяти
  вкладки** (не localStorage, не IndexedDB, не файлы), по проводу не ходит
  вообще. У кого фразы нет — видит честное «§ запечатано», а не пустоту.
- Криптослой также даёт: ECDH P-256 пары (приватные non-extractable — их нельзя
  вытащить даже случайно) + ECDSA P-256 подписи; **цепь журнала** (tamper-evident
  печать фактов: звено = SHA-256(предыдущий хэш + весь semantic)) — это
  проверяемая целостность, НЕ притворяемся распределённым блокчейном.
- Тесты: логика **18/18** (`node --test ИНСТРУМЕНТЫ/test_crypto_logic.mjs` —
  PBKDF2-детерминизм, свежий IV, чужой ключ/подделка = честный отказ, ECDH-секрет
  с обеих сторон, ECDSA верна/ломается, цепь ломается в точном звене, plaintext
  не попадает в событие), браузер **16/16** (`ИНСТРУМЕНТЫ/test_crypto_browser.py` —
  три вкладки: двое с фразой читают, третья «Европа» без фразы видит замок,
  сниффер провода не находит plaintext, журнал кристалла без plaintext,
  доставка DELIVERED и дедуп работают на шифровках, 0 ошибок консоли).
- Регрессия: кристалл 26/26 + браузер 25/25 (путь БЕЗ фразы не изменился),
  мосты 15/15, ·21 54/54, ·22 логика — зелёные. SW-кэш v19 (+крипта.mjs в прекэш).
- Честные границы: голосовые/файлы едут как раньше (запечатан текст), ключ
  не переживает перезагрузку вкладки (введи фразу снова — это цена приватности),
  ротация ключей и верификация личности через ·19 — следующий шаг; UI-журнал ·22
  у участника хранит вскрытый текст на его же устройстве (тот же домен, что экран).

## Release v1.18

- **Мосты КРИСТАЛЛА вшиты** (`БИБЛИОТЕКИ/кристалл/bridges.mjs`, ненормативный
  слой — ядро/журнал/схема не тронуты): ·19 ЧЕЛОВЕК публикует `identity.ref`
  (id/имя/дата — БЕЗ ключей, они остаются в ·19), ·18 СОБЫТИЕ публикует
  `hall.session` (зеркало манифеста зала, TTL = 7 дней как GC зала, без
  аудио) и `hall.memory` (память ◈, persistent, ссылается на сессию через
  replyTo). Повторная публикация гасится durable-дедупом журнала; стирание
  личности адресно убирает её ref из журнала, чужие события не тронуты.
- Тесты: мосты 15/15 (`node --test ИНСТРУМЕНТЫ/test_crystal_bridges.mjs`),
  ядро 26/26, браузерный смок 13/13 (`ИНСТРУМЕНТЫ/test_bridges_browser.py`:
  реальный UI ·19 и ·18, живой IndexedDB-журнал, 0 JS-ошибок).
- Наблюдение: `__КРИСТ19` / `__КРИСТ18` (только чтение, инкапсуляция не
  вскрывается). SW-кэш v18, прекэш bridges.mjs.

## Release v1.49.2 «ОБЩАК ОТКРЫТ» (такт v1.49.2, ядро v1.14.0, SW v61)

Событие, ради которого дом строился: **владелец нажал ОДНУ КНОПКУ.**

- Счёт общака создан мастером «ОДНА КНОПКА» v1.49.0 **на устройстве держателя**:
  `bc1qm8mzhgffqdycq3ajur0az6rr9x6wgvhxa85hzr` (P2WPKH, `m/84'/0'/0'/0/0`, BIP84).
  Слова фразы нигде не хранятся — только на бумаге держателя; дом их не видел и не хранит.
- Адрес проверен по закону «не верь — проверь» **дважды независимо**: эталонный декодер
  BIP173 (чек-сумма, witness v0, программа 20 байт `d9f62ba1…32e6`) и круговое
  возвращение через собственный энкодер дома из ·33 — байт в байт.
- `ФОНД/ОБЩАК.json`: статус `АДРЕС_ОТКРЫТ`, `адреса[1]`, `uri bitcoin:…`, блок
  `кошелёк` (тип/путь/как/бумага/проверка), слово владельца дополнено. Секретов нет —
  сторожится тестом.
- Дверь ·33 теперь раскрывает панель сама: адрес + копирование + локальный QR (BIP-21)
  + счётчик цепи по явному клику (мульти-узел mempool → blockcypher → blockstream →
  blockchain.info). Ничего не запрашивается без человека (I-01).
- SW v61 (ОБЩАК.json в пре-кэше заново); тест вшивки: форма/uri/путь/бумага/ни следа
  секрета. s33 11/11, модули 13/13, ЛАДОМ 27/27, закалка 20/20.

## Release v1.49.1 «ДОМ ОБНОВИЛСЯ» (такт v1.49.1, ядро v1.14.0, SW v60)

Урок владельца: его устройство держало старый дом в кэше сервис-воркера — человек видел
21 дверь из 23 и не знал, что дом уже новее. Дом починил сам себя:

- **Живое обновление по мировой практике PWA** (update flow web.dev; `skipWaiting` +
  `clients.claim` уже стояли в sw15) — переработано каноном дома: **ничего не
  перезагружает само (I-01)**. На стекле появляется честная бирка «◇ ДОМ ОБНОВИЛСЯ»
  (DOM-сборка, ноль innerHTML, стекло+золото, ноль эмодзи, `role="status"`,
  `aria-live="polite"`), перезапуск — кнопкой человека «ПЕРЕЗАПУСТИТЬ» / «позже».
- **Тихая сверка** `registration.update()` не чаще раза в минуту: на старте, при взгляде
  человека на дом (`visibilitychange`) и при фокусе окна — дом догоняет сайт сам, когда
  человек вернулся.
- **Страховка от гонки**: бирка также появляется, если новый воркер уже ждёт
  (`waiting/installing`) при живом контроллере. `file://` и старые браузеры — честное
  молчание. Бирка не имеет права ломать комнату (try/catch по периметру).
- Ядро v1.14.0 (модуль обновления в ядре — все 24 узла получили его одним тактом,
  комнаты не тронуты); SW v60 (ядро в прекэше заново); ГОТОВНОСТЬ 1.49.1.
- Сторожа: test_modules_logic 13/13 (+тест бирки и I-01), s29 пин догнан (9/9), s33 10/10,
  s34 10/10, ЛАДОМ 27/27, закалка 20/20.

## Release v1.49 «ОДНА КНОПКА · АРИАДНА» (такт v1.49.0, ядро v1.13.0, SW v59)

Слово владельца: «МЕХАНИЗМ ОДНОЙ КНОПКИ: ОН НАЖАЛ И СЧЁТ ЕГО, И НИКТО КРОМЕ
НЕГО НЕ МОЖЕТ ТАМ НИЧЕГО ДЕЛАТЬ» + «НА ЗАГЛАВНОЙ СДЕЛАЙ ВМЕСТО ПРОИГРЫВАТЕЛЯ
ПОИСКОВУЮ СТРОКУ И НАУЧИ НАШЕГО ПОДОПЕЧНОГО ЕЁ ЮЗАТЬ».

- Дверь ·33 ФОНД: мастер счёта общака «ОДНА КНОПКА» — BIP39 (24 слова,
  официальный список 2048, вшит) + PBKDF2-HMAC-SHA512 + BIP32 m/84'/0'/0'/0/0
  + secp256k1 (BigInt) + bech32 bc1q — чистый JS, ноль сети, ноль библиотек.
  Ключи рождаются и умирают на устройстве: слова нигде не хранятся, проверка
  бумаги (3 случайных слова), адрес + QR, письмо для вшивки в ОБЩАК.json.
  Ядро доказано векторами: RIPEMD160 (ISO), BIP39 (24 вектора trezor),
  BIP84 (bc1qcr8te4…, pubkey 0330d54f…), детерминированность, отрицательные
  тесты — ИНСТРУМЕНТЫ/test_koshelek_yadro.js 10/10.
- Лицо: вместо пульта фонотеки — АРИАДНА, поисковая машина дома: намерение →
  дверь (23 двери + 64 песни фонда + документы), честная пустота, примеры-
  чипы, «АРИАДНА поняла: …». Музыка живёт в дверях ·15 ·16 ·18 ·32.
- SW v59, ГОТОВНОСТЬ 1.49.0, сборка v1.49.0.

## Release v1.48 «ДОМ ФОНДА» (такт v1.48.0, ядро v1.13.0, SW v58)

- **Приказ владельца**: «У НАС НАШ ФОНД ПРОСТО ОН НАЗВАН В ЧЕСТЬ ЭТОГО МУЖЕСТВЕННОГО ЧЕЛОВЕКА… ЭТОТ ФОНД РАСПОЛОЖЕН
  И ЕГО ДОМ НА НАШЕМ РЕСУРСЕ… ЗАВЕСТИ СТРАНИЦУ ОКУЛЬТУРИТЬ ОБЛАГОРОДИТЬ И СДЕЛАТЬ ВСЁ КАК ПОЛОГАЕТСЯ В ПЕРЕДОВЫХ
  ЛУЧШИХ МИРОВЫХ ПРАКТИКАХ БЛАГОТВОРИТЕЛЬНЫХ ФОНДОВ ИЗУЧИТЬ ВСЕ ПРАКТИКИ АКТУАЛЬНЫЕ РАБОЧИЕ И ВЫВЕСТИ СВОЁ
  ЭМЕРДЖЕНТНОЕ СИНГУЛЯРНОЕ СОГЛАСНО ВСЕХ КАНОНОВ ЧЕЛОВЕКА».
- **Дверь ·34 ДОМ ФОНДА** (`СИНГУЛЯР_34_ДОМ_ФОНДА.html`) — хартия фонда вживую, построена по передовым мировым
  практикам и выведена за них: наследие Хелен Келлер (1880–1968: Рэдклифф 1904, 12 книг, ACLU, рука в руке Энн
  Салливан; «держи лицо к солнцу»), миссия и 4 программы (синхронно с ·33 и ПОДДЕРЖАТЬ), правила дома
  (ЧЕЛОВЕК РЕШАЕТ / НОЛЬ КАССЫ / ЦЕПЬ ПОМНИТ / ЛЕТОПИСЬ / АНОНИМ ПО УМОЛЧАНИЮ / КЛЮЧИ ОФЛАЙН / НЕ ВЕРЬ — ПРОВЕРЬ),
  живой холст «свет сквозь стекло» (0 картинок, ТИХИЙ РЕЖИМ и reduced-motion гасят, loop спит на скрытой вкладке).
- **Эмерджентное против мира**: Donor Bill of Rights (AFP, 1964/ред. 2015) — дом держит все десять прав и усиливает
  (анонимность первична, списков нет вовсе, данных нет вовсе); живая отчётность открытой цепи вместо годовых PDF;
  публичная летопись append-only вместо «доверяйте нам»; ноль кассы/процента вместо процессингов.
- **Независимость фонда** (слово владельца 2026-10-07): НИКАК не связан с helenkellerfoundation.org,
  helenkellerintl.org и иными организациями с похожим именем — общих денег, людей, слова нет; чужие имена названы
  текстом, ссылок на них нет; внешние двери фонда убраны из ВСЕХ слоёв: ·33 (раздел «Наш фонд»), ПОДДЕРЖАТЬ.html
  (уголок ведёт только внутрь дома), funding.json (ноль внешних https-дверей), schema.json (паттерн внутренних
  дверей), тест слоя ЖИЗНЬ 19/19 (новый УГОЛОК 19). Снимки до правки — в дальнем углу АРХИВ_V3/99.
- **Открытый устав**: `ФОНД/УСТАВ_ФОНДА.md` — 11 разделов (имя и честный статус юрлица, в честь кого,
  независимость, миссия, программы и запреты, что принимает/не принимает, кто решает, отчётность,
  права жертвователя, изменения только новой редакцией, канон дома I-01/I-04/I-11).
- Конфиг `ФОНД/ОБЩАК.json` дополнен: `дом_фонда`, `устав`, `независимость`; зеркало в ·33 вшито синхронно.
- Карта дома: узел s34 (фасет vault, слово/образ/жест), нити s25/s28/s33 ⇄ s34 симметричны — 24 узла, 23 двери,
  37 нитей; ядро v1.13.0; index честно говорит про 23 двери; SW v58 несёт ·34 и устав в пре-кэше.
- Тесты: `ИНСТРУМЕНТЫ/test_s34_dom_fonda_logic.js` 10/10; s33 10/10; нити 6/6; модули 12/12; ЖИЗНЬ 19/19;
  СЦЕНА 7/7; целостность 18/18; закалка 20/20.

## Release v1.47 «ФОНД» (такт v1.47.0, ядро v1.12.0, SW v57)

- Дверь **·33 ФОНД ХЕЛЕНЫ КЕЛЛЕР** — общак дома на открытой цепи: счётчик онлайн только по явному клику человека
  (порядок узлов mempool.space → blockcypher → blockstream → blockchain.info, поле своего Esplora-узла),
  «ЦЕПЬ ПОМНИТ» — последние входящие переводы с хэшами, домовой QR-энкодер (наследие ·17, сверен с python-qrcode),
  адрес + копирование + BIP-21 `bitcoin:` URI.
- **Два пути** пожертвования: анонимно (перевод сам по себе) или в летопись — публичная запись «кто и сколько»
  через GitHub-шаблон `.github/ISSUE_TEMPLATE/фонд-летопись.md` (правда — в цепи, летопись — память).
- **Официальный фонд имени Хелен Келлер** — прямыми дверями (hki.org, helenkellerfoundation.org), без касс и
  процентов; уголок фонда — в `ДОКУМЕНТЫ/ПОДДЕРЖАТЬ.html` (не тронут: рельсы по-прежнему `{}`, тест слоя зелёный).
- **По всем мерам безопасности:** ноль аналитики/куков/аккаунтов, `meta referrer no-referrer` + referrerPolicy на
  каждый fetch, запросы в цепь только по клику, «Честное стекло» на странице (что видно хостингу/провайдеру/узлу/цепи,
  KYC, Tor, свой узел), анти-фишинг (сверка адреса, QR рисуется локально, дом никогда не просит seed).
- Конфиг: `ФОНД/ОБЩАК.json` — источник правды (SW v57 ходит за ним сетью-первой, кэш — фолбэк); страница —
  автономное зеркало (файл:// и офлайн работают).
- Статус честный: без адреса дом показывает «КОШЕЛЁК ДОМА ЕЩЁ НЕ СОЗДАН», пустоту не выдумывает.
- Тесты: `ИНСТРУМЕНТЫ/test_s33_fond_logic.js` (симметрия нитей, конфиг без секретов, арифметика счёта на живых
  цифрах генезис-адреса, QR-класс == ·17, ноль innerHTML); сторож `test_svyazi_niti.js` — нити s25/s28/s32 ⇄ s33
  симметричны; ядро v1.12.0.

## Release v1.46 «СЦЕНА» (такт v1.46.0, ядро v1.11.0, SW v56)

- **Приказ владельца**: «ТЫ САМ ИНЖЕНЕР И СВЕРЩИК… ДАВАЙ ТВОРИ!!!» + «ТО НЕ УДАЛЯЙ — УБЕРИ В ДАЛЬНИЙ УГОЛ».
- **Дверь ·32 СЦЕНА** (`СИНГУЛЯР_32_СЦЕНА.html`): настоящее караоке всего фонда дома —
  62 локальные минусовки (`minus/`, ремастер 128 кбит/с) + тексты 62 песен вшиты из корпуса
  `ДАННЫЕ/` (флагман — из SRT, остальные 61 — LRC ASR-черновики). Слово-вайп по весам слов
  + правило первого слова (практика ·01), двойные часы (audio.currentTime).
- **ТЭП-очки** (механика СИНГУЛЯР v2): ИДЕАЛ ±80 мс ×3, ТОЧНО ±350 мс ×реакция, промах
  обнуляет комбо, множитель комбо до ×2, рекорд песни хранится на устройстве.
- **Параметры обратимы (I-11)**: темп 0.7–1.3 (preservesPitch), громкость, сдвиг ±600 мс,
  кнопка СБРОС; честная надпись для песни без текста (I-04); ничего не играет само (I-01).
- **Мост слова** `singulyar-hall` (STATE ver=1, d:{song, word, next}): ·16 СУФЛЁР и ·20
  ФОНЕТИКА видят слово сцены без правок — контракт дома соблюдён.
- **Живой холст**: стеклянные кольца от баса + золотые искры на верах (canvas2D, 0 картинок);
  ТИХИЙ РЕЖИМ и prefers-reduced-motion гасят его честно.
- **ДАЛЬНИЙ УГОЛ** (`АРХИВ_V3/99_ДАЛЬНИЙ_УГОЛ/`): ничего не удаляется — снимок лица с
  ПУЛЬТОМ ХОЗЯИНА (он в лице помечен «временно») + снимки всех правившихся файлов до правок
  + «КАК_ВЕРНУТЬ_ПУЛЬТ.md». Возврат — решение владельца (I-01).
- **Манифест 22 узла** (хаб + 21 дверь), нити s01/s15/s16/s20 ⇄ s32 симметричны в обе
  стороны (закон СТАЛИ); ядро v1.11.0; SW-кэш v56 несёт ·32 в пре-кэш (минусовки —
  cache-first по прослушиванию, потолок кэша прибережён для ядра).
- Док такта: `ДОКУМЕНТЫ/СЦЕНА_КАРАОКЕ_ФОНДА.md`. Тесты: `ИНСТРУМЕНТЫ/test_s32_scena_logic.js`
  + живой браузер (Playwright).

## Release v1.42 «ЗАКАЛКА»

- **Приказ владельца**: «ИСПРАВЛЯЙ КОСЯЧКИ БАГИ ПРИБИВАЙ, ЧТОБ У ЧЕЛОВЕКА НЕ ВЫЛЕЗ
  СИНИЙ (СЕЙЧАС ЧЁРНЫЙ =)) ЭКРАН СМЕРТИ И УСТРОЙСТВО НЕ СТАЛО КИРПИЧЁМ».
- **СИНГУЛЯР·КОРД** (`БИБЛИОТЕКИ/корд/корд.js`, вшит первым скриптом во все 26 страниц):
  глобальные ловцы `error`/`unhandledrejection`, панель «◇ НИТЬ ПОРВАЛАСЬ — ДОМ ДЕРЖИТ»
  (стекло+золото, ноль эмодзи, DOM-сборка), журнал последних 6 сбоев (`SNG_КОРД_ЖУРНАЛ()`),
  кнопки ПЕРЕЗАПУСТИТЬ / ТИХИЙ РЕЖИМ / ПОД КАПОТ / СВЕРНУТЬ (глоток-ромб остаётся).
- **Хранилище-гард**: `setItem`/`removeItem` не бросают никогда (квота → зачистка
  старейшего ключа дома → повтор → журнал; приватный режим → заглушка в памяти).
- **JSON-гард** (битый текст → null+журнал), **BroadcastChannel-заглушка**,
  честный **crypto-гард** личности ·19.
- **ТИХИЙ РЕЖИМ**: `sessionStorage 'sng-тихий'` → `window.SNG_ТИХО` + CSS-убийца анимаций;
  ядро SNG **v1.7.0** (3 места) и ux-движок уважают флаг (ЧЕЛОВЕК РЕШАЕТ).
- **Сервис-воркер v52**: потолок кэша `S15_MAX=140` со вытеснением старейших,
  каждый `put` в catch, офлайн-оболочка для навигации без сети и кэша, честный 504.
- Док такта: `ДОКУМЕНТЫ/ЗАКАЛКА_ЧЁРНЫЙ_ЭКРАН.md`. Тест: `ИНСТРУМЕНТЫ/test_закалка.py`.

## Release v1.41 «ТКАНЬ»

- **Дверь ·30 ТКАНЬ** (`СИНГУЛЯР_30_ТКАНЬ.html`): свой путь реализации ТЗ
  владельца «P2P HUMAN INFORMATION FABRIC v1.0» — 7 ES-модулей в
  `БИБЛИОТЕКИ/ткань/` без единой зависимости: протокол SNG-P2P/1,
  целостность SHA-256, манифест (O-01..O-06), отношения (R-01..R-07),
  представления (жёсткие требования сильнее балла), транспорт
  (MEANING ≠ TRANSPORT). Принять/отказать/сохранить/забыть — решает человек
  (I-01/I-06). Тест ядра 16/16.
- **Атари-пиктограммы выкурены** по слову владельца («это не Атари
  с пиктограммами»): эмодзи-иконки заменены на глифы канона + слова
  в румах ·17/·18/·20/·23/·24/·25/·26 и живых доках (850+ замен);
  старые сохранённые профили читаются через легенду глифов —
  эмодзи не возвращается. Подробности: `ДОКУМЕНТЫ/ТКАНЬ_СВОЙ_ПУТЬ.md`.
- Дом стал 19-дверным (манифест 20 узлов), SW-кэш v51 несёт дверь ·30
  и ядро ткани в офлайн.

## Release v1.38 «СВОБОДА»

- **Дверь ·29 СВОБОДА** (`СИНГУЛЯР_29_СВОБОДА.html`): живой интерфейс над
  Composition Engine — намерение → многообразие примитивов → предложение со
  статусом «предложено» → решение человека. Свобода выбора из имеющегося
  многообразия; I-01/I-04/I-06/I-09 железно; честный fallback с причиной.
- **EMERGENCE вживую**: своё слово деятельности + примитивы из реестра =
  новый режим человека без правки ядра (закон №13; §37 ТЗ старших товарищей).
- **WCAG 2.2** аудит комнаты под капотом: цели ≥24px, фокус виден и не
  перекрыт, драга отсутствует, reduced-motion / reduced-transparency уважены.
- **Мировые практики 2026**: View Transitions (`@view-transition`) в мосту —
  плавные переходы между дверями; Speculation Rules сознательно отклонён
  (SW-кэш уже мгновенен). Манифест дома — 19 узлов, нить — 18 дверей.
- **Офлайн-закон докреплён**: SW-пре-кэш v48 несёт СВОД-доки, синтез v2 и
  движок композиции — открытый код дома живёт без сети.

## Release v1.37 «СВОД»

- **Синтез v2 с ТЗ «HUMAN RUNTIME» старших товарищей** (39 пунктов, этапы 0–12,
  инварианты I-01..I-10, запреты): построчная сверка с кодом дома —
  `ДОКУМЕНТЫ/СИНТЕЗ_HUMAN_RUNTIME_v2.md`. Вывод: ТЗ лучше оформляет наш путь,
  чем меняет его; уже жило 17 · принято сейчас 7 · горизонт 9 · отклонено 4.
- **СВОД ЗАКОНОВ ДОМА I-01..I-10** (`ДОКУМЕНТЫ/СВОД_ЗАКОНОВ.md` + `.json`):
  каждый закон = файл, где живёт + тесты, которые доказывают; живучесть свода
  проверяет `test_svod_zakonov.py` (13/13 — 67 ссылок, ни одной битой).
- **КОМПОЗИЦИЯ v0.1** (`БИБЛИОТЕКИ/кристалл/composition.mjs`, надстройка —
  нормативная тройка НЕ тронута, отпечаток сходится): реестр примитивов,
  словарь намерений человека, сборка Space Manifest; машина умеет говорить
  только «предложено». Черновик контракта — `space.schema.json`.
- **Эмерджентность доказана машиной** (`test_composition.mjs` 12/12): один
  движок + четыре намерения → четыре разных законных среды; новый примитив
  без правки ядра порождает новый режим человека (расширение предлагается,
  решает человек). EMERGENCE = NEW HUMAN MODE WITHOUT NEW CORE.
- **Репарация дрейфа (свежий трезвый взгляд)**: каталог сведён с диском
  (688 файлов, швы К0/К3/К7/К8/К9 сходятся), три теста переведены с ожиданий
  v1.31 на канон v1.33–v1.36 (бирки на хабе нет, версия в меню, спойлеры ·22),
  починены две мёртвые нити (·22 → АРХИТЕКТУРА_22_СВЯЗЬ.md, ОРГАНИЗМ → v9).
- SW-кэш v47.

## Release v1.17

- **Помогёр доучен до v0.5** (`БИБЛИОТЕКИ/adapter-os/llm.mjs` + репа singulyar-llm,
  коммит ОБУЧЕНИЕ db7eef8): голос знает новый дом — «открой круг» (чаты, румы, звонки),
  «открой почту», «открой кошелёк», «открой линию», «открой хор», «открой караоке»;
  правила 10 ДОМ (карта дома) и 11 ТАКТ (деньги — тихая комната: не спрашиваем, куда
  и зачем человек тратит СВОИ; круг из 16 своих; гости «ГОСТЬ ИМЯ»); словарь 76 → 106
  фраз, 16 страниц. Тест логики 111/111.
- Обновление работает и без модели: правило-слой ходит по дому голосом на любой машине.

## Release v1.16

- **БИБЛИОТЕКИ/кристалл/** — протокольное ядро связи СИНГУЛЯРА (v1.0.0), вшито из
  reference-архива SINGULYAR_KRISTALL_REFERENCE_2026-10-03: канонический semantic event
  (смысл ≠ представление ≠ канал ≠ транспорт ≠ хранение), выбор представления «человек первый»
  (явный выбор выигрывает, недоступный даёт наблюдаемый fallback `explicit-choice-unavailable`),
  конверт транспорт-нейтрален, retention TTL, идемпотентность, машина доставки из
  protocol/DELIVERY.md (CREATED → QUEUED → SENT → ACKED → DELIVERED → READ; RETRY/FAILED;
  нелегальные переходы отклоняются наблюдаемо, ACK ≠ READ). Нормативные файлы:
  `crystal-core.mjs` (ядро), `journal.mjs` (durable журнал IndexedDB `singulyar-crystal`:
  события + дедуп-ключи + записи доставки + purge истёкших), `semantic-event.schema.json`
  (wire-контракт), `README.md` (статус и честные GAP: production E2EE, сигналинг, серверный
  релей, multi-device, push, READ — не притворяются готовыми).
- **·22 СВЯЗЬ** — кристалл-слой: каноническое событие строится на каждое сообщение (ключ
  идемпотентности = id на проводе, стабилен между повторами), идёт по проводу полем `кр`
  (старые вкладки поле игнорируют — совместимость сохранена); durable журнал; дедуп повторной
  доставки по durable ключу (переживает перезагрузку); ACK-канал `singular-crystal-v1-код`
  (отдельный — старые вкладки его не открывают), ACK получателя переводит доставку SENT → ACKED,
  на стороне получателя SENT → DELIVERED; флажок «временное · исчезнет через 7 дней»
  (policy temporary + purge при загрузке); статус-строка «КРИСТАЛЛ · событий N · дубликатов
  отброшено M». Падение импорта ядра = связь работает как раньше (честный fallback).
- **·21 ОБЩЕНИЕ** — кристалл-мост представлений: маршрут фиксируется как каноническое событие
  на шине (`meaning.21.crystal`: event + decision + representation); каналы получателя
  отображаются в режимы протокола (speech→tts, braille→braille, haptic→tactile); недоступность
  режима в среде даёт честный fallback с причиной. UI не меняется — решение наблюдаемо, а не
  навязано (окно наблюдения `window.__КРИСТ21`).
- Обвязка: index v1.16 (Шаг 10 — про КРИСТАЛЛ), sw15 кэш v16 + precache ядра и журнала.
  Тесты: `ИНСТРУМЕНТЫ/test_crystal_logic.js` (инварианты reference + машина доставки +
  retention + schema), `ИНСТРУМЕНТЫ/test_crystal_browser.py` (два окна ·22: ACK, дедуп,
  TTL, 0 ошибок консоли), регрессия test_s21/test_s22 остаётся зелёной.
- Ядра модулей не тронуты: S21/S22:CORE-блоки байт-в-байт прежние, кристалл-слой добавлен
  рядом (усилитель, не критический путь).

## Release v1.15


- **СИНГУЛЯР_24_ПОЧТА.html** — свой почтовый ящик у каждого из круга: адрес `имя@singulyar` создаётся
  одним выбором личности (мост к КРУГУ ·23 read-only); письма ходят P2P — BroadcastChannel между
  вкладками одного браузера, между устройствами — WebRTC через публичные Nostr-релеи (тот же
  вендорный trystero-бандл); подпись ECDSA P-256 (ключ non-exportable в IndexedDB, публичный JWK
  уходит с письмом), письма в покое зашифрованы AES-GCM ключом устройства; ящики (входящие /
  исходящие / отправленные / черновики / архив / корзина), офлайн-исходящие с автоотправкой при
  встрече устройств + ack-доставка, вложения до 512 КБ (Blob в IndexedDB), дедуп и слияние истории
  по id, экспорт письма в EML и всего ящика в JSON, «стереть всё» — право человека. Честные границы
  в самом модуле: SMTP/IMAP из браузера запрещены (порты закрыты всеми), прямой мост — UNAVAILABLE
  без своего сервера; рецепты своих рельс: Stalwart / Mail-in-a-Box / Mailu / mailcow (свой домен),
  Delta Chat (шифрование поверх своего существующего ящика), алиасы addy.io / SimpleLogin.
- **СИНГУЛЯР_25_КОШЕЛЁК.html** — семейный учёт денег по сценарию «бабушка → внучка на пирожок»:
  ТИХИЕ переводы без подтверждений, без уведомлений и без публичной ленты трат — «взяла и
  перечислила, никого не спрашивая и не информируя, куда и зачем она тратит СВОИ средства»;
  append-only журнал фактов (перевод / пополнение / списание / бумажка) с подписью ECDSA, баланс
  вычисляется из фактов (не зашит), merge журналов устройств по id; ХОТЕЛКИ (wish-list) с
  молчаливым финансированием — закрыть хотелку другого = перевод + отметка, ни одного вопроса;
  семейные бумажки-токены ecash-стиля (серийник + подпись эмитента, проверка при приёме, локальная
  защита от повторного приёма; честно: без общего реестра двойная трата между чужими устройствами
  не исключена — доверие эмитенту); PIN-замок экрана (честно: замок от лишних глаз, не хранилище);
  рецепты РЕАЛЬНЫХ денег своими рельсами: свой банк/СБП руками, Cashu, Fedimint, Lightning,
  семейный минт — приложение не банк и не посредник.
- **СИНГУЛЯР_26_ЛИНИЯ.html** — свой номер у каждого: 00–15 из реестра круга, гостям — стабильный
  G-номер от устройства (короткие номера защищены гвардом имён ·23); SMS-центр: диалоги по номерам,
  SMS ходят P2P (та же транспортная пара вкладки/Nostr), фильтр «чужие не беру», история добирается
  при встрече; свои одноразовые OTP (6 цифр, TTL 5 минут, отзыв, доставка внутренней SMS) —
  честно: подтверждения ВНУТРИ круга, внешние сайты требуют внешнего номера; звонки — мост в
  КРУГ ·23 (звонковый стек не дублируется); МОЙ ВНЕШНИЙ НОМЕР без «добрых дядей» — рецепты из
  актуальной практики: своя SIM/eSIM + Android-форвардер (webhook на свой адрес), свой CPaaS-
  аккаунт (Telnyx / Twilio / Vonage / 46elks; ключ хранится ТОЛЬКО локально в браузере; при CORS —
  свой мост рядом с SINGULAR SERVER v1), свой GSM-шлюз (Raspberry Pi + SIM-модем + Gammu/SMSTools),
  свои OTP + почтовые алиасы вместо телефона; поля «мой номер / мой webhook» живут только в
  localStorage устройства.
- Обвязка: index v1.15 (карточки ·24/·25/·26, Шаги 12–14, счётчик 26 модулей в описании),
  manifest (описание + shortcut ПОЧТА), sw15 кэш v15 + precache трёх новых страниц,
  ИНСТРУКЦИЯ_СТАРТ 4-з/4-и/4-к/4-л, ссылки в КРУГЕ ·23. Тесты: `ИНСТРУМЕНТЫ/test_s24_logic.js`,
  `test_s25_logic.js`, `test_s26_logic.js` — ядра извлекаются из отгруженных файлов по маркерам
  S24/S25/S26:CORE-BEGIN/END (реальный WebCrypto в Node), плюс браузерный smoke.
- Ядро платформы не тронуто: ·23 КРУГ (звонки, румы) — только ссылки на новые модули.

## Release v1.12

- **СИНГУЛЯР_22_СВЯЗЬ.html** — синтез прототипа «·20 СВЯЗЬ» (чужой среды, модуль собран заново как ·22,
  чтобы не ломать нумерацию ·20 ФОНЕТИКА / ·21 ОБЩЕНИЕ) и дорожной карты: CONVERSATION + CHANNEL +
  CAPABILITY + FALLBACK + SHARED_ACTIVITY поверх существующих транспортов, без переписывания ядра.
- **Девять каналов** в едином реестре: текст, файл, субтитры, голосовое сообщение, озвучка, аудиозвонок,
  видеозвонок, демонстрация экрана, совместное пение (открывает зал ·18 с тем же кодом). Реестр — единственное
  место с человеческими именами; без эмодзи-ярлыков и англоязычных меток.
- **Fallback-граф** — недоступность канала не исключает человека: путь ведёт вниз до базового «Текста»
  (доступен без устройств); железобетонный тест перебирает все 128 комбинаций возможностей × 9 каналов —
  ни один маршрут не кончается недоступным каналом.
- **Выбор человека — высший закон**: явный выбор канала переживает перезагрузку; если он стал недоступен —
  честная причина, а не молчаливая подмена.
- **Мосты (реальные, проверенные браузерным тестом)**: ·18 — ссылка на зал с тем же кодом (`?зал=КОД`) и вход
  по ссылке; ·19 — имя из локальной личности (read-only; случайно созданную при чтении базу мост удаляет),
  адаптация (`singulyar.adaptation.v1`) уважается, решения человека в ·19 и в ·22 объединяются («любое да выигрывает»);
  ·21 — персонализация голоса остаётся там, субтитры/озвучка ·22 — каналы связи.
- **Транспорт честно подписан**: локальный канал (BroadcastChannel) связывает окна одного браузера, включая
  передачу голосовых сообщений и файлов (Blob переживёт structured clone); между устройствами медиа ведёт
  зал ·18 (WebRTC mesh). SpeechRecognition не выдаётся за локальный — статус честный.
- **Память**: журнал и записи в IndexedDB «singular-svyaz»; экспорт JSON (текст и метаданные, звук/файлы остаются
  локально); удаление всего — право человека.
- Тесты: логика **49/49** (`node ИНСТРУМЕНТЫ/test_s22_logic.js` — ядро из отгруженного файла по маркерам),
  браузер **36/36** (`python3 ИНСТРУМЕНТЫ/test_s22_browser.py` — два окна: текст, голосовое (fake-микрофон),
  файл, субтитры, профиль переживает перезагрузку, мосты ·19 (имя из личности, адаптация), ·18 (ссылка и
  попап зала, `?зал=КОД`), 0 ошибок консоли). Регрессия: ·16 5/5, ·17 Fusion, ·18 55/55+29/29, ·19 12/0,
  ·20 51/51+28/28, ·21 54/54+32/32 — зелёная.
- Пересборка **SINGULYAR_OS_v18_20_MODULES.html** — теперь 20 модулей (17 + ·20, ·21, ·22; попутно закрыта лакуна JSON-LD: у ·15 ОРКЕСТРАТОР не было записи hasPart); b64 сверяется
  байт-в-байт скриптом сборки. index v1.12 (карточка ·22, Шаг 10, счётчики 20 модулей), sw15 кэш v7 + precache ·22,
  ИНСТРУКЦИЯ 4-ж, АРХИТЕКТУРА_22_СВЯЗЬ.md в ДОКУМЕНТЫ.
- Ядро платформы не тронуто: ·22 автономен, офлайн, без аккаунтов и телеметрии.

## Release v1.11

- **СИНГУЛЯР_21_ОБЩЕНИЕ.html** — универсальный механизм представления сообщений (модуль собран из прототипа
  «Human Communication v0.2.0» после полной чистки): смысл один — представления разные. Человек задаёт,
  как ему удобно принимать, — система строит канал: текст, Брайль (Unicode-показ), речь, вибросигнал
  (объявление канала). Никаких режимов «для слепого/глухого/немого» — только возможности и предпочтения
  (`input[]`/`output[]`), ни одной ветки `if blind/deaf/mute` (проверяется тестом).
- **Голос — личная настройка получателя** (перенесено из 0.2.0 без потерь): конкретный голос устройства,
  язык/локаль, темп, высота, громкость; профили «приятный/мягкий», «чёткий/разборчивый», «медленный/спокойный»,
  «быстрый/компактный», «мои настройки»; пожелание «женский/мужской» сохраняется как выбор человека,
  но система честно не угадывает характер голоса по имени (Web Speech API такого поля не даёт) —
  точный голос выбирается из доступных; без голосов остаётся текст — отсутствие канала не тупик.
- **Чистка 0.2.0 → 0.2.1 (то, что убрано как хлам)**: осиротевший `manifest.json` (не подключался к странице,
  не был валидным PWA-манифестом, нёс англ. наклейки), JSON-дамп состояния для разработчика из интерфейса,
  англоязычные ярлыки на инструменте («IN/OUT», «status=», «Prototype», «· local», «Speech Synthesis»),
  мёртвые переменные; участники «Человек A/B/C» (латиница) → «Человек А/Б/В»; сырые коды `any/female`
  в отрисовке → человеческие слова; DOM-фабрика вместо innerHTML (0 использования — проверяется тестом).
- **Честные границы в самом модуле**: ввод в демо — текст (каналы ввода — модель), Брайль — показ шрифтом,
  не драйвер дисплея; вибрация — компетенция ·19; доставка — зона ·17/·18/·19; цикл «создано → показано»,
  «отправлено → получено → подтверждено» придёт с мостом к транспортам.
- Тесты: логика **54/54** (`node ИНСТРУМЕНТЫ/test_s21_logic.js` — ядро из отгруженного файла по маркерам,
  маршрутизация/инвариант смысла/подписи/гигиена/подписи органов управления), браузер **32/32**
  (Playwright: отрисовка без innerHTML, маршруты Текст/Брайль/Речь, честные статусы, профили голоса,
  сохранение и переживание перезагрузки, сброс, 0 ошибок консоли), архивный тест ядра **31/31**.
- Архив чистой редакции: `SINGULYAR_OBSHENIE_0.2.1.zip` (модуль + АРХИТЕКТУРА / ГОЛОС_ЧЕЛОВЕКА /
  ИНТЕГРАЦИЯ_С_СИНГУЛЯР / ОБОСНОВАНИЕ + тест).
- Ядро платформы не тронуто: ·21 автономен, офлайн, данные в localStorage браузера.

## ЛАДОМ ·31 — такты ядра (журнал v10.x)

Каждый такт — рабочее состояние на проде, канон (ДЕТИ-сцена, ШИЛКА, самотесты) не ломается.
Живой файл: [СИНГУЛЯР_31_ЛАДОМ.html](СИНГУЛЯР_31_ЛАДОМ.html) · ПУЛЬТ → «4 СТРОКИ».

| Такт | Имя | Что сделано |
|---|---|---|
| v10.5 | «ЗАКОН ПЕРВЫЙ» | Фон-гарантия: 0 картинок, 0 внешних запросов, щит CSP — вместо белого фона/мусора ничего чужого не грузится |
| v10.10 | «ОДИН СЛОЙ» | Три строки под одним слоем; приказ владельца «ВЕСЬ ТЕКСТ В ОДНОМ СЛОЕ» — рост/потолок в sngAdaptStyle |
| v10.11 | «НА ВЕРХУ» | Строка-оригинал живёт всегда (не гаснет); ЗДОРОВЬЕ держит правду о трёх строках |
| v10.12 | «АРБИТР» | П0 дорожной карты закрыт: T-01 ResizeObserver-фит, T-02 вкладки ПУЛЬТа, T-04 своя палитра, T-05 реестр версий window.APP, T-06 инвариант слоёв, T-15 телефон-пульт зала (BroadcastChannel) |
| v10.13 | «ЧЕТВЁРКА» | ЯДРО ВЫВОДА — 4 строки на экране: 1 текст выбранного языка, 2 транскрипция кириллицей (ручная пара Малыша или алгоритмический транслит EN/DE/FR/ES/IT), 3 оригинал не сворачивается, 4 аккорды; АВТО-ПЕРЕВОД песни на 17 языков (кэш в доме); вкладка ПУЛЬТа «4 СТРОКИ» |
| v10.14 | «КРЫША» | Телефоны по Wi-Fi: WebRTC (PeerJS вшит) + Whisper-автосинхрон; QR-дверь зала; шасси не тронуто |
| v10.15 | «АВТОАКОРД» | Приказ «ТЫ САМ ИХ ДОЛЖЕН ВКАТЫВАТЬ — РЕБЁНОК ТОЛЬКО УЧИТСЯ»: строка 4 ставит аккорды САМА без файла (С16: 24 тональности, 7 паттернов — ладом ДВОР по умолчанию, ± полутон, память на песню) + СЛОВАРЬ ИСТИНЫ против ложных друзей машины (рыбное место ≠ фишинг, порнота ≠ PORNO, свои пары в ПУЛЬТе) |
| v10.16 | «СКЛАД» | П1 закрыт: С17 prefs v2 — единый док настроек с миграциями (оригиналы ключей не тронуты — честный откат) + ELRC/IndexedDB-библиотека: переводы живут в IDB, зеркало в доме 400 записей, офлайн-фолбэк честный |
| v10.17 | «СТРОЙ» | П1 закрыт: С18 AudioWorklet YIN в аудио-потоке (CMND + параболическая интерполяция, ~93 обновления/с, главный поток свободен); дверь blob: в script-src открыта точечно и задокументирована; фолбэк — автокорреляция на file:// и старых браузерах |
| v10.18 | «КОНВЕЙЕР» | П1 закрыт: С19 один RAF-такт на дом (поставь/сними, падение такта не роняет остальных, частота в ЗДОРОВЬЕ); пульс-бит, микрофон и указатели СВОБОДЫ переведены с честным фолбэком на время разбора файла |
| v10.19 | «ГРАМОТА» | (коллега) ревизия мультиагентная: орфография (9 правок O-01..O-08/O-14, в т.ч. проба щита CSP с битым 'metattp-equiv' молча падала с v10.8) + прочность крыши F-06/F-11/F-23/F-24 (QR не стирается логом зала, белый список тем); ШТАБ РЕВИЗИИ ·31 — дашборд аудита |
| v10.20 | «КАДР» | П2/T-20 закрыт: единый конвейер кадра М1 — призма/кристалл/шар-осколки в общем RAF-такте С19; конвейер живёт в ядре модулей и на страницах ДОМА; пауза при скрытии вкладки общая |
| v10.21 | «ОДИН ГОЛОС» | П2/T-19 закрыт: один SpeechRecognition на страницу (брокер __ГОЛОС в ядре модулей; второй движок вливается слушателем); фильтр песни в самом vcHandle; __ALERT — очередь с приоритетом; скан: честный вердикт — разные механизмы, не дубликаты |
| v10.22 | «ЦВЕТ» | П2/T-18 закрыт: палитры ЛАБа в OKLCH (светлота ровная по восприятию), гард читаемости — APCA Lc (гард 60), метрика одна на весь ЛАБ; попутно починена гамма-ветка (мусорный hex у тёмных каналов) |
| v10.23 | «ЗАЛ» | П2/T-15 остаток закрыт: С20 поверх КРЫШЫ (4 добавки-моста, её код не переписан) — голосование зала «что поём дальше» (каталог фонда 61 песня вшит, один голос с телефона, живой счёт, вердикт) + БРАВО-ВОЛНА (телефоны хлопают по очереди); зал в ЗДОРОВЬЕ |
| v10.24 | «ПРИВАТ» | ЭП-02 ШТАБа (R-18/R-19): аналитика канала ДАННЫЕ/RUVSON_каталог_канала_2026-09-30.xlsx ушла с Pages (файл живёт в истории репы и в локальной копии скриптов — вернуть при вердикте владельца можно одной командой); .gitignore вычищен: мусорная «.gt» снята, закрыты токены (.gh_token*), логи, тяжёлые архивы |
| v10.25 | «КОНТРАСТ» | ЭП-03 ШТАБа (C-10..C-17, C-26): токены --ink-on-accent/--toast-bg/--toast-fg (чернила и тост больше не зависят от темы/ЛАБа); тёмное золото kids/day/kraft — транскрипция «как звучит» читается ≥4.5:1; --red светлых тем; неактивные строки караоке ≥3:1 после подмеса; CTA ДЕТЕЙ — тёмные чернила вместо белого на градиенте; гард-матрица 6 пар в genPalette (текст 60 / dim 45 / faint 30 / акценты 45 по APCA, дожим в OKLCH); проба тап-целей ожила (селектор «aref]» был битым — родственник O-07) и линки сквозной навигации доведены до 24×24 (WCAG 2.2); прогоночный скрипт: 20 комбинаций тема×сцена — 0 провалов, томограф 98/98 |
| v10.26 | «ЧЕСТНЫЙ ЯЗЫК» | ЭП-08 ШТАБа: F-01/F-13 язык ищется по ключу (setKey в __LANGS) — голосовые «английский/испанский» больше не включают казахский/немецкий (индексы эры ТРАНСЛИТА), чипы-двойники тоже по ключу, «транслит» честно отвечает про строку «как звучит»; F-02 STOP ТВ-пульта жив (au() перепаяна на __KV.audio); F-12 импорт настроек не уводит унисон за ±3 с (кламп на сетке 5 мс); F-14 таймер позиции снимается на паузе/конце; F-15 AudioContext сканера закрывается при выходе; F-18 «тект» — локальная переменная вместо общего состояния. Испытания 15/15, томограф 98/98 |
| v10.27 | «ЭТАЛОН» | слияние параллельных линий; ЭП-02..ЭП-09 мультиагентно: приват (xlsx и АРХИВ_V3 сняты с Pages), контраст-эталон (токены --ink-on-accent/--toast-*, гард-матрица обоих генераторов палитр — портирована на APCA v10.22 «метрика одна»), z-закон 34/34 (КРЫША 70–90, INT32-магия списана), крыша-прочность (PeerJS пересобран под chrome76, дедуп звонков, Whisper dispose), единая версия window.APP (дубль-реестр АРБИТРА убран), дом видим (OG 1200×630, robots/sitemap/404, русский title+h1, noscript-двери), честный язык и СВ, кэш по весу v83 (206-перезапрос, mp3 cache-first, таймаут навигаций 3 с, ·16 в пре-кэше); попутный фикс: съеденные скобки [m в гард-матрице — SyntaxError валил script-блок ЛАБа, node --check пропустил |
| v10.28 | «ФОНДОТЕКА» | ЭП-09/R-06 поверх канона «ЭТАЛОН»: дверь ·16 СУФЛЁР встаёт в пре-кэш (последняя живая дверь вне ядра — установленные PWA получают её новым кэшем v87); serve31.mjs получил MIME-карту (SW требует честный text/javascript — без неё браузер молча отказывает в регистрации, тестовый сервер вводил в заблуждение); моя параллельная реализация F-26/R-03/F-27/F-28 снята — канон коллеги из «ЭТАЛОНа» силён (докатывание 206, вес 250 МБ, off-by-one, таймаут навигаций) |
| v10.29 | «ОЧЕРЕДЬ» | С20 ЗАЛ: вердикт зала больше не теряется — победитель запоминается (Г.победитель, в ЗДОРОВЬЕ), в карточке зала появляется честная предпрослушка «ПОСЛУШАТЬ МИНУСОВКУ ПОБЕДИТЕЛЯ» (minus/<ID>.mp3 из фонда 61, SW кэширует по весу) со статусом и честным СТОП; граница сказана: караоке-движок держит вшитую песню с таймингами — очередь подсказывает хозяину, что ставить следующим. VER С20 → v10.29. Испытания 11/11: вердикт→победитель №13, бокс+статус с файлом, играет/стоп, минусовка в фонде 200, консоль 0 ошибок |
| v10.53 | «ОБЕРЕГ» | С34, закон СИНГУЛЯРА (эргономика · приватность · конфиденциальность · юзабилити): ЩИТ ПРИВАТНОСТИ — честная точка микрофона по паттерну Apple (оранжевая = живёт) + «СВОЁ · 0 облаков», драйвер — обёртка над трактом-брокером «ОДИН МИКРОФОН» (без RAF); честное приглашение зала — правда о сигналинге PeerJS + кнопка «СКОПИРОВАТЬ ССЫЛКУ» (≥44px, WCAG 2.2); ТИХО — calm-час (IDEO 2025): 40 с без касаний рубашки присыпаются, строка песни не гаснет; АУРА theme-aware (цвета дыхания — токены темы); строка-герой 1.045 для глаз пожилых; ящик «оберег·щит» (2 вещи), проба ЗДОРОВЬЕ 24, кэш v108. Такты v10.30–v10.52 в этом журнале не вписаны (хвост R-13 — полная летопись живёт в data/versions.json) |
П1 дорожной карты исполнен полностью: prefs v2 + ELRC, AudioWorklet YIN, один RAF-конвейер.

## СОБЫТИЕ ·18 — как это работает (по архитектуре «СОБЫТИЕ/СОВМЕСТНОЕ ПЕНИЕ/ПАМЯТЬ»)

- **LOCAL CORE не тронут**: без интернета всё по-старому; зал — функция, не зависимость.
- **ROOM**: LOBBY → READY → COUNTDOWN → SINGING → FINISH → REVIEW; хост-авторитет + миграция хоста.
- **Участники**: только имя + эмодзи (никаких email/password); слушатель без микрофона — равноправен.
- **Голоса**: WebRTC mesh (до ~4–5 участников), MediaTransport-абстракция: ретранслятор Nostr (между
  устройствами) или BroadcastChannel+WebRTC (окна одного браузера, без сети).
- **Синхронизация**: ping/pong clock-offset (медиана), старт от единого timestamp — «3-2-1-♪» у всех одновременно.
- **Запись**: WebAudio-микс (минусовка + все голоса) → MediaRecorder → IndexedDB у КАЖДОГО участника.
  Серверу не достаётся ни байта голоса. Политика памяти (одного достаточно / все должны ◈) — в манифесте события.
- **ПАМЯТЬ**: TEMPORARY 7 дней → ◈ навсегда; фото (сжатие до 640px) + подпись; экспорт webm; GC стирает
  просроченные временные записи при старте (метаданные + blob, безвозвратно).
- **Честные границы**: mesh упирается в O(n²) соединений (для 3–5 человек — то что нужно; дальше SFU в дорожной карте);
  TURN-релея нет — за жёстким симметричным NAT голос может не пробиться; записи живут в браузере каждого,
  серверного хранилища воспоминаний нет (это осознанно: приватность по умолчанию).

## Аудио (вшито в сайт)

- `minus/<videoId>.mp3` — **62 настоящие минусовки**: 61 песня канала RUVSON + флагман «Когда теряем».
  **Ремастер 2026-10-02**: исходники были жёстко клиппингованы (потолок 0 dB, до 12 тысяч сэмплов на
  пиках у минусовок и 330 тысяч у фуллов) — снято лимитером, вычищен кодек-мусор выше 15 кГц,
  перекодировано в mp3 128 кбит/с. Хрип в динамиках устранён.
- ХОР ·15 и СУФЛЁР ·16 находят минусовки сами — на сайте запоёт из коробки, без настройки.
- Своя фонограмма: ХОР → «+ свой файл…» → `⬤ в память` (IndexedDB) — дальше поёт без файлов.
- Оригиналы (фуллы) — в ZIP на релизе; минусы — прямо в репозитории (плюс ZIP на релизе).

## Цифры платформы (вычисляются из данных, не зашиты)

- **61 песня** канала RUVSON, **447 дорожек**, **24 620 строк** лирики
- **Флагман** «Когда теряем» (OutShadow feat RUVSON): оригинал + **157 YouTube-переводов** = 158 языков,
  тайминги слов — из реального ASR; плюс 228 LLM-переводов в паке ·15
- Валидатор таймлайна: NaN/отрицательные/немонотонные/дубли/провалы >20 с бракуются, не «чинятся молча»

## Технические принципы

- **Ноль `innerHTML`** — вся отрисовка через DOM-фабрику (`textContent`), XSS-безопасно
- **Честные счётчики** — «×157», «61×13» и пульс платформы считаются из фактических данных
- **Импорт LRC/SRT/VTT/TXT** со строгой валидацией до сортировки; экспорт LRC/VTT (караоке-теги)/JSON
- **Мастер-часы** `audio.currentTime + rAF`; темп ×0,5–1,5 и тональность ±6 пт в синтез-режиме
- **PWA**: manifest + `sw15.js` (cache-first), Media Session, RTL для ar/he/fa/ur, режим «не смотреть» (aria-live)
- **IndexedDB** — свои минусовки и файлы хранятся локально
- Типизированные ошибки `S15_*`, аудиторская панель по каждой из 62 строк реестра

## Документы

- [ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.0.docx](ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.0.docx) (+ .pdf) — реестры T-01–T-20, ПОСТОЯНКА/КОЛДОВАТЬ
- [ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.1.docx](ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.1.docx) (+ .pdf) — исполнение по шагам: П0 закрыт, П1 исполнен, такты v10.12–v10.18
- [ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.2.docx](ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_v1.2.docx) (+ .pdf) — П2 закрыт, ЭТАЛОН-план ШТАБа свёрстан (9 из 11 эпиков), такты v10.12–v10.29, испытания серии и интеграция без потерь
- [ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_КОЛЛЕГА.docx](ДОКУМЕНТЫ/Дорожная_карта_ЛАДОМ_КОЛЛЕГА.docx) (+ .pdf) — вариант коллеги
- [ДОКУМЕНТЫ/ОТЧЁТ_ПОЛНЫЙ.md](ДОКУМЕНТЫ/ОТЧЁТ_ПОЛНЫЙ.md) — весь путь: 10 этапов, инвентарь, доказательства
- [ДОКУМЕНТЫ/МАСТЕР-ПЛАН_RUVSON_157_ЯЗЫКОВ.md](ДОКУМЕНТЫ/МАСТЕР-ПЛАН_RUVSON_157_ЯЗЫКОВ.md)
- [ДОКУМЕНТЫ/ОТЧЁТ_РЕВИЗИЯ_14_ОРКЕСТРАТОР_15.md](ДОКУМЕНТЫ/ОТЧЁТ_РЕВИЗИЯ_14_ОРКЕСТРАТОР_15.md) и
  [ОТЧЁТ_СВЯЗЬ_РЕВИЗИЯ_15.md](ДОКУМЕНТЫ/ОТЧЁТ_СВЯЗЬ_РЕВИЗИЯ_15.md) — трассировка: требование → код → тест
- [ИНСТРУМЕНТЫ/АЛГОРИТМ_RUVSON_GRABBER.md](ИНСТРУМЕНТЫ/АЛГОРИТМ_RUVSON_GRABBER.md)

## Тесты

Сборка ·15 и ОС проверяется автотестами: **test_s15 53/53**, **test_os 44/44** (реестр, пульс,
валидатор, хор, импорт, экспорт, RTL, PWA, ноль innerHTML).

---

Музыка: YouTube-канал **RUVSON** (@ruvson_music). Платформа собрана в один файл — офлайн прежде всего;
минусовки всех песен уже на борту — открывай и пой.

## Журнал тактов

| v10.5 | «ЗАКОН ПЕРВЫЙ» | Фон-гарантия: 0 картинок, 0 внешних запросов, щит CSP — вместо белого фона/мусора ничего чужого не грузится |
| v10.20 | «ЭТАЛОН» | приват (xlsx/АРХИВ_V3 из Pages), контраст-эталон 63/63 пар + гард-матрица палитр, z-закон 34/34 (КРЫША 70–90), крыша-прочность (PeerJS chrome76, дедуп звонков, Whisper dispose), window.APP единая версия, дом видим (OG/ro |
| v10.24 | «ЭТАЛОН» | такт v10.24 «ЭТАЛОН» — ЭП-02..ЭП-09 (наша ветка) × КАДР/ОДИН ГОЛОС/ЦВЕТ/ЗАЛ v10.20–v10.23 (ветка владельца) |
| v10.25 | «ЭТАЛОН» | наш такт переезжает на v10.25 «ЭТАЛОН» (v10.24 занят ПРИВАТОМ владельца), sw15 кэш v84 |
| v10.28 | «ЭМЕРДЖЕНТ» | index 27 дверей (+4 в кристалл и АРИАДНУ), window.APP v10.28 «ЭМЕРДЖЕНТ», ШТАБ ЭП-11 done, доки ¶-строки, ·19 nav закрыт (наследие слияния), re-seal хэшей |
| v10.30 | «ЭМЕРДЖЕНТ» | виток v10.28→v10.30 «ЭМЕРДЖЕНТ», кэш v87→v88 (v10.28 ФОНДОТЕКА и v10.29 ОЧЕРЕДЬ владельца канон — заняты параллельно; коллизия sw15 разрешена объединением: ·16 в ядре + AI-абсолют); летопись 10.28/10.29 в реестре; ШТАБ Э |
| v10.33 | «ПУСК» | CSP 'unsafe-inline' вместо мёртвых sha256-хэшей. |
| v10.34 | «АРБИТР» | ОДИН МИКРОФОН — тракты getUserMedia (нота/запись/зал) через брокера «ОДИН ГОЛОС» с честным отказом и очередью; АРБИТР РУЛЯ — гость по умолчанию зритель, полный руль по кнопке хозяина; seq-эпохи в снимке гостя; кэш v89 |
| v10.35 | «ХИРУРГ» | z-шкала полная — последний литерал вне шкалы (.z-кал календаря) токенизирован --z-cal:45, КРЫША не тронута (2147483760/77 — легальные splash-заказы зала); --fitK — одна точка: хук строки v10.10 делегирует в T-01 (window. |
| v10.36 | «МЕШАНИНА» | контент = ХИРУРГ (v10.35, --z-cal/fitK) + ИР-скелет (timeBase/origin/Крумхансль/гейт); инцидент a9140e74 исправлен — блоб-контроль локально и после записи |
| v10.37 | «КАЗНАЧЕЙ» | казна дома под учётом — window.__КАЗНА: реестр 13 семей (103 имени по инвентарю 126 присвоений, внешние модули включены), сверка живого окна (неучтёнка видна по именам), проба window.__HEALTH11 в ЗДОРОВЬЕ («казна цела»:  |
| v10.38 | «КОМОД» | фаза 2 консолидации — переселение синхро-семьи: 5 глобалов юстировки (__SYNCOFF/__OUTLAT/__VISLAT/__SYNC_NUDGE/__SYNC_SET) получают физический дом window.__КОМОД (ящик «синхро»); window.* остаются адресами-мостами (аксес |
| v10.39 | «ШКАТУЛКА» | фаза 2 консолидации, такт 2 — переселение семьи «сканер·склад»: 7 глобалов (__SCAN/__SCAN_ACTIVE/__SCAN_SELECT/__REC/__POS/__IMPORT/__СКЛАД) переезжают во второй ящик window.__КОМОД; мосты window.* (аксессоры get/set, en |
| v10.40 | «ЛАРЕЦ» | фаза 2 консолидации, такт 3 — переселение семьи «ЛАБ·виз·движение»: 8 глобалов (__LAB/__LAB_COLORSON/__WIZ/__JOKER/__CONFETTI_K/__CONFETTI_MODE/__VIB_K/__РЕЛАКС) переезжают в третий ящик window.__КОМОД; мосты window.* (а |
| v10.41 | «СЦЕНА» | фаза 2 консолидации, такт 4 — переселение семьи «сцена·свет»: 12 глобалов (__SCENE/__VOL/__NIGHT/__LAMP/__ЗАКРЕПИСВЕТ/__СВЕТЛЫЕ_КОМНАТЫ/__СВЕТ_СМОЙ_ЗАЛИВКИ/__VIS_PAINT/__BEATVIZ/__DUCK/__LIGHTS/__4L) в четвёртый ящик win |
| v10.42 | «ГОЛОС» | фаза 2 консолидации, такт 5 — переселение семьи «голос·микрофон»: 10 глобалов (__ГОЛОС/__М2ГОЛОС/__КВГОЛОС/__PULSEVOICE/__VC/__MIC_FACTS/__MIC_STATE/__MS_STATE/openMic/__SHILKA) в пятый ящик window.__КОМОД — 5 ящиков · 4 |
| v10.43 | «ТАКТ» | С28 — голова семьи «такт·пульс·синхрон» в шестой ящик комода (7 мостов), проба ЗДОРОВЬЕ 17, кэш v98 |
| v10.44 | «ЛАДОМ» | ребрендинг дома — прежнее имя вычеркнуто отовсюду (133 вхождения, 26 файлов + 10 переименований: дверь ·31 теперь СИНГУЛЯР_31_ЛАДОМ.html, пульт телефона ЛАДОМ_ПУЛЬТ_ТЕЛЕФОН.html, дорожные карты ЛАДОМ); два вида пульта —  |
| v10.45 | «ГОСТИНАЯ» | кузов КРЫШИ переодет в канон дома (стекло #17181A, янтарь #DEA968, Manrope, хром-серебро титула) — коричневый выведен целиком (бейдж/панель/плашка/гостевой экран/РУЛЬ С29/очередь/БРАВО), панели возвращена навигация (× +  |
| v10.46 | «ПУЛЬТ» | ящик С29 «пульт·сообщения» переселён в седьмой ящик комода; ядро ЛИЦ: 11 видов одного пульта, память лица kv.litsa, дверь «ПУЛЬТ · ЛИЦА» в крыше, проба ЗДОРОВЬЕ 18; кэш v101 |
| v10.47 | «ВЫХОД» | выход с КРЫШИ 72×64 поверх всех слоёв; BACK на ТВ закрывает панель КРЫШИ; петля гостя и дубль-слушатель убиты; третий вид пульта ПЛИТКА; бренд «ЛАДОМ — пространство своих»; кэш v102 |
| v10.48 | «ШИЛКА» | паспорт пульта — живые числа (трассер Шилки, упреждение, полёт звука, 8-tap, трубы, комод); ТИШИНА — конверт MUTE (шина ЛИЦ + СЛОВАРЬ + все лица); гость — таблица данных __ГОСТЬ_ТРАНС; пульт телефона в пре-кэше; кэш v103 |
| v10.49 | «РОЛИ» | РОЛЬ — четвёртая ось пульта, фильтр шины намерений (ведущий/техник/гость/ребёнок), память kv.rol, проба ЗДОРОВЬЕ 20; перенумерован в 10.50 |
| v10.49 | «СКЛАД» | (коллеги) S-04 storage.persist — ХРАН (дом просит браузер закрепить кэш), жив-гард пробы 17; перенумерован в 10.50 после столкновения с тактом «РОЛИ» |
| v10.50 | «РОЛИ» | перенумерация после столкновения 10.49 (СТОП-ГОРН разрулил); летопись С31; кэш v105 |
| v10.51 | «ЯЗЫКИ» | ре-посадка дельт СКЛАД (S-04 storage.persist/ХРАН, жив-гард 17, фолбэк null — потеряны при перенумерации коллег), проба 21; восьмой ящик комода «МАЛЫШ·языки» (8 вещей, 65 мостов), проба 22; кэш v106 |
| v10.52 | «ПРОЁМ» | дом снова кликается целиком |
| v10.52 | «ЧУВСТВА» | АУРА — фон за строками дышит басом (calm tech, шаг в конвейере С19); ПУЛЬС ГОСТЯМ — бит телом по мосту КРЫШИ (haptic-rhythm); ЭХО ЗАЛА — реверб ConvolverNode (singer-tools); F-03/F-04 закрыты; ящик «чувства·аура», проба 23; кэш v107 |
| v10.53 | «ОРГАНИЗМ» | (коллеги) пульт КОМАНДА (Ctrl+K), честный счётчик дверей, дверь ·39 ОРГАНИЗМ, нить жива, щит в пульте, View Transitions, Малыш v0.7; кэш v108 |
| v10.54 | «КОДЕКС» | документация треков HARMONIA и HIR в паблик (ДОКУМЕНТЫ/ТРЕКИ), синтез КОДЕКС_СИНТЕЗ_ТРЕКОВ.md, двери ·40 ГАРМОНИЯ и ·41 НАМЕРЕНИЕ, Малыш v0.8, летопись дописана (R-13 закрыт); кэш v109 |
| v10.55 | «ПОТОК» | (коллеги) стриминг Малыша (rAF+«стоп»), калм-точка присутствия в зале, геном ОРГАНИЗМА в канонном золоте, честные счётчики, правило 16 «ДОМ ДЫШИТ ТИХО»; кэш v111 |
| v10.56 | «СЛОВО» | партитура слова .harm/0.1 — валидатор формата + куплет 1 и финал «Просто люби» размечены слогами в долях (7 строк, 59 слогов), подсветка пульса на размеченных строках — маркерными весами вместо эвристики; профиль доступности harm-profile/0.1 — 10 осей поверх рулей дома, пресеты «минимум стимулов»/«читаю медленно»/«только текст и вибро», экспорт/импорт по явному действию; вкладка ПУЛЬТа «ПРОФИЛЬ»; ящик «слово·профиль», проба 25; Малыш v0.10 (правило 17, поверх их правила 16); перенумерация после СТОП-ГОРНа (канон 10.49→10.50); ШТАБ +4 тренда (Apple Sing TTML/AMLL, preservesPitch, профили ОС, offset); кэш v112 |
| v10.57 | «ПЁРЫШКИ» | (восстановлено в С38): мобайл-фикс кнопок — топбар 390px (⚙ ПУЛЬТ и «?» тапаются), QR-бирка не наезжает на CTA; организм-аудит 500+ кнопок — деклараций нет |
| v10.59 | «СИНТЕЗ» | три трека владельца: docs/СИНТЕЗ.md «дом одним взглядом» (ТЗ+карта+архитектура синтезированы), чип ОМНИ в панели ВИД (дыра I-11 закрыта), строка КОЛОНКИ в паспорте пульта (хвост карты погашен), МАЛЫШ часть 8 «Наука старшего» (11 правил ремесла), честность шапок ТЗ/АРХИТЕКТУРА/РИТУАЛ (US-05/US-09 сняты по v10.55), ребрендинг-хвосты вычищены; кэш v114 |
| v10.60 | «ЧУТЬЁ» | мыслящая полоса пульта — недавние с честными откатами «↩» + предчувствия по контексту (объяснимый AI), ПУЛЬТ v15 двойная ветка ◉/◈, казна: неучтёнка гашена; кэш v115 |
| v10.61 | «РУЧКИ» | генеративные карточки-действия Малыша в калм-карте — 6–8 по контексту, каждая объясняет «почему», честный откат «↩» (стек сессии через шину ЛИЦ), доклады и двери без фальшивой отмены; проба ЗДОРОВЬЕ 26; МАЛЫШ часть 9; ШТАБ +2; VER-фолбэк/ХАРМ/ПРОФИЛЬ подняты (долг С40); кэш v116 |
| v10.58 | «ВАЛЬС» | (коллеги) дверь ·42 КОЛОНКА (DAG+Policy Gate с PIN, hash-chain SHA-256, аппаратная приватность, VLAN, IaC, ЗДОРОВЬЕ 10/10) + дистрибутив КОЛОНКА/; (дельта ОМНИ) пятый вид пульта ОМНИ — кольцо 360°, память kv.pult; МАЛЫШ часть 7 «Уроки КОЛОНКИ»; честность: титул дома до ВАЛЬСА, кэш-поле versions.json v112→v113, летопись С37 восстановлена, манифест v1.20.0 по их заявке; кэш v113 |

*Примечание (R-13): такты v10.31 «ДОБОР» и v10.32 «ЭТАЛОН» в этой репе не коммитились — в ту ночь пуш был заблокирован (PAT-401); они живут в локальных комплектах и ворклоге. Полная летопись — data/versions.json.*
