{
  "schema_version": 1,
  "policy_id": "lift-guild.e1rm",
  "policy_version": "3.0.0",
  "status": "active",
  "effective_date": "2026-09-04",
  "curve": {
    "id": "nuzzo-2024-general-inverse",
    "version": "1.0.0",
    "algorithm_version": "1.0.0",
    "citation": {
      "title": "Maximal Number of Repetitions at Percentages of the One Repetition Maximum: A Meta-Regression and Moderator Analysis of Sex, Age, Training Status, and Exercise",
      "authors": [
        "James L. Nuzzo",
        "Matheus D. Pinto",
        "Kazunori Nosaka",
        "James Steele"
      ],
      "journal": "Sports Medicine",
      "year": 2024,
      "doi": "10.1007/s40279-023-01937-7",
      "pmcid": "PMC10933212",
      "article_url": "https://pmc.ncbi.nlm.nih.gov/articles/PMC10933212/",
      "osf_project_url": "https://osf.io/s94gf/",
      "license": "CC-BY-4.0"
    },
    "source_scope": "general_eccentric_concentric_population_curve",
    "source_table": {
      "path": "docs/policies/e1rm/v1/nuzzo-2024-general.csv",
      "sha256": "e2c1b9309efda0f6caed8ad68a4997f871bd95767e324b3f48cecc44e64dc512",
      "hash_mode": "canonical_utf8_lf",
      "rows": 17,
      "published_load_percent_min": 15,
      "published_load_percent_max": 95
    },
    "upstream_assets": [
      {
        "name": "Reps ~ Load table.pdf",
        "version": 1,
        "url": "https://osf.io/download/ehg35/",
        "sha256": "da67c15cbca59d77cb037ae8c9a89ec223613233839924eb72047c31cafd9f9d"
      },
      {
        "name": "Analysis.R",
        "version": 5,
        "url": "https://osf.io/download/mb2fz/",
        "sha256": "37342ab2417fcf7b1e9f12182cab2fc7d0298e0876683090f7960d296cc74c99"
      },
      {
        "name": "Data.csv",
        "version": 2,
        "url": "https://osf.io/download/9mzwn/",
        "sha256": "229dadd1f13bfe7b9f5dd5fd36bcfb6c710f8ac67b08f2be9ed423eb61b72fe5"
      }
    ],
    "product_anchor": {
      "effective_reps": 1,
      "load_percent_1rm": 100,
      "provenance": "lift_guild_product_decision_not_reported_by_nuzzo_2024"
    },
    "reference_band": {
      "name": "inverted_population_reference_band",
      "construction": "published_point_mean_plus_or_minus_z_times_between_person_sd",
      "normal_z": 1.2815515655446004,
      "nominal_symmetric_mass": 0.8,
      "is_confidence_interval": false,
      "is_conditional_percentile_of_load_given_reps": false
    },
    "interpolation": {
      "method": "direct_inverse_piecewise_linear_from_source_knots",
      "fractional_effective_reps": true,
      "integer_snapshot_is_runtime_knots": false,
      "extrapolation": "forbidden"
    },
    "derived_snapshot": {
      "path": "docs/policies/e1rm/v1/universal-rep-curve.json",
      "sha256": "63402311387234926303bc2f2c1eb6be17fb1b2656046384db6c0e8de5b6ac70",
      "hash_mode": "canonical_utf8_lf",
      "role": "generated_conformance_fixture"
    },
    "change_notice": "Derived from the general eccentric-concentric repetitions-to-failure predictions in Nuzzo et al. (2024), CC BY 4.0. Lift Guild added a 100%1RM=1-repetition domain anchor, formed an approximate symmetric 80% individual reference band from the published point mean and between-person SD (z=+/-1.2815515655), and monotonically inverted the curves by piecewise-linear interpolation. These inverse bands are application-derived and were not reported by the authors."
  },
  "input_contract": {
    "session_intent": {
      "values": [
        "training",
        "rm_test"
      ],
      "default": "training",
      "changes_estimation_formula": false,
      "purpose": "preserve_explicit_measurement_context"
    },
    "set_result_values": [
      "completed",
      "rep_failure"
    ],
    "aborted_is_persisted": false,
    "completed_reps": {
      "minimum_for_completed": 1,
      "minimum_for_rep_failure": 0,
      "zero_allowed_only_for": "rep_failure",
      "failed_target_reps_is_separate": true
    },
    "rep_failure_semantics": {
      "positive_completed_reps": {
        "uses_actual_completed_reps": true,
        "representative_rir": 0,
        "rir_source": "observed_failed_next_repetition",
        "estimated_1rm": {
          "eligible": true,
          "confidence_inside_support": "medium",
          "estimate_kind_inside_support": "range",
          "above_support": "low_conditional_open_at_20_reps"
        },
        "perceived_rpe_is_ignored": true
      },
      "zero_completed_reps": {
        "estimated_1rm": {
          "eligible_for_representative_vote": false,
          "representative": null,
          "finite_upper_bound": "attempted_stats_load_kg",
          "confidence": "low",
          "estimate_kind": "censored_high"
        }
      },
      "measured_nrm": {
        "uses_actual_completed_reps": true,
        "minimum_completed_reps": 1,
        "maximum_completed_reps": 20,
        "target_reps_is_not_measured_nrm": true,
        "zero_completed_reps_result": "no_measured_nrm"
      }
    },
    "perceived_rpe": {
      "kind": "rpe_scalar",
      "scale_id": "barbelic.rpe",
      "scale_version": "1.0.0",
      "storage": "exercise_sets.perceived_rpe numeric(3,1)",
      "min": 1,
      "max": 10,
      "decimals": 1,
      "shortcut_buttons_are_not_categories": true,
      "rir_formula": "10 - rpe",
      "closed": {
        "rpe_min_inclusive": 6,
        "rir_min": "10 - rpe",
        "rir_max": "10 - rpe",
        "representative_rir": "10 - rpe",
        "upper_open": false,
        "confidence_inside_support": "medium"
      },
      "open": {
        "rpe_max_exclusive": 6,
        "rir_min": "10 - rpe",
        "rir_max": null,
        "representative_rir": "10 - rpe",
        "upper_open": true,
        "confidence": "low"
      },
      "exact_anchor": {
        "completed_reps": 1,
        "rpe": 10,
        "confidence": "high"
      },
      "missing": {
        "representative_rir": 0,
        "confidence": "low",
        "upper_open": true,
        "finite_upper_estimate_allowed": false
      },
      "legacy_difficulty": {
        "automatic_rir_reinterpretation": false,
        "treatment": "converted_once_at_v3_cutover_then_column_dropped",
        "conversion": {
          "<=3": 7,
          "<=6": 8,
          "<=8": 9,
          "else": 10
        },
        "raw_value_preserved_in": "exercise_sets.raw_payload.legacy_difficulty"
      },
      "retired_five_band_scale": {
        "scale_id": "lift-guild.perceived-effort",
        "scale_version": "1.0.0",
        "conversion_to_rpe": "level + 5",
        "retired_on": "2026-09-04"
      },
      "confidence_assignment": {
        "high": "completed_single_with_rpe_10_rir_zero_exact_anchor_only",
        "medium": [
          "closed_rir_rpe_at_least_6_inside_support_except_high_case",
          "positive_completed_rep_failure_with_observed_rir_zero_inside_support"
        ],
        "low": [
          "missing_rpe",
          "rpe_below_6_open_rir",
          "outside_support",
          "zero_completed_rep_failure"
        ],
        "population_reference_band_width_does_not_determine_confidence": true
      }
    }
  },
  "calculation": {
    "load_input": "statistical_load_kg_while_preserving_exact_source_load",
    "eligibility": {
      "stats_load_kg_min_exclusive": 0,
      "requires_quantitative_weight_load": true,
      "zero_load_result": "unavailable",
      "bodyweight_only_result": "unavailable",
      "fabricate_zero_estimate": false
    },
    "effective_reps_formula": "completed_reps + representative_rir",
    "effective_reps_support": {
      "min": 1,
      "max": 20
    },
    "inside_support": {
      "representative": "load_kg / (load_pct_reference_center / 100)",
      "population_reference_lower": "load_kg / (load_pct_reference_high / 100)",
      "population_reference_upper": "load_kg / (load_pct_reference_low / 100)"
    },
    "below_support": {
      "representative": null,
      "reason": "no_successful_repetition",
      "confidence": "unavailable"
    },
    "above_support": {
      "representative_effective_reps": 20,
      "rule": "conservative_supported_boundary",
      "extrapolate": false,
      "confidence": "low",
      "finite_upper_estimate_allowed": false,
      "upper_open": true
    },
    "completed_single": {
      "rir_zero_or_missing_representative_equals_load": true
    },
    "rep_failure": {
      "positive_completed_reps": "calculate_from_actual_completed_reps_with_observed_rir_zero",
      "zero_completed_reps": "store_attempted_load_as_finite_upper_bound_without_representative",
      "target_reps_role": "attempt_metadata_only",
      "perceived_rpe_role": "ignored"
    },
    "rounding": {
      "source_load_kg": "preserve",
      "curve_percent_decimal_places": 6,
      "raw_projection": "preserve_sufficient_decimal_precision",
      "published_projection_kg": {
        "increment": 1,
        "mode": "half_up"
      },
      "display_kg": {
        "increment": 1,
        "mode": "half_up"
      }
    }
  },
  "reference_state": {
    "denominator_timing": "strictly_before_session_start",
    "current_session_updates_its_own_denominator": false,
    "set_e1rm_available_immediately": true,
    "first_session_intensity": null,
    "first_session_intensity_available_from": "next_session"
  },
  "aggregation": {
    "scope_order": [
      "set_candidates",
      "session_vote",
      "daily_point"
    ],
    "set_information_sort": [
      {
        "field": "confidence",
        "order": [
          "high",
          "medium",
          "low"
        ]
      },
      {
        "field": "rpe_evidence",
        "order": [
          "observed_rep_failure",
          "perceived_rpe_or_missing"
        ]
      },
      {
        "field": "set_type",
        "order": [
          "top",
          "main",
          "warmup"
        ]
      },
      {
        "field": "supported_effective_reps",
        "direction": "ascending"
      },
      {
        "field": "representative_e1rm_kg",
        "direction": "descending"
      },
      {
        "field": "position",
        "direction": "ascending"
      },
      {
        "field": "id",
        "direction": "ascending"
      }
    ],
    "session": {
      "max_information_candidates": 3,
      "vote_count": 1,
      "vote_method": "confidence_weighted_median_of_selected_sets"
    },
    "day": {
      "point_count": 1,
      "point_method": "confidence_weighted_median_of_session_votes"
    },
    "confidence_weights": {
      "high": 4,
      "medium": 2,
      "low": 1
    },
    "weighted_median_tie_break": "lower_value",
    "low_evidence_guard": {
      "exclude_low_when_medium_or_high_exists": true,
      "when_only_low": {
        "accept_if_prior_trusted_missing": true,
        "accept_if_candidate_at_least_prior_trusted": true,
        "allow_decrease_below_prior_trusted": false
      }
    },
    "graph": {
      "series_granularity": "selected_daily_point",
      "include_selected_daily_population_reference_band_only": true,
      "include_unselected_set_candidates": false
    }
  },
  "staleness": {
    "stale_after_days": 90,
    "automatic_value_decay": false,
    "behavior": "mark_stale_without_changing_value"
  },
  "projection_execution": {
    "mode": "asynchronous",
    "idempotent": true,
    "generation_guarded": true,
    "stale_generation_may_publish": false
  },
  "stimulus_classifier": {
    "policy_id": "lift-guild.stimulus-classifier",
    "version": "1.0.0",
    "derivative_of": "pre_session_reference_intensity_percent",
    "unavailable_when_reference_missing": true,
    "thresholds": [
      {
        "code": "strength",
        "min_inclusive_percent": 85,
        "max_exclusive_percent": null
      },
      {
        "code": "hypertrophy",
        "min_inclusive_percent": 65,
        "max_exclusive_percent": 85
      },
      {
        "code": "endurance",
        "min_inclusive_percent": null,
        "max_exclusive_percent": 65
      }
    ]
  },
  "domain_separation": {
    "measured_nrm_targets": {
      "min": 1,
      "max": 20
    },
    "measured_nrm_source_facts": {
      "completed": "actual_completed_reps_1_through_20",
      "rep_failure": "actual_completed_reps_1_through_20",
      "rep_failure_target_reps_is_attempt_metadata_only": true,
      "rep_failure_zero_completed_reps_is_not_measured_nrm": true
    },
    "estimated_1rm_is_measured_nrm": false,
    "allowed_consumers": [
      "estimated_1rm_graph",
      "set_detail",
      "set_intensity"
    ],
    "forbidden_consumers": [
      "measured_pr_state",
      "measured_pr_event",
      "pr_notification"
    ]
  },
  "versioning": {
    "scheme": "semver",
    "policy_and_curve_versions_are_independent": true,
    "breaking_change": {
      "required_bump": "major",
      "requires_full_replay": true,
      "append_changelog_entry": true,
      "preserve_prior_version_artifacts": true
    },
    "breaking_paths": [
      "curve.source_table.sha256",
      "curve.product_anchor",
      "curve.reference_band",
      "curve.interpolation",
      "input_contract",
      "calculation.eligibility",
      "calculation",
      "reference_state",
      "aggregation",
      "staleness",
      "projection_execution",
      "stimulus_classifier",
      "domain_separation"
    ],
    "non_breaking_examples": {
      "minor": [
        "additive_non_numeric_metadata"
      ],
      "patch": [
        "clarification_without_behavior_change",
        "link_repair_with_unchanged_pinned_hash"
      ]
    }
  }
}
