Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyze, plan, and execute Bright Data SDK upgrades with breaking change detection. Use when upgrading Bright Data SDK versions, detecting deprecations, or migrating to new API versions. Trigger with phrases like "upgrade brightdata", "brightdata migration", "brightdata breaking changes", "update brightdata SDK", "analyze brightdata version".
.claude/skills/jeremylongshore-brightdata-upgrade-migration/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 31% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 25% | 0% |
Inventory the exact current behavior before changing dependencies or products. Treat an SDK update, API endpoint change, Browser API rename, and product migration as separate changes with separate rollback boundaries.
Read the lockfile, adapter, and runbooks; Grep for x-luminati, old product names, obsolete endpoints, raw vendor response coupling, and undocumented ports.
Write the target dependency, API, or header mapping. Current diagnostics use Proxy-Status and x-brd-*; Browser API replaces the former Scraping Browser name. Do not invent version transitions.
Edit fixture tests for success, authentication, policy, throttle, lifecycle, schema, and delivery states. Use Bash(python:) for the pinned type and test suite and compare normalized outputs.
Run an authorized feature-flag canary, compare data and operational receipts, then remove the old path only after rollback expiry and owner signoff.
Use Read and Grep for the migration inventory. Use Write and Edit for dependency, adapter, fixture, and runbook changes. Use Bash(python:) for local tests; it does not authorize live migration traffic or credential changes.
First replace parsing of x-luminati-error with current x-brd-error and Proxy-Status fixtures. Keep a short dual-read window for retained historical receipts, but require current fields from new live responses.
| Failure | Meaning | Response | |---------|---------|----------| | Migration combines product and SDK changes | Failure attribution is impossible | Split the rollout into independently reversible steps | | Golden fixture contains live data | Test evidence is unsafe | Replace it with a synthetic contract fixture | | New path changes normalized output | Downstream behavior would drift | Hold promotion and reconcile the schema |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 12,301 | 7,590 | -38% | 1 | 1 | 0% | 2,365 | 2,734 | +16% | 0 | 0 | — |
case-02 | pass→pass | 16,755 | 3,616 | -78% | 1 | 1 | 0% | 1,425 | 1,871 | +31% | 0 | 0 | — |
case-03 | fail→pass | 6,735 | 5,096 | -24% | 1 | 1 | 0% | 1,252 | 2,267 | +81% | 0 | 0 | — |
case-04 | pass→pass | 9,445 | 5,156 | -45% | 1 | 1 | 0% | 1,688 | 2,113 | +25% | 0 | 0 | — |
case-05 | pass→pass | 3,502 | 3,271 | -7% | 1 | 1 | 0% | 649 | 1,790 | +176% | 0 | 0 | — |
case-06 | pass→pass | 7,632 | 2,488 | -67% | 1 | 1 | 0% | 1,431 | 1,717 | +20% | 0 | 0 | — |
case-07 | pass→pass | 5,048 | 4,575 | -9% | 1 | 1 | 0% | 911 | 2,119 | +133% | 0 | 0 | — |
case-08 | pass→pass | 5,341 | 2,872 | -46% | 1 | 1 | 0% | 934 | 1,710 | +83% | 0 | 0 | — |
case-09 | pass→pass | 4,311 | 2,120 | -51% | 1 | 1 | 0% | 440 | 1,598 | +263% | 0 | 0 | — |
case-10 | pass→pass | 7,973 | 2,939 | -63% | 1 | 1 | 0% | 788 | 1,722 | +119% | 0 | 0 | — |
case-11 | fail→fail | 18,621 | 15,782 | -15% | 1 | 1 | 0% | 3,099 | 4,182 | +35% | 0 | 0 | — |
case-12 | fail→pass | 12,006 | 8,282 | -31% | 1 | 1 | 0% | 2,138 | 2,695 | +26% | 0 | 0 | — |
case-13 | pass→pass | 12,870 | 11,897 | -8% | 1 | 1 | 0% | 1,994 | 3,155 | +58% | 0 | 0 | — |
case-22 | fail→fail | 13,744 | 10,550 | -23% | 1 | 1 | 0% | 2,591 | 3,169 | +22% | 0 | 0 | — |
case-14 | pass→pass | 16,583 | 8,391 | -49% | 1 | 1 | 0% | 2,941 | 2,789 | -5% | 0 | 0 | — |
case-15 | pass→pass | 12,939 | 3,006 | -77% | 1 | 1 | 0% | 2,391 | 1,659 | -31% | 0 | 0 | — |
case-16 | pass→pass | 14,552 | 10,061 | -31% | 1 | 1 | 0% | 2,558 | 3,078 | +20% | 0 | 0 | — |
case-17 | pass→pass | 11,785 | 9,511 | -19% | 1 | 1 | 0% | 2,171 | 2,971 | +37% | 0 | 0 | — |
case-18 | pass→pass | 10,239 | 4,916 | -52% | 1 | 1 | 0% | 1,786 | 2,053 | +15% | 0 | 0 | — |
case-19 | pass→pass | 9,413 | 4,276 | -55% | 1 | 1 | 0% | 1,540 | 1,858 | +21% | 0 | 0 | — |
case-20 | fail→fail | 13,887 | 11,608 | -16% | 1 | 1 | 0% | 2,777 | 3,649 | +31% | 0 | 0 | — |
case-21 | fail→fail | 12,166 | 8,584 | -29% | 1 | 1 | 0% | 2,305 | 3,003 | +30% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +14 percentage points is the difference between those two pass rates over the 22 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.