mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 21:53:28 +08:00
* fix(continuous-learning-v2): observer background process crashes immediately Three bugs prevent the observer from running: 1. Nested session detection: When launched from a Claude Code session, the child process inherits CLAUDECODE env var, causing `claude` CLI to refuse with "cannot be launched inside another session". Fix: unset CLAUDECODE in the background process. 2. set -e kills the loop: The parent script's `set -e` is inherited by the subshell. When `claude` exits non-zero (e.g. max turns reached), the entire observer loop dies. Fix: `set +e` in the background process. 3. Subshell dies when parent exits: `( ... ) & disown` loses IO handles when the parent shell exits, killing the background process. Fix: use `nohup /bin/bash -c '...'` for full detachment, and `sleep & wait` to allow SIGUSR1 to interrupt sleep without killing the process. Additionally, the prompt for Haiku now includes the exact instinct file format inline (YAML frontmatter with id/trigger/confidence/domain/source fields), since the previous prompt referenced "the observer agent spec" which Haiku could not actually read, resulting in instinct files that the CLI parser could not parse. * fix: address review feedback on observer process management - Use `env` to pass variables to child process instead of quote-splicing, avoiding shell injection risk from special chars in paths - Add USR1_FIRED flag to prevent double analysis when SIGUSR1 interrupts the sleep/wait cycle - Track SLEEP_PID and kill it in both TERM trap and USR1 handler to prevent orphaned sleep processes from accumulating - Consolidate cleanup logic into a dedicated cleanup() function * fix: guard PID file cleanup against race condition on restart Only remove PID file in cleanup trap if it still belongs to the current process, preventing a restarted observer from losing its PID file when the old process exits.