<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user sarbian</shortDescription><userId>sarbian</userId><userName>sarbian</userName></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>47</buildNumber><marked><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><branch><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><branch><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><branch><SHA1>0f8903ad75ec1781acc3d7f95a8f25b59c15a81b</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/MuMech/MechJeb2.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/lastSuccessfulBuild/artifact</artifactsUrl><changesUrl>https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/changes</changesUrl><displayUrl>https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/lastSuccessfulBuild/</displayUrl><testsUrl>https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/lastSuccessfulBuild/testReport</testsUrl></action><artifact><displayPath>MechJeb2-2.15.3.0.zip</displayPath><fileName>MechJeb2-2.15.3.0.zip</fileName><relativePath>MechJeb2-2.15.3.0.zip</relativePath></artifact><building>false</building><displayName>#47</displayName><duration>20580</duration><estimatedDuration>22269</estimatedDuration><fullDisplayName>MechJeb2-Release #47</fullDisplayName><id>47</id><inProgress>false</inProgress><keepLog>false</keepLog><number>47</number><queueId>73</queueId><result>SUCCESS</result><timestamp>1780822507823</timestamp><url>https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/47/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2.sln.DotSettings</affectedPath><affectedPath>MechJeb2/OrbitExtensions.cs</affectedPath><affectedPath>.idea/.idea.MechJeb2/.idea/.name</affectedPath><commitId>07b9f1caa5796dca9fe9002736c1b4cb839a023b</commitId><timestamp>1776285848000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix inverse rotation maneuver bugs

GetOrbitalStateVectorsAtUT() is particularly whack in the way that it
applies the inverse rotation constructed at a future time via using
Planetarium.ZupAtT().  That means that for the most part it is only
useful for constructing values which can only be compared to other
vectors constructed at the same time.  This bug only occurs when the
vessel is below the inverse rotation threshold, though, so most of
the time works fine when there's no rotation being applied.

The changes to RightHandedStateVectorsAtUT mean that we apply our
own rotation in the current frames rotation to get RH rotating
vectors.  This is consistent with the old API, but should probably
be retired and everything migrated to RH non-rotating vectors now
that I can see how to get them out of the API correctly.

This may also fix other bugs in consumers of the underlying
maneuvers class (e.g. rendezvous autopilot, etc).

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2026-04-15 13:44:08 -0700</date><id>07b9f1caa5796dca9fe9002736c1b4cb839a023b</id><msg>Fix inverse rotation maneuver bugs</msg><path><editType>add</editType><file>.idea/.idea.MechJeb2/.idea/.name</file></path><path><editType>edit</editType><file>MechJeb2.sln.DotSettings</file></path><path><editType>edit</editType><file>MechJeb2/OrbitExtensions.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/OrbitExtensions.cs</affectedPath><commitId>92cb9f8f5de245d7a872ac410cef6e945e62329b</commitId><timestamp>1776285862000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Remove old orbit manipulation APIs

These use GetOrbitalStateVectorsAtUT() which is problematic, they don't
call Init() and have other sketchy looking behavior and nothing has
used them in awhile.

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2026-04-15 13:44:22 -0700</date><id>92cb9f8f5de245d7a872ac410cef6e945e62329b</id><msg>Remove old orbit manipulation APIs</msg><path><editType>edit</editType><file>MechJeb2/OrbitExtensions.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/OrbitExtensions.cs</affectedPath><affectedPath>MechJeb2/Maneuver/TransferCalculator.cs</affectedPath><commitId>d189c9663d01beaadf3178e08c5ae039bbe99161</commitId><timestamp>1776285872000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Transfer planner: GetOrbitalStateVectorsAtUT fix

This fixes a (now) obvious bug in the transfer planner in the
use of GetOrbitalStateVectorsAtUT(), although it seems to only
affect debug log output.

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2026-04-15 13:44:32 -0700</date><id>d189c9663d01beaadf3178e08c5ae039bbe99161</id><msg>Transfer planner: GetOrbitalStateVectorsAtUT fix</msg><path><editType>edit</editType><file>MechJeb2/OrbitExtensions.cs</file></path><path><editType>edit</editType><file>MechJeb2/Maneuver/TransferCalculator.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebCore.cs</affectedPath><affectedPath>MechJeb2/MechJebModuleWaypointWindow.cs</affectedPath><affectedPath>MechJeb2/MuUtils.cs</affectedPath><commitId>d6adb4eebfa871a668a02fe3189a3687d0272656</commitId><timestamp>1776285881000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Prevent Reflection errors from other mods tanking MJ

Avoids using the KSP.IO.File.Exist&lt;T&gt;() API that walks the loaded
assemblies and throws, looking for the path to the assembly with
the type T.

The MuUtils helper replicates the side effect of this API of
creating the directory.

