ecf63ad3f3
Runtime desktop plugins read their source through hermes:readFileText, the preview IPC that silently truncates at TEXT_PREVIEW_MAX_BYTES (512 KiB) — a larger plugin.js evaluated as a partial file (cryptic syntax error, or worse, a half-module that parses). - electron/main.ts: dedicated hermes:readPluginSource handler — full read, 16 MiB cap enforced as a hard EFBIG via resolveReadableFileForIpc (same path hardening + sensitive-file blocking), never truncation. - preload.ts / global.d.ts: bridge + types (optional — older shells). - runtime-loader.ts: loadDiskPlugin reads via readPluginSource; on older shells falls back to readFileText but FAILS LOUDLY on truncated:true (error toast + error inventory row) instead of evaluating a partial file. Existence probe keeps the preview read (metadata is enough). - tests: full-read path, loud old-shell truncation failure (sabotage- verified), small-plugin fallback.