6977d21fa7
Extends the NS-656 memory-pressure surface to cover disk exhaustion (OOF-2 / OOF-107 lineage: agents fill their data volume — SQLite writes fail, sessions stop persisting — while every dashboard looks healthy). - gateway/disk_status.py (new): collect_disk_status() samples shutil.disk_usage(HERMES_HOME) and classifies pressure (critical: <256 MB free or >=95% used; elevated: <512 MB free). Never raises — degrades to pressure="unknown" with null telemetry, same contract as collect_memory_status(). - /api/status: sibling `disk` block next to `memory`, advisory only — not folded into component/overall health. - web: DiskPressureStatus type; MemoryPressureBanner generalized to a resource banner with worst-first triggers (disk critical > memory critical > OOM restart > disk elevated > memory elevated) and cascading dismissals — hiding the top trigger surfaces the next one instead of silencing everything. All dismissals stay boot_id-scoped. - i18n: diskCriticalBanner / diskElevatedBanner (en, optional fields with English fallback per existing pattern). Tests: gateway/test_disk_status.py (14), web_server disk-block presence/degradation, banner disk trigger/priority/dismissal-cascade suite (21 total).