Bug Description
When HERMES_HOME contains symlinks (for example config.yaml symlinked to a git-tracked profile package), Hermes writes to that path via atomic replace and the symlink is replaced by a regular file.
This causes managed package setups to drift: runtime keeps working, but git-tracked source-of-truth is silently detached.
Steps to Reproduce
- Create
~/.hermes/config.yaml as a symlink to another file:
ln -s /path/to/tracked/config.yaml ~/.hermes/config.yaml
- Trigger any Hermes path that writes config (e.g. gateway
/sethome, or settings write path).
- Inspect
~/.hermes/config.yaml.
Expected Behavior
If the target path is a symlink, writes should preserve link semantics (or provide an explicit supported mode for managed symlink deployments).
Actual Behavior
Symlink is replaced with a regular file at ~/.hermes/config.yaml.
Affected Component
Config + gateway write paths using atomic replace helpers.
Related
Why this matters
Managed/shared deployments often separate runtime home from package canon using symlinks. Replacing symlinks breaks that contract and causes config/persona drift unless operators add periodic relink scripts.
Bug Description
When
HERMES_HOMEcontains symlinks (for exampleconfig.yamlsymlinked to a git-tracked profile package), Hermes writes to that path via atomic replace and the symlink is replaced by a regular file.This causes managed package setups to drift: runtime keeps working, but git-tracked source-of-truth is silently detached.
Steps to Reproduce
~/.hermes/config.yamlas a symlink to another file:ln -s /path/to/tracked/config.yaml ~/.hermes/config.yaml/sethome, or settings write path).~/.hermes/config.yaml.Expected Behavior
If the target path is a symlink, writes should preserve link semantics (or provide an explicit supported mode for managed symlink deployments).
Actual Behavior
Symlink is replaced with a regular file at
~/.hermes/config.yaml.Affected Component
Config + gateway write paths using atomic replace helpers.
Related
/sethomepersists into yaml path)Why this matters
Managed/shared deployments often separate runtime home from package canon using symlinks. Replacing symlinks breaks that contract and causes config/persona drift unless operators add periodic relink scripts.