Skip to content

Releases: PilaScat/cinema-watch

v2026.10.9

Choose a tag to compare

@github-actions github-actions released this 19 Oct 23:44

Novità

  • The Space Cinema: i 35 cinema del circuito entrano nella pagina Cinema, con regione e distanza, nella ricerca e nelle cacce. Programmazione, pianta e posti presi vengono dalle API del sito di The Space, e il pulsante Acquista apre lo spettacolo su thespacecinema.it. L'elenco dei cinema si aggiorna una volta a settimana.

Interno

  • Ogni circuito ha un adapter in src/circuits/; chiavi di spettacolo e di sala portano il circuito (space-…), e la pagina di uno spettacolo è /showings/<chiave>. I link già inviati su Telegram (/performances/…) portano alla pagina nuova; stato e storico passano da soli alla versione 2.

Commit

  • feat(space): region from the postal code when the address has no province (2811f85)
  • docs: The Space API, traps and changelog v2026.10.9 (fa37abb)
  • feat(space): The Space in the web UI (77dd643)
  • feat(space): The Space cinemas in hunts, catalog and search (d863c6e)
  • feat(space): client and parsers for The Space (f3a393d)
  • Docs: chiavi stringa, circuiti, migrazione dello stato e link Apri sala (e2200cc)
  • Chiavi e circuiti: tipi a chiave, stato v2, registro dei circuiti, route /showings/:key (44d4495)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.9 (amd64, arm64)

v2026.10.8

Choose a tag to compare

@github-actions github-actions released this 19 Oct 13:59

Progetto

  • La descrizione del progetto parla dei cinema italiani, con la copertura di oggi: UCI Cinemas e i cinema che vendono con Webtic.
  • I testi della web UI non nominano più un circuito solo: la pagina Cinema dice "I cinema" e l'etichetta di ogni scheda ne indica il circuito; l'avviso della ricerca parla di "catalogo dei film".
  • Badge OpenSSF Best Practices, livello passing (progetto 15670). Le risposte stanno in docs/best-practices.md e scripts/best-practices-fill.mjs compila il modulo.

Commit

  • Backlog: Scorecard 7,7 col lavoro a pull request, testi generali fatti (4e2a7ef)
  • Docs: testi generali sui cinema e sui circuiti (7c32416)
  • UI: testi che non nominano un circuito solo (9ab504a)
  • Docs: su main si entra con una pull request, CI verde e merge con rebase (1eb315a)
  • ESLint: globali del browser per lo script e2e, che esegue funzioni nella pagina (54beedb)
  • e2e: i dati passano come argomenti a Runtime.callFunctionOn, non dentro il codice (e6b8e03)
  • Backlog: descrizione del progetto fatta, restano testi della UI, docs e circuiti (51c1099)
  • Badge OpenSSF Best Practices passing nel README, backlog e CHANGELOG v2026.10.8 (c3ab3a3)
  • Best Practices: know_secure_design e know_common_errors valutati da Filippo (ed49eb2)
  • Best Practices: dati del progetto 15670 e script che compila il modulo (52c2eaa)
  • Descrizione: cacce ai biglietti dei cinema italiani, con la copertura di oggi (d4c2b08)
  • Docs: Release completata a mano se fallisce solo l'ultimo job, nome del file della provenienza (96cd237)
  • Release: nome del file della provenienza con i due punti, come lo scrive gh su Linux (10e880e)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.8 (amd64, arm64)

v2026.10.7

Choose a tag to compare

@PilaScat PilaScat released this 19 Oct 00:28

Progetto

  • Ogni Release allega la provenienza firmata dell'immagine, cinema-watch-<tag>.intoto.jsonl.
  • LICENSE contiene il solo testo MIT; le note delle parti di terzi passano in NOTICE, copiato anche nell'immagine.
  • README con la sezione "Cosa fa", un riassunto in inglese, screenshot nuovi e la sezione Contribuire; nuovo CONTRIBUTING.md.

Commit

  • Backlog: tutti i cinema italiani, a partire da The Space (fb78985)
  • Docs: risposte al questionario Best Practices, backlog, CHANGELOG v2026.10.7 (4bada50)
  • README: Cosa fa, riassunto in inglese, screenshot nuovi, Contribuire; CONTRIBUTING.md (9ab8fd0)
  • Release: provenienza firmata allegata a ogni Release (4da03de)
  • Licenza: LICENSE col solo testo MIT, note di terzi in NOTICE (8c4c319)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.7 (amd64, arm64)

