Skip to content

REL: complete v0.1.0 with the ActiveRocketPy bump and the changelog section - #116

Merged
thc1006 merged 6 commits into
mainfrom
develop
Jul 29, 2026
Merged

REL: complete v0.1.0 with the ActiveRocketPy bump and the changelog section#116
thc1006 merged 6 commits into
mainfrom
develop

Conversation

@thc1006

@thc1006 thc1006 commented Jul 29, 2026

Copy link
Copy Markdown
Member

Completes v0.1.0. #61 merged before the ActiveRocketPy bump and before the changelog section was closed, so this brings main the three that were missing.

#112 closes the changelog section. It still read [Unreleased], under a line saying the release PR renames it, so a tag cut from main today would ship a changelog saying the release has not happened
#114 bumps ActiveRocketPy to the v1.13 actuator hotfix, 435f58d0 to 473447d5
#115 the environment side of #113, so a competitor's non-finite action is dropped rather than ending the evaluation

Why #114 and #115 belong together

The bumped actuator setter refuses a non-finite command. On its own that turns an agent's NaN into a ValueError that ends the whole evaluation, which is what #113 decided against. #115 drops the field instead, and the actuator keeps the value it already holds.

It closes more than the score question. Measured before #115: a NaN on the first step after launch did not return at all, with the stack inside scipy's RK45 error control at _ivp/rk.py:144, where error_norm is NaN so error_norm < 1 is false and the step is never accepted. The same sequence now finishes in 0.16 s.

Verified together, not only separately

Both branches merged into a scratch worktree and run as one tree:

  • 327 passed with BPC_RUN_SLOW_TESTS=1
  • both golden masters unchanged
  • uv lock --check resolves, no lockfile change
  • ruff check and format clean
  • the stall reproduction finishes in 0.16 s and every recorded state stays finite

The tag follows this.

thc1006 added 6 commits July 29, 2026 20:59
The section still read `[Unreleased]`, under a line saying the release PR
renames it. #61 did not, so a tag cut now would ship a changelog that says the
release has not happened.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
…log-section

Close the v0.1.0 section the release left open
Closes #113.

A policy that diverges emits NaN, and it is the most ordinary failure there is
while training one. `step()` wrote agent actions straight into the actuators, so
what happened next was whatever the actuator and the integrator did with it.

Measured on scenario 0 before this: one NaN in `tvc` at step 300 was harmless
and the run finished with the same score as a clean one. A NaN in
`launch_inclination_heading` raised out of the integrator and ended the
evaluation. And a NaN on the first step after launch does not return at all:
the test that does it ran 90 seconds without finishing, with the stack inside
scipy's RK45 error control at `_ivp/rk.py:144`. `error_norm` is NaN there, so
`error_norm < 1` is false and the step is never accepted.

So a competitor's agent can stall the evaluator, not merely score badly.

`check_action` names the fields the environment cannot use and `step()` drops
those commands, leaving each actuator holding the value it already has, which is
what a real one does between commands. A launch attitude is refused rather than
dropped, since there is no previous attitude to fall back on, and the agent can
launch on any later step.

Adversarial review of the first version found four ways past it, each confirmed
by running it:

- it validated a converted copy and `step()` then used the original, so a scalar
  `tvc` passed and failed at `action["tvc"][0]`. The converted values are what
  `step()` uses now.
- no size check, so an empty array passed a finiteness test and `tvc` of three
  elements silently dropped one.
- `action["launch"]` was read for truth directly, and `bool(np.nan)` is True, so
  a NaN would have launched.
- `rocket_launched` was set before the flight was built, so a failure in between
  left the environment marked as launched with nothing to step.

The warning is rate limited to the 1st, 10th, 100th and 1000th such step: a
policy that breaks stays broken, and one line per step for the rest of the
horizon is its own denial of service.

12 tests. The full suite is 309 passed.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
Picks up ARRC-Rocket/ActiveRocketPy#19 through its release in #23: the actuator
argument checks survive `python -O`, a non-finite command is refused at the
setter rather than reaching the integrator, `add_*_control` hands the controller
the same sampling rate the actuator kept, and a range that is not a pair of
numbers is refused.

No score moves. Both shipped scenarios leave the three actuator time constants
`null`, so the filter branch never runs, and their ranges are ordinary finite
numbers. Both golden masters pass unchanged, the suite is 315 passed, and
`uv lock --check` still resolves, so the lockfile needs no change.

The setter now raising on a non-finite command is what #113 was about. The
environment side of that lands with the action validation in
fix/a-non-finite-action-is-not-a-command, so a competitor's NaN action keeps
being dropped rather than becoming an exception.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
…r-v0.1.0

Bump ActiveRocketPy to the v1.13 actuator hotfix
…ot-a-command

An action the environment cannot use is not a run the agent should lose
Copilot AI review requested due to automatic review settings July 29, 2026 14:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@thc1006
thc1006 merged commit aa5ee7d into main Jul 29, 2026
6 checks passed
@zuorenchen

Copy link
Copy Markdown
Member

Big thanks to your effort and time on this huge release!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants