Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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 > 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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent
, '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

Implement fallback frame matching by function name and module (Fixes VROOM-5B) - #663

Draft
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8
Draft

Implement fallback frame matching by function name and module (Fixes VROOM-5B)#663
cursor[bot] wants to merge 3 commits into
mainfrom
cursor/frame-matching-fallback-logic-34b8

Conversation

@cursor

@cursorcursorBot commented Mar 19, 2026

Copy link
Copy Markdown

Description

This PR implements fallback frame matching by function name and module to fix the issue where a regressed function's fingerprint doesn't match any frame in the profile data.

Problem

When the client sends a regressed function payload with a fingerprint, GetFrameWithFingerprint fails to find a matching frame because:

  1. The fingerprint computed by the client SDK differs from vroom's computation
  2. Differences in module/package extraction (e.g., trimPackage behavior)
  3. Edge cases in fingerprint computation (format, encoding, normalization)

This results in the error "Unable to find matching frame" and the regressed function is skipped.

Solution

Implemented a multi-tiered fallback approach:

  1. First attempt: Exact fingerprint match (existing behavior)
  2. Fallback: Try alternative fingerprint calculations for each frame:
    • Raw package path instead of trimmed package
    • File path instead of module/package
    • Module alone (ignoring package)
    • Function name alone (empty module)

Key Changes

  • Added FindFrameByFingerprintWithFallback() helper function in the frame package
  • Updated GetFrameWithFingerprint() in:
    • SampleChunk (chunk/sample.go)
    • AndroidChunk (chunk/android.go)
    • sample.Profile (sample/sample.go)
    • profile.Android (profile/android.go)
  • Added structured logging when fallback matching is used, including:
    • Target fingerprint
    • Matched frame fingerprint
    • Function name and module
    • Profile/Chunk IDs for debugging
  • Added comprehensive tests for fallback functionality
  • Graceful degradation: if both exact and fallback fail, returns ErrFrameNotFound

Testing

  • All existing tests pass
  • Added new tests in frame_fallback_test.go covering:
    • Exact matches
    • Fallback matches with different fingerprint variations
    • No match scenarios
    • Fingerprint variation computation

Impact

  • Increases resilience when fingerprint computation differs between client and server
  • Provides debugging visibility through structured logging
  • No breaking changes - existing exact match behavior is preserved
  • Graceful fallback only when needed

Fixes VROOM-5B

Open in WebOpen in Cursor

Fixes VROOM-5B
This commit adds fallback frame matching functionality to handle cases where
the fingerprint computed by the client SDK doesn't match any frame in the
profile data due to differences in fingerprint computation.
Key changes:
- Added FindFrameByFingerprintWithFallback() helper function in frame package
that tries alternative fingerprint calculations (raw package, file, module
variations) when exact fingerprint match fails
- Updated GetFrameWithFingerprint() in SampleChunk, AndroidChunk, sample.Profile,
and profile.Android to use fallback matching
- Added structured logging to track when fallback matching is used, including
target fingerprint, matched frame details, and profile/chunk IDs for debugging
- Added comprehensive tests for the fallback matching functionality
- Graceful degradation: if both exact and fallback matching fail, returns the
existing ErrFrameNotFound error
The fallback approach computes fingerprint variations for each frame by trying
different normalizations of module/package names (raw package path, file path,
empty module, etc.) to account for differences in how client SDKs and vroom
compute fingerprints.
- Run gofmt on all modified files
- Add period to comment in frame_fallback_test.go
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@cursoragent