--- _last_updated_: 2026-08-12T12:00:00Z session_id: 2026-08-12-admin-kreknin-gitea prev_session_id: 2026-08-10-admin-pi-inbox-monitor --- # Next session handoff ## Главное за сессию (2026-08-12) **Gitea на kreknin установлен и работает: https://git.kreknin.site/ (LE-серт).** - Gitea 1.27.1 + postgres 16, чистые контейнеры (`/volume1/docker/gitea/`), БД на volume1 (не SSD — требование). Админ `kreknin` (pass kreknin/gitea). - Traefik на kreknin починен: лежал с 07-31 (restart policy был `no`) → `restart: unless-stopped`. Проброс 80/443→8000/4443 добавлен в GUI Keenetic (API KeeneticOS Viva закрыт для curl — только GUI). - **Gitea на kreknin ЗАКРЫТ ПОЛНОСТЬЮ** (2026-08-12): https://git.kreknin.site/ работает и снаружи (LE-серт), и из LAN Алексея. **DNS-override сделан через RCI API** (концепт `.wiki/concepts/keenetic-rci-api.md`): `ip host git.kreknin.site/kreknin.site → 192.168.1.43`. KeeneticOS 5.1.3 hairpin НЕ чинит — DNS-override это решение. Правила порт-форвардинга в 5.x лежат в `ip.static` (to-host=MAC). - Пароль Keenetic: `pass kreknin/keenetic` (t3r1a4k314). - Keenetic отваливался на провайдере (не свет) — монитор-расширение сработал, удалён после завершения. ## Pi-доставка инбокса (2026-08-10) - **Глобальное pi-расширение** `inbox-monitor.ts` (source of truth: `.common/lib/pi-extensions/`, деплой: `~/.pi/agent/extensions/` — byte-identical) — **session-scoped**: смотрит только `/.claude-inbox/` (свой проект). ПЕРВАЯ версия (глобальный скан всех инбоксов) отменена в тот же день — правило vitya: «ты другие инбоксы читать не имеешь права. Только в своей директории». PUSH-поллер 15s (интерактив) + PULL `agent_settled` sweep, доставка через `sendUserMessage` с заголовком `[inbox] <имя-файла>`, move в `.read/`. Headless (`pi -p`) — доставки нет, сообщения ждут интерактив. - **Тесты**: `inbox-monitor.test.mjs` — 3 блока ALL PASS (`node --experimental-strip-types`). Живой лоад в pi 0.84.1 подтверждён headless-прогоном. - **Скил**: `session-inbox-monitor` v0.3.0, секция «Pi support» (claude-skills 07e7820). `.common` 2ad8199. - **TODO**: при следующей интерактивной pi-сессии сделать `/reload` (или расширение подхватится само при старте новой сессии). ## Старый контекст (2026-08-07) Эпик **flat-fields** ЗАКРЫТ. `fields[]` убран — поля в корне объекта. Loader мигрирован. - **@snolla/snolla → @snolla/web** — 7 сайтов пересобраны и передеплоены (вторая волна ренеймов) - **Content-Type гейтинг** — vendor-Accept (`application/vnd.snolla.admin+json`) только для web-админки. Default = корневые поля. Save: `Content` без vendor → 400. - **fields[] → корневые поля** — admin-api 0.4.0 (read/write flat), client 0.5.2 (index-signature), schema-gen 0.2.1 (генератор flat). Вся тройка published+pushed. - **Loader → flat root fields** — pilorama98 `0db46e1` в проде. Тесты 105/105. yml_category_id + short_description для required-полей. - **Content-валидация** — admin-api 0.5.0 published (snolla), НЕ развёрнута на пилораме. ## Open треки | Трек | Готовность | Entry-point | |---|---|---| | admin-api 0.5.0 (валидация) → пилорама | published, ждёт волны | бамп в apps/web + деплой | | yml_category_id — маппинг для YML-фида | эмпирически сверен, нужен production-тест | loader `bin/index.js` + фид | | Коллизия `description` (контент-поле ↔ колонка) | на snolla/schema-gen | при следующей встрече | | Loader прод-импорт (живой) | НЕ запускался после 0.4.0 | решение vitya | ## Спроси user'а - Деплоить admin-api 0.5.0 (валидация) на пилораму сейчас или со следующей фичей? - Запускать живой импорт loader'а через новый flat API? ## Не делать (preemptive guards) - НЕ слать vendor-Accept из loader'а — это только для web-админки snolla - НЕ деплоить admin-api 0.5.0 без проверки required-полей (79/229 продуктов были без yml_category_id) - Portainer PUT: НЕ использовать `Env:[]` — очищает секреты. Всегда fetch + re-supply. - НЕ ротировать `sk_6a83…` - НЕ слать директивы другим сессиям без сверки с vitya ## Memory updates за сессию - `snolla-namespace-wins` — подтверждён: вторая волна ренеймов (@snolla/snolla→web) - `admin-api-vds-deploy` — обновлён: стек 25 retire, admin-api в pilonuxt - `portainer-env-empty-clears-secrets` — новый: Portainer PUT с Env:[] = потеря всех секретов - `admin-api-content-gating-vendor-accept` — новый: vendor-Accept = web-admin only, default = flat fields - `piloruxt-build-needs-generated-dir` — новый: src/generated/ gitignored, нужно scp перед docker build