{
  "schema_version": 1,
  "policy_id": "lift-guild.e1rm",
  "entries": [
    {
      "date": "2026-07-24",
      "policy_version": "1.0.0",
      "curve_version": "1.0.0",
      "change_class": "breaking",
      "requires_full_replay": true,
      "policy_breaking_fingerprint_sha256": "90219d63ac02e01284367203a109915a2bf33361d033886b3b5f587f1c4eb1c3",
      "curve_breaking_fingerprint_sha256": "dd16c3882e7b0e54ea491856e6d7b55cdf16c4c9f69534a23d3916c1ee6fafb4",
      "policy_path": "docs/policies/e1rm/v1/policy.json",
      "policy_sha256": "df4b9c9a2a95efa642a3620258ae67ff4de86b8d1412178b0131cca5a3933b01",
      "policy_hash_mode": "canonical_utf8_lf",
      "human_document_path": "docs/policies/e1rm/v1/README.md",
      "human_document_sha256": "f401db6ff958b5075b13ec46f1cc5761e195e9a15bcc298c7822c41e44541182",
      "human_document_hash_mode": "canonical_utf8_lf",
      "artifact_path": "docs/policies/e1rm/v1/universal-rep-curve.json",
      "artifact_sha256": "63402311387234926303bc2f2c1eb6be17fb1b2656046384db6c0e8de5b6ac70",
      "summary": [
        "Replace the legacy universal Epley estimate with the pinned Nuzzo 2024 general inverse population curve.",
        "Add the exact 100%1RM=1 repetition product anchor and RIR-aware effective repetitions.",
        "Preserve explicit training or RM-test session intent without changing the v1 estimation formula.",
        "Keep failed attempts censored for e1RM while treating positive actual completed repetitions as measured NRM facts and zero-repetition failures as no NRM.",
        "Separate e1RM from measured 1..20RM PR state/events and require a full projection replay."
      ]
    },
    {
      "date": "2026-08-12",
      "policy_version": "2.0.0",
      "curve_version": "1.0.0",
      "change_class": "breaking",
      "requires_full_replay": true,
      "policy_breaking_fingerprint_sha256": "33a2dc33ff574ec22ccdc2289a116b31d117443430e0c393fc289240105a8be6",
      "curve_breaking_fingerprint_sha256": "dd16c3882e7b0e54ea491856e6d7b55cdf16c4c9f69534a23d3916c1ee6fafb4",
      "policy_path": "docs/policies/e1rm/v2/policy.json",
      "policy_sha256": "af1f13f44effdd7511d48a2cb20ae3a7d7d5780a8571a1855eda98ba94e14e2f",
      "policy_hash_mode": "canonical_utf8_lf",
      "human_document_path": "docs/policies/e1rm/v2/README.md",
      "human_document_sha256": "5bc688bdb6a808fb880c599609238087d3c734d0bce28eef1fefbf0da4dfb0ab",
      "human_document_hash_mode": "canonical_utf8_lf",
      "artifact_path": "docs/policies/e1rm/v1/universal-rep-curve.json",
      "artifact_sha256": "63402311387234926303bc2f2c1eb6be17fb1b2656046384db6c0e8de5b6ac70",
      "summary": [
        "Keep the pinned Nuzzo 2024 curve unchanged while advancing the application policy to v2.",
        "Estimate e1RM for positive-repetition failures from actual completed repetitions and observed RIR0.",
        "Ignore subjective effort for failed sets and rank observed failure evidence ahead of subjective effort within the same confidence.",
        "Retain zero-repetition failures as non-voting censored evidence with attempted load as a finite upper bound.",
        "Require a full projection replay without changing measured NRM or PR separation."
      ]
    },
    {
      "date": "2026-09-04",
      "policy_version": "3.0.0",
      "curve_version": "1.0.0",
      "change_class": "breaking",
      "requires_full_replay": true,
      "policy_breaking_fingerprint_sha256": "eba651896eafae8ecfc8f7fb0789cc0606522d80414ffece85392d14bbed8cad",
      "curve_breaking_fingerprint_sha256": "dd16c3882e7b0e54ea491856e6d7b55cdf16c4c9f69534a23d3916c1ee6fafb4",
      "policy_path": "docs/policies/e1rm/v3/policy.json",
      "policy_sha256": "18f6d74f90849c4d07cd5abf818bdd863adf9188a0efb5eb15f232e21523f05f",
      "policy_hash_mode": "canonical_utf8_lf",
      "human_document_path": "docs/policies/e1rm/v3/README.md",
      "human_document_sha256": "c38403a5912c6177aca2400423e4815d385e238576219953712a754e0c3677cb",
      "human_document_hash_mode": "canonical_utf8_lf",
      "artifact_path": "docs/policies/e1rm/v1/universal-rep-curve.json",
      "artifact_sha256": "63402311387234926303bc2f2c1eb6be17fb1b2656046384db6c0e8de5b6ac70",
      "summary": [
        "Keep the pinned Nuzzo 2024 curve unchanged while advancing the application policy to v3.",
        "Replace the five-band perceived-effort wire contract with a single RPE number (1.0..10.0, one decimal) stored as exercise_sets.perceived_rpe.",
        "Derive RIR directly as 10 - RPE: RPE >= 6.0 is a closed medium-confidence range, RPE < 6.0 keeps an open low-confidence upper bound, missing RPE keeps the conservative RIR 0 open estimate.",
        "Convert stored five-band levels once as RPE = level + 5 and legacy difficulty once as <=3->7, <=6->8, <=8->9, else 10, then drop the retired columns.",
        "Require a full projection replay without changing measured NRM or PR separation."
      ]
    }
  ]
}
