What's Changed
🚨 Breaking Changes
- ci(pr): gate builds on changed-files and broaden safe exclusions by @rgsl888prabhu in #1118
- Migrate RMM usage to CCCL MR design by @bdice in #1035
- Fold libmps_parser into libcuopt by @mlubin in #1193
🐛 Bug Fixes
- Add missing thrust headers across C++ sources by @bdice in #997
- Update sonarcube host link to Nvidia by @rgsl888prabhu in #1015
- Require openssl so that conda verson is found before system lib by @hlinsen in #1084
- fix(cuda_helpers): clear sticky error and avoid cache poisoning in set_shmem_of_kernel by @np96 in #1095
- Fix double va_start undefined behavior in error handling by @rgsl888prabhu in #1086
- Fixed lower bound in single thread mode by @nguidotti in #1111
- test(c_api): skip flaky TimeLimitTestFixture MIP case (#1135) by @rgsl888prabhu in #1136
- Replace flaky determinism test by @aliceb-nv in #1141
- Use fp64 for all node stack buffers and fix indexing in vehicle order match test by @hlinsen in #1137
- fix(benchmarks): drop removed rmm owning_wrapper; build in CI by @rgsl888prabhu in #1143
- Fix loose tolerances in the objective function integrality detection by @aliceb-nv in #1148
- ci(docker): pin all first-party cuOpt wheels to CUOPT_VER by @rgsl888prabhu in #1157
- Fix CI crash on RTX6000 by @nguidotti in #1184
- miplib_test: allow tiny error on objective equality by @mlubin in #1199
- Fix concurrent LP exception cleanup by @mlubin in #1206
- Allow nested parallel regions for determinism mode by @nguidotti in #1201
- Fix destruction order in solve.cu by @mlubin in #1216
- Fix by-reference capture of local variable in solve.cu by @mlubin in #1214
- Fix route priority sort indexing by @bdice in #1222
- Drop constness in raft handle for
data_model_view_t(routing) by @nguidotti in #1241 - Fix lost nodes in branch and bound by @hlinsen in #1138
- Fix vehicle fixed cost accounting in fragment-vs-route deltas by @mlubin in #1244
- Fix an out of bounds access error by @rg20 in #1245
- Fix a bug in dual variables and reduced costs when we add implied bounds on free variables by @chris-maes in #1237
- Cuda graph replays on capture error by @akifcorduk in #1253
- Fix accidentally quadratic add_slacks_to_basis in crossover by @nguidotti in #1268
- Replace constant FJ settings with per-instance device_scalar by @mlubin in #1284
- Stabilize logger config in LP BatchSolve and version logging by @mlubin in #1286
- Add extra numerical guards for flow cover cuts by @aliceb-nv in #1316
- Fix broken sample.mps download link in server LP examples docs by @rgsl888prabhu in #1358
- Fix for maximization problems with quadratic constraints by @chris-maes in #1377
- Use 26.6 (not 26.06) in README pip install commands by @rgsl888prabhu in #1380
📖 Documentation
- Tweak testing instructions in CONTRIBUTING.md by @mlubin in #1000
- Exclude L1TESTs from contributing instructions by @mlubin in #1034
- CONTRIBUTING.md: Recommend local conda environments by @mlubin in #1085
- docs(readme): use py3.13 docker tags (py3.14 not supported) by @rgsl888prabhu in #1112
- Fix typo in Constraint docstring by @mlubin in #1113
- update mip scaling doc by @Iroy30 in #1121
- docs: migrate support link to GitHub Discussions; tidy doc links by @rgsl888prabhu in #1144
- Add VRP dimension developer skill by @rg20 in #1233
- Fix for cuDSS 0.8; remove incorrect presolve docs in cuopt_cli by @chris-maes in #1353
- Update LP/QP/MILP docs to cover 26.06 API additions by @rg20 in #1339
- docs: add 26.06 release notes and updates to docs by @rgsl888prabhu in #1294
- Mark MILP as beta; add QCQP and SOCP to README by @rgsl888prabhu in #1384
🚀 New Features
- Add semi continuous variables support by @hlinsen in #1096
- Extend batch pdlp support by @Kh4ster in #1152
- Implement python and C api for semi-continuous variables by @hlinsen in #1225
- Add LP format reader; accept .lp wherever .mps is accepted by @mlubin in #1120
- Detect MIP symmetry using dejavu; Perform orbital fixing and lexical reduction by @chris-maes in #1103
- Implement C APIs for adding quadratic objectives and constraints by @rg20 in #1247
- Add flow cover cuts at root by @hlinsen in #1178
- Extend the barrier solver for Second-Order Cone Programming (SOCP) by @chris-maes in #1290
- add QCQP support for grpc by @tmckayus in #1320
🛠️ Improvements
- Main merge release/26.04 by @rgsl888prabhu in #998
- Update versions1.json as part of version bump by @AyodeAwe in #1004
- Main merge release/26.04 1 by @rgsl888prabhu in #1005
- Make infra team as default code owner to any files which are not specifically added to a particular group by @rgsl888prabhu in #1013
- Bump libcuopt size by 5 mb by @rgsl888prabhu in #1016
- Main merge release/26.04 2 by @rgsl888prabhu in #1040
- Bump libcuopt wheel size by @rgsl888prabhu in #1087
- Replace strtok with thread-safe strtok_r in MPS parser by @rgsl888prabhu in #1088
- Update to clang 20.1.8 by @bdice in #1090
- bump nightly test to 26.06 by @rgsl888prabhu in #1091
- Fix duplicate libmps_parser.so in libcuopt wheel by @rgsl888prabhu in #1092
- fix(security): remove insecure SSL verification bypass in dataset downloaders by @rgsl888prabhu in #1108
- Latency reductions for concurrent mode by @srib in #1083
- Add CTest labels for selective C++ test execution by @rgsl888prabhu in #1102
- Improve developer skill with Python bindings, contribution workflow, and agent rules by @rgsl888prabhu in #1106
- fix: add retry logic and error handling to dataset download scripts by @rgsl888prabhu in #1116
- Update build and test skills by @mlubin in #1127
- ci: bump C++ test timeout from 40m to 50m by @rgsl888prabhu in #1130
- docs: add entry points for more AI coding agents (Copilot, Cline, Windsurf, Jules, Aider) by @rgsl888prabhu in #1129
- Conditional build for remote execution by @nguidotti in #1128
- Mark L1 tests as disabled by @mlubin in #1126
- Rename .cursor to .agents for codex support by @hlinsen in #1124
- docs: replace routing notebook with Python example and drop notebook support by @rgsl888prabhu in #1125
- Improve C++ error handling, resource cleanup, and API return checks by @rgsl888prabhu in #1089
- ci(images): bump docker CUDA to 13.1.0 and Python to 3.14.1 by @rgsl888prabhu in #1123
- ci: assign benchmarks/ to engine codeowners by @rgsl888prabhu in #1142
- add a scriptlet to put cuopt_grpc_server on the default path by @tmckayus in #1100
- ci: refine CodeRabbit review guide to match cuOpt idioms by @rgsl888prabhu in #1139
- build: make docs build opt-in from build.sh by @rgsl888prabhu in #1145
- Add QCMATRIX: parsing and quadratic-constraint model by @yuwenchen95 in #1105
- Replace custom span with std::span by @mlubin in #1164
- skill-evolution: scoped removal and references/ size escape hatch by @rgsl888prabhu in #1160
- skill-evolution: add writing style guidance by @rgsl888prabhu in #1159
- skill-evolution: drop inline provenance markers by @rgsl888prabhu in #1161
- skill-evolution: add thrash-before-landing trigger by @rgsl888prabhu in #1162
- Add initial skill evaluation dataset for cuopt-developer by @rgsl888prabhu in #1167
- ci(pr): exclude skills//evals/ from test-trigger filters by @rgsl888prabhu in #1170
- Add flaky test detection, retry, crash isolation, and nightly reporting by @rgsl888prabhu in #1098
- skill-evolution: collapse three-phase model to single workflow by @rgsl888prabhu in #1163
- mps_parser: switch ptr+size setters to std::span on mps_data_model_t by @mlubin in #1171
- ci(pr): skip build/test jobs for ci/docker-only changes by @rgsl888prabhu in #1158
- Add skill evaluation dataset for cuopt-installation-developer by @rgsl888prabhu in #1169
- Strip skill-evolution HTML comment markers from SKILL.md files by @rgsl888prabhu in #1174
- Add skill evaluation dataset for cuopt-lp-milp-api-python by @rgsl888prabhu in #1172
- ci: forward CUOPT_SLACK_MENTION_ID secret to nightly-summary by @rgsl888prabhu in #1182
- Unified pseudocost object for the regular and deterministic mode by @nguidotti in #1020
- ci(nightly): set fail-fast: false on the build matrix by @rgsl888prabhu in #1186
- Combine formulation and API skills into numerical-optimization skill family by @rgsl888prabhu in #1183
- ci: format CUOPT_SLACK_MENTION_ID as subteam when ID starts with S by @rgsl888prabhu in #1187
- ci(thirdparty-pulp): skip test_numpy_float in nightly cuOpt run by @rgsl888prabhu in #1190
- Unified threading model in MIP solver by @nguidotti in #1099
- Improve cuopt-developer skill content and sibling-skill routing by @rgsl888prabhu in #1176
- Combine installation user skills into cuopt-install by @rgsl888prabhu in #1189
- Remove installation restrictions from AGENTS.md by @mlubin in #1200
- fix(ci): resolve all zizmor findings and add zizmor pre-commit checks by @gforsyth in #1181
- ci: surface crashed-test failures and add per-step summaries (cpp, python, thirdparty) by @rgsl888prabhu in #1191
- evals: add eval suite for cuopt-install skill by @rgsl888prabhu in #1205
- Run CPUFJ bursts at the root by @aliceb-nv in #1179
- Disable flaky swath1 incumbent callback tests by @mlubin in #1208
- Reduce memory footprint of cuPDLPx by @Bubullzz in #1153
- Minimize Ubuntu Boost dependencies by @bdice in #1165
- Require CMake 4.0 by @KyleFromNVIDIA in #1210
- fix NodeInfo assert message by @aycsi in #1218
- ci: split build.yaml concurrency group by build_type by @rgsl888prabhu in #1211
- Build and test with CUDA 13.2.0 by @bdice in #1198
- Skip optionally the cost matrix validation check by @hlinsen in #1217
- skill: tighten PR-description and CI-authoring guidance for agents by @rgsl888prabhu in #1224
- CI: suppress shell:S4830 false positive and scope GHA permissions to job level by @rgsl888prabhu in #1229
- sonarqube: auto-detect newest CUDA env file per branch by @rgsl888prabhu in #1236
- Revert temporary CUDA 13.2 branch changes by @bdice in #1238
- Reduce QP overheads by @rg20 in #1140
- skills: add NVIDIA-signed skill cards and signatures (partial set) by @rgsl888prabhu in #1249
- Deprecate LP batch solve across Python, server, and docs by @anandhkb in #915
- Update lp testing by @Iroy30 in #1110
- ci: add NVSkills CI request workflow by @rgsl888prabhu in #1243
- Declare defaulted move ops noexcept (SonarQube BLOCKER cpp:S5018) by @rgsl888prabhu in #1227
- Dual simplex performance improvements by @chris-maes in #1043
- Add new solver setting CUOPT_MIP_PROBING and separate it from presolve by @akifcorduk in #1257
- Replaced SpMV with SpMVOp in PDHG for double precision by @Bubullzz in #1226
- Add
node_limitsetting for MIPs by @nguidotti in #1234 - ci: fix mangled python image tag on release/26.06 by @rgsl888prabhu in #1269
- Make mip_node_t destructor exception-safe (SonarQube CRIT BUG cpp:S1048) by @rgsl888prabhu in #1230
- Fix MAJOR SonarQube bugs: mps_parser signed/unsigned compare and example init by @rgsl888prabhu in #1235
- Follow-up for LP format by @Iroy30 in #1251
- Migrates concurrent root LP to OpenMP by @nguidotti in #1291
- build gRPC against OpenSSL 3 by @tmckayus in #1188
- io: dlopen libbz2 by versioned SONAME, not unversioned symlink by @rgsl888prabhu in #1297
- add mip start attribute by @Iroy30 in #1305
- add code generation for grpc boilerplate conversions by @tmckayus in #1107
- Detect when MIP objectives must move in discrete steps. Tighten the dual bound using this info. by @chris-maes in #1239
- Improve TSP with different vehicle start/end locations by @hlinsen in #1254
- skip CuPy 14.1.0 by @jameslamb in #1322
- B&B with Local Heaps by @nguidotti in #1149
- Add ability to influence the objective gap for SOCP problems by @chris-maes in #1357
- Bump libcudss version to 0.8 by @rgsl888prabhu in #1365
- Add support for general convex quadratic constraints (x^T Q x + c^T x… by @chris-maes in #1361
- Ceil cuDSS to >=0.7,<0.8 by @rgsl888prabhu in #1371
New Contributors
- @np96 made their first contribution in #1095
- @srib made their first contribution in #1083
- @yuwenchen95 made their first contribution in #1105
- @Bubullzz made their first contribution in #1153
- @aycsi made their first contribution in #1218
Full Changelog: v26.06.00a...v26.06.00