# СТАЛЬ — нити и ядро · такт v1.43.0

Слово владельца: «ТЫ САМ ВСЁ ЗНАЕШЬ — ИСПРАВЛЯЙ, КОРРЕКТИРУЙ КОСЯЧКИ, БАГИ
ПРИБИВАЙ». Такт СТАЛЬ — продолжение ЗАКАЛКИ: найденные при свежей ревизии
живого дома косячки прибиты навсегда, с тестом на каждый.

## 1. Нити ·30 ТКАНЬ были в одну сторону (дефект манифеста)

Такт v1.41.0 добавил дверь ·30 ТКАНЬ. Манифест объявил её нити только изнутри:

```
s30.связи = ['s19', 's21', 's22']   — а у s19, s21, s22 обратки НЕ было
```

Закон дома: «нить держится в обе стороны». Нарушение не роняло страницу,
но ломало память пути: заход из ·19 не видел соседки ·30, и ЖИВАЯ НИТЬ
(прогресс, свет пройденных дверей) считала дом криво. Прибито: у s19,
s21, s22 прописаны обратные нити на s30. Манифест симметричен — тест
`test_svyazi_niti.js` теперь сторожит симметрию каждой нити.

## 2. Воркер вышибал ядро офлайна (кирпич, вторая доска)

Потолок кэша (v52, ЗАКАЛКА) вытеснял «старейшие» записи по порядку вставки.
Ядро пре-кэша вставлено ПЕРВЫМ — значит, вылетало ПЕРВЫМ. Человек, походивший
по комнатам, терял офлайн-хаб, движки и доки: PWA слепла. Прибито в sw15.js
(v53): вытеснение идёт сначала по посещённому (не-ядро), ядро — неприкасаемо;
выселение выполняется ДО записи (место освобождено к моменту put, промис не
висит без waitUntil). Состояние на такт v1.43: ядро ≈ 85 адресов, потолок 140.

## 3. Регресс догнал жизнь (слепой тест хуже отсутствующего)

Тесты нити ждали дом двухтактной давности: ядро v1.5.0 (было — v1.8.0),
18 дверей (стало — 19), 20 нитей (стало — 23). Морозить цифру — значит
гарантированно рвать проверку каждый такт и приучать дом к красным тестам.
Прибито: тесты выводят «всего» и «нитей» из самого манифеста (манифест —
истина), а живость нити пересчитывают независимо от ядра — перекрёстная
проверка. Пол зафиксирован честно: 19 дверей · 23 нити на такт v1.43.

## 4. Песочница теста ·18 теряла легенду глифов

Рефактор v1.41 ввёл `канонГлиф` (Атари-пиктограммы выкурены: чужой эмодзи
профиля переводится в глиф дома до рендера). Регресс ·18 гонял код комнаты
в песочнице без легенды — ReferenceError на профиле гостя, 62/63.
Прибито: легенда вшита в прогон (как на лице дома). Заодно охрана канона
усилена: проверяется ВЫХОД границы рендера — эмодзи не возвращается на сайт.

## 5. Штампы версий собраны в один такт

Ядро: v1.7.0 → v1.8.0 (манифест менялся — симметрия нитей). Внутренний штамп
`__SINGULYAR_MODULES__` отставал (v1.6.0) — собран до v1.8.0. Воркер: v52 →
v53. Лицо сборки: меню дома «сборка v1.43.0 · СТАЛЬ», мета хаба
`sng-build: v1.43.0 · СТАЛЬ · 2026-10-07`.

## Итог проверки

- node --test: 22 файла, 218 проверок — все зелёные (было: 3 красных + краш).
- test_закалка.py: 20/20 — КОРД держит, хранилище/JSON/BroadcastChannel-гарды на месте.
- Эмодзи-ревизия дома: живой UI чист — глифы канона (¶ ◉ ∿ ◈ ⌇ ⤳ ◇ ◈ ⬡ ⌂) и типографика;
  остаточные вхождения — только ЛЕГЕНДА_ГЛИФОВ (карантин: перевод чужого эмодзи в глифы)
  и тексты приказов. Директива «не Атари с пиктограммами» соблюдена.

## Файлы такта

- `singulyar-modules.js` — симметрия нитей s19/s21/s22 ⇄ s30; ядро v1.8.0; штамп v1.8.0
- `sw15.js` — S15_CORE_SET (ядро неприкасаемо), выселение до put; кэш v53
- `ИНСТРУМЕНТЫ/test_svyazi_niti.js` — манифест как истина, пол вместо мороза, перекрёстный счёт живых нитей
- `ИНСТРУМЕНТЫ/test_modules_logic.js` — этаж версии вместо мороза; кэш v53; S15_CORE_SET под сторожем
- `ИНСТРУМЕНТЫ/test_s29_svoboda.js` — кэш v53
- `ИНСТРУМЕНТЫ/test_s18_logic.js` — легенда в песочнице; охрана канона глифов на границе рендера
- `singulyar-ux-engine-v9.js`, `index.html` — лицо сборки v1.43.0 · СТАЛЬ
