<workflowJob _class='org.jenkinsci.plugins.workflow.job.WorkflowJob'><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction'><displayUrl>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/</displayUrl></action><action></action><action></action><action _class='com.cloudbees.plugins.credentials.ViewCredentialsAction'><stores></stores></action><description>Tests CLUBB's vertical grid generalization by calling advance_clubb_core_api twice -- once in with an ascending grid and once with a descending grid -- and then comparing that the output results are bit-for-bit when run with -O0 optimization.  The test is run for all cases and for a large number of flag sets that vary some of CLUBB's configurable model flags.</description><displayName>clubb_generalized_grid</displayName><fullDisplayName>clubb_generalized_grid</fullDisplayName><fullName>clubb_generalized_grid</fullName><name>clubb_generalized_grid</name><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/</url><buildable>true</buildable><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>605985</buildableTimeMillis><buildingDurationMillis>0</buildingDurationMillis><executingTimeMillis>4328587</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>3</subTaskCount><waitingDurationMillis>7998</waitingDurationMillis><waitingTimeMillis>7998</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>16</buildNumber><marked><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>true</building><displayName>#16</displayName><duration>0</duration><estimatedDuration>13433486</estimatedDuration><executor _class='hudson.model.OneOffExecutor'></executor><fullDisplayName>clubb_generalized_grid #16</fullDisplayName><id>16</id><keepLog>false</keepLog><number>16</number><queueId>11133</queueId><timestamp>1792484769900</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/generalized_grid_test.F90</affectedPath><affectedPath>src/CLUBB_core/setup_clubb_pdf_params.F90</affectedPath><affectedPath>clubb_python_api/clubb_f2py.pyf</affectedPath><affectedPath>src/CLUBB_core/fill_holes.F90</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/precipitation_fraction_wrapper.F90</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</affectedPath><affectedPath>src/G_unit_test_types/mu_sigma_hm_tests.F90</affectedPath><affectedPath>src/Microphys/pdf_hydromet_microphys_wrapper.F90</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/precipitation_fraction.py</affectedPath><affectedPath>src/CLUBB_core/precipitation_fraction.F90</affectedPath><commitId>8369512fcc6487603491e12ac13376de2aec2a0b</commitId><timestamp>1792463005000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Clubb params 1d to 2d fix (#1392)

* Fix: clubb params is a shape (ngrdcol,nparams) that is passed into subroutines that expect a 1d array

Also fixed dependent other places in code and changed the python api. This is BIT_CHANGING for multicol.
If a 2d array is passed into a function that expects the arr to be 1d fortran just passes the first col of the arr.
Therefore the changes dont affect single col runs. For multicol runs other indexing is needed

* fill_holes_vertical_api expects the passed gr%dzt to have shape(ngrdcol,nz) but the code passes the whole gr%dzt array although each column is traversed one by one.
So ngrdcol=1 is passed each time.

No effect on single col, as with ngrdcol = 1, gr%dzt and gr%dzt(1:1,:) are the same.
Affects multicol if l_hole_fill = .true. and the hydrometeor is a mixing ratio (name starts with r) and
some value is actually negative

