# Cleverphant CHANGELOG — consumer upgrade notes

> ## ⚠️ Update naudok `cleverphant:upgrade` — **NE `cleverphant:install`**
>
> `cleverphant:install` yra **DESTRUKTYVUS** (task-34): jis PIRMA išvalo esamą web
> turinį (Pages / News / FAQ / meniu punktus) ir tik tada seeda savo. Pirmam
> diegimui — teisinga; kiekvieno deploy metu — **prarastum per admin redaguotą
> turinį**. Todėl atnaujinimui yra atskira, saugi komanda.
>
> **Standartinis update (VISADA tinka, leidžiamas kiekvieną deploy):**
>
> ```bash
> composer update
> php artisan migrate --force
> php artisan cleverphant:upgrade --force --force-forms   # --force-forms: kai užduotis keitė formos laukus
> php artisan themes:publish-assets
> php artisan vendor:publish --tag=package-assets --force
> php artisan optimize
> ```
>
> `cleverphant:upgrade` yra **idempotentinis ir turinio neliečia**. Jis absorbuoja:
> naujus permission'us (per `cms:sync-permissions`), naujas formų definicijas
> (`firstOrCreate` — per builder'į redaguotų NEperrašo; kai užduotis pakeitė
> ESAMOS formos laukus — pridėk **`--force-forms`**, kad definicija atsinaujintų),
> temos eilutę ir per-aplinkos temų default'us. Migracijas paima atskiras `migrate --force`
> (bėga PRIEŠ upgrade — schema turi egzistuoti anksčiau nei ją liečia seeder'iai).
> Pabaigoje jis atspausdina lentelę su turinio eilučių pokyčiu — sveikame
> pakartotiniame run'e VISI turinio pokyčiai = `0`.
>
> **Žemiau — TIK žingsniai, kurių ta komanda NEabsorbuoja** (turinio seed'as,
> naujas `.env`, Satis rebuild, breaking change). Jei užduoties čia nėra —
> vadinasi, standartinio update pakanka.

---

## 2026-08 (v1.2.1) — deploy hotfix

- **`view:cache` deploy fail** („Unable to locate component [edit-layout]"):
  `cleverphant::` VIEW namespace registruotas tik **ne-console** kontekste
  (`! runningInConsole()`). Admin „Šablonas" tab'o views naudoja viartas-default
  runtime komponentą `<x-edit-layout>`, kurio `view:cache` (console, be middleware)
  nemato → eager kompiliacija lūžo. Views renderinami tik per web admin request'us,
  tad console juos praleisti saugu.
- **`forms.created_by` FK fail** deploy metu: formų seeder'iai (contact/lead/newsletter)
  nebe hardcode'ina `created_by/updated_by = 1` → resolve'ina esamą user id
  (`User::query()->min('id')`, nullable FK). Consumer'iuose, kur admin ≠ id 1,
  nebekrenta.

## 2026-08 — formos per form-builder + naujienlaiškio admin + šriftai

**Reikalauja rankinių žingsnių** (standartinis update jų NEabsorbuoja pilnai):

- **Formų definicijos pakeistos** → `cleverphant:upgrade --force --force-forms`.
  Kontaktų + lead (`susipazinkime`) formos perdarytos į cleverphant.lt atitikmenį:
  10 matomų laukų, `Kada` + `Kaip apie mus sužinojote?` radio'ai; **NUIMTA**
  collapsible „Norite pasidalinti daugiau?", sąlyginis `kita_data`, `poreikis`,
  post-submit apklausa. BE `--force-forms` esamos formos lieka su sena definicija.
- **Naujienlaiškio admin punktas** → `php artisan migrate --force`.
  Nauja migracija įdeda „Prenumeratoriai" (`/admin/newsletter` — sąrašas + CSV
  eksportas) į admin sidebar DB meniu (sekcija „Turinio valdymas"). Modulis egzistavo
  seniai — tik nebuvo DB meniu, kai `MENUS_DB_DRIVEN=true`.

**Absorbuojama standartiniu update (`composer update` + publish):**

- Viešos formos renderinamos per `va-core/form-builder` (native 2-stulpeliai
  `col-md-6`, `input_type` email/url/date). Reikia naujų `va-core/form-builder`
  + `va-modules/forms` versijų.
- Notifikacijos laiškas `forms::mail.submission` → HTML (buvo raw Markdown);
  radio/select reikšmės rodomos žmogiškais label'ais.
- Self-host Inter 3.019 TTF + Cleverphant favicon → `themes:publish-assets`
  (kopijuoja `public/fonts` + `public/img`).
- Mokyklos šablono kortelių repeteris admin „Šablonas" tab'e.

## QA #8 — meniu iš realių puslapių

- `CleverphantMenusSeeder` (įrištas į `cleverphant:install`) perseed'ina `web.main` iš
  realių Cleverphant puslapių (Pradžia/Mokyklos/Požiūris/∞ ciklas/DUK/Tinklaraštis/
  Kontaktai) ir **numeta** generinio shop `web.brands` — `/admin/menus` rodo tik
  Cleverphant nav.
- Front nav DB-redaguojamas su `.env` `MENUS_DB_DRIVEN=true`; be jo — hardcoded (0 regresijos).
- **Update'e** (NE pilnas install): meniu perseed'ink saugiai, be turinio wipe —
  `php artisan db:seed --class="ViartasThemes\Cleverphant\Database\Seeders\CleverphantMenusSeeder" --force`.

## QA #9 — CKEditor WYSIWYG turinio laukas

- `form-builder` dabar deklaruoja `va-core/ckeditor` → puslapio „Turinys" laukas rodo
  CKEditor įrankių juostą (ne plika textarea su raw HTML). Ateina per `composer update`,
  assets per `vendor:publish --tag=package-assets` (į `public/vendor/ckeditor`). Jei
  `composer update` meta „va-core/ckeditor not found" → trūksta Satis'e (kaip form-builder).

## Turinio atnaujinimas (kai jo tikrai reikia)

`cleverphant:upgrade` **niekada** neseeda Pages / News / FAQ. Jei užduotis atvežė
naujo turinio (arba diegi tuščią saitą), rinkis sąmoningai:

| Komanda | Ką daro | Kada |
|---|---|---|
| `cleverphant:install --additive --force` | **Nedestruktyvi.** Seeda TIK trūkstamas eilutes (`firstOrCreate`), esamų neliečia. | Turinio „papildymas" gyvame saite |
| `cleverphant:install --force` | **DESTRUKTYVI.** Išvalo ne-Cleverphant web turinį ir seeda iš naujo. | Pirmas diegimas / sąmoningas reset'as |
| `cleverphant:seed-pages --force` | Perrašo 9 Cleverphant puslapių eilutes (id išsaugomas). | Kai reikia atstatyti puslapių kanoninį turinį |

⚠️ `--force` prie `cleverphant:install` reiškia DU dalykus: praleidžia destruktyvų
patvirtinimą IR perrašo slug'ą atitinkančias FAQ/News/formų eilutes. Su
`--additive` jis lieka nedestruktyvus turiniui, kurio dar nėra, bet **perrašo**
esamas FAQ/News/formų eilutes — jei to nenori, leisk be `--force`
(reikės atsakyti į patvirtinimą interaktyviai).

---

## task-44 — `cleverphant:upgrade` + deploy un-gate

- **Vienkartinis:** atnaujink Forge deploy skriptą pagal [`INSTALL.md`](INSTALL.md)
  („Forge / production deploy"). Anksčiau `cleverphant:install` buvo **marker-gated**
  (`if [ ! -f storage/app/.viartas-installed ]`) → bėgo TIK pirmą kartą, todėl
  vėlesnės užduotys (nauji permission'ai, formų definicijos, temos eilutė)
  consumer'io nepasiekdavo. Dabar `cleverphant:upgrade --force` paleidžiamas
  **kiekvieną deploy**, o marker'is dengia tik tikrą first-time bootstrap'ą
  (`CmsBootSeeder` + `cleverphant:install`).
- Marker'io trinti NEREIKIA — jis toliau teisingai saugo pirmojo karto seed'ą
  (ir, svarbiausia, neleidžia destruktyviam install'ui pasikartoti).

## task-43 — naujienlaiškis per Forms builder'į

- **Absorbuojama** `cleverphant:upgrade` (`newsletter` formos definicija seed'inama
  `firstOrCreate`). Kol ji neužseed'inta, footer'io blokas veikia per seną tiesioginį
  POST — prenumeruoja, tik apeina builder'į.
- **Vienkartinis (assets):** `php artisan themes:publish-assets` — be jo naršyklė
  gauna seną `cleverphant.js` bundle'ą ir inline success eilutė nepasirodo.
  (Standartiniame update jis jau yra.)

## task-41 / task-42 — `/pradeti` + `/kontaktai` formos

- **Absorbuojama** `cleverphant:upgrade` (`susipazinkime` + `kontaktai` definicijos).
- ⚠️ Jei definicijos JAU egzistuoja ir nori naujausios task-42 versijos
  (`url` laukas, suskleidžiama grupė, po-submit klausimas), reikia **force** refresh'o —
  upgrade jo sąmoningai nedaro (neperrašinėja per builder'į redaguoto turinio):
  ```bash
  php artisan tinker --execute="app(\ViartasThemes\Cleverphant\Database\Seeders\CleverphantContactFormSeeder::class)->force()->run();"
  ```

## task-36 — Cleverphant = default web tema

- **Absorbuojama** `cleverphant:upgrade` (temos eilutė + `cleverphant:activate` +
  `themes:sync-defaults`). Rankinio `UPDATE themes` nebereikia.
