fix(messaging): surface Telegram mention mode in channel status - #6220
Conversation
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@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:
📝 WalkthroughWalkthroughThis PR surfaces Telegram mention mode in status, doctor, and docs. It adds diagnostics metadata, derives OpenClaw mention mode from rendered config, renders explicit group overrides, extends status comparison output, wires doctor checks, and updates related tests. ChangesTelegram mention-mode surfacing
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant CLI as channels status / doctor
participant ConfigStatus as buildConfigStatusSignals
participant DoctorMsg as collectMessagingDoctorChecks
participant Parser as telegramRenderedConfigParser
participant Sandbox as rendered agent config
User->>CLI: run Telegram status or doctor
CLI->>ConfigStatus: compare stored values with rendered config
ConfigStatus->>Sandbox: read Telegram structured config
Sandbox-->>ConfigStatus: rendered mention mode
CLI->>DoctorMsg: request messaging checks
DoctorMsg->>Parser: resolve openclawGroupRequireMention
Parser-->>DoctorMsg: mention-only / all-messages / mixed
DoctorMsg-->>CLI: check detail and warning state
CLI-->>User: report mention mode
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-6220.docs.buildwithfern.com/nemoclaw |
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 |
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
There was a problem hiding this comment.
🧹 Nitpick comments (3)
src/lib/actions/sandbox/doctor-messaging.ts (1)
304-314: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid matching on the label string
"Rendered config source"to rename check labels.Comparing
signal.labelagainst a magic string produced by another module (likelyconfigSourceReadSignals) is a fragile cross-file coupling — a wording change there silently breaks this renaming logic with no compiler warning.Consider having
configSourceReadSignals/DiagnosticSignalcarry an explicit discriminant (e.g. akind: "source" | "input"field) that this code can switch on instead of matching display text.🤖 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 `@src/lib/actions/sandbox/doctor-messaging.ts` around lines 304 - 314, The Messaging label remapping in doctor-messaging.ts is coupled to the display text “Rendered config source”, which is fragile and can break silently if another module changes wording. Update the signal model used by configSourceReadSignals/DiagnosticSignal to include an explicit discriminant such as kind, then change the mapping logic in the Messaging signal transformation to switch on that field instead of comparing signal.label strings.src/lib/actions/sandbox/channel-status-config.ts (1)
194-207: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winSimplify
configInputValueDetail's ad-hoc parenthesis construction.The function builds
renderedValuewith a deliberately unclosed(and closes it later in a separate conditional return, which is hard to follow and easy to break during future edits (e.g. adding a third suffix variant).♻️ Suggested clearer implementation
function configInputValueDetail( input: ChannelConfigInputSpec, value: MessagingSerializableValue | undefined, options: { readonly isDefault?: boolean } = {}, ): string { const booleanValue = value === undefined ? null : booleanConfigValue(value); const labelKey = booleanValue === null ? configInputDetail(value) : booleanValue === true ? "1" : "0"; const label = input.diagnostics?.valueLabels?.[labelKey]; - const renderedValue = label ? `${label} (${labelKey}` : configInputDetail(value); - if (label) return `${renderedValue}${options.isDefault ? ", default" : ""})`; - return `${renderedValue}${options.isDefault ? " (default)" : ""}`; + if (label) { + return options.isDefault ? `${label} (${labelKey}, default)` : `${label} (${labelKey})`; + } + const renderedValue = configInputDetail(value); + return options.isDefault ? `${renderedValue} (default)` : renderedValue; }🤖 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 `@src/lib/actions/sandbox/channel-status-config.ts` around lines 194 - 207, `configInputValueDetail` currently constructs label output with split, ad-hoc parentheses handling that is hard to maintain. Refactor the logic in `configInputValueDetail` so the rendered string is assembled in one clear path, with any `default` suffix appended consistently without relying on an unclosed parenthesis in `renderedValue`. Keep the existing behavior for `input.diagnostics?.valueLabels`, `booleanConfigValue`, and `configInputDetail`, but make the formatting logic explicit and easy to extend.src/lib/messaging/channels/telegram/rendered-config-parser.ts (1)
101-114: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winSimplify duplicate
Set/sortcomputation.
new Set(values)and.sort()are each computed twice on Lines 113. Also note the sort relies on default string-coercion ordering ("false" < "true"), which is correct here but non-obvious for future readers/values.♻️ Proposed simplification
if (values.length === 0) return true; - return [...new Set(values)].sort().length === 1 ? values[0] : [...new Set(values)].sort(); + const uniqueValues = [...new Set(values)].sort((a, b) => Number(a) - Number(b)); + return uniqueValues.length === 1 ? uniqueValues[0] : uniqueValues;🤖 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 `@src/lib/messaging/channels/telegram/rendered-config-parser.ts` around lines 101 - 114, The duplicate Set/sort work in the requireMention parsing logic should be simplified to avoid computing the same unique/sorted result twice. Update the boolean aggregation in rendered-config-parser’s parsing function to store the deduplicated result in a local variable once, then use that variable for the length check and return path. Keep the behavior the same in getStructuredPath/values handling, but make the ordering intent clearer for future readers.
🤖 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 `@src/lib/actions/sandbox/channel-status-config.ts`:
- Around line 194-207: `configInputValueDetail` currently constructs label
output with split, ad-hoc parentheses handling that is hard to maintain.
Refactor the logic in `configInputValueDetail` so the rendered string is
assembled in one clear path, with any `default` suffix appended consistently
without relying on an unclosed parenthesis in `renderedValue`. Keep the existing
behavior for `input.diagnostics?.valueLabels`, `booleanConfigValue`, and
`configInputDetail`, but make the formatting logic explicit and easy to extend.
In `@src/lib/actions/sandbox/doctor-messaging.ts`:
- Around line 304-314: The Messaging label remapping in doctor-messaging.ts is
coupled to the display text “Rendered config source”, which is fragile and can
break silently if another module changes wording. Update the signal model used
by configSourceReadSignals/DiagnosticSignal to include an explicit discriminant
such as kind, then change the mapping logic in the Messaging signal
transformation to switch on that field instead of comparing signal.label
strings.
In `@src/lib/messaging/channels/telegram/rendered-config-parser.ts`:
- Around line 101-114: The duplicate Set/sort work in the requireMention parsing
logic should be simplified to avoid computing the same unique/sorted result
twice. Update the boolean aggregation in rendered-config-parser’s parsing
function to store the deduplicated result in a local variable once, then use
that variable for the length check and return path. Keep the behavior the same
in getStructuredPath/values handling, but make the ordering intent clearer for
future readers.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: a44119cb-cab7-4013-80c5-023a08775865
📒 Files selected for processing (16)
docs/manage-sandboxes/messaging-channels.mdxdocs/reference/commands-nemohermes.mdxdocs/reference/commands.mdxsrc/lib/actions/sandbox/channel-status-config-core.test.tssrc/lib/actions/sandbox/channel-status-config.tssrc/lib/actions/sandbox/channel-status-telegram-policy.test.tssrc/lib/actions/sandbox/doctor-flow.test.tssrc/lib/actions/sandbox/doctor-messaging.tssrc/lib/messaging/channels/manifests.test.tssrc/lib/messaging/channels/telegram/manifest.tssrc/lib/messaging/channels/telegram/rendered-config-parser.test.tssrc/lib/messaging/channels/telegram/rendered-config-parser.tssrc/lib/messaging/channels/telegram/template-resolver.test.tssrc/lib/messaging/channels/telegram/template-resolver.tssrc/lib/messaging/manifest/types.tstest/generate-openclaw-config.test.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/lib/actions/sandbox/doctor-flow.test.ts (1)
1-258: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep the missing doctor mention cases in this suite
doctor-telegram-mention.test.tsonly covers the explicit 1/0 renderings; add the default-unset and drift-warning doctor JSON cases here as well so this suite still exercises the full Telegram mention matrix.🤖 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 `@src/lib/actions/sandbox/doctor-flow.test.ts` around lines 1 - 258, Add the missing doctor mention coverage to runSandboxDoctor flow in doctor-flow.test.ts so this suite still exercises the full Telegram mention matrix. Extend the existing JSON-focused cases to include the default-unset path and the drift-warning path, alongside the explicit 1/0 renderings already covered in doctor-telegram-mention.test.ts. Use the existing createDoctorHarness and runSandboxDoctor entrypoint to assert the JSON report behavior for those mention states.Source: Path instructions
🧹 Nitpick comments (1)
src/lib/actions/sandbox/doctor-flow.test-helpers.ts (1)
88-88: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueNaming collision: local
resolveshadows thenode:pathimport.
const resolve = requireDist(...)shadows the top-levelresolveimport fromnode:pathfor the rest ofcreateDoctorHarness. Not a live bug today, but risks confusion or an accidental misuse ifpath.resolveis ever needed inside this function later.♻️ Suggested rename
- const resolve = requireDist("../../adapters/openshell/resolve.js"); + const openshellResolve = requireDist("../../adapters/openshell/resolve.js");(and update the corresponding
resolveOpenshellspy target below)🤖 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 `@src/lib/actions/sandbox/doctor-flow.test-helpers.ts` at line 88, The local `resolve` constant in `createDoctorHarness` shadows the `node:path` `resolve` import, so rename the `requireDist("../../adapters/openshell/resolve.js")` binding to a distinct name and update the matching `resolveOpenshell` spy target accordingly. Keep the top-level path helper untouched and adjust any references in `doctor-flow.test-helpers.ts` that currently use the shadowed identifier so the function remains clear and future-safe.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/lib/actions/sandbox/doctor-flow.test.ts`:
- Around line 1-258: Add the missing doctor mention coverage to runSandboxDoctor
flow in doctor-flow.test.ts so this suite still exercises the full Telegram
mention matrix. Extend the existing JSON-focused cases to include the
default-unset path and the drift-warning path, alongside the explicit 1/0
renderings already covered in doctor-telegram-mention.test.ts. Use the existing
createDoctorHarness and runSandboxDoctor entrypoint to assert the JSON report
behavior for those mention states.
---
Nitpick comments:
In `@src/lib/actions/sandbox/doctor-flow.test-helpers.ts`:
- Line 88: The local `resolve` constant in `createDoctorHarness` shadows the
`node:path` `resolve` import, so rename the
`requireDist("../../adapters/openshell/resolve.js")` binding to a distinct name
and update the matching `resolveOpenshell` spy target accordingly. Keep the
top-level path helper untouched and adjust any references in
`doctor-flow.test-helpers.ts` that currently use the shadowed identifier so the
function remains clear and future-safe.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: cf03115f-43f6-425b-8baa-e9786f4437a2
📒 Files selected for processing (6)
src/lib/actions/sandbox/channel-status-config-core.test.tssrc/lib/actions/sandbox/channel-status-telegram-mention.test.tssrc/lib/actions/sandbox/doctor-flow.test-helpers.tssrc/lib/actions/sandbox/doctor-flow.test.tssrc/lib/actions/sandbox/doctor-telegram-mention.test.tssrc/lib/messaging/channels/telegram/template-resolver.test.ts
💤 Files with no reviewable changes (1)
- src/lib/actions/sandbox/channel-status-config-core.test.ts
✅ Files skipped from review due to trivial changes (1)
- src/lib/actions/sandbox/doctor-telegram-mention.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/lib/messaging/channels/telegram/template-resolver.test.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Vitest E2E Target Results — ✅ All selected jobs passedRun: 28642059794
|
<!-- markdownlint-disable MD041 --> ## Summary This PR prepares the user-facing documentation for v0.0.74 before the release plan is frozen. It expands the release notes across the 56-commit train and closes durable documentation gaps found during the pre-tag commit scan. ## Changes - Expand the `v0.0.74` release notes to cover OpenShell 0.0.72, managed MCP, progressive tool disclosure, LangChain Deep Agents Code, onboarding, local inference, messaging, recovery, and contributor workflows. - Correct the `destroy` contract for retained per-name volumes, gateway-unreachable `--force` cleanup, managed MCP ownership, and same-name recovery. - Document separate remediation for an unreachable container DNS resolver versus one that answers with `NXDOMAIN` or `REFUSED`. - Document the Windows on Arm N1X automatic Ollama safeguard and its remaining large-model limitations. - State that messaging conflicts abort rebuild before backup or deletion, leaving the original sandbox intact. - Link the agent-runnable value benchmark from the contributor task index. - Synchronize generated agent command variants. - Validate with `npm run docs:sync-agent-variants` and `npm run docs`; Fern completed with 0 errors and 2 existing warnings. - Source summary: - [#6020](#6020) and [#5876](#5876) -> `docs/about/release-notes.mdx`: Consolidate the OpenShell 0.0.72 policy boundary and managed MCP lifecycle. - [#6251](#6251) and [#5989](#5989) -> `docs/about/release-notes.mdx`: Summarize progressive tool disclosure and sandbox-first inference controls. - [#6232](#6232), [#6082](#6082), [#6219](#6219), [#6214](#6214), [#6215](#6215), [#6230](#6230), and [#6260](#6260) -> `docs/about/release-notes.mdx`: Summarize the experimental LangChain Deep Agents Code status, secret, version, rebuild, snapshot, and MCP boundaries. - [#6166](#6166), [#6254](#6254), [#6265](#6265), [#6164](#6164), and [#6017](#6017) -> `docs/about/release-notes.mdx`: Summarize BuildKit prebuild, validated image reuse, bounded readiness, and preflight improvements. - [#6150](#6150) -> `docs/about/release-notes.mdx` and `docs/reference/troubleshooting.mdx`: Separate unreachable-resolver remediation from reachable-but-rejected DNS responses. - [#6234](#6234) -> `docs/about/release-notes.mdx`, `docs/inference/use-local-inference.mdx`, and `docs/get-started/windows-preparation.mdx`: Document N1X automatic 9B selection and the remaining explicit-large-model boundary. - [#6129](#6129), [#5987](#5987), [#5955](#5955), and [#6220](#6220) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, and `docs/reference/commands-nemohermes.mdx`: Document messaging policy persistence, status, and the pre-destructive conflict check. - [#5963](#5963), [#6050](#6050), [#6094](#6094), [#6238](#6238), [#5988](#5988), [#6235](#6235), [#6181](#6181), and [#5986](#5986) -> `docs/about/release-notes.mdx`, `docs/reference/commands.mdx`, and `docs/reference/commands-nemohermes.mdx`: Summarize day-two recovery and clarify retained-volume and local-only destroy semantics. - [#6200](#6200), [#6248](#6248), [#6168](#6168), [#6270](#6270), and [#5649](#5649) -> `docs/about/release-notes.mdx` and `CONTRIBUTING.md`: Summarize contributor setup and verification improvements and expose the advisory value benchmark. ## 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 exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: documentation-only release preparation; generated-variant synchronization and the Fern docs build validate the changed pages and routes. - [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 applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: tests are not applicable to this documentation-only change; `npm run docs` validates the source and generated routes. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [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) --- <!-- 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: Aaron Erickson <aerickson@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Expanded setup guidance for Windows on Arm devices with safer default local model selection. * Clarified local inference and sandbox messaging behavior, including conflict checks before rebuilds and safer recovery steps. * Updated destroy/rebuild/reference docs with more detailed warnings, failure handling, and volume-retention guidance. * Improved troubleshooting instructions for Docker DNS issues with clearer paths for unreachable vs. blocked resolvers. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
…IA#6220) <!-- markdownlint-disable MD041 --> ## Summary <!-- 1-3 sentences: what this PR does and why. --> Surface Telegram's effective group mention mode in `channels status` by parsing the rendered agent configuration and comparing it with the sandbox messaging entry. This keeps the configuration surface scoped to status diagnostics only; `doctor` and docs are intentionally unchanged. Having this PR NVIDIA#6220 to fix TELEGRAM_REQUIRE_MENTION surface in channel status. I strongly not recommend to add for nemoclaw doctor because doctor is for generic debug. Channels status -- channel telegram will show detail debug configuration. ``` ➜ NemoClaw git:(fix/5691-telegram-mention-status) ✗ nemoclaw tm channels status NemoClaw channels status: tm telegram [ok] Channel registration: telegram registered [ok] Policy coverage: telegram preset applied [ok] Telegram User ID (for DM access) (TELEGRAM_ALLOWED_IDS): 7895072570 [ok] Telegram group mention mode (TELEGRAM_REQUIRE_MENTION): yes [ok] Telegram group policy (TELEGRAM_GROUP_POLICY): open ``` ## Related Issue <!-- Fixes #NNN or Closes #NNN. Remove this section if none. --> Fixes NVIDIA#5691 ## Changes <!-- Bullet list of key changes. --> - Parse rendered OpenClaw and Hermes Telegram configuration for mention-mode values. - Add Telegram mention-mode status comparison details for `channels status`. - Cover rendered-config parsing and status diagnostics with regression tests. - Remove the prior doctor/docs expansion from this PR branch. ## 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) ## 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. --> - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: requested scope is status-only code behavior; no docs changes in final PR diff. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: self-reviewed the messaging diagnostic boundary; only non-secret rendered config values are parsed and regression coverage verifies Telegram tokens are not printed. - [ ] 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 - [ ] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes — pre-push TypeScript/package hooks passed; the local pre-commit `test-cli` coverage hook was skipped after repeated timeout, with targeted tests run below. - [x] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) — not run; this is a focused status/parser change. - [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) — not run; no docs changes in final PR diff. - [ ] 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) Validation evidence: - `npx vitest run --project cli src/lib/actions/sandbox/channel-status-config-core.test.ts src/lib/actions/sandbox/channel-status-telegram-policy.test.ts src/lib/messaging/channels/telegram/rendered-config-parser.test.ts` passed: 3 files, 15 tests. - Pre-push hooks passed: TypeScript (CLI) and package/tag version sync. - GitHub DCO check passed, and all PR commits report `verified=true`. --- <!-- 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: Apurv Kumaria <akumaria@nvidia.com> Signed-off-by: San Dang <sdang@nvidia.com> --------- Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: San Dang <sdang@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR prepares the user-facing documentation for v0.0.74 before the release plan is frozen. It expands the release notes across the 56-commit train and closes durable documentation gaps found during the pre-tag commit scan. ## Changes - Expand the `v0.0.74` release notes to cover OpenShell 0.0.72, managed MCP, progressive tool disclosure, LangChain Deep Agents Code, onboarding, local inference, messaging, recovery, and contributor workflows. - Correct the `destroy` contract for retained per-name volumes, gateway-unreachable `--force` cleanup, managed MCP ownership, and same-name recovery. - Document separate remediation for an unreachable container DNS resolver versus one that answers with `NXDOMAIN` or `REFUSED`. - Document the Windows on Arm N1X automatic Ollama safeguard and its remaining large-model limitations. - State that messaging conflicts abort rebuild before backup or deletion, leaving the original sandbox intact. - Link the agent-runnable value benchmark from the contributor task index. - Synchronize generated agent command variants. - Validate with `npm run docs:sync-agent-variants` and `npm run docs`; Fern completed with 0 errors and 2 existing warnings. - Source summary: - [NVIDIA#6020](NVIDIA#6020) and [NVIDIA#5876](NVIDIA#5876) -> `docs/about/release-notes.mdx`: Consolidate the OpenShell 0.0.72 policy boundary and managed MCP lifecycle. - [NVIDIA#6251](NVIDIA#6251) and [NVIDIA#5989](NVIDIA#5989) -> `docs/about/release-notes.mdx`: Summarize progressive tool disclosure and sandbox-first inference controls. - [NVIDIA#6232](NVIDIA#6232), [NVIDIA#6082](NVIDIA#6082), [NVIDIA#6219](NVIDIA#6219), [NVIDIA#6214](NVIDIA#6214), [NVIDIA#6215](NVIDIA#6215), [NVIDIA#6230](NVIDIA#6230), and [NVIDIA#6260](NVIDIA#6260) -> `docs/about/release-notes.mdx`: Summarize the experimental LangChain Deep Agents Code status, secret, version, rebuild, snapshot, and MCP boundaries. - [NVIDIA#6166](NVIDIA#6166), [NVIDIA#6254](NVIDIA#6254), [NVIDIA#6265](NVIDIA#6265), [NVIDIA#6164](NVIDIA#6164), and [NVIDIA#6017](NVIDIA#6017) -> `docs/about/release-notes.mdx`: Summarize BuildKit prebuild, validated image reuse, bounded readiness, and preflight improvements. - [NVIDIA#6150](NVIDIA#6150) -> `docs/about/release-notes.mdx` and `docs/reference/troubleshooting.mdx`: Separate unreachable-resolver remediation from reachable-but-rejected DNS responses. - [NVIDIA#6234](NVIDIA#6234) -> `docs/about/release-notes.mdx`, `docs/inference/use-local-inference.mdx`, and `docs/get-started/windows-preparation.mdx`: Document N1X automatic 9B selection and the remaining explicit-large-model boundary. - [NVIDIA#6129](NVIDIA#6129), [NVIDIA#5987](NVIDIA#5987), [NVIDIA#5955](NVIDIA#5955), and [NVIDIA#6220](NVIDIA#6220) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, and `docs/reference/commands-nemohermes.mdx`: Document messaging policy persistence, status, and the pre-destructive conflict check. - [NVIDIA#5963](NVIDIA#5963), [NVIDIA#6050](NVIDIA#6050), [NVIDIA#6094](NVIDIA#6094), [NVIDIA#6238](NVIDIA#6238), [NVIDIA#5988](NVIDIA#5988), [NVIDIA#6235](NVIDIA#6235), [NVIDIA#6181](NVIDIA#6181), and [NVIDIA#5986](NVIDIA#5986) -> `docs/about/release-notes.mdx`, `docs/reference/commands.mdx`, and `docs/reference/commands-nemohermes.mdx`: Summarize day-two recovery and clarify retained-volume and local-only destroy semantics. - [NVIDIA#6200](NVIDIA#6200), [NVIDIA#6248](NVIDIA#6248), [NVIDIA#6168](NVIDIA#6168), [NVIDIA#6270](NVIDIA#6270), and [NVIDIA#5649](NVIDIA#5649) -> `docs/about/release-notes.mdx` and `CONTRIBUTING.md`: Summarize contributor setup and verification improvements and expose the advisory value benchmark. ## 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 exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: documentation-only release preparation; generated-variant synchronization and the Fern docs build validate the changed pages and routes. - [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 applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: tests are not applicable to this documentation-only change; `npm run docs` validates the source and generated routes. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [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) - [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) --- <!-- 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: Aaron Erickson <aerickson@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Expanded setup guidance for Windows on Arm devices with safer default local model selection. * Clarified local inference and sandbox messaging behavior, including conflict checks before rebuilds and safer recovery steps. * Updated destroy/rebuild/reference docs with more detailed warnings, failure handling, and volume-retention guidance. * Improved troubleshooting instructions for Docker DNS issues with clearer paths for unreachable vs. blocked resolvers. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Summary
Surface Telegram's effective group mention mode in
channels statusby parsing the rendered agent configuration and comparing it with the sandbox messaging entry. This keeps the configuration surface scoped to status diagnostics only;doctorand docs are intentionally unchanged.Having this PR #6220 to fix TELEGRAM_REQUIRE_MENTION surface in channel status. I strongly not recommend to add for nemoclaw doctor because doctor is for generic debug. Channels status -- channel telegram will show detail debug configuration.
Related Issue
Fixes #5691
Changes
channels status.Type of Change
Quality Gates
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpasses — pre-push TypeScript/package hooks passed; the local pre-committest-clicoverage hook was skipped after repeated timeout, with targeted tests run below.npm testpasses (broad runtime changes only) — not run; this is a focused status/parser change.npm run docsbuilds without warnings (doc changes only) — not run; no docs changes in final PR diff.Validation evidence:
npx vitest run --project cli src/lib/actions/sandbox/channel-status-config-core.test.ts src/lib/actions/sandbox/channel-status-telegram-policy.test.ts src/lib/messaging/channels/telegram/rendered-config-parser.test.tspassed: 3 files, 15 tests.verified=true.Signed-off-by: Apurv Kumaria akumaria@nvidia.com
Signed-off-by: San Dang sdang@nvidia.com