2026-04-30 14:18:23 +00:00
# tubev
Multi-site adult tube infrastructure — **frontend-only ** scope (templates / CSS / JS). Backend (OpenResty + Lua) — у розробника, не в нашому доступі.
2026-04-30 14:20:55 +00:00
## Repo
2026-04-30 14:18:23 +00:00
2026-04-30 14:20:55 +00:00
- **Origin:** `git@gdev.hserver.cloud:ovtube/vtube.git`
- **goboss checkout:** `/home/w4/goboss/tubev/`
- **Bot worktrees:** `/home/w4/<bot>/tubev/` (gocc1-4)
- **Branch:** `main`
2026-04-30 14:58:34 +00:00
- **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 )**
2026-04-30 14:20:55 +00:00
## Сайти (live, prod source)
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
- **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 )**.
2026-04-30 14:18:23 +00:00
## 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 (де що правити)
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
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 / нових файлів)
2026-04-30 14:18:23 +00:00
## Команди
```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 ** .
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
### 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` ).
2026-04-30 14:18:23 +00:00
### 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.
2026-04-30 20:04:24 +00:00
### 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. Н е дай наступним сесіям повторити пошук
2026-04-30 14:18:23 +00:00
## Doc Index
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
**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** (як ми працюємо):
2026-04-30 14:18:23 +00:00
| Файл | Призначення |
|------|-------------|
docs: add ONBOARDING.md — user-facing first-launch guide
- What Claude auto-loads (CLAUDE.md, MEMORY.md, global rules)
- 7 open questions developer needs to answer (random JS, 8112 GA, test.*, 8081 status, etc.)
- Task type examples (A: site change, B: backlog item, C: audit, D: documentation)
- External services to potentially configure (Telegram, CF, monitoring)
- Common pitfalls (no make-work, no manual tmux kill, no /home/nosfortube/)
2026-04-30 21:44:56 +00:00
| * * [docs/ONBOARDING.md ](docs/ONBOARDING.md )** | Для **юзера ** — що Claude auto-loads, відкриті питання до developer, як давати команди |
2026-04-30 20:04:24 +00:00
| * * [docs/INFRASTRUCTURE.md ](docs/INFRASTRUCTURE.md )** | Мапа `/home/w4/` : bin, scripts, comms, hooks, sessions, memory + cheatsheet |
2026-04-30 14:20:55 +00:00
| * * [docs/GIT_WORKFLOW.md ](docs/GIT_WORKFLOW.md )** | Repo `vtube` , push process, bot commits → goboss push |
2026-04-30 14:18:23 +00:00
| * * [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`