# ЖИВАЯ НИТЬ · такт v1.39.0

> Дата: 2026-10-06. Ядро: `singulyar-modules.js` v1.5.0. Кэш SW: `v49`.
> Правило свода действует и здесь: закон живёт в коде и доказывается тестом —
> `ИНСТРУМЕНТЫ/test_svyazi_niti.js` (запуск: `node --test ИНСТРУМЕНТЫ/test_svyazi_niti.js`).

## 1. Откуда пришла идея (транспарант проекта)

Идею «нити как маршрута» сформулировала другая ИИ-система при разборе HTML-лица
дома — владелец показал ей код и попросил «дать своё». Её формулировка:

> «Сейчас нить только открывает дом. Она не связывает двери между собой.
> Если добавить к каждой двери поля — связи (с какими дверями соединена) и
> состояние (пройдена/нет) — нить станет живой: будет расти по мере
> прохождения и ветвиться там, где двери соединены. Это превращает сайт
> из меню в лабиринт с памятью».

Синтез по закону дома: чужая сильная мысль + наш канон = наше слово.
Что взято как есть: связи между дверями и память пути.
Что переработано по канону Human-First: состояние — **не замок, а память**.
Внешняя ИИ предлагала «состояние: пройдена/не пройдена/текущая» — у нас
ни одно состояние не запирает ни одну дверь («НИКАКОГО НАСИЛИЯ НА ДЕЙСТВИЯМИ»,
«дверь открывается по нити, не по указанию»). Память пути — свет, не фильтр.

## 2. Модель

Нить живёт в трёх местах, и везде она — проекция манифеста, не отдельная сущность:

1. **Манифест** (`МОДУЛИ` в ядре): у каждой двери поле `связи: ['sXX', …]` —
   кто с кем соединён. Манифест — истина; связи — факты кода комнат, не фантазии.
2. **Лицо дома** (осколки на орбитах): связи рисуются линиями SVG-слоя,
   который лежит ПОД осколками. Осколок перетащили — нить тянется следом
   («куда человек поставил, там и стоит» — закон сохраняется и для связей).
3. **Путь человека** (localStorage `singulyar-нить-v1`): карта первых касаний
   дверей. Append-only: перезаписей нет, визит живёт всегда.

## 3. Карта связей (18 дверей, 20 нитей)

Связи выведены из фактов кода комнат (поля `кратко` манифеста) — каждая нить
объяснима, ни одна не придумана:

| Нить | Основание |
|------|-----------|
| ·01 ⇄ ·02(РЕЗОНАНС) | один флагман: колесо 157 узлов — та же ДНК голосов |
| ·01 ⇄ ·02(ФАБРИКА) | платформа караоке ↔ генерация песен |
| ·02(РЕЗОНАНС) ⇄ ·02(ФАБРИКА) | два лица номера ·02: резонанс и производство |
| ·02(ФАБРИКА) ⇄ ·15 | конвейер встаёт в реестр 62×13 дирижёра |
| ·15 ⇄ ·16 | дирижёр дома ↔ суфлёр оценки вокала |
| ·15 ⇄ ·18 | оркестратор собирает зал совместного пения |
| ·16 ⇄ ·20 | оценка вокала ↔ фонетика/романизация |
| ·17 ⇄ ·18 | P2P двойной экран ↔ зал по коду/QR |
| ·17 ⇄ ·23 | двойной экран ↔ живые P2P румы |
| ·19 ⇄ ·21 | Human-First: событие одно — каналы разные |
| ·19 ⇄ ·28 | личность на устройстве ↔ суверенность узла |
| ·20 ⇄ ·21 | речь/TTS ↔ представления смысла (текст/Брайль/вибро) |
| ·21 ⇄ ·22 | мост ·21⇄·22 — написан прямо в манифесте связи |
| ·22 ⇄ ·23 | девять каналов ↔ mesh-круг людей |
| ·22 ⇄ ·26 | каналы связи ↔ SMS P2P без операторов |
| ·24 ⇄ ·25 | подпись ECDSA писем ↔ тихие переводы кошелька |
| ·25 ⇄ ·26 | бумажки-токены ↔ свои номера 00–15 |
| ·27 ⇄ ·28 | основание дома ↔ философия автономии |
| ·27 ⇄ ·29 | фундамент ↔ свобода выбора поверх него |
| ·28 ⇄ ·29 | суверенность ↔ свобода: узел, который решает сам |

