Problem
The e2e smoke harness (apps/server/scratchpad/e2e-smoke.ts) boots the real server in-process, authenticates, opens a real WebSocket connection, and exercises 10 RPC methods end-to-end. It caught a critical regression (8 missing RPC scope declarations in #73/8834e517) that unit tests missed entirely.
The regression was missed because:
- Unit tests exercise individual deciders/services in isolation — they don't boot the full server
- Adding a method to
WsRpcGroup without a corresponding entry in RPC_REQUIRED_SCOPE causes a connection-level protocol defect that tears down the entire WebSocket — but no unit test exercises the full handler → RPC framework → WS connection path
- The merge went through without any gate that booted the real server end-to-end
The harness currently lives in apps/server/scratchpad/ and is not wired into any CI pipeline.
Proposal
Wire apps/server/scratchpad/e2e-smoke.ts into CI as a required gate for PRs. Options:
- Wrap it in a Vitest suite inside
apps/server so it runs alongside existing tests
- Add it as a separate CI job that runs after the main test suite
- Run it in the existing CI workflow as a final smoke-check step
Relevant: the existing wsRpcScopes.test.ts regression test already guards the static scope-map, but e2e-smoke guards against runtime contract-implementation drift (e.g. handler signatures not matching Rpc.make contracts after Effect v4 schema changes).
Problem
The e2e smoke harness (
apps/server/scratchpad/e2e-smoke.ts) boots the real server in-process, authenticates, opens a real WebSocket connection, and exercises 10 RPC methods end-to-end. It caught a critical regression (8 missing RPC scope declarations in #73/8834e517) that unit tests missed entirely.The regression was missed because:
WsRpcGroupwithout a corresponding entry inRPC_REQUIRED_SCOPEcauses a connection-level protocol defect that tears down the entire WebSocket — but no unit test exercises the full handler → RPC framework → WS connection pathThe harness currently lives in
apps/server/scratchpad/and is not wired into any CI pipeline.Proposal
Wire
apps/server/scratchpad/e2e-smoke.tsinto CI as a required gate for PRs. Options:apps/serverso it runs alongside existing testsRelevant: the existing
wsRpcScopes.test.tsregression test already guards the static scope-map, but e2e-smoke guards against runtime contract-implementation drift (e.g. handler signatures not matchingRpc.makecontracts after Effect v4 schema changes).