Descrizione
Nodo di lettura file enterprise dal filesystem persistente del container tenant FlowForge — controparte inversa di action_file_write, condivide le stesse guardrail di sicurezza zero-trust. Legge il contenuto di un file all'interno della cartella sandbox del tenant (/data per il container Docker corrispondente), con allowlist enforcement server-side: no escape ../, no symlink resolution (link simbolici a file fuori sandbox rifiutati prima del read), no accesso a directory di sistema /etc /proc /sys, ownership check sul UID del processo runtime, cap di sicurezza su dimensione file leggibile (default 100MB per evitare OOM su read di file giganti via expression maligna). Encoding multi-formato configurabili in base al tipo di payload contenuto: utf8 (default, per testo/JSON/CSV/XML/YAML che sono il 90% degli use case workflow business), utf16le (per file Windows legacy con BOM FF FE generati da Notepad o sistemi mainframe), base64 (per binari PDF/JPG/PNG/MP3 da passare a action_send_email come attachment senza necessità di file system intermedio, o per ingest in db come TEXT field), hex (per debug binari low-level di file corruption — visualizza i raw bytes), binary (raw buffer pass-through per binary processing downstream tipo action_ffmpeg). Output: { content (string nel formato encoding richiesto), sizeBytes (per quota tracking + analytics), mtime (ISO 8601 per detection di file aggiornato vs cached version), path (absolute resolved), sha256? (hash crittografico opzionale per integrity check su backup/restore workflow), mimeType? (rilevato automaticamente da magic bytes per file binari), lineCount? (per file testuali, conteggio newline per quick stats) }. Error semantics esplicito: path fuori sandbox → SANDBOX_VIOLATION 403 con audit log + reason; file non esistente → ENOENT 404 (use case workflow tipico: trigger_file_watch firma su file in fase di upload progressivo SFTP → action_file_read fallisce con ENOENT → retry con logic_delay 5s gestisce gracefully); file > cap dimensione → FILE_TOO_LARGE 413. Use case: caricare file di configurazione statici (config.json, mappe lookup, blocklist) per uso lungo l'intero workflow batch; leggere CSV uploaded dal cliente via SFTP nella cartella drop/ + parsing tramite logic_convert per ingest in db_query bulk insert; lettura di template documenti markdown pre-creati dal customer (es. "template_offerta_v3.md") per generation downstream tramite action_pdf_generate con expression substitution dei placeholder cliente-specifici; ingest di file droppati da action_file_write upstream nello stesso workflow (pattern pipeline ETL: write JSON intermedio → process → read finale); re-read in successive run tramite trigger_cron del file di state cross-run (alternativa al memory_note per state JSON > 1MB).