Since we construct the path afterwards anyway to load the file the
only reason I can see for the reflection-driven-API is for that
side-effect, and to cause weird bugs if someone ever moves the DLL
location around and makes the two APIs start to disagree.
</comment><date>2026-04-15 13:44:41 -0700</date><id>d6adb4eebfa871a668a02fe3189a3687d0272656</id><msg>Prevent Reflection errors from other mods tanking MJ</msg><path><editType>edit</editType><file>MechJeb2/MuUtils.cs</file></path><path><editType>edit</editType><file>MechJeb2/MechJebCore.cs</file></path><path><editType>edit</editType><file>MechJeb2/MechJebModuleWaypointWindow.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleAscentMenu.cs</affectedPath><commitId>47b3328d52fc85d20a6c334c24c71f6cc4d08e96</commitId><timestamp>1776286076000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix another NRE

fixes #1611 by just creating a lazy accessor

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2026-04-15 13:47:56 -0700</date><id>47b3328d52fc85d20a6c334c24c71f6cc4d08e96</id><msg>Fix another NRE</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleAscentMenu.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleStagingController.cs</affectedPath><commitId>d15b46c0d76183eb55ed21ade9c13c5c51eda2ad</commitId><timestamp>1776367266000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix staging controller for stock fairings

somehow i had convinced myself the stock fairing was a moduledecouple
when it is actually not.
</comment><date>2026-04-16 12:21:06 -0700</date><id>d15b46c0d76183eb55ed21ade9c13c5c51eda2ad</id><msg>Fix staging controller for stock fairings</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleStagingController.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleStagingController.cs</affectedPath><commitId>b8fe8fe060ce8e3455478a9fbab6937907aea6da</commitId><timestamp>1776398066000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix stock fairings correctly

This makes stock fairings work correctly when they also have a payload
</comment><date>2026-04-16 20:54:26 -0700</date><id>b8fe8fe060ce8e3455478a9fbab6937907aea6da</id><msg>Fix stock fairings correctly</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleStagingController.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleNodeExecutor.cs</affectedPath><commitId>82bde4ca28e9e27ccc8243ecc1ac665088e4a924</commitId><timestamp>1777409593000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix node executor to align COT to the node direction

Should help fix e.g. shuttles work with the node executor

Signed-off-by: Lamont Granquist &lt;lamont@scriptkiddie.org&gt;
</comment><date>2026-04-28 13:53:13 -0700</date><id>82bde4ca28e9e27ccc8243ecc1ac665088e4a924</id><msg>Fix node executor to align COT to the node direction</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleNodeExecutor.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleAscentBaseAutopilot.cs</affectedPath><commitId>a1e0426fe3f7eb7d682703ed9b3a049288d1e687</commitId><timestamp>1779928385000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Classic ascent circularization

Don't try to set the SMA based on desired altitude, but just
circularize at whatever the apoapsis actually is.

We could try to circularize at the precise altitude if the desired altitude &lt;
apo, but that could get more costly so I'm going to skip thinking about
it (some people will want it, some people probably won't, heuristics
will add more edge conditions and buttons and I don't think it is worth
it).

closes #1971
closes #888 (maybe)
</comment><date>2026-05-27 17:33:05 -0700</date><id>a1e0426fe3f7eb7d682703ed9b3a049288d1e687</id><msg>Classic ascent circularization</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleAscentBaseAutopilot.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/MechJebModuleThrustController.cs</affectedPath><commitId>d2ba1b105943c432cbf113379d6181f56231c9b7</commitId><timestamp>1779928385000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix limit throttle/accel editing linkage

closes #1590 finally
</comment><date>2026-05-27 17:33:05 -0700</date><id>d2ba1b105943c432cbf113379d6181f56231c9b7</id><msg>Fix limit throttle/accel editing linkage</msg><path><editType>edit</editType><file>MechJeb2/MechJebModuleThrustController.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/RCSSolver.cs</affectedPath><commitId>3f216000b087a54dbbf2d44f41898f45f39a99be</commitId><timestamp>1780258760000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>Fix RCS solver NRE

Closes #2217

Couple other incredibly minor style fixes snuck in.
</comment><date>2026-05-31 13:19:20 -0700</date><id>3f216000b087a54dbbf2d44f41898f45f39a99be</id><msg>Fix RCS solver NRE</msg><path><editType>edit</editType><file>MechJeb2/RCSSolver.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>MechJeb2/Properties/AssemblyInfo.cs</affectedPath><commitId>a5a2218a32b05baae5721a0190fad4ce0095971a</commitId><timestamp>1780258760000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName></author><authorEmail>lamont@scriptkiddie.org</authorEmail><comment>v2.15.3

This also updates the other versions and establishes a more
sensible versioning policy.
</comment><date>2026-05-31 13:19:20 -0700</date><id>a5a2218a32b05baae5721a0190fad4ce0095971a</id><msg>v2.15.3</msg><path><editType>edit</editType><file>MechJeb2/Properties/AssemblyInfo.cs</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://ksp.sarbian.com/jenkins/user/lamont</absoluteUrl><fullName>lamont</fullName><id>lamont</id></culprit></freeStyleBuild>