Files
vtube/docs/INFRASTRUCTURE.md
goboss c9890a32fe Add ad-test regression tool (Playwright headless ad-flow validator)
After 8148 ASG account recreation + spot rotation debug session,
formalize tooling for automated ad-pipeline regression checks.

- /home/w4/bin/ad-test — wrapper, available globally
- /home/w4/playwright-tests/ — Playwright + Chromium runtime
- scripts/ad-regression.mjs — versioned copy у репо

Per-URL checks (6):
  1. ad-bundle loaded (window._adConfig set)
  2. popunder SDK fetches
  3. /api/users/<vast_spot> returns <Ad> (catches no-fill)
  4. mode = "vast" after popunder cooldown active
  5. .asg-container injects on play click (right data-spot-id)
  6. console clean (no [ASGB LOADER] errors)

Headless limitation documented: network+DOM checks cover 95% of
regressions without need for full video playback validation.
Use `ad-test --full` or real browser w/ ?debug=1 for visual.

Memory: reference_ad_regression_tool.md added — auto-trigger rule
to run ad-test after spot ID changes / mirror swaps / bundle rebuild.

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

9.0 KiB
Raw Blame History

tubev — Infrastructure Map

Швидкий lookup того, що де лежить у /home/w4/.

Top-level (/home/w4/)

/home/w4/
├── .claude/                  # Claude Code config (settings, hooks, projects)
├── .bashrc                   # alias ll/la/l + PATH=$HOME/bin
├── .tmux.conf                # tmux config
├── bin/                      # PATH scripts (launchers + bot management)
├── scripts/                  # bot communication scripts (flock-serialized)
├── comms/                    # bot ↔ goboss channel (task / report files)
├── start-devs.sh             # bulk launcher (boss/gocc/goorest/all)
├── git-save-all.sh           # commit-and-push helper
├── goboss/                   # goboss workspace
│   └── tubev/                # ← OUR repo (git@gdev.hserver.cloud:ovtube/vtube.git)
├── gocc1/tubev/              # gocc1 worktree (own clone)
├── gocc2/tubev/              # gocc2 worktree
├── gocc3/tubev/              # gocc3 worktree
├── gocc4/tubev/              # gocc4 worktree
├── backup_<port>/            # 14 prod-mirror dirs (8081, 8084, ..., 8148)
└── *.md                      # legacy admin1-era docs (read-only, не наші)

/home/admin1 — symlink → /home/w4/. Старі скрипти референсять /home/admin1/..., працює прозоро.

~/bin/ — PATH scripts

Script Призначення
goboss Launcher tmux session goboss → CWD ~/goboss
gocc1 ... gocc4 Launcher tmux sessions для ботів → CWD ~/gocc{N}/tubev
goorest1, goorest2, goorest3 (опціонально, не tubev — інший проект)
clear-bots [bot...] /clear для всіх gocc1-4 (topic switch)
trigger-bots [bot...] Auto-pull + signal новий task через ~/scripts/trigger_bot.sh (flock + idle-wait + verify). Стандартний dispatch. Лог: /tmp/trigger_bot.log.
restart-bots [bot...] kill+start+wait+trigger. Для зависів/нових проектів.
deploy-admin-orest.sh (опціонально, інший проект)
ad-test [url1 ...] Headless ad-flow regression test (Playwright + Chromium). 6 checks per URL. Default — 3 URLs з 8148. Деталі: docs/ADS.md § Automated regression test.

~/scripts/ — bot communication

Script Що робить
send_to_goboss.sh "<msg>" Bot → goboss. Flock-serialized. Stable-idle wait + paste-buffer + dual-Enter + verify.
trigger_bot.sh <session> "<msg>" goboss → bot. Така ж надійність delivery.

Не використовувати raw tmux send-keys для quoted text — guard-bash.sh блокує (Enter sometimes dropped).

~/comms/ — bot ↔ goboss channel

File Direction
gocc{N}-task.md goboss → bot (goboss пише, bot читає)
gocc{N}-report.md bot → goboss (bot Write tool, hook auto-signals)

При normal operation у comms/ тільки 8 файлів (4 task + 4 report). Все інше — проблема (treba clean).

~/.claude/hooks/ — Claude Code hooks