Therefore BIT_CHANGING
</comment><date>2026-10-19 21:23:25 -0500</date><id>8369512fcc6487603491e12ac13376de2aec2a0b</id><msg>Clubb params 1d to 2d fix (#1392)</msg><path><editType>edit</editType><file>clubb_python_api/clubb_f2py.pyf</file></path><path><editType>edit</editType><file>src/CLUBB_core/fill_holes.F90</file></path><path><editType>edit</editType><file>src/generalized_grid_test.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/setup_clubb_pdf_params.F90</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/precipitation_fraction_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</file></path><path><editType>edit</editType><file>src/Microphys/pdf_hydromet_microphys_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/precipitation_fraction.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/precipitation_fraction.F90</file></path><path><editType>edit</editType><file>src/G_unit_test_types/mu_sigma_hm_tests.F90</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>true</inProgress><previousBuild><number>15</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12914478</buildingDurationMillis><executingTimeMillis>17330996</executingTimeMillis><executorUtilization>1.34</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>5636</waitingDurationMillis><waitingTimeMillis>5636</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>15</buildNumber><marked><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#15</displayName><duration>12914478</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #15</fullDisplayName><id>15</id><keepLog>false</keepLog><number>15</number><queueId>11023</queueId><result>FAILURE</result><timestamp>1792398368289</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-bit-changing/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><commitId>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</commitId><timestamp>1792344464000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Define when to declare bit-changing commits (#1403)

* Define conservative bit-change declarations

Centralize the policy around intentional Fortran numerical answer changes, with named affected BFB tests or precise untested conditions. Preserve standalone coverage and the current JAX parity boundary, keep declarations sparse, and separate answer-changing edits from preserving cleanup.

Route message writing, validation and branch finalization to one owner. Skill schemas, local links, heading anchors, parser examples and manual decision scenarios were checked; no model or CI code changes.

* Define the optimization level for bitwise preservation

Use -O0 as the normal preservation standard. Differences confined to optimized builds do not require an answer-change declaration when -O0 is verified BFB; report known optimized-only differences and their configuration in the PR.

The changed skill schema and whitespace checks pass. Inspected current debug compile flags and manually reviewed the optimized-only decision scenario; documentation only, no numerical rerun.
</comment><date>2026-10-18 12:27:44 -0500</date><id>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</id><msg>Define when to declare bit-changing commits (#1403)</msg><path><editType>edit</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-bit-changing/SKILL.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>utilities/clubb_case_runner.py</affectedPath><affectedPath>utilities/pytests/test_time_clubb.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</affectedPath><affectedPath>clubb_python_driver/clubb_standalone.py</affectedPath><affectedPath>src/clubb_standalone.F90</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>utilities/pytests/test_create_case_namelist.py</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>tests/case_runner_lifecycle_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-format/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_init_cleanup.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>utilities/timing_profiles.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>utilities/pytests/timing_test_inputs.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/calc_pressure.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>4f8368a377989b649fc0ed53c26957e193d21067</commitId><timestamp>1792350419000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add reusable case runners for timing (#1400)

We have multiple entry points now for clubb standalone (fortran,python,jax), and there's additional logic that chooses which fortran installation to use (gfortran,ifort,nvhpc,etc). All of this has historically (~1 year) been done by run_scm.py, but we have a number of other scripts that need this same kind of logic, so instead of making run_scm.py more complicated and letting other scripts import it's pieces, we've made a `clubb_case_runner`.

`clubb_case_runner` is a python object that abstracts the backend decisions. The "flow" is roughly:
- high level script wants to run a clubb case some how
- generates one or more case namelists (arm.in, bomex.in, etc)
- creates a `clubb_case_runner` by passing it whatever runtime options (-jax/-python/-exe) the user requested
- runs a case by passing this `clubb_case_runner` whatever namelists it wants to run.

In addition to deduplicating runtime setting logic, this allows python scripts to create these high level `clubb_case_runner` objects and use those to do things that usually requires duplicate multiprocessesing and error code parsing logic.
</comment><date>2026-10-18 14:06:59 -0500</date><id>4f8368a377989b649fc0ed53c26957e193d21067</id><msg>Add reusable case runners for timing (#1400)</msg><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>add</editType><file>utilities/pytests/timing_test_inputs.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>src/clubb_standalone.F90</file></path><path><editType>add</editType><file>tests/case_runner_lifecycle_test.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>edit</editType><file>utilities/timing_profiles.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_standalone.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>add</editType><file>utilities/clubb_case_runner.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-format/SKILL.md</file></path><path><editType>edit</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_init_cleanup.py</file></path><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/calc_pressure.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_create_case_namelist.py</file></path><path><editType>edit</editType><file>tests/run_timestep_sweep.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>clubb_jax/view_profile.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/code_timer_module.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><commitId>ec5e8070d3173282a6317b067f8673a657a1eb6f</commitId><timestamp>1792362852000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JAX timing and profiling (#1393)

* Add JAX timing and persistent benchmark workers

Write Fortran-format CPU timing summaries and optional XProf/Perfetto traces
from JAX driver phases. Use synchronized persistent workers for full-case
warmups and repetitions across Fortran, Python and JAX. Retain compiled JAX
programs when initialization settings are unchanged.

Validation: 243 focused checks and CPU case workflows passed. Repeated
five-step BOMEX/RICO_SILHS numeric outputs matched fresh controls exactly.
The two-column BOMEX JAX/Fortran comparison passed 1e-7 absolute and percent
thresholds. BFB against the parent is not established by these comparisons.
GPU and GPTL execution remain untested.

* Making jax timer use wall clock time instead of cpu/process time

* Keep JAX timing separate from reusable runners

Move process persistence, cache reuse and Python timing adapters to the
case-runner branch. Keep JAX wall-clock summaries, optional deep profiles,
driver instrumentation and the parser change that reads their clock label.

The timing-only shared suite and a three-step CPU BOMEX run pass. BFB
against master is not established; physics expressions are unchanged.

* Add reusable case runners for timing and tuning

Share runtime selection and persistent standalone sessions between SCM,
timing and tuning. Support namelist replacement and empty model reruns,
plus parameter matrices for loss sessions. Synchronize timing cohorts and
record retained-model initialization separately. Use executable loss
workers for native tuning instead of requiring F2PY.

Restore microphysics defaults between cases (BIT_CHANGING for sessions
that previously inherited settings). Short native/CPU JAX sessions match
fresh same-backend stats values exactly; broader BFB is not established.
Native build, focused suites and repeated loss/tuner/timing workflows pass.

* Use F2PY for reusable Fortran loss runs

Run persistent Fortran loss sessions through the existing Python API.
Restore the native loss standalone and remove its parameter namelist reader
and result writers. Python workers pass arrays directly into F2PY; ordinary
standalone persistence and JAX execution remain available.

Fifteen native loss metric arrays match saved results exactly. Native and
CPU JAX repeated loss/tuning workflows, tuner shutdown, the native build,
454 shared checks and four API checks pass. Broader BFB is not established.

* Keep case runners persistent without retaining model state

Run each ordinary request through full initialization, advancement and
cleanup while keeping the process alive for in-memory JIT reuse. Remove
retained-model commands, transport, timing/UI options and extra bindings.
Restore tuning and loss frontends to their existing allocation-reusing APIs.

The native build, 445 shared checks, 121 focused JAX checks and 85 Dash
checks pass. Short native/JAX/Python reused-process stats match fresh
controls exactly; tuning and synchronized timing sweeps pass. Two full
16-column JAX repeats log no new compilations. These comparisons do not
establish blanket BFB.

* Separate microphysics initialization fixes from case runners

Move native default resets to their own branch/PR and keep the runner focused
on shared runtime selection and full-case process reuse. Record the mixed-case
native test's dependency on that fix. Refresh the timing base and master,
and clarify runner, driver and test documentation under the current skills.

The shared checks pass, including output drainage, cancellation, synchronized
warmup/repetition barriers and CLI forwarding. Python AST checks confirm the
remaining audit edits change only documentation. Jenkins validation follows
this published checkpoint.

* Complete case-runner procedure descriptions

Describe the remaining changed CLI, test and profile routines under the current
documentation standards. Executable Python ASTs are unchanged from f66ccf2ff,
the revision running in Jenkins; existing validation still applies.

* Separate JAX timing from case runner changes

Keep runtime selection and process reuse independent so the case runner
can merge into master before JAX timing. Shared runner/CLI/timing
checks pass (445 tests, including provisional coverage).

* Add JAX timing after the case runner

Restore the audited wall-clock summaries and optional execution tracing
on top of the independent case runner. Keep the existing implementation
and review history while reversing the PR merge order.

* Add a JAX profiling option and viewer commands

Enable captures with -jax=profile and print commands after cleanup.
Keep capture export in the timer and viewing in view_profile.py.

181 focused checks pass. CPU BOMEX captures preserve numeric stats;
both viewers were verified in-browser. Large full-Python Perfetto
exports can truncate; XProf retained all five tested timesteps.

* Clarify JAX timing usage and cleanup

Document the timer lifecycle, failure handling and Dash wall-time comparison metric. Executable Python AST is unchanged.
</comment><date>2026-10-18 17:34:12 -0500</date><id>ec5e8070d3173282a6317b067f8673a657a1eb6f</id><msg>Add JAX timing and profiling (#1393)</msg><path><editType>add</editType><file>clubb_jax/src/CLUBB_core/code_timer_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/view_profile.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>16</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url></nextBuild><previousBuild><number>14</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>14383273</buildingDurationMillis><executingTimeMillis>18586870</executingTimeMillis><executorUtilization>1.29</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>5266</waitingDurationMillis><waitingTimeMillis>5266</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>14</buildNumber><marked><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><branch><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><branch><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><branch><SHA1>6e48f97c2a96bc78fb498c82f1ed0bb690235349</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#14</displayName><duration>14383273</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #14</fullDisplayName><id>14</id><keepLog>false</keepLog><number>14</number><queueId>10902</queueId><result>FAILURE</result><timestamp>1792311967636</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_scalar_indices.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/err_info.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_error_diagnostics.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_error_diagnostics.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/__init__.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/numerical_check.py</affectedPath><affectedPath>clubb_python_api/JAX_INTEROPERABILITY_PROPOSAL.md</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_xp2_xpyp_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/err_info_codes.py</affectedPath><affectedPath>clubb_jax/src/Radiation/radiation_module.py</affectedPath><commitId>aa8c2aa4037dda69d686ca97bcbbe1a8208401fd</commitId><timestamp>1792259885000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Remove the JAX error-message code registry (#1401)

* Remove the JAX error-message code registry

Print failure details at the runtime checks that detect them. Remove the
extra reason_code field and its setters, decoder, initialization/reset
handling and exports; retain the normal per-column fatal-error status.
Update the scalar-guard assertions and add cached-call diagnostic checks.

Local CPU checks passed for the ErrInfo pytree, diagnostic output, driver
debug gates and state reset/batching behavior (65 cases across five modules).

* Correct the multiple-LHS diagnostic test's wp3 grid

Allocate synthetic wp3 on thermodynamic levels, as required by
calc_wp3_on_wp2, so the test reaches the multiple-LHS guard during tracing.

The 21 selected CPU diagnostic checks pass, covering cached-call output,
per-column fatal status and preservation of fields on the unsupported path.

* Restore the C2 explanation in the multiple-LHS diagnostic

Name C2rt, C2thl and C2rtthl when their unequal values prevent a single-LHS
solve. Keep the direct runtime print and existing fatal-status handling.

The focused CPU cached-call test passes, including the restored explanation,
quiet valid calls and preservation of incoming fields on failure.

* Revert "Restore the C2 explanation in the multiple-LHS diagnostic"

This reverts commit 170a13e2bc7af24e92d8d8bc9de9d9db601921ed.

* List single-LHS requirements in the JAX diagnostic

Print the approved static requirements after the unsupported multiple-LHS
message: explicit turbulent advection or ADG1, plus per-column equivalence
of C2thl and C2rtthl to C2rt within the relative epsilon tolerance.

The focused CPU cached-call test passes, checking the listed requirements,
quiet valid calls and preservation of incoming fields and fatal status.
</comment><date>2026-10-17 12:58:05 -0500</date><id>aa8c2aa4037dda69d686ca97bcbbe1a8208401fd</id><msg>Remove the JAX error-message code registry (#1401)</msg><path><editType>edit</editType><file>clubb_python_api/JAX_INTEROPERABILITY_PROPOSAL.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_scalar_indices.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/err_info.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/__init__.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_xp2_xpyp_module.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>delete</editType><file>clubb_jax/src/CLUBB_core/err_info_codes.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/numerical_check.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_error_diagnostics.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Radiation/radiation_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_error_diagnostics.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><commitId>6e48f97c2a96bc78fb498c82f1ed0bb690235349</commitId><timestamp>1792260807000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Restrict BIT_CHANGING guidance to Fortran result changes (#1399)

Keep JAX numerical acceptance focused on agreement with the corresponding
Fortran implementation rather than preserving earlier JAX output. Clarify
the reporting rule and link it from the JAX porting workflow.

All 21 skill schemas, 112 local links and 7 heading anchors pass, along with
diff formatting. Only three skill Markdown files change.
</comment><date>2026-10-17 13:13:27 -0500</date><id>6e48f97c2a96bc78fb498c82f1ed0bb690235349</id><msg>Restrict BIT_CHANGING guidance to Fortran result changes (#1399)</msg><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>15</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url></nextBuild><previousBuild><number>13</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/13/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>13002707</buildingDurationMillis><executingTimeMillis>20328074</executingTimeMillis><executorUtilization>1.56</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>6534</waitingDurationMillis><waitingTimeMillis>6534</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>13</buildNumber><marked><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><branch><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><branch><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><branch><SHA1>c47faf30cea562966e64eedc259a5074c6cf89b1</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#13</displayName><duration>13002707</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #13</fullDisplayName><id>13</id><keepLog>false</keepLog><number>13</number><queueId>10757</queueId><result>FAILURE</result><timestamp>1792225569040</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/13/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-doc-language/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-file-descriptions/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-readmes/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-code-comments/SKILL.md</affectedPath><commitId>c179bae7435e6e90a0f796cb621d9de4690429b8</commitId><timestamp>1792177736000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add CLUBB documentation skills (#1397)

* Add CLUBB documentation skills

Add focused guidance for READMEs, file descriptions, routine/code comments,
and plain language, with a documentation entry skill selected by AGENTS.md.
This gives agents one route to the writing rules for the current task.

Shorten the existing PR/commit guide and require BFB discussion only when a
change could plausibly affect model results or scientific output.

All 18 skill definitions and 45 local guidance links validate; git diff
--check passes.

* Require code reading and checks before finishing documentation

Route small documentation edits through the writing skills. Require agents
to inspect the implementation before drafting and check facts, coverage,
links, and comment syntax before finishing. Clarify that weak file headers
need complete descriptions in the appropriate language form.

Validation: all 18 skill schemas, 46 local guidance links, and whitespace
checks pass. The fresh-agent study uses these exact frozen guidance files.

* Clarify documentation wording and optional usage examples

Explain meaning before usage and make important ordering clear. Read the
applicable language or porting standards for documentation conventions.
Describe file interfaces independently of current callers, using callers as
optional examples. Recommend examples in file headers when useful, or beside
individual routines for collections of independent helpers.

Validation: all 18 skill schemas, 49 local guidance links, and whitespace
checks pass. These refinements have not had a new fresh-agent trial.
</comment><date>2026-10-16 14:08:56 -0500</date><id>c179bae7435e6e90a0f796cb621d9de4690429b8</id><msg>Add CLUBB documentation skills (#1397)</msg><path><editType>add</editType><file>.agents/skills/clubb-code-comments/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-doc-language/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-file-descriptions/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-readmes/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-change-messages/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-column-refactor/SKILL.md</affectedPath><affectedPath>jenkins_tests/README.md</affectedPath><affectedPath>.agents/skills/clubb-jenkins/test-authoring/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jenkins/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/code-comments/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/file-descriptions/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-script-cli/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-python-api/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/readmes/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/language/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-readmes/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-code-comments/SKILL.md</affectedPath><affectedPath>jenkins_tests/jenkins_api_login.py</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-doc-language/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-file-descriptions/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-host-compatibility/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-pytests/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-change-messages/SKILL.md</affectedPath><commitId>eb23a4c1b51706cad0060c28d8c5ead8da595e1c</commitId><timestamp>1792199605000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add Jenkins workflows and branch finalization guidance (#1396)

* Set up Jenkins API login over HTTPS

Add an interactive token login script and teach the Jenkins skill to reuse
its private local credential file or direct users through setup. This lets
each developer use their own Jenkins account without SSH access.

Ten focused regression checks and a live HTTPS login/save check passed.
BFB is not applicable: login tooling and guidance do not affect model
execution or output.

* Explain Jenkins login setup and agent use

Describe why agents use the saved login, how developers set it up, and what
the public routines and failure paths do. Apply the new documentation
guidance to the script, test comments and usage documentation.

Executable Python statements are unchanged. Ten focused login checks pass.

* Remove Jenkins login pytests

Remove the provisional test file from the Jenkins login change at the
user’s request. Keep the login script and workflow guidance unchanged.

* Document Jenkins access and test authoring

Add a Jenkins README and a separate authoring skill for simple,
reproducible pipelines and coordinated live-job changes. Keep API access
in its existing skill and route both workflows from AGENTS.md.

Place the login script with the Jenkins files and update its references.
Runtime statements and the credential location are unchanged. Login help,
import, live HTTPS identity, skill validation and local links pass.

* Prefer relevant Jenkins evidence in test reports

Add shared guidance for choosing checks and explaining what their results
establish. Lead PR reports with relevant Jenkins build links, include local
checks when they add evidence, and keep unexpected failures visible.

Connect validation and change-message workflows to the shared skill.
Skill metadata and local guidance links validate; only Markdown changes.

* Keep README verification notes in change reports

Remove the authoring-history sentence from the Jenkins README and clarify
where the README skill should record example verification. Review the PR
documentation for similar notes while retaining reader-relevant setup.

Skill metadata, local links and diff formatting checks pass.

* Group related skills under their entry points

Nest documentation guides and Jenkins test authoring while preserving
skill names and workflow text. Rebase links, make shared parent guidance
explicit, and use recursive skill discovery for validation.

The Codex skill loader discovers every nested child. Recursive schema,
link and preservation checks pass.

* Clarify Jenkins test authoring scope and when to wait

Require a user request before changing Jenkins test definitions, while allowing
relevant existing branch builds during normal validation. Align pytest
integration guidance with that boundary.

Guide intermediate work toward fast meaningful checks and later review of
slow builds; weigh longer waits at final validation and report pending results.

All 20 skill schemas and 99 local guidance links validate; diff formatting
passes. No pipeline or runtime changes, or live Jenkins actions.

* Explain Jenkins permissions before promising site changes

Describe the permissions needed to read, run, create or edit jobs without
assuming a particular account. Link the guidance from authoring and setup,
and explain how to use assigned tokens or switch saved accounts.

All 20 skill schemas and 101 local guidance links pass, including the new
section anchors. Diff formatting passes; this commit changes Markdown only.
Prior live HTTPS checks confirmed creation, build and cancellation access,
read-only configuration access, and denied configuration writes.

* Add branch finalization workflow and agent PR conventions

Define merge preparation as a full branch audit followed by current validation
and a commit, push and draft-PR handoff. Pause for substantive unintended
issues the user has not accepted; allow minor cleanup without interruption.

Route finalization from AGENTS and shared testing guidance. Keep agent PRs
as drafts and sign PR comments posted through a user account with the agent name.

Codex discovers all 21 repo skills. All 21 schemas and 110 local guidance
links validate; diff formatting passes. Only agent guidance changes.

* Clarify which builds an agent may cancel

Limit cancellation to builds and queue items launched for the current task
unless the user authorizes stopping others. A shared Jenkins username does
not establish ownership. Wrap the nearby setup and authoring text.

Final branch audit found no substantive blockers. Login smoke checks passed
for live HTTPS authentication, private credential replacement and failure
preservation without changing the user credential file. All 21 skill schemas,
110 local links and 5 heading anchors pass; Codex discovers all 21 skills.
</comment><date>2026-10-16 20:13:25 -0500</date><id>eb23a4c1b51706cad0060c28d8c5ead8da595e1c</id><msg>Add Jenkins workflows and branch finalization guidance (#1396)</msg><path><editType>add</editType><file>.agents/skills/clubb-jenkins/test-authoring/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-column-refactor/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-pytests/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-script-cli/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/language/SKILL.md</file></path><path><editType>delete</editType><file>.agents/skills/clubb-code-comments/SKILL.md</file></path><path><editType>delete</editType><file>.agents/skills/clubb-file-descriptions/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-host-compatibility/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>delete</editType><file>.agents/skills/clubb-doc-language/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/code-comments/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-python-api/SKILL.md</file></path><path><editType>delete</editType><file>.agents/skills/clubb-readmes/SKILL.md</file></path><path><editType>add</editType><file>jenkins_tests/README.md</file></path><path><editType>add</editType><file>jenkins_tests/jenkins_api_login.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-documentation/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/file-descriptions/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jenkins/SKILL.md</file></path><path><editType>delete</editType><file>.agents/skills/clubb-change-messages/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-documentation/readmes/SKILL.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/Microphys/microphys_init_cleanup.F90</affectedPath><commitId>d9e8b9588ff7b16679ca79b67fcf5382bcc723c4</commitId><timestamp>1792209029000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Reset microphysics defaults when initializing another case (#1398)

Restore module and saved-local namelist defaults before reading a new case.
This prevents omitted settings from inheriting the previous case's values. This isn't an issue for any way that clubb is currently run in the codebase, but would potentially cause an issue for a future use case (this is foreshadowing).
</comment><date>2026-10-16 22:50:29 -0500</date><id>d9e8b9588ff7b16679ca79b67fcf5382bcc723c4</id><msg>Reset microphysics defaults when initializing another case (#1398)</msg><path><editType>edit</editType><file>src/Microphys/microphys_init_cleanup.F90</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/CLUBB_core/sfc_varnce_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/model_flags.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/new_hybrid_pdf_main.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/adg1_adg2_3d_luhar_pdf.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/interpolation.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_wp2_wp3_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/precipitation_fraction.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/parameters_tunable.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/setup_clubb_pdf_params.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/jax_stats.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/file_functions.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/grid_class.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_xm_wpxp_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_xp2_xpyp_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/mono_flux_limiter.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/fill_holes.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/stats_netcdf.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/clip_explicit.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/mixing_length.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/err_info.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce_diagnostics.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/pdf_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_core_diagnostics.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/remapping_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/sponge_layer_damping.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/new_pdf.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/matrix_operations.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/pdf_closure_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/pos_definite_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/numerical_check.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/matrix_solver_wrapper.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/corr_varnce_module.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/new_tsdadg_pdf.py</affectedPath><commitId>c47faf30cea562966e64eedc259a5074c6cf89b1</commitId><timestamp>1792221315000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Restore missing debug printouts in JAX core (#1390)

* Restore missing debug printouts in JAX core

The port kept many failure checks but omitted their Fortran messages, making
failed columns and solvers difficult to diagnose. Restore runtime messages,
column headers and available field dumps with the source debug gates. Record
diagnostics needing unported machinery in the skip report.

BFB is not established by the available comparisons. All 23 curated CPU
JAX/Fortran cases matched within default tolerances: absolute 1e-7 and
percentage 1e-7%, or 0.001% for the curated Morrison cases. Runs used four
columns, standard statistics and existing durations/caps. Separately, 24
starting-tree kernel comparisons found exactly equal result/state values.

The CPU JAX suite passed 787 tests, including compiled diagnostic checks;
the focused rerun passed 14. Source/diff review and git diff --check passed.

* Remove diagnostic restoration report

Remove the standalone report on intentionally skipped diagnostics. Observed
Fortran differences remain documented in the affected JAX modules.

This removes documentation only, so model/output BFB is not applicable.
Diff review, a tracked-file reference search and git diff --check passed.
Runtime tests were not rerun for this deletion.

* Identify scalar fields in solver diagnostics

The separate scalar solves all printed the same generic field label. Restore
the Fortran names sclrp2, sclrprtp and sclrpthlp so a failure identifies which
variance or covariance solve failed.

Source comparison confirms the three labels match their Fortran call sites.
Python syntax and whitespace checks passed. Jenkins validation will exercise
the published revision.
</comment><date>2026-10-17 02:15:15 -0500</date><id>c47faf30cea562966e64eedc259a5074c6cf89b1</id><msg>Restore missing debug printouts in JAX core (#1390)</msg><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/err_info.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/sfc_varnce_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/model_flags.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_core_diagnostics.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/file_functions.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce_diagnostics.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/new_hybrid_pdf_main.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/sponge_layer_damping.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/interpolation.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_wp2_wp3_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/setup_clubb_pdf_params.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/adg1_adg2_3d_luhar_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/mono_flux_limiter.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/corr_varnce_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/fill_holes.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/mixing_length.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/precipitation_fraction.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/numerical_check.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/new_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/remapping_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/stats_netcdf.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_xp2_xpyp_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/pdf_params.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/pdf_closure_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/clip_explicit.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/grid_class.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/jax_stats.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_xm_wpxp_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/parameters_tunable.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/new_tsdadg_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/matrix_operations.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/matrix_solver_wrapper.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/pos_definite_module.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>14</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url></nextBuild><previousBuild><number>12</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/12/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12648217</buildingDurationMillis><executingTimeMillis>16118675</executingTimeMillis><executorUtilization>1.27</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>8460</waitingDurationMillis><waitingTimeMillis>8460</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>12</buildNumber><marked><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><branch><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><branch><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><branch><SHA1>09499c45d0ef25810f48bbd43c8f92afa1497caa</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#12</displayName><duration>12648217</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #12</fullDisplayName><id>12</id><keepLog>false</keepLog><number>12</number><queueId>10648</queueId><result>FAILURE</result><timestamp>1792139170962</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/12/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-column-refactor/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jenkins/SKILL.md</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>LLM_prompts/port_underlying_fortran_to_other_languages.md</affectedPath><affectedPath>LLM_prompts/README.md</affectedPath><affectedPath>.agents/skills/clubb-session-retrospective/references/guidance_maintenance.md</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>.agents/skills/clubb-script-cli/SKILL.md</affectedPath><affectedPath>LLM_prompts/SHORTCUTS.md</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>LLM_prompts/update_host_models_after_clubb_changes.md</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><affectedPath>clubb_jax/JAX_CONVERSION_PLAN.md</affectedPath><affectedPath>LLM_prompts/fortran_routine_formatting.md</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-python-api/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-dash/SKILL.md</affectedPath><affectedPath>LLM_prompts/script_cli_conventions.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>LLM_prompts/update_python_api_and_drivers.md</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>.agents/skills/clubb-session-retrospective/SKILL.md</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><affectedPath>LLM_prompts/change_messages.md</affectedPath><affectedPath>LLM_prompts/dash_app_workflow.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>LLM_prompts/numerical_regression_workflow.md</affectedPath><affectedPath>.agents/skills/clubb-fortran-format/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-host-compatibility/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-pytests/SKILL.md</affectedPath><affectedPath>LLM_prompts/session_retrospective.md</affectedPath><affectedPath>LLM_prompts/fortran_column_refactor.md</affectedPath><affectedPath>.agents/skills/clubb-change-messages/SKILL.md</affectedPath><affectedPath>LLM_prompts/jax_porting_workflow.md</affectedPath><commitId>09499c45d0ef25810f48bbd43c8f92afa1497caa</commitId><timestamp>1792123599000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Consolidate CLUBB workflows into skills (#1394)

* Consolidate CLUBB workflows into skills

Move the 13 workflows into repo skills and route to them from AGENTS.md,
removing the legacy shortcut index and prompt directory. Keep the existing
five skill identities and workflow instructions, including the scope rules
previously stored in the index. Update only paths and obsolete routing text.

Preservation checks passed for all workflow bodies, existing skill metadata,
scope rules and task selectors. All 13 skills validate, all 55 local links
resolve, and git diff --check passed. BFB is not applicable to this
documentation-only migration.

* Clarify skill selection and local guidance

Allow multiple relevant skills in the task instructions, name user-facing
documentation clearly, and explain that the ignored worklog is local to
each checkout and should be created when absent. Add verified private
host-repository links near the top of the compatibility skill so readers
can identify the models and their access requirements.

BFB is not applicable to these documentation-only clarifications. All 13
skill schemas, local guidance links, and git diff --check pass. Existing
host workflow instructions are preserved.
</comment><date>2026-10-15 23:06:39 -0500</date><id>09499c45d0ef25810f48bbd43c8f92afa1497caa</id><msg>Consolidate CLUBB workflows into skills (#1394)</msg><path><editType>add</editType><file>.agents/skills/clubb-python-api/SKILL.md</file></path><path><editType>delete</editType><file>LLM_prompts/update_python_api_and_drivers.md</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>delete</editType><file>LLM_prompts/change_messages.md</file></path><path><editType>edit</editType><file>clubb_jax/AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-jenkins/SKILL.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-column-refactor/SKILL.md</file></path><path><editType>edit</editType><file>utilities/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>delete</editType><file>LLM_prompts/session_retrospective.md</file></path><path><editType>delete</editType><file>LLM_prompts/fortran_routine_formatting.md</file></path><path><editType>delete</editType><file>LLM_prompts/SHORTCUTS.md</file></path><path><editType>edit</editType><file>clubb_jax/JAX_CONVERSION_PLAN.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-pytests/SKILL.md</file></path><path><editType>delete</editType><file>LLM_prompts/update_host_models_after_clubb_changes.md</file></path><path><editType>delete</editType><file>LLM_prompts/jenkins_workflow.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-dash/SKILL.md</file></path><path><editType>delete</editType><file>LLM_prompts/script_cli_conventions.md</file></path><path><editType>delete</editType><file>LLM_prompts/dash_app_workflow.md</file></path><path><editType>delete</editType><file>LLM_prompts/port_underlying_fortran_to_other_languages.md</file></path><path><editType>delete</editType><file>LLM_prompts/README.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-fortran-format/SKILL.md</file></path><path><editType>edit</editType><file>dash_app/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>edit</editType><file>tests/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>delete</editType><file>LLM_prompts/numerical_regression_workflow.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-script-cli/SKILL.md</file></path><path><editType>delete</editType><file>LLM_prompts/fortran_column_refactor.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-session-retrospective/references/guidance_maintenance.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-change-messages/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-host-compatibility/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-session-retrospective/SKILL.md</file></path><path><editType>edit</editType><file>tuner/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>delete</editType><file>LLM_prompts/jax_porting_workflow.md</file></path><path><editType>delete</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>13</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/13/</url></nextBuild><previousBuild><number>11</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/11/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>1</buildableTimeMillis><buildingDurationMillis>12846846</buildingDurationMillis><executingTimeMillis>17221144</executingTimeMillis><executorUtilization>1.34</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>6500</waitingDurationMillis><waitingTimeMillis>6501</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>11</buildNumber><marked><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><branch><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><branch><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><branch><SHA1>a8c952996409f8c94d6a28714171145ed7d2c2ae</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#11</displayName><duration>12846846</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #11</fullDisplayName><id>11</id><keepLog>false</keepLog><number>11</number><queueId>10519</queueId><result>FAILURE</result><timestamp>1791966369019</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/11/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>README</affectedPath><commitId>af934ad3986d77e381919822755fc51a0168849f</commitId><timestamp>1791907259000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add blank line to trigger Jenkins tests
</comment><date>2026-10-13 11:00:59 -0500</date><id>af934ad3986d77e381919822755fc51a0168849f</id><msg>Add blank line to trigger Jenkins tests</msg><path><editType>edit</editType><file>README</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/G_unit_tests.F90</affectedPath><affectedPath>src/G_unit_test_types/CMakeLists.txt</affectedPath><affectedPath>src/CLUBB_core/calc_roots.F90</affectedPath><affectedPath>tests/run_G_unit_tests.py</affectedPath><affectedPath>src/G_unit_test_types/cubic_solve_tests.F90</affectedPath><affectedPath>input_misc/G_unit_tests.in</affectedPath><commitId>a8c952996409f8c94d6a28714171145ed7d2c2ae</commitId><timestamp>1791911400000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Fixed bug in cubic equation solve function. Only relevant if pdf is L… (#1387)

* Fixed bug in cubic equation solve function. Only relevant if pdf is Luhar or iiPDF_type=4

Therefore technically BIT_CHANGING...
The bug existed because the old code used the principal cube root
which has an imaginary part for negative bases.
The fix is to simply calc: -|w|**(1/3) for negative real numbers.

* Replaced determinant with discriminant

Verified via a new Fortran unit test and also manually checked with wolfram alpha.
There is no way to actually run this code :/
would only work for iiPDF_types: iiPDF_3D_Luhar = 3 and iiPDF_3D_Luhar = 3
(and those are currently (Oct 2026) broken )
</comment><date>2026-10-13 12:10:00 -0500</date><id>a8c952996409f8c94d6a28714171145ed7d2c2ae</id><msg>Fixed bug in cubic equation solve function. Only relevant if pdf is L… (#1387)</msg><path><editType>edit</editType><file>src/CLUBB_core/calc_roots.F90</file></path><path><editType>edit</editType><file>src/G_unit_test_types/CMakeLists.txt</file></path><path><editType>edit</editType><file>tests/run_G_unit_tests.py</file></path><path><editType>add</editType><file>src/G_unit_test_types/cubic_solve_tests.F90</file></path><path><editType>edit</editType><file>input_misc/G_unit_tests.in</file></path><path><editType>edit</editType><file>src/G_unit_tests.F90</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>12</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/12/</url></nextBuild><previousBuild><number>10</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/10/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>8171</buildableTimeMillis><buildingDurationMillis>13341124</buildingDurationMillis><executingTimeMillis>17681496</executingTimeMillis><executorUtilization>1.33</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>9078</waitingDurationMillis><waitingTimeMillis>9078</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>10</buildNumber><marked><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><branch><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><branch><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><branch><SHA1>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#10</displayName><duration>13341124</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #10</fullDisplayName><id>10</id><keepLog>false</keepLog><number>10</number><queueId>10404</queueId><result>FAILURE</result><timestamp>1791879971556</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/10/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>LLM_prompts/SHORTCUTS.md</affectedPath><affectedPath>.agents/skills/clubb-change-messages/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>LLM_prompts/change_messages.md</affectedPath><commitId>fc9087d1a7a4a8f71c74f5763ece34f18328d200</commitId><timestamp>1791830025000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add CLUBB commit and PR writing guidance (#1391)

* Add CLUBB commit and PR writing guidance

Add a canonical workflow and historical examples for writing specific titles
and explaining purpose, motivation, results and testing. Scope BFB claims to
their comparisons and distinguish tolerance matches from bitwise equality.
A thin repo skill, shortcut and AGENTS link make the workflow discoverable.

This addresses generated messages that bury the reason for a change or
overstate what testing establishes. Six historical PR/commit drafting pairs
passed independent review. Skill format, 20 local links, canonical-text
consistency and git diff --check passed. BFB is not applicable to these
documentation-only changes.

* Keep only the final commit and PR writing workflow

Remove the worked historical examples and their references. The repository
should contain the final reusable guidance; the research and evaluation
artifacts stay outside it. The shortcut and repo skill still point to one
canonical workflow.

Skill-format validation, all 19 local guidance links and git diff --check
passed. BFB is not applicable to these documentation-only changes.
</comment><date>2026-10-12 13:33:45 -0500</date><id>fc9087d1a7a4a8f71c74f5763ece34f18328d200</id><msg>Add CLUBB commit and PR writing guidance (#1391)</msg><path><editType>edit</editType><file>LLM_prompts/SHORTCUTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-change-messages/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>LLM_prompts/change_messages.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_advance_core_subs.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp2_xpyp.py</affectedPath><affectedPath>clubb_jax/src/Benchmark_cases/cobra.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_wp2_wp3.py</affectedPath><affectedPath>clubb_python_api/clubb_python/prescribe_forcings.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</affectedPath><affectedPath>src/Benchmark_cases/time_dependent_input.F90</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/parameters_tunable.py</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/numerical_check.py</affectedPath><affectedPath>src/CLUBB_core/advance_windm_edsclrm_module.F90</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</affectedPath><affectedPath>clubb_python_driver/advance_clubb_core.py</affectedPath><affectedPath>clubb_jax/src/Benchmark_cases/time_dependent_input.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_expldiff_settings_rules.py</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/advance_windm_edsclrm_module_wrapper.F90</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_expldiff_edsclrm_forcing.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_coord_forcing.py</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/advance_windm_edsclrm.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_windm_edsclrm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_scalar_indices.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/sam_lscale.py</affectedPath><affectedPath>clubb_python_api/clubb_python/derived_types/nu_vert_res_dep.py</affectedPath><affectedPath>src/CLUBB_core/numerical_check.F90</affectedPath><affectedPath>clubb_python_driver/advance_clubb_to_end.py</affectedPath><affectedPath>src/CLUBB_core/advance_clubb_core_module.F90</affectedPath><affectedPath>clubb_python_driver/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cobra_sfclyr.py</affectedPath><affectedPath>clubb_jax/src/Benchmark_cases/prescribe_forcings.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_core.py</affectedPath><affectedPath>src/clubb_driver.F90</affectedPath><affectedPath>utilities/clubb_settings_validation.py</affectedPath><affectedPath>tests/run_clubb_settings_validation_test.py</affectedPath><affectedPath>src/Benchmark_cases/prescribe_forcings.F90</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/numerical_check.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_python_api/clubb_f2py.pyf</affectedPath><affectedPath>src/Benchmark_cases/cobra.F90</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/numerical_check_wrapper.F90</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/prescribe_forcings_module_wrapper.F90</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/err_info_codes.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</affectedPath><commitId>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</commitId><timestamp>1791843053000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Fix arm97+l do expldiff rtm thlm+set edsclrm f early (#1386)

* Do not force the thlm/rtm copies in the expldiff eddy-scalar solve

With l_do_expldiff_rtm_thlm, advance_windm_edsclrm copies thlm into
edsclrm(:,:,edsclr_dim-1) and rtm into edsclrm(:,:,edsclr_dim), advances all
eddy scalars, and copies those two slots back into thlm and rtm. The solve
added edsclrm_forcing of each slot to the copies, but thlm and rtm are
already advanced with thlm_forcing and rtm_forcing in advance_xm_wpxp.

In the standalone driver the slots are filled by iiedsclr_thl/iiedsclr_rt:
- arm_97 (iiedsclr_rt = 1, iiedsclr_thl = 2) put thlm_forcing [K/s] on rtm,
  so rtm &lt; 0 at ~5.5-8.8 km within the first steps (flag11 / expldiff).
- With the slots in expldiff order, rtm_forcing was applied twice and arm_97
  still hit rtm &lt; 0 near 12 km after 1379 of 5580 steps.

The copies now get no forcing. Mirrored in the JAX port.

Only changes runs with l_do_expldiff_rtm_thlm = .true. and non-zero
edsclrm_forcing in the last two eddy scalars, therefore BIT_CHANGING for
those. Default runs are bit-for-bit identical (arm_97, 1076 variables).

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;

* not hardwire the thlm and rtm edsclrm variables to be the last two; instead use sclr_idx%iiedsclr_thlm and sclr_idx%iiedsclr_rtm

Previously l_do_expldiff_rtm_thlm = true forced the last slot to be rtm and the one before that to be thlm.
If in the ..._model.in file iiedsclr_rt     = 1 ! Location in the edsclrm array to place total water
and iiedsclr_thl    = 2 ! Location in the edsclrm array to place a scalar like thetal
a switcheroo happens.
But if we use a not hardcoded indexing we need to check for out of bounds and distinctness of the 2 indices.

* Zero edsclrm_forcings early in apply_time_dependent_forcings_from_array

Check edsclrm_forcings != 0 instead of zeroing in advance_windm_edsclrm
BIT_CHANGING for l_do_expldiff_rtm_thlm = .true. for arm_97 and for cobra.

Python changes include: clubb_jax, clubb_python (+f2py) + tests

* Check l_do_expldiff_rtm_thlm eddy scalars in check_clubb_settings_api

1. Move the eddy-scalar checks into check_clubb_settings_api

check_clubb_settings_api now takes edsclr_dim and sclr_idx.
With l_do_expldiff_rtm_thlm = .true. it stops the run if
- edsclr_dim &lt;= 1, since the copies of thlm and rtm need two eddy
  scalars, or
- iiedsclr_thl and iiedsclr_rt are not distinct indices in
  1:edsclr_dim.
The index check moved to check_clubb_settings_api from advance_windm_edsclrm.
The check that edsclrm_forcing is zero for the thlm/rtm copies stays in
advance_windm_edsclrm, because prescribe_forcings sets edsclrm_forcing
every time step, after the settings check has run.

Callers in Fortran and mirrors (clubb-jax, python api) are updated

Behavior change: l_do_expldiff_rtm_thlm = .true. with fewer than two
eddy scalars used to skip explicit diffusion silently and now stops at
setup. This affects flag sets that turn the flag on for every case,
e.g. flag11 in input/flag_sets/run_bindiff_w_flags_config_core_flags.json.
Host models must pass the new arguments; CAM must also set
sclr_idx%iiedsclr_thl/iiedsclr_rt when clubb_l_do_expldiff_rtm_thlm is
on, since it leaves them at -1.

2. Fix the Python API

- calc_derived_params now requires nu_vert_res_dep and always pushes
  it to the F2PY storage (new helper NuVertResDep.zeros(ngrdcol)).
  Before, nu_vert_res_dep=None kept the previous call's stored arrays,
  and calc_derived_params only allocates them when unallocated. So a
  call with more columns than an earlier one in the same process wrote
  out of bounds. This crashed the in-process Python API pytest suite
  once the windm tests used two columns.
- clubb_f2py.pyf was missing l_do_expldiff_rtm_thlm for
  f2py_prescribe_forcings, so the Python driver failed on every case.

3. Gate the JAX rerun settings check at debug level 0

set_case_initial_conditions in the JAX driver now runs
check_clubb_settings at debug level &gt;= 0, matching clubb_driver.F90
since 9429ba2f1.

Also: put l_do_expldiff_rtm_thlm on its own line in the
time_dependent_input/prescribe_forcings argument lists.

Bit-for-bit: default-flag output is unchanged, and arm_97 with
l_do_expldiff_rtm_thlm = .true. matches the previous commit exactly.

Tested: debug + Python build and source checks; settings parity test;
Python API pytests (237 passed in one process); JAX pytests (791
passed); utilities settings-rule pytests; python-vs-fortran and
jax-vs-fortran bomex/atex; bomex and cobra with the flag stop at setup
in the Fortran, Python and JAX drivers.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;

* Do not apply surface fluxes to the expldiff thlm/rtm eddy-scalar copies

With l_do_expldiff_rtm_thlm, advance_windm_edsclrm copies thlm and rtm into
the iiedsclr_thl and iiedsclr_rt eddy scalars, solves all eddy scalars with
their surface flux wpedsclrp(:,gr%k_lb_zm,:) (from wpedsclrp_sfc) and copies
the two slots back. thlm and rtm already get wpthlp_sfc and wprtp_sfc in
advance_xm_wpxp, so a non-zero surface flux on the copies applies it twice.

Same approach as the edsclrm_forcing fix:

1. cobra_sfclyr (the only case that sets these fluxes) takes
   l_do_expldiff_rtm_thlm and sets wpedsclrp_sfc of the thlm/rtm copies to
   zero when it is on. set_sclr_sfc_rtm_thlm already zeroes all eddy-scalar
   surface fluxes.
2. advance_windm_edsclrm stops with a fatal error if the surface flux of
   either copy is non-zero, after the edsclrm_forcing check.

Mirrored in the JAX port (new reason code
ERR_WINDM_EDSCLRM_SFC_FLUX_EXPLDIFF_COPY; marks the columns fatal without
returning early, like the forcing check). No Python API wrapper changes.
CAM zeroes all eddy-scalar surface fluxes, so it is unaffected.

Default cobra output is unchanged. But technically BIT_CHANGING for cobra + l_use_expldiff_rtm_thlm

* Compute cobra's CO2 surface flux per column

cobra_sfclyr converted the CO2 surface flux with each column's surface
density inside the column loop, but stored it in the scalar CO2_flx2, and
the later loops gave every column that one value:

- CPU: every column got the last column's CO2 flux. Standalone columns
  currently share one density profile, so results were unaffected.
- OpenACC: the scalar was private to the device loop, and the later loops
  copied the never-set host value (implicit firstprivate). In the GPU
  build cobra's CO2 surface flux was 0 at every step.

CO2_flx2 is now a per-column array (enter/exit data create/delete like
other case routines). The JAX port already computes it per column.

Bit-for-bit: CPU cobra output is unchanged (1 and 2 columns, standard
stats incl. the CO2 scalars). GPU cobra output changes: before, the CO2
surface flux was 0 and CO2 differed from the CPU run by up to 10%;
now the CO2 scalars match the CPU run to ~1e-11 relative, like the other
fields.

Tested: gfortran debug build and source checks; standalone check of
cobra_sfclyr with two columns of different density (before: column 1 got
column 2's flux); nvhpc 24.3 OpenACC build and cobra on a Quadro P4000.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;

* removed the idiot proofing

* fully removed idiot proofing for l_do_expldiff_rtm_thlm+esclrdim

---------

Co-authored-by: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-12 17:10:53 -0500</date><id>4292a70f53a6b6c4eab864fe27b8fd9af5d86909</id><msg>Fix arm97+l do expldiff rtm thlm+set edsclrm f early (#1386)</msg><path><editType>edit</editType><file>clubb_python_driver/advance_clubb_core.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_expldiff_settings_rules.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/numerical_check.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/advance_clubb_core_module.F90</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp2_xpyp.py</file></path><path><editType>edit</editType><file>src/Benchmark_cases/cobra.F90</file></path><path><editType>edit</editType><file>clubb_jax/src/Benchmark_cases/cobra.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cobra_sfclyr.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/derived_types/nu_vert_res_dep.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/prescribe_forcings.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/numerical_check.F90</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</file></path><path><editType>edit</editType><file>src/clubb_driver.F90</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/prescribe_forcings_module_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_jax/src/Benchmark_cases/prescribe_forcings.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/parameters_tunable.py</file></path><path><editType>edit</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/sam_lscale.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_expldiff_edsclrm_forcing.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_wp2_wp3.py</file></path><path><editType>edit</editType><file>utilities/clubb_settings_validation.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Benchmark_cases/time_dependent_input.py</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_scalar_indices.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_windm_edsclrm_module.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_f2py.pyf</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_coord_forcing.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/advance_windm_edsclrm.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_windm_edsclrm.py</file></path><path><editType>edit</editType><file>tests/run_clubb_settings_validation_test.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/err_info_codes.py</file></path><path><editType>edit</editType><file>src/Benchmark_cases/time_dependent_input.F90</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/numerical_check_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_advance_core_subs.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_core.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</file></path><path><editType>edit</editType><file>src/Benchmark_cases/prescribe_forcings.F90</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/advance_windm_edsclrm_module_wrapper.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/advance_windm_edsclrm_module.F90</file></path><path><editType>edit</editType><file>clubb_python_driver/advance_clubb_to_end.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/numerical_check.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>11</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/11/</url></nextBuild><previousBuild><number>9</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/9/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12855720</buildingDurationMillis><executingTimeMillis>17022770</executingTimeMillis><executorUtilization>1.32</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>8386</waitingDurationMillis><waitingTimeMillis>8386</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>9</buildNumber><marked><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><branch><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><branch><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><branch><SHA1>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#9</displayName><duration>12855720</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #9</fullDisplayName><id>9</id><keepLog>false</keepLog><number>9</number><queueId>10303</queueId><result>FAILURE</result><timestamp>1791534370861</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/9/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/clubb_driver.F90</affectedPath><commitId>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</commitId><timestamp>1791488049000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Always do idiot-proofing of flags in check_clubb_settings_api

Changed debug level check from 1 to 0 for parameter sanity checks.
</comment><date>2026-10-08 14:34:09 -0500</date><id>9429ba2f18a79e7b17ef53bccc8f17af6649c3fd</id><msg>Always do idiot-proofing of flags in check_clubb_settings_api</msg><path><editType>edit</editType><file>src/clubb_driver.F90</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>10</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/10/</url></nextBuild><previousBuild><number>8</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/8/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>7</buildableTimeMillis><buildingDurationMillis>14082526</buildingDurationMillis><executingTimeMillis>17419578</executingTimeMillis><executorUtilization>1.24</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>7795</waitingDurationMillis><waitingTimeMillis>7797</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>8</buildNumber><marked><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><branch><SHA1>e92c2f24486a32610935ff4eede3512c67e313ea</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#8</displayName><duration>14082526</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #8</fullDisplayName><id>8</id><keepLog>false</keepLog><number>8</number><queueId>10223</queueId><result>FAILURE</result><timestamp>1791447970649</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/8/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tuner/loss_backend.py</affectedPath><affectedPath>tuner/job_runtime.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_tuner_top_overrides.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>jenkins_tests/clubb_tuner/Jenkinsfile</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_tune_replay_completion.py</affectedPath><affectedPath>dash_app/pytests/test_jax_device.py</affectedPath><affectedPath>dash_app/shared/activity.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_jax_launch_errors.py</affectedPath><affectedPath>tuner/request.py</affectedPath><affectedPath>dash_app/compile_tab/callbacks.py</affectedPath><affectedPath>dash_app/shared/actions.py</affectedPath><affectedPath>dash_app/shared/jax_device.py</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>dash_app/profile_tab/runtime.py</affectedPath><affectedPath>dash_app/tune_tab/runtime.py</affectedPath><affectedPath>tuner/tune_clubb.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_runtime_device_settings.py</affectedPath><affectedPath>tuner/tuning_worker.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>dash_app/run_tab/runtime.py</affectedPath><affectedPath>tuner/status.py</affectedPath><affectedPath>clubb_jax/backends/cuda.py</affectedPath><affectedPath>dash_app/services/models.py</affectedPath><affectedPath>dash_app/pytests/test_agent_services.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_jax_tuning_runtime.py</affectedPath><affectedPath>dash_app/tune_tab/callbacks_runs.py</affectedPath><affectedPath>tuner/tuning_scheduler.py</affectedPath><affectedPath>dash_app/DEVELOPMENT.md</affectedPath><affectedPath>dash_app/pytests/test_run_broker_simplification.py</affectedPath><affectedPath>dash_app/compile_tab/build_selector.py</affectedPath><affectedPath>tuner/README.md</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_jax_backend.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><commitId>9a1b8b23408d3a5abe78ebae7dd1390755fa4fec</commitId><timestamp>1791407526000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Use JAX in tuner (#1383)

This makes the JAX work through the new tuner, same sort of way the fortran does. Probably needs a little more testing but seems to be working properly now.

* Support reusable JAX driver state and runtime batches

* Add standalone JAX loss evaluation and consistency coverage

* Keep standalone loss CLI coverage separate from tuning

* Integrate JAX with managed tuner jobs and add bounded Jenkins coverage

* Remove trailing whitespace from extracted loss CLI tests

* Run JAX loss help checks in the JAX pytest suite

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Document loss test scenarios, native counterparts and JAX extensions

* Keep the native loss executable path intact in the test description

* Explain managed tuning test ownership and native backend contracts

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Refresh JAX tuner integration for merged loss frontends

Use the relocated standalone loss entry point and retain CLI checks only in their shared owner. Give each Jenkins tuning run a separate job directory so repeated builds can succeed.

* Record invalid direct tuner requests as terminal errors

Let the existing request and launcher error handlers report malformed JSON and non-string JAX options instead of crashing during bootstrap before writing job results.

* Preserve winning parameter columns in tuner reruns

Retain request physics overrides while excluding initialized values for tuned parameters. Window and full-case reruns now use the winning candidate values, including multiple columns and grouped override names.

* Use the selected JAX runtime throughout Dash tuning

Persist backend and per-job device settings through native and typed broker requests, saved revisions, continuation and result reruns. Reuse the launcher, shared device controls and rerun override resolver; supervise browser replay processes in the broker.

* Allow run IDs in broker replay completion metadata

Avoid a selector argument collision that killed the replay watcher before recording terminal state. Preserve run IDs and cancellation metadata while reporting completed jobs accurately.

* Keep JAX device setup inside the launcher and backends

Expose a standard-library selection interface and forward per-job device and preallocation settings through the SCM and tuner launch paths. Use the same backend configuration for discovery, provenance, and execution; remove GPU environment handling from Dash and the tuner.

Validate with Dash/shared suites, focused launcher checks, a CPU tuning and replay workflow, and synthetic two-GPU discovery.

* Forward device settings through the existing JAX selection option

Extend the launcher-owned -options grammar with device=UUID and prealloc_gpu_mem=true|false, while retaining xla_prealloc compatibility. Remove the transient device-specific options from SCM and tuner scripts so they forward one opaque -jax value.

Validate saved settings, discovery and replays through the same public interface; verify CPU tuning metrics remain identical.
</comment><date>2026-10-07 16:12:06 -0500</date><id>9a1b8b23408d3a5abe78ebae7dd1390755fa4fec</id><msg>Use JAX in tuner (#1383)</msg><path><editType>edit</editType><file>dash_app/pytests/test_run_broker_simplification.py</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_runtime_device_settings.py</file></path><path><editType>edit</editType><file>clubb_jax/backends/cuda.py</file></path><path><editType>edit</editType><file>tuner/status.py</file></path><path><editType>add</editType><file>tuner/loss_backend.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_jax_device.py</file></path><path><editType>edit</editType><file>tuner/job_runtime.py</file></path><path><editType>edit</editType><file>dash_app/shared/actions.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_jax_tuning_runtime.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>edit</editType><file>tuner/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>dash_app/pytests/test_agent_services.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>delete</editType><file>dash_app/shared/jax_device.py</file></path><path><editType>edit</editType><file>dash_app/tune_tab/runtime.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_tuner/Jenkinsfile</file></path><path><editType>edit</editType><file>tuner/tuning_worker.py</file></path><path><editType>edit</editType><file>dash_app/services/models.py</file></path><path><editType>edit</editType><file>dash_app/shared/activity.py</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_jax_launch_errors.py</file></path><path><editType>edit</editType><file>dash_app/compile_tab/callbacks.py</file></path><path><editType>edit</editType><file>dash_app/compile_tab/build_selector.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>tuner/tuning_scheduler.py</file></path><path><editType>edit</editType><file>tuner/request.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>edit</editType><file>dash_app/run_tab/runtime.py</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_jax_backend.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_tune_replay_completion.py</file></path><path><editType>edit</editType><file>dash_app/profile_tab/runtime.py</file></path><path><editType>edit</editType><file>dash_app/tune_tab/callbacks_runs.py</file></path><path><editType>edit</editType><file>tuner/tune_clubb.py</file></path><path><editType>edit</editType><file>dash_app/DEVELOPMENT.md</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_tuner_top_overrides.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>run_scripts/run_tuner.py</affectedPath><affectedPath>dash_app/run_tab/tab.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>dash_app/persistence.py</affectedPath><affectedPath>dash_app/run_tab/callbacks_selection.py</affectedPath><affectedPath>dash_app/run_tab/layout.py</affectedPath><affectedPath>utilities/case_json_to_namelist.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/test_case_editor.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>input/case_setups/case_definitions.json</affectedPath><affectedPath>dash_app/assets/34_case_editor.js</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_case_json_to_namelist.py</affectedPath><affectedPath>dash_app/shared/actions.py</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>dash_app/run_tab/discovery.py</affectedPath><affectedPath>dash_app/assets/11_tab_run_theme.css</affectedPath><affectedPath>dash_app/assets/12_case_editor.css</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>tuner/case_defaults.py</affectedPath><affectedPath>dash_app/profile_tab/runtime.py</affectedPath><affectedPath>input/case_setups/README</affectedPath><affectedPath>dash_app/run_tab/cases.py</affectedPath><commitId>5f8b57f69c01c59fc3c4457178ae85d57894c1d9</commitId><timestamp>1791415324000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JSON case definitions and Dash case editor (#1389)

This is mainly a dash update right now, but it adds json versions of our model files. Basically just 2 new files for that - each json stores default values then one entry for each case with overrides it is not default yet and the current system of defining cases is unchanged.


* Add JSON case definitions and Dash case editor

* Simplify named case lookup and remove queued snapshots

* Remove model validation from JSON case conversion
</comment><date>2026-10-07 18:22:04 -0500</date><id>5f8b57f69c01c59fc3c4457178ae85d57894c1d9</id><msg>Add JSON case definitions and Dash case editor (#1389)</msg><path><editType>edit</editType><file>tuner/case_defaults.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/callbacks_selection.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_case_json_to_namelist.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>dash_app/profile_tab/runtime.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>edit</editType><file>dash_app/run_tab/layout.py</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>input/case_setups/case_definitions.json</file></path><path><editType>edit</editType><file>dash_app/shared/actions.py</file></path><path><editType>add</editType><file>utilities/case_json_to_namelist.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/tab.py</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>add</editType><file>dash_app/assets/34_case_editor.js</file></path><path><editType>edit</editType><file>input/case_setups/README</file></path><path><editType>edit</editType><file>dash_app/assets/11_tab_run_theme.css</file></path><path><editType>add</editType><file>dash_app/run_tab/cases.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/discovery.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner.py</file></path><path><editType>edit</editType><file>dash_app/persistence.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/test_case_editor.py</file></path><path><editType>add</editType><file>dash_app/assets/12_case_editor.css</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/README.md</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_stats_output_consistency.py</affectedPath><affectedPath>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><commitId>166ec211468128c37d8bb4b917ffac337bf80247</commitId><timestamp>1791416548000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Run JAX statistics consistency with an explicit rounding tolerance (#1385)

This adds a jax jenkins stage for the statistics consistency test. This is the test that runs clubb with different batches sizes and averaging methods, e.g
- start by: run once with 60s output intervals all the way through
- test: running with 300s output intervals should give the same stats as manually averaging 5 steps of 60s output
- test: outputing only a "window" of stats data (like from timesteps 100-200 instead of whole run), should produce a window idendical to the 60s full output run
- test: running 16 columns at once should produce the same as running 16 columns in batches of 4 at a time

In fortran these comparisons should be BFB (other than the manually averaging one, which is only close), but in jax, changing things like the batch size can cause optimizations to happen differently, which breaks BFBness and seems to cause differences larger than expected by fortran. For example, the threshold for the manual averaging test in fortran is 1e-12, but for the jax we need 1e-9 even for the batch test. I added a tolerance, `jax_tolerance`, that I left named after jax for now since that is the only current reason that flag exists. 

This difficulty with jax wasn't unexpected - we also have to compile the fortran with `-O0` to get this test working, also to disable optimizations. There just seems to be less control over how jax does that, so I went with a "relax the tolerance for this specific instance" approach.

* Support reusable JAX driver state and runtime batches

* Expose JAX in the strict statistics consistency workflow

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Reference native driver and statistics owners in the JAX test workflow

* Keep full Fortran statistics source paths in the test description

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Keep statistics windows within the capped native case duration

* Allow explicit JAX statistics tolerance for JIT rounding differences
</comment><date>2026-10-07 18:42:28 -0500</date><id>166ec211468128c37d8bb4b917ffac337bf80247</id><msg>Run JAX statistics consistency with an explicit rounding tolerance (#1385)</msg><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/run_timestep_tests.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>jenkins_tests/clubb_timestep/Jenkinsfile</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compilation_cache.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_timestep_sweep.py</affectedPath><commitId>341cac040a0d352fd5a4da6a5938a86d7d06e332</commitId><timestamp>1791417082000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Run timestep sweep tests with JAX (#1384)

Adding a jax run to the timestep test (now renamed timestep sweep because it's more descriptive).

This was really slow on JAX at first - one trick was to add a compilation cache, so that different runs that only use different timesteps didn't need to be recompiled. From my undestanding this is super easy with jax, basically just set `JAX_COMPILATION_CACHE_DIR` to a directory the process can save compiled parts is all it takes, then the compiled parts can live there even after the processes dies, and future ones can reuse it.

* Run existing timestep sweeps with the JAX runner

* Explain the shared native and JAX timestep sweep behavior

* Keep timestep checks aligned with current launcher and CLI conventions

Select CPU explicitly in the bounded JAX stage and resolve optional output roots through the shared owner. Support standard single-dash help, reject ambiguous option abbreviations, and cover opaque runtime forwarding while preserving native defaults and exploratory status.

Validate with 373 shared checks and four eight-step BOMEX/ATEX runs per backend at 60 and 600 seconds.

* Rename the timestep sweep and run shared JAX cases at native defaults

Select the 18 cases shared by the native sweep and JAX/Fortran comparison list. Remove Jenkins timestep and iteration overrides, update stage names and documentation, and preserve the sweep's stability-reporting behavior.

Validate the selection and rename with 374 shared checks before live branch testing.

* Reuse JAX compilations and parallelize case timestep sweeps

Keep a backend-specific persistent cache outside the checkout and preserve explicit cache overrides. Run four isolated case sweeps, prioritize measured expensive cases, and print each completed report as a block while preserving timestep order and first-failure semantics.

Validate cache reuse across fresh processes and cache clearing, scheduling/overlap/interruption contracts, 379 shared checks, and full 90-run cold-cache JAX/native matrices.
</comment><date>2026-10-07 18:51:22 -0500</date><id>341cac040a0d352fd5a4da6a5938a86d7d06e332</id><msg>Run timestep sweep tests with JAX (#1384)</msg><path><editType>edit</editType><file>jenkins_tests/clubb_timestep/Jenkinsfile</file></path><path><editType>add</editType><file>tests/run_timestep_sweep.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compilation_cache.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_timestep_sweep.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>delete</editType><file>tests/run_timestep_tests.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>jenkins_tests/clubb_plots/Jenkinsfile</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><commitId>e92c2f24486a32610935ff4eede3512c67e313ea</commitId><timestamp>1791427833000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Add JAX comparison plots
</comment><date>2026-10-07 21:50:33 -0500</date><id>e92c2f24486a32610935ff4eede3512c67e313ea</id><msg>Add JAX comparison plots</msg><path><editType>edit</editType><file>jenkins_tests/clubb_plots/Jenkinsfile</file></path><path><editType>edit</editType><file>LLM_prompts/jenkins_workflow.md</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>9</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/9/</url></nextBuild><previousBuild><number>7</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/7/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12576504</buildingDurationMillis><executingTimeMillis>16352774</executingTimeMillis><executorUtilization>1.3</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>8020</waitingDurationMillis><waitingTimeMillis>8020</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>7</buildNumber><marked><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><branch><SHA1>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#7</displayName><duration>12576504</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #7</fullDisplayName><id>7</id><keepLog>false</keepLog><number>7</number><queueId>10116</queueId><result>FAILURE</result><timestamp>1791361570940</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/7/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/parameters_tunable.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>clubb_jax/src/Input_fields/namelist.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>tests/run_jax_comparison_mutation_test.py</affectedPath><affectedPath>clubb_jax/tests/run_driver_extensions_test.py</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><commitId>56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab</commitId><timestamp>1791322777000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Support reusable JAX driver initialization and runtime batches (#1380)

This 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.


* Support reusable JAX driver state and runtime batches

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading
</comment><date>2026-10-06 16:39:37 -0500</date><id>56e1502fbdd1be881a4c3ae1a2a9570dfc8615ab</id><msg>Support reusable JAX driver initialization and runtime batches (#1380)</msg><path><editType>edit</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_window.py</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_driver_extensions_test.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_lifecycle.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_test_frontend.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/Input_fields/namelist.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>tests/run_jax_comparison_mutation_test.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>LLM_prompts/jenkins_workflow.md</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/parameters_tunable.py</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</affectedPath><affectedPath>clubb_jax/src/Input_fields/input_fields.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py</affectedPath><affectedPath>jenkins_tests/clubb_restart/Jenkinsfile</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>clubb_jax/RESTART_PORT_NOTES.md</affectedPath><commitId>7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824</commitId><timestamp>1791325897000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Port JAX restart initialization and test normal and SILHS continuation (#1381)

This makes jax restarts work. Also adding jax restart test stages in the existing jenkins restart test.

* Port JAX restart initialization and exercise native and SILHS restarts

* Describe restart validation and dependencies for the focused PR

* Describe JAX restart scenarios and their native source equivalents

* Keep JAX restart validation in the shared harness and exercise distinct columns
</comment><date>2026-10-06 17:31:37 -0500</date><id>7666fd0f4e1bf2c8c46194dcbaa31fedf8f3c824</id><msg>Port JAX restart initialization and test normal and SILHS continuation (#1381)</msg><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>add</editType><file>clubb_jax/src/Input_fields/input_fields.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_restart.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_restart_test.py</file></path><path><editType>add</editType><file>clubb_jax/RESTART_PORT_NOTES.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_restart_input_validation.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_restart/Jenkinsfile</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_python_api/tests/clubb_loss_driver_test.py</affectedPath><affectedPath>clubb_python_api/README.md</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>tuner/clubb_loss_driver.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py</affectedPath><affectedPath>clubb_jax/tests/test_loss_driver.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone_loss.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py</affectedPath><affectedPath>clubb_python_api/clubb_python/clubb_standalone_loss.py</affectedPath><affectedPath>clubb_python_api/CMakeLists.txt</affectedPath><affectedPath>tuner/clubb_loss_driver_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</affectedPath><affectedPath>utilities/loss_metrics.py</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>clubb_jax/TUNER_PORT.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_loss_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py</affectedPath><affectedPath>tuner/README.md</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>tuner/case_defaults.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</commitId><timestamp>1791344832000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Port standalone JAX loss evaluation and consistency checks (#1382)

This 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.


* Support reusable JAX driver state and runtime batches

* Add standalone JAX loss evaluation and consistency coverage

* Keep standalone loss CLI coverage separate from tuning

* Remove trailing whitespace from extracted loss CLI tests

* Run JAX loss help checks in the JAX pytest suite

* Keep JAX lifecycle coverage with native driver tests and document its origins

* Document loss test scenarios, native counterparts and JAX extensions

* Keep the native loss executable path intact in the test description

* Mirror the native driver lifecycle test and compare complete JAX statistics

* Run JAX driver extensions as an independent step in the lifecycle stage

* Update the C8 comparison mutation for indexed parameter loading

* Reject unsupported loss restarts before opening model resources

* Clean up merged loss launcher state and document early restart rejection

* Move loss frontends and tests out of the tuner package

Call 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.
</comment><date>2026-10-06 22:47:12 -0500</date><id>04ff5df702bc2ad372325353ee19dde5a2fc3fc1</id><msg>Port standalone JAX loss evaluation and consistency checks (#1382)</msg><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/test_case_window_overrides.py</file></path><path><editType>edit</editType><file>clubb_python_api/README.md</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_run_loss_output_consistency.py</file></path><path><editType>delete</editType><file>tuner/clubb_loss_driver_test.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_standalone_loss.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_loss_frontend.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>tuner/case_defaults.py</file></path><path><editType>add</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path><path><editType>add</editType><file>clubb_python_api/clubb_python/clubb_standalone_loss.py</file></path><path><editType>delete</editType><file>tuner/clubb_loss_driver.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_loss_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>clubb_python_api/CMakeLists.txt</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_stats_output_consistency/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>utilities/loss_metrics.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_loss_driver.py</file></path><path><editType>add</editType><file>clubb_python_api/tests/clubb_loss_driver_test.py</file></path><path><editType>add</editType><file>clubb_jax/TUNER_PORT.md</file></path><path><editType>edit</editType><file>tuner/README.md</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_loss_driver.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>8</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/8/</url></nextBuild><previousBuild><number>6</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/6/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>6</buildNumber><marked><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#6</displayName><duration>7573430</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #6</fullDisplayName><id>6</id><keepLog>false</keepLog><number>6</number><queueId>10073</queueId><result>FAILURE</result><timestamp>1791306239854</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/6/</url><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>7</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/7/</url></nextBuild><previousBuild><number>5</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/5/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#5</displayName><duration>16373</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #5</fullDisplayName><id>5</id><keepLog>false</keepLog><number>5</number><queueId>9994</queueId><result>FAILURE</result><timestamp>1791302496739</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/5/</url><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>6</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/6/</url></nextBuild><previousBuild><number>4</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/4/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>4</buildNumber><marked><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><branch><SHA1>350a98e42b5a193c8471cc67c288bce95e7f7ac0</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#4</displayName><duration>13699626</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #4</fullDisplayName><id>4</id><keepLog>false</keepLog><number>4</number><queueId>9900</queueId><result>FAILURE</result><timestamp>1791275172453</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/4/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>utilities/convert_acc_to_omp.bash</affectedPath><commitId>e83e7d62179dd6c710b77216aea55df37600f820</commitId><timestamp>1791236009000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Fix OpenMP GPU host_data conversion
</comment><date>2026-10-05 16:33:29 -0500</date><id>e83e7d62179dd6c710b77216aea55df37600f820</id><msg>Fix OpenMP GPU host_data conversion</msg><path><editType>edit</editType><file>utilities/convert_acc_to_omp.bash</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/backends/cpu.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_backends.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_compile_compiler_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rocm_runtime.py</affectedPath><affectedPath>BUILD.md</affectedPath><affectedPath>clubb_jax/backends/metal.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_portable_cholesky.py</affectedPath><affectedPath>clubb_jax/backends/__init__.py</affectedPath><affectedPath>clubb_jax/backends/cuda.py</affectedPath><affectedPath>clubb_jax/backends/rocm.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/matrix_operations.py</affectedPath><affectedPath>clubb_jax/requirements-rocm.txt</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/backends/common.py</affectedPath><affectedPath>compile.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</affectedPath><affectedPath>clubb_jax/runtime_info.py</affectedPath><commitId>da614f85c180af844a77e80ddd4b61a94ce716b9</commitId><timestamp>1791238822000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>AMD/ROCM Support for Jax (#1376)

This does 2 things:

adds support for running on ROCM systems, this is the AMD GPU equivalent of cuda
organize specific-device backend setup files, e.g GPU on nvidia needs cuda jax libraries, Apple needs metal, AMD needs rocm
The only complication was the jax cholesky not working on AMD GPUs. Seems like a bug that's out of our control, so I left en environment flag to switch between the jax linalg call and a custom "portable" one. The portable one still passes the jax_vs_fortran comparison tests.


Commits
---
* Support native AMD ROCm JAX on CachyOS

* Keep ROCm crash fixes and remove Morrison rounding workarounds

* Separate JAX launcher and inspection backend policies
</comment><date>2026-10-05 17:20:22 -0500</date><id>da614f85c180af844a77e80ddd4b61a94ce716b9</id><msg>AMD/ROCM Support for Jax (#1376)</msg><path><editType>add</editType><file>clubb_jax/backends/cuda.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/matrix_operations.py</file></path><path><editType>edit</editType><file>compile.py</file></path><path><editType>add</editType><file>clubb_jax/backends/metal.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_backends.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_portable_cholesky.py</file></path><path><editType>edit</editType><file>clubb_jax/runtime_info.py</file></path><path><editType>add</editType><file>clubb_jax/backends/cpu.py</file></path><path><editType>add</editType><file>clubb_jax/backends/rocm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rocm_runtime.py</file></path><path><editType>edit</editType><file>BUILD.md</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_compile_compiler_selection.py</file></path><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>add</editType><file>clubb_jax/requirements-rocm.txt</file></path><path><editType>add</editType><file>clubb_jax/backends/common.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/backends/__init__.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</affectedPath><affectedPath>clubb_jax/tests/run_morrison_interface_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</affectedPath><affectedPath>clubb_jax/tests/run_pdf_monte_carlo_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</affectedPath><affectedPath>jenkins_tests/clubb_jax/Jenkinsfile</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</affectedPath><affectedPath>tests/run_pytests.sh</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</affectedPath><affectedPath>clubb_jax/tests/run_standalone_no_bindings_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</affectedPath><commitId>350a98e42b5a193c8471cc67c288bce95e7f7ac0</commitId><timestamp>1791244216000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Prune inherited JAX pytests and remove binding dependencies (#1379)

This just prunes lots of outdated and unneccesary pytests. These are all LLM generated and I just never went through them before. Probably still needs cleanup.
</comment><date>2026-10-05 18:50:16 -0500</date><id>350a98e42b5a193c8471cc67c288bce95e7f7ac0</id><msg>Prune inherited JAX pytests and remove binding dependencies (#1379)</msg><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_standalone_no_bindings_test.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_morrison_interface_test.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</file></path><path><editType>edit</editType><file>tests/run_pytests.sh</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</file></path><path><editType>edit</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_jax/Jenkinsfile</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_pdf_monte_carlo_test.py</file></path><path><editType>delete</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>5</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/5/</url></nextBuild><previousBuild><number>3</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/3/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>3</buildNumber><marked><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><branch><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><branch><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><branch><SHA1>feb2438c46510eaadecd3e0c3bdede3df2939ac1</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#3</displayName><duration>11798382</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #3</fullDisplayName><id>3</id><keepLog>false</keepLog><number>3</number><queueId>9796</queueId><result>FAILURE</result><timestamp>1791188772409</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/3/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/AGENTS.md</affectedPath><affectedPath>LLM_prompts/script_cli_conventions.md</affectedPath><affectedPath>LLM_prompts/update_python_api_and_drivers.md</affectedPath><affectedPath>LLM_prompts/jenkins_workflow.md</affectedPath><affectedPath>LLM_prompts/dash_app_workflow.md</affectedPath><affectedPath>LLM_prompts/port_underlying_fortran_to_other_languages.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>LLM_prompts/numerical_regression_workflow.md</affectedPath><affectedPath>LLM_prompts/README.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-script-cli/SKILL.md</affectedPath><affectedPath>LLM_prompts/fortran_column_refactor.md</affectedPath><affectedPath>LLM_prompts/SHORTCUTS.md</affectedPath><affectedPath>LLM_prompts/update_host_models_after_clubb_changes.md</affectedPath><affectedPath>LLM_prompts/jax_porting_workflow.md</affectedPath><commitId>d1c3f80378f8621f388662593c7e5a47f1847b35</commitId><timestamp>1791138711000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Improve agent workflow discovery and completion evidence (#1375)

This is just a rework of out LLM shortcuts. I had chatgpt go through a bunch of sessions and investigate my inefficiencies in my workflow (like how often I have to ask for corrections for things that were already instructions in these shortcuts), and had it rework our shortcuts.

The things done seem to make sense - they're a little shorter and more concise, broken up a bit better, include some extra things. Hard to say if any of it's effective though - hopefully I'll notice an improvement with things
</comment><date>2026-10-04 13:31:51 -0500</date><id>d1c3f80378f8621f388662593c7e5a47f1847b35</id><msg>Improve agent workflow discovery and completion evidence (#1375)</msg><path><editType>add</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>edit</editType><file>LLM_prompts/port_underlying_fortran_to_other_languages.md</file></path><path><editType>add</editType><file>LLM_prompts/script_cli_conventions.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>LLM_prompts/jenkins_workflow.md</file></path><path><editType>edit</editType><file>LLM_prompts/update_python_api_and_drivers.md</file></path><path><editType>add</editType><file>LLM_prompts/fortran_column_refactor.md</file></path><path><editType>add</editType><file>LLM_prompts/jax_porting_workflow.md</file></path><path><editType>add</editType><file>LLM_prompts/numerical_regression_workflow.md</file></path><path><editType>add</editType><file>LLM_prompts/README.md</file></path><path><editType>add</editType><file>clubb_jax/AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-script-cli/SKILL.md</file></path><path><editType>edit</editType><file>LLM_prompts/dash_app_workflow.md</file></path><path><editType>edit</editType><file>LLM_prompts/SHORTCUTS.md</file></path><path><editType>edit</editType><file>LLM_prompts/update_host_models_after_clubb_changes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/CLUBB_core/precipitation_fraction.py</affectedPath><affectedPath>clubb_jax/src/Microphys/cloud_sed_module.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_fortran_oracle.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_port_structure.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_sampling.py</affectedPath><affectedPath>clubb_jax/src/Microphys/ice_dfsn_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/KK_microphys_module.py</affectedPath><affectedPath>clubb_jax/src/SILHS/latin_hypercube_arrays.py</affectedPath><affectedPath>clubb_jax/src/SILHS/est_kessler_microphys_module.py</affectedPath><affectedPath>clubb_jax/src/SILHS/silhs_api_module.py</affectedPath><affectedPath>clubb_jax/src/SILHS/lh_microphys_var_covar_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/estimate_scm_microphys_module.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_driver.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_diagnostics.py</affectedPath><affectedPath>clubb_jax/JAX_CONVERSION_PLAN.md</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/fill_holes.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_error_paths.py</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/Input_fields/corr_varnce_input_reader.py</affectedPath><affectedPath>src/SILHS/latin_hypercube_driver_module.F90</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_integration.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_jax/src/SILHS/__init__.py</affectedPath><affectedPath>clubb_jax/src/SILHS/parameters_silhs.py</affectedPath><affectedPath>clubb_jax/src/Microphys/advance_microphys_module.py</affectedPath><affectedPath>tests/pytests/test_jax_compare_forwarding.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/setup_clubb_pdf_params.py</affectedPath><affectedPath>clubb_jax/src/Microphys/gfdl_activation.py</affectedPath><affectedPath>clubb_jax/src/SILHS/latin_hypercube_driver_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_driver.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/jax_stats.py</affectedPath><affectedPath>clubb_jax/src/Microphys/lh_microphys_driver_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/silhs_category_variance_module.py</affectedPath><affectedPath>LLM_prompts/SHORTCUTS.md</affectedPath><affectedPath>LLM_prompts/update_host_models_after_clubb_changes.md</affectedPath><affectedPath>clubb_jax/tests/test_silhs_port_structure.py</affectedPath><affectedPath>src/SILHS/parameters_silhs.F90</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_host_errors.py</affectedPath><affectedPath>clubb_jax/src/Microphys/parameters_microphys.py</affectedPath><affectedPath>clubb_jax/src/SILHS/silhs_importance_sample_module.py</affectedPath><affectedPath>clubb_jax/src/SILHS/math_utilities.py</affectedPath><affectedPath>src/Microphys/microphys_init_cleanup.F90</affectedPath><affectedPath>clubb_jax/src/SILHS/generate_uniform_sample_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/pdf_hydromet_microphys_wrapper.py</affectedPath><affectedPath>clubb_jax/src/Microphys/morrison_microphys_module.py</affectedPath><affectedPath>src/SILHS/generate_uniform_sample_module.F90</affectedPath><affectedPath>clubb_jax/src/SILHS/transform_to_pdf_module.py</affectedPath><affectedPath>clubb_jax/SILHS_PORT_NOTES.md</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_init_cleanup.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/stats_clubb_utilities.py</affectedPath><affectedPath>clubb_jax/src/Microphys/mixed_moment_PDF_integrals.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/Microphys/coamps_microphys_driver_module.py</affectedPath><commitId>f51ab963e7cde71123d3afd8f77d077a35cf211f</commitId><timestamp>1791158488000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Jax silhs (#1372)

Adding silhs to jax.

To avoid randomness issues I added a silhs flag, l_lh_deterministic_test, that causes samples and random numbers to be generated in a deterministic order that is pretty basic but seems like a fine enough sampling method for a test that only matters for comparing jax to fortran matching. This required changing the fortran to have this deterministic test sample generation.

I added 3 new silhs tests:

rico_silhs with a 60s timestep matches up to 360 timestpes (6 hours)
lba_kk_silhs (lba with kk microphys instead of defauly morrison) passes up to 270ish steps, I set test to 240 steps
lba_silhs (with morrison) passes &lt;80, from past exploration this seems mainly due to morrison being in single precision

* Port SILHS sampling and microphysics coupling to JAX

Add native JAX Latin-hypercube sampling with explicit persistent permutation
state and case-owned initialization. Couple sampled states to KK and Morrison
microphysics in interactive and diagnostic modes, with weighted statistics,
substep averaging, and fatal-path/configuration guards.

Preserve Fortran routine structure, argument grouping, and source comments
throughout SILHS and the microphysics interface layer. Leave Fortran, MT95,
and the KK/Morrison numerical cores unchanged.

Validation: 103 focused sampling/interface/error-path checks and eight real
SILHS driver checks pass. Earlier interface/support validation and the
20-pair disabled-SILHS JAX/Fortran comparison also pass. Enabled SILHS random
stream parity is deferred to a future common-random-input comparison.

* Add deterministic SILHS comparisons and initialize JAX output grids

Add a default-off l_lh_deterministic_test flag to Fortran and JAX. Use
ordered strata and a shared four-value, binary-exact draw cycle in the
high-level LHS and overlap-pool routines, preserving sequence reuse and
leaving the native random generators unchanged. Reject independent
importance sampling and random starts in this comparison mode.

Add interactive RICO, LBA KK and native LBA Morrison configurations to the
JAX/Fortran comparison suite without relaxing the existing tolerances.
Initialize SILHS host statistics from JAX case setup so reduced statistics
files also contain Fortran's lh_zt and lh_sample_number coordinates.

Validation: Fortran build and source checks pass; 581 raw sampling values
match exactly; 59 sampler/contract/forwarding checks and 46 output/support
checks pass. RICO matches through 360 steps at 60s with standard statistics
and with reduced statistics at debug 0.

Document the remaining comparison limits: LBA KK's repeating-cycle Nrp2
difference starts at saved prefix 274, while its configured cap remains
275. Native Morrison's selected scope was verified with midpoint inputs;
the repeating-cycle comparison was not rerun after the requested stop.

* Match Fortran SILHS sampling precision and overlap

Preserve default-real rounding in inverse-normal coefficients before
promotion to the sample dtype. Apply vertical overlap to starting-level
straight Monte Carlo samples and retain source sampling failure status.

Add a live Fortran inverse-normal oracle and regressions for overlap and
the source sample-count check. Keep comparison limits and tolerances.

* Restore SILHS diagnostics and microphysics host error guards

Carry weight-limiter and Kessler diagnostic failures through compiled
returns and ErrInfo. Preserve Fortran debug guards at the host boundaries
so negative-debug tracing can retain per-column failure status.

Write ordered microphysics/SILHS settings and approximate correlations
from initialization into the standalone setup file. Keep report lifetime
and output-name resolution outside the timestep driver.

Add focused failure/report regressions and update the port notes with
repeating-input comparisons and the native Morrison compiler sensitivity.

* Document deterministic SILHS comparison patterns

Explain the ordered permutation, repeating within-stratum offsets and overlap
pool at every Fortran deterministic randomness override. Mirror the explanation
in JAX, including index phases, sequence reuse and independence from RNG state.

Executable statements are unchanged in both implementations; source/AST checks
confirm these changes only add comments.

* Use definition decorators for microphysics JIT boundaries

Move the existing PDF preparation, scheme tendency and hydrometeor transport
JIT boundaries onto their routine definitions with @partial(jax.jit, ...).
Keep the static arguments unchanged and call the source-named routines directly
from the standalone driver.

Update host injection and source-order checks for the canonical routine names.
Lightweight error/feedback fixtures still check eager and compiled routine
bodies; real standalone runs exercise the decorated entry points.

Validation: 140 focused tests; 28 passed, 2435 warnings in 453.39s (0:07:33); unchanged RICO360/LBAKK275
strict comparisons; supported whole-driver and reverse-mode tracing.

* Simplify deterministic SILHS sampling comments

Describe the repeatable-testing branches directly, with their base values and
index offsets. Show the first twelve pool entries for four columns, grouped by
sample, and use the same concise descriptions in the Fortran and JAX mirrors.

Only comments and argument documentation change; executable code is unchanged.

* Exclude E3SM from host compatibility updates

Keep the exclusion visible in shortcut discovery and the host workflow.
Treat sys_admin mappings as synchronization metadata, not the active host list.

* Shortening tests timesteps a bit and adding a space for niceness
</comment><date>2026-10-04 19:01:28 -0500</date><id>f51ab963e7cde71123d3afd8f77d077a35cf211f</id><msg>Jax silhs (#1372)</msg><path><editType>edit</editType><file>clubb_jax/tests/test_microphysics_error_paths.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/precipitation_fraction.py</file></path><path><editType>edit</editType><file>src/SILHS/latin_hypercube_driver_module.F90</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/silhs_importance_sample_module.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/latin_hypercube_arrays.py</file></path><path><editType>edit</editType><file>src/Microphys/microphys_init_cleanup.F90</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/advance_microphys_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/gfdl_activation.py</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_microphysics_integration.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/parameters_microphys.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_fortran_oracle.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/jax_stats.py</file></path><path><editType>edit</editType><file>src/SILHS/parameters_silhs.F90</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/est_kessler_microphys_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/KK_microphys_module.py</file></path><path><editType>edit</editType><file>LLM_prompts/update_host_models_after_clubb_changes.md</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/lh_microphys_var_covar_module.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/transform_to_pdf_module.py</file></path><path><editType>add</editType><file>clubb_jax/SILHS_PORT_NOTES.md</file></path><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/ice_dfsn_module.py</file></path><path><editType>edit</editType><file>tests/pytests/test_jax_compare_forwarding.py</file></path><path><editType>edit</editType><file>src/SILHS/generate_uniform_sample_module.F90</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_sampling.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/parameters_silhs.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/silhs_api_module.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/latin_hypercube_driver_module.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>LLM_prompts/SHORTCUTS.md</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_microphysics_port_structure.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_port_structure.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_driver.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/mixed_moment_PDF_integrals.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/estimate_scm_microphys_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/pdf_hydromet_microphys_wrapper.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/__init__.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/morrison_microphys_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_init_cleanup.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_silhs_diagnostics.py</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>edit</editType><file>clubb_jax/JAX_CONVERSION_PLAN.md</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/math_utilities.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/setup_clubb_pdf_params.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/cloud_sed_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/stats_clubb_utilities.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/fill_holes.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/silhs_category_variance_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>add</editType><file>clubb_jax/src/SILHS/generate_uniform_sample_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Input_fields/corr_varnce_input_reader.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/coamps_microphys_driver_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/lh_microphys_driver_module.py</file></path><path><editType>add</editType><file>clubb_jax/tests/test_microphysics_host_errors.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/SILHS_PORT_NOTES.md</affectedPath><commitId>9233e347a33c4422eaadde0503786b7f6134ebcf</commitId><timestamp>1791167559000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Clarify current SILHS comparison limits

Separate current LBA test caps from earlier longer validation runs.
Remove trailing spaces from the radiation-call blank line.
</comment><date>2026-10-04 21:32:39 -0500</date><id>9233e347a33c4422eaadde0503786b7f6134ebcf</id><msg>Clarify current SILHS comparison limits</msg><path><editType>edit</editType><file>clubb_jax/SILHS_PORT_NOTES.md</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/tests/test_kk_local_means.py</affectedPath><affectedPath>clubb_jax/tests/test_hydrometeor_mixed_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_corr_varnce_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_nc_ncn_eqns.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_sfc_varnce.py</affectedPath><affectedPath>clubb_jax/tests/test_pdf_utilities.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_wp3_on_wp2.py</affectedPath><affectedPath>clubb_jax/tests/test_penta_faithful.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_vertical_coherence.py</affectedPath><affectedPath>clubb_jax/tests/test_constants.py</affectedPath><affectedPath>clubb_jax/tests/test_read_surface_var_for_bc.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_pdf_skewness_diagnostics.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_utils.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</affectedPath><affectedPath>clubb_jax/tests/test_mixing_length.py</affectedPath><affectedPath>clubb_jax/tests/test_differentiability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</affectedPath><affectedPath>clubb_jax/tests/test_NNL_covar_vs_MM.py</affectedPath><affectedPath>clubb_jax/tests/test_adg1_adg2_responder_params.py</affectedPath><affectedPath>clubb_jax/tests/test_penta_solver.py</affectedPath><affectedPath>clubb_jax/tests/test_kk_autoconversion.py</affectedPath><affectedPath>dash_app/pytests/test_dashboard_manager.py</affectedPath><affectedPath>clubb_jax/tests/test_mean_adv.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_udt_roundtrip.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_sponge.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_lapack_wrap.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</affectedPath><affectedPath>clubb_jax/tests/test_stats_output_time.py</affectedPath><affectedPath>clubb_jax/tests/microphysics_test_inputs.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_luhar.py</affectedPath><affectedPath>tests/pytests/test_jax_compare_forwarding.py</affectedPath><affectedPath>clubb_jax/tests/test_cloud_feedback_sfclyr.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_closure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</affectedPath><affectedPath>clubb_jax/tests/test_mean_vert_vel_up_down.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</affectedPath><affectedPath>clubb_jax/tests/test_bivar_LL_covar_partial_rr_Nr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</affectedPath><affectedPath>clubb_jax/tests/test_sponge_damp_xp23.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_hydromet_pdf_parameter.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</affectedPath><affectedPath>clubb_jax/tests/test_config_flags_complete.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_xp3.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_numerical_check.py</affectedPath><affectedPath>clubb_jax/tests/test_standalone_jax.py</affectedPath><affectedPath>dash_app/tests/run_dash_mixing_length_test.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_remap.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_driver.py</affectedPath><affectedPath>dash_app/pytests/test_tutorial_tab.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp2_xpyp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_diagnose_correlations_module.py</affectedPath><affectedPath>clubb_jax/tests/test_quadrivar_NNLL_covar_eq_swap.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_string_conversion.py</affectedPath><affectedPath>clubb_jax/tests/test_component_precip_frac_specify.py</affectedPath><affectedPath>clubb_jax/tests/test_gabls3_night_stability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_error_code.py</affectedPath><affectedPath>clubb_jax/tests/test_bivar_NL_mean_eq.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_driver.py</affectedPath><affectedPath>dash_app/pytests/test_analysis.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</affectedPath><affectedPath>clubb_jax/tests/test_wp2_wp3_terms.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_udt_return_contract.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_splat.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_t_in_k_module.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_tridiag_lu_solvers.py</affectedPath><affectedPath>jenkins_tests/clubb_jax/Jenkinsfile</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_utils.py</affectedPath><affectedPath>clubb_python_api/tests/test_advance_core_subs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_numerical_check.py</affectedPath><affectedPath>clubb_jax/tests/test_splatting_autodiff.py</affectedPath><affectedPath>clubb_python_api/tests/test_stats.py</affectedPath><affectedPath>clubb_jax/tests/test_interpolation.py</affectedPath><affectedPath>.agents/skills/clubb-pytests/SKILL.md</affectedPath><affectedPath>clubb_jax/tests/test_calc_comp_mu_sigma_hm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</affectedPath><affectedPath>clubb_jax/tests/test_mono_flux_limiter.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_transport.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</affectedPath><affectedPath>clubb_jax/tests/test_pdf_integrals_all_mm.py</affectedPath><affectedPath>clubb_python_api/tests/test_stats_registry.in</affectedPath><affectedPath>clubb_jax/tests/test_pressure_sounding_z.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</affectedPath><affectedPath>clubb_jax/tests/test_calendar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/tests/test_rcm_sat_adj.py</affectedPath><affectedPath>clubb_jax/tests/test_mirror_lower_triangular.py</affectedPath><affectedPath>clubb_jax/tests/test_new_tsdadg_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_stats_accumulate.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_port_structure.py</affectedPath><affectedPath>clubb_jax/tests/test_spec_hum_to_mixing_ratio.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</affectedPath><affectedPath>clubb_jax/tests/test_forcing_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</affectedPath><affectedPath>clubb_python_api/tests/test_python_port_api_coverage.py</affectedPath><affectedPath>clubb_jax/tests/test_fill_holes_autodiff.py</affectedPath><affectedPath>clubb_jax/tests/test_luhar_3d_driver.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_matrix_solver_wrapper.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_ly93_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</affectedPath><affectedPath>clubb_jax/tests/test_T_in_K.py</affectedPath><affectedPath>clubb_jax/tests/test_covar_KK_mixt_frac_linearity.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_lapack_interfaces.py</affectedPath><affectedPath>jenkins_tests/clubb_python/Jenkinsfile</affectedPath><affectedPath>clubb_jax/tests/test_grid_operators.py</affectedPath><affectedPath>clubb_jax/tests/test_diagnose_upxp.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_wp4_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_windm_edsclrm_rhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</affectedPath><affectedPath>clubb_jax/tests/test_pdf_moment_integrals.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_python_port_api_coverage.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_mixing_length.py</affectedPath><affectedPath>clubb_jax/tests/test_xp2_xpyp_terms.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_port_structure.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_liquid_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/tests/test_calculate_thvm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_sfc_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</affectedPath><affectedPath>clubb_jax/tests/test_hydrometp2_zt.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</affectedPath><affectedPath>clubb_jax/tests/test_quadrivar_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/tests/test_mixed_moment_pdf_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</affectedPath><affectedPath>clubb_jax/tests/test_xpyp_term_ta_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</affectedPath><affectedPath>.agents/skills/clubb-session-retrospective/SKILL.md</affectedPath><affectedPath>clubb_jax/tests/test_smooth_heaviside.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</affectedPath><affectedPath>dash_app/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</affectedPath><affectedPath>clubb_jax/tests/test_pos_definite.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</affectedPath><affectedPath>clubb_jax/tests/test_pressure_coord_forcing.py</affectedPath><affectedPath>clubb_jax/tests/test_advance_xp3_simplified.py</affectedPath><affectedPath>clubb_jax/tests/test_simple_rad.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_lapack_wrap.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_tridiag_lu_solvers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_matrix_solver_wrapper.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</affectedPath><affectedPath>clubb_jax/AGENTS.md</affectedPath><affectedPath>clubb_jax/tests/test_calculate_w_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</affectedPath><affectedPath>clubb_jax/tests/test_radiation_port_structure.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_refresh_pdf9_parcel_ensemble_lab.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</affectedPath><affectedPath>clubb_jax/tests/test_close_luhar_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_closure_driver.py</affectedPath><affectedPath>clubb_jax/tests/test_kk_rico_oracle.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mixing_length.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_tsdadg.py</affectedPath><affectedPath>clubb_python_api/tests/test_init_sequence.py</affectedPath><affectedPath>clubb_jax/tests/test_fill_holes_mean.py</affectedPath><affectedPath>clubb_jax/tests/test_sfc_varnce.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_turbulent_adv_pdf.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_bicgstab_solvers.py</affectedPath><affectedPath>clubb_jax/tests/test_remapping_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_gfdl_activation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_meta.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_error_code.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_checks.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_interpolation.py</affectedPath><affectedPath>clubb_jax/tests/test_fill_holes_global.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_sampling.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</affectedPath><affectedPath>clubb_jax/tests/test_kk_covariance_batch.py</affectedPath><affectedPath>clubb_jax/tests/microphysics_coefficients.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</affectedPath><affectedPath>clubb_jax/tests/test_pvertinterp.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_pdf_closure_driver.py</affectedPath><affectedPath>clubb_jax/tests/test_numerical_check_setters.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</affectedPath><affectedPath>dash_app/pytests/test_agent_services.py</affectedPath><affectedPath>clubb_jax/tests/test_clip_skewness.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_saturation.py</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>clubb_python_api/tests/test_udt_roundtrip.py</affectedPath><affectedPath>clubb_jax/tests/test_error_code.py</affectedPath><affectedPath>clubb_jax/tests/test_routine_placement.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/tests/test_f2py_advance_xm_wpxp.py</affectedPath><affectedPath>clubb_jax/tests/test_xpyp_term_ta_godunov.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</affectedPath><affectedPath>clubb_jax/tests/test_trivar_NLL_mean_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_cos_solar_zen.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</affectedPath><affectedPath>clubb_jax/tests/test_nov11.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_pressure.py</affectedPath><affectedPath>clubb_jax/tests/test_setter_var_params.py</affectedPath><affectedPath>clubb_python_api/tests/test_argument_contract_audit.py</affectedPath><affectedPath>clubb_jax/tests/test_xm_correction_wpxp_cl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_read_surface_var_for_bc.py</affectedPath><affectedPath>clubb_jax/pytests/microphysics_test_inputs.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_windm_edsclrm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_module.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_core.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_file_functions.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</affectedPath><affectedPath>clubb_jax/tests/run_rico_microphysics_oracle_test.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_interpolation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</affectedPath><affectedPath>clubb_jax/tests/test_compute_uv_tndcy.py</affectedPath><affectedPath>clubb_jax/tests/test_diagnose_correlations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</affectedPath><affectedPath>clubb_jax/tests/test_KK_Nrm_tendencies.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_xprcp_component.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_transport.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_pos_definite_module.py</affectedPath><affectedPath>clubb_python_api/pytests/test_stats_registry.in</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</affectedPath><affectedPath>clubb_jax/tests/test_solver.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_penta_lu_solvers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_coord_forcing.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_error_paths.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_remap.py</affectedPath><affectedPath>clubb_jax/pytests/port_structure_helpers.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_stats.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_meta.py</affectedPath><affectedPath>clubb_python_api/tests/test_udt_return_contract.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_xp2_xpyp.py</affectedPath><affectedPath>clubb_jax/tests/test_diffusion.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</affectedPath><affectedPath>clubb_jax/tests/test_liq_water_path.py</affectedPath><affectedPath>clubb_jax/tests/test_compute_gamma_skw.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_corr_w_hm_n.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</affectedPath><affectedPath>clubb_jax/tests/test_compute_xp3.py</affectedPath><affectedPath>clubb_jax/tests/test_update_xp2_mc.py</affectedPath><affectedPath>clubb_jax/tests/test_trivar_NNL_covar_eq.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_advance_core_subs.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_roots.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_t_in_k_module.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</affectedPath><affectedPath>experimental/experimental_pdfs/README.md</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_luhar.py</affectedPath><affectedPath>clubb_jax/tests/test_spurious_source.py</affectedPath><affectedPath>clubb_jax/tests/test_corr_varnce.py</affectedPath><affectedPath>clubb_jax/tests/test_bivar_LL_covar_partial.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_calc_roots.py</affectedPath><affectedPath>clubb_jax/tests/test_cloud_drop_sed.py</affectedPath><affectedPath>clubb_jax/tests/test_xm_wpxp_terms.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_new_pdf.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_skx.py</affectedPath><affectedPath>clubb_jax/tests/test_soil_vegetation.py</affectedPath><affectedPath>clubb_jax/tests/test_bivar_LL_mean_const.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_host_errors.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_new_hybrid_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_sampling.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_skx.py</affectedPath><affectedPath>clubb_jax/tests/test_remapping_ppm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</affectedPath><affectedPath>clubb_jax/tests/test_new_pdf_main.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_mono_flux.py</affectedPath><affectedPath>tests/pytests/jax_comparison_inputs.py</affectedPath><affectedPath>clubb_jax/tests/test_w_up_in_cloud.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cobra_sfclyr.py</affectedPath><affectedPath>clubb_jax/tests/test_simple_rad_lba.py</affectedPath><affectedPath>clubb_jax/tests/test_index_mapping.py</affectedPath><affectedPath>clubb_jax/tests/test_cloud_correlate.py</affectedPath><affectedPath>clubb_jax/tests/test_cholesky_factor.py</affectedPath><affectedPath>clubb_jax/tests/test_clip_covar.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_mixed_moment_allocation.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_wp2_wp3.py</affectedPath><affectedPath>clubb_jax/tests/test_time_select.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_fortran_oracle.py</affectedPath><affectedPath>clubb_python_api/README.md</affectedPath><affectedPath>clubb_jax/tests/test_pdf_params_pack_roundtrip.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_calc_roots.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</affectedPath><affectedPath>clubb_jax/tests/test_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>clubb_jax/tests/test_rad_extended_atmosphere.py</affectedPath><affectedPath>clubb_jax/tests/test_diagnostic_cache.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pos_definite_module.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_index_mapping.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_windm_edsclrm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</affectedPath><affectedPath>clubb_jax/tests/test_set_sfc_value_of_flux_profiles.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</affectedPath><affectedPath>clubb_python_api/tests/conftest.py</affectedPath><affectedPath>jenkins_tests/clubb_dash/Jenkinsfile</affectedPath><affectedPath>clubb_jax/tests/test_wp2_wp3_lhs_terms.py</affectedPath><affectedPath>clubb_jax/tests/run_jax_timestep_gradient_test.py</affectedPath><affectedPath>clubb_python_api/tests/test_init_pressure.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</affectedPath><affectedPath>clubb_jax/tests/test_cholesky_corr_mtx_approx.py</affectedPath><affectedPath>clubb_jax/tests/test_sfc_flux.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_corr_varnce_module.py</affectedPath><affectedPath>clubb_jax/tests/test_saturation.py</affectedPath><affectedPath>clubb_jax/tests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/tests/test_runtime_info.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</affectedPath><affectedPath>clubb_jax/tests/test_lba_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</affectedPath><affectedPath>clubb_jax/tests/test_precip_fraction.py</affectedPath><affectedPath>clubb_jax/tests/run_silhs_driver_test.py</affectedPath><affectedPath>clubb_jax/tests/test_adg2_driver.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_splat.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_transport_2g_prototype.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_matrix_operations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</affectedPath><affectedPath>clubb_python_api/run_pytests.sh</affectedPath><affectedPath>clubb_jax/tests/test_coefs_semiimpl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</affectedPath><affectedPath>clubb_jax/tests/test_max_cubic_root.py</affectedPath><affectedPath>clubb_jax/tests/test_radiation_module.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_wpxpyp_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_validation_checks.py</affectedPath><affectedPath>clubb_jax/tests/test_skx_func.py</affectedPath><affectedPath>clubb_jax/tests/test_fill_holes_sliding_window.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</affectedPath><affectedPath>LLM_prompts/SHORTCUTS.md</affectedPath><affectedPath>LLM_prompts/pytest_workflow.md</affectedPath><affectedPath>clubb_jax/tests/test_calc_pdf_chi_mean_var.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_file_functions.py</affectedPath><affectedPath>clubb_jax/tests/test_binormal_moments.py</affectedPath><affectedPath>clubb_jax/tests/test_hydrostatic.py</affectedPath><affectedPath>clubb_jax/tests/test_denorm_transform_corr.py</affectedPath><affectedPath>LLM_prompts/update_python_api_and_drivers.md</affectedPath><affectedPath>clubb_jax/tests/test_new_hybrid_pdf_main.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_comp_corrs_binormal.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_ly93.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_xpthvp_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_utils.py</affectedPath><affectedPath>clubb_jax/tests/test_no_dead_functions.py</affectedPath><affectedPath>clubb_jax/tests/test_pdf_params_init.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</affectedPath><affectedPath>tests/pytests/test_bindiff_report.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</affectedPath><affectedPath>clubb_jax/tests/test_transform_pdf_chi_eta_component.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_pdf_closure.py</affectedPath><affectedPath>tuner/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_wp2_wp3.py</affectedPath><affectedPath>clubb_jax/tests/test_silhs_diagnostics.py</affectedPath><affectedPath>clubb_jax/tests/test_unsupported_config_guards.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</affectedPath><affectedPath>clubb_jax/tests/test_full_timestep_grad.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_integration.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_pdf_utils.py</affectedPath><affectedPath>clubb_python_api/tests/test_string_conversion.py</affectedPath><affectedPath>clubb_jax/tests/test_cobra_sfclyr.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_stats_accumulate.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_precipitation_fraction.py</affectedPath><affectedPath>LLM_prompts/session_retrospective.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_diagnostics.py</affectedPath><affectedPath>clubb_jax/tests/test_kk_upscaled_variances.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_ly93.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_lapack_interfaces.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_nc_ncn_eqns.py</affectedPath><affectedPath>LLM_prompts/README.md</affectedPath><affectedPath>clubb_jax/tests/test_silhs_surface_schemes.py</affectedPath><affectedPath>clubb_jax/tests/test_luhar_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</affectedPath><affectedPath>clubb_jax/tests/test_clip_variance.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</affectedPath><affectedPath>clubb_jax/tests/test_microphysics_host_errors.py</affectedPath><affectedPath>clubb_jax/tests/test_NNL_covar_const_vs_MM.py</affectedPath><affectedPath>clubb_python_api/requirements.txt</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mono_flux.py</affectedPath><affectedPath>clubb_jax/tests/test_component_corr_ip.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_fortran_oracle.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_penta_lu_solvers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_morrison_special.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_core.py</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_pdf9_parcel_ensemble_report.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_hybrid_pdf.py</affectedPath><affectedPath>clubb_jax/tests/test_inverse_hydrostatic.py</affectedPath><affectedPath>clubb_jax/tests/test_no_dead_imports.py</affectedPath><affectedPath>clubb_python_api/pytests/conftest.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</affectedPath><affectedPath>clubb_jax/tests/test_NNL_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</affectedPath><affectedPath>clubb_jax/tests/test_morrison_special.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_saturation.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</affectedPath><affectedPath>clubb_jax/tests/test_new_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</affectedPath><affectedPath>clubb_jax/tests/test_jit_compile.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_advance_xm_wpxp.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_nov11.py</affectedPath><affectedPath>clubb_jax/tests/test_Nc_Ncn_eqns.py</affectedPath><affectedPath>clubb_jax/tests/test_sunray_sw.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_matrix_operations.py</affectedPath><affectedPath>dash_app/pytests/test_equations.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_sponge.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</affectedPath><affectedPath>clubb_jax/tests/test_advance_helper_extras.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_ice_cloud_frac_component.py</affectedPath><affectedPath>clubb_jax/tests/test_calc_corr_norm_cholesky.py</affectedPath><affectedPath>clubb_jax/tests/test_limits_f_x_responder.py</affectedPath><affectedPath>clubb_jax/tests/test_windm_edsclrm_lhs.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_index_mapping.py</affectedPath><affectedPath>clubb_jax/tests/test_numerics_autodiff.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/tests/test_mpace_b_lba_tndcy.py</affectedPath><affectedPath>tests/run_pytests.sh</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</affectedPath><affectedPath>clubb_jax/tests/test_stats_writer.py</affectedPath><affectedPath>clubb_jax/tests/test_param_names.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp3.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/README.md</affectedPath><affectedPath>clubb_jax/tests/test_compute_sigma_sqd_w.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_bicgstab_solvers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_pdf.py</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_diagnose_correlations_module.py</affectedPath><affectedPath>clubb_jax/src/Microphys/KK_microphys/KK_upscaled_turbulent_sed.py</affectedPath><affectedPath>clubb_jax/pytests/microphysics_coefficients.py</affectedPath><affectedPath>clubb_jax/tests/test_bugsrad.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</affectedPath><affectedPath>clubb_jax/tests/test_ice_dfsn.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_turbulent_adv_pdf.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</affectedPath><affectedPath>clubb_jax/SILHS_PORT_NOTES.md</affectedPath><affectedPath>clubb_python_api/tests/test_call_tree_new_tsdadg.py</affectedPath><affectedPath>clubb_jax/tests/test_pdf_binormal_moments.py</affectedPath><affectedPath>clubb_jax/tests/test_comp_corr_norm.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_jax_silhs_forwarding.py</affectedPath><affectedPath>clubb_jax/tests/test_gfdl_activation.py</affectedPath><affectedPath>clubb_jax/tests/test_compute_rtp2_from_chi.py</affectedPath><commitId>9afedd80dbc4a1f64989768f1f5124eb03483513</commitId><timestamp>1791171294000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Organize pytest admission, ownership and Jenkins coverage (#1377)

* Organize pytest coverage, generated admission and Jenkins ownership

* Tidy moved pytest helper formatting

* Isolate native JAX pytest failures and fix migration validation

* Prepare Dash CI Node runtime without system npm

* Prune incidental UI assertions and clarify required-input failures

* Keep pytest promotion paths stable and validate API fixtures

* Apply pytest review revisions and consolidate JAX CI

* Keep pytest discovery and admission in the runners

* Limit Jenkins additions to focused pytest stages

* Keep component-specific validation beside Dash and JAX
</comment><date>2026-10-04 22:34:54 -0500</date><id>9afedd80dbc4a1f64989768f1f5124eb03483513</id><msg>Organize pytest admission, ownership and Jenkins coverage (#1377)</msg><path><editType>delete</editType><file>clubb_jax/tests/test_constants.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_lapack_wrap.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_fortran_oracle.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_corrs_binormal.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_no_dead_imports.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_config_flags_complete.py</file></path><path><editType>edit</editType><file>tests/pytests/test_bindiff_report.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_stats_registry.in</file></path><path><editType>add</editType><file>tuner/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>edit</editType><file>dash_app/pytests/test_dashboard_manager.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_standalone_jax.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_precipitation_fraction.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_diagnostic_cache.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_faithful.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_microphysics_integration.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_corr_w_hm_n.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_covariance_batch.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_remap.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_constants.py</file></path><path><editType>add</editType><file>.agents/skills/clubb-pytests/SKILL.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf_main.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_NNL_covar_const_vs_MM.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_hydrometp2_zt.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_udt_roundtrip.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial.py</file></path><path><editType>delete</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_transport_2g_prototype.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_params.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnostic_cache.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_matrix_operations.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_init_sequence.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_nov11.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_turbulent_adv_pdf.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_string_conversion.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_imports.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_bicgstab_solvers.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_index_mapping.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_pdf_utils.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_fill_holes_autodiff.py</file></path><path><editType>edit</editType><file>LLM_prompts/README.md</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_tridiag_lu_solvers.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_output_time.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_stats_accumulate.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_sliding_window.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pressure_sounding_z.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_driver_error_checks.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_skx.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_file_functions.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_xp2_xpyp.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_vs_MM.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_standalone_jax.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_comp_mu_sigma_hm.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/KK_microphys/KK_upscaled_turbulent_sed.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_sampling.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad.py</file></path><path><editType>edit</editType><file>experimental/experimental_pdfs/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_uv_tndcy.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_xp3.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_rtp2_from_chi.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_corr_varnce_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_lhs.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_new_pdf_main.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_xpthvp_terms.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_utils.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_lhs_terms.py</file></path><path><editType>edit</editType><file>clubb_jax/SILHS_PORT_NOTES.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bugsrad.py</file></path><path><editType>edit</editType><file>clubb_python_api/run_pytests.sh</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_w_up_in_cloud.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_closure.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_splat.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_jax_cli_options.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_numerical_check_setters.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_covar_const_limits.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_lapack_interfaces.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_argument_contract_audit.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_comp_corrs_binormal.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cholesky_corr_mtx_approx.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rcm_sat_adj.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_gamma_skw.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mean_adv.py</file></path><path><editType>edit</editType><file>clubb_python_api/README.md</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_sfc_varnce.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_no_dead_functions.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/conftest.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_advance_xp3_simplified.py</file></path><path><editType>edit</editType><file>clubb_python_api/requirements.txt</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_denorm_transform_corr.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_grid_operators.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_sunray_sw.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_diffusion.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_smooth_heaviside.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg2_driver.py</file></path><path><editType>add</editType><file>.agents/skills/clubb-session-retrospective/SKILL.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_luhar_3d_driver.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_Nc_Ncn_eqns.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_luhar_3d_driver.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_kk_autoconversion.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_binormal_moments.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_microphysics_host_errors.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_params_pack_roundtrip.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_adg1_adg2_responder_params.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_surface_schemes.py</file></path><path><editType>add</editType><file>LLM_prompts/pytest_workflow.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_routine_placement.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_radiation_port_structure.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_wp2_wp3.py</file></path><path><editType>edit</editType><file>LLM_prompts/SHORTCUTS.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_utilities.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_string_conversion.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_read_surface_var_for_bc.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mono_flux_limiter.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_penta_solver.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_advance_core_subs.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_quadrivar_NNLL_covar_eq_swap.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_integrals_all_mm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sponge_damp_xp23.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_autoconversion.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_xm_wpxp.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pvertinterp.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_vs_MM.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mirror_lower_triangular.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_KK_Nrm_tendencies.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_mono_flux.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_liquid_cloud_frac_component.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_stats_writer.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_coefs_semiimpl.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_corr_varnce.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_luhar_params.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mean_vert_vel_up_down.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_diagnostics.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_sfc_varnce.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_wpxp_terms.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wpxpyp_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_unsupported_config_guards.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_xm_wpxp_terms.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mono_flux_limiter.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_new_tsdadg_pdf.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_tridiag_lu_solvers.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_vert_vel_up_down.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_splat.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/microphysics_test_inputs.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_luhar.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_luhar.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_stats.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_factor.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_saturation.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_transport.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cloud_correlate.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_matrix_operations.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_meta.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_global.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_diagnose_correlations.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_ly93.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ice_dfsn.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_penta_faithful.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_driver.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_kk_covariance_batch.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_splatting_autodiff.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_equations.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_differentiability.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_integrals_all_mm.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_roots.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mixing_length.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_diagnostics.py</file></path><path><editType>edit</editType><file>tests/pytests/test_jax_compare_forwarding.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_calc_roots.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_fortran_oracle.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_diagnose_upxp.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_gfdl_activation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_morrison_special.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_wpxpyp_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_compute_sigma_sqd_w.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_skx_func.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_rad_extended_atmosphere.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_hydrometeor_mixed_moments.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_denorm_transform_corr.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_covar_KK_mixt_frac_linearity.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_agent_services.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_trivar_NLL_mean_eq.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_ice_cloud_frac_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_compute_sigma_sqd_w.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_sounding_z.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_NNL_covar_const_limits.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_comp_mu_sigma_hm.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_t_in_k_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_binormal_moments.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jit_compile.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_tsdadg_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_limits_f_x_responder.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_penta_lu_solvers.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/microphysics_test_inputs.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_jax/Jenkinsfile</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_close_luhar_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_comp_corr_norm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_error_code.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_port_structure.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_nc_ncn_eqns.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_feedback_sfclyr.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometp2_zt.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_error_paths.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_numerical_check.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pos_definite.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_t_in_k_module.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_bugsrad.py</file></path><path><editType>add</editType><file>tests/pytests/jax_comparison_inputs.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_limits_f_x_responder.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_saturation.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_pos_definite_module.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp2_xpyp.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_analysis.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_corr_varnce.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_wp2_wp3_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/microphysics_coefficients.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pos_definite.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_liq_water_path.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_flux.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NLL_mean_eq.py</file></path><path><editType>delete</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_vertical_coherence.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_responder_params.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_time_select.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_coefs_semiimpl.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_stats_output_time.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_diagnose_correlations_module.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mono_flux.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_NNL_covar_vs_MM.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerical_check_setters.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_jit_compile.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp4_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_precip_frac_specify.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_error_code.py</file></path><path><editType>delete</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_mixed_moment_allocation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_upxp.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_closure_driver.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mpace_b_lba_tndcy.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pvertinterp.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_validation_checks.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_setter_var_params.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_ly93_pdf.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_windm_edsclrm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_mean.py</file></path><path><editType>edit</editType><file>clubb_jax/AGENTS.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_forcing_port_structure.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_binormal_moments.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_variance.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_trivar_NNL_covar_eq.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_python/Jenkinsfile</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_close_luhar_pdf.py</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_xprcp_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_validation_checks.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diffusion.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_mean_const.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_lba_sfclyr.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_silhs_driver_test.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mixing_length.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mpace_b_lba_tndcy.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_norm_cholesky.py</file></path><path><editType>add</editType><file>LLM_prompts/session_retrospective.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cloud_drop_sed.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mean_adv.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_covar.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_spurious_source.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_rico_microphysics_oracle_test.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pos_definite_module.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/test_stats_registry.in</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_compute_uv_tndcy.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_set_sfc_value_of_flux_profiles.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_index_mapping.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_interpolation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_setter_var_params.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_moment_integrals.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_penta_solver.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_adg2_driver.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_component_corr_ip.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_new_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_simple_rad_lba.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_rad_extended_atmosphere.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_compute_gamma_skw.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_kk_rico_oracle.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_liquid_cloud_frac_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_godunov.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_update_xp2_mc.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_compute_rtp2_from_chi.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_simple_rad_lba.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_gabls3_night_stability.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_transform_pdf_chi_eta_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrometeor_mixed_moments.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_xm_correction_wpxp_cl.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_kk_upscaled_variances.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_comp_corr_norm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_liq_water_path.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_drop_sed.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_bicgstab_solvers.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calculate_w_responder_params.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_interpolation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_surface_schemes.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_binormal_moments.py</file></path><path><editType>add</editType><file>clubb_jax/tests/run_jax_timestep_gradient_test.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pressure_coord_forcing.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_pdf_utils.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_xp3_simplified.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_new_tsdadg.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_f2py_advance_xm_wpxp.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sunray_sw.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_matrix_solver_wrapper.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_fill_holes_sliding_window.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_max_cubic_root.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xpyp_term_ta_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_runtime_info.py</file></path><path><editType>delete</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_refresh_pdf9_parcel_ensemble_lab.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_differentiability.py</file></path><path><editType>add</editType><file>jenkins_tests/clubb_dash/Jenkinsfile</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xm_correction_wpxp_cl.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_upscaled_variances.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_Nc_Ncn_eqns.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_lba_sfclyr.py</file></path><path><editType>edit</editType><file>tests/run_pytests.sh</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_remapping_ppm.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_windm_edsclrm_rhs.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_smooth_heaviside.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_clip_skewness.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/port_structure_helpers.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_ly93_pdf.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_udt_return_contract.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_fill_holes_mean.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_grid_operators.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_udt_return_contract.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_transport.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_clip_skewness.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_wp3_on_wp2.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_w_responder_params.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_wp3_on_wp2.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_xp2_xpyp_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_index_mapping.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mixed_moment_pdf_integrals.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_moment_integrals.py</file></path><path><editType>add</editType><file>dash_app/tests/run_dash_mixing_length_test.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_max_cubic_root.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_meta.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_sponge.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_quadrivar_NNLL_covar_eq_swap.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_lapack_interfaces.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calendar.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_radiation_port_structure.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_unsupported_config_guards.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_xp2_xpyp_terms.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cos_solar_zen.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_windm_edsclrm_lhs.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_adg1_adg2_responder_params.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_precip_fraction.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_port_structure.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_pack_roundtrip.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_utils.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_splatting_autodiff.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_sfc_varnce.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_hybrid_pdf_main.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_new_hybrid_pdf_main.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_w_up_in_cloud.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cos_solar_zen.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_calc_roots.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_hybrid_pdf.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_python_port_api_coverage.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_numerical_check.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calendar.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_new_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_no_dead_functions.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_stats_writer.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calculate_thvm.py</file></path><path><editType>edit</editType><file>LLM_prompts/update_python_api_and_drivers.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_skx_func.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_silhs_driver.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_sfc_varnce.py</file></path><path><editType>add</editType><file>tests/pytests/auto_llm_generated_pytests/test_jax_silhs_forwarding.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_kk_local_means.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_full_timestep_grad.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_advance_helper_extras.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_forcing_port_structure.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_new_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_wp2_wp3_lhs_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_quadrivar_covar_const_limits.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_corr_w_hm_n.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_python_port_api_coverage.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_T_in_K.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_bivar_LL_covar_partial_rr_Nr.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_advance_helper_extras.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_corr_varnce_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_xpyp_term_ta_pdf.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_hydromet_pdf_parameter.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_solver.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spurious_source.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_xp3.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_stats_accumulate.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xpthvp_terms.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_ly93.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_radiation_module.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_bivar_NL_mean_eq.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cobra_sfclyr.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_windm_edsclrm_rhs.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_init_pressure.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_mixing_length.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_mirror_lower_triangular.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cholesky_factor.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_corr_norm_cholesky.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_transform_pdf_chi_eta_component.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_microphysics_port_structure.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_inverse_hydrostatic.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_precip_fraction.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_turbulent_adv_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_roots.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_clip_variance.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cloud_feedback_sfclyr.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cloud_correlate.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_penta_lu_solvers.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_udt_roundtrip.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_cobra_sfclyr.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_pdf_closure.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_sfc_flux.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_runtime_info.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_spec_hum_to_mixing_ratio.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_sponge_damp_xp23.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_time_select.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_responder_params.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_solver.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_pdf_skewness_diagnostics.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_rcm_sat_adj.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/microphysics_coefficients.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_spec_hum_to_mixing_ratio.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_hydrostatic.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_remapping_ppm.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_xpyp_term_ta_godunov.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_soil_vegetation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixed_moment_pdf_integrals.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_gabls3_night_stability.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_inverse_hydrostatic.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_matrix_solver_wrapper.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_cholesky_corr_mtx_approx.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_component_corr_ip.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_new_hybrid_pdf.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_KK_Nrm_tendencies.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_bivar_LL_mean_const.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_kk_local_means.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_gfdl_activation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_integration.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_set_sfc_value_of_flux_profiles.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_wp2_wp3.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_remap.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calc_xprcp_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydromet_pdf_parameter.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_morrison_special.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_read_surface_var_for_bc.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_soil_vegetation.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_bivar_LL_covar_partial.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_pdf_closure_driver.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_NNL_covar_const_limits.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/conftest.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_advance_core_subs.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_error_code.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_wp4_pdf.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_NL_mean_eq.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_sponge.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_ice_cloud_frac_component.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_hydrostatic.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_core.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_numerics_autodiff.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_file_functions.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_T_in_K.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_fill_holes_global.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_wp2_wp3_terms.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_compute_xp3.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_update_xp2_mc.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_pressure.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_saturation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_port_structure.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_skx.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_diagnose_correlations_module.py</file></path><path><editType>delete</editType><file>clubb_python_api/tests/test_call_tree_advance_windm_edsclrm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_silhs_sampling.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_interpolation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_routine_placement.py</file></path><path><editType>add</editType><file>dash_app/pytests/auto_llm_generated_pytests/README.md</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_clip_covar.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_param_names.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_stats.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_calculate_thvm.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_index_mapping.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_microphysics_host_errors.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_core.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pdf_params_init.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_fill_holes_autodiff.py</file></path><path><editType>delete</editType><file>experimental/experimental_pdfs/python/dash_additions/misc_labs/tests/test_pdf9_parcel_ensemble_report.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_lapack_wrap.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_remapping_module.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_nc_ncn_eqns.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_diagnose_correlations.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_saturation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_numerics_autodiff.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_calc_pdf_chi_mean_var.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_bivar_LL_covar_partial_rr_Nr.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_utilities.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_component_precip_frac_specify.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_trivar_NNL_covar_eq.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_interpolation.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_pressure_coord_forcing.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_nov11.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_covar_KK_mixt_frac_linearity.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_ice_dfsn.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_tutorial_tab.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_config_flags_complete.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_pdf_params_init.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_microphysics_error_paths.py</file></path><path><editType>delete</editType><file>clubb_jax/tests/test_simple_rad.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xp3.py</file></path><path><editType>add</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_new_tsdadg.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>utilities/stats_json_to_namelist.py</affectedPath><affectedPath>input/stats/README</affectedPath><affectedPath>dash_app/run_tab/tab.py</affectedPath><affectedPath>dash_app/shared/stats.py</affectedPath><affectedPath>dash_app/persistence.py</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>dash_app/run_tab/runtime.py</affectedPath><affectedPath>input/stats/stats.json</affectedPath><affectedPath>dash_app/run_tab/callbacks_selection.py</affectedPath><affectedPath>dash_app/run_tab/stats.py</affectedPath><affectedPath>dash_app/run_tab/layout.py</affectedPath><affectedPath>dash_app/README.md</affectedPath><affectedPath>dash_app/services/models.py</affectedPath><affectedPath>dash_app/assets/33_stats_tree.js</affectedPath><affectedPath>dash_app/shared/actions.py</affectedPath><affectedPath>dash_app/run_tab/discovery.py</affectedPath><affectedPath>dash_app/pytests/test_stats_selection.py</affectedPath><affectedPath>dash_app/DEVELOPMENT.md</affectedPath><affectedPath>utilities/pytests/test_stats_json_to_namelist.py</affectedPath><affectedPath>dash_app/assets/11_tab_run_theme.css</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>dash_app/pytests/test_persistence.py</affectedPath><commitId>feb2438c46510eaadecd3e0c3bdede3df2939ac1</commitId><timestamp>1791171498000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add hierarchical JSON statistics selection and Dash editor (#1378)

* Add hierarchical JSON stats selection and Dash editor

* Ignore locally saved custom stats configurations
</comment><date>2026-10-04 22:38:18 -0500</date><id>feb2438c46510eaadecd3e0c3bdede3df2939ac1</id><msg>Add hierarchical JSON statistics selection and Dash editor (#1378)</msg><path><editType>edit</editType><file>dash_app/persistence.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/callbacks_selection.py</file></path><path><editType>edit</editType><file>dash_app/shared/actions.py</file></path><path><editType>add</editType><file>input/stats/stats.json</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>dash_app/DEVELOPMENT.md</file></path><path><editType>edit</editType><file>dash_app/run_tab/layout.py</file></path><path><editType>add</editType><file>dash_app/run_tab/stats.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/discovery.py</file></path><path><editType>add</editType><file>utilities/pytests/test_stats_json_to_namelist.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/tab.py</file></path><path><editType>add</editType><file>utilities/stats_json_to_namelist.py</file></path><path><editType>edit</editType><file>dash_app/assets/11_tab_run_theme.css</file></path><path><editType>add</editType><file>dash_app/assets/33_stats_tree.js</file></path><path><editType>edit</editType><file>dash_app/services/models.py</file></path><path><editType>add</editType><file>dash_app/pytests/test_stats_selection.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/runtime.py</file></path><path><editType>edit</editType><file>dash_app/README.md</file></path><path><editType>edit</editType><file>dash_app/pytests/test_persistence.py</file></path><path><editType>add</editType><file>dash_app/shared/stats.py</file></path><path><editType>edit</editType><file>input/stats/README</file></path><path><editType>edit</editType><file>.gitignore</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>4</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/4/</url></nextBuild><previousBuild><number>2</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/2/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>2</buildNumber><marked><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><branch><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><branch><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><branch><SHA1>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#2</displayName><duration>10250989</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #2</fullDisplayName><id>2</id><keepLog>false</keepLog><number>2</number><queueId>9636</queueId><result>FAILURE</result><timestamp>1791075458832</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/2/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/CLUBB_core/stats_netcdf.F90</affectedPath><commitId>5a618af3b1fa969ad22fc01e46db81f7bc71f449</commitId><timestamp>1791058620000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>Serialize NetCDF statistics output across OpenMP threads
</comment><date>2026-10-03 15:17:00 -0500</date><id>5a618af3b1fa969ad22fc01e46db81f7bc71f449</id><msg>Serialize NetCDF statistics output across OpenMP threads</msg><path><editType>edit</editType><file>src/CLUBB_core/stats_netcdf.F90</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>run_scripts/run_tuner.py</affectedPath><affectedPath>run_scripts/run_clubb_w_varying_flags.py</affectedPath><affectedPath>jenkins_tests/clubb_python/Jenkinsfile</affectedPath><affectedPath>jenkins_tests/clubb_tuner/Jenkinsfile</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>tests/test_monoflux_limiter_GPU.py</affectedPath><affectedPath>tests/pytests/test_bindiff_report.py</affectedPath><affectedPath>utilities/pytests/test_time_clubb.py</affectedPath><affectedPath>CMakeLists.txt</affectedPath><affectedPath>experimental/experimental_pdfs/python/dash_additions/utilities/refresh_pdf9_parcel_ensemble_lab.py</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>tests/run_clubb_conv_test.py</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>postprocessing/latin_hypercube_plotting/variance_analysis_scripts/rms_vs_sample_points/silhs_varying_sp_output.sh</affectedPath><affectedPath>tests/check_budget_balance.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>utilities/pytests/test_run_script_arguments.py</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>dash_app/pytests/test_pyplotgen_export.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>dash_app/tune_tab/runtime.py</affectedPath><affectedPath>jenkins_tests/clubb_plots/Jenkinsfile</affectedPath><affectedPath>tests/test_fire_tuner.py</affectedPath><affectedPath>jenkins_tests/clubb_column_mirror/Jenkinsfile</affectedPath><affectedPath>jenkins_tests/clubb_generalized_grid/Jenkinsfile</affectedPath><affectedPath>tuner/tune_clubb.py</affectedPath><affectedPath>dash_app/compile_tab/runtime.py</affectedPath><affectedPath>tests/run_thread_test.py</affectedPath><affectedPath>jenkins_tests/clubb_jax/Jenkinsfile</affectedPath><affectedPath>tests/check_mirrored_multi_col_output.py</affectedPath><affectedPath>jenkins_tests/clubb_single_prec_build/Jenkinsfile</affectedPath><affectedPath>tests/run_G_unit_tests.py</affectedPath><affectedPath>postprocessing/pyplotgen/README.md</affectedPath><affectedPath>run_scripts/convergence_run/convergence_config.py</affectedPath><affectedPath>postprocessing/pyplotgen/pyplotgen.py</affectedPath><affectedPath>tests/run_python_vs_fortran_cases.py</affectedPath><affectedPath>clubb_jax/tests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/tests/test_runtime_info.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>dash_app/compile_tab/build_selector.py</affectedPath><affectedPath>input/flag_sets/README.md</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>tuner/presets.py</affectedPath><affectedPath>dash_app/pytests/test_profile_tab.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><affectedPath>tuner/job_runtime.py</affectedPath><affectedPath>tests/pytests/test_jax_compare_forwarding.py</affectedPath><affectedPath>utilities/parse_argument_list/replace_err_code_type.py</affectedPath><affectedPath>tuner/system_defaults.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>utilities/print_tunable_parameters_table.py</affectedPath><affectedPath>tests/run_jax_comparison_mutation_test.py</affectedPath><affectedPath>tests/run_bindiff_w_flags.py</affectedPath><affectedPath>jenkins_tests/clubb_gpu_async_output_matching/Jenkinsfile</affectedPath><affectedPath>utilities/benchmark_converter.py</affectedPath><affectedPath>jenkins_tests/run_bindiff_w_varying_flags_against_master/Jenkinsfile</affectedPath><affectedPath>utilities/api_analysis/run_full_api_diagnostics.bash</affectedPath><affectedPath>utilities/split_stats_to_legacy.py</affectedPath><affectedPath>utilities/CLUBBStandardsCheck.py</affectedPath><affectedPath>jenkins_tests/clubb_basic_full_run/Jenkinsfile</affectedPath><affectedPath>run_scripts/run_scm_all.py</affectedPath><affectedPath>run_scripts/run_clubb_and_pyplotgen.py</affectedPath><affectedPath>dash_app/profile_tab/runtime.py</affectedPath><affectedPath>jenkins_tests/clubb_gpu_vs_cpu_diffness/Jenkinsfile</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><affectedPath>dash_app/pytests/test_compile_tab_build_status.py</affectedPath><affectedPath>compile.py</affectedPath><affectedPath>clubb_jax/runtime_info.py</affectedPath><affectedPath>clubb_jax/tests/test_kk_rico_oracle.py</affectedPath><affectedPath>utilities/api_analysis/create_module_table.py</affectedPath><affectedPath>utilities/api_analysis/api_commitment_test.py</affectedPath><affectedPath>utilities/setup_python_venv.py</affectedPath><affectedPath>dash_app/run_tab/runtime.py</affectedPath><affectedPath>LLM_prompts/update_python_api_and_drivers.md</affectedPath><affectedPath>utilities/convert_to_async.py</affectedPath><affectedPath>tests/pytests/test_column_mirror.py</affectedPath><affectedPath>tests/run_silhs_test.py</affectedPath><affectedPath>dash_app/plot_tab/pyplotgen_runtime.py</affectedPath><affectedPath>jenkins_tests/clubb_G_unit/Jenkinsfile</affectedPath><affectedPath>tests/analyze_tuner_sample_history.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>run_scripts/run_bindiff_all.py</affectedPath><affectedPath>tests/pytests/test_run_clubb_conv_test.py</affectedPath><affectedPath>postprocessing/pyplotgen/config/Style_definitions.py</affectedPath><affectedPath>utilities/create_multi_col_params.py</affectedPath><affectedPath>tuner/README.md</affectedPath><affectedPath>postprocessing/pyplotgen/src/CaseGallerySetup.py</affectedPath><commitId>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</commitId><timestamp>1791075166000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Standardize script arguments  (#1373)

This is mainly changing the names of arguments to be clearer and more consistent, and replacing the usage of double dash options with single ones (I just like it better that way).

* Standardize script arguments and worker defaults

* Forward model options through the Python comparison harness

* Reuse existing modules for script argument helpers

* Fix script argument cleanup integration regressions

* Update API commitment wrapper for renamed exclusion option
</comment><date>2026-10-03 19:52:46 -0500</date><id>1d1abb1d2fcf29eef75bfe3182b8b213a1c6001e</id><msg>Standardize script arguments  (#1373)</msg><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>tests/pytests/test_bindiff_report.py</file></path><path><editType>edit</editType><file>utilities/api_analysis/api_commitment_test.py</file></path><path><editType>edit</editType><file>dash_app/profile_tab/runtime.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_pyplotgen_export.py</file></path><path><editType>edit</editType><file>utilities/parse_argument_list/replace_err_code_type.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>edit</editType><file>utilities/create_multi_col_params.py</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_runtime_info.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_basic_full_run/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/run_jax_comparison_mutation_test.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_single_prec_build/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/check_mirrored_multi_col_output.py</file></path><path><editType>edit</editType><file>dash_app/plot_tab/pyplotgen_runtime.py</file></path><path><editType>edit</editType><file>utilities/split_stats_to_legacy.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_compile_tab_build_status.py</file></path><path><editType>edit</editType><file>tuner/system_defaults.py</file></path><path><editType>edit</editType><file>tuner/job_runtime.py</file></path><path><editType>edit</editType><file>CMakeLists.txt</file></path><path><editType>edit</editType><file>postprocessing/pyplotgen/config/Style_definitions.py</file></path><path><editType>edit</editType><file>utilities/setup_python_venv.py</file></path><path><editType>edit</editType><file>tests/pytests/test_column_mirror.py</file></path><path><editType>edit</editType><file>run_scripts/run_bindiff_all.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_column_mirror/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>tests/run_python_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>utilities/benchmark_converter.py</file></path><path><editType>edit</editType><file>clubb_jax/runtime_info.py</file></path><path><editType>edit</editType><file>compile.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>postprocessing/pyplotgen/src/CaseGallerySetup.py</file></path><path><editType>edit</editType><file>dash_app/tune_tab/runtime.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_jax/Jenkinsfile</file></path><path><editType>edit</editType><file>tuner/tune_clubb.py</file></path><path><editType>add</editType><file>utilities/pytests/test_run_script_arguments.py</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_kk_rico_oracle.py</file></path><path><editType>edit</editType><file>dash_app/run_tab/runtime.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_profile_tab.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>edit</editType><file>utilities/api_analysis/run_full_api_diagnostics.bash</file></path><path><editType>edit</editType><file>dash_app/compile_tab/build_selector.py</file></path><path><editType>edit</editType><file>tests/run_clubb_conv_test.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_tuner/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/pytests/test_time_clubb.py</file></path><path><editType>edit</editType><file>postprocessing/pyplotgen/pyplotgen.py</file></path><path><editType>edit</editType><file>tests/run_bindiff_w_flags.py</file></path><path><editType>edit</editType><file>experimental/experimental_pdfs/python/dash_additions/utilities/refresh_pdf9_parcel_ensemble_lab.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner.py</file></path><path><editType>edit</editType><file>tests/run_silhs_test.py</file></path><path><editType>edit</editType><file>tests/test_monoflux_limiter_GPU.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>tests/check_budget_balance.py</file></path><path><editType>edit</editType><file>LLM_prompts/update_python_api_and_drivers.md</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>tests/analyze_tuner_sample_history.py</file></path><path><editType>edit</editType><file>utilities/CLUBBStandardsCheck.py</file></path><path><editType>edit</editType><file>postprocessing/latin_hypercube_plotting/variance_analysis_scripts/rms_vs_sample_points/silhs_varying_sp_output.sh</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_gpu_vs_cpu_diffness/Jenkinsfile</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>tuner/presets.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_G_unit/Jenkinsfile</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_generalized_grid/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/convert_to_async.py</file></path><path><editType>edit</editType><file>input/flag_sets/README.md</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>postprocessing/pyplotgen/README.md</file></path><path><editType>edit</editType><file>run_scripts/run_clubb_w_varying_flags.py</file></path><path><editType>edit</editType><file>tests/run_G_unit_tests.py</file></path><path><editType>edit</editType><file>tests/pytests/test_jax_compare_forwarding.py</file></path><path><editType>edit</editType><file>utilities/print_tunable_parameters_table.py</file></path><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_gpu_async_output_matching/Jenkinsfile</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_plots/Jenkinsfile</file></path><path><editType>edit</editType><file>run_scripts/run_scm_all.py</file></path><path><editType>edit</editType><file>jenkins_tests/run_bindiff_w_varying_flags_against_master/Jenkinsfile</file></path><path><editType>edit</editType><file>run_scripts/convergence_run/convergence_config.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>dash_app/compile_tab/runtime.py</file></path><path><editType>edit</editType><file>run_scripts/run_clubb_and_pyplotgen.py</file></path><path><editType>edit</editType><file>utilities/api_analysis/create_module_table.py</file></path><path><editType>edit</editType><file>tuner/README.md</file></path><path><editType>edit</editType><file>tests/run_thread_test.py</file></path><path><editType>edit</editType><file>tests/test_fire_tuner.py</file></path><path><editType>edit</editType><file>tests/pytests/test_run_clubb_conv_test.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_python/Jenkinsfile</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>3</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/3/</url></nextBuild><previousBuild><number>1</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/1/</url></previousBuild></build><build _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>1</buildNumber><marked><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#1</displayName><duration>16271569</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #1</fullDisplayName><id>1</id><keepLog>false</keepLog><number>1</number><queueId>9451</queueId><result>FAILURE</result><timestamp>1790993188462</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/1/</url><inProgress>false</inProgress><nextBuild><number>2</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/2/</url></nextBuild></build><color>red_anime</color><firstBuild _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>1</buildNumber><marked><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><branch><SHA1>ec38f6a3b0805ee6ac8db48d845ddee0e7d11ac3</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#1</displayName><duration>16271569</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #1</fullDisplayName><id>1</id><keepLog>false</keepLog><number>1</number><queueId>9451</queueId><result>FAILURE</result><timestamp>1790993188462</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/1/</url><inProgress>false</inProgress><nextBuild><number>2</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/2/</url></nextBuild></firstBuild><healthReport><description>Build stability: All recent builds failed.</description><iconClassName>icon-health-00to19</iconClassName><iconUrl>health-00to19.png</iconUrl><score>0</score></healthReport><keepDependencies>false</keepDependencies><lastBuild _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>605985</buildableTimeMillis><buildingDurationMillis>0</buildingDurationMillis><executingTimeMillis>4328587</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>3</subTaskCount><waitingDurationMillis>7998</waitingDurationMillis><waitingTimeMillis>7998</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>16</buildNumber><marked><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><branch><SHA1>8369512fcc6487603491e12ac13376de2aec2a0b</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>true</building><displayName>#16</displayName><duration>0</duration><estimatedDuration>13433486</estimatedDuration><executor _class='hudson.model.OneOffExecutor'></executor><fullDisplayName>clubb_generalized_grid #16</fullDisplayName><id>16</id><keepLog>false</keepLog><number>16</number><queueId>11133</queueId><timestamp>1792484769900</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>src/generalized_grid_test.F90</affectedPath><affectedPath>src/CLUBB_core/setup_clubb_pdf_params.F90</affectedPath><affectedPath>clubb_python_api/clubb_f2py.pyf</affectedPath><affectedPath>src/CLUBB_core/fill_holes.F90</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/precipitation_fraction_wrapper.F90</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</affectedPath><affectedPath>src/G_unit_test_types/mu_sigma_hm_tests.F90</affectedPath><affectedPath>src/Microphys/pdf_hydromet_microphys_wrapper.F90</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/precipitation_fraction.py</affectedPath><affectedPath>src/CLUBB_core/precipitation_fraction.F90</affectedPath><commitId>8369512fcc6487603491e12ac13376de2aec2a0b</commitId><timestamp>1792463005000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Clubb params 1d to 2d fix (#1392)

* Fix: clubb params is a shape (ngrdcol,nparams) that is passed into subroutines that expect a 1d array

Also fixed dependent other places in code and changed the python api. This is BIT_CHANGING for multicol.
If a 2d array is passed into a function that expects the arr to be 1d fortran just passes the first col of the arr.
Therefore the changes dont affect single col runs. For multicol runs other indexing is needed

* fill_holes_vertical_api expects the passed gr%dzt to have shape(ngrdcol,nz) but the code passes the whole gr%dzt array although each column is traversed one by one.
So ngrdcol=1 is passed each time.

No effect on single col, as with ngrdcol = 1, gr%dzt and gr%dzt(1:1,:) are the same.
Affects multicol if l_hole_fill = .true. and the hydrometeor is a mixing ratio (name starts with r) and
some value is actually negative

Therefore BIT_CHANGING
</comment><date>2026-10-19 21:23:25 -0500</date><id>8369512fcc6487603491e12ac13376de2aec2a0b</id><msg>Clubb params 1d to 2d fix (#1392)</msg><path><editType>edit</editType><file>clubb_python_api/clubb_f2py.pyf</file></path><path><editType>edit</editType><file>src/CLUBB_core/fill_holes.F90</file></path><path><editType>edit</editType><file>src/generalized_grid_test.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/setup_clubb_pdf_params.F90</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/precipitation_fraction_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_precipitation_fraction.py</file></path><path><editType>edit</editType><file>src/Microphys/pdf_hydromet_microphys_wrapper.F90</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/precipitation_fraction.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/precipitation_fraction.F90</file></path><path><editType>edit</editType><file>src/G_unit_test_types/mu_sigma_hm_tests.F90</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>true</inProgress><previousBuild><number>15</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url></previousBuild></lastBuild><lastCompletedBuild _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12914478</buildingDurationMillis><executingTimeMillis>17330996</executingTimeMillis><executorUtilization>1.34</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>5636</waitingDurationMillis><waitingTimeMillis>5636</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>15</buildNumber><marked><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#15</displayName><duration>12914478</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #15</fullDisplayName><id>15</id><keepLog>false</keepLog><number>15</number><queueId>11023</queueId><result>FAILURE</result><timestamp>1792398368289</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-bit-changing/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><commitId>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</commitId><timestamp>1792344464000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Define when to declare bit-changing commits (#1403)

* Define conservative bit-change declarations

Centralize the policy around intentional Fortran numerical answer changes, with named affected BFB tests or precise untested conditions. Preserve standalone coverage and the current JAX parity boundary, keep declarations sparse, and separate answer-changing edits from preserving cleanup.

Route message writing, validation and branch finalization to one owner. Skill schemas, local links, heading anchors, parser examples and manual decision scenarios were checked; no model or CI code changes.

* Define the optimization level for bitwise preservation

Use -O0 as the normal preservation standard. Differences confined to optimized builds do not require an answer-change declaration when -O0 is verified BFB; report known optimized-only differences and their configuration in the PR.

The changed skill schema and whitespace checks pass. Inspected current debug compile flags and manually reviewed the optimized-only decision scenario; documentation only, no numerical rerun.
</comment><date>2026-10-18 12:27:44 -0500</date><id>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</id><msg>Define when to declare bit-changing commits (#1403)</msg><path><editType>edit</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-bit-changing/SKILL.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>utilities/clubb_case_runner.py</affectedPath><affectedPath>utilities/pytests/test_time_clubb.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</affectedPath><affectedPath>clubb_python_driver/clubb_standalone.py</affectedPath><affectedPath>src/clubb_standalone.F90</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>utilities/pytests/test_create_case_namelist.py</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>tests/case_runner_lifecycle_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-format/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_init_cleanup.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>utilities/timing_profiles.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>utilities/pytests/timing_test_inputs.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/calc_pressure.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>4f8368a377989b649fc0ed53c26957e193d21067</commitId><timestamp>1792350419000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add reusable case runners for timing (#1400)

We have multiple entry points now for clubb standalone (fortran,python,jax), and there's additional logic that chooses which fortran installation to use (gfortran,ifort,nvhpc,etc). All of this has historically (~1 year) been done by run_scm.py, but we have a number of other scripts that need this same kind of logic, so instead of making run_scm.py more complicated and letting other scripts import it's pieces, we've made a `clubb_case_runner`.

`clubb_case_runner` is a python object that abstracts the backend decisions. The "flow" is roughly:
- high level script wants to run a clubb case some how
- generates one or more case namelists (arm.in, bomex.in, etc)
- creates a `clubb_case_runner` by passing it whatever runtime options (-jax/-python/-exe) the user requested
- runs a case by passing this `clubb_case_runner` whatever namelists it wants to run.

In addition to deduplicating runtime setting logic, this allows python scripts to create these high level `clubb_case_runner` objects and use those to do things that usually requires duplicate multiprocessesing and error code parsing logic.
</comment><date>2026-10-18 14:06:59 -0500</date><id>4f8368a377989b649fc0ed53c26957e193d21067</id><msg>Add reusable case runners for timing (#1400)</msg><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>add</editType><file>utilities/pytests/timing_test_inputs.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>src/clubb_standalone.F90</file></path><path><editType>add</editType><file>tests/case_runner_lifecycle_test.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>edit</editType><file>utilities/timing_profiles.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_standalone.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>add</editType><file>utilities/clubb_case_runner.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-format/SKILL.md</file></path><path><editType>edit</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_init_cleanup.py</file></path><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/calc_pressure.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_create_case_namelist.py</file></path><path><editType>edit</editType><file>tests/run_timestep_sweep.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>clubb_jax/view_profile.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/code_timer_module.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><commitId>ec5e8070d3173282a6317b067f8673a657a1eb6f</commitId><timestamp>1792362852000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JAX timing and profiling (#1393)

* Add JAX timing and persistent benchmark workers

Write Fortran-format CPU timing summaries and optional XProf/Perfetto traces
from JAX driver phases. Use synchronized persistent workers for full-case
warmups and repetitions across Fortran, Python and JAX. Retain compiled JAX
programs when initialization settings are unchanged.

Validation: 243 focused checks and CPU case workflows passed. Repeated
five-step BOMEX/RICO_SILHS numeric outputs matched fresh controls exactly.
The two-column BOMEX JAX/Fortran comparison passed 1e-7 absolute and percent
thresholds. BFB against the parent is not established by these comparisons.
GPU and GPTL execution remain untested.

* Making jax timer use wall clock time instead of cpu/process time

* Keep JAX timing separate from reusable runners

Move process persistence, cache reuse and Python timing adapters to the
case-runner branch. Keep JAX wall-clock summaries, optional deep profiles,
driver instrumentation and the parser change that reads their clock label.

The timing-only shared suite and a three-step CPU BOMEX run pass. BFB
against master is not established; physics expressions are unchanged.

* Add reusable case runners for timing and tuning

Share runtime selection and persistent standalone sessions between SCM,
timing and tuning. Support namelist replacement and empty model reruns,
plus parameter matrices for loss sessions. Synchronize timing cohorts and
record retained-model initialization separately. Use executable loss
workers for native tuning instead of requiring F2PY.

Restore microphysics defaults between cases (BIT_CHANGING for sessions
that previously inherited settings). Short native/CPU JAX sessions match
fresh same-backend stats values exactly; broader BFB is not established.
Native build, focused suites and repeated loss/tuner/timing workflows pass.

* Use F2PY for reusable Fortran loss runs

Run persistent Fortran loss sessions through the existing Python API.
Restore the native loss standalone and remove its parameter namelist reader
and result writers. Python workers pass arrays directly into F2PY; ordinary
standalone persistence and JAX execution remain available.

Fifteen native loss metric arrays match saved results exactly. Native and
CPU JAX repeated loss/tuning workflows, tuner shutdown, the native build,
454 shared checks and four API checks pass. Broader BFB is not established.

* Keep case runners persistent without retaining model state

Run each ordinary request through full initialization, advancement and
cleanup while keeping the process alive for in-memory JIT reuse. Remove
retained-model commands, transport, timing/UI options and extra bindings.
Restore tuning and loss frontends to their existing allocation-reusing APIs.

The native build, 445 shared checks, 121 focused JAX checks and 85 Dash
checks pass. Short native/JAX/Python reused-process stats match fresh
controls exactly; tuning and synchronized timing sweeps pass. Two full
16-column JAX repeats log no new compilations. These comparisons do not
establish blanket BFB.

* Separate microphysics initialization fixes from case runners

Move native default resets to their own branch/PR and keep the runner focused
on shared runtime selection and full-case process reuse. Record the mixed-case
native test's dependency on that fix. Refresh the timing base and master,
and clarify runner, driver and test documentation under the current skills.

The shared checks pass, including output drainage, cancellation, synchronized
warmup/repetition barriers and CLI forwarding. Python AST checks confirm the
remaining audit edits change only documentation. Jenkins validation follows
this published checkpoint.

* Complete case-runner procedure descriptions

Describe the remaining changed CLI, test and profile routines under the current
documentation standards. Executable Python ASTs are unchanged from f66ccf2ff,
the revision running in Jenkins; existing validation still applies.

* Separate JAX timing from case runner changes

Keep runtime selection and process reuse independent so the case runner
can merge into master before JAX timing. Shared runner/CLI/timing
checks pass (445 tests, including provisional coverage).

* Add JAX timing after the case runner

Restore the audited wall-clock summaries and optional execution tracing
on top of the independent case runner. Keep the existing implementation
and review history while reversing the PR merge order.

* Add a JAX profiling option and viewer commands

Enable captures with -jax=profile and print commands after cleanup.
Keep capture export in the timer and viewing in view_profile.py.

181 focused checks pass. CPU BOMEX captures preserve numeric stats;
both viewers were verified in-browser. Large full-Python Perfetto
exports can truncate; XProf retained all five tested timesteps.

* Clarify JAX timing usage and cleanup

Document the timer lifecycle, failure handling and Dash wall-time comparison metric. Executable Python AST is unchanged.
</comment><date>2026-10-18 17:34:12 -0500</date><id>ec5e8070d3173282a6317b067f8673a657a1eb6f</id><msg>Add JAX timing and profiling (#1393)</msg><path><editType>add</editType><file>clubb_jax/src/CLUBB_core/code_timer_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/view_profile.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>16</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url></nextBuild><previousBuild><number>14</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url></previousBuild></lastCompletedBuild><lastFailedBuild _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12914478</buildingDurationMillis><executingTimeMillis>17330996</executingTimeMillis><executorUtilization>1.34</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>5636</waitingDurationMillis><waitingTimeMillis>5636</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>15</buildNumber><marked><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#15</displayName><duration>12914478</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #15</fullDisplayName><id>15</id><keepLog>false</keepLog><number>15</number><queueId>11023</queueId><result>FAILURE</result><timestamp>1792398368289</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-bit-changing/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><commitId>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</commitId><timestamp>1792344464000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Define when to declare bit-changing commits (#1403)

* Define conservative bit-change declarations

Centralize the policy around intentional Fortran numerical answer changes, with named affected BFB tests or precise untested conditions. Preserve standalone coverage and the current JAX parity boundary, keep declarations sparse, and separate answer-changing edits from preserving cleanup.

Route message writing, validation and branch finalization to one owner. Skill schemas, local links, heading anchors, parser examples and manual decision scenarios were checked; no model or CI code changes.

* Define the optimization level for bitwise preservation

Use -O0 as the normal preservation standard. Differences confined to optimized builds do not require an answer-change declaration when -O0 is verified BFB; report known optimized-only differences and their configuration in the PR.

The changed skill schema and whitespace checks pass. Inspected current debug compile flags and manually reviewed the optimized-only decision scenario; documentation only, no numerical rerun.
</comment><date>2026-10-18 12:27:44 -0500</date><id>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</id><msg>Define when to declare bit-changing commits (#1403)</msg><path><editType>edit</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-bit-changing/SKILL.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>utilities/clubb_case_runner.py</affectedPath><affectedPath>utilities/pytests/test_time_clubb.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</affectedPath><affectedPath>clubb_python_driver/clubb_standalone.py</affectedPath><affectedPath>src/clubb_standalone.F90</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>utilities/pytests/test_create_case_namelist.py</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>tests/case_runner_lifecycle_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-format/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_init_cleanup.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>utilities/timing_profiles.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>utilities/pytests/timing_test_inputs.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/calc_pressure.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>4f8368a377989b649fc0ed53c26957e193d21067</commitId><timestamp>1792350419000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add reusable case runners for timing (#1400)

We have multiple entry points now for clubb standalone (fortran,python,jax), and there's additional logic that chooses which fortran installation to use (gfortran,ifort,nvhpc,etc). All of this has historically (~1 year) been done by run_scm.py, but we have a number of other scripts that need this same kind of logic, so instead of making run_scm.py more complicated and letting other scripts import it's pieces, we've made a `clubb_case_runner`.

`clubb_case_runner` is a python object that abstracts the backend decisions. The "flow" is roughly:
- high level script wants to run a clubb case some how
- generates one or more case namelists (arm.in, bomex.in, etc)
- creates a `clubb_case_runner` by passing it whatever runtime options (-jax/-python/-exe) the user requested
- runs a case by passing this `clubb_case_runner` whatever namelists it wants to run.

In addition to deduplicating runtime setting logic, this allows python scripts to create these high level `clubb_case_runner` objects and use those to do things that usually requires duplicate multiprocessesing and error code parsing logic.
</comment><date>2026-10-18 14:06:59 -0500</date><id>4f8368a377989b649fc0ed53c26957e193d21067</id><msg>Add reusable case runners for timing (#1400)</msg><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>add</editType><file>utilities/pytests/timing_test_inputs.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>src/clubb_standalone.F90</file></path><path><editType>add</editType><file>tests/case_runner_lifecycle_test.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>edit</editType><file>utilities/timing_profiles.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_standalone.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>add</editType><file>utilities/clubb_case_runner.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-format/SKILL.md</file></path><path><editType>edit</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_init_cleanup.py</file></path><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/calc_pressure.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_create_case_namelist.py</file></path><path><editType>edit</editType><file>tests/run_timestep_sweep.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>clubb_jax/view_profile.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/code_timer_module.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><commitId>ec5e8070d3173282a6317b067f8673a657a1eb6f</commitId><timestamp>1792362852000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JAX timing and profiling (#1393)

* Add JAX timing and persistent benchmark workers

Write Fortran-format CPU timing summaries and optional XProf/Perfetto traces
from JAX driver phases. Use synchronized persistent workers for full-case
warmups and repetitions across Fortran, Python and JAX. Retain compiled JAX
programs when initialization settings are unchanged.

Validation: 243 focused checks and CPU case workflows passed. Repeated
five-step BOMEX/RICO_SILHS numeric outputs matched fresh controls exactly.
The two-column BOMEX JAX/Fortran comparison passed 1e-7 absolute and percent
thresholds. BFB against the parent is not established by these comparisons.
GPU and GPTL execution remain untested.

* Making jax timer use wall clock time instead of cpu/process time

* Keep JAX timing separate from reusable runners

Move process persistence, cache reuse and Python timing adapters to the
case-runner branch. Keep JAX wall-clock summaries, optional deep profiles,
driver instrumentation and the parser change that reads their clock label.

The timing-only shared suite and a three-step CPU BOMEX run pass. BFB
against master is not established; physics expressions are unchanged.

* Add reusable case runners for timing and tuning

Share runtime selection and persistent standalone sessions between SCM,
timing and tuning. Support namelist replacement and empty model reruns,
plus parameter matrices for loss sessions. Synchronize timing cohorts and
record retained-model initialization separately. Use executable loss
workers for native tuning instead of requiring F2PY.

Restore microphysics defaults between cases (BIT_CHANGING for sessions
that previously inherited settings). Short native/CPU JAX sessions match
fresh same-backend stats values exactly; broader BFB is not established.
Native build, focused suites and repeated loss/tuner/timing workflows pass.

* Use F2PY for reusable Fortran loss runs

Run persistent Fortran loss sessions through the existing Python API.
Restore the native loss standalone and remove its parameter namelist reader
and result writers. Python workers pass arrays directly into F2PY; ordinary
standalone persistence and JAX execution remain available.

Fifteen native loss metric arrays match saved results exactly. Native and
CPU JAX repeated loss/tuning workflows, tuner shutdown, the native build,
454 shared checks and four API checks pass. Broader BFB is not established.

* Keep case runners persistent without retaining model state

Run each ordinary request through full initialization, advancement and
cleanup while keeping the process alive for in-memory JIT reuse. Remove
retained-model commands, transport, timing/UI options and extra bindings.
Restore tuning and loss frontends to their existing allocation-reusing APIs.

The native build, 445 shared checks, 121 focused JAX checks and 85 Dash
checks pass. Short native/JAX/Python reused-process stats match fresh
controls exactly; tuning and synchronized timing sweeps pass. Two full
16-column JAX repeats log no new compilations. These comparisons do not
establish blanket BFB.

* Separate microphysics initialization fixes from case runners

Move native default resets to their own branch/PR and keep the runner focused
on shared runtime selection and full-case process reuse. Record the mixed-case
native test's dependency on that fix. Refresh the timing base and master,
and clarify runner, driver and test documentation under the current skills.

The shared checks pass, including output drainage, cancellation, synchronized
warmup/repetition barriers and CLI forwarding. Python AST checks confirm the
remaining audit edits change only documentation. Jenkins validation follows
this published checkpoint.

* Complete case-runner procedure descriptions

Describe the remaining changed CLI, test and profile routines under the current
documentation standards. Executable Python ASTs are unchanged from f66ccf2ff,
the revision running in Jenkins; existing validation still applies.

* Separate JAX timing from case runner changes

Keep runtime selection and process reuse independent so the case runner
can merge into master before JAX timing. Shared runner/CLI/timing
checks pass (445 tests, including provisional coverage).

* Add JAX timing after the case runner

Restore the audited wall-clock summaries and optional execution tracing
on top of the independent case runner. Keep the existing implementation
and review history while reversing the PR merge order.

* Add a JAX profiling option and viewer commands

Enable captures with -jax=profile and print commands after cleanup.
Keep capture export in the timer and viewing in view_profile.py.

181 focused checks pass. CPU BOMEX captures preserve numeric stats;
both viewers were verified in-browser. Large full-Python Perfetto
exports can truncate; XProf retained all five tested timesteps.

* Clarify JAX timing usage and cleanup

Document the timer lifecycle, failure handling and Dash wall-time comparison metric. Executable Python AST is unchanged.
</comment><date>2026-10-18 17:34:12 -0500</date><id>ec5e8070d3173282a6317b067f8673a657a1eb6f</id><msg>Add JAX timing and profiling (#1393)</msg><path><editType>add</editType><file>clubb_jax/src/CLUBB_core/code_timer_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/view_profile.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>16</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url></nextBuild><previousBuild><number>14</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url></previousBuild></lastFailedBuild><lastUnsuccessfulBuild _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>12914478</buildingDurationMillis><executingTimeMillis>17330996</executingTimeMillis><executorUtilization>1.34</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>5636</waitingDurationMillis><waitingTimeMillis>5636</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>15</buildNumber><marked><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><branch><SHA1>ec5e8070d3173282a6317b067f8673a657a1eb6f</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>false</building><displayName>#15</displayName><duration>12914478</duration><estimatedDuration>13433486</estimatedDuration><fullDisplayName>clubb_generalized_grid #15</fullDisplayName><id>15</id><keepLog>false</keepLog><number>15</number><queueId>11023</queueId><result>FAILURE</result><timestamp>1792398368289</timestamp><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/15/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.agents/skills/clubb-bit-changing/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-jax-port/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>.agents/skills/clubb-documentation/change-messages/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><commitId>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</commitId><timestamp>1792344464000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Define when to declare bit-changing commits (#1403)

* Define conservative bit-change declarations

Centralize the policy around intentional Fortran numerical answer changes, with named affected BFB tests or precise untested conditions. Preserve standalone coverage and the current JAX parity boundary, keep declarations sparse, and separate answer-changing edits from preserving cleanup.

Route message writing, validation and branch finalization to one owner. Skill schemas, local links, heading anchors, parser examples and manual decision scenarios were checked; no model or CI code changes.

* Define the optimization level for bitwise preservation

Use -O0 as the normal preservation standard. Differences confined to optimized builds do not require an answer-change declaration when -O0 is verified BFB; report known optimized-only differences and their configuration in the PR.

The changed skill schema and whitespace checks pass. Inspected current debug compile flags and manually reviewed the optimized-only decision scenario; documentation only, no numerical rerun.
</comment><date>2026-10-18 12:27:44 -0500</date><id>ccafe4f166f956eed26b91f7fdacd5600f60f5b2</id><msg>Define when to declare bit-changing commits (#1403)</msg><path><editType>edit</editType><file>.agents/skills/clubb-documentation/change-messages/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-jax-port/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>add</editType><file>.agents/skills/clubb-bit-changing/SKILL.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>utilities/clubb_case_runner.py</affectedPath><affectedPath>utilities/pytests/test_time_clubb.py</affectedPath><affectedPath>tests/run_timestep_sweep.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</affectedPath><affectedPath>clubb_python_driver/clubb_standalone.py</affectedPath><affectedPath>src/clubb_standalone.F90</affectedPath><affectedPath>tests/README.md</affectedPath><affectedPath>run_scripts/run_scm_loss.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>utilities/create_case_namelist.py</affectedPath><affectedPath>utilities/pytests/test_create_case_namelist.py</affectedPath><affectedPath>tests/run_stats_output_consistency.py</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-port/SKILL.md</affectedPath><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>tests/case_runner_lifecycle_test.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>.agents/skills/clubb-numerical-diagnosis/SKILL.md</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</affectedPath><affectedPath>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</affectedPath><affectedPath>run_scripts/run_scm.py</affectedPath><affectedPath>.agents/skills/clubb-fortran-format/SKILL.md</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>AGENTS.md</affectedPath><affectedPath>clubb_jax/src/Microphys/microphys_init_cleanup.py</affectedPath><affectedPath>jenkins_tests/clubb_driver/Jenkinsfile</affectedPath><affectedPath>utilities/timing_profiles.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>run_scripts/run_tuner_job.py</affectedPath><affectedPath>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</affectedPath><affectedPath>tests/run_restart_test.py</affectedPath><affectedPath>utilities/pytests/timing_test_inputs.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/calc_pressure.py</affectedPath><affectedPath>tests/run_loss_output_consistency.py</affectedPath><commitId>4f8368a377989b649fc0ed53c26957e193d21067</commitId><timestamp>1792350419000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add reusable case runners for timing (#1400)

We have multiple entry points now for clubb standalone (fortran,python,jax), and there's additional logic that chooses which fortran installation to use (gfortran,ifort,nvhpc,etc). All of this has historically (~1 year) been done by run_scm.py, but we have a number of other scripts that need this same kind of logic, so instead of making run_scm.py more complicated and letting other scripts import it's pieces, we've made a `clubb_case_runner`.

`clubb_case_runner` is a python object that abstracts the backend decisions. The "flow" is roughly:
- high level script wants to run a clubb case some how
- generates one or more case namelists (arm.in, bomex.in, etc)
- creates a `clubb_case_runner` by passing it whatever runtime options (-jax/-python/-exe) the user requested
- runs a case by passing this `clubb_case_runner` whatever namelists it wants to run.

In addition to deduplicating runtime setting logic, this allows python scripts to create these high level `clubb_case_runner` objects and use those to do things that usually requires duplicate multiprocessesing and error code parsing logic.
</comment><date>2026-10-18 14:06:59 -0500</date><id>4f8368a377989b649fc0ed53c26957e193d21067</id><msg>Add reusable case runners for timing (#1400)</msg><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm.py</file></path><path><editType>add</editType><file>utilities/pytests/timing_test_inputs.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>utilities/create_case_namelist.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>src/clubb_standalone.F90</file></path><path><editType>add</editType><file>tests/case_runner_lifecycle_test.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_case_cache_reuse.py</file></path><path><editType>edit</editType><file>jenkins_tests/clubb_driver/Jenkinsfile</file></path><path><editType>edit</editType><file>utilities/pytests/auto_llm_generated_pytests/test_loss_cli.py</file></path><path><editType>edit</editType><file>utilities/timing_profiles.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_standalone.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-numerical-diagnosis/SKILL.md</file></path><path><editType>edit</editType><file>AGENTS.md</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-port/SKILL.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>run_scripts/run_tuner_job.py</file></path><path><editType>add</editType><file>utilities/clubb_case_runner.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-fortran-format/SKILL.md</file></path><path><editType>edit</editType><file>tests/pytests/auto_llm_generated_pytests/test_scm_jax_driver_test.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/src/Microphys/microphys_init_cleanup.py</file></path><path><editType>edit</editType><file>tests/run_stats_output_consistency.py</file></path><path><editType>edit</editType><file>run_scripts/run_scm_loss.py</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_clubb_case_runner.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/calc_pressure.py</file></path><path><editType>edit</editType><file>tests/README.md</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>tests/run_loss_output_consistency.py</file></path><path><editType>edit</editType><file>tests/run_restart_test.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>utilities/pytests/auto_llm_generated_pytests/test_timing_workers.py</file></path><path><editType>edit</editType><file>utilities/pytests/test_create_case_namelist.py</file></path><path><editType>edit</editType><file>tests/run_timestep_sweep.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/clubb_case_initalization.py</affectedPath><affectedPath>clubb_jax/src/clubb_standalone.py</affectedPath><affectedPath>utilities/README.md</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</affectedPath><affectedPath>clubb_jax/src/clubb_loss_driver.py</affectedPath><affectedPath>run_scripts/README.md</affectedPath><affectedPath>clubb_jax/view_profile.py</affectedPath><affectedPath>clubb_jax/run_jax.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/code_timer_module.py</affectedPath><affectedPath>utilities/time_clubb.py</affectedPath><affectedPath>clubb_jax/src/advance_clubb_to_end.py</affectedPath><affectedPath>clubb_jax/src/clubb_driver_test.py</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><commitId>ec5e8070d3173282a6317b067f8673a657a1eb6f</commitId><timestamp>1792362852000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Add JAX timing and profiling (#1393)

* Add JAX timing and persistent benchmark workers

Write Fortran-format CPU timing summaries and optional XProf/Perfetto traces
from JAX driver phases. Use synchronized persistent workers for full-case
warmups and repetitions across Fortran, Python and JAX. Retain compiled JAX
programs when initialization settings are unchanged.

Validation: 243 focused checks and CPU case workflows passed. Repeated
five-step BOMEX/RICO_SILHS numeric outputs matched fresh controls exactly.
The two-column BOMEX JAX/Fortran comparison passed 1e-7 absolute and percent
thresholds. BFB against the parent is not established by these comparisons.
GPU and GPTL execution remain untested.

* Making jax timer use wall clock time instead of cpu/process time

* Keep JAX timing separate from reusable runners

Move process persistence, cache reuse and Python timing adapters to the
case-runner branch. Keep JAX wall-clock summaries, optional deep profiles,
driver instrumentation and the parser change that reads their clock label.

The timing-only shared suite and a three-step CPU BOMEX run pass. BFB
against master is not established; physics expressions are unchanged.

* Add reusable case runners for timing and tuning

Share runtime selection and persistent standalone sessions between SCM,
timing and tuning. Support namelist replacement and empty model reruns,
plus parameter matrices for loss sessions. Synchronize timing cohorts and
record retained-model initialization separately. Use executable loss
workers for native tuning instead of requiring F2PY.

Restore microphysics defaults between cases (BIT_CHANGING for sessions
that previously inherited settings). Short native/CPU JAX sessions match
fresh same-backend stats values exactly; broader BFB is not established.
Native build, focused suites and repeated loss/tuner/timing workflows pass.

* Use F2PY for reusable Fortran loss runs

Run persistent Fortran loss sessions through the existing Python API.
Restore the native loss standalone and remove its parameter namelist reader
and result writers. Python workers pass arrays directly into F2PY; ordinary
standalone persistence and JAX execution remain available.

Fifteen native loss metric arrays match saved results exactly. Native and
CPU JAX repeated loss/tuning workflows, tuner shutdown, the native build,
454 shared checks and four API checks pass. Broader BFB is not established.

* Keep case runners persistent without retaining model state

Run each ordinary request through full initialization, advancement and
cleanup while keeping the process alive for in-memory JIT reuse. Remove
retained-model commands, transport, timing/UI options and extra bindings.
Restore tuning and loss frontends to their existing allocation-reusing APIs.

The native build, 445 shared checks, 121 focused JAX checks and 85 Dash
checks pass. Short native/JAX/Python reused-process stats match fresh
controls exactly; tuning and synchronized timing sweeps pass. Two full
16-column JAX repeats log no new compilations. These comparisons do not
establish blanket BFB.

* Separate microphysics initialization fixes from case runners

Move native default resets to their own branch/PR and keep the runner focused
on shared runtime selection and full-case process reuse. Record the mixed-case
native test's dependency on that fix. Refresh the timing base and master,
and clarify runner, driver and test documentation under the current skills.

The shared checks pass, including output drainage, cancellation, synchronized
warmup/repetition barriers and CLI forwarding. Python AST checks confirm the
remaining audit edits change only documentation. Jenkins validation follows
this published checkpoint.

* Complete case-runner procedure descriptions

Describe the remaining changed CLI, test and profile routines under the current
documentation standards. Executable Python ASTs are unchanged from f66ccf2ff,
the revision running in Jenkins; existing validation still applies.

* Separate JAX timing from case runner changes

Keep runtime selection and process reuse independent so the case runner
can merge into master before JAX timing. Shared runner/CLI/timing
checks pass (445 tests, including provisional coverage).

* Add JAX timing after the case runner

Restore the audited wall-clock summaries and optional execution tracing
on top of the independent case runner. Keep the existing implementation
and review history while reversing the PR merge order.

* Add a JAX profiling option and viewer commands

Enable captures with -jax=profile and print commands after cleanup.
Keep capture export in the timer and viewing in view_profile.py.

181 focused checks pass. CPU BOMEX captures preserve numeric stats;
both viewers were verified in-browser. Large full-Python Perfetto
exports can truncate; XProf retained all five tested timesteps.

* Clarify JAX timing usage and cleanup

Document the timer lifecycle, failure handling and Dash wall-time comparison metric. Executable Python AST is unchanged.
</comment><date>2026-10-18 17:34:12 -0500</date><id>ec5e8070d3173282a6317b067f8673a657a1eb6f</id><msg>Add JAX timing and profiling (#1393)</msg><path><editType>add</editType><file>clubb_jax/src/CLUBB_core/code_timer_module.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_profile_cli.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_case_initalization.py</file></path><path><editType>edit</editType><file>utilities/README.md</file></path><path><editType>edit</editType><file>clubb_jax/src/advance_clubb_to_end.py</file></path><path><editType>add</editType><file>clubb_jax/view_profile.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_driver_test.py</file></path><path><editType>edit</editType><file>utilities/time_clubb.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_code_timer_module.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_standalone.py</file></path><path><editType>edit</editType><file>run_scripts/README.md</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_device_selection.py</file></path><path><editType>edit</editType><file>clubb_jax/run_jax.py</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_jax_cli_options.py</file></path><path><editType>edit</editType><file>clubb_jax/src/clubb_loss_driver.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><inProgress>false</inProgress><nextBuild><number>16</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/16/</url></nextBuild><previousBuild><number>14</number><url>https://carson.math.uwm.edu/jenkins/job/clubb_generalized_grid/14/</url></previousBuild></lastUnsuccessfulBuild><nextBuildNumber>17</nextBuildNumber><property _class='org.bstick12.jenkinsci.plugins.leastload.LeastLoadDisabledProperty'></property><property _class='org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty'></property><property _class='org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty'></property><concurrentBuild>false</concurrentBuild><disabled>false</disabled><inQueue>false</inQueue><resumeBlocked>false</resumeBlocked></workflowJob>