Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@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

Scope DiffPanel patch cache keys by theme - #94

Merged
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322
Feb 27, 2026
Merged

Scope DiffPanel patch cache keys by theme#94
juliusmarminge merged 1 commit into
mainfrom
codething/8b171322

Conversation

@juliusmarminge

@juliusmarmingejuliusmarminge commented Feb 27, 2026

Copy link
Copy Markdown
Member

Summary

  • update DiffPanel patch parsing to pass a cache scope into buildPatchCacheKey
  • scope cache keys by resolved theme (diff-panel:light / diff-panel:dark) to avoid cross-theme reuse
  • keep getRenderablePatch behavior unchanged aside from configurable cache scoping
  • add a unit test confirming buildPatchCacheKey changes when cache scope changes

Testing

  • added test: apps/web/src/lib/diffRendering.test.ts verifies different cache scopes produce different keys
  • Not run: full lint/test suite

Note

Low Risk
Low risk: changes only adjust diff parsing cache-key scoping to avoid cross-theme reuse, plus a small unit test; no data/auth flows affected.

Overview
DiffPanel now scopes patch parsing cache keys by the resolved theme (e.g. diff-panel:light vs diff-panel:dark) by threading a cacheScope into getRenderablePatch() and buildPatchCacheKey() usage, preventing cached diff artifacts from being reused across themes.

Adds a unit test ensuring buildPatchCacheKey() output changes when the provided scope changes.

Written by Cursor Bugbot for commit 8a567ba. This will update automatically on new commits. Configure here.

Note

Scope DiffPanel patch cache keys by theme and modify apps/web/src/components/DiffPanel.tsx to pass cacheScope to getRenderablePatch

Add cacheScope to getRenderablePatch and include resolvedTheme in the DiffPanel memo to derive theme-scoped patch cache keys; add a test for buildPatchCacheKey scope variance in diffRendering.test.ts.

📍Where to Start

Start with the DiffPaneluseMemo for renderablePatch in DiffPanel.tsx and then review getRenderablePatch usage of cacheScope.

Macroscope summarized 8a567ba.

Summary by CodeRabbit

Release Notes

  • Improvements

    • Enhanced diff panel rendering to properly account for theme changes, improving display consistency when switching between light and dark themes.
  • Tests

    • Added test coverage for theme-scoped caching behavior.

- pass a cache scope into `getRenderablePatch` and include resolved theme in DiffPanel cache keys
- add a test proving `buildPatchCacheKey` changes when cache scope changes
@coderabbitai

coderabbitaiBot commented Feb 27, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5748a99 and 8a567ba.

📒 Files selected for processing (2)
  • apps/web/src/components/DiffPanel.tsx
  • apps/web/src/lib/diffRendering.test.ts

Walkthrough

The changes extend the caching mechanism in diff rendering to support theme-scoped cache keys. The getRenderablePatch function now accepts an optional cacheScope parameter, and DiffPanel passes a theme-specific scope to ensure cache separation between light and dark themes. A corresponding test validates scope-dependent cache behavior.

Changes

Cohort / File(s)Summary
Cache Scope Enhancement
apps/web/src/components/DiffPanel.tsx, apps/web/src/lib/diffRendering.test.ts
Extended getRenderablePatch to accept optional cacheScope parameter (default "diff-panel"); DiffPanel now passes theme-scoped cache key (diff-panel:${resolvedTheme}) when calling the function; memoization updated to include resolvedTheme in dependencies; new test validates cache key generation differs across different scopes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description Check✅ PassedCheck skipped - CodeRabbit’s high-level summary is enabled.
Title check✅ PassedThe title directly and accurately describes the main change: scoping DiffPanel patch cache keys by theme to prevent cross-theme cache reuse.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codething/8b171322

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

@juliusmarminge
juliusmarminge merged commit 5ec8c9f into mainFeb 27, 2026
3 of 4 checks passed
radroid referenced this pull request in radroid/t3code Aug 8, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
github-actionsBot referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
radroid referenced this pull request in radroid/t3code Aug 10, 2026
…dored subtrees
Closes two advisories against the desktop app the fork ships. Upstream is still on 41.5.0, so the sync does not deliver this — it is a fork-owned pin that retires itself once upstream passes 41.10.3.
- GHSA #94 (high): a sandboxed iframe can bypass the `allow-popups` restriction via the OpenURL navigation path. Fixed in 41.10.3.
- GHSA #92 (medium): `ProtocolResponse.url` reuses the default session cache instead of the registering session. Fixed in 41.9.1.
Dependabot bumped `apps/desktop/package.json` alone, so `vp install` failed on the frozen lockfile in 40s and CI never reached typecheck. Regenerated `pnpm-lock.yaml` with `pnpm install --lockfile-only`; the diff stays inside the electron tree and nets -37 lines.
Also adds `.github/dependabot.yml` (fork-owned; upstream has none) ignoring `.repos/**`, and records the seam-ledger rows the change owes: `apps/desktop/package.json` as row 36, and `pnpm-lock.yaml` grown to risk 12416, now the top row.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@juliusmarminge