fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(web): show Monitoring on board cards instead of Working - #356

Merged
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring
Aug 6, 2026
Merged

fix(web): show Monitoring on board cards instead of Working#356
patroza merged 1 commit into
fork/devfrom
fork-dev/board-card-monitoring

Conversation

@omegent-app

Copy link
Copy Markdown

Answering "is Monitoring properly adopted" — almost. Three of four surfaces were fine; board
cards were not, and that was my sync resolution.

Audit

SurfaceBefore this PR
v1 sidebar pill (resolveThreadStatusPill)label: "Monitoring", pulse: false
v2 sidebar row (SidebarV2.tsx)label: "Monitoring", no icon, no shimmer
Board column bucketing (Board.logic.ts)Monitoring → working bucket
Board card (resolveSidebarV2TopStatus)❌ rendered as Working, with the shimmer

resolveSidebarV2Status correctly returns "monitoring", and SidebarV2Status carries it — but
resolveSidebarV2TopStatus, which BoardCard reads, folded it into Working.

Why that was wrong

Not merely a cosmetic mismatch. Both other surfaces suppress motion for monitoring on purpose:

  • v1 pill: pulse: false for monitoring vs pulse: true for working.
  • v2 row: "Steady label, no duty-cycled shimmer: monitoring is calm background presence, not active
    progress (monitoring-pill D6)."

A board card gave a watch loop animate-sidebar-working-text — the active-progress shimmer — which
is exactly the treatment that design note exists to prevent.

Cause

Mine, from the #345 import. The union was "Working" | "Approval" | "Input" | "Failed" | "Done" with
no Monitoring member, and I folded the case in rather than widening it, with the comment "reads as
Working rather than inventing one"
. Widening was the right call — the label already existed in two
other surfaces, so it was not an invention.

Change

Widen the union and give monitoring the v2 row's calm styling. Board bucketing is untouched:
Monitoring stays in the working bucket, since a monitoring thread is live rather than awaiting
review.

Validation

  • Sidebar.logic.test.ts: 121 tests pass, including two new ones asserting monitoring is calm
    and working still animates, so the two cannot silently collapse again.
  • Full recursive typecheck clean — the widened union has no other unhandled consumers.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

The upstream import wired backgroundLiveness through the v1 pill and the v2
sidebar row, both of which render Monitoring as a distinct, deliberately calm
state: the v1 pill sets pulse: false, and the v2 row uses a steady label with no
duty-cycled shimmer per monitoring-pill D6.
resolveSidebarV2TopStatus, which board cards read, was left folding monitoring
into Working during that import because its label union had no Monitoring
member. A watch loop therefore rendered on a board card with the active-progress
shimmer -- precisely the treatment the other two surfaces avoid on purpose.
Widen the union and give monitoring the same calm styling the v2 row uses.
Board column bucketing is unchanged: Monitoring stays in the working bucket,
since a monitoring thread is live rather than awaiting review.
Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@patroza
patroza merged commit 912340b into fork/devAug 6, 2026
5 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

@patroza