fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter
, '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

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker - #3735

Closed
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator
Closed

fix(runtime): separate dash-prefixed Grep patterns with -- in sandbox worker#3735
yunaremaia wants to merge 2 commits into
apache:mainfrom
yunaremaia:fix/grep-dash-pattern-separator

Conversation

@yunaremaia

Copy link
Copy Markdown
Contributor

Summary

  • The sandboxed filesystem worker appended the Grep pattern as a bare positional, so ripgrep parsed a dash-prefixed pattern as flags. A leading flag exits 1, and this worker maps exit 1 to an empty match set - so the model was told a present string was absent, with no error.
  • Adds the -- argv separator the host-local workspace executor already pins (workspace-executor.ts, from feat(windows): add brokered AppContainer sandbox support #2961), plus a regression test asserting the separator position and a successful -webkit-box search.

Test plan

  • New regression test fails without the fix (asserts -- precedes the pattern in the spawned argv) and passes with it
  • Reproduced against real ripgrep 15.1.0: rg -n --no-heading --max-count=5 -webkit-box style.css exits 1; with -- it matches
  • Full runtime suite locally: 3059/3068 pass; the 2 failures are pre-existing root-user permission tests (chmod-restricted files are readable by root, CI runs non-root) - untouched by this diff

Fixes#3733

@M4n5ter
M4n5terforce-pushed the fix/grep-dash-pattern-separator branch 3 times, most recently from 24fc00d to 6515e4dCompareAugust 26, 2026 09:47
… worker
The filesystem worker appended the pattern as a bare positional, so a
pattern starting with '-' was parsed by ripgrep as flags. A leading flag
exits 1, which maps to an empty match set - reporting strings that exist
as absent, with no diagnostic.
Adds the same '--' separator the host-local workspace executor already
pins (apache#2961), plus a regression test asserting the separator and a
successful dash-prefixed search.
Fixesapache#3733
Desktop e2e failure is the known flake tracked in apache#3727 (slash-command-menu
projection refresh); unrelated to this runtime-only diff.
@M4n5ter

Copy link
Copy Markdown
Member

Relationship note: PRs #3734, #3735, and #3903 all close #3733, touch the same two runtime files, and apply the same -- separator fix to the sandboxed Grep invocation. I could not find a canonical/supersede statement in these PR bodies or comments. At the current snapshot, #3903 is the latest-created candidate, but the owner should decide the canonical PR. Please document that relationship and mark the other attempts as superseded/close them, or explain the distinct scope, so the issue is not merged three times.

This comment records the relationship only; it is not a merge decision.


Automated review note posted by @未开智选手. This is not an independent human review; a human should verify the conclusion.

@M4n5ter

Copy link
Copy Markdown
Member

Thank you for working on this fix. I compared this implementation with #3735 and #3903. All three correctly address the same root cause by placing the user-controlled pattern after ripgrep's -- option terminator.

#3903 was selected because its regression pins both the exact terminal argv order (['--', pattern, path]) and the full worker response with the smallest production patch. It has now been merged as 07e40feed27e748870b8144b3e37bf96c2748c52, so this equivalent implementation is superseded and I am closing it to keep one canonical fix.


Posted by an automated review agent operated by @M4n5ter. This is not an
independent human review and does not satisfy the committer review required by
CONTRIBUTING.md. A human is accountable for this comment — please push back if
anything here is wrong.

简体中文

本条评论由 @M4n5ter 运行的自动化审查程序发出。它不构成 CONTRIBUTING.md
所要求的独立人类审查,也不能替代人类审查。有人类对本条评论负责,如有错误请直接指出。

@M4n5terM4n5ter closed this Aug 27, 2026
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.

bug(runtime): Grep reports "no matches" for any pattern starting with -

2 participants

@yunaremaia@M4n5ter