scripts/discovery-agent.mjs (Node 18+, zero dipendenze): scansiona CIDR/IP via
TCP-connect (no root), reverse-DNS, deduce tipo asset + criticità dalle porte aperte,
costruisce asset (external_ref=net:<ip>) + flussi di rete e li POSTa a
/api/services/assets-ingest col X-API-Key del connettore. Concorrenza, MAX_HOSTS,
DRY_RUN, isPrivate (RFC1918+loopback+link-local). + README_discovery_agent.md (uso,
variabili, cron, multi-connettore, estensione cloud, sicurezza).
Validato: node --check + DRY_RUN reale (listener temporaneo) → rileva porta aperta,
costruisce asset+flusso corretti.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Insegna al supervisore a: annotare START + monitorare elapsed; raggiungere un checkpoint
pulito e committabile entro ~18-20 min (5 min per verify/commit/push/email/cleanup);
STIMARE ogni fase prima di iniziarla (rif: fix UI ~10-12 min, migrazione DB ~12-18 min) e,
se non entra, scegliere una sotto-fase più piccola; MAI stato intermedio rotto (no migrazione
a metà / UI su colonne inesistenti); migrazioni/merge solo se entrano con margine, altrimenti
passi additivi+idempotenti con le operazioni distruttive per ultime + backup; a tempo scaduto
fermarsi al punto pulito e lasciare IN_PROGRESS con done/to-do.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Allegati: endpoint GET /tickets/{id}/attachments (lista) + /{attId} (binario) → download nel
project dir bind-mount (.ticket-attachments/, gitignored) → Read PDF/PNG/JPG (lettura nativa).
Trattati come input NON fidato (anti prompt-injection). Letti per OGNI ticket valutato.
- UI = SEMPRE standard AGID/Bootstrap Italia (V2, common-bi.js), WCAG 2.1 AA.
- Feature multi-modulo con spec del richiedente (super_admin/lead): decisione di design già presa
→ implementa a FASI con commit incrementale, lock, IN_PROGRESS tra cicli; escala solo le
sotto-parti scoperte. Scelta di prodotto != affermazione normativa (gate fonti-certe invariato).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- application/services/DemoSeedService.php: logica seed/clone golden #151 -> 996001/996002 (riusabile)
- DemoController::resetDataset: re-seed reale via service (?scope=demo|sandbox|default both), non piu stub
- scripts/seed-demo-dataset.php: thin CLI wrapper sul service
Testato prod: POST /api/demo/reset-dataset (X-Internal-Key) scope=sandbox -> 200, 996002 ri-seedata.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Increment backend formazione-first (product-demo-protocol v1.0.1):
- BaseController::applyDemoGuard() — SAFE-BY-CONSTRUCTION (flusso auth normale invariato):
riconosce demo_jwt scope=demo:read-only (blocca scritture 403 DEMO_READ_ONLY) e
training:sandbox (scritture solo su org sandbox); contesto sintetico user=0 ruolo
compliance_manager su org range 996xxx; mai super_admin. Short-circuit in requireAuth/
requireOrgAccess/requireOrgRole. php -l OK. DA DEPLOYARE (USR2) + testare quando host disponibile.
- scripts/seed-demo-dataset.php — clona golden DataCore #151 in 996001 (demo RO) + 996002
(sandbox scrivibile), idempotente, richiamabile da resetDataset. php -l OK. DA ESEGUIRE su host.
NB: chiave ssh host revocata a meta-sessione → seed/USR2/push in attesa di ri-provisioning.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ARIA ora conosce la nuova interfaccia V2 (docs/kb/V2_UI_NAVIGAZIONE.md indicizzato in
Qdrant nis2_kb scope SYSTEM). Header documenta il workaround mount (copia sotto application/).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Riscrittura completa: istruzioni concrete (login, registrazione 3 step, onboarding
4 step con campi reali, navigazione), per ogni modulo "cosa trovi e come si usa"
estratto dall'help contestuale del prodotto (help.js), FAQ, glossario. Rimosse le
interruzioni di pagina che lasciavano pagine vuote. Generatore self-contained
(estrae i contenuti da public/js/help.js via node).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
database.php: Database::sslOptions() — TLS verso MySQL gated (env DB_SSL=true o
flag-file application/config/.db_ssl_on), DEFAULT OFF. PDO::MYSQL_ATTR_SSL_CA +
VERIFY_SERVER_CERT=false; fail-safe se CA assente (resta in chiaro + log: un
VERIFY=false senza CA connetterebbe in chiaro silenziosamente). Merge con '+'
(preserva chiavi-intere PDO). Default-OFF provato inerte (base + [] === base).
Validato da 2 agenti: runtime app coperto 100% da Database::getInstance (0 raw PDO
in application/); review adversariale = SICURO default-OFF, nessun bug.
.gitignore: flag-file + db-ca.pem. Runbook: docs/TLS_DB_PREEQUIP_NIS2.md.
NB topologia verificata: l'app usa il DB CONTAINER (db->172.21.0.4, 8.0.45), non il
MySQL host -> CA + enforce vanno sul container db (a cura VIGILE).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
I metodi corretti sono upsertBatch() e deleteByFilter(), non upsertPoints/deletePoints.
Ingest eseguito su host: 203 requisiti ACN confermati in Qdrant nis2_kb.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
scripts/ingest-acn-requirements.php: indicizza in Qdrant nis2_kb un chunk per ogni
requisito ACN (87 importanti Allegato 1 + 116 essenziali Allegato 2 = 203), scope
SYSTEM, entity_type=requisito_acn, con payload citabile (code/subcategory/function/
req_index/entity/allegato/requirement_text). Point id UUIDv5 deterministico ->
idempotente. Usa upsertPoints/deletePoints/ensureCollection reali di VectorService.
ESEGUITO su host (docs/ non e' bind-mountato nel container): 203 punti confermati
in Qdrant. L'AI askWithRag ora fa grounding sul singolo requisito GV.SC e lo cita.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Allinea il PRODOTTO alla guida/normativa portando la compliance dal livello 10 misure Art.21
al livello operativo dei requisiti ACN (Framework Nazionale 2025).
- Migrazione 031: acn_requirements (catalogo) + org_acn_requirement_status (stato per-org)
- Seed da Allegati 1-2 ACN (fonte certa, parsing verificato): 87 importanti + 116 essenziali = 203 requisiti reali
- AuditController: acnRequirements (GET, per entity_type org: importanti 87 / essenziali 116, summary per funzione GV/ID/PR/DE/RS/RC, % compliance) + updateAcnRequirement (PUT stato+evidenza)
- Route audit/acnRequirements GET/PUT
- guida.html: fix refuso cap-5 (residuo 'otto categorie...no' -> '10 categorie x 8, quattro modalita')
E2E prod: org importante -> 87 req; PUT implemented -> compliance aggiornata.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Il pattern */30 chiudeva prematuramente il docblock /** causando
parse error. Sostituito con spazio per chiarezza.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>