High-impact reliability:
- SQLite job persistence (rv50x.db) — job history and AT sessions survive restarts
- Extract _login_and_open_modal() — eliminates ~40 lines of duplicated Playwright login logic
- Separate NocoDB view IDs per group via NOCODB_VIEW_ID_ELECTRIC / NOCODB_VIEW_ID_GW env vars
- Excel cache TTL (1h) + size cap (20 files) with eviction helpers
- In-memory job store pruning (MAX_JOBS_MEMORY, default 200)
Functionality:
- TCP reachability pre-check before launching Playwright — fails fast on unreachable devices
- AT command presets — save/load/delete named command sequences, stored in at_presets.json
Ops:
- Bind-mount rv50x.db and at_presets.json in docker-compose so data survives rebuilds
- Add NOCODB_VIEW_ID_ELECTRIC, NOCODB_VIEW_ID_GW, REACH_TIMEOUT env vars to compose
- Ignore runtime files (rv50x.db, at_presets.json, template dirs) in .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>