- lib.rs: replaces stub setup with full wiring: loads PatternFile from
config, extracts log_paths, spawns watcher, runs classifier loop in
async task, dispatches MatchedEvents via notify::dispatch
- lib.rs: config Mutex lock uses unwrap_or_else(|e| e.into_inner()) to
recover from poison instead of panicking
- patterns.rs: load() now tries three path candidates in order
(dev-relative, src-tauri-relative, system) before returning bail!
Validation loop (match_text, sources) retained inside candidate loop
Replace flat watcher.rs with watcher/ module containing mod.rs plus stub
sub-modules for journald, kmsg, and inotify. Upgrades spawn() to accept
log_paths and return mpsc::Receiver<SystemEvent>. Updates lib.rs call site.
Add EventSource enum and update SystemEvent in watcher.rs (M0 stub
updated to support Task 5 clean deletion). Create patterns.rs with
PatternFile/Pattern/MatchedEvent types, TOML loader, and classify()
matching against source + text. Five unit tests covering journald,
applog, no-match, and source discrimination cases.