mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-15 23:24:03 -06:00
6d2ff9ef38
* fix(memory-core): fail closed on non-ENOENT companion stat errors Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO, ELOOP, EMFILE) now return null (fail-closed) instead of silently treating the sidecar as zero-byte, preventing legacy data from being dropped on transient or permission failures. * fix(memory): silence self-inflicted legacy sidecar migration warning OpenClaw can leave a zero-byte placeholder at the legacy memory sidecar path (~/.openclaw/memory/<agentId>.sqlite) while the live memory index is the per-agent SQLite database. The legacy-index migration check found the empty file, attached it, saw no legacy schema, and warned on every CLI invocation and gateway start, with no way for users to clear it. Treat a demonstrably empty sidecar (zero-byte main file and no WAL or journal content) as nothing to import: remove it quietly as a migration change instead of emitting a permanent warning. Sidecars that contain any bytes still go through the existing import and warning paths, so a real legacy index or a genuinely unrecognized database is unaffected. Closes #114626 * fix(memory-core): fail closed on non-ENOENT companion stat errors Only treat ENOENT as 'sidecar is absent'. Other fs errors (EACCES, EIO, ELOOP, EMFILE) now return null (fail-closed) instead of silently treating the sidecar as zero-byte, preventing legacy data from being dropped on transient or permission failures. * test(memory-core): add ELOOP and EACCES companion stat regression coverage Regression tests for the fail-closed fix: when a WAL/SHM/journal companion's fs.stat fails with ELOOP (self-referential symlink) or EACCES (permission denied), the migration must NOT remove the main legacy sidecar file. Only ENOENT means genuinely absent. Addresses Whatsskill Codex review P1 finding on openclaw/openclaw#114661. * ci: retrigger after transient runner failures