• v0.4 760820f11f

    centralscrutinizer released this 2026-09-25 14:44:57 +02:00 | 38 commits to main since this release

    Novità

    Onboarding swipe-first. Il flusso a 6 passi ora si percorre con un dito: HorizontalPager sincronizzato col ViewModel. Lo swipe guida avanti/indietro; se un passo non si committa (scrittura fallita) la pagina torna al punto reale. L'unico gate resta lo step agenda, ed è l'ultimo: lo swipe avanti non incontra mai un blocco.

    • Hint swipe animato (nudge + freccia) sopra la barra d'azione; i tasti restano.
    • Scala testo ridotta a 3 opzioni — Compatto / Standard / Grande — default Standard.
    • Copy più asciutto: post-grant giocoso, intro più secca.

    Installazione

    Debug-signed. Scarica app-debug.apk, installa su /e/OS (A16, arm64). Audio e testo restano sul telefono; unica eccezione la geocodifica Nominatim.

    Verifiche

    assembleDebug + suite JVM (core-model/geo/llm/asr + app) verdi.

    Downloads
  • v0.3 f2dbde53bb

    Carazza v0.3 Stable

    centralscrutinizer released this 2026-09-25 13:47:52 +02:00 | 39 commits to main since this release

    Revisione UI dell'onboarding + modulo fiscale + fix contatti.

    Novità

    • Onboarding a 6 swipe: Benvenuto, Permessi, Registrazione, Modelli, Tuoi dati, Orari e lavori. Tono leggero, via il jargon (Shizuku), "continua senza" in primo piano.
    • Permessi in batch: un solo tasto "Accorda tutti" = un popup; spunte verdi dopo il grant.
    • Modulo fiscale (it.carazza.fiscal): validazione partita IVA con checksum Luhn (DPR 633/1972) + provincia di rilascio; lookup nome attività per codice ATECO (set curato).
    • Contatti: apri la scheda reale via contactId (non la ricerca), aggiungi il cliente dalla bozza (ACTION_INSERT), verdetto "non in rubrica" con CTA.
    • README riscritto: posizionamento "gestionale per autonomi", target umano.

    Installazione

    Firma: debug keystore condivisa (aggiornabile in place). ARM64 — Pixel 8a / /e/OS A16, senza Google Play Services.

    adb install -r app-release.apk
    

    I modelli (ASR + LLM) NON sono nell'APK: si scaricano al primo avvio (o si spingono a mano).

    Verifica

    • SHA-256: 7baa4dc93a8ac1b564181cb9c2b25ebc7911bf8d6e0ec40a4fe39fd14b7dfd42
    • 548 test JVM verdi, 0 fallimenti.
    Downloads
  • v0.2 19d8dc7876

    centralscrutinizer released this 2026-09-24 22:09:56 +02:00 | 41 commits to main since this release

    Novità v0.2

    Geocoding robusto

    • Fallback Photon: se Nominatim non dà un pin (down, throttled o junk), ci prova Photon. Tollera anche i typo della trascrizione vocale (es. all'apiario → al piario recuperato da Photon).
    • Cache con namespace: Nominatim e Photon condividono lo store senza collide — un "non trovato" dell'uno non viene più riletto come risposta dell'altro.
    • Tip retry nella schermata Nuovo lavoro: quando il segnaposto manca o è approssimativo (strada/paese), un 💡 invita a correggere l'indirizzo e riprovare la geocodifica (force, bypass cache). L'ultimo controllo resta all'operatore, che vede il pin prima di prenotare.

    Tema

    • Container scuri caldi: lo stato "selezionato" non è più viola di Material.
    • Angoli squadrati su telai e pulsanti.

    Installazione
    Firmato con il keystore condiviso: si installa come aggiornamento sopra la v0.1 senza disinstallare (versionCode 2).

    Downloads
  • v0.1 eaa98eafdc

    centralscrutinizer released this 2026-09-19 18:53:18 +02:00 | 49 commits to main since this release

    Percorso completo: registrazione del Dialer -> bozza revisionabile -> evento in calendario.
    Audio e testo restano sul telefono. Unica eccezione di rete: la geocodifica dell'indirizzo
    verso OpenStreetMap Nominatim.

    Bersaglio verificato: Pixel 8a (akita), Android 16 / SDK 36, arm64, build LineageOS
    community 4.2-a16-20260815662915, 8 GB RAM. Nessun Google Play Services.

    Cosa fa

    • Scoperta delle registrazioni del Dialer via MediaStore, idempotente.
    • Trascrizione locale con Qwen3-ASR 0.6B, diarizzazione "chi ha detto cosa".
    • Estrazione strutturata a schema (tipo intervento, quando grezzo, urgenza, indirizzo, prezzo).
    • Risoluzione date in linguaggio naturale fatta in codice proprio, non dal modello.
    • Geocodifica Nominatim con fallback: se fallisce l'evento si crea comunque con il solo indirizzo testuale.
    • Prenotazione su CalendarContract con esito tipizzato (Booked / SavedWithoutCalendar / AlreadyBooked / Invalid).
    • Enrollment vocale del titolare per distinguere la sua voce da quella del cliente.

    Verificato sul dispositivo (build installata 2026-09-19 20:27)

    Il fix dell'onboarding regge end-to-end. fede.wav era in ERRORE con
    impossibile caricare il modello ASR da .../files/models/asr — la cartella PADRE, firma
    del bug. Dopo l'aggiornamento con -r (dati intatti) la stessa registrazione eoraBOZZA_PRONTAe lo statoERRORE e scomparso del tutto dall'archivio.

    RAM: il gate del piano passa. VmHWM misurato durante una trascrizione reale:
    2,52 GiB contro il limite di 3,3 GiB richiesto. VmPeak virtuale 21 GiB (mmap del
    modello), RSS a riposo 375 MB dopo il rilascio.

    Scansione: lo switch ora fa qualcosa. A spento, dumpsys jobscheduler non mostra
    alcun lavoro per it.carazza. Portando l'intervallo a 30 minuti il job riprogrammato
    risulta TIME=+29m35s.

    ⚠️ RTF: il gate V2 del piano NON passa

    Il piano chiede RTF (audio diviso inference) >= 2,0. Misurato, per trascrizione:

    audio wall RTF piano note
    1,0 s 3,1 s 0,31 dominio caricamento modello
    14,6 s 12,4 s 1,18 misurato con questa build
    20,1 s 15,7 s 1,28
    22,5 s 40,7 s 0,55
    30,8 s 22,2 s 1,39
    848,7 s (14 min) 4103,9 s (68 min) 0,21 chiamata reale

    Media 0,82. Sotto i 30 secondi l'ASR sta piu' o meno al tempo reale; una chiamata da
    14 minuti richiede 68 minuti
    , circa 10 volte peggio del gate.

    Il tempo cresce piu' veloce dell'audio: da 22 s a 849 s l'audio e' x38, il muro e' x185.
    Comportamento superlineare, coerente con attention quadratica o pressione di memoria, non
    con un costo per secondo costante.

    Conseguenza operativa: una giornata di chiamate da 15 minuti non si processa in una
    pausa. Va deciso se il target realistico e' "clip brevi" o se serve lavorare su quantizzazione,
    thread o chunking prima di considerare l'app usabile sul flusso principale.

    Note minori emerse

    • La Diagnostica dice "RTF ultima trascrizione" ma legge ORDER BY rowid DESC. Ri-trascrivendo
      una registrazione vecchia la riga viene aggiornata in posto, il rowid non cambia, e lo schermo
      continua a riportare una riga diversa da quella appena processata.
    • ERRORE non ha retry sul tap: e' deliberato ("tap per leggere, selezione per agire"), ma il
      dialogo d'errore offre solo "Chiudi".
    • Su questo telefono le registrazioni del Dialer stanno in /storage/emulated/0/Chiamate/;
      la cartella configurata Chiamate la risolve correttamente.

    Installazione

    Firma debug: distribuzione interna, non Play Store.

    adb install -r app-debug.apk
    
    Downloads