scheduler_prompt_injection, cache_warming_enabled, and headroom_enabled
used env_parse::<bool>, i.e. bool::from_str, which accepts only "true"/
"false". Any other truthy spelling (1/yes/on/TRUE) silently parsed to
false — the feature failed closed with no error or log. Switch them to
the same env_bool helper added for terminal capture so =1/yes/on now work
as operators expect. Backward compatible: true/false keep their meaning.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add the screen-scraping half of Glasspane to complement its event-state
model. Ports the *brain* of the clawdie-ai tmux-screenshot skill (not the
PNG) into the Rust core and wires it into the daemon.
colibri-glasspane:
- terminal.rs: strip_ansi, content-hash frame ids (sha256[:12]),
CapturedFrame, and TerminalRecorder — a deduped ring buffer that drops
frames identical to the previous one (so polling a static pane collapses
to a log of real transitions) with edge-triggered alerting (a failure
fires once on its rising edge, re-fires only after it clears). Thin
capture_tmux_pane seam keeps I/O out of the testable core.
- signatures.rs: data-driven Severity/Signature/Detection/SignatureSet
matcher with a high-value linux_default() set (systemd/oom/disk/docker/
forwarding). Per-OS set is the hook for capability-routing.
colibri-daemon:
- DaemonState.terminal map of per-pane recorders; poll tick in run_loop
gated on COLIBRI_TERMINAL_CAPTURE, seeded from COLIBRI_TERMINAL_WATCH.
- capture_and_record() shares the blocking tmux capture (on spawn_blocking)
+ brief lock fold between the loop and the socket; env-gated Telegram
alert routing that no-ops cleanly when unconfigured.
- socket cmds: terminal-watch/unwatch/list/history/poll.
- env_bool helper: forgiving truthy parsing (1/true/yes/on) so
COLIBRI_TERMINAL_CAPTURE=1 is not silently false like bool::from_str.
Tests: 17 new glasspane unit tests + daemon socket/config tests; whole
workspace green, clippy clean. Verified live on Linux (domedog): autonomous
loop deduped ~5 ticks into 2 frames and fired one edge-triggered alert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>