+
+### 0.x
+
+A single script, re-executed in a loop at some intervals, serially grabbing all
+the needed data and outputting a status bar string, then passed to `xsetroot -name`,
+while saving state in files (e.g. previous totals, to be converted to deltas).
+
+This actually worked surprisingly-OK, but had limitations:
+
+- I use an SSD and want to minimize disk writes
+- not flexible-enough to support my main goal - easy experimentation with
+ various ad-hoc monitors:
+ - I want to set different update intervals for different data sources
+ - I don't want long-running data collectors to block the main loop
+
+### Actuator
+Actuator is anything that takes action upon controller messages. A few generic
+ones are included:
+
+- `khatus_actuate_alert_to_notify_send`
+- `khatus_actuate_status_bar_to_xsetroot_name`
+
+and, by default, are left disconnected from the data feed, so if desired - need
+to be manually attached when starting `khatus`. See usage section.
+
+### Errors
+Any errors encountered by any sensor are propagated as alerts by the
+controller, which are in turn actualized as desktop notifications by the
+`khatus_actuate_alert_to_notify_send` actuator:
+
+![screenshot-self-error-propagation](screenshot-self-error-propagation.jpg)
+
+TODO
+----
+
+- status bar templating language
+- retry/cache for sensors fetching flaky remote resources (such as weather)
+- throttling of broken sensors (constantly returns errors)
+- alert specification language
+ - trigger threshold
+ - above/bellow/equal to threshold value
+ - priority
+ - snooze time (if already alerted, when to re-alert?)
+ - text: subject/body
+
+Redesign notes
+--------------
+
+- controller should not do formatting
+- need in-memory db for diskless feedback/throttling and cache
+- decouple sensor execution from sleep, i.e. a sensor is blocked not by sleep
+ process directly, but by reading of a pipe, to where a sleep process will
+ write a message announcing interval completion and thus signaling execution.
+ This will allow us to manually signal a sensor to update (concretely - I just
+ openned my laptop from sleep and want to force the weather to update
+ immediately); likewise, the sleep process should be blocked on pipe-read
+ until sensor execution is complete - this will allow us to reconfigure
+ intervals at runtime (which seems like a better idea than the above in-memory
+ DB one).