fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

@matsvarn@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} 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(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

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

fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

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

fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

@matsvarn@shivamhwp
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } 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(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

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

fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

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

fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

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

fix(server): stop late progress from reviving idle tasks - #7129

Closed
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness
Closed

fix(server): stop late progress from reviving idle tasks#7129
matsvarn wants to merge 1 commit into
pingdotgg:mainfrom
matsvarn:fix/stale-background-liveness

Conversation

@matsvarn

@matsvarnmatsvarn commented Aug 15, 2026

Copy link
Copy Markdown

What Changed

Status-free task.progress can now maintain an existing live task, but it cannot create a new live entry by itself.

This prevents delayed descriptive progress from reviving a task after an idle or terminal update removed it. Explicit lifecycle events can still start or resume tasks.

A focused regression test covers the observed started → idle → delayed progress sequence.

Why

Providers can flush descriptive progress after a task becomes idle. ThreadBackgroundLiveness treated every non-terminal progress event as proof of live work.

The client then received backgroundLiveness: "working" while its agent fold reported zero live agents. This produced a persistent “Background work running” banner on finished threads.

Fixes#7128

UI Changes

n/a — no layout or styling change. This corrects stale server state.

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes (n/a)
  • I included a video for animation/interaction changes (n/a)

Verification

vp test run apps/server/src/orchestration
# 27 files, 272 tests passed
vp run --filter t3 typecheck
# exit 0
vp lint apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts
vp fmt --check apps/server/src/orchestration/ThreadBackgroundLiveness.ts \
apps/server/src/orchestration/ThreadBackgroundLiveness.test.ts

Without the new guard, the regression test fails with:

expected "working" to be null

Implemented with GPT-5 via the Codex desktop app.

Note

Fix recordTaskLiveness to ignore late progress events that would revive idle tasks

Progress events with undefined status no longer create a live entry in ThreadBackgroundLivenessService if the task was not already live. This prevents delayed progress updates from reviving thread liveness after a task has transitioned to idle or terminal state. The fix introduces a wasLive check computed from existing state sets before classifying the event as a drop or add.

Macroscope summarized ebe4eee.


Note

Low Risk
Narrow change to in-memory liveness bookkeeping with a focused guard and test; no auth, persistence, or API surface changes.

Overview
ThreadBackgroundLiveness no longer treats delayed, status-free progress events as proof of live work when the task is not already tracked.

After started → idle, providers can still flush descriptive task.progress payloads. Those events are ignored unless the task was already in the agent/monitor sets, so thread backgroundLiveness stays null instead of flipping back to working. Explicit lifecycle events (started, status-bearing updates) can still add or refresh entries.

A regression test covers the started → idle → delayed progress sequence.

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

@coderabbitai

coderabbitaiBot commented Aug 15, 2026

Copy link
Copy Markdown

Important

Review skipped

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

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3ca4eaec-b518-40a7-ab27-381c92b49dbb

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actionsgithub-actionsBot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 15, 2026
@matsvarn
matsvarn marked this pull request as ready for review August 15, 2026 21:13
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved ebe4eee

Straightforward bug fix adding a defensive guard to prevent late-arriving progress events from incorrectly reviving idle tasks. The change is minimal, well-commented, and includes a clear test case demonstrating the exact scenario.

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

@shivamhwpChatGPT Codex Connector

Copy link
Copy Markdown
Collaborator

codebot on behalf of shivam: thanks for the solid fix. we reproduced the bug and verified both implementations; both passed the focused suite. we merged #7172 because it scopes the liveness lookup to the status-free progress path instead of doing extra map/set lookups for every event. closing this as covered by the merged fix.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S10-29 changed lines (additions + deletions).vouch:unvouchedPR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Finished threads stay Working after delayed task progress

2 participants

@matsvarn@shivamhwp