# Experiment insights

This log records measured experiments and the decisions they support. No teacher or visual student is qualified yet. See `../context.md` for the inherited simulator baseline.

## 2026-09-13 — native runner audit and first evidence

GPU 1 is available; GPU 0's linux3 service is unrelated. Kept default teacher PPO,
37-float observations, no cameras and native 20 Hz / 1 kHz timing. Two startup
failures (partial-callable serialization and absence of pip in uv environment)
were fixed without simulator changes and retained in the index.

The 12-update seed-41 audit produced finite losses and nonzero finite gradients.
Reload verified exact actor/critic (including normalization) and Adam state,
learning rate and curriculum counter. Cooperative stop saved update 13 at vector
step 312, and reload then continued from update 14 without repeating its counter.
Simulator state and RNG are intentionally a fresh branch; this is not bitwise
trajectory continuation. Initial 4-episode nominal evaluation: 0/4 strict success,
95% Wilson interval [0, 0.490], mean final goal error 0.160 m. This is an early
pipeline check, not teacher qualification.

Code audit found direct evaluation inference bypassed the training wrapper's
component action clamp before previous-action observations were recorded. Added
the same clamp to canonical PPO load_policy so evaluation history matches training.
The initial pilot is retained as pre-fix diagnostic evidence and must not be used
for model selection. Canonical evaluator now also records terminal goal error and
accepts an optional recording callback; its quotas, success predicate, and physics
loop remain unchanged.

Dedicated /rl-training/ page and homepage card deployed using croc/untu_vps.
Initial public hash, existing-route, desktop and mobile QA passed.

Native offscreen recording was checked directly for simulator mutation: zero
change to qpos, qvel and observations across each render call in 30 policy steps.
Independent rendered/unrendered rollouts differed by 0.000600 at most; two
unrendered repeats differed by the same amount. Therefore this is a no-mutation
check on the identical task/controller, not a claim of bitwise replay across
separate GPU runs. The new recorder hides only the fragmented environment scan
in its private rendering model to improve visibility; robot/table/bottle meshes
and all simulator collision geometry remain intact.

## Checkpoint 100 — reward increase is not grasp learning

Seed 42, native PPO, 1024 worlds. Validation at DR 0 and 0.05 both scored 0/128
(strict success, Wilson 95% [0, 0.02914]). Nominal invalidity was 128/128; every
nominal episode had disallowed robot-room contact, peak penetration averaged
3.74 mm, and no bilateral contact or 2 cm lift. Mean final goal error was 0.221 m
(nominal) and 0.187 m (DR 0.05). These failures are not attributed to unreachable
starts. The complete nominal clip shows descent into/past the bottle and contact
with the table, without a controlled grasp/lift. Increasing reach reward alone
must not be interpreted as success. Continue the native baseline to the next
milestone; if contact/lift remains absent, test explicitly recorded grasp/lift
shaping or exploration changes while retaining the exact success predicate.

The publisher's long identifiers initially overflowed on mobile after curves
were added. Wrapping/box sizing was corrected, redeployed and verified. Public
checks passed nine file hashes, existing routes, desktop/mobile layout, and the
15-second pilot video's MIME, byte ranges, duration, seeking and playback.

First milestone complete: primary full teacher DR scored 0/384 over seeds 1101–1103 (Wilson 95% upper bound 0.99%); 49.5% of those episodes were invalid. Five nominal/restricted-DR suites each scored 0/128. All 1,024 validation episodes completed with no filtering. No seed from the final-test set was used. Two separately labeled video episodes are illustrations only. Phase 1 remains unqualified; Phase 2 training has not started.

## Native baseline paused; explicit contact/lift reward experiment launched

The native run stopped gracefully at 333 completed PPO updates (7,992 vector
steps, 8,183,808 transitions), preserving `stopped.pt`. Recent native training
had zero bilateral contact and lift, while entropy had fallen to ~1.58 and the
adaptive learning rate reached 1e-5. This supports testing the learning signal
rather than attributing failures to unreachable starts.

New run `20260913T072133Z_contact_lift_ppo_teacher_seed42` uses the same seed,
1,024 worlds, native PPO settings and teacher DR, initialized fresh. The only
experimental training change is optional `contact-lift-v1` shaping: pad-center
alignment (0.5), valid bilateral contact (0.5), contact-supported clearance (2.0),
and current hold progress (1.0), with native dt scaling. All added terms are
gated by the existing finite/contact/penetration/speed/force validity criteria.
The ordinary success predicate, episodes, physical controller and observations
are unchanged. Two invariant tests confirm the default remains native and
invalid/unilateral lifting cannot earn the contact-lift reward. Initial scaled
updates have finite gradients/losses/KL; task competence remains unproven.

The runner's `max_iterations` metadata inherited 5,000 from MJLab although the
explicit `learn(10000)` budget and progress `total_it` were 10,000. The native
field is unused by the wrapper's learning call. Future launches align these
metadata fields; existing run snapshots are retained exactly as executed.

The paused native checkpoint was re-evaluated nominally: 0/128 strict success, 0.0% invalid episodes, mean goal error 0.160 m, and no 2 cm lift. Avoiding collisions did not produce a grasp, supporting the contact/lift shaping experiment.

## Visual transfer and student infrastructure

The original single-frame ACT weights and outputs are unchanged after extracting
shared exportable features (exact equality). A 16-frame ACT variant accepts only
robot proprioception history, the commanded goal and current 320×200 RGB; its
scripted and eager outputs matched exactly and gradients were finite.

The first teacher-transfer check caught cached observations in the independent
observation manager. After bypassing that cache, all 37 teacher floats and the
resulting clamped actions matched the native state actor exactly over 24 steps
and two worlds. A short canonical visual rollout recorded 18 current image/action
pairs and passed exact causal-history/repeat-first checks. This is diagnostic
only, with zero completed episodes; it is not qualified teacher supervision.

The sharded distillation loop now supports bounded-memory loading, normalization,
validation loss, atomic checkpoints and cooperative stop/resume. A six-update
image optimizer check and its interrupted/resumed counterpart produced exactly
the same final model tensors. These checks do not establish visual task success.

## Controller audit — root cause beyond reward shaping

One-second canonical motion probes found that `max_dq=.001` with independent
joint clipping achieved only 5.7–6.1% of requested ±X displacement. Both requested
Z directions initially moved slightly the wrong way. The IK solver clips a
position correction relative to the measured joints; .001 rad is not an
integrated 1 rad/s velocity limit. Clipping individual joints also distorts the
linearized Cartesian correction direction. This explains a substantial control
bottleneck; earlier failures are not evidence of an unreachable-start ceiling.

