Skip to content

Refresh uv.lock for ActiveRocketPy 1.13.0 and check it in CI - #62

Merged
thc1006 merged 1 commit into
developfrom
chore/uv-lock-1.13
Jul 27, 2026
Merged

Refresh uv.lock for ActiveRocketPy 1.13.0 and check it in CI#62
thc1006 merged 1 commit into
developfrom
chore/uv-lock-1.13

Conversation

@thc1006

@thc1006 thc1006 commented Jul 27, 2026

Copy link
Copy Markdown
Member

The submodule pins ActiveRocketPy 1.13.0, but the committed uv.lock still recorded the editable package as 1.12.0. This is a develop problem: #60 moved the submodule there and left the lockfile behind. main is self-consistent, since it still pins the 1.12.0 commit that its lockfile records; it inherits the mismatch only when this and #60 reach it together.

Nothing catches this today: CI installs through pip and requirements-dev.txt, so it never reads the lockfile. Locally it is worse than silent, since uv run and uv sync quietly rewrite a stale lockfile, which is easy to revert by reflex and never commit.

What this does

  • regenerates uv.lock, which bumps activerocketpy to 1.13.0 and records that it now publishes an animation extra. To be precise about what that does and does not do: the lockfile learns the extra exists, but activerocketpy[all] still expands to env-analysis and monte-carlo only, so pyvista and imageio-ffmpeg are still not installed. Whether all should cover animation is an upstream question.
  • adds a uv lock --check step to the test job. That job is the one that checks out submodules, which uv lock needs because activerocketpy is an editable path dependency. uv is pinned the same way ruff is.

The lockfile diff is 5 added and 2 removed lines, with no unrelated dependency churn.

Checks

uv lock --check exits 1 against the old lockfile and 0 after the regeneration, so the new step actually fails when the lockfile goes stale. ruff check, ruff format --check and pytest tests/ are green locally with the refreshed lockfile.

Found while reviewing #61. The other items from that review are tracked separately.

The submodule now pins ActiveRocketPy 1.13.0, but the committed lockfile still recorded 1.12.0 (and missed the new animation extra). CI installs with pip, so nothing flagged the drift, and a local uv run would quietly rewrite the lockfile instead. Regenerate it and add uv lock --check to the test job, which is the one that checks out the submodule the editable dependency needs.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 27, 2026 05:00

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.

This was referenced Jul 27, 2026
@thc1006
thc1006 merged commit e77e814 into develop Jul 27, 2026
2 checks passed
@thc1006
thc1006 deleted the chore/uv-lock-1.13 branch July 27, 2026 06:14
@zuorenchen

Copy link
Copy Markdown
Member

Thanks, I missed this

thc1006 added a commit that referenced this pull request Jul 28, 2026
)

* Relock uv.lock after the version bump

a086ca6 raised the version to 0.1.0 in pyproject.toml without relocking, so
uv.lock still records 0.0.1 for this package and `uv lock --check` fails. develop
is red on that step right now, and so is every pull request based on it.

One line. This is the check #62 added, working as intended.

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

* Run CI on pushes to develop, not only to main

The stale lockfile in the previous commit reached develop and stayed red without
anyone seeing it, because the workflow only triggers on pushes to main and on
pull requests. A direct push to develop runs nothing.

A pull request that targets develop still fires on pull_request alone, so this
does not double up the ordinary case. It does double up one case: #61 has develop
as its head branch, so a push to develop now produces both a push run and a
synchronize run for #61. Those are not the same tree, since the pull request run
tests develop merged into main, and the concurrency key keys on the ref so
neither cancels the other. That seems worth the extra run rather than something
to suppress.

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

---------

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
thc1006 added a commit that referenced this pull request Jul 28, 2026
A plain uv sync rewrites uv.lock when it no longer matches, so a
checkout that has drifted quietly becomes a working environment that is
no longer the released one. That is the failure this section exists to
prevent, and it has happened twice already: #62 and #78 both landed
because a submodule bump left the lockfile stale.

--locked stops and says so instead. Verified both ways: it exits 0 on a
clean release checkout, and on a lockfile that no longer matches it
refuses with 'the lockfile at uv.lock needs to be updated, but --locked
was provided'.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
thc1006 added a commit that referenced this pull request Jul 28, 2026
Cutting the 0.1.0 header here left the file arguing with itself: a
2026-07-DD placeholder date, no Unreleased section, an Unreleased
comparison link with nothing above it, no 0.1.0 link, and CONTRIBUTING
telling contributors to add entries to a section that no longer existed.
The release scope is also still open, so the section would have to be
edited again anyway. Unreleased needs no date, and the release PR is what
renames it and adds the link.

Record the migration #39 requires. It is described as additive, and it is
not: rocket.control.gimbal_range became max_gimbal_angle and the three
time-constant keys became required, so a scenario file written for v0.0.2
raises KeyError: 'max_gimbal_angle' on the first launch action. Measured
against the shipped scenario 0 with the old key names.

Add the coordinate-frame correction from #68. Z is altitude above sea
level rather than height above the pad, in balloon_states, the GNSS
sensors and the rocket state, which is the kind of thing an agent aims
with. It was the largest omission in the file.

Drop #46 from the ActiveRocketPy relock. It landed on 2026-06-27, a month
before #60 bumped the submodule to 1.13, so it cannot have relocked
against it; #62 did.

Say "users and contributors" in both files, since the entries already
include tests, CI and tooling.

Point the vpython instructions at one command with both extras. uv sync is
exact, so running --extra vpython after --extra dev uninstalls the dev
extra. Measured: ruff was present, then gone, then present again with both
extras named together.

Give the Makefile a .PHONY, so a file named format does not shadow the
target.

Signed-off-by: thc1006 <84045975+thc1006@users.noreply.github.com>
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