114 lines
5.2 KiB
Markdown
114 lines
5.2 KiB
Markdown
# PAUL Handoff
|
|
|
|
**Date:** 2026-05-06
|
|
**Status:** paused (end of productive session)
|
|
|
|
---
|
|
|
|
## READ THIS FIRST
|
|
|
|
You have no prior context. This document tells you everything.
|
|
|
|
**Project:** jachty3.pagedev.pl — WordPress plugin `yacht-booking-system` (rezerwacje jachtów z dwukierunkową synchronizacją Google Calendar przez iCal)
|
|
**Core value:** Klienci mogą sprawdzić dostępność jachtu i złożyć rezerwację przez stronę bez kontaktu z właścicielem.
|
|
|
|
---
|
|
|
|
## Current State
|
|
|
|
**Version:** 1.0.0 (Beta → szybko zbliża się do v1.0 production)
|
|
**Milestone:** v1.0 Production Release — 92%
|
|
**Phase:** 9 of 9 — Finalizacja (60%, 3/5 planów)
|
|
**Plan:** 09-03 — **Complete** (loop closed)
|
|
|
|
**Loop Position:**
|
|
```
|
|
PLAN ──▶ APPLY ──▶ UNIFY
|
|
✓ ✓ ✓ [Loop 09-03 complete, ready for 09-04]
|
|
```
|
|
|
|
---
|
|
|
|
## What Was Done (sesja 2026-05-06)
|
|
|
|
Sesja zaczęła z: zamkniętą pętlą 09-01 (UX/UI kalendarza). Wykonano 2 pełne pętle PLAN→APPLY→UNIFY:
|
|
|
|
### Pętla 09-02 — Globalna synchronizacja iCal
|
|
- Wprowadzono dwukierunkową synchronizację z **jednym wspólnym Google Calendar** (przez iCal feed, bez OAuth)
|
|
- Globalny iCal Export feed: `/yacht-ical-global/{token}.ics` — wszystkie rezerwacje w jednym pliku, każdy event z prefiksem `"{nazwa_jachtu} - {klient}"`
|
|
- Globalny iCal Import — parser dopasowuje prefiks przed `" - "` do `post_title` lub `_yacht_gcal_alias` (case-insensitive, mb_*)
|
|
- Anti-loop (eventy z source `ical_import_global` nie są re-eksportowane), stale cleanup, idempotencja po UID
|
|
- Pole `_yacht_gcal_alias` w yacht-edit (krótki alias jak "Maja" zamiast pełnej nazwy)
|
|
- Settings UI: nowa sekcja "Globalna synchronizacja iCal"
|
|
|
|
### Pętla 09-03 — Cleanup OAuth + per-yacht iCal
|
|
- Plugin sprowadzony do JEDNEGO mechanizmu sync (zamiast 4 konkurujących)
|
|
- **Usunięte 3 pliki**: `class-sync-controller.php`, `class-gcal-service.php`, `class-oauth-handler.php` + cały katalog `integrations/google-calendar/`
|
|
- Wycięte: cała sekcja OAuth UI w Settings, handle_oauth_callback, save_gcal_credentials, notice connected/disconnected
|
|
- Wycięte per-yacht iCal: 8 metod, cron `yacht_booking_ical_import`, rewrite rule `^yacht-ical/(\d+)/...`, pola "Google Calendar ID" + "iCal Import URL" + "iCal Feed URL" w yacht-edit, kolumna w yacht-list
|
|
- Cleanup migration w `Installer::migrate()` — version-gated (idempotent), kasuje 4 stale meta keys, 6 stale options, bookings z source `ical_import`, 5 cron hooków. Bez admin notice.
|
|
- ~700+ linii martwego kodu usuniętych
|
|
|
|
---
|
|
|
|
## What's In Progress
|
|
|
|
Nic — obie pętle czysto zamknięte. Zero deferred items, zero open issues.
|
|
|
|
---
|
|
|
|
## What's Next
|
|
|
|
**Immediate:** Klient musi wykonać deploy FTP zmienionych plików (10 zmodyfikowanych + 3 usunięte). Lista w `.paul/changelog/2026-05-06.md`. Po deploy:
|
|
1. Aktywacja pluginu (lub deactivate→activate jeśli już aktywny) — wyzwoli `Installer::migrate()` → cleanup
|
|
2. Settings → Google Calendar → "Globalna synchronizacja iCal" → wkleić iCal URL Google Calendar admina → "Importuj teraz"
|
|
3. Subscribe global Export URL w Google Calendar (Inne kalendarze → Z URL-a)
|
|
4. Format eventów w GCal: `"NazwaJachtu - opis"` (np. "Maja - Kowalski 5 osób")
|
|
|
|
**After that:** Zaplanować 09-04 (Security audit) lub 09-05 (Testy + tłumaczenia + dokumentacja). 09-04 powinien iść przed 09-05.
|
|
|
|
---
|
|
|
|
## Key Files
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `.paul/STATE.md` | Live project state |
|
|
| `.paul/ROADMAP.md` | Phase overview (5 planów w fazie 9, 3 ukończone) |
|
|
| `.paul/phases/09-finalizacja/09-02-SUMMARY.md` | Globalna iCal sync — szczegóły implementacji |
|
|
| `.paul/phases/09-finalizacja/09-03-SUMMARY.md` | Cleanup — co usunięto i czego nie ruszono |
|
|
| `.paul/changelog/2026-05-06.md` | Lista WSZYSTKICH zmienionych plików dzisiaj (do FTP deploy) |
|
|
| `wp-content/plugins/yacht-booking-system/integrations/ical/class-ical-feed.php` | Globalny iCal export (output_global_ics) |
|
|
| `wp-content/plugins/yacht-booking-system/integrations/ical/class-ical-import.php` | Globalny iCal import (run_global_import + parser prefiksu) |
|
|
| `wp-content/plugins/yacht-booking-system/includes/class-installer.php` | Cleanup migration |
|
|
|
|
---
|
|
|
|
## Decyzje sesji (do pamięci)
|
|
|
|
- Klient woli iCal feedy (publiczne URL) zamiast OAuth — prostsza konfiguracja
|
|
- Identyfikacja jachtu po prefiksie `" - "` w SUMMARY eventu (case-insensitive, exact match po lowercase post_title/alias — ŻADNYCH partial)
|
|
- Eventy w GCal bez separatora lub bez dopasowania → ignorowane (nie blokują)
|
|
- Migration "po cichu" — bez admin notice
|
|
- Per-yacht bookings z source `ical_import` USUWANE w migration (klient ponownie zaimportuje), nie migrowane do `ical_import_global`
|
|
|
|
---
|
|
|
|
## Outstanding considerations
|
|
|
|
- Jeśli klient w przyszłości będzie miał problem z dopasowaniem (długie nazwy jachtów, kolizje prefiksów) — używać pola **"Alias dla Google Calendar"** w yacht-edit
|
|
- Plugin jest gotowy produkcyjnie w warstwie integracji GCal. Pozostaje 09-04 (security) i 09-05 (testy/i18n/docs) do v1.0 release.
|
|
|
|
---
|
|
|
|
## Resume Instructions
|
|
|
|
1. Przeczytaj `.paul/STATE.md` (najnowsza pozycja)
|
|
2. Sprawdź `.paul/HANDOFF-2026-05-06.md` (ten plik)
|
|
3. Uruchom `/paul:resume` lub `/paul:progress`
|
|
4. Najprawdopodobniej: `/paul:plan` dla 09-04 (Security audit)
|
|
|
|
---
|
|
|
|
*Handoff created: 2026-05-06*
|