Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

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

Side panel sizing + vault-by-default + store sync; pending-chip hints - #71

Merged
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing
Jul 27, 2026
Merged

Side panel sizing + vault-by-default + store sync; pending-chip hints#71
kateebonner merged 2 commits into
local/amicodefrom
kate/vault-panel-sizing

Conversation

@kateebonner

Copy link
Copy Markdown
Contributor

Fast-follow to #68 from Kate's live testing:

  1. The tabs column no longer flex-fills the window. It owns a persisted width (default 400px) with a start-edge resize handle down to 240px; the chat column takes the remainder. The old chat-edge session-width handle is removed (the panel is the thing you size now).
  2. Vault by default. An open column with nothing to show used to sit on "Select a file to open" — it now fills with the vault, and closing the vault tab with nothing else open closes the column.
  3. The "vault button does nothing" bug — reproduced with a Playwright probe: closing the column via the panel toggle left the vaultPanel store open, so the titlebar button's next press toggled an invisible state. Column close now closes the store; every press has a visible effect. (The Status button was verified working — popover opens.)
  4. Pending rail chips (Pulse/Device before they exist) carry title/aria-label explaining what creates them — an unexplained dead chip reads as a bug.

Verification: typecheck clean, 442 app tests green, lint 0 errors, plus headless Playwright probes against the running app for the sync bug and both titlebar buttons.

🤖 Generated with Claude Code

kateebonnerand others added 2 commits July 27, 2026 18:35
…tore/column sync
Kate's live findings on the vault-in-side-panel move:
- The tabs column inherited the review panel's flex-fill sizing and
swallowed the window. It now owns a persisted width (panelColumn,
default 400px) with a start-edge resize handle down to 240px; the
chat takes the remainder (the old chat-edge handle is gone).
- An open column with nothing to show sat on 'Select a file to open'.
It now fills with the vault by default, and closing the vault tab
with nothing else open closes the column too.
- Closing the column desynced the vaultPanel store, so the titlebar
button's next press toggled an invisible state — 'the button does
nothing'. Column close now closes the store (reproduced and
verified via Playwright probe).
- Pending rail chips (Pulse/Device) read as broken dead buttons — they
now carry title/aria explaining what creates them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The sync effect tracked the tab store it writes, so tabs().open()
re-triggered it until the stack blew (RangeError caught via Playwright
pageerror during vault toggling). on() scopes tracking to
vaultPanel.opened() alone, with idempotence guards on the tab ops.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kateebonner
kateebonner merged commit 28f15c6 into local/amicodeJul 27, 2026
0 of 4 checks passed
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

@kateebonner