update
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
---
|
||||
plan_id: 20260519-1532-naprawa-inpost-pay-wp-body-open
|
||||
title: Naprawa InPost Pay przez przywrócenie wp_body_open
|
||||
storage: plan-first
|
||||
legacy_phase: null
|
||||
created: 2026-05-19T15:32:42+02:00
|
||||
status: applied_pending_human_verify
|
||||
type: execute
|
||||
autonomous: false
|
||||
delegation: auto
|
||||
files_modified:
|
||||
- wp-content/themes/betheme/header.php
|
||||
quality_radar: degraded
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Naprawić błąd `IPPWidgetOptions is not defined` po instalacji `inpost-pay`.
|
||||
|
||||
## Purpose
|
||||
Wtyczka `inpost-pay` rejestruje skrypt inicjalizujący `IPPWidgetOptions` na hooku `wp_body_open`. Motyw `betheme` nie wywołuje tego hooka po otwarciu `<body>`, więc konfiguracja widgetu nie trafia do HTML przed uruchomieniem `woocommerceizi.js`.
|
||||
|
||||
## Output
|
||||
Jedna zmiana w `wp-content/themes/betheme/header.php`: dodanie `<?php wp_body_open(); ?>` bezpośrednio po `<body <?php body_class(); ?>>`.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
## Project Docs
|
||||
@.paul/PROJECT.md
|
||||
@.paul/STATE.md
|
||||
@.paul/codebase/architecture.md
|
||||
@.paul/codebase/impact_map.md
|
||||
@.paul/codebase/quality_risks.md
|
||||
|
||||
## Source Files
|
||||
@wp-content/themes/betheme/header.php
|
||||
@wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php
|
||||
@wp-content/plugins/inpost-pay/src/InpostPay.php
|
||||
</context>
|
||||
|
||||
<clarifications>
|
||||
- Support InPost wskazał brak `wp_body_open()` w `header.php` jako przyczynę niewstrzyknięcia skryptu z `IPPWidgetOptions`.
|
||||
- W repo nie widać child theme dla `betheme`, więc plan dotyka parent theme. To jest świadome odstępstwo od preferowanej reguły projektu; ryzyko nadpisania przy aktualizacji motywu jest zapisane w impact scan i granicach.
|
||||
</clarifications>
|
||||
|
||||
<impact_scan>
|
||||
## Quality Radar
|
||||
|
||||
**Status:** degraded
|
||||
**Tools:** `codebase-memory-mcp` częściowo dostępny; szerokie zapytania po repo timeoutują. Użyto zawężonego `rg` i odczytu konkretnych plików.
|
||||
|
||||
## Affected Areas
|
||||
|
||||
- Motyw frontend: `wp-content/themes/betheme/header.php`.
|
||||
- InPost Pay widget: `wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php`.
|
||||
- InPost Pay JS: `wp-content/plugins/inpost-pay/src/InpostPay.php` rejestruje `assets/js/woocommerceizi.js`.
|
||||
|
||||
## Findings
|
||||
|
||||
- `FrontWidgetV2::attach_hook()` podpina `add_root_script_after_body_open` do `wp_body_open`.
|
||||
- `FrontWidgetV2::add_root_script_after_body_open()` emituje `const IPPWidgetOptions = {...}`.
|
||||
- `wp-content/themes/betheme/header.php` ma `<body <?php body_class(); ?>>`, ale nie ma `wp_body_open()`.
|
||||
- Brak child theme w `wp-content/themes/` oznacza ryzyko, że zmiana w `betheme` zostanie nadpisana podczas aktualizacji motywu.
|
||||
|
||||
## Duplicate / Hardcoded Risks
|
||||
|
||||
- Nie tworzyć fallbacku `IPPWidgetOptions` w custom JS, bo byłby drugim źródłem prawdy obok `inpost-pay`.
|
||||
- Nie modyfikować `wp-content/plugins/inpost-pay/`, bo problem leży po stronie niewywołanego hooka motywu.
|
||||
|
||||
## Explicit Deferrals
|
||||
|
||||
- Utworzenie child theme zostaje poza zakresem tej poprawki, bo użytkownik zgłasza pilny błąd produkcyjny i wsparcie InPost wskazało minimalną zmianę.
|
||||
</impact_scan>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Hook WordPress Jest Wywoływany Po Otwarciu Body
|
||||
```gherkin
|
||||
Given aktywny motyw renderuje `wp-content/themes/betheme/header.php`
|
||||
When strona frontendowa otwiera znacznik `<body>`
|
||||
Then bezpośrednio po nim wywoływane jest `wp_body_open()`
|
||||
```
|
||||
|
||||
## AC-2: InPost Pay Może Wstrzyknąć Konfigurację Widgetu
|
||||
```gherkin
|
||||
Given wtyczka `inpost-pay` jest aktywna
|
||||
When WordPress uruchamia hook `wp_body_open`
|
||||
Then `FrontWidgetV2::add_root_script_after_body_open()` może wypisać skrypt z `IPPWidgetOptions`
|
||||
```
|
||||
|
||||
## AC-3: Zakres Zmiany Jest Minimalny
|
||||
```gherkin
|
||||
Given poprawka dotyczy kompatybilności motywu z hookiem WordPress
|
||||
When kod zostanie zmieniony
|
||||
Then nie są modyfikowane pliki `wp-content/plugins/inpost-pay/` ani inne integracje checkoutu
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Dodać wp_body_open do header.php</name>
|
||||
<files>wp-content/themes/betheme/header.php</files>
|
||||
<action>
|
||||
Wstawić `<?php wp_body_open(); ?>` bezpośrednio po linii `<body <?php body_class(); ?>>`.
|
||||
Zachować istniejący układ HTML/PHP i nie zmieniać pozostałych hooków Betheme.
|
||||
</action>
|
||||
<verify>`rg -n "wp_body_open|<body|body_class" wp-content/themes/betheme/header.php`</verify>
|
||||
<done>Spełnia AC-1 i AC-3.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Sprawdzić składnię PHP zmienionego pliku</name>
|
||||
<files>wp-content/themes/betheme/header.php</files>
|
||||
<action>
|
||||
Uruchomić lint PHP dla zmienionego pliku, jeśli `php` jest dostępny w PATH.
|
||||
</action>
|
||||
<verify>`php -l wp-content/themes/betheme/header.php` albo udokumentowany brak PHP CLI</verify>
|
||||
<done>Spełnia AC-1 i AC-3.</done>
|
||||
</task>
|
||||
|
||||
<task type="checkpoint:human-verify" gate="blocking">
|
||||
<name>Task 3: Zweryfikować frontend z aktywnym InPost Pay</name>
|
||||
<files>wp-content/themes/betheme/header.php, wp-content/plugins/inpost-pay/src/hooks/front/FrontWidgetV2.php</files>
|
||||
<action>
|
||||
Na środowisku z aktywną wtyczką `inpost-pay` odświeżyć stronę koszyka/checkoutu i sprawdzić, czy w HTML po `<body>` pojawia się skrypt z `IPPWidgetOptions`.
|
||||
</action>
|
||||
<verify>DevTools Console: brak `ReferenceError: IPPWidgetOptions is not defined`; Source/Elements: obecny skrypt `IPPWidgetOptions`.</verify>
|
||||
<done>Spełnia AC-2.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
## Do Not Change
|
||||
- Nie modyfikować `wp-content/plugins/inpost-pay/`.
|
||||
- Nie modyfikować `wp-content/plugins/ws-inpost-map/`.
|
||||
- Nie zmieniać logiki checkoutu, płatności, dostaw ani assetów Betheme.
|
||||
- Nie dodawać własnego globalnego `IPPWidgetOptions` poza mechanizmem `inpost-pay`.
|
||||
|
||||
## Scope Limits
|
||||
- Plan naprawia brak standardowego hooka WordPress w aktywnym headerze.
|
||||
- Plan nie rozwiązuje ogólnego problemu braku child theme.
|
||||
- Plan nie potwierdza konfiguracji merchant InPost Pay ani poprawności danych API.
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
- [ ] `rg -n "wp_body_open|<body|body_class" wp-content/themes/betheme/header.php`
|
||||
- [ ] `php -l wp-content/themes/betheme/header.php` albo zanotowany brak PHP CLI
|
||||
- [ ] Frontend manualnie: brak błędu `IPPWidgetOptions is not defined`
|
||||
- [ ] Quality Radar relevant risks handled or deferred.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] `wp_body_open()` jest w `wp-content/themes/betheme/header.php` bezpośrednio po `<body <?php body_class(); ?>>`.
|
||||
- [ ] Nie zmieniono plików pluginu `inpost-pay`.
|
||||
- [ ] PHP lint przechodzi albo brak PHP CLI jest udokumentowany.
|
||||
- [ ] Na środowisku z aktywnym `inpost-pay` widget nie zgłasza `IPPWidgetOptions is not defined`.
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
SUMMARY.md path: `.paul/plans/20260519-1532-naprawa-inpost-pay-wp-body-open/SUMMARY.md`
|
||||
</output>
|
||||
Reference in New Issue
Block a user