An optional .02-rad direction-preserving correction with absolute 8 ms joint-target
deadlines achieved 70.4–73.5% of requested displacement in all six directions,
with peak arm speed below .54 rad/s, penetration below .515 mm and no disallowed
contact in those probes. The same policy is still 20 Hz, physics 1 kHz, and
actuator gains/force limits and all success thresholds are unchanged. Across 850
observed physics steps, actual arm-control writes changed only at the 8 ms
boundaries. A partial reset preserved the shared clock and other worlds' targets.
This matches the legacy 125 Hz target cadence, not a claim of identical IK paths.

The variant is explicit `mjlab-gs-cartesian-v4`; incompatible v3 checkpoint loading
is rejected. Canonical defaults and prior v3 runs retain their original behavior.
Run `20260913T075521Z_servo125_contact_teacher_seed42` now trains with this profile,
the same contact-lift shaping and seed/DR/PPO settings. Prior runs and their
checkpoints remain preserved. Qualification still requires learned task evidence.

The servo/transfer publication passed public QA for 43 files plus preserved
routes, mobile/desktop layout and video duration/seeking/playback. The first
v4 teacher checkpoint still scored 0/128 nominal successes; it is not qualified.
Further diagnosis should include a clearly labeled nominal grasp mechanics
positive-control probe (if needed), later learned checkpoints and grasp aperture/
contact trajectories. Such a probe must never be counted as learned-policy
success or used to filter the evaluation distribution.


## 2026-09-13 — grasp geometry isolated; new RL profile

The 125 Hz controller's first learned checkpoint scored **0/384** on full teacher DR (seeds 1101–1103); invalid episode rate was **89.06%**. Restricted nominal evaluation was also 0/128. These failures do not support attributing low success to unreachable starts. The run was cooperatively stopped after **246 completed updates**, preserving its optimizer/checkpoint and all evaluations.

A separately labeled scripted nominal mechanics grid tested all 12 combinations of pad-site target heights (bottle root +0, +15, +30 mm) and requested apertures (36, 33, 30, 25 mm). Root and +15 mm targets all exceeded the unchanged 3 mm penetration limit (5.26–8.37 mm). All four +30 mm targets achieved strict valid holds of 7.40–8.46 s, with peak penetration 0.514–1.473 mm. This establishes a feasible nominal grasp and identifies a conflict in the old pad-to-root shaping. It is **not learned-policy evaluation, a randomized performance estimate, or a reachability classifier**. Physics continues for diagnostic traces after any hard termination; validity is never reset. All planned settings are retained in `results/comparisons/grasp_mechanics/aperture_grid`.

Launched `20260913T081801Z_grasp_geometry_teacher_seed42`, fresh native PPO with `grasp-geometry-v2`. The new profile uses a pad midpoint target 30 mm along the bottle's local Z axis, broad/fine approach rewards, and a smooth measured-aperture incentive (open when distant, 33 mm when aligned). It replaces the old broad TCP-to-root reward and retains native goal/regularization/curriculum terms. Valid bilateral contact, lift and hold provide stronger rewards. Reward changes do not alter strict success, termination, scene, gains, randomization or sampling. Six reward/contract tests pass, including rotated-bottle geometry and invalid-episode reward suppression. PPO gradients and losses are finite in the new run. This teacher remains unqualified.

Two native-rendered scripted videos show the successful raised target and the invalid root target. Their labels explicitly distinguish mechanics diagnostics from learned policies. The image student remains at infrastructure-only checks pending teacher competence.


The student closed-loop adapter completed two full 15 s canonical visual episodes (600 steps, 74.1 s wall time), including an actual between-episode history reset. A partial-reset/causality test also passed with poisoned critic inputs. Diagnostic weights scored 0/2, as expected for unqualified infrastructure weights; every trial counted. These weights use their original v3 controller contract and cannot be treated as the intended v4 final export. Full protocol and episode evidence are in `results/student/infrastructure/closed_loop_reset_check/`.


## 2026-09-13 — aperture exploration comparison

Geometry-v2 checkpoint 100 produced **0/128** nominal strict successes with **0/128 invalid episodes** and zero bilateral contact. A separately declared full 15 s nominal trace (seed 1101, one episode; `results/comparisons/gripper_exploration/model100_nominal`) showed gripper action +1 throughout and measured spacing about 100.46 mm. The policy reached toward the bottle but never closed. The narrow Gaussian aperture reward has almost no value at that observed spacing when the target is near 33 mm, leaving a poor exploration signal.

Kept geometry-v2 running on GPU 1 as a comparison and launched fresh PPO `20260913T082948Z_linear_aperture_teacher_seed42` on available GPU 0 capacity. `grasp-aperture-v3` changes only the aperture reward kernel to bounded linear absolute-error progress over the 100.8 mm range. Its weight, all other reward terms, strict objective, controller and distribution match v2. The test confirms incremental reward for closure from the observed open state. This is a hypothesis under test, not a success claim. The unrelated GPU 0 service remains untouched. Both runs retain independent checkpoints/source/configs and monitored evaluation.

Two EPA horizon-capacity warnings appeared in the new run's early stdout; retain these logs and inspect whether they recur or affect contact validity before selecting a final policy. No simulator collision tolerance or capacity has been changed in response.


Source inspection confirms the EPA warning sets MuJoCo-Warp's per-world `EPA_HORIZON` overflow flag and exits that contact solve without a valid face. The flag persists until world reset. New evaluations now retain `physics_overflow_bits` for each completed trial, in addition to the unchanged ordinary success result and complete denominator. This enables a contact-fidelity audit; previous evaluations lack this field and must not be assumed overflow-free merely because they lack the new metadata.


## 2026-09-13 — scripted initialization source for continued RL

While retaining both uninitialized PPO comparisons, tested the verified raised-target scripted guide at teacher DR scale 0.05. It completed **64/64** strict successes on seed 2501 and **64/64** on seed 2502, all full 15 s episodes, with all 38,400 state/action pairs retained. These are scripted restricted-DR results, not learned-policy success or reachability estimates. The source uses canonical physics/controller and the same objective.

Fitted the native 37-state MLP actor to seed 2501 with seed 2502 supervision validation. All trajectories remain in the data; the loss explicitly balances five guide phases so long stationary holds do not dominate short closure transitions. Best validation action MAE was about 0.010, which does not prove closed-loop performance. A third-seed closed-loop evaluation is now running. This optional initialization keeps the eventual teacher an RL-trained policy: the native PPO critic/optimizer/counter start fresh, actor and normalization are loaded explicitly with a 0.15 initial exploration standard deviation, and the original full held-out teacher qualification remains required. No image-policy training or qualification is implied.


The fitted bootstrap actor's independent scale-0.05 closed-loop evaluation (seed 2504) was **0/128**, with 89.06% invalid episodes, mean peak penetration 3.468 mm, and mean bilateral-contact fraction 2.54%. Low supervised error did not establish closed-loop success. Both scripted source batches had zero physics overflow flags and peak penetration below 0.525 mm.

Launched `20260913T084625Z_bootstrap_ppo_teacher_seed42` on GPU 1 to test whether native PPO can refine the initialized actor's contact behavior. The audit verifies exact actor/normalization load, unchanged fresh critic, empty Adam state and zero counters. The script itself is not used at inference in this run: all rollout actions come from the learned stochastic state actor. The exploration standard deviation starts at 0.15 and is learned by PPO. Geometry-v2 has a cooperative stop scheduled after checkpoint 500, preserving that complete comparison milestone; linear-aperture-v3 continues separately on GPU 0. None is qualified.

The uninitialized linear-aperture checkpoint 100 also completed **0/384** full-DR successes with **97.40%** invalid episodes; nominal and scale 0.05 were each 0/128 with all episodes invalid. Retain these failures as evidence that dense aperture reward alone has not solved the grasp. Both milestone suites preserve all planned scale/seed trials and their success/failure videos.


## 2026-09-13 — corrective data for a state-actor initialization

The timed-guide initialization followed by PPO reverted to a wide, non-grasping aperture: checkpoint 100 was 0/128 nominal with no invalid episodes. Geometry-v2 checkpoint 500 likewise remained 0/128 nominal. Geometry-v2 stopped cleanly at 502 completed updates; linear-aperture-v3 stopped at 536, preserving checkpoint 500 and later stopped checkpoints. Their complete final milestone suites remain running and publishing.

A pose/contact-driven guide was introduced to test whether hidden fixed waits were contributing to imitation failure. It advances on measured alignment and six consecutive bilateral-contact control steps, with reopen/reacquire logic if contact is lost back at table level. It completed 64/64 strict successes on each of seeds 2505 and 2506 at scale 0.05. This remains a scripted source, not learned-policy qualification.

A native actor fitted with canonical observation noise and declared motion/closure-balanced loss reached 10 cm in **52/128** independent trials (seed 2507), but scored **0/128 strict successes**, with 115 invalid episodes and 43 drops. Corrective guide labels were then collected on a 50/50 action blend (seed 2508, 0/64 successes; all data retained). The next actor was 0/128 with 16 invalid episodes (seed 2509). A further policy-only rollout collection with guide labels (seed 2510, 0/64) produced a second corrective-data actor with **1/128 strict successes and zero invalid episodes** on seed 2511. Most trials still did not grasp. These are unqualified initialization experiments; ordinary denominators and all failures are retained.

A bounded three-round continuation now collects labels on the actor's own states, refits using all accumulated data, and evaluates on distinct seeds (2512–2517). Progress, child process identity and commands are recorded in `results/teacher/bootstrap/dagger_loop/progress.json`. Even a useful initialization must subsequently undergo native PPO and the entire original teacher qualification protocol. No image-policy training or final export has started.

A separate owned status writer now refreshes `insights/status.md` and the run index every 30 s, preventing long synchronous evaluation/publication jobs from leaving local status stale. It is recorded in `results/status_job.json` and can be stopped using `results/STATUS_STOP`.


Concurrent milestone publishers exposed a verification race: another completed milestone changed `index.html` between a verifier's manifest read and HTTP hash check. The publication lock already covered build/transfer/deploy; verification now holds the same lock in shared mode through all hash/browser checks. Publishers must wait for active audits, and verifiers wait for deployment completion. Failed audit logs remain recorded; monitors retry using the corrected verifier. Existing pages were not replaced by this failure.


## 2026-09-13 — fixed orientation and lower-noise PPO continuation

The bounded corrective-data continuation completed rounds 3–5, each with 0/128 strict successes (invalid rates 74.22%, 0%, 10.94%, respectively). No initialization was promoted. A guide with a fixed base-frame nominal orientation, computed by FK only, then completed 128/128 scripted scale-0.05 successes across seeds 2520–2521. This removes the previous guide's episode-specific orientation target; no new physics loop is used.

Two native actor checkpoints fitted to this source were tested on seed 2523. Global-MAE selection scored 0/128 strict success, with 75/128 reaching 10 cm; phase-balanced selection was also 0/128, with 70/128 reaching 10 cm. Both had all episodes invalid. The global fit's mean peak penetration was 6.731 mm. A separate nominal trace shows loss of grasp alignment, reopening and dropping: the first >3 mm penetration occurred at 4.3 s with an open command of +0.640 and 81.4 mm spacing, following a lost grasp. The peak penetration is therefore not adequately explained as simply too much gripper closure. The trace and all failures are retained.

Launched `20260913T092809Z_fixed_grasp_bootstrap_ppo_teacher_seed42` on GPU 0, using that global-fit actor with Gaussian exploration initialized to 0.05. Only the distribution standard-deviation parameters changed in `actor_rl_start.pt`; the actor mean and normalization are identical to the fitted source. This run uses clean privileged actor observations (`actor_observation_corruption=false`), with the same 37-value observation ordering, physical DR, controller, reward and strict objective. The change is explicit in config/task/source snapshots. Load audit passed for actor/normalization, fresh critic, fresh optimizer and zero counters. Early PPO updates have not yet established a successful teacher. The earlier timed-bootstrap PPO has a cooperative stop after its checkpoint-500 comparison.

The publication concurrency fix is verified: all three completed PPO milestones successfully republished and passed QA after their retained initial race failures. The latest explicit public audit passed **148 file hashes**, responsive desktop/mobile layout, **19 video seek/playback checks**, and preservation of the existing project routes. Future audits hold the shared publication lock throughout verification.


## 2026-09-13 — pretrained normalization drift isolated and fixed

A controlled fixed-state audit exposed a major problem in the earlier PPO initializations. After the very first PPO rollout/update, the actor normalizer's count changed from 19,200 fitted demonstration states to 43,776 states dominated by the initial rollout. Transplanting only those updated normalization buffers into the unchanged fitted actor increased raw normalized-action MAE on the fixed source-validation states from **0.01048 to 0.46952**. The actual first PPO checkpoint was **0.75009**. This isolates a change of input scale; it is not evidence of task success or a reachability limitation.

Launched `20260913T093744Z_frozen_normalization_grasp_ppo_teacher_seed42`, preserving the fitted actor normalization (`until=0` on the native normalizer) and using initial PPO learning rate 1e-4 rather than 1e-3. The critic normalizer remains trainable. The first real PPO checkpoint retained every actor normalization buffer exactly (count 19,200); the isolated normalization-only action shift was zero, and the actual update's mean applied-action shift was **0.00474**. Mean predicted-action MAE was **0.01268**. The loaded actor/normalization, fresh critic/Adam/counters and configured freeze all passed audit. Freeze is reapplied on resume; normalization tensors remain part of the saved checkpoint.

The superseded unfrozen run was cooperatively stopped, preserving its evidence. The corrected run is live on GPU 0 with clean privileged observations, initial exploration standard deviation 0.05, the same 37-state ordering, v4 control, physical DR and strict objective. It is still unqualified. Audit data and source are in `results/comparisons/initialization_normalization/`; held-out task qualification and the final image export remain outstanding.

## User-directed native lift baseline (2026-09-13, 10:04 UTC)

The user requested native lift-cube-style rewards and success, restricted DR, and sustained training without unnecessary restarts. This supersedes the earlier strict-hold primary criterion and time-driven DR schedule for new experiments. Old results retain their original definition.

- Run: `20260913T100411Z_native_lift_restricted_long_teacher_seed42`; fresh native PPO, no BC initialization or grasp reward additions; 1,024 worlds on cuda:1; 20,000 updates, checkpoints every 500.
- Native staged reach/bring reward, precise goal reward, and native action/joint regularization curriculum. Success is the actual inherited command episode latch for bottle-root distance < 5 cm to the goal. The former strict grasp-and-hold state remains a labeled diagnostic, not the primary gate.
- DR stays enabled with no nominal mixing, initially fixed at scale 0.05. Bottle table-local X is approximately [0.1540,0.1880] m and Y [-0.1326,-0.1144] m; table translation ±7.5 mm, base translation ±5 mm, table/base yaw ±0.75 degrees, initial arm perturbations ±[0.75,0.5,0.5,0.75,0.75,1.5] degrees. Physics randomization and randomized goals remain active. This is a small declared distribution, not a filtered reachable-only metric.
- Every 1,000 updates evaluate 128 trials each on seeds 1101–1103, all counted. Two consecutive complete evaluations at the same stage must both exceed 90%, with rates within 3 percentage points. Only then advance one stage through [0.05,0.10,0.15,0.25,0.35,0.50,0.65,0.80,1.0]. Changes apply on subsequent resets, without restarting the learner.
- No performance-based early stop. Continue the 20,000-update run unless explicitly redirected or a process/numerical failure prevents training. The old run was cooperatively stopped at 190 updates solely to enact the user's requested change.
- Pre-change evidence: frozen-normalization checkpoint 100 lifted above 10 cm in 15/128 nominal trials, but had 0/128 strict-hold successes. These numbers are not relabeled under the new criterion.

Canonical `objective.primary_success` selects the declared metric. Task spec is `bottle-lift-v6-native-goal` for new native-goal experiments; the legacy mode remains the default for old presets. Fixed evaluation quotas, raw invalidity and drop measurements remain. Native-success and old strict-success rates must not be pooled or plotted as if identical.

## Ongoing curve interpretation (user direction, 2026-09-13)

A read-only monitor now refreshes plots and written diagnoses every 100 PPO updates. It compares three 100-update windows within the current DR stage, tracking native success, return per control-tick proxy, episode length, peak lift, penetration, KL, learning rate and exploration standard deviation. Low-success plateaus, high-success saturation candidates and possible regressions are distinct labels. Histories shorter than 300 updates are explicitly insufficient for sustained plateau claims. These are heuristic prompts for inspecting the curves, not proof of stationarity or authority to stop training.

Curve publications are scheduled every 500 updates; fixed-quota evaluations remain every 1,000. The learner continues throughout. DR promotion still needs two complete >90% validation results at the same scale with rates within three percentage points. Reviews are stored under each run's `analysis/`, preserving per-update JSON records and a current Markdown review.

First visual review (82 updates): reward per step increased as well as episode duration, so the return gain is not solely longer survival. Recent penetration fell toward 1 mm; minibatch KL stayed near its 0.01 target and exploration std remained about 0.84 at the latest plotted point. However, native success remained zero and mean peak clearance was approximately 0.5 mm. This is early shaping/behavior improvement, not learned lifting or saturation. Keep training and DR unchanged. Plot: current run `plots/training_trends.png`; numerical review: `analysis/update000082.json`.

## Low-success plateau and gripper saturation (2026-09-13, checkpoint 1500)

The native-reward long run continues at DR 0.05. Checkpoint 1000 completed all 384 validation trials: 0 native-goal successes, 0 lifts above 2 cm, no invalid episodes. Return has plateaued near 25.44 with full 300-tick episodes. The last three 100-update windows have zero success and essentially unchanged 0.5 mm mean peak clearance. This is a stable low-success plateau, not instability or successful saturation.

A complete, declared 16-world checkpoint-1500 diagnostic found the gripper Gaussian mean in [2.7388,3.7502], while the applied action is clamped to [−1,+1]. Its standard deviation is 0.5353. The median analytical probability of drawing an action below −0.5 is approximately 2.3e−13 at observed clean-state deterministic rollout states; this is not an estimate of stochastic training success or a forecast of future PPO updates. All deterministic gripper means exceed the fully-open bound. The RZ mean also exceeds +1 throughout. Translation-axis standard deviations are only 0.025–0.038, which the single averaged exploration statistic conceals.

TCP approaches the bottle root and the pad midpoint sits approximately 2–3 cm above it; the gripper stays at about 100.46 mm aperture. Video and trajectory agree that the policy reaches but does not close. The native reward implementation is unchanged. The action-clipping/exploration interaction is now a concrete failure mechanism to track; it is not evidence of unreachable starts.

No learner restart, reward change or DR widening was made. Continue the requested long baseline and compare subsequent checkpoint evaluations and action distributions before deciding on a necessary correction. Evidence: current run `analysis/action_distribution_model1500_retry1/{audit,trajectory}.json`, `plots/action_bound_saturation.png`, and `evaluations/validation_model1000/scale0.05/summary.json`. An initial audit attempt failed before stepping because its model constructor received an unused CNN config field; its log remains preserved, and the corrected audit completed all trials.

## Native adapter correction at update 2056 (2026-09-13, 11:57 UTC)

Checkpoint 2000 again scored 0/384 native-goal successes, with no 2 cm lifts, confirming the sustained open-gripper plateau. Two concrete adaptations were corrected after controlled diagnostics, without resetting learned weights or starting another run.

1. The native joint-speed hinge now selects the six UR5 arm joints. Native YAM finger joints are prismatic; RG2 has six angular linkage joints. The same 0.5 threshold applied to those linkages imposed a large closure cost. In 16 scripted successful low-DR trials, the all-joint speed penalty contributed −19.3576 return, leaving total return 18.0542 and discounted return −2.6568. Arm-only selection gave return 37.4120 and discounted return 10.0007, with 16/16 successful grasps in both cases. The learned no-grasp policy earned about 25.44. These are scripted reward diagnostics, not learned successes. Separate GPU replays differed by up to 0.096 mm, so the initially requested 1 micrometre trajectory-identity check failed and is retained; same-trajectory reward-component accounting independently establishes the penalty size.
2. Gaussian action means now pass through tanh so they stay within the normalized action range. The underlying Gaussian sampling, log probabilities and PPO remain; samples still use the existing action clamp. This directly addresses means above +3 being clamped to fully open, with effectively no closure exploration. This is a bounded-mean Gaussian, not a tanh-squashed sample distribution.

All native reach/bring and goal reward terms and weights, the speed-weight curriculum, native 5 cm goal success, DR 0.05, controller, physics and observations remain. There are no extra grasp bonuses. The 20,000-update target remains.

The same managed run was cooperatively stopped after update 2056 and resumed with exact actor/critic tensors, normalization, Adam state, learning rate and counters restored. Resuming starts fresh simulator episodes and an explicitly new RNG branch. The pre-change checkpoint SHA256 is `f2248d3df43e1809083d358bac6dec84718807bfb69e94d66873472c58a764ad`; its copy, old/new configs and source snapshot are under `source/revisions/native_adapter_v1/`. The transition validator permits only the declared speed-penalty selector difference; the changed distribution is explicitly configured. A separate test verified actual canonical inference and a finite PPO update before the pause. The actual managed resume checks all passed.

Old checkpoints keep their original actor and reward configuration when evaluated. New checkpoints embed actor and launch metadata. Training plots mark the correction and window-based plateau analysis restarts at the revision boundary, avoiding comparisons of different reward settings. Current authoritative config: the run's `launch.json`; fresh reproduction config: `configs/teacher_native_adapter_long_seed42.json`. This necessary adaptation correction is the single exception to leaving this long baseline untouched; it is not a claim of task reliability. Continue training and inspect the scheduled evaluations.

Early post-correction observation (updates 2127–2129, 71–73 updates after the revision): logged bilateral-contact fraction is approximately 3.7–6.6%, compared with zero in the checkpoint-1000 evaluation. Mean peak clearance is only about 1.3–1.5 mm and training success remains zero. Contact exploration has reappeared, but this is not lifting competence or held-out improvement. Continue the run and use the next scheduled full-quota evaluation. Contact fraction and goal reward are now included in the periodic trend plots.

## Curve review at update 2402 (2026-09-13, 12:24 UTC)

Reviewed the actual trend plot and three post-revision 100-update windows, ending at updates 2202, 2302 and 2402. Native training success is zero in all three. Mean return rises 22.20 → 25.27 → 25.40, while episode duration reaches the full 300 ticks. Return per tick rises 0.07654 → 0.08425 → 0.08469: the most recent gain is only about 0.53%. This is approaching another low-success plateau; the automated three-window label remains mixed trends because the earliest window includes recovery from the adapter transition.

The early contact increase did not persist: mean bilateral-contact fraction declines 2.22% → approximately zero → zero, and mean peak clearance declines 0.944 → 0.500 → 0.500 mm. Thus reward recovery is not evidence of learned grasping. Mean KL remains 0.0110 → 0.0104 → 0.0107, with occasional spikes but no sustained divergence visible in these curves. Mean policy standard deviation falls 0.239 → 0.213 → 0.139; reduced exploration is a concern to inspect by action dimension at a later saved checkpoint, not proof of the exact failure mechanism.

Decision: retain the same learner, reward, controller and DR 0.05. No stop, restart or DR promotion. Next scheduled validation is checkpoint 3000, with every trial counted. The last completed validation remains checkpoint 2000: 0/384 native-goal successes; the post-correction training curves are not a replacement evaluation. Evidence: current run `analysis/update002402.json` and `plots/training_trends.png`. Periodic analysis/publication monitors and the learner were verified live.

## Checkpoint 2500: exploration contraction confirmed (2026-09-13)

The read-only, 16-trial action diagnostic at seed 1101 and DR 0.05 completed all trials: 0/16 native-goal successes, no 2 cm lifts, no invalid episodes. This small diagnostic is not the 384-trial validation suite. New checkpoint metadata correctly embeds the bounded-mean actor, native-arm-speed reward profile, DR 0.05 and optimizer state. SHA256: `3af15cbaf1c760b86a531a71489054e43cd32352c07f242f5bdae81bf6a25bd0`.

All deterministic action means are now within [-1,1], verifying the intended bounded-mean behavior. Nevertheless, gripper standard deviation contracted from 0.5353 at checkpoint 1500 to 0.1221 at checkpoint 2500. Its mean stays in [0.3802,0.99999] on these rollouts. Median analytical probability of a command below -0.5 is approximately 5.36e-35 at these observed clean-state deterministic rollout states. This is not a stochastic training success estimate. It shows that bounding the mean did not preserve closure exploration as PPO reduced its learned standard deviation. Per-action standard deviations in dx/dy/dz/rx/ry/rz/gripper order are [0.0387,0.0423,0.0402,0.0770,0.0790,0.2432,0.1221].

The update-2507 curve review now classifies a low-success plateau across three comparable 100-update windows. Numerical divergence does not explain the measured open-gripper behavior; the action evidence supports loss of useful closure exploration. It does not prove that more updates will escape this behavior. Decision: keep the user's long run active and DR fixed through the scheduled checkpoint-3000 validation; no new learner, extra video, reward edit or restart in this review. Preserve this evidence when judging whether a subsequent correction is necessary.

Evidence: current run `analysis/action_distribution_model2500/{audit,trajectory}.json` and `source.py`, `analysis/update002507.json`, and checkpoint `checkpoints/model_2500.pt`. The diagnostic uses each checkpoint's recorded launch/reward/distribution metadata; older checkpoints retain the archived pre-revision configuration.

## Checkpoint 3000 and gripper exploration floor (2026-09-13, 13:06 UTC)

The long run reached checkpoint 3000 without another interruption after update 2056. Full restricted-DR validation completed all 384 trials at scale 0.05: **0/384 native-goal successes**, Wilson 95% interval [0%, 0.9905%], no lifts above 2 cm, no invalid episodes, mean peak clearance 0.500 mm and mean final goal error 0.1592 m. Checkpoint SHA256: `c9f2cbeb0acdd243100492bf102dd646f78e8c34892fbe8619547b808ed154ac`. The ordinary success denominator remains intact.

Three-window curve reviews through update 3004 consistently identify a low-success plateau, with average policy std below 0.05. The checkpoint's per-action learned std is [0.0213, 0.0230, 0.0203, 0.0354, 0.0311, 0.0832, 0.0562]. Gripper std declined from 0.535 at checkpoint 1500 to 0.122 at 2500 and 0.056 at 3000. The earlier complete action diagnostic directly showed a fully open mean-policy gripper. Longer training in this window did not establish lifting or recover useful exploration.

A targeted correction adds a minimum effective Gaussian std of **0.5 for the gripper only**. Arm-action distributions, deterministic mean function, rewards, success definition, physics, controller, observations and DR remain unchanged. No actor weights or learned std parameters are reset. The floor is explicit actor configuration; Gaussian sampling, likelihood, entropy and KL all use the effective std. Diagnostic scripts now distinguish learned std parameters from the effective std used for sampling. Old configurations have no floor, preserving old checkpoint behavior.

Before the transition, `results/teacher/infrastructure/gripper_floor_resume_check/audit.json` passed exact actor/critic/Adam loading, task-spec identity, identical deterministic actions, unchanged six arm-action std values, correct gripper floor and Gaussian likelihood, canonical inference, and a real finite PPO update. These are infrastructure checks, not task success.

The same run was cooperatively stopped after **3069 completed updates** and resumed. The actual resume audit `resume_verification_update3069.json` passes exact actor/critic (including normalization), optimizer, learning-rate and counter restoration; fresh simulator episodes and a new RNG branch are explicitly recorded. Source checkpoint SHA256: `48c660288fcb451f83b27bc7ba160c160183436078b4d50adb3824898bda29bd`. Configs, source snapshot and lineage are retained under `source/revisions/gripper_exploration_floor_v1/`. Current config is the run's `launch.json`; fresh reproduction config is `configs/teacher_gripper_floor_long_seed42.json`.

Decision: continue this same 20,000-update run at DR 0.05. Do not stop for early post-transition return fluctuations. The next complete validation is checkpoint 4000; no DR promotion or teacher qualification has occurred. The numerical effect of the floor is proven; its usefulness for learning remains to be measured.

## Post-floor curve review at update 3405 (2026-09-13)

Reviewed the plot and three 100-update windows after the gripper-floor revision. Native training success is zero in every window. Return per tick is essentially flat: 0.084247, 0.084367, 0.084235. Mean episode return is 25.13, 25.25, 24.96, with nearly full-length episodes. Mean KL is 0.0110, 0.0112, 0.0114: no sustained numerical divergence is apparent.

Average effective action std now increases 0.111 → 0.128 → 0.150, unlike the preceding contraction. However, mean peak clearance is 0.757 → 0.536 → 0.507 mm, and bilateral-contact fraction is only 0.0376% → 0.00581% → 0.00228%. Restoring exploration has not yet produced learned lifting. This remains a low-success plateau; greater noise alone is not competence.

An inspection of the existing checkpoint-3000 failure traces (the first world for each of three validation seeds, not the whole validation distribution) also shows substantial wrist rotation. TCP Z-axis direction changes by approximately 31–37 degrees from its initial direction by episode end; total frame rotation is mostly larger yaw rotation. The saved video frame at 8 s still shows an open gripper over the bottle. These observations are secondary behavioral evidence, not proof that orientation is the cause or a reason to change control. No new video or learner was created for this review.

Decision: continue the same run and DR 0.05 through the scheduled checkpoint-4000 validation. Do not stop or retune based on this early post-floor review. Public deployment of the floor decision and checkpoint-3000 evidence passed 213-file hash verification, desktop/mobile and video checks, and preserved the existing routes; receipt `site_publish/qa/publication-20260913-091334.json`.

Evidence: current run `analysis/update003405.json`, `plots/training_trends.png`, checkpoint-3000 validation trace sidecars, and `analysis/checkpoint3000_at8s.png`.

## One clean initialization of the corrected task (2026-09-13, 13:42 UTC)

The continuing run still reports zero success after the gripper-floor revision. Its learned actor originated under the earlier all-joint speed penalty and developed saturated open-gripper means before corrections. Preserving its exact weights and optimizer also preserves that training history. Rather than making another change to that live learner, one clean native PPO initialization is now training alongside it: `20260913T134249Z_native_corrected_from_start_teacher_seed42` on GPU 0. The original run stays active on GPU 1.

The clean run uses the same corrected task, actor architecture/distribution, controller, native goal success, restricted DR 0.05, seed 42, 1,024 worlds and 20,000-update target. Arm-only speed regularization, bounded Gaussian means and the gripper std floor 0.5 are present from update zero. No demonstrations, bootstrap actor or checkpoint are loaded. Actor, critic, normalization, Adam and native curriculum counters start fresh. The native speed-weight ramp consequently starts at its first stage. This is not a controlled one-factor ablation; its purpose is to see whether learning the corrected task from the beginning can escape the continued policy's behavior.

`initialization_provenance.json` verifies no resume or bootstrap, a zero starting counter, and equality of the saved task specification and actor configuration with corrected continuing checkpoint 3500. The first saved checkpoint hash is `1334804815ff889b1b19d7b6bed452dbb56fff4ce88d98ffbdca13b5c73e6b27`. Initial PPO updates are finite. This establishes a valid start, not teacher success.

Config: `configs/teacher_native_corrected_from_start_seed42.json`. Full validation remains 384 unfiltered trials every 1,000 updates, with the same seeds and >90% two-evaluation DR gate. Its evaluator uses GPU 1; the original evaluator uses GPU 0. Both keep training during evaluation. Separate run-specific curve and milestone monitors are active; all outputs remain organized by run under `results/teacher/runs/`. No new variants or per-update videos are scheduled. Phase 1 is still incomplete.

## Checkpoint 4000: no measured improvement yet (2026-09-13)

The continuing run completed all **384/384** restricted-DR validation trials at scale 0.05: **0 successes**, no 2 cm lifts, no invalid episodes, mean peak clearance 0.500 mm and mean final goal error 0.16047 m. The native-goal success Wilson 95% interval is [0%, 0.9905%]. Checkpoint SHA256: `c8900a000823e670758ad8d6d323e842acd2ecdbafd36994dd112a1f1364b115`. No starts were excluded.

This is the first scheduled full validation after the gripper-floor revision at completed update 3069. The floor's implementation and checkpoint persistence are verified, but its task benefit is not: the measured result remains zero. The continuing run's curves through update 3806 still classify a low-success plateau with KL near its target. The clean initialization is also still in early training, with zero logged success at its 303-update review; it has not reached its first full validation.

Decision: retain both 20,000-update runs with the same corrected task and DR 0.05. Do not make another change on this result while the clean initialization accumulates its first substantial training window. Its first full validation is checkpoint 1000; the continuing run's next validation is checkpoint 5000. Neither run is promoted, teacher qualification remains incomplete, and the final held-out seed set stays reserved. Scheduled publication includes the full result and the usual single complete-episode illustration; no additional video jobs are requested.

Evidence: continuing run `evaluations/validation_model4000/scale0.05/{summary,protocol}.json` and complete episode records; clean run `20260913T134249Z_native_corrected_from_start_teacher_seed42`.

## Gripper reference geometry audit — no training change (2026-09-13)

A canonical-asset FK-only check measured the RG2 pad midpoint relative to its fixed TCP. With nominal downward orientation, the midpoint is 26.48 mm above the TCP when open and 8.30 mm below it at the calibrated 33 mm aperture (normalized gripper action -0.503). Thus closure moves the pad midpoint approximately 34.77 mm relative to the TCP. Maintaining the earlier neck-level pad target at bottle root +30 mm would require the TCP to be approximately +3.52 mm when open and +38.30 mm when closed. The native reaching Gaussian at the latter alignment is 0.964, versus 0.9997 when open.

This is geometry evidence, not proof that the native reward prevents grasping. The retained earlier aperture grid (`results/comparisons/grasp_mechanics/aperture_grid/summary.json`) already lifted the bottle approximately 14.7–15.0 cm with pad targets at the bottle root. Those trials failed the old strict penetration criterion, with roughly 7.7–8.4 mm peak penetration; their old success labels are not changed. The root is within the bottle body, not the table plane. A moving pad reference could be a later shaping choice, but the FK shift alone does not justify another correction or an impossibility claim.

Decision: no reward, observation, controller, metric or DR change. Continue both current long runs. Audit: `results/teacher/infrastructure/gripper_reference_fk/{audit.json,source.py}`; canonical robot `entity_spec` was compiled and forward kinematics evaluated, with no physics stepping or robot control.

## Native action regularization has different semantics here (2026-09-13)

The pinned native lift-cube task uses `JointPositionActionCfg` with a fixed default offset. Our canonical interface uses Cartesian position/orientation increments at 20 Hz. The copied `action_rate_l2` computes only the squared difference between successive raw commands. Repeating an absolute joint target holds the requested target; repeating a nonzero Cartesian rotation increment continues requesting rotation, while its action-rate cost is zero after the first step. The UR5 arm speed hinge still penalizes actual joint speeds above 0.5 rad/s, so this is not a claim that all motion is unpenalized.

This source-level difference is consistent with the persistent rotation visible in failure traces, but it does not prove the cause of zero lifting. A motion-magnitude or full arm-velocity penalty would be a separately declared later experiment, not a silent interpretation of the existing native coefficient. Decision: no reward or control change on this observation alone. Both current 20,000-update runs remain active with their recorded settings and ordinary unfiltered validation.

Sources: canonical `mjlab/src/mjlab/tasks/manipulation/lift_cube_env_cfg.py`, `mjlab/src/mjlab/tasks/manipulation/config/yam/env_cfgs.py`, `mjlab/src/mjlab/envs/mdp/rewards.py`, and `src/mjlab_gs/tasks/{actions,config}.py`.

## Corrected-from-start checkpoint 1000: complete evaluation (2026-09-13)

The clean run `20260913T134249Z_native_corrected_from_start_teacher_seed42` completed all 384 restricted-DR validation trials at scale 0.05: **0/384 native-goal successes**, zero lifts above 2 cm, no bilateral grasp contact in any trial, no invalid episodes, and 384 timeouts. Mean peak clearance is 0.500 mm and mean final goal error is 0.16047 m. The Wilson 95% success interval is [0%, 0.9905%]. Raw per-seed episode rows were checked against the complete aggregate; no starts were excluded. Checkpoint SHA256: `58d0c3b27061c431dde107c2673d1d64f94c12957941aaa34130f88c4037fffb`.

The three existing world-0 traces show a brief initial closure, followed by a fully open command from 0.65–0.80 s onward. Gripper commands exceed +0.9 for 95–96% of recorded frames; none of these traces has bilateral contact. Thus the clean policy can command closure, but these episodes do not coordinate closure with grasping. This is illustrative behavioral evidence, not proof of the learning failure's cause or a separate performance denominator.

The update-1002 curve review remains a low-success plateau: success is zero, return per tick is approximately 0.0849 and nearly flat over three 100-update windows, and mean KL is 0.0112–0.0125. The numerically stable optimizer has not established lifting. A clean initialization has not yet resolved the failure.

Decision: continue both current 20,000-update learners with their recorded settings and fixed DR 0.05. The original run's next full validation is checkpoint 5000; the clean run's next is checkpoint 2000. No further learner, reward/control adjustment or early stop is introduced here. Teacher qualification and Phase 2 remain pending. Evidence: clean run `analysis/checkpoint1000_review.json` and `evaluations/validation_model1000/scale0.05/`.

## Original continuation checkpoint 5000: plateau persists (2026-09-13)

The original continuation completed another full 384-trial evaluation at DR 0.05: **0/384 native-goal successes**, zero lifts above 2 cm, no bilateral-contact trials, no invalid episodes, and 384 timeouts. Mean peak clearance remains 0.500 mm; mean final goal error is 0.16047 m. Wilson 95% success interval: [0%, 0.9905%]. The complete raw episode rows match the aggregate. Checkpoint SHA256: `d177547b1ab497c9e769bcc857a790105e2d20627f887a62b1a0b14d8ad36cdf`.

In all three retained first-world traces, deterministic gripper commands remain above +0.997 throughout the episode: the gripper stays open. These illustrations support the previously observed failure behavior but do not identify its cause. Curve review 5008 is still a low-success plateau: three-window return per tick is 0.085058, 0.085064, 0.084975, with mean KL 0.01076, 0.01198, 0.01134 and essentially no clearance. The gripper exploration floor has persisted for more than 1,900 updates without improved deterministic validation success.

Decision: retain both already-running 20,000-update experiments and DR 0.05, with no further reward, action, initialization or optimizer change here. The clean run is just beyond 1,300 updates and continues toward its second complete evaluation at checkpoint 2000; original checkpoint 6000 is next. This is a continued learning failure, not an unreachable-start explanation, a curriculum-promotion signal or teacher qualification. Evidence: original run `analysis/checkpoint5000_review.json`, `analysis/update005008.json`, and `evaluations/validation_model5000/scale0.05/`.

## Clean run checkpoint 2000: no grasp improvement (2026-09-13)

The corrected-from-start run completed its second full 384-trial validation at DR 0.05: **0/384 native-goal successes**, zero lifts above 2 cm, zero trials with bilateral contact, no invalid episodes and 384 timeouts. Mean peak clearance is 0.500 mm; mean final goal error is 0.16047 m. Wilson 95% success interval: [0%, 0.9905%]. All raw per-seed episode rows match the aggregate; no starts were excluded. Checkpoint SHA256: `970b75da3892058aab497ceab84890ed5094c938741c108ba99e94e9874f4460`.

The first-world trace for each validation seed still shows brief initial closure followed by an open command from 0.45–0.60 s onward. Commands exceed +0.9 for 96.3–97.3% of frames, with no bilateral contact in these illustrations. This extends the checkpoint-1000 failure evidence; the extra 1,000 updates did not establish coordinated grasping. The trace sample is illustrative, not an alternate denominator or causal proof.

Curve review 2000 remains a low-success plateau. Across three 100-update windows, return per tick is 0.085152, 0.085144, 0.085137; average peak clearance stays near 0.500 mm, success stays zero, and mean KL is 0.01078, 0.01203, 0.01193. Numerical stability does not establish task competence.

Decision: both already-running 20,000-update experiments continue with the recorded settings and fixed DR 0.05. No new learner, reward/control change, checkpoint reset, DR promotion or teacher qualification is introduced here. The original continuation is approaching checkpoint 6000; the clean run continues toward checkpoint 3000. The failure remains a policy weakness under restricted DR, not an unsupported unreachable-start explanation. Evidence: clean run `analysis/checkpoint2000_review.json`, `analysis/update002000.json`, and `evaluations/validation_model2000/scale0.05/`.

## Saved-state exploration audit after clean checkpoint 2000 (2026-09-13)

A CPU-only comparison of the clean run's checkpoints 1000 and 2000 shows that upward-action standard deviation fell from 0.08910 to 0.03910, while the gripper's effective std remains 0.5. Using the recorded deterministic world-0 action means for all three evaluation seeds, at t >= 3 s the median conditional probability of a raw upward command >0.1 falls from 13.06% to 0.525%. For >0.25 it falls from 0.002501 to 8.01e-11 (probabilities, not percentages). The sign alone is not rare: P(dz > 0) stays near 0.5. Median P(gripper < -0.5) stays near 0.00135 around the open mean.

This is evidence of narrowing arm exploration at the saved states, alongside the zero-lift plateau. It is not a stochastic-policy success rate, not the empirical training-state distribution, and not a proof that these command thresholds are required for a lift. Both all-frame and explicitly labeled post-3-second diagnostics are retained; the ordinary validation denominator remains 384 with no exclusions. No new simulator, learner or video was run, and no training settings were changed.

The comparative graph has been prepared for the next scheduled publication with an explicit conditional-probability caption. Evidence and reproduction: clean run `analysis/saved_exploration_1000_2000/{analysis.json,interpretation.md,source.py,plots/saved_exploration.png}`; source command `scripts/analyze_saved_exploration.py`. Continue both existing long runs at DR 0.05.

## Frozen-policy sampling probe and original checkpoint 6000 (2026-09-13)

A single controlled sampling probe used the frozen clean checkpoint 2000 with all 128 trials per condition at DR 0.05 and development seed 1101. Saved Gaussian sampling produced 0/128 native-goal successes, zero 2 cm lifts and zero bilateral-contact trials. Applying a 0.3 minimum std to the six arm actions on a local actor copy also produced 0/128, zero lifts and zero contact trials. Penetration >3 mm increased from 1/128 to 64/128; all trials remained in the denominator. These are clean-observation, frozen-policy diagnostics, not training or qualification results.

Actor/normalizer tensors and the checkpoint file stayed unchanged. Initial actor observations, deterministic actions, positions and goals match exactly. Bottle-quaternion components differ by at most 1.1921e-7; the original strict bitwise audit failed after both conditions completed. A retained post-run review documents the float32 rounding difference without repeating or discarding trials. Original source, logs and comparison are preserved. Evidence: clean run `analysis/stochastic_exploration_checkpoint2000/{comparison.json,pairing_review.json,interpretation.md}` and both full condition summaries.

Decision: do not apply the tested 0.3 arm floor to either learner based on this probe. Extra independent noise did not immediately produce grasping and increased penetration diagnostics; this does not establish what learning with that floor would do. Continue the two current long runs unchanged.

The original continuation's checkpoint 6000 also completed all 384 validation trials at DR 0.05: **0/384 native-goal successes**, zero 2 cm lifts, no invalid episodes, mean peak clearance 0.500 mm and mean final goal error 0.16047 m. Wilson 95% interval: [0%, 0.9905%]. Checkpoint SHA256: `ce6fd7ca2db963d4907989272819cccebb69266856bb11aa74bb9b536eb2b085`. Raw trial counts were checked against the aggregate. Evidence: original run `analysis/checkpoint6000_review.json` and `evaluations/validation_model6000/scale0.05/`. No DR promotion or teacher qualification.

The clean checkpoint-2000 website transfer encountered two transient croc failures; its later retry transferred and deployed successfully, with public verification following. Failure history is retained in `milestones.json`; neither learner was stopped or restarted for publication.

## User-requested training stop (2026-09-13)

Both learners stopped gracefully after complete PPO updates: original continuation at 6,403 and clean run at 2,621. Latest stopped checkpoints were saved and their SHA256 hashes verified against `checkpoints/latest.json`. Neither learner process remains alive. No teacher is qualified. Do not resume or launch new training without a new explicit user request. Full checkpoint references: `insights/training_stop.json`.
