{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "Started by user sarbian",
          "userId" : "sarbian",
          "userName" : "sarbian"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 47,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
            "branch" : [
              {
                "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
            "branch" : [
              {
                "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
        "branch" : [
          {
            "SHA1" : "0f8903ad75ec1781acc3d7f95a8f25b59c15a81b",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/MuMech/MechJeb2.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "MechJeb2-2.15.3.0.zip",
      "fileName" : "MechJeb2-2.15.3.0.zip",
      "relativePath" : "MechJeb2-2.15.3.0.zip"
    }
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#47",
  "duration" : 20580,
  "estimatedDuration" : 22269,
  "executor" : null,
  "fullDisplayName" : "MechJeb2-Release #47",
  "id" : "47",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 47,
  "queueId" : 73,
  "result" : "SUCCESS",
  "timestamp" : 1780822507823,
  "url" : "https://ksp.sarbian.com/jenkins/user/cadderley/my-views/view/all/job/MechJeb2-Release/47/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2.sln.DotSettings",
          "MechJeb2/OrbitExtensions.cs",
          ".idea/.idea.MechJeb2/.idea/.name"
        ],
        "commitId" : "07b9f1caa5796dca9fe9002736c1b4cb839a023b",
        "timestamp" : 1776285848000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix inverse rotation maneuver bugs\u000a\u000aGetOrbitalStateVectorsAtUT() is particularly whack in the way that it\u000aapplies the inverse rotation constructed at a future time via using\u000aPlanetarium.ZupAtT().  That means that for the most part it is only\u000auseful for constructing values which can only be compared to other\u000avectors constructed at the same time.  This bug only occurs when the\u000avessel is below the inverse rotation threshold, though, so most of\u000athe time works fine when there's no rotation being applied.\u000a\u000aThe changes to RightHandedStateVectorsAtUT mean that we apply our\u000aown rotation in the current frames rotation to get RH rotating\u000avectors.  This is consistent with the old API, but should probably\u000abe retired and everything migrated to RH non-rotating vectors now\u000athat I can see how to get them out of the API correctly.\u000a\u000aThis may also fix other bugs in consumers of the underlying\u000amaneuvers class (e.g. rendezvous autopilot, etc).\u000a\u000aSigned-off-by: Lamont Granquist <lamont@scriptkiddie.org>\u000a",
        "date" : "2026-04-15 13:44:08 -0700",
        "id" : "07b9f1caa5796dca9fe9002736c1b4cb839a023b",
        "msg" : "Fix inverse rotation maneuver bugs",
        "paths" : [
          {
            "editType" : "add",
            "file" : ".idea/.idea.MechJeb2/.idea/.name"
          },
          {
            "editType" : "edit",
            "file" : "MechJeb2.sln.DotSettings"
          },
          {
            "editType" : "edit",
            "file" : "MechJeb2/OrbitExtensions.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/OrbitExtensions.cs"
        ],
        "commitId" : "92cb9f8f5de245d7a872ac410cef6e945e62329b",
        "timestamp" : 1776285862000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Remove old orbit manipulation APIs\u000a\u000aThese use GetOrbitalStateVectorsAtUT() which is problematic, they don't\u000acall Init() and have other sketchy looking behavior and nothing has\u000aused them in awhile.\u000a\u000aSigned-off-by: Lamont Granquist <lamont@scriptkiddie.org>\u000a",
        "date" : "2026-04-15 13:44:22 -0700",
        "id" : "92cb9f8f5de245d7a872ac410cef6e945e62329b",
        "msg" : "Remove old orbit manipulation APIs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/OrbitExtensions.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/OrbitExtensions.cs",
          "MechJeb2/Maneuver/TransferCalculator.cs"
        ],
        "commitId" : "d189c9663d01beaadf3178e08c5ae039bbe99161",
        "timestamp" : 1776285872000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Transfer planner: GetOrbitalStateVectorsAtUT fix\u000a\u000aThis fixes a (now) obvious bug in the transfer planner in the\u000ause of GetOrbitalStateVectorsAtUT(), although it seems to only\u000aaffect debug log output.\u000a\u000aSigned-off-by: Lamont Granquist <lamont@scriptkiddie.org>\u000a",
        "date" : "2026-04-15 13:44:32 -0700",
        "id" : "d189c9663d01beaadf3178e08c5ae039bbe99161",
        "msg" : "Transfer planner: GetOrbitalStateVectorsAtUT fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/OrbitExtensions.cs"
          },
          {
            "editType" : "edit",
            "file" : "MechJeb2/Maneuver/TransferCalculator.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebCore.cs",
          "MechJeb2/MechJebModuleWaypointWindow.cs",
          "MechJeb2/MuUtils.cs"
        ],
        "commitId" : "d6adb4eebfa871a668a02fe3189a3687d0272656",
        "timestamp" : 1776285881000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Prevent Reflection errors from other mods tanking MJ\u000a\u000aAvoids using the KSP.IO.File.Exist<T>() API that walks the loaded\u000aassemblies and throws, looking for the path to the assembly with\u000athe type T.\u000a\u000aThe MuUtils helper replicates the side effect of this API of\u000acreating the directory.\u000a\u000aSince we construct the path afterwards anyway to load the file the\u000aonly reason I can see for the reflection-driven-API is for that\u000aside-effect, and to cause weird bugs if someone ever moves the DLL\u000alocation around and makes the two APIs start to disagree.\u000a",
        "date" : "2026-04-15 13:44:41 -0700",
        "id" : "d6adb4eebfa871a668a02fe3189a3687d0272656",
        "msg" : "Prevent Reflection errors from other mods tanking MJ",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MuUtils.cs"
          },
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebCore.cs"
          },
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleWaypointWindow.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleAscentMenu.cs"
        ],
        "commitId" : "47b3328d52fc85d20a6c334c24c71f6cc4d08e96",
        "timestamp" : 1776286076000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix another NRE\u000a\u000afixes #1611 by just creating a lazy accessor\u000a\u000aSigned-off-by: Lamont Granquist <lamont@scriptkiddie.org>\u000a",
        "date" : "2026-04-15 13:47:56 -0700",
        "id" : "47b3328d52fc85d20a6c334c24c71f6cc4d08e96",
        "msg" : "Fix another NRE",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleAscentMenu.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleStagingController.cs"
        ],
        "commitId" : "d15b46c0d76183eb55ed21ade9c13c5c51eda2ad",
        "timestamp" : 1776367266000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix staging controller for stock fairings\u000a\u000asomehow i had convinced myself the stock fairing was a moduledecouple\u000awhen it is actually not.\u000a",
        "date" : "2026-04-16 12:21:06 -0700",
        "id" : "d15b46c0d76183eb55ed21ade9c13c5c51eda2ad",
        "msg" : "Fix staging controller for stock fairings",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleStagingController.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleStagingController.cs"
        ],
        "commitId" : "b8fe8fe060ce8e3455478a9fbab6937907aea6da",
        "timestamp" : 1776398066000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix stock fairings correctly\u000a\u000aThis makes stock fairings work correctly when they also have a payload\u000a",
        "date" : "2026-04-16 20:54:26 -0700",
        "id" : "b8fe8fe060ce8e3455478a9fbab6937907aea6da",
        "msg" : "Fix stock fairings correctly",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleStagingController.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleNodeExecutor.cs"
        ],
        "commitId" : "82bde4ca28e9e27ccc8243ecc1ac665088e4a924",
        "timestamp" : 1777409593000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix node executor to align COT to the node direction\u000a\u000aShould help fix e.g. shuttles work with the node executor\u000a\u000aSigned-off-by: Lamont Granquist <lamont@scriptkiddie.org>\u000a",
        "date" : "2026-04-28 13:53:13 -0700",
        "id" : "82bde4ca28e9e27ccc8243ecc1ac665088e4a924",
        "msg" : "Fix node executor to align COT to the node direction",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleNodeExecutor.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleAscentBaseAutopilot.cs"
        ],
        "commitId" : "a1e0426fe3f7eb7d682703ed9b3a049288d1e687",
        "timestamp" : 1779928385000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Classic ascent circularization\u000a\u000aDon't try to set the SMA based on desired altitude, but just\u000acircularize at whatever the apoapsis actually is.\u000a\u000aWe could try to circularize at the precise altitude if the desired altitude <\u000aapo, but that could get more costly so I'm going to skip thinking about\u000ait (some people will want it, some people probably won't, heuristics\u000awill add more edge conditions and buttons and I don't think it is worth\u000ait).\u000a\u000acloses #1971\u000acloses #888 (maybe)\u000a",
        "date" : "2026-05-27 17:33:05 -0700",
        "id" : "a1e0426fe3f7eb7d682703ed9b3a049288d1e687",
        "msg" : "Classic ascent circularization",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleAscentBaseAutopilot.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/MechJebModuleThrustController.cs"
        ],
        "commitId" : "d2ba1b105943c432cbf113379d6181f56231c9b7",
        "timestamp" : 1779928385000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix limit throttle/accel editing linkage\u000a\u000acloses #1590 finally\u000a",
        "date" : "2026-05-27 17:33:05 -0700",
        "id" : "d2ba1b105943c432cbf113379d6181f56231c9b7",
        "msg" : "Fix limit throttle/accel editing linkage",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/MechJebModuleThrustController.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/RCSSolver.cs"
        ],
        "commitId" : "3f216000b087a54dbbf2d44f41898f45f39a99be",
        "timestamp" : 1780258760000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "Fix RCS solver NRE\u000a\u000aCloses #2217\u000a\u000aCouple other incredibly minor style fixes snuck in.\u000a",
        "date" : "2026-05-31 13:19:20 -0700",
        "id" : "3f216000b087a54dbbf2d44f41898f45f39a99be",
        "msg" : "Fix RCS solver NRE",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/RCSSolver.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "MechJeb2/Properties/AssemblyInfo.cs"
        ],
        "commitId" : "a5a2218a32b05baae5721a0190fad4ce0095971a",
        "timestamp" : 1780258760000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
          "fullName" : "lamont"
        },
        "authorEmail" : "lamont@scriptkiddie.org",
        "comment" : "v2.15.3\u000a\u000aThis also updates the other versions and establishes a more\u000asensible versioning policy.\u000a",
        "date" : "2026-05-31 13:19:20 -0700",
        "id" : "a5a2218a32b05baae5721a0190fad4ce0095971a",
        "msg" : "v2.15.3",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "MechJeb2/Properties/AssemblyInfo.cs"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/lamont",
      "fullName" : "lamont"
    }
  ]
}