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>
9.2 KiB
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
Сайти (live, prod source)
- 94 сайти у
/home/nosfortube/frontend_<port>/— source-of-truth, тут редагуємо - 71 site→port mapping у
/home/nosfortube/orest/site-name-routing.csv - 14 backup_/ у
/home/w4/— git-archive subset (не всі сайти)
Повний контекст: docs/PROJECT.md | Folder map: docs/ARCHITECTURE.md | Site table: docs/SITES.md.
Stack
- Templates: etlua (Lua templating, OpenResty environment)
- CSS: критичний inline
views/css/css_*.etlua+ deferredstatic/css/ - JS:
static/js/{c2, auth, comment, profile_index, main, ...}.{js,min.js} - Video player:
static/videojs-v10/
Workflow (де що правити)
- Edit:
/home/nosfortube/frontend_<port>/views/напряму — це single source of truth test-середовища - Test:
t1.<domain>миттєво (server IP185.73.222.75у allowlist — Claude може робити curl probes) - 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 - Prod deploy: ти через
https://rss.g--o.info/admin/site/control(per-site button). Або через Адміна (для var.lua / нових файлів)
Команди
~/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/ | Workflow rules: 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.
Recommendations not plans
Виявлені refactor/security/cleanup candidates → 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. Після того як знайшов відповідь:
- Додай знайдену інформацію у відповідний doc файл (як правило
docs/INFRASTRUCTURE.mdдля systemic / Operational, інше — у domain doc) - Додай пункт у docs/RECOMMENDATIONS.md як D# (DOC) item якщо потрібен ширший update
- Не дай наступним сесіям повторити пошук
Doc Index
Domain knowledge (як проект влаштований):
| Файл | Призначення |
|---|---|
| docs/PROJECT.md | Business model, scope, 94 сайти, tech model overview |
| docs/ARCHITECTURE.md | Per-site folder map: views/, static/, lib//var.lua, shared lib/lib2 |
| docs/SITES.md | Таблиця 14 backup-tracked ports × домен × cluster × outlier flags |
| docs/DEPLOY.md | Test t1.* ↔ prod flow, admin role, kor reload, cache-bust |
| docs/ADS.md | adspyglass інтеграція (skeleton — наповнюємо) |
| docs/PERFORMANCE.md | PSI targets, rules, per-site scorecard (skeleton) |
| docs/INTERLINKING.md | Cross-site linking strategy (skeleton) |
| docs/ADMINS.md | Admin panels: translations, comments, site config (skeleton) |
| docs/MODULES.md | Карта views/modules/*.etlua × presence × DEL_/test/deprecated flags |
| docs/SYNC_WORKFLOW.md | Як sync.sh у backup_/ працює, 2 парадигми |
Ops / meta (як ми працюємо):
| Файл | Призначення |
|---|---|
| docs/ONBOARDING.md | Для юзера — що Claude auto-loads, відкриті питання до developer, як давати команди |
| docs/INFRASTRUCTURE.md | Мапа /home/w4/: bin, scripts, comms, hooks, sessions, memory + cheatsheet |
| docs/GIT_WORKFLOW.md | Repo vtube, push process, bot commits → goboss push |
| docs/REFACTOR_RULES.md | Що таке REFACTOR vs CLEANUP vs BUG vs FEATURE |
| docs/RECOMMENDATIONS.md | Backlog refactor/cleanup/security candidates як рекомендації |
| docs/BOT_WORKFLOW.md | Bot dispatch + reporting + escalation rules |
| 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