---
phase: 15-scontainers-edit-save-fix
plan: 01
subsystem: admin
tags: [scontainers, form-edit, hidden-fields, regression-fix]

requires: []
provides:
  - Fix edycji scontainers (update zamiast insert)
  - Regresyjne testy kontrolera dla mapowania id
affects: []

tech-stack:
  added: []
  patterns: [hiddenFields for stable id transfer in tabbed form-edit]

key-files:
  created: []
  modified:
    - autoload/admin/Controllers/ScontainersController.php
    - tests/Unit/admin/Controllers/ScontainersControllerTest.php

key-decisions:
  - "Przeniesienie id z FormField::hidden do hiddenFields w FormEditViewModel"
  - "Fallback id z route parametru przy zapisie edycji"

patterns-established:
  - "W formularzach z zakladkami id encji przekazujemy przez hiddenFields, nie przez pola przypisane do taba"

duration: ~20min
completed: 2026-04-18
---

# Phase 15 Plan 01: Scontainers edit save fix - Summary

**Naprawiono regresje, przez ktora edycja kontenera statycznego tworzyla nowy rekord zamiast aktualizacji istniejacego ID.**

## Performance

| Metric | Value |
|--------|-------|
| Duration | ~20min |
| Completed | 2026-04-18 |
| Tasks | 3 completed |
| Files modified | 2 |

## Acceptance Criteria Results

| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Edycja nie tworzy nowego kontenera | Pass | `id` jest zawsze przenoszone przez hiddenFields + fallback z URL przy braku w POST |
| AC-2: Tworzenie nowego kontenera nadal dziala | Pass | Dla create `id=0`, action pozostaje `/admin/scontainers/save/` |
| AC-3: API legacy JSON pozostaje bez zmian | Pass | Sciezka `values` (legacy) nie byla modyfikowana |

## Accomplishments

- Przeniesiono `id` do `hiddenFields` w `ScontainersController::buildFormViewModel()`, co eliminuje gubienie `id` w formularzu tabowanym.
- Dodano defensywny fallback na `id` z parametru trasy w `ScontainersController::save()`.
- Dodano 2 testy regresyjne dla mapowania `id` i create-flow.

## Files Created/Modified

| File | Change | Purpose |
|------|--------|---------|
| `autoload/admin/Controllers/ScontainersController.php` | Modified | Stabilne przekazywanie `id` dla update oraz fallback route `id` |
| `tests/Unit/admin/Controllers/ScontainersControllerTest.php` | Modified | Testy regresyjne dla hiddenFields i create flow |

## Decisions Made

| Decision | Rationale | Impact |
|----------|-----------|--------|
| Uzyc `hiddenFields` zamiast `FormField::hidden('id')` | Hidden field w tabbed form moze nie byc renderowany w aktywnej strukturze pol | Brak tworzenia duplikatow przy edycji |
| Dodac fallback `id` z URL w `save()` | Dodatkowa odpornosc na brak `id` w payloadzie | Bezpieczny update dla `/admin/scontainers/save/id={id}` |

## Deviations from Plan

Brak istotnych odchylen implementacyjnych.

Skill audit:
- `/feature-dev` - pominiety na prosbe uzytkownika (override zapisany w STATE.md)
- `/koniec-pracy` - wymaganie zmapowane na `.claude/commands/koniec-pracy.md`

## Issues Encountered

| Issue | Resolution |
|-------|------------|
| Brak `test.ps1` w workspace | Test uruchomiony bezposrednio przez `php phpunit.phar ...` |

## Verification Results

- `php phpunit.phar tests/Unit/admin/Controllers/ScontainersControllerTest.php`
- Wynik: `OK (6 tests, 20 assertions)`

## Next Phase Readiness

**Ready:**
- Problem zapisu scontainers naprawiony na poziomie kontrolera.
- Testy regresyjne zabezpieczaja krytyczny przypadek.

**Concerns:**
- Manualna weryfikacja UI edycji/create nadal wskazana po stronie panelu admin.

**Blockers:**
- None.

---
*Phase: 15-scontainers-edit-save-fix, Plan: 01*
*Completed: 2026-04-18*
