diff --git a/.paul/PROJECT.md b/.paul/PROJECT.md
index 1cd10c1..b2520d1 100644
--- a/.paul/PROJECT.md
+++ b/.paul/PROJECT.md
@@ -13,8 +13,8 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
| Attribute | Value |
|-----------|-------|
| Version | 1.0.0 |
-| Status | v1.5 Complete |
-| Last Updated | 2026-03-25 |
+| Status | v1.6 Complete |
+| Last Updated | 2026-03-27 |
## Requirements
@@ -52,10 +52,11 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
- [x] Ograniczenie szumu logow importu Allegro i deduplikacja wpisow activity log - Phase 41
- [x] Automatyzacja: event `shipment.status_changed` + warunki statusowe przesylki - Phase 42
- [x] Usuwanie wpisu z kolejki druku etykiet z panelu ustawien - Phase 43
+- [x] Szybka zmiana statusu zamowienia z listy zamowien (inline dropdown + AJAX) - Phase 44
### Active (In Progress)
-- [ ] Brak aktywnych faz w milestone v1.5 (40-43 zakonczone)
+- [ ] Brak aktywnych faz
### Planned (Next)
@@ -147,5 +148,5 @@ Quick Reference:
---
*PROJECT.md — Updated when requirements or context change*
-*Last updated: 2026-03-25 after Phase 40-43 completion (Operational Workflow Cleanup)*
+*Last updated: 2026-03-27 after Phase 44 completion (Inline Status Change)*
diff --git a/.paul/ROADMAP.md b/.paul/ROADMAP.md
index a497f0e..f27ebb2 100644
--- a/.paul/ROADMAP.md
+++ b/.paul/ROADMAP.md
@@ -6,25 +6,34 @@ orderPRO to narzÄ™dzie do wielokanaĹ‚owego zarzÄ…dzania sprzedaĹĽÄ
## Current Milestone
-v1.5 Operational Workflow Cleanup - Complete (phases 40-43 complete)
+v1.6 Quick Status Change - Complete (2026-03-27)
-Usprawnienia operacyjne po wdrozeniu modulu wydrukow i trackingu: usuniecie zbędnego bulk print z listy zamowien, ograniczenie szumu logow importu Allegro, rozszerzenie automatyzacji o zdarzenia statusu przesylki oraz mozliwosc usuwania wpisow z kolejki druku.
+Szybka zmiana statusu zamówienia bezpośrednio z listy zamówień — klikalny dropdown w kolumnie statusu, zmiana przez AJAX bez przeładowania strony.
| Phase | Name | Status | Plans |
|------|------|--------|-------|
-| 40 | Remove Order List Bulk Print | Complete (2026-03-25) | 1/1 (`40-01-PLAN.md`) |
-| 41 | Allegro Import Log Rationalization | Complete (2026-03-25) | 1/1 (`41-01-PLAN.md`) |
-| 42 | Automation Shipment Status Event | Complete (2026-03-25) | 1/1 (`42-01-PLAN.md`) |
-| 43 | Print Queue Entry Removal | Complete (2026-03-25) | 1/1 (`43-01-PLAN.md`) |
+| 44 | Inline Status Change | Complete (2026-03-27) | 1/1 (`44-01-PLAN.md`) |
-Active phase directories:
-- `.paul/phases/40-remove-order-list-bulk-print/`
-- `.paul/phases/41-allegro-import-log-rationalization/`
-- `.paul/phases/42-automation-shipment-status-event/`
-- `.paul/phases/43-print-queue-entry-removal/`
+Archive: `.paul/phases/44-inline-status-change/`
## Completed Milestones
+
+v1.5 Operational Workflow Cleanup - 2026-03-25 (4 phases, 4 plans)
+
+Usprawnienia operacyjne: usunięcie bulk print, ograniczenie szumu logów importu Allegro, automatyzacja shipment.status_changed, usuwanie wpisów z kolejki druku.
+
+| Phase | Name | Plans | Completed |
+|-------|------|-------|-----------|
+| 40 | Remove Order List Bulk Print | 1/1 | 2026-03-25 |
+| 41 | Allegro Import Log Rationalization | 1/1 | 2026-03-25 |
+| 42 | Automation Shipment Status Event | 1/1 | 2026-03-25 |
+| 43 | Print Queue Entry Removal | 1/1 | 2026-03-25 |
+
+Archive: `.paul/phases/40-*`, `.paul/phases/41-*`, `.paul/phases/42-*`, `.paul/phases/43-*`
+
+
+
v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)
@@ -145,20 +154,6 @@ Archive: `.paul/phases/17-receipt-duplicate-guard/`
-## Completed Milestones
-
-
-v1.4 UI Readability Tweaks - 2026-03-25 (1 phase, 1 plan)
-
-Rozdzielenie semantyki kolorow UI: glowny kolor przyciskow akcji zostal oddzielony od koloru naglowkow sekcji, aby poprawic czytelnosc i szybkosc skanowania interfejsu.
-
-| Phase | Name | Plans | Completed |
-|-------|------|-------|-----------|
-| 30 | Button Primary Color Distinction | 1/1 | 2026-03-25 |
-
-Archive: .paul/phases/30-button-primary-color/
-
-
v0.5 Moduł Automatyzacji — 2026-03-18 (1 phase, 2 plans)
@@ -234,7 +229,7 @@ Archive: `.paul/milestones/v0.1-ROADMAP.md`
---
*Roadmap created: 2026-03-12*
-*Last updated: 2026-03-25 - v1.5 phases 40-43 complete*
+*Last updated: 2026-03-27 - v1.6 Quick Status Change complete*
diff --git a/.paul/STATE.md b/.paul/STATE.md
index 4227ab0..7fe1e3c 100644
--- a/.paul/STATE.md
+++ b/.paul/STATE.md
@@ -5,15 +5,15 @@
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:** v1.5 completed - phases 40-43 delivered
+**Current focus:** v1.6 complete — Phase 44 delivered
## Current Position
-Milestone: v1.5 Operational Workflow Cleanup
-Phase: [4] of [4] (Print Queue Entry Removal) - Unified
-Plan: 43-01 completed with summary
-Status: PLAN/APPLY/UNIFY closed for phases 40-43
-Last activity: 2026-03-25 23:59 - Completed phases 41-43 and updated docs/summaries
+Milestone: v1.6 Quick Status Change — Complete
+Phase: [1] of [1] (Inline Status Change) — Unified
+Plan: 44-01 completed with summary
+Status: PLAN/APPLY/UNIFY closed for phase 44
+Last activity: 2026-03-27 — Phase 44 complete, milestone v1.6 closed
Progress:
- v0.1 Initial Release: [##########] 100% done
@@ -39,13 +39,15 @@ Progress:
- Phase 41: [##########] Complete (1/1 plans)
- Phase 42: [##########] Complete (1/1 plans)
- Phase 43: [##########] Complete (1/1 plans)
+- v1.6 Quick Status Change: [##########] 100% done
+ - Phase 44: [##########] Complete (1/1 plans)
## Loop Position
Current loop state:
```
PLAN --> APPLY --> UNIFY
- done done done [Loop closed for phases 40-43]
+ done done done [Loop closed for phase 44]
```
## Accumulated Context
@@ -53,6 +55,8 @@ PLAN --> APPLY --> UNIFY
### Decisions
| Data | Decyzja | Faza | Wpływ |
|------|---------|------|-------|
+| 2026-03-27 | Fixed positioning dropdown (document.body) zamiast absolute wewnatrz table-wrap | Faza 44 | Dropdown nie ucinany przez overflow:hidden na .table-wrap |
+| 2026-03-27 | AJAX detect przez X-Requested-With header z fallback na redirect | Faza 44 | updateStatus() obsluguje oba tryby w jednej metodzie |
| 2026-03-25 | Import Allegro: trigger context + deduplikacja logow (`source_order_id + source_updated_at + trigger`) | Faza 41 | Czytelniejsza historia zamowienia i mniej duplikatow wpisow `import` |
| 2026-03-25 | Automatyzacja: event `shipment.status_changed` z warunkiem `shipment_status` (mapowanie biznes->techniczny) | Faza 42 | Reguly moga reagowac na realny status dostawy bez przebudowy engine |
| 2026-03-25 | Tracking cron triggeruje automatyzacje tylko przy realnej zmianie `delivery_status` | Faza 42 | Brak falszywych triggerow i mniejszy szum automatyzacji |
@@ -88,6 +92,11 @@ PLAN --> APPLY --> UNIFY
| 2026-03-17 | Email history jako wpisy w order_activity_log (nie osobna sekcja) | Faza 15 | Spójność z istniejącym UX — jeden timeline zamiast fragmentacji |
| 2026-03-17 | VariableResolver wydzielony z EmailTemplateController | Faza 15 | Reuse logiki zmiennych; resolwer niezaleĹĽny od kontrolera szablonĂłw |
+### Skill Audit (Faza 44, Plan 01)
+| Oczekiwany | Wywolany | Uwagi |
+|------------|---------|-------|
+| sonar-scanner | override | Pominieto na podstawie explicit user override; lint PHP + build CSS PASS |
+
### Skill Audit (Faza 43, Plan 01)
| Oczekiwany | Wywołany | Uwagi |
|------------|---------|-------|
@@ -272,7 +281,7 @@ PLAN --> APPLY --> UNIFY
- **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: 3610571 — feat(v1.5): complete phases 40-43 workflow cleanup
+Last commit: pending (phase 44 commit) — feat(v1.5): complete phases 40-43 workflow cleanup
Branch: main
Feature branches merged: none
@@ -281,13 +290,10 @@ Brak.
## Session Continuity
-Last session: 2026-03-25 23:59
-Stopped at: v1.5 phases 40-43 completed (summaries + docs + state updated)
-Next action: Start next milestone planning ($paul-milestone or $paul-plan for next TODO batch)
+Last session: 2026-03-27
+Stopped at: v1.6 phase 44 completed (SUMMARY + docs + state updated)
+Next action: Start next milestone planning (/paul:milestone or /paul:plan)
Resume file: .paul/ROADMAP.md
-Resume context:
-- v0.1-v1.4: COMPLETE done (30 phases, 42 plans)
-- v1.5: COMPLETE done (phases 40-43)
---
*STATE.md — Updated after every significant action*
diff --git a/.paul/phases/44-inline-status-change/44-01-PLAN.md b/.paul/phases/44-inline-status-change/44-01-PLAN.md
new file mode 100644
index 0000000..8f6814f
--- /dev/null
+++ b/.paul/phases/44-inline-status-change/44-01-PLAN.md
@@ -0,0 +1,185 @@
+---
+phase: 44-inline-status-change
+plan: 01
+type: execute
+wave: 1
+depends_on: []
+files_modified:
+ - src/Modules/Orders/OrdersController.php
+ - resources/views/orders/list.php
+ - resources/scss/modules/_orders.scss
+ - resources/js/modules/inline-status-change.js
+ - public/assets/css/modules/orders.css
+ - public/assets/js/modules/inline-status-change.js
+autonomous: true
+---
+
+
+## Goal
+Dodać szybką zmianę statusu zamówienia bezpośrednio z listy zamówień — kliknięcie w badge statusu otwiera dropdown z dostępnymi statusami, wybór zmienia status przez AJAX bez przeładowania strony.
+
+## Purpose
+Operator nie musi wchodzić w szczegóły zamówienia aby zmienić status — oszczędność czasu przy obsłudze wielu zamówień.
+
+## Output
+- Zmodyfikowany kontroler z obsługą AJAX w `updateStatus()`
+- Dropdown statusów w kolumnie statusu na liście zamówień
+- JS moduł do inline zmiany statusu
+- Style SCSS dla dropdowna
+
+
+
+## Project Context
+@.paul/PROJECT.md
+@.paul/ROADMAP.md
+@.paul/STATE.md
+
+## Source Files
+@src/Modules/Orders/OrdersController.php — metody: index(), updateStatus(), toTableRow(), statusBadge(), buildAllStatusOptions(), statusColorMap()
+@resources/views/orders/list.php — widok listy zamówień
+@resources/views/components/table-list.php — komponent tabeli (kolumna status_badges jest raw HTML)
+@routes/web.php — POST /orders/{id}/status endpoint (linia 337)
+
+
+
+## Required Skills (from SPECIAL-FLOWS.md)
+
+| Skill | Priority | When to Invoke | Loaded? |
+|-------|----------|----------------|---------|
+| sonar-scanner | required | Po APPLY, przed UNIFY | ○ |
+
+**BLOCKING:** Required skills MUST be loaded before APPLY proceeds.
+
+## Skill Invocation Checklist
+- [ ] sonar-scanner loaded (run command or confirm)
+
+
+
+
+## AC-1: Dropdown statusów pojawia się po kliknięciu badge
+```gherkin
+Given lista zamówień wyświetla zamówienia z badge'ami statusów
+When operator kliknie w badge statusu zamówienia
+Then pojawia się dropdown z listą wszystkich dostępnych statusów pogrupowanych wg grup statusowych
+And aktualny status jest wyróżniony w dropdown
+And kliknięcie poza dropdown zamyka go
+```
+
+## AC-2: Zmiana statusu przez AJAX
+```gherkin
+Given dropdown statusów jest otwarty przy zamówieniu
+When operator wybierze nowy status z listy
+Then wysyłany jest request AJAX POST /orders/{id}/status z new_status i _token
+And badge statusu zamienia się na nowy (z prawidłowym kolorem i etykietą)
+And dropdown zamyka się automatycznie
+And nie następuje przeładowanie strony
+```
+
+## AC-3: Obsługa błędów AJAX
+```gherkin
+Given operator wybiera nowy status z dropdown
+When request AJAX zwróci błąd (CSRF expired, order not found, server error)
+Then wyświetla się komunikat błędu przez OrderProAlerts
+And badge wraca do poprzedniego stanu
+And dropdown zamyka się
+```
+
+
+
+
+
+
+ Task 1: Rozszerzenie updateStatus() o tryb AJAX + przekazanie danych statusów do widoku listy
+ src/Modules/Orders/OrdersController.php
+
+ 1. W metodzie `updateStatus()` — wykryj request AJAX przez nagłówek `X-Requested-With: XMLHttpRequest`:
+ - Jeśli AJAX: zwróć `Response::json(...)` z kluczami: `success`, `status_code`, `status_label`, `status_color` (kolor hex z grupy)
+ - Jeśli nie-AJAX: zachowaj obecne zachowanie (redirect)
+ - Przy błędach AJAX: zwróć JSON z `success: false` i `error` message
+ 2. W metodzie `index()` — przekaż `allStatuses` (z `buildAllStatusOptions()`) i `statusColorMap` do widoku, aby JS miał dane do budowy dropdown
+ 3. W metodzie `toTableRow()` — dodaj do HTML badge `data-order-id` i `data-current-status` atrybuty, aby JS mógł zidentyfikować zamówienie i aktualny status
+
+ Unikaj: Zmiany zachowania dla nie-AJAX requestów; dodawania nowych zależności
+
+
+ - `curl -X POST /orders/1/status -H "X-Requested-With: XMLHttpRequest" -d "new_status=shipped&_token=..." ` zwraca JSON
+ - Standardowy POST nadal zwraca redirect
+
+ AC-2 i AC-3 satisfied: endpoint zwraca JSON dla AJAX, zachowuje redirect dla form submit
+
+
+
+ Task 2: Dropdown UI + JavaScript moduł inline zmiany statusu + style SCSS
+ resources/views/orders/list.php, resources/scss/modules/_orders.scss, resources/js/modules/inline-status-change.js, public/assets/js/modules/inline-status-change.js, public/assets/css/modules/orders.css
+
+ 1. W `resources/views/orders/list.php`:
+ - Dodaj `
+
+