Files
vtube/CLAUDE.md
goboss 981a0ad9b6 Document granular hook policy + ad architecture + 94-site scale
Hook redesign (guard-readonly.sh + guard-bash.sh):
- ALLOW edits: /home/nosfortube/frontend_<port>/ (digits-only, all subdirs)
  + /home/nosfortube/orest/ (user working zone + screenshots)
- DENY: lang variants (frontend_<port>_<lang>/), frontend_core/, .git/,
  system paths (/etc/, /usr/, /boot/, /var/* except /var/log/claude/)
- 19/19 readonly + 18/19 bash tests pass (1 pre-existing sed-i regex gap)
- Backup попередньої версії: .bak.2026-05-02

Doc updates:
- New: PROJECT.md, ARCHITECTURE.md, DEPLOY.md, ADS.md, PERFORMANCE.md,
  INTERLINKING.md, ADMINS.md (topic-split docs/)
- CLAUDE.md: 94-site scale, granular edit zones, doc index
- INFRASTRUCTURE.md: hook table updated
- SITES.md: scope note (14 backup-tracked of 94 total)
- RECOMMENDATIONS.md: W1 (hook conflict) → DONE; W2-W3, D1-D4 added

Site architecture findings (audit 2026-05-02):
- 94 frontend_<port>/ sites, 71 in site-name-routing.csv, 14 backup-tracked
- 3 ad-architectures coexist: 8148 modern bundle (1), modern partials (~23),
  legacy inline surstrom (31)
- 8148 unique: ad-bundle.min.js source files, build-ad-bundle.sh, terser
- Server IP 185.73.222.75 у t1.* allowlist (curl probes work)
- CDN: custom + Cloudflare на 8081 etc; purge-cache при prod deploy

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 13:26:25 +00:00

134 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/<bot>/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_<port>/` — source-of-truth, тут редагуємо
- **71 site→port mapping** у `/home/nosfortube/orest/site-name-routing.csv`
- **14 backup_<port>/** у `/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_<port>/views/` напряму — це **single source of truth** test-середовища
2. **Test:** `t1.<domain>` миттєво (server IP `185.73.222.75` у allowlist — Claude може робити curl probes)
3. **Git snapshot (rollback):** `~/git-save-all.sh "msg"` — sync prod → backup_<port>/, 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_<port>/
```
## Команда (ролі ботів)
| Бот | 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>/...` — наша робоча зона (port = digits only, без lang suffix)
- `views/` — основне (templates, CSS, per-site JS)
- `views/static/js/lib/`, `lib2/`**shared cross-site**, правки тільки коли треба фікс на ВСІ сайти (рідко, при виявленні bug-у)
- `lib/<port>/var.lua` — config, потребує **kor reboot через Адміна** (рідко)
- `/home/nosfortube/orest/...` — юзерова робоча зона (тестові скрипти, тимчасові плани, screenshots)
**DENY:**
- `/home/nosfortube/frontend_<port>_<lang>/` — 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/<port>/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/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_<port>/ працює, 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`