v0.3.3
A decision no longer rests on a recovery reading nobody sent.
With no sleep, HRV, resting heart rate or stress signal, Evidra used to score recovery as 50 — and nothing downstream could tell that 50 from a measured one. Readiness came out 50, the rule that lowers intensity below 60 fired, and an athlete who had supplied one hike and no physiology was told their readiness was below the line and watched their VO₂max session become a moderate run.
Recovery and readiness are now unscored when nothing was measured. The rules that read them do not fire, the number never enters the evidence as though it had been observed, and the decision lands on what actually arrived: muscle fatigue, acute:chronic load, and time since the last session. The same hike now comes back as keep the session, with a limit saying which rules sat out and why.
Also in this release
- The maximum heart rate behind a Strava export says when it was seeded from 220-age rather than measured. Heart-rate-derived load is scaled against that ceiling, so a decision resting on those figures inherits the assumption — it is now stated instead of silent.
- Missing signals are named in words rather than field names: "No HRV, resting heart rate or stress readings were supplied for today", not
hrv, restingHeartRate, stress. - Fewer and shorter caveats. Two that always fired together are one sentence; one that explained something that had not happened now speaks only when it applies.
- The wording throughout leads with what to do rather than what Evidra declines to do. A refusal that reads as a finished sentence gets read aloud, and "this server does not fetch, store, or invent health data" reached one athlete as "anything I say now is made up".
- Health sources are named even-handedly. The old list led with Strava and named Oura and Whoop while omitting Google Health, which Evidra actually reads.
The extension ships as one compiled server file. Requires Node.js 20 or newer, and restart Claude Desktop completely after installing.
sha256 606f86f6ce044f1b5090fae63ce93b66f260b17e1ba253e984cd4056b68931c2