chore: bump python default to 3.13 - #463
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
660c85c to
6034d6e
Compare
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (3)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📜 Recent review details⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
🧰 Additional context used📓 Path-based instructions (2).github/workflows/*.{yaml,yml}📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Files:
.github/**⚙️ CodeRabbit configuration file
Files:
🧠 Learnings (4)📓 Common learnings📚 Learning: 2026-06-03T23:08:32.341ZApplied to files:
📚 Learning: 2026-06-03T23:08:14.151ZApplied to files:
📚 Learning: 2026-06-03T23:08:50.142ZApplied to files:
🔇 Additional comments (1)
WalkthroughThis PR upgrades the project baseline to Python 3.13, adds typing-extensions and ChangesPython upgrade and typing improvements
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Greptile SummaryThis PR promotes Python 3.13 to the default runtime across local development, CI, Docker, and Slurm tooling, while maintaining declared support for 3.11–3.13. It also adds
Confidence Score: 5/5Safe to merge — all runtime and CI changes are mechanically consistent, previous workflow bugs are fixed, and the typing_extensions backports are correct for the stated 3.11 minimum. The changes are well-scoped version bumps with matching lock-file regeneration. The GPU matrix variable that was previously declared but never consumed is now wired through correctly. Both coverage upload guards were updated together. The typing_extensions imports use the right backport strategy for the 3.11 floor. The only open item is a documentation nit where the README and docker guide record the PYTHON_VERSION default as 3.13 while the Dockerfile pins 3.13.13. containers/README.md and docs/developer-guide/docker.md — PYTHON_VERSION default listed as 3.13 but Dockerfile.cuda defaults to 3.13.13. Important Files Changed
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
.github/workflows/gpu-tests.yml (1)
87-90: ⚡ Quick winRemove or wire the new Python matrix; right now it is unused and misleading.
This matrix currently has one value (
3.11) and is not referenced in any step, so it does not control runtime version. Either passmatrix.python-versioninto setup (and set default to 3.13 per this PR’s intent) or drop the matrix until it is used.containers/README.md (1)
86-86: ⚡ Quick winDocument the exact default patch version to match the Dockerfile.
PYTHON_VERSIONis documented as3.13, butcontainers/Dockerfile.cudadefaults to3.13.9. Use the exact value in this table to keep container builds reproducible and avoid version ambiguity.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: cb4853b6-1568-40ba-8e15-4f5251fc48df
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock,!uv.lock
📒 Files selected for processing (25)
.github/workflows/ci-checks.yml.github/workflows/gpu-tests.yml.python-versionCONTRIBUTING.mdMakefileREADME.mdSTYLE_GUIDE.mdcontainers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.mddocs/developer-guide/docker.mddocs/tutorials/differential-privacy.ipynbdocs/tutorials/safe-synthesizer-101.ipynbdocs/user-guide/getting-started.mddocs/user-guide/troubleshooting.mdpyproject.tomlscript/slurm/README.mdscript/slurm/env_variables.shscript/slurm/slurm_nss_matrix.shsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Unit Tests (3.12)
- GitHub Check: Unit Tests (3.11)
- GitHub Check: Unit Tests (3.13)
🧰 Additional context used
📓 Path-based instructions (27)
**/*.{sh,bash}
📄 CodeRabbit inference engine (AGENTS.md)
Never use
~inside double-quoted strings in shell scripts -- it does not expand. Use$HOMEor an absolute path instead
Files:
script/slurm/env_variables.shscript/slurm/slurm_nss_matrix.sh
**/*.sh
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Shell scripts must use SPDX copyright headers, automatically added by
make formatUse shebang
#!/usr/bin/env bash(not#!/bin/bash) for shell scriptsUse
set -euminimum; useset -euo pipefailunlesspipefailbreaks piped-grep patternsUse snake_case for shell script function names; use
_prefix for internal helpersAlways quote shell script variables (
"$VAR","${VAR}"); use defaults via${VAR:-default}; usereadonlyfor variables that should not changeUse
REPO_ROOT=${REPO_ROOT:-$(git rev-parse --show-toplevel)}pattern for repo root detection in shell scriptsUse
shellcheckto lint shell scripts; add# shellcheck disable=SCXXXXwith a brief reason when disabling checks
Files:
script/slurm/env_variables.shscript/slurm/slurm_nss_matrix.sh
⚙️ CodeRabbit configuration file
Review shell scripts for #!/usr/bin/env bash, set -euo pipefail where appropriate, quoting, repo root detection, and shellcheck compliance.
Files:
script/slurm/env_variables.shscript/slurm/slurm_nss_matrix.sh
**/*.{py,md,yaml,yml,sh}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use American English spelling: 'initialize' not 'initialise', 'recognize' not 'recognise', 'color' not 'colour'
Files:
script/slurm/env_variables.shdocs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mdscript/slurm/slurm_nss_matrix.shsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
**/*.{py,sh,yaml,yml,md,toml}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Include SPDX copyright header in every source file; use hash-comments for
.py,.sh,.yaml,.ymland HTML-comment for.md; use hash-comments inside YAML frontmatter for markdown with frontmatterInclude newline at end of file with no trailing whitespace (enforced by pre-commit)
Use single space between sentences, never two
Files:
script/slurm/env_variables.shdocs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mdpyproject.tomlscript/slurm/slurm_nss_matrix.shsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
**/*
⚙️ CodeRabbit configuration file
**/*: Review as a senior maintainer for NeMo Safe Synthesizer. Prioritize issues that can change behavior, break user workflows, weaken privacy guarantees, hide failures, make tests unreliable, or create maintenance risk. Avoid generic style commentary unless it points to a concrete project convention that automated tools will not catch.
Comment only when the finding is actionable and tied to changed code. For each finding, state the impact, the condition that triggers it, and the smallest practical fix. Prefer one precise comment over broad advice. Do not ask for refactors outside the PR scope unless the changed code creates the problem.
Review type guidance: - Potential issue: use for correctness bugs, data loss, privacy leaks,
security risks, broken public APIs, invalid config behavior, missing
validation, hidden failures, nondeterministic tests, or CI breakage.
- Refactor suggestion: use for local maintainability problems introduced
by the diff when they have clear future cost, such as duplicated setup,
unclear boundaries, over-mocking, avoidable complexity, or opaque test
helpers.- Nitpick: avoid in chill mode. Do not emit formatting, import-order,
wording, or style-only comments unless automated tools cannot catch the
issue and it affects maintainability.Severity guidance: - Critical: security/privacy leaks, data loss, training/test/holdout
contamination, or broken release/package/core pipeline execution.
- Major: incorrect generation/training/evaluation behavior, broken
CLI/SDK public API, invalid config defaults or validators, or GPU/vLLM
cleanup and process-isolation bugs likely to fail CI or production
runs.- Minor: localized bugs, missing focused tests for changed behavior, or
bad test patterns that weaken regression coverage.- Trivial: small cleanup with no behavior impact. Usually suppress in
chill mode.- Info: context only. Avoid unless it helps reviewers understand risk.
Safe-Synthesizer-specific review focus: - Data ...
Files:
script/slurm/env_variables.shdocs/user-guide/getting-started.mdcontainers/Dockerfile.cudadocs/tutorials/safe-synthesizer-101.ipynbscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdcontainers/Dockerfile.test_ciSTYLE_GUIDE.mdMakefiledocs/user-guide/troubleshooting.mdREADME.mdpyproject.tomlscript/slurm/slurm_nss_matrix.shsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
script/**
⚙️ CodeRabbit configuration file
Review standalone scripts for reproducibility and operational safety. Check argument validation, quoting, repo-root detection, environment variables, generated artifacts, external commands, GPU/cluster assumptions, and whether the script should be wired through Makefile or documented in README/docs.
Files:
script/slurm/env_variables.shscript/slurm/README.mdscript/slurm/slurm_nss_matrix.sh
**/*.{md,markdown,py}
📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)
**/*.{md,markdown,py}: Avoid decorative bold (**text**) in list items, body text, and docstrings; use structural cues (headers, list markers, colons, backticks) for emphasis instead
Use backticks for code identifiers, paths, and CLI commands in markdown and docstrings
Files:
docs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mdsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
**/*.{md,markdown}
📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)
**/*.{md,markdown}: Bold is acceptable only in markdown tables where it's the conventional way to mark header-like cells in the body
Use##headers to segment markdown sections instead of bold text
Use--(em-dash) instead of-(hyphen) for asides in markdown
Files:
docs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mddocs/developer-guide/docker.md
docs/**/*.md
📄 CodeRabbit inference engine (.cursor/rules/writing-docs.mdc)
docs/**/*.md: Classify documentation content using the Diataxis framework (TUTORIAL, HOW-TO, EXPLANATION, or REFERENCE) and ensure each page fits ONE type only
Use MkDocs Material admonition syntax (!!! note, !!! warning, ??? tip) for callouts and collapsible content
Use MkDocs Material tab syntax (=== "Tab Name") to present multiple variations or language-specific examples
Include code block metadata in MkDocs Material format: use title attribute for filenames and hl_lines for syntax highlighting of specific lines
Use Mermaid diagram syntax for flowcharts and visual representations in documentation
List prerequisites at the top of each documentation page before main content
End documentation pages with 'Next steps' section containing links to related contentDocumentation must use MkDocs Material Markdown extensions: admonitions, content tabs, code blocks, Mermaid diagrams, task lists, footnotes, definition lists, and emoji
Classify documentation pages in
docs/as tutorial, how-to, explanation, or reference per the Diataxis framework; use MkDocs Material syntax (admonitions, tabs, code blocks with titles)Use Mermaid diagrams with no spaces in node IDs, quote labels with special characters, no explicit colors or styles
Files:
docs/user-guide/getting-started.mddocs/user-guide/troubleshooting.mddocs/developer-guide/docker.md
**/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Markdown documentation files must use SPDX copyright headers, automatically added by
make formatNo decorative
**bold**in markdown body text, list items, or docstrings; use headers, list markers, colons, and backticks for structureUse
--(em-dash) for asides in markdown, not-(hyphen)Use single backticks for code identifiers, paths, and CLI commands in markdown
Files:
docs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mddocs/developer-guide/docker.md
**/*.{py,yaml,yml,md}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use canonical dataset names consistently: 'input' for full user-supplied data, 'training' for fine-tuning split, 'test' for holdout split, 'synthetic' for model-produced records
Files:
docs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mdsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
**/*.{py,md}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use double backticks for inline code in docstrings; use single backticks in markdown
Enforce 120 character line length for code, comments, and docstrings (configured in ruff.toml)
Files:
docs/user-guide/getting-started.mdscript/slurm/README.mdcontainers/README.mdsrc/nemo_safe_synthesizer/preflight/checks/advisory.pyCONTRIBUTING.mdSTYLE_GUIDE.mddocs/user-guide/troubleshooting.mdREADME.mdsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pydocs/developer-guide/docker.mdsrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
docs/**
⚙️ CodeRabbit configuration file
Review documentation as MkDocs Material content. Check Diataxis fit, accurate commands, internal links, code fences, and markdown style from STYLE_GUIDE.md.
Files:
docs/user-guide/getting-started.mddocs/tutorials/safe-synthesizer-101.ipynbdocs/user-guide/troubleshooting.mddocs/developer-guide/docker.md
.github/workflows/*.{yaml,yml}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use
#with dashes for section dividers in GitHub Actions workflows
Files:
.github/workflows/gpu-tests.yml.github/workflows/ci-checks.yml
.github/**
⚙️ CodeRabbit configuration file
Review GitHub configuration for branch protection expectations, CODEOWNERS alignment, least privilege permissions, pinned actions where practical, and consistency with CONTRIBUTING.md.
Files:
.github/workflows/gpu-tests.yml.github/workflows/ci-checks.yml
**/Dockerfile*
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use multi-stage builds for production images in Dockerfiles
Copy uv from
ghcr.io/astral-sh/uv:<version>in DockerfilesUse
--mount=type=cachefor pip/uv caches and APT in Dockerfiles; prefer cache mounts overrm -rfto speed up rebuildsSet
ENV UV_LINK_MODE=copywhen using cache mounts in Dockerfiles (hardlinks into cache layers vanish after unmount)Use
--no-install-recommendson allapt-get installinvocations in DockerfilesUse non-root user (
appuser) withNVIDIA_VISIBLE_DEVICES=allfor GPU access in DockerfilesUse
tinior--initfor proper PID 1 signal handling in batch containers in DockerfilesOrder
COPYdirectives in Dockerfiles for cache efficiency (deps before source); include comments explaining cache invalidation points
Files:
containers/Dockerfile.cudacontainers/Dockerfile.test_ci
containers/**
⚙️ CodeRabbit configuration file
Review container changes against STYLE_GUIDE.md and containers/README.md. Check cache mounts, uv usage, non-root runtime behavior, CUDA settings, and copy order.
Files:
containers/Dockerfile.cudacontainers/README.mdcontainers/Dockerfile.test_ci
**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
Use Python 3.11–3.13 with modern syntax (
X | Y,list[str],Self). Python 3.14+ is not supportedPython source files must use SPDX copyright headers, automatically added by
make formatPython files must pass ruff format and ruff lint checks
Python files must pass
tytype checkingUse
NSSBaseModelfor config/parameter models inconfig/which define user-facing configuration; use rawBaseModelor module-specific bases for data transfer objects and internal structuresUse
BaseSettingsfor env/CLI settings withAliasChoicesfor per-field aliasing orenv_prefixfor simple settings where all fields share a common prefixInclude
Field(description=...)as the canonical field docstring for Pydantic modelsPrefer assignment-style field definitions (
type = Field(default=..., description="...")) for Pydantic models to ensure type checkers correctly synthesize__init__signaturesUse
Annotatedonly when the field carries additional metadata beyondField()(validators, AutoParam, constraints, discriminated unions), not for complex types likeLiteral[...]aloneInclude valid ranges in the
descriptionwhen constraints won't appear in rendered API docs (e.g., 'Must be in (0, 1).')Prefer
@dataclass(frozen=True)for immutable value objects and validators; mutable@dataclassacceptable for builders, accumulators, and pipeline stateUse
field(default_factory=list)for mutable defaults in dataclasses, never bare= []Use
StrEnumfor string-valued enums used in configs/serialization; use plainEnumfor internal-only named constantsUse
observability.get_logger(__name__)for logging, neverlogging.getLogger()orstructlog.get_logger()directlyUse category loggers with
.runtimefor internals,.userfor progress/results,.systemfor system eventsNever use
print()for operational output; useclick.echo()for CLI output orsys.stdout.write()for raw output in toolsUse
extra={}for structured data that downst...
Files:
src/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
src/**/*.py
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Python source files in
src/directory must follow Google-style docstring format for auto-generated API referenceNever use
assertfor validation in library code (can be stripped by-O); useif/raisefor input validation.assertis fine in tests wherepytestrelies on itUse
print()only in tests, standalone scripts, and tooling; useget_logger(__name__)orclick.echo()in library code
Files:
src/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
⚙️ CodeRabbit configuration file
Review library code against STYLE_GUIDE.md. Focus on behavior, API contracts, error handling, resource cleanup, typing, logging, and user-facing failures. Public APIs and nontrivial functions need Google-style docstrings.
Files:
src/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
src/**/
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Every directory under
src/that contains Python files must include an__init__.pyfile, even if empty
Files:
src/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
**/Makefile
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use Makefile target help format:
target-name: ## Descriptionformake helpauto-generation; use.PHONYdeclaration directly above each target; use tab indentationPlace variables in
### CONFIGURATION ###section in Makefiles
Files:
Makefile
Makefile
⚙️ CodeRabbit configuration file
Treat Makefile targets as the validation source of truth. Check that new targets are documented with target-name: ## Description, declared .PHONY where appropriate, and use uv/mise conventions.
Files:
Makefile
README.md
⚙️ CodeRabbit configuration file
Treat README.md as the project overview. Check that setup, usage, and links stay consistent with CONTRIBUTING.md, Makefile, and docs/.
Files:
README.md
pyproject.toml
📄 CodeRabbit inference engine (.cursor/rules/repo-navigation.mdc)
Package metadata, dependencies, and extras (cpu/cu128/engine) should be configured in
pyproject.toml
Files:
pyproject.toml
⚙️ CodeRabbit configuration file
Treat pyproject.toml as high-risk. Check package metadata, uv indexes, dependency groups, optional extras, Python version bounds, hatch config, ty config, script entry points, dependency consistency, and whether changes require regenerating uv.lock.
Files:
pyproject.toml
**/*.toml
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use spaces around
=for key-value pairs in TOML filesUse
# commentfor comments in TOML files; use inline comments for dependency pins
Files:
pyproject.toml
**/pyproject.toml
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Order sections in
pyproject.tomlas:[project],[dependency-groups],[project.optional-dependencies],[tool.uv],[build-system],[tool.*]
Files:
pyproject.toml
src/nemo_safe_synthesizer/configurator/**/*.py
⚙️ CodeRabbit configuration file
Review Pydantic-to-Click mapping carefully. Check option names, type conversion, nullable sub-config behavior, validation errors, help text, and compatibility with parse_overrides().
Files:
src/nemo_safe_synthesizer/configurator/pydantic_click_options.py
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: All branches (except `main`) must follow the naming pattern: `<author>/<description>`, `<author>/<issue-id>-<description>`, `<author>/<type>/<description>`, or `<author>/<type>/<issue-id>-<description>` where author is lowercase alphanumeric with hyphens, type is one of: feature, bugfix, hotfix, release, docs, chore, test
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: All commits merged to `main` must follow Conventional Commits specification with format `<type>(<scope>): <description>` where type is one of: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: All contributions must be signed off with `Signed-off-by` line added to commit messages to certify Developer Certificate of Origin (DCO)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: All commits must have verified signatures (SSH or GPG signing required) to merge to `main` branch
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Use `make format` to auto-fix code style issues: runs ruff format, import sorting, and copyright header addition
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Use `make check` to run read-only CI checks: format-check, lint, type-check, and copyright header verification
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Run `make test` to execute unit tests (excludes slow unit tests, smoke and e2e tests) before submitting PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: New features must include tests before submitting PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Bug fixes must include regression tests before submitting PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Documentation pages must be added to `mkdocs.yml` navigation section to appear in sidebar
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Pull request titles must follow Conventional Commits format as they become the commit message after squash merge
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Address all review comments in PR, respond to comments in GitHub console (not in private), and resolve comments only when requested change has been made
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Use Assignees list on PR to indicate who is expected to take next action
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Re-request review from reviewers using the circular arrow button after pushing changes in response to feedback
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: GitHub issues must be classified with one Type from: Bug, Feature, Question, or Task
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Issues and PRs should have Priority and Size fields set in the Safe Synthesizer Development GitHub project for backlog ordering and effort tracking
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Apply relevant labels from the canonical label list to issues and PRs for categorization and routing
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Release versions must follow PEP440 format with major.minor.patch numbering and optional rcN suffix, tagged with `v` prefix in git
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Use `make publish-internal` to build wheel and upload to NVIDIA Artifactory (requires TWINE_REPOSITORY_URL, TWINE_USERNAME, TWINE_PASSWORD environment variables)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Create an issue first to discuss proposed changes before implementing and opening a PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Code owners from CODEOWNERS file will be automatically assigned to review PRs affecting src/ and test/ files
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:40:00.165Z
Learning: Use GitHub Discussions instead of Issues for general questions
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:41:06.664Z
Learning: Never add `__init__.py` files under `tests/` as test directories are discovered by pytest via rootdir/testpaths, not Python package imports
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-05-28T22:41:06.664Z
Learning: Be consistent with local code style; local consistency matters more than global rules. When touching legacy code, migrate toward these conventions where practical
🔇 Additional comments (19)
pyproject.toml (1)
39-39: LGTM!src/nemo_safe_synthesizer/configurator/pydantic_click_options.py (1)
29-29: LGTM!Also applies to: 112-113
src/nemo_safe_synthesizer/preflight/base.py (1)
75-75: LGTM!Also applies to: 273-275, 288-290, 303-305, 322-324
src/nemo_safe_synthesizer/preflight/checks/advisory.py (1)
8-8: LGTM!Also applies to: 33-34, 50-51
src/nemo_safe_synthesizer/preflight/checks/dataframe.py (1)
8-8: LGTM!Also applies to: 43-44, 59-60, 86-87, 111-112, 127-128, 144-146, 150-152
src/nemo_safe_synthesizer/preflight/checks/environment.py (1)
12-12: LGTM!Also applies to: 47-48, 274-275, 339-340, 378-379
src/nemo_safe_synthesizer/preflight/checks/metadata.py (1)
8-8: LGTM!Also applies to: 48-49
.python-version (1)
1-1: LGTM!CONTRIBUTING.md (1)
30-30: LGTM!.github/workflows/ci-checks.yml (1)
144-145: LGTM!Also applies to: 162-168
containers/Dockerfile.cuda (1)
66-66: LGTM!containers/Dockerfile.test_ci (1)
1-1: LGTM!Makefile (1)
79-82: ⚡ Quick winParameterize the venv Python version in the Makefile to preserve the CI matrix behavior.
Makefile’s
.venvtarget hardcodesuv venv ... --python 3.13, which can defeat the 3.11/3.12/3.13 matrix if CI callsmake bootstrap-nssand.venvisn’t already created with the job’s matrix Python.Smallest fix: make the version configurable (e.g.,
PYTHON_VERSION ?= 3.13, thenuv venv ... --python $(PYTHON_VERSION)), and wirePYTHON_VERSIONfrom the workflow/matrix used by.github/actions/setup-python-env(or ensure that action pre-creates.venvbeforemake bootstrap-nss)..venv: verify-python-version ## Create a Python virtual environment uv venv --seed --allow-existing --python 3.13script/slurm/env_variables.sh (1)
32-32: LGTM!script/slurm/slurm_nss_matrix.sh (1)
109-114: LGTM!Also applies to: 122-122
script/slurm/README.md (1)
118-118: LGTM!STYLE_GUIDE.md (1)
119-121: LGTM!docs/user-guide/troubleshooting.md (1)
17-17: LGTM!Also applies to: 115-118
docs/tutorials/safe-synthesizer-101.ipynb (1)
234-234: LGTM!
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
- Clear outputs from differential-privacy.ipynb tutorial notebook - Move Python 3.11 syntax-compatibility note from README to CONTRIBUTING - Fix cu128 -> cu129 extras mismatch in docker.md comparison table - Align getting-started prerequisite line with markdown style rules Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
2a2de57 to
253fe02
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.github/workflows/ci-checks.yml (1)
166-179: ⚡ Quick winConsider aligning artifact upload with Codecov upload to use Python 3.13 for both.
The coverage artifact upload (line 166) still uses
matrix.python-version == '3.11', while the Codecov upload (line 173) now usesmatrix.python-version == '3.13'. Since 3.13 is the new primary coverage Python per the PR objectives, aligning both to 3.13 would make the "canonical coverage source" clearer and easier to maintain.♻️ Proposed alignment
- name: Upload coverage report uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 - if: matrix.python-version == '3.11' + if: matrix.python-version == '3.13' with: name: coverage-report path: coverage.json retention-days: 30Based on learnings: the PR objectives state that 3.13 is now the primary coverage and GPU default.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 2b4d4c55-c435-4ee9-ae77-d9c3e3e29502
⛔ Files ignored due to path filters (2)
mise.lockis excluded by!**/*.lock,!mise.lockuv.lockis excluded by!**/*.lock,!uv.lock
📒 Files selected for processing (24)
.github/workflows/ci-checks.yml.github/workflows/gpu-tests.yml.python-versionCONTRIBUTING.mdREADME.mdSTYLE_GUIDE.mdcontainers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.mddocs/developer-guide/docker.mddocs/tutorials/differential-privacy.ipynbdocs/tutorials/safe-synthesizer-101.ipynbdocs/user-guide/getting-started.mddocs/user-guide/troubleshooting.mdpyproject.tomlscript/slurm/README.mdscript/slurm/env_variables.shscript/slurm/slurm_nss_matrix.shsrc/nemo_safe_synthesizer/configurator/pydantic_click_options.pysrc/nemo_safe_synthesizer/preflight/base.pysrc/nemo_safe_synthesizer/preflight/checks/advisory.pysrc/nemo_safe_synthesizer/preflight/checks/dataframe.pysrc/nemo_safe_synthesizer/preflight/checks/environment.pysrc/nemo_safe_synthesizer/preflight/checks/metadata.py
✅ Files skipped from review due to trivial changes (11)
- docs/tutorials/safe-synthesizer-101.ipynb
- .python-version
- README.md
- docs/tutorials/differential-privacy.ipynb
- STYLE_GUIDE.md
- docs/developer-guide/docker.md
- docs/user-guide/troubleshooting.md
- src/nemo_safe_synthesizer/preflight/checks/metadata.py
- src/nemo_safe_synthesizer/preflight/checks/advisory.py
- script/slurm/README.md
- src/nemo_safe_synthesizer/preflight/checks/environment.py
🚧 Files skipped from review as they are similar to previous changes (7)
- docs/user-guide/getting-started.md
- script/slurm/env_variables.sh
- .github/workflows/gpu-tests.yml
- pyproject.toml
- src/nemo_safe_synthesizer/configurator/pydantic_click_options.py
- src/nemo_safe_synthesizer/preflight/base.py
- src/nemo_safe_synthesizer/preflight/checks/dataframe.py
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Unit Tests (3.12)
- GitHub Check: Unit Tests (3.11)
- GitHub Check: Unit Tests (3.13)
🧰 Additional context used
📓 Path-based instructions (12)
.github/workflows/*.{yaml,yml}
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use
#with dashes for section dividers in GitHub Actions workflow YAML files
Files:
.github/workflows/ci-checks.yml
.github/**
⚙️ CodeRabbit configuration file
Review GitHub configuration for branch protection expectations, CODEOWNERS alignment, least privilege permissions, pinned actions where practical, and consistency with CONTRIBUTING.md.
Files:
.github/workflows/ci-checks.yml
**/*.{md,markdown,py}
📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)
**/*.{md,markdown,py}: Avoid decorative bold (**text**) in list items, body text, and docstrings; use structural cues (headers, list markers, colons, backticks) for emphasis instead
Use backticks for code identifiers, paths, and CLI commands in markdown and docstrings
Files:
CONTRIBUTING.mdcontainers/README.md
**/*.{md,markdown}
📄 CodeRabbit inference engine (.cursor/rules/agent-markdown-style.mdc)
**/*.{md,markdown}: Bold is acceptable only in markdown tables where it's the conventional way to mark header-like cells in the body
Use##headers to segment markdown sections instead of bold text
Use--(em-dash) instead of-(hyphen) for asides in markdown
Files:
CONTRIBUTING.mdcontainers/README.md
**/*.{py,sh,yaml,yml,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
All source files (.py, .sh, .yaml, .yml, .md) must include SPDX copyright headers; use 'mise run format' to add them automatically
Files:
CONTRIBUTING.mdcontainers/README.mdscript/slurm/slurm_nss_matrix.sh
**/*.md
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Avoid decorative
**bold**in markdown body text, list items, or docstrings. Use headers, list markers, colons, and backticks for structure. Bold is acceptable in table header-like cells and MkDocs Material card grid titlesUse
--(em-dash) for asides in markdown, not-(hyphen)
Files:
CONTRIBUTING.mdcontainers/README.md
**/*
⚙️ CodeRabbit configuration file
**/*: Review as a senior maintainer for NeMo Safe Synthesizer. Prioritize issues that can change behavior, break user workflows, weaken privacy guarantees, hide failures, make tests unreliable, or create maintenance risk. Avoid generic style commentary unless it points to a concrete project convention that automated tools will not catch.
Comment only when the finding is actionable and tied to changed code. For each finding, state the impact, the condition that triggers it, and the smallest practical fix. Prefer one precise comment over broad advice. Do not ask for refactors outside the PR scope unless the changed code creates the problem.
Review type guidance: - Potential issue: use for correctness bugs, data loss, privacy leaks,
security risks, broken public APIs, invalid config behavior, missing
validation, hidden failures, nondeterministic tests, or CI breakage.
- Refactor suggestion: use for local maintainability problems introduced
by the diff when they have clear future cost, such as duplicated setup,
unclear boundaries, over-mocking, avoidable complexity, or opaque test
helpers.- Nitpick: avoid in chill mode. Do not emit formatting, import-order,
wording, or style-only comments unless automated tools cannot catch the
issue and it affects maintainability.Severity guidance: - Critical: security/privacy leaks, data loss, training/test/holdout
contamination, or broken release/package/core pipeline execution.
- Major: incorrect generation/training/evaluation behavior, broken
CLI/SDK public API, invalid config defaults or validators, or GPU/vLLM
cleanup and process-isolation bugs likely to fail CI or production
runs.- Minor: localized bugs, missing focused tests for changed behavior, or
bad test patterns that weaken regression coverage.- Trivial: small cleanup with no behavior impact. Usually suppress in
chill mode.- Info: context only. Avoid unless it helps reviewers understand risk.
Safe-Synthesizer-specific review focus: - Data ...
Files:
CONTRIBUTING.mdcontainers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.mdscript/slurm/slurm_nss_matrix.sh
containers/Dockerfile*
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use multi-stage builds for production Docker images
Copy uv from
ghcr.io/astral-sh/uv:<version>in DockerfilesUse
--mount=type=cachefor pip/uv caches and APT in Dockerfiles (/var/cache/apt,/var/lib/apt/lists). Prefer cache mounts overrm -rf /var/lib/apt/lists/*Set
ENV UV_LINK_MODE=copyin Dockerfiles when using cache mountsUse
--no-install-recommendson allapt-get installinvocations in DockerfilesUse non-root user (
appuser) withNVIDIA_VISIBLE_DEVICES=allfor GPU access in DockerfilesUse
tinior--initfor proper PID 1 signal handling in batch containers (Dockerfiles)Order
COPYdirectives in Dockerfiles for cache efficiency (deps before source)Include comments in Dockerfiles explaining cache invalidation points
Files:
containers/Dockerfile.cudacontainers/Dockerfile.test_ci
containers/**
⚙️ CodeRabbit configuration file
Review container changes against STYLE_GUIDE.md and containers/README.md. Check cache mounts, uv usage, non-root runtime behavior, CUDA settings, and copy order.
Files:
containers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.md
**/*.{sh,bash}
📄 CodeRabbit inference engine (AGENTS.md)
Never use
~inside double-quoted strings in shell scripts -- use$HOMEor an absolute path instead
Files:
script/slurm/slurm_nss_matrix.sh
**/*.sh
📄 CodeRabbit inference engine (STYLE_GUIDE.md)
Use shebang
#!/usr/bin/env bashin shell scripts (not#!/bin/bash)Use minimum safety floor
set -euin shell scripts. Useset -euo pipefailunlesspipefailbreaks piped-grep patterns in the scriptUse
snake_casefor shell script function names,_prefix for internal helper functionsAlways quote shell variables (
"$VAR","${VAR}"), use defaults via${VAR:-default}. Usereadonlyfor variables that should not change after assignmentUse
REPO_ROOT=${REPO_ROOT:-$(git rev-parse --show-toplevel)}for repo root detection in shell scriptsUse
shellcheckto lint shell scripts. When disabling a check, add# shellcheck disable=SCXXXXwith a brief reason
Files:
script/slurm/slurm_nss_matrix.sh
⚙️ CodeRabbit configuration file
Review shell scripts for #!/usr/bin/env bash, set -euo pipefail where appropriate, quoting, repo root detection, and shellcheck compliance.
Files:
script/slurm/slurm_nss_matrix.sh
script/**
⚙️ CodeRabbit configuration file
Review standalone scripts for reproducibility and operational safety. Check argument validation, quoting, repo-root detection, environment variables, generated artifacts, external commands, GPU/cluster assumptions, and whether the script should be wired through Makefile or documented in README/docs.
Files:
script/slurm/slurm_nss_matrix.sh
🧠 Learnings (43)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to **/*.py : Python version support: Project supports Python 3.11, 3.12, and 3.13; Python 3.14+ is not supported
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Applies to **/*.py : Target Python 3.11–3.13 with modern syntax (`X | Y`, `list[str]`, `Self`). Python 3.14+ is not supported
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Require verified commits using either SSH or GPG signing on all commits
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: All commits must include a Signed-off-by trailer (DCO sign-off) certifying your right to contribute the code
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Branch names must follow the pattern: <author>/<description>, <author>/<issue-id>-<description>, <author>/<type>/<description>, or <author>/<type>/<issue-id>-<description>, where author is lowercase alphanumeric, and type is one of: feature, bugfix, hotfix, release, docs, chore, test
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: All commits merged to main must follow Conventional Commits specification with format <type>(<scope>): <description>, where type is one of: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Run 'mise run format' to auto-fix code style (ruff format, import sorting, copyright headers) before submitting a PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Run 'mise run check' to perform read-only local quality checks (format, lint, typecheck, copyright) before submitting a PR
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: All new features must include tests; bug fixes must include regression tests
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: PR titles should follow Conventional Commits format as they become the commit message after squash merge
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Use the project's pinned tool versions from .mise.toml and mise.lock (installed via 'make setup') when running ruff, ty, and other development tools
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Release versions must follow PEP440 with major, minor, and patch numbers; use stable releases and release candidates only (rcN suffix, no dash); GitHub tags must start with 'v' prefix
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:26:41.911Z
Learning: Use 'mise run publish:internal' to build a wheel and upload to NVIDIA Artifactory (requires TWINE_REPOSITORY_URL, TWINE_USERNAME, TWINE_PASSWORD environment variables)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use American English spelling: 'initialize' not 'initialise', 'recognize' not 'recognise', 'color' not 'colour'
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: For Python data models, use `NSSBaseModel` for config/parameter models in `config/` which define the user-facing configuration of NSS. Use raw `BaseModel` or module-specific bases (e.g., `ReportBaseModel`) for data transfer objects and internal structures
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `BaseSettings` for env/CLI settings in Pydantic models, preferring `AliasChoices` on individual fields for both Python name and env var name mapping (e.g., `validation_alias=AliasChoices('config_path', 'NSS_CONFIG')`)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Always include `Field(description=...)` as the canonical field docstring for Pydantic models, as griffe-pydantic extracts it for API reference and the configurator uses it for CLI help text
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Prefer assignment style for Pydantic model fields (`type = Field(default=..., description='...')`) because type checkers understand `default`, `default_factory`, and `alias` in assignment-style `Field()` and synthesize correct `__init__` signatures
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `Annotated` only when the field carries additional metadata beyond `Field()` -- `ValueValidator`, `AutoParam`, `DependsOnValidator`, reusable constrained type aliases, nested-type constraints, or discriminated unions
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: For defaults with `Annotated` in Pydantic models, put the default as a bare assignment (`= value`), not inside `Field(default=...)`. Exception: `default_factory` has no bare-assignment equivalent, so use assignment-style `Field(default_factory=...)` even when the type is `Annotated[...]`
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Include valid ranges in the `description` when constraints won't appear in rendered API docs (e.g., 'Must be in (0, 1).')
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Prefer `dataclass(frozen=True)` for immutable value objects and validators. Mutable `dataclass` is acceptable for builders, accumulators, and pipeline state
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `field(default_factory=list)` for mutable defaults in dataclasses, never `= []`
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `StrEnum` for string-valued enums used in configs/serialization. Use plain `Enum` for internal-only named constants
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `extra={}` in logger calls for data that downstream tools should query or aggregate (metrics, counts, durations). Use f-strings for human-readable context that doesn't need machine parsing
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use collection ABCs for function arguments (`Sequence`, `Mapping`, `Iterable`) so callers can pass any compatible container; use concrete types for return values so callers know exactly what they get
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `Protocol` for structural subtyping when you need duck-typing boundaries
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Prefer `match`/`case` for dispatch on types or tagged values. `if`/`elif` is acceptable for simple boolean predicates
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use comprehensions over imperative loops where intent is clearer. Avoid multiple `for` clauses -- optimize for readability, not conciseness
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use clamping/saturation over raising when out-of-range inputs shouldn't crash the system -- prefer returning a bounded value with a log warning over raising (e.g., `p = max(0.0, min(p, 1.0))`)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use builder pattern with `with_*` methods returning `Self` for fluent API design
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Avoid deeply nested code -- if a function has more than two levels of indentation beyond `def`, it needs refactoring using guard clauses, extracted helpers, generators, or functional decomposition
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `_determine_*` for private methods that perform internal resolution, and `_resolve_*` for private methods that handle config resolution
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use canonical dataset names consistently in code, docs, configs, logs, and tests: 'Input' for full user-supplied data, 'Training' for the fine-tuning split, 'Test' for the holdout split, 'Synthetic' for records produced by the model. In Pydantic fields use `input`, `training`, `test`, `synthetic`. In DataFrame variables use `input_df`, `training_df`, `test_df`, `synthetic_df`
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: In user-facing text (docs, logs, error messages), use 'holdout' to refer to the action of withholding data and 'test' for the resulting dataset. Use 'holdout test set' when both concepts appear together
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use relative imports in `src/` (e.g., `from ..observability import get_logger`), absolute imports in `tests/` (e.g., `from nemo_safe_synthesizer.observability import get_logger`)
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: For backends with expensive resources, use the `_torn_down` guard pattern to ensure idempotent and safe multi-step cleanup
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Document side effects, thread safety, and idempotency guarantees in docstrings where applicable
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `Example:` sections with working code in public API method docstrings
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use single backticks for code identifiers, paths, and CLI commands in markdown. In Python docstrings, use double backticks for inline code
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use `#MISE description=...` on public file tasks and `description` on public TOML tasks so `mise tasks` is useful. Use `#USAGE` comments in file tasks or `usage` in TOML tasks for arguments that need validation or help text
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Every directory under `src/` that contains Python files must include an `__init__.py` file, even if empty, to ensure the directory is recognized as a Python package
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Never add `__init__.py` files under `tests/`. Test directories are discovered by pytest via `rootdir` and `testpaths`, not through Python package imports
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Include SPDX copyright headers at the top of every source file. Use hash-comments for `.py`, `.sh`, `.yaml`, `.yml`. Use HTML-comment for `.md` files. For `.md` files with YAML frontmatter, use hash-comment headers inside the frontmatter block
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Ensure newline at end of file, no trailing whitespace in all files
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Use single space between sentences, never two, in all text files
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: Be consistent with local conventions. If the code around you follows a convention, follow it too -- even if this guide says otherwise. Local consistency matters more than global rules
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer
Timestamp: 2026-06-04T20:28:04.212Z
Learning: When touching legacy code, migrate toward the stated conventions where practical
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to **/*.py : Use ty (Pyright) for type checking; run via mise run check
Applied to files:
.github/workflows/ci-checks.ymlCONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:50.142Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: tests/TESTING.md:0-0
Timestamp: 2026-06-03T23:08:50.142Z
Learning: Run tests using `mise run test` for unit tests (excludes slow, e2e, and smoke), `mise run test:unit-slow` for slow unit tests, `mise run test:smoke` for CPU smoke tests, `mise run test:smoke:gpu` for GPU smoke tests, `mise run test:e2e` for end-to-end tests, or `mise run test:ci` for CI unit tests with coverage
Applied to files:
.github/workflows/ci-checks.ymlCONTRIBUTING.mdcontainers/README.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to tests/**/*.py : Run mise run test to execute unit tests (excludes slow unit tests, smoke and e2e)
Applied to files:
.github/workflows/ci-checks.ymlCONTRIBUTING.mdcontainers/README.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to **/*.py : Python version support: Project supports Python 3.11, 3.12, and 3.13; Python 3.14+ is not supported
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Applies to **/*.py : Target Python 3.11–3.13 with modern syntax (`X | Y`, `list[str]`, `Self`). Python 3.14+ is not supported
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Use mise tasks (mise run <task>) instead of running ruff, ty, or pytest directly to ensure pinned tool versions from .mise.toml are used
Applied to files:
CONTRIBUTING.mdcontainers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Pull request process: create issue first, create feature branch, make changes with conventional commits, run local tests, push branch, open PR using template, address review feedback, then squash merge
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to tests/**/*.py : Mark CUDA-dependent tests with `pytest.mark.e2e`, `pytest.mark.smoke`, or `pytest.mark.requires_gpu`.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:50.142Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: tests/TESTING.md:0-0
Timestamp: 2026-06-03T23:08:50.142Z
Learning: Applies to tests/**/*.py : For vLLM tests that call `.generate()`, mark with `pytest.mark.vllm`, use per-file process isolation (`-n 0`), and create dedicated `test:smoke:gpu:*` mise tasks. vLLM pre-allocates all GPU memory and never releases it within a process, causing OOM in later tests if not isolated
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:50.142Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: tests/TESTING.md:0-0
Timestamp: 2026-06-03T23:08:50.142Z
Learning: Run a single test with: `uv run --frozen pytest tests/path/test_file.py::test_name -vvs -n0`. Use `uv run --frozen pytest -n auto --dist loadscope -vv` as the default test runner
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:50.142Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: tests/TESTING.md:0-0
Timestamp: 2026-06-03T23:08:50.142Z
Learning: Applies to tests/**/*.py : Define pytest markers in `pytest.ini` with `--strict-markers` enabled. Use exactly one category marker (`unit`, `smoke`, `e2e`) per test. Category modifiers include `slow` for long-running tests, `requires_gpu` for CUDA-dependent tests, `vllm` for vLLM backend tests, `smollm2` for SmolLM2 Hub download tests, and `noautouse` to skip autouse fixtures
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:50.142Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: tests/TESTING.md:0-0
Timestamp: 2026-06-03T23:08:50.142Z
Learning: Organize test files to mirror source structure (e.g., `tests/training/`, `tests/generation/`, `tests/evaluation/`, `tests/cli/`, `tests/data_processing/`, `tests/config/`, `tests/e2e/`, `tests/smoke/`)
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Place test-suite guidance in `tests/TESTING.md`
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to tests/**/*.py : Markers are auto-assigned by path via `pytest_collection_modifyitems` (`/e2e/` -> `e2e`, `/smoke/` -> `smoke`, default -> `unit`). Explicit markers: `pytest.mark.slow`, `pytest.mark.requires_gpu`, `pytest.mark.timeout()`.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to **/*.py : Use ruff for linting and formatting checks; run via mise run check for read-only local quality checks
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Follow detailed code style conventions from STYLE_GUIDE.md for Python, markdown, Dockerfiles, shell scripts, testing, config files, and docstrings
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to **/*.py : Run mise run format to auto-fix code style: ruff format, import sorting, and copyright headers
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to tests/**/*.py : New features must include tests; bug fixes must include regression tests
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Use mise tasks or wrapper scripts in `tools/` instead of running `ruff` or `ty` directly
Applied to files:
CONTRIBUTING.mdcontainers/Dockerfile.cudacontainers/README.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Tools enforce what they can (`ruff`, `ty`, `pre-commit`). This guide covers what tools can't enforce.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to .mise/tasks/*.sh : Use `#MISE description=...` on public file tasks for Mise task listing.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to .mise/tasks/*.sh : Use `#USAGE` comments in file tasks for arguments that need validation or help text.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:09:02.641Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/repo-navigation.mdc:0-0
Timestamp: 2026-06-03T23:09:02.641Z
Learning: Applies to .pre-commit-config.yaml : Configure pre-commit hooks (ruff, ty, copyright, uv-lock) in `.pre-commit-config.yaml`
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Use `uv sync --frozen --extra cu129 --extra engine --group dev` for a full GPU/dev environment setup
Applied to files:
CONTRIBUTING.mdcontainers/README.md
📚 Learning: 2026-06-03T23:09:02.641Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/repo-navigation.mdc:0-0
Timestamp: 2026-06-03T23:09:02.641Z
Learning: Applies to mkdocs.yml : Configure documentation site using MkDocs Material in `mkdocs.yml`
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to mkdocs.yml : Add documentation pages to nav section of mkdocs.yml so they appear in the sidebar
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Applies to docs/**/*.md : Use MkDocs Material Markdown extensions for documentation: admonitions, content tabs, code blocks, Mermaid diagrams, task lists, footnotes, definition lists
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to docs/**/*.md : Classify documentation pages as tutorial, how-to, explanation, or reference per the Diataxis framework. Use MkDocs Material syntax: admonitions (`!!! note`), tabs (`===`), code blocks with titles and highlights.
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:09:13.516Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/writing-docs.mdc:0-0
Timestamp: 2026-06-03T23:09:13.516Z
Learning: Organize documentation following the structure: docs/index.md (root), getting-started/ (Tutorials), user-guide/ (How-tos and reference), developer-guide/ (Explanations), product-overview/ (Product features), tutorials/, and dev-notes/
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:09:13.516Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/writing-docs.mdc:0-0
Timestamp: 2026-06-03T23:09:13.516Z
Learning: Applies to docs/**/*.md : Use MkDocs Material tabs syntax (=== "Label") to present alternative views or language-specific examples in documentation
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:09:13.516Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/writing-docs.mdc:0-0
Timestamp: 2026-06-03T23:09:13.516Z
Learning: Applies to docs/**/*.md : Use MkDocs Material admonition syntax (!!! note, !!! warning, ??? tip) for highlighting important information and collapsible sections in documentation
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:09:02.641Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: .cursor/rules/repo-navigation.mdc:0-0
Timestamp: 2026-06-03T23:09:02.641Z
Learning: Applies to AGENTS.md : Maintain agent guide with module map and conventions in `AGENTS.md`
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-05-08T22:28:14.968Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-05-08T22:28:14.968Z
Learning: Follow Claude Development Instructions as documented in AGENTS.md
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-05-08T22:28:14.968Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-05-08T22:28:14.968Z
Learning: Follow Claude Development Instructions as documented in AGENTS.local.md
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:06:56.798Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-06-03T23:06:56.798Z
Learning: Applies to **/*.py : Place durable implementation guidance in function and class docstrings for public contracts and source comments for local invariants
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-03T23:08:32.341Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-06-03T23:08:32.341Z
Learning: Configuration layers for AI agents: AGENTS.md (all agents), AGENTS.local.md (local overrides, git-ignored), CLAUDE.md (Claude Code), .cursor/rules/*.mdc (Cursor), .agents/skills/* (shared skills)
Applied to files:
CONTRIBUTING.md
📚 Learning: 2026-06-01T18:47:21.036Z
Learnt from: binaryaaron
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 481
File: containers/Dockerfile.cuda:100-106
Timestamp: 2026-06-01T18:47:21.036Z
Learning: In `containers/Dockerfile.cuda` (tools stage), `uv`/`uvx` are installed via `mise run setup` with the version pinned in `mise.lock`, and then copied to `/usr/local/bin/` via `cp "$(mise which uv)" /usr/local/bin/uv`. This is the intentional and reproducible approach — there is no need for a separate `FROM ghcr.io/astral-sh/uv:<version>` stage. The `PATH="/usr/local/bin:/mise/shims:${PATH}"` addition is required (not a noop) because `tools/install-mise.sh` installs the `mise` binary at `/usr/local/bin/mise`, so it must be on PATH before the shims are available for subsequent `mise trust` and `mise run setup` calls.
Applied to files:
containers/Dockerfile.cudacontainers/Dockerfile.test_cicontainers/README.mdscript/slurm/slurm_nss_matrix.sh
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to containers/Dockerfile* : Use `--mount=type=cache` for pip/uv caches and APT (`/var/cache/apt`, `/var/lib/apt/lists`). Prefer cache mounts over `rm -rf /var/lib/apt/lists/*`.
Applied to files:
containers/Dockerfile.cuda
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to .mise/tasks/_lib.sh : Put shared shell helpers in `.mise/tasks/_lib.sh`; keep it non-executable so mise does not list it as a task.
Applied to files:
containers/Dockerfile.cuda
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to containers/Dockerfile* : Copy uv from `ghcr.io/astral-sh/uv:<version>`.
Applied to files:
containers/Dockerfile.test_cicontainers/README.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to containers/Dockerfile* : Use non-root user (`appuser`) with `NVIDIA_VISIBLE_DEVICES=all` for GPU access.
Applied to files:
containers/README.md
📚 Learning: 2026-06-03T23:08:14.151Z
Learnt from: CR
Repo: NVIDIA-NeMo/Safe-Synthesizer PR: 0
File: STYLE_GUIDE.md:0-0
Timestamp: 2026-06-03T23:08:14.151Z
Learning: Applies to containers/Dockerfile* : Use multi-stage builds for production images.
Applied to files:
containers/README.md
🪛 Betterleaks (1.3.1)
containers/Dockerfile.cuda
[high] 103-103: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
containers/Dockerfile.test_ci
[high] 22-22: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
(generic-api-key)
🪛 markdownlint-cli2 (0.22.1)
CONTRIBUTING.md
[warning] 34-34: Blank line inside blockquote
(MD028, no-blanks-blockquote)
containers/README.md
[warning] 161-161: Multiple headings with the same content
(MD024, no-duplicate-heading)
🪛 Shellcheck (0.11.0)
script/slurm/slurm_nss_matrix.sh
[info] 115-115: Not following: ./bin/activate was not specified as input (see shellcheck -x).
(SC1091)
🪛 Trivy (0.69.3)
containers/Dockerfile.test_ci
[error] 1-1: Image user should not be 'root'
Specify at least 1 USER command in Dockerfile with non-root user as argument
Rule: DS-0002
(IaC/Dockerfile)
🔇 Additional comments (6)
CONTRIBUTING.md (2)
30-30: LGTM!
547-550: LGTM!containers/Dockerfile.cuda (1)
66-66: LGTM!containers/Dockerfile.test_ci (1)
1-3: LGTM!containers/README.md (1)
13-13: LGTM!Also applies to: 86-86
script/slurm/slurm_nss_matrix.sh (1)
109-122: LGTM!
Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
…f floor - gpu-tests: pass matrix.python-version into setup-gpu-test-env so the declared version is actually used (was ignored, falling back to .python-version); set GPU smoke matrix to the new 3.13 default. - Dockerfile.cuda: bump PYTHON_VERSION 3.13.9 -> 3.13.13 to match Dockerfile.test_ci. - ruff.toml: comment why target-version stays at the py311 floor. Signed-off-by: Aaron Gonzales <aagonzales@nvidia.com>
| @@ -1,4 +1,4 @@ | |||
| # @generated - this file is auto-generated by `mise lock` https://mise.jdx.dev/dev-tools/mise-lock.html | |||
| # @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html | |||
There was a problem hiding this comment.
nit: Argh?! I saw this too. Is this from installing mise via a different mechanism, or just the mise.lock being generated by different versions of mise?
There was a problem hiding this comment.
I'm not quite sure; if it continues to occur then let's make it more stable? i'm guessing it's a version thing but haven't checked.
Summary
typing_extensionsbackports foroverride/TypeIsand document that shared syntax stays Python 3.11-compatible until NMP moves to 3.12.Test plan
Summary by CodeRabbit
New Features
Chores
Documentation