# AGENTS.md — правила для AI-агентов в репозитории СИНГУЛЯР

> **Статус:** ✅ Актуально · **Обновлено:** 2026-10-14 · Читатели: coding-агенты, LLM-ассистенты, будущий ты.
> README.md — для людей, этот файл — для машин. Не смешивать: здесь только то, что нужно агенту, чтобы работать с репой и не ломать дом.

## Что это за репа

`rtynbirf/singulyar` — публичный репозиторий дома СИНГУЛЯР · ЛАДОМ: PWA-караоке-вселенная RUVSON, деплой на GitHub Pages (`https://rtynbirf.github.io/singulyar/`), ветка `main`, без сборщика (ноль node_modules в рантайме). Апстрим мозгов Малыша: `rtynbirf/singulyar-llm`.

## Незыблемое (не ломать)

1. **Закон СИНГУЛЯРА**: эргономика, приватность, конфиденциальность, юзабилити во главе угла. Любая правка, отнимающая у человека удобство или утекающая данными, — отклоняется независимо от выигрыша.
2. **Комод-архитектура**: семьи функций живут ящиками; наружу — через мост (`delete` + `defineProperty`). Не выносить вещи из ящиков, не переписывать логику при переселении. Тест: `ИНСТРУМЕНТЫ/test_bridge_logic.js`.
3. **CSP-мета — постур А**: `script-src 'self' 'unsafe-inline' 'wasm-unsafe-eval' blob:` + все прочие директивы целиком; внешние hosts в script-src сохранять (jsdelivr у ЛАДОМА). Без `'unsafe-inline'` дом умирает молча; без `'wasm-unsafe-eval'` умирают мозги Малыша (wllama) и слух (transformers.js). Запрещено: хэши без кавычек (invalid source), текст вне комментариев в `<head>` (выталкивает CSP в body — политика игнорируется), правка меты regex-кусочками. Шрамы: v10.52, v10.54.
4. **Кэш-поколение**: любой такт поднимает `S15_CACHE` в `sw15.js` (`s15-orkestrator-vNN+1`) и вносит новые активы в пре-кэш. Не поднять поколение = сломать обновление.
5. **Пуш только через Git Data API** (blobs → tree → commit → ref). Веб-сессии/куки не работают из песочницы.
6. **Ритуал такта** (8 стадий) — единственный способ выпуска. См. [docs/РИТУАЛ_ТАКТА.md](docs/РИТУАЛ_ТАКТА.md). Такт без живой поверки ЭП-06 не считается вышедшим.
7. **Истина о числах**: счётчики дверей/песен/языков — из `data/versions.json` и манифеста ядра (`singulyar-modules.js`, `SNG.модуль`). Числа в старых абзацах README/ДОКУМЕНТОВ — историческая летопись, не истина (в README помечены блоком «одна правда»).

## Карта файлов (коротко)

- `index.html` — хаб ·00 (кристалл, нить Ариадны, поиск); `404.html` — честное лицо тупика.
- `СИНГУЛЯР_NN_ИМЯ.html` — 42 двери (с такта v11.29 — ·53 СВЯЗЬ ЧЕЛОВЕКА, ядро v1.21.0) (счётчик-истина: `data/versions.json` → `счётчики.дверей`; манифест ядра — `singulyar-modules.js`).
- `singulyar-modules.js` — ядро SNG (кристалл, осколки, нить, карта); `singulyar-ux-engine-v9.js` — UX-движок; `singulyar-design-v3.css` — дизайн-система; `sw15.js` — сервис-воркер; `cord.js` — КОРД.
- `docs/` — живая документация (карта: `docs/README.md`); `ДОКУМЕНТЫ/` — архив протоколов; `data/versions.json` — летопись-истина.
- `ДАННЫЕ/` — корпуса (флагман 157 языков LRC/SRT + конвейер: «Где настоящее» 223, «Когда теряем» 197); `БИБЛИОТЕКИ/adapter-os/` — мозги Малыша (офлайн-копия + апстрим).
- `ИНСТРУМЕНТЫ/` — 75 тест-файлов (с v11.49 — стражи ЗАКРЫТИЯ: test_takt_11.49_zakrytie, test_nit_s55_mosty, test_emergent_gate) (с v11.29 — `test_singulyar_53.py`: страж контура ·53; с v11.33 — `test_qr_token.mjs` 9/9 и `test_transport_adapter.mjs` 18/18: стражи qr-token/0.1 и singulyar.transport/0.1) (JS `node --test <файл>` по одному; каталог целиком на node 24 ранер не принимает — прогон пофайлово; python-тесты — `python3 -m unittest discover -s ИНСТРУМЕНТЫ`); оракулы `test_s31_*.js` сверяют штампы зала с живым реестром `data/versions.json`.

## Команды

```bash
node --check sw15.js                          # синтаксис правленых JS
node --test ИНСТРУМЕНТЫ/                      # полный набор тестов дома
python -m http.server 8907                    # локальный стенд (порт любой)
node ИНСТРУМЕНТЫ/check_page_scripts.js        # скрипты страниц
```

Playwright-проверки лица: двери строятся (28), меню дома полно, поиск АРИАДНА жив, CSP-мета в `<head>`, консоль чиста (шум стенда фильтровать: 404 от недокачанных тяжёлых активов).

## Конвенции

- Язык репы — русский (код, комментарии, имена файлов). Не латинизировать имена файлов.
- Патчи — идемпотентные скрипты (маркеры-стражи, точные анкоры); правка больших HTML — только скриптом, не руками; после вставки перечитывать «new» глазами (дубль `script-src` уже бывал).
- Названия тактов — одно слово, номер `v10.NN` монотонен; кэш `s15-orkestrator-vNN` растёт вместе с тактом.
- Факты о выпущенном — в `CHANGELOG.md`; планы — в `docs/ДОРОЖНАЯ_КАРТА.md`; обещания — в `docs/ТЗ.md`. Один факт — одно место.
- Приватность контента: в репу не попадают персональные данные, ключи, токены, внутренние журналы сессий.

## Мозги Малыша (если работаешь с llm)

Офлайн-копия: `БИБЛИОТЕКИ/adapter-os/` (`llm.mjs`). Апстрим-истина: `rtynbirf/singulyar-llm` (`ОБУЧЕНИЕ/ПРАВИЛА_СИНГУЛЯРА.txt` — 15 правил, `ОБУЧЕНИЕ/ПРИМЕРЫ_КОМАНД.jsonl` — фразы). Правка правил = коммит в апстрим + синхрон офлайна в том же такте (двухрепность). Правило 13 — карта 28 дверей; правило 14 — закон дома; правило 15 — документация.

## Соседи

[README.md](README.md) · [docs/README.md](docs/README.md) · [docs/РИТУАЛ_ТАКТА.md](docs/РИТУАЛ_ТАКТА.md) · [docs/МАЛЫШ.md](docs/МАЛЫШ.md) · [docs/llms.txt](docs/llms.txt) · [CHANGELOG.md](CHANGELOG.md)
