{
  "scope": "Audit of saved recipes and existing recordings; confirmed differences are not an ablation proving each causal contribution.",
  "checkpoint_sha256": "e6d797f9fcdccacddd22392c90a82c275a1c6e159426219ab64a6dc339500cb4",
  "official_bridge_artifact": false,
  "official_t800": {
    "control_dt_s": 0.01,
    "amp": {
      "dataset_path": "datasets/amp/t800/config/dataset.yaml",
      "include_joint_vel": "true",
      "include_base_lin_vel": "false",
      "include_projected_gravity": "true",
      "include_foot_features": "false",
      "amp_obs_group": "disc",
      "frame_length": "10",
      "frame_dim": "52",
      "flatten_history_dim": "false",
      "frame_normalization": "true",
      "frame_normalization_clip": "10.0",
      "discriminator_hidden_dims": [
        "512",
        "256",
        "128"
      ],
      "style_reward_scale": "7.5",
      "task_style_lerp": "0.4",
      "step_dt": "null",
      "loss_type": "LSGAN",
      "grad_penalty_scale": "10.0",
      "disc_logit_reg": "0.01",
      "disc_learning_rate": "0.00025",
      "disc_weight_decay": "0.0001",
      "disc_max_grad_norm": "1.0",
      "disc_epochs": "2",
      "disc_batch_size": "2.0",
      "disc_update_interval": "2",
      "disc_replay_buffer_size": "200000",
      "disc_replay_samples": "4096",
      "condition_dim": "0",
      "amp_condition_group": "amp_command"
    },
    "air_time": {
      "weight": "1.0",
      "threshold_s": "0.3"
    },
    "slide_norm": "linear Euclidean speed, contact force threshold >1N",
    "style_reward": "dt * 7.5 * exp(-0.25*(D-1)^2); mixed as 0.6 style + 0.4 task"
  },
  "bridge_v3": {
    "control_dt_s": 0.02,
    "amp_frames": 2,
    "history_span_s": 0.02,
    "amp_frame_terms": [
      "relative joint positions 21",
      "joint velocities 21"
    ],
    "amp_agent_config": {
      "amp_reward_coef": "0.5",
      "amp_task_reward_lerp": "0.7",
      "amp_discr_hidden_dims": [
        "256",
        "256"
      ]
    },
    "air_time_weight": "0.0",
    "inherited_air_time_command_threshold": "0.5",
    "slide_norm": "squared planar link speed, contact found boolean",
    "style_reward": "0.5 * clamp(1-0.25*(D-1)^2, min=0), NOT dt scaled; mixed as 0.3 style + 0.7 dt-scaled task",
    "style_max_rate_after_mix_per_s": 7.5,
    "official_style_max_rate_after_mix_per_s": 4.5,
    "important_units_note": "0.5 vs 7.5 alone does not establish weaker style: Bridge style is not dt scaled. Units and kernels differ.",
    "joint_excursions": {
      "left_hip_pitch": {
        "reference_deg": 37.09745684026411,
        "policy_deg": 6.705099105834961
      },
      "left_knee_pitch": {
        "reference_deg": 64.76853368192613,
        "policy_deg": 15.432031631469727
      },
      "left_shoulder_pitch": {
        "reference_deg": 26.478408165950707,
        "policy_deg": 6.623953342437744
      },
      "right_hip_pitch": {
        "reference_deg": 31.465273863202096,
        "policy_deg": 6.309335708618164
      },
      "right_knee_pitch": {
        "reference_deg": 56.00671295805211,
        "policy_deg": 14.151528358459473
      },
      "right_shoulder_pitch": {
        "reference_deg": 22.189023233198046,
        "policy_deg": 5.758846282958984
      }
    },
    "actor_std": [
      0.05585053190588951,
      0.04883100464940071,
      0.05585053190588951,
      0.038430992513895035,
      0.045713141560554504,
      0.07507404685020447,
      0.05585053190588951,
      0.04908651486039162,
      0.05585053190588951,
      0.038501061499118805,
      0.04859288036823273,
      0.07243771106004715,
      0.0541052520275116,
      0.05235987529158592,
      0.04322386905550957,
      0.031637415289878845,
      0.31570157408714294,
      0.05246712267398834,
      0.05667902156710625,
      0.035372331738471985,
      0.047123927623033524
    ]
  },
  "confirmed_backend_issues": {
    "source": "/home/z/bridge/rl/BoosterT1mjlab/beyondAMP/source/rsl_rl_amp/rsl_rl_amp/algorithms/amp_ppo/amp_ppo.py",
    "source_sha256": "faa07119ab2d6ae8e29e0fc699e31a73d95014e88246bb864aaa6b0ca77edb3e",
    "normalizer_updated_from_normalized_data": true,
    "normalizer_reproduction": {
      "raw_mean": [
        2.0
      ],
      "raw_variance": [
        0.009999992325901985
      ],
      "raw_updates_mean": [
        1.9999995000001247
      ],
      "raw_updates_variance": [
        0.010001239825342026
      ],
      "legacy_updates_mean": [
        1.50949671290246
      ],
      "legacy_updates_variance": [
        0.10310077076100134
      ]
    },
    "gradient_penalty_input": "legacy gradient penalty uses raw expert data; classifier loss/reward use normalized data. Official T800 computes its penalty on normalized inputs.",
    "shared_optimizer": "legacy PPO and discriminator share adaptive Adam learning rate; official T800 has a separate discriminator optimizer."
  },
  "ruled_out_as_primary_explanation": {
    "reference_has_no_large_step": false,
    "height_target_strongly_suppresses_reference": false,
    "reference_mean_height_reward": 0.9573429811048695,
    "repeated_get_observation_advances_history": "mjlab compute() defaults update_history=False and returns cached observation; no new defect established here."
  },
  "live_nominal_forward": {
    "duration_s": 6.0,
    "completed": true,
    "automatic_resets": false,
    "mean_task_reward_per_step": 0.08842483922839164,
    "mean_discriminator_score": -0.2836761699914932,
    "mean_style_before_mix_per_step": 0.293721874833107,
    "task_contribution_after_mix_per_step": 0.061897387459874144,
    "style_contribution_after_mix_per_step": 0.0881165624499321,
    "both_feet_contact_fraction": 0.556,
    "one_foot_contact_fraction": 0.444,
    "mean_weighted_reward_rates": {
      "track_linear_velocity": 2.05411434173584,
      "track_angular_velocity": 1.286018967628479,
      "upright": 0.6560919880867004,
      "dof_pos_limits": -0.08023220300674438,
      "action_rate_l2": -0.004310289863497019,
      "air_time": 0.0,
      "height": 0.548879086971283,
      "feet_slide": -0.039319537580013275
    }
  }
}
