Repository navigation
Diagnostics log and a copyable report, for slowness reports from the field - #66
Merged
Merged
Conversation
The stall watchdog and the perf counters only ever wrote to stderr, which is connected to nothing when the app is launched from a dock. The people reporting slowness are exactly those people, so the diagnostics that were always on had been reporting to nobody. - Write stall reports, watcher errors and counter dumps to a bounded diagnostics.log beside registry.json, as well as stderr. - Make perf collection switchable at runtime and remembered, from a new Diagnostics section in Settings; GITVANTAGE_PERF=1 still forces it on. - Add "Copy diagnostics report": version, OS, repo counts, uptime, heap, counters and the recent log, with no paths, remotes or branch names. - Time gh calls, track concurrent git/gh processes, count sluggish UI round-trips, and show per-interval figures beside the running totals. - Stamp the app version into the build as generated source. - Check inside the native image that another thread's stack can be read and the report produced, and make the Linux native smoke gate inject a deliberate UI stall and require it in the log with a stack. Signed-off-by: Raman Gupta <rocketraman@gmail.com>
It wore the current theme's glyph and name from when appearance was the only thing behind it. The gear is drawn rather than typed: U+2699 is claimed by colour-emoji fonts and ignores the requested colour. The fetch status now yields width before the buttons do, so "Add repo" keeps its label in a narrow window. Signed-off-by: Raman Gupta <rocketraman@gmail.com>
rocketraman
force-pushed
the
claude/diagnostics-log-and-report
branch
from
October 14, 2026 04:44
1beab16 to
918c75e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A user reported GitVantage getting very slow again on macOS. The app already had a stall watchdog (always on) and perf counters (
GITVANTAGE_PERF=1), but both wrote only to stderr — which is connected to nothing when the app is launched from a dock. The diagnostics had been reporting to nobody.What changed
Diagnostics log — stall reports, watcher errors, a line per launch and the counter dumps now go to
diagnostics.logbesideregistry.json, as well as stderr. Capped at 1MB plus one rotated generation, no fsync, and a disk it cannot write to costs the diagnostics rather than the app.Settings → Diagnostics
GITVANTAGE_PERF=1still forces it on.More in the counters
gh.<subcommand>timings alongsidegit.<subcommand>.git/ghprocesses.ui.dispatch.sluggish: UI round-trips over 100ms that fall short of a 500ms stall.Toolbar (second commit) — the "◐ System" button is now "Settings" with a drawn gear. The fetch-status text gives up width before the buttons do, so "+ Add repo" keeps its label in a narrow window.
README — a short "Reporting a slow or frozen dashboard" section.
Verification
./gradlew check: 201 unit tests, 10 architecture rules, detekt, JVM smoke checks.--smoke-testchecks run inside the native image on every platform: that one thread can read another's stack (what the watchdog depends on), and that the report can be produced and written.smokeTestNativeImage(Linux) now injects a deliberate 1.5s UI stall and fails unlessdiagnostics.logcontains it with a stack. Its hold went from 15s to 20s, and it now runs against a scratchXDG_CONFIG_HOME. Passed locally against a native build.For the reviewer
generateBuildInfo→BuildInfo.VERSION), because a native image keeps neither build-time system properties nor unregistered resources.sysctlsubprocess, which the architecture rule confining process spawning does not allow outside four files. The report shows the binary's arch.--smoke-testchecks.⚙character on worktree alert rows is unchanged and can still render as a colour emoji.