Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260905-0603-ramdisk-drain-polling-e2e-isolation

rdmsm4x-changelog-20260905-0603-ramdisk-drain-polling-e2e-isolation

Added descriptor drain polling to production CLI/Engine, non-blocking lock inspection, guaranteed E2E test teardown, and master runner signal traps in macOS-ramDisk-app to permanently eliminate unmount flakiness and cross-tier volume cascades.

Summary

Touched Files

  1. Sources/ramdisk/main.swift: Added 2.0s descriptor drain polling loop prior to safe refusal exit(1); preserved verbatim invariant if !force && !engine.canReleaseWorkspace {.
  2. Sources/RAMDiskCore/RAMDiskEngine.swift: Added drainTimeout: TimeInterval = 2.0 parameter and drain polling loop to releaseWorkspaceCleanly(); preserved verbatim invariant guard canReleaseWorkspace else { and !activeLocks.contains(where: { $0.lockType == .exclusive }).
  3. Sources/RAMDiskCore/ProcessLockInspector.swift: Added -n and -P flags to lsof process invocation to prevent DNS and port resolution hangs during descriptor inspection.
  4. Tests/E2ETests/e2e_framework.py: Modernized run_cli_json to parse JSON regardless of exit code (preserving error diagnostics) and added unmount_volume (with retries and drain polling) and ensure_unmounted() lifecycle helpers.
  5. Tests/E2ETests/test_tier4_real_world_scenarios.py: Modernized unmount calls to use unmount_volume, explicitly asserted safe refusal in T4.2 while active compilation lock is held, and wrapped all scenarios and suite in try ... finally: ensure_unmounted().
  6. Tests/E2ETests/test_tier5_adversarial_challenge.py: Added pre-flight cleanup and increased T5.5.2 list schema validation timeout from 10.0s to 15.0s.
  7. Tests/E2ETests/run_e2e_tests.sh: Added cleanup_ramdisks() function (clearing numbered volumes and ram:// devices), signal traps on EXIT INT TERM, and per-tier isolation cleanup.

Verification Evidence