👷 add dev-server CLI + manual-testing skill#4337
Conversation
55d290c to
d3fbb39
Compare
Bundles Sizes Evolution
🚀 CPU Performance
🧠 Memory Performance
|
|
✅ Tests 🎉 All green!❄️ No new flaky tests detected 🎯 Code Coverage (details) 🔗 Commit SHA: f166f10 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback! |
118d843 to
035b301
Compare
035b301 to
29fddaa
Compare
a526088 to
d8c752a
Compare
This makes the intake proxy middleware self-contained: callers no longer need to set up connect-busboy separately.
Replaces the single-file dev-server script with a daemonized CLI. The server is spawned as a detached background process, with its PID and URL persisted to `.dev-server/state` and logs written to `.dev-server/logs`. This enables reproducible manual testing workflows where the dev server URL can be referenced in PR test instructions.
d8c752a to
2157b7d
Compare
2157b7d to
dea124b
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2157b7d2ed
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| return | ||
| } | ||
|
|
||
| process.kill(state.pid) |
There was a problem hiding this comment.
Verify daemon identity before sending kill signal
stop sends process.kill(state.pid) after only checking that the PID exists; isRunning() in state.ts is just process.kill(pid, 0). If the dev-server process exited and that PID was reused, yarn dev-server stop can kill an unrelated process on the host instead of the daemon.
Useful? React with 👍 / 👎.
| // eslint-disable-next-line local-rules/disallow-test-import-export-from-src, local-rules/disallow-protected-directory-import | ||
| import { createIntakeProxyMiddleware } from '../../../test/e2e/lib/framework/intakeProxyMiddleware.ts' |
There was a problem hiding this comment.
note: I'm not too happy with this, but I'm not sure where this intakeProxyMiddleware should stay, whether in the test/e2e or the scripts folder. I chose to keep it there for now, we might have more shared code in the future, we can always revisit.
Also, move the skill to the right directory
Motivation
Manual testing of SDK features is currently hard to reproduce and share with reviewers.
When writing PR test instructions, there's no structured way to verify what events were
actually sent to intake. This PR introduces a daemonized dev-server CLI that makes
manual testing steps reproducible and self-documenting. It also ships a
/manual-testingClaude Code skill that automates the full workflow: starts the server, creates a sandbox
page, drives it with
playwright-cli, inspects intake, and outputs ready-to-paste PRtest instructions.
Changes
scripts/dev-server.tswith a daemonized CLI (yarn dev-server <command>)start: spawns the server as a detached background process, writes PID/URL to.dev-server/statestop: kills the daemon and clears statestatus: shows whether the server is running, with URL, PID, and file pathslogs: streams the server log file, with--follow/-fsupport and ANSI stripping when pipedintake: reads captured intake requests from.dev-server/intake-requests.json, with selectors(
rum-views,rum-errors,rum-actions,logs-events,replay-records, etc.), human-readableoutput by default (TTY) and NDJSON when piped (
--jsonto override)jqquery examples in--help.claude/skills/manual-testing.md— a Claude Code skill (/manual-testing) thatorchestrates the full end-to-end test flow using the dev-server CLI and
playwright-cli,then emits self-contained bash test instructions ready to paste into the PR
Test instructions
Checklist