| Master | Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|---|
| datacenter | haos | 1 | View summary corrente/temperatura | 2026-05-26 | planned |
| datacenter | haos | 2 | View dettaglio apparati datacenter | 2026-05-26 | planned |
| datacenter | haos | 3 | View dettaglio apparati uffici | 2026-05-26 | planned |
| luna99 | ppro-mobile | 1 | Ottenere lista funzioni dal cliente PERIGEST | 2026-05-30 | done |
| luna99 | ppro-mobile | 2 | Implementazione webapp Sopralluogo (cerca/riepilogo/edit/save) | 2026-05-30 | done |
| small-user | master | 1 | Milestone 1 | 2026-05-30 | planned |
| small-user | master | 2 | Milestone 2 | 2026-05-30 | planned |
| small-user | master | 3 | Milestone 3 | 2026-05-30 | planned |
| luna-voce | master | 1 | Bundle scaffolding: VM in `projects.yaml`+`sysops.yaml`, jail LDAP, DB voce, DNS `sip.luna99.it`, frontend HAProxy `my.<tenant>/{voip,conf,talk}` | 2026-05-31 | done (2026-05-28) |
| luna99 | lifecycle-bus | 1 | P0 infra: Redis fleet dedicato (auth+AOF), client Perl, stream | 2026-06-04 | done |
| luna-voce | master | 2 | voce-itsp1 + voce-pbx1 in linea: chiamata PSTN inbound risponde con IVR statico (CS1) | 2026-06-05 | done (2026-06-03, PSTN inbound reale e2e su trunk test kiknet; CS1 parziale: outbound non testato) |
| luna99 | lifecycle-bus | 2 | P1 publisher in admin + P2 framework consumer/sweeper | 2026-06-05 | done |
| luna99 | lifecycle-bus | 3 | P3 consumer voce (assorbe il purge sync interim + reconcile) | 2026-06-06 | done |
| luna99 | lifecycle-bus | 4 | P4 consumer mail + P5 sweeper/report | 2026-06-07 | done |
| luna-voce | master | 3 | voce-users1 in linea: hardphone SIP/TLS + softphone webapp registrati, chiamata interna OK, outbound via voce-itsp1 (CS2) | 2026-06-09 | in-progress (hardphone+softphone+interne ✅ 2026-06-01; resta outbound PSTN) |
| luna-voce | master | 4 | voicemail→email funzionante + contesto `[emergency]` attivo e testato con codice privato (CS3+CS4) | 2026-06-11 | in-progress (CS3 ✅ 2026-06-04 e2e live; CS4 scritto ma `include` commentato in attesa revisione AGCOM) |
| luna-voce | master | 5 | voce-rtc1 (Janus) + voce-conf1 (Jitsi): click-to-call anonimo e conferenza 3-way operativi | 2026-06-13 | superata da ADR-007 (meeting = LiveKit, done 2026-06-06; Janus parked, Jitsi dismesso) |
| luna99 | lifecycle-bus | 5 | P6 consumer file — dataset ZFS su nfs1 via stream `luna:zfs` | 2026-06-13 | done |
| datacenter | master | 1 | Monitoraggio | 2026-06-15 | progress |
| datacenter | logging | 1 | Syslog centralizzato operativo | 2026-06-15 | planned |
| datacenter | logging | 2 | Trap receiver operativo | 2026-06-15 | planned |
| luna-voce | master | 6 | `Luna::Admin::Voce` v1 su admin.luna99.it: onboarding tenant pilota end-to-end (CS5) | 2026-06-15 | in-progress (~95%; UI complete, onboarding e2e atteso con ITSP commerciale) |
| luna99 | ppro-mobile | 5 | API file in `Ppro::Mobile` (lista/upload via presigned URL diretti a luna-file/MinIO) — sblocca M3 | 2026-06-25 | planned |
| luna99 | ppro-mobile | 3 | Implementazione Documentazione / Richiesta docs / Foto | 2026-06-30 | blocked (API ppro: vedi M5) |
| luna99 | ppro-mobile | 6 | API modelli in `Ppro::Mobile` (lista + render PDF, scaricato via presigned GET) | 2026-06-30 | planned |
| office | master | 1 | HAOS onboardato nel bundle workflow | 2026-06-30 | done (2026-05-25) |
| luna99 | ppro-mobile | 4 | Test con cliente | 2026-07-05 | planned |
| cloud88 | master | 1 | Milestone 1 | 2026-08-31 | planned |
| cloud88 | master | 2 | Milestone 2 | 2026-08-31 | planned |
| cloud88 | master | 3 | Milestone 3 | 2026-08-31 | planned |
| luccawifi | master | 1 | Milestone 1 | 2026-08-31 | planned |
| luccawifi | master | 2 | Milestone 2 | 2026-08-31 | planned |
| luccawifi | master | 3 | Milestone 3 | 2026-08-31 | planned |
| luna99 | master | 1 | Milestone 1 | 2026-08-31 | planned |
| luna99 | master | 2 | Milestone 2 | 2026-08-31 | planned |
| luna99 | master | 3 | Milestone 3 | 2026-08-31 | planned |
| mccarty | master | 1 | Milestone 1 | 2026-08-31 | planned |
| mccarty | master | 2 | Milestone 2 | 2026-08-31 | planned |
| mccarty | master | 3 | Milestone 3 | 2026-08-31 | planned |
| undesktop | master | 1 | Milestone 1 | 2026-08-31 | planned |
| undesktop | master | 2 | Milestone 2 | 2026-08-31 | planned |
| undesktop | master | 3 | Milestone 3 | 2026-08-31 | planned |
| office | master | 2 | Prima automazione/integration in prod | 2026-09-30 | planned |
| office | master | 3 | Estensione ad altre appliance | 2026-12-31 | planned |
| cloud88 | website | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| cloud88 | website | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| cloud88 | website | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| luna99 | file | 1 | Browse UI HTMX + WebDAV + OCS base | - | done |
| luna99 | file | 2 | Login Flow v2 + app passwords | - | done |
| luna99 | file | 3 | Chunked upload v2 | - | done |
| luna99 | file | 4 | Trashbin (UI + DAV) | - | done |
| luna99 | file | 5 | Sharing OCS API (Fase 5a) | - | done |
| luna99 | file | 6 | Public links con token | - | done |
| luna99 | file | 7 | Migrazione metadati EXIF + reverse geocoding (Nominatim) | - | done |
| luna99 | file | 8 | Test compat con client Nextcloud desktop + iOS + Android | 16h | 2026-06-15 |
| luna99 | file | 9 | Spostare segreti (LDAP, S3, app secret) in `/etc/luna/*` | 4h | 2026-06-10 |
| luna99 | file | 10 | Rimuovere `max_request_size=1 GiB` quando chunked v2 robusto | 4h | 2026-06-30 |
| luna99 | file | 11 | Quota per utente (disk_stats consumato da home/profile) | 12h | 2026-06-30 |
| luna99 | file | 12 | Test coverage modelli + WebDAV smoke (litmus webdav) | 16h | 2026-07-15 |
| luna99 | file | 13 | Preview/thumbnail generation (oggi stub 404) | 16h | 2026-07-31 |
| luna99 | file | 14 | ~~Presigned wrapper~~ → API service-account `/api/svc/ppro*` (GET/PUT/DELETE/list/move su alberi `_ppro`, streaming via app — niente presigned su NFS) | 8h | 2026-06-11 |
| luna99 | file | 15 | Service account `svc-ppro` (app-password, gate `Svc#gate` da config `svc.ppro.account`) + layout `<master>/<tenant>/_ppro/<prot>/...` e `_ppro/_modelli/` | 6h | 2026-06-11 |
| luna99 | file | 16 | ~~CORS MinIO~~ — senza presigned i client non parlano più con lo storage direttamente | - | - |
| luna99 | file | 18 | **Layout home mail-like** (2026-06-11): chiavi `<master>/<tenant>/<uid>/{files,trash}/` da LDAP `homeDirectory` (`Model::Homes`, cache 300s/30s; helper `files_key`/`trash_key`); via i vecchi `users/<email>` e `trashbin/<email>` | - | 2026-06-11 |
| luna99 | file | 19 | **Allocazione tenant-first per-subtenant** (2026-06-12): root `/mnt/nfs-file` (tolto livello-app), schema svc `<base>/_ppro/<rel>` a profondità variabile, dataset ZFS per subtenant come unità di quota — vedi note M19 | - | 2026-06-12 |
| luna99 | file | 17 | **Migrazione storage backend S3/MinIO → NFS (`nfs1`)** — vedi note sotto | TBD | 2026-06-10 |
| luna99 | ppro | 1 | Migrazione luna99 (auth plugin, portal layout, /opt path) | - | 2026-05-06 |
| luna99 | ppro | 2 | Spostare segreti da webapp.yml a `/etc/luna/*` files | 6h | 2026-06-10 |
| luna99 | ppro | 3 | Rimuovere credenziali Generali hardcoded | 3h | 2026-06-10 |
| luna99 | ppro | 4 | CSRF double-submit sui POST/HTMX | 8h | 2026-06-20 |
| luna99 | ppro | 5 | Re-auth + authorization per-messaggio sui WebSocket | 12h | 2026-06-30 |
| luna99 | ppro | 6 | Completare migrazione WS→HTTP/HTMX (rimuovere legacy) | 24h | 2026-07-31 |
| luna99 | ppro | 7 | Spezzare i controller fat (Config/Nextcloud/Mail/Pratica) | 20h | 2026-07-31 |
| luna99 | ppro | 8 | Baseline test `prove -lr t/` (smoke + auth + pratica CRUD) | 16h | 2026-06-30 |
| luna99 | ppro | 9 | Spegnere `log->level('debug')` + ripristinare template cache | 1h | 2026-06-10 |
| luna99 | ppro | 10 | Sostituire password LDAP in sessione con token IMAP/Nextcloud delegato | 16h | TBD |
| luna99 | ppro | 11 | `webapp::Service::FileClient` — client API `/api/svc/ppro*` di luna-file (Basic `svc-ppro`): `get/put/delete/list/move/exists` in streaming (niente presigned su NFS — rivisto 2026-06-11) | 10h | 2026-06-11 |
| luna99 | ppro | 12 | Refactor `Ppro::File` su `FileClient`: dismesso disk storage (`_abs_file`, `files/`), tutto su `cloud88/perigest/_ppro/<prot>/...` su NFS via luna-file (rotte+JSON invariati; thumb PDF su temp; mkdir=`.keep`) | 20h | 2026-06-11 |
| luna99 | ppro | 13 | `Ppro::Modelli` su luna-file (`cloud88/perigest/_ppro/_modelli/`): render/compile/pdf_fields leggono i template via `FileClient`, compilati salvati in `<prot>/modelli/`; AcroForm fill CAM::PDF in-memory; gestione template (upload/download/delete) per gestori config | 12h | 2026-06-11 |
| luna99 | ppro | 14 | Deprecazione `Ppro::Nextcloud` (~893 LOC) + `Service::NextcloudClient` (~768 LOC): rimossi quando M11-M13 done | 4h | 2026-06-30 |
| luna99 | contab | 1 | Migrazione anagrafica → abook (Fasi 1→5) | 40h | 2026-05-21 |
| luna99 | contab | 2 | QbImporter/QbSyncImporter via Anagrafica model | 8h | 2026-06-15 |
| luna99 | contab | 3 | Cleanup `anagrafica_ext` (valutare drop cache) | 6h | 2026-06-15 |
| luna99 | contab | 4 | Test coverage modelli `Fattura`/`Iva`/`Sollecito` | 12h | 2026-06-30 |
| luna99 | contab | 5 | Provider bancari aggiuntivi (oltre Wise/Revolut) | 8h | 2026-06-30 |
| luna99 | contab | 6 | Audit log `contab_audit` (azioni irreversibili: invio SDI, sollecito, riconciliazione, modifica fattura post-emissione) | 6h | 2026-06-30 |
| luna99 | contab | 7 | Export dati per F24 (estrazione liquidazione IVA periodica accessibile a commercialista, admin e operatore — no compilazione modello) | 3h | 2026-06-30 |
| luna99 | contab | 8 | Banca Sella: import movimenti via CSV | 8h | 2026-06-30 |
| luna99 | contab | 9 | Revolut: import movimenti via CSV (stile Sella, in alternativa all'OAuth proxy oggi non configurato in UI) | 4h | 2026-06-30 |
| luna99 | contab | 10 | API REST `/api/contab01/*` — fatture di vendita + anagrafica clienti (pattern `Quick01_contab`, primo `Quick01_*` luna99-wide) | 10h | 2026-07-15 |
| luna99 | contab | 11 | Allegati PDF su fatture vendita/acquisto: upload, storage su filesystem, UUID in DB (`fatture_allegati`) | 6h | 2026-07-15 |
| luna99 | contab | 12 | **Note di Credito (TD04)** attive/passive: emissione collegata a fattura origine, prima nota inversa, segno negativo in registri IVA + riconciliazione | 8h | 2026-06-20 |
| luna99 | contab | 13 | **Preventivi/offerte**: tabella `preventivi`/`righe_preventivo`, CRUD, conversione → fattura di vendita | 10h | 2026-06-30 |
| luna99 | contab | 14 | **Divisioni di fatturazione per business**: ogni business (1 P.IVA) ha più divisioni/marchi con template documento (logo/intestazione/footer/colore) + centro di ricavo; il documento porta `divisione_id` e il PDF usa il marchio della divisione (soggetto emittente legale = business) | 10h | 2026-06-30 |
| luna99 | contab | 15 | **Report personalizzati**: lista autofatture + estrazione filtrabile/export CSV configurabile | 4h | 2026-06-30 |
| luna99 | contab | 16 | **PEC SdI live** (out + ricezione ricevute via IMAP): da stub a invio reale, polling ricevute, aggiornamento stato | 12h | 2026-07-15 |
| luna99 | abook | 1 | Migrazione 001: fiscal fields + contact_addresses + business books | 12h | 2026-05-21 |
| luna99 | abook | 2 | API bearer-token `/api/v1/abook/*` (contacts + addresses) | 16h | 2026-05-21 |
| luna99 | abook | 3 | Validazione P.IVA Luhn + CF in `Abook::Model::Contact` | 4h | 2026-05-21 |
| luna99 | abook | 4 | Documentare routes API in `/srv/ia-rules/projects/contab/abook-anagrafica-migration.md` | 2h | 2026-05-21 |
| luna99 | abook | 5 | UI dedicata per rubriche business_* (vista clienti/fornitori) | 12h | 2026-06-15 |
| luna99 | abook | 6 | Sharing con permission `write` (oggi solo `read`) | 6h | 2026-06-30 |
| luna99 | abook | 7 | Import CSV/Excel per rubriche business | 8h | 2026-06-30 |
| luna99 | abook | 8 | Export vCard / CSV | 4h | 2026-06-30 |
| luna99 | abook | 9 | Test coverage modelli (Contact/Addressbook/ContactAddress) | 12h | 2026-06-30 |
| luna99 | abook | 10 | Rate-limit + audit log per API bearer | 6h | 2026-07-15 |
| luna99 | sync | 1 | Baseline EAS 14.1 + Autodiscover XML + mobileconfig iOS | - | done |
| luna99 | sync | 2 | Backend CalDAV/CardDAV/IMAP + comandi core | - | done |
| luna99 | sync | 3 | WBXML encoder/decoder con dictionary completo | - | done |
| luna99 | sync | 4 | Spostare segreti (app.secret, LDAP bind) in `/etc/luna/*` | 4h | 2026-06-10 |
| luna99 | sync | 5 | Disabilitare `log->level('debug')` in produzione | 1h | 2026-06-10 |
| luna99 | sync | 6 | Test compatibilità: iOS Mail, Outlook mobile, Android Mail | 12h | 2026-06-30 |
| luna99 | sync | 7 | Litmus-style smoke test su comandi EAS critici | 16h | 2026-07-15 |
| luna99 | sync | 8 | Metriche per device/comando (ping count, sync latency) | 8h | 2026-07-31 |
| luna99 | sync | 9 | Documentare procedura setup iOS via mobileconfig | 4h | 2026-06-30 |
| luna99 | sync | 10 | Valutare Modern Auth (OAuth2) per iOS senza profile | TBD | TBD |
| luna99 | calendar | 1 | Setup baseline (schema, modelli, CalDAV minimo, web UI) | - | done |
| luna99 | calendar | 2 | Sharing calendari (read) | - | done |
| luna99 | calendar | 3 | Agent API per consumer AI | - | done |
| luna99 | calendar | 4 | Sharing con permission `write` (oggi solo `read`) | 6h | 2026-06-30 |
| luna99 | calendar | 5 | iMIP: invio inviti via SMTP + parsing risposte | 24h | 2026-07-31 |
| luna99 | calendar | 6 | Time zone handling completo (VTIMEZONE → DB timezone) | 8h | 2026-06-30 |
| luna99 | calendar | 7 | Ricorrenze (RRULE) — parsing + espansione in vista | 16h | 2026-07-15 |
| luna99 | calendar | 8 | Test coverage modelli + CalDAV (Litmus / litmus-caldav) | 16h | 2026-07-31 |
| luna99 | calendar | 9 | Rate-limit / scoping agent API (oggi pubblica) | 6h | 2026-07-15 |
| luna99 | calendar | 10 | Documentazione client setup (Apple, Thunderbird, DAVx5) | 4h | 2026-06-30 |
| luna99 | uadmin | 1 | **Aggiungere codebase al bundle** (`projects.yaml`) | 1h | 2026-06-01 |
| luna99 | uadmin | 2 | Riscrivere questa SPEC.md sulla base del codice reale | 4h | 2026-06-01 |
| luna99 | uadmin | 3 | Tenant/business UI (lista + CRUD via contab API) | TBD | 2026-06-30 |
| luna99 | uadmin | 4 | User UI (lista + CRUD via contab API + LDAP write) | TBD | 2026-06-30 |
| luna99 | uadmin | 5 | Toggle webapp per tenant (`lunaXxxJail`) | TBD | 2026-07-15 |
| luna99 | uadmin | 6 | Audit log azioni admin | TBD | 2026-07-15 |
| luna99 | uadmin | 7 | Test coverage | TBD | 2026-07-31 |
| luna99 | admin | 1 | **Aggiungere codebase al bundle** (`projects.yaml`) o | ||
| luna99 | admin | 2 | Riscrivere questa SPEC sulla base del codice reale o di | ||
| luna99 | admin | 3 | Fleet status (proxy a Prometheus + Grafana) | TBD | TBD |
| luna99 | admin | 4 | Reseller CRUD | TBD | TBD |
| luna99 | admin | 5 | Revocation panel (consumer auth API) | TBD | TBD |
| luna99 | admin | 6 | Audit globale aggregato | TBD | TBD |
| luna99 | admin | 7 | Rotazione segreti workflow | TBD | TBD |
| luna99 | auth | 1 | Baseline (login form, sessioni Pg, token HMAC, plugin) | - | done |
| luna99 | auth | 2 | Directory API + revocations API | - | done |
| luna99 | auth | 3 | uidNumber per SSSD (migration 002) | - | done |
| luna99 | auth | 4 | Spostare segreti (`app.secret`, LDAP bind) in `/etc/luna/*` | 4h | 2026-06-10 |
| luna99 | auth | 5 | StartTLS verso LDAP (oggi `start_tls=0`) | 6h | 2026-06-30 |
| luna99 | auth | 6 | API key rotation + multiple keys per consumer | 8h | 2026-06-30 |
| luna99 | auth | 7 | Cambio password self-service (LDAP modify) | 16h | 2026-07-15 |
| luna99 | auth | 8 | TOTP / MFA opzionale (per ruoli sensibili) | 24h | 2026-07-31 |
| luna99 | auth | 9 | Audit log eventi login/logout/revoke | 8h | 2026-06-30 |
| luna99 | auth | 10 | Test coverage Model::Session + Token sign/verify | 12h | 2026-06-30 |
| luna99 | auth | 11 | Hardening rate limiter (oggi in-memory, no distribuito) | 6h | 2026-07-15 |
| luna99 | wiki | 1 | Schema DB + pgvector + indici | - | done |
| luna99 | wiki | 2 | Config + auth plugin + bootstrap Mojolicious | - | done |
| luna99 | wiki | 3 | CRUD pagine + categorie + revisioni (Web UI HTMX) | 24h | 2026-06-30 |
| luna99 | wiki | 4 | Render markdown server-side + sanitizzazione | 8h | 2026-06-30 |
| luna99 | wiki | 5 | Embedding worker (background job su insert/update) | 12h | 2026-07-15 |
| luna99 | wiki | 6 | RAG query endpoint (`/api/rag`) con top-K + cite | 16h | 2026-07-31 |
| luna99 | wiki | 7 | Full-text search UI (GIN tsvector) | 8h | 2026-07-15 |
| luna99 | wiki | 8 | Spazi wiki (namespace per area: architecture/runbooks/…) | 8h | 2026-07-31 |
| luna99 | wiki | 9 | Import iniziale da `/srv/ia-rules/projects/**/*.md` | 6h | 2026-08-15 |
| luna99 | wiki | 10 | Permalink stabili + supporto link `[[slug]]` cross-page | 6h | 2026-07-31 |
| luna99 | wiki | 11 | Test coverage modelli + RAG smoke | 12h | 2026-08-15 |
| luna99 | home | 1 | Portale + tile + favorites + profile | - | done |
| luna99 | home | 2 | Frontend assets condivisi (Alpine/htmx/Bootstrap) | - | done |
| luna99 | home | 3 | Tile dinamiche da `lunaXxxJail` + `lunaServices` | - | done |
| luna99 | home | 4 | Spostare segreti (`app.secret`, LDAP binds) in `/etc/luna/*` | 4h | 2026-06-10 |
| luna99 | home | 5 | Connection pool LDAP (oggi bind per request) | 8h | 2026-06-30 |
| luna99 | home | 6 | Cache tile per (uid,tenant) con invalidazione su favorite | 6h | 2026-06-30 |
| luna99 | home | 7 | Disk stats reali via API `file` | 8h | 2026-06-30 |
| luna99 | home | 8 | Cambio password via auth API (oggi placeholder?) | 8h | 2026-07-15 |
| luna99 | home | 9 | Dark mode + persistenza tema utente in LDAP | 8h | 2026-07-31 |
| luna99 | home | 10 | Test coverage helpers + tenant_apps | 8h | 2026-06-30 |
| mccarty | backoffice | 1 | Setup server + bundle onboarding | — | 2026-05-25 |
| mccarty | backoffice | 2 | Codebase versionato su gitea (`mccarty/backoffice`) | 2h | 2026-05-29 |
| mccarty | backoffice | 3 | Reverse proxy + URL pubblico stabile | 4h | TBD |
| mccarty | backoffice | 4 | Iterazione UI/CRUD su feedback claudiac (4a–4f) | — | 2026-08-31 |
| mccarty | backoffice | 4a | Backoffice multilingua IT/EN/ES (schema testi + UI tab nei form) | 6h | 2026-06-12 |
| mccarty | backoffice | 4b | Scheda prodotto: drop zone certificati + anteprima inline | 5h | 2026-06-19 |
| mccarty | backoffice | 4c | Gestione loghi (upload + flag max 3 visualizzati + ordinamento) | 4h | 2026-06-26 |
| mccarty | backoffice | 4d | Flag visibilità garanzie Sì/No + flag firma aderente assicurato | 3h | 2026-06-26 |
| mccarty | backoffice | 4e | Upload documentazione obbligatoria nella scheda prodotto | 3h | 2026-07-03 |
| mccarty | backoffice | 4f | Tool caricamento policy con ambiente di staging + promozione in prod | 8h | 2026-07-24 |
| mccarty | backoffice | 5 | Iterazione UI/CRUD post-meeting 2026-05-27 (5a–5g) | — | 2026-08-15 |
| mccarty | backoffice | 5a | Campo QR code URL su scheda prodotto | 1h | 2026-05-31 |
| mccarty | backoffice | 5b | Campo codice prodotto clikki (2 lettere) + retrofit storico | 1h | 2026-05-31 |
| mccarty | backoffice | 5c | Libreria loghi compagnia (`comp_loghi`) | 8h | 2026-06-19 |
| mccarty | backoffice | 5d | Prodotto multi-compagnia (pivot `comp_prodotti_compagnie`) | 3h | 2026-06-26 |
| mccarty | backoffice | 5e | Vista log certificati generati (legge `comp_certificati_log`) | 2h | 2026-07-10 |
| mccarty | backoffice | 5f | Vista log email + template email testuali multilingua | 2h | 2026-07-17 |
| mccarty | backoffice | 5g | Flag documentazione obbligatoria con data dinamica QForm | 2h | 2026-07-24 |
| mccarty | backoffice | 5h | Campo titolo PDF (`prod_titolo_pdf`, solo IT) → metadato `/Title` | 1h | 2026-06-13 |
| mccarty | backoffice | 5i | Template certificato editabili via web (DB+placeholder, WYSIWYG+sanitizer, cliente IT/EN/ES + compagnia IT) | 14h | 2026-07-31 |
| mccarty | backoffice | 6 | Hardening (rotazione password admin, secrets fuori da `backend.yml`) | 4h | TBD |
| mccarty | api | 1 | Skeleton webapp + unit + onboarding bundle | — | 2026-05-25 |
| mccarty | api | 2 | Endpoint `POST /certificato/master` + WeasyPrint demone + storage UUID | 8h | 2026-06-12 |
| mccarty | api | 3 | Layout dinamico 2 colonne + importi garanzia + hash + QR code | 4h | 2026-06-19 |
| mccarty | api | 4 | Endpoint `POST /certificato/compagnia` (multi-compagnia + template per compagnia) | 4h | 2026-06-26 |
| mccarty | api | 5 | Nomenclatura file standardizzata (`YYYYMMDD_num_cod2_Nome.pdf`) | 1h | 2026-06-26 |
| mccarty | api | 6 | Persistenza `comp_certificati_log` (storico richieste + payload) | 2h | 2026-07-03 |
| mccarty | api | 7 | Endpoint `POST /documentazione` con QForm date dinamica | 5h | 2026-07-17 |
| mccarty | api | 8 | Endpoint `POST /email` + SMTP register + `comp_email_log` | 3h | 2026-07-24 |
| mccarty | api | 9 | Gestione gruppi >40 passeggeri (layout su 2 fogli) | 3h | 2026-07-31 |
| mccarty | api | 10 | Certificati specifici per compagnia (medico-bagaglio, annullamento) | 4h | 2026-08-14 |
| mccarty | api | 11 | Hardening (rate limit `/file/<uuid>`, secrets fuori da yml) | 3h | 2026-08-21 |
| mccarty | api | 12 | Metadato `/Title` PDF da `prod_titolo_pdf` (M5h backoffice) | 1h | 2026-06-13 |
| mccarty | api | 13 | Render template **DB-backed** (corpo da `comp_cert_template`, telaio `.ep` in repo) + ri-sanitize | 4h | 2026-07-31 |
| mccarty | api | 14 | Data emissione **congelata su ristampa** (lookup `comp_certificati_log`) | 1h | 2026-06-20 |
| mccarty | api | 15 | Storage: sync NAS ~10min + purge locale + layout per agenzia/annualità | 6h | 2026-08-21 |
| undesktop | frontend | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| undesktop | frontend | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| undesktop | frontend | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| undesktop | backend | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| undesktop | backend | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| undesktop | backend | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| Master | Subproject | Status | Target | Codebase |
|---|---|---|---|---|
| luna99 | ppro-mobile | in-progress | 2026-05-30 | ppro-mobile |
| small-user | luccaunited | in-progress | 2026-05-30 | luccaunited |
| luna99 | contab | in-progress | 2026-06-15 | contab |
| cloud88 | website | planned | 2026-06-30 | website |
| luna99 | ppro | in-progress | 2026-06-30 | ppro |
| undesktop | frontend | planned | 2026-06-30 | undesktop-frontend |
| undesktop | backend | planned | 2026-06-30 | undesktop-backend |
| mccarty | backoffice | in-progress | 2026-08-31 | backoffice |
| Master | Subproject | Status | Target | Codebase |
|---|---|---|---|---|
| luna99 | file | in-progress | 2026-05-30 | luna-file |
| luna-voce | itsp | in-progress | 2026-06-05 | luna-voce-itsp |
| luna99 | lifecycle-bus | in-progress | 2026-06-07 | admin + new Luna::Lifecycle lib |
| luna99 | test-machine | done | 2026-06-07 | new luna-test harness (Perl) + test VM |
| luna-voce | users | in-progress | 2026-06-09 | luna-voce-users |
| luna-voce | pbx | in-progress | 2026-06-11 | luna-voce-pbx |
| luna-voce | conf | done | 2026-06-13 | luna-voce-conf |
| datacenter | logging | planned | 2026-06-15 | logging |
| luna-voce | admin | in-progress | 2026-06-15 | admin |
| luna99 | abook | in-progress | 2026-06-15 | abook |
| luna99 | sync | in-progress | 2026-06-15 | sync |
| luna99 | calendar | in-progress | 2026-06-15 | calendar |
| luna99 | uadmin | planned | 2026-06-15 | uadmin |
| luna99 | admin | planned | 2026-06-15 | admin |
| office | pc-security | in-progress | 2026-06-15 | nixos-config (per-PC, fuori da luna99 bundles) |
| luna-voce | livekit | done | 2026-06-27 | luna-voce-livekit |
| luna99 | auth | in-progress | 2026-06-30 | auth |
| luna99 | wiki | planned | 2026-06-30 | wiki |
| luna99 | home | in-progress | 2026-06-30 | home |
| luna99 | fixed-tenancy | done | 2026-06-30 | admin |
| luna99 | password-manager | planned | 2026-07-30 | TBD |
| office | gestione-progetti | in-progress | 2026-07-30 | /srv/luna99-projects + /usr/local/bin/luna-daily-report |
| luna-voce | rtc | in-progress | 2026-08-15 | luna-voce-rtc |
| mccarty | api | in-progress | 2026-08-31 | api |
| Master | Subproject | Status | Target | Codebase |
|---|---|---|---|---|
| luccawifi | onboard-sysop-luccawifi-it | planned | 2026-05-30 | TBD |
| Master | Subproject | Status | Target | Codebase |
|---|---|---|---|---|
| datacenter | haos | planned | 2026-05-26 | haos |
| office | automation | in-progress | 2026-09-30 | office/automation |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Milestone 1 | 2026-08-31 | planned |
| master | 2 | Milestone 2 | 2026-08-31 | planned |
| master | 3 | Milestone 3 | 2026-08-31 | planned |
| website | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| website | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| website | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| cloud88 | website | planned | claudiac | 2026-06-30 | website |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| haos | 1 | View summary corrente/temperatura | 2026-05-26 | planned |
| haos | 2 | View dettaglio apparati datacenter | 2026-05-26 | planned |
| haos | 3 | View dettaglio apparati uffici | 2026-05-26 | planned |
| master | 1 | Monitoraggio | 2026-06-15 | progress |
| logging | 1 | Syslog centralizzato operativo | 2026-06-15 | planned |
| logging | 2 | Trap receiver operativo | 2026-06-15 | planned |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| datacenter | haos | planned | stefanol | 2026-05-26 | haos |
| datacenter | logging | planned | gabrieleg | 2026-06-15 | logging |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Milestone 1 | 2026-08-31 | planned |
| master | 2 | Milestone 2 | 2026-08-31 | planned |
| master | 3 | Milestone 3 | 2026-08-31 | planned |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| luccawifi | onboard-sysop-luccawifi-it | planned | maurog | 2026-05-30 | TBD |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Bundle scaffolding: VM in `projects.yaml`+`sysops.yaml`, jail LDAP, DB voce, DNS `sip.luna99.it`, frontend HAProxy `my.<tenant>/{voip,conf,talk}` | 2026-05-31 | done (2026-05-28) |
| master | 2 | voce-itsp1 + voce-pbx1 in linea: chiamata PSTN inbound risponde con IVR statico (CS1) | 2026-06-05 | done (2026-06-03, PSTN inbound reale e2e su trunk test kiknet; CS1 parziale: outbound non testato) |
| master | 3 | voce-users1 in linea: hardphone SIP/TLS + softphone webapp registrati, chiamata interna OK, outbound via voce-itsp1 (CS2) | 2026-06-09 | in-progress (hardphone+softphone+interne ✅ 2026-06-01; resta outbound PSTN) |
| master | 4 | voicemail→email funzionante + contesto `[emergency]` attivo e testato con codice privato (CS3+CS4) | 2026-06-11 | in-progress (CS3 ✅ 2026-06-04 e2e live; CS4 scritto ma `include` commentato in attesa revisione AGCOM) |
| master | 5 | voce-rtc1 (Janus) + voce-conf1 (Jitsi): click-to-call anonimo e conferenza 3-way operativi | 2026-06-13 | superata da ADR-007 (meeting = LiveKit, done 2026-06-06; Janus parked, Jitsi dismesso) |
| master | 6 | `Luna::Admin::Voce` v1 su admin.luna99.it: onboarding tenant pilota end-to-end (CS5) | 2026-06-15 | in-progress (~95%; UI complete, onboarding e2e atteso con ITSP commerciale) |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| luna-voce | itsp | in-progress | gabrieleg | 2026-06-05 | luna-voce-itsp |
| luna-voce | users | in-progress | gabrieleg | 2026-06-09 | luna-voce-users |
| luna-voce | pbx | in-progress | gabrieleg | 2026-06-11 | luna-voce-pbx |
| luna-voce | conf | done | gabrieleg | 2026-06-13 | luna-voce-conf |
| luna-voce | admin | in-progress | gabrieleg | 2026-06-15 | admin |
| luna-voce | livekit | done | gabrieleg | 2026-06-27 | luna-voce-livekit |
| luna-voce | rtc | in-progress | gabrieleg | 2026-08-15 | luna-voce-rtc |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| ppro-mobile | 1 | Ottenere lista funzioni dal cliente PERIGEST | 2026-05-30 | done |
| ppro-mobile | 2 | Implementazione webapp Sopralluogo (cerca/riepilogo/edit/save) | 2026-05-30 | done |
| lifecycle-bus | 1 | P0 infra: Redis fleet dedicato (auth+AOF), client Perl, stream | 2026-06-04 | done |
| lifecycle-bus | 2 | P1 publisher in admin + P2 framework consumer/sweeper | 2026-06-05 | done |
| lifecycle-bus | 3 | P3 consumer voce (assorbe il purge sync interim + reconcile) | 2026-06-06 | done |
| lifecycle-bus | 4 | P4 consumer mail + P5 sweeper/report | 2026-06-07 | done |
| lifecycle-bus | 5 | P6 consumer file — dataset ZFS su nfs1 via stream `luna:zfs` | 2026-06-13 | done |
| ppro-mobile | 5 | API file in `Ppro::Mobile` (lista/upload via presigned URL diretti a luna-file/MinIO) — sblocca M3 | 2026-06-25 | planned |
| ppro-mobile | 3 | Implementazione Documentazione / Richiesta docs / Foto | 2026-06-30 | blocked (API ppro: vedi M5) |
| ppro-mobile | 6 | API modelli in `Ppro::Mobile` (lista + render PDF, scaricato via presigned GET) | 2026-06-30 | planned |
| ppro-mobile | 4 | Test con cliente | 2026-07-05 | planned |
| master | 1 | Milestone 1 | 2026-08-31 | planned |
| master | 2 | Milestone 2 | 2026-08-31 | planned |
| master | 3 | Milestone 3 | 2026-08-31 | planned |
| file | 1 | Browse UI HTMX + WebDAV + OCS base | - | done |
| file | 2 | Login Flow v2 + app passwords | - | done |
| file | 3 | Chunked upload v2 | - | done |
| file | 4 | Trashbin (UI + DAV) | - | done |
| file | 5 | Sharing OCS API (Fase 5a) | - | done |
| file | 6 | Public links con token | - | done |
| file | 7 | Migrazione metadati EXIF + reverse geocoding (Nominatim) | - | done |
| file | 8 | Test compat con client Nextcloud desktop + iOS + Android | 16h | 2026-06-15 |
| file | 9 | Spostare segreti (LDAP, S3, app secret) in `/etc/luna/*` | 4h | 2026-06-10 |
| file | 10 | Rimuovere `max_request_size=1 GiB` quando chunked v2 robusto | 4h | 2026-06-30 |
| file | 11 | Quota per utente (disk_stats consumato da home/profile) | 12h | 2026-06-30 |
| file | 12 | Test coverage modelli + WebDAV smoke (litmus webdav) | 16h | 2026-07-15 |
| file | 13 | Preview/thumbnail generation (oggi stub 404) | 16h | 2026-07-31 |
| file | 14 | ~~Presigned wrapper~~ → API service-account `/api/svc/ppro*` (GET/PUT/DELETE/list/move su alberi `_ppro`, streaming via app — niente presigned su NFS) | 8h | 2026-06-11 |
| file | 15 | Service account `svc-ppro` (app-password, gate `Svc#gate` da config `svc.ppro.account`) + layout `<master>/<tenant>/_ppro/<prot>/...` e `_ppro/_modelli/` | 6h | 2026-06-11 |
| file | 16 | ~~CORS MinIO~~ — senza presigned i client non parlano più con lo storage direttamente | - | - |
| file | 18 | **Layout home mail-like** (2026-06-11): chiavi `<master>/<tenant>/<uid>/{files,trash}/` da LDAP `homeDirectory` (`Model::Homes`, cache 300s/30s; helper `files_key`/`trash_key`); via i vecchi `users/<email>` e `trashbin/<email>` | - | 2026-06-11 |
| file | 19 | **Allocazione tenant-first per-subtenant** (2026-06-12): root `/mnt/nfs-file` (tolto livello-app), schema svc `<base>/_ppro/<rel>` a profondità variabile, dataset ZFS per subtenant come unità di quota — vedi note M19 | - | 2026-06-12 |
| file | 17 | **Migrazione storage backend S3/MinIO → NFS (`nfs1`)** — vedi note sotto | TBD | 2026-06-10 |
| ppro | 1 | Migrazione luna99 (auth plugin, portal layout, /opt path) | - | 2026-05-06 |
| ppro | 2 | Spostare segreti da webapp.yml a `/etc/luna/*` files | 6h | 2026-06-10 |
| ppro | 3 | Rimuovere credenziali Generali hardcoded | 3h | 2026-06-10 |
| ppro | 4 | CSRF double-submit sui POST/HTMX | 8h | 2026-06-20 |
| ppro | 5 | Re-auth + authorization per-messaggio sui WebSocket | 12h | 2026-06-30 |
| ppro | 6 | Completare migrazione WS→HTTP/HTMX (rimuovere legacy) | 24h | 2026-07-31 |
| ppro | 7 | Spezzare i controller fat (Config/Nextcloud/Mail/Pratica) | 20h | 2026-07-31 |
| ppro | 8 | Baseline test `prove -lr t/` (smoke + auth + pratica CRUD) | 16h | 2026-06-30 |
| ppro | 9 | Spegnere `log->level('debug')` + ripristinare template cache | 1h | 2026-06-10 |
| ppro | 10 | Sostituire password LDAP in sessione con token IMAP/Nextcloud delegato | 16h | TBD |
| ppro | 11 | `webapp::Service::FileClient` — client API `/api/svc/ppro*` di luna-file (Basic `svc-ppro`): `get/put/delete/list/move/exists` in streaming (niente presigned su NFS — rivisto 2026-06-11) | 10h | 2026-06-11 |
| ppro | 12 | Refactor `Ppro::File` su `FileClient`: dismesso disk storage (`_abs_file`, `files/`), tutto su `cloud88/perigest/_ppro/<prot>/...` su NFS via luna-file (rotte+JSON invariati; thumb PDF su temp; mkdir=`.keep`) | 20h | 2026-06-11 |
| ppro | 13 | `Ppro::Modelli` su luna-file (`cloud88/perigest/_ppro/_modelli/`): render/compile/pdf_fields leggono i template via `FileClient`, compilati salvati in `<prot>/modelli/`; AcroForm fill CAM::PDF in-memory; gestione template (upload/download/delete) per gestori config | 12h | 2026-06-11 |
| ppro | 14 | Deprecazione `Ppro::Nextcloud` (~893 LOC) + `Service::NextcloudClient` (~768 LOC): rimossi quando M11-M13 done | 4h | 2026-06-30 |
| contab | 1 | Migrazione anagrafica → abook (Fasi 1→5) | 40h | 2026-05-21 |
| contab | 2 | QbImporter/QbSyncImporter via Anagrafica model | 8h | 2026-06-15 |
| contab | 3 | Cleanup `anagrafica_ext` (valutare drop cache) | 6h | 2026-06-15 |
| contab | 4 | Test coverage modelli `Fattura`/`Iva`/`Sollecito` | 12h | 2026-06-30 |
| contab | 5 | Provider bancari aggiuntivi (oltre Wise/Revolut) | 8h | 2026-06-30 |
| contab | 6 | Audit log `contab_audit` (azioni irreversibili: invio SDI, sollecito, riconciliazione, modifica fattura post-emissione) | 6h | 2026-06-30 |
| contab | 7 | Export dati per F24 (estrazione liquidazione IVA periodica accessibile a commercialista, admin e operatore — no compilazione modello) | 3h | 2026-06-30 |
| contab | 8 | Banca Sella: import movimenti via CSV | 8h | 2026-06-30 |
| contab | 9 | Revolut: import movimenti via CSV (stile Sella, in alternativa all'OAuth proxy oggi non configurato in UI) | 4h | 2026-06-30 |
| contab | 10 | API REST `/api/contab01/*` — fatture di vendita + anagrafica clienti (pattern `Quick01_contab`, primo `Quick01_*` luna99-wide) | 10h | 2026-07-15 |
| contab | 11 | Allegati PDF su fatture vendita/acquisto: upload, storage su filesystem, UUID in DB (`fatture_allegati`) | 6h | 2026-07-15 |
| contab | 12 | **Note di Credito (TD04)** attive/passive: emissione collegata a fattura origine, prima nota inversa, segno negativo in registri IVA + riconciliazione | 8h | 2026-06-20 |
| contab | 13 | **Preventivi/offerte**: tabella `preventivi`/`righe_preventivo`, CRUD, conversione → fattura di vendita | 10h | 2026-06-30 |
| contab | 14 | **Divisioni di fatturazione per business**: ogni business (1 P.IVA) ha più divisioni/marchi con template documento (logo/intestazione/footer/colore) + centro di ricavo; il documento porta `divisione_id` e il PDF usa il marchio della divisione (soggetto emittente legale = business) | 10h | 2026-06-30 |
| contab | 15 | **Report personalizzati**: lista autofatture + estrazione filtrabile/export CSV configurabile | 4h | 2026-06-30 |
| contab | 16 | **PEC SdI live** (out + ricezione ricevute via IMAP): da stub a invio reale, polling ricevute, aggiornamento stato | 12h | 2026-07-15 |
| abook | 1 | Migrazione 001: fiscal fields + contact_addresses + business books | 12h | 2026-05-21 |
| abook | 2 | API bearer-token `/api/v1/abook/*` (contacts + addresses) | 16h | 2026-05-21 |
| abook | 3 | Validazione P.IVA Luhn + CF in `Abook::Model::Contact` | 4h | 2026-05-21 |
| abook | 4 | Documentare routes API in `/srv/ia-rules/projects/contab/abook-anagrafica-migration.md` | 2h | 2026-05-21 |
| abook | 5 | UI dedicata per rubriche business_* (vista clienti/fornitori) | 12h | 2026-06-15 |
| abook | 6 | Sharing con permission `write` (oggi solo `read`) | 6h | 2026-06-30 |
| abook | 7 | Import CSV/Excel per rubriche business | 8h | 2026-06-30 |
| abook | 8 | Export vCard / CSV | 4h | 2026-06-30 |
| abook | 9 | Test coverage modelli (Contact/Addressbook/ContactAddress) | 12h | 2026-06-30 |
| abook | 10 | Rate-limit + audit log per API bearer | 6h | 2026-07-15 |
| sync | 1 | Baseline EAS 14.1 + Autodiscover XML + mobileconfig iOS | - | done |
| sync | 2 | Backend CalDAV/CardDAV/IMAP + comandi core | - | done |
| sync | 3 | WBXML encoder/decoder con dictionary completo | - | done |
| sync | 4 | Spostare segreti (app.secret, LDAP bind) in `/etc/luna/*` | 4h | 2026-06-10 |
| sync | 5 | Disabilitare `log->level('debug')` in produzione | 1h | 2026-06-10 |
| sync | 6 | Test compatibilità: iOS Mail, Outlook mobile, Android Mail | 12h | 2026-06-30 |
| sync | 7 | Litmus-style smoke test su comandi EAS critici | 16h | 2026-07-15 |
| sync | 8 | Metriche per device/comando (ping count, sync latency) | 8h | 2026-07-31 |
| sync | 9 | Documentare procedura setup iOS via mobileconfig | 4h | 2026-06-30 |
| sync | 10 | Valutare Modern Auth (OAuth2) per iOS senza profile | TBD | TBD |
| calendar | 1 | Setup baseline (schema, modelli, CalDAV minimo, web UI) | - | done |
| calendar | 2 | Sharing calendari (read) | - | done |
| calendar | 3 | Agent API per consumer AI | - | done |
| calendar | 4 | Sharing con permission `write` (oggi solo `read`) | 6h | 2026-06-30 |
| calendar | 5 | iMIP: invio inviti via SMTP + parsing risposte | 24h | 2026-07-31 |
| calendar | 6 | Time zone handling completo (VTIMEZONE → DB timezone) | 8h | 2026-06-30 |
| calendar | 7 | Ricorrenze (RRULE) — parsing + espansione in vista | 16h | 2026-07-15 |
| calendar | 8 | Test coverage modelli + CalDAV (Litmus / litmus-caldav) | 16h | 2026-07-31 |
| calendar | 9 | Rate-limit / scoping agent API (oggi pubblica) | 6h | 2026-07-15 |
| calendar | 10 | Documentazione client setup (Apple, Thunderbird, DAVx5) | 4h | 2026-06-30 |
| uadmin | 1 | **Aggiungere codebase al bundle** (`projects.yaml`) | 1h | 2026-06-01 |
| uadmin | 2 | Riscrivere questa SPEC.md sulla base del codice reale | 4h | 2026-06-01 |
| uadmin | 3 | Tenant/business UI (lista + CRUD via contab API) | TBD | 2026-06-30 |
| uadmin | 4 | User UI (lista + CRUD via contab API + LDAP write) | TBD | 2026-06-30 |
| uadmin | 5 | Toggle webapp per tenant (`lunaXxxJail`) | TBD | 2026-07-15 |
| uadmin | 6 | Audit log azioni admin | TBD | 2026-07-15 |
| uadmin | 7 | Test coverage | TBD | 2026-07-31 |
| admin | 1 | **Aggiungere codebase al bundle** (`projects.yaml`) o | ||
| admin | 2 | Riscrivere questa SPEC sulla base del codice reale o di | ||
| admin | 3 | Fleet status (proxy a Prometheus + Grafana) | TBD | TBD |
| admin | 4 | Reseller CRUD | TBD | TBD |
| admin | 5 | Revocation panel (consumer auth API) | TBD | TBD |
| admin | 6 | Audit globale aggregato | TBD | TBD |
| admin | 7 | Rotazione segreti workflow | TBD | TBD |
| auth | 1 | Baseline (login form, sessioni Pg, token HMAC, plugin) | - | done |
| auth | 2 | Directory API + revocations API | - | done |
| auth | 3 | uidNumber per SSSD (migration 002) | - | done |
| auth | 4 | Spostare segreti (`app.secret`, LDAP bind) in `/etc/luna/*` | 4h | 2026-06-10 |
| auth | 5 | StartTLS verso LDAP (oggi `start_tls=0`) | 6h | 2026-06-30 |
| auth | 6 | API key rotation + multiple keys per consumer | 8h | 2026-06-30 |
| auth | 7 | Cambio password self-service (LDAP modify) | 16h | 2026-07-15 |
| auth | 8 | TOTP / MFA opzionale (per ruoli sensibili) | 24h | 2026-07-31 |
| auth | 9 | Audit log eventi login/logout/revoke | 8h | 2026-06-30 |
| auth | 10 | Test coverage Model::Session + Token sign/verify | 12h | 2026-06-30 |
| auth | 11 | Hardening rate limiter (oggi in-memory, no distribuito) | 6h | 2026-07-15 |
| wiki | 1 | Schema DB + pgvector + indici | - | done |
| wiki | 2 | Config + auth plugin + bootstrap Mojolicious | - | done |
| wiki | 3 | CRUD pagine + categorie + revisioni (Web UI HTMX) | 24h | 2026-06-30 |
| wiki | 4 | Render markdown server-side + sanitizzazione | 8h | 2026-06-30 |
| wiki | 5 | Embedding worker (background job su insert/update) | 12h | 2026-07-15 |
| wiki | 6 | RAG query endpoint (`/api/rag`) con top-K + cite | 16h | 2026-07-31 |
| wiki | 7 | Full-text search UI (GIN tsvector) | 8h | 2026-07-15 |
| wiki | 8 | Spazi wiki (namespace per area: architecture/runbooks/…) | 8h | 2026-07-31 |
| wiki | 9 | Import iniziale da `/srv/ia-rules/projects/**/*.md` | 6h | 2026-08-15 |
| wiki | 10 | Permalink stabili + supporto link `[[slug]]` cross-page | 6h | 2026-07-31 |
| wiki | 11 | Test coverage modelli + RAG smoke | 12h | 2026-08-15 |
| home | 1 | Portale + tile + favorites + profile | - | done |
| home | 2 | Frontend assets condivisi (Alpine/htmx/Bootstrap) | - | done |
| home | 3 | Tile dinamiche da `lunaXxxJail` + `lunaServices` | - | done |
| home | 4 | Spostare segreti (`app.secret`, LDAP binds) in `/etc/luna/*` | 4h | 2026-06-10 |
| home | 5 | Connection pool LDAP (oggi bind per request) | 8h | 2026-06-30 |
| home | 6 | Cache tile per (uid,tenant) con invalidazione su favorite | 6h | 2026-06-30 |
| home | 7 | Disk stats reali via API `file` | 8h | 2026-06-30 |
| home | 8 | Cambio password via auth API (oggi placeholder?) | 8h | 2026-07-15 |
| home | 9 | Dark mode + persistenza tema utente in LDAP | 8h | 2026-07-31 |
| home | 10 | Test coverage helpers + tenant_apps | 8h | 2026-06-30 |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| luna99 | file | in-progress | gabrieleg | 2026-05-30 | luna-file |
| luna99 | ppro-mobile | in-progress | claudiac | 2026-05-30 | ppro-mobile |
| luna99 | lifecycle-bus | in-progress | gabrieleg | 2026-06-07 | admin + new Luna::Lifecycle lib |
| luna99 | test-machine | done | gabrieleg | 2026-06-07 | new luna-test harness (Perl) + test VM |
| luna99 | contab | in-progress | claudiac | 2026-06-15 | contab |
| luna99 | abook | in-progress | gabrieleg | 2026-06-15 | abook |
| luna99 | sync | in-progress | gabrieleg | 2026-06-15 | sync |
| luna99 | calendar | in-progress | gabrieleg | 2026-06-15 | calendar |
| luna99 | uadmin | planned | gabrieleg | 2026-06-15 | uadmin |
| luna99 | admin | planned | gabrieleg | 2026-06-15 | admin |
| luna99 | ppro | in-progress | claudiac | 2026-06-30 | ppro |
| luna99 | auth | in-progress | gabrieleg | 2026-06-30 | auth |
| luna99 | wiki | planned | gabrieleg | 2026-06-30 | wiki |
| luna99 | home | in-progress | gabrieleg | 2026-06-30 | home |
| luna99 | fixed-tenancy | done | gabrieleg | 2026-06-30 | admin |
| luna99 | password-manager | planned | gabrieleg | 2026-07-30 | TBD |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Milestone 1 | 2026-08-31 | planned |
| master | 2 | Milestone 2 | 2026-08-31 | planned |
| master | 3 | Milestone 3 | 2026-08-31 | planned |
| backoffice | 1 | Setup server + bundle onboarding | — | 2026-05-25 |
| backoffice | 2 | Codebase versionato su gitea (`mccarty/backoffice`) | 2h | 2026-05-29 |
| backoffice | 3 | Reverse proxy + URL pubblico stabile | 4h | TBD |
| backoffice | 4 | Iterazione UI/CRUD su feedback claudiac (4a–4f) | — | 2026-08-31 |
| backoffice | 4a | Backoffice multilingua IT/EN/ES (schema testi + UI tab nei form) | 6h | 2026-06-12 |
| backoffice | 4b | Scheda prodotto: drop zone certificati + anteprima inline | 5h | 2026-06-19 |
| backoffice | 4c | Gestione loghi (upload + flag max 3 visualizzati + ordinamento) | 4h | 2026-06-26 |
| backoffice | 4d | Flag visibilità garanzie Sì/No + flag firma aderente assicurato | 3h | 2026-06-26 |
| backoffice | 4e | Upload documentazione obbligatoria nella scheda prodotto | 3h | 2026-07-03 |
| backoffice | 4f | Tool caricamento policy con ambiente di staging + promozione in prod | 8h | 2026-07-24 |
| backoffice | 5 | Iterazione UI/CRUD post-meeting 2026-05-27 (5a–5g) | — | 2026-08-15 |
| backoffice | 5a | Campo QR code URL su scheda prodotto | 1h | 2026-05-31 |
| backoffice | 5b | Campo codice prodotto clikki (2 lettere) + retrofit storico | 1h | 2026-05-31 |
| backoffice | 5c | Libreria loghi compagnia (`comp_loghi`) | 8h | 2026-06-19 |
| backoffice | 5d | Prodotto multi-compagnia (pivot `comp_prodotti_compagnie`) | 3h | 2026-06-26 |
| backoffice | 5e | Vista log certificati generati (legge `comp_certificati_log`) | 2h | 2026-07-10 |
| backoffice | 5f | Vista log email + template email testuali multilingua | 2h | 2026-07-17 |
| backoffice | 5g | Flag documentazione obbligatoria con data dinamica QForm | 2h | 2026-07-24 |
| backoffice | 5h | Campo titolo PDF (`prod_titolo_pdf`, solo IT) → metadato `/Title` | 1h | 2026-06-13 |
| backoffice | 5i | Template certificato editabili via web (DB+placeholder, WYSIWYG+sanitizer, cliente IT/EN/ES + compagnia IT) | 14h | 2026-07-31 |
| backoffice | 6 | Hardening (rotazione password admin, secrets fuori da `backend.yml`) | 4h | TBD |
| api | 1 | Skeleton webapp + unit + onboarding bundle | — | 2026-05-25 |
| api | 2 | Endpoint `POST /certificato/master` + WeasyPrint demone + storage UUID | 8h | 2026-06-12 |
| api | 3 | Layout dinamico 2 colonne + importi garanzia + hash + QR code | 4h | 2026-06-19 |
| api | 4 | Endpoint `POST /certificato/compagnia` (multi-compagnia + template per compagnia) | 4h | 2026-06-26 |
| api | 5 | Nomenclatura file standardizzata (`YYYYMMDD_num_cod2_Nome.pdf`) | 1h | 2026-06-26 |
| api | 6 | Persistenza `comp_certificati_log` (storico richieste + payload) | 2h | 2026-07-03 |
| api | 7 | Endpoint `POST /documentazione` con QForm date dinamica | 5h | 2026-07-17 |
| api | 8 | Endpoint `POST /email` + SMTP register + `comp_email_log` | 3h | 2026-07-24 |
| api | 9 | Gestione gruppi >40 passeggeri (layout su 2 fogli) | 3h | 2026-07-31 |
| api | 10 | Certificati specifici per compagnia (medico-bagaglio, annullamento) | 4h | 2026-08-14 |
| api | 11 | Hardening (rate limit `/file/<uuid>`, secrets fuori da yml) | 3h | 2026-08-21 |
| api | 12 | Metadato `/Title` PDF da `prod_titolo_pdf` (M5h backoffice) | 1h | 2026-06-13 |
| api | 13 | Render template **DB-backed** (corpo da `comp_cert_template`, telaio `.ep` in repo) + ri-sanitize | 4h | 2026-07-31 |
| api | 14 | Data emissione **congelata su ristampa** (lookup `comp_certificati_log`) | 1h | 2026-06-20 |
| api | 15 | Storage: sync NAS ~10min + purge locale + layout per agenzia/annualità | 6h | 2026-08-21 |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| mccarty | backoffice | in-progress | claudiac | 2026-08-31 | backoffice |
| mccarty | api | in-progress | gabrieleg | 2026-08-31 | api |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | HAOS onboardato nel bundle workflow | 2026-06-30 | done (2026-05-25) |
| master | 2 | Prima automazione/integration in prod | 2026-09-30 | planned |
| master | 3 | Estensione ad altre appliance | 2026-12-31 | planned |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| office | pc-security | in-progress | gabrieleg | 2026-06-15 | nixos-config (per-PC, fuori da luna99 bundles) |
| office | gestione-progetti | in-progress | gabrieleg | 2026-07-30 | /srv/luna99-projects + /usr/local/bin/luna-daily-report |
| office | automation | in-progress | stefanol | 2026-09-30 | office/automation |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Milestone 1 | 2026-05-30 | planned |
| master | 2 | Milestone 2 | 2026-05-30 | planned |
| master | 3 | Milestone 3 | 2026-05-30 | planned |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| small-user | luccaunited | in-progress | claudiac | 2026-05-30 | luccaunited |
| Scope | # | Milestone | Target | Stato |
|---|---|---|---|---|
| master | 1 | Milestone 1 | 2026-08-31 | planned |
| master | 2 | Milestone 2 | 2026-08-31 | planned |
| master | 3 | Milestone 3 | 2026-08-31 | planned |
| frontend | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| frontend | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| frontend | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| backend | 1 | Milestone 1 | 4h | YYYY-MM-DD |
| backend | 2 | Milestone 2 | 8h | YYYY-MM-DD |
| backend | 3 | Milestone 3 | 12h | YYYY-MM-DD |
| Master | Subproject | Status | Assignee | Target | Codebase |
|---|---|---|---|---|---|
| undesktop | frontend | planned | claudiac | 2026-06-30 | undesktop-frontend |
| undesktop | backend | planned | claudiac | 2026-06-30 | undesktop-backend |