Skip to content

fix(cli): route sessions delete to the native Hermes command - #7682

Merged
apurvvkumaria merged 18 commits into
mainfrom
fix/7642-hermes-sessions-delete-routing
Aug 4, 2026
Merged

fix(cli): route sessions delete to the native Hermes command#7682
apurvvkumaria merged 18 commits into
mainfrom
fix/7642-hermes-sessions-delete-routing

Conversation

@Dongni-Yang

@Dongni-Yang Dongni-Yang commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Route sessions delete on a registered Hermes sandbox to the native hermes sessions delete <id> --yes command. OpenClaw sandboxes keep the existing gateway RPC behavior, while Hermes receives native-ID validation, explicit flag refusals, focused tests, and matching command documentation.

Exact review pair: head 117044bbfc249064f5a77b64509aa80b03d7f1ad, base 7f4b490824bb9b8c95405ee97ce913cb333b0e7b.

Related Issue

Closes #7642.

Product-scope approval is pending explicit maintainer confirmation independent of GitHub mergeStateStatus; #7642 is still marked needs: triage. Do not merge until ownership, lifecycle, compatibility, security, and validation expectations for this maintained Hermes behavior are accepted and linked.

Changes

  • Route registered Hermes sandboxes before OpenClaw session-key validation and run the native delete with the session ID as a separate argv element.
  • Reject empty, whitespace-bearing, or leading-dash Hermes IDs and reject OpenClaw-only --keep-transcript, --json, --verbose, and non-Hermes --agent values.
  • Preserve the OpenClaw gateway route for legacy or OpenClaw registry entries and keep Hermes reset refusal while adding the native-delete hint.
  • Reuse the sessions gateway module's host-registry boundary for agent routing so src/lib/state/registry.ts stays within its source-architecture fan-in budget. The sessions action tests and public CLI integration test protect this current consumer.
  • Document native Hermes delete behavior and its flag constraints in the CLI help and Hermes command reference.
  • Give the three subprocess-backed E2E workflow-boundary tests the same 30-second timeout already enforced on their spawned commands, eliminating the canonical-base 5-second timing failures without changing behavior.
  • Refresh from canonical upstream/main with signed, non-force merge commits whenever main advances; the reviewed behavior diff remains unchanged.

Type of Change

  • 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

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • 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 — exact-head nine-category review passed with no findings: fix(cli): route sessions delete to the native Hermes command #7682 (comment)
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

The exact-head fix and evidence for the prior valid advisor blocker are recorded at #7682 (comment). Fresh exact-pair automated review is pending; any new finding must be resolved or explicitly dispositioned before merge.

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/reference/commands.mdx accurately documents Hermes routing, native IDs, --yes, supported alias behavior, rejected flags, and a copyable example. The writer also reviewed the CLI help, action comments, and test titles across all seven changed files. npm run docs passed with 0 errors and 2 repository-baseline warnings; build, focused tests, integration tests, affected E2E-support tests, type-check, repository checks, and all diff-aware hook lanes passed for the exact head.
  • Agent: Codex documentation-writer subagent /root/pr7682_docs_writer

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable; scripts/prepare-dgx-station-host.sh is unchanged.
  • Station profile/scenario: Not applicable.
  • Result: Not applicable.
  • Supporting evidence: Not applicable. No hardware review is claimed.

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: npx --no-install vitest run --project cli src/lib/actions/sandbox/sessions/ passed 154/154; npx --no-install vitest run --project integration test/sandbox-sessions-admin-agent-cli.test.ts passed 5/5; the complete affected E2E-support file passed 33/33; npm run typecheck:cli and npm --prefix nemoclaw run typecheck passed.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: not applicable to this focused sessions-routing change; npm run checks passed at 1,394 files and 4,091 edges, and the targeted behavior and exact diff-aware hook lanes cover the affected surfaces.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

npm run build:cli passed. npm run checks passed at 1,394 files, 4,091 edges, and 1,898 Vitest candidates. npm run docs passed with 0 errors and 2 repository-baseline warnings. Diff-aware pre-commit, commit-message, and pre-push lanes passed; commitlint reported 0 errors and one non-blocking footer-spacing warning on the contributor's existing first commit. All 16 displayed PR commits are GitHub Verified.


Signed-off-by: Dongni Yang dongniy@nvidia.com

sessions delete always refused on a Hermes sandbox: deleteSandboxSession
validated an OpenClaw canonical session key and called the OpenClaw
gateway admin RPC, which #7588 refuses for non-OpenClaw agents. Its
sibling verbs already dispatch by agent kind — sessions list through the
passthrough and sessions export through its own Hermes branch (#5526) —
leaving delete as the one actionable verb with no route, even though
Hermes ships a native `hermes sessions delete <id> --yes` over its own
session store.

Route Hermes delete to that native command, mirroring sessions export.
A Hermes branch at the top of deleteSandboxSession, before OpenClaw key
validation, runs the native delete in-sandbox and takes a native Hermes
session id as-is. The OpenClaw-only --agent (other than the hermes
no-op alias), --keep-transcript, --json, and --verbose flags are refused
rather than silently ignored. The native id is refused when it could be
parsed as a flag. reset stays refused: Hermes has no native reset, and
the refusal hint now also lists the available delete.

Closes #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang Dongni-Yang self-assigned this Jul 28, 2026
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Hermes sandbox session deletion now routes to hermes sessions delete <id> --yes inside the sandbox, validates Hermes-specific inputs, preserves OpenClaw behavior elsewhere, adds coverage, and documents the command and restrictions.

Changes

Hermes session deletion

Layer / File(s) Summary
Native Hermes delete path
src/lib/actions/sandbox/sessions/delete.ts, src/lib/actions/sandbox/sessions/delete.test.ts
Hermes sandboxes bypass OpenClaw gateway handling, validate session IDs and unsupported flags, execute the native delete command, and test routing and rejection cases.
CLI integration and agent behavior
test/sandbox-sessions-admin-agent-cli.test.ts, src/lib/actions/sandbox/sessions/gateway-rpc.ts
CLI tests verify native deletion, exit-code propagation, continued reset refusal, and Hermes guidance for deleting sessions.
Command documentation
src/commands/sandbox/sessions/delete.ts, docs/reference/commands.mdx
CLI descriptions document Hermes routing, session-ID requirements, accepted aliases, rejected flags, and usage.

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

Suggested labels: area: cli, integration: hermes, v0.0.97

Suggested reviewers: cv, aasthajh, afourniernv, ahunnargikar-nvidia, aknvda

Sequence Diagram(s)

sequenceDiagram
  participant CLI
  participant deleteSandboxSession
  participant HermesSandbox
  CLI->>deleteSandboxSession: sessions delete <id>
  deleteSandboxSession->>HermesSandbox: hermes sessions delete <id> --yes
  HermesSandbox-->>deleteSandboxSession: native command completes
  deleteSandboxSession-->>CLI: exit with command status
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR routes Hermes sandboxes to native delete, accepts native session IDs, rejects unsupported flags, preserves OpenClaw paths, and leaves reset refused.
Out of Scope Changes check ✅ Passed The docs and test updates all support the Hermes delete routing work, and no unrelated changes are evident.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and accurately summarizes the main change: routing sessions delete to Hermes's native command.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/7642-hermes-sessions-delete-routing

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 138a5f6 in the fix/7642-hermes-sess... branch remains at 96%, unchanged from commit 3835080 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 138a5f6 in the fix/7642-hermes-sess... branch remains at 81%, unchanged from commit 3835080 in the main branch.

Show a code coverage summary of the most impacted files.
File main 3835080 fix/7642-hermes-sess... 138a5f6 +/-
src/lib/domain/.../connect-env.ts 97% 89% -8%
src/lib/credentials/store.ts 56% 55% -1%
src/lib/actions.../gateway-rpc.ts 92% 91% -1%
src/lib/actions...sions/delete.ts 97% 96% -1%
src/lib/inferen...y-production.ts 48% 48% 0%
src/lib/sandbox...rce-identity.ts 88% 88% 0%
src/lib/state/m...-acquisition.ts 75% 75% 0%
src/lib/tunnel/services.ts 76% 76% 0%
src/lib/shields/index.ts 68% 69% +1%
src/lib/inferen...er-discovery.ts 87% 88% +1%

Updated August 04, 2026 12:55 UTC

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@src/lib/actions/sandbox/sessions/delete.ts`:
- Around line 154-165: The deleteHermesSession branch must reflect that
execSandbox terminates the process and never returns in production. Change
deleteHermesSession to use a terminal Promise<never> contract, or replace
execSandbox with a non-exiting helper that produces a real deletion result;
update the corresponding test in src/lib/actions/sandbox/sessions/delete.test.ts
at lines 188-204 to match the chosen behavior.
🪄 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: 5698eb9a-e8cb-4aa3-b583-05d4ecbfcef0

📥 Commits

Reviewing files that changed from the base of the PR and between 79cb88f and 326d0b3.

📒 Files selected for processing (6)
  • docs/reference/commands.mdx
  • src/commands/sandbox/sessions/delete.ts
  • src/lib/actions/sandbox/sessions/delete.test.ts
  • src/lib/actions/sandbox/sessions/delete.ts
  • src/lib/actions/sandbox/sessions/gateway-rpc.ts
  • test/sandbox-sessions-admin-agent-cli.test.ts

Comment thread src/lib/actions/sandbox/sessions/delete.ts
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · medium confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Failed after a partial review · low confidence · 0 blockers · 0 warnings · 0 suggestions

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • justified — native Hermes session id at docs/reference/commands.mdx:2607: Keep the term. The modifier identifies the required Hermes command argument.
  • established — OpenClaw-only at docs/reference/commands.mdx:2608: Keep the established term for options unavailable on Hermes.
  • established — Hermes store at docs/reference/commands.mdx:2606: Keep the established term to identify the session storage targeted by native Hermes deletion.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: onboard-repair, onboard-resume

1 optional E2E recommendation
  • sessions-agents-cli
1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Verify the Hermes delete command contract

  • Location: src/lib/actions/sandbox/sessions/delete.ts:160
  • Category: correctness
  • Problem: The Hermes branch assumes that the managed Hermes runtime accepts `sessions delete <id> --yes`, but checked-in evidence only asserts the argv sent to a stub OpenShell binary.
  • Impact: A Hermes CLI contract change or unsupported `--yes` argument can make session deletion fail for every Hermes sandbox despite the host-side routing tests passing.
  • Recommendation: Add a contract test against the managed Hermes runtime, or check in an authoritative managed-runtime contract fixture that verifies the supported delete syntax and exit behavior.
  • Verification: Inspect the managed Hermes CLI help or integration contract for `hermes sessions delete` and compare its accepted arguments with the argv at this call site.
  • Test coverage: An integration contract test that invokes the managed Hermes CLI with a listed native session ID and verifies that `sessions delete <id> --yes` deletes it and propagates a failure exit code.
  • Evidence: `src/lib/actions/sandbox/sessions/delete.ts:160` invokes `hermes sessions delete <id> --yes`. `src/lib/actions/sandbox/sessions/delete.test.ts` mocks `execSandbox`; `test/sandbox-sessions-admin-agent-cli.test.ts` uses a stub OpenShell binary. No managed Hermes CLI source or command-contract documentation is present under `agents/hermes` in the checked-out repository.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

execSandbox ends by calling process.exit with the native command's exit
code, so deleteHermesSession never returned in production; the previous
`return { key, removedTranscript: false }` was reachable only under the
test's resolving execSandbox mock. Type the branch as Promise<never> and
end it after execSandbox, and model execSandbox's process-exit in the
tests so the routing assertions no longer depend on an unreachable
return value.

Refs #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
validateHermesSessionId rejects empty, leading-dash, and
whitespace-containing ids, but only the leading-dash branch was
exercised. Parameterize the invalid-id test over a leading dash, an
empty string, whitespace-only, and embedded whitespace so a future
change cannot weaken the empty or whitespace branch without a
regression failure.

Refs #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Addressed advisor warning PRA-1 in 17fe863: the invalid-id test is now parameterized over a leading dash, an empty string, whitespace-only, and embedded whitespace — each asserts a non-zero exit and no execSandbox call — so all three validateHermesSessionId rejection branches (empty, leading-dash, whitespace) have regression coverage.

Signed-off-by: Dongni Yang dongniy@nvidia.com

rejectOpenClawOnlyDeleteOptions refuses --json or --verbose on a Hermes
sandbox, but only the --json case was exercised. Parameterize the
rejection test over both flags so a regression cannot let --verbose
reach the native command.

Refs #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Addressed advisor warning PRA-1 (--verbose coverage) in 7909d25: the OpenClaw-only output-flag rejection test is now parameterized over both --json and --verbose, so both sides of the json || verbose guard have regression coverage. Together with the invalid-id parameterization in 17fe863, every rejection branch in the Hermes delete path is now exercised.

Signed-off-by: Dongni Yang dongniy@nvidia.com

The Hermes delete integration test covered only a successful native
delete. Add a stub-OpenShell case where `hermes sessions delete` exits
nonzero and assert the public command returns that exit code and makes
no gateway RPC, pinning execSandbox's exit-code propagation as the
terminal contract for the Hermes branch.

Refs #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Addressed advisor warning PRA-1 (native delete failure path) in 2873383: the stub OpenShell now takes a native-delete exit code, and a new integration test drives hermes sessions delete exiting nonzero and asserts the public command returns that exact code (3) with no gateway RPC — pinning execSandbox's exit-code propagation as the Hermes branch's terminal contract.

Signed-off-by: Dongni Yang dongniy@nvidia.com

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@test/sandbox-sessions-admin-agent-cli.test.ts`:
- Around line 106-108: Update the native-failure test assertions around
result.code, result.out, and gatewayRpcCalls(openshellLog) to also verify that
result.out does not contain “OPENCLAW_GATEWAY_TOKEN”. Keep the assertion at the
public CLI output boundary and preserve the existing exit-code, refusal-text,
and RPC-log checks.
🪄 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: 7a01d15e-774c-44ea-808d-f6ee84079d62

📥 Commits

Reviewing files that changed from the base of the PR and between 7909d25 and 2873383.

📒 Files selected for processing (1)
  • test/sandbox-sessions-admin-agent-cli.test.ts

Comment thread test/sandbox-sessions-admin-agent-cli.test.ts
The native-failure test checked the exit code, refusal text, and RPC
log but not the public output, so a regression that printed
OPENCLAW_GATEWAY_TOKEN on the Hermes failure path could pass unnoticed.
Assert its absence, matching the success test.

Refs #7642

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang Dongni-Yang removed their assignment Jul 28, 2026
@senthilr-nv senthilr-nv self-assigned this Jul 28, 2026
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Refs #7642

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Refs #7642

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator

Exact-head security review

  • Head: 3c6f4fedbc6ec2126b20188b3710c1d133192091
  • Base: c3ab0526eba41d1c681e92bbad3d174925aeaa6a
  • Result: PASS — no findings

Reviewed the complete six-file diff and the native Hermes execution boundary:

  1. Secrets and credentials — PASS. The Hermes branch does not read or pass the OpenClaw gateway token. CLI integration coverage asserts that native success and failure output contains no OPENCLAW_GATEWAY_TOKEN, and the diff-aware gitleaks hook passed.
  2. Input validation and injection — PASS. The native session id is one argv element; leading dashes are rejected so Hermes cannot parse an id as a flag, and empty or whitespace-bearing values are rejected because native Hermes ids contain no whitespace. The shared execSandbox boundary rejects NUL-bearing argv. OpenClaw-only flags are rejected rather than silently reinterpreted.
  3. Authentication and authorization — PASS. Routing uses the host-owned sandbox registry; sandbox code cannot select its host-side agent identity. Hermes deletion runs only inside the selected sandbox through OpenShell and does not cross into the OpenClaw admin RPC.
  4. Dependencies and supply chain — PASS. No dependency, package, image, installer, or pin changes.
  5. Error handling and logging — PASS. Native exit status is propagated unchanged, output is streamed through the existing sandbox execution path, and failure coverage proves no gateway-token diagnostic leaks.
  6. Cryptography — PASS (not applicable). No cryptographic code or security primitive changes.
  7. Configuration and secure defaults — PASS. Missing or non-Hermes registry identity retains the established OpenClaw path; unsupported Hermes flags fail closed.
  8. Security tests — PASS. Tests cover native dispatch, no OpenClaw RPC, argument separation, unsafe ids, incompatible flags, terminal success, nonzero failure propagation, and token non-disclosure.
  9. System and sandbox security — PASS. The change uses the existing execSandbox gateway-selection, endpoint-override, runtime-environment, policy-hint, and cleanup boundaries. It adds no host filesystem access, network policy, capability, credential, or isolation change.

Exact-head evidence: npm run build:cli; sessions CLI tests 154/154; integration routing tests 4/4; npm run typecheck:cli; npm run checks (1,393 files, 4,089 edges); npm run docs (0 errors, 2 repository-baseline warnings); and diff-aware pre-commit, commit-message, and pre-push lanes all passed.

No human, hardware, or external sensitive-path review is claimed by this comment.

@senthilr-nv

Copy link
Copy Markdown
Collaborator

Automated-review disposition

Exact pair: head 3c6f4fedbc6ec2126b20188b3710c1d133192091, base c3ab0526eba41d1c681e92bbad3d174925aeaa6a.

  • Terminal Hermes delete contract: addressed by 034288e975f8da3b719db58396c534ea89815d24. deleteHermesSession() is Promise<never>, models execSandbox()'s process exit, and creates no unreachable success envelope. The CodeRabbit thread is resolved and CodeRabbit confirmed the fix.
  • Gateway-token non-disclosure on native failure: addressed by 30c01c51015de2528ad855ab798e524ff3407c34. The public CLI failure test asserts that output omits OPENCLAW_GATEWAY_TOKEN. The CodeRabbit thread is resolved and CodeRabbit confirmed the fix.
  • Docstring coverage warning: no code change. This is a generic, non-blocking CodeRabbit metric rather than a repository-required check. The exported registry-routing helper has a purpose and default-behavior docstring; the private validation and option helpers have adjacent constraint comments and behavior tests. Adding redundant function docstrings would not clarify a missing contract.

All review threads are resolved. CodeRabbit's automatic review is currently paused after the branch's commit sequence; no reviewer-request write was made. Repository-owned exact-head automated review and CI results will be monitored before merge.

No human approval is claimed by this disposition.

@senthilr-nv

Copy link
Copy Markdown
Collaborator

Secondary advisor warning disposition

Exact pair: head 3c6f4fedbc6ec2126b20188b3710c1d133192091, base c3ab0526eba41d1c681e92bbad3d174925aeaa6a.

The repository-published primary assessment is merge_as_is with 0 blockers, 0 warnings, and 0 suggestions. The Nemotron second-opinion artifact contains two optional test warnings; both were inspected:

  1. Missing checked-in live Hermes delete regression test — no change in this PR. This is a valid future coverage opportunity, but it is not a correctness defect in the reviewed implementation or a repository-required checked-in test for this focused fix. The current PR has direct action tests for exact argv, validation, and terminal behavior plus a public CLI integration test for native success, nonzero exit propagation, no gateway RPC, and gateway-token non-disclosure. The repository-owned exact-pair E2E controller independently selects and enforces runtime jobs; its required gate remains mandatory before merge. Adding a new live scenario would broaden the PR into E2E harness and real-Hermes fixture ownership while product-scope acceptance is still pending.
  2. Onboard repair/resume lifecycle convergence — not applicable to this command. Native Hermes delete does not mutate NemoClaw registry, onboarding metadata, gateway state, or cleanup resources. It invokes Hermes's own session-store delete and propagates that process exit. There is no partial NemoClaw transaction for onboard repair/resume to converge, and allowNonReadyPhase changes only the pre-dispatch reachability check. The controller may still run its conservatively selected onboard-repair and onboard-resume jobs; those exact-pair gate results remain mandatory.

The second opinion's generic holistic-security warning is satisfied by the exact-head nine-category security review at #7682 (comment).

Published advisor result: #7682 (comment). Workflow artifacts: https://github.com/NVIDIA/NemoClaw/actions/runs/30379337682.

No human approval, product-scope approval, or hardware review is claimed by this disposition.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator

Exact-head security review

  • Head: 5024d50e674d1611074ccdf0bafa8b619440e71a
  • Base: 8d3e728b920bf55f1598e78a31a72fe4b3466309
  • Result: PASS — no findings

Reviewed the complete six-file diff and the native Hermes execution boundary:

  1. Secrets and credentials — PASS. The Hermes branch does not read or pass the OpenClaw gateway token. CLI integration coverage asserts that native success and failure output contains no OPENCLAW_GATEWAY_TOKEN, and the diff-aware gitleaks hook passed.
  2. Input validation and injection — PASS. The native session id is one argv element; leading dashes are rejected so Hermes cannot parse an id as a flag, and empty or whitespace-bearing values are rejected because native Hermes ids contain no whitespace. The shared execSandbox boundary rejects NUL-bearing argv. OpenClaw-only flags are rejected rather than silently reinterpreted.
  3. Authentication and authorization — PASS. Routing uses the host-owned sandbox registry; sandbox code cannot select its host-side agent identity. Hermes deletion runs only inside the selected sandbox through OpenShell and does not cross into the OpenClaw admin RPC.
  4. Dependencies and supply chain — PASS. No dependency, package, image, installer, or pin changes.
  5. Error handling and logging — PASS. Native exit status is propagated unchanged, output is streamed through the existing sandbox execution path, and failure coverage proves no gateway-token diagnostic leaks.
  6. Cryptography — PASS (not applicable). No cryptographic code or security primitive changes.
  7. Configuration and secure defaults — PASS. Missing or non-Hermes registry identity retains the established OpenClaw path; unsupported Hermes flags fail closed.
  8. Security tests — PASS. Tests cover native dispatch, no OpenClaw RPC, argument separation, unsafe ids, incompatible flags, terminal success, nonzero failure propagation, and token non-disclosure.
  9. System and sandbox security — PASS. The change uses the existing execSandbox gateway-selection, endpoint-override, runtime-environment, policy-hint, and cleanup boundaries. It adds no host filesystem access, network policy, capability, credential, or isolation change.

Exact-head evidence: npm run build:cli; sessions CLI tests 154/154; integration routing tests 4/4; npm run typecheck:cli; npm --prefix nemoclaw run typecheck; npm run checks (1,394 files, 4,091 edges); npm run docs (0 errors, 2 repository-baseline warnings); and diff-aware pre-commit, commit-message, and pre-push lanes all passed.

No human, hardware, or external sensitive-path review is claimed by this comment.

@senthilr-nv

Copy link
Copy Markdown
Collaborator

Automated-review disposition

Exact pair: head 5024d50e674d1611074ccdf0bafa8b619440e71a, base 8d3e728b920bf55f1598e78a31a72fe4b3466309.

  • Terminal Hermes delete contract: addressed by 034288e975f8da3b719db58396c534ea89815d24. deleteHermesSession() is Promise<never>, models execSandbox()'s process exit, and creates no unreachable success envelope. The CodeRabbit thread is resolved and CodeRabbit confirmed the fix.
  • Gateway-token non-disclosure on native failure: addressed by 30c01c51015de2528ad855ab798e524ff3407c34. The public CLI failure test asserts that output omits OPENCLAW_GATEWAY_TOKEN. The CodeRabbit thread is resolved and CodeRabbit confirmed the fix.
  • Docstring coverage warning: no code change. This is a generic, non-blocking CodeRabbit metric rather than a repository-required check. The exported registry-routing helper has a purpose and default-behavior docstring; the private validation and option helpers have adjacent constraint comments and behavior tests. Adding redundant function docstrings would not clarify a missing contract.

All review threads are resolved. CodeRabbit's automatic review is currently paused after the branch's commit sequence; no reviewer-request write was made. Repository-owned exact-head automated review and CI results will be monitored before merge.

No human approval is claimed by this disposition.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator

Exact-head security review

  • Head: c6e3adf7deff118652d0dba28489737804145118
  • Base: 7f4b490824bb9b8c95405ee97ce913cb333b0e7b
  • Result: PASS — no findings

Reviewed the complete seven-file diff, including the test-only workflow subprocess timeout adjustments, and the native Hermes execution boundary:

  1. Secrets and credentials — PASS. The Hermes branch does not read or pass the OpenClaw gateway token. CLI integration coverage asserts that native success and failure output contains no OPENCLAW_GATEWAY_TOKEN, and the diff-aware gitleaks hook passed.
  2. Input validation and injection — PASS. The native session id is one argv element; leading dashes are rejected so Hermes cannot parse an id as a flag, and empty or whitespace-bearing values are rejected because native Hermes ids contain no whitespace. The shared execSandbox boundary rejects NUL-bearing argv. OpenClaw-only flags are rejected rather than silently reinterpreted.
  3. Authentication and authorization — PASS. Routing uses the host-owned sandbox registry; sandbox code cannot select its host-side agent identity. Hermes deletion runs only inside the selected sandbox through OpenShell and does not cross into the OpenClaw admin RPC.
  4. Dependencies and supply chain — PASS. No dependency, package, image, installer, or pin changes.
  5. Error handling and logging — PASS. Native exit status is propagated unchanged, output is streamed through the existing sandbox execution path, and failure coverage proves no gateway-token diagnostic leaks.
  6. Cryptography — PASS (not applicable). No cryptographic code or security primitive changes.
  7. Configuration and secure defaults — PASS. Missing or non-Hermes registry identity retains the established OpenClaw path; unsupported Hermes flags fail closed.
  8. Security tests — PASS. Tests cover native dispatch, no OpenClaw RPC, argument separation, unsafe ids, incompatible flags, terminal success, nonzero failure propagation, and token non-disclosure.
  9. System and sandbox security — PASS. The change uses the existing execSandbox gateway-selection, endpoint-override, runtime-environment, policy-hint, and cleanup boundaries. It adds no host filesystem access, network policy, capability, credential, or isolation change.

Exact-head evidence: npm run build:cli; sessions CLI tests 154/154; integration routing tests 4/4; affected E2E-support tests 33/33; npm run typecheck:cli; npm --prefix nemoclaw run typecheck; npm run checks (1,394 files, 4,091 edges); npm run docs (0 errors, 2 repository-baseline warnings); and diff-aware pre-commit, commit-message, and pre-push lanes all passed.

No human, hardware, or external sensitive-path review is claimed by this comment.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator

Exact-head security review

  • Head: 117044bbfc249064f5a77b64509aa80b03d7f1ad
  • Base: 7f4b490824bb9b8c95405ee97ce913cb333b0e7b
  • Result: PASS — no findings

Reviewed the complete seven-file diff, including the test-only workflow subprocess timeout adjustments, and the native Hermes execution boundary:

  1. Secrets and credentials — PASS. The Hermes branch does not read or pass the OpenClaw gateway token. CLI integration coverage asserts that native success and failure output contains no OPENCLAW_GATEWAY_TOKEN, and the diff-aware gitleaks hook passed.
  2. Input validation and injection — PASS. The native session id is one argv element; leading dashes are rejected so Hermes cannot parse an id as a flag, and empty or whitespace-bearing values are rejected because native Hermes ids contain no whitespace. The shared execSandbox boundary rejects NUL-bearing argv. OpenClaw-only flags are rejected rather than silently reinterpreted.
  3. Authentication and authorization — PASS. Routing uses the host-owned sandbox registry; sandbox code cannot select its host-side agent identity. Hermes deletion runs only inside the selected sandbox through OpenShell and does not cross into the OpenClaw admin RPC.
  4. Dependencies and supply chain — PASS. No dependency, package, image, installer, or pin changes.
  5. Error handling and logging — PASS. Native exit status is propagated unchanged, output is streamed through the existing sandbox execution path, and failure coverage proves no gateway-token diagnostic leaks.
  6. Cryptography — PASS (not applicable). No cryptographic code or security primitive changes.
  7. Configuration and secure defaults — PASS. Missing or non-Hermes registry identity retains the established OpenClaw path; unsupported Hermes flags fail closed.
  8. Security tests — PASS. Tests cover native dispatch, no OpenClaw RPC, argument separation, unsafe ids, every incompatible flag (including --agent hermes), terminal success, nonzero failure propagation, and token non-disclosure.
  9. System and sandbox security — PASS. The change uses the existing execSandbox gateway-selection, endpoint-override, runtime-environment, policy-hint, and cleanup boundaries. It adds no host filesystem access, network policy, capability, credential, or isolation change.

Exact-head evidence: npm run build:cli; sessions CLI tests 154/154; integration routing tests 5/5; affected E2E-support tests 33/33; npm run typecheck:cli; npm --prefix nemoclaw run typecheck; npm run checks (1,394 files, 4,091 edges); npm run docs (0 errors, 2 repository-baseline warnings); and diff-aware pre-commit, commit-message, and pre-push lanes all passed.

No human, hardware, or external sensitive-path review is claimed by this comment.

@senthilr-nv

Copy link
Copy Markdown
Collaborator

Exact-head automated-review disposition

  • Head: 117044bbfc249064f5a77b64509aa80b03d7f1ad
  • Base: 7f4b490824bb9b8c95405ee97ce913cb333b0e7b

PRA-1 from advisor run 30386577346 was valid and is resolved in commit 117044bbf.

  • Hermes sessions delete now rejects every --agent value, including --agent hermes, before sandbox liveness checks or native/gateway execution.
  • CLI help and the Hermes command reference no longer describe a no-op alias.
  • Unit coverage proves execSandbox is not called.
  • Public CLI coverage proves the command exits nonzero, emits the explicit refusal, exposes no gateway token, and makes no OpenShell call.

Exact-head validation passed: CLI session tests 154/154, public integration tests 5/5, affected E2E-support tests 33/33, build, both typechecks, repository checks, docs, and all diff-aware hook lanes.

No other actionable automated-review finding is currently known. Fresh advisors for this head remain required before merge.

@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior labels Jul 28, 2026
@copy-pr-bot

copy-pr-bot Bot commented Jul 28, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@cjagwani

Copy link
Copy Markdown
Collaborator

Maintainer product-scope gate: the PR itself records that approval is pending, and I found no later comment or linked decision accepting this maintained Hermes sessions delete surface with its ownership, lifecycle, compatibility, security, and validation expectations. I am therefore leaving the stable branch untouched despite the implementation evidence. Please link an explicit maintainer scope decision in #7642 or here; I will then refresh the branch, release any required fork workflows, and re-run the exact-head gate. This is a plain blocker comment, not a Changes requested review.

@apurvvkumaria apurvvkumaria left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed exact head 3042261. Agent routing occurs before OpenClaw key canonicalization, Hermes-only flags are rejected instead of ignored, native session ids are passed as discrete argv with leading-dash and whitespace validation, and the native exit status is propagated without touching OpenClaw credentials or RPCs. Focused unit and CLI tests cover success, rejection, and failure paths; current CI is green. I found no blocking correctness, security, compatibility, or regression issue.

@apurvvkumaria
apurvvkumaria enabled auto-merge (squash) August 4, 2026 06:06
@cjagwani

cjagwani commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Separate exact-head CI note for 304226181c44b974c966e8c571bbe0d3d565e8bf: the reviewed npm audit failed deterministically (1 unaccepted high finding in the reviewed archive, 4 in OpenClaw 2026.7.1, and 2 in mcporter 0.7.3), and a current required native E2E result is absent. The product-scope blocker above still applies. I am not rerunning the deterministic audit failure; after scope is accepted, this head will need a commit or refresh that resolves the audit policy failure before exact-head validation can continue. This is a coordination comment, not a Changes Requested review.

@apurvvkumaria
apurvvkumaria merged commit 53d651b into main Aug 4, 2026
60 of 63 checks passed
@apurvvkumaria
apurvvkumaria deleted the fix/7642-hermes-sessions-delete-routing branch August 4, 2026 16:12
apurvvkumaria added a commit that referenced this pull request Aug 4, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the canonical v0.0.102 release documentation from the current
release-labeled scope.
The change adds a dated changelog for all 38 user-facing shipping PRs
and corrects the OpenClaw agent command reference for the behavior
delivered by #8191.

## Changes

- Add `docs/changelog/2026-08-04.mdx` with the v0.0.102 release summary,
detailed behavior changes, support boundaries, security evidence links,
and links to durable documentation.
- Update `docs/reference/commands.mdx` to describe non-JSON OpenClaw
output capture, its combined limit, marker handling, stream suppression,
recovery guidance, and exit behavior.
- [#8167](#8167) ->
`docs/changelog/2026-08-04.mdx`: Records authenticated attachment of
operator-managed llama.cpp servers.
- [#8129](#8129) ->
`docs/changelog/2026-08-04.mdx`: Records the Experimental managed vLLM
profile for two DGX Spark systems.
- [#7983](#7983) ->
`docs/changelog/2026-08-04.mdx`: Records qualification of the May 2026
GB300WS factory image.
- [#8207](#8207) ->
`docs/changelog/2026-08-04.mdx`: Records the qualified DGX Station
driver transaction.
- [#8208](#8208) ->
`docs/changelog/2026-08-04.mdx`: Records mode-bound Express resume
state.
- [#8158](#8158) ->
`docs/changelog/2026-08-04.mdx`: Records recovery of host-global
dual-Station runtime ownership.
- [#8145](#8145) ->
`docs/changelog/2026-08-04.mdx`: Records Windows-host Ollama validation
from Docker Desktop's network context.
- [#8190](#8190) ->
`docs/changelog/2026-08-04.mdx`: Records HTTP model pulls when WSL has
no local Ollama executable.
- [#8195](#8195) ->
`docs/changelog/2026-08-04.mdx`: Records reuse of a healthy
installer-managed CLI.
- [#8053](#8053) ->
`docs/changelog/2026-08-04.mdx`: Records early rejection of incompatible
OpenShell gateway versions.
- [#8098](#8098) ->
`docs/changelog/2026-08-04.mdx`: Records the bounded
package-service-to-standalone gateway recovery transition.
- [#8216](#8216) ->
`docs/changelog/2026-08-04.mdx`: Records the final dashboard port
selected during multi-sandbox onboarding.
- [#8146](#8146) ->
`docs/changelog/2026-08-04.mdx`: Records managed startup-state
restoration for stopped sandboxes.
- [#8092](#8092) ->
`docs/changelog/2026-08-04.mdx`: Records gateway watchdog recovery for
classified not-serving states.
- [#8182](#8182) ->
`docs/changelog/2026-08-04.mdx`: Records consistent managed-recovery
wait configuration.
- [#8040](#8040) ->
`docs/changelog/2026-08-04.mdx`: Records Docker sandbox rollback
authority through late validation.
- [#8130](#8130) ->
`docs/changelog/2026-08-04.mdx`: Records bounded Shields deadline
recovery and durable containment.
- [#8086](#8086) ->
`docs/changelog/2026-08-04.mdx`: Records repair of narrowly validated
permission-only configuration drift.
- [#8122](#8122) ->
`docs/changelog/2026-08-04.mdx`: Records prompt failure and guidance for
corrupt transition locks.
- [#8124](#8124) ->
`docs/changelog/2026-08-04.mdx`: Records policy restoration flags,
previews, and target revalidation.
- [#7886](#7886) ->
`docs/changelog/2026-08-04.mdx`: Records explicit destruction after
pre-delete Shields hardening failures while preserving recovery
authority.
- [#7901](#7901) ->
`docs/changelog/2026-08-04.mdx`: Records multi-port uninstall behavior
and shared-resource preservation.
- [#7984](#7984) ->
`docs/changelog/2026-08-04.mdx`: Records one classified transient remote
MCP startup retry.
- [#7954](#7954) ->
`docs/changelog/2026-08-04.mdx`: Records bounded hosted-inference probe
replies.
- [#7574](#7574) ->
`docs/changelog/2026-08-04.mdx`: Records preservation of validated
reasoning capabilities through onboarding.
- [#8089](#8089) ->
`docs/changelog/2026-08-04.mdx`: Records proxy routing for Hermes
WhatsApp pairing and media traffic.
- [#7682](#7682) ->
`docs/changelog/2026-08-04.mdx`: Records native Hermes session deletion
and identifier validation.
- [#8150](#8150) ->
`docs/changelog/2026-08-04.mdx`: Records corporate CA trust for
LangChain Deep Agents Code image builds.
- [#8156](#8156) ->
`docs/changelog/2026-08-04.mdx`: Records reviewed managed runtime
dependency remediation.
- [#8180](#8180) ->
`docs/changelog/2026-08-04.mdx`: Records reviewed MCP discovery runtime
dependency updates.
- [#8196](#8196) ->
`docs/changelog/2026-08-04.mdx`: Records private npm dependency
remediation across managed images.
- [#8203](#8203) ->
`docs/changelog/2026-08-04.mdx`: Records reviewed Hermes and LangChain
Deep Agents Code Python dependency updates.
- [#8125](#8125) ->
`docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for invalid
enumerated CLI values.
- [#8193](#8193) ->
`docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for
unresolved sandbox base images.
- [#8118](#8118) ->
`docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for changed
gateway authority.
- [#8191](#8191) ->
`docs/changelog/2026-08-04.mdx`, `docs/reference/commands.mdx`: Records
output capture, marker handling, recovery guidance, and exit behavior
for non-JSON OpenClaw agent commands.
- [#8187](#8187) ->
`docs/changelog/2026-08-04.mdx`: Records the aligned
interactive-installation start across supported agents.
- [#8153](#8153) ->
`docs/changelog/2026-08-04.mdx`: Records current product capabilities
and support boundaries.

## 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)

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: This documentation-only
release preparation does not change executable behavior. Existing
changelog and published-route tests pass.
- [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:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: Independently reviewed `docs/changelog/2026-08-04.mdx` and
`docs/reference/commands.mdx` at commit `b89913780`. All 38 user-facing
v0.0.102 PRs are represented, #8191 behavior matches the implementation,
and the writing rules, documentation style, controlled terminology,
route structure, and skip policy pass review. Targeted tests pass 36/36
and the documentation build completes with 0 errors.
- Agent: Codex Desktop independent documentation writer
<!-- docs-review-head-sha: b899137 -->
<!-- docs-review-agents-blob-sha: 3dd7c24 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable
- Station profile/scenario: Not applicable
- Result: Not applicable
- Supporting evidence: Not applicable

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run validate:pr` passed after refreshing `origin/main` when hooks
were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — `npx vitest run --project integration
test/changelog-docs.test.ts test/check-docs-published-routes.test.ts`
passed 36/36.
- [x] Applicable broad gate passed — not applicable to
documentation-only changes; `npm run docs` completed successfully with 0
errors.
- [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) —
completed with 0 errors and 2 existing Fern warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [x] New doc pages include SPDX header and frontmatter (new pages only)
— the native dated changelog uses the required parser-safe MDX SPDX
comment and intentionally has no frontmatter.

---
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Documentation**
- Added release notes for v0.0.102, covering authentication, hardware
setup, WSL, installer recovery, sandbox resilience, policy management,
inference reliability, CLI improvements, and unified quickstarts.
- Updated command documentation to explain how non-JSON agent output is
collected, replayed, and reported.

- **Bug Fixes**
- Improved command-output recovery guidance when output exceeds limits
or contains unsupported fallback markers.
- Preserved accurate command exit-status reporting after output
processing.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(cli): route sessions delete to hermes sessions delete on Hermes sandboxes, like sessions export/list already do

7 participants