{
  "_class" : "org.jenkinsci.plugins.workflow.job.WorkflowRun",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "jenkins.metrics.impl.TimeInQueueAction",
      "blockedDurationMillis" : 0,
      "blockedTimeMillis" : 0,
      "buildableDurationMillis" : 0,
      "buildableTimeMillis" : 1,
      "buildingDurationMillis" : 136948,
      "executingTimeMillis" : 135955,
      "executorUtilization" : 0.99,
      "subTaskCount" : 1,
      "waitingDurationMillis" : 9638,
      "waitingTimeMillis" : 9638
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.libs.LibrariesAction"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 591,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
            "branch" : [
              {
                "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
            "branch" : [
              {
                "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
        "branch" : [
          {
            "SHA1" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/larson-group/clubb.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    },
    {
      "_class" : "org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction"
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.job.views.FlowGraphAction"
    },
    {
      
    },
    {
      
    },
    {
      
    }
  ],
  "artifacts" : [
    
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#591",
  "duration" : 136948,
  "estimatedDuration" : 99030,
  "executor" : null,
  "fullDisplayName" : "clubb_BFB_r8029_flags_gfortran_test #591",
  "id" : "591",
  "keepLog" : false,
  "number" : 591,
  "queueId" : 10121,
  "result" : "SUCCESS",
  "timestamp" : 1791361630943,
  "url" : "http://carson.math.uwm.edu/jenkins/job/clubb_BFB_r8029_flags_gfortran_test/591/",
  "changeSets" : [
    {
      "_class" : "hudson.plugins.git.GitChangeSetList",
      "items" : [
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "clubb_jax/src/clubb_case_initalization.py",
            "clubb_jax/src/clubb_standalone.py",
            "clubb_jax/src/CLUBB_core/parameters_tunable.py",
            "clubb_jax/src/Input_fields/namelist.py",
            "tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py",
            "clubb_jax/run_jax.py",
            "tests/run_jax_comparison_mutation_test.py",
            "LLM_prompts/jenkins_workflow.md",
            "clubb_jax/tests/run_driver_extensions_test.py",
            "run_scripts/run_scm.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py",
            "jenkins_tests/clubb_driver/Jenkinsfile",
            "clubb_jax/src/advance_clubb_to_end.py",
            "clubb_jax/README.md",
            "clubb_jax/src/clubb_driver_test.py",
            "LLM_prompts/pytest_workflow.md"
          ],
          "commitId" : "56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab",
          "timestamp" : 1791322777000,
          "author" : {
            "absoluteUrl" : "http://carson.math.uwm.edu/jenkins/user/noreply",
            "fullName" : "noreply"
          },
          "authorEmail" : "noreply@github.com",
          "comment" : "Support reusable JAX driver initialization and runtime batches (#1380)\u000a\u000aThis is just getting the jax driver to be more in line with fortran. It was lacking features like being able to start/stop at a certain timestep. Certain driver tests were also missing, which got added and included in the driver jenkins test.\u000a\u000a\u000a* Support reusable JAX driver state and runtime batches\u000a\u000a* Keep JAX lifecycle coverage with native driver tests and document its origins\u000a\u000a* Mirror the native driver lifecycle test and compare complete JAX statistics\u000a\u000a* Run JAX driver extensions as an independent step in the lifecycle stage\u000a\u000a* Update the C8 comparison mutation for indexed parameter loading\u000a",
          "date" : "2026-10-06 16:39:37 -0500",
          "id" : "56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab",
          "msg" : "Support reusable JAX driver initialization and runtime batches (#1380)",
          "paths" : [
            {
              "editType" : "edit",
              "file" : "LLM_prompts/pytest_workflow.md"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/run_jax.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/Input_fields/namelist.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/clubb_standalone.py"
            },
            {
              "editType" : "edit",
              "file" : "run_scripts/run_scm.py"
            },
            {
              "editType" : "edit",
              "file" : "jenkins_tests/clubb_driver/Jenkinsfile"
            },
            {
              "editType" : "edit",
              "file" : "LLM_prompts/jenkins_workflow.md"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/README.md"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/advance_clubb_to_end.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/clubb_case_initalization.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/tests/run_driver_extensions_test.py"
            },
            {
              "editType" : "add",
              "file" : "tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py"
            },
            {
              "editType" : "edit",
              "file" : "tests/run_jax_comparison_mutation_test.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/CLUBB_core/parameters_tunable.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/src/clubb_driver_test.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py"
            }
          ]
        },
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "tests/README.md",
            "clubb_jax/src/clubb_case_initalization.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py",
            "tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py",
            "clubb_jax/src/Input_fields/input_fields.py",
            "clubb_jax/README.md",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py",
            "jenkins_tests/clubb_restart/Jenkinsfile",
            "tests/run_restart_test.py",
            "clubb_jax/RESTART_PORT_NOTES.md"
          ],
          "commitId" : "7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824",
          "timestamp" : 1791325897000,
          "author" : {
            "absoluteUrl" : "http://carson.math.uwm.edu/jenkins/user/noreply",
            "fullName" : "noreply"
          },
          "authorEmail" : "noreply@github.com",
          "comment" : "Port JAX restart initialization and test normal and SILHS continuation (#1381)\u000a\u000aThis makes jax restarts work. Also adding jax restart test stages in the existing jenkins restart test.\u000a\u000a* Port JAX restart initialization and exercise native and SILHS restarts\u000a\u000a* Describe restart validation and dependencies for the focused PR\u000a\u000a* Describe JAX restart scenarios and their native source equivalents\u000a\u000a* Keep JAX restart validation in the shared harness and exercise distinct columns\u000a",
          "date" : "2026-10-06 17:31:37 -0500",
          "id" : "7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824",
          "msg" : "Port JAX restart initialization and test normal and SILHS continuation (#1381)",
          "paths" : [
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/src/Input_fields/input_fields.py"
            },
            {
              "editType" : "edit",
              "file" : "jenkins_tests/clubb_restart/Jenkinsfile"
            },
            {
              "editType" : "edit",
              "file" : "tests/README.md"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/src/clubb_case_initalization.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py"
            },
            {
              "editType" : "add",
              "file" : "tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/README.md"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/RESTART_PORT_NOTES.md"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py"
            },
            {
              "editType" : "edit",
              "file" : "tests/run_restart_test.py"
            }
          ]
        },
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "clubb_python_api/tests/clubb_loss_driver_test.py",
            "clubb_python_api/README.md",
            "clubb_jax/run_jax.py",
            "tuner/clubb_loss_driver.py",
            "tests/README.md",
            "clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py",
            "run_scripts/run_scm_loss.py",
            "tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py",
            "clubb_jax/tests/test_loss_driver.py",
            "clubb_jax/src/clubb_standalone_loss.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py",
            "clubb_python_api/clubb_python/clubb_standalone_loss.py",
            "clubb_python_api/CMakeLists.txt",
            "tuner/clubb_loss_driver_test.py",
            "utilities/README.md",
            "jenkins_tests/clubb_stats_output_consistency/Jenkinsfile",
            "utilities/loss_metrics.py",
            "clubb_jax/src/clubb_loss_driver.py",
            "clubb_jax/TUNER_PORT.md",
            "utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py",
            "tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py",
            "clubb_jax/tests/test_silhs_loss_driver.py",
            "clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py",
            "tuner/README.md",
            "clubb_jax/README.md",
            "tuner/case_defaults.py",
            "tests/run_loss_output_consistency.py"
          ],
          "commitId" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
          "timestamp" : 1791344832000,
          "author" : {
            "absoluteUrl" : "http://carson.math.uwm.edu/jenkins/user/noreply",
            "fullName" : "noreply"
          },
          "authorEmail" : "noreply@github.com",
          "comment" : "Port standalone JAX loss evaluation and consistency checks (#1382)\u000a\u000aThis adds the capability for the jax to run and compute loss vs les data the same as fortran does. Fortran uses the \"loss driver\" which does this, and has some additional testing code and a clubb_standalone_loss program that supports that, so this was basically just porting more of the high level fortran code to jax and hooking it up with some of the high level python scripts the tuner uses.\u000a\u000a\u000a* Support reusable JAX driver state and runtime batches\u000a\u000a* Add standalone JAX loss evaluation and consistency coverage\u000a\u000a* Keep standalone loss CLI coverage separate from tuning\u000a\u000a* Remove trailing whitespace from extracted loss CLI tests\u000a\u000a* Run JAX loss help checks in the JAX pytest suite\u000a\u000a* Keep JAX lifecycle coverage with native driver tests and document its origins\u000a\u000a* Document loss test scenarios, native counterparts and JAX extensions\u000a\u000a* Keep the native loss executable path intact in the test description\u000a\u000a* Mirror the native driver lifecycle test and compare complete JAX statistics\u000a\u000a* Run JAX driver extensions as an independent step in the lifecycle stage\u000a\u000a* Update the C8 comparison mutation for indexed parameter loading\u000a\u000a* Reject unsupported loss restarts before opening model resources\u000a\u000a* Clean up merged loss launcher state and document early restart rejection\u000a\u000a* Move loss frontends and tests out of the tuner package\u000a\u000aCall the existing Fortran Python API directly from its installed standalone loss frontend, and keep the JAX standalone frontend with its source port. Share unchanged table formatting, relocate lifecycle and CLI coverage, and update runners and documentation.\u000a",
          "date" : "2026-10-06 22:47:12 -0500",
          "id" : "04ff5df702bc2ad372325353ee19dde5a2fc3fc1",
          "msg" : "Port standalone JAX loss evaluation and consistency checks (#1382)",
          "paths" : [
            {
              "editType" : "add",
              "file" : "tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/run_jax.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/tests/test_loss_driver.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/src/clubb_loss_driver.py"
            },
            {
              "editType" : "edit",
              "file" : "tuner/case_defaults.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py"
            },
            {
              "editType" : "edit",
              "file" : "jenkins_tests/clubb_stats_output_consistency/Jenkinsfile"
            },
            {
              "editType" : "edit",
              "file" : "clubb_python_api/README.md"
            },
            {
              "editType" : "delete",
              "file" : "tuner/clubb_loss_driver.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/TUNER_PORT.md"
            },
            {
              "editType" : "add",
              "file" : "clubb_python_api/clubb_python/clubb_standalone_loss.py"
            },
            {
              "editType" : "edit",
              "file" : "tuner/README.md"
            },
            {
              "editType" : "add",
              "file" : "tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py"
            },
            {
              "editType" : "delete",
              "file" : "tuner/clubb_loss_driver_test.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/tests/test_silhs_loss_driver.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_jax/README.md"
            },
            {
              "editType" : "add",
              "file" : "clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py"
            },
            {
              "editType" : "add",
              "file" : "utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py"
            },
            {
              "editType" : "add",
              "file" : "clubb_python_api/tests/clubb_loss_driver_test.py"
            },
            {
              "editType" : "edit",
              "file" : "run_scripts/run_scm_loss.py"
            },
            {
              "editType" : "edit",
              "file" : "utilities/README.md"
            },
            {
              "editType" : "add",
              "file" : "clubb_jax/src/clubb_standalone_loss.py"
            },
            {
              "editType" : "edit",
              "file" : "clubb_python_api/CMakeLists.txt"
            },
            {
              "editType" : "edit",
              "file" : "tests/run_loss_output_consistency.py"
            },
            {
              "editType" : "edit",
              "file" : "utilities/loss_metrics.py"
            },
            {
              "editType" : "edit",
              "file" : "tests/README.md"
            }
          ]
        }
      ],
      "kind" : "git"
    }
  ],
  "culprits" : [
    {
      "absoluteUrl" : "http://carson.math.uwm.edu/jenkins/user/noreply",
      "fullName" : "noreply"
    }
  ],
  "inProgress" : false,
  "nextBuild" : {
    "number" : 592,
    "url" : "http://carson.math.uwm.edu/jenkins/job/clubb_BFB_r8029_flags_gfortran_test/592/"
  },
  "previousBuild" : {
    "number" : 590,
    "url" : "http://carson.math.uwm.edu/jenkins/job/clubb_BFB_r8029_flags_gfortran_test/590/"
  }
}