Repository navigation
feat: rich session card tooltip - #30
Merged
Merged
Conversation
Session card tooltip showed only the working directory, so a long label clipped in the card was unreadable without widening the sidebar. Expand it into a mini card that opens to the right: full label, path, branch, PR and diff badge — reusing the git/pr data the card already computes. Theme it to match the card (bg-card, border, foreground/muted text) instead of the default inverted pill, and let the tooltip arrow inherit the popup background so it follows any themed instance.
1 task done
omartelo
added a commit
that referenced
this pull request
Jul 17, 2026
* feat: adds helium browser support * ci: surface test counts + coverage in the pipeline (#25) Add ci.yml — a per-PR and push-to-main gate that runs gofmt, go vet and both suites; release.yml now runs its test steps through the same shared scripts. Both render pass/fail counts and coverage into the GitHub Actions job summary (.github/scripts/{go,web}-test-summary.sh) and still fail the job on a red test. Frontend coverage is measured over the .ts logic layer via a new @vitest/coverage-v8 devDep; the .tsx DOM/xterm boundary stays out of the denominator (invariant #1). CLAUDE.md documents the local gate — fmt, vet, test, build before every commit or PR. Previously CI ran no tests on PRs at all. * chore: mutation testing via gremlins (#24) `task mutation` runs go-gremlins/gremlins over the module; scope a package with `task mutation -- ./internal/store/`. .gremlins.yaml pins workers to 1, which is load-bearing: the default one-worker-per-CPU runs mutant test binaries in parallel and the SQLite-backed store tests then contend and time out en masse (every mutant TIMED OUT, efficacy 0%). Single-worker efficacy on internal/store is ~97% with zero timeouts. timeout-coefficient gives slow packages (terminal spawns real PTYs) headroom before a genuine hang is declared timed out. * test: cover the pre-migration store schema path (#26) open()'s ADD COLUMN migrations were only ever run against a current-schema database, where every ALTER is a duplicate-column no-op — the branch where a migration actually applies (err == nil) had no test. Seed a database with the pre-migration schema (sessions without kind/path/…, projects without position) and assert open() adds the missing columns and they round-trip through AddSession/LoadState. Mutation testing flagged the gap: internal/store efficacy goes 97.4% -> 100%, killing the surviving `err != nil` -> `err == nil` mutant at store.go:130. * feat: experimental macOS build (#27) macOS is Unix, so the terminal (creack/pty), shell and folder picker (osascript via ncruces/zenity) already run through the shared !windows seams and the whole binary cross-compiles for darwin. The one gap was browser discovery: macOS installs live in .app bundles, never on PATH. Add candidates_darwin.go + darwinBrowserCandidates (Chrome/Chromium/Edge/Brave under /Applications and ~/Applications), narrowing candidates_unix.go to `!windows && !darwin`, mirroring the Windows seam and keeping the pure list testable off-macOS. task build:mac cross-compiles arm64 + amd64; the release workflow gains a macos-latest job that runs the backend suite — real PTY tests on Apple Silicon — and ships both-arch raw binaries. Unsigned (Gatekeeper) and no .dmg yet; recorded in Known Ceilings. * docs: cut CHANGELOG v0.6.0 (#28) Move the [Unreleased] entries under a 0.6.0 - 2026-07-16 heading and refresh the compare links. 0.6.0 ships the PR-badge-on-cards feature, persistent structured logging, the Windows installer + GUI-subsystem build, discreet scrollbars, the single-line diff-reference fix, and the experimental macOS build. * docs: README platform is no longer Linux-only v0.6.0 ships experimental macOS and Windows builds. Update the platform badge and the Platform note with the per-OS runtime needs (browser + folder picker). * fix: count untracked additions in a repo with no commits (#29) Diff ran `git diff --numstat HEAD`, which errors in a freshly `git init`'d repo (no HEAD) and returned early, skipping the untracked-file counting block. The +/- badge on the session card and footer showed +0 -0 even though the review panel rendered the full diff. Resolve the diff base the way DiffText already does — fall back to git's empty tree when HEAD is missing — and wrap the numstat parse in an err == nil guard so a numstat failure never skips the untracked block. * feat: rich session card tooltip (#30) Session card tooltip showed only the working directory, so a long label clipped in the card was unreadable without widening the sidebar. Expand it into a mini card that opens to the right: full label, path, branch, PR and diff badge — reusing the git/pr data the card already computes. Theme it to match the card (bg-card, border, foreground/muted text) instead of the default inverted pill, and let the tooltip arrow inherit the popup background so it follows any themed instance. * docs: changelog for session card tooltip and no-commit diff count (#31) Backfill the two [Unreleased] entries for PRs merged after the v0.6.0 cut that did not touch CHANGELOG.md: the rich session card tooltip (#30) and the fix for the +/- diff badge showing +0 -0 in a repo with no commits (#29). * fix: stop Windows console-window flood from child processes (#32) lich's Windows binary is built for the GUI subsystem (-H=windowsgui) and has no console of its own. Any console tool it spawns via exec.Command — git, gh, claude — therefore got a fresh console window allocated by the OS per call. With git status polled every ~3s per session card and the gh PR lookup firing on every window focus, the desktop filled with console windows and the machine became unusable. Add internal/winexec.Hide, which sets CREATE_NO_WINDOW on Windows and is a no-op everywhere else, and route every Windows-reachable console spawn through it: git/gh in internal/project (via a package-local command() helper) and the claude CLI in internal/claudeplugin. * chore: cut v0.7.0 (#33) * docs: changelog for Helium browser support * test: fix build tag that broke the macOS release suite candidates_unix_test.go was tagged `!windows`, but the file it exercises (candidates_unix.go) is `!windows && !darwin`. On darwin the test still compiled in and called the *darwin* browserCandidates(), whose list is the .app paths plus chromium/google-chrome — so chromium-browser, google-chrome-stable, helium-browser and brave were all absent and the membership loop hit t.Fatalf. Per-PR CI is Linux-only so it stayed green; the macOS job only runs on a release tag (release.yml), where it would turn red. - Tag the test `!windows && !darwin` so it compiles only where that browserCandidates() actually lives. - Pin the exact Unix list with slices.Equal, mirroring the darwin/windows tests — membership alone missed order and stray-entry regressions. - CI: cross-compile build + vet for linux/darwin/windows on every PR, so a broken build tag fails the PR instead of a release tag. --------- Co-authored-by: martelo <125408621+omartelo@users.noreply.github.com> Co-authored-by: omartelo <meopedevts@proton.me>
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.
What
The session card tooltip showed only the working directory. A long label that clipped in the card was unreadable without widening the sidebar.
This turns the tooltip into a mini card that opens to the right of the session card, mirroring the detail you'd want at a glance:
git/prdata the card already computes (no new fetches)Theming
The default shadcn tooltip is an inverted pill (
bg-foreground/text-background) — a white box in dark mode, jarring next to the card. This instance is themed to match the card:bg-card,border-border,foreground/mutedtext, soDiffStatrenders in its intended emerald/red.The
TooltipContentarrow color was hardcoded tobg-foreground; it now usesbg-inherit/fill-inheritso it follows the popup background. Default tooltips are unaffected (their popup is stillbg-foreground, so the arrow inherits the same color as before).Test plan
pnpm build(tsc + vite) — passingpnpm test— 209 passing🤖 Generated with Claude Code