update
This commit is contained in:
245
.paul/phases/02-critical-bugs-fix/02-01-PLAN.md
Normal file
245
.paul/phases/02-critical-bugs-fix/02-01-PLAN.md
Normal file
@@ -0,0 +1,245 @@
|
||||
---
|
||||
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
|
||||
---
|
||||
|
||||
<objective>
|
||||
## 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`
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## 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
|
||||
</context>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## 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)
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Naprawa PHP logic i convention bugs (28 bugów)</name>
|
||||
<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
|
||||
</files>
|
||||
<action>
|
||||
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ć `<?` na `<?php` lub `<?=`
|
||||
|
||||
**Inne MINOR (2 bugs):**
|
||||
- Tpl.php — sprawdzić i naprawić wg SonarQube message
|
||||
|
||||
WAŻNE: Nie zmieniać logiki biznesowej. Tylko minimalne naprawy bugów.
|
||||
Sprawdzić kontekst każdej zmiany, np. przy S3699 upewnić się, że void metoda rzeczywiście nic nie zwraca.
|
||||
</action>
|
||||
<verify>
|
||||
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
|
||||
</verify>
|
||||
<done>AC-1 i AC-3 satisfied: Wszystkie PHP bugs naprawione</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Naprawa HTML template bugs (30 bugów)</name>
|
||||
<files>
|
||||
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
|
||||
</files>
|
||||
<action>
|
||||
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 <th> bez scope/id (linie: 94-99, 107, 185-210, 222-225, 252-255)
|
||||
- templates/finances/operations-list.php — dodać scope="col" do <th> (linie: 28-31, 65, 68)
|
||||
|
||||
**MouseEventWithoutKeyboardEquivalentCheck (1 bug):**
|
||||
- templates/finances/main-view.php:64 — do <tr> 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 <th> jest bezpieczne — nie zmienia renderowania.
|
||||
Przy duplikatach ID sprawdzić czy JavaScript nie referuje stare ID.
|
||||
</action>
|
||||
<verify>
|
||||
Odczytać naprawione szablony i sprawdzić, że:
|
||||
- Brak zduplikowanych ID w HTML
|
||||
- Wszystkie <th> mają scope="col" lub id
|
||||
- Elementy onclick mają keyboard equivalent
|
||||
</verify>
|
||||
<done>AC-2 satisfied: Wszystkie HTML template bugs naprawione</done>
|
||||
</task>
|
||||
|
||||
<task type="checkpoint:human-action" gate="blocking">
|
||||
<what-to-do>
|
||||
Reskan SonarQube:
|
||||
1. Uruchomię sonar-scanner automatycznie
|
||||
2. Poczekam na wyniki
|
||||
3. Sprawdzę metryki przez MCP
|
||||
</what-to-do>
|
||||
<resume-signal>Reskan zostanie wykonany automatycznie. Wyniki w SUMMARY.md.</resume-signal>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## 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
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
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
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- 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
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/02-critical-bugs-fix/02-01-SUMMARY.md`
|
||||
</output>
|
||||
Reference in New Issue
Block a user