Hook Event Що робить
guard-bash.sh PreToolUse:Bash Granular block: rm/write до /home/nosfortube/ поза edit zone (orest/, frontend_<port>/); rm на system paths; git push для bots; raw tmux send-keys без bot prefix. Backup: .bak.2026-05-02
guard-readonly.sh PreToolUse:Edit|Write Granular: ALLOW /home/nosfortube/frontend_<port>/, /home/nosfortube/orest/. DENY: frontend_<port>_<lang>/, frontend_core/, .git/, system paths (/etc/, /var/*, etc.). Backup: .bak.2026-05-02
auto-signal-goboss.sh PostToolUse:Write|Bash Auto-signal gocc{N}: done коли bot пише ~/comms/<bot>-report.md
check-inbox.sh (опційний) Periodic inbox check
telegram-notify.sh Stop TG completion ping
guard-readonly.sh.disabled (disabled backup) старіша версія, не активна

Конфігурація: ~/.claude/settings.json секція hooks.

~/.claude/projects/ — per-project memory

Slug Owner
-home-w4-goboss/memory/ goboss (single source of truth)
-home-w4-gocc{1-4}-tubev/memory/ symlink → -home-w4-goboss/memory/ (shared)

Auto-determined by Claude Code based on cwd → slug. Якщо bot CWD змінюється → з'являється новий slug; якщо потрібен shared memory — додай symlink.

MEMORY.md у memory/ — auto-loaded в context (індекс).

~/.claude/settings.json (ключове)

{
  "permissions": {
    "allow": ["Bash(*)", "Read(*)", "Edit(*)", "Write(*)", ...],
    "additionalDirectories": ["/home/w4/goboss", "/home/w4/comms", "/tmp"]
  },
  "hooks": {
    "PreToolUse": [
      {"matcher": "Edit|Write", "command": "/home/admin1/.claude/hooks/guard-readonly.sh"},
      {"matcher": "Bash", "command": "/home/admin1/.claude/hooks/guard-bash.sh"}
    ],
    "PostToolUse": [
      {"matcher": "Write|Bash", "command": "/home/admin1/.claude/hooks/auto-signal-goboss.sh"}
    ]
  }
}

/home/admin1/... працює через symlink → /home/w4/....

~/start-devs.sh — bulk launcher

~/start-devs.sh boss       # тільки goboss
~/start-devs.sh gocc       # gocc1-4
~/start-devs.sh goorest    # (інший проект)
~/start-devs.sh all        # все

Skipує already-running sessions.

~/.bashrc — environment

  • PATH=$HOME/bin:$PATH — saves typing ~/bin/<script>, можна просто <script>
  • aliases: ll='ls -alF', la='ls -A', l='ls -CF', alert (notify-send)

~/backup_<port>/ — prod mirrors

14 окремих git repos з frontend кодом сайтів. Mirror з /home/nosfortube/frontend_<port>/ через sync.sh. Деталі: SITES.md, SYNC_WORKFLOW.md.

Legacy docs у ~/*.md (read-only)

File Що в ньому
PROJECTS.md Список 3 admin1-era проектів (PBN Site Factory, Devil Billing, ncollector)
SERVER.md Опис серверних програм (Site Factory, Tea Bot, etc.)
OREST_GUIDE.md Гайд для Орест-розробника
PARALLEL_DEV_PLAN.md План parallel dev (admin1 era)
SCRAPER_API_PLAN.md Wayback scraper API plan
ARCHITECTURE_REVIEW.md Архитектура admin1 проекту

Не наш scope. Може бути полезним для контексту попередніх проектів. Якщо щось з них переноситься у tubev — копіюй з адаптацією, не reference напряму.

"Bot exited?" troubleshooting

Якщо tmux capture-pane -t <bot> -p | tail -10 показує порожні рядки — це НЕ обов'язково exit. Claude Code UI має великий buffer внизу input-line. Перевір повний pane:

tmux capture-pane -t <bot> -p           # повний pane content
ps -ef | grep claude | grep <bot-pid>   # чи живий процес
tmux list-sessions                      # session attached/detached

Якщо banner Claude Code v2.x.x присутній + prompt-line присутній → бот живий, просто простоює. Empty area знизу = padding, не exit.

Реальний exit signs:

  • Pane показує bash prompt (w4@frontend03:~$) замість Claude UI
  • tmux list-sessions не має сесії боту
  • Process check не знаходить claude процес з відповідним PID

Quick lookup cheatsheet

Що шукаю Де подивитися
Як запустити бота? ~/bin/<bot> або ~/start-devs.sh gocc
Як надіслати task боту? Write ~/comms/<bot>-task.md + ~/bin/trigger-bots <bot>
Як reset зависший бот? ~/bin/restart-bots <bot> (НЕ tmux kill-session)
Що робить hook X? ~/.claude/hooks/<name>.sh (читай комментарі вгорі)
Де memory file Y? ~/.claude/projects/-home-w4-goboss/memory/<name>.md
Який сайт на порту N? SITES.md
Як sync.sh працює для site N? SYNC_WORKFLOW.md
Чи є модуль X? MODULES.md
Що в backlog? RECOMMENDATIONS.md
Як push працює? GIT_WORKFLOW.md
Чи це REFACTOR чи BUG? REFACTOR_RULES.md

Last update: 2026-04-30 (initial map after first project setup).

Якщо щось у /home/w4/ змінюється (новий script, новий hook, новий bot) — оновити цей файл.