v2026.10.6

Choose a tag to compare

@github-actions github-actions released this 18 Oct 16:26

Novità

  • Annullo da Telegram: dopo Silenzia 24 h il bot manda "silenziata fino alle HH:MM" con il pulsante Riattiva, e dopo Acquistato "caccia archiviata" con il pulsante Ripristina. Valgono solo dalla chat principale. Se le date fisse della caccia sono finite, Ripristina non la riattiva e rimanda alla pagina della caccia.

Commit

  • Docs: annullo da Telegram, CHANGELOG v2026.10.6 (d3515b4)
  • Telegram: Riattiva dopo Silenzia e Ripristina dopo Acquistato (07b9c61)
  • Mutation anche su webtic-direct.ts e venues.ts (1470e3a)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.6 (amd64, arm64)

v2026.10.5

Choose a tag to compare

@github-actions github-actions released this 17 Oct 17:03

Novità

  • Cinema Webtic: oltre a UCI, l'app segue i cinema che vendono con Webtic, fra cui Notorious, Cinelandia, Movie Planet, Starplex e molti indipendenti. Compaiono nella pagina Cinema con l'etichetta Webtic, per regione o per distanza da casa, e si scelgono nel form della caccia come quelli UCI.
  • Le cacce sui cinema Webtic funzionano come quelle UCI: nuovi spettacoli, posti liberati, ultimi posti, annullati e spostati, con la pianta della sala su Telegram. "Acquista" apre lo spettacolo su Webtic dopo il login.
  • La pagina Cerca trova anche i film proiettati solo nei cinema Webtic, e "Cinema con …" elenca i cinema dei due circuiti. I film dei cinema Webtic seguiti da una caccia si aggiornano a ogni giro.
  • Il formato Infinity Vision vale anche per Webtic, dove l'edizione sta nel titolo.
  • L'elenco dei cinema Webtic si aggiorna una volta a settimana in background. Al primo avvio la pagina Cinema avvisa che il controllo è in corso e mostra i cinema man mano che li trova.

Commit

  • Docs: film Webtic aggiornati dai giri delle cacce (9ff45f5)
  • Cerca: i film dei cinema Webtic si aggiornano coi giri delle cacce (2a47c16)
  • CHANGELOG: la sezione dei cinema Webtic è v2026.10.5 (a706f45)
  • Docs: cinema Webtic, CHANGELOG v2026.11.1 (65beea9)
  • Web UI: cinema Webtic in Cinema, Cerca, form e pagina dello spettacolo (1e8408e)
  • Cacce e servizi sui cinema Webtic, controllo delle sedi nel watcher (e38aa1c)
  • Controllo settimanale dei cinema Webtic (f2807c1)
  • Webtic diretto: client per sedi, programmazione, pianta e occupazione (9a9e357)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.5 (amd64, arm64)

v2026.10.4

Choose a tag to compare

@github-actions github-actions released this 17 Oct 15:01

Novità

  • Distanza da casa: nelle Impostazioni, sezione Casa e distanza, si imposta la posizione di
    casa (incollando "lat, lon" da Google Maps, oppure con "Usa la mia posizione" quando l'app è
    aperta in HTTPS) e un raggio massimo facoltativo.
  • Con la casa impostata, la pagina Cinema e i cinema di un film nella pagina Cerca sono ordinati
    dal più vicino con i km accanto; quelli oltre il raggio si vedono con "Mostra anche i lontani".
    Nel form della caccia i cinema vicini stanno in un gruppo "Vicino a casa" in cima.
  • La configurazione passa alla versione 2: le configurazioni salvate ed esportate prima si
    aggiornano da sole.

Commit

  • Backlog: README e punteggio OpenSSF Scorecard da migliorare (e445bac)
  • Docs: casa e distanza, CHANGELOG v2026.10.4 (6548c3f)
  • e2e: casa salvata dalle Impostazioni e cinema ordinati per distanza (6b9de0f)
  • Pagina Cinema: descrizione giusta quando l'ordine è per distanza (eba2885)
  • Cinema, Cerca e form della caccia ordinati per distanza da casa (fcc43a6)
  • Distanza: coordinate dei cinema UCI e calcolo dei km (fcf4efb)
  • Impostazioni: casa e raggio massimo (configurazione v2) (e4112c0)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.4 (amd64, arm64)

v2026.10.3

Choose a tag to compare

