3 migrations (email_mailboxes, email_templates, email_logs), full CRUD for SMTP mailboxes with encrypted passwords (IntegrationSecretCipher), native SMTP connection test via stream_socket_client, sidebar navigation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8.6 KiB
Project State
Project Reference
See: .paul/PROJECT.md (updated 2026-03-12)
Core value: Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów sprzedaży i nadawać przesyłki bez przełączania się między platformami. Current focus: v0.4 Moduł E-mail — Skrzynki pocztowe, szablony wiadomości, wysyłka z zamówień.
Current Position
Milestone: v0.4 Moduł E-mail Phase: [1] of [3] (DB + Skrzynki pocztowe) — Complete Plan: 13-01 complete Status: Phase 13 complete, ready for Phase 14 Last activity: 2026-03-15 — UNIFY 13-01 complete, phase transition done
Progress:
- v0.1 Initial Release: [██████████] 100% ✓
- v0.2 Pre-Expansion Fixes: [██████████] 100% ✓
- v0.3 Moduł Paragonów: [██████████] 100% ✓
- v0.4 Moduł E-mail: [███░░░░░░░] 33%
- Phase 13: [██████████] 100% ✓
- Phase 14: [░░░░░░░░░░] 0%
- Phase 15: [░░░░░░░░░░] 0%
Loop Position
Current loop state:
PLAN ──▶ APPLY ──▶ UNIFY
✓ ✓ ✓ [Loop complete — Phase 13 done, ready for Phase 14]
Accumulated Context
Decisions
| Data | Decyzja | Faza | Wpływ |
|---|---|---|---|
| 2026-03-12 | AllegroTokenManager wydzielony z 4 klas OAuth | Faza 01 | Centralizacja logiki tokenów, brak duplikacji |
| 2026-03-12 | StringHelper jako final static class w Core/Support | Faza 01 | 19 duplikatów helperów usunięte z 15 klas |
| 2026-03-13 | CronHandlerFactory jako jedyne miejsce kompozycji crona | Faza 02 | Application.php i bin/cron.php zsynchronizowane; 2 bugi naprawione |
| 2026-03-13 | Pole CSRF w formularzach: _token (nie _csrf_token) |
Faza 03 | Ustandaryzowane w OrdersController, ShipmentController i 2 widokach |
| 2026-03-13 | Flash messages: Flash::set('module.type') / Flash::get('module.type', '') | Faza 05 | OrdersController i ShipmentController zmigrowane; jeden wzorzec w całej aplikacji |
| 2026-03-13 | validateXxxInput(): ?string i validateXxxAccess(): ?Response jako wzorce helperów walidacji | Faza 06 | Redukcja return statements do ≤3; wzorzec do użycia w kolejnych planach |
| 2026-03-15 | dg/bypass-finals zamiast usuwania final z klas produkcyjnych | Faza 07 | Testy mockują final classes bez zmiany konwencji projektu |
| 2026-03-15 | 3 bugi use-statement naprawione (odkryte przez testy) | Faza 07 | RuntimeException catch w 401 retry wreszcie działa; AllegroOAuthException rzucane poprawnie |
| 2026-03-15 | InPost ShipX API (nie Allegro WZA) jako natywny provider | Faza 07 | InpostShipmentService niezależny od Allegro; workaround remap usunięty |
| 2026-03-15 | vendor/ dodany do ftp-kr ignore; deploy vendor ręcznie | Faza 07 | Auto-upload nie nadpisze vendor/ na serwerze |
| 2026-03-15 | Snapshot pattern: seller/buyer/items jako JSON | Faza 10 | Dane zamrożone w momencie wystawienia paragonu |
| 2026-03-15 | Natywny stream_socket_client do testu SMTP (bez PHPMailer) | Faza 13 | Test połączenia SMTP bez nowych zależności; PHPMailer w fazie 15 |
| 2026-03-15 | IntegrationSecretCipher do szyfrowania haseł SMTP | Faza 13 | Reuse istniejącego AES-256-CBC+HMAC; spójny wzorzec |
| 2026-03-15 | Auto-reset is_default na email_mailboxes przy save | Faza 13 | Tylko jedna domyślna skrzynka |
| 2026-03-15 | Atomowe numerowanie: INSERT ON DUPLICATE KEY UPDATE | Faza 10 | Bezpieczne kolejne numery paragonów |
| 2026-03-15 | Moduł Accounting w App\Modules\Accounting | Faza 10 | Separacja od Settings |
| 2026-03-15 | dompdf v3.1 server-side PDF generation | Faza 11 | Nowa zależność composer; wymaga vendor/ na serwerze |
| 2026-03-15 | ftp-kr vendor/ nie ignorowany (zmiana na /vendor/bin) | Faza 11 | Automatyczny upload vendor/ przy zmianach; rewizja decyzji z fazy 07 |
| 2026-03-15 | PhpSpreadsheet v5.5 dla eksportu XLSX | Faza 12 | Nowa zależność composer; XLSX lepszy od CSV dla księgowości |
| 2026-03-15 | POST eksport z CSRF + dwa tryby (zaznaczone/wszystkie z filtra) | Faza 12 | Bezpieczny eksport; selectable table-list reuse |
Skill Audit (Faza 13, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 12, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 11, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 10, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Required — do uruchomienia przed kolejnym UNIFY |
Skill Audit (Faza 07, Plan 05)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Zainstalowany (v4.3.5) ale nie uruchomiony w tym planie |
Skill Audit (Faza 07, Plan 04)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 03)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 07, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 06, Plan 06)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH |
Skill Audit (Faza 06, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — brak instalacji w PATH; S1142 violations powinny spaść o ~12-15 po uruchomieniu |
Skill Audit (Faza 05, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — uruchomić ręcznie przed następnym planem z kodem PHP |
Skill Audit (Faza 04, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — plan czysto dokumentacyjny (komentarze SQL, brak nowego kodu PHP); uruchomić przy kolejnym planie z kodem |
Skill Audit (Faza 03, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| sonar-scanner | ○ | Pominięto — przejście do UNIFY bez skanowania; uruchomić przy kolejnym planie |
Skill Audit (Faza 02, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| /code-review | ○ | Pominięto — jednolinijkowa naprawa oczywistego dead code |
| sonar-scanner | ○ | Pominięto — brak nowego kodu, zmiana kosmetyczna |
Skill Audit (Faza 01, Plan 02)
| Oczekiwany | Wywołany | Uwagi |
|---|---|---|
| /feature-dev | ○ | Pominięto — plan był czysto refaktoryzacyjny |
| /code-review | ○ | Pominięto — należy wywołać przed kolejnym UNIFY |
| sonar-scanner | ○ | Nie uruchomiono — należy uruchomić i zaktualizować DOCS/todo.md |
Deferred Issues
- CI/CD SonarQube — dodać GitHub Actions workflow (
.github/workflows/sonarqube.yml) który odpalasonar-scannerautomatycznie przy każdym pushu. Token projektu:sqp_8ef2748d037777cf00cf1b38534f8d435b762d7d(dodać jako GitHub SecretSONAR_TOKEN). Przypisać do fazy związanej z infrastrukturą/DevOps gdy tylko fazy zostaną zdefiniowane. - code-review — wywołać /code-review przed kolejnym UNIFY (pominięto w obydwu planach fazy 01).
- Delivery mapping "Szukaj..." layout — JS
attachSelectFilter()w allegro.php tworzy input search dla InPost/Apaczka selectów, wizualnie wygląda jakby należał do wiersza powyżej. Pre-existing bug, do naprawy osobno.
Git State
Last commit: 22fc330 (feat(11-12-accounting): phases 11-12 complete — milestone v0.3 done)
Branch: main
Feature branches merged: none
Blockers/Concerns
Brak.
Session Continuity
Last session: 2026-03-15 Stopped at: Phase 13 complete Next action: /paul:plan for Phase 14 (Szablony wiadomości) Resume file: .paul/phases/13-email-mailboxes/13-01-SUMMARY.md Resume context:
- v0.1: COMPLETE ✓ (6 phases, 15 plans)
- v0.2: COMPLETE ✓ (1 phase, 5 plans)
- v0.3: COMPLETE ✓ (5 phases, 5 plans) — Moduł Paragonów
- v0.4: IN PROGRESS — Phase 13 complete, Phase 14 next
- Faza 0 (nieaktywne przyciski) zrobiona poza planem
STATE.md — Updated after every significant action