Skip to content

docs: align user skills with config layering removal - #739

Closed
exactlyallan wants to merge 8 commits into
NVIDIA:mainfrom
exactlyallan:docs/relay-669-user-skills
Closed

docs: align user skills with config layering removal#739
exactlyallan wants to merge 8 commits into
NVIDIA:mainfrom
exactlyallan:docs/relay-669-user-skills

Conversation

@exactlyallan

@exactlyallan exactlyallan commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Overview

Updates the public NeMo Relay user skills for the RELAY-669 follow-up to RELAY-667. The get-started quick start now treats repository-local Relay config files as unsupported active configuration while preserving local ATOF and ATIF output artifacts, and the NeMo Flow migration helper now reports legacy project-local configuration for manual migration instead of converting it into unsupported Relay project configuration.

  • I confirm this contribution is my own work, or I have the right to submit it under this project license.
  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Details

  • Added a get-started guardrail that prevents agents from creating, editing, merging, or trusting repository-local .nemo-relay/config.toml and .nemo-relay/plugins.toml.
  • Updated the CLI try-now reference and affected get-started evals to use supported user or explicit configuration only, and to distinguish .nemo-relay/atof and .nemo-relay/atif output directories from configuration layers.
  • Updated the NeMo Flow migration skill guidance and helper so legacy .nemo-flow/config.toml and .nemo-flow/plugins.toml are left unchanged and reported as manual migration items.
  • Added a migration eval covering repositories with legacy project-local NeMo Flow configuration.

Validation:

  • python3 JSON parse for affected eval files
  • python3 AST parse for skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
  • Migration helper dry-run fixture for legacy project config
  • Migration helper write-mode fixture for legacy project config plus unrelated source/path migration
  • .venv/bin/ruff check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
  • git diff --check

Known follow-up: skill-card.md, BENCHMARK.md, and skill.oms.sig were not refreshed locally; those should be refreshed through the normal NVSkills publication workflow.

Where should the reviewer start?

Start with skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py, especially the legacy project configuration detection and blocked path rename logic. Then review skills/nemo-relay-get-started/references/cli-try-now.md for the user-facing configuration guidance.

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

Summary by CodeRabbit

  • Documentation

    • Clarified supported configuration locations and prohibited repository-local Relay configuration files.
    • Updated onboarding guidance to distinguish output directories from active configuration.
    • Clarified migration review, confirmation, and manual handling of project-local legacy settings.
  • Bug Fixes

    • Migration now detects and excludes unsupported project-local configuration files from automatic rewriting.
    • Added warnings and reporting for configuration files requiring manual migration.
    • Preserved unrelated safe migrations while preventing unsupported project-local renames.
    • Expanded validation guidance for configuration precedence, plugin activation, and output-directory checks.

Update the public get-started and NeMo Flow migration skills for RELAY-669. The quick start now treats repository-local Relay config as unsupported while preserving local ATOF and ATIF output artifacts, and the migration helper reports legacy project .nemo-flow config for manual migration instead of converting it into unsupported .nemo-relay project config.

Validation: python3 JSON parse for affected evals; python3 AST parse for migrate_from_nemo_flow.py; migration helper dry-run and write-mode fixtures for legacy project config; .venv/bin/ruff check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; git diff --check
Signed-off-by: Allan Enemark <exactly.allan@gmail.com>
@exactlyallan
exactlyallan requested a review from a team as a code owner August 7, 2026 22:11
@exactlyallan

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@github-actions github-actions Bot added size:M PR is medium Documentation documentation-related lang:python PR changes/introduces Python code labels Aug 7, 2026
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Already reviewed.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The change defines repository-local Relay configuration as unsupported. It updates onboarding guidance and evaluations, and modifies Flow migration to report project-local configuration for manual migration without rewriting or renaming it.

Changes

Project Configuration Handling

Layer / File(s) Summary
Relay configuration contract
skills/nemo-relay-get-started/SKILL.md, skills/nemo-relay-get-started/evals/evals.json, skills/nemo-relay-get-started/references/cli-try-now.md
Guidance and evaluations identify supported configuration scopes, reject repository-local configuration, validate plugin activation and system precedence, and distinguish output directories from configuration.
Flow migration policy
skills/nemo-relay-migrate-from-flow/SKILL.md, skills/nemo-relay-migrate-from-flow/evals/evals.json
The migration workflow requires review before writing and excludes project-local .nemo-flow configuration from automatic migration and renaming.
Flow migration detection and reporting
skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
The script detects legacy project configuration, excludes it from content and path changes, verifies scan state before writes, and reports manual migration items with summary counts.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested labels: DO NOT MERGE

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 45.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title follows Conventional Commits format, uses an allowed lowercase type, summarizes the change, and is under 72 characters.
Description check ✅ Passed The description includes all required sections, checkboxes, change details, validation steps, reviewer guidance, and related issues.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot added the DO NOT MERGE PR should not be merged; see PR for details label Aug 7, 2026
Add docstrings for the legacy project configuration helpers introduced by the RELAY-669 migration skill update. This addresses the CodeRabbit pre-merge docstring coverage warning without changing migration behavior.

Validation: python3 AST parse for migrate_from_nemo_flow.py; .venv/bin/ruff check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; git diff --check
Signed-off-by: Allan Enemark <exactly.allan@gmail.com>
Document the small migration helper data structures and utility functions so CodeRabbit docstring coverage no longer flags the RELAY-669 helper update.

Validation: python3 AST parse for migrate_from_nemo_flow.py; .venv/bin/ruff check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; .venv/bin/ty check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; migration helper dry-run fixture for legacy project config; git diff --check
Signed-off-by: Allan Enemark <exactly.allan@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py (3)

519-526: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reject negative max_report values.

When --max-report -1 is used, legacy_configs[:max_report] omits the final warning and reports an incorrect omitted count. Validate args.max_report >= 0 in main before calling print_report. Update the help text to mention legacy configuration warnings as another capped output.

Proposed validation
     args = parser.parse_args()
+    if args.max_report < 0:
+        parser.error("--max-report must be non-negative")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py` around
lines 519 - 526, Validate that args.max_report is non-negative in main before
calling print_report, rejecting invalid negative values. Update the --max-report
help text to state that it caps legacy configuration warnings in addition to the
existing output.

607-620: 📐 Maintainability & Code Quality | 🔵 Trivial

Run the required Python validation before handoff.

Run the repository's Python test target and uv run pre-commit run --all-files after the migration fixture checks.

As per coding guidelines, run tests for each affected language and uv run pre-commit run --all-files before handoff.

Also applies to: 632-632

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py` around
lines 607 - 620, The migration changes are missing the required validation
workflow. After the migration fixture checks, run the repository’s Python test
target and execute `uv run pre-commit run --all-files`; ensure both complete
successfully before handoff.

Source: Coding guidelines


607-620: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Revalidate legacy project configuration before each mutation.

legacy_configs is collected once before iter_files() and collect_path_changes(). If .nemo-flow/config.toml or plugins.toml is created or moved after that scan, rewrite_file() can modify it. With --rename-paths, collect_path_changes() can also move .nemo-flow and its late-created configuration into .nemo-relay. Revalidate protected paths during each mutation and abort when the filesystem tree changes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py` around
lines 607 - 620, The migration flow around collect_legacy_project_configs,
rewrite_file, and collect_path_changes must revalidate protected legacy
configuration paths before every mutation. Detect filesystem changes after the
initial scan, prevent rewrite_file from modifying newly created or moved
.nemo-flow/config.toml and plugins.toml files, and abort the operation when the
tree changes before or during path renaming.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`:
- Around line 519-526: Validate that args.max_report is non-negative in main
before calling print_report, rejecting invalid negative values. Update the
--max-report help text to state that it caps legacy configuration warnings in
addition to the existing output.
- Around line 607-620: The migration changes are missing the required validation
workflow. After the migration fixture checks, run the repository’s Python test
target and execute `uv run pre-commit run --all-files`; ensure both complete
successfully before handoff.
- Around line 607-620: The migration flow around collect_legacy_project_configs,
rewrite_file, and collect_path_changes must revalidate protected legacy
configuration paths before every mutation. Detect filesystem changes after the
initial scan, prevent rewrite_file from modifying newly created or moved
.nemo-flow/config.toml and plugins.toml files, and abort the operation when the
tree changes before or during path renaming.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 717f29d6-7fbf-421c-b894-b2632570b13a

📥 Commits

Reviewing files that changed from the base of the PR and between 5659ff9 and 97d0c92.

📒 Files selected for processing (1)
  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Check / Run
🧰 Additional context used
📓 Path-based instructions (11)
**/*

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, use maintain-dynamic-plugins and include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, prefer uv run pre-commit run --files <changed files...>.
Before review or handoff, run uv run pre-commit run --all-files.

**/*: Use release tags in raw Rust-compatible SemVer without a leading v; tags such as v0.1.0 are prohibited.
Use branch prefixes feat/, fix/, docs/, test/, or refactor/ according to the change purpose.
Every commit in a pull request must include a DCO Signed-off-by: sign-off.
Before submitting a pull request, ensure pre-commit hooks, relevant tests, target-specific builds, documentation updates, and a rebase on the latest main are complete.
Use commit messages in the form type: short description, with a valid type and a first line under 72 characters.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,ts}

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

If a language surface changed, always run that language's test target even when Rust core did not change.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,ts,tsx,go,java,kt,swift}

📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)

Add tests covering registration and duplicate names, deregistration and missing names, priority ordering, callback failure policy, scope-local inheritance and cleanup, event payload semantics, immutable mark and scope fields, and parity across affected bindings.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,jsx,ts,tsx,go,c,h,cc,cpp,md,toml,yml,yaml,sh}

📄 CodeRabbit inference engine (AGENTS.md)

Keep SPDX headers on source, documentation, scripts, and configuration files; the project is Apache-2.0.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py}

📄 CodeRabbit inference engine (AGENTS.md)

Use snake_case naming in Rust and Python.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,mjs,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Preserve the existing Tokio-based asynchronous model and callback/future lifetimes; do not unexpectedly block or hide async work in bindings.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.py: Lint Python with Ruff using rule sets E, F, W, and I.
Format Python with the Ruff formatter, using a 120-character line length and double quotes.
Run ty for Python type checking.
Use Python snake_case naming conventions.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,jsx,ts,tsx,c,h}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py,go,js,jsx,ts,tsx,c,h}: Run tests for every language affected by a change; changes to the core Rust crate require tests across all bindings.
Use SONAR_IGNORE_START / SONAR_IGNORE_END only for documented false positives, keep ignored blocks minimal, explain them with a comment, and obtain reviewer sign-off.
Preserve the layered architecture in which Rust provides the core runtime and C FFI, PyO3, and NAPI provide bindings that mirror the full API surface.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,jsx,ts,tsx,c,h,html,md,mdx,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Include the appropriate SPDX copyright and Apache-2.0 license header in every source file.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,ts,mdx}

📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)

**/*.{rs,py,go,js,ts,mdx}: When changing observability event fields, exporter behavior, subscriber configuration, or binding parity, keep the core event model, ATIF, typed OpenTelemetry projections, FFI wrappers, language bindings, configuration, and documentation synchronized.
Examples and documentation must use each exporter's documented flush/deregister order before shutdown.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{py,go,js,ts}

📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)

**/*.{py,go,js,ts}: Ensure Python, Go, and Node.js configuration objects and subscriber/exporter methods expose the same logical knobs and semantics as the core implementation.
Run just test-python, just test-go, and just test-node when binding-native configuration or lifecycle changes.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
🔇 Additional comments (2)
skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py (2)

113-144: LGTM!

Also applies to: 156-163, 173-183, 199-199, 237-237, 275-275, 322-322, 336-344, 380-380, 411-412, 446-447, 460-460, 533-534, 632-632


412-427: 🎯 Functional Correctness

No stale callers found. The repository-wide references contain only the updated main call sites and the helper definitions.

			> Likely an incorrect or invalid review comment.

Address CodeRabbit review feedback for the RELAY-669 migration helper. Reject negative --max-report values and revalidate protected legacy project configuration before write and path-rename mutations so late-created .nemo-flow config cannot be rewritten or moved into unsupported Relay project configuration.

Validation: .venv/bin/pre-commit run --files skills/nemo-relay-get-started/SKILL.md skills/nemo-relay-get-started/evals/evals.json skills/nemo-relay-get-started/references/cli-try-now.md skills/nemo-relay-migrate-from-flow/SKILL.md skills/nemo-relay-migrate-from-flow/evals/evals.json skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; python3 skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py /tmp --max-report -1 (expected parser failure); migration helper write-mode fixture for legacy project config; git diff --check
Signed-off-by: Allan Enemark <exactly.allan@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`:
- Around line 640-652: The current eager file_changes comprehension invokes
rewrite_file before validating the protected legacy configuration set. Separate
rewrite planning from application, recollect and compare legacy configurations
immediately after planning and before any write-mode mutations, then apply the
planned changes only when validation succeeds while preserving the existing
MutationError behavior.
- Around line 431-447: Update directory_contains_legacy_config_at to raise
MutationError when os.open fails, instead of returning False, so an
uninspectable child directory cannot be treated as configuration-free. Preserve
the existing scan and return behavior after the directory is opened
successfully, and include the underlying open failure details in the raised
error if consistent with the surrounding error-handling conventions.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: db677023-0d3b-4b90-bd41-acfd31ad8c7c

📥 Commits

Reviewing files that changed from the base of the PR and between 97d0c92 and f10a844.

📒 Files selected for processing (1)
  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (10)
**/*

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, use maintain-dynamic-plugins and include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, prefer uv run pre-commit run --files <changed files...>.
Before review or handoff, run uv run pre-commit run --all-files.

**/*: Use release tags in raw Rust-compatible SemVer without a leading v; tags such as v0.1.0 are prohibited.
Use branch prefixes feat/, fix/, docs/, test/, or refactor/ according to the change purpose.
Every commit in a pull request must include a DCO Signed-off-by: sign-off.
Before submitting a pull request, ensure pre-commit hooks, relevant tests, target-specific builds, documentation updates, and a rebase on the latest main are complete.
Use commit messages in the form type: short description, with a valid type and a first line under 72 characters.

Run the prescribed plugin validation commands, including fixture building, focused Rust and Python package tests, integration tests, documentation checks, and the broader validate-change matrix for broad runtime or public API changes.

**/*: Keep observability changes scoped, surface assumptions, and define focused validation before editing.
Run affected Rust tests and just test-rust for event-field changes; run just test-python, just test-go, and just test-node when binding-native configuration or lifecycle changes; update docs and examples in the same branch.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,ts}

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

If a language surface changed, always run that language's test target even when Rust core did not change.

**/*.{rs,py,go,js,ts}: Keep FFI and Python, Go, and Node.js binding configuration objects and subscriber/exporter methods aligned with the core observability configuration and lifecycle semantics.
Preserve complete sanitized LLM request input and annotations when enable_full_payloads is enabled, while retaining credential removal and sanitizers.
Use each exporter's documented flush and deregister order before shutdown in observability examples and implementations.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,ts,tsx,go,java,kt,swift}

📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)

Add tests covering registration and duplicate names, deregistration and missing names, priority ordering, callback failure policy, scope-local inheritance and cleanup, event payload semantics, immutable mark and scope fields, and parity across affected bindings.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,jsx,ts,tsx,go,c,h,cc,cpp,md,toml,yml,yaml,sh}

📄 CodeRabbit inference engine (AGENTS.md)

Keep SPDX headers on source, documentation, scripts, and configuration files; the project is Apache-2.0.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py}

📄 CodeRabbit inference engine (AGENTS.md)

Use snake_case naming in Rust and Python.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,js,mjs,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Preserve the existing Tokio-based asynchronous model and callback/future lifetimes; do not unexpectedly block or hide async work in bindings.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.py: Lint Python with Ruff using rule sets E, F, W, and I.
Format Python with the Ruff formatter, using a 120-character line length and double quotes.
Run ty for Python type checking.
Use Python snake_case naming conventions.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,jsx,ts,tsx,c,h}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py,go,js,jsx,ts,tsx,c,h}: Run tests for every language affected by a change; changes to the core Rust crate require tests across all bindings.
Use SONAR_IGNORE_START / SONAR_IGNORE_END only for documented false positives, keep ignored blocks minimal, explain them with a comment, and obtain reviewer sign-off.
Preserve the layered architecture in which Rust provides the core runtime and C FFI, PyO3, and NAPI provide bindings that mirror the full API surface.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{rs,py,go,js,jsx,ts,tsx,c,h,html,md,mdx,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Include the appropriate SPDX copyright and Apache-2.0 license header in every source file.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
**/*.{toml,md,rs,py}

📄 CodeRabbit inference engine (.agents/skills/maintain-dynamic-plugins/SKILL.md)

Treat plugin Relay compatibility as normal SemVer; use >=0.5,<1.0 in examples unless a plugin intentionally declares a narrower range.

Files:

  • skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py
🪛 Ruff (0.16.1)
skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py

[warning] 353-353: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 503-504: Use a single if statement instead of nested if statements

(SIM102)


[warning] 505-505: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 651-651: Abstract raise to an inner function

(TRY301)


[warning] 651-651: Avoid specifying long messages outside the exception class

(TRY003)

Address the remaining CodeRabbit findings by planning file rewrites before write-mode mutation, validating protected legacy project configuration before applying planned changes, and treating failed directory inspection as a mutation safety error.

Validation: .venv/bin/pre-commit run --files skills/nemo-relay-get-started/SKILL.md skills/nemo-relay-get-started/evals/evals.json skills/nemo-relay-get-started/references/cli-try-now.md skills/nemo-relay-migrate-from-flow/SKILL.md skills/nemo-relay-migrate-from-flow/evals/evals.json skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; python3 -m py_compile skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py; python3 skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py /tmp --max-report -1 (expected parser failure); migration helper write-mode fixture; git diff --check
Signed-off-by: Allan Enemark <exactly.allan@gmail.com>
@exactlyallan exactlyallan self-assigned this Aug 7, 2026
@exactlyallan exactlyallan removed the DO NOT MERGE PR should not be merged; see PR for details label Aug 11, 2026
@willkill07

Copy link
Copy Markdown
Member

/nvskills-ci

@exactlyallan

Copy link
Copy Markdown
Contributor Author

Superseded by #774, which recasts the same RELAY-669 skills update onto a direct NVIDIA/NeMo-Relay branch so the updated NVSkills/NVCARPS CI flow can run.

Copy link
Copy Markdown
Member

Thank you, @exactlyallan

rapids-bot Bot pushed a commit that referenced this pull request Aug 13, 2026
#### Overview

Recasts GitHub PR #739 onto a direct `NVIDIA/NeMo-Relay` branch so the updated NVSkills/NVCARPS pull request workflow can run. The content updates the public NeMo Relay user skills for the RELAY-669 follow-up to RELAY-667: get-started guidance now treats repository-local Relay config files as unsupported active configuration while preserving local ATOF and ATIF output artifacts, and the NeMo Flow migration helper reports legacy project-local configuration for manual migration instead of converting it into unsupported Relay project configuration.

- [x] I confirm this contribution is my own work, or I have the right to submit it under this project license.
- [x] I searched existing issues and open pull requests, and this does not duplicate existing work.

#### Details

- Added a get-started guardrail that prevents agents from creating, editing, merging, or trusting repository-local `.nemo-relay/config.toml` and `.nemo-relay/plugins.toml`.
- Updated the CLI try-now reference and affected get-started evals to use supported user or explicit configuration only, and to distinguish `.nemo-relay/atof` and `.nemo-relay/atif` output directories from configuration layers.
- Updated the NeMo Flow migration skill guidance and helper so legacy `.nemo-flow/config.toml` and `.nemo-flow/plugins.toml` are left unchanged and reported as manual migration items.
- Added a migration eval covering repositories with legacy project-local NeMo Flow configuration.
- Replayed the final GitHub PR #739 file state onto current `upstream/main` as one signed-off commit on `skills/relay-669-user-skills`.

Validation:

- `python3 -m py_compile skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`
- `python3` JSON parse for affected eval files
- Migration helper dry-run fixture for legacy project config
- Migration helper write-mode fixture for legacy project config plus unrelated source/path migration
- `.venv/bin/ruff check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`
- `.venv/bin/ty check skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`
- `.venv/bin/pre-commit run --files skills/nemo-relay-get-started/SKILL.md skills/nemo-relay-get-started/evals/evals.json skills/nemo-relay-get-started/references/cli-try-now.md skills/nemo-relay-migrate-from-flow/SKILL.md skills/nemo-relay-migrate-from-flow/evals/evals.json skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`
- `git diff --check`

Known follow-up: `skill-card.md`, `BENCHMARK.md`, and `skill.oms.sig` were not refreshed locally; those should be refreshed through the normal NVSkills publication workflow.

#### Where should the reviewer start?

Start with `skills/nemo-relay-migrate-from-flow/scripts/migrate_from_nemo_flow.py`, especially the legacy project configuration detection and blocked path rename logic. Then review `skills/nemo-relay-get-started/references/cli-try-now.md` for the user-facing configuration guidance.

#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

- Relates to: RELAY-669
- Relates to: #720
- Relates to: #739


## Summary by CodeRabbit

* **New Features**
  * Added safeguards for legacy project-local configuration during NeMo Flow migrations.
  * Migration previews now identify protected files and provide manual migration guidance.
  * Secure checks prevent protected files from changing unexpectedly.

* **Bug Fixes**
  * Clarified that repository-local Relay configuration is unsupported and must not be used or modified.
  * Improved validation and troubleshooting guidance for supported configuration and output files.
  * Added coverage for safe migration when legacy project configuration is present.

* **Documentation**
  * Updated onboarding, migration, evaluation, benchmark, and verification materials.

Authors:
  - Allan (https://github.com/exactlyallan)
  - https://github.com/svc-nvskills-signing

Approvers:
  - Will Killian (https://github.com/willkill07)

URL: #774
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Documentation documentation-related lang:python PR changes/introduces Python code size:M PR is medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants