Version: 7.1.1 (macOS, multi-host / Syncthing setup)
Summary
LIFEOS_StatusLine.sh writes host-local ephemeral caches into LIFEOS/MEMORY/STATE/ — a directory that is commonly Syncthing-synced between hosts. On a two-host setup (a primary DA host + a second/worker client), both machines' statuslines write the same synced files on every render, so Syncthing produces a stream of *.sync-conflict-* files.
Evidence
On a second host (neo) synced to the primary (ai), after bringing the statusline online, MEMORY/STATE/ accumulated conflict files on nearly every render:
MEMORY/STATE/model-cache.sync-conflict-20260729-160943-<id>.txt
MEMORY/STATE/model-cache.sync-conflict-20260729-162020-<id>.txt
MEMORY/STATE/model-cache.sync-conflict-20260729-165624-<id>.txt
MEMORY/STATE/model-cache.sync-conflict-20260729-170132-<id>.txt
Affected caches (host-local data in a synced dir)
Statusline-owned, self-contained (written + read only by the statusline):
MEMORY/STATE/model-cache.txt
MEMORY/STATE/location-cache.json
MEMORY/STATE/weather-cache.json
MEMORY/STATE/cc-version-cache.txt
Also host-local but shared with other components (hooks/tools), so they conflict too but need a coordinated move: session-name-cache.sh, learning-cache.sh, capabilities-statusline.txt, session-names.json.
Note: USAGE_CACHE/USAGE_LOCK already correctly live in /tmp — that's the right pattern; the other caches just didn't follow it.
Impact
Endless *.sync-conflict-* noise in the synced MEMORY tree on any multi-host install. Data isn't lost (the caches are trivially re-derivable), but the tree fills with conflict artifacts and it defeats the "one primary writer" model for MEMORY.
Proposed fix
Move the statusline's host-local caches out of the synced MEMORY/STATE into a host-local dir, e.g.:
STATUSLINE_LOCAL_STATE="${XDG_CACHE_HOME:-$HOME/.cache}/lifeos-statusline"
mkdir -p "$STATUSLINE_LOCAL_STATE"
MODEL_CACHE="$STATUSLINE_LOCAL_STATE/model-cache.txt"
# ...location/weather/cc-version likewise
The cross-component caches (session-name-cache, learning-cache, capabilities-statusline, session-names) need the same treatment applied at every writer, not just the statusline.
Local workaround applied on neo
Repointed the 4 self-contained caches (model/location/weather/cc-version) to $HOME/.cache/lifeos-statusline; verified the statusline now writes there and no longer touches the synced file.
Version: 7.1.1 (macOS, multi-host / Syncthing setup)
Summary
LIFEOS_StatusLine.shwrites host-local ephemeral caches intoLIFEOS/MEMORY/STATE/— a directory that is commonly Syncthing-synced between hosts. On a two-host setup (a primary DA host + a second/worker client), both machines' statuslines write the same synced files on every render, so Syncthing produces a stream of*.sync-conflict-*files.Evidence
On a second host (
neo) synced to the primary (ai), after bringing the statusline online,MEMORY/STATE/accumulated conflict files on nearly every render:Affected caches (host-local data in a synced dir)
Statusline-owned, self-contained (written + read only by the statusline):
MEMORY/STATE/model-cache.txtMEMORY/STATE/location-cache.jsonMEMORY/STATE/weather-cache.jsonMEMORY/STATE/cc-version-cache.txtAlso host-local but shared with other components (hooks/tools), so they conflict too but need a coordinated move:
session-name-cache.sh,learning-cache.sh,capabilities-statusline.txt,session-names.json.Note:
USAGE_CACHE/USAGE_LOCKalready correctly live in/tmp— that's the right pattern; the other caches just didn't follow it.Impact
Endless
*.sync-conflict-*noise in the syncedMEMORYtree on any multi-host install. Data isn't lost (the caches are trivially re-derivable), but the tree fills with conflict artifacts and it defeats the "one primary writer" model forMEMORY.Proposed fix
Move the statusline's host-local caches out of the synced
MEMORY/STATEinto a host-local dir, e.g.:The cross-component caches (
session-name-cache,learning-cache,capabilities-statusline,session-names) need the same treatment applied at every writer, not just the statusline.Local workaround applied on neo
Repointed the 4 self-contained caches (model/location/weather/cc-version) to
$HOME/.cache/lifeos-statusline; verified the statusline now writes there and no longer touches the synced file.