# Florial CHANGELOG — consumer upgrade notes

> **Standartinis update (VISADA tinka, leidžiamas kiekvieną deploy):**
>
> ```bash
> composer update
> php artisan migrate --force
> php artisan florial:upgrade --force
> php artisan themes:publish-assets
> php artisan vendor:publish --tag=package-assets --force
> php artisan optimize
> ```
>
> `florial:upgrade` yra **idempotentinis** ir absorbuoja beveik viską, ką dev serverio
> užduotys prideda: naujus permission'us / role'es (per `cms:sync-permissions`),
> naujus baseline seeder'ius, temų eilutes 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).
>
> **Žemiau — TIK žingsniai, kurių ta komanda NEabsorbuoja** (naujas `.env`,
> Satis rebuild, breaking change, vienkartinis turinio seed'as). Jei užduoties čia
> nėra — vadinasi, standartinio update pakanka.

---

## task-100 — demo-preview panelė + demo slaptažodis

- `/login` nebeturi „— ARBA DEMO PERŽIŪRA —" bloko su 4 kabinetų nuorodomis (ofisai
  prototipo UI, rodytas kiekvienam svečiui). Kabinetai pasiekiami įprastu prisijungimu.
  Standartinio update pakanka (`optimize` išvalo view cache).
- ⚠️ **Vienkartinis, TIK jei ankstesnis deploy'as leido `florial:install --with-content`
  arba `florial:seed-content --demo`:** demo subscriber (`florial-subscriber@viartas.lt`)
  turi **viešai žinomą** slaptažodį `florial-demo` — nuo task-100 seeder'is jo nebededa,
  bet `firstOrCreate` esamo user'io NEperhash'ina, tad seną reikia rotuoti rankomis:

  ```bash
  php artisan tinker --execute="\ViartasCore\Users\Models\User::where('email','florial-subscriber@viartas.lt')->delete();"
  ```

  (arba nustatyk naują slaptažodį per admin'ą — trynimas tinka tik jei demo prenumeratos
  nereikalingos.) Naujuose install'uose slaptažodis generuojamas atsitiktinai — paskyra
  sukuriama, bet neprisijungiama, kol admin'as jos neatstato.

## QA batch — demo tenant, no-company UX, sales-rep login, DB nav

- `florial:install/upgrade --with-content` DABAR seed'ina ir **demo tenant'ą**
  (įmonė + company_admin `imone@florial.lt` + darbuotojai + sales_rep
  `pardavejas@florial.lt` + B2C subscriber `florial-subscriber@viartas.lt`) — kabinetai
  pasiekiami iškart po install'o. Idempotentiška; trink rankomis kai atsiras realūs.
- **web.main** perseed'inamas į Florial landing'us + numetamas shop `web.brands`
  (`FlorialMenusSeeder`, content chain). Front nav DB-redaguojamas su `.env`
  `MENUS_DB_DRIVEN=true`; be jo — hardcoded (per-locale), 0 regresijos. Tik meniu be
  demo/turinio: `db:seed --class="ViartasThemes\Florial\Database\Seeders\FlorialMenusSeeder" --force`.
- Savitarna: erdvės/darbuotojo kūrimas be įmonės nebeduoda 404 (disable submit +
  onboarding + draugiškas redirect); planai rodomi (ne „Planų dar nėra").
- Admin sales-rep formoj — „prisijungimo vartotojas" select + `sales_rep` rolė →
  `pardavimai/imones` nebeduoda 403.
- Formų laukai: `aria-required` (native `required` sąmoningai paliktas išjungtas —
  server-authority sprendimas; ` *` žymė + server validacija jau buvo).
- **CKEditor (#9):** `form-builder` dabar deklaruoja `va-core/ckeditor` → puslapio
  „Turinys" WYSIWYG laukas rodo CKEditor (ne plika textarea su raw HTML). Ateina per
  `composer update`, assets per `vendor:publish --tag=package-assets`.

## task-99 — `florial:upgrade` + deploy un-gate

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

## task-98 — Satis dist 404

- **Ops (ne app):** perkelk atnaujintą `deploy/satis.json` (`archive.skip-dev: false`)
  į Satis host'ą ir paleisk `php bin/satis build satis.json public/` (arba palauk
  cron'o). Be to `composer update` toliau klonuoja per git vietoj dist zip'o.
  Receptas: `.claude/runbooks/satis-dist-404.md`.

## task-96 / task-97 — viešų sekcijų turinys

- **Vienkartinis:** `php artisan florial:upgrade --with-content --force` — užpildo
  paketų galeriją, B2C / erdvių planus, Content copy, DUK ir atsiliepimus.
  ⚠️ Standartiniame update `--with-content` **nenaudojamas** sąmoningai: jis
  RE-ASSERT'ina seed'intus default'us, tad perrašytų per admin redaguotą katalogo
  copy / kainas (nuo QA batch — ir demo tenant'ą + `web.main` meniu). Leisk vieną
  kartą (arba kai CHANGELOG'as pasako, kad atsirado naujų viešų sekcijų duomenų).
- Kol tai nepaleista, sekcijos NElieka tuščios — homepage galerija rodo 6
  iliustruotas demo korteles (task-96 fallback).
