Files
openclaw/qa/scenarios/runtime/gateway-websocket-protocol-contracts.yaml
Vincent Koc 2e4683ba7f fix(qa): finish aggregate suites without shared cache races (#120816)
* fix(qa): bound parallel aggregate script runs

Punchcard-Session: amber-workshop-workshop-36
Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>

* test(tui): wait for adopted session frame

Punchcard-Session: amber-workshop-workshop-36

---------

Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>
2026-08-10 03:32:04 +08:00

37 lines
1.7 KiB
YAML

title: Gateway WebSocket runtime contracts
scenario:
id: gateway-websocket-protocol-contracts
surface: runtime
coverage:
primary:
- gateway.runtime-request-validation
- gateway.version-negotiation
- gateway.connect-challenge
- gateway.session-limits
- gateway.plugin-surface-urls
objective: Exercise Gateway WebSocket admission, runtime validation, negotiated policy, and scoped plugin surfaces through a real Gateway child.
successCriteria:
- The Gateway sends a nonce-bearing timestamped connect challenge before any client request.
- Invalid first requests close with policy violation, while valid post-connect envelopes reach runtime and method validators.
- The current protocol range connects and a disjoint range returns structured protocol-mismatch details.
- Hello policy reports the canonical payload, buffering, and tick limits.
- A fixture plugin surface URL is scoped, rotates through plugin.surface.refresh, and serves through the refreshed route.
docsRefs:
- docs/gateway/protocol.md
- docs/concepts/qa-e2e-automation.md
codeRefs:
- test/e2e/qa-lab/runtime/gateway-websocket-protocol-contracts.ts
- src/gateway/server/ws-connection/message-handler.ts
- src/gateway/server/ws-connection/connect-admission.ts
- src/gateway/server/ws-connection/connect-hello.ts
- src/gateway/server-methods/nodes.read.ts
execution:
kind: script
parallelSafe: true
path: test/e2e/qa-lab/runtime/gateway-websocket-protocol-contracts.ts
summary: Starts a real Gateway child, drives raw WebSocket clients, and fetches a capability-scoped fixture plugin route.
args:
- --artifact-base
- ${outputDir}