docs(platform): publish canonical platform support matrix (#4630) - #5712
Conversation
Add a single source of truth for what NemoClaw supports today across platforms, inference providers, agents, integrations, deployment paths, capabilities, and out-of-scope items. Everything below the docs surface is generated from ci/platform-matrix.json so the page cannot drift silently from the metadata. What this lands - ci/platform-matrix.json: expanded source of truth covering platforms, providers, agents, integrations, deployment paths, capabilities, and the out-of-scope table. Every status follows the declared vocabulary (Tested / Tested with limitations / Experimental / Deferred / Unsupported / Hermes only); evidence rows carry file:line citations to source. - docs/reference/platform-support.mdx: new canonical launch-claims page wired to the JSON through sentinel-comment regeneration. Renders every section above, plus a project-status block and an Owners section that reflects the engineering-owner model. - scripts/generate-platform-docs.py: hardened generator. Validates the matrix shape (required keys, declared status vocabulary, placeholder owner rejection), escapes Markdown table hazards (pipes, newlines, HTML control characters, MDX expression braces), and renders the full agent/capability/integration/deployment/out-of-scope tables for the canonical page in addition to the existing partial views. - docs/get-started/prerequisites.mdx and docs/inference/inference-options.mdx: partial tables re-rendered from the JSON so users see the same status vocabulary in onboarding-time docs without browsing the full matrix. - test/generate-platform-docs.test.ts: regression coverage for the generator, escaping, status vocabulary, placeholder owner rejection, partial-vs-full deferred filtering, owners-block shape, agent-ID resolution against installed manifests, out-of-scope LangChain exception scoping, and file:line citation existence. Supersedes #5345 This branches off current main and ships only the canonical matrix work; the docs-to-skills regen tangle from #5345 is dropped now that main has retired that system. The audit and evidence work from #5345 is preserved in its history. Fixes #4630 Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughUpdates the platform support matrix, expands the generator and reference docs it renders, refreshes related guidance, and adds tests plus pre-commit coverage for the generated documentation. ChangesPlatform Support Matrix System
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
E2E Advisor RecommendationRequired E2E: None Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: None Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 2 items to resolve/justify, 0 in-scope improvements
|
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (4)
test/generate-platform-docs.test.ts (2)
255-291: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAlign the test name with the files it actually scans.
The assertion says "matrix, docs, and generated skills," but
docTargetsonly includes two docs pages and never inspects generated skills artifacts. That gives broader coverage than the test really has. Either extend the scan to the generated skills output or rename the test to match its current scope.🤖 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 `@test/generate-platform-docs.test.ts` around lines 255 - 291, The test name overstates its coverage because the current scan in the `every --agent <id> example...` test only reads the matrix and the two doc pages listed in `docTargets`, not generated skills artifacts. Either update the test logic to actually inspect the generated skills output as well, or rename the test description/assertion to reflect the real inputs it checks so the scope matches the implementation.
196-236: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winExercise the real
--checkpath here.This test never invokes the generator's CLI or
main()wiring; it imports the module and calls_validate_matrixdirectly. A regression in argument parsing, fail-fast stderr handling, or exit-code plumbing would still pass this test. Please run the realpython3 ... generate-platform-docs.py --check ...path instead of reimplementing it inline.🤖 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 `@test/generate-platform-docs.test.ts` around lines 196 - 236, The test is bypassing the generator’s actual CLI flow by importing the module and calling _validate_matrix directly, so it won’t catch regressions in main(), argument parsing, stderr handling, or exit codes. Update the test to invoke the real generate-platform-docs.py --check path through spawnSync, using the existing SCRIPT_PATH and temporary matrix fixture, and assert on the CLI result rather than the inline Python wrapper; keep the validation expectation tied to the placeholder owner case in _validate_matrix.docs/reference/platform-support.mdx (2)
173-173: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse the shared CLI placeholder on Line 173.
nemoclaw <name> connectis a cross-agent command example, so hard-coding the alias here breaks the build-time rewrite used elsewhere on this page. As per path instructions, "when a docs PR adds a command-line example that works across all NemoClaw agent aliases ... use$$nemoclawinstead."🤖 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 `@docs/reference/platform-support.mdx` at line 173, The `nemoclaw <name> connect` example in the platform support docs should use the shared CLI placeholder instead of a hard-coded alias so the build-time rewrite can work across agent names. Update the command example in the docs reference content to use the shared placeholder consistently with the other cross-agent examples on this page, and keep the surrounding text unchanged.Source: Path instructions
182-187: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd a
Next Stepssection at the bottom of this new page.The page currently ends with update instructions, but the docs path instructions for new pages call for a bottom
Next Stepssection that links to related pages.🤖 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 `@docs/reference/platform-support.mdx` around lines 182 - 187, Add a bottom-of-page Next Steps section to the platform-support docs page, since this new page currently ends with the Updating the matrix instructions and is missing the standard related-links footer. Update the mdx content in the platform-support page to include a clearly labeled Next Steps section with links to the relevant follow-up docs, keeping it consistent with the existing docs page structure and navigation style.Source: Path instructions
🤖 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 `@docs/inference/inference-options.mdx`:
- Around line 46-54: The “Provider Options” copy conflicts with the newly
caveated status table for the OpenAI-compatible and Anthropic-compatible rows.
Update the wording in the provider section so it matches the validated adapters
only, using the same symbols and terminology as the table entries for
OpenRouter, AWS Bedrock, OpenAI-compatible, and Anthropic-compatible endpoints.
Remove or soften any “any compatible proxy/server” language so the page makes
one consistent claim across both sections.
In `@scripts/generate-platform-docs.py`:
- Around line 181-237: _validate_matrix() currently skips validating the
project_status object, so generate_project_status_block() can still crash later
with a raw KeyError when stage, label, since, or notes are missing. Add a
required-key check for the project_status entry inside _validate_matrix(), using
the same fail-fast pattern as the other sections, so malformed data is rejected
with a controlled ValueError before rendering.
- Around line 159-178: The _escape_cell helper is escaping angle brackets inside
inline code spans, which changes literal command placeholders in generated docs.
Update _escape_cell in generate-platform-docs.py to preserve text wrapped in
backticks while still escaping structural Markdown/MDX hazards in the rest of
the cell. Keep the logic localized to _escape_cell so table cells render safely
without altering inline code content.
---
Nitpick comments:
In `@docs/reference/platform-support.mdx`:
- Line 173: The `nemoclaw <name> connect` example in the platform support docs
should use the shared CLI placeholder instead of a hard-coded alias so the
build-time rewrite can work across agent names. Update the command example in
the docs reference content to use the shared placeholder consistently with the
other cross-agent examples on this page, and keep the surrounding text
unchanged.
- Around line 182-187: Add a bottom-of-page Next Steps section to the
platform-support docs page, since this new page currently ends with the Updating
the matrix instructions and is missing the standard related-links footer. Update
the mdx content in the platform-support page to include a clearly labeled Next
Steps section with links to the relevant follow-up docs, keeping it consistent
with the existing docs page structure and navigation style.
In `@test/generate-platform-docs.test.ts`:
- Around line 255-291: The test name overstates its coverage because the current
scan in the `every --agent <id> example...` test only reads the matrix and the
two doc pages listed in `docTargets`, not generated skills artifacts. Either
update the test logic to actually inspect the generated skills output as well,
or rename the test description/assertion to reflect the real inputs it checks so
the scope matches the implementation.
- Around line 196-236: The test is bypassing the generator’s actual CLI flow by
importing the module and calling _validate_matrix directly, so it won’t catch
regressions in main(), argument parsing, stderr handling, or exit codes. Update
the test to invoke the real generate-platform-docs.py --check path through
spawnSync, using the existing SCRIPT_PATH and temporary matrix fixture, and
assert on the CLI result rather than the inline Python wrapper; keep the
validation expectation tied to the placeholder owner case in _validate_matrix.
🪄 Autofix (Beta)
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: CHILL
Plan: Enterprise
Run ID: e961c8cc-6a03-49c4-9a16-c3ae21c4b759
📒 Files selected for processing (6)
ci/platform-matrix.jsondocs/get-started/prerequisites.mdxdocs/inference/inference-options.mdxdocs/reference/platform-support.mdxscripts/generate-platform-docs.pytest/generate-platform-docs.test.ts
Four targeted fixes.
- CodeRabbit (inference-options.mdx). The status table now scopes the
"Other OpenAI-compatible endpoint" and "Other Anthropic-compatible
endpoint" rows to the validated adapter (OpenRouter, AWS Bedrock).
The Provider Options section below still said the routes "work with
any compatible proxy," so the page shipped two different launch
claims after this PR narrowed the status table. Update the option
rows to mirror the matrix narrative.
- CodeRabbit (generate-platform-docs.py _escape_cell). Encoding `<`,
`>`, `{`, and `}` globally also rewrote content inside backtick
inline-code spans, so generated rows like
`$$nemoclaw <name> policy-add` rendered as
`$$nemoclaw <name> policy-add` in docs/reference/platform-support.mdx.
Split each cell on backticks and encode only the outside segments;
MDX treats backtick spans as literal so encoding there is both
unnecessary and corrupting.
- CodeRabbit (generate-platform-docs.py _validate_matrix).
`generate_project_status_block` subscripts `stage`, `label`, `since`,
and `notes` from `project_status`, but the validator never checked
that object. Add the same required-key check applied to the agent
sections so a typo at the source fails fast with a ValueError
instead of a raw KeyError at render time.
- PR Review Advisor (pre-commit sync contract). The
platform-matrix-sync hook only triggered on edits to
`prerequisites.mdx`/`inference-options.mdx`/the matrix/the script,
and only `git add`-ed the two partial-table docs. Add
`docs/reference/platform-support.mdx` to both the trigger pattern
and the staged file list so an edit to the canonical page also
fires the regenerator and so the hook stages the regenerated
output when the matrix or generator changes.
Regen output verified: code-span content inside backticks is now
preserved literally; `--check` is clean; all 13 generator tests
pass.
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
docs/inference/inference-options.mdx (1)
69-71: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse active voice for adapter-validation statements.
Line 69 and Line 71 use passive phrasing (“is validated ...”). Please rewrite these claims in active voice to match docs style requirements.
As per coding guidelines, “Use active voice, second person, present tense, and direct language in documentation.” As per path instructions, “Active voice required. Flag passive constructions.”🤖 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 `@docs/inference/inference-options.mdx` around lines 69 - 71, The adapter-validation sentences in the “Other OpenAI-compatible endpoint” and “Other Anthropic-compatible endpoint” rows use passive voice; rewrite those descriptions in active voice to match the docs style. Update the wording in the table entries so the subject is explicit and the phrasing is direct, keeping the references to OpenRouter, AWS Bedrock, and the respective adapter behavior while removing “is validated” style constructions.Sources: Coding guidelines, Path instructions
🤖 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.
Nitpick comments:
In `@docs/inference/inference-options.mdx`:
- Around line 69-71: The adapter-validation sentences in the “Other
OpenAI-compatible endpoint” and “Other Anthropic-compatible endpoint” rows use
passive voice; rewrite those descriptions in active voice to match the docs
style. Update the wording in the table entries so the subject is explicit and
the phrasing is direct, keeping the references to OpenRouter, AWS Bedrock, and
the respective adapter behavior while removing “is validated” style
constructions.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 19c0b181-79ab-4053-bf84-b5edc018aa9f
📒 Files selected for processing (4)
.pre-commit-config.yamldocs/inference/inference-options.mdxdocs/reference/platform-support.mdxscripts/generate-platform-docs.py
✅ Files skipped from review due to trivial changes (1)
- docs/reference/platform-support.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
- scripts/generate-platform-docs.py
Advisor PRA-3 on the prior push: the new project_status validation added to _validate_matrix made the existing "accepts a real engineering owner alias" test fail because its minimal matrix omits project_status. Update that fixture to include a complete project_status block and add a sibling test that asserts the validator rejects an incomplete project_status with the documented error message and the missing keys named in the failure. PRA-5 contract: add a test that pins the platform-matrix-sync hook against every docs/ target the generator can emit. The test walks the generator source for REPO_ROOT path joins under docs/, builds the set of emitted output paths, and asserts the hook section in .pre-commit-config.yaml stages each one. Catches the regression class where a new sentinel lands in the generator but the hook is not updated, leaving the canonical page silently out of sync. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Three concrete fixes from the latest advisor pass. - PRA-4 unmatched backticks. The cell escaper split on backticks and encoded only the outside segments, but an odd backtick count is ambiguous and would skip encoding for the trailing segment. Reject odd backtick counts in notes at validation time, and have the escaper encode every segment when the count is uneven so the rendered cell still escapes its MDX hazards even if validation is bypassed in some downstream caller. - PRA-5 status vocabulary duplication. The Status vocabulary table in docs/reference/platform-support.mdx duplicated the matrix statuses dict, and the wording in the JSON had drifted from the doc prose. Add a status-vocabulary sentinel block and a generate_status_vocabulary_table renderer; align the matrix statuses entries with the doc's nuance so the regenerated table matches. Single source of truth restored. - PRA-6 hook contract coverage. The previous contract test asserted the hook's git-add list covers every docs/ target the generator emits, but did not check the `files:` trigger pattern. Extend the test to also assert each target appears in the regex-escaped form inside the trigger pattern, so editing the canonical page alone still fires the regenerator. Generator output unchanged for existing tables; status vocabulary now renders from JSON. 15/15 tests pass; --check clean. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Advisor flagged on #5712 that docs/reference/platform-support.mdx was added but never registered with the Fern navigation, so the canonical page would not appear in the published docs site. Add a 'Platform Support' entry to the Reference section of both agent navigation trees in docs/index.yml. The page is agent-neutral, so both variants link to the same file at reference/platform-support.mdx; no agent-variants build step is needed. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-5712.docs.buildwithfern.com/nemoclaw |
… (PRA-2) Advisor PRA-2 on #5712: the nav registration in docs/index.yml is now correct, but no test pins it. Add a contract test that walks every Reference section in docs/index.yml and asserts each one registers reference/platform-support.mdx. Catches the regression class where a future docs refactor drops the nav entry while leaving the source file in place. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Advisor flagged that the doc claimed a pre-commit '--check' hook would block CI on drift, but the existing platform-matrix-sync hook actually regenerates and git-adds the rendered tables (sync-on-commit, not check-and-fail). Rewrite both mentions to describe the real behaviour: the hook runs the generator and stages the regenerated docs, and '--check' is the locally-runnable verification mode for callers that want to confirm sync without writing. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
…ce (PRA-1)
The OpenAI-compatible row cited src/lib/onboard.ts:3673 as the OpenRouter validation point, but that line is the onboarding prompt example ('OpenAI-compatible base URL e.g. https://openrouter.ai'), not validation evidence.
Cite src/lib/inference/config.test.ts:119 instead, which exercises getProviderSelectionConfig('compatible-endpoint', 'openrouter/auto') with the expected provider routing. Keep the onboarding prompt reference but mark it as the prompt example, not the validation source.
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
…elper CodeQL flagged the trigger-escape helper as incomplete: target.replace(/\./g, '\\.') does not escape literal backslashes in the input. Repo-relative Unix paths can't contain backslashes today, but the helper is still technically wrong and the SAST alert stays open. Add a preceding backslash escape so the helper is correct for any input. No behavioral change for the existing targets, and the unresolved github-advanced-security thread on this line clears. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
|
Hey @cv, #5712 is the fresh follow-up. Per the advisor warnings, both are asking us to add stricter per-field type checks to the matrix validator (enforce that ci_tested is a bool and runtimes is a list of strings). I think the cleaner way to do that is a JSON Schema in a follow-up, not bolted on here. There are 0 required findings, so it's not blocking. The validator already covers the structural stuff that matters for this PR. RFR when free. |
The codebase-growth-guardrails check counts new if statements in test files (NemoClaw asserts deterministic test bodies). The hook contract test used 'if (segments[0] !== "docs") continue;' to skip non-docs targets, which tripped the count after the merge with main re-baselined the comparison. Rewrite the targeting as a fluent Array.filter chain. Same behavior, zero conditionals in the loop body, contract test still asserts every emitted docs/ output is staged by the pre-commit hook. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
CI's source-shape budget bans tests that grep source files (currently maxSourceShapeCases=0). The hook contract test added for advisor PRA-5 read .pre-commit-config.yaml and the generator source to assert alignment, which trips the budget and fails static-checks. The hook still functions: edits to the matrix or to docs/reference/platform-support.mdx trigger the regenerator and stage the rendered docs. A future move to behavior-tested validation (e.g. a generator self-check that fails on missing hook coverage) would let us restore drift protection without the source-text pattern. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Advisor flagged that _validate_matrix iterated matrix.get(section, []) for every generator-backed section, so a future matrix.json that dropped 'agents' or 'capabilities' entirely would silently render empty tables instead of failing the validator. Replace the silent fallback with an explicit presence + list-type check before iteration. Add two regression tests covering the missing-section and wrong-type rejection paths. Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Refreshes the v0.0.68 docs with release notes, Microsoft Teams messaging guidance, and generated support-matrix coverage. Also corrects the Hermes generated command reference so `sessions export` examples match Hermes-only behavior while keeping the shared command heading compatible with CLI parity checks. ## Changes - #5585 -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/platform-support.mdx`: Documents experimental Microsoft Teams channel setup, Bot Framework credentials, webhook forwarding, local `MSTEAMS_PORT` conflicts, and the generated integration support row. - #5526 -> `docs/reference/commands.mdx`, `docs/reference/commands-nemohermes.mdx`: Keeps Hermes `sessions export` examples on the supported single-JSONL export path while preserving the canonical shared CLI heading. - #5044 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for installer onboarding failure propagation. - #5641 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for fresh recovery after pre-sandbox installer interruption. - #5673 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for explicit deny-all messaging manifests. - #5743 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for unsupported-agent channel-add rejection. - #5252 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Hermes `gateway-token` dashboard guidance. - #5659 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for local OpenClaw `agent` wrapper help. - #5661 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for default extra-agent paths. - #5669 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Deep Agents Code branding. - #5672 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for hosted-compatible default model ID preservation. - #5725 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Deep Agents Code sandbox liveness. - #5644 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for DGX Spark managed-vLLM express install defaults. - #5712 -> `docs/about/release-notes.mdx`, `docs/reference/platform-support.mdx`: Adds v0.0.68 release-note coverage for the canonical support matrix and updates the matrix source with Teams. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: docs-only release refresh; no runtime code changed. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — `npm run docs` passed with 0 errors; Fern reported the existing light-mode accent contrast warning. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Additional verification: - `python3 scripts/generate-platform-docs.py --check` passed. - `npm run docs:sync-agent-variants` passed. - `bash test/e2e/e2e-cloud-experimental/check-docs.sh --only-cli` passed. - `npm run docs` passed with 0 errors and one Fern theme warning: light-mode accent contrast ratio is 2.41:1 and should be at least 3:1. - `npm run build:cli` refreshed local untracked `dist/` artifacts after rebase; no tracked files changed. - `npm run typecheck:cli` passed. - Normal commit and push hooks passed after the local CLI rebuild. --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added **Microsoft Teams** as an experimental messaging channel, including manifest-first onboarding, local port routing/conflict handling, sandbox delivery controls, and policy preset support. * **Documentation** * Expanded messaging-channel setup for Teams (prerequisites, credential/webhook setup, wizard flow, and add/remove commands). * Updated reference docs for **agent-specific** session export examples (OpenClaw vs Hermes). * Refreshed platform support guidance and added the latest release-notes entry. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…5455) ## Summary `nemoclaw <name> destroy` deleted the sandbox pod but left its per-sandbox persistent volume intact, so re-onboarding with the same name resurrected old workspace files (`USER.md`, `SOUL.md`, ...). This makes destroy actually wipe that persistent state, restoring the documented "clean workspace on re-onboard" contract. ## Related Issue Fixes #5449 ## Changes - Add `wipeSandboxState()` in `src/lib/actions/sandbox/destroy.ts`: while the sandbox is still live (before `openshell sandbox delete`), it removes the agent-manifest state dirs/files plus discovered multi-agent `workspace-*` dirs via `openshell sandbox exec -- sh -c 'rm -rf ...'`. This is the inverse of `backupSandboxState`, so it targets exactly the set snapshot/backup treat as durable state. - Call `wipeSandboxState()` from `destroySandbox()` after the confirmation gate and before the delete. - Best-effort and non-fatal: a non-live sandbox (e.g. gateway down) warns and lets destroy proceed, mirroring the existing `removeShieldsState` pattern from #3114. - Add `test/destroy-wipe-sandbox-state.test.ts` reproducing the issue: asserts the wipe targets the `workspace/` dir under the agent config dir, includes `workspace-*` (#1260), passes `ignoreError`, and never throws on a failed exec. ### Root cause `openshell sandbox delete` tears down the pod but the workspace lives in a k3s local-path PVC keyed by sandbox name (inside the shared `openshell-cluster-nemoclaw` Docker volume), which `delete` leaves intact. `openshell sandbox delete --help` exposes no storage-wipe flag, and the cluster volume is only removed on opt-in gateway teardown (#2166). Re-onboarding with the same name rebinds the PVC. Same bug class as #3114. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Verification - [ ] `npx prek run --all-files` passes - [ ] `npm test` passes - [x] Tests added or updated for new or changed behavior - [x] No secrets, API keys, or credentials committed - [ ] Docs updated for user-facing behavior changes - [ ] `make docs` builds without warnings (doc changes only) - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) <!-- Verification notes: this branch builds (`npm run build:cli`) and type-checks (`npm run typecheck:cli`) cleanly; `biome check` is clean on both changed files; and the destroy suites (`test/destroy-wipe-sandbox-state.test.ts`, `test/destroy-cleanup-sandbox-services.test.ts`, `src/lib/domain/sandbox/destroy.test.ts`) pass deterministically. The full `npm test` and `npx prek run --all-files` were not run because the local working tree carries heavy unrelated modifications and the full suite is flaky in this environment; behavior was verified via the targeted suites above. No docs change is needed — the fix makes code match the existing contract in docs/manage-sandboxes/backup-restore.md. --> ## Advisor state 1 required finding that contradicts the advisor's own original required PRA-5 from this PR. PRA-5 required the wipe run AFTER gateway-select-before-delete (the bug we fixed). A later round's PRA-2 asks the wipe defer until after delete proves destroy can complete — physically impossible because `sandbox delete` unmounts the PVC and the in-sandbox `rm -rf` can no longer reach it. The code keeps PRA-5's ordering; the contradiction is named at `src/lib/actions/sandbox/destroy.ts:386-389`. Plus 3 recurring advisory warnings (source-of-truth recursion pattern — same plateau as #5712 and #5819). Justifications in `wipeSandboxState()` docstring. --- Signed-off-by: jason-ma-nv <jama@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **Bug Fixes** * Improved sandbox destruction to best-effort wipe persisted agent state before deletion, including the agent manifest state plus `workspace` and `workspace-*` multi-agent data. * Added safer cleanup execution: failures are non-blocking, and warnings are logged (e.g., “Could not wipe workspace state”). * Strengthened security checks to prevent path escaping when generating the cleanup command. * **Tests** * Expanded regression coverage for correct exec invocation, warning behavior on failures, and secure `rm -rf` script generation (including `cd` boundary and traversal/absolute-path protections). <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Jason Ma <jama@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Test User <test@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
… (NVIDIA#5712) ## Summary Adds the canonical launch-claims matrix for NemoClaw at \`docs/reference/platform-support.mdx\`, driven by \`ci/platform-matrix.json\` through a hardened generator. Single source of truth for what NemoClaw supports today. ## Related Issue Closes NVIDIA#4630. **Supersedes NVIDIA#5345** (closed; that branch carried a heavy docs-to-skills regen tangle that became untenable after main retired the docs-to-skills system in NVIDIA#5699). ## Why a new PR NVIDIA#5345 was open for two weeks while main moved significantly. The most disruptive change was NVIDIA#5699 (\"retire docs-to-skills\") which deleted the regeneration tool and the entire user-skill tree this PR's pre-restart branch was modifying. Reconciling against the new structure would have required reverting half the PR's value and re-baselining against current main. Branching fresh off main is the cleaner path. The audit, evidence, and advisor-loop work from NVIDIA#5345 carries forward through this PR's content — only the diff history was reset. ## What this lands - **\`ci/platform-matrix.json\`** — expanded to cover platforms, providers, agents, integrations, deployment paths, capabilities, and out-of-scope items. Every status follows the declared vocabulary (\`Tested\` / \`Tested with limitations\` / \`Experimental\` / \`Deferred\` / \`Unsupported\` / \`Hermes only\`). Rows carry file:line evidence citations. - **\`docs/reference/platform-support.mdx\`** — new canonical page rendered from the JSON through sentinel-comment regeneration. Includes a project-status block and an Owners section reflecting the engineering-owner model (no separate product-owner role today). - **\`scripts/generate-platform-docs.py\`** — hardened generator: - \`_validate_matrix\` rejects missing required keys, unknown statuses, and placeholder owner values (\`TBD\`, \`TODO\`, \`FIXME\`, \`see PR review\`, empty) - \`_escape_cell\` escapes pipes, newlines, HTML control characters, and MDX expression braces in every emitted cell - Full table generators for agents, capabilities, integrations, deployment paths, out-of-scope, and the canonical platform/provider tables; partial views for prerequisites and inference-options - **\`docs/get-started/prerequisites.mdx\` + \`docs/inference/inference-options.mdx\`** — partial tables re-rendered from the JSON so onboarding-time docs use the same vocabulary. - **\`test/generate-platform-docs.test.ts\`** — regression coverage for escaping, status vocabulary, placeholder owner rejection, partial-vs-full deferred filtering, owners-block shape, agent-ID resolution against installed manifests, out-of-scope LangChain exception scoping, and file:line citation existence. ## Verification - \`npx vitest run test/generate-platform-docs.test.ts\` — 13/13 pass - \`python3 scripts/generate-platform-docs.py --check\` — all files in sync - Generator and tests verified against current \`main\` after rebase ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [x] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Advisor state 0 required findings. 2 advisory warnings on deeper matrix schema validation — not pursuing; the right form is a JSON Schema, tracking as follow-up. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added the “Platform Support and Launch Claims” reference page with a shared status vocabulary and expanded, JSON-driven launch matrices (agents, platforms, providers, integrations, deployment paths, capabilities), including out-of-scope items and caveats/blockers guidance. * Refined platform/inference documentation to better reflect validated adapter paths, API shapes, and supported distro/runtime assumptions (e.g., Linux|Docker). * **Tests** * Expanded generator end-to-end/regression coverage for table escaping, matrix validation, output variants, and repository consistency checks. * **Chores** * Updated the platform-matrix sync pre-commit trigger when the generated platform-support docs change. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Refreshes the v0.0.68 docs with release notes, Microsoft Teams messaging guidance, and generated support-matrix coverage. Also corrects the Hermes generated command reference so `sessions export` examples match Hermes-only behavior while keeping the shared command heading compatible with CLI parity checks. ## Changes - NVIDIA#5585 -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/platform-support.mdx`: Documents experimental Microsoft Teams channel setup, Bot Framework credentials, webhook forwarding, local `MSTEAMS_PORT` conflicts, and the generated integration support row. - NVIDIA#5526 -> `docs/reference/commands.mdx`, `docs/reference/commands-nemohermes.mdx`: Keeps Hermes `sessions export` examples on the supported single-JSONL export path while preserving the canonical shared CLI heading. - NVIDIA#5044 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for installer onboarding failure propagation. - NVIDIA#5641 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for fresh recovery after pre-sandbox installer interruption. - NVIDIA#5673 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for explicit deny-all messaging manifests. - NVIDIA#5743 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for unsupported-agent channel-add rejection. - NVIDIA#5252 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Hermes `gateway-token` dashboard guidance. - NVIDIA#5659 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for local OpenClaw `agent` wrapper help. - NVIDIA#5661 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for default extra-agent paths. - NVIDIA#5669 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Deep Agents Code branding. - NVIDIA#5672 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for hosted-compatible default model ID preservation. - NVIDIA#5725 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for Deep Agents Code sandbox liveness. - NVIDIA#5644 -> `docs/about/release-notes.mdx`: Adds v0.0.68 release-note coverage for DGX Spark managed-vLLM express install defaults. - NVIDIA#5712 -> `docs/about/release-notes.mdx`, `docs/reference/platform-support.mdx`: Adds v0.0.68 release-note coverage for the canonical support matrix and updates the matrix source with Teams. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: docs-only release refresh; no runtime code changed. - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [ ] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [ ] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — `npm run docs` passed with 0 errors; Fern reported the existing light-mode accent contrast warning. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Additional verification: - `python3 scripts/generate-platform-docs.py --check` passed. - `npm run docs:sync-agent-variants` passed. - `bash test/e2e/e2e-cloud-experimental/check-docs.sh --only-cli` passed. - `npm run docs` passed with 0 errors and one Fern theme warning: light-mode accent contrast ratio is 2.41:1 and should be at least 3:1. - `npm run build:cli` refreshed local untracked `dist/` artifacts after rebase; no tracked files changed. - `npm run typecheck:cli` passed. - Normal commit and push hooks passed after the local CLI rebuild. --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added **Microsoft Teams** as an experimental messaging channel, including manifest-first onboarding, local port routing/conflict handling, sandbox delivery controls, and policy preset support. * **Documentation** * Expanded messaging-channel setup for Teams (prerequisites, credential/webhook setup, wizard flow, and add/remove commands). * Updated reference docs for **agent-specific** session export examples (OpenClaw vs Hermes). * Refreshed platform support guidance and added the latest release-notes entry. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…5449) (NVIDIA#5455) ## Summary `nemoclaw <name> destroy` deleted the sandbox pod but left its per-sandbox persistent volume intact, so re-onboarding with the same name resurrected old workspace files (`USER.md`, `SOUL.md`, ...). This makes destroy actually wipe that persistent state, restoring the documented "clean workspace on re-onboard" contract. ## Related Issue Fixes NVIDIA#5449 ## Changes - Add `wipeSandboxState()` in `src/lib/actions/sandbox/destroy.ts`: while the sandbox is still live (before `openshell sandbox delete`), it removes the agent-manifest state dirs/files plus discovered multi-agent `workspace-*` dirs via `openshell sandbox exec -- sh -c 'rm -rf ...'`. This is the inverse of `backupSandboxState`, so it targets exactly the set snapshot/backup treat as durable state. - Call `wipeSandboxState()` from `destroySandbox()` after the confirmation gate and before the delete. - Best-effort and non-fatal: a non-live sandbox (e.g. gateway down) warns and lets destroy proceed, mirroring the existing `removeShieldsState` pattern from NVIDIA#3114. - Add `test/destroy-wipe-sandbox-state.test.ts` reproducing the issue: asserts the wipe targets the `workspace/` dir under the agent config dir, includes `workspace-*` (NVIDIA#1260), passes `ignoreError`, and never throws on a failed exec. ### Root cause `openshell sandbox delete` tears down the pod but the workspace lives in a k3s local-path PVC keyed by sandbox name (inside the shared `openshell-cluster-nemoclaw` Docker volume), which `delete` leaves intact. `openshell sandbox delete --help` exposes no storage-wipe flag, and the cluster volume is only removed on opt-in gateway teardown (NVIDIA#2166). Re-onboarding with the same name rebinds the PVC. Same bug class as NVIDIA#3114. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Verification - [ ] `npx prek run --all-files` passes - [ ] `npm test` passes - [x] Tests added or updated for new or changed behavior - [x] No secrets, API keys, or credentials committed - [ ] Docs updated for user-facing behavior changes - [ ] `make docs` builds without warnings (doc changes only) - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) <!-- Verification notes: this branch builds (`npm run build:cli`) and type-checks (`npm run typecheck:cli`) cleanly; `biome check` is clean on both changed files; and the destroy suites (`test/destroy-wipe-sandbox-state.test.ts`, `test/destroy-cleanup-sandbox-services.test.ts`, `src/lib/domain/sandbox/destroy.test.ts`) pass deterministically. The full `npm test` and `npx prek run --all-files` were not run because the local working tree carries heavy unrelated modifications and the full suite is flaky in this environment; behavior was verified via the targeted suites above. No docs change is needed — the fix makes code match the existing contract in docs/manage-sandboxes/backup-restore.md. --> ## Advisor state 1 required finding that contradicts the advisor's own original required PRA-5 from this PR. PRA-5 required the wipe run AFTER gateway-select-before-delete (the bug we fixed). A later round's PRA-2 asks the wipe defer until after delete proves destroy can complete — physically impossible because `sandbox delete` unmounts the PVC and the in-sandbox `rm -rf` can no longer reach it. The code keeps PRA-5's ordering; the contradiction is named at `src/lib/actions/sandbox/destroy.ts:386-389`. Plus 3 recurring advisory warnings (source-of-truth recursion pattern — same plateau as NVIDIA#5712 and NVIDIA#5819). Justifications in `wipeSandboxState()` docstring. --- Signed-off-by: jason-ma-nv <jama@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **Bug Fixes** * Improved sandbox destruction to best-effort wipe persisted agent state before deletion, including the agent manifest state plus `workspace` and `workspace-*` multi-agent data. * Added safer cleanup execution: failures are non-blocking, and warnings are logged (e.g., “Could not wipe workspace state”). * Strengthened security checks to prevent path escaping when generating the cleanup command. * **Tests** * Expanded regression coverage for correct exec invocation, warning behavior on failures, and secure `rm -rf` script generation (including `cd` boundary and traversal/absolute-path protections). <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Jason Ma <jama@nvidia.com> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> Co-authored-by: Test User <test@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
Summary
Adds the canonical launch-claims matrix for NemoClaw at `docs/reference/platform-support.mdx`, driven by `ci/platform-matrix.json` through a hardened generator. Single source of truth for what NemoClaw supports today.
Related Issue
Closes #4630. Supersedes #5345 (closed; that branch carried a heavy docs-to-skills regen tangle that became untenable after main retired the docs-to-skills system in #5699).
Why a new PR
#5345 was open for two weeks while main moved significantly. The most disruptive change was #5699 ("retire docs-to-skills") which deleted the regeneration tool and the entire user-skill tree this PR's pre-restart branch was modifying. Reconciling against the new structure would have required reverting half the PR's value and re-baselining against current main. Branching fresh off main is the cleaner path.
The audit, evidence, and advisor-loop work from #5345 carries forward through this PR's content — only the diff history was reset.
What this lands
Verification
Type of Change
Advisor state
0 required findings. 2 advisory warnings on deeper matrix schema validation — not pursuing; the right form is a JSON Schema, tracking as follow-up.
Summary by CodeRabbit