[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

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

[codex] Sanitize client runtime failure diagnostics - #3411

Merged
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics
Jun 20, 2026
Merged

[codex] Sanitize client runtime failure diagnostics#3411
juliusmarminge merged 1 commit into
codex/sanitize-client-error-logsfrom
codex/sanitize-client-runtime-diagnostics

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Jun 20, 2026

Copy link
Copy Markdown
Member

Summary

  • project shell cache, session bootstrap, and supervisor defects into the shared safe error-log attributes instead of serializing messages, nested errors, or Cause.pretty output
  • keep archived-thread and shell synchronization UI failures generic rather than exposing remote or persistence error messages
  • retain safe correlation data and stack frames through the shared projection

This is stacked on #3405 for the shared safe projection. The separate approved #3255 owns the connection error schema cause fields, so this PR intentionally avoids overlapping connection/model.ts.

Validation

  • vp test packages/client-runtime/src/errors packages/client-runtime/src/state/archivedThreads.test.ts packages/client-runtime/src/state/session.test.ts packages/client-runtime/src/state/shell.test.ts packages/client-runtime/src/state/shell-sync.test.ts packages/client-runtime/src/connection/supervisor.test.ts (46 tests)
  • vp check
  • vp run typecheck

Note

Low Risk
Intentional reduction of error detail in UI and logs; no auth or data-path logic changes, with tests covering archived-thread message sanitization.

Overview
Sanitizes client-runtime failure handling so logs and reactive state no longer surface raw error messages, nested errors, or full Cause.pretty output.

Connection supervisor unexpected-defect logs now record cause.reason_count and safeErrorLogAttributes from the die defect instead of a pretty-printed cause. Session bootstrap and shell cache/persist/sync warnings use the same safe projection for structured logs; shell stream failures still log the real error safely but set UI state to the fixed message "Could not synchronize environment data."Archived thread snapshot failures always expose "Failed to load archived threads." in atom state, with a test asserting sensitive Error.message text is not leaked.

Behavior change: operators and users see generic copy where underlying persistence/remote messages used to appear; diagnostics remain in logs via sanitized type/name/tag/trace/stack fields.

Reviewed by Cursor Bugbot for commit 44a4c95. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Sanitize client runtime failure diagnostics to avoid exposing raw error details

  • In supervisor.ts, replaces the pretty-printed cause in defect logs with reason_count and sanitized error attributes via safeErrorLogAttributes.
  • In archivedThreads.ts, archived thread snapshot failures now always return the generic message 'Failed to load archived threads.' instead of the underlying error message.
  • In session.ts and shell.ts, initial config load and shell sync error logs now use sanitized attributes instead of raw error objects.
  • Behavioral Change: error messages surfaced to callers and logs are now generic/sanitized; previously, raw error messages may have been exposed in state and structured logs.

Macroscope summarized 44a4c95.

@coderabbitai

coderabbitaiBot commented Jun 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 9c841aea-ed53-4645-a200-539fbe690e6e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sanitize-client-runtime-diagnostics

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Jun 20, 2026
Co-authored-by: codex <codex@users.noreply.github.com>
@juliusmarminge
juliusmarmingeforce-pushed the codex/sanitize-client-runtime-diagnostics branch from 215e185 to 44a4c95CompareJune 20, 2026 17:39
@macroscopeapp

macroscopeappBot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved

This PR sanitizes error logging by replacing potentially sensitive error messages with generic user-facing strings and a safe metadata extraction utility. The changes are security-focused, well-scoped, and include test coverage confirming sensitive data is not exposed.

You can customize Macroscope's approvability policy. Learn more.

@juliusmarminge
juliusmarminge merged commit b8e22c7 into codex/sanitize-client-error-logsJun 20, 2026
16 checks passed
@juliusmarminge
juliusmarminge deleted the codex/sanitize-client-runtime-diagnostics branch June 20, 2026 17:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M30-99 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge