# P12 — архив всего сделанного (точка восстановления после сбоя)

> Сформирован: **2026-10-17** (Asia/Shanghai), агент-преемник после сбоя песочницы.
> Архив: `/home/user/P12.tar.gz` (корень Workspace) · этот манифест лежит рядом
> и **внутри** архива (`P12-MANIFEST.md`).
> Правило пользователя: такой архив формируется на каждом чекпоинте — см. §2 ниже.

---

## 1. Что внутри

| Путь в архиве | Содержимое |
|---|---|
| `P12-MANIFEST.md` | этот файл |
| `iya-platform/` | полный проект (исходники, тесты, документация, i18n, миграции, legacy-исходники) |

Исключено из архива (рантайм-мусор, 566 МБ): `var/` (sqlite-БД, кэш, логи,
скриншоты), `data/*.sqlite3*`, `__pycache__/`, `node_modules/`. Всё нужное для
восстановления — в `iya-platform/`; БД создаётся заново миграциями
(`php bin/iya migrate`) или берётся из versioned-тарболла `backup/versions/`.

---

## 2. НОВОЕ правило чекпоинта (добавлено по требованию пользователя)

Ритуал после каждого рабочего блока (15–25 вызовов инструментов) — пункты а)–д)
как в ENV-инструкции — **плюс обязательный пункт е)**:

> **е) сформировать архив со всем сделанным в корне Workspace с именем `P12`.**
>
> ```bash
> cd /home/user && tar --exclude='./var/*' --exclude='./data/*.sqlite3*' \
>   --exclude='./__pycache__' --exclude='./node_modules' \
>   -czf /home/user/P12.tar.gz -C /home/user P12-MANIFEST.md iya-platform
> ```
>
> * Имя — ровно `P12` (фаза), расширение `.tar.gz`; перезаписывается на каждом
>   чекпоинте (в отличие от `backup/versions/*`, которые никогда не
>   перезаписываются — это два разных слоя защиты).
> * Перед упаковкой обновить `P12-MANIFEST.md` (§3–§5) и прогнать тесты+lint.
> * Размер ~17–18 МБ — безопасен для снапшота Workspace (лимит ~128 МБ).

---

## 3. Состояние на момент упаковки

| Параметр | Значение |
|---|---|
| Тесты | **434 tests / 2949 assertions / 0 failures** (`php tests/run.php`, 22.8 s) |
| Линтер | **214 files / 0 failures** (`php bin/iya lint`) |
| i18n | **66 каталогов собрано, 1409 платформенных ключей**; полное покрытие **6/66**: en, ru, uk, be, de, es (`php scripts/build_i18n.php --check`) |
| Фаза | **P11 завершена · P12 в работе** (P12.0–P12.4 готовы) |
| Git-коммит на упаковке | `ce0e15f` — «P12 baseline (sandbox reset recovery)», 558 файлов |
| Runtime | PHP 8.2.34 (cli), stdlib-only; SQLite WAL; кастомный тест-раннер |
| Последний durable-тарболл до сбоя | `backup/versions/iya-platform_20261017T141145Z_86ed213.tar.gz` |

---

## 4. Сделано за цикл (сверка с WORKLOG.md)

