--- phase: 02-critical-bugs-fix plan: 01 type: execute wave: 1 depends_on: ["01-01"] files_modified: - autoload/controls/class.Tasks.php - autoload/controls/class.Users.php - autoload/class.S.php - autoload/class.Excel.php - autoload/class.Tpl.php - autoload/factory/class.Projects.php - autoload/factory/class.Tasks.php - templates/finances/main-view.php - templates/finances/operations-list.php - templates/tasks/work-time.php - templates/projects/tasks.php - templates/site/layout-cron.php - templates/tasks/task_single.php autonomous: false --- ## Goal Naprawić wszystkie 58 bugów zidentyfikowanych w SonarQube baseline — 3 CRITICAL, 35 MAJOR, 20 MINOR. ## Purpose Poprawa Reliability Rating z D do B lub lepszej. Eliminacja bugów logicznych (return z void, unreachable code, self-assignment) i problemów HTML (duplikaty ID, brak scope w th). ## Output - Naprawione pliki PHP i szablony HTML - Reskan SonarQube potwierdzający redukcję bugów - `.paul/phases/02-critical-bugs-fix/02-01-SUMMARY.md` ## Project Context @.paul/PROJECT.md @.paul/ROADMAP.md @.paul/STATE.md ## Prior Work @.paul/phases/01-sonarqube-baseline/01-01-SUMMARY.md (baseline metrics — bugs breakdown) ## Source Files @autoload/controls/class.Tasks.php @autoload/controls/class.Users.php @autoload/class.S.php @autoload/class.Excel.php @autoload/class.Tpl.php @autoload/factory/class.Projects.php @autoload/factory/class.Tasks.php @templates/finances/main-view.php @templates/finances/operations-list.php @templates/tasks/work-time.php @templates/projects/tasks.php @templates/site/layout-cron.php ## AC-1: PHP logic bugs naprawione ```gherkin Given 8 bugów logicznych w plikach PHP (S3699, S1656, S3923, S5850, S1763) When wszystkie zostaną naprawione Then SonarQube nie zgłasza żadnych BUG issues typu S3699, S1656, S3923, S5850, S1763 ``` ## AC-2: HTML template bugs naprawione ```gherkin Given 30 bugów w szablonach HTML (S7930 duplicate IDs, TableHeaderHasIdOrScope, MouseEvent) When wszystkie zostaną naprawione Then SonarQube nie zgłasza żadnych BUG issues w plikach templates/ ``` ## AC-3: PHP convention bugs naprawione ```gherkin Given 20 bugów konwencji PHP (S1784 brak visibility, S2003) When wszystkie zostaną naprawione Then SonarQube nie zgłasza żadnych BUG issues typu S1784 i S2003 ``` ## AC-4: Reskan potwierdza redukcję ```gherkin Given naprawione bugi w kodzie When uruchomiony zostanie sonar-scanner Then liczba bugów = 0 (lub znacząco zredukowana) ``` Task 1: Naprawa PHP logic i convention bugs (28 bugów) autoload/controls/class.Tasks.php, autoload/controls/class.Users.php, autoload/class.S.php, autoload/class.Excel.php, autoload/class.Tpl.php, autoload/factory/class.Projects.php, autoload/factory/class.Tasks.php Naprawić następujące bugi PHP: **S3699 — Return from void (2 bugs):** - controls/class.Tasks.php:432 — `return TasksController::taskChangeStatus()` → wywołaj bez return (metoda void) - controls/class.Users.php:242 — `return UsersController::switchBackToAdmin()` → wywołaj bez return (metoda void) **S1656 — Self-assignment (1 bug):** - controls/class.Tasks.php:537 — Usunąć lub poprawić bezużyteczne self-assignment **S3923 — Identical conditional branches (2 bugs):** - class.S.php:167 — Usunąć zduplikowane bloki warunkowe lub zróżnicować logikę - class.S.php:176 — Usunąć zduplikowane bloki warunkowe lub zróżnicować logikę **S5850 — Ambiguous regex (1 bug):** - class.Excel.php:26 — Dodać jawne grupowanie w regex aby operator precedence był jednoznaczny **S1763 — Unreachable code (2 bugs):** - factory/class.Projects.php:326 — Usunąć nieosiągalny kod po return/break - factory/class.Tasks.php:851 — Usunąć nieosiągalny kod po return/break **S1784 — Missing method visibility (15 bugs):** - controls/class.Tasks.php i inne — dodać explicit `public`, `protected` lub `private` do metod bez visibility **S2003 — Short open tags (3 bugs):** - Zamienić ` Odczytać naprawione pliki i sprawdzić, że: - Brak return z metod void - Brak self-assignment - Brak identycznych gałęzi warunkowych - Regex ma jawne grupowanie - Brak nieosiągalnego kodu - Wszystkie metody mają explicit visibility - Brak short open tags AC-1 i AC-3 satisfied: Wszystkie PHP bugs naprawione Task 2: Naprawa HTML template bugs (30 bugów) templates/finances/main-view.php, templates/finances/operations-list.php, templates/tasks/work-time.php, templates/projects/tasks.php, templates/site/layout-cron.php, templates/tasks/task_single.php Naprawić następujące bugi HTML: **S7930 — Duplicate HTML IDs (3 CRITICAL bugs):** - templates/tasks/work-time.php:179 — zduplikowany id="billing-empty-state" (pierwszy na linii 176). Zmienić drugi na unikalny np. "billing-empty-state-2" lub usunąć jeśli zbędny - templates/projects/tasks.php:116 — zduplikowany id="inprogress-tasks-container" (pierwszy na 97). Zmienić na unikalny - templates/site/layout-cron.php:52 — zduplikowany id="divider" (pierwszy na 47). Zmienić na unikalny np. "divider-2" lub użyć klasy CSS **TableHeaderHasIdOrScopeCheck — Brak scope w th (22 MAJOR bugs):** - templates/finances/main-view.php — dodać scope="col" do wszystkich tagów bez scope/id (linie: 94-99, 107, 185-210, 222-225, 252-255) - templates/finances/operations-list.php — dodać scope="col" do (linie: 28-31, 65, 68) **MouseEventWithoutKeyboardEquivalentCheck (1 bug):** - templates/finances/main-view.php:64 — do z onclick dodać onkeydown/onkeypress equivalent **ItemTagNotWithinContainerTagCheck (1 bug):** - templates/tasks/task_single.php — sprawdzić i naprawić wg SonarQube message **Inne MINOR HTML bugs (3):** - Sprawdzić wg SonarQube messages i naprawić WAŻNE: Dodawać scope="col" masowo do jest bezpieczne — nie zmienia renderowania. Przy duplikatach ID sprawdzić czy JavaScript nie referuje stare ID. Odczytać naprawione szablony i sprawdzić, że: - Brak zduplikowanych ID w HTML - Wszystkie mają scope="col" lub id - Elementy onclick mają keyboard equivalent AC-2 satisfied: Wszystkie HTML template bugs naprawione Reskan SonarQube: 1. Uruchomię sonar-scanner automatycznie 2. Poczekam na wyniki 3. Sprawdzę metryki przez MCP Reskan zostanie wykonany automatycznie. Wyniki w SUMMARY.md. ## DO NOT CHANGE - config.php (konfiguracja) - index.php (punkt wejścia) - autoload/Controllers/** (nowe controllery — nie modyfikować) - autoload/Domain/** (nowy kod Domain — nie modyfikować w tym planie) ## SCOPE LIMITS - Naprawiamy TYLKO issues typu BUG z SonarQube - NIE naprawiamy Code Smells (osobna faza) - NIE zmieniamy logiki biznesowej - NIE refaktoryzujemy kodu poza minimum wymagane do naprawy buga - NIE dodajemy nowych zależności Before declaring plan complete: - [ ] Wszystkie 8 PHP logic bugs naprawione - [ ] Wszystkie 20 PHP convention bugs naprawione - [ ] Wszystkie 3 CRITICAL HTML duplicate ID bugs naprawione - [ ] Wszystkie 22 MAJOR HTML th scope bugs naprawione - [ ] Wszystkie 5 MINOR HTML/accessibility bugs naprawione - [ ] Reskan SonarQube potwierdza redukcję bugów - [ ] Żadna logika biznesowa nie została zmieniona - [ ] All acceptance criteria met - Bugs w SonarQube: 0 (cel) lub < 5 (akceptowalne) - Reliability Rating: B lub lepsza (poprawa z D) - Żadne nowe bugi nie zostały wprowadzone - Aplikacja działa bez regresji After completion, create `.paul/phases/02-critical-bugs-fix/02-01-SUMMARY.md`