Novità

Versione v0.29.0

Tutte le versioni (90)

v0.1.23

2026-07-24

Corretto

  • CLRA-9: l'autocomplete città in registrazione non restituiva suggerimenti — la Places API (New) filtra le città tramite la collection (cities), non il primary type locality. Il service ora normalizza locality→(cities) e logga status+body degli errori Google (prima persi).

v0.1.22

2026-07-23

Corretto

  • CLFL-11: gli URL delle immagini (avatar profilo incluso) usano ora l'host per-ambiente da routes.default_url_options invece di ENV["APP_BASE_URL"] (fallback localhost irraggiungibile dai client mobile). Nuovo helper BlobUrl.for, applicato a tutti i serializer/service immagine.
  • CLFL-25: SubmitCrewService non scartava più i social del wizard "diventa artista" — ora tutti i canali confluiscono in Crews::Crew#social_links (prima la crew nasceva senza social).

Aggiunto

  • CLFL-25: il wizard crew raccoglie anche Facebook, Spotify e SoundCloud (colonne su member_crew_requests, form/serializer aggiornati).

v0.1.21

2026-07-10

Aggiunto

  • CLFL-21: nuova pagina pubblica /chi-siamo (Website::Legal#about, + /en/chi-siamo) con la sezione istituzionale del progetto (storia, missione, B2B) e voce "Chi siamo" nella navbar. Contenuto i18n it/en. (La voce "Landing page" nel menu dell'app Flutter resta un follow-up separato.)

v0.1.20

2026-07-10

Corretto

  • CLFL-13/15/17/18/20: i serializer Member::{Promoter,Venue,Crew}RequestSerializer espongono ora il campo steps (costante STEPS del modello). L'app Flutter lo richiede nel modello del wizard role-expansion → la sua assenza causava un crash al primo caricamento di "diventa organizzatore/artista/locale". Fix complementare lato app in clubbel-flutter v0.0.10.

v0.1.19

2026-07-10

Corretto

  • CLRA-2: Solid Cache si connette al database cache dedicato (connects_to) e ne carica lo schema — risolto PG::UndefinedTable: relation "solid_cache_entries" does not exist.
  • CLRA-6: estratto l'helper safe_instagram_permalink con test dedicato; stabilizzato il warning Brakeman sul permalink Instagram (allowlist centralizzata).

Sicurezza

  • CLRA-8: aggiornate le gemme vulnerabili rilevate da bundler-audit (css_parser, net-imap, websocket-driver).

Modificato

  • CLRA-7: asset seed promoter_default.png ottimizzato sotto 2 MB — eliminato lo skip del marker nel seed.
  • CLRA-5: ripuliti warning e pending della suite RSpec.

v0.1.18

2026-07-10

Aggiunto

  • Endpoint app-facing GET /api/v1/features/flags per l'espansione ruolo (CLFL-13/17): espone il flag role_expansion_claim_choice (default OFF), che l'app member usa per scegliere tra la schermata "cerca/reclama vs crea" e l'accesso diretto alla creazione. Seed idempotente del flag.

v0.1.17

2026-07-06

Aggiunto

  • Account di test su staging: personas E2E + god abilitati via SEED_TESTER_ACCOUNTS=true (solo staging, mai production) con password unica STAGING_TESTER_PASSWORD (Doppler clubbel-rails/staging). Helper Seeds::TesterAccounts, seed idempotenti a ogni deploy web. Decisione: clubbel-docs/decisions/2026-07-06-tester-accounts-staging.md.
  • Builder personas E2E da db/seeds/e2e_personas.yml.

Modificato

  • Gate coverage branch alzato a 90 (misurato 90.8%) con spec mirati ai rami scoperti.
  • Spacing verticale tra sezioni nella pagina crew show.
  • Commenti tunnel dev aggiornati a cloudflared.
  • Suite di test: driver system spec rack_test di default con opt-in :js per Chrome (pattern closeyourit) — job CI test da ~33 a ~12 min, flaky Capybara da boot-storm eliminato, coverage 90/90 invariata. Convenzione :js documentata in CLAUDE.md.

Corretto

  • Email di conferma account non consegnate su staging: il container web processa ora la coda Solid Queue in-process (SOLID_QUEUE_IN_PUMA=true), Resend è cablato (delivery_method = :resend + RESEND_API_KEY) e il mittente usa il sottodominio verificato notifications.clubbel.com (il dominio nudo clubbel.com non è verificato su Resend). Il fix Resend abilita anche l'invio email in production.

v0.1.16

2026-07-02

Corretto

  • Immagini in produzione: APP_BASE_URL ora cablata in Kamal (.kamal/secrets-common + env.secret) — i serializer non cadono più sul fallback http://localhost:3000 per gli URL ActiveStorage (cover, avatar, marker).
  • Push notification: migrate a FCM HTTP v1 con service account (Notifications::Fcm::PushService, googleauth) — la legacy server key (dismessa da Google) le faceva fallire in silenzio. Titoli notifica via i18n (it/en). Rimossa gem fcm.
  • System spec valhalla_accounts_table de-flakata alla radice (barriera sync + asserzione su aria-sort invece dell'URL).
  • Errori inattesi nei service non più ingoiati: ApplicationService#track_unexpected (log + CloseYourIt) in ogni rescue StandardError che degrada a Result.err.

Modificato

  • Wizard richiesta ruolo (venue/crew/promoter) unificati nella base Member::RequestWizardController.
  • Valhalla::Analytics::ComputeService decomposto in 9 StatsService per blocco (+fix lookup NAME_ATTR per i nomi promoter nelle classifiche engagement).
  • Gate coverage SimpleCov alzato a line 90 / branch 80 (misurato 93.5/81.8).
  • Lookbook attivo in development (/lookbook): 30 preview componenti + spec smoke.
  • Rack-attack: blocklist anti-scan estesa (sensitive paths + .php).
  • Tunnel dev migrato da ngrok a cloudflared (host invariato).
  • Sweep qualità: rimossi pundit (inutilizzato) e :unprocessable_entity deprecato; select nativi → Management::CustomSelectComponent; stili inline → pattern --editorial-accent; rubocop TargetRubyVersion 4.0.
  • Bump: kamal 2.12.0, brakeman 8.0.5, shoulda-matchers 8.0.1.

v0.1.15

2026-06-29

Modificato

  • Monitoring: sostituito Sentry/GlitchTip con CloseYourIt (closeyourit-ruby) — error tracking, metriche e log strutturati verso https://www.closeyour.it (progetto CLRA). PII scrubbing preservato.
  • Ruby: bump da 3.3.10 a 4.0.5.

Corretto

  • Ui::PaginationComponent / Management::PaginationComponent: CGI.parse → Rack::Utils.parse_query (compat Ruby 4.0, dove CGI.parse della stdlib slim-ata non è più affidabile).

v0.1.13

2026-06-10

Corretto

  • System spec logout (flaky storico, ~15% rosso anche in locale): il click partiva durante il boot-storm JS del primo load (importmap scarica ~50 moduli Stimulus) e la DELETE non veniva mai inviata. Lo spec ora attende readyState=complete + Turbo prima del click, con retry difensivo, e asserisce l'esito reale (sessione invalidata) invece del flash (auto-dismiss 5s → racy). Aggiunto data-test="management-sidebar-logout" al bottone (convenzione selettori).