Model Assumptions and Limitations
The physics assumptions, simplifications, and boundaries behind Power Oracle outputs.
Power Oracle is intentionally transparent. It exposes physics-based workout analysis in machine-readable form, but it does not pretend to know more than the inputs and movement library support.
Core Assumption
Mechanical work is modeled primarily as positive work against gravity. For many movements, that means estimating vertical displacement of body mass, external load, or both.
Standard ROM Assumptions
The movement library uses standard range-of-motion assumptions for supported movements. Those assumptions are exposed through GET /v1/movements so clients can inspect them instead of treating the model as a black box.
Examples:
- squats use height-scaled displacement assumptions
- pull-ups use height-scaled body-mass displacement assumptions
- rowing and erg movements use supported proxy models documented in the movement registry
Why Eccentric Work Is Ignored
The current model focuses on positive mechanical work. It does not attempt to add eccentric work or braking costs into the reported total. That keeps the compute path minimal, explicit, and consistent across the supported movement library.
Why Horizontal Movement Is Simplified
Some movements, especially running and erg work, cannot be modeled cleanly from vertical displacement alone. For those, Power Oracle uses explicit supported proxies that are documented in the movement registry. The goal is not to hide simplification. The goal is to expose it clearly and keep it machine-readable.
Why Denominator Semantics Matter
Power is work over time, so denominator semantics are central to the product.
- Session average power uses session elapsed time.
- Split average power uses split active time.
- Recovery belongs in
rest_seconds_after. - Any leftover time becomes
unattributed_duration_seconds.
Without these distinctions, interval-heavy sessions collapse into misleading averages.
What The API Does Not Infer Automatically
- It does not infer unsupported movements.
- It does not invent missing required inputs such as
external_load. - It does not invent per-movement timing inside grouped splits.
- It does not infer recovery durations that were never supplied.
- It does not hide unattributed time when the top-level session duration is larger than accounted split time.
Trust Model
Power Oracle should be trusted because it is explicit, inspectable, and minimal, not because it claims to infer everything. Clients can inspect supported movements, required inputs, assumptions, and denominator notes directly through GET /v1/movements and the /v1 contract.
