fix(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx
, '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(desktop): clear consumed steering queue cards - #4232

Merged
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card
Aug 30, 2026
Merged

fix(desktop): clear consumed steering queue cards#4232
liugddx merged 1 commit into
apache:mainfrom
Sun-GLiang:fix/clear-consumed-steering-card

Conversation

@Sun-GLiang

@Sun-GLiangSun-GLiang commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • retire a queued Desktop card as soon as its matching steering_message is delivered
  • preserve unrelated follow-ups while allowing a later nack queue_update to project the message again
  • cover promotion of a queued follow-up into the active turn with a regression test

Fixes#4191

Before / After

Compare both screenshots at the same lifecycle point: the follow-up has already been accepted as an immediate direction adjustment and the active turn has finished.

BeforeAfter
The consumed follow-up (for example, 然后评论“take”) still appears in the pending card above the composer with Edit and Delete actions, even though the result confirms that it ran.The consumed follow-up card disappears as soon as its matching steering_message is delivered. The composer returns to its normal empty state.

The intended visual difference is limited to removing the consumed row. Any unrelated queued follow-ups remain visible and editable; the transcript and completed result do not change.

Isolated Electron E2E comparison

The image below is not a mock, Storybook story, or reconstructed UI. Both sides are actual full-page page.screenshot() captures from separate isolated Electron E2E runs at the same post-completion lifecycle point.

Before — 6fca2f51eAfter — 45f4b9102
Before fix: actual isolated Electron E2E page captureAfter fix: actual isolated Electron E2E page capture

The comparison uses the real Electron window, Playwright, the deterministic fake backend, and a separate temporary user-data directory for every run. Both captures submit 然后评论“take” as a follow-up, promote it with 调整方向, wait until the backend confirms Acknowledged steering, and capture the UI after the turn ends.

To deterministically reproduce the observed race, the harness delivers the authoritative steering_message consumption event but withholds the later queue-convergence update. Production code is unchanged by the harness.

BuildInjected raceQueue card visible after completion
Before — 6fca2f51eYesYes — stale consumed card remains
After — 45f4b9102YesNo — consumed card is cleared
Before — 6fca2f51e controlNoNo — normal queue convergence masks the race

The control result explains why this is not reliably reproducible manually: when the later queue update arrives normally, even the pre-fix build clears the card.

Verification

  • npm --workspace @maka/desktop run typecheck
  • npm --workspace @maka/desktop run clean:main && npm --workspace @maka/desktop run build:main
  • node --test apps/desktop/dist/main/__tests__/message-queue-ui-state.test.js — 3 passed
  • npx --no-install biome check apps/desktop/src/renderer/app-shell-session-events.ts apps/desktop/src/main/__tests__/message-queue-ui-state.test.ts
  • confirmed the new focused test fails against the pre-fix event handler

The full npm --workspace @maka/desktop test command did not run to completion in the isolated worktree because its workspace-dependency prebuild could not resolve the installed Slack SDK packages and reported an installed https-proxy-agent type mismatch. The affected Desktop suite and Desktop typecheck pass.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

Maka traced the Desktop queue projection, implemented the consumed-steering cleanup and regression coverage, and drafted this PR description.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
@github-actionsgithub-actionsBot added the effort/S Under 100 readable lines label Aug 30, 2026

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthesis at exact head 45f4b9102c957906b4fa4467179149977df3cdfa (45f4b91) — fix(desktop): clear consumed steering queue cards.

All findings in this comment are from @Luna-Deep-Qronos independent review at this exact head. I did not read this diff myself; I verified that the current head has not drifted and the exact-head CI status is green (test/label SUCCESS, MERGEABLE, base already d2346707 per Luna re-check).

Actual change (per reviewer)

  • app-shell-session-events.ts:368-384: on matching steering_message, remove transient row and delete consumed card from messageQueueBySession[sessionId] by messageId; keep other entries and queueRevision; subsequent Host nack queue_update can still re-project.
  • message-queue-ui-state.test.ts:103-205: cover steering card cleanup, unrelated follow-up retention, in-flight not re-projected, and direct follow-up to steering echo path.

Gate

  • Code: GO, no P0–P3. Verified Desktop handler/state/composer/action paths, Runtime Host queue promote/pull/ack/nack/revision lifecycle, SessionProjector synthesized/direct steering deduplication, sequence/hostEpoch checks, subscription replacement and attempt fence. Queue projection order (steering_message before queue_update) correctly avoids duplicate display.
  • CI: exact-head test/label SUCCESS, MERGEABLE, REVIEW_REQUIRED/BLOCKED — requires human formal Review, no CONFLICTING, tests 3/3 + 37/37 + 18/18 pass, git diff --check pass.
  • MERGEABLE, no prior formal Review on this head.

What this synthesis could not verify

  • No real macOS UI/E2E reproduction on this head by synthesizer; relied on reviewer's state-projection coverage and hosted CI. Visual layout and Electron IPC timing not re-run here.

Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@jackwenerjackwener left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed exact head 45f4b9102c957906b4fa4467179149977df3cdfa and found no blocking issue. When the Host delivers a matching steering_message, Desktop now removes only that message's pending card while preserving unrelated follow-ups and the queue revision; any later nack queue_update remains authoritative and can restore the entry. The regression covers both the direct consumed-card path and preservation of the unrelated queue entry.

The exact-head Desktop suite passed 1677/1677. A clean synthetic merge onto current main preserved the patch exactly and passed 1687/1687; workspace dependency builds, formatting, ASF headers, diff-check, and the exact-head hosted check also passed.


Automated review notice: This comment was posted by an automated review agent operated by WAWQAQ. It is not an independent human review and does not replace one.

@liugddx
liugddx merged commit 838936c into apache:mainAug 30, 2026
2 checks passed
liuxiaocs7 added a commit to liuxiaocs7/maka that referenced this pull request Aug 30, 2026
Three renderer files tracked by the architecture ledger drifted after
the ledger was last regenerated in apache#4249, each landing without a paired
ledger update:
- app-shell-chat-actions.ts nonTriviaTokens 4363 -> 4376 (apache#4246)
- app-shell-session-events.ts nonTriviaTokens 2931 -> 3042 (apache#4232)
- import-tasks-settings-page.tsx hookCalls useEffect 4->5, useRef 3->5 (apache#3905)
CI first went red on apache#4246 and accumulated the other two, wedging the
'Check renderer architecture' job on main and every branch cut from it.
Regenerate the snapshot (--write) to match the current source; no
runtime code changes.
Generated-by: Claude Code
saltand pushed a commit to saltand/maka-agent that referenced this pull request Aug 31, 2026
Clear the Desktop queue projection as soon as the matching steering message is delivered, while preserving unrelated follow-ups and allowing later nack projections to restore the entry.
Generated-by: Maka
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/SUnder 100 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): clear a steered follow-up card after it is consumed

4 participants

@Sun-GLiang@jackwener@Astro-Han@liugddx