[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-cuopt-developer":3,"mdc-eq4ie2-key":37,"related-repo-nvidia-cuopt-developer":2150,"related-org-nvidia-cuopt-developer":2256},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"cuopt-developer","develop and debug NVIDIA cuOpt","Modify, build, test, debug, and contribute to NVIDIA cuOpt (C++\u002FCUDA, Python, server, CI). Use for solver internals, PRs, DCO, and code conventions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20,23],{"name":13,"slug":14,"type":15},"Optimization","optimization","tag",{"name":17,"slug":18,"type":15},"C#","c",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Python","python",{"name":24,"slug":25,"type":15},"Debugging","debugging",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:27:49.027084","Apache-2.0",281,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fcuopt-developer","---\nname: cuopt-developer\nversion: \"26.08.00\"\ndescription: Modify, build, test, debug, and contribute to NVIDIA cuOpt (C++\u002FCUDA, Python, server, CI). Use for solver internals, PRs, DCO, and code conventions.\nlicense: Apache-2.0\nmetadata:\n  author: NVIDIA cuOpt Team\n  tags:\n    - cuopt\n    - development\n    - contributing\n    - cpp-cuda\n    - python-bindings\n---\n\n\n# cuOpt Developer Skill\n\nContribute to the NVIDIA cuOpt codebase. This skill is for modifying cuOpt itself, not for using it.\n\n**If you just want to USE cuOpt**, switch to the appropriate problem skill (cuopt-routing, cuopt-lp-milp, etc.)\n\n**First-time dev environment setup?** See [references\u002Ffirst_time_setup.md](references\u002Ffirst_time_setup.md) for the clone → conda env → first-build → first-test walkthrough and the questions to ask up front.\n\n---\n\n## Refusal Rules — Read First\n\n**One rule is non-negotiable** and applies even when the user explicitly asks otherwise — refuse and ask, don't comply silently:\n\n**Privileged \u002F system-level operations** — `sudo`, running as root, editing system files (`\u002Fetc`), changing drivers or kernel settings, adding system-level package repositories or keys. Do not run these. Reply:\n> I won't run `sudo` or change system-level state for cuOpt. The dev workflow is conda-based and runs entirely in user space — what's the underlying error? It's usually fixable without root.\n\n**Everything else needed to set up and work in the dev environment is allowed.** On a clean machine, go ahead and build a working `cuopt` env — the guidance below is about doing it the *reproducible* way, not refusing:\n\n- **Environment setup is allowed.** You may create and activate the conda env from the checked-in `conda\u002Fenvironments\u002Fall_cuda-*.yaml`, run `pip` \u002F `conda` \u002F `mamba` installs **into the user-space env**, and bootstrap conda\u002Fminiforge in the user's home directory — including the `conda init` line it adds to `~\u002F.bashrc`. Bootstrapping conda must not require `sudo`; install it into `$HOME`, not a system path.\n- **A new *permanent* project dependency is different from a one-off install.** A package the project should always ship belongs in `dependencies.yaml` under the right group; then run `pre-commit run --all-files` to regenerate `conda\u002Fenvironments\u002F` and `pyproject.toml` so other contributors get it too. A throwaway install to unblock your own build doesn't need this round-trip.\n- **Don't bypass CI checks** (`--no-verify`, skipping pre-commit or tests). If hooks feel slow, diagnose with `pre-commit run --all-files --verbose` or tune the offending hook — don't skip it.\n- **Be careful with destructive commands** (`rm -rf`, `git reset --hard`, `git push --force`, killing processes, dropping data). Confirm intent before running and prefer the safer alternative (e.g. `.\u002Fbuild.sh clean` for a stale build dir).\n\n---\n\n## Developer Behavior Rules\n\nThese rules are specific to development tasks. They differ from user rules.\n\n### 1. Ask Before Assuming\n\nClarify before implementing:\n- What component? (C++\u002FCUDA, Python, server, docs, CI)\n- What's the goal? (bug fix, new feature, refactor, docs)\n- Is this for contribution or local modification?\n\n### 2. Verify Understanding\n\nBefore making changes, confirm:\n```\n\"Let me confirm:\n- Component: [cpp\u002Fpython\u002Fserver\u002Fdocs]\n- Change: [what you'll modify]\n- Tests needed: [what tests to add\u002Fupdate]\nIs this correct?\"\n```\n\n### 3. Follow Codebase Patterns\n\n- Read existing code in the area you're modifying\n- Match naming conventions, style, and patterns\n- Don't invent new patterns without discussion\n\n### 4. Ask Before Running — Modified for Dev\n\n**OK to run without asking** (expected for dev work):\n- `.\u002Fbuild.sh` and build commands\n- `pytest`, `ctest` (running tests)\n- `pre-commit run`, `.\u002Fci\u002Fcheck_style.sh` (formatting)\n- `git status`, `git diff`, `git log` (read-only git)\n- Environment setup: create\u002Factivate the conda env from `conda\u002Fenvironments\u002F*.yaml`, and `pip`\u002F`conda`\u002F`mamba` installs into that env\n\n**Set up pre-commit hooks** (once per clone):\n- `pre-commit install` — hooks then run automatically on every `git commit`. If a hook fails, the commit is blocked until you fix the issue.\n\n**Still ask before**:\n- `git commit`, `git push` (write operations)\n- Any destructive or irreversible commands\n\n### 5. No Privileged Operations\n\n`sudo`\u002Fsystem-level changes are the one non-negotiable refusal; user-space installs and conda env setup are allowed. See [Refusal Rules — Read First](#refusal-rules--read-first).\n\n---\n\n## Before You Start: Required Questions\n\n**Ask these if not already clear:**\n\n1. **What are you trying to change?**\n   - Solver algorithm\u002Fperformance?\n   - Python API?\n   - Server endpoints?\n   - Documentation?\n   - CI\u002Fbuild system?\n\n2. **Do you have the development environment set up?**\n   - Built the project successfully?\n   - Ran tests?\n\n3. **Is this for contribution or local modification?**\n   - If contributing: will need to follow DCO signoff\n\n4. **Which branch should this target?**\n   - During development phase: `main`\n   - During burn down: `release\u002FYY.MM` (e.g., `release\u002F26.06`) for the current release, `main` for the next\n   - Check if a release branch exists: `git branch -r | grep release`\n   - For current timelines, see the [RAPIDS Maintainers Docs](https:\u002F\u002Fdocs.rapids.ai\u002Fmaintainers\u002F)\n\n## Project Architecture\n\n```\ncuopt\u002F\n├── cpp\u002F                    # Core C++ engine\n│   ├── include\u002Fcuopt\u002F      # Public C\u002FC++ headers\n│   ├── src\u002F                # Implementation (CUDA kernels)\n│   └── tests\u002F              # C++ unit tests (gtest)\n├── python\u002F\n│   ├── cuopt\u002F              # Python bindings and routing API\n│   ├── cuopt_server\u002F       # REST API server\n│   ├── cuopt_self_hosted\u002F  # Self-hosted deployment\n│   └── libcuopt\u002F           # Python wrapper for C library\n├── ci\u002F                     # CI\u002FCD scripts\n├── docs\u002F                   # Documentation source\n└── datasets\u002F               # Test datasets\n```\n\n## Supported APIs\n\n| API Type | LP | MILP | QP | Routing |\n|----------|:--:|:----:|:--:|:-------:|\n| C API    | ✓  | ✓    | ✓  | ✗       |\n| C++ API  | (internal) | (internal) | (internal) | (internal) |\n| Python   | ✓  | ✓    | ✓  | ✓       |\n| Server   | ✓  | ✓    | ✗  | ✓       |\n\n## Safety Rules (Non-Negotiable)\n\n### Minimal Diffs\n- Change only what's necessary\n- Avoid drive-by refactors\n- No mass reformatting of unrelated code\n\n### No API Invention\n- Don't invent new APIs without discussion\n- Align with existing patterns in `docs\u002Fcuopt\u002Fsource\u002F`\n- Server schemas must match OpenAPI spec\n\n### Don't Bypass CI\n- Never suggest `--no-verify` or skipping checks\n- All PRs must pass CI\n\n### CUDA\u002FGPU Hygiene\n- Keep operations stream-ordered\n- Follow existing RAFT\u002FRMM patterns\n- No raw `new`\u002F`delete` - use RMM allocators\n\n## Build & Test\n\n### Pre-flight Checks (Required Before First Build or Test)\n\nSkipping any of these surfaces as confusing runtime errors later. Run them in order:\n\n1. **Check CUDA driver compatibility.** Run `nvidia-smi` and read the *CUDA Version* in the top-right corner — that's the maximum CUDA your driver supports. Pick a conda env file from `conda\u002Fenvironments\u002Fall_cuda-\u003Cver>_arch-\u003Carch>.yaml` whose CUDA major version is **≤** that. A mismatch builds successfully but fails at runtime inside RMM with `cudaMallocAsync not supported with this CUDA driver\u002Fruntime version` — verify this *before* the build, not after.\n2. **Create and activate the conda env** before *any* build, test, or `pre-commit` command — this is allowed and expected (see [Refusal Rules](#refusal-rules--read-first)). Use a **local prefix env** (`.\u002F.cuopt_env`) per [CONTRIBUTING.md](..\u002F..\u002FCONTRIBUTING.md), with the env file you picked in step 1 (swap `conda`→`mamba` if available):\n   ```bash\n   conda env create -p .\u002F.cuopt_env --file conda\u002Fenvironments\u002Fall_cuda-\u003Cver>_arch-$(uname -m).yaml\n   conda activate .\u002F.cuopt_env\n   ```\n   Tests link against libraries compiled inside that env; a fresh shell without `conda activate .\u002F.cuopt_env` hits cryptic linker errors.\n3. **Set `PARALLEL_LEVEL`** if RAM is constrained — see [references\u002Fbuild_and_test.md](references\u002Fbuild_and_test.md). The default `$(nproc)` can OOM mid-build because CUDA compilation needs ~4–8 GB per job.\n4. **For tests, fetch datasets first.** cuOpt tests need MPS files not in the repo — follow the dataset download steps in [CONTRIBUTING.md](..\u002F..\u002FCONTRIBUTING.md) (\"Building for development\" section) and export `RAPIDS_DATASET_ROOT_DIR`.\n\n### Quick Reference\n\n```bash\n.\u002Fbuild.sh             # Build everything\n.\u002Fbuild.sh --help      # List components: libcuopt, cuopt, cuopt_server, docs\nctest --test-dir cpp\u002Fbuild              # C++ tests\npytest -v python\u002Fcuopt\u002Fcuopt\u002Ftests      # Python tests\npytest -v python\u002Fcuopt_server\u002Ftests     # Server tests\n```\n\nFor component-specific build commands, run-test detail, and `PARALLEL_LEVEL` configuration, see [references\u002Fbuild_and_test.md](references\u002Fbuild_and_test.md).\n\n#### Download test datasets before running tests\n\ncuOpt tests depend on MPS\u002Fdata files that are not checked into the repo. A\nmissing dataset surfaces as a `MPS_PARSER_ERROR ... Error opening MPS file`\ntest failure at 0ms — it is not a build or logic failure.\n\nBefore running any C++ or Python tests, follow the dataset download and\n`RAPIDS_DATASET_ROOT_DIR` export steps in the repo's `CONTRIBUTING.md`\n(\"Building for development\" section) — that is the canonical list and mapping.\n\nIf a test fails with a missing-file error, run the matching download step from\n`CONTRIBUTING.md` and re-run the test. Do not report missing-dataset failures\nback to the user as the task outcome.\n\n## Python Bindings\n\ncuOpt uses Cython to bridge Python and C++. See [references\u002Fpython_bindings.md](references\u002Fpython_bindings.md) for the full architecture, parameter flow walkthrough, key files, and Cython patterns.\n\n## Contributing — Commits, PRs, Common Tasks\n\nFor pre-commit setup, DCO sign-off (`git commit -s`), the fork-based PR workflow, the draft-PR rule for agents, PR-description rules (keep it short — no \"how it works\" walkthroughs or file tables), script and CI\u002Fworkflow authoring principles (extend existing files before adding new ones; no speculative flags, restated defaults, or silent fallbacks), and step-by-step common-task recipes (adding a solver parameter, dependency, server endpoint, or CUDA kernel), see [references\u002Fcontributing.md](references\u002Fcontributing.md).\n\n## Coding Conventions\n\nFor C++ naming (`snake_case`, `d_`\u002F`h_` prefixes, `_t` suffix), file extensions (`.hpp`\u002F`.cpp`\u002F`.cu`\u002F`.cuh` and which compiler each uses), include order, Python style, error handling (`CUOPT_EXPECTS`, `RAFT_CUDA_TRY`), memory management (RMM patterns, no raw `new`\u002F`delete`), and test-impact rules, see [references\u002Fconventions.md](references\u002Fconventions.md).\n\n## Troubleshooting & CI\n\nFor build\u002Ftest pitfalls (Cython rebuild, OOM, CUDA driver mismatch, missing `nvcc`) and CI failure diagnostics (style checks, DCO failures, dependency drift), see [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n## Key Files Reference\n\n| Purpose | Location |\n|---------|----------|\n| Main build script | `build.sh` |\n| Dependencies | `dependencies.yaml` |\n| C++ formatting | `.clang-format` |\n| Conda environments | `conda\u002Fenvironments\u002F` |\n| Test data | `datasets\u002F` |\n| CI scripts | `ci\u002F` |\n\n## Canonical Documentation\n\n- **Contributing\u002Fbuild\u002Ftest**: [CONTRIBUTING.md](..\u002F..\u002FCONTRIBUTING.md)\n- **CI scripts**: [ci\u002FREADME.md](..\u002F..\u002Fci\u002FREADME.md)\n- **Release scripts**: [ci\u002Frelease\u002FREADME.md](..\u002F..\u002Fci\u002Frelease\u002FREADME.md)\n- **Docs build**: [docs\u002Fcuopt\u002FREADME.md](..\u002F..\u002Fdocs\u002Fcuopt\u002FREADME.md)\n- **Python binding architecture**: [references\u002Fpython_bindings.md](references\u002Fpython_bindings.md)\n\n_Shell-execution, install, conda-env, and sudo policies are covered by [Refusal Rules — Read First](#refusal-rules--read-first) at the top of this skill._\n\n## VRP dimension internals (routing engine)\n\nWhen implementing or debugging **VRP dimensions** (constraints, objectives, forward\u002Fbackward propagation, `combine`, local-search deltas), read:\n\n- **`references\u002Fvrp_skills.md`** — architecture contracts, required interfaces, and implementation checklist.\n\nRead it **before** adding a new dimension or changing combine semantics.\n\n## Numerical issues in non-routing solver internals\n\nWhen a bug surfaces as **wrong-but-plausible** solver output (invalid lower bound, unexpectedly large duals, 10× iteration blow-up after a small change) rather than a crash, read:\n\n- **`resources\u002Fnumerical_debugging.md`** — methodology for locating catastrophic-cancellation sites, the cancellation patterns endemic to cMIR \u002F flow-cover \u002F MIR-style cut construction, and threshold guidance for numerical guards.\n\nApply the *instrument-first, guard-at-the-exact-site* workflow it describes before patching — speculative fixes on these symptoms usually miss.\n",{"data":38,"body":48},{"name":4,"version":39,"description":6,"license":29,"metadata":40},"26.08.00",{"author":41,"tags":42},"NVIDIA cuOpt Team",[43,44,45,46,47],"cuopt","development","contributing","cpp-cuda","python-bindings",{"type":49,"children":50},"root",[51,60,66,77,95,99,106,116,143,159,184,383,386,392,397,404,409,427,433,438,450,456,474,480,490,598,608,630,640,665,671,688,691,697,705,855,861,870,876,1018,1024,1030,1048,1054,1078,1084,1104,1110,1143,1149,1155,1160,1471,1477,1582,1599,1606,1619,1638,1650,1655,1667,1673,1692,1698,1796,1802,1821,1827,1949,1955,2029,2043,2049,2069,2086,2097,2103,2115,2132,2144],{"type":52,"tag":53,"props":54,"children":56},"element","h1",{"id":55},"cuopt-developer-skill",[57],{"type":58,"value":59},"text","cuOpt Developer Skill",{"type":52,"tag":61,"props":62,"children":63},"p",{},[64],{"type":58,"value":65},"Contribute to the NVIDIA cuOpt codebase. This skill is for modifying cuOpt itself, not for using it.",{"type":52,"tag":61,"props":67,"children":68},{},[69,75],{"type":52,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":58,"value":74},"If you just want to USE cuOpt",{"type":58,"value":76},", switch to the appropriate problem skill (cuopt-routing, cuopt-lp-milp, etc.)",{"type":52,"tag":61,"props":78,"children":79},{},[80,85,87,93],{"type":52,"tag":70,"props":81,"children":82},{},[83],{"type":58,"value":84},"First-time dev environment setup?",{"type":58,"value":86}," See ",{"type":52,"tag":88,"props":89,"children":91},"a",{"href":90},"references\u002Ffirst_time_setup.md",[92],{"type":58,"value":90},{"type":58,"value":94}," for the clone → conda env → first-build → first-test walkthrough and the questions to ask up front.",{"type":52,"tag":96,"props":97,"children":98},"hr",{},[],{"type":52,"tag":100,"props":101,"children":103},"h2",{"id":102},"refusal-rules-read-first",[104],{"type":58,"value":105},"Refusal Rules — Read First",{"type":52,"tag":61,"props":107,"children":108},{},[109,114],{"type":52,"tag":70,"props":110,"children":111},{},[112],{"type":58,"value":113},"One rule is non-negotiable",{"type":58,"value":115}," and applies even when the user explicitly asks otherwise — refuse and ask, don't comply silently:",{"type":52,"tag":61,"props":117,"children":118},{},[119,124,126,133,135,141],{"type":52,"tag":70,"props":120,"children":121},{},[122],{"type":58,"value":123},"Privileged \u002F system-level operations",{"type":58,"value":125}," — ",{"type":52,"tag":127,"props":128,"children":130},"code",{"className":129},[],[131],{"type":58,"value":132},"sudo",{"type":58,"value":134},", running as root, editing system files (",{"type":52,"tag":127,"props":136,"children":138},{"className":137},[],[139],{"type":58,"value":140},"\u002Fetc",{"type":58,"value":142},"), changing drivers or kernel settings, adding system-level package repositories or keys. Do not run these. Reply:",{"type":52,"tag":144,"props":145,"children":146},"blockquote",{},[147],{"type":52,"tag":61,"props":148,"children":149},{},[150,152,157],{"type":58,"value":151},"I won't run ",{"type":52,"tag":127,"props":153,"children":155},{"className":154},[],[156],{"type":58,"value":132},{"type":58,"value":158}," or change system-level state for cuOpt. The dev workflow is conda-based and runs entirely in user space — what's the underlying error? It's usually fixable without root.",{"type":52,"tag":61,"props":160,"children":161},{},[162,167,169,174,176,182],{"type":52,"tag":70,"props":163,"children":164},{},[165],{"type":58,"value":166},"Everything else needed to set up and work in the dev environment is allowed.",{"type":58,"value":168}," On a clean machine, go ahead and build a working ",{"type":52,"tag":127,"props":170,"children":172},{"className":171},[],[173],{"type":58,"value":43},{"type":58,"value":175}," env — the guidance below is about doing it the ",{"type":52,"tag":177,"props":178,"children":179},"em",{},[180],{"type":58,"value":181},"reproducible",{"type":58,"value":183}," way, not refusing:",{"type":52,"tag":185,"props":186,"children":187},"ul",{},[188,268,317,343],{"type":52,"tag":189,"props":190,"children":191},"li",{},[192,197,199,205,207,213,215,221,222,228,230,235,237,243,245,251,253,258,260,266],{"type":52,"tag":70,"props":193,"children":194},{},[195],{"type":58,"value":196},"Environment setup is allowed.",{"type":58,"value":198}," You may create and activate the conda env from the checked-in ",{"type":52,"tag":127,"props":200,"children":202},{"className":201},[],[203],{"type":58,"value":204},"conda\u002Fenvironments\u002Fall_cuda-*.yaml",{"type":58,"value":206},", run ",{"type":52,"tag":127,"props":208,"children":210},{"className":209},[],[211],{"type":58,"value":212},"pip",{"type":58,"value":214}," \u002F ",{"type":52,"tag":127,"props":216,"children":218},{"className":217},[],[219],{"type":58,"value":220},"conda",{"type":58,"value":214},{"type":52,"tag":127,"props":223,"children":225},{"className":224},[],[226],{"type":58,"value":227},"mamba",{"type":58,"value":229}," installs ",{"type":52,"tag":70,"props":231,"children":232},{},[233],{"type":58,"value":234},"into the user-space env",{"type":58,"value":236},", and bootstrap conda\u002Fminiforge in the user's home directory — including the ",{"type":52,"tag":127,"props":238,"children":240},{"className":239},[],[241],{"type":58,"value":242},"conda init",{"type":58,"value":244}," line it adds to ",{"type":52,"tag":127,"props":246,"children":248},{"className":247},[],[249],{"type":58,"value":250},"~\u002F.bashrc",{"type":58,"value":252},". Bootstrapping conda must not require ",{"type":52,"tag":127,"props":254,"children":256},{"className":255},[],[257],{"type":58,"value":132},{"type":58,"value":259},"; install it into ",{"type":52,"tag":127,"props":261,"children":263},{"className":262},[],[264],{"type":58,"value":265},"$HOME",{"type":58,"value":267},", not a system path.",{"type":52,"tag":189,"props":269,"children":270},{},[271,283,285,291,293,299,301,307,309,315],{"type":52,"tag":70,"props":272,"children":273},{},[274,276,281],{"type":58,"value":275},"A new ",{"type":52,"tag":177,"props":277,"children":278},{},[279],{"type":58,"value":280},"permanent",{"type":58,"value":282}," project dependency is different from a one-off install.",{"type":58,"value":284}," A package the project should always ship belongs in ",{"type":52,"tag":127,"props":286,"children":288},{"className":287},[],[289],{"type":58,"value":290},"dependencies.yaml",{"type":58,"value":292}," under the right group; then run ",{"type":52,"tag":127,"props":294,"children":296},{"className":295},[],[297],{"type":58,"value":298},"pre-commit run --all-files",{"type":58,"value":300}," to regenerate ",{"type":52,"tag":127,"props":302,"children":304},{"className":303},[],[305],{"type":58,"value":306},"conda\u002Fenvironments\u002F",{"type":58,"value":308}," and ",{"type":52,"tag":127,"props":310,"children":312},{"className":311},[],[313],{"type":58,"value":314},"pyproject.toml",{"type":58,"value":316}," so other contributors get it too. A throwaway install to unblock your own build doesn't need this round-trip.",{"type":52,"tag":189,"props":318,"children":319},{},[320,325,327,333,335,341],{"type":52,"tag":70,"props":321,"children":322},{},[323],{"type":58,"value":324},"Don't bypass CI checks",{"type":58,"value":326}," (",{"type":52,"tag":127,"props":328,"children":330},{"className":329},[],[331],{"type":58,"value":332},"--no-verify",{"type":58,"value":334},", skipping pre-commit or tests). If hooks feel slow, diagnose with ",{"type":52,"tag":127,"props":336,"children":338},{"className":337},[],[339],{"type":58,"value":340},"pre-commit run --all-files --verbose",{"type":58,"value":342}," or tune the offending hook — don't skip it.",{"type":52,"tag":189,"props":344,"children":345},{},[346,351,352,358,360,366,367,373,375,381],{"type":52,"tag":70,"props":347,"children":348},{},[349],{"type":58,"value":350},"Be careful with destructive commands",{"type":58,"value":326},{"type":52,"tag":127,"props":353,"children":355},{"className":354},[],[356],{"type":58,"value":357},"rm -rf",{"type":58,"value":359},", ",{"type":52,"tag":127,"props":361,"children":363},{"className":362},[],[364],{"type":58,"value":365},"git reset --hard",{"type":58,"value":359},{"type":52,"tag":127,"props":368,"children":370},{"className":369},[],[371],{"type":58,"value":372},"git push --force",{"type":58,"value":374},", killing processes, dropping data). Confirm intent before running and prefer the safer alternative (e.g. ",{"type":52,"tag":127,"props":376,"children":378},{"className":377},[],[379],{"type":58,"value":380},".\u002Fbuild.sh clean",{"type":58,"value":382}," for a stale build dir).",{"type":52,"tag":96,"props":384,"children":385},{},[],{"type":52,"tag":100,"props":387,"children":389},{"id":388},"developer-behavior-rules",[390],{"type":58,"value":391},"Developer Behavior Rules",{"type":52,"tag":61,"props":393,"children":394},{},[395],{"type":58,"value":396},"These rules are specific to development tasks. They differ from user rules.",{"type":52,"tag":398,"props":399,"children":401},"h3",{"id":400},"_1-ask-before-assuming",[402],{"type":58,"value":403},"1. Ask Before Assuming",{"type":52,"tag":61,"props":405,"children":406},{},[407],{"type":58,"value":408},"Clarify before implementing:",{"type":52,"tag":185,"props":410,"children":411},{},[412,417,422],{"type":52,"tag":189,"props":413,"children":414},{},[415],{"type":58,"value":416},"What component? (C++\u002FCUDA, Python, server, docs, CI)",{"type":52,"tag":189,"props":418,"children":419},{},[420],{"type":58,"value":421},"What's the goal? (bug fix, new feature, refactor, docs)",{"type":52,"tag":189,"props":423,"children":424},{},[425],{"type":58,"value":426},"Is this for contribution or local modification?",{"type":52,"tag":398,"props":428,"children":430},{"id":429},"_2-verify-understanding",[431],{"type":58,"value":432},"2. Verify Understanding",{"type":52,"tag":61,"props":434,"children":435},{},[436],{"type":58,"value":437},"Before making changes, confirm:",{"type":52,"tag":439,"props":440,"children":444},"pre",{"className":441,"code":443,"language":58},[442],"language-text","\"Let me confirm:\n- Component: [cpp\u002Fpython\u002Fserver\u002Fdocs]\n- Change: [what you'll modify]\n- Tests needed: [what tests to add\u002Fupdate]\nIs this correct?\"\n",[445],{"type":52,"tag":127,"props":446,"children":448},{"__ignoreMap":447},"",[449],{"type":58,"value":443},{"type":52,"tag":398,"props":451,"children":453},{"id":452},"_3-follow-codebase-patterns",[454],{"type":58,"value":455},"3. Follow Codebase Patterns",{"type":52,"tag":185,"props":457,"children":458},{},[459,464,469],{"type":52,"tag":189,"props":460,"children":461},{},[462],{"type":58,"value":463},"Read existing code in the area you're modifying",{"type":52,"tag":189,"props":465,"children":466},{},[467],{"type":58,"value":468},"Match naming conventions, style, and patterns",{"type":52,"tag":189,"props":470,"children":471},{},[472],{"type":58,"value":473},"Don't invent new patterns without discussion",{"type":52,"tag":398,"props":475,"children":477},{"id":476},"_4-ask-before-running-modified-for-dev",[478],{"type":58,"value":479},"4. Ask Before Running — Modified for Dev",{"type":52,"tag":61,"props":481,"children":482},{},[483,488],{"type":52,"tag":70,"props":484,"children":485},{},[486],{"type":58,"value":487},"OK to run without asking",{"type":58,"value":489}," (expected for dev work):",{"type":52,"tag":185,"props":491,"children":492},{},[493,504,522,540,565],{"type":52,"tag":189,"props":494,"children":495},{},[496,502],{"type":52,"tag":127,"props":497,"children":499},{"className":498},[],[500],{"type":58,"value":501},".\u002Fbuild.sh",{"type":58,"value":503}," and build commands",{"type":52,"tag":189,"props":505,"children":506},{},[507,513,514,520],{"type":52,"tag":127,"props":508,"children":510},{"className":509},[],[511],{"type":58,"value":512},"pytest",{"type":58,"value":359},{"type":52,"tag":127,"props":515,"children":517},{"className":516},[],[518],{"type":58,"value":519},"ctest",{"type":58,"value":521}," (running tests)",{"type":52,"tag":189,"props":523,"children":524},{},[525,531,532,538],{"type":52,"tag":127,"props":526,"children":528},{"className":527},[],[529],{"type":58,"value":530},"pre-commit run",{"type":58,"value":359},{"type":52,"tag":127,"props":533,"children":535},{"className":534},[],[536],{"type":58,"value":537},".\u002Fci\u002Fcheck_style.sh",{"type":58,"value":539}," (formatting)",{"type":52,"tag":189,"props":541,"children":542},{},[543,549,550,556,557,563],{"type":52,"tag":127,"props":544,"children":546},{"className":545},[],[547],{"type":58,"value":548},"git status",{"type":58,"value":359},{"type":52,"tag":127,"props":551,"children":553},{"className":552},[],[554],{"type":58,"value":555},"git diff",{"type":58,"value":359},{"type":52,"tag":127,"props":558,"children":560},{"className":559},[],[561],{"type":58,"value":562},"git log",{"type":58,"value":564}," (read-only git)",{"type":52,"tag":189,"props":566,"children":567},{},[568,570,576,578,583,585,590,591,596],{"type":58,"value":569},"Environment setup: create\u002Factivate the conda env from ",{"type":52,"tag":127,"props":571,"children":573},{"className":572},[],[574],{"type":58,"value":575},"conda\u002Fenvironments\u002F*.yaml",{"type":58,"value":577},", and ",{"type":52,"tag":127,"props":579,"children":581},{"className":580},[],[582],{"type":58,"value":212},{"type":58,"value":584},"\u002F",{"type":52,"tag":127,"props":586,"children":588},{"className":587},[],[589],{"type":58,"value":220},{"type":58,"value":584},{"type":52,"tag":127,"props":592,"children":594},{"className":593},[],[595],{"type":58,"value":227},{"type":58,"value":597}," installs into that env",{"type":52,"tag":61,"props":599,"children":600},{},[601,606],{"type":52,"tag":70,"props":602,"children":603},{},[604],{"type":58,"value":605},"Set up pre-commit hooks",{"type":58,"value":607}," (once per clone):",{"type":52,"tag":185,"props":609,"children":610},{},[611],{"type":52,"tag":189,"props":612,"children":613},{},[614,620,622,628],{"type":52,"tag":127,"props":615,"children":617},{"className":616},[],[618],{"type":58,"value":619},"pre-commit install",{"type":58,"value":621}," — hooks then run automatically on every ",{"type":52,"tag":127,"props":623,"children":625},{"className":624},[],[626],{"type":58,"value":627},"git commit",{"type":58,"value":629},". If a hook fails, the commit is blocked until you fix the issue.",{"type":52,"tag":61,"props":631,"children":632},{},[633,638],{"type":52,"tag":70,"props":634,"children":635},{},[636],{"type":58,"value":637},"Still ask before",{"type":58,"value":639},":",{"type":52,"tag":185,"props":641,"children":642},{},[643,660],{"type":52,"tag":189,"props":644,"children":645},{},[646,651,652,658],{"type":52,"tag":127,"props":647,"children":649},{"className":648},[],[650],{"type":58,"value":627},{"type":58,"value":359},{"type":52,"tag":127,"props":653,"children":655},{"className":654},[],[656],{"type":58,"value":657},"git push",{"type":58,"value":659}," (write operations)",{"type":52,"tag":189,"props":661,"children":662},{},[663],{"type":58,"value":664},"Any destructive or irreversible commands",{"type":52,"tag":398,"props":666,"children":668},{"id":667},"_5-no-privileged-operations",[669],{"type":58,"value":670},"5. No Privileged Operations",{"type":52,"tag":61,"props":672,"children":673},{},[674,679,681,686],{"type":52,"tag":127,"props":675,"children":677},{"className":676},[],[678],{"type":58,"value":132},{"type":58,"value":680},"\u002Fsystem-level changes are the one non-negotiable refusal; user-space installs and conda env setup are allowed. See ",{"type":52,"tag":88,"props":682,"children":684},{"href":683},"#refusal-rules--read-first",[685],{"type":58,"value":105},{"type":58,"value":687},".",{"type":52,"tag":96,"props":689,"children":690},{},[],{"type":52,"tag":100,"props":692,"children":694},{"id":693},"before-you-start-required-questions",[695],{"type":58,"value":696},"Before You Start: Required Questions",{"type":52,"tag":61,"props":698,"children":699},{},[700],{"type":52,"tag":70,"props":701,"children":702},{},[703],{"type":58,"value":704},"Ask these if not already clear:",{"type":52,"tag":706,"props":707,"children":708},"ol",{},[709,745,766,781],{"type":52,"tag":189,"props":710,"children":711},{},[712,717],{"type":52,"tag":70,"props":713,"children":714},{},[715],{"type":58,"value":716},"What are you trying to change?",{"type":52,"tag":185,"props":718,"children":719},{},[720,725,730,735,740],{"type":52,"tag":189,"props":721,"children":722},{},[723],{"type":58,"value":724},"Solver algorithm\u002Fperformance?",{"type":52,"tag":189,"props":726,"children":727},{},[728],{"type":58,"value":729},"Python API?",{"type":52,"tag":189,"props":731,"children":732},{},[733],{"type":58,"value":734},"Server endpoints?",{"type":52,"tag":189,"props":736,"children":737},{},[738],{"type":58,"value":739},"Documentation?",{"type":52,"tag":189,"props":741,"children":742},{},[743],{"type":58,"value":744},"CI\u002Fbuild system?",{"type":52,"tag":189,"props":746,"children":747},{},[748,753],{"type":52,"tag":70,"props":749,"children":750},{},[751],{"type":58,"value":752},"Do you have the development environment set up?",{"type":52,"tag":185,"props":754,"children":755},{},[756,761],{"type":52,"tag":189,"props":757,"children":758},{},[759],{"type":58,"value":760},"Built the project successfully?",{"type":52,"tag":189,"props":762,"children":763},{},[764],{"type":58,"value":765},"Ran tests?",{"type":52,"tag":189,"props":767,"children":768},{},[769,773],{"type":52,"tag":70,"props":770,"children":771},{},[772],{"type":58,"value":426},{"type":52,"tag":185,"props":774,"children":775},{},[776],{"type":52,"tag":189,"props":777,"children":778},{},[779],{"type":58,"value":780},"If contributing: will need to follow DCO signoff",{"type":52,"tag":189,"props":782,"children":783},{},[784,789],{"type":52,"tag":70,"props":785,"children":786},{},[787],{"type":58,"value":788},"Which branch should this target?",{"type":52,"tag":185,"props":790,"children":791},{},[792,803,831,842],{"type":52,"tag":189,"props":793,"children":794},{},[795,797],{"type":58,"value":796},"During development phase: ",{"type":52,"tag":127,"props":798,"children":800},{"className":799},[],[801],{"type":58,"value":802},"main",{"type":52,"tag":189,"props":804,"children":805},{},[806,808,814,816,822,824,829],{"type":58,"value":807},"During burn down: ",{"type":52,"tag":127,"props":809,"children":811},{"className":810},[],[812],{"type":58,"value":813},"release\u002FYY.MM",{"type":58,"value":815}," (e.g., ",{"type":52,"tag":127,"props":817,"children":819},{"className":818},[],[820],{"type":58,"value":821},"release\u002F26.06",{"type":58,"value":823},") for the current release, ",{"type":52,"tag":127,"props":825,"children":827},{"className":826},[],[828],{"type":58,"value":802},{"type":58,"value":830}," for the next",{"type":52,"tag":189,"props":832,"children":833},{},[834,836],{"type":58,"value":835},"Check if a release branch exists: ",{"type":52,"tag":127,"props":837,"children":839},{"className":838},[],[840],{"type":58,"value":841},"git branch -r | grep release",{"type":52,"tag":189,"props":843,"children":844},{},[845,847],{"type":58,"value":846},"For current timelines, see the ",{"type":52,"tag":88,"props":848,"children":852},{"href":849,"rel":850},"https:\u002F\u002Fdocs.rapids.ai\u002Fmaintainers\u002F",[851],"nofollow",[853],{"type":58,"value":854},"RAPIDS Maintainers Docs",{"type":52,"tag":100,"props":856,"children":858},{"id":857},"project-architecture",[859],{"type":58,"value":860},"Project Architecture",{"type":52,"tag":439,"props":862,"children":865},{"className":863,"code":864,"language":58},[442],"cuopt\u002F\n├── cpp\u002F                    # Core C++ engine\n│   ├── include\u002Fcuopt\u002F      # Public C\u002FC++ headers\n│   ├── src\u002F                # Implementation (CUDA kernels)\n│   └── tests\u002F              # C++ unit tests (gtest)\n├── python\u002F\n│   ├── cuopt\u002F              # Python bindings and routing API\n│   ├── cuopt_server\u002F       # REST API server\n│   ├── cuopt_self_hosted\u002F  # Self-hosted deployment\n│   └── libcuopt\u002F           # Python wrapper for C library\n├── ci\u002F                     # CI\u002FCD scripts\n├── docs\u002F                   # Documentation source\n└── datasets\u002F               # Test datasets\n",[866],{"type":52,"tag":127,"props":867,"children":868},{"__ignoreMap":447},[869],{"type":58,"value":864},{"type":52,"tag":100,"props":871,"children":873},{"id":872},"supported-apis",[874],{"type":58,"value":875},"Supported APIs",{"type":52,"tag":877,"props":878,"children":879},"table",{},[880,915],{"type":52,"tag":881,"props":882,"children":883},"thead",{},[884],{"type":52,"tag":885,"props":886,"children":887},"tr",{},[888,894,900,905,910],{"type":52,"tag":889,"props":890,"children":891},"th",{},[892],{"type":58,"value":893},"API Type",{"type":52,"tag":889,"props":895,"children":897},{"align":896},"center",[898],{"type":58,"value":899},"LP",{"type":52,"tag":889,"props":901,"children":902},{"align":896},[903],{"type":58,"value":904},"MILP",{"type":52,"tag":889,"props":906,"children":907},{"align":896},[908],{"type":58,"value":909},"QP",{"type":52,"tag":889,"props":911,"children":912},{"align":896},[913],{"type":58,"value":914},"Routing",{"type":52,"tag":916,"props":917,"children":918},"tbody",{},[919,946,971,994],{"type":52,"tag":885,"props":920,"children":921},{},[922,928,933,937,941],{"type":52,"tag":923,"props":924,"children":925},"td",{},[926],{"type":58,"value":927},"C API",{"type":52,"tag":923,"props":929,"children":930},{"align":896},[931],{"type":58,"value":932},"✓",{"type":52,"tag":923,"props":934,"children":935},{"align":896},[936],{"type":58,"value":932},{"type":52,"tag":923,"props":938,"children":939},{"align":896},[940],{"type":58,"value":932},{"type":52,"tag":923,"props":942,"children":943},{"align":896},[944],{"type":58,"value":945},"✗",{"type":52,"tag":885,"props":947,"children":948},{},[949,954,959,963,967],{"type":52,"tag":923,"props":950,"children":951},{},[952],{"type":58,"value":953},"C++ API",{"type":52,"tag":923,"props":955,"children":956},{"align":896},[957],{"type":58,"value":958},"(internal)",{"type":52,"tag":923,"props":960,"children":961},{"align":896},[962],{"type":58,"value":958},{"type":52,"tag":923,"props":964,"children":965},{"align":896},[966],{"type":58,"value":958},{"type":52,"tag":923,"props":968,"children":969},{"align":896},[970],{"type":58,"value":958},{"type":52,"tag":885,"props":972,"children":973},{},[974,978,982,986,990],{"type":52,"tag":923,"props":975,"children":976},{},[977],{"type":58,"value":21},{"type":52,"tag":923,"props":979,"children":980},{"align":896},[981],{"type":58,"value":932},{"type":52,"tag":923,"props":983,"children":984},{"align":896},[985],{"type":58,"value":932},{"type":52,"tag":923,"props":987,"children":988},{"align":896},[989],{"type":58,"value":932},{"type":52,"tag":923,"props":991,"children":992},{"align":896},[993],{"type":58,"value":932},{"type":52,"tag":885,"props":995,"children":996},{},[997,1002,1006,1010,1014],{"type":52,"tag":923,"props":998,"children":999},{},[1000],{"type":58,"value":1001},"Server",{"type":52,"tag":923,"props":1003,"children":1004},{"align":896},[1005],{"type":58,"value":932},{"type":52,"tag":923,"props":1007,"children":1008},{"align":896},[1009],{"type":58,"value":932},{"type":52,"tag":923,"props":1011,"children":1012},{"align":896},[1013],{"type":58,"value":945},{"type":52,"tag":923,"props":1015,"children":1016},{"align":896},[1017],{"type":58,"value":932},{"type":52,"tag":100,"props":1019,"children":1021},{"id":1020},"safety-rules-non-negotiable",[1022],{"type":58,"value":1023},"Safety Rules (Non-Negotiable)",{"type":52,"tag":398,"props":1025,"children":1027},{"id":1026},"minimal-diffs",[1028],{"type":58,"value":1029},"Minimal Diffs",{"type":52,"tag":185,"props":1031,"children":1032},{},[1033,1038,1043],{"type":52,"tag":189,"props":1034,"children":1035},{},[1036],{"type":58,"value":1037},"Change only what's necessary",{"type":52,"tag":189,"props":1039,"children":1040},{},[1041],{"type":58,"value":1042},"Avoid drive-by refactors",{"type":52,"tag":189,"props":1044,"children":1045},{},[1046],{"type":58,"value":1047},"No mass reformatting of unrelated code",{"type":52,"tag":398,"props":1049,"children":1051},{"id":1050},"no-api-invention",[1052],{"type":58,"value":1053},"No API Invention",{"type":52,"tag":185,"props":1055,"children":1056},{},[1057,1062,1073],{"type":52,"tag":189,"props":1058,"children":1059},{},[1060],{"type":58,"value":1061},"Don't invent new APIs without discussion",{"type":52,"tag":189,"props":1063,"children":1064},{},[1065,1067],{"type":58,"value":1066},"Align with existing patterns in ",{"type":52,"tag":127,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":58,"value":1072},"docs\u002Fcuopt\u002Fsource\u002F",{"type":52,"tag":189,"props":1074,"children":1075},{},[1076],{"type":58,"value":1077},"Server schemas must match OpenAPI spec",{"type":52,"tag":398,"props":1079,"children":1081},{"id":1080},"dont-bypass-ci",[1082],{"type":58,"value":1083},"Don't Bypass CI",{"type":52,"tag":185,"props":1085,"children":1086},{},[1087,1099],{"type":52,"tag":189,"props":1088,"children":1089},{},[1090,1092,1097],{"type":58,"value":1091},"Never suggest ",{"type":52,"tag":127,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":58,"value":332},{"type":58,"value":1098}," or skipping checks",{"type":52,"tag":189,"props":1100,"children":1101},{},[1102],{"type":58,"value":1103},"All PRs must pass CI",{"type":52,"tag":398,"props":1105,"children":1107},{"id":1106},"cudagpu-hygiene",[1108],{"type":58,"value":1109},"CUDA\u002FGPU Hygiene",{"type":52,"tag":185,"props":1111,"children":1112},{},[1113,1118,1123],{"type":52,"tag":189,"props":1114,"children":1115},{},[1116],{"type":58,"value":1117},"Keep operations stream-ordered",{"type":52,"tag":189,"props":1119,"children":1120},{},[1121],{"type":58,"value":1122},"Follow existing RAFT\u002FRMM patterns",{"type":52,"tag":189,"props":1124,"children":1125},{},[1126,1128,1134,1135,1141],{"type":58,"value":1127},"No raw ",{"type":52,"tag":127,"props":1129,"children":1131},{"className":1130},[],[1132],{"type":58,"value":1133},"new",{"type":58,"value":584},{"type":52,"tag":127,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":58,"value":1140},"delete",{"type":58,"value":1142}," - use RMM allocators",{"type":52,"tag":100,"props":1144,"children":1146},{"id":1145},"build-test",[1147],{"type":58,"value":1148},"Build & Test",{"type":52,"tag":398,"props":1150,"children":1152},{"id":1151},"pre-flight-checks-required-before-first-build-or-test",[1153],{"type":58,"value":1154},"Pre-flight Checks (Required Before First Build or Test)",{"type":52,"tag":61,"props":1156,"children":1157},{},[1158],{"type":58,"value":1159},"Skipping any of these surfaces as confusing runtime errors later. Run them in order:",{"type":52,"tag":706,"props":1161,"children":1162},{},[1163,1218,1417,1448],{"type":52,"tag":189,"props":1164,"children":1165},{},[1166,1171,1173,1179,1181,1186,1188,1194,1196,1201,1203,1209,1211,1216],{"type":52,"tag":70,"props":1167,"children":1168},{},[1169],{"type":58,"value":1170},"Check CUDA driver compatibility.",{"type":58,"value":1172}," Run ",{"type":52,"tag":127,"props":1174,"children":1176},{"className":1175},[],[1177],{"type":58,"value":1178},"nvidia-smi",{"type":58,"value":1180}," and read the ",{"type":52,"tag":177,"props":1182,"children":1183},{},[1184],{"type":58,"value":1185},"CUDA Version",{"type":58,"value":1187}," in the top-right corner — that's the maximum CUDA your driver supports. Pick a conda env file from ",{"type":52,"tag":127,"props":1189,"children":1191},{"className":1190},[],[1192],{"type":58,"value":1193},"conda\u002Fenvironments\u002Fall_cuda-\u003Cver>_arch-\u003Carch>.yaml",{"type":58,"value":1195}," whose CUDA major version is ",{"type":52,"tag":70,"props":1197,"children":1198},{},[1199],{"type":58,"value":1200},"≤",{"type":58,"value":1202}," that. A mismatch builds successfully but fails at runtime inside RMM with ",{"type":52,"tag":127,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":58,"value":1208},"cudaMallocAsync not supported with this CUDA driver\u002Fruntime version",{"type":58,"value":1210}," — verify this ",{"type":52,"tag":177,"props":1212,"children":1213},{},[1214],{"type":58,"value":1215},"before",{"type":58,"value":1217}," the build, not after.",{"type":52,"tag":189,"props":1219,"children":1220},{},[1221,1226,1228,1233,1235,1241,1243,1248,1250,1255,1256,1262,1264,1270,1272,1277,1279,1284,1286,1407,1409,1415],{"type":52,"tag":70,"props":1222,"children":1223},{},[1224],{"type":58,"value":1225},"Create and activate the conda env",{"type":58,"value":1227}," before ",{"type":52,"tag":177,"props":1229,"children":1230},{},[1231],{"type":58,"value":1232},"any",{"type":58,"value":1234}," build, test, or ",{"type":52,"tag":127,"props":1236,"children":1238},{"className":1237},[],[1239],{"type":58,"value":1240},"pre-commit",{"type":58,"value":1242}," command — this is allowed and expected (see ",{"type":52,"tag":88,"props":1244,"children":1245},{"href":683},[1246],{"type":58,"value":1247},"Refusal Rules",{"type":58,"value":1249},"). Use a ",{"type":52,"tag":70,"props":1251,"children":1252},{},[1253],{"type":58,"value":1254},"local prefix env",{"type":58,"value":326},{"type":52,"tag":127,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":58,"value":1261},".\u002F.cuopt_env",{"type":58,"value":1263},") per ",{"type":52,"tag":88,"props":1265,"children":1267},{"href":1266},"..\u002F..\u002FCONTRIBUTING.md",[1268],{"type":58,"value":1269},"CONTRIBUTING.md",{"type":58,"value":1271},", with the env file you picked in step 1 (swap ",{"type":52,"tag":127,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":58,"value":220},{"type":58,"value":1278},"→",{"type":52,"tag":127,"props":1280,"children":1282},{"className":1281},[],[1283],{"type":58,"value":227},{"type":58,"value":1285}," if available):\n",{"type":52,"tag":439,"props":1287,"children":1291},{"className":1288,"code":1289,"language":1290,"meta":447,"style":447},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","conda env create -p .\u002F.cuopt_env --file conda\u002Fenvironments\u002Fall_cuda-\u003Cver>_arch-$(uname -m).yaml\nconda activate .\u002F.cuopt_env\n","bash",[1292],{"type":52,"tag":127,"props":1293,"children":1294},{"__ignoreMap":447},[1295,1389],{"type":52,"tag":1296,"props":1297,"children":1300},"span",{"class":1298,"line":1299},"line",1,[1301,1306,1312,1317,1322,1327,1332,1337,1343,1348,1354,1359,1364,1369,1374,1379,1384],{"type":52,"tag":1296,"props":1302,"children":1304},{"style":1303},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1305],{"type":58,"value":220},{"type":52,"tag":1296,"props":1307,"children":1309},{"style":1308},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1310],{"type":58,"value":1311}," env",{"type":52,"tag":1296,"props":1313,"children":1314},{"style":1308},[1315],{"type":58,"value":1316}," create",{"type":52,"tag":1296,"props":1318,"children":1319},{"style":1308},[1320],{"type":58,"value":1321}," -p",{"type":52,"tag":1296,"props":1323,"children":1324},{"style":1308},[1325],{"type":58,"value":1326}," .\u002F.cuopt_env",{"type":52,"tag":1296,"props":1328,"children":1329},{"style":1308},[1330],{"type":58,"value":1331}," --file",{"type":52,"tag":1296,"props":1333,"children":1334},{"style":1308},[1335],{"type":58,"value":1336}," conda\u002Fenvironments\u002Fall_cuda-",{"type":52,"tag":1296,"props":1338,"children":1340},{"style":1339},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1341],{"type":58,"value":1342},"\u003C",{"type":52,"tag":1296,"props":1344,"children":1345},{"style":1308},[1346],{"type":58,"value":1347},"ve",{"type":52,"tag":1296,"props":1349,"children":1351},{"style":1350},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1352],{"type":58,"value":1353},"r",{"type":52,"tag":1296,"props":1355,"children":1356},{"style":1339},[1357],{"type":58,"value":1358},">",{"type":52,"tag":1296,"props":1360,"children":1361},{"style":1308},[1362],{"type":58,"value":1363},"_arch-",{"type":52,"tag":1296,"props":1365,"children":1366},{"style":1339},[1367],{"type":58,"value":1368},"$(",{"type":52,"tag":1296,"props":1370,"children":1371},{"style":1303},[1372],{"type":58,"value":1373},"uname",{"type":52,"tag":1296,"props":1375,"children":1376},{"style":1308},[1377],{"type":58,"value":1378}," -m",{"type":52,"tag":1296,"props":1380,"children":1381},{"style":1339},[1382],{"type":58,"value":1383},")",{"type":52,"tag":1296,"props":1385,"children":1386},{"style":1308},[1387],{"type":58,"value":1388},".yaml\n",{"type":52,"tag":1296,"props":1390,"children":1392},{"class":1298,"line":1391},2,[1393,1397,1402],{"type":52,"tag":1296,"props":1394,"children":1395},{"style":1303},[1396],{"type":58,"value":220},{"type":52,"tag":1296,"props":1398,"children":1399},{"style":1308},[1400],{"type":58,"value":1401}," activate",{"type":52,"tag":1296,"props":1403,"children":1404},{"style":1308},[1405],{"type":58,"value":1406}," .\u002F.cuopt_env\n",{"type":58,"value":1408},"\nTests link against libraries compiled inside that env; a fresh shell without ",{"type":52,"tag":127,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":58,"value":1414},"conda activate .\u002F.cuopt_env",{"type":58,"value":1416}," hits cryptic linker errors.",{"type":52,"tag":189,"props":1418,"children":1419},{},[1420,1431,1433,1438,1440,1446],{"type":52,"tag":70,"props":1421,"children":1422},{},[1423,1425],{"type":58,"value":1424},"Set ",{"type":52,"tag":127,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":58,"value":1430},"PARALLEL_LEVEL",{"type":58,"value":1432}," if RAM is constrained — see ",{"type":52,"tag":88,"props":1434,"children":1436},{"href":1435},"references\u002Fbuild_and_test.md",[1437],{"type":58,"value":1435},{"type":58,"value":1439},". The default ",{"type":52,"tag":127,"props":1441,"children":1443},{"className":1442},[],[1444],{"type":58,"value":1445},"$(nproc)",{"type":58,"value":1447}," can OOM mid-build because CUDA compilation needs ~4–8 GB per job.",{"type":52,"tag":189,"props":1449,"children":1450},{},[1451,1456,1458,1462,1464,1470],{"type":52,"tag":70,"props":1452,"children":1453},{},[1454],{"type":58,"value":1455},"For tests, fetch datasets first.",{"type":58,"value":1457}," cuOpt tests need MPS files not in the repo — follow the dataset download steps in ",{"type":52,"tag":88,"props":1459,"children":1460},{"href":1266},[1461],{"type":58,"value":1269},{"type":58,"value":1463}," (\"Building for development\" section) and export ",{"type":52,"tag":127,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":58,"value":1469},"RAPIDS_DATASET_ROOT_DIR",{"type":58,"value":687},{"type":52,"tag":398,"props":1472,"children":1474},{"id":1473},"quick-reference",[1475],{"type":58,"value":1476},"Quick Reference",{"type":52,"tag":439,"props":1478,"children":1480},{"className":1288,"code":1479,"language":1290,"meta":447,"style":447},".\u002Fbuild.sh             # Build everything\n.\u002Fbuild.sh --help      # List components: libcuopt, cuopt, cuopt_server, docs\nctest --test-dir cpp\u002Fbuild              # C++ tests\npytest -v python\u002Fcuopt\u002Fcuopt\u002Ftests      # Python tests\npytest -v python\u002Fcuopt_server\u002Ftests     # Server tests\n",[1481],{"type":52,"tag":127,"props":1482,"children":1483},{"__ignoreMap":447},[1484,1497,1514,1537,1560],{"type":52,"tag":1296,"props":1485,"children":1486},{"class":1298,"line":1299},[1487,1491],{"type":52,"tag":1296,"props":1488,"children":1489},{"style":1303},[1490],{"type":58,"value":501},{"type":52,"tag":1296,"props":1492,"children":1494},{"style":1493},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1495],{"type":58,"value":1496},"             # Build everything\n",{"type":52,"tag":1296,"props":1498,"children":1499},{"class":1298,"line":1391},[1500,1504,1509],{"type":52,"tag":1296,"props":1501,"children":1502},{"style":1303},[1503],{"type":58,"value":501},{"type":52,"tag":1296,"props":1505,"children":1506},{"style":1308},[1507],{"type":58,"value":1508}," --help",{"type":52,"tag":1296,"props":1510,"children":1511},{"style":1493},[1512],{"type":58,"value":1513},"      # List components: libcuopt, cuopt, cuopt_server, docs\n",{"type":52,"tag":1296,"props":1515,"children":1517},{"class":1298,"line":1516},3,[1518,1522,1527,1532],{"type":52,"tag":1296,"props":1519,"children":1520},{"style":1303},[1521],{"type":58,"value":519},{"type":52,"tag":1296,"props":1523,"children":1524},{"style":1308},[1525],{"type":58,"value":1526}," --test-dir",{"type":52,"tag":1296,"props":1528,"children":1529},{"style":1308},[1530],{"type":58,"value":1531}," cpp\u002Fbuild",{"type":52,"tag":1296,"props":1533,"children":1534},{"style":1493},[1535],{"type":58,"value":1536},"              # C++ tests\n",{"type":52,"tag":1296,"props":1538,"children":1540},{"class":1298,"line":1539},4,[1541,1545,1550,1555],{"type":52,"tag":1296,"props":1542,"children":1543},{"style":1303},[1544],{"type":58,"value":512},{"type":52,"tag":1296,"props":1546,"children":1547},{"style":1308},[1548],{"type":58,"value":1549}," -v",{"type":52,"tag":1296,"props":1551,"children":1552},{"style":1308},[1553],{"type":58,"value":1554}," python\u002Fcuopt\u002Fcuopt\u002Ftests",{"type":52,"tag":1296,"props":1556,"children":1557},{"style":1493},[1558],{"type":58,"value":1559},"      # Python tests\n",{"type":52,"tag":1296,"props":1561,"children":1563},{"class":1298,"line":1562},5,[1564,1568,1572,1577],{"type":52,"tag":1296,"props":1565,"children":1566},{"style":1303},[1567],{"type":58,"value":512},{"type":52,"tag":1296,"props":1569,"children":1570},{"style":1308},[1571],{"type":58,"value":1549},{"type":52,"tag":1296,"props":1573,"children":1574},{"style":1308},[1575],{"type":58,"value":1576}," python\u002Fcuopt_server\u002Ftests",{"type":52,"tag":1296,"props":1578,"children":1579},{"style":1493},[1580],{"type":58,"value":1581},"     # Server tests\n",{"type":52,"tag":61,"props":1583,"children":1584},{},[1585,1587,1592,1594,1598],{"type":58,"value":1586},"For component-specific build commands, run-test detail, and ",{"type":52,"tag":127,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":58,"value":1430},{"type":58,"value":1593}," configuration, see ",{"type":52,"tag":88,"props":1595,"children":1596},{"href":1435},[1597],{"type":58,"value":1435},{"type":58,"value":687},{"type":52,"tag":1600,"props":1601,"children":1603},"h4",{"id":1602},"download-test-datasets-before-running-tests",[1604],{"type":58,"value":1605},"Download test datasets before running tests",{"type":52,"tag":61,"props":1607,"children":1608},{},[1609,1611,1617],{"type":58,"value":1610},"cuOpt tests depend on MPS\u002Fdata files that are not checked into the repo. A\nmissing dataset surfaces as a ",{"type":52,"tag":127,"props":1612,"children":1614},{"className":1613},[],[1615],{"type":58,"value":1616},"MPS_PARSER_ERROR ... Error opening MPS file",{"type":58,"value":1618},"\ntest failure at 0ms — it is not a build or logic failure.",{"type":52,"tag":61,"props":1620,"children":1621},{},[1622,1624,1629,1631,1636],{"type":58,"value":1623},"Before running any C++ or Python tests, follow the dataset download and\n",{"type":52,"tag":127,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":58,"value":1469},{"type":58,"value":1630}," export steps in the repo's ",{"type":52,"tag":127,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":58,"value":1269},{"type":58,"value":1637},"\n(\"Building for development\" section) — that is the canonical list and mapping.",{"type":52,"tag":61,"props":1639,"children":1640},{},[1641,1643,1648],{"type":58,"value":1642},"If a test fails with a missing-file error, run the matching download step from\n",{"type":52,"tag":127,"props":1644,"children":1646},{"className":1645},[],[1647],{"type":58,"value":1269},{"type":58,"value":1649}," and re-run the test. Do not report missing-dataset failures\nback to the user as the task outcome.",{"type":52,"tag":100,"props":1651,"children":1652},{"id":47},[1653],{"type":58,"value":1654},"Python Bindings",{"type":52,"tag":61,"props":1656,"children":1657},{},[1658,1660,1665],{"type":58,"value":1659},"cuOpt uses Cython to bridge Python and C++. See ",{"type":52,"tag":88,"props":1661,"children":1663},{"href":1662},"references\u002Fpython_bindings.md",[1664],{"type":58,"value":1662},{"type":58,"value":1666}," for the full architecture, parameter flow walkthrough, key files, and Cython patterns.",{"type":52,"tag":100,"props":1668,"children":1670},{"id":1669},"contributing-commits-prs-common-tasks",[1671],{"type":58,"value":1672},"Contributing — Commits, PRs, Common Tasks",{"type":52,"tag":61,"props":1674,"children":1675},{},[1676,1678,1684,1686,1691],{"type":58,"value":1677},"For pre-commit setup, DCO sign-off (",{"type":52,"tag":127,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":58,"value":1683},"git commit -s",{"type":58,"value":1685},"), the fork-based PR workflow, the draft-PR rule for agents, PR-description rules (keep it short — no \"how it works\" walkthroughs or file tables), script and CI\u002Fworkflow authoring principles (extend existing files before adding new ones; no speculative flags, restated defaults, or silent fallbacks), and step-by-step common-task recipes (adding a solver parameter, dependency, server endpoint, or CUDA kernel), see ",{"type":52,"tag":88,"props":1687,"children":1689},{"href":1688},"references\u002Fcontributing.md",[1690],{"type":58,"value":1688},{"type":58,"value":687},{"type":52,"tag":100,"props":1693,"children":1695},{"id":1694},"coding-conventions",[1696],{"type":58,"value":1697},"Coding Conventions",{"type":52,"tag":61,"props":1699,"children":1700},{},[1701,1703,1709,1710,1716,1717,1723,1725,1731,1733,1739,1740,1746,1747,1753,1754,1760,1762,1768,1769,1775,1777,1782,1783,1788,1790,1795],{"type":58,"value":1702},"For C++ naming (",{"type":52,"tag":127,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":58,"value":1708},"snake_case",{"type":58,"value":359},{"type":52,"tag":127,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":58,"value":1715},"d_",{"type":58,"value":584},{"type":52,"tag":127,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":58,"value":1722},"h_",{"type":58,"value":1724}," prefixes, ",{"type":52,"tag":127,"props":1726,"children":1728},{"className":1727},[],[1729],{"type":58,"value":1730},"_t",{"type":58,"value":1732}," suffix), file extensions (",{"type":52,"tag":127,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":58,"value":1738},".hpp",{"type":58,"value":584},{"type":52,"tag":127,"props":1741,"children":1743},{"className":1742},[],[1744],{"type":58,"value":1745},".cpp",{"type":58,"value":584},{"type":52,"tag":127,"props":1748,"children":1750},{"className":1749},[],[1751],{"type":58,"value":1752},".cu",{"type":58,"value":584},{"type":52,"tag":127,"props":1755,"children":1757},{"className":1756},[],[1758],{"type":58,"value":1759},".cuh",{"type":58,"value":1761}," and which compiler each uses), include order, Python style, error handling (",{"type":52,"tag":127,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":58,"value":1767},"CUOPT_EXPECTS",{"type":58,"value":359},{"type":52,"tag":127,"props":1770,"children":1772},{"className":1771},[],[1773],{"type":58,"value":1774},"RAFT_CUDA_TRY",{"type":58,"value":1776},"), memory management (RMM patterns, no raw ",{"type":52,"tag":127,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":58,"value":1133},{"type":58,"value":584},{"type":52,"tag":127,"props":1784,"children":1786},{"className":1785},[],[1787],{"type":58,"value":1140},{"type":58,"value":1789},"), and test-impact rules, see ",{"type":52,"tag":88,"props":1791,"children":1793},{"href":1792},"references\u002Fconventions.md",[1794],{"type":58,"value":1792},{"type":58,"value":687},{"type":52,"tag":100,"props":1797,"children":1799},{"id":1798},"troubleshooting-ci",[1800],{"type":58,"value":1801},"Troubleshooting & CI",{"type":52,"tag":61,"props":1803,"children":1804},{},[1805,1807,1813,1815,1820],{"type":58,"value":1806},"For build\u002Ftest pitfalls (Cython rebuild, OOM, CUDA driver mismatch, missing ",{"type":52,"tag":127,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":58,"value":1812},"nvcc",{"type":58,"value":1814},") and CI failure diagnostics (style checks, DCO failures, dependency drift), see ",{"type":52,"tag":88,"props":1816,"children":1818},{"href":1817},"references\u002Ftroubleshooting.md",[1819],{"type":58,"value":1817},{"type":58,"value":687},{"type":52,"tag":100,"props":1822,"children":1824},{"id":1823},"key-files-reference",[1825],{"type":58,"value":1826},"Key Files Reference",{"type":52,"tag":877,"props":1828,"children":1829},{},[1830,1846],{"type":52,"tag":881,"props":1831,"children":1832},{},[1833],{"type":52,"tag":885,"props":1834,"children":1835},{},[1836,1841],{"type":52,"tag":889,"props":1837,"children":1838},{},[1839],{"type":58,"value":1840},"Purpose",{"type":52,"tag":889,"props":1842,"children":1843},{},[1844],{"type":58,"value":1845},"Location",{"type":52,"tag":916,"props":1847,"children":1848},{},[1849,1866,1882,1899,1915,1932],{"type":52,"tag":885,"props":1850,"children":1851},{},[1852,1857],{"type":52,"tag":923,"props":1853,"children":1854},{},[1855],{"type":58,"value":1856},"Main build script",{"type":52,"tag":923,"props":1858,"children":1859},{},[1860],{"type":52,"tag":127,"props":1861,"children":1863},{"className":1862},[],[1864],{"type":58,"value":1865},"build.sh",{"type":52,"tag":885,"props":1867,"children":1868},{},[1869,1874],{"type":52,"tag":923,"props":1870,"children":1871},{},[1872],{"type":58,"value":1873},"Dependencies",{"type":52,"tag":923,"props":1875,"children":1876},{},[1877],{"type":52,"tag":127,"props":1878,"children":1880},{"className":1879},[],[1881],{"type":58,"value":290},{"type":52,"tag":885,"props":1883,"children":1884},{},[1885,1890],{"type":52,"tag":923,"props":1886,"children":1887},{},[1888],{"type":58,"value":1889},"C++ formatting",{"type":52,"tag":923,"props":1891,"children":1892},{},[1893],{"type":52,"tag":127,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":58,"value":1898},".clang-format",{"type":52,"tag":885,"props":1900,"children":1901},{},[1902,1907],{"type":52,"tag":923,"props":1903,"children":1904},{},[1905],{"type":58,"value":1906},"Conda environments",{"type":52,"tag":923,"props":1908,"children":1909},{},[1910],{"type":52,"tag":127,"props":1911,"children":1913},{"className":1912},[],[1914],{"type":58,"value":306},{"type":52,"tag":885,"props":1916,"children":1917},{},[1918,1923],{"type":52,"tag":923,"props":1919,"children":1920},{},[1921],{"type":58,"value":1922},"Test data",{"type":52,"tag":923,"props":1924,"children":1925},{},[1926],{"type":52,"tag":127,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":58,"value":1931},"datasets\u002F",{"type":52,"tag":885,"props":1933,"children":1934},{},[1935,1940],{"type":52,"tag":923,"props":1936,"children":1937},{},[1938],{"type":58,"value":1939},"CI scripts",{"type":52,"tag":923,"props":1941,"children":1942},{},[1943],{"type":52,"tag":127,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":58,"value":1948},"ci\u002F",{"type":52,"tag":100,"props":1950,"children":1952},{"id":1951},"canonical-documentation",[1953],{"type":58,"value":1954},"Canonical Documentation",{"type":52,"tag":185,"props":1956,"children":1957},{},[1958,1972,1986,2001,2016],{"type":52,"tag":189,"props":1959,"children":1960},{},[1961,1966,1968],{"type":52,"tag":70,"props":1962,"children":1963},{},[1964],{"type":58,"value":1965},"Contributing\u002Fbuild\u002Ftest",{"type":58,"value":1967},": ",{"type":52,"tag":88,"props":1969,"children":1970},{"href":1266},[1971],{"type":58,"value":1269},{"type":52,"tag":189,"props":1973,"children":1974},{},[1975,1979,1980],{"type":52,"tag":70,"props":1976,"children":1977},{},[1978],{"type":58,"value":1939},{"type":58,"value":1967},{"type":52,"tag":88,"props":1981,"children":1983},{"href":1982},"..\u002F..\u002Fci\u002FREADME.md",[1984],{"type":58,"value":1985},"ci\u002FREADME.md",{"type":52,"tag":189,"props":1987,"children":1988},{},[1989,1994,1995],{"type":52,"tag":70,"props":1990,"children":1991},{},[1992],{"type":58,"value":1993},"Release scripts",{"type":58,"value":1967},{"type":52,"tag":88,"props":1996,"children":1998},{"href":1997},"..\u002F..\u002Fci\u002Frelease\u002FREADME.md",[1999],{"type":58,"value":2000},"ci\u002Frelease\u002FREADME.md",{"type":52,"tag":189,"props":2002,"children":2003},{},[2004,2009,2010],{"type":52,"tag":70,"props":2005,"children":2006},{},[2007],{"type":58,"value":2008},"Docs build",{"type":58,"value":1967},{"type":52,"tag":88,"props":2011,"children":2013},{"href":2012},"..\u002F..\u002Fdocs\u002Fcuopt\u002FREADME.md",[2014],{"type":58,"value":2015},"docs\u002Fcuopt\u002FREADME.md",{"type":52,"tag":189,"props":2017,"children":2018},{},[2019,2024,2025],{"type":52,"tag":70,"props":2020,"children":2021},{},[2022],{"type":58,"value":2023},"Python binding architecture",{"type":58,"value":1967},{"type":52,"tag":88,"props":2026,"children":2027},{"href":1662},[2028],{"type":58,"value":1662},{"type":52,"tag":61,"props":2030,"children":2031},{},[2032],{"type":52,"tag":177,"props":2033,"children":2034},{},[2035,2037,2041],{"type":58,"value":2036},"Shell-execution, install, conda-env, and sudo policies are covered by ",{"type":52,"tag":88,"props":2038,"children":2039},{"href":683},[2040],{"type":58,"value":105},{"type":58,"value":2042}," at the top of this skill.",{"type":52,"tag":100,"props":2044,"children":2046},{"id":2045},"vrp-dimension-internals-routing-engine",[2047],{"type":58,"value":2048},"VRP dimension internals (routing engine)",{"type":52,"tag":61,"props":2050,"children":2051},{},[2052,2054,2059,2061,2067],{"type":58,"value":2053},"When implementing or debugging ",{"type":52,"tag":70,"props":2055,"children":2056},{},[2057],{"type":58,"value":2058},"VRP dimensions",{"type":58,"value":2060}," (constraints, objectives, forward\u002Fbackward propagation, ",{"type":52,"tag":127,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":58,"value":2066},"combine",{"type":58,"value":2068},", local-search deltas), read:",{"type":52,"tag":185,"props":2070,"children":2071},{},[2072],{"type":52,"tag":189,"props":2073,"children":2074},{},[2075,2084],{"type":52,"tag":70,"props":2076,"children":2077},{},[2078],{"type":52,"tag":127,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":58,"value":2083},"references\u002Fvrp_skills.md",{"type":58,"value":2085}," — architecture contracts, required interfaces, and implementation checklist.",{"type":52,"tag":61,"props":2087,"children":2088},{},[2089,2091,2095],{"type":58,"value":2090},"Read it ",{"type":52,"tag":70,"props":2092,"children":2093},{},[2094],{"type":58,"value":1215},{"type":58,"value":2096}," adding a new dimension or changing combine semantics.",{"type":52,"tag":100,"props":2098,"children":2100},{"id":2099},"numerical-issues-in-non-routing-solver-internals",[2101],{"type":58,"value":2102},"Numerical issues in non-routing solver internals",{"type":52,"tag":61,"props":2104,"children":2105},{},[2106,2108,2113],{"type":58,"value":2107},"When a bug surfaces as ",{"type":52,"tag":70,"props":2109,"children":2110},{},[2111],{"type":58,"value":2112},"wrong-but-plausible",{"type":58,"value":2114}," solver output (invalid lower bound, unexpectedly large duals, 10× iteration blow-up after a small change) rather than a crash, read:",{"type":52,"tag":185,"props":2116,"children":2117},{},[2118],{"type":52,"tag":189,"props":2119,"children":2120},{},[2121,2130],{"type":52,"tag":70,"props":2122,"children":2123},{},[2124],{"type":52,"tag":127,"props":2125,"children":2127},{"className":2126},[],[2128],{"type":58,"value":2129},"resources\u002Fnumerical_debugging.md",{"type":58,"value":2131}," — methodology for locating catastrophic-cancellation sites, the cancellation patterns endemic to cMIR \u002F flow-cover \u002F MIR-style cut construction, and threshold guidance for numerical guards.",{"type":52,"tag":61,"props":2133,"children":2134},{},[2135,2137,2142],{"type":58,"value":2136},"Apply the ",{"type":52,"tag":177,"props":2138,"children":2139},{},[2140],{"type":58,"value":2141},"instrument-first, guard-at-the-exact-site",{"type":58,"value":2143}," workflow it describes before patching — speculative fixes on these symptoms usually miss.",{"type":52,"tag":2145,"props":2146,"children":2147},"style",{},[2148],{"type":58,"value":2149},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2151,"total":2255},[2152,2169,2183,2197,2209,2226,2241],{"slug":2153,"name":2153,"fn":2154,"description":2155,"org":2156,"tags":2157,"stars":26,"repoUrl":27,"updatedAt":2168},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2158,2161,2164,2165],{"name":2159,"slug":2160,"type":15},"Data Analysis","data-analysis",{"name":2162,"slug":2163,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":2166,"slug":2167,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":2170,"name":2170,"fn":2171,"description":2172,"org":2173,"tags":2174,"stars":26,"repoUrl":27,"updatedAt":2182},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2175,2178,2181],{"name":2176,"slug":2177,"type":15},"Deployment","deployment",{"name":2179,"slug":2180,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2184,"name":2184,"fn":2185,"description":2186,"org":2187,"tags":2188,"stars":26,"repoUrl":27,"updatedAt":2196},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2189,2192,2193],{"name":2190,"slug":2191,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2194,"slug":2195,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2198,"name":2198,"fn":2199,"description":2200,"org":2201,"tags":2202,"stars":26,"repoUrl":27,"updatedAt":2208},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2203,2204,2205],{"name":2159,"slug":2160,"type":15},{"name":9,"slug":8,"type":15},{"name":2206,"slug":2207,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2210,"name":2210,"fn":2211,"description":2212,"org":2213,"tags":2214,"stars":26,"repoUrl":27,"updatedAt":2225},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2215,2218,2221,2222],{"name":2216,"slug":2217,"type":15},"Automation","automation",{"name":2219,"slug":2220,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2223,"slug":2224,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":2227,"name":2227,"fn":2228,"description":2229,"org":2230,"tags":2231,"stars":26,"repoUrl":27,"updatedAt":2240},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2232,2233,2236,2237],{"name":2176,"slug":2177,"type":15},{"name":2234,"slug":2235,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2238,"slug":2239,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":2242,"name":2242,"fn":2243,"description":2244,"org":2245,"tags":2246,"stars":26,"repoUrl":27,"updatedAt":2254},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2247,2248,2251],{"name":9,"slug":8,"type":15},{"name":2249,"slug":2250,"type":15},"Quantum Computing","quantum-computing",{"name":2252,"slug":2253,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":2257,"total":2404},[2258,2276,2290,2301,2313,2325,2338,2352,2363,2372,2386,2395],{"slug":2259,"name":2259,"fn":2260,"description":2261,"org":2262,"tags":2263,"stars":2273,"repoUrl":2274,"updatedAt":2275},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2264,2267,2270],{"name":2265,"slug":2266,"type":15},"Documentation","documentation",{"name":2268,"slug":2269,"type":15},"MCP","mcp",{"name":2271,"slug":2272,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2277,"name":2277,"fn":2278,"description":2279,"org":2280,"tags":2281,"stars":2287,"repoUrl":2288,"updatedAt":2289},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2282,2285,2286],{"name":2283,"slug":2284,"type":15},"Containers","containers",{"name":2176,"slug":2177,"type":15},{"name":21,"slug":22,"type":15},17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2291,"name":2291,"fn":2292,"description":2293,"org":2294,"tags":2295,"stars":2287,"repoUrl":2288,"updatedAt":2300},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2296,2299],{"name":2297,"slug":2298,"type":15},"CI\u002FCD","ci-cd",{"name":2176,"slug":2177,"type":15},"2026-07-14T05:25:59.97109",{"slug":2302,"name":2302,"fn":2303,"description":2304,"org":2305,"tags":2306,"stars":2287,"repoUrl":2288,"updatedAt":2312},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2307,2308,2309],{"name":2297,"slug":2298,"type":15},{"name":2176,"slug":2177,"type":15},{"name":2310,"slug":2311,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2314,"name":2314,"fn":2315,"description":2316,"org":2317,"tags":2318,"stars":2287,"repoUrl":2288,"updatedAt":2324},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2319,2320,2321],{"name":24,"slug":25,"type":15},{"name":2310,"slug":2311,"type":15},{"name":2322,"slug":2323,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2326,"name":2326,"fn":2327,"description":2328,"org":2329,"tags":2330,"stars":2287,"repoUrl":2288,"updatedAt":2337},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2331,2334],{"name":2332,"slug":2333,"type":15},"Best Practices","best-practices",{"name":2335,"slug":2336,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2339,"name":2339,"fn":2340,"description":2341,"org":2342,"tags":2343,"stars":2287,"repoUrl":2288,"updatedAt":2351},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2344,2347,2350],{"name":2345,"slug":2346,"type":15},"Machine Learning","machine-learning",{"name":2348,"slug":2349,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2353,"name":2353,"fn":2354,"description":2355,"org":2356,"tags":2357,"stars":2287,"repoUrl":2288,"updatedAt":2362},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2358,2361],{"name":2359,"slug":2360,"type":15},"QA","qa",{"name":2206,"slug":2207,"type":15},"2026-07-14T05:25:53.673039",{"slug":2364,"name":2364,"fn":2365,"description":2366,"org":2367,"tags":2368,"stars":2287,"repoUrl":2288,"updatedAt":2371},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2369,2370],{"name":2176,"slug":2177,"type":15},{"name":2179,"slug":2180,"type":15},"2026-07-14T05:25:49.362534",{"slug":2373,"name":2373,"fn":2374,"description":2375,"org":2376,"tags":2377,"stars":2287,"repoUrl":2288,"updatedAt":2385},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2378,2381,2382],{"name":2379,"slug":2380,"type":15},"Code Review","code-review",{"name":2310,"slug":2311,"type":15},{"name":2383,"slug":2384,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2387,"name":2387,"fn":2388,"description":2389,"org":2390,"tags":2391,"stars":2287,"repoUrl":2288,"updatedAt":2394},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2392,2393],{"name":2359,"slug":2360,"type":15},{"name":2206,"slug":2207,"type":15},"2026-07-14T05:25:54.928983",{"slug":2396,"name":2396,"fn":2397,"description":2398,"org":2399,"tags":2400,"stars":2287,"repoUrl":2288,"updatedAt":2403},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2401,2402],{"name":2216,"slug":2217,"type":15},{"name":2297,"slug":2298,"type":15},"2026-07-30T05:29:03.275638",496]