Files
CosmicClash/training/generation5_state.json
T
Josh Creek cb06300685 feat(training): reopen stage 5 with a gate that can see the behaviour
Stage 5 blocked after nine attempts and ~540M steps, every one on
productive_air_touch_fraction. Instrumenting the environment rather than
retuning the reward again found three separate causes, none of which was the
policy's competence.

The gate could not register the behaviour. productive_air_touch_fraction
divides by TOTAL touches in the episode, so a strong ground game dilutes it for
identical aerial play. Stage 4's entire purpose is improving that ground game
(it took forward_motion_fraction 0.24 -> 0.48), so Stage 4's success drove
Stage 5's gate toward zero and the two stages were working against each other.
It also explains why every non-zero reading in the whole lineage came from
degenerate episodes whose single touch happened to be aerial: per-episode 1.0,
which is exactly 0.0100 once meaned over SB3's 100-episode buffer, and 0.0100
was every run's observed maximum. Replaced with
productive_air_touch_episode_fraction, which asks whether the episode contained
a productive aerial at all and cannot be diluted by ground play.

The bar was never derived from anything. AIR_TOUCH_HEIGHT was 5.0 and four
rounds of aerial mechanisms were built on top of it without anyone measuring
where the ball goes. New ball-altitude telemetry over normal match play: the
ball averages ~1.6m, the average episode's peak is ~2.4m, and it clears 5m for
~5% of ticks. Lowered to 3.0, this project's existing airborne threshold, with
_place_air_intercept's band retuned 8-14m -> 6-10m. Simulated against real
physics the pair strictly dominates the old one: 67.8% reach (was 53.2%), 57.3%
above-bar touches (was 41.2%), 5.2m of climb instead of 8.2m. The band could
not be lowered alone -- at a 5m bar, 8-14m was optimal and 5-8m collapses
above-bar touches to 4.3%. This reverses Round 9's explicit "AIR_TOUCH_HEIGHT
stays 5.0"; that objection was about comparability, and a metric that read 0.0
for nine attempts has no history to protect. Pre-2026-08-24 air-touch figures
are not comparable with later ones.

Note AIR_TOUCH_HEIGHT also gates air_touch_bonus_weight's payout, so unlike
Round 9 this DOES change the reward function and the usual "don't resume a
policy shaped by a different reward balance" rule is engaged rather than exempt.
Resuming retry2 anyway is justified on narrower grounds: the changed term has
never once fired (productive_air_touch_fraction exactly 0.0 across nine
attempts, air_touch_fraction at ~0.0003 noise), so no learned value estimate is
attached to it, while the ground handling and scoring retry2 does know are
untouched. The flip side is that at a 3m bar a fully-aligned aerial touch now
pays 0.7 + 0.5 = 1.2 against a ground touch's 0.7, which is the intended
incentive but is a live reward change -- if attempts show touch farming near 3m
rather than genuine intercepts, cut air_touch_bonus_weight rather than raising
the threshold back.

The policy could not climb, and the entropy controller could not see it. Its
target is a sum over heads, which read 21% of h_max -- on target -- while
thrust_y alone sat at 14% of its own ceiling. The measured consequence was a
policy commanding ~0.03 mean vertical thrust when hovering needs 0.408
(120/5 = 24 m/s^2 against 9.8 gravity), leaving it in free fall ~84% of every
episode. Added --min-head-entropy-frac so one starved head raises ent_coef
regardless of the aggregate, and --ent-coef-max because a probe pinned the old
0.05 ceiling for its entire duration with the head still starved.

A 200k-step probe from retry2 with all three in place moved air_touch_fraction
from 0/74 rollouts non-zero to 5/98, ent_coef 0.0102 -> 0.0416 and
vertical_thrust_mean 0.031 -> 0.089, with goal_rate, upright_fraction and
forward_motion_fraction all holding. The gate metric was still 0.0 at that
scale, so its 0.02 floor is marked provisional in generation5.py and should be
re-derived from attempt 1's tail rather than trusted.

Stage 5 expands to 90M timesteps and MAX_RETRIES 4, its goal_rate floor drops
0.75 -> 0.72 (every attempt landed 0.7217-0.7369 and was failed by ~2-4% while
winning its paired evaluations 54-25, 63-23 and 47-32), and state resumes from
20260823-1734-gen5-s5-intercepts-retry2 via resume_override.

