v0.9.4
Changed
- Package-boundary excision: remove host/daemon-only concepts that leaked into
soothe-nano— dead-duplicateThreadLogger/ConfigWatcher/PersistenceDirectoryManager/workspace-policy functions (host already owns canonical copies), deadsoothe_checkpointsDDL (host-owned),cron_jobs+identity_*DDL from nano's metadata bootstrap (host applies at runtime),DisplayCardStoremoved to the daemon, deadset_step_context/log_exception_simplifiedhelpers. Standalone nano unaffected (the moved symbols were never called by nano). - Align
soothe-daemonfirst-party pins withsoothe:soothe-nano>=1.0.0,<2.0.0,soothe-sdk>=1.0.5,<2.0.0, andsoothe>=0.9.4,<1.0.0
Added
scripts/check_nano_duplicate_symbols.py— CI gate (run byverify_finally.sh) that detects dead-duplicate public symbols defined in bothsoothe-nanoandsoothe/soothe-daemon, catching the renamed-leak pattern the literal-name boundary ban misses.scripts/check_first_party_pin_alignment.py— CI gate that fails whensootheandsoothe-daemondeclare disjoint ranges for shared deps (soothe-nano,soothe-sdk)- Release Docker workflow dry-runs
uv pip install soothe==V soothe-daemon==Vbefore the multi-arch image build
Fixed
- Docker image install of
soothe+soothe-daemonfailed on 0.9.2 because daemon still requiredsoothe-nano<1.0.0while soothe requiredsoothe-nano>=1.0.0
Full Changelog: v0.9.2...v0.9.4