feat(SOLSYS-71): Sol → TRAPPIST-1 cinematic - #72
Conversation
Destination chapter from Sol through the neighborhood to TRAPPIST-1 at true Sol XYZ, finishing on the b–h resonant chain using the #69 spin packs.
|
Warning Review limit reached
Next review available in: 35 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdded a Sol→TRAPPIST-1 cinematic animator with staged travel, seven-planet rendering, optional Blender billboards, CLI support, tests, and updated documentation. ChangesSol→TRAPPIST-1 cinematic
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant RenderCLI
participant SolTrappistCinematicAnimator
participant StarCatalog
participant BlenderBodyRegistry
RenderCLI->>SolTrappistCinematicAnimator: select sol_trappist
SolTrappistCinematicAnimator->>StarCatalog: load TRAPPIST-1 data
SolTrappistCinematicAnimator->>StarCatalog: calculate travel and orbital positions
SolTrappistCinematicAnimator->>BlenderBodyRegistry: queue optional planet billboards
SolTrappistCinematicAnimator-->>RenderCLI: write light and dark GIF outputs
Possibly related PRs
🚥 Pre-merge checks | ✅ 2 | ❌ 3❌ Failed checks (2 warnings, 1 inconclusive)
✅ Passed checks (2 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
animate/scenes/sol_trappist_cinematic.py (1)
88-216: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy liftParameterize
SolCentauriCinematicAnimatorinstead of copying it into the subclass. Both sites copy base-class code verbatim and change only a few destination-specific values, so future edits to the base class will not reachSolTrappistCinematicAnimator.
animate/scenes/sol_trappist_cinematic.py#L88-L216: replace the copied initializer withsuper().__init__(...)plus overridable hooks for destination geometry and framing constants; this also clears the CodeQL missing-super finding at Line 85.animate/scenes/sol_trappist_cinematic.py#L240-L271: delete this override and add class attributes for the field-star radius and the excludedsystem_idto the base_loadFieldStars.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@animate/scenes/sol_trappist_cinematic.py` around lines 88 - 216, Refactor SolTrappistCinematicAnimator.__init__ (animate/scenes/sol_trappist_cinematic.py#L88-L216) to call SolCentauriCinematicAnimator’s initializer via super().__init__(...), moving destination-specific geometry and framing values into overridable hooks or class attributes while preserving TRAPPIST-1 validation and setup; this also resolves the missing-super finding. Remove the _loadFieldStars override at animate/scenes/sol_trappist_cinematic.py#L240-L271, and add class attributes consumed by the base implementation for the field-star radius and excluded system_id.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tests/test_sol_trappist_cinematic.py`:
- Around line 140-143: Update the inner-arrival assertion in the test around
animator._cameraState to evaluate a frame at or after
ARRIVAL_TRAPPIST_INNER_ARRIVE, then assert that innerHalf reaches
TRAPPIST_INNER_HALF_AU rather than only satisfying the wide-framing upper bound.
Preserve the existing focus assertion and Blender timing coverage.
- Around line 101-107: Strengthen test_planets_orbit_host by validating each
planet’s radial distance against its semiMajorAxisAu and eccentricity rather
than only the broad host offset bound. Evaluate _trappistPlanetPositionSol at
two distinct frames and assert the positions differ appropriately, while
retaining the existing planet-count and planar-orbit checks.
- Around line 109-113: Update test_field_stars_reach_trappist_distance to
require a non-empty animator.fieldStars selection, then assert at least one
selected star has a distance in the intended 30–45 ly extended range. Keep the
trappist_1 exclusion assertion unconditional rather than guarding it with an
emptiness check, and retain the existing configuration-bound assertions.
---
Nitpick comments:
In `@animate/scenes/sol_trappist_cinematic.py`:
- Around line 88-216: Refactor SolTrappistCinematicAnimator.__init__
(animate/scenes/sol_trappist_cinematic.py#L88-L216) to call
SolCentauriCinematicAnimator’s initializer via super().__init__(...), moving
destination-specific geometry and framing values into overridable hooks or class
attributes while preserving TRAPPIST-1 validation and setup; this also resolves
the missing-super finding. Remove the _loadFieldStars override at
animate/scenes/sol_trappist_cinematic.py#L240-L271, and add class attributes
consumed by the base implementation for the field-star radius and excluded
system_id.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: f0c8d2ad-7011-4e4b-9ce8-a229954a8cdb
📒 Files selected for processing (6)
README.mdanimate/scenes/blender/README.mdanimate/scenes/sol_centauri_cinematic.pyanimate/scenes/sol_trappist_cinematic.pyrender.pytests/test_sol_trappist_cinematic.py
Gallery light/dark destination-chapter renders with Sol + TRAPPIST b–h billboards.
Skip unsafe super().__init__ (parent requires α Cen) with an explicit CodeQL annotation, and tighten orbit / field-star / inner-frame camera tests.
Extract SolScaleCinematicAnimator for Sol-open / billboard machinery; α Cen and TRAPPIST both inherit it and call super, clearing CodeQL missing-init.
Dive waypoints were Proxima leftovers that zoomed out to ~8000 AU after the 2 AU arrive hold, and the draw path hid the star above 80 AU — a black gap.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tests/test_sol_trappist_cinematic.py`:
- Around line 160-165: Update the dive-width assertions in the sampling loop
around animator._cameraState so they enforce strict non-increasing behavior
using a small absolute floating-point tolerance rather than multiplying holdHalf
and previous by 1.01. Preserve the existing comparisons and previous = halfWidth
tracking while allowing only negligible numerical error.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: f4c4405b-7e97-479f-85c6-b4cfbd229088
⛔ Files ignored due to path filters (2)
output/animate/sol_trappist/blender/sol_trappist_cinematic_blender_dark.gifis excluded by!**/*.gifoutput/animate/sol_trappist/blender/sol_trappist_cinematic_blender_light.gifis excluded by!**/*.gif
📒 Files selected for processing (3)
animate/scenes/sol_centauri_cinematic.pyanimate/scenes/sol_trappist_cinematic.pytests/test_sol_trappist_cinematic.py
🚧 Files skipped from review as they are similar to previous changes (1)
- animate/scenes/sol_trappist_cinematic.py
Re-render after the dive black-gap fix so gallery assets match the tighten-only camera.
Use absolute float epsilon instead of 1% slack so the camera cannot quietly zoom out.
After the wide chain hold, draw a schematic HZ band, zoom to temperate candidates e/f, then ease out to the full b–h finale.
Filled annulus, dashed rims, screen-space label, and a steeper HZ camera so the band does not collapse into a foreshortened line.
Filled HZ annulus and screen-space label in the Sol→TRAPPIST blender gallery assets.
After the HZ band overview, shift the look-at point off the host onto the temperate candidates so the close-up reads as a planet beat, not a star frame.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@animate/scenes/sol_trappist_cinematic.py`:
- Around line 201-211: Update __init__ to validate that the catalog contains
TRAPPIST-1 b through TRAPPIST-1 h before rendering; collect all missing names
and raise ValueError listing them. Preserve _planetByName and _candidateFocusSol
behavior, and add a test covering a partial planet catalog.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 3d6ddef5-0b51-45dd-92bf-211cffd1c133
⛔ Files ignored due to path filters (2)
output/animate/sol_trappist/blender/sol_trappist_cinematic_blender_dark.gifis excluded by!**/*.gifoutput/animate/sol_trappist/blender/sol_trappist_cinematic_blender_light.gifis excluded by!**/*.gif
📒 Files selected for processing (3)
README.mdanimate/scenes/sol_trappist_cinematic.pytests/test_sol_trappist_cinematic.py
🚧 Files skipped from review as they are similar to previous changes (2)
- tests/test_sol_trappist_cinematic.py
- README.md
| def _planetByName(self, name: str) -> SystemPlanet: | ||
| for planet in self.trappistPlanets: | ||
| if planet.name == name: | ||
| return planet | ||
| raise KeyError(name) | ||
|
|
||
| def _candidateFocusSol(self, frame: int) -> np.ndarray: | ||
| """Look-at point between e and f so both HZ candidates stay in frame.""" | ||
| planetE = self._trappistPlanetPositionSol(self._planetByName('TRAPPIST-1 e'), frame) | ||
| planetF = self._trappistPlanetPositionSol(self._planetByName('TRAPPIST-1 f'), frame) | ||
| return 0.62 * planetE + 0.38 * planetF |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
Validate the required planet rows before rendering.
_cameraState() calls _candidateFocusSol() for every frame. A StarSystem that passes the current constructor checks but lacks TRAPPIST-1 e or TRAPPIST-1 f fails later with KeyError, including during the Sol opening.
Validate the required TRAPPIST-1 b through TRAPPIST-1 h names in __init__. Raise ValueError with the missing names. Add a test for a partial planet catalog.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@animate/scenes/sol_trappist_cinematic.py` around lines 201 - 211, Update
__init__ to validate that the catalog contains TRAPPIST-1 b through TRAPPIST-1 h
before rendering; collect all missing names and raise ValueError listing them.
Preserve _planetByName and _candidateFocusSol behavior, and add a test covering
a partial planet catalog.
Queue Blender billboards as soon as the chain is readable, and never fall back to catalog scatter markers when a spin pack is present.
Re-render light/dark gallery assets after textured billboards lead the dive.
Shrink planet disks vs the host on first reveal, let e/f grow through a deeper HZ→candidate dive, and slow/extend those orbit holds.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@tests/test_sol_trappist_cinematic.py`:
- Around line 224-231: Update the assertions in the test covering the HZ and
candidate holds to compare each hold duration against its corresponding zoom-in
duration, using the existing arrival and hold boundary constants; retain the
current minimum frame-count checks if they remain required.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: ef6fc882-9696-431a-baa4-91094ccb1902
⛔ Files ignored due to path filters (2)
output/animate/sol_trappist/blender/sol_trappist_cinematic_blender_dark.gifis excluded by!**/*.gifoutput/animate/sol_trappist/blender/sol_trappist_cinematic_blender_light.gifis excluded by!**/*.gif
📒 Files selected for processing (3)
animate/scenes/sol_centauri_cinematic.pyanimate/scenes/sol_trappist_cinematic.pytests/test_sol_trappist_cinematic.py
🚧 Files skipped from review as they are similar to previous changes (2)
- animate/scenes/sol_centauri_cinematic.py
- animate/scenes/sol_trappist_cinematic.py
Accumulate motion days when slowing the finale, and stop culling e/f by semi-major axis once the camera pans onto them.
Summary
--system sol_trappistdestination chapter: Sol open → neighborhood cruise → TRAPPIST-1 at true Sol XYZ (~40.7 ly) → b–h finale--blender-bodiescomposites Sol packs + TRAPPIST-1 b–h spin billboards (host stays a scatter marker)Test plan
python -m unittest tests.test_sol_trappist_cinematicoutput/animate/sol_trappist/blender/Closes #71
Summary by CodeRabbit
New Features
Documentation
Tests