# tubev Multi-site adult tube infrastructure — **frontend-only** scope (templates / CSS / JS). Backend (OpenResty + Lua) — у розробника, не в нашому доступі. ## Repo - **Origin:** `git@gdev.hserver.cloud:ovtube/vtube.git` - **goboss checkout:** `/home/w4/goboss/tubev/` - **Bot worktrees:** `/home/w4//tubev/` (gocc1-4) - **Branch:** `main` - **Push policy:** **goboss пушить immediately after commit** (default). Боти комітять локально → write report → goboss робить review + push. Винятки (multi-step refactor у процесі / diff >50 LOC / WIP) — у **[docs/GIT_WORKFLOW.md § When to push](docs/GIT_WORKFLOW.md#when-to-push-default--exceptions)** ## Сайти (live, prod source) - **94 сайти** у `/home/nosfortube/frontend_/` — source-of-truth, тут редагуємо - **71 site→port mapping** у `/home/nosfortube/orest/site-name-routing.csv` - **14 backup_/** у `/home/w4/` — git-archive subset (не всі сайти) Повний контекст: **[docs/PROJECT.md](docs/PROJECT.md)** | Folder map: **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** | Site table: **[docs/SITES.md](docs/SITES.md)**. ## Stack - Templates: **etlua** (Lua templating, OpenResty environment) - CSS: критичний inline `views/css/css_*.etlua` + deferred `static/css/` - JS: `static/js/{c2, auth, comment, profile_index, main, ...}.{js,min.js}` - Video player: `static/videojs-v10/` ## Workflow (де що правити) 1. **Edit:** `/home/nosfortube/frontend_/views/` напряму — це **single source of truth** test-середовища 2. **Test:** `t1.` миттєво (server IP `185.73.222.75` у allowlist — Claude може робити curl probes) 3. **Git snapshot (rollback):** `~/git-save-all.sh "msg"` — sync prod → backup_/, auto-rebuild ad-bundle (тільки 8148), cache-bust md5, commit. **Local git, без remote, без laptop-clone.** Деталі: **[docs/DEPLOY.md § git-save-all.sh](docs/DEPLOY.md#git-save-allsh--git-snapshot-для-backup_port)** 4. **Prod deploy:** ти через `https://rss.g--o.info/admin/site/control` (per-site button). Або через Адміна (для var.lua / нових файлів) ## Команди ```bash ~/start-devs.sh boss # старт goboss ~/start-devs.sh gocc # старт gocc1-4 ~/bin/trigger-bots [gocc{N}] # тригер нової task ~/bin/restart-bots [gocc{N}] # повний reset (kill+start+wait+trigger) ~/bin/clear-bots [gocc{N}] # /clear context (topic switch) git pull --rebase # ЗАВЖДИ перед роботою у backup_/ ``` ## Команда (ролі ботів) | Бот | Tool access | Domain | |-----|-------------|--------| | **goboss** | All | Planner + dispatch (не push до prod, тільки local commits) | | **gocc1** | Read-only | Code audit + regression | | **gocc2** | Read-only | Test gap + endpoint smoke | | **gocc3** | Edit/Write/commit (no push) | Frontend writer (templates/CSS/UI) | | **gocc4** | Edit/Write/commit (no push) | Architect/refactor (services/lib/scripts) | **2 read-only + 2 writer** — read-only safety net, писателі паралельно. Деталі: **[docs/roles/](docs/roles/)** | Workflow rules: **[docs/BOT_WORKFLOW.md](docs/BOT_WORKFLOW.md)** ## Правила (КРИТИЧНІ) ### No make-work **НЕ давати ботам задачі з пустого в порожнє.** Кожен dispatch має конкретну причину: новий audit area, conkretne виявлений bug, follow-up з reportу. Якщо нема такої причини — bot пише `[bot] Чекаю.` і чекає. Cross-audit / regression test / research **тільки коли є concrete trigger**. ### Edit zones (granular, через hook `guard-readonly.sh` + `guard-bash.sh`) **ALLOW:** - `/home/nosfortube/frontend_/...` — наша робоча зона (port = digits only, без lang suffix) - `views/` — основне (templates, CSS, per-site JS) - `views/static/js/lib/`, `lib2/` — **shared cross-site**, правки тільки коли треба фікс на ВСІ сайти (рідко, при виявленні bug-у) - `lib//var.lua` — config, потребує **kor reboot через Адміна** (рідко) - `/home/nosfortube/orest/...` — юзерова робоча зона (тестові скрипти, тимчасові плани, screenshots) **DENY:** - `/home/nosfortube/frontend__/` — language variants (`_hi`, `_id` — deprecated, не вживаються) - `/home/nosfortube/frontend_core/` — core, ніколи не правимо - `/home/nosfortube/.git/`, інше top-level — поза scope - `/etc/`, `/usr/`, `/boot/`, `/sbin/`, `/var/*` (крім `/var/log/claude/`) — system **Деплой у prod — НЕ Claude.** Юзер натискає button у admin panel. Claude тільки edit + commit (через `git-save-all.sh`). ### Refactor vs Cleanup vs Bug-fix vs Feature Чітко розрізняти. Деталі: **[docs/REFACTOR_RULES.md](docs/REFACTOR_RULES.md)**. ### Recommendations not plans Виявлені refactor/security/cleanup candidates → **[docs/RECOMMENDATIONS.md](docs/RECOMMENDATIONS.md)** як **рекомендації**, не план. Робимо ТІЛЬКИ коли розробник скаже. goboss періодично нагадує про unprocessed items. ### No hardcodes у нових патчах Перш ніж писати літерал (URL, домен, GA ID, magic number) — `grep` чи вже є у `views/config/` чи аналогічному місці. Існує — import/include. Нема — додай як параметр у `views/config/site.lua` (якщо буде створено) і потім use. ### Docs upkeep — meta-rule **Якщо ти витратив >5 хвилин шукаючи інформацію про інфраструктуру / команди / шляхи / hooks / scripts — це signal що документація не покриває цю area.** Після того як знайшов відповідь: 1. Додай знайдену інформацію у відповідний doc файл (як правило `docs/INFRASTRUCTURE.md` для systemic / Operational, інше — у domain doc) 2. Додай пункт у [docs/RECOMMENDATIONS.md](docs/RECOMMENDATIONS.md) як D# (DOC) item якщо потрібен ширший update 3. Не дай наступним сесіям повторити пошук ## Doc Index **Domain knowledge** (як проект влаштований): | Файл | Призначення | |------|-------------| | **[docs/PROJECT.md](docs/PROJECT.md)** | Business model, scope, 94 сайти, tech model overview | | **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** | Per-site folder map: views/, static/, lib//var.lua, shared lib/lib2 | | **[docs/SITES.md](docs/SITES.md)** | Таблиця 14 backup-tracked ports × домен × cluster × outlier flags | | **[docs/DEPLOY.md](docs/DEPLOY.md)** | Test t1.* ↔ prod flow, admin role, kor reload, cache-bust | | **[docs/ADS.md](docs/ADS.md)** | adspyglass інтеграція (skeleton — наповнюємо) | | **[docs/MIGRATION_PLAYBOOK.md](docs/MIGRATION_PLAYBOOK.md)** | Discovery-driven план для migration наступного site (player / banners / sidebar / CSS) з conditional branches | | **[docs/PERFORMANCE.md](docs/PERFORMANCE.md)** | PSI targets, rules, per-site scorecard (skeleton) | | **[docs/INTERLINKING.md](docs/INTERLINKING.md)** | Cross-site linking strategy (skeleton) | | **[docs/ADMINS.md](docs/ADMINS.md)** | Admin panels: translations, comments, site config (skeleton) | | **[docs/MODULES.md](docs/MODULES.md)** | Карта `views/modules/*.etlua` × presence × DEL_/test/deprecated flags | | **[docs/SYNC_WORKFLOW.md](docs/SYNC_WORKFLOW.md)** | Як sync.sh у backup_/ працює, 2 парадигми | **Ops / meta** (як ми працюємо): | Файл | Призначення | |------|-------------| | **[docs/ONBOARDING.md](docs/ONBOARDING.md)** | Для **юзера** — що Claude auto-loads, відкриті питання до developer, як давати команди | | **[docs/INFRASTRUCTURE.md](docs/INFRASTRUCTURE.md)** | Мапа `/home/w4/`: bin, scripts, comms, hooks, sessions, memory + cheatsheet | | **[docs/GIT_WORKFLOW.md](docs/GIT_WORKFLOW.md)** | Repo `vtube`, push process, bot commits → goboss push | | **[docs/REFACTOR_RULES.md](docs/REFACTOR_RULES.md)** | Що таке REFACTOR vs CLEANUP vs BUG vs FEATURE | | **[docs/RECOMMENDATIONS.md](docs/RECOMMENDATIONS.md)** | Backlog refactor/cleanup/security candidates як рекомендації | | **[docs/BOT_WORKFLOW.md](docs/BOT_WORKFLOW.md)** | Bot dispatch + reporting + escalation rules | | **[docs/roles/](docs/roles/)** | Ролі gocc1-4 | Файли наповнюємо/оновлюємо по мірі знахідок. CLAUDE.md = тонкий entry-point + index. ## Communication - Українською, коротко, по суті - Боти приймають **ТІЛЬКИ від `goboss:`** - TIMESTAMP формат: `[bot YYYY-MM-DD HH:MM] Task ID: XXX` - Task vs Report Task ID порівнюються **рядково**, не по змісту - Signal через PostToolUse hook автоматично після Write `~/comms/{bot}-report.md`