Repository navigation
Expand file tree
/
Copy path.coderabbit.yaml
More file actions
860 lines (699 loc) · 36.2 KB
/
Copy path.coderabbit.yaml
File metadata and controls
860 lines (699 loc) · 36.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
language: "en-US"
early_access: false
reviews:
profile: "chill"
request_changes_workflow: false
high_level_summary: true
poem: true
review_status: true
review_details: false
auto_review:
enabled: true
drafts: false
path_instructions:
- path: "docs/**"
instructions: |
You are an editorial reviewer for NemoClaw documentation.
Review every docs change against the style guide below. Flag violations
inline as review comments. Do not rewrite the content — point out the
issue and cite the relevant rule so the author can fix it.
## Voice and Tone
- Active voice required. Flag passive constructions.
Bad: "A gateway is created by the CLI."
Good: "The CLI creates a gateway."
- Second person ("you") when addressing the reader.
- Present tense. Flag future tense ("will") in descriptions of current behavior.
- No hedge words: flag "simply," "just," "easily," "of course."
## LLM-Generated Patterns (Flag These)
These are common in AI-generated text and erode trust with technical readers.
Flag every occurrence:
- Unnecessary bold on routine instructions ("This is a **critical** step"
when nothing is actually critical). Bold is reserved for UI labels,
parameter names, and genuine warnings.
- Excessive em dashes. One per paragraph is fine; multiple per paragraph
or em dashes used instead of commas/periods should be flagged.
- Superlatives and marketing language ("powerful," "robust," "seamless,"
"cutting-edge"). Say what it does, not how great it is.
- Emoji in documentation prose.
- Rhetorical questions ("Want to secure your agents? Look no further!").
State the purpose directly.
- Filler introductions ("In this section, we will explore..."). Start
with the content.
## Formatting Rules
- Every sentence must end with a period.
- One sentence per line in source (makes diffs readable). Flag paragraphs
where multiple sentences appear on the same line.
- CLI commands, file paths, flags, parameter names, and values must use
inline `code` formatting.
- Copyable CLI code blocks must use language-specific tags such as
`bash`, `sh`, or `powershell`, and must not include prompt markers
such as `$`. Reserve `console` blocks for terminal transcripts that
include prompts, output, or interactive sessions.
- Do not flag `$$nemoclaw` in docs. It is the correct build-time
variant placeholder for shared OpenClaw and Hermes command examples.
- When a docs PR adds a command-line example that works across all
NemoClaw agent aliases, comment if it uses a concrete alias such as
`nemoclaw` or `nemohermes`; ask the author to use `$$nemoclaw`
instead so generated OpenClaw and Hermes docs render the right
command name.
- Use Fern callout components (<Note>, <Tip>, <Warning>) for callouts
in MDX pages, not bold text or blockquotes. MyST admonitions are
acceptable only in legacy .md pages that have not migrated yet.
- No nested admonitions.
- Do not number section titles. Flag "Section 1: ...", "Step 3: ...", etc.
- No colons in titles. Flag "Inference: Cloud and Local" — should be
"Cloud and Local Inference."
- Colons should only introduce a list. Flag colons used as general
punctuation between clauses.
## Word List (Flag Incorrect Usage)
| Correct | Incorrect (flag these) |
|----------------|------------------------------------------------------|
| NVIDIA | Nvidia, nvidia |
| NemoClaw | nemoclaw (in prose), Nemoclaw |
| OpenClaw | openclaw (in prose), Openclaw |
| OpenShell | Open Shell, openShell, Openshell, openshell (in prose)|
| CLI | cli, Cli |
| API key | api key, API Key |
| mTLS | MTLS, mtls |
| YAML | yaml (in prose), Yaml |
| gateway | Gateway (unless starting a sentence) |
| sandbox | Sandbox (unless starting a sentence) |
Words inside code blocks or inline code spans are exempt from the word
list (e.g., `nemoclaw onboard` is correct).
## Page Structure
When reviewing new pages, verify:
- SPDX license header is present after frontmatter.
- Frontmatter includes title, description, keywords, topics, tags,
content type, difficulty, audience, and status fields.
- H1 heading matches the `title.page` frontmatter value.
- Page starts with a one- or two-sentence introduction.
- Sections use H2 and H3, each starting with an introductory sentence.
- A "Next Steps" section at the bottom links to related pages.
## Severity
- Word list and voice violations: flag as suggestions.
- Missing SPDX header, broken cross-references, or incorrect code
block language: flag as issues.
- LLM-generated patterns (bold overuse, em dashes, superlatives,
hedge words): flag as suggestions with the note "LLM pattern detected."
- path: "**/*.md"
instructions: |
This rule applies to all Markdown files project-wide. For files
under docs/, the stricter docs/** rules defined earlier in this
file take precedence; this rule adds baseline checks for every
other Markdown file (README, CONTRIBUTING, architecture docs, etc.).
- NVIDIA must be all caps (not Nvidia, nvidia).
- NemoClaw, OpenClaw, and OpenShell must use correct casing.
- No emoji in technical prose.
# ── E2E test recommendations ──────────────────────────────────
# Maps sensitive file paths to the nightly E2E jobs that exercise them.
# CodeRabbit surfaces these as review comments on PRs that touch a
# matched path, so reviewers know which E2E jobs to run before merge.
#
# When adding a new E2E job to nightly-e2e.yaml, add a matching
# path_instructions entry below. The cross-validation test in
# test/validate-e2e-coverage.test.ts verifies consistency.
- path: "scripts/nemoclaw-start.sh"
instructions: &e2e-entrypoint |
This file is a sandbox entrypoint script. Changes affect every
sandbox boot and are invisible to unit tests (Landlock, non-root
execution, process lifecycle).
**E2E test recommendation:**
- `sandbox-survival-e2e` — gateway restart recovery
- `sandbox-operations-e2e` — process recovery after gateway kill
- `cloud-e2e` — full onboard + cloud inference
- `openclaw-slack-pairing-e2e` — gateway/connect-shell OpenClaw
pairing state root parity for Slack
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=sandbox-survival-e2e,sandbox-operations-e2e,cloud-e2e,openclaw-slack-pairing-e2e
```
- path: "scripts/lib/sandbox-init.sh"
instructions: *e2e-entrypoint
- path: "Dockerfile"
instructions: &e2e-dockerfile |
This file affects the sandbox container image. Layer ordering,
permissions, and baked config changes are only testable with a
real container build.
**E2E test recommendation:**
- `cloud-e2e` — full onboard + cloud inference
- `sandbox-survival-e2e` — gateway restart recovery
- `hermes-e2e` — Hermes agent onboard + inference
- `rebuild-openclaw-e2e` — workspace state survives rebuild
- `openclaw-tui-chat-correlation-e2e` — baked OpenClaw chat send
patch preserves user/assistant turn correlation
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
```
- path: "Dockerfile.base"
instructions: *e2e-dockerfile
- path: "nemoclaw-blueprint/scripts/http-proxy-fix.js"
instructions: |
This file is the L7 proxy rewrite script. Changes affect all
inference routing through the proxy. FORWARD-mode path needs
manual validation until a dedicated forward-proxy-e2e exists.
**E2E test recommendation:**
- `cloud-e2e` — full inference through the proxy chain
- `inference-routing-e2e` — credential isolation + error classification
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,inference-routing-e2e
```
- path: "src/lib/onboard.ts"
instructions: |
This file contains core onboarding logic. Changes here affect
the full sandbox creation and configuration flow.
**E2E test recommendation:**
- `cloud-e2e` — full onboard + cloud inference
- `sandbox-operations-e2e` — multi-sandbox lifecycle
- `rebuild-openclaw-e2e` — workspace state survives rebuild
- `channels-stop-start-e2e` — channel disable/enable lifecycle across
rebuild with cached Telegram credentials
- `messaging-compatible-endpoint-e2e` — Telegram + compatible endpoint
inference.local regression
- `bedrock-runtime-compatible-anthropic-e2e` — Bedrock Runtime
compatible Anthropic endpoint adapter boundary
- `hermes-discord-e2e` — Hermes Discord config schema + placeholder
isolation
- `hermes-slack-e2e` — Hermes Slack policy + Python placeholder egress
- `openshell-gateway-upgrade-e2e` — stale Linux Docker-driver gateway
process restart after OpenShell upgrade
- `issue-3600-gpu-proof-optional-e2e` — direct GPU verification remains
optional when CUDA probing fails before sandbox creation
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,sandbox-operations-e2e,rebuild-openclaw-e2e,channels-stop-start-e2e,messaging-compatible-endpoint-e2e,bedrock-runtime-compatible-anthropic-e2e,hermes-discord-e2e,hermes-slack-e2e,openshell-gateway-upgrade-e2e,issue-3600-gpu-proof-optional-e2e
```
- path: "src/lib/onboard/bedrock-runtime.ts"
instructions: &e2e-bedrock-runtime-compatible-anthropic |
This file is part of the Bedrock Runtime compatible Anthropic endpoint
path. Changes affect endpoint classification, hidden adapter startup,
adapter-token isolation, and the sandbox-facing inference.local route.
**E2E test recommendation:**
- `bedrock-runtime-compatible-anthropic-e2e` — fake Bedrock Runtime
endpoint through OpenClaw and Hermes with sandbox leak checks
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=bedrock-runtime-compatible-anthropic-e2e
```
- path: "src/lib/inference/bedrock-runtime*.ts"
instructions: *e2e-bedrock-runtime-compatible-anthropic
- path: "src/lib/onboard/channel-state.ts"
instructions: &e2e-channel-stop-start |
This file controls disabled channel resolution used during onboard
and rebuild. Changes affect whether `channels stop` persists across
sandbox destroy/recreate and whether `channels start` reattaches
cached credentials.
**E2E test recommendation:**
- `channels-stop-start-e2e` — Telegram channel stop/start lifecycle
across rebuild with cached credentials
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=channels-stop-start-e2e
```
- path: "src/lib/state/onboard-session.ts"
instructions: *e2e-channel-stop-start
- path: "src/lib/actions/sandbox/rebuild.ts"
instructions: *e2e-channel-stop-start
- path: "src/commands/sandbox/channels/**"
instructions: *e2e-channel-stop-start
- path: "src/lib/sandbox/channels-command-support.ts"
instructions: *e2e-channel-stop-start
- path: "test/e2e/test-channels-stop-start.sh"
instructions: *e2e-channel-stop-start
- path: "src/lib/actions/inference-set.ts"
instructions: |
This file switches the OpenShell inference route and patches the
selected running agent config. Changes here affect OpenClaw and
Hermes model switching without a sandbox rebuild.
**E2E test recommendation:**
- `openclaw-inference-switch-e2e` — OpenClaw route + config patch
+ live OpenClaw request after switch
- `hermes-inference-switch-e2e` — Hermes route + config.yaml patch
+ live Hermes request after switch
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openclaw-inference-switch-e2e,hermes-inference-switch-e2e
```
- path: "src/nemoclaw.ts"
instructions: |
This file contains CLI dispatch, status, recovery, and connect
functions. Changes affect sandbox lifecycle commands.
**E2E test recommendation:**
- `sandbox-survival-e2e` — gateway restart recovery
- `sandbox-operations-e2e` — process recovery after gateway kill
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=sandbox-survival-e2e,sandbox-operations-e2e
```
- path: "src/lib/cluster-image-patch.ts"
instructions: &e2e-overlayfs |
This file handles Docker 26+ overlayfs compatibility. Changes
are only testable under real Docker + K3s execution.
**E2E test recommendation:**
- `overlayfs-autofix-e2e` — Docker 26+ nested-mount auto-fix
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=overlayfs-autofix-e2e
```
- path: "src/lib/onboard/preflight.ts"
instructions: *e2e-overlayfs
- path: "src/lib/deploy/**"
instructions: |
This file contains deployment lifecycle logic (start/stop
cloudflared tunnel).
**E2E test recommendation:**
- `tunnel-lifecycle-e2e` — start/stop cloudflared tunnel
- `state-backup-restore-e2e` — backup/restore workspace state
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=tunnel-lifecycle-e2e,state-backup-restore-e2e
```
- path: "src/lib/state/sandbox.ts"
instructions: |
This file manages sandbox state (backup, restore, rebuild,
snapshot). Changes affect data persistence across sandbox
lifecycle operations.
**E2E test recommendation:**
- `state-backup-restore-e2e` — backup/restore workspace state
- `snapshot-commands-e2e` — snapshot create/list/restore lifecycle
- `rebuild-openclaw-e2e` — workspace state survives rebuild
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=state-backup-restore-e2e,snapshot-commands-e2e,rebuild-openclaw-e2e
```
- path: "src/lib/shields/**"
instructions: |
These files control shields down/up, config mutability, audit
trail, and auto-restore timer.
**Test recommendation:**
- `test/vm-driver-privileged-exec-routing.test.ts` — CLI Vitest
regression for direct Docker/VM privileged exec routing used by
shields/config mutations
- `shields-config-e2e` — live shields lifecycle + config get/set/rotate
To run the live E2E selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=shields-config-e2e
```
- path: "src/lib/sandbox/privileged-exec.ts"
instructions: |
This file selects the privileged mutation transport for host-side
sandbox writes. Changes can break shields up/down and config set on
Docker Desktop VM-driver sandboxes.
**Test recommendation:**
- `test/vm-driver-privileged-exec-routing.test.ts` — CLI Vitest
coverage for VM/Docker direct-container routing and prefix
collision handling
- `shields-config-e2e` — live shields lifecycle + config get/set/rotate
To run the live E2E selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=shields-config-e2e
```
- path: "src/lib/sandbox/config.ts"
instructions: |
This file implements host-side config get/set/rotate. Changes to
config writes, hash recomputation, or privileged exec routing affect
Docker/VM sandboxes.
**Test recommendation:**
- `test/vm-driver-privileged-exec-routing.test.ts` — CLI Vitest
coverage for direct privileged exec routing used by host-side
config mutation
- `shields-config-e2e` — live config get/set/rotate while shields
transitions are exercised
To run the live E2E selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=shields-config-e2e
```
- path: "agents/hermes/**"
instructions: |
This directory contains the Hermes agent. Changes affect
multi-agent onboarding, health probes, and inference routing.
**E2E test recommendation:**
- `hermes-e2e` — Hermes onboard + health probe + live inference
- `hermes-inference-switch-e2e` — Hermes route + config.yaml patch
+ live Hermes request after switch
- `hermes-discord-e2e` — Hermes Discord config schema + placeholder
isolation
- `hermes-slack-e2e` — Hermes Slack policy + Python placeholder egress
- `hermes-onboard-security-posture-e2e` — Hermes onboard under a
non-root host security posture
- `rebuild-hermes-e2e` — Hermes upgrade path
- `rebuild-hermes-stale-base-e2e` — Hermes rebuild with stale cached base image
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=hermes-e2e,hermes-inference-switch-e2e,hermes-discord-e2e,hermes-slack-e2e,hermes-onboard-security-posture-e2e,rebuild-hermes-e2e,rebuild-hermes-stale-base-e2e
```
- path: "test/e2e/test-hermes-slack-e2e.sh"
instructions: |
This script validates Hermes Slack onboarding, policy scoping, Slack
credential providers, and Python Slack API egress through OpenShell
placeholder substitution.
**E2E test recommendation:**
- `hermes-slack-e2e` — Hermes Slack policy + Python placeholder egress
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=hermes-slack-e2e
```
- path: "scripts/patch-openclaw-chat-send.js"
instructions: &e2e-openclaw-tui-chat-correlation |
This helper patches OpenClaw chat send behavior inside the sandbox
image. Changes can affect TUI message ordering, duplicate sends, and
user/assistant turn correlation when OpenClaw is the active agent.
**E2E test recommendation:**
- `openclaw-tui-chat-correlation-e2e` - hermetic TUI chat proof for
correlated user/assistant turns
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openclaw-tui-chat-correlation-e2e
```
- path: "test/e2e/test-openclaw-tui-chat-correlation.sh"
instructions: *e2e-openclaw-tui-chat-correlation
- path: "test/openclaw-tui-chat-correlation.test.ts"
instructions: *e2e-openclaw-tui-chat-correlation
- path: "test/e2e/test-issue-4434-tui-unreachable-inference.sh"
instructions: &e2e-issue-4434-tui-unreachable-inference |
This script is the privileged live repro for #4434. Changes affect
the Linux-only NVIDIA endpoint firewall block, OpenClaw TUI error
visibility, and active-spinner shutdown proof.
**E2E test recommendation:**
- `issue-4434-tui-unreachable-inference-e2e` - opt-in live proof
that unreachable NVIDIA inference surfaces a visible TUI error and
stops the active spinner
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=issue-4434-tui-unreachable-inference-e2e
```
- path: "test/issue-4434-tui-unreachable-inference.test.ts"
instructions: *e2e-issue-4434-tui-unreachable-inference
- path: "test/e2e/test-openclaw-slack-pairing.sh"
instructions: |
This script validates OpenClaw Slack DM pairing across the gateway
and connect-shell runtime contexts with a hermetic fake Slack Socket
Mode event and fake chat.postMessage reply.
**E2E test recommendation:**
- `openclaw-slack-pairing-e2e` - Slack pairing request approval and
allowFrom state root parity
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openclaw-slack-pairing-e2e
```
- path: "test/e2e/lib/fake-slack-api.cjs"
instructions: |
This helper backs hermetic Slack REST and Socket Mode tests. Changes
can alter Slack credential rewrite assertions, fake Socket Mode
envelopes, or chat.postMessage capture.
**E2E test recommendation:**
- `messaging-providers-e2e` - Slack REST provider placeholder rewrite
- `openclaw-slack-pairing-e2e` - fake Slack Socket Mode pairing flow
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=messaging-providers-e2e,openclaw-slack-pairing-e2e
```
- path: "test/e2e/lib/slack-api-proof.sh"
instructions: |
This helper applies hermetic Slack REST and Socket Mode policies for
messaging E2E scripts. Changes can affect REST credential rewrite
probes and native websocket policy coverage.
**E2E test recommendation:**
- `messaging-providers-e2e` - Slack REST provider placeholder rewrite
- `openclaw-slack-pairing-e2e` - fake Slack Socket Mode pairing flow
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=messaging-providers-e2e,openclaw-slack-pairing-e2e
```
- path: "nemoclaw-blueprint/policies/**"
instructions: |
This directory contains network policy definitions and presets.
Changes affect sandbox egress rules and SSRF filtering.
**E2E test recommendation:**
- `network-policy-e2e` — deny-by-default, whitelist, hot-reload, SSRF
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=network-policy-e2e
```
- path: "test/e2e/test-issue-2478-crash-loop-recovery.sh"
instructions: |
STAYS_IN_PR_UNTIL_SHIP — long-running soak test for the gateway
recovery preload chain hardening (issue #2478). Removed in the
same commit that drops the test file before merge.
**E2E test recommendation:**
- `issue-2478-crash-loop-recovery-e2e` — gateway recovery preload
chain hardening soak
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=issue-2478-crash-loop-recovery-e2e
```
- path: "test/e2e/lib/security-posture-assertions.sh"
instructions: &e2e-security-posture |
This helper asserts the Linux Docker-driver posture that protects
static rc-file shims and runtime proxy-env configure guards under
a non-root host user. Changes here affect both full onboard
security posture lanes.
**E2E test recommendation:**
- `openclaw-onboard-security-posture-e2e` — OpenClaw onboard under a
non-root host security posture
- `hermes-onboard-security-posture-e2e` — Hermes onboard under a
non-root host security posture
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openclaw-onboard-security-posture-e2e,hermes-onboard-security-posture-e2e
```
- path: "test/e2e/test-full-e2e.sh"
instructions: |
This script drives the full OpenClaw onboard path. Changes can
alter the install, sandbox creation, health, inference, and
security posture assertions used by the OpenClaw nightly lanes.
**E2E test recommendation:**
- `cloud-e2e` — full onboard + cloud inference
- `openclaw-onboard-security-posture-e2e` — OpenClaw onboard under a
non-root host security posture
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,openclaw-onboard-security-posture-e2e
```
- path: "test/e2e/test-hermes-e2e.sh"
instructions: |
This script drives the full Hermes onboard path. Changes can alter
install, sandbox creation, health, inference, and security posture
assertions used by the Hermes nightly lanes.
**E2E test recommendation:**
- `hermes-e2e` — Hermes onboard + health probe + live inference
- `hermes-onboard-security-posture-e2e` — Hermes onboard under a
non-root host security posture
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=hermes-e2e,hermes-onboard-security-posture-e2e
```
# ── Split cloud-experimental tests (#2644) ──────────────────
- path: "test/e2e/test-cloud-onboard-e2e.sh"
instructions: &e2e-cloud-onboard |
This script tests the public installer flow, Landlock read-only
enforcement, API key leak detection, and inference.local HTTPS.
**E2E test recommendation:**
- `cloud-onboard-e2e` — public installer + sandbox health + security
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-onboard-e2e
```
- path: "test/e2e/e2e-cloud-experimental/checks/**"
instructions: *e2e-cloud-onboard
- path: "test/e2e/test-cloud-inference-e2e.sh"
instructions: &e2e-cloud-inference |
This script tests live chat via inference.local and validates
the skill filesystem layout inside the sandbox.
**E2E test recommendation:**
- `cloud-inference-e2e` — live cloud inference + skill filesystem
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-inference-e2e
```
- path: "test/e2e/test-cron-preflight-inference-local-e2e.sh"
instructions: |
This script onboards a sandbox against the managed cloud
inference provider, then loads OpenClaw's cron isolated-agent
preflight runtime directly from the in-sandbox dist and calls
`preflightCronModelProvider` against the onboarded
`inference.local` provider/model, asserting the result reports
`status: "available"` and never `EAI_AGAIN` or the
"local provider endpoint is not reachable" message.
Exercises the Dockerfile fetch-guard patch that opts the cron
model-provider preflight into trusted env-proxy mode so the
managed inference hostname (`inference.local`) routes through
the OpenShell L7 proxy instead of failing pinned DNS lookup.
The scheduler boundary is intentionally bypassed: the cron CLI
surfaces require `operator.admin` scope, which the in-sandbox
auto-pair approval sweep deliberately omits.
**E2E test recommendation:**
- `cron-preflight-inference-local-e2e` — direct cron preflight
runtime probe via OpenShell L7 proxy
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cron-preflight-inference-local-e2e
```
- path: "test/e2e/test-openclaw-inference-switch.sh"
instructions: |
This script validates OpenClaw model/provider switching with
`nemoclaw inference set`, including OpenShell route state,
/sandbox/.openclaw/openclaw.json, config hash recomputation, and
live requests after the switch.
**E2E test recommendation:**
- `openclaw-inference-switch-e2e` — OpenClaw route + config patch
+ live OpenClaw request after switch
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openclaw-inference-switch-e2e
```
- path: "test/e2e/test-hermes-inference-switch.sh"
instructions: |
This script validates Hermes model/provider switching with
`nemohermes inference set`, including OpenShell route state,
/sandbox/.hermes/config.yaml, config hash recomputation, .env
preservation, and live requests after the switch.
**E2E test recommendation:**
- `hermes-inference-switch-e2e` — Hermes route + config.yaml patch
+ live Hermes request after switch
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=hermes-inference-switch-e2e
```
- path: "test/e2e/test-skill-agent-e2e.sh"
instructions: &e2e-skill-agent |
This script tests skill injection into the sandbox and verifies
the agent reads the skill and returns a verification token.
**E2E test recommendation:**
- `skill-agent-e2e` — skill injection + agent verification
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=skill-agent-e2e
```
- path: "test/e2e/e2e-cloud-experimental/features/**"
instructions: *e2e-skill-agent
- path: "test/e2e/test-docs-validation.sh"
instructions: &e2e-docs-validation |
This script validates CLI/docs parity (nemoclaw --help vs
commands.md) and markdown link resolution.
**E2E test recommendation:**
- `docs-validation-e2e` — CLI/docs parity + link validation
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=docs-validation-e2e
```
- path: "test/e2e/e2e-cloud-experimental/check-docs.sh"
instructions: *e2e-docs-validation
- path: "docs/reference/commands.md"
instructions: *e2e-docs-validation
- path: "test/e2e/test-messaging-compatible-endpoint.sh"
instructions: |
This script validates the Telegram + OpenAI-compatible endpoint
regression path with a local mock endpoint. Changes here affect
the hermetic coverage for managed inference.local routing from
messaging-triggered agent turns.
**E2E test recommendation:**
- `messaging-compatible-endpoint-e2e` — Telegram + compatible
endpoint inference.local routing
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=messaging-compatible-endpoint-e2e
```
- path: "test/e2e/test-kimi-inference-compat.sh"
instructions: &e2e-kimi-inference-compat |
This script validates Kimi K2.6 managed inference.local
compatibility with a hermetic OpenAI-compatible mock endpoint.
Changes here affect OpenClaw tool-call splitting and trajectory
proof for the Kimi compatibility path.
**E2E test recommendation:**
- `kimi-inference-compat-e2e` — Kimi managed inference.local
compatibility and safe exec splitting
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=kimi-inference-compat-e2e
```
- path: "nemoclaw-blueprint/openclaw-plugins/kimi-inference-compat/**"
instructions: *e2e-kimi-inference-compat
- path: "test/e2e/test-bedrock-runtime-compatible-anthropic.sh"
instructions: *e2e-bedrock-runtime-compatible-anthropic
- path: "test/e2e/test-openshell-gateway-upgrade.sh"
instructions: |
This script validates the old OpenShell install upgrade guard for
Linux Docker-driver gateway processes.
**E2E test recommendation:**
- `openshell-gateway-upgrade-e2e` — stale gateway process restart after
OpenShell upgrade
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=openshell-gateway-upgrade-e2e
```
- path: "test/e2e/test-gateway-health-honest.sh"
instructions: |
This script is the coverage guard for #3111. It sabotages the
openshell-gateway binary with a shim that crashes on startup and
asserts onboard does NOT falsely log "Docker-driver gateway is
healthy" and does exit non-zero. Exercises the NemoClaw-side
false-positive (detached-zombie isPidAlive + metadata-only
isGatewayHealthy) regardless of OpenShell packaging choices.
**Regression E2E test recommendation:**
- Run `regression-e2e.yaml` with the jobs input set to
gateway-health-honest-e2e to validate false-positive health
checks when the gateway binary crashes on startup (#3111).
To run selectively:
```
gh workflow run regression-e2e.yaml --ref <branch> -f 'jobs=gateway-health-honest-e2e'
```
- path: "test/e2e/test-sessions-agents-cli.sh"
instructions: &e2e-sessions-agents-cli |
This script exercises the host-side `nemoclaw <name> sessions` and
`nemoclaw <name> agents` subcommand groups end-to-end: gateway RPC
envelope round-trip for `sessions reset` / `sessions delete`, plus
passthrough for `sessions list` and `agents add` / `agents delete`.
These flows are invisible to unit tests because the wrapper layer
depends on `openshell sandbox exec` and a live OpenClaw gateway.
**E2E test recommendation:**
- `sessions-agents-cli-e2e` — sessions + agents CLI wrapper coverage
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=sessions-agents-cli-e2e
```
- path: "src/lib/actions/sandbox/sessions/**"
instructions: *e2e-sessions-agents-cli
- path: "src/lib/actions/sandbox/agents/**"
instructions: *e2e-sessions-agents-cli
- path: "src/commands/sandbox/sessions.ts"
instructions: *e2e-sessions-agents-cli
- path: "src/commands/sandbox/sessions/**"
instructions: *e2e-sessions-agents-cli
- path: "src/commands/sandbox/agents.ts"
instructions: *e2e-sessions-agents-cli
- path: "src/commands/sandbox/agents/**"
instructions: *e2e-sessions-agents-cli
- path: "test/e2e/test-jetson-nvmap-gpu.sh"
instructions: &e2e-jetson-nvmap |
This script is the reporter-workflow E2E for #4231: on a Jetson Orin
host it onboards with GPU, inspects the sandbox user's groups and
/dev/nvmap, runs the cuInit(0) CUDA proof inside the sandbox, and
asserts `nemoclaw status` reports `(CUDA verified)`. It validates that
the Jetson Docker GPU recreate grants the sandbox user the host group
owning /dev/nvmap so CUDA can initialize. Invisible to unit tests
because it needs real Tegra device nodes and a live sandbox.
**E2E test recommendation:**
- `gpu-jetson-nvmap-e2e` — Jetson /dev/nvmap CUDA usability + status
proof (Jetson-gated; needs a Jetson/Tegra GPU runner with
`vars.JETSON_E2E_ENABLED=true`)
To run selectively:
```
gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=gpu-jetson-nvmap-e2e
```
- path: "src/lib/onboard/docker-gpu-patch.ts"
instructions: *e2e-jetson-nvmap
- path: ".github/workflows/nightly-e2e.yaml"
instructions: |
This is the nightly E2E workflow definition. Changes here affect
which tests run and how they are triggered.
If a new E2E job is added, verify corresponding
`path_instructions` entries exist in `.coderabbit.yaml` for the
source files it covers.
If a job is renamed or removed, update the corresponding aggregate
job `needs` lists (`notify-on-failure`, `report-to-pr`, and
`scorecard`).
chat:
auto_reply: true