# 2026-09-29

## GardenJá — 3 features novas (03:52) E2E 17/17 ✅
Pedidos do Caique: ninhada transplantada → vira planta-mãe; registo de morte; eventos rápidos na ninhada (troca de água na estufa).

- **Promover ninhada → planta-mãe** (`promoteNinhada` no GardenContext + `PromoteNinhadaModal`): cria planta (nome/local pedidos no modal; herda foto do progresso, notas, ciclo de rega e local da mãe; acquiredAt = propagatedAt); ninhada fica `status=transplanted` + novo campo `promotedToPlantId`; evento 'repot' com "Origem: ninhada NIN-XXX — histórico preservado" na nova planta; badge "🌱 virou planta-mãe" no card navega para a nova planta; banner "Promovida da ninhada …" no detalhe dela.
- **Morte:** `PlantStatus` ganhou **`lost`** ("Perdida") + botão HeartCrack no detalhe (confirmação inline); `loseNinhada` marca `failed` ("Perdida" no badge); ambos registam evento "… perdida 💔"; plantas lost saem das ações pendentes; filtro "Perdidas" em Minhas Plantas.
- **Eventos de ninhada:** `CareEvent` agora tem `plantId?` **ou** `ninhadaId?`; `EventFormModal` generalizado (`target: {kind,id,name}`), tipos da ninhada = NINHADA_EVENT_TYPES (troca de água primeiro, default); botão "＋ Registo" no NinhadaCard; histórico expansível no card; `addEvent` com ninhadaId atualiza `lastActionAt` da ninhada; novo EventType `water_change` 🚰 "Troca de água".
- **Backend:** validação relaxada (eventos: plantId OU ninhadaId); **loadDB deixa de semear demo** em dispositivos novos (seed só no botão "Restaurar dados de exemplo") — evita empurrar demo para o servidor.
- **Caique já migrou sozinho:** conta `caique.taka@gmail.com` registada em 2026-09-28 01:50; jardim no servidor com dados REAIS (9 plantas, 9 ninhadas, 24 eventos, ~2,8MB c/ fotos) — a push automática no login funcionou. Ele estava a usar às 03:46 de 29/09.
- Testes: `node /tmp/gj-test/test-promote.js` (chrome-headless-shell + MAP DNS) — 17/17 ✅ (registo rápido, promover, perder, sync servidor). Users/jardins de teste limpos (só caique.taka@gmail.com fica).
- Detalhe do teste: no modal, o botão do rodapé é exatamente "Promover" (o do card contém "Promover a planta-mãe") — clickByText tem de usar match exato.
## GardenJá — rodada 2 de melhorias (30/09 01:31) E2E 15/15 ✅
Pedidos do Caique: editar/apagar registos da ninhada; ver eventos das ninhadas no detalhe da planta; pendências do ciclo de rega adaptáveis (rega vs troca de água).

- **Editar/apagar registos:** novo `updateEvent` no store; `EventFormModal` ganhou props `event?` (modo edição, título "Editar registo"/botão "Guardar") e `defaultType?`; `NinhadaCard` aceita `onEditEvent/onDeleteEvent` (lápis/lixo em cada linha do histórico); timeline da planta também ganhou lápis de edição. `pages/Propagations` e `PlantDetail` usam `eventModal {n, ev}`.
- **Eventos das ninhadas no detalhe da planta:** `PlantDetail` "Ninhadas em detalhe" passa `events={ninhadaEventsOf(n.id)}` + todos os handlers (registo rápido, editar/apagar registos, transplantada, promover, perder).
- **Ciclo com tipo de cuidado:** novo tipo `CareType = 'water' | 'water_change'`; campo `MotherPlant.careType` (select no `PlantFormModal`: "Regar" / "Trocar a água"); `lastWater` conta rega OU troca de água; pendência mostra "Trocar a água de X" vs "Regar X" e o subtítulo reflete o tipo; `PendingActions` tem botão rápido (Regar/Trocar água) e link "passar a rega ⇄ troca de água"; pendências de ninhadas têm botão rápido "Trocar água" (careType derivado do método: water_cutting → water_change).
- Bugs de teste corrigidos (helper clicava em botões sem texto por título; match exato). Testes: `/tmp/gj-test/test-round2.js` — 15/15 ✅. Só `caique.taka@gmail.com` no servidor.
