Skip to content

emrg: remove emrgd.pid entirely — fixed-port probe + cmdline scan for daemon liveness/kill (rant 2026-08-21T16:45:06) - #920

Merged
argszero merged 1 commit into
masterfrom
feature/remove-emrgd-pid-file
Aug 21, 2026
Merged

emrg: remove emrgd.pid entirely — fixed-port probe + cmdline scan for daemon liveness/kill (rant 2026-08-21T16:45:06)#920
argszero merged 1 commit into
masterfrom
feature/remove-emrgd-pid-file

Conversation

@argszero

Copy link
Copy Markdown
Owner

Problem (rant 2026-08-21T16:45:06)

emrgd.pid no longer serves any purpose after #918 switched the GUI liveness check to a fixed-port TCP probe — the fixed port 56031 is the daemon's only ground truth (rant 2026-08-19T08:05:21; connect.py is_server_running_sync is already a TCP probe). The pid file was itself the root cause of repeated misjudgments/mis-deletions (#918 fixed the GUI side, but the file was still written/read in daemon.py / _stop_all.py).

Changes

  1. emrg/server/daemon.py — deleted the startup emrgd.pid write (was "diagnostics only") and the shutdown self-delete step; _shutdown_all() dropped its pid_file parameter.
  2. emrg/_stop_all.py:
    • deleted _read_pid_file()
    • stop_daemon(): ws shutdown → wait on fixed-port TCP probe (_port_is_open) → cmdline-scan kill fallback (_daemon_scan_pids, matches -m emrg.server) → token cleanup once the port is confirmed closed
    • added _port_is_open() (mirrors connect.py is_server_running_sync, pure stdlib for the standalone installer) and _daemon_scan_pids() (POSIX ps-scan filtered by new _EMRG_SERVER_RE; Windows reuses the CIM scan with server_only=True)
    • _scan_windows_python_emrg() gained a server_only param (filter -m emrg\.server vs -m emrg)
    • verify() daemon residual is now the port probe (previously _read_pid_file + _pid_alive)
    • module header docstring updated
  3. emrg/gui/daemon_client.js — comment cleanup only (already port-probe since emrg: GUI daemon liveness — fixed-port TCP probe, never delete healthy daemon's token (rant 2026-08-21T15:26:42) #918).
  4. Grep confirmed no other emrgd.pid readers/writers in scheduler.py / __main__.py / connect.py.

Tests

  • tests/test_daemon.py: pid-file assertions removed/negated (no pid file may be written); _shutdown_all() calls updated to the no-arg signature
  • tests/test_stop_all.py: TestPidFileTestPortIsOpen (3) + TestDaemonScanPids (4, incl. POSIX daemon-only filter + Windows server_only delegation); verify tests patch _port_is_open instead of _read_pid_file
  • tests/test_installer_stop.py: wiring assertions now check _port_is_open / _daemon_scan_pids / _EMRG_SERVER_RE
  • Python test count 995 → 1001 (net +6); Agent.md doc-count guard synced; GUI 257 unchanged

Verification

emrg stop now handles alive / half-dead / missing-pid scenarios via port probe + cmdline scan; full suite green (pytest 1000 passed + 1 skipped, GUI 249 + 8); no emrgd.pid reads/writes remain anywhere in emrg/.

… as the only daemon liveness/kill path (rant 2026-08-21T16:45:06)

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 1214. emrgd.pid fully removed: daemon.py no longer writes/cleans it; _stop_all.py uses fixed-port TCP probe (_port_is_open) for liveness + cmdline scan (_daemon_scan_pids, -m emrg.server) for the kill fallback; verify() residual is port-based. Positive/negative states covered (port open/closed, POSIX daemon-only filter, Windows server_only delegation). Full suite green locally (pytest 1000+1, GUI 249+8), CI test + test-windows PASS.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle

2nd review (head 980c8e6, MERGEABLE/CLEAN, CI test + test-windows PASS):

  • Fresh local verification on this branch: pytest 1000 passed + 1 skipped (1001 collected, matches Agent.md sync), GUI npm test 257 (249 pass / 0 fail / 8 skipped), import + CLI OK.
  • emrgd.pid fully removed: daemon.py no longer writes/cleans it; _shutdown_all() dropped the pid_file param; grep confirms zero emrgd.pid readers/writers in emrg/ (only comments).
  • _port_is_open() mirrors connect.py is_server_running_sync (stdlib socket, standalone-safe); _daemon_scan_pids() scans '-m emrg.server' cmdlines (POSIX ps + Windows CIM server_only) for the kill fallback; verify() daemon residual is now the port probe.
  • Tests: TestPidFile → TestPortIsOpen (3) + TestDaemonScanPids (4, incl. POSIX daemon-only filter + Windows server_only delegation); installer wiring asserts the new symbols.
  • Completes the #918 direction: fixed port is the sole ground truth for daemon liveness.

2/3.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 1215. Independent re-review on head 980c8e6 (MERGEABLE, CI test + test-windows PASS):

  • emrgd.pid fully gone from code: daemon.py no longer writes/cleans it, _shutdown_all() dropped the pid_file param; only comments + the deliberate negative-state GUI test (writes a pid file, asserts the port probe stays authoritative) remain.
  • _port_is_open() = fixed-port TCP probe (127.0.0.1:56031) mirroring connect.py is_server_running_sync; used for the ws-grace wait, token cleanup gate, and verify() residual — port is the sole liveness ground truth.
  • _daemon_scan_pids() = daemon-only cmdline identity (-m emrg.server): POSIX ps-scan filtered by _EMRG_SERVER_RE (excludes TUI -m emrg), Windows CIM scan with server_only=True. TUI clients are stopped earlier in the chain, so the daemon-only kill fallback is safe.
  • Tests: TestPortIsOpen (open/refused/OSError), TestDaemonScanPids (TUI-vs-daemon filter, own-pid exclusion, Windows server_only delegation + CIM filter), verify residual rewritten to the port probe.
  • Local: pytest 1000 passed + 1 skipped (matches Agent.md sync on this branch), import + CLI OK.

@argszero
argszero merged commit fc10d99 into master Aug 21, 2026
2 checks passed
argszero added a commit that referenced this pull request Aug 21, 2026
Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant