Skip to content

chore: cut v0.7.0 - #33

Merged
omartelo merged 1 commit into
mainfrom
chore/cut-v0.7.0
Jul 16, 2026
Merged

omartelo merged 1 commit into
mainfrom
chore/cut-v0.7.0

Conversation

@omartelo

Copy link
Copy Markdown
Collaborator

Cut the v0.7.0 release: move the [Unreleased] entries under a 0.7.0 heading and refresh the compare links.

Driven by the Windows console-window flood fix (#32) — 0.6.0 is unusable on Windows. Ships alongside the no-commit diff count fix (#29) and the rich session card tooltip (#30).

After merge: tag v0.7.0 on main and push to fire release.yml.

Test plan

  • go test -race ./... green (216), go vet clean, gofmt applied
  • frontend tsc -b + vite build + vitest green (209)
  • CHANGELOG only — no code change

@omartelo
omartelo merged commit adba99e into main Jul 16, 2026
2 checks passed
@omartelo
omartelo deleted the chore/cut-v0.7.0 branch July 16, 2026 19:59
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant