Skip to content

test(e2e): cover Microsoft Teams in the channels stop/start matrix - #7875

Merged
prekshivyas merged 10 commits into
mainfrom
test/msteams-e2e-channels-stop-start
Aug 3, 2026
Merged

test(e2e): cover Microsoft Teams in the channels stop/start matrix#7875
prekshivyas merged 10 commits into
mainfrom
test/msteams-e2e-channels-stop-start

Conversation

@hunglp6d

@hunglp6d hunglp6d commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add Microsoft Teams to the channels-stop-start live E2E matrix for OpenClaw and Hermes.
The test now covers existing Microsoft Teams onboarding, configuration rendering, provider creation, network policy, and channel lifecycle behavior.

Related Issue

Related: #5585

Changes

  • Add teams to the channels-stop-start matrix for both agent runtimes.
  • Add test inputs for the {sandbox}-teams-bridge provider, fake MSTEAMS_* and TEAMS_* environment-variable values, and Microsoft Teams plan assertions.
  • Map the OpenClaw test key from teams to msteams so the test reads channels.msteams.
  • Assert that the Hermes .env file contains TEAMS_CLIENT_SECRET=openshell:resolve:env:MSTEAMS_APP_PASSWORD.
  • Limit the change to the E2E test harness. It does not change production code, a schema, the CLI, configuration behavior, or a supported surface.

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: This change expands live E2E coverage for existing behavior. docs/manage-sandboxes/set-up-microsoft-teams.mdx already documents Microsoft Teams for OpenClaw and Hermes, including the environment variables exercised by this test. No command, flag, configuration behavior, or supported surface changes.
  • 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

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: No documentation paths changed. The PR adds Microsoft Teams to the live channels-stop-start E2E matrix and does not change a command, configuration, default, or supported behavior. docs/manage-sandboxes/set-up-microsoft-teams.mdx already documents Microsoft Teams for OpenClaw and Hermes, including the credentials, access controls, webhook port, and mention mode exercised by this test.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
    Not applicable. scripts/prepare-dgx-station-host.sh is not changed.

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 validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: npm run typecheck:cli (exit 0); npx @biomejs/biome check (no findings); npx vitest run --project e2e-support (168 files and 1,794 tests passing). The live channels-stop-start E2E target runs through GitHub CI on Brev and is not available in the local contributor environment.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • 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)

Signed-off-by: Hung Le hple@nvidia.com

Summary by CodeRabbit

  • Tests
    • Added Microsoft Teams to live channel stop/start coverage for OpenClaw and Hermes.
    • Added assertions for Microsoft Teams credentials and runtime configuration.

Fold Microsoft Teams into the channels-stop-start live lifecycle matrix on
both the OpenClaw and Hermes arms, closing the teams E2E gap. Teams enrolls
headlessly through token-paste with no reachability probe, so it needs no
skip flag; the OpenClaw config key is msteams (not teams), and the Hermes
.env renders the plain openshell:resolve:env placeholder.

Signed-off-by: Hung Le <hple@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The live channels stop/start test replaces WhatsApp coverage with Teams coverage, adds Teams credentials and runtime environment variables, and validates Teams-specific channel inputs, OpenClaw mapping, and Hermes configuration.

Changes

Teams channel integration

Layer / File(s) Summary
Teams provider and environment setup
test/e2e/live/channels-stop-start-helpers.ts
The exercised channel list, provider factory, token structure, token generation, and Teams environment variables are updated for Teams.
Teams configuration validation
test/e2e/live/channels-stop-start-helpers.ts
Assertions validate Teams inputs, map Teams to msteams, and check Hermes resolves TEAMS_CLIENT_SECRET.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: aasthajh, afourniernv, ahunnargikar-nvidia, aknvda, amata-human

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the added Microsoft Teams coverage in the channels stop/start E2E test matrix.
✨ 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 test/msteams-e2e-channels-stop-start

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

@github-code-quality

github-code-quality Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit a8ac241 in the test/msteams-e2e-cha... branch remains at 96%, unchanged from commit 4cd4d64 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit a8ac241 in the test/msteams-e2e-cha... branch remains at 81%, unchanged from commit a931be4 in the main branch.

Show a code coverage summary of the most impacted files.
File main a931be4 test/msteams-e2e-cha... a8ac241 +/-
src/lib/policy/...ne-exclusion.ts 97% 92% -5%
src/lib/private-networks.ts 93% 90% -3%
src/lib/sandbox...rce-identity.ts 88% 88% 0%
src/lib/tunnel/services.ts 76% 76% 0%
src/lib/credentials/store.ts 55% 56% +1%

Updated August 03, 2026 10:47 UTC

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized terminology decisions differ; normalized E2E selections differ; severity counts match.
2 additional E2E selections from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • rebuild-openclaw: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • rebuild-hermes: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

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

2 semantic terminology decisions

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

  • established — Teams at test/e2e/live/channels-stop-start-helpers.ts:38: Keep Teams as the short product name in this comment.
  • replace — agent arm at test/e2e/live/channels-stop-start-helpers.ts:38: Replace “both agent arms” with “both agent runtimes.”

E2E guidance

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

Recommended E2E: cloud-inference, cloud-onboard, security-posture, channels-stop-start

2 optional E2E recommendations
  • messaging-providers
  • network-policy

Workflow run details

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

@hunglp6d
hunglp6d marked this pull request as ready for review July 30, 2026 05:39

@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/e2e/live/channels-stop-start-helpers.ts`:
- Around line 230-234: Extend the Teams assertion block in the helper to
validate every configuration input supplied by phase6TokenEnv(), including
allowedUsers mapped from TEAMS_ALLOWED_USERS and webhookPort mapped from
MSTEAMS_PORT, while preserving the existing appId, tenantId, and requireMention
assertions.
🪄 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: 2b5f8e2d-efa4-49e1-be2f-d501ec1535ff

📥 Commits

Reviewing files that changed from the base of the PR and between da1b103 and d498670.

📒 Files selected for processing (1)
  • test/e2e/live/channels-stop-start-helpers.ts

Comment thread test/e2e/live/channels-stop-start-helpers.ts
hunglp6d and others added 2 commits July 30, 2026 12:05
Extend the channels-stop-start Teams input assertions to cover allowedUsers
(TEAMS_ALLOWED_USERS) and webhookPort (MSTEAMS_PORT) that phase6TokenEnv
supplies, so a broken allowlist or webhook-port mapping fails the lifecycle
test instead of passing silently.

Signed-off-by: Hung Le <hple@nvidia.com>
@hunglp6d hunglp6d self-assigned this Jul 30, 2026
@hunglp6d hunglp6d added area: e2e End-to-end tests, nightly failures, or validation infrastructure area: messaging Messaging channels, bridges, manifests, or channel lifecycle labels Jul 30, 2026
@copy-pr-bot

copy-pr-bot Bot commented Aug 1, 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.

@cv

cv commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Security review for commit a8ac241bba75ddbb6369a7be969b818a1383f27b — PASS

Scope is established by merged PR #5585, which introduced the supported Microsoft Teams channel. This pull request changes only the existing live E2E lifecycle matrix; it does not add a product surface.

  1. Secrets and credentials — PASS. Credential values come from the environment or unmistakably fake test defaults. The Teams secret is included in the existing command-artifact redaction set, and the config probe emits only yes or no.
  2. Input validation and data sanitization — PASS. The added channel identifiers and shell probes are fixed test constants. Environment-derived expected values are not interpolated into shell commands, and production manifest validation remains the authority exercised by the test.
  3. Authentication and authorization — PASS. No authentication or authorization behavior changes. The test verifies the existing Teams credential binding, provider, rendered configuration, and lifecycle state.
  4. Dependencies and third-party libraries — PASS. No dependency, package, image, or download changes.
  5. Error handling and logging — PASS. Command artifacts retain the existing credential redaction path. The new assertions do not compare or print the Teams secret.
  6. Cryptography and data protection — PASS. No cryptographic behavior changes. The Hermes probe checks the existing secret-store placeholder rather than reading or printing secret material.
  7. Configuration and security headers — PASS. No production configuration changes. The test requires the existing Teams network-policy preset and channel-scoped policy entry.
  8. Security testing — PASS. The live matrix now exercises Teams onboarding, policy, provider, rendered configuration, stop, and restart behavior for both supported agent paths.
  9. System security — PASS. The change uses the existing sandbox-name guard, provider cleanup helpers, and command wrappers. It adds no privilege, host-process, filesystem, or network-policy bypass.

No security findings. Required GitHub checks for this commit remain authoritative; no local test suite was run for this review.

@prekshivyas
prekshivyas merged commit d6ac402 into main Aug 3, 2026
83 of 86 checks passed
@prekshivyas
prekshivyas deleted the test/msteams-e2e-channels-stop-start branch August 3, 2026 15:00
senthilr-nv added a commit that referenced this pull request Aug 4, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Adds the canonical dated `v0.0.101` changelog entry that was missing
when the release tag was cut. This post-release recovery records the
shipped behavior on current `main` without changing or replacing the
existing tag.

## Changes

- Add `docs/changelog/2026-08-03.mdx` with the exact `## v0.0.101`
heading, release summary, detailed behavior changes, support boundaries,
and links to durable documentation.
- [#7317](#7317) ->
`docs/changelog/2026-08-03.mdx`: Records experimental OpenClaw Google
Chat support and its restricted credential and webhook boundary.
- [#7715](#7715) ->
`docs/changelog/2026-08-03.mdx`: Records strict onboarding recovery
state and authoritative resume identity.
- [#7749](#7749) ->
`docs/changelog/2026-08-03.mdx`: Records the provider-neutral policy
seam and unchanged runtime support boundary.
- [#7817](#7817) ->
`docs/changelog/2026-08-03.mdx`: Records preserved Hermes home-channel
assignments across rebuilds.
- [#7820](#7820) ->
`docs/changelog/2026-08-03.mdx`: Records the SSH-session status field
correction.
- [#7847](#7847) ->
`docs/changelog/2026-08-03.mdx`: Records fail-closed credential
filtering for migration and rebuild backups.
- [#7870](#7870) ->
`docs/changelog/2026-08-03.mdx`: Records sandbox-qualified in-sandbox
host command hints.
- [#7875](#7875) ->
`docs/changelog/2026-08-03.mdx`: Records Microsoft Teams stop and start
E2E coverage.
- [#7885](#7885) ->
`docs/changelog/2026-08-03.mdx`: Records Hermes managed gateway
detection in status.
- [#7889](#7889) ->
`docs/changelog/2026-08-03.mdx`: Records policy-authenticated HTTPS Pin
Runtime route revocation.
- [#7891](#7891) ->
`docs/changelog/2026-08-03.mdx`: Records default fallback for negative
timeout and polling overrides.
- [#7993](#7993) ->
`docs/changelog/2026-08-03.mdx`: Records correct sibling detection
during uninstall.
- [#7995](#7995) ->
`docs/changelog/2026-08-03.mdx`: Records absent configuration-hash
handling before shields lock.
- [#8001](#8001) ->
`docs/changelog/2026-08-03.mdx`: Records the dormant atomic managed
workload replacement foundation.
- [#8029](#8029) ->
`docs/changelog/2026-08-03.mdx`: Records repository terminology review
in PR Review Advisor.
- [#8031](#8031) ->
`docs/changelog/2026-08-03.mdx`: Records provider-neutral managed
snapshot authority.
- [#8032](#8032) ->
`docs/changelog/2026-08-03.mdx`: Records immutable managed clone handoff
contracts.
- [#8034](#8034) ->
`docs/changelog/2026-08-03.mdx`: Records the dormant provider-owned
clone transaction surface.
- [#8035](#8035) ->
`docs/changelog/2026-08-03.mdx`: Records the dormant Hermes managed
clone broker boundary.
- [#8036](#8036) ->
`docs/changelog/2026-08-03.mdx`: Records the dormant transactional
managed bootstrap boundary.
- [#8037](#8037) ->
`docs/changelog/2026-08-03.mdx`: Records dormant Docker bootstrap
primitives and the unchanged provider support boundary.
- [#8070](#8070) ->
`docs/changelog/2026-08-03.mdx`: Records consolidated sandbox
resource-limit E2E coverage.
- [#8071](#8071) ->
`docs/changelog/2026-08-03.mdx`: Records escaped and bounded CLI
validation diagnostics.
- [#8081](#8081) ->
`docs/changelog/2026-08-03.mdx`: Records bounded linear snapshot Base64
validation.
- [#8085](#8085) ->
`docs/changelog/2026-08-03.mdx`: Records commit-bound workflow approval
for eligible same-repository maintainers.
- [#8088](#8088) ->
`docs/changelog/2026-08-03.mdx`: Records Hermes managed-policy E2E
selection.
- [#8090](#8090) ->
`docs/changelog/2026-08-03.mdx`: Records pinned CI search-tool
provisioning.
- [#8106](#8106) ->
`docs/changelog/2026-08-03.mdx`: Records fallback from failed managed
OpenShell gateway startup.
- [#8107](#8107) ->
`docs/changelog/2026-08-03.mdx`: Records Hermes adapter lifecycle E2E
selection.
- [#8128](#8128) ->
`docs/changelog/2026-08-03.mdx`: Records the dormant transactional
Docker bootstrap adapter and rollback authority.
- [#8140](#8140) ->
`docs/changelog/2026-08-03.mdx`: Records Slack conflict scope across
independent OpenShell gateways.
- [#8147](#8147) ->
`docs/changelog/2026-08-03.mdx`: Records completion of durable v0.0.100
documentation audit follow-ups.

## 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
recovery does not change executable behavior.
- [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-03.mdx` at
commit `0bebe1f568e3dc85cf410aac1dfb8f8830070b85`. Its blob is
`82887920f9720eafd75db6b2271c35f7477edb9b`. The entry follows the
writing guide, controlled terminology, changelog structure, MDX SPDX
format, literal CLI-name rule, and root-absolute route requirements. It
accurately records the `v0.0.100...v0.0.101` release range, Announcement
#8162, accepted scope boundaries, and shipped security behavior. There
are no code samples. Focused changelog tests and the documentation build
pass for this commit.
- Agent: Codex Desktop independent documentation writer
<!-- docs-review-head-sha: 0bebe1f -->
<!-- docs-review-agents-blob-sha:
3dd7c24 -->

## Security Review

- Result: `PASS`
- Reviewed commit: `0bebe1f568e3dc85cf410aac1dfb8f8830070b85`
- Base commit: `643a4ab8b5f583d8555192a37927268b26022c51`
- Findings: None.
- Secrets and credentials: `PASS`. No credential values or secret files
are present.
- Input validation and data sanitization: `PASS`. No executable input
path changes.
- Authentication and authorization: `PASS`. No identity or permission
logic changes.
- Dependencies and third-party libraries: `PASS`. No dependency changes.
- Error handling and logging: `PASS`. No runtime path changes;
diagnostic-security claims are precise.
- Cryptography and data protection: `PASS`. No implementation changes.
- Configuration and security controls: `PASS`. No configuration,
container, port, or HTTP changes.
- Security testing: `PASS`. No coverage is removed; the entry records
shipped test and security behavior.
- System security: `PASS`. No runtime control changes; dormant and
non-activation boundaries are explicit.
- Agent: Codex Desktop independent security reviewer

## Verification

- [ ] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub — verification is pending after commit
`0bebe1f568e3dc85cf410aac1dfb8f8830070b85` is pushed.
- [ ] 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 — commit hooks passed; pre-push is pending.
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — tests are not applicable to this
documentation-only recovery.
- [x] Applicable broad gate passed — not applicable to this
documentation-only recovery.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, credentials, or private keys are added by
this diff.
- [ ] `npm run docs` builds without warnings (doc changes only) — GitHub
documentation checks are pending.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only) — independent documentation review passed.
- [x] New doc pages include SPDX header and frontmatter (new pages only)
— the native changelog entry uses the required parser-safe MDX SPDX
comment and intentionally has no frontmatter.

GitHub CI is authoritative.
Focused changelog tests and `npm run docs` passed after the merge
refresh.

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


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

* **New Features**
  * Added experimental Google Chat support.
  * Improved runtime and session status visibility.
  * Added onboarding recovery and persistence safeguards.
  * Added snapshot validation and dormant managed-workload support.

* **Bug Fixes**
* Improved backup sanitization, route handling, and gateway reliability.

* **Documentation**
  * Added the v0.0.101 changelog and related updates.

* **Tests**
  * Expanded end-to-end coverage and strengthened trusted CI validation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Senthil Ravichandran <senthilr@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure area: messaging Messaging channels, bridges, manifests, or channel lifecycle

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants