Three places where the tool window shows nothing and explains nothing. All small, all in StacktalePanel / ReportNavigator.
1. A log with zero reports renders as a blank window
refresh() handles "no file found" with a helpful message (:115-120), but the case where the file exists and yields no reports falls into the else at :139, which sets the detail text to "" and leaves an empty list. That is indistinguishable from a plugin that failed to load.
It is a real state: right after rotation, or a file containing only a session marker and repeat lines.
Fix: in that branch, say so — the VS Code extension words it "No error reports yet — the file has none." — and include the resolved path.
2. Double-clicking a report with no culprit does nothing
ReportNavigator.navigate returns false when there is no frame (:19), and the return value is discarded at StacktalePanel.java:174. The row looks identical to a navigable one.
This is not an edge case: ERROR (no exception): ... reports are a documented class in FORMAT.md with no stack at all, plus every case in the parser-conformance issue.
Fix: when navigate returns false, show a notification or set the detail pane to "report #id has no source frame to open".
3. You cannot tell which errors-ai.log you are reading
findLog() (:150-164) prefers the project root and otherwise takes whatever the index hands back first, from an unordered collection — order is undefined and can change between sessions. In a monorepo with services/orders/errors-ai.log and services/billing/errors-ai.log and none at the root, you can be debugging the wrong service with no way to notice.
Fix (minimum): show the resolved path in the tool-window subtitle. Fix (proper): the path setting in #5, plus a combo box in the toolbar listing every indexed errors-ai.log.
Related
Jump-to-culprit has the same ambiguity: the report carries only the simple class name (StackDistiller uses simpleName(...)), so OrderService.java in two modules is unresolvable from the frame alone, and ReportNavigator.java:23-25 takes .next() from an unordered collection. On more than one match, show a popup. Better: rank candidates using the abbreviated logger FQCN on the report's log: line, which is already in the block.
Verify
./gradlew runIde against a project with an empty errors-ai.log, a no-throwable report, and two modules each containing an OrderService.java.
Three places where the tool window shows nothing and explains nothing. All small, all in
StacktalePanel/ReportNavigator.1. A log with zero reports renders as a blank window
refresh()handles "no file found" with a helpful message (:115-120), but the case where the file exists and yields no reports falls into theelseat:139, which sets the detail text to""and leaves an empty list. That is indistinguishable from a plugin that failed to load.It is a real state: right after rotation, or a file containing only a session marker and repeat lines.
Fix: in that branch, say so — the VS Code extension words it "No error reports yet — the file has none." — and include the resolved path.
2. Double-clicking a report with no culprit does nothing
ReportNavigator.navigatereturnsfalsewhen there is no frame (:19), and the return value is discarded atStacktalePanel.java:174. The row looks identical to a navigable one.This is not an edge case:
ERROR (no exception): ...reports are a documented class in FORMAT.md with no stack at all, plus every case in the parser-conformance issue.Fix: when
navigatereturns false, show a notification or set the detail pane to "report #id has no source frame to open".3. You cannot tell which errors-ai.log you are reading
findLog()(:150-164) prefers the project root and otherwise takes whatever the index hands back first, from an unordered collection — order is undefined and can change between sessions. In a monorepo withservices/orders/errors-ai.logandservices/billing/errors-ai.logand none at the root, you can be debugging the wrong service with no way to notice.Fix (minimum): show the resolved path in the tool-window subtitle. Fix (proper): the path setting in #5, plus a combo box in the toolbar listing every indexed
errors-ai.log.Related
Jump-to-culprit has the same ambiguity: the report carries only the simple class name (
StackDistillerusessimpleName(...)), soOrderService.javain two modules is unresolvable from the frame alone, andReportNavigator.java:23-25takes.next()from an unordered collection. On more than one match, show a popup. Better: rank candidates using the abbreviated logger FQCN on the report'slog:line, which is already in the block.Verify
./gradlew runIdeagainst a project with an emptyerrors-ai.log, a no-throwable report, and two modules each containing anOrderService.java.