## 4. Публичный API ядра

```js
SNG.связи()        // [{от:'s01', к:'s02r'}, …] — уникальные пары; a→b и b→a — одна нить
SNG.визит(id)      // записать первое касание двери (append-only; хаб не считается)
SNG.визиты()       // {id: ISO-момент первого касания} — копия, чужой код не портит память
SNG.путь()         // ['s01','s15',…] — двери в порядке первого касания
SNG.нитьПрогресс() // {пройдено, всего: 18, нитей: 20, нитейЖивых}
```

Где пишется визит: **само ядро** при загрузке каждой комнаты
(`визитКомнаты()` — DOMContentLoaded; `SNG.текущий()` знает свою дверь).
Ни одна страница не правилась под это — нить живёт в ядре, значит живёт
во всех комнатах сразу. На хабе визитов нет: лицо дома — не дверь.

## 5. Как нить ведёт себя на лице дома

- **Покои:** осколки на орбитах; связи — тонкие золотые линии (мало заметные:
  `rgba(212,175,55,.30)`), нить не спорит с картиной.
- **Перетаскивание:** линии следуют за осколком раз в кадр (rAF-троттлинг —
  не на каждое событие pointermove).
- **Наведение:** нити hovered-осколка вспыхивают ярче (`.фокус`) — только свет,
  ничего не двигается и не блокируется.
- **Пройденность:** если обе двери пары касались — линия горит (`.жива`);
  сам осколок и его номер получают золотое свечение. Пройденная дверь на карте
  дома (нить → дом) подсвечена золотом, в шапке дома появляется счёт:
  «18 дверей · каждая автономна · пройдено N».
- **Разлёт:** при рассыпании кристалла нить молчит, пока осколки летят, —
  и тянется следом, когда они встают на орбиты (1150 мс).

## 6. Границы и честные ограничения

- **Ничего не запирается.** Визиты — информация, не привилегия. Любая дверь
  открыта всегда, шлагбаумов в доме нет.
- **Приватность:** путь хранится только на устройстве человека
  (localStorage). Ни один запрос никуда не уходит — офлайн-закон.
- **Без хранилища** (приватный режим, песочница): нить живёт в памяти ядра
  до перезагрузки страницы — дверь всё равно помнит касание в этой сессии.
- **SVG-слой** — `aria-hidden`: нить для глаз. Скринридер читает двери
  и их имена, как и раньше; пройденность не навязывается и слухом.
- **`prefers-reduced-motion`** уважается: нить без анимаций, только состояния.

## 7. Как проверить (закон «ничего на веру»)

```bash
node --test ИНСТРУМЕНТЫ/test_svyazi_niti.js     # связи, визиты, путь, прогресс
node --test ИНСТРУМЕНТЫ/test_modules_logic.js   # регресс ядра (12 наборов)
```

Руками: открыть дом → коснуться кристалла → осколки встанут, нити натянутся;
открыть пару дверей (например ·21 и ·22) → вернуться на хаб → нить ·21⇄·22
горит золотом, двери в карте дома светятся, счёт в шапке показывает путь.

## 8. История

- **v1.39.0 «ЖИВАЯ НИТЬ» (2026-10-06)** — связи в манифесте, SVG-нити между
  осколками, память пути, док в пре-кэше, тесты. Идея — внешняя ИИ (см. §1),
  синтез и воплощение — дом СИНГУЛЯР. Идея становится нашей, когда живёт в коде.