Verified: generation5.py --dry-run resolves the resume to retry2 with the new
flags, 123 unit tests pass, probe artifacts removed.
2026-08-24 10:49:05 +01:00

765 lines
25 KiB
JSON

{
"stage_index": 1,
"attempt": 0,
"status": "in_progress",
"log": [
{
"stage_index": 0,
"stage_number": 4,
"stage_name": "handling",
"experiment": "20260816-0858-gen5-s4-handling",
"attempt": 0,
"telemetry_tail": {
"rollout/air_touch_fraction": 3.999999910593033e-05,
"rollout/airborne_fraction": 0.2285692382156849,
"rollout/ep_len_mean": 138.9746000366211,
"rollout/ep_rew_mean": 8.531756190299987,
"rollout/forward_motion_fraction": 0.28261195290088653,
"rollout/goal_rate": 0.5371200009584427,
"rollout/grounded_upright_fraction": 0.47041099911928175,
"rollout/mean_altitude": 2.5816375048160554,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7536708096265793,
"rollout/vertical_thrust_mean": -0.046195002141292206
},
"telemetry_failures": [
"rollout/goal_rate=0.5371 < 0.8000"
],
"evaluation_goal_failures": [
"easy.json: goal_rate=0.710 < 0.800"
],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-16T14:13:26+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-0858-gen5-s4-handling.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 46,
"wins_b": 25,
"draws": 29,
"side_results": {
"a_team_0": {
"wins_a": 20,
"wins_b": 18,
"draws": 12
},
"a_team_1": {
"wins_a": 26,
"wins_b": 7,
"draws": 17
}
},
"physical_team_wins": {
"team_0": 27,
"team_1": 44
},
"win_rate_a": 0.46
},
"evals": [
{
"timestamp": "2026-08-16T14:13:26+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-0858-gen5-s4-handling.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 46,
"wins_b": 25,
"draws": 29,
"side_results": {
"a_team_0": {
"wins_a": 20,
"wins_b": 18,
"draws": 12
},
"a_team_1": {
"wins_a": 26,
"wins_b": 7,
"draws": 17
}
},
"physical_team_wins": {
"team_0": 27,
"team_1": 44
},
"win_rate_a": 0.46
}
],
"decision": "fail"
},
{
"stage_index": 0,
"stage_number": 4,
"stage_name": "handling",
"experiment": "20260816-1513-gen5-s4-handling-retry1",
"attempt": 1,
"telemetry_tail": {
"rollout/air_touch_fraction": 7.999999821186065e-05,
"rollout/airborne_fraction": 0.21746457129716873,
"rollout/ep_len_mean": 119.63403997802735,
"rollout/ep_rew_mean": 10.153738673210144,
"rollout/forward_motion_fraction": 0.3045943345427513,
"rollout/goal_rate": 0.6827200036048889,
"rollout/grounded_upright_fraction": 0.3728669992983341,
"rollout/mean_altitude": 2.524057677268982,
"rollout/productive_air_touch_fraction": 3.999999910593033e-05,
"rollout/upright_fraction": 0.7505921430587769,
"rollout/vertical_thrust_mean": -0.030821001116302794
},
"telemetry_failures": [
"rollout/goal_rate=0.6827 < 0.8000"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-16T20:26:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-1513-gen5-s4-handling-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 58,
"wins_b": 24,
"draws": 18,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 14,
"draws": 11
},
"a_team_1": {
"wins_a": 33,
"wins_b": 10,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 35,
"team_1": 47
},
"win_rate_a": 0.58
},
"evals": [
{
"timestamp": "2026-08-16T20:26:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-1513-gen5-s4-handling-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 58,
"wins_b": 24,
"draws": 18,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 14,
"draws": 11
},
"a_team_1": {
"wins_a": 33,
"wins_b": 10,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 35,
"team_1": 47
},
"win_rate_a": 0.58
}
],
"decision": "fail"
},
{
"stage_index": 0,
"stage_number": 4,
"stage_name": "handling",
"experiment": "20260816-2126-gen5-s4-handling-retry2",
"attempt": 2,
"telemetry_tail": {
"rollout/air_touch_fraction": 9.999999776482581e-05,
"rollout/airborne_fraction": 0.22292538091540337,
"rollout/ep_len_mean": 104.10827992248535,
"rollout/ep_rew_mean": 9.0257121925354,
"rollout/forward_motion_fraction": 0.31477042868733407,
"rollout/goal_rate": 0.7731199976205826,
"rollout/grounded_upright_fraction": 0.3524109998345375,
"rollout/mean_altitude": 2.5850543739795686,
"rollout/productive_air_touch_fraction": 7.999999821186065e-05,
"rollout/upright_fraction": 0.7720990960597992,
"rollout/vertical_thrust_mean": 0.003765997685031034
},
"telemetry_failures": [
"rollout/goal_rate=0.7731 < 0.8000"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-17T02:36:22+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 65,
"wins_b": 22,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 30,
"wins_b": 14,
"draws": 6
},
"a_team_1": {
"wins_a": 35,
"wins_b": 8,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 49
},
"win_rate_a": 0.65
},
"evals": [
{
"timestamp": "2026-08-17T02:36:22+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/promoted/easy.json",
"seed": 1,
"episodes": 100,
"wins_a": 65,
"wins_b": 22,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 30,
"wins_b": 14,
"draws": 6
},
"a_team_1": {
"wins_a": 35,
"wins_b": 8,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 49
},
"win_rate_a": 0.65
}
],
"decision": "pass",
"decision_override": {
"date": "2026-08-17",
"original_decision": "fail",
"original_failures": [
"rollout/goal_rate=0.7731 < 0.8000"
],
"reason": "Human override. Only miss was the training goal-rate floor, at 0.7731 vs 0.80; every evaluation gate passed (65-22-13 vs promoted/easy.json, 87% non-draw, 12.6% physical-side imbalance) and the goal rate improved monotonically across all three attempts (0.537 -> 0.683 -> 0.773). Also promoted to Game/bots/promoted/medium.json on the same evidence. Stage 5 resumes from this checkpoint."
}
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260819-2307-gen5-s5-intercepts",
"attempt": 0,
"telemetry_tail": {
"rollout/air_touch_fraction": 3.999999910593033e-05,
"rollout/airborne_fraction": 0.2607660475373268,
"rollout/ep_len_mean": 110.36292008972168,
"rollout/ep_rew_mean": 18.444599359512328,
"rollout/forward_motion_fraction": 0.3145952378213406,
"rollout/goal_rate": 0.760879998922348,
"rollout/grounded_upright_fraction": 0.18850000035762787,
"rollout/mean_altitude": 3.2910697083473206,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7767313802242279,
"rollout/vertical_thrust_mean": 0.036809997959644535
},
"telemetry_failures": [
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-20T10:57:16+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-2307-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 49,
"wins_b": 32,
"draws": 19,
"side_results": {
"a_team_0": {
"wins_a": 24,
"wins_b": 17,
"draws": 9
},
"a_team_1": {
"wins_a": 25,
"wins_b": 15,
"draws": 10
}
},
"physical_team_wins": {
"team_0": 39,
"team_1": 42
},
"win_rate_a": 0.49
},
"evals": [
{
"timestamp": "2026-08-20T10:57:16+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-2307-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 49,
"wins_b": 32,
"draws": 19,
"side_results": {
"a_team_0": {
"wins_a": 24,
"wins_b": 17,
"draws": 9
},
"a_team_1": {
"wins_a": 25,
"wins_b": 15,
"draws": 10
}
},
"physical_team_wins": {
"team_0": 39,
"team_1": 42
},
"win_rate_a": 0.49
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260820-1157-gen5-s5-intercepts-retry1",
"attempt": 1,
"telemetry_tail": {
"rollout/air_touch_fraction": 3.999999910593033e-05,
"rollout/airborne_fraction": 0.26865795205533505,
"rollout/ep_len_mean": 114.6417999572754,
"rollout/ep_rew_mean": 22.072290691375734,
"rollout/forward_motion_fraction": 0.3363774284422398,
"rollout/goal_rate": 0.7213600025177002,
"rollout/grounded_upright_fraction": 0.20986333368718624,
"rollout/mean_altitude": 3.3522593455314635,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.781577188372612,
"rollout/vertical_thrust_mean": 0.039050997858699414
},
"telemetry_failures": [
"rollout/goal_rate=0.7214 < 0.7500",
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-20T23:56:33+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260820-1157-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 52,
"wins_b": 29,
"draws": 19,
"side_results": {
"a_team_0": {
"wins_a": 23,
"wins_b": 17,
"draws": 10
},
"a_team_1": {
"wins_a": 29,
"wins_b": 12,
"draws": 9
}
},
"physical_team_wins": {
"team_0": 35,
"team_1": 46
},
"win_rate_a": 0.52
},
"evals": [
{
"timestamp": "2026-08-20T23:56:33+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260820-1157-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 52,
"wins_b": 29,
"draws": 19,
"side_results": {
"a_team_0": {
"wins_a": 23,
"wins_b": 17,
"draws": 10
},
"a_team_1": {
"wins_a": 29,
"wins_b": 12,
"draws": 9
}
},
"physical_team_wins": {
"team_0": 35,
"team_1": 46
},
"win_rate_a": 0.52
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260821-0056-gen5-s5-intercepts-retry2",
"attempt": 2,
"telemetry_tail": {
"rollout/air_touch_fraction": 3.999999910593033e-05,
"rollout/airborne_fraction": 0.2582751900553703,
"rollout/ep_len_mean": 107.35483990478515,
"rollout/ep_rew_mean": 21.299435565948485,
"rollout/forward_motion_fraction": 0.34663380977511404,
"rollout/goal_rate": 0.7518799985647202,
"rollout/grounded_upright_fraction": 0.18188000024855136,
"rollout/mean_altitude": 3.246318883895874,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7892111427783967,
"rollout/vertical_thrust_mean": 0.06337799821014051
},
"telemetry_failures": [
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-21T12:49:28+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260821-0056-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 56,
"wins_b": 31,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 27,
"wins_b": 20,
"draws": 3
},
"a_team_1": {
"wins_a": 29,
"wins_b": 11,
"draws": 10
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 49
},
"win_rate_a": 0.56
},
"evals": [
{
"timestamp": "2026-08-21T12:49:28+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260821-0056-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 56,
"wins_b": 31,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 27,
"wins_b": 20,
"draws": 3
},
"a_team_1": {
"wins_a": 29,
"wins_b": 11,
"draws": 10
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 49
},
"win_rate_a": 0.56
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260822-1242-gen5-s5-intercepts",
"attempt": 0,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.00037999999150633814,
"rollout/airborne_fraction": 0.3646399522125721,
"rollout/ep_len_mean": 114.69971998596192,
"rollout/ep_rew_mean": 28.210284183502196,
"rollout/forward_motion_fraction": 0.4648521428704262,
"rollout/goal_rate": 0.7230000025033951,
"rollout/grounded_upright_fraction": 0.19716999983787536,
"rollout/mean_altitude": 3.4371472091674806,
"rollout/productive_air_touch_fraction": 5.9999998658895494e-05,
"rollout/upright_fraction": 0.7519121896028519,
"rollout/vertical_thrust_mean": 0.06471899795718491
},
"telemetry_failures": [
"rollout/goal_rate=0.7230 < 0.7500",
"rollout/productive_air_touch_fraction=0.0001 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-23T01:58:22+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260822-1242-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 54,
"wins_b": 25,
"draws": 21,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 13,
"draws": 12
},
"a_team_1": {
"wins_a": 29,
"wins_b": 12,
"draws": 9
}
},
"physical_team_wins": {
"team_0": 37,
"team_1": 42
},
"win_rate_a": 0.54
},
"evals": [
{
"timestamp": "2026-08-23T01:58:22+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260822-1242-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 54,
"wins_b": 25,
"draws": 21,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 13,
"draws": 12
},
"a_team_1": {
"wins_a": 29,
"wins_b": 12,
"draws": 9
}
},
"physical_team_wins": {
"team_0": 37,
"team_1": 42
},
"win_rate_a": 0.54
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260823-0258-gen5-s5-intercepts-retry1",
"attempt": 1,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.00025999999418854715,
"rollout/airborne_fraction": 0.3638041906952858,
"rollout/ep_len_mean": 116.89268002319336,
"rollout/ep_rew_mean": 26.092227859497072,
"rollout/forward_motion_fraction": 0.46304495227336884,
"rollout/goal_rate": 0.7216800025701523,
"rollout/grounded_upright_fraction": 0.18362999991327525,
"rollout/mean_altitude": 3.4676120114326476,
"rollout/productive_air_touch_fraction": 7.999999821186065e-05,
"rollout/upright_fraction": 0.7491730006933213,
"rollout/vertical_thrust_mean": 0.052752998621095906
},
"telemetry_failures": [
"rollout/goal_rate=0.7217 < 0.7500",
"rollout/productive_air_touch_fraction=0.0001 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-23T16:34:58+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260823-0258-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 63,
"wins_b": 23,
"draws": 14,
"side_results": {
"a_team_0": {
"wins_a": 29,
"wins_b": 13,
"draws": 8
},
"a_team_1": {
"wins_a": 34,
"wins_b": 10,
"draws": 6
}
},
"physical_team_wins": {
"team_0": 39,
"team_1": 47
},
"win_rate_a": 0.63
},
"evals": [
{
"timestamp": "2026-08-23T16:34:58+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260823-0258-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 63,
"wins_b": 23,
"draws": 14,
"side_results": {
"a_team_0": {
"wins_a": 29,
"wins_b": 13,
"draws": 8
},
"a_team_1": {
"wins_a": 34,
"wins_b": 10,
"draws": 6
}
},
"physical_team_wins": {
"team_0": 39,
"team_1": 47
},
"win_rate_a": 0.63
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260823-1734-gen5-s5-intercepts-retry2",
"attempt": 2,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.00017999999597668648,
"rollout/airborne_fraction": 0.3556901432573795,
"rollout/ep_len_mean": 113.32128012084961,
"rollout/ep_rew_mean": 26.062709903717042,
"rollout/forward_motion_fraction": 0.47930147713422777,
"rollout/goal_rate": 0.7368800011873246,
"rollout/grounded_upright_fraction": 0.17428000004589558,
"rollout/mean_altitude": 3.3864299325942993,
"rollout/productive_air_touch_fraction": 9.999999776482581e-05,
"rollout/upright_fraction": 0.7565201911926269,
"rollout/vertical_thrust_mean": 0.04238799838422798
},
"telemetry_failures": [
"rollout/goal_rate=0.7369 < 0.7500",
"rollout/productive_air_touch_fraction=0.0001 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-24T07:07:11+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260823-1734-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 47,
"wins_b": 32,
"draws": 21,
"side_results": {
"a_team_0": {
"wins_a": 22,
"wins_b": 18,
"draws": 10
},
"a_team_1": {
"wins_a": 25,
"wins_b": 14,
"draws": 11
}
},
"physical_team_wins": {
"team_0": 36,
"team_1": 43
},
"win_rate_a": 0.47
},
"evals": [
{
"timestamp": "2026-08-24T07:07:11+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260823-1734-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 47,
"wins_b": 32,
"draws": 21,
"side_results": {
"a_team_0": {
"wins_a": 22,
"wins_b": 18,
"draws": 10
},
"a_team_1": {
"wins_a": 25,
"wins_b": 14,
"draws": 11
}
},
"physical_team_wins": {
"team_0": 36,
"team_1": 43
},
"win_rate_a": 0.47
}
],
"decision": "fail"
}
],
"resume_override": {
"stage_index": 1,
"experiment": "20260823-1734-gen5-s5-intercepts-retry2",
"reason": "Round 10 (2026-08-24): Stage 5 reopened after nine attempts blocked on a gate that could not register the behaviour it measured. productive_air_touch_fraction divided by total touches (so Stage 4's ground game diluted it), AIR_TOUCH_HEIGHT 5.0 was ~2x the measured mean episode ball peak of 2.4m, and the aggregate entropy controller hid a collapsed thrust_y head that left the policy commanding 0.03 vertical thrust against the 0.408 needed to hover. Metric, bar + drill band, and per-head exploration floor all changed. Unlike Round 9 this DOES change the reward function -- AIR_TOUCH_HEIGHT also gates air_touch_bonus_weight's payout -- but the changed term has never once fired (productive_air_touch_fraction exactly 0.0 for nine attempts), so there is no learned value estimate attached to it, while retry2's ground handling and scoring are untouched and are what is being kept."
}
}