Files
vtube/docs/REFACTOR_RULES.md
goboss a9db23dfa4 initial: tubev infrastructure docs
- CLAUDE.md lean entry-point + index
- BOT_WORKFLOW.md dispatch rules + no-make-work + recommendations cadence
- SITES.md 14 ports inventory
- SYNC_WORKFLOW.md 2 sync paradigms
- MODULES.md module map + DEL_/test/obfuscated flags
- REFACTOR_RULES.md REFACTOR vs CLEANUP vs BUG vs FEATURE
- RECOMMENDATIONS.md initial backlog from gocc1+2+3+4 audits 2026-04-30
- docs/roles/ 4 bot roles
2026-04-30 14:18:23 +00:00

128 lines
6.4 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.
# Refactor / Cleanup / Bug-fix / Feature — definitions
**Чотири типи змін.** Кожна задача має ідентифікувати свій тип. Це визначає:
- Тригер (хто запитує: developer / audit / автоматичний)
- Scope (skill rough effort)
- Тестування (regression / smoke / нове)
- Як комітити (commit message prefix)
---
## REFACTOR
**Що це:** зміна **структури** коду без зміни поведінки. Goal — clearer code, less duplication, easier maintenance.
**Не змінює:**
- HTTP responses (statuses, JSON shape, HTML output byte-for-byte для existing inputs)
- DB schema (без migration)
- API contracts
- Visual rendering for users
**Приклади у tubev:**
- Винести `modules/video.etlua` у shared partial з per-site theme overrides → 14 сайтів дають однаковий HTML output, але код DRY (відсутнє ~60% дублювання)
- Розбити `8081/views/layout.etlua` 1223L монолітом на partials аналогічно іншим 13 сайтам → той же rendered HTML, чистіша структура
- Уніфікувати `sync.sh` на rsync-парадигму (7 selective → 7 rsync) → той же файловий результат, єдина mental model
**Тестування:**
- **Regression smoke** — той же rendered HTML before/after на тестовому сайті
- **Diff snapshot** — `curl <before> vs curl <after>` має бути identical
- Якщо diff — це BUG у refactor, треба фіксити
**Комміт:** `refactor: <scope>: <change>`
**Хто запитує:** developer (`go: refactor X`). НІКОЛИ боти/goboss самостійно — тільки коли явна директива.
---
## CLEANUP
**Що це:** видалення **dead code / dead files** які точно не використовуються.
**Не змінює:**
- Нічого, бо видаляється тільки те що було не задіяне.
**Приклади у tubev:**
- Видалити `DEL_*.etlua` (24 файли × 6 сайтів) — префікс DEL_ явно signals tombstone
- Видалити `*copy*.etlua`, `*_bak*.etlua`, `*_old/` папки — backup-via-rename артефакти
- Видалити `_test.etlua`, `.test.js` з prod tree — tests не у prod
- Видалити legacy UA-* GA snippets (Universal Analytics EOL 2023-07)
**Verification перед видаленням:**
- `grep -rn "<filename>" backup_<port>/` — чи десь reference?
- Якщо posicionado — re-classify як refactor (треба міняти reference спершу)
- Якщо unreferenced — safe to delete
**Тестування:**
- Sync.sh re-run → backup ідентичний прод (для rsync mirror sites)
- Smoke render головних сторінок — нічого не зламалось
**Комміт:** `cleanup: <scope>: remove <what>`
**Хто запитує:** developer ("видали DEL_*"). Боти **знаходять** і **рекомендують** у RECOMMENDATIONS.md, але не видаляють самі без явного go.
---
## BUG-FIX
**Що це:** код **неправильно** працює, треба виправити.
**Змінює поведінку — навмисно**, бо поведінка була некоректна.
**Приклади у tubev:**
- 8112 має 2 GA properties у одному gtag — likely баг (gtag config записує на дві property)
- 8085 submodule `views/static/js/lib` drift — modified reference але не committed; treba decide rollback або commit
- Site domain hardcoded у CSP `<meta>` — правильніше через nginx HTTP header
- `header copy bogolink 25_10_22.etlua` (8112) — typo в назві файлу = drift від 4 інших сайтів
**Тестування:**
- Reproducer test (показує проблему)
- Fix test (показує що пофіксено)
- Regression — нічого іншого не зламалось
**Комміт:** `fix: <scope>: <symptom> → <root cause>`
**Хто запитує:** будь-хто (developer, audit, користувач). Bots HIGH severity findings → goboss flagує developer-у.
---
## FEATURE
**Що це:** **нова поведінка** яка раніше не була доступна.
**Приклади у tubev:**
- Винести `views/config/site.lua` (новий конфіг файл) → нова можливість централізованого управління site_domain / GA ID / CDN host
- SRI integrity для third-party scripts → нова security guarantee
- Build-step для 8148 (винести з sync.sh) → нова функція автоматизації
**Тестування:**
- New tests для нової поведінки (smoke + edge + integration)
- Regression — нічого не зламалось
**Комміт:** `feat: <scope>: <new behavior>`
**Хто запитує:** developer / product. Боти не пропонують features самостійно.
---
## Як вибирати
| Зміна | Type |
|-------|------|
| "Винести в shared module / extract / DRY-it" | **REFACTOR** |
| "Видали мертве" / "забрати DEL_*" / "wipe legacy" | **CLEANUP** |
| "Не працює як треба" / "неправильна відповідь" / "конфлікт даних" | **BUG-FIX** |
| "Додай нове" / "тепер можна X" / "нова кнопка/endpoint" | **FEATURE** |
Якщо змішується — розбий на окремі коміти, **по одному типу на commit**. Mixed commits ламають revert / cherry-pick.
---
## Recommendations vs Plans (важливо)
**Recommendation** = "ось що варто зробити, ось чому, ось приблизний effort".
**Plan** = "ми зараз робимо наступне: ...".
Боти створюють recommendations у [RECOMMENDATIONS.md](RECOMMENDATIONS.md). **Plans створюються тільки коли developer каже "зробити"**.
goboss **не виконує** recommendations самостійно. Тільки нагадує developer-у періодично через session-start summary поки developer не скаже "роби X" або "видали X з backlog".