feat: add TypeScript adapter contract - #199
Conversation
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: 📒 Files selected for processing (7)
📜 Recent review details⏰ Context from checks skipped due to timeout. (8)
🧰 Additional context used📓 Path-based instructions (18)**/*📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
Files:
**/*.{md,mdx,rst}📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
Files:
**/*.{md,rst,txt,adoc}📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
Files:
**/*.{md,mdx,yml,py,rs,sh}📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Files:
**/*.{md,mdx}📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Files:
typescript/adapter-contract/**/*📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{md,mdx,yml,yaml,sh}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{rs,py,html,md,mdx,toml,yml,yaml,sh,bash}📄 CodeRabbit inference engine (CONTRIBUTING.md)
Files:
{*.md,**/*.md,**/*.mdx,**/*.ipynb}⚙️ CodeRabbit configuration file
Files:
**/*.{rs,toml}📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Files:
**/*.{rs,py}📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Files:
crates/fabric-core/**/*.{rs,py}📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Files:
crates/fabric-core/**/*.rs📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Files:
**/*.rs📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Files:
**/*.{rs,py,ts,tsx}📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
Files:
crates/fabric-core/src/**/*.rs⚙️ CodeRabbit configuration file
Files:
.agents/skills/**📄 CodeRabbit inference engine (.agents/skills/README.md)
Files:
.agents/skills/*/📄 CodeRabbit inference engine (.agents/skills/README.md)
Files:
🧠 Learnings (1)📓 Common learnings🔇 Additional comments (7)
WalkthroughThis PR adds a publishable TypeScript adapter-contract package with canonical schemas, generated declarations, preview types, strict tests, package validation, version synchronization, CI, Rust validation, and updated repository guidance. ChangesTypeScript adapter contract
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant CanonicalSchemas
participant TypeScriptGenerator
participant AdapterContractPackage
participant PackageConsumer
CanonicalSchemas->>TypeScriptGenerator: provide adapter contract schemas
TypeScriptGenerator->>AdapterContractPackage: generate declarations and version constant
AdapterContractPackage->>PackageConsumer: publish exports and JSON schemas
PackageConsumer->>AdapterContractPackage: compile and run representative imports
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Fern docs preview: https://nvidia-preview-pull-request-199.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 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 @.agents/skills/contribute-api/SKILL.md:
- Line 3: Update the description text to use the full product name on first use:
replace “NeMo Fabric” with “NVIDIA NeMo Fabric” in
.agents/skills/contribute-api/SKILL.md:3,
.agents/skills/maintain-packaging/SKILL.md:3, and
.agents/skills/update-project-version/SKILL.md:3.
In @.agents/skills/validate-change/SKILL.md:
- Around line 63-64: Update the public-contract review checklist in the
validation skill to explicitly include checked-in Python representations
alongside JSON Schema snapshots and generated TypeScript sources. Preserve the
existing Rust, Python, and TypeScript test-suite requirements and generated API
reference review.
In `@RELEASING.md`:
- Line 173: Update the test-typescript recipe to add explicit dependency-tree,
license, and vulnerability audit checks alongside the existing npm test
invocation. Reuse the repository’s established package-check commands and
preserve the current TypeScript test behavior.
In `@scripts/ci/set_typescript_project_version.py`:
- Around line 13-16: Update SEMVER_PATTERN in
scripts/ci/set_typescript_project_version.py (lines 13-16) to enforce strict
SemVer: allow arbitrary valid dot-separated prerelease identifiers, while
rejecting leading-zero numeric core and prerelease identifiers. Extend
tests/scripts/test_set_typescript_project_version.py (lines 79-87) with valid
general prerelease cases such as dev.1 and invalid SemVer cases, ensuring the
TypeScript package version follows the Cargo release version.
In `@typescript/adapter-contract/package.json`:
- Around line 53-55: Document the rationale for the newly pinned devDependencies
json-schema-to-typescript and typescript in the package’s maintenance
documentation or release metadata, covering their functional need, viable
alternatives considered, and why these exact dependencies are the narrowest fit.
In `@typescript/adapter-contract/README.md`:
- Around line 12-16: Update the Install section in the README so it does not
present the npm registry command until `@nvidia/nemo-fabric-adapter-contract`
version 0.2.0 is published; otherwise replace it with a supported source or
tarball installation path.
- Around line 18-20: Update the TypeScript version requirement in the README to
5.3 or later, and document that consumer configurations must enable
resolveJsonModule: true alongside the existing module-resolution options.
In `@typescript/adapter-contract/scripts/generate.mjs`:
- Around line 92-96: Guard contractVersion with the existing requireString
before passing it to generateVersion in the pendingFiles setup, ensuring
generation fails when the adapter-descriptor spec has not established a valid
string value.
🪄 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: f787fe51-7be3-4137-8c93-3d5ac23b5335
⛔ Files ignored due to path filters (6)
typescript/adapter-contract/package-lock.jsonis excluded by!**/package-lock.jsontypescript/adapter-contract/src/generated/adapter-descriptor.tsis excluded by!**/generated/**typescript/adapter-contract/src/generated/agent-config.tsis excluded by!**/generated/**typescript/adapter-contract/src/generated/agent-run-request.tsis excluded by!**/generated/**typescript/adapter-contract/src/generated/agent-run-result.tsis excluded by!**/generated/**typescript/adapter-contract/src/generated/runtime-context.tsis excluded by!**/generated/**
📒 Files selected for processing (42)
.agents/skills/contribute-api/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/update-project-version/SKILL.md.agents/skills/validate-change/SKILL.md.github/workflows/ci_typescript.yml.pre-commit-config.yamlAGENTS.mdCONTRIBUTING.mdREADME.mdRELEASING.mdcrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rsdocs/adapter-contract/README.mdjustfileschemas/SCHEMA.mdschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsonscripts/ci/set_typescript_project_version.pyskills/nemo-fabric-build-adapter/SKILL.mdtests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/.gitignoretypescript/adapter-contract/LICENSEtypescript/adapter-contract/README.mdtypescript/adapter-contract/package.jsontypescript/adapter-contract/schemas/adapter-descriptor.schema.jsontypescript/adapter-contract/schemas/agent-config.schema.jsontypescript/adapter-contract/schemas/agent-run-request.schema.jsontypescript/adapter-contract/schemas/agent-run-result.schema.jsontypescript/adapter-contract/schemas/runtime-context.schema.jsontypescript/adapter-contract/scripts/check-package.mjstypescript/adapter-contract/scripts/clean.mjstypescript/adapter-contract/scripts/generate.mjstypescript/adapter-contract/scripts/projection-guards.mjstypescript/adapter-contract/src/index.tstypescript/adapter-contract/src/json.tstypescript/adapter-contract/src/preview.tstypescript/adapter-contract/src/version.tstypescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/test/projection-guards.test.mjstypescript/adapter-contract/test/stable.test.tstypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/tsconfig.build.json
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (50)
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
typescript/adapter-contract/scripts/clean.mjsdocs/adapter-contract/README.mdtypescript/adapter-contract/src/version.tsAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdtypescript/adapter-contract/src/preview.tstypescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/src/json.tstypescript/adapter-contract/schemas/agent-run-request.schema.jsontypescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/schemas/runtime-context.schema.jsontypescript/adapter-contract/package.jsonRELEASING.mdtypescript/adapter-contract/scripts/projection-guards.mjstests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/src/index.tstypescript/adapter-contract/LICENSEtypescript/adapter-contract/schemas/agent-run-result.schema.jsoncrates/fabric-core/src/schema.rstypescript/adapter-contract/test/projection-guards.test.mjsschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsonscripts/ci/set_typescript_project_version.pyCONTRIBUTING.mdtypescript/adapter-contract/schemas/agent-config.schema.jsonREADME.mdtypescript/adapter-contract/scripts/check-package.mjscrates/fabric-core/src/config.rsschemas/SCHEMA.mdtypescript/adapter-contract/test/stable.test.tstypescript/adapter-contract/README.mdjustfiletypescript/adapter-contract/schemas/adapter-descriptor.schema.jsontypescript/adapter-contract/scripts/generate.mjs
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Keep package names, repository references, and build commands current in documentation and examples.
Files:
docs/adapter-contract/README.mdREADME.md
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.
Files:
docs/adapter-contract/README.md
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/adapter-contract/README.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such ashereorread more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.
**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdCONTRIBUTING.mdREADME.mdschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/*.{md,rst,txt,adoc}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 12:30 to 1:00 p.m.for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdCONTRIBUTING.mdREADME.mdschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/*.{md,mdx,yml,py,rs,sh}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Keep documentation aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, and support claims.
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdtests/scripts/test_set_typescript_project_version.pycrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pyCONTRIBUTING.mdREADME.mdcrates/fabric-core/src/config.rsschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon first use, typically in the title and H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
Treat incorrect or stale commands, package names, paths, APIs, support claims, procedures, examples, terminology, or public behavior documentation as blocking issues.
CapitalizeNVIDIAcorrectly and format code, commands, paths, and filenames as inline code where needed.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences; ensure examples match current APIs and build commands.
Use descriptive anchor text, avoid raw URLs and generic labels such ashere, and use repository-relative.mdxpaths for links withindocs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead withMust fix,Should fix, andNice to havecategories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.Update relevant documentation when public behavior, adapters, examples, or workspace structure changes.
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdCONTRIBUTING.mdREADME.mdschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep documentation and examples current with the install, import, and build commands.
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdCONTRIBUTING.mdREADME.mdschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/README.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update the relevant adapter or example README when that surface changes.
Files:
docs/adapter-contract/README.mdREADME.mdtypescript/adapter-contract/README.md
**/*.{rs,py,md,mdx,toml,yml,yaml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Every source file must include the specified SPDX copyright and Apache-2.0 license header using the appropriate comment syntax.
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdtests/scripts/test_set_typescript_project_version.pycrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pyCONTRIBUTING.mdREADME.mdcrates/fabric-core/src/config.rsschemas/SCHEMA.mdtypescript/adapter-contract/README.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/adapter-contract/README.mdAGENTS.mdREADME.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
docs/adapter-contract/README.mdAGENTS.mdskills/nemo-fabric-build-adapter/SKILL.mdRELEASING.mdCONTRIBUTING.mdREADME.mdschemas/SCHEMA.mdtypescript/adapter-contract/README.md
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When the TypeScript adapter contract or one of its source schemas changes, run
just test-typescript.Use strict TypeScript for adapter-contract bindings, preserve JSON wire property names, run the checked-in generator instead of editing generated declarations, and keep production dependencies out of the contract package.
Files:
typescript/adapter-contract/src/version.tstypescript/adapter-contract/src/preview.tstypescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/src/json.tstypescript/adapter-contract/src/index.tstypescript/adapter-contract/test/stable.test.ts
**/*.{rs,py,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,py,ts,tsx}: Use language-appropriate naming:snake_casefor Rust and Python functions and variables;PascalCasefor Rust, Python, and TypeScript types; preserve wiresnake_casenames for TypeScript contract properties.
Run tests for every affected language surface. Changes to the Rust core or public adapter-contract schemas require Rust, Python, and TypeScript test suites.
Files:
typescript/adapter-contract/src/version.tstypescript/adapter-contract/src/preview.tstypescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/src/json.tstests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/src/index.tscrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/config.rstypescript/adapter-contract/test/stable.test.ts
**/*.{rs,json,py,pyi,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Public contract changes must keep checked-in JSON Schema snapshots, Python representations, and generated TypeScript declarations synchronized.
Files:
typescript/adapter-contract/src/version.tstypescript/adapter-contract/src/preview.tstypescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/src/json.tstypescript/adapter-contract/schemas/agent-run-request.schema.jsontypescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/schemas/runtime-context.schema.jsontypescript/adapter-contract/package.jsontests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/src/index.tstypescript/adapter-contract/schemas/agent-run-result.schema.jsoncrates/fabric-core/src/schema.rsschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsonscripts/ci/set_typescript_project_version.pytypescript/adapter-contract/schemas/agent-config.schema.jsoncrates/fabric-core/src/config.rstypescript/adapter-contract/test/stable.test.tstypescript/adapter-contract/schemas/adapter-descriptor.schema.json
**/AGENTS.md
📄 CodeRabbit inference engine (CLAUDE.md)
Follow the instructions documented in
AGENTS.mdwhen working in the repository.
Files:
AGENTS.md
**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
skills/nemo-fabric-build-adapter/SKILL.md
⚙️ CodeRabbit configuration file
**/SKILL.md: Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Verify that every SKILL.md keeps valid YAML frontmatter with at least name and description fields before the Markdown body.
Files:
skills/nemo-fabric-build-adapter/SKILL.md
skills/**
📄 CodeRabbit inference engine (AGENTS.md)
skills/**: Keep external integration guidance inskills/; these skills must depend only on supported public contracts and documentation, never repository internals.
Integration skills must link to public GitHub documentation and example URLs rather than a docs-site domain so they remain portable when exported.
Files:
skills/nemo-fabric-build-adapter/SKILL.md
skills/nemo-fabric-build-adapter/**
📄 CodeRabbit inference engine (AGENTS.md)
Use
skills/nemo-fabric-build-adapterfor third-party adapter authoring guidance; repository-internal adapter maintenance belongs in.agents/skills/.
Files:
skills/nemo-fabric-build-adapter/SKILL.md
**/{tests,test,**/tests}/**/*
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or relevant
tests/area.
Files:
typescript/adapter-contract/test/preview.test.tstypescript/adapter-contract/test/tsconfig.jsontests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/test/projection-guards.test.mjstypescript/adapter-contract/test/stable.test.ts
**/*.{rs,py,pyi,json,yaml,yml}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When public configuration types change, confirm schema snapshot tests pass in
just test-rustand review generated schema diffs.
Files:
typescript/adapter-contract/schemas/agent-run-request.schema.jsontypescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/schemas/runtime-context.schema.jsontypescript/adapter-contract/package.jsontests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/schemas/agent-run-result.schema.jsoncrates/fabric-core/src/schema.rsschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsonscripts/ci/set_typescript_project_version.pytypescript/adapter-contract/schemas/agent-config.schema.jsoncrates/fabric-core/src/config.rstypescript/adapter-contract/schemas/adapter-descriptor.schema.json
.pre-commit-config.yaml
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Regenerate Rust and Python attribution files with the named pre-commit hooks rather than editing generated output:
attributions-rustandattributions-python.
Files:
.pre-commit-config.yaml
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Files:
typescript/adapter-contract/package.json
**/{Cargo.toml,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,pyproject.toml,package.json}: When multiple dependencies satisfy the requirement, prefer a maintained OSS option with clear SPDX metadata, a smaller transitive graph, and permissive terms such as Apache-2.0, MIT, BSD, or ISC.
Keep package names, import paths, and module names internally consistent.
New dependencies must be necessary, maintained, and narrower than viable alternatives.
Files:
typescript/adapter-contract/package.json
**/{Cargo.toml,pyproject.toml,package.json,Cargo.lock,uv.lock,package-lock.json}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,pyproject.toml,package.json,Cargo.lock,uv.lock,package-lock.json}: After updating manifests or lockfiles, runuv run --no-project python scripts/licensing/license_diff.py --base-ref origin/mainand review added packages and license changes.
Keep workspace, Python, and lockfile versions aligned where required.
Files:
typescript/adapter-contract/package.json
typescript/adapter-contract/package.json
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Make the TypeScript adapter-contract package version follow the workspace release version without changing its independent wire-contract version.
Keep the TypeScript adapter-contract package version aligned with the Cargo SemVer release version.
Files:
typescript/adapter-contract/package.json
{Cargo.toml,Cargo.lock,pyproject.toml,python/pyproject.toml,python/uv.lock,adapters/**/pyproject.toml,adapters/**/uv.lock,typescript/adapter-contract/package.json,typescript/adapter-contract/package-lock.json}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Validate version changes with targeted metadata inspections,
cargo check --workspace --locked, Python build or test commands as appropriate, wheel and TypeScript packaging checks for release-facing changes, andgit diff --check.
Files:
typescript/adapter-contract/package.json
**/{package.json,npm-shrinkwrap.json,package-lock.json}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When the TypeScript manifest or npm lockfile changes, inspect the complete npm dependency tree and license fields, confirm zero production dependencies, and run package and audit checks.
Files:
typescript/adapter-contract/package.json
RELEASING.md
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Reflect public packaging changes in release-facing documentation.
Files:
RELEASING.md
.agents/skills/**
📄 CodeRabbit inference engine (.agents/skills/README.md)
.agents/skills/**: Maintainer skills must be discoverable from.agents/skills/; Claude Code exposes the same set through.claude/skillswithout mixing in consumer skills.
Keep consumer-facing integration guidance in the top-levelskills/directory and exclude it from the maintainer skill set.Keep repository-internal contribution guidance in
.agents/skills/; maintainer skills may reference repository internals and contribution commands.
Files:
.agents/skills/maintain-packaging/SKILL.md.agents/skills/validate-change/SKILL.md.agents/skills/contribute-api/SKILL.md.agents/skills/update-project-version/SKILL.md
.agents/skills/*/
📄 CodeRabbit inference engine (.agents/skills/README.md)
Use descriptive, task-based names for maintainer skill directories, such as
contribute-apiorvalidate-change.
Files:
.agents/skills/maintain-packaging/SKILL.md.agents/skills/validate-change/SKILL.md.agents/skills/contribute-api/SKILL.md.agents/skills/update-project-version/SKILL.md
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
tests/scripts/test_set_typescript_project_version.pycrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/config.rs
tests/**/*.py
📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)
tests/**/*.py: Use pytest to run Python tests.
Do not add@pytest.mark.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
If a fixture is needed in multiple test files, define it once inconftest.pyrather than repeating it.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its returned value is unused or it returns no value.
Avoid defensive programming in tests; access expected values directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
When adapter installation metadata changes, packaging metadata tests must directly assert that the root project depends unconditionally on the exact-versionnemo-fabric-runtimedistribution.
Packaging metadata tests must verify that each root harness extra delegates to the matching version of the leaf adapter'sharnessextra.
Packaging metadata tests must verify that bare leaf dependencies remain adapter-owned and that the rootadapter-testsdependency group installs each leaf through itsharnessextra.
Packaging metadata tests must verify that every leaf providesfull; only adapters importing NeMo Relay Python APIs providerelay, while adapters using an external Relay executable havefullequal toharness.
Files:
tests/scripts/test_set_typescript_project_version.py
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When Python code or a Python-facing adapter changes, run
just test-python.Use type annotations for public Python APIs and keep native binding declarations synchronized with their Rust implementations.
Files:
tests/scripts/test_set_typescript_project_version.pyscripts/ci/set_typescript_project_version.py
**/*.{rs,py,pyi,toml}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When the PyO3 bridge or package metadata changes, run
just build-pythonandcargo check -p fabric-python --locked.
Files:
tests/scripts/test_set_typescript_project_version.pycrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/config.rs
{tests/**,python/tests/**}
⚙️ CodeRabbit configuration file
{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
Files:
tests/scripts/test_set_typescript_project_version.py
**/.github/workflows/*.{yml,yaml}
📄 CodeRabbit inference engine (.agents/skills/maintain-ci/SKILL.md)
**/.github/workflows/*.{yml,yaml}: Definepermissions:per job that needs token access, using the minimum required scopes; avoid workflow-level permissions unless centralized inheritance is intentionally documented.
Pin every third-party GitHub Action to a full commit SHA and retain a readable version comment after the SHA.
Use action-native or ecosystem-native caching instead of genericactions/cachewhen available.
Tie cache invalidation to lockfiles, dependency manifests, or explicit tool versions; avoid caching generated outputs unless deliberate repository behavior requires it.
Useastral-sh/setup-uvcache support withcache-dependency-globanchored touv.lock.
UseSwatinem/rust-cachewith explicitshared-keyandworkspacesinstead of ad hoc target-directory caching.
Keep deploy and publish permissions isolated to only the jobs that require them; restrictpages: writeandid-token: writeto Pages deployment jobs and their reusable-workflow callers.
Usecontents: readas the minimum permission for checkout-based build, test, documentation, and packaging jobs.
Grantpull-requests: readonly to jobs that perform pull-request metadata lookups.
When usingworkflow_call, inspect both caller and callee, and ensure the caller grants every permission required by the called jobs because the callee cannot elevate permissions.
Keep local workflow commands aligned with equivalentjustfilerecipes, and keep Python, Rust, and documentation jobs aligned with their lockfiles.
Preserve intended concurrency settings, branch filters, and documentation publish guards when modifying workflows.
Before editing workflows, inspect workflow relationships and settings with searches coveringuses:,permissions:,secrets:,concurrency:,cache, andjust.
Files:
.github/workflows/ci_typescript.yml
.github/workflows/**
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
CI workflows must reference the same package names as local workflows.
Files:
.github/workflows/ci_typescript.yml
**/{.github/workflows/**,Dockerfile*,Makefile,Justfile,justfile}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For CI or packaging changes, use
maintain-ciormaintain-packaging, then run the recipes and checks whose behavior changed.
Files:
.github/workflows/ci_typescript.ymljustfile
**/*.{rs,toml}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For any Rust change, run
just test-rustandcargo fmt --all -- --check.When Rust code changes, run
cargo fmt --all -- --checkandjust test-rust.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of generated API reference files.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
For a new or changed public API surface, start by implementing and validating the shared Rust core behavior first.
Format Rust code with
cargo fmt --alland ensurecargo fmt --all -- --checkpasses. Verify compilation withcargo check --workspace --locked.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
crates/fabric-core/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/schema.rscrates/fabric-core/src/config.rs
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/adapter-contract/adapter-descriptor.schema.jsonschemas/run-plan.schema.jsonschemas/SCHEMA.md
{README.md,docs/index.yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update
README.mdordocs/index.ymlwhen documentation entry points or example reading paths change.
Files:
README.md
README.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update the root
README.mdwhen workspace structure, supported adapters, or top-level documentation changes.
Files:
README.md
justfile
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep build, test, clean, and documentation recipes consistent with current packaging and validation commands.
justfile: Theset-versionrecipe must runjust lock-pythonafter updating source metadata.
The version helper contracts must remain aligned:set_project_versioncalls Cargo, Python, and TypeScript helpers; Cargo validation covers everynemo-fabric-*workspace package; Python discovery covers all adapters; and TypeScript updates both npm lockfile root entries without changing dependency versions.
Files:
justfile
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: Before implementing a public API addition or behavior change, determine whether the CLI, PyO3 binding, Python SDK, type stubs, schemas, and Python or TypeScript adapter-contract bindings must expose it.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: Keep every affected public surface in parity when adding or changing a runtime or binding API.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: Update documentation and examples in the same branch as the public API change.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: Ensure public behavior is clearly described, every affected public surface is covered, and the validation matrix matches the changed surfaces.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: PR notes must explain the user-facing change.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:44.158Z
Learning: Keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:55.333Z
Learning: Use `karpathy-guidelines` alongside this guidance; keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:55.333Z
Learning: Prefer the standard library, an existing dependency, or a small local implementation when the behavior remains clear and maintainable.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:55.333Z
Learning: Treat `UNKNOWN`, non-SPDX/custom, proprietary or source-available, copyleft, and network-copyleft licenses as explicit review points; route them to dependency approvers with distribution and linkage context rather than silently accepting or rejecting them.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:55.333Z
Learning: Record the functional need, viable alternatives considered, why the selected dependency is the narrowest fit, and any unresolved licensing question.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:52:55.333Z
Learning: Call out licensing uncertainties for dependency-approver review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:03.782Z
Learning: Before editing, determine exact Cargo, Python, and TypeScript target versions; keep changes scoped, distinguish package-version surfaces from examples or unrelated dependency versions, and audit old-version references with targeted searches.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:14.087Z
Learning: Choose the smallest validation set that covers the surfaces touched by a change; define focused validation before editing and call out checks not run.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:14.087Z
Learning: Format changed files with the language-native formatter before the final test pass.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:14.087Z
Learning: If code changes alter APIs, commands, paths, packaging behavior, telemetry semantics, or documented best practices, update dependent maintainer skills in the same branch and keep consumer skills in parity with changed SDK, Pydantic, and Rust details.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:14.087Z
Learning: For schema or public contract changes, run the Rust, Python, and TypeScript suites and review changes under `schemas/`, generated TypeScript sources, and generated API references.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:14.087Z
Learning: Before review or handoff, verify README and documentation entry points, verify examples use current `just` recipes and public commands, and run `git diff --check`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:27.851Z
Learning: Use branch prefixes `feat/`, `fix/`, `docs/`, `test/`, or `refactor/`; name branches after the work and never include Linear ticket IDs or slugs.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:27.851Z
Learning: When creating a pull request from the current branch, target the upstream repository rather than a fork.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:27.851Z
Learning: PR descriptions must state what changed, why, how it was tested, and any breaking changes while following the repository template format.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:37.943Z
Learning: Release tags must use SemVer with a leading `v`, such as `v0.1.0` or `v0.1.0-rc.1`; tags without the leading `v` are prohibited.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:37.943Z
Learning: All contributors must sign off commits with `git commit -s`; unsigned-off commits are not accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:37.943Z
Learning: Before submitting a pull request, run relevant tests, verify affected packages compile, update documentation, and rebase on the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:37.943Z
Learning: Pull requests require at least one approving review, passing CI, and completion of requested review changes without force-pushing during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T14:53:37.943Z
Learning: Use commit messages in the format `type: short description`, with one of the approved types, and keep the first line under 72 characters.
📚 Learning: 2026-08-07T07:15:59.993Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: docs/adapter-contract/registration-and-discovery.md:103-104
Timestamp: 2026-08-07T07:15:59.993Z
Learning: Keep documentation files under docs/adapter-contract/ in portable Markdown (.md), not MDX. GitHub and the public authoring skill consume these files directly, and the NVIDIA NeMo Fabric documentation pipeline accepts them without conversion; do not flag the lack of MDX conversion for these files.
Applied to files:
docs/adapter-contract/README.md
📚 Learning: 2026-08-07T16:20:01.603Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: docs/adapter-contract/README.md:1-4
Timestamp: 2026-08-07T16:20:01.603Z
Learning: For maintained Markdown files under docs/adapter-contract/, Fern parses content as MDX. Write SPDX license headers as JSX comments (`{/* ... */}`), not HTML comments, because HTML comments cause Fern parsing failures. This JSX form is accepted by the repository copyright checker and validated by Docs Preview.
Applied to files:
docs/adapter-contract/README.md
📚 Learning: 2026-08-07T07:15:33.918Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: schemas/adapter-contract/legacy/adapter-invocation.schema.json:176-176
Timestamp: 2026-08-07T07:15:33.918Z
Learning: For the NeMo Fabric v1alpha southbound adapter contract, treat the adapter descriptor's `contract_version` as the version of the complete contract, including `RuntimeContext`. Keep `RuntimeContext` strict by rejecting unknown properties, and require a negotiated contract-version change for additive shape changes.
Applied to files:
schemas/adapter-contract/adapter-descriptor.schema.json
📚 Learning: 2026-08-07T07:15:35.305Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: schemas/adapter-contract/agent-config.schema.json:374-381
Timestamp: 2026-08-07T07:15:35.305Z
Learning: For the NeMo Fabric southbound adapter contract schemas, treat `AdapterDescriptor.contract_version` as the single negotiated version for the entire contract, covering `AgentConfig`, `AgentRunRequest`, `AgentRunResult`, and `RuntimeContext` before adapter startup. Do not require individual version fields in these payloads; verify behavior against the maintained adapter-contract README.
Applied to files:
schemas/adapter-contract/adapter-descriptor.schema.json
🪛 ast-grep (0.45.1)
tests/scripts/test_set_typescript_project_version.py
[info] 24-31: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
{
"name": "@nvidia/nemo-fabric-adapter-contract",
"version": "0.2.0",
"devDependencies": {"typescript": "5.9.3"},
},
indent=2,
)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
[info] 36-54: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
{
"name": "@nvidia/nemo-fabric-adapter-contract",
"version": "0.2.0",
"lockfileVersion": 3,
"requires": True,
"packages": {
"": {
"name": "@nvidia/nemo-fabric-adapter-contract",
"version": "0.2.0",
"devDependencies": {"typescript": "5.9.3"},
},
"node_modules/typescript": {
"version": "5.9.3",
},
},
},
indent=2,
)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
[info] 95-95: use jsonify instead of json.dumps for JSON output
Context: json.dumps(lock, indent=2)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
scripts/ci/set_typescript_project_version.py
[info] 27-27: use jsonify instead of json.dumps for JSON output
Context: json.dumps(value, indent=2)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
🪛 LanguageTool
.agents/skills/validate-change/SKILL.md
[style] ~26-~26: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...pter changed, run just test-python. - If the TypeScript adapter contract or one ...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~35-~35: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ation changed, run its focused tests. - If a Cargo or Python manifest or lockfile ...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
.agents/skills/update-project-version/SKILL.md
[style] ~96-~96: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...all Python package metadata resolves. - Run just test-python when the integration...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
[style] ~99-~99: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ing validation of every Python wheel. - Run just pack-typescript to verify the st...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🪛 Ruff (0.16.1)
tests/scripts/test_set_typescript_project_version.py
[warning] 98-98: Pattern passed to match= contains metacharacters but is neither escaped nor raw
(RUF043)
scripts/ci/set_typescript_project_version.py
[warning] 23-23: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 33-33: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 43-43: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 45-45: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 47-47: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 51-51: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 53-55: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 57-57: Avoid specifying long messages outside the exception class
(TRY003)
[warning] 78-78: Avoid specifying long messages outside the exception class
(TRY003)
🔇 Additional comments (42)
crates/fabric-core/src/config.rs (2)
199-206: LGTM!Also applies to: 242-247, 532-549, 1191-1192
242-247: 🗄️ Data Integrity & IntegrationNo older adapter descriptor found. All committed JSON descriptors use
fabric.adapter/v1alpha2;v1alpha1appears only in an intentional negative TypeScript test.crates/fabric-core/src/schema.rs (1)
313-324: LGTM!Also applies to: 356-388
schemas/adapter-contract/adapter-descriptor.schema.json (1)
201-206: LGTM!Also applies to: 251-251, 276-276, 314-314
schemas/run-plan.schema.json (1)
111-111: LGTM!Also applies to: 136-136, 174-174, 337-342
typescript/adapter-contract/schemas/adapter-descriptor.schema.json (1)
1-365: LGTM!typescript/adapter-contract/schemas/agent-config.schema.json (1)
1-469: LGTM!typescript/adapter-contract/schemas/agent-run-request.schema.json (1)
1-25: LGTM!typescript/adapter-contract/schemas/agent-run-result.schema.json (1)
1-259: LGTM!typescript/adapter-contract/schemas/runtime-context.schema.json (1)
1-229: LGTM!typescript/adapter-contract/scripts/generate.mjs (5)
98-128: LGTM!
152-174: LGTM!
176-301: LGTM!
312-367: LGTM!
369-425: LGTM!typescript/adapter-contract/scripts/projection-guards.mjs (1)
1-42: LGTM!schemas/SCHEMA.md (1)
11-16: LGTM!Also applies to: 40-48, 138-146
typescript/adapter-contract/src/index.ts (1)
1-40: LGTM!typescript/adapter-contract/src/json.ts (1)
1-19: LGTM!typescript/adapter-contract/src/preview.ts (1)
1-11: LGTM!typescript/adapter-contract/src/version.ts (1)
1-8: LGTM!typescript/adapter-contract/test/tsconfig.json (1)
1-13: LGTM!typescript/adapter-contract/tsconfig.build.json (1)
1-16: LGTM!typescript/adapter-contract/test/stable.test.ts (1)
1-188: LGTM!typescript/adapter-contract/test/preview.test.ts (1)
1-59: LGTM!typescript/adapter-contract/test/projection-guards.test.mjs (1)
1-51: LGTM!typescript/adapter-contract/package.json (1)
1-52: LGTM!typescript/adapter-contract/.gitignore (1)
1-6: LGTM!typescript/adapter-contract/LICENSE (1)
1-203: LGTM!typescript/adapter-contract/README.md (1)
1-11: LGTM!Also applies to: 22-62, 64-68, 73-88
.agents/skills/validate-change/SKILL.md (1)
26-41: LGTM!Also applies to: 77-77, 94-98, 128-131
AGENTS.md (1)
51-56: LGTM!CONTRIBUTING.md (1)
22-27: LGTM!Also applies to: 103-107, 118-121, 132-136, 147-150
README.md (1)
264-267: LGTM!Also applies to: 270-273
RELEASING.md (1)
49-52: LGTM!Also applies to: 150-152
docs/adapter-contract/README.md (1)
84-89: LGTM!skills/nemo-fabric-build-adapter/SKILL.md (1)
80-87: LGTM!typescript/adapter-contract/scripts/check-package.mjs (1)
1-187: LGTM!typescript/adapter-contract/scripts/clean.mjs (1)
1-10: LGTM!justfile (1)
252-283: LGTM!Also applies to: 311-327, 400-406
.github/workflows/ci_typescript.yml (1)
19-49: LGTM!.pre-commit-config.yaml (1)
12-12: LGTM!
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
typescript/adapter-contract/schemas/agent-run-result.schema.json (2)
164-209: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winReject
nullfor failed results.The shared
errorproperty must remain nullable for cancelled results, but the failed branch must require a non-nullAgentRunError. Requiring only theerrorproperty accepts a result such as{"status":"failed","error":null}.Constrain
errortoAgentRunErrorinside the failed branch and add a regression fixture. This must matchtypescript/adapter-contract/src/generated/agent-run-result.ts, where failed results requireAgentRunError.As per path instructions: Failed results must include an error, while succeeded results must not include one. Based on learnings: Keep every affected public surface in parity.
🤖 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 `@typescript/adapter-contract/schemas/agent-run-result.schema.json` around lines 164 - 209, Update the failed branch of the agent-run-result schema’s allOf conditions so its error property is constrained to non-null AgentRunError rather than merely required; preserve nullable error support for cancelled results and the succeeded branch’s prohibition. Add a regression fixture for a failed result with error:null, and keep the schema aligned with the generated agent-run-result.ts contract across all affected public surfaces.Sources: Path instructions, Learnings
131-159: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftKeep
uint64usage values lossless in TypeScript.
AgentUsage.input_tokens,output_tokens, andtotal_tokensare generated asnumber, while Rust and the schema support the fulluint64range. JavaScript cannot represent values above9007199254740991exactly, so JSON parsing can change valid token counts. Choose a lossless wire representation and update the Rust model and TypeScript declarations consistently. Add a fixture above the safe-integer limit that tests parsing and serialization.🤖 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 `@typescript/adapter-contract/schemas/agent-run-result.schema.json` around lines 131 - 159, Update AgentUsage input_tokens, output_tokens, and total_tokens to use a lossless uint64 wire representation consistently across the Rust model and generated TypeScript declarations, rather than number. Preserve nullability and the existing uint64 bounds, and add a fixture above JavaScript’s safe-integer limit covering both parsing and serialization.
🤖 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 @.agents/skills/update-project-version/SKILL.md:
- Line 3: Update the description metadata for the update-project-version skill
to use the Oxford comma, changing “Cargo, Python and TypeScript” to “Cargo,
Python, and TypeScript.”
In `@crates/fabric-core/src/agent_config.rs`:
- Around line 67-70: Ensure externally deserialized AgentConfig/RunPlan values
are validated before start_runtime hands them to the adapter, using the existing
AgentModelConfig/AgentConfig validation path or regenerating agent_config from
the validated FabricConfig projection. Update the runtime handoff so invalid
blank provider or model values cannot bypass validate_config.
In `@crates/fabric-core/src/config.rs`:
- Around line 1193-1199: Update Config’s assert_all_variants_listed guard to
validate Self::ALL rather than relying only on an exhaustive match, ensuring
every provider variant is included in the array used for propertyNames.enum. Use
a compile-time or test-time assertion that detects variants present in the enum
but missing from Self::ALL, while preserving the existing provider list
behavior.
In `@typescript/adapter-contract/README.md`:
- Around line 29-32: Update the TypeScript configuration guidance in the README
to specify a compatible module/moduleResolution pair, such as module: NodeNext
with moduleResolution: NodeNext or module: ESNext with moduleResolution:
bundler, while retaining the resolveJsonModule requirement for bundled JSON
Schemas.
In `@typescript/adapter-contract/scripts/check-dependencies.mjs`:
- Around line 42-57: Update the dependency license validation around
missingLicenses and licenseInventory to accept only reviewed permissive SPDX
identifiers from an explicit allowlist. Reject whitespace-only, UNKNOWN, custom,
proprietary, source-available, copyleft, network-copyleft, and any other
unlisted values; report the affected dependency paths and require an explicit
dependency-approver review mechanism for exceptions while preserving recorded
license evidence for accepted build dependencies.
---
Outside diff comments:
In `@typescript/adapter-contract/schemas/agent-run-result.schema.json`:
- Around line 164-209: Update the failed branch of the agent-run-result schema’s
allOf conditions so its error property is constrained to non-null AgentRunError
rather than merely required; preserve nullable error support for cancelled
results and the succeeded branch’s prohibition. Add a regression fixture for a
failed result with error:null, and keep the schema aligned with the generated
agent-run-result.ts contract across all affected public surfaces.
- Around line 131-159: Update AgentUsage input_tokens, output_tokens, and
total_tokens to use a lossless uint64 wire representation consistently across
the Rust model and generated TypeScript declarations, rather than number.
Preserve nullability and the existing uint64 bounds, and add a fixture above
JavaScript’s safe-integer limit covering both parsing and serialization.
🪄 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: a828d28b-22c9-4efc-b3de-5f52cf2f80a1
📒 Files selected for processing (26)
.agents/skills/contribute-api/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/update-project-version/SKILL.md.agents/skills/validate-change/SKILL.md.pre-commit-config.yamlRELEASING.mdcrates/fabric-core/src/agent_config.rscrates/fabric-core/src/agent_execution.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rsjustfileschemas/adapter-contract/agent-config.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/run-plan.schema.jsonscripts/ci/set_typescript_project_version.pytests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/README.mdtypescript/adapter-contract/package.jsontypescript/adapter-contract/schemas/agent-config.schema.jsontypescript/adapter-contract/schemas/agent-run-result.schema.jsontypescript/adapter-contract/scripts/check-dependencies.mjstypescript/adapter-contract/scripts/check-package.mjstypescript/adapter-contract/scripts/generate.mjstypescript/adapter-contract/test/projection-guards.test.mjstypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/tsconfig.build.json
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
- GitHub Check: Preview docs
- GitHub Check: Test (Python 3.11, windows-amd64)
- GitHub Check: Test (Python 3.12, windows-amd64)
- GitHub Check: Test (Python 3.14, windows-amd64)
- GitHub Check: Test (Python 3.14, macos-arm64)
- GitHub Check: Test (Python 3.12, macos-arm64)
- GitHub Check: Test (Python 3.13, windows-amd64)
- GitHub Check: Test (Python 3.11, macos-arm64)
- GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (40)
.pre-commit-config.yaml
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Regenerate attribution files with the named
attributions-rustandattributions-pythonpre-commit hooks instead of editing generated output directly.
Files:
.pre-commit-config.yaml
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
schemas/adapter-contract/agent-run-result.schema.jsontypescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsoncrates/fabric-core/src/agent_config.rstypescript/adapter-contract/scripts/check-package.mjstypescript/adapter-contract/schemas/agent-run-result.schema.jsoncrates/fabric-core/src/config.rstypescript/adapter-contract/package.jsontypescript/adapter-contract/scripts/check-dependencies.mjsjustfileschemas/adapter-contract/agent-config.schema.jsoncrates/fabric-core/src/schema.rsRELEASING.mdtypescript/adapter-contract/scripts/generate.mjsscripts/ci/set_typescript_project_version.pytypescript/adapter-contract/schemas/agent-config.schema.jsoncrates/fabric-core/src/agent_execution.rstests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/test/projection-guards.test.mjstypescript/adapter-contract/README.mdschemas/run-plan.schema.json
{schemas/**/*,**/*.{rs,py,pyi,ts,tsx}}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For schema or public contract changes, run Rust, Python, and TypeScript suites and review schemas, checked-in Python adapter-contract representations, generated TypeScript sources, and generated API references.
Files:
schemas/adapter-contract/agent-run-result.schema.jsoncrates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rsschemas/adapter-contract/agent-config.schema.jsoncrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/agent_execution.rstests/scripts/test_set_typescript_project_version.pyschemas/run-plan.schema.json
{.github/**/*,**/*.{yml,yaml},**/Dockerfile,**/*.{toml,json}}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For CI or packaging changes, use the relevant maintenance guidance and run recipes and checks whose behavior changed.
Files:
schemas/adapter-contract/agent-run-result.schema.jsontypescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/schemas/agent-run-result.schema.jsontypescript/adapter-contract/package.jsonschemas/adapter-contract/agent-config.schema.jsontypescript/adapter-contract/schemas/agent-config.schema.jsonschemas/run-plan.schema.json
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/agent-config.schema.jsonschemas/run-plan.schema.json
typescript/adapter-contract/**/*
📄 CodeRabbit inference engine (AGENTS.md)
Keep the TypeScript southbound adapter contract documentation current when the API changes.
Files:
typescript/adapter-contract/tsconfig.build.jsontypescript/adapter-contract/test/tsconfig.jsontypescript/adapter-contract/scripts/check-package.mjstypescript/adapter-contract/schemas/agent-run-result.schema.jsontypescript/adapter-contract/package.jsontypescript/adapter-contract/scripts/check-dependencies.mjstypescript/adapter-contract/scripts/generate.mjstypescript/adapter-contract/schemas/agent-config.schema.jsontypescript/adapter-contract/test/projection-guards.test.mjstypescript/adapter-contract/README.md
**/*.{rs,toml}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For any Rust change, run
just test-rustandcargo fmt --all -- --check.
**/*.{rs,toml}: When Rust code changes, runcargo fmt --all -- --checkandjust test-rust.
For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, adding Python tests when behavior is exposed through the SDK and relevant CLI tests when CLI behavior changes.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/agent_execution.rstests/scripts/test_set_typescript_project_version.py
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of generated API reference files.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
**/*.{md,mdx,yml,py,rs,sh}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Keep documentation aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, and support claims.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rsRELEASING.mdscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/agent_execution.rstests/scripts/test_set_typescript_project_version.pytypescript/adapter-contract/README.md
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Start from the shared Rust core behavior first when contributing a public API addition or behavior change.
**/*.rs: Format Rust code withcargo fmt --all, verify formatting withcargo fmt --all -- --check, and runcargo check --workspace --lockedfor compilation checks.
Include the specified NVIDIA Apache-2.0 SPDX license header using Rust//comments in every Rust source file.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
crates/fabric-core/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
**/*.{rs,py,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,py,ts,tsx}: Usesnake_casefor Rust and Python functions and variables,PascalCasefor Rust, Python, and TypeScript types, and preserve wire-levelsnake_casenames for TypeScript contract properties.
When adding functionality, include tests in the corresponding Rust crate or relevanttests/area; public contract changes must keep JSON Schema snapshots, Python representations, and generated TypeScript declarations synchronized.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rsscripts/ci/set_typescript_project_version.pycrates/fabric-core/src/agent_execution.rstests/scripts/test_set_typescript_project_version.py
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/agent_config.rscrates/fabric-core/src/config.rscrates/fabric-core/src/schema.rscrates/fabric-core/src/agent_execution.rs
.agents/skills/**
📄 CodeRabbit inference engine (.agents/skills/README.md)
.agents/skills/**: Maintainer skills must be discoverable from.agents/skills/; Claude Code exposes the same set through.claude/skillswithout mixing in consumer skills.
Keep consumer-facing integration guidance in the top-levelskills/directory and exclude it from the maintainer skill set.Use maintainer skills for repository-internal API, documentation, testing, CI, packaging, release, and PR work; do not place external integration guidance there.
Files:
.agents/skills/contribute-api/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/validate-change/SKILL.md.agents/skills/update-project-version/SKILL.md
.agents/skills/*/
📄 CodeRabbit inference engine (.agents/skills/README.md)
Use descriptive, task-based names for maintainer skill directories, such as
contribute-apiorvalidate-change.
Files:
.agents/skills/contribute-api/SKILL.md.agents/skills/maintain-packaging/SKILL.md.agents/skills/validate-change/SKILL.md.agents/skills/update-project-version/SKILL.md
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Files:
typescript/adapter-contract/package.json
**/{Cargo.toml,pyproject.toml,package.json}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
**/{Cargo.toml,pyproject.toml,package.json}: Treat every direct dependency as a long-lived API, supply-chain, and licensing commitment.
Prefer the standard library, an existing dependency, or a small local implementation when that keeps behavior clear and maintainable.
When multiple dependencies satisfy the technical requirement, prefer a maintained OSS option with clear SPDX metadata, a smaller transitive graph, and permissive terms such as Apache-2.0, MIT, BSD, or ISC.
Files:
typescript/adapter-contract/package.json
**/{Cargo.toml,pyproject.toml,package.json,Cargo.lock,uv.lock,package-lock.json}
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Treat UNKNOWN, non-SPDX/custom, proprietary or source-available terms, and copyleft or network-copyleft terms as explicit review points; route them to dependency approvers with distribution and linkage context.
Files:
typescript/adapter-contract/package.json
typescript/adapter-contract/package.json
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
typescript/adapter-contract/package.json: Keep the TypeScript adapter-contract package's production dependency graph empty; build-only dependencies require permissive, recorded license evidence.
The TypeScript adapter-contract package version must follow the workspace release version without changing its independent wire contract version.Keep the TypeScript adapter-contract package version aligned with the Cargo SemVer release version.
Files:
typescript/adapter-contract/package.json
{Cargo.toml,pyproject.toml,adapters/**/pyproject.toml,typescript/adapter-contract/package.json}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
For prerelease or build-metadata releases, use valid Cargo SemVer and equivalent PEP 440 Python metadata rather than blindly copying incompatible syntax.
Files:
typescript/adapter-contract/package.json
{Cargo.toml,pyproject.toml,python/pyproject.toml,adapters/**/pyproject.toml,typescript/adapter-contract/package.json}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
When changing versions, audit old-version references and distinguish package-version surfaces from examples and unrelated dependency versions; do not perform blind repository-wide replacements.
Files:
typescript/adapter-contract/package.json
typescript/adapter-contract/package{,-lock}.json
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Inspect the TypeScript package manifest and lockfile root version entries.
Files:
typescript/adapter-contract/package.json
{Cargo.toml,Cargo.lock,pyproject.toml,python/pyproject.toml,python/uv.lock,adapters/**/pyproject.toml,adapters/**/uv.lock,typescript/adapter-contract/package.json,typescript/adapter-contract/package-lock.json,justfile}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Run the relevant version-update validation, including Cargo checks, Python build/package checks, TypeScript packaging checks, and
git diff --check.
Files:
typescript/adapter-contract/package.jsonjustfile
{package.json,**/package.json,package-lock.json,**/package-lock.json}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When the TypeScript manifest or npm lockfile changes, inspect the complete npm dependency tree and license fields, confirm zero production dependencies, and run package and audit checks.
Files:
typescript/adapter-contract/package.json
justfile
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Keep build, test, clean, and documentation recipes aligned with current package and module paths.
justfile: Theset-versionrecipe must runjust lock-pythonafter source metadata is updated.
set_project_versionmust call the Cargo, Python, and TypeScript project version helpers.
set_cargo_workspace_versionmust update the workspace version andnemo-fabric-coredependency, then verify everynemo-fabric-*workspace package through Cargo metadata.
set_python_project_versionsmust update the root setuptools version, recursively discovered adapter versions, and internal exact-version pins while rejecting a static version inpython/pyproject.toml.
set_typescript_project_versionmust update the package manifest and both root version entries in the npm lockfile without changing dependency versions.
Files:
justfile
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such ashereorread more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.
**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...
Files:
RELEASING.mdtypescript/adapter-contract/README.md
**/*.{md,rst,txt,adoc}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-language-mechanics.md)
**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 12:30 to 1:00 p.m.for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...
Files:
RELEASING.mdtypescript/adapter-contract/README.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon first use, typically in the title and H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
Treat incorrect or stale commands, package names, paths, APIs, support claims, procedures, examples, terminology, or public behavior documentation as blocking issues.
CapitalizeNVIDIAcorrectly and format code, commands, paths, and filenames as inline code where needed.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences; ensure examples match current APIs and build commands.
Use descriptive anchor text, avoid raw URLs and generic labels such ashere, and use repository-relative.mdxpaths for links withindocs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead withMust fix,Should fix, andNice to havecategories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.
Files:
RELEASING.mdtypescript/adapter-contract/README.md
RELEASING.md
📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)
Reflect public packaging changes in release-facing documentation, including release tags, registry publication, and current install or usage commands.
Keep release policy and the end-to-end maintainer workflow in RELEASING.md; do not move release-history policy into user-facing documentation or add a duplicate CHANGELOG.md.
Files:
RELEASING.md
{docs/**/*,examples/**/*,**/*.md}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
{docs/**/*,examples/**/*,**/*.md}: When documentation or examples change, runjust docswhen practical and verify documented commands against the current repository.
For documentation-only changes, usecontribute-docsandreview-doc-style; runjust docsfor docs-site or generated-reference changes.
Files:
RELEASING.mdtypescript/adapter-contract/README.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Include the specified NVIDIA Apache-2.0 SPDX license header using HTML comments in every HTML or Markdown source file.
Files:
RELEASING.mdtypescript/adapter-contract/README.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
RELEASING.mdtypescript/adapter-contract/README.md
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When Python code or a Python-facing adapter changes, run
just test-python.
Files:
scripts/ci/set_typescript_project_version.pytests/scripts/test_set_typescript_project_version.py
{**/*.py,**/*.pyi,**/Cargo.toml,**/Cargo.lock,pyproject.toml}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use Python test guidance, run focused pytest tests first, then
just test-python, and rebuild withjust build-pythonwhen native code or packaging changes.
Files:
scripts/ci/set_typescript_project_version.pytests/scripts/test_set_typescript_project_version.py
**/*.py
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.py: Use type annotations for public Python APIs and keep native binding declarations synchronized with their Rust implementations.
Include the specified NVIDIA Apache-2.0 SPDX license header using Python#comments in every Python source file.
Files:
scripts/ci/set_typescript_project_version.pytests/scripts/test_set_typescript_project_version.py
tests/**/*.py
📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)
tests/**/*.py: Use pytest to run Python tests.
Do not add@pytest.mark.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
If a fixture is needed in multiple test files, define it once inconftest.pyrather than repeating it.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its returned value is unused or it returns no value.
Avoid defensive programming in tests; access expected values directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
When adapter installation metadata changes, packaging metadata tests must directly assert that the root project depends unconditionally on the exact-versionnemo-fabric-runtimedistribution.
Packaging metadata tests must verify that each root harness extra delegates to the matching version of the leaf adapter'sharnessextra.
Packaging metadata tests must verify that bare leaf dependencies remain adapter-owned and that the rootadapter-testsdependency group installs each leaf through itsharnessextra.
Packaging metadata tests must verify that every leaf providesfull; only adapters importing NeMo Relay Python APIs providerelay, while adapters using an external Relay executable havefullequal toharness.
Files:
tests/scripts/test_set_typescript_project_version.py
{tests/**,python/tests/**}
⚙️ CodeRabbit configuration file
{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
Files:
tests/scripts/test_set_typescript_project_version.py
**/README.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update the relevant adapter or example
README.mdwhen that surface changes.
Files:
typescript/adapter-contract/README.md
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Determine whether the CLI, PyO3 binding, Python SDK, type stubs, schemas, and Python/TypeScript adapter-contract bindings must expose the new API surface.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Keep every affected public surface in parity.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Clearly describe public behavior.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Cover every affected public surface.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Ensure the validation matrix matches the changed surfaces.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Explain the user-facing change in PR notes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:15.848Z
Learning: Keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:25.192Z
Learning: Record the functional need, viable alternatives considered, why the selected dependency is the narrowest fit, and any unresolved licensing question.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:12:25.192Z
Learning: Keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Run tests for every language surface affected by a change. Changes touching the Rust core or public adapter-contract schemas require Rust, Python, and TypeScript test suites.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Update corresponding documentation when changes affect public behavior, adapters, examples, or workspace structure.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: All contributors must sign off every commit using `git commit -s`; unsigned commits will not be accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Before submitting a pull request, identify an issue, run relevant tests, verify affected packages compile, update documentation, and rebase onto the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Pull requests require at least one approving review, CI must pass before merging, and review feedback must be addressed without force-pushing during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Use commit messages in the form `type: short description`, using one of `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, or `perf`; keep the first line under 72 characters.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric
Timestamp: 2026-08-11T16:13:03.735Z
Learning: Use release tags in SemVer format with a leading `v`, such as `v0.1.0` or `v0.1.0-rc.1`; do not omit the leading `v`.
📚 Learning: 2026-08-07T07:15:33.918Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: schemas/adapter-contract/legacy/adapter-invocation.schema.json:176-176
Timestamp: 2026-08-07T07:15:33.918Z
Learning: For the NeMo Fabric v1alpha southbound adapter contract, treat the adapter descriptor's `contract_version` as the version of the complete contract, including `RuntimeContext`. Keep `RuntimeContext` strict by rejecting unknown properties, and require a negotiated contract-version change for additive shape changes.
Applied to files:
schemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/agent-config.schema.json
📚 Learning: 2026-08-07T07:15:35.305Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: schemas/adapter-contract/agent-config.schema.json:374-381
Timestamp: 2026-08-07T07:15:35.305Z
Learning: For the NeMo Fabric southbound adapter contract schemas, treat `AdapterDescriptor.contract_version` as the single negotiated version for the entire contract, covering `AgentConfig`, `AgentRunRequest`, `AgentRunResult`, and `RuntimeContext` before adapter startup. Do not require individual version fields in these payloads; verify behavior against the maintained adapter-contract README.
Applied to files:
schemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/agent-config.schema.json
🪛 ast-grep (0.45.1)
tests/scripts/test_set_typescript_project_version.py
[info] 119-119: use jsonify instead of json.dumps for JSON output
Context: json.dumps(lock, indent=2)
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
🔇 Additional comments (23)
typescript/adapter-contract/package.json (1)
34-36: LGTM!typescript/adapter-contract/scripts/check-package.mjs (1)
175-175: LGTM!justfile (1)
311-325: LGTM!Also applies to: 402-403
scripts/ci/set_typescript_project_version.py (1)
13-19: LGTM!tests/scripts/test_set_typescript_project_version.py (1)
19-20: LGTM!Also applies to: 63-79, 89-123
.pre-commit-config.yaml (1)
12-12: LGTM!RELEASING.md (1)
150-154: LGTM!.agents/skills/contribute-api/SKILL.md (1)
3-3: LGTM!.agents/skills/maintain-packaging/SKILL.md (1)
3-3: LGTM!Also applies to: 27-28, 64-67, 87-88, 107-109
.agents/skills/validate-change/SKILL.md (1)
26-27: LGTM!Also applies to: 63-65
crates/fabric-core/src/config.rs (1)
199-205: LGTM!Also applies to: 242-248, 532-550
crates/fabric-core/src/schema.rs (1)
313-324: LGTM!Also applies to: 356-389, 394-399, 429-429
crates/fabric-core/src/agent_execution.rs (1)
145-146: LGTM!Also applies to: 177-177, 200-200, 209-209, 308-308
schemas/adapter-contract/agent-config.schema.json (1)
173-179: LGTM!typescript/adapter-contract/README.md (1)
6-27: LGTM!Also applies to: 34-58, 59-74, 76-100, 102-113
typescript/adapter-contract/schemas/agent-config.schema.json (1)
1-373: LGTM!Also applies to: 374-471
schemas/adapter-contract/agent-run-result.schema.json (1)
33-50: LGTM!schemas/run-plan.schema.json (1)
108-112: LGTM!Also applies to: 135-139, 171-175, 332-343, 611-622
typescript/adapter-contract/schemas/agent-run-result.schema.json (1)
2-112: LGTM!Also applies to: 210-260
typescript/adapter-contract/scripts/generate.mjs (1)
95-97: LGTM!typescript/adapter-contract/test/projection-guards.test.mjs (1)
30-34: LGTM!typescript/adapter-contract/test/tsconfig.json (1)
1-16: LGTM!typescript/adapter-contract/tsconfig.build.json (1)
1-19: LGTM!
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Overview
Add the dependency-free
@nvidia/nemo-fabric-adapter-contractTypeScript projection of the Rust-generated v1alpha2 adapter schemas. Stable descriptor, configuration, and runtime-context types are exported from the package root; invocation request/result types remain isolated under./previewuntil the typed lifecycle transport is finalized.The package has zero production dependencies.
json-schema-to-typescript@15.0.4is an exact-pinned build dependency selected to avoid hand-maintaining a parallel contract hierarchy. Its development-only transitive graph includesargparse@2.0.1underPython-2.0; dependency approver acknowledgement is requested before merge.This PR does not add a TypeScript lifecycle host, runtime validator, Pi adapter, or npm publication credentials. Trusted npm publication is the second PR in this stack.
Details
justrecipes, documentation, and maintainer workflow parity.Validation
just test-typescriptjust test-rustjust test-python(729 passed, 16 skipped)cargo fmt --all -- --checkuv run pytest -q tests/scripts/test_set_typescript_project_version.py(6 passed)just docs(strict broken-link validation passed; unauthenticated redirect check was skipped)uv run pre-commit run --all-filesgit diff --checknpm publication was not exercised in this PR; the stacked trusted-publishing PR owns that boundary.
Where should the reviewer start?
Start with
typescript/adapter-contract/package.json, then reviewtypescript/adapter-contract/scripts/generate.mjsandtypescript/adapter-contract/test/. The key design decision is the stable root versus./previewsplit.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Relates to FABRIC-190
Relates to FABRIC-193, FABRIC-194, and FABRIC-195
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.
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
Tests