-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Project
ide
Description
In the mounted Call Stack panel, debugger adapters can return stack frames with:
presentationHint: "label"
Per the Debug Adapter Protocol, those are artificial visual label/separator rows.
But CallStackPanel still treats them like normal actionable frames.
Visible result:
- a row can be styled like a label,
- but it still shows pointer/selection behavior,
- clicking it still calls frame selection,
- and double-click can still try to navigate.
So a visual separator/label can behave like a real stack frame in the active UI.
Root Cause
The active panel explicitly detects label frames:
/src/components/debugger/CallStackPanel.tsx:64const isLabel = () => props.frame.presentationHint === "label";
And it renders them differently as label-style text:
/src/components/debugger/CallStackPanel.tsx:79-83
But the same row container always stays interactive:
/src/components/debugger/CallStackPanel.tsx:67-77cursor-pointeronClick={props.onSelect}onDblClick={props.onNavigate}
Those handlers are the normal frame actions:
/src/components/debugger/CallStackPanel.tsx:127-129handleSelectFrame(frameId)callsdebug.selectFrame(frameId)
/src/components/debugger/CallStackPanel.tsx:131-136handleNavigateToFrame(frame)dispatcheseditor:gotowhen a path exists
The mismatch is spec-visible too: the DAP StackFrame.presentationHint docs describe label as an artificial frame used as a visual label or separator, not a normal stack frame target:
- https://microsoft.github.io/debug-adapter-protocol/specification
StackFrame.presentationHintsection
So the component recognizes label rows for rendering, but does not stop them from behaving like ordinary selectable/navigable frames.
Error Message
Debug Logs
System Information
- Cortex IDE `alpha`
- Platform: anyScreenshots
output.mp4
Steps to Reproduce
- Start a debug session with an adapter that emits a stack frame using
presentationHint: "label". - Open Call Stack.
- Find the row rendered as a label/separator.
- Click it.
- Double-click it if it carries a source path.
- Observe the resulting selection/navigation behavior.
Expected Behavior
A presentationHint: "label" row should behave like a visual label/separator only.
It should not be treated like a normal selectable or navigable frame row.
Actual Behavior
The row is styled as a label, but the same container still behaves like a normal frame:
- it is clickable,
- it can become selected,
- and double-click can still trigger navigation.
Additional Context
This is not the same as the current live/local Call Stack issues:
- live
#20612Debug: Focus Call Stack command does nothing - live
#29890Run and Debug: Call Stack entries are mouse-only (clickable divs not focusable, no role/aria-selected) - live
#36743Debugger Missing Thread Selection UI (Functional Gap) - live
#37394Call Stack single-click selects a frame but only double-click actually navigates to it - live
#37408Call Stack switching threads does not refresh Watch expressions, so watch values can stay stale - live
#37418Call Stack copy tooltip hardcodes Ctrl+C on macOS - live
#37430Call Stack can keep highlighting the wrong thread after a later stop event - live
#37524Call Stack selecting a different frame does not retarget Disassembly view becauseDisassemblyViewstill usesstackFrames[0] - live
#37546Call Stack selecting a thread with no frames can leave the Variables panel showing stale scopes from the previous frame - live
#37588Call Stack copy button remains active with no frames and can overwrite the clipboard with an empty string - live
#37592Call Stack thread rows can be indistinguishable when different threads share the same name - live
#37624Call StackCopy Call Stackcan drop visible source names and replace them withunknownfor pathless frames - live
#37628Call StackRestart Framebutton can disappear when the adapter omitscanRestarton frames - local bug-report-call-stack-right-clicking-a-frame-falls-back-to-the-native-context-menu-and-loses-copy-frame-actions.md
Those issues cover command routing, generic keyboard accessibility, missing thread-selection affordance, frame click behavior, stale state after thread/frame changes, copy issues, restart-frame visibility, and lost frame context actions.
This report is specifically about presentationHint: "label" semantics in the mounted CallStackPanel.
Why it is different:
- the panel already distinguishes label rows visually,
- but it still routes them through the normal frame-selection/navigation path,
- so the bug is the label-row interaction contract itself, not generic row accessibility or another stale-state bug.
Duplicate Check
Re-checked local (bug-3, bugs-codex) and targeted live repo searches across open and closed issues with:
"Call Stack" presentationHint label"Call Stack" artificial frame"Call Stack" visual label separator- local grep for
presentationHint === "label",artificial frame,visual label, and existing Call Stack drafts
Findings:
- Local: no matching report found for this specific label-row interaction path in the mounted
CallStackPanel. - Live repo: no matching issue found in
PlatformNetwork/bounty-challengefor this exactpresentationHint: "label"Call Stack behavior at check time (2026-03-25 UTC). - Closest live/local items are different:
- frame click / double-click behavior for normal frames,
- generic row accessibility,
- stale thread/frame synchronization issues,
- copy/restart action issues.
- Why they are different:
- none of those reports cover the active
CallStackPanelrecognizingpresentationHint: "label"for visual rendering while still treating the same row as a normal selectable/navigable stack frame.
- none of those reports cover the active