| Блок | Коммит (исторический) | Итог |
|---|---|---|
| P8.6 AbuseIPDB-репортинг (атаки + спам, эндпоинт `/api/v1/intel/spam-report`, MySQL drop-box, админ-гейты) | `9e0360e` | E2E 9/9, реальный вызов провайдера |
| P4 polish: CSV-импорт, purge-UI, коллекции, таргетинг/AB-редактор, фикс flash-PRG в Kernel | `d9e3e47`…`253040c` | live 10+14+19+18 |
| P7 saved views | `83af081` | live 17/17 |
| P10a уведомления (Mailer/SMTP stdlib, Telegram, OutboxDispatcher, Notifier, колокольчик) | `ce209f0` | live 19/19 |
| P10b event webhooks (HMAC-подпись, бэкофф, disable после 5 неудач, лог попыток) | `f0174da` | live 25/25 ×2 |
| P10c alerts (6 видов, cooldown, дедуп 1 h, аудит `alert_events`) | `b40b331` | live 24/24 |
| P10d комментарии к ссылкам | `697c44b` | live 15/15 |
| P10e teams (роли, инвайты, RBAC-фундамент) | `c851a7b` | live 17/17 |
| P11a admin-ядро (13 стабов) | `1220497` | live 43 ×2 |
| P11b swarm-админка (10 стабов) | `34a13be` | live 16/16 |
| P11c security desk + ip-blocks + geoip + flags + plans; чистка 79 мёртвых стабов | `ac0cf72`, `77c5e3e` | live 18/18 |
| P11d team RBAC + shared saved views | `a8603b3` | live 19/19 |
| P12.0 ресинк i18n-пайплайна (~560 ключей возвращены в источники) + `I18nSyncTest` + контракт §5.4 | `6c275f2`~ | 66 локалей с полным keyset |
| P12.1 украинский (uk) 1409/1409 | `6c275f2` | live `?lang=uk` |
| P12.2 белорусский (be) + фикс SUPPORTED_LOCALES-гейта | `b9b4228`, `fefba19` | live `?lang=be` |
| P12.3 немецкий (de), неформальный **du** | `f3cfefa` | live `?lang=de` |
| P12.4 испанский (es), неформальный **tú** | `86ed213` | live `?lang=es` |
| **Восстановление после сбоя** (apt: php-cli+расширения, `git init`, baseline, этот архив) | `ce0e15f` | 434/2949/0 · lint 214/0 |

---

## 5. Что НЕ сделано / известно как пробел

* **P12 i18n: ещё 60 локалей.** Следующая — **fr** (проверить тон по
  `legacy/iya-ru-source/lang/fr.php`: tu или vous), далее it, pt, pl, tr, zh,
  ja, ko → остальные.
* **P13** design pass: dark theme, RTL (ar/fa/he/ur), mobile-ширины, focus rings.
* **P14** load/security: **edge-enforcement `ip_blocks`** (таблица есть, её
  никто не читает — главный известный пробел), rate-limit tuning, N+1 sweep,
  slow queries по rollup'ам визитов, пентест-дрели.
* **P15** beta loop; **P16** Docker/CI/release.
* Отложенные эмиттеры вебхуков: `link.target_down`, `agent.task`.
* MySQL DDL для миграций 002+ (пока sqlite-only).

---

## 6. Как восстанавливаться из этого архива

```bash
# 1) распаковка (в корень Workspace)
tar -xzf /home/user/P12.tar.gz -C /home/user
# 2) runtime
apt-get update && apt-get install -y php-cli php-sqlite3 php-mbstring php-xml php-curl php-intl php-zip
# 3) здоровье
cd /home/user/iya-platform && php tests/run.php && php bin/iya lint
# 4) если .git не пережил снапшот
git init && git add -A && git commit -m "baseline"
# 5) контекст
#    REWORK-STATE.md §0 и §9  +  хвост WORKLOG.md  →  продолжить с fr
```

Приоритет источников: `P12.tar.gz` (свежайший) → `backup/versions/*` (история
по коммитам) → `/mnt/oss/*.tar.gz` (аварийный хвост, только при потере первых).

---

## 7. Статус на последней упаковке

<!-- P12-STATUS-BEGIN (auto-generated by scripts/pack_p12.sh) -->
- packed (UTC)   : 2026-10-19T04:35:56Z
- tests          : 483 tests, 3109 assertions, 0 failures
- lint           : checked 224 files, 0 failures
- i18n coverage  : full coverage: 42/66 locales
- git commit     : 017a636
<!-- P12-STATUS-END -->
