Pozify / data /sft /coach_summary_eval.jsonl
tiena2cva's picture
chore: update base model to NVIDIA-Nemotron-3-Nano-4B-BF16 across configurations and documentation; adjust max sequence length to 2048; upgrade GitHub Actions cache to v5
ad20540
Raw
History Blame Contribute Delete
376 kB
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9998,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.57,\n \"avg_stability_score\": 0.68,\n \"avg_symmetry_score\": 0.56,\n \"avg_rep_duration_sec\": 2.2,\n \"avg_tempo_consistency_score\": 0.9453,\n \"avg_landmark_confidence\": 0.9173,\n \"fatigue_trend_rom_delta\": -0.1,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3752,\n \"avg_bottom_pause_sec\": 0.278\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.46,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 1.2,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.11,\n \"top_pause_sec\": 0.6,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0094,\n \"min_knee_angle_deg\": 115.91,\n \"max_knee_angle_deg\": 177.98,\n \"min_hip_angle_deg\": 98.12,\n \"max_hip_angle_deg\": 153.15,\n \"hip_depth_delta\": -0.0548,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.14,\n \"knee_valgus_proxy\": 0.1648,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.44,\n \"hip_shift\": 0.0094,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.8\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.13,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.13,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.6,\n \"tempo_ratio\": 2.55,\n \"top_pause_sec\": 0.93,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0082,\n \"min_knee_angle_deg\": 122.92,\n \"max_knee_angle_deg\": 174.7,\n \"min_hip_angle_deg\": 103.24,\n \"max_hip_angle_deg\": 155.66,\n \"hip_depth_delta\": -0.0581,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.67,\n \"knee_valgus_proxy\": 0.1742,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.38,\n \"hip_shift\": 0.0082,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.62,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.95,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 108.84,\n \"max_knee_angle_deg\": 177.76,\n \"min_hip_angle_deg\": 88.95,\n \"max_hip_angle_deg\": 155.15,\n \"hip_depth_delta\": -0.0444,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.23,\n \"knee_valgus_proxy\": 0.1405,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.323,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.62,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.61,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 0.4,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.0019,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0086,\n \"min_knee_angle_deg\": 107.57,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 87.97,\n \"max_hip_angle_deg\": 156.16,\n \"hip_depth_delta\": -0.0457,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.72,\n \"knee_valgus_proxy\": 0.1715,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.357,\n \"hip_shift\": 0.0086,\n \"bottom_stability_score\": 0.61,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 1.78,\n \"top_pause_sec\": 0.77,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0119,\n \"min_knee_angle_deg\": 115.92,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 92.92,\n \"max_hip_angle_deg\": 151.75,\n \"hip_depth_delta\": -0.0527,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.88,\n \"knee_valgus_proxy\": 0.1751,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.412,\n \"hip_shift\": 0.0119,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.67,\n \"symmetry_score\": 0.52,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 2.05,\n \"top_pause_sec\": 0.97,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.002,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.007,\n \"min_knee_angle_deg\": 121.18,\n \"max_knee_angle_deg\": 178.76,\n \"min_hip_angle_deg\": 96.18,\n \"max_hip_angle_deg\": 155.38,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.53,\n \"knee_valgus_proxy\": 0.1945,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.388,\n \"hip_shift\": 0.007,\n \"bottom_stability_score\": 0.67,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.3,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.49,\n \"metrics\": {\n \"rep_duration_sec\": 2.3,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.88,\n \"top_pause_sec\": 0.47,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0081,\n \"min_knee_angle_deg\": 119.09,\n \"max_knee_angle_deg\": 177.01,\n \"min_hip_angle_deg\": 94.4,\n \"max_hip_angle_deg\": 154.05,\n \"hip_depth_delta\": -0.0485,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.32,\n \"knee_valgus_proxy\": 0.1665,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.37,\n \"hip_shift\": 0.0081,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.48,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.47,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.91,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0078,\n \"min_knee_angle_deg\": 120.94,\n \"max_knee_angle_deg\": 176.79,\n \"min_hip_angle_deg\": 100.11,\n \"max_hip_angle_deg\": 155.16,\n \"hip_depth_delta\": -0.0659,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.1,\n \"knee_valgus_proxy\": 0.1679,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.36,\n \"hip_shift\": 0.0078,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.71,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.68,\n \"top_pause_sec\": 1.0,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0069,\n \"min_knee_angle_deg\": 113.47,\n \"max_knee_angle_deg\": 176.36,\n \"min_hip_angle_deg\": 99.22,\n \"max_hip_angle_deg\": 155.04,\n \"hip_depth_delta\": -0.0645,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.7,\n \"knee_valgus_proxy\": 0.1556,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.338,\n \"hip_shift\": 0.0069,\n \"bottom_stability_score\": 0.71,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.45,\n \"stability_score\": 0.74,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.79,\n \"top_pause_sec\": 0.87,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0134,\n \"min_knee_angle_deg\": 127.14,\n \"max_knee_angle_deg\": 178.05,\n \"min_hip_angle_deg\": 102.47,\n \"max_hip_angle_deg\": 154.25,\n \"hip_depth_delta\": -0.0718,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.11,\n \"knee_valgus_proxy\": 0.1995,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.372,\n \"hip_shift\": 0.0134,\n \"bottom_stability_score\": 0.74,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.72,\n \"symmetry_score\": 0.7,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.0,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0073,\n \"min_knee_angle_deg\": 117.08,\n \"max_knee_angle_deg\": 179.14,\n \"min_hip_angle_deg\": 92.36,\n \"max_hip_angle_deg\": 155.39,\n \"hip_depth_delta\": -0.0494,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.13,\n \"knee_valgus_proxy\": 0.2167,\n \"knee_tracking_score\": 0.78,\n \"stance_width_ratio\": 1.403,\n \"hip_shift\": 0.0073,\n \"bottom_stability_score\": 0.72,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.33,\n \"range_of_motion_score\": 0.61,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.63,\n \"metrics\": {\n \"rep_duration_sec\": 2.33,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.33,\n \"top_pause_sec\": 0.53,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 113.08,\n \"max_knee_angle_deg\": 178.58,\n \"min_hip_angle_deg\": 94.09,\n \"max_hip_angle_deg\": 152.83,\n \"hip_depth_delta\": -0.0549,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.38,\n \"knee_valgus_proxy\": 0.1825,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.352,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.63,\n \"stability_score\": 0.7,\n \"symmetry_score\": 0.64,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.68,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0051,\n \"min_knee_angle_deg\": 107.03,\n \"max_knee_angle_deg\": 178.0,\n \"min_hip_angle_deg\": 88.29,\n \"max_hip_angle_deg\": 156.04,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.68,\n \"knee_valgus_proxy\": 0.1974,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0051,\n \"bottom_stability_score\": 0.7,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.69,\n \"symmetry_score\": 0.68,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.57,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.24,\n \"top_pause_sec\": 0.73,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0047,\n \"min_knee_angle_deg\": 115.32,\n \"max_knee_angle_deg\": 178.25,\n \"min_hip_angle_deg\": 91.41,\n \"max_hip_angle_deg\": 152.66,\n \"hip_depth_delta\": -0.0526,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.91,\n \"knee_valgus_proxy\": 0.1918,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.364,\n \"hip_shift\": 0.0047,\n \"bottom_stability_score\": 0.69,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.73,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.63,\n \"tempo_ratio\": 2.43,\n \"top_pause_sec\": 0.8,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0015,\n \"landmark_confidence\": 0.88,\n \"hip_lateral_drift\": 0.0057,\n \"min_knee_angle_deg\": 122.57,\n \"max_knee_angle_deg\": 176.95,\n \"min_hip_angle_deg\": 102.68,\n \"max_hip_angle_deg\": 152.65,\n \"hip_depth_delta\": -0.0673,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.49,\n \"knee_valgus_proxy\": 0.21,\n \"knee_tracking_score\": 0.79,\n \"stance_width_ratio\": 1.419,\n \"hip_shift\": 0.0057,\n \"bottom_stability_score\": 0.73,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 22\n },\n \"issues\": [\n {\n \"rep_id\": 1,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.56,\n \"start_frame\": 31,\n \"end_frame\": 45,\n \"start_sec\": 1.033,\n \"end_sec\": 1.5,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.53,\n \"peak_frame\": 31,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0475,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 2,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 95,\n \"end_frame\": 109,\n \"start_sec\": 3.167,\n \"end_sec\": 3.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0634,\n \"threshold\": -0.03,\n \"confidence\": 0.56,\n \"peak_frame\": 95,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0526,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 3,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.45,\n \"start_frame\": 168,\n \"end_frame\": 174,\n \"start_sec\": 5.6,\n \"end_sec\": 5.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 174,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0444,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 225,\n \"end_frame\": 229,\n \"start_sec\": 7.5,\n \"end_sec\": 7.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0623,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 225,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.55,\n \"start_frame\": 237,\n \"end_frame\": 241,\n \"start_sec\": 7.9,\n \"end_sec\": 8.033,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0741,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 241,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0493,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 289,\n \"end_frame\": 294,\n \"start_sec\": 9.633,\n \"end_sec\": 9.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0711,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 289,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0494,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 299,\n \"end_frame\": 304,\n \"start_sec\": 9.967,\n \"end_sec\": 10.133,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0616,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 303,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0496,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.39,\n \"start_frame\": 356,\n \"end_frame\": 371,\n \"start_sec\": 11.867,\n \"end_sec\": 12.367,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 371,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0421,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.31,\n \"start_frame\": 422,\n \"end_frame\": 427,\n \"start_sec\": 14.067,\n \"end_sec\": 14.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.055,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 422,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0394,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.4,\n \"start_frame\": 433,\n \"end_frame\": 439,\n \"start_sec\": 14.433,\n \"end_sec\": 14.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 439,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0425,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 8,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.68,\n \"start_frame\": 490,\n \"end_frame\": 508,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 9,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.46,\n \"start_frame\": 560,\n \"end_frame\": 577,\n \"start_sec\": 18.667,\n \"end_sec\": 19.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0618,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 576,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0445,\n \"supporting_frames\": 18\n }\n },\n {\n \"rep_id\": 10,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.8,\n \"start_frame\": 633,\n \"end_frame\": 648,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 695,\n \"end_frame\": 702,\n \"start_sec\": 23.167,\n \"end_sec\": 23.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0676,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 695,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0462,\n \"supporting_frames\": 8,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.65,\n \"start_frame\": 711,\n \"end_frame\": 716,\n \"start_sec\": 23.7,\n \"end_sec\": 23.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0661,\n \"threshold\": -0.03,\n \"confidence\": 0.62,\n \"peak_frame\": 715,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0531,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.41,\n \"start_frame\": 768,\n \"end_frame\": 776,\n \"start_sec\": 25.6,\n \"end_sec\": 25.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.54,\n \"peak_frame\": 768,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0429,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 780,\n \"end_frame\": 789,\n \"start_sec\": 26.0,\n \"end_sec\": 26.3,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0655,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 787,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0529,\n \"supporting_frames\": 10,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.5,\n \"start_frame\": 834,\n \"end_frame\": 839,\n \"start_sec\": 27.8,\n \"end_sec\": 27.967,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0658,\n \"threshold\": -0.03,\n \"confidence\": 0.57,\n \"peak_frame\": 834,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 6\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 848,\n \"end_frame\": 852,\n \"start_sec\": 28.267,\n \"end_sec\": 28.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0605,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 851,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0508,\n \"supporting_frames\": 5\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 900,\n \"end_frame\": 906,\n \"start_sec\": 30.0,\n \"end_sec\": 30.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0647,\n \"threshold\": -0.03,\n \"confidence\": 0.6,\n \"peak_frame\": 900,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0509,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 910,\n \"end_frame\": 918,\n \"start_sec\": 30.333,\n \"end_sec\": 30.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.61,\n \"peak_frame\": 916,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0542,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 15,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.82,\n \"start_frame\": 967,\n \"end_frame\": 984,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 15,\n \"severity\": 0.82,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 10,\n \"severity\": 0.8,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 8,\n \"severity\": 0.68,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"The pipeline segmented 15 squat reps from the current pose stream. Exercise routing, variation labeling, and coaching language may still use lightweight rules or placeholders. The detected variation is `wide_squat_stance`. The strongest frame-level marker is `shallow_depth`, with timestamps and metric evidence in the issue timeline.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Current mock classifier confidence placeholder: 100%.\",\n \"Rep segmentation can run on real pose, but downstream interpretation is still partially mocked.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260611T151039Z-e9650001", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 22, "variation": "wide_squat_stance"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"push_up\",\n \"confidence\": 0.92,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"push_up\",\n \"detected_variation\": \"wide_grip_push_up\",\n \"variation_confidence\": 0.84,\n \"not_issues\": [\n \"wide_hand_placement\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 5,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.83,\n \"avg_stability_score\": 0.81,\n \"avg_symmetry_score\": 0.88,\n \"pose_valid_ratio\": 1.0,\n \"mock\": true\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 2.0,\n \"range_of_motion_score\": 0.88,\n \"stability_score\": 0.86,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"min_elbow_angle_deg\": 89,\n \"body_line_score\": 0.9,\n \"hip_sag_score\": 0.18,\n \"hand_width_ratio\": 1.42\n },\n \"variation_hints\": [\n \"wide_grip_push_up\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.0,\n \"range_of_motion_score\": 0.88,\n \"stability_score\": 0.86,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"min_elbow_angle_deg\": 90,\n \"body_line_score\": 0.9,\n \"hip_sag_score\": 0.18,\n \"hand_width_ratio\": 1.42\n },\n \"variation_hints\": [\n \"wide_grip_push_up\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.0,\n \"range_of_motion_score\": 0.88,\n \"stability_score\": 0.86,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"min_elbow_angle_deg\": 91,\n \"body_line_score\": 0.9,\n \"hip_sag_score\": 0.18,\n \"hand_width_ratio\": 1.42\n },\n \"variation_hints\": [\n \"wide_grip_push_up\"\n ]\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.0,\n \"range_of_motion_score\": 0.8,\n \"stability_score\": 0.78,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"min_elbow_angle_deg\": 92,\n \"body_line_score\": 0.82,\n \"hip_sag_score\": 0.26,\n \"hand_width_ratio\": 1.42\n },\n \"variation_hints\": [\n \"wide_grip_push_up\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.0,\n \"range_of_motion_score\": 0.72,\n \"stability_score\": 0.7,\n \"symmetry_score\": 0.82,\n \"metrics\": {\n \"min_elbow_angle_deg\": 93,\n \"body_line_score\": 0.74,\n \"hip_sag_score\": 0.34,\n \"hand_width_ratio\": 1.42\n },\n \"variation_hints\": [\n \"wide_grip_push_up\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"hip_sag\": 1\n },\n \"issues\": [\n {\n \"rep_id\": 5,\n \"issue\": \"hip_sag\",\n \"severity\": 0.3,\n \"start_frame\": 300,\n \"end_frame\": 330,\n \"start_sec\": 10.0,\n \"end_sec\": 11.0,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_shoulder\",\n \"right_shoulder\"\n ],\n \"evidence\": {\n \"body_line_score\": 0.74,\n \"threshold\": 0.8,\n \"variation\": \"wide_grip_push_up\"\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"hip_sag\",\n \"rep_id\": 5,\n \"severity\": 0.3,\n \"start_sec\": 10.0,\n \"end_sec\": 11.0,\n \"evidence\": {\n \"body_line_score\": 0.74,\n \"threshold\": 0.8,\n \"variation\": \"wide_grip_push_up\"\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Keep shoulders, hips, and ankles moving as one line.\",\n \"Reduce speed if body line drops on later reps.\",\n \"Acknowledge the wide-grip setup without asking the athlete to normalize it unless another issue requires it.\",\n \"Explain whether the body line stayed organized across the set before suggesting fixes.\",\n \"If `hip_sag` or `incomplete_depth` appears, keep corrections specific to those labels.\",\n \"Keep next-session advice simple and repeatable for the current goal.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:push_up\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"push_up\"\n ],\n \"title\": \"Push-up\",\n \"summary\": \"A push-up summary should explain body-line control, bottom depth, and rep consistency from structured evidence, while recognizing valid regressions and grip variations.\",\n \"evidence_rules\": [\n \"Treat hand placement or knee support as variation context when the variation detector marks them as not-issues.\",\n \"Do not infer pain, fatigue causes, or joint pathology from the movement.\",\n \"Use only the detected issue labels for correction language.\"\n ],\n \"coaching_points\": [\n \"Explain whether the body line stayed organized across the set before suggesting fixes.\",\n \"If `hip_sag` or `incomplete_depth` appears, keep corrections specific to those labels.\",\n \"Keep next-session advice simple and repeatable for the current goal.\"\n ],\n \"allowed_interpretations\": [\n \"Primary effort often involves chest, shoulders, and triceps, but the summary should still stay grounded in the measured rep evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"variation:wide_grip_push_up\",\n \"variation:knee_push_up\",\n \"issue:hip_sag\",\n \"issue:incomplete_depth\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"variation:wide_grip_push_up\",\n \"card_type\": \"variation\",\n \"labels\": [\n \"wide_grip_push_up\",\n \"wide_hand_placement\"\n ],\n \"title\": \"Wide-Grip Push-up\",\n \"summary\": \"A wide-grip push-up is a valid push-up variation when detected by the variation step.\",\n \"evidence_rules\": [\n \"If `wide_hand_placement` appears in not_issues, treat hand width as context, not a fault.\"\n ],\n \"coaching_points\": [\n \"Acknowledge the wide-grip setup without asking the athlete to normalize it unless another issue requires it.\"\n ],\n \"allowed_interpretations\": [\n \"Variation, not automatically an issue.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"issue:hip_sag\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"hip_sag\"\n ],\n \"title\": \"Hip Sag\",\n \"summary\": \"The push-up body line dropped below the body-line threshold across a sustained interval.\",\n \"evidence_rules\": [\n \"Only mention this issue when `hip_sag` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Keep shoulders, hips, and ankles moving as one line.\",\n \"Reduce speed if body line drops on later reps.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:push_up:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"push_up:beginner_practice\"\n ],\n \"title\": \"Push-up Beginner Overlay\",\n \"summary\": \"For beginner-practice push-ups, prioritize body-line control and simple repeatable cues.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Keep push-up corrections to one or two cues that the athlete can repeat next set.\",\n \"Treat valid regressions or grip variations as context, not failure.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"You completed 5 mocked push_up reps. The detected variation is `wide_grip_push_up`. The main mocked finding is `hip_sag`, mostly appearing in later reps. This feedback is practice-oriented and based on structured mock metrics.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Exercise classifier confidence: 92%.\",\n \"This is mock output; replace step implementations before using as real coaching.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260610T121752Z-a3ee9179", "exercise": "push_up", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 1, "variation": "wide_grip_push_up"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9395,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.55,\n \"avg_stability_score\": 0.0,\n \"avg_symmetry_score\": 0.93,\n \"avg_rep_duration_sec\": 2.06,\n \"avg_tempo_consistency_score\": 0.9267,\n \"avg_landmark_confidence\": 0.99,\n \"fatigue_trend_rom_delta\": 0.0,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.5654,\n \"avg_bottom_pause_sec\": 2.0893\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 2.57,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.95,\n \"metrics\": {\n \"rep_duration_sec\": 2.57,\n \"eccentric_duration_sec\": 1.57,\n \"concentric_duration_sec\": 1.0,\n \"tempo_ratio\": 1.57,\n \"top_pause_sec\": 2.6,\n \"bottom_pause_sec\": 2.6,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 78.49,\n \"max_knee_angle_deg\": 160.36,\n \"min_hip_angle_deg\": 76.34,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.6943,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 33.73,\n \"knee_valgus_proxy\": 0.0569,\n \"knee_tracking_score\": 0.94,\n \"stance_width_ratio\": 1.381,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.75\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.43,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 2.43,\n \"eccentric_duration_sec\": 1.33,\n \"concentric_duration_sec\": 1.1,\n \"tempo_ratio\": 1.21,\n \"top_pause_sec\": 2.47,\n \"bottom_pause_sec\": 2.47,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 89.95,\n \"max_knee_angle_deg\": 155.97,\n \"min_hip_angle_deg\": 81.29,\n \"max_hip_angle_deg\": 163.73,\n \"hip_depth_delta\": -0.703,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 39.0,\n \"knee_valgus_proxy\": 0.0853,\n \"knee_tracking_score\": 0.91,\n \"stance_width_ratio\": 1.574,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.92,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.17,\n \"concentric_duration_sec\": 1.0,\n \"tempo_ratio\": 1.17,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 92.17,\n \"max_knee_angle_deg\": 156.52,\n \"min_hip_angle_deg\": 83.3,\n \"max_hip_angle_deg\": 164.57,\n \"hip_depth_delta\": -0.7216,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 38.74,\n \"knee_valgus_proxy\": 0.1152,\n \"knee_tracking_score\": 0.88,\n \"stance_width_ratio\": 1.573,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 1.9,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 1.9,\n \"eccentric_duration_sec\": 1.0,\n \"concentric_duration_sec\": 0.9,\n \"tempo_ratio\": 1.11,\n \"top_pause_sec\": 1.93,\n \"bottom_pause_sec\": 1.93,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 87.88,\n \"max_knee_angle_deg\": 156.53,\n \"min_hip_angle_deg\": 83.03,\n \"max_hip_angle_deg\": 164.57,\n \"hip_depth_delta\": -0.6919,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 35.5,\n \"knee_valgus_proxy\": 0.0801,\n \"knee_tracking_score\": 0.92,\n \"stance_width_ratio\": 1.567,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.94,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.1,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.18,\n \"top_pause_sec\": 2.07,\n \"bottom_pause_sec\": 2.07,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 83.4,\n \"max_knee_angle_deg\": 156.18,\n \"min_hip_angle_deg\": 79.63,\n \"max_hip_angle_deg\": 164.79,\n \"hip_depth_delta\": -0.6853,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 36.08,\n \"knee_valgus_proxy\": 0.0902,\n \"knee_tracking_score\": 0.91,\n \"stance_width_ratio\": 1.575,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 1.93,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.92,\n \"metrics\": {\n \"rep_duration_sec\": 1.93,\n \"eccentric_duration_sec\": 1.0,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.08,\n \"top_pause_sec\": 1.97,\n \"bottom_pause_sec\": 1.97,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 81.33,\n \"max_knee_angle_deg\": 156.08,\n \"min_hip_angle_deg\": 82.34,\n \"max_hip_angle_deg\": 164.79,\n \"hip_depth_delta\": -0.6659,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 31.89,\n \"knee_valgus_proxy\": 0.0723,\n \"knee_tracking_score\": 0.93,\n \"stance_width_ratio\": 1.594,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 1.97,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.94,\n \"metrics\": {\n \"rep_duration_sec\": 1.97,\n \"eccentric_duration_sec\": 1.03,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.11,\n \"top_pause_sec\": 2.0,\n \"bottom_pause_sec\": 2.0,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 80.91,\n \"max_knee_angle_deg\": 157.61,\n \"min_hip_angle_deg\": 83.77,\n \"max_hip_angle_deg\": 164.51,\n \"hip_depth_delta\": -0.6662,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 30.8,\n \"knee_valgus_proxy\": 0.0622,\n \"knee_tracking_score\": 0.94,\n \"stance_width_ratio\": 1.589,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.94,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.13,\n \"concentric_duration_sec\": 0.9,\n \"tempo_ratio\": 1.26,\n \"top_pause_sec\": 2.07,\n \"bottom_pause_sec\": 2.07,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 79.65,\n \"max_knee_angle_deg\": 157.55,\n \"min_hip_angle_deg\": 80.63,\n \"max_hip_angle_deg\": 164.45,\n \"hip_depth_delta\": -0.6735,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 31.62,\n \"knee_valgus_proxy\": 0.064,\n \"knee_tracking_score\": 0.94,\n \"stance_width_ratio\": 1.562,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.17,\n \"concentric_duration_sec\": 1.0,\n \"tempo_ratio\": 1.17,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 83.08,\n \"max_knee_angle_deg\": 156.02,\n \"min_hip_angle_deg\": 78.41,\n \"max_hip_angle_deg\": 164.05,\n \"hip_depth_delta\": -0.6717,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 35.81,\n \"knee_valgus_proxy\": 0.0987,\n \"knee_tracking_score\": 0.9,\n \"stance_width_ratio\": 1.59,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 1.93,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 1.93,\n \"eccentric_duration_sec\": 1.03,\n \"concentric_duration_sec\": 0.9,\n \"tempo_ratio\": 1.14,\n \"top_pause_sec\": 1.97,\n \"bottom_pause_sec\": 1.97,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 86.37,\n \"max_knee_angle_deg\": 155.54,\n \"min_hip_angle_deg\": 87.82,\n \"max_hip_angle_deg\": 164.18,\n \"hip_depth_delta\": -0.6879,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 31.54,\n \"knee_valgus_proxy\": 0.0736,\n \"knee_tracking_score\": 0.93,\n \"stance_width_ratio\": 1.57,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 1.97,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 1.97,\n \"eccentric_duration_sec\": 1.0,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.03,\n \"top_pause_sec\": 2.0,\n \"bottom_pause_sec\": 2.0,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 83.0,\n \"max_knee_angle_deg\": 156.4,\n \"min_hip_angle_deg\": 76.36,\n \"max_hip_angle_deg\": 163.91,\n \"hip_depth_delta\": -0.6805,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 37.87,\n \"knee_valgus_proxy\": 0.0712,\n \"knee_tracking_score\": 0.93,\n \"stance_width_ratio\": 1.57,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 1.97,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.93,\n \"metrics\": {\n \"rep_duration_sec\": 1.97,\n \"eccentric_duration_sec\": 1.03,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.11,\n \"top_pause_sec\": 2.0,\n \"bottom_pause_sec\": 2.0,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 80.67,\n \"max_knee_angle_deg\": 156.44,\n \"min_hip_angle_deg\": 82.89,\n \"max_hip_angle_deg\": 164.26,\n \"hip_depth_delta\": -0.6825,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 31.84,\n \"knee_valgus_proxy\": 0.0737,\n \"knee_tracking_score\": 0.93,\n \"stance_width_ratio\": 1.584,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 1.9,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.91,\n \"metrics\": {\n \"rep_duration_sec\": 1.9,\n \"eccentric_duration_sec\": 0.93,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 0.96,\n \"top_pause_sec\": 1.93,\n \"bottom_pause_sec\": 1.93,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 90.1,\n \"max_knee_angle_deg\": 156.46,\n \"min_hip_angle_deg\": 86.63,\n \"max_hip_angle_deg\": 164.26,\n \"hip_depth_delta\": -0.7081,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 36.69,\n \"knee_valgus_proxy\": 0.0778,\n \"knee_tracking_score\": 0.92,\n \"stance_width_ratio\": 1.589,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.07,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.91,\n \"metrics\": {\n \"rep_duration_sec\": 2.07,\n \"eccentric_duration_sec\": 1.03,\n \"concentric_duration_sec\": 1.03,\n \"tempo_ratio\": 1.0,\n \"top_pause_sec\": 2.1,\n \"bottom_pause_sec\": 2.1,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 82.45,\n \"max_knee_angle_deg\": 157.33,\n \"min_hip_angle_deg\": 77.56,\n \"max_hip_angle_deg\": 164.25,\n \"hip_depth_delta\": -0.6933,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 38.69,\n \"knee_valgus_proxy\": 0.0773,\n \"knee_tracking_score\": 0.92,\n \"stance_width_ratio\": 1.569,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 1.8,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.94,\n \"metrics\": {\n \"rep_duration_sec\": 1.8,\n \"eccentric_duration_sec\": 0.87,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 0.94,\n \"top_pause_sec\": 1.83,\n \"bottom_pause_sec\": 1.83,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.99,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 91.91,\n \"max_knee_angle_deg\": 157.33,\n \"min_hip_angle_deg\": 89.0,\n \"max_hip_angle_deg\": 164.28,\n \"hip_depth_delta\": -0.7082,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 35.36,\n \"knee_valgus_proxy\": 0.0973,\n \"knee_tracking_score\": 0.9,\n \"stance_width_ratio\": 1.594,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.88\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 3\n },\n \"issues\": [\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 233,\n \"end_frame\": 238,\n \"start_sec\": 7.767,\n \"end_sec\": 7.934,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.7994,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 233,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7963,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 353,\n \"end_frame\": 358,\n \"start_sec\": 11.767,\n \"end_sec\": 11.934,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.7835,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 353,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7798,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 391,\n \"end_frame\": 397,\n \"start_sec\": 13.034,\n \"end_sec\": 13.234,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.7548,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 391,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7588,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.767,\n \"end_sec\": 7.934,\n \"evidence\": {\n \"hip_depth_delta\": -0.7994,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 233,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7963,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 6,\n \"severity\": 1.0,\n \"start_sec\": 11.767,\n \"end_sec\": 11.934,\n \"evidence\": {\n \"hip_depth_delta\": -0.7835,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 353,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7798,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 6,\n \"severity\": 1.0,\n \"start_sec\": 13.034,\n \"end_sec\": 13.234,\n \"evidence\": {\n \"hip_depth_delta\": -0.7548,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 391,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7588,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"This grounded summary is based on structured artifacts for `squat` rather than direct video interpretation. The highest-priority issue labels were `shallow_depth`. The detected variation was `pause_squat`.\",\n \"what_you_did\": [\n \"You completed 15 detected `squat` reps with the variation labeled as `pause_squat`.\",\n \"Your selected training goal was `beginner_practice`.\"\n ],\n \"what_looked_good\": [\n \"Range of motion showed room to tighten up overall (55%).\",\n \"Rep stability showed room to tighten up overall (0%).\",\n \"Left-right symmetry looked steady overall (93%).\"\n ],\n \"what_changed_across_reps\": [\n \"Rep-to-rep range stayed fairly stable across the set.\"\n ],\n \"valid_variation_vs_issue\": [\n \"The detected variation was `pause_squat`, so it should be treated as context rather than a fault by default.\",\n \"The variation step marked `bottom_pause`, `low_rom_requires_user_intent_check` as not-issue context.\",\n \"The actual issue markers in this set were `shallow_depth`.\"\n ],\n \"top_fixes\": [\n \"Sit slightly deeper before standing up.\"\n ],\n \"next_session_plan\": [\n \"Start with 1 easy set of controlled reps using the same camera angle.\",\n \"Keep your top focus on `shallow_depth`.\",\n \"Compare the next run against this report to see whether the same labels show up again.\"\n ],\n \"confidence_notes\": [\n \"This summary stays grounded to the current JSON evidence and may miss details outside that evidence.\",\n \"Fallback summary was used because the generated summary did not pass verification: Hugging Face chat completion and text generation both failed: chat=(Request ID: Root=1-6a2fb475-133f93c60471703011a41db9;c13a04bc-16a6-431f-abfa-0d7938a244ac)\\n\\n403 Forbidden: This authentication method does not have sufficient permissions to call Inference Providers on behalf of user tiena2cva.\\nCannot access content at: https://router.huggingface.co/v1/chat/completions.\\nMake sure your token has the correct permissions.; text_generation=\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260615T081404Z-1d79ac25", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 3, "variation": "pause_squat"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.92,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"normal_squat_stance\",\n \"variation_confidence\": 0.62,\n \"not_issues\": [\n \"low_pose_confidence_limits_variation_call\",\n \"low_rom_requires_user_intent_check\",\n \"stance_width_unverified\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 0,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.0,\n \"avg_stability_score\": 0.0,\n \"avg_symmetry_score\": 0.0,\n \"avg_rep_duration_sec\": 0.0,\n \"avg_tempo_consistency_score\": 0.0,\n \"avg_landmark_confidence\": 0.0,\n \"fatigue_trend_rom_delta\": 0.0,\n \"pose_valid_ratio\": 0.0\n },\n \"rep_metrics\": []\n },\n \"issue_summary\": {\n \"issue_counts\": {},\n \"issues\": [],\n \"top_issue_intervals\": []\n },\n \"priority_cues\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\",\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"The pipeline segmented 0 squat reps from the current pose stream. Exercise routing, variation labeling, and coaching language may still use lightweight rules or placeholders. The detected variation is `normal_squat_stance`. The frame-level issue rules did not find a sustained threshold violation.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Current mock classifier confidence placeholder: 92%.\",\n \"Rep segmentation can run on real pose, but downstream interpretation is still partially mocked.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260611T141304Z-8b5d36b1", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 0, "variation": "normal_squat_stance"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9998,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.57,\n \"avg_stability_score\": 0.68,\n \"avg_symmetry_score\": 0.56,\n \"avg_rep_duration_sec\": 2.2,\n \"avg_tempo_consistency_score\": 0.9453,\n \"avg_landmark_confidence\": 0.9173,\n \"fatigue_trend_rom_delta\": -0.1,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3752,\n \"avg_bottom_pause_sec\": 0.278\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.46,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 1.2,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.11,\n \"top_pause_sec\": 0.6,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0094,\n \"min_knee_angle_deg\": 115.91,\n \"max_knee_angle_deg\": 177.98,\n \"min_hip_angle_deg\": 98.12,\n \"max_hip_angle_deg\": 153.15,\n \"hip_depth_delta\": -0.0548,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.14,\n \"knee_valgus_proxy\": 0.1648,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.44,\n \"hip_shift\": 0.0094,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.8\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.13,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.13,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.6,\n \"tempo_ratio\": 2.55,\n \"top_pause_sec\": 0.93,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0082,\n \"min_knee_angle_deg\": 122.92,\n \"max_knee_angle_deg\": 174.7,\n \"min_hip_angle_deg\": 103.24,\n \"max_hip_angle_deg\": 155.66,\n \"hip_depth_delta\": -0.0581,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.67,\n \"knee_valgus_proxy\": 0.1742,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.38,\n \"hip_shift\": 0.0082,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.62,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.95,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 108.84,\n \"max_knee_angle_deg\": 177.76,\n \"min_hip_angle_deg\": 88.95,\n \"max_hip_angle_deg\": 155.15,\n \"hip_depth_delta\": -0.0444,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.23,\n \"knee_valgus_proxy\": 0.1405,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.323,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.62,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.61,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 0.4,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.0019,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0086,\n \"min_knee_angle_deg\": 107.57,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 87.97,\n \"max_hip_angle_deg\": 156.16,\n \"hip_depth_delta\": -0.0457,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.72,\n \"knee_valgus_proxy\": 0.1715,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.357,\n \"hip_shift\": 0.0086,\n \"bottom_stability_score\": 0.61,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 1.78,\n \"top_pause_sec\": 0.77,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0119,\n \"min_knee_angle_deg\": 115.92,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 92.92,\n \"max_hip_angle_deg\": 151.75,\n \"hip_depth_delta\": -0.0527,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.88,\n \"knee_valgus_proxy\": 0.1751,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.412,\n \"hip_shift\": 0.0119,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.67,\n \"symmetry_score\": 0.52,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 2.05,\n \"top_pause_sec\": 0.97,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.002,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.007,\n \"min_knee_angle_deg\": 121.18,\n \"max_knee_angle_deg\": 178.76,\n \"min_hip_angle_deg\": 96.18,\n \"max_hip_angle_deg\": 155.38,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.53,\n \"knee_valgus_proxy\": 0.1945,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.388,\n \"hip_shift\": 0.007,\n \"bottom_stability_score\": 0.67,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.3,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.49,\n \"metrics\": {\n \"rep_duration_sec\": 2.3,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.88,\n \"top_pause_sec\": 0.47,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0081,\n \"min_knee_angle_deg\": 119.09,\n \"max_knee_angle_deg\": 177.01,\n \"min_hip_angle_deg\": 94.4,\n \"max_hip_angle_deg\": 154.05,\n \"hip_depth_delta\": -0.0485,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.32,\n \"knee_valgus_proxy\": 0.1665,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.37,\n \"hip_shift\": 0.0081,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.48,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.47,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.91,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0078,\n \"min_knee_angle_deg\": 120.94,\n \"max_knee_angle_deg\": 176.79,\n \"min_hip_angle_deg\": 100.11,\n \"max_hip_angle_deg\": 155.16,\n \"hip_depth_delta\": -0.0659,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.1,\n \"knee_valgus_proxy\": 0.1679,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.36,\n \"hip_shift\": 0.0078,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.71,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.68,\n \"top_pause_sec\": 1.0,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0069,\n \"min_knee_angle_deg\": 113.47,\n \"max_knee_angle_deg\": 176.36,\n \"min_hip_angle_deg\": 99.22,\n \"max_hip_angle_deg\": 155.04,\n \"hip_depth_delta\": -0.0645,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.7,\n \"knee_valgus_proxy\": 0.1556,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.338,\n \"hip_shift\": 0.0069,\n \"bottom_stability_score\": 0.71,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.45,\n \"stability_score\": 0.74,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.79,\n \"top_pause_sec\": 0.87,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0134,\n \"min_knee_angle_deg\": 127.14,\n \"max_knee_angle_deg\": 178.05,\n \"min_hip_angle_deg\": 102.47,\n \"max_hip_angle_deg\": 154.25,\n \"hip_depth_delta\": -0.0718,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.11,\n \"knee_valgus_proxy\": 0.1995,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.372,\n \"hip_shift\": 0.0134,\n \"bottom_stability_score\": 0.74,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.72,\n \"symmetry_score\": 0.7,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.0,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0073,\n \"min_knee_angle_deg\": 117.08,\n \"max_knee_angle_deg\": 179.14,\n \"min_hip_angle_deg\": 92.36,\n \"max_hip_angle_deg\": 155.39,\n \"hip_depth_delta\": -0.0494,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.13,\n \"knee_valgus_proxy\": 0.2167,\n \"knee_tracking_score\": 0.78,\n \"stance_width_ratio\": 1.403,\n \"hip_shift\": 0.0073,\n \"bottom_stability_score\": 0.72,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.33,\n \"range_of_motion_score\": 0.61,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.63,\n \"metrics\": {\n \"rep_duration_sec\": 2.33,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.33,\n \"top_pause_sec\": 0.53,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 113.08,\n \"max_knee_angle_deg\": 178.58,\n \"min_hip_angle_deg\": 94.09,\n \"max_hip_angle_deg\": 152.83,\n \"hip_depth_delta\": -0.0549,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.38,\n \"knee_valgus_proxy\": 0.1825,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.352,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.63,\n \"stability_score\": 0.7,\n \"symmetry_score\": 0.64,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.68,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0051,\n \"min_knee_angle_deg\": 107.03,\n \"max_knee_angle_deg\": 178.0,\n \"min_hip_angle_deg\": 88.29,\n \"max_hip_angle_deg\": 156.04,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.68,\n \"knee_valgus_proxy\": 0.1974,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0051,\n \"bottom_stability_score\": 0.7,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.69,\n \"symmetry_score\": 0.68,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.57,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.24,\n \"top_pause_sec\": 0.73,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0047,\n \"min_knee_angle_deg\": 115.32,\n \"max_knee_angle_deg\": 178.25,\n \"min_hip_angle_deg\": 91.41,\n \"max_hip_angle_deg\": 152.66,\n \"hip_depth_delta\": -0.0526,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.91,\n \"knee_valgus_proxy\": 0.1918,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.364,\n \"hip_shift\": 0.0047,\n \"bottom_stability_score\": 0.69,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.73,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.63,\n \"tempo_ratio\": 2.43,\n \"top_pause_sec\": 0.8,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0015,\n \"landmark_confidence\": 0.88,\n \"hip_lateral_drift\": 0.0057,\n \"min_knee_angle_deg\": 122.57,\n \"max_knee_angle_deg\": 176.95,\n \"min_hip_angle_deg\": 102.68,\n \"max_hip_angle_deg\": 152.65,\n \"hip_depth_delta\": -0.0673,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.49,\n \"knee_valgus_proxy\": 0.21,\n \"knee_tracking_score\": 0.79,\n \"stance_width_ratio\": 1.419,\n \"hip_shift\": 0.0057,\n \"bottom_stability_score\": 0.73,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 22\n },\n \"issues\": [\n {\n \"rep_id\": 1,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.56,\n \"start_frame\": 31,\n \"end_frame\": 45,\n \"start_sec\": 1.033,\n \"end_sec\": 1.5,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.53,\n \"peak_frame\": 31,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0475,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 2,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 95,\n \"end_frame\": 109,\n \"start_sec\": 3.167,\n \"end_sec\": 3.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0634,\n \"threshold\": -0.03,\n \"confidence\": 0.56,\n \"peak_frame\": 95,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0526,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 3,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.45,\n \"start_frame\": 168,\n \"end_frame\": 174,\n \"start_sec\": 5.6,\n \"end_sec\": 5.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 174,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0444,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 225,\n \"end_frame\": 229,\n \"start_sec\": 7.5,\n \"end_sec\": 7.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0623,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 225,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.55,\n \"start_frame\": 237,\n \"end_frame\": 241,\n \"start_sec\": 7.9,\n \"end_sec\": 8.033,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0741,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 241,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0493,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 289,\n \"end_frame\": 294,\n \"start_sec\": 9.633,\n \"end_sec\": 9.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0711,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 289,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0494,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 299,\n \"end_frame\": 304,\n \"start_sec\": 9.967,\n \"end_sec\": 10.133,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0616,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 303,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0496,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.39,\n \"start_frame\": 356,\n \"end_frame\": 371,\n \"start_sec\": 11.867,\n \"end_sec\": 12.367,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 371,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0421,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.31,\n \"start_frame\": 422,\n \"end_frame\": 427,\n \"start_sec\": 14.067,\n \"end_sec\": 14.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.055,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 422,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0394,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.4,\n \"start_frame\": 433,\n \"end_frame\": 439,\n \"start_sec\": 14.433,\n \"end_sec\": 14.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 439,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0425,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 8,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.68,\n \"start_frame\": 490,\n \"end_frame\": 508,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 9,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.46,\n \"start_frame\": 560,\n \"end_frame\": 577,\n \"start_sec\": 18.667,\n \"end_sec\": 19.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0618,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 576,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0445,\n \"supporting_frames\": 18\n }\n },\n {\n \"rep_id\": 10,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.8,\n \"start_frame\": 633,\n \"end_frame\": 648,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 695,\n \"end_frame\": 702,\n \"start_sec\": 23.167,\n \"end_sec\": 23.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0676,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 695,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0462,\n \"supporting_frames\": 8,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.65,\n \"start_frame\": 711,\n \"end_frame\": 716,\n \"start_sec\": 23.7,\n \"end_sec\": 23.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0661,\n \"threshold\": -0.03,\n \"confidence\": 0.62,\n \"peak_frame\": 715,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0531,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.41,\n \"start_frame\": 768,\n \"end_frame\": 776,\n \"start_sec\": 25.6,\n \"end_sec\": 25.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.54,\n \"peak_frame\": 768,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0429,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 780,\n \"end_frame\": 789,\n \"start_sec\": 26.0,\n \"end_sec\": 26.3,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0655,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 787,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0529,\n \"supporting_frames\": 10,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.5,\n \"start_frame\": 834,\n \"end_frame\": 839,\n \"start_sec\": 27.8,\n \"end_sec\": 27.967,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0658,\n \"threshold\": -0.03,\n \"confidence\": 0.57,\n \"peak_frame\": 834,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 6\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 848,\n \"end_frame\": 852,\n \"start_sec\": 28.267,\n \"end_sec\": 28.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0605,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 851,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0508,\n \"supporting_frames\": 5\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 900,\n \"end_frame\": 906,\n \"start_sec\": 30.0,\n \"end_sec\": 30.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0647,\n \"threshold\": -0.03,\n \"confidence\": 0.6,\n \"peak_frame\": 900,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0509,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 910,\n \"end_frame\": 918,\n \"start_sec\": 30.333,\n \"end_sec\": 30.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.61,\n \"peak_frame\": 916,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0542,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 15,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.82,\n \"start_frame\": 967,\n \"end_frame\": 984,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 15,\n \"severity\": 0.82,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 10,\n \"severity\": 0.8,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 8,\n \"severity\": 0.68,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"The pipeline segmented 15 squat reps from the current pose stream. Exercise routing, variation labeling, and coaching language may still use lightweight rules or placeholders. The detected variation is `wide_squat_stance`. The strongest frame-level marker is `shallow_depth`, with timestamps and metric evidence in the issue timeline.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Current mock classifier confidence placeholder: 100%.\",\n \"Rep segmentation can run on real pose, but downstream interpretation is still partially mocked.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260611T154538Z-23089b9e", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 22, "variation": "wide_squat_stance"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9998,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.54,\n \"avg_stability_score\": 0.07,\n \"avg_symmetry_score\": 0.87,\n \"avg_rep_duration_sec\": 2.23,\n \"avg_tempo_consistency_score\": 0.91,\n \"avg_landmark_confidence\": 0.958,\n \"fatigue_trend_rom_delta\": -0.04,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3553,\n \"avg_bottom_pause_sec\": 2.2647\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.33,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.73,\n \"top_pause_sec\": 2.13,\n \"bottom_pause_sec\": 2.13,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0001,\n \"min_knee_angle_deg\": 96.19,\n \"max_knee_angle_deg\": 163.71,\n \"min_hip_angle_deg\": 85.24,\n \"max_hip_angle_deg\": 164.04,\n \"hip_depth_delta\": -0.6171,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 21.76,\n \"knee_valgus_proxy\": 0.1512,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.386,\n \"hip_shift\": 0.0001,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.65,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 99.1,\n \"max_knee_angle_deg\": 162.09,\n \"min_hip_angle_deg\": 84.93,\n \"max_hip_angle_deg\": 162.94,\n \"hip_depth_delta\": -0.6307,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 28.59,\n \"knee_valgus_proxy\": 0.1463,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.335,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.23,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.32,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 87.55,\n \"max_knee_angle_deg\": 162.39,\n \"min_hip_angle_deg\": 76.5,\n \"max_hip_angle_deg\": 162.61,\n \"hip_depth_delta\": -0.5711,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.66,\n \"knee_valgus_proxy\": 0.1076,\n \"knee_tracking_score\": 0.89,\n \"stance_width_ratio\": 1.315,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.85,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 90.33,\n \"max_knee_angle_deg\": 163.12,\n \"min_hip_angle_deg\": 82.42,\n \"max_hip_angle_deg\": 163.05,\n \"hip_depth_delta\": -0.5921,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.77,\n \"knee_valgus_proxy\": 0.1416,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.316,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 1.83,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 1.83,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.23,\n \"top_pause_sec\": 1.87,\n \"bottom_pause_sec\": 1.87,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.59,\n \"max_knee_angle_deg\": 160.43,\n \"min_hip_angle_deg\": 85.06,\n \"max_hip_angle_deg\": 161.07,\n \"hip_depth_delta\": -0.5894,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.31,\n \"knee_valgus_proxy\": 0.1537,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.418,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.08,\n \"symmetry_score\": 0.88,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.67,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.8,\n \"top_pause_sec\": 2.63,\n \"bottom_pause_sec\": 2.63,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.19,\n \"max_knee_angle_deg\": 162.37,\n \"min_hip_angle_deg\": 79.55,\n \"max_hip_angle_deg\": 161.19,\n \"hip_depth_delta\": -0.6127,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.92,\n \"knee_valgus_proxy\": 0.1704,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.378,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.08,\n \"tempo_consistency_score\": 0.83\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.37,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.48,\n \"min_hip_angle_deg\": 81.4,\n \"max_hip_angle_deg\": 165.6,\n \"hip_depth_delta\": -0.577,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 23.81,\n \"knee_valgus_proxy\": 0.1371,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.337,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.01,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.57,\n \"top_pause_sec\": 2.27,\n \"bottom_pause_sec\": 2.27,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.8,\n \"max_knee_angle_deg\": 162.43,\n \"min_hip_angle_deg\": 81.09,\n \"max_hip_angle_deg\": 164.89,\n \"hip_depth_delta\": -0.6032,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 25.52,\n \"knee_valgus_proxy\": 0.1378,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.342,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.01,\n \"tempo_consistency_score\": 1.0\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.67,\n \"tempo_ratio\": 2.04,\n \"top_pause_sec\": 2.07,\n \"bottom_pause_sec\": 2.07,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 95.63,\n \"max_knee_angle_deg\": 160.52,\n \"min_hip_angle_deg\": 81.17,\n \"max_hip_angle_deg\": 162.13,\n \"hip_depth_delta\": -0.5786,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.82,\n \"knee_valgus_proxy\": 0.1267,\n \"knee_tracking_score\": 0.87,\n \"stance_width_ratio\": 1.33,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.91\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.93,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.17,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"rep_duration_sec\": 2.93,\n \"eccentric_duration_sec\": 1.87,\n \"concentric_duration_sec\": 1.07,\n \"tempo_ratio\": 1.75,\n \"top_pause_sec\": 2.97,\n \"bottom_pause_sec\": 2.97,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.58,\n \"max_knee_angle_deg\": 162.44,\n \"min_hip_angle_deg\": 84.72,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.6712,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 27.82,\n \"knee_valgus_proxy\": 0.1913,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.343,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.17,\n \"tempo_consistency_score\": 0.69\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.26,\n \"symmetry_score\": 0.92,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 0.93,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.12,\n \"top_pause_sec\": 1.8,\n \"bottom_pause_sec\": 1.8,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.88,\n \"max_knee_angle_deg\": 162.92,\n \"min_hip_angle_deg\": 82.84,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.5249,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.58,\n \"knee_valgus_proxy\": 0.1871,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.415,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.26,\n \"tempo_consistency_score\": 0.79\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.53,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.09,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.53,\n \"eccentric_duration_sec\": 1.6,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 2.57,\n \"bottom_pause_sec\": 2.57,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.11,\n \"min_hip_angle_deg\": 80.71,\n \"max_hip_angle_deg\": 161.03,\n \"hip_depth_delta\": -0.5969,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.77,\n \"knee_valgus_proxy\": 0.1864,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.355,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.09,\n \"tempo_consistency_score\": 0.87\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.16,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.82,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 89.57,\n \"max_knee_angle_deg\": 161.33,\n \"min_hip_angle_deg\": 77.8,\n \"max_hip_angle_deg\": 162.56,\n \"hip_depth_delta\": -0.5769,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.94,\n \"knee_valgus_proxy\": 0.1902,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.333,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.16,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.03,\n \"symmetry_score\": 0.91,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.66,\n \"max_knee_angle_deg\": 161.7,\n \"min_hip_angle_deg\": 88.13,\n \"max_hip_angle_deg\": 160.04,\n \"hip_depth_delta\": -0.5895,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.19,\n \"knee_valgus_proxy\": 0.1759,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.03,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.37,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.15,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.37,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.44,\n \"top_pause_sec\": 2.4,\n \"bottom_pause_sec\": 2.4,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 102.5,\n \"max_knee_angle_deg\": 162.17,\n \"min_hip_angle_deg\": 93.44,\n \"max_hip_angle_deg\": 162.79,\n \"hip_depth_delta\": -0.6438,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.0,\n \"knee_valgus_proxy\": 0.1904,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.376,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.15,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 2\n },\n \"issues\": [\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 210,\n \"end_frame\": 216,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 239,\n \"end_frame\": 245,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"This grounded summary is based on structured artifacts for `squat` rather than direct video interpretation. The highest-priority issue labels were `shallow_depth`. The detected variation was `pause_squat`.\",\n \"what_you_did\": [\n \"You completed 15 detected `squat` reps with the variation labeled as `pause_squat`.\",\n \"Your selected training goal was `beginner_practice`.\"\n ],\n \"what_looked_good\": [\n \"Range of motion showed room to tighten up overall (54%).\",\n \"Rep stability showed room to tighten up overall (7%).\",\n \"Left-right symmetry looked steady overall (87%).\"\n ],\n \"what_changed_across_reps\": [\n \"Rep-to-rep range stayed fairly stable across the set.\"\n ],\n \"valid_variation_vs_issue\": [\n \"The detected variation was `pause_squat`, so it should be treated as context rather than a fault by default.\",\n \"The variation step marked `bottom_pause`, `low_rom_requires_user_intent_check` as not-issue context.\",\n \"The actual issue markers in this set were `shallow_depth`.\"\n ],\n \"top_fixes\": [\n \"Sit slightly deeper before standing up.\"\n ],\n \"next_session_plan\": [\n \"Start with 1 easy set of controlled reps using the same camera angle.\",\n \"Keep your top focus on `shallow_depth`.\",\n \"Compare the next run against this report to see whether the same labels show up again.\"\n ],\n \"confidence_notes\": [\n \"This summary stays grounded to the current JSON evidence and may miss details outside that evidence.\",\n \"Fallback summary was used because the generated summary did not pass verification: (Request ID: Root=1-6a2ed6cf-0ccb799c2cec363c37a8c15a;5ea9195e-0505-41ae-bf66-9e834323e9cb)\\n\\n403 Forbidden: This authentication method does not have sufficient permissions to call Inference Providers on behalf of user tiena2cva.\\nCannot access content at: https://router.huggingface.co/v1/chat/completions.\\nMake sure your token has the correct permissions.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260614T162831Z-a596f71d", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 2, "variation": "pause_squat"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.92,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.57,\n \"avg_stability_score\": 0.68,\n \"avg_symmetry_score\": 0.56,\n \"avg_rep_duration_sec\": 2.2,\n \"avg_tempo_consistency_score\": 0.9453,\n \"avg_landmark_confidence\": 0.9173,\n \"fatigue_trend_rom_delta\": -0.1,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3752,\n \"avg_bottom_pause_sec\": 0.278\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.46,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 1.2,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.11,\n \"top_pause_sec\": 0.6,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0094,\n \"min_knee_angle_deg\": 115.91,\n \"max_knee_angle_deg\": 177.98,\n \"min_hip_angle_deg\": 98.12,\n \"max_hip_angle_deg\": 153.15,\n \"hip_depth_delta\": -0.0548,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.14,\n \"knee_valgus_proxy\": 0.1648,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.44,\n \"hip_shift\": 0.0094,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.8\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.13,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.13,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.6,\n \"tempo_ratio\": 2.55,\n \"top_pause_sec\": 0.93,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0082,\n \"min_knee_angle_deg\": 122.92,\n \"max_knee_angle_deg\": 174.7,\n \"min_hip_angle_deg\": 103.24,\n \"max_hip_angle_deg\": 155.66,\n \"hip_depth_delta\": -0.0581,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.67,\n \"knee_valgus_proxy\": 0.1742,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.38,\n \"hip_shift\": 0.0082,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.62,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.95,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 108.84,\n \"max_knee_angle_deg\": 177.76,\n \"min_hip_angle_deg\": 88.95,\n \"max_hip_angle_deg\": 155.15,\n \"hip_depth_delta\": -0.0444,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.23,\n \"knee_valgus_proxy\": 0.1405,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.323,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.62,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.61,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 0.4,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.0019,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0086,\n \"min_knee_angle_deg\": 107.57,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 87.97,\n \"max_hip_angle_deg\": 156.16,\n \"hip_depth_delta\": -0.0457,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.72,\n \"knee_valgus_proxy\": 0.1715,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.357,\n \"hip_shift\": 0.0086,\n \"bottom_stability_score\": 0.61,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 1.78,\n \"top_pause_sec\": 0.77,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0119,\n \"min_knee_angle_deg\": 115.92,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 92.92,\n \"max_hip_angle_deg\": 151.75,\n \"hip_depth_delta\": -0.0527,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.88,\n \"knee_valgus_proxy\": 0.1751,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.412,\n \"hip_shift\": 0.0119,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.67,\n \"symmetry_score\": 0.52,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 2.05,\n \"top_pause_sec\": 0.97,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.002,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.007,\n \"min_knee_angle_deg\": 121.18,\n \"max_knee_angle_deg\": 178.76,\n \"min_hip_angle_deg\": 96.18,\n \"max_hip_angle_deg\": 155.38,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.53,\n \"knee_valgus_proxy\": 0.1945,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.388,\n \"hip_shift\": 0.007,\n \"bottom_stability_score\": 0.67,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.3,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.49,\n \"metrics\": {\n \"rep_duration_sec\": 2.3,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.88,\n \"top_pause_sec\": 0.47,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0081,\n \"min_knee_angle_deg\": 119.09,\n \"max_knee_angle_deg\": 177.01,\n \"min_hip_angle_deg\": 94.4,\n \"max_hip_angle_deg\": 154.05,\n \"hip_depth_delta\": -0.0485,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.32,\n \"knee_valgus_proxy\": 0.1665,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.37,\n \"hip_shift\": 0.0081,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.48,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.47,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.91,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0078,\n \"min_knee_angle_deg\": 120.94,\n \"max_knee_angle_deg\": 176.79,\n \"min_hip_angle_deg\": 100.11,\n \"max_hip_angle_deg\": 155.16,\n \"hip_depth_delta\": -0.0659,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.1,\n \"knee_valgus_proxy\": 0.1679,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.36,\n \"hip_shift\": 0.0078,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.71,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.68,\n \"top_pause_sec\": 1.0,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0069,\n \"min_knee_angle_deg\": 113.47,\n \"max_knee_angle_deg\": 176.36,\n \"min_hip_angle_deg\": 99.22,\n \"max_hip_angle_deg\": 155.04,\n \"hip_depth_delta\": -0.0645,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.7,\n \"knee_valgus_proxy\": 0.1556,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.338,\n \"hip_shift\": 0.0069,\n \"bottom_stability_score\": 0.71,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.45,\n \"stability_score\": 0.74,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.79,\n \"top_pause_sec\": 0.87,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0134,\n \"min_knee_angle_deg\": 127.14,\n \"max_knee_angle_deg\": 178.05,\n \"min_hip_angle_deg\": 102.47,\n \"max_hip_angle_deg\": 154.25,\n \"hip_depth_delta\": -0.0718,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.11,\n \"knee_valgus_proxy\": 0.1995,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.372,\n \"hip_shift\": 0.0134,\n \"bottom_stability_score\": 0.74,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.72,\n \"symmetry_score\": 0.7,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.0,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0073,\n \"min_knee_angle_deg\": 117.08,\n \"max_knee_angle_deg\": 179.14,\n \"min_hip_angle_deg\": 92.36,\n \"max_hip_angle_deg\": 155.39,\n \"hip_depth_delta\": -0.0494,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.13,\n \"knee_valgus_proxy\": 0.2167,\n \"knee_tracking_score\": 0.78,\n \"stance_width_ratio\": 1.403,\n \"hip_shift\": 0.0073,\n \"bottom_stability_score\": 0.72,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.33,\n \"range_of_motion_score\": 0.61,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.63,\n \"metrics\": {\n \"rep_duration_sec\": 2.33,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.33,\n \"top_pause_sec\": 0.53,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 113.08,\n \"max_knee_angle_deg\": 178.58,\n \"min_hip_angle_deg\": 94.09,\n \"max_hip_angle_deg\": 152.83,\n \"hip_depth_delta\": -0.0549,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.38,\n \"knee_valgus_proxy\": 0.1825,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.352,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.63,\n \"stability_score\": 0.7,\n \"symmetry_score\": 0.64,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.68,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0051,\n \"min_knee_angle_deg\": 107.03,\n \"max_knee_angle_deg\": 178.0,\n \"min_hip_angle_deg\": 88.29,\n \"max_hip_angle_deg\": 156.04,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.68,\n \"knee_valgus_proxy\": 0.1974,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0051,\n \"bottom_stability_score\": 0.7,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.69,\n \"symmetry_score\": 0.68,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.57,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.24,\n \"top_pause_sec\": 0.73,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0047,\n \"min_knee_angle_deg\": 115.32,\n \"max_knee_angle_deg\": 178.25,\n \"min_hip_angle_deg\": 91.41,\n \"max_hip_angle_deg\": 152.66,\n \"hip_depth_delta\": -0.0526,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.91,\n \"knee_valgus_proxy\": 0.1918,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.364,\n \"hip_shift\": 0.0047,\n \"bottom_stability_score\": 0.69,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.73,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.63,\n \"tempo_ratio\": 2.43,\n \"top_pause_sec\": 0.8,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0015,\n \"landmark_confidence\": 0.88,\n \"hip_lateral_drift\": 0.0057,\n \"min_knee_angle_deg\": 122.57,\n \"max_knee_angle_deg\": 176.95,\n \"min_hip_angle_deg\": 102.68,\n \"max_hip_angle_deg\": 152.65,\n \"hip_depth_delta\": -0.0673,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.49,\n \"knee_valgus_proxy\": 0.21,\n \"knee_tracking_score\": 0.79,\n \"stance_width_ratio\": 1.419,\n \"hip_shift\": 0.0057,\n \"bottom_stability_score\": 0.73,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 22\n },\n \"issues\": [\n {\n \"rep_id\": 1,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.56,\n \"start_frame\": 31,\n \"end_frame\": 45,\n \"start_sec\": 1.033,\n \"end_sec\": 1.5,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.53,\n \"peak_frame\": 31,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0475,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 2,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 95,\n \"end_frame\": 109,\n \"start_sec\": 3.167,\n \"end_sec\": 3.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0634,\n \"threshold\": -0.03,\n \"confidence\": 0.56,\n \"peak_frame\": 95,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0526,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 3,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.45,\n \"start_frame\": 168,\n \"end_frame\": 174,\n \"start_sec\": 5.6,\n \"end_sec\": 5.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 174,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0444,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 225,\n \"end_frame\": 229,\n \"start_sec\": 7.5,\n \"end_sec\": 7.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0623,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 225,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.55,\n \"start_frame\": 237,\n \"end_frame\": 241,\n \"start_sec\": 7.9,\n \"end_sec\": 8.033,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0741,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"peak_frame\": 241,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0493,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 289,\n \"end_frame\": 294,\n \"start_sec\": 9.633,\n \"end_sec\": 9.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0711,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 289,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0494,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 299,\n \"end_frame\": 304,\n \"start_sec\": 9.967,\n \"end_sec\": 10.133,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0616,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 303,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0496,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.39,\n \"start_frame\": 356,\n \"end_frame\": 371,\n \"start_sec\": 11.867,\n \"end_sec\": 12.367,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 371,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0421,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.31,\n \"start_frame\": 422,\n \"end_frame\": 427,\n \"start_sec\": 14.067,\n \"end_sec\": 14.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.055,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"peak_frame\": 422,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0394,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.4,\n \"start_frame\": 433,\n \"end_frame\": 439,\n \"start_sec\": 14.433,\n \"end_sec\": 14.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"peak_frame\": 439,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0425,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 8,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.68,\n \"start_frame\": 490,\n \"end_frame\": 508,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 9,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.46,\n \"start_frame\": 560,\n \"end_frame\": 577,\n \"start_sec\": 18.667,\n \"end_sec\": 19.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0618,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 576,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0445,\n \"supporting_frames\": 18\n }\n },\n {\n \"rep_id\": 10,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.8,\n \"start_frame\": 633,\n \"end_frame\": 648,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 695,\n \"end_frame\": 702,\n \"start_sec\": 23.167,\n \"end_sec\": 23.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0676,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 695,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0462,\n \"supporting_frames\": 8,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.65,\n \"start_frame\": 711,\n \"end_frame\": 716,\n \"start_sec\": 23.7,\n \"end_sec\": 23.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0661,\n \"threshold\": -0.03,\n \"confidence\": 0.62,\n \"peak_frame\": 715,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0531,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.41,\n \"start_frame\": 768,\n \"end_frame\": 776,\n \"start_sec\": 25.6,\n \"end_sec\": 25.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.54,\n \"peak_frame\": 768,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0429,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 780,\n \"end_frame\": 789,\n \"start_sec\": 26.0,\n \"end_sec\": 26.3,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0655,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 787,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0529,\n \"supporting_frames\": 10,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.5,\n \"start_frame\": 834,\n \"end_frame\": 839,\n \"start_sec\": 27.8,\n \"end_sec\": 27.967,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0658,\n \"threshold\": -0.03,\n \"confidence\": 0.57,\n \"peak_frame\": 834,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 6\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 848,\n \"end_frame\": 852,\n \"start_sec\": 28.267,\n \"end_sec\": 28.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0605,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"peak_frame\": 851,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0508,\n \"supporting_frames\": 5\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 900,\n \"end_frame\": 906,\n \"start_sec\": 30.0,\n \"end_sec\": 30.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0647,\n \"threshold\": -0.03,\n \"confidence\": 0.6,\n \"peak_frame\": 900,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0509,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 910,\n \"end_frame\": 918,\n \"start_sec\": 30.333,\n \"end_sec\": 30.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.61,\n \"peak_frame\": 916,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0542,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 15,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.82,\n \"start_frame\": 967,\n \"end_frame\": 984,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 15,\n \"severity\": 0.82,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"peak_frame\": 967,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 10,\n \"severity\": 0.8,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"peak_frame\": 633,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 8,\n \"severity\": 0.68,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"peak_frame\": 490,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"The pipeline segmented 15 squat reps from the current pose stream. Exercise routing, variation labeling, and coaching language may still use lightweight rules or placeholders. The detected variation is `wide_squat_stance`. The strongest frame-level marker is `shallow_depth`, with timestamps and metric evidence in the issue timeline.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Current mock classifier confidence placeholder: 92%.\",\n \"Rep segmentation can run on real pose, but downstream interpretation is still partially mocked.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260611T140826Z-52af3352", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 22, "variation": "wide_squat_stance"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9998,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.54,\n \"avg_stability_score\": 0.07,\n \"avg_symmetry_score\": 0.87,\n \"avg_rep_duration_sec\": 2.23,\n \"avg_tempo_consistency_score\": 0.91,\n \"avg_landmark_confidence\": 0.958,\n \"fatigue_trend_rom_delta\": -0.04,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3553,\n \"avg_bottom_pause_sec\": 2.2647\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.33,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.73,\n \"top_pause_sec\": 2.13,\n \"bottom_pause_sec\": 2.13,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0001,\n \"min_knee_angle_deg\": 96.19,\n \"max_knee_angle_deg\": 163.71,\n \"min_hip_angle_deg\": 85.24,\n \"max_hip_angle_deg\": 164.04,\n \"hip_depth_delta\": -0.6171,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 21.76,\n \"knee_valgus_proxy\": 0.1512,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.386,\n \"hip_shift\": 0.0001,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.65,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 99.1,\n \"max_knee_angle_deg\": 162.09,\n \"min_hip_angle_deg\": 84.93,\n \"max_hip_angle_deg\": 162.94,\n \"hip_depth_delta\": -0.6307,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 28.59,\n \"knee_valgus_proxy\": 0.1463,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.335,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.23,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.32,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 87.55,\n \"max_knee_angle_deg\": 162.39,\n \"min_hip_angle_deg\": 76.5,\n \"max_hip_angle_deg\": 162.61,\n \"hip_depth_delta\": -0.5711,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.66,\n \"knee_valgus_proxy\": 0.1076,\n \"knee_tracking_score\": 0.89,\n \"stance_width_ratio\": 1.315,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.85,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 90.33,\n \"max_knee_angle_deg\": 163.12,\n \"min_hip_angle_deg\": 82.42,\n \"max_hip_angle_deg\": 163.05,\n \"hip_depth_delta\": -0.5921,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.77,\n \"knee_valgus_proxy\": 0.1416,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.316,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 1.83,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 1.83,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.23,\n \"top_pause_sec\": 1.87,\n \"bottom_pause_sec\": 1.87,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.59,\n \"max_knee_angle_deg\": 160.43,\n \"min_hip_angle_deg\": 85.06,\n \"max_hip_angle_deg\": 161.07,\n \"hip_depth_delta\": -0.5894,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.31,\n \"knee_valgus_proxy\": 0.1537,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.418,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.08,\n \"symmetry_score\": 0.88,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.67,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.8,\n \"top_pause_sec\": 2.63,\n \"bottom_pause_sec\": 2.63,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.19,\n \"max_knee_angle_deg\": 162.37,\n \"min_hip_angle_deg\": 79.55,\n \"max_hip_angle_deg\": 161.19,\n \"hip_depth_delta\": -0.6127,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.92,\n \"knee_valgus_proxy\": 0.1704,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.378,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.08,\n \"tempo_consistency_score\": 0.83\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.37,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.48,\n \"min_hip_angle_deg\": 81.4,\n \"max_hip_angle_deg\": 165.6,\n \"hip_depth_delta\": -0.577,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 23.81,\n \"knee_valgus_proxy\": 0.1371,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.337,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.01,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.57,\n \"top_pause_sec\": 2.27,\n \"bottom_pause_sec\": 2.27,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.8,\n \"max_knee_angle_deg\": 162.43,\n \"min_hip_angle_deg\": 81.09,\n \"max_hip_angle_deg\": 164.89,\n \"hip_depth_delta\": -0.6032,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 25.52,\n \"knee_valgus_proxy\": 0.1378,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.342,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.01,\n \"tempo_consistency_score\": 1.0\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.67,\n \"tempo_ratio\": 2.04,\n \"top_pause_sec\": 2.07,\n \"bottom_pause_sec\": 2.07,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 95.63,\n \"max_knee_angle_deg\": 160.52,\n \"min_hip_angle_deg\": 81.17,\n \"max_hip_angle_deg\": 162.13,\n \"hip_depth_delta\": -0.5786,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.82,\n \"knee_valgus_proxy\": 0.1267,\n \"knee_tracking_score\": 0.87,\n \"stance_width_ratio\": 1.33,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.91\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.93,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.17,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"rep_duration_sec\": 2.93,\n \"eccentric_duration_sec\": 1.87,\n \"concentric_duration_sec\": 1.07,\n \"tempo_ratio\": 1.75,\n \"top_pause_sec\": 2.97,\n \"bottom_pause_sec\": 2.97,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.58,\n \"max_knee_angle_deg\": 162.44,\n \"min_hip_angle_deg\": 84.72,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.6712,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 27.82,\n \"knee_valgus_proxy\": 0.1913,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.343,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.17,\n \"tempo_consistency_score\": 0.69\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.26,\n \"symmetry_score\": 0.92,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 0.93,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.12,\n \"top_pause_sec\": 1.8,\n \"bottom_pause_sec\": 1.8,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.88,\n \"max_knee_angle_deg\": 162.92,\n \"min_hip_angle_deg\": 82.84,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.5249,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.58,\n \"knee_valgus_proxy\": 0.1871,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.415,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.26,\n \"tempo_consistency_score\": 0.79\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.53,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.09,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.53,\n \"eccentric_duration_sec\": 1.6,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 2.57,\n \"bottom_pause_sec\": 2.57,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.11,\n \"min_hip_angle_deg\": 80.71,\n \"max_hip_angle_deg\": 161.03,\n \"hip_depth_delta\": -0.5969,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.77,\n \"knee_valgus_proxy\": 0.1864,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.355,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.09,\n \"tempo_consistency_score\": 0.87\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.16,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.82,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 89.57,\n \"max_knee_angle_deg\": 161.33,\n \"min_hip_angle_deg\": 77.8,\n \"max_hip_angle_deg\": 162.56,\n \"hip_depth_delta\": -0.5769,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.94,\n \"knee_valgus_proxy\": 0.1902,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.333,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.16,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.03,\n \"symmetry_score\": 0.91,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.66,\n \"max_knee_angle_deg\": 161.7,\n \"min_hip_angle_deg\": 88.13,\n \"max_hip_angle_deg\": 160.04,\n \"hip_depth_delta\": -0.5895,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.19,\n \"knee_valgus_proxy\": 0.1759,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.03,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.37,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.15,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.37,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.44,\n \"top_pause_sec\": 2.4,\n \"bottom_pause_sec\": 2.4,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 102.5,\n \"max_knee_angle_deg\": 162.17,\n \"min_hip_angle_deg\": 93.44,\n \"max_hip_angle_deg\": 162.79,\n \"hip_depth_delta\": -0.6438,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.0,\n \"knee_valgus_proxy\": 0.1904,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.376,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.15,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 2\n },\n \"issues\": [\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 210,\n \"end_frame\": 216,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 239,\n \"end_frame\": 245,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"This grounded summary is based on structured artifacts for `squat` rather than direct video interpretation. The highest-priority issue labels were `shallow_depth`. The detected variation was `pause_squat`.\",\n \"what_you_did\": [\n \"You completed 15 detected `squat` reps with the variation labeled as `pause_squat`.\",\n \"Your selected training goal was `beginner_practice`.\"\n ],\n \"what_looked_good\": [\n \"Range of motion showed room to tighten up overall (54%).\",\n \"Rep stability showed room to tighten up overall (7%).\",\n \"Left-right symmetry looked steady overall (87%).\"\n ],\n \"what_changed_across_reps\": [\n \"Rep-to-rep range stayed fairly stable across the set.\"\n ],\n \"valid_variation_vs_issue\": [\n \"The detected variation was `pause_squat`, so it should be treated as context rather than a fault by default.\",\n \"The variation step marked `bottom_pause`, `low_rom_requires_user_intent_check` as not-issue context.\",\n \"The actual issue markers in this set were `shallow_depth`.\"\n ],\n \"top_fixes\": [\n \"Sit slightly deeper before standing up.\"\n ],\n \"next_session_plan\": [\n \"Start with 1 easy set of controlled reps using the same camera angle.\",\n \"Keep your top focus on `shallow_depth`.\",\n \"Compare the next run against this report to see whether the same labels show up again.\"\n ],\n \"confidence_notes\": [\n \"This summary stays grounded to the current JSON evidence and may miss details outside that evidence.\",\n \"Fallback summary was used because the generated summary did not pass verification: (Request ID: Root=1-6a2e8000-1be9e03004d511567feb49a5;5e78417e-12bd-486f-b2e3-a59d48e32754)\\n\\n403 Forbidden: This authentication method does not have sufficient permissions to call Inference Providers on behalf of user tiena2cva.\\nCannot access content at: https://router.huggingface.co/v1/chat/completions.\\nMake sure your token has the correct permissions.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260614T101808Z-8bf99e10", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 2, "variation": "pause_squat"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"squat\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.98,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.57,\n \"avg_stability_score\": 0.68,\n \"avg_symmetry_score\": 0.56,\n \"avg_rep_duration_sec\": 2.2,\n \"avg_tempo_consistency_score\": 0.9453,\n \"avg_landmark_confidence\": 0.9173,\n \"fatigue_trend_rom_delta\": -0.1,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3752,\n \"avg_bottom_pause_sec\": 0.278\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.46,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 1.2,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.11,\n \"top_pause_sec\": 0.6,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0094,\n \"min_knee_angle_deg\": 115.91,\n \"max_knee_angle_deg\": 177.98,\n \"min_hip_angle_deg\": 98.12,\n \"max_hip_angle_deg\": 153.15,\n \"hip_depth_delta\": -0.0548,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.14,\n \"knee_valgus_proxy\": 0.1648,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.44,\n \"hip_shift\": 0.0094,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.8\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.13,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.64,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.13,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.6,\n \"tempo_ratio\": 2.55,\n \"top_pause_sec\": 0.93,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0082,\n \"min_knee_angle_deg\": 122.92,\n \"max_knee_angle_deg\": 174.7,\n \"min_hip_angle_deg\": 103.24,\n \"max_hip_angle_deg\": 155.66,\n \"hip_depth_delta\": -0.0581,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.67,\n \"knee_valgus_proxy\": 0.1742,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.38,\n \"hip_shift\": 0.0082,\n \"bottom_stability_score\": 0.64,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.62,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.95,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 108.84,\n \"max_knee_angle_deg\": 177.76,\n \"min_hip_angle_deg\": 88.95,\n \"max_hip_angle_deg\": 155.15,\n \"hip_depth_delta\": -0.0444,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.23,\n \"knee_valgus_proxy\": 0.1405,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.323,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.62,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.64,\n \"stability_score\": 0.61,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 0.4,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.0019,\n \"landmark_confidence\": 0.91,\n \"hip_lateral_drift\": 0.0086,\n \"min_knee_angle_deg\": 107.57,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 87.97,\n \"max_hip_angle_deg\": 156.16,\n \"hip_depth_delta\": -0.0457,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.72,\n \"knee_valgus_proxy\": 0.1715,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.357,\n \"hip_shift\": 0.0086,\n \"bottom_stability_score\": 0.61,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.59,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.51,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 1.78,\n \"top_pause_sec\": 0.77,\n \"bottom_pause_sec\": 0.2,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0017,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0119,\n \"min_knee_angle_deg\": 115.92,\n \"max_knee_angle_deg\": 177.36,\n \"min_hip_angle_deg\": 92.92,\n \"max_hip_angle_deg\": 151.75,\n \"hip_depth_delta\": -0.0527,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.88,\n \"knee_valgus_proxy\": 0.1751,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.412,\n \"hip_shift\": 0.0119,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.92\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.67,\n \"symmetry_score\": 0.52,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.73,\n \"tempo_ratio\": 2.05,\n \"top_pause_sec\": 0.97,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.98,\n \"jerk_score\": 0.002,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.007,\n \"min_knee_angle_deg\": 121.18,\n \"max_knee_angle_deg\": 178.76,\n \"min_hip_angle_deg\": 96.18,\n \"max_hip_angle_deg\": 155.38,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.53,\n \"knee_valgus_proxy\": 0.1945,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.388,\n \"hip_shift\": 0.007,\n \"bottom_stability_score\": 0.67,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.3,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.49,\n \"metrics\": {\n \"rep_duration_sec\": 2.3,\n \"eccentric_duration_sec\": 1.5,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.88,\n \"top_pause_sec\": 0.47,\n \"bottom_pause_sec\": 0.27,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0081,\n \"min_knee_angle_deg\": 119.09,\n \"max_knee_angle_deg\": 177.01,\n \"min_hip_angle_deg\": 94.4,\n \"max_hip_angle_deg\": 154.05,\n \"hip_depth_delta\": -0.0485,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.32,\n \"knee_valgus_proxy\": 0.1665,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.37,\n \"hip_shift\": 0.0081,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.96\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.66,\n \"symmetry_score\": 0.48,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.47,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.91,\n \"top_pause_sec\": 0.9,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0078,\n \"min_knee_angle_deg\": 120.94,\n \"max_knee_angle_deg\": 176.79,\n \"min_hip_angle_deg\": 100.11,\n \"max_hip_angle_deg\": 155.16,\n \"hip_depth_delta\": -0.0659,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.1,\n \"knee_valgus_proxy\": 0.1679,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.36,\n \"hip_shift\": 0.0078,\n \"bottom_stability_score\": 0.66,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.57,\n \"stability_score\": 0.71,\n \"symmetry_score\": 0.54,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.68,\n \"top_pause_sec\": 1.0,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0069,\n \"min_knee_angle_deg\": 113.47,\n \"max_knee_angle_deg\": 176.36,\n \"min_hip_angle_deg\": 99.22,\n \"max_hip_angle_deg\": 155.04,\n \"hip_depth_delta\": -0.0645,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.7,\n \"knee_valgus_proxy\": 0.1556,\n \"knee_tracking_score\": 0.84,\n \"stance_width_ratio\": 1.338,\n \"hip_shift\": 0.0069,\n \"bottom_stability_score\": 0.71,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.45,\n \"stability_score\": 0.74,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.43,\n \"concentric_duration_sec\": 0.8,\n \"tempo_ratio\": 1.79,\n \"top_pause_sec\": 0.87,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0134,\n \"min_knee_angle_deg\": 127.14,\n \"max_knee_angle_deg\": 178.05,\n \"min_hip_angle_deg\": 102.47,\n \"max_hip_angle_deg\": 154.25,\n \"hip_depth_delta\": -0.0718,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.11,\n \"knee_valgus_proxy\": 0.1995,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.372,\n \"hip_shift\": 0.0134,\n \"bottom_stability_score\": 0.74,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.72,\n \"symmetry_score\": 0.7,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.0,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.37,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0016,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0073,\n \"min_knee_angle_deg\": 117.08,\n \"max_knee_angle_deg\": 179.14,\n \"min_hip_angle_deg\": 92.36,\n \"max_hip_angle_deg\": 155.39,\n \"hip_depth_delta\": -0.0494,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.13,\n \"knee_valgus_proxy\": 0.2167,\n \"knee_tracking_score\": 0.78,\n \"stance_width_ratio\": 1.403,\n \"hip_shift\": 0.0073,\n \"bottom_stability_score\": 0.72,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.33,\n \"range_of_motion_score\": 0.61,\n \"stability_score\": 0.68,\n \"symmetry_score\": 0.63,\n \"metrics\": {\n \"rep_duration_sec\": 2.33,\n \"eccentric_duration_sec\": 1.63,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.33,\n \"top_pause_sec\": 0.53,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0014,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0074,\n \"min_knee_angle_deg\": 113.08,\n \"max_knee_angle_deg\": 178.58,\n \"min_hip_angle_deg\": 94.09,\n \"max_hip_angle_deg\": 152.83,\n \"hip_depth_delta\": -0.0549,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.38,\n \"knee_valgus_proxy\": 0.1825,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.352,\n \"hip_shift\": 0.0074,\n \"bottom_stability_score\": 0.68,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.63,\n \"stability_score\": 0.7,\n \"symmetry_score\": 0.64,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.68,\n \"top_pause_sec\": 0.63,\n \"bottom_pause_sec\": 0.33,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0051,\n \"min_knee_angle_deg\": 107.03,\n \"max_knee_angle_deg\": 178.0,\n \"min_hip_angle_deg\": 88.29,\n \"max_hip_angle_deg\": 156.04,\n \"hip_depth_delta\": -0.0495,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.68,\n \"knee_valgus_proxy\": 0.1974,\n \"knee_tracking_score\": 0.8,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0051,\n \"bottom_stability_score\": 0.7,\n \"tempo_consistency_score\": 0.95\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.27,\n \"range_of_motion_score\": 0.6,\n \"stability_score\": 0.69,\n \"symmetry_score\": 0.68,\n \"metrics\": {\n \"rep_duration_sec\": 2.27,\n \"eccentric_duration_sec\": 1.57,\n \"concentric_duration_sec\": 0.7,\n \"tempo_ratio\": 2.24,\n \"top_pause_sec\": 0.73,\n \"bottom_pause_sec\": 0.23,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0018,\n \"landmark_confidence\": 0.92,\n \"hip_lateral_drift\": 0.0047,\n \"min_knee_angle_deg\": 115.32,\n \"max_knee_angle_deg\": 178.25,\n \"min_hip_angle_deg\": 91.41,\n \"max_hip_angle_deg\": 152.66,\n \"hip_depth_delta\": -0.0526,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 17.91,\n \"knee_valgus_proxy\": 0.1918,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.364,\n \"hip_shift\": 0.0047,\n \"bottom_stability_score\": 0.69,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.49,\n \"stability_score\": 0.73,\n \"symmetry_score\": 0.61,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.53,\n \"concentric_duration_sec\": 0.63,\n \"tempo_ratio\": 2.43,\n \"top_pause_sec\": 0.8,\n \"bottom_pause_sec\": 0.3,\n \"smoothness_score\": 0.99,\n \"jerk_score\": 0.0015,\n \"landmark_confidence\": 0.88,\n \"hip_lateral_drift\": 0.0057,\n \"min_knee_angle_deg\": 122.57,\n \"max_knee_angle_deg\": 176.95,\n \"min_hip_angle_deg\": 102.68,\n \"max_hip_angle_deg\": 152.65,\n \"hip_depth_delta\": -0.0673,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 16.49,\n \"knee_valgus_proxy\": 0.21,\n \"knee_tracking_score\": 0.79,\n \"stance_width_ratio\": 1.419,\n \"hip_shift\": 0.0057,\n \"bottom_stability_score\": 0.73,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 22\n },\n \"issues\": [\n {\n \"rep_id\": 1,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.56,\n \"start_frame\": 31,\n \"end_frame\": 45,\n \"start_sec\": 1.033,\n \"end_sec\": 1.5,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.53,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0475,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 2,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 95,\n \"end_frame\": 109,\n \"start_sec\": 3.167,\n \"end_sec\": 3.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0634,\n \"threshold\": -0.03,\n \"confidence\": 0.56,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0526,\n \"supporting_frames\": 15,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 3,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.45,\n \"start_frame\": 168,\n \"end_frame\": 174,\n \"start_sec\": 5.6,\n \"end_sec\": 5.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0444,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 225,\n \"end_frame\": 229,\n \"start_sec\": 7.5,\n \"end_sec\": 7.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0623,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.55,\n \"start_frame\": 237,\n \"end_frame\": 241,\n \"start_sec\": 7.9,\n \"end_sec\": 8.033,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0741,\n \"threshold\": -0.03,\n \"confidence\": 0.51,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0493,\n \"supporting_frames\": 5,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 289,\n \"end_frame\": 294,\n \"start_sec\": 9.633,\n \"end_sec\": 9.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0711,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0494,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 5,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.58,\n \"start_frame\": 299,\n \"end_frame\": 304,\n \"start_sec\": 9.967,\n \"end_sec\": 10.133,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0616,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0496,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 6,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.39,\n \"start_frame\": 356,\n \"end_frame\": 371,\n \"start_sec\": 11.867,\n \"end_sec\": 12.367,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0656,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0421,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.31,\n \"start_frame\": 422,\n \"end_frame\": 427,\n \"start_sec\": 14.067,\n \"end_sec\": 14.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.055,\n \"threshold\": -0.03,\n \"confidence\": 0.5,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0394,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 7,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.4,\n \"start_frame\": 433,\n \"end_frame\": 439,\n \"start_sec\": 14.433,\n \"end_sec\": 14.633,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.52,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0425,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 8,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.68,\n \"start_frame\": 490,\n \"end_frame\": 508,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 9,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.46,\n \"start_frame\": 560,\n \"end_frame\": 577,\n \"start_sec\": 18.667,\n \"end_sec\": 19.233,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0618,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0445,\n \"supporting_frames\": 18\n }\n },\n {\n \"rep_id\": 10,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.8,\n \"start_frame\": 633,\n \"end_frame\": 648,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.51,\n \"start_frame\": 695,\n \"end_frame\": 702,\n \"start_sec\": 23.167,\n \"end_sec\": 23.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0676,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0462,\n \"supporting_frames\": 8,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 11,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.65,\n \"start_frame\": 711,\n \"end_frame\": 716,\n \"start_sec\": 23.7,\n \"end_sec\": 23.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0661,\n \"threshold\": -0.03,\n \"confidence\": 0.62,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0531,\n \"supporting_frames\": 6,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.41,\n \"start_frame\": 768,\n \"end_frame\": 776,\n \"start_sec\": 25.6,\n \"end_sec\": 25.867,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.065,\n \"threshold\": -0.03,\n \"confidence\": 0.54,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0429,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 12,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 780,\n \"end_frame\": 789,\n \"start_sec\": 26.0,\n \"end_sec\": 26.3,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0655,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0529,\n \"supporting_frames\": 10,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.5,\n \"start_frame\": 834,\n \"end_frame\": 839,\n \"start_sec\": 27.8,\n \"end_sec\": 27.967,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0658,\n \"threshold\": -0.03,\n \"confidence\": 0.57,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0459,\n \"supporting_frames\": 6\n }\n },\n {\n \"rep_id\": 13,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.61,\n \"start_frame\": 848,\n \"end_frame\": 852,\n \"start_sec\": 28.267,\n \"end_sec\": 28.4,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0605,\n \"threshold\": -0.03,\n \"confidence\": 0.59,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0508,\n \"supporting_frames\": 5\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 900,\n \"end_frame\": 906,\n \"start_sec\": 30.0,\n \"end_sec\": 30.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0647,\n \"threshold\": -0.03,\n \"confidence\": 0.6,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0509,\n \"supporting_frames\": 7,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 14,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.67,\n \"start_frame\": 910,\n \"end_frame\": 918,\n \"start_sec\": 30.333,\n \"end_sec\": 30.6,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0641,\n \"threshold\": -0.03,\n \"confidence\": 0.61,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0542,\n \"supporting_frames\": 9,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"rep_id\": 15,\n \"issue\": \"shallow_depth\",\n \"severity\": 0.82,\n \"start_frame\": 967,\n \"end_frame\": 984,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 15,\n \"severity\": 0.82,\n \"start_sec\": 32.233,\n \"end_sec\": 32.8,\n \"evidence\": {\n \"hip_depth_delta\": -0.0714,\n \"threshold\": -0.03,\n \"confidence\": 0.66,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0583,\n \"supporting_frames\": 18,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 10,\n \"severity\": 0.8,\n \"start_sec\": 21.1,\n \"end_sec\": 21.6,\n \"evidence\": {\n \"hip_depth_delta\": -0.094,\n \"threshold\": -0.03,\n \"confidence\": 0.68,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0606,\n \"supporting_frames\": 16,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 8,\n \"severity\": 0.68,\n \"start_sec\": 16.333,\n \"end_sec\": 16.933,\n \"evidence\": {\n \"hip_depth_delta\": -0.0735,\n \"threshold\": -0.03,\n \"confidence\": 0.58,\n \"variation_context\": {\n \"detected_variation\": \"wide_squat_stance\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"low_rom_requires_user_intent_check\",\n \"wide_stance\"\n ]\n },\n \"mean_metric_value\": -0.0549,\n \"supporting_frames\": 19,\n \"rep_variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"The pipeline segmented 15 squat reps from the current pose stream. Exercise routing, variation labeling, and coaching language may still use lightweight rules or placeholders. The detected variation is `wide_squat_stance`. The strongest frame-level marker is `shallow_depth`, with timestamps and metric evidence in the issue timeline.\",\n \"what_you_did\": [],\n \"what_looked_good\": [],\n \"what_changed_across_reps\": [],\n \"valid_variation_vs_issue\": [],\n \"top_fixes\": [\n \"Keep the same setup and record from a stable camera angle.\",\n \"Stop the set when the first repeated issue marker appears.\",\n \"Use slower reps until the highlighted metric improves.\"\n ],\n \"next_session_plan\": [\n \"Warm up with 1 easy set of 5 controlled reps.\",\n \"Perform 2 working sets and keep the camera angle consistent.\",\n \"Compare the next run against this report's issue timeline.\"\n ],\n \"confidence_notes\": [\n \"Current mock classifier confidence placeholder: 98%.\",\n \"Rep segmentation can run on real pose, but downstream interpretation is still partially mocked.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260611T121731Z-993e8797", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 22, "variation": "wide_squat_stance"}}
{"messages": [{"role": "system", "content": "You are Pozify's grounded coach-summary model. Use only the provided structured evidence and knowledge cards. Return coach_summary.json as JSON only."}, {"role": "user", "content": "{\n \"user_profile\": {\n \"goal\": \"beginner_practice\",\n \"experience_level\": \"beginner\",\n \"intended_exercise\": \"auto\",\n \"intended_variation\": null,\n \"known_limitations\": [],\n \"equipment\": \"bodyweight\"\n },\n \"exercise_classification\": {\n \"exercise\": \"squat\",\n \"confidence\": 0.9998,\n \"fallback_required\": false\n },\n \"variation\": {\n \"exercise\": \"squat\",\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"rep_summary\": {\n \"rep_count\": 15,\n \"aggregate_metrics\": {\n \"avg_rom_score\": 0.54,\n \"avg_stability_score\": 0.07,\n \"avg_symmetry_score\": 0.87,\n \"avg_rep_duration_sec\": 2.23,\n \"avg_tempo_consistency_score\": 0.91,\n \"avg_landmark_confidence\": 0.958,\n \"fatigue_trend_rom_delta\": -0.04,\n \"pose_valid_ratio\": 1.0,\n \"avg_stance_width_ratio\": 1.3553,\n \"avg_bottom_pause_sec\": 2.2647\n },\n \"rep_metrics\": [\n {\n \"rep_id\": 1,\n \"duration_sec\": 2.1,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.1,\n \"eccentric_duration_sec\": 1.33,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.73,\n \"top_pause_sec\": 2.13,\n \"bottom_pause_sec\": 2.13,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0001,\n \"min_knee_angle_deg\": 96.19,\n \"max_knee_angle_deg\": 163.71,\n \"min_hip_angle_deg\": 85.24,\n \"max_hip_angle_deg\": 164.04,\n \"hip_depth_delta\": -0.6171,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 21.76,\n \"knee_valgus_proxy\": 0.1512,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.386,\n \"hip_shift\": 0.0001,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 2,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.65,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 99.1,\n \"max_knee_angle_deg\": 162.09,\n \"min_hip_angle_deg\": 84.93,\n \"max_hip_angle_deg\": 162.94,\n \"hip_depth_delta\": -0.6307,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 28.59,\n \"knee_valgus_proxy\": 0.1463,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.335,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 3,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.23,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.32,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 87.55,\n \"max_knee_angle_deg\": 162.39,\n \"min_hip_angle_deg\": 76.5,\n \"max_hip_angle_deg\": 162.61,\n \"hip_depth_delta\": -0.5711,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.66,\n \"knee_valgus_proxy\": 0.1076,\n \"knee_tracking_score\": 0.89,\n \"stance_width_ratio\": 1.315,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 4,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.85,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 90.33,\n \"max_knee_angle_deg\": 163.12,\n \"min_hip_angle_deg\": 82.42,\n \"max_hip_angle_deg\": 163.05,\n \"hip_depth_delta\": -0.5921,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 18.77,\n \"knee_valgus_proxy\": 0.1416,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.316,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 5,\n \"duration_sec\": 1.83,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.04,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 1.83,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.57,\n \"tempo_ratio\": 2.23,\n \"top_pause_sec\": 1.87,\n \"bottom_pause_sec\": 1.87,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.59,\n \"max_knee_angle_deg\": 160.43,\n \"min_hip_angle_deg\": 85.06,\n \"max_hip_angle_deg\": 161.07,\n \"hip_depth_delta\": -0.5894,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 19.31,\n \"knee_valgus_proxy\": 0.1537,\n \"knee_tracking_score\": 0.85,\n \"stance_width_ratio\": 1.418,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.04,\n \"tempo_consistency_score\": 0.82\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 6,\n \"duration_sec\": 2.6,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.08,\n \"symmetry_score\": 0.88,\n \"metrics\": {\n \"rep_duration_sec\": 2.6,\n \"eccentric_duration_sec\": 1.67,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.8,\n \"top_pause_sec\": 2.63,\n \"bottom_pause_sec\": 2.63,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.19,\n \"max_knee_angle_deg\": 162.37,\n \"min_hip_angle_deg\": 79.55,\n \"max_hip_angle_deg\": 161.19,\n \"hip_depth_delta\": -0.6127,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 26.92,\n \"knee_valgus_proxy\": 0.1704,\n \"knee_tracking_score\": 0.83,\n \"stance_width_ratio\": 1.378,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.08,\n \"tempo_consistency_score\": 0.83\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 7,\n \"duration_sec\": 2.2,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.2,\n \"eccentric_duration_sec\": 1.27,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.37,\n \"top_pause_sec\": 2.23,\n \"bottom_pause_sec\": 2.23,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.48,\n \"min_hip_angle_deg\": 81.4,\n \"max_hip_angle_deg\": 165.6,\n \"hip_depth_delta\": -0.577,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 23.81,\n \"knee_valgus_proxy\": 0.1371,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.337,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.99\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 8,\n \"duration_sec\": 2.23,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.01,\n \"symmetry_score\": 0.83,\n \"metrics\": {\n \"rep_duration_sec\": 2.23,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.57,\n \"top_pause_sec\": 2.27,\n \"bottom_pause_sec\": 2.27,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.8,\n \"max_knee_angle_deg\": 162.43,\n \"min_hip_angle_deg\": 81.09,\n \"max_hip_angle_deg\": 164.89,\n \"hip_depth_delta\": -0.6032,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 25.52,\n \"knee_valgus_proxy\": 0.1378,\n \"knee_tracking_score\": 0.86,\n \"stance_width_ratio\": 1.342,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.01,\n \"tempo_consistency_score\": 1.0\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 9,\n \"duration_sec\": 2.03,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.0,\n \"symmetry_score\": 0.84,\n \"metrics\": {\n \"rep_duration_sec\": 2.03,\n \"eccentric_duration_sec\": 1.37,\n \"concentric_duration_sec\": 0.67,\n \"tempo_ratio\": 2.04,\n \"top_pause_sec\": 2.07,\n \"bottom_pause_sec\": 2.07,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 95.63,\n \"max_knee_angle_deg\": 160.52,\n \"min_hip_angle_deg\": 81.17,\n \"max_hip_angle_deg\": 162.13,\n \"hip_depth_delta\": -0.5786,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.82,\n \"knee_valgus_proxy\": 0.1267,\n \"knee_tracking_score\": 0.87,\n \"stance_width_ratio\": 1.33,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.0,\n \"tempo_consistency_score\": 0.91\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 10,\n \"duration_sec\": 2.93,\n \"range_of_motion_score\": 0.54,\n \"stability_score\": 0.17,\n \"symmetry_score\": 0.9,\n \"metrics\": {\n \"rep_duration_sec\": 2.93,\n \"eccentric_duration_sec\": 1.87,\n \"concentric_duration_sec\": 1.07,\n \"tempo_ratio\": 1.75,\n \"top_pause_sec\": 2.97,\n \"bottom_pause_sec\": 2.97,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.95,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.58,\n \"max_knee_angle_deg\": 162.44,\n \"min_hip_angle_deg\": 84.72,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.6712,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 27.82,\n \"knee_valgus_proxy\": 0.1913,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.343,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.17,\n \"tempo_consistency_score\": 0.69\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 11,\n \"duration_sec\": 1.77,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.26,\n \"symmetry_score\": 0.92,\n \"metrics\": {\n \"rep_duration_sec\": 1.77,\n \"eccentric_duration_sec\": 0.93,\n \"concentric_duration_sec\": 0.83,\n \"tempo_ratio\": 1.12,\n \"top_pause_sec\": 1.8,\n \"bottom_pause_sec\": 1.8,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.97,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 96.88,\n \"max_knee_angle_deg\": 162.92,\n \"min_hip_angle_deg\": 82.84,\n \"max_hip_angle_deg\": 163.4,\n \"hip_depth_delta\": -0.5249,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.58,\n \"knee_valgus_proxy\": 0.1871,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.415,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.26,\n \"tempo_consistency_score\": 0.79\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 12,\n \"duration_sec\": 2.53,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.09,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.53,\n \"eccentric_duration_sec\": 1.6,\n \"concentric_duration_sec\": 0.93,\n \"tempo_ratio\": 1.72,\n \"top_pause_sec\": 2.57,\n \"bottom_pause_sec\": 2.57,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 94.09,\n \"max_knee_angle_deg\": 161.11,\n \"min_hip_angle_deg\": 80.71,\n \"max_hip_angle_deg\": 161.03,\n \"hip_depth_delta\": -0.5969,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 24.77,\n \"knee_valgus_proxy\": 0.1864,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.355,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.09,\n \"tempo_consistency_score\": 0.87\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n },\n {\n \"rep_id\": 13,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.55,\n \"stability_score\": 0.16,\n \"symmetry_score\": 0.89,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.77,\n \"tempo_ratio\": 1.82,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 89.57,\n \"max_knee_angle_deg\": 161.33,\n \"min_hip_angle_deg\": 77.8,\n \"max_hip_angle_deg\": 162.56,\n \"hip_depth_delta\": -0.5769,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 22.94,\n \"knee_valgus_proxy\": 0.1902,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.333,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.16,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 14,\n \"duration_sec\": 2.17,\n \"range_of_motion_score\": 0.53,\n \"stability_score\": 0.03,\n \"symmetry_score\": 0.91,\n \"metrics\": {\n \"rep_duration_sec\": 2.17,\n \"eccentric_duration_sec\": 1.3,\n \"concentric_duration_sec\": 0.87,\n \"tempo_ratio\": 1.49,\n \"top_pause_sec\": 2.2,\n \"bottom_pause_sec\": 2.2,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.96,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 98.66,\n \"max_knee_angle_deg\": 161.7,\n \"min_hip_angle_deg\": 88.13,\n \"max_hip_angle_deg\": 160.04,\n \"hip_depth_delta\": -0.5895,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.19,\n \"knee_valgus_proxy\": 0.1759,\n \"knee_tracking_score\": 0.82,\n \"stance_width_ratio\": 1.35,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.03,\n \"tempo_consistency_score\": 0.97\n },\n \"variation_hints\": []\n },\n {\n \"rep_id\": 15,\n \"duration_sec\": 2.37,\n \"range_of_motion_score\": 0.51,\n \"stability_score\": 0.15,\n \"symmetry_score\": 0.86,\n \"metrics\": {\n \"rep_duration_sec\": 2.37,\n \"eccentric_duration_sec\": 1.4,\n \"concentric_duration_sec\": 0.97,\n \"tempo_ratio\": 1.44,\n \"top_pause_sec\": 2.4,\n \"bottom_pause_sec\": 2.4,\n \"smoothness_score\": 1.0,\n \"jerk_score\": 0.0001,\n \"landmark_confidence\": 0.93,\n \"hip_lateral_drift\": 0.0,\n \"min_knee_angle_deg\": 102.5,\n \"max_knee_angle_deg\": 162.17,\n \"min_hip_angle_deg\": 93.44,\n \"max_hip_angle_deg\": 162.79,\n \"hip_depth_delta\": -0.6438,\n \"hip_depth_relative_to_knee\": \"above_parallel\",\n \"max_torso_lean_deg\": 20.0,\n \"knee_valgus_proxy\": 0.1904,\n \"knee_tracking_score\": 0.81,\n \"stance_width_ratio\": 1.376,\n \"hip_shift\": 0.0,\n \"bottom_stability_score\": 0.15,\n \"tempo_consistency_score\": 0.94\n },\n \"variation_hints\": [\n \"wide_squat_stance\"\n ]\n }\n ]\n },\n \"issue_summary\": {\n \"issue_counts\": {\n \"shallow_depth\": 2\n },\n \"issues\": [\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 210,\n \"end_frame\": 216,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"rep_id\": 4,\n \"issue\": \"shallow_depth\",\n \"severity\": 1.0,\n \"start_frame\": 239,\n \"end_frame\": 245,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"affected_joints\": [\n \"left_hip\",\n \"right_hip\",\n \"left_knee\",\n \"right_knee\"\n ],\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ],\n \"top_issue_intervals\": [\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.0,\n \"end_sec\": 7.2,\n \"evidence\": {\n \"hip_depth_delta\": -0.745,\n \"threshold\": -0.03,\n \"confidence\": 0.48,\n \"peak_frame\": 210,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.7666,\n \"supporting_frames\": 7\n }\n },\n {\n \"issue\": \"shallow_depth\",\n \"rep_id\": 4,\n \"severity\": 1.0,\n \"start_sec\": 7.967,\n \"end_sec\": 8.167,\n \"evidence\": {\n \"hip_depth_delta\": -0.2859,\n \"threshold\": -0.03,\n \"confidence\": 0.49,\n \"peak_frame\": 239,\n \"variation_context\": {\n \"detected_variation\": \"pause_squat\",\n \"variation_confidence\": 0.95,\n \"not_issues\": [\n \"bottom_pause\",\n \"low_rom_requires_user_intent_check\"\n ]\n },\n \"mean_metric_value\": -0.4774,\n \"supporting_frames\": 7\n }\n }\n ]\n },\n \"priority_cues\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\",\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\",\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"knowledge_cards\": [\n {\n \"card_id\": \"exercise:squat\",\n \"card_type\": \"exercise\",\n \"labels\": [\n \"squat\"\n ],\n \"title\": \"Squat\",\n \"summary\": \"A squat summary should stay grounded in rep evidence while using standardized execution cues for depth, balance, torso position, and stance context.\",\n \"evidence_rules\": [\n \"Use rep analysis and issue markers instead of inferring directly from the video.\",\n \"Describe squat depth, torso control, and balance only when supported by structured evidence.\",\n \"Treat stance-width context as a valid variation unless issue markers show a separate problem.\"\n ],\n \"coaching_points\": [\n \"Reference depth, torso control, and rep-to-rep consistency using the measured evidence.\",\n \"Keep top fixes practical, such as controlling the descent or sitting slightly deeper when `shallow_depth` is present.\",\n \"Keep language descriptive rather than diagnostic.\"\n ],\n \"allowed_interpretations\": [\n \"Target muscles commonly include quads and glutes, but coaching should remain focused on the observed movement evidence.\"\n ],\n \"forbidden_claims\": [],\n \"related_cards\": [\n \"issue:shallow_depth\",\n \"issue:excessive_torso_lean\"\n ],\n \"source_kind\": \"external\",\n \"source_path\": \"/Users/t/Documents/tihado/formcoach-ai/data/knowledge_cards/grounded_exercise_expansion.json\"\n },\n {\n \"card_id\": \"issue:shallow_depth\",\n \"card_type\": \"issue\",\n \"labels\": [\n \"shallow_depth\"\n ],\n \"title\": \"Shallow Depth\",\n \"summary\": \"The squat bottom position stayed above the expected depth threshold in the issue markers.\",\n \"evidence_rules\": [\n \"Only mention this issue when `shallow_depth` exists in `issue_markers.json`.\"\n ],\n \"coaching_points\": [\n \"Sit slightly deeper before standing up.\",\n \"Slow the bottom portion so depth stays consistent.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"equipment:bodyweight\",\n \"card_type\": \"equipment\",\n \"labels\": [\n \"bodyweight\"\n ],\n \"title\": \"Bodyweight Context\",\n \"summary\": \"Bodyweight sessions should keep cues simple and focused on repeatable control.\",\n \"evidence_rules\": [\n \"Treat equipment as context for cue wording, not as a new issue.\"\n ],\n \"coaching_points\": [\n \"Prefer control and repeatability cues that do not assume external load adjustments.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal:beginner_practice\",\n \"card_type\": \"goal\",\n \"labels\": [\n \"beginner_practice\"\n ],\n \"title\": \"Beginner Practice Goal\",\n \"summary\": \"Beginner practice coaching should stay simple, encouraging, and concrete.\",\n \"evidence_rules\": [\n \"Limit the number of corrections in a single summary.\"\n ],\n \"coaching_points\": [\n \"Pick the top one or two form priorities for next time.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"goal_overlay:squat:beginner_practice\",\n \"card_type\": \"goal_overlay\",\n \"labels\": [\n \"squat:beginner_practice\"\n ],\n \"title\": \"Squat Beginner Overlay\",\n \"summary\": \"For beginner-practice squats, keep the tone encouraging and corrections minimal.\",\n \"evidence_rules\": [\n \"Use this overlay only as a prioritization hint for the detected exercise and goal.\"\n ],\n \"coaching_points\": [\n \"Explain what looked stable before introducing the top squat fix.\",\n \"Use simple depth or balance language rather than stacking many cues.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:grounded_only\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"grounded_only\"\n ],\n \"title\": \"Grounded Only\",\n \"summary\": \"The summary must explain only the structured evidence and retrieved knowledge cards.\",\n \"evidence_rules\": [\n \"Do not infer new issues that are absent from JSON.\"\n ],\n \"coaching_points\": [\n \"State confidence limits when the evidence is thin.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_diagnosis\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_diagnosis\"\n ],\n \"title\": \"No Diagnosis\",\n \"summary\": \"The summary must not diagnose pain, injury, imbalance, mobility deficits, or pathology.\",\n \"evidence_rules\": [\n \"Do not use diagnostic language.\"\n ],\n \"coaching_points\": [\n \"Use uncertainty language when evidence is limited.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"diagnosis\",\n \"injury\",\n \"pathology\",\n \"medical assessment\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:no_injury_prevention_claim\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"no_injury_prevention_claim\"\n ],\n \"title\": \"No Injury Prevention Claim\",\n \"summary\": \"The summary must not claim that a cue will prevent injury.\",\n \"evidence_rules\": [\n \"Do not promise injury prevention.\"\n ],\n \"coaching_points\": [\n \"Keep coaching language descriptive and performance-focused.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [\n \"injury prevention\",\n \"prevent injury\"\n ],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n },\n {\n \"card_id\": \"safety:variation_not_issue\",\n \"card_type\": \"safety_rule\",\n \"labels\": [\n \"variation_not_issue\"\n ],\n \"title\": \"Variation Is Not Automatically An Issue\",\n \"summary\": \"A detected variation or listed not-issue should not be overcorrected as a mistake.\",\n \"evidence_rules\": [\n \"Keep valid variation context separate from issue language.\"\n ],\n \"coaching_points\": [\n \"Explain why the variation is treated as context when needed.\"\n ],\n \"allowed_interpretations\": [],\n \"forbidden_claims\": [],\n \"related_cards\": [],\n \"source_kind\": \"builtin\",\n \"source_path\": null\n }\n ]\n}"}, {"role": "assistant", "content": "{\n \"summary\": \"This grounded summary is based on structured artifacts for `squat` rather than direct video interpretation. The highest-priority issue labels were `shallow_depth`. The detected variation was `pause_squat`.\",\n \"what_you_did\": [\n \"You completed 15 detected `squat` reps with the variation labeled as `pause_squat`.\",\n \"Your selected training goal was `beginner_practice`.\"\n ],\n \"what_looked_good\": [\n \"Range of motion showed room to tighten up overall (54%).\",\n \"Rep stability showed room to tighten up overall (7%).\",\n \"Left-right symmetry looked steady overall (87%).\"\n ],\n \"what_changed_across_reps\": [\n \"Rep-to-rep range stayed fairly stable across the set.\"\n ],\n \"valid_variation_vs_issue\": [\n \"The detected variation was `pause_squat`, so it should be treated as context rather than a fault by default.\",\n \"The variation step marked `bottom_pause`, `low_rom_requires_user_intent_check` as not-issue context.\",\n \"The actual issue markers in this set were `shallow_depth`.\"\n ],\n \"top_fixes\": [\n \"Sit slightly deeper before standing up.\"\n ],\n \"next_session_plan\": [\n \"Start with 1 easy set of controlled reps using the same camera angle.\",\n \"Keep your top focus on `shallow_depth`.\",\n \"Compare the next run against this report to see whether the same labels show up again.\"\n ],\n \"confidence_notes\": [\n \"This summary stays grounded to the current JSON evidence and may miss details outside that evidence.\",\n \"Fallback summary was used because the generated summary did not pass verification: (Request ID: Root=1-6a2f0f35-5f19fb0a74977ca40f5ee379;21eb4650-a9e0-420c-ba7e-f8c7dbc0129e)\\n\\n403 Forbidden: This authentication method does not have sufficient permissions to call Inference Providers on behalf of user tiena2cva.\\nCannot access content at: https://router.huggingface.co/v1/chat/completions.\\nMake sure your token has the correct permissions.\"\n ]\n}"}], "metadata": {"run_dir": "/Users/t/Documents/tihado/formcoach-ai/runs/20260614T202924Z-0c3f1578", "exercise": "squat", "goal": "beginner_practice", "equipment": "bodyweight", "issue_count": 2, "variation": "pause_squat"}}