What's new

Version v0.29.3

All versions (93)

v0.1.26

2026-07-26

Fixed

  • CLFL-48: la creazione di un Locale (e di Artista/Organizzatore con cover) non si finalizzava — Member::{Venue,Crew,Promoter}Request#to_payload passava l'oggetto ActiveStorage::Attached::One invece del blob, causando Could not find or build blob: expected attachable. Ora passa cover_image.blob.
  • CLFL-47: i link website/social inseriti senza schema (www.sito.com) facevano fallire la creazione di Artisti (e Locali/Organizzatori) con website.invalid. Nuovo concern UrlNormalizable normalizza a https://… prima della validazione (form contatti crew/promoter, info promoter, location venue); gli schemi non-http (javascript:, ecc.) restano rifiutati.

v0.1.25

2026-07-25

Added

  • CLFL-40: foto profilo (fino a 3) per Artisti e Organizzatori. has_many_attached :photos su Crew/Promoter e sui draft, caricabili via wizard (photos[]) e via PATCH profilo entità (crew[photos][]); serializer espone photos: [url]; validazione max 3 + content_type/size. Index crew/promoter con eager loading degli attachment per evitare N+1.

v0.1.24

2026-07-24

Fixed

  • CLFL-37: la creazione di un nuovo Locale (e l'autocomplete indirizzi/città) non mostrava suggerimenti — l'endpoint API GET /api/v1/member/lookups/places non esisteva (404). Aggiunto Api::V1::Member::Lookups::PlacesController (mirror del web) + route. Geo::PlacesAutocompleteService traduce ora address→street_address/route/premise (filtra indirizzi, non POI) mantenendo i primaryType validi di Table B (establishment, ecc.). Sblocca anche l'autocomplete città del profilo.

Removed

  • CLFL-36: rimosso completamente il campo Capienza dai Locali su tutte le superfici — drop colonne DB venues.capacity e member_venue_requests.capacity (migration), serializer, form object, strong params, wizard mobile/web, vista pubblica e i18n.

v0.1.23

2026-07-24

Fixed

  • 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

Fixed

  • 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).

Added

  • 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

Added

  • 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

Fixed

  • 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

Fixed

  • 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).

Security

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

Changed

  • 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

Added

  • 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

Added

  • 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.

Changed

  • 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.

Fixed

  • 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.