WorkCapacity
Power Oracle Docs

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.