In v1.0.1, the Gateway local-mode L2 timer was incorrectly routing L2 schedules to non-scene-extraction task types, causing scheduled L2 scene extraction to silently fail; the fix extracted timer-routing.ts and correctly maps timer member prefixes (offload-l1 / offload-l15 / offload-l2) to their respective task types.[1]
When L2 LLM extraction failed, partial writes and deletions in the sandbox were not rolled back, causing subsequent recall to fall back to fragmented retrieval; a BackupManager with findLatestBackup and restoreLatestDirectory was added to automatically restore from the latest backup on LLM failure, using a fail-soft design.[2] Scene filenames containing spaces caused Persona Scene Navigation references to be unrecognized by downstream parsers; the fix adds core/scene/filename-normalizer.ts, invoked in SceneExtractor.extract Phase 5b (after cleanup, before syncSceneIndex), which normalizes filenames by replacing spaces with -, stripping dangerous punctuation, and appending a -2 suffix on conflicts.[2]
In Dockerfile.hermes, when provider: custom is used, Hermes reads the API key from config.yaml's model.api_key rather than from the .env file's OPENAI_API_KEY; the missing field caused 401 errors on the first conversation, and the fix ensures model.api_key is written into the generated config.yaml.[2] The sanitizeText function's UNSAFE_CHAR_RE was missing the u flag, causing JavaScript to treat strings as UTF-16 code units and strip both surrogate halves of non-BMP code points (emoji, CJK Extension B, math bold); adding the u flag restricts matching to isolated (malformed) surrogates only.[2]
Sources