Background
A single global "low activity = problem" threshold does not work. One module facing south-east is busy by 8 am; one in shade peaks at noon. Each module has its own normal — and anomaly detection without a per-module baseline is mostly false-positive noise.
Why it matters
Proposal
- Periodic job (daily) computes per-module baselines from the last N days of activity scores:
- Baselines stored in DuckDB, refreshed daily.
GET /api/modules/:mac/personality returns the structured summary.
- Module detail page renders a small "personality" card: "Peak hours 09–11, prefers 18–24 °C, weekend ≈ weekday."
Acceptance criteria
Out of scope
- Acting on the baseline — anomaly push lives in its own issue.
- Cross-module comparison ("more active than 60% of other hives") — would require multi-tenant, out of scope per arc42 chapter 1.
Related: #110, #111
Background
A single global "low activity = problem" threshold does not work. One module facing south-east is busy by 8 am; one in shade peaks at noon. Each module has its own normal — and anomaly detection without a per-module baseline is mostly false-positive noise.
Why it matters
Proposal
GET /api/modules/:mac/personalityreturns the structured summary.Acceptance criteria
Out of scope
Related: #110, #111