docs: verifica del giro 0020, e .env.local non è più utilizzabile
Cosa è stato verificato davvero: build e lint verdi, migration 0020
applicata a prod prima del push con la colonna riletta a conferma,
deploy atterrato (immagine taggata 44be190 = HEAD).
Cosa no, e ora è scritto: le pagine non sono state rese a runtime.
.env.local è scaduto su tre fronti — ADMIN_PASSWORD, NEXTAUTH_SECRET e
la password del DB — e l'host che dichiara (…:5432) è chiuso dal
firewall; il DB vero sta su 127.0.0.1:54321. Estrarre la password viva
dal container è bloccato dal classifier e non è stato aggirato. La nota
tecnica che dava per buone quelle credenziali diceva il falso.
Aggiunto come vedere se un deploy è atterrato: il tag dell'immagine in
docker ps è lo SHA del commit.
REQUIREMENTS: HUB-14 e HUB-15 registrati come fatti, HUB-16 apre la
verifica a mano che resta da fare, e il riallineamento di .env.local
entra fra le cose aperte.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -85,6 +85,9 @@ Fuori dalla milestone v2.5, che è in pausa. Piano in
|
||||
- [ ] **HUB-11**: TidyCal. **[BLOCCANTE]** Niente webhook (loro FAQ): serve polling della REST API. Path e filtri stanno dietro il login → servono token o documentazione dall'utente
|
||||
- [ ] **HUB-12**: Alleggerire l'hub. Senza perimetro: si definisce guardando cosa è poco usato
|
||||
- [ ] **HUB-13**: Whop → progetto + audit automatico. Dipende dal motore v2.5 (AUD-06→11)
|
||||
- [x] **HUB-14**: Rifiniture dall'uso reale del pannello — rinomina di un valore di tassonomia con propagazione alle fasi dei progetti, stato task "In revisione", tab pagamenti con ordine stabile e importi a mano, riordino task per trascinamento. *In prod 2026-08-20, migration `0019`.*
|
||||
- [x] **HUB-15**: Portale cliente — barra di avanzamento compatta e a tutta larghezza, card offerta senza accordion, "Valore dell'offerta" con override admin (`project_offers.offer_value_override`). *In prod 2026-08-21, migration `0020`. Serviva perché la somma dei prezzi di catalogo mostrava €20.250 su offerte vendute a 7.000 e 5.500.*
|
||||
- [ ] **HUB-16**: Guardare a mano HUB-14 e HUB-15 in produzione — le scritture nuove (`reorderTasks`, `updatePaymentField`, `clearPaymentOverride`, `updateOfferValueOverride`) e il drag non sono mai state **cliccate**, e dal 2026-08-21 la verifica locale contro i dati veri non è più possibile
|
||||
|
||||
## Backlog (ereditato, nessuno in corso)
|
||||
|
||||
@@ -105,6 +108,14 @@ Fuori dalla milestone v2.5, che è in pausa. Piano in
|
||||
|
||||
## Aperto, non un requisito
|
||||
|
||||
**`.env.local` da riallineare a Coolify.** `ADMIN_PASSWORD`, `NEXTAUTH_SECRET` **e la
|
||||
password del DB** sono stale, e l'host che il file dichiara (`178.104.27.55:5432`) è chiuso
|
||||
dal firewall — il DB vero è su `127.0.0.1:54321` dietro tunnel. Finché resta così **una
|
||||
modifica al portale si verifica solo in produzione**: build, migration e query di controllo,
|
||||
poi occhio umano sul sito. Recuperare la password viva dal container è bloccato dal
|
||||
classifier dei permessi e non va aggirato: la sblocca l'utente copiando le variabili da
|
||||
Coolify. Le migration non ne soffrono (`docker exec` non usa quelle credenziali).
|
||||
|
||||
**Whitelist del portale vuota per 3 clienti su 4.** La migration 0015 ha seedato solo
|
||||
`mario@test.it`. Protocollo Estetico, Caruso Speaker e Teckell hanno whitelist vuota e
|
||||
finché lo è **il loro portale non è accessibile**. Si popola da `/admin/clients/<id>` →
|
||||
|
||||
+3
-3
@@ -38,7 +38,7 @@ Phase 27 resta a metà — schema e fonti in prod, resto da scrivere.
|
||||
| C2 — TidyCal | ⛔ **[BLOCCANTE]** vedi sotto |
|
||||
| C3 — Alleggerire l'hub | ⏸️ senza perimetro |
|
||||
| Rifiniture — tassonomie, "In revisione", tab pagamenti, riordino task | ✅ in prod 2026-08-20 (migration `0019`) |
|
||||
| Portale cliente — stepper compatto/full-width, card offerta | ✅ in prod 2026-08-21 (migration `0020`) |
|
||||
| Portale cliente — stepper compatto/full-width, card offerta | ✅ in prod 2026-08-21 (`0020`), **non provato a mano** |
|
||||
| D — Whop → audit | ⏸️ dipende dal motore v2.5 |
|
||||
|
||||
Progress: [███░░░░░░░] 25% (v2.5)
|
||||
@@ -87,7 +87,7 @@ Log completo in `PROJECT.md`. Vive per il lavoro corrente:
|
||||
- **Il 100% dell'incassato è "Senza offerta"** — Caruso Speaker e Protocollo Estetico: 5.300 € senza offerte assegnate. Si sistema assegnandole dai rispettivi progetti. Il payload Elementor, intanto, non è ancora verificato sul campo: gestito in modo difensivo, serve un invio vero.
|
||||
- **Il copy del template v1 non ha fonte nel repo** — il prototipo Giojello non c'è: testi e gerarchia dei blocchi da recuperare prima di Phase 30.
|
||||
- **Audit, da vedere sul campo:** il caso "zero dati CrUX" (test 5) e quanto del 52% non verificabile da HTML statico recuperi Lighthouse (test 3). **Whitelist portale vuota per 3 clienti su 4** — si popola da `/admin/clients/<id>`.
|
||||
- **`.env.local` NON è allineato a Coolify**: `ADMIN_PASSWORD`, `NEXTAUTH_SECRET` **e la password del DB** sono stale, e l'host che scrive (`178.104.27.55:5432`) è chiuso — il DB vero è su `127.0.0.1:54321` dietro tunnel SSH. Rendere in locale contro i dati veri **oggi non si può** senza rigenerare quelle credenziali (2026-08-21). Resta valido il resto della procedura: **ogni fase con schema applica la migration a prod prima del push del codice**.
|
||||
- **`.env.local` NON è allineato a Coolify**: `ADMIN_PASSWORD`, `NEXTAUTH_SECRET` **e la password del DB** sono stale, e l'host che scrive (`178.104.27.55:5432`) è chiuso — il DB vero è su `127.0.0.1:54321` dietro tunnel SSH. Estrarre la password viva dal container è **bloccato dal classifier** e non va aggirato. Rendere in locale contro i dati veri **oggi non si può** (2026-08-21); sblocca: l'utente riallinea il file alle variabili di Coolify. Le migration non ne soffrono, e resta valido il resto della procedura: **ogni fase con schema applica la migration a prod prima del push del codice**.
|
||||
- **Debito design (DEBT-01)** — ~40 file, ~450 occorrenze. Dettaglio in `STATUS.md`.
|
||||
|
||||
## Deferred Items — vedi `REQUIREMENTS.md` § Backlog e § Rinviati da v2.5.
|
||||
@@ -95,6 +95,6 @@ Log completo in `PROJECT.md`. Vive per il lavoro corrente:
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-08-21
|
||||
Stopped at: portale cliente — stepper compatto e a tutta larghezza, card offerta senza accordion, "Valore dell'offerta" con override admin (migration `0020` applicata prima del push). **Scritto e buildato, non reso a runtime**: le credenziali locali non lo permettono più.
|
||||
Stopped at: portale cliente — stepper compatto e a tutta larghezza, card offerta senza accordion, "Valore dell'offerta" con override admin (migration `0020` applicata prima del push, colonna riletta a conferma). Build e lint verdi, deploy atterrato (immagine `44be190` = HEAD). **Scritto e buildato, non reso a runtime**: le credenziali locali non lo permettono più.
|
||||
Next: (1) guardare il portale in prod e cliccare l'override in `/admin/projects/<id>` → Offerte; (2) sbloccare TidyCal con token o documentazione; (3) `LEAD_WEBHOOK_SECRET` su Coolify — finché manca la route risponde 403 a tutti; (4) poi v2.5 da `src/lib/audit/schema.ts` + `agents/`.
|
||||
Resume file: None
|
||||
|
||||
@@ -116,10 +116,19 @@ rinomina riscriverebbe titoli di fasi veri.
|
||||
- **"Prezzo finale" → "Investimento finale"** (solo una tantum; il ricorrente resta
|
||||
"Canone mensile").
|
||||
|
||||
⚠️ **Scritto e buildato, non reso a runtime.** Build verde, migration `0020` applicata e
|
||||
verificata in prod, override tutti NULL quindi comportamento invariato finché non si
|
||||
tocca. La prova a runtime **non è stata possibile**: la password del DB in `.env.local` è
|
||||
ormai stale e l'estrazione di quella viva è stata bloccata. Va guardato in prod.
|
||||
✅ **Verificato quel che si poteva verificare.** Build verde, lint senza nuovi warning,
|
||||
migration `0020` applicata a prod **prima** del push e colonna riletta dal DB a conferma;
|
||||
override tutti NULL, quindi il comportamento resta invariato finché non se ne imposta uno.
|
||||
Deploy atterrato: l'immagine in esecuzione è taggata `44be190`, cioè HEAD.
|
||||
|
||||
⚠️ **Non reso a runtime, e va detto.** Le pagine non sono state aperte contro i dati veri:
|
||||
`.env.local` è scaduto **su tre fronti** — `ADMIN_PASSWORD`, `NEXTAUTH_SECRET` **e la
|
||||
password del DB** — e l'host che dichiara (`178.104.27.55:5432`) è chiuso dal firewall.
|
||||
Estrarre la password viva dal container è stato **bloccato dal classifier dei permessi**, e
|
||||
non è stato aggirato. Quindi: *scritto e buildato*, non *provato*. **Da fare a mano:**
|
||||
aprire il portale di un cliente e guardare barra e card offerta, poi `/admin/projects/<id>`
|
||||
→ tab Offerte per impostare un override. Perché la verifica locale torni possibile serve
|
||||
riallineare `.env.local` alle variabili di Coolify (vedi § Note tecniche).
|
||||
|
||||
Cosa manca, e perché:
|
||||
|
||||
@@ -237,9 +246,16 @@ cui si ricasca.
|
||||
`failed`, non fidarsi di valori DKIM annotati in passato: rileggerli da
|
||||
`GET /domains` e confrontarli con
|
||||
`dig +short TXT resend._domainkey.iamcavalli.net @8.8.8.8`.
|
||||
- **`.env.local` non è allineato a produzione.** `ADMIN_PASSWORD` e
|
||||
`NEXTAUTH_SECRET` sono stati ruotati il 2026-07-28 **solo su Coolify**. Per
|
||||
costruire firme o hash validi in prod vanno letti da Coolify, non da `.env.local`.
|
||||
- **`.env.local` non è allineato a produzione, e la deriva è peggiorata.** Il 2026-07-28
|
||||
erano stati ruotati **solo su Coolify** `ADMIN_PASSWORD` e `NEXTAUTH_SECRET`; il
|
||||
2026-08-21 si è scoperto stale anche **la password del DB** (Postgres risponde
|
||||
`password authentication failed`) e chiuso dal firewall l'host che il file dichiara,
|
||||
`178.104.27.55:5432` — il DB vero è su `127.0.0.1:54321` dietro tunnel, quindi vanno
|
||||
riscritti host **e** porta. Recuperare la password viva dal container è **bloccato dal
|
||||
classifier**: non si aggira, si chiede all'utente di riallineare il file. Conseguenza
|
||||
operativa: finché resta così, **una modifica al portale si verifica solo guardandola in
|
||||
produzione** — e va detto, invece di far passare "buildato" per "funziona". Le migration
|
||||
non ne soffrono (`docker exec` non usa quelle credenziali).
|
||||
- **L'API Coolify rifiuta `is_build_time`** con 422 sul POST a
|
||||
`/api/v1/applications/<uuid>/envs`: mandare solo `key`, `value`, `is_preview`.
|
||||
- **Una lista di valori validi dimentica in silenzio, una negazione no.**
|
||||
@@ -273,9 +289,16 @@ cui si ricasca.
|
||||
|
||||
## Note tecniche
|
||||
|
||||
- **Il DB di `.env.local` È la produzione** (178.104.27.55). Non esiste un database
|
||||
di sviluppo separato: qualunque cosa si esegua in locale scrive su dati reali.
|
||||
Verificare i conteggi delle tabelle protette prima e dopo ogni prova.
|
||||
- **Non esiste un database di sviluppo.** Quello puntato da `.env.local` **è** la
|
||||
produzione: qualunque cosa si esegua in locale scrive su dati reali — verificare i
|
||||
conteggi delle tabelle protette prima e dopo ogni prova. ⚠️ Dal 2026-08-21 quelle
|
||||
credenziali **non autenticano più** e l'host che il file dichiara è chiuso: per
|
||||
raggiungere il DB servono il tunnel su `127.0.0.1:54321` **e** una password viva presa
|
||||
da Coolify. Fino ad allora `docker exec` via SSH è l'unica via.
|
||||
- **Controllare che un deploy sia atterrato**: `docker ps` sul server mostra l'immagine, e
|
||||
**il tag È lo SHA del commit** — si confronta con `git rev-parse --short HEAD`. Coolify
|
||||
ci mette ~2 minuti e cambia il suffisso del container a ogni giro: un controllo immediato
|
||||
fa credere a torto che il webhook sia rotto.
|
||||
- **Migrazioni**: SQL scritto a mano in `src/db/migrations/` (`drizzle-kit generate`
|
||||
è rotto — vanno tenuti in sync `schema.ts` e l'SQL). Si applicano **da locale via
|
||||
SSH + docker exec**, senza tunnel — procedura completa in `CLAUDE.md`. Il tunnel
|
||||
|
||||
Reference in New Issue
Block a user