What's new

Version v0.29.4

All versions (94)

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.

v0.1.16

2026-07-02

Fixed

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

Changed

  • 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

Changed

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

Fixed

  • 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

Fixed

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

v0.1.12

2026-06-10

Security

  • God admin seed: rimosso il fallback password password123. Fuori da development la password proviene ESCLUSIVAMENTE da GOD_PASSWORD (Doppler → Kamal env.secret); il seed fallisce loud se assente. Niente credenziali di default in staging/produzione.

Changed

  • CI/CD migrata al reusable workflow condiviso bussolabs/ci-templates (ci.yml = caller ~12 righe): scan/lint/test/deploy/smoke/uptime uniformi alla fleet. Idle-sleep Sablier su staging. Nessun cambiamento di comportamento dell'applicazione.
  • deploy_timeout Kamal a 90s + Docker HEALTHCHECK start-period 90s: il cold boot esegue db:prepare (tutte le migration) + db:seed prima di puma; 30s (default) non bastavano al primo deploy.

Fixed

  • Seed prod-safe (gotcha #9): gli account demo (owner@/manager@/… con password deboli) sono ora caricati solo in development — in staging/produzione resta il solo god admin. Niente più fixture demo in produzione.
  • Suite test in CI sbloccata (il job test esegue l'intera rspec): .env.test dummy per il boot + correzioni applicative latenti — analytics render_ok con hash literal (keyword args Ruby 3) e namespace ::, feature flags ordinati per name, profili Instagram attributo handle, route onboarding con controller esplicito, paginazione ellissi destra, associazione event_event_types, validazione venue_search senza venue (422 con details.venue_id). Spec approve/location_step allineate al comportamento corrente.

v0.1.10

2026-06-09

Changed

  • Error tracking allineato al template GlitchTip completo: structured logs (enable_logs), scrub PII (ErrorTracking::PiiScrubber) su eventi e log, log bridge Rails.logger → GlitchTip con livello minimo WARN (SENTRY_LOGS_MIN_LEVEL), staging abilitato.
  • Migrazione error tracking da sentry.io SaaS a GlitchTip self-hosted (DSN su Doppler).

v0.1.8

2026-06-02

Added

  • Endpoint GET /version (top-level, no auth): espone tag/sha/build_time/environment della build deployata. Build identity iniettata via Docker ARG → Kamal builder.args → CI. Gli smoke-test staging/production verificano che la versione live corrisponda al tag (fail su mismatch).

Fixed

  • Deploy CI dopo lockdown SSH (infra 2026-06-02): la porta 22 di tutti i server è stata chiusa alla rete privata 10.0.0.0/16. La CI ora passa per il gateway-bastion (167.233.61.97) via SSH ProxyJump, con i server referenziati per IP privato (web 10.0.1.3, worker 10.0.1.2, staging 10.0.1.6). Nessun cambiamento di comportamento dell'applicazione.

v0.1.7

2026-05-28

Added — Role Expansion Wizards backend

  • Member::CrewRequest model + join tables member_crew_request_music_types / _artist_types
  • Member::PromoterRequest model + join member_promoter_request_music_types
  • pg_trgm PostgreSQL extension + GIN indexes su lower(name) per fuzzy matching
  • RoleExpansion::DuplicateDetectionService — match exact (VAT/instagram/email) + fuzzy name+city via pg_trgm
  • RoleExpansion::SubmitDraftService dispatcher + 3 strategie kind-specific (venue/crew/promoter)
  • API Api::V1::Member::CrewRequestsController (show/create/destroy + step actions info/contacts/media/submit)
  • API Api::V1::Member::PromoterRequestsController (analoga)
  • API Api::V1::RoleExpansion::DuplicatesController#check con rate limit
  • Form objects Member::CrewRequestForms::ContactsForm + Member::PromoterRequestForms::ContactsForm
  • Estensione Member::CrewRequestForms::InfoForm e PromoterRequestForms::InfoForm con city/province presence
  • ViewComponent Member::WizardHeaderComponent (title + description + entity icon + step indicator)
  • ViewComponent Member::InlineDuplicateBannerComponent + Stimulus member--duplicate-check
  • ViewComponent Member::DraftResumeBannerComponent
  • Locale config/locales/role_expansion/{it,en}.yml + config/locales/wizard/{it,en}.yml
  • Spec coverage: model + service + request + component (60+ examples)

Added — i18n IT+EN completo webapp

  • Gem i18n-tasks (dev/test) + config/i18n-tasks.yml per audit missing/unused
  • 6 mailer (account, event, event_participation, invitation, venue_claim, requests/city) refactor con I18n.with_locale(account.locale) — utenti EN ricevono email in inglese
  • ApplicationMailer#with_recipient_locale helper per dispatch locale-aware
  • Espansi config/locales/mailers/{it,en}.yml: tutte le 22 view mailer (.html + .text) i18n-izzate con chiavi subject/heading/body/body_html
  • Drawer profile, home hero mockup, events/venues/promoters/crews detail, pwa/offline, map top bar — tutti i testi hardcoded estratti in website.* keys IT+EN
  • actions.close + auth.show_password per aria-label accessibility
  • Fix struttura: website.shared.god_managed.*, website.city_requests.* spostati sotto path corretto

Fixed

  • errors.invalid_resource da "Invalid resource" → "Risorsa non valida" in locale IT
  • Website::CityRequestsController#create flash usa website.city_requests.success (era city_requests.success orfano)
  • 3 chiavi map legend localizzate: "Locale con eventi", "Locale senza eventi", "Evento in corso"
  • System spec crew_upgrade_flow + promoter_upgrade_flow: aggiornati con city/province (InfoForm aveva acquisito validates :city, presence: true senza aggiornamento spec)

v0.1.6

2026-05-27

Added

  • Spec coverage estesa: system specs per crew/promoter/venue/onboarding/valhalla, serializers Alba, ViewComponent UI, db seeds, requests notifications/lookups
  • Helper test condivisi: system_dom_helpers, management_team_helpers, query_counter, google_maps_stub, google_places_stub, vcr
  • Account E2E dedicato per testing cross-repo (db/seeds/e2e_account.rb)
  • Documentazione: DESIGN.md (design system tokens), app/components/COMPONENTS.md

Changed

  • Design system Management: refactor componenti card event/crew/promoter/venue, page header, filtri, panel list
  • Localizzazione: aggiornamenti IT/EN su auth, management, member, onboarding, valhalla
  • Map redesign + clustering MarkerClusterer (specs in docs/superpowers/)

Fixed

  • Security: aggiornate gem con CVE — net-imap (4 CVE 2026), yard (path traversal), view_component (sibling escape), jwt (empty-key HMAC bypass), faraday (protocol-relative URI), css_parser (cert validation)
  • Test: ordine DatabaseCleaner.clean + Capybara.reset_sessions! invertito in spec/support/database_cleaner.rb (deadlock DB su system spec)
  • Repo hygiene: .playwright-mcp/ artifact rimossi da tracking, .gitignore esteso (.DS_Store, .simplecov, .playwright-mcp/)

v0.1.5

2026-05-04

Fixed

  • Deploy: aggiunto assets:precompile nel Dockerfile (tailwind.css non veniva generato → 500 su tutte le pagine)