@github-actions github-actions released this 17 Oct 14:27

Novità

  • Cerca senza il titolo esatto: la pagina Cerca usa il catalogo UCI e trova i film anche da
    una parte del titolo ("avenger", "dun parte") o con un piccolo errore di battitura
    ("avangers"). Mostra i risultati con locandina, formati e date; cliccando un film si vedono i
    cinema che lo proiettano. Se il catalogo non risponde, si cerca il titolo esatto come prima.
  • Formato Infinity Vision nelle cacce: segue tutte le sale Infinity Vision (XL, 2D, iSense,
    ScreenX) e non quelle normali. Il formato XL continua a prendere anche l'XL Infinity Vision.

Commit

  • Docs: catalogo UCI, edizione dei formati e CHANGELOG v2026.10.3 (ca82fb1)
  • e2e: ricerca con una parte del titolo e cinema del film scelto (c953dad)
  • Pagina Cerca: film da una parte del titolo, anche con un refuso (82781e1)
  • Catalogo UCI e ricerca dei film senza il nome esatto (f2db46c)
  • Formato Infinity Vision: l'edizione della sala come formato della caccia (2f3c5e8)
  • Template Unraid: --restart=unless-stopped (113b18c)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.3 (amd64, arm64)

v2026.10.2

Choose a tag to compare

@github-actions github-actions released this 17 Oct 09:53

Correzioni

  • I form della web UI aperta da http://IP:porta rispondevano "Forbidden": con
    Referrer-Policy: no-referrer il browser mandava Origin: null e il controllo CSRF li
    rifiutava. Ora la policy è same-origin: il referrer resta nascosto ai siti esterni.
  • Il messaggio d'errore giornaliero su Telegram rispetta Silenzia 24 h.
  • Senza token il riepilogo delle 20:00 non si ritenta più ogni 30 secondi riempiendo il log.
  • Cross-Origin-Opener-Policy solo quando la pagina arriva in HTTPS: da http://IP il browser
    lo ignorava e lo segnalava in console.

Novità

  • Ripristina per le cacce archiviate, fra le Archiviate e nella pagina della caccia. Se le
    date fisse sono finite, chiede prima le date nuove.

Sicurezza

  • Anche le chiamate a Telegram passano dalla guardia di uscita: solo HTTPS verso gli host
    consentiti, nessun redirect seguito.
  • Il rilascio scansiona con Trivy l'immagine pubblicata di ogni piattaforma, arm64 compresa.
  • Dependabot aspetta 7 giorni prima di proporre una versione nuova (gli aggiornamenti di
    sicurezza restano immediati) e non propone le major di TypeScript e di Node.
  • SECURITY.md con il link diretto alla segnalazione privata e la divulgazione coordinata.

Interno

  • watcher.ts diviso: regole, registro, piante e manutenzione in moduli di funzioni pure, con
    test diretti dei casi limite.
  • hunts.tsx diviso in form, schede di stato e pagina della zona.
  • Regex e chiavi comuni in keys.ts; huntById e telegramConfigured nel watcher.

Commit

  • Docs: Ripristina con le date finite (eb02c73)
  • Rilascio: Trivy senza il token in variabili d'ambiente (f27ec6a)
  • Watcher: giorno del riepilogo fissato prima dell'invio; log della release senza tag (7315824)
  • Ripristina con le date finite: prima le date nuove, poi la caccia torna attiva (4f7e563)
  • CHANGELOG v2026.10.2 e backlog svuotato (f3e89b4)
  • e2e: salvataggio delle Impostazioni dal form (d2899e1)
  • Test diretti delle regole del watcher, del registro e della manutenzione (24feeec)
  • Watcher: regole, registro, piante e manutenzione in moduli loro (d61dfa3)
  • Web: hunts.tsx diviso in form, stato e pagina della zona (7fa2d0f)
  • Uscite: anche Telegram passa dalla guardia di http.ts (f59e79a)
  • SECURITY.md: link diretto alla segnalazione e divulgazione coordinata (d985ebd)
  • Rilascio: Trivy anche sull'immagine pubblicata di ogni piattaforma (841de67)
  • Cacce archiviate: pulsante Ripristina (c9c2f8d)
  • Chiavi e regex in keys.ts; huntById e telegramConfigured nel watcher (1c1c60e)
  • Web: Cross-Origin-Opener-Policy solo quando la pagina arriva in HTTPS (5d72de7)
  • Watcher: niente errore su Telegram a caccia silenziata; riepilogo solo col token (0e077c9)
  • Dependabot: cooldown di 7 giorni e major di TypeScript ignorate (aef66d4)
  • Docs: trappola del Referrer-Policy, backlog e CHANGELOG v2026.10.2 (72efa80)
  • Web: Referrer-Policy same-origin, i form da http://IP non danno più Forbidden (8de6fba)
  • Backlog: i due punti migliorabili di Scorecard (7/10) (63e785b)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.2 (amd64, arm64)

v2026.10.1

Choose a tag to compare

@github-actions github-actions released this 16 Oct 19:44

Primo rilascio.

Cacce

  • Più cacce attive insieme, ognuna su uno o più cinema UCI, qualunque formato di sala, date fisse
    o prossimi N giorni, con filtri facoltativi per orario, giorni della settimana e lingua.
  • Film scelto dal menu della programmazione, per slug quando non è ancora in programmazione, o per
    parole del titolo con conferma di ogni film trovato.
  • Zona buona relativa (file e centro in percentuale) o ritoccata per sala cliccando sulla pianta,
    con il numero di posti vicini richiesti. Se la pianta di una sala cambia, la zona ritoccata va
    riconfermata.
  • Intervallo predefinito e per caccia, fascia silenziosa, ritardo casuale, cache condivisa fra le
    cacce.

Avvisi su Telegram

  • Nuovi spettacoli, posti liberati (con pausa di 30 minuti), ultimi posti (con soglia e isteresi),
    spettacoli annullati o spostati, film comparsi, riepilogo giornaliero.
  • Le piante dei migliori spettacoli in un album, poi un riepilogo con Acquista, Apri sala,
    Aggiorna ora, Silenzia 24 h e Acquistato. Migliori posti liberi e prezzo da in ogni messaggio.
  • Comando /aggiorna, chat aggiuntive per caccia, code con i limiti di Telegram.
  • "Invia prova" verifica che Telegram accetti l'URL pubblico come pulsante; se no, i link vanno
    nel testo.
  • Token e chat dalle Impostazioni o dalle variabili d'ambiente.

Web UI

  • Cacce, cinema, ricerca di un film, programmazione, pagina dello spettacolo con la pianta dal
    vivo e l'andamento dei posti, registro, impostazioni con esporta e importa.
  • Tema chiaro, scuro o automatico; installabile come PWA dietro HTTPS; password facoltativa.
  • /api/status per il widget di Homepage e /health per il controllo del container.

Container e sicurezza

  • Immagine ghcr.io/pilascat/cinema-watch per amd64 e arm64, utente 99:100, compatibile con
    --read-only e --cap-drop=ALL, con SBOM, provenance e attestazione.
  • CSP con nonce, CSRF, blocco dopo 5 tentativi di accesso, token mai nella pagina, nei log o
    nell'esportazione senza token.

Commit

  • Backlog: test di watcher.ts dopo la divisione (mutation 80%) (eb10481)
  • Backlog dei prossimi rilasci (54cec1e)
  • Test: host confrontati per hostname e tag script senza regex (b3fc091)
  • Accesso: confronto della password con scrypt invece di SHA-256 (faf1233)
  • Rilascio e Dependabot: tag stretto, latest solo dal tag, Node major ignorato (b28cd24)
  • Smoke: film già in sala oggi e prossimi 14 giorni, senza date fisse (fc85cbb)
  • Deploy: il template non sovrascrive i valori di Unraid; rete bridge (52b84f2)
  • Avviso di versione: confronto dei tre numeri (7476d8e)
  • operations.md: Acquistato anche dalla pagina della caccia (8b67ef1)
  • CHANGELOG: note della v2026.10.1 (be0a451)
  • README e docs per chi installa: API, Telegram, Homepage, operazioni (c87d651)
  • Pagina della caccia: pulsante Acquistato (3182593)
  • Avvisi: migliori posti anche per nuovi spettacoli e ultimi posti (00b5c44)
  • Invia prova verifica che Telegram accetti l'URL pubblico (e6bf077)
  • Pianta cambiata: la zona ritoccata della sala va riconfermata (36a88f4)
  • Riepilogo e Nessuna novità: migliori posti e prezzo sotto ogni caccia (a49ab09)
  • Rilascio: sezione del CHANGELOG trovata col tag esatto (527f0fa)
  • Watcher: consegna per chat principale, errori redatti, giorni leggibili (c3619d6)
  • Telegram: su un 400 i link vanno nel testo e i comandi restano (bf62bf4)
  • Testi di validazione e di archivio raccolti in copy (65f6fb0)
  • Avvisi: gli spettacoli di un giorno già controllato e vuoto avvisano (5a09110)
  • Deploy su Unraid: template e script (e9ea142)
  • Workflow: CI, CodeQL, Scorecard e rilascio; Dependabot sulle immagini (6908ddd)
  • Immagine Docker multi-stage e smoke del container (b014544)
  • Bot: l'arresto non aspetta l'attesa del riprovo (42f2e17)
  • Caccia: film scelto dal menu della programmazione (ac0bda7)
  • Impostazioni: token e chat dalle variabili d'ambiente (67b69c4)
  • Limite dei test a 15 s; ESLint ignora i file scratch (a0fd806)
  • Test dei casi limite di web UI, watcher, bot, Telegram e stato (fbdd4a5)
  • Prova end-to-end della UI con Edge headless (da9dd5a)
  • Web UI: cacce, zona sulla pianta, registro e impostazioni (47a0f29)
  • Web UI: cinema, programmazione, ricerca e pagina dello spettacolo (8426aa2)
  • Invia ora su Telegram, colori del grafico, programmazione completa nei test (032b1ab)
  • Server: web UI sulla porta 8790 (b909ff5)
  • Web UI: fondamenta, tema, sicurezza e pagina delle cacce (34d051e)
  • Watcher: servizi per la web UI (856e82e)
  • Logo (biglietto) e icone (1ab0620)
  • Test: niente token Telegram letterali nel repo (d53e4c7)
  • Errori di lettura spiegati in italiano; decisioni sugli avvisi nei docs (9da58a6)
  • Bot: ripresa dopo un 409, offset per token, risposta subito ai pulsanti (ff2a77b)
  • Telegram, compositore, store e guardia dei testi: correzioni della revisione (140b24e)
  • Config e stato: una sola copia per contenuto, copia di uno stato più nuovo (5ee926f)
  • Watcher: un'operazione alla volta, avvisi che non si perdono, errori isolati (d483296)
  • diffRound e runner: niente annullati falsi, spostati sulla stessa chiave, giorni nuovi in silenzio (99048ba)
  • Vitest 4 per far funzionare Stryker (7b8a756)
  • Piante a 1280 px per Telegram; test dei tempi solo su Linux (d8d6921)
  • Test del tempo di disegno saltato dentro Stryker (aa76a90)
  • Test live delle API e mutation testing con Stryker (f445a14)
  • Avvio del servizio e prova a secco (--dry-run) (3c55b0f)
  • Bot Telegram: /aggiorna, pulsanti e polling (9679f00)
  • Watcher: giri programmati e a mano, avvisi, registro e andamento (297b3f1)
  • Configurazione: schema stretto, default, import/export, caricamento (d80cbae)
  • Logger JSON con redazione dei segreti (ea3a77a)
  • Store su file: scrittura atomica con fsync e mutex per file (841f599)
  • Mondo finto per i test end-to-end: UCI, Webtic, Telegram e GitHub (3c4ca37)
  • Compositore dei messaggi, formatter e testi Telegram (6c25da2)
  • Trasporto Telegram: code per chat, limiti, retry e timeout (31078d8)
  • ESLint: ignora i campi tolti con il rest; diffRound passa il lint (15018af)
  • Cuore degli avvisi: diffRound da un giro agli eventi (51ab852)
  • Pianta della sala in SVG e PNG con i font del repo (acad98c)
  • Analisi dei posti: zona buona, posti vicini, migliori posti (1395098)
  • Client Webtic: spettacolo, pianta in cache 7 giorni, occupazione (0e63d4b)
  • Cache TTL con LRU e richieste deduplicate (36138a1)
  • Programmazione UCI: cinema, film, spettacoli e filtri (79e60b2)
  • Date nel fuso Europe/Rome con Intl (fa7d2e2)
  • Client HTTP: host consentiti, timeout, backoff e coda per host (082cd4e)
  • Tipi di dominio ed errori tipizzati (eec7ccb)
  • Fixture vere di UCI e Webtic (15-16/10/2026) (bf9a36d)
  • Impalcatura: TypeScript, Vitest, ESLint, guardie e licenze (908dbe0)

Immagine: ghcr.io/pilascat/cinema-watch:v2026.10.1 (amd64, arm64)