focus-area now recomputes at most once per hour, and only if the task list
actually changed since the last compute.
- focus-area TTL: 43200s → 3600s; version bumped to 2.1.0
- computeAndStore hashes sorted task contents (MD5) and checks the stored
_task_hash in the existing snapshot; skips the ml-serving call when the
hash matches and the output isn't expired
- ml-serving injects _task_hash into the snapshot so the next cycle can compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>