Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions .claude/skills/e2e/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
---
name: e2e
description: Run E2E tests for Sentry JavaScript SDK test applications
argument-hint: <test-app-name> [--variant <variant-name>]
---

# E2E Test Runner Skill

This skill runs end-to-end tests for Sentry JavaScript SDK test applications. It ensures SDK packages are built before running tests.

## Input

The user provides a test application name and optionally a variant:

- `e2e-tests/test-applications/nextjs-app-dir` (full path)
- `nextjs-app-dir` (just the app name)
- `nextjs-app-dir --variant nextjs-15` (with variant)

## Workflow

### Step 1: Parse the Test Application Name

Extract the test app name from user input:

- Strip `e2e-tests/test-applications/` prefix if present
- Extract variant flag if provided (e.g., `--variant nextjs-15`)
- Store the clean app name (e.g., `nextjs-app-dir`)

### Step 2: Determine Which Packages Need Rebuilding

If the user recently edited files in `packages/*`, identify which packages were modified:

```bash
# Check which packages have uncommitted changes
git status --porcelain | grep "^[ MARC][ MD] packages/" | cut -d'/' -f2 | sort -u

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Git command misses untracked new files in packages

Medium Severity

The git command grep "^[ MARC][ MD] packages/" only matches certain status codes but misses untracked files which use ??. When a developer adds a new file to an SDK package, it appears as ?? packages/node/newfile.ts in git status --porcelain output. Since ? is not in the character class [ MARC], these packages won't be detected as modified, causing the skill to skip rebuilding them. The E2E test would then run against stale code.

Fix in CursorFix in Web

```

For each modified package, rebuild its tarball:

```bash
cd packages/<package-name>
yarn build && yarn build:tarball
cd ../..
```

**Option C: User Specifies Packages**

If the user says "I changed @sentry/node" or similar, rebuild just that package:

```bash
cd packages/node
yarn build && yarn build:tarball
cd ../..
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing tarball existence check causes first-run failures

Medium Severity

The main workflow Step 2 only detects modified packages via git status, but never checks whether tarballs actually exist. On a first-time run or after cleaning, git status would return no modified tracked files, so no packages get rebuilt. The workflow proceeds directly to running tests, which would fail due to missing tarballs. Example 2 implies a "check for existing tarballs" step that isn't present in the main workflow.

Additional Locations (1)

Fix in CursorFix in Web


### Step 3: Verify Test Application Exists

Check that the test app exists:

```bash
ls -d dev-packages/e2e-tests/test-applications/<app-name>
```

If it doesn't exist, list available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

Ask the user which one they meant.

### Step 4: Run the E2E Test

Navigate to the e2e-tests directory and run the test:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name>
```

If a variant was specified:

```bash
cd dev-packages/e2e-tests
yarn test:run <app-name> --variant <variant-name>
```

### Step 5: Report Results

After the test completes, provide a summary:

**If tests passed:**

```
✅ E2E tests passed for <app-name>

All tests completed successfully. Your SDK changes work correctly with this test application.
```

**If tests failed:**

```
❌ E2E tests failed for <app-name>

[Include relevant error output]
```

**If package rebuild was needed:**

```
📦 Rebuilt SDK packages: <list of packages>
🧪 Running E2E tests for <app-name>...
```

## Error Handling

- **No tarballs found**: Run `yarn build && yarn build:tarball` at repository root
- **Test app not found**: List available apps and ask user to clarify
- **Verdaccio not running**: Tests should start Verdaccio automatically, but if issues occur, check Docker
- **Build failures**: Fix build errors before running tests

## Common Test Applications

Here are frequently tested applications:

- `nextjs-app-dir` - Next.js App Router
- `nextjs-15` - Next.js 15.x
- `react-create-hash-router` - React with React Router
- `node-express-esm-loader` - Node.js Express with ESM
- `sveltekit-2` - SvelteKit 2.x
- `remix-2` - Remix 2.x
- `nuxt-3` - Nuxt 3.x

To see all available test apps:

```bash
ls dev-packages/e2e-tests/test-applications/
```

## Example Workflows

### Example 1: After modifying @sentry/node

```bash
# User: "Run e2e tests for node-express-esm-loader"

# Step 1: Detect recent changes to packages/node
# Step 2: Rebuild the modified package
cd packages/node
yarn build && yarn build:tarball
cd ../..

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run node-express-esm-loader
```

### Example 2: First-time test run

```bash
# User: "Run e2e tests for nextjs-app-dir"

# Step 1: Check for existing tarballs
# Step 2: None found, build all packages
yarn build && yarn build:tarball

# Step 3: Run the test
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir
```

### Example 3: With variant

```bash
# User: "Run e2e tests for nextjs-app-dir with nextjs-15 variant"

# Step 1: Rebuild if needed
# Step 2: Run with variant
cd dev-packages/e2e-tests
yarn test:run nextjs-app-dir --variant nextjs-15
```

## Tips

- **Always rebuild after SDK changes**: Tarballs contain the compiled SDK code
- **Watch build output**: Build errors must be fixed before testing

## Integration with Development Workflow

This skill integrates with the standard SDK development workflow:

1. Make changes to SDK code in `packages/*`
2. Run `/e2e <app-name>` to test your changes
3. Fix any test failures

The skill automates the tedious parts of:

- Remembering to rebuild tarballs
- Navigating to the correct directory
- Running tests with the right flags
12 changes: 1 addition & 11 deletions CLAUDE.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -145,17 +145,7 @@ Without this file, pnpm installs from the public npm registry instead of Verdacc

#### Running a Single E2E Test

```bash
# Build packages first
yarn build && yarn build:tarball

# Run a specific test app
cd dev-packages/e2e-tests
yarn test:run <app-name>

# Run with a specific variant (e.g., Next.js 15)
yarn test:run <app-name> --variant <variant-name>
```
Run the e2e skill.

#### Common Pitfalls and Debugging

Expand Down