Releases: tomasz-tomczyk/crit
v0.11.0
What's Changed
Big milestone! Crit crossed more than 500 commits and 250 stars. You can now install it directly from homebrew and we released a Windows version!
Thank you to everyone who contributed to get us here! I'd appreciate if you would share it with your colleagues or on Twitter! It helps a lot!
crit is now in homebrew-core — no tap needed. If you installed from the tap, upgrade once with:
brew uninstall crit && brew untap tomasz-tomczyk/scratch && brew update && brew install crit
Future updates will arrive via brew upgrade like any other formula.
Windows + WSL support
feat: add Windows + WSL support replaces Unix-only syscalls with cross-platform abstractions, adds rundll32 browser launch on native Windows, and keeps the existing WSL fallback chain. crit now works end-to-end on Windows natively.
- feat: add Windows + WSL support by @tomasz-tomczyk in #459
General
- feat: add --file flag and better errors to crit comment --json by @tomasz-tomczyk in #480
- fix: deny rather than silently auto-approve on daemon shutdown by @tomasz-tomczyk in #483 - Thank you @TalAmuyal for raising!
- fix: remove daemon 1h idle timeout by @tomasz-tomczyk in #477 - Thank you @TalAmuyal for reporting!
- fix: audit fixes — path safety, shared reads, dir pruning by @tomasz-tomczyk in #485
- fix: chain reloadForScope when scope/commit changes mid-flight by @tomasz-tomczyk in #482
- fix: scope unified diff comment highlight to commented side by @tomasz-tomczyk in #479
- fix: header context chip colors and hidden unresolved count by @tomasz-tomczyk in #486
- fix: preserve CLI argument order for files by @tomasz-tomczyk in #474
- docs: switch primary brew install to homebrew-core by @tomasz-tomczyk in #481 - thanks @omervk for contributing to homebrew on our behalf!
- docs: cleanup stale spec by @tomasz-tomczyk
- refactor: drop auto-detection of stacked PRs / local stacks by @tomasz-tomczyk in #478
Full Changelog: v0.10.5...v0.11.0
v0.10.5
What's Changed
A maintenance release with broad fixes across the GitHub PR roundtrip, the comment-sync push/pull pipeline, and the local review UI — plus accessibility polish on the sidebar resize handles, a distinct "Approved" state on the review-finish modal.
General
- feat: distinct "Approved" state for review-finish modal by @tomasz-tomczyk in #427
- feat: keyboard-accessible sidebar resize handles by @tomasz-tomczyk in #469
- feat: per-round timeline backend (Stage 1) by @tomasz-tomczyk in #460
- style: bump comment input font-size to 14px by @tomasz-tomczyk in #441
- style: align textarea line-height with rendered comment bodies by @tomasz-tomczyk in #444
Fixes
- fix: tie agent goroutine to daemon shutdown ctx + add runGit helper by @tomasz-tomczyk in #433
- fix: small correctness nits (bulk parser err, scheduleWrite doc, dup mkdir) by @tomasz-tomczyk in #432
- fix: use 127.0.0.1 in internal HTTP clients to match daemon bind by @tomasz-tomczyk in #436 (Thanks @perbu for reporting)
- fix: clean message when running crit on a repo with no changes by @tomasz-tomczyk in #439 (Thanks @perbu for reporting)
- fix: hide TOC toggle for single-heading documents by @tomasz-tomczyk in #443
- fix: propagate local comment deletes to GitHub on push by @tomasz-tomczyk in #461
- fix: import GitHub thread resolved state on crit pull by @tomasz-tomczyk in #462
- fix: detect mid-push auth rotation and abort cleanly by @tomasz-tomczyk in #463
- fix: prefers-reduced-motion spinner gap; rename waitingHasComments; annotate reflow line by @tomasz-tomczyk in #465
- fix: relax comment drift detection for in-place edits by @tomasz-tomczyk in #466
- fix: atomically rewrite auth_token + identity on login by @tomasz-tomczyk in #468
- fix: close finish-review modal on backdrop click by @tomasz-tomczyk in #470
- fix: allow --range/--pr on clean working tree by @tomasz-tomczyk in #472 (Thanks @ewgdg for reporting!)
- fix: backward selection across blank-line boundary by @tomasz-tomczyk in #473 (Thanks Matt for reporting!)
Documentation
- docs: rewrite AGENTS.md with blocks by @tomasz-tomczyk in #431
Internal refactors
- chore: post-v0.10.4 audit cleanup by @tomasz-tomczyk in #426
- fix: post-v0.10.4 release audit cleanup by @tomasz-tomczyk in #475
- refactor: bundled cleanup — wrappers, mustGetwd, browser.go, error surfacing by @tomasz-tomczyk in #428
- refactor: extract review-file CLI logic out of github.go by @tomasz-tomczyk in #429
- refactor: consolidate atomic-file-write helpers by @tomasz-tomczyk in #430
- refactor: split main.go and session.go into focused files by @tomasz-tomczyk in #434
- refactor: release audit cleanup — atomic writes, flag parsing, dead code by @tomasz-tomczyk in #464
- test: cover gaps in atomic write, auth, watch, sapling, parsers by @tomasz-tomczyk in #440
- test: GitHub PR roundtrip integration harness by @tomasz-tomczyk in #445
- test: wait for PR head sha after force-push in roundtrip harness by @tomasz-tomczyk in #457
- test: integration coverage for resolved_round mapping by @tomasz-tomczyk in #467
Full Changelog: v0.10.4...v0.10.5
Spotify popup-relay preview (bb4d9fb)
WIP build of crit with share_flow: "popup" config support for SSO-protected crit-web instances.
Setup instructions: SPOTIFY-PREVIEW.md
Pair with crit-web: docker image ghcr.io/tomasz-tomczyk/crit-web:spotify-preview (release, built from branch share-receiver-elixir).
Built from commit bb4d9fb of branch share-receiver.
Feedback / issues: tomasz-tomczyk/crit-web#50
v0.10.4
What's Changed
Resizable sidebars
The file-tree panel and the comments panel both have drag handles on their inner edge. Widths persist across runs (consolidated into a single crit-settings cookie alongside the other UI prefs).
- feat: resizable file-tree and comments-panel sidebars by @tomasz-tomczyk in #422 — Thanks @hbogaeus for suggesting!
General
- feat: print "Next round" command on review exit + restructure agent prompts by @tomasz-tomczyk in #421
- feat: consolidate settings cookies, restore update dismiss by @tomasz-tomczyk in #418
- docs: add SECURITY.md by @tomasz-tomczyk in #420
- fix: confirm before discarding non-empty comment draft on Escape by @tomasz-tomczyk in #415
- fix: prevent review comment form re-opening pre-populated after submit by @tomasz-tomczyk in #419
- fix: skip stack autodetect in file mode; remove CRIT_NO_AUTODETECT by @tomasz-tomczyk in #423
- fix: route crit comment --json bulk to alt review file by reply ID by @tomasz-tomczyk in #424
Internal refactors
- chore(deps-dev): bump eslint from 10.2.1 to 10.3.0 by @dependabot in #416
- chore(deps-dev): bump stylelint from 17.9.0 to 17.9.1 by @dependabot in #417
Full Changelog: v0.10.3...v0.10.4
v0.10.3
What's Changed
PR-scoped and commit-range review
crit pr 1234 opens the PR diff scoped to the layer you're reviewing, with a stack popover for hopping between branches in the chain. crit --range A..B does the same for any commit range. The popover surfaces the default branch as a non-interactive root marker and lists every reachable tip with full-stack vs layer scope toggles, so reviewing a stacked diff feels like reviewing a single PR.
- feat: PR-scoped and commit-range review (#300) by @tomasz-tomczyk in #391 (Thanks @omry for the suggestion!)
Review-level comments
General feedback that doesn't belong on a specific line now lives in a dedicated "Review conversation" section. Add, reply, edit, resolve - same threading model as line comments, but for the review as a whole. Drafts you're typing survive sibling state changes (adding a reply elsewhere no longer wipes your in-progress comment).
- feat: give review-level comments a real conceptual home by @tomasz-tomczyk in #405 (Thanks @omry for the suggestion!)
Fixes
- fix: prefer origin/ as diff base over stale local branch by @tomasz-tomczyk in #397 (Thanks @TheCoreMan for reporting!)
- fix: persist verified user_id on auth login by @tomasz-tomczyk in #393
- fix: thread resolved share URL into lazyBackfillAuthUserID by @tomasz-tomczyk in #398
- fix: bulletproof external diff isolation (#380) by @tomasz-tomczyk in #409 (Thanks @TheCoreMan for reporting!)
- fix: require c keypress to comment on selection (#408) by @tomasz-tomczyk in #411 (Thanks @ewgdg for the suggestion!)
- fix: patch hljs markdown grammar and re-enable for diff view by @tomasz-tomczyk in #388 (Thanks @hbogaeus for reporting!)
Documentation
- docs(integrations): mention markdown in replies; print URL on daemon start by @tomasz-tomczyk in #401 (Thanks @hbogaeus for the suggestion!)
- docs: surface crit pr subcommand and --scope/--remote in printHelp by @tomasz-tomczyk in #412
Internal refactors
- chore: post-release audit fixes (Go backend) by @tomasz-tomczyk in #389
- chore: post-release audit fixes (frontend) by @tomasz-tomczyk in #390
- refactor: return errors from installAider; unify integration list by @tomasz-tomczyk in #394
- chore: wire markdown-patch smoke test into CI by @tomasz-tomczyk in #395
- ci: run nix build check on PRs by @tomasz-tomczyk in #396 - Thanks @vereis for reporting!
- test: add selfhosted+OAuth integration test suite by @tomasz-tomczyk in #400
- ci: fix invalid codecov.yml so status checks wait for all uploads by @tomasz-tomczyk in #402
- test: integration test for review-level reply round-trip by @tomasz-tomczyk in #407
- test: stabilize range-mode popover tests against async render by @tomasz-tomczyk in #410
- refactor: clean up frontend dead code and fix review:new draft loss by @tomasz-tomczyk in #413
Full Changelog: v0.10.2...v0.10.3
v0.10.2
What's Changed
- feat: send + cache verified author identity on share by @tomasz-tomczyk in #371
- fix: persist verified user_id on auth login by @tomasz-tomczyk in #393
Note: You might need to run crit auth login again to link your profile properly for the future.
- feat: distinct "Approved" state for review-finish modal by @tomasz-tomczyk in #381
- feat: improve agent integrations with global install + aider automation by @tomasz-tomczyk in #373
- fix: patch hljs markdown grammar and re-enable for diff view by @tomasz-tomczyk in #388 (Thanks @hbogaeus for reporting!)
- fix: keep SSE alive past idle timeout (Safari "Connection lost") by @tomasz-tomczyk in #376 (thanks Jared for reporting!)
- fix: expand hljs language coverage via alias resolution by @tomasz-tomczyk in #378
- fix: Ctrl+Enter to save when editing replies (#382) by @tomasz-tomczyk in #386 (Thanks @hbogaeus for reporting!)
- fix: align light theme with modern GitHub for visible diff highlights by @tomasz-tomczyk in #387 (Thanks @hbogaeus for reporting!)
- fix: Change comment submit button text to 'Add comment' by @TalAmuyal in #385 - Thank you!
- fix: strip GIT_* env from test process to prevent worktree corruption by @tomasz-tomczyk in #383
- docs: Docker recipe for sandboxed agents by @tomasz-tomczyk in #372 (Thanks Jared for the suggestion!)
- chore: wait for unit + e2e uploads before codecov status by @tomasz-tomczyk
- chore: pre-release audit fixes (Go backend) by @tomasz-tomczyk in #389
- chore: pre-release audit fixes (frontend) by @tomasz-tomczyk in #390
- refactor: return errors from installAider; unify integration list by @tomasz-tomczyk in #394
- chore: wire markdown-patch smoke test into CI by @tomasz-tomczyk in #395
- chore: move mise-trust to pre-start so worktree shell can load mise by @tomasz-tomczyk
New Contributors
- @TalAmuyal made their first contribution in #385
Full Changelog: v0.10.1...v0.10.2
v0.10.1
What's Changed
Comments panel redesign
The comments panel has been rebuilt with a segmented filter (All / Open / Resolved) and collapsible groups. Pair it with the new "hide resolved comments" setting (h shortcut) to focus on what's still open during a review.
- feat: redesign comments panel with segmented filter and collapsible groups by @tomasz-tomczyk in #354 - thanks @omervk for suggestions in this area!
General
- feat: redesign disconnected state as a sticky banner by @tomasz-tomczyk in #347 - Thanks @vereis for inspiration!
- feat: add hide-resolved setting for inline comments by @tomasz-tomczyk in #353 - Thanks @vereis for the suggestion!
- feat: store CLI args in review file and include in share payload by @tomasz-tomczyk in #349
- feat: replace custom LCS word-diff with @sanity/diff-match-patch by @tomasz-tomczyk in #348
- fix: remove blur/scrim overlay from disconnected state by @tomasz-tomczyk in #352
- fix: fetch comment replies from crit-web during share sync by @tomasz-tomczyk in #350
- fix: hide TOC panel when buildToc is called with no headings by @tomasz-tomczyk in #360
- fix: clarify Hide resolved comments label in settings by @tomasz-tomczyk in #364
- fix: hide comment-line highlight when 'h' hides resolved comments by @tomasz-tomczyk in #365
- fix: collapse reply form after submit; auto-close empty comment forms by @tomasz-tomczyk in #366
- fix: preserve replies on fingerprint-matched comments + cleanup by @tomasz-tomczyk in #367
Internal refactors
- docs: update plugin install instructions to claude CLI syntax by @tomasz-tomczyk in #351
- docs: rule on cookies vs localStorage for persisted settings by @tomasz-tomczyk
- chore: remove releasing section from AGENTS.md by @tomasz-tomczyk
- chore: add Codecov integration for unit and e2e coverage by @tomasz-tomczyk in #359
- chore: Exclude vendored Go packages from coverage profile by @tomasz-tomczyk in #361
- test: add unit tests for high-value uncovered functions by @tomasz-tomczyk in #362
- test: add comprehensive tests for server handlers, session, auth, and daemon by @tomasz-tomczyk in #363
- chore: update GitHub Actions to latest versions, add dependabot by @tomasz-tomczyk in #355
- chore(deps-dev): bump stylelint from 17.7.0 to 17.9.0 by @dependabot in #356
- chore(deps): bump mermaid from 11.13.0 to 11.14.0 by @dependabot in #357
- chore(deps-dev): bump eslint from 10.2.0 to 10.2.1 by @dependabot in #358
- chore: copy mermaid 11.14.0 to frontend/ by @tomasz-tomczyk
- chore: add mise trust to wt.toml post-start and fix e2e-share rate limiting by @tomasz-tomczyk
- refactor: hide-resolved state, persist filter, restore switch CSS by @tomasz-tomczyk in #368
- refactor: port hook lifecycle and a11y fixes from crit-web for parity by @tomasz-tomczyk in #369
Full Changelog: v0.10.0...v0.10.1
v0.10.0
What's Changed
Diff context expansion
You can now expand collapsed diff sections directly in the review UI - click gutter icons to reveal context above, below, or between hunks. Small gaps auto-expand, and sections with comments unfold automatically. Thanks @omry for suggestions in this area!
- feat: auto-expand small unchanged gaps between diff hunks (#337) by @tomasz-tomczyk in #337
- feat: add expand controls before first and after last diff hunk (#338) by @tomasz-tomczyk in #338
- feat: expand diff context incrementally (20 lines per click) (#339) by @tomasz-tomczyk in #339
- feat: GitHub-style diff expand controls with gutter icons (#343) by @tomasz-tomczyk in #343
- fix: auto-expand diff spacers when comments exist on folded lines (#333) by @tomasz-tomczyk in #333
Comment carry-forward
Review comments now follow the code - when lines move out of a diff hunk, comments render inline at their outdated position instead of disappearing.
- feat: extend comment carry-forward to code files (#324) by @tomasz-tomczyk in #324
- feat: render outdated comments inline when lines leave diff hunks (#325) by @tomasz-tomczyk in #325
- fix: preserve GitHubID in carryForwardComment to prevent duplicate PR comments (#340) by @tomasz-tomczyk in #340
Sapling SCM support
crit now works with Sapling in addition to Git. This includes automatic VCS detection, branch management, and all existing review workflows. (Thanks @omry for support!)
- feat: add Sapling SCM support (#295) by @tomasz-tomczyk in #295
- fix: separate Sapling override from auto-detected default branch (#346) by @tomasz-tomczyk in #346
General
- feat: migrate to crit design system (#327) by @tomasz-tomczyk in #327
- feat: print review file path in crit fetch output (#341) by @tomasz-tomczyk in #341
- fix: add response.ok checks and fix doFinishReview error recovery (#344) by @tomasz-tomczyk in #344
- fix: preserve reply form state when opening new comment forms (#323) by @tomasz-tomczyk in #323
- fix: match reply form font size to comment form (#322) by @tomasz-tomczyk in #322
- fix: add --no-ext-diff to git diff commands to support external diff tools (#318) by @Amwam in #318
- fix: eliminate ARM64 data race on Server.session pointer (#328) by @tomasz-tomczyk in #328
- fix: optimize LCS diff from O(m*n) to O(n) space (#329) by @tomasz-tomczyk in #329
- fix: log writeJSON encode errors instead of silently dropping them (#331) by @tomasz-tomczyk in #331
- fix: wrap errors in atomicWriteFile with operation context (#330) by @tomasz-tomczyk in #330
- fix: prevent stale pointer writes in RefreshDiffs (#345) by @tomasz-tomczyk in #345
- chore: Add benchmarks for ComputeLineDiff to catch LCS performance regressions (#332) by @tomasz-tomczyk in #332
- chore: Add wt.toml config for worktree node_modules sharing by @tomasz-tomczyk
New Contributors
Full Changelog: v0.9.3...v0.10.0
v0.9.3
What's Changed
General
- feat: include orphaned file metadata in share payload (#305) by @tomasz-tomczyk in #305
- fix: resolve WCAG AA color contrast violations (#274) (#301) by @tomasz-tomczyk in #301
- fix: add missing --fg-on-accent to light theme, remove dead vars, strengthen CSS guardrails (#315) by @tomasz-tomczyk in #315
- fix: use server-side Live field for live badge instead of reply author heuristic (#311) by @tomasz-tomczyk in #311
- fix: resolved live threads now collapse correctly (#308) by @tomasz-tomczyk in #308 - thanks for reporting Aditya!
- fix: reset viewed state when file content changes between rounds (#310) by @tomasz-tomczyk in #310
- fix: support crit pull across gh CLI versions (#299) by @omry in #299 - thanks!
- fix: improve browser launching on WSL (#298) by @omry in #298 - thanks!
Tests & internal
- fix: unify CLI and browser share code paths (#302) (#304) by @tomasz-tomczyk in #304
- test: fix live-thread E2E test, add light theme a11y check, fix integration test compile error (#316) by @tomasz-tomczyk in #316
- test: audit and clean up Playwright E2E suite (#306) by @tomasz-tomczyk in #306
- test: add e2e share integration tests for crit ↔ crit-web (#303) by @tomasz-tomczyk in #303
- test: verify MergeBase works with origin/main for #313 by @tomasz-tomczyk
- test(e2e): fix flaky file-picker filter test by @tomasz-tomczyk
- fix: stabilize integration_hashes_gen.go format across Go versions (#307) by @tomasz-tomczyk in #307
- feat: update favicons (#312) by @tomasz-tomczyk in #312
New Contributors
Full Changelog: v0.9.2...v0.9.3