runner: pin journal root at ProcessLogWriter init to stop daemon fixture leak
Daemon output-stream threads spawned by ManagedProcess could outlive the
test that spawned them and flush post-teardown, after _SOLSTONE_JOURNAL_OVERRIDE
had been reverted. The day-rollover branch in write() re-resolved the journal
root via get_journal() on every flush, so those late writes silently landed
under tests/fixtures/journal/chronicle/<today>/health/ — hidden from the git-
status leak detector by existing .gitignore patterns.
Capture the resolved journal root once at ProcessLogWriter.__init__ and use
the pinned Path in _open_log, _update_symlinks, and the path property. No
instance method re-reads get_journal() after construction, so env-var drift
between spawn and flush can no longer redirect writes. _day_health_log_path
now takes journal_root as an explicit argument.
Regression test: tests/test_sense.py::test_process_log_writer_pins_journal_root_at_init
constructs a writer under journal_a, drifts the env to journal_b, triggers a
rollover flush, and asserts journal_b stays empty.
Scope id: solstone-fixture-leak-daemon-thread
Co-authored-by: OpenAI Codex <codex@openai.com>