test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han
, '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

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e - #1317

Merged
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry
Jul 22, 2026
Merged

test(desktop): lock sidebar-long-sessions footer-visibility geometry in e2e#1317
Astro-Han merged 1 commit into
mainfrom
fix/1311-sidebar-footer-geometry

Conversation

@Astro-Han

@Astro-HanAstro-Han commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes#1311.

#1308 retired the screenshot harness, leaving the sidebar footer-visibility geometry invariant (the P0 WAWQAQ flagged in msg 761141c5) with no rendered regression lock: sidebar-scroll-contract.test.ts is a static grep gate over the CSS grid constraints, and scroll-geometry.spec.ts boots long-transcript and probes the chat viewport, not the sidebar.

This adds the rendered-geometry lock as a Playwright E2E: a new sidebarLongSessionsWindow fixture boots the sidebar-long-sessions scenario (60 seeded sessions, sidebar expanded), and sidebar-geometry.spec.ts asserts against the live shell that (a) the session list scroller actually overflows its constrained grid row and scrolling it moves only its own scrollTop, and (b) the footer (Settings + version) bounding rect stays fully inside both the sidebar panel and the window viewport, before and after scrolling the list to the bottom.

Notable finding from the red-proof work, now documented in the spec header: at this fixture size the historically-cited grid constraints (min-height: 0 / minmax(0, 1fr)) are mutually redundant — the declaration this spec actually bites on is .maka-session-panel { height: 100% }, which the source-grep contract does not pin. The two layers deliberately lock different declarations.

Scroll-independence caveat, documented in the spec: the scenario's active session has a short transcript, so the chat viewport never overflows; independence is asserted as "list scrollTop moves, chat scrollTop stays 0" — the meaningful form for this seed.

Externally reviewed (Codex + Kimi K3, both PASS); the accepted finding — a row-total assertion that coupled the geometry contract to unrelated baseline seed sessions — has been removed.

Verification

  • New spec green: npm --workspace @maka/desktop run e2e -- sidebar-geometry.spec.ts → 1 passed (independently re-run by the reviewer session).
  • Full e2e suite green: 32 passed.
  • Non-vacuity (break-and-restore, never committed): removing .maka-session-panel { height: 100% } reproduces the exact fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant #1311 regression (footer at bottom=2520.9 vs the 820px window, list overflow collapsed to 0) and the spec fails on both locked assertions.
  • npm run format:check and npm run lint clean.

…in e2e
Add a Playwright E2E contract that boots the `sidebar-long-sessions`
fixture (60 sessions) and asserts the rendered sidebar geometry the
retired screenshot baseline used to guard:
- the sidebar list scroller overflows its own constrained grid row and
scrolling it moves its own scrollTop while the chat viewport's
scrollTop is unaffected (the seed opens a short session, so chat
stays pinned at 0), and
- the Settings/version footer's bounding rect stays fully inside both
the sidebar panel and the window viewport, before and after scrolling
the list to the bottom.
This locks the P0 (WAWQAQ msg `761141c5`) footer-off-screen invariant
that #1308 left unlocked when it retired the screenshot harness: the
static `sidebar-scroll-contract.test.ts` only greps the CSS, and
`scroll-geometry.spec.ts` probes the chat viewport, not the sidebar.
Adds the `sidebarLongSessionsWindow` fixture following the
`longTranscriptWindow` pattern.
Fixes#1311
@Astro-Han
Astro-Hanforce-pushed the fix/1311-sidebar-footer-geometry branch from a584147 to 2a025bdCompareJuly 22, 2026 01:39
@Astro-Han
Astro-Han merged commit 7b2f80a into mainJul 22, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the fix/1311-sidebar-footer-geometry branch July 24, 2026 09:04
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.

fix(desktop): lock the sidebar-long-sessions footer-visibility geometry invariant

1 participant

@Astro-Han