Skip to content

BetterPullReview v0.2.0

Pre-release
Pre-release

Choose a tag to compare

@MikeMarcin MikeMarcin released this 14 Oct 18:19
· 2223 commits to main since this release

BetterPullReview 0.2.0

Private macOS-only prerelease targeting macOS 13 or newer, universal Apple
Silicon and Intel. Windows and Ubuntu packages are not part of this release.
Version 0.1.10 was prepared but never released; 0.2.0 replaces it and includes
every change since 0.1.9, including the items drafted for 0.1.10. Distribution
builds retain the full agent and local automation capabilities.

Included

This release includes the 0.1.9 functionality and these changes.

Home and pull request lists

  • Home names the author of every pull request that is not yours, shows each
    row's age, green and red line totals and comment count, and counts waiting
    reviewers on your authored rows. Overview keeps the reviewers' names.
  • A known pull request title now leads each Home row; repository and number
    are secondary and omit what the row's group already names.
  • The Reviewer and Requested filters no longer hide a GitHub CLI account's
    pull requests, and Repository grouping changes the list, persisting across
    restarts.
  • An entry can be removed from Recently viewed through its menu or with
    Delete or Backspace. Removal applies to every window of the profile and
    persists across restarts.
  • Home and Overview describe waiting and merge requirements more calmly:
    named reviewers replace generic counts, long lists end with "and N more",
    and Overview lists each unmet condition and each outstanding reviewer on its
    own line, with code owners marked and caveats in the details.
  • A pull request you had reviewed whose head has since changed stays under
    Needs me on its first open after a restart.

Find and Search

  • Find (Command+F) opens a floating find box at the top right of the current
    pane, over the code, in the style of VS Code; the panes do not move or
    shrink. Enter and Shift+Enter, F3 and Shift+F3, or the arrows step through
    matches, shown as "N of M". Every match is lightly highlighted, the current
    one more strongly, and matches are marked on the scroll track. Command+F
    with a word selected starts at that occurrence. Esc closes it and returns to
    the code.
  • The find box has Match Case, Whole Word and Regular Expression toggles inside
    the query field, plus Find in Selection. Option+W toggles Whole Word and
    Option+L Find in Selection while typing. An invalid regular expression is
    marked on the field and explained in its tooltip.
  • Find in Files (Command+Shift+F) searches every changed file of the pull
    request, on both sides of the comparison, from a Search view in the style of
    VS Code. Left and Right filter chips choose which side's matches to show.
    Results are grouped by file, with each file's match count and whether it was
    added, removed or renamed. Each match row shows its side, line number and
    the line in the code font, with the match highlighted. F4 and Shift+F4 step
    through results, and opening a result goes to the exact file, side and
    match.
  • Find in Files takes the same Match Case, Whole Word and Regular Expression
    toggles (regular expressions through the RE2 library, with Unicode case
    folding), and include and exclude path patterns behind its "…" button. It
    reports partial or limited coverage instead of "No results".

Reviewing diffs

  • Next file, Previous file, Next change and Previous change now enter Review
    from Overview, Discuss or Threads.
  • View > Go to header/source (Option+O) jumps between a C++ source file and
    its header when both are in the review, preferring the closest directory
    match.
  • Touchpad scrolling moves the diff smoothly by fractions of a line, and
    horizontal panning no longer slips a line vertically on small finger
    movements. Keyboard navigation places a partly hidden selected line flush
    with the nearest visible edge.
  • Moving down from a selected line far outside the view now scrolls the next
    line into view.
  • The review title and Open on GitHub button appear as soon as the pull
    request's content arrives, without visiting Home or resizing the window.
  • With enlarged system fonts, the review navigation keeps its full group
    names and the overview controls stay usable when a scrollbar narrows the
    sidebar.
  • C++ highlighting distinguishes namespaces and enum members, with their own
    rows in the Appearance Syntax colours, and recognizes more identifier cases
    that it previously misclassified.
  • Lines are counted as Git counts them, so a lone carriage return no longer
    starts a new line. Comments placed after one in such a file now name the
    correct line on GitHub.
  • Multi-line comment ranges are accepted across hunks that one unchanged line
    separates, as GitHub accepts them.
  • The highlighting of what changed inside a line now uses the dtl library,
    and marks changes in many lines it previously left unhighlighted.
  • Diff computation now uses Git's xdiff (Myers with the indent heuristic) as
    its line matcher, so hunks agree more closely with GitHub's. xdiff ships as
    its own separately replaceable LGPL-2.1 shared library,
    libbpr_xdiff.dylib, in the same arrangement as Qt; its notice is in
    THIRD-PARTY-NOTICES and its source is in the corresponding-source ZIP.

Comments and conversations

  • Reopening a pull request from Recently viewed or a pasted link always reads
    it fresh from GitHub, so comments published since the last visit appear.
  • After you submit a review or publish a comment or reply, the window rereads
    the pull request by itself and keeps your place: modality, selected file and
    open note are unchanged, and a file you pick while the reread lands stays
    picked.
  • A comment whose publication outcome is unknown keeps its Retry across a
    reread or Refresh.
  • On Discuss, the blue new-post counts line up whether or not a note is
    resolved or carries an unsent reply.
  • Refreshing a comparison while private drafts are being restored no longer
    leaves saved replies unable to be discarded.
  • The suggestion editor, which is also the Review Cycles file pane, moves,
    deletes and draws by character as you see it, so wide CJK text, combining
    accents, flags and emoji sequences are no longer split or overlapped.

GitHub CLI accounts and publishing

  • The chosen GitHub CLI connection is remembered across launches for each
    server, restoring the same host, login and account without asking again.
    It can be replaced, signed out or forgotten.
  • Every GitHub CLI operation uses the chosen account's own credential and
    stops with a named reason if that credential is unavailable, instead of
    falling back to another account.
  • Publishing a review, inline comment or tour through the GitHub CLI no longer
    shows a second warning dialog; the review form's account, repository and
    head checks are the confirmation, and failures are reported by type.

Appearance and themes

  • Importing an older theme fills colour roles it does not define, such as the
    new namespace and enum-member colours, from its own base theme, so the
    preview and contrast check use the imported theme's colours.

Local workspaces and Review Cycles

  • Reading a local Git checkout follows Git's rules for repository format and
    extensions, configuration syntax, ignore-file case folding and bracket
    classes, index checks and symbolic references. A checkout Git's rules do not
    allow, or one using reftable reference storage, is refused with a named
    reason instead of being read approximately.

Reliability and performance

  • Large pull requests load faster: conversation indexing reuses each file's
    identity, Overview reuses receipt paths across refreshes, and diff line
    pairing scores similarity with the rapidfuzz-cpp library.
  • Comment bodies counted in Overview's feedback tallies are fingerprinted off
    the window thread.
  • JSON, Unicode, compressed review bundles and Git identity hashing now use
    established libraries (glaze, utf8proc, zlib, sha1collisiondetection and
    HACL* SHA-2) in place of hand-written code; their notices are in
    THIRD-PARTY-NOTICES.

Package and verification

Distribution builds disable tests. The full normal macOS gate on release source
55f4a5a510f33802cd920baf8744a10226ffd87b passed 729 tests with zero failures and
one configured Debug-only skip. That cache-bytes row passed separately in Release
mode in 84.26 seconds. The notarization retry reused this unchanged passing evidence.

The universal macOS app and DMG passed Developer ID signature checks, Apple
notarization, stapling and Gatekeeper assessment. Exact packaged-runtime and
security-mechanics audits, source binding and checksums passed before publication.

The selected set supplies the macOS DMG and app ZIP, SPDX inventory, a
separate exact-version corresponding-source ZIP
(Source-BetterPullReview-0.2.0-macos-universal-corresponding-source.zip),
checksums and provenance. The corresponding source includes the source of the
separately replaceable xdiff shared library. Every binary
recipient must retain equivalent access to the exact corresponding-source
asset at no additional charge, including matching redistribution. Source
assets, source offers, digests and tags are retained immutably until the
distribution owner documents that all obligations have ended.

Known limitations

This prerelease does not complete RFC-BPR-0038 qualification. M8/M9
clean-account vault, native Intel/platform, crash privacy and vulnerability
qualification gaps remain open. The final Grype scan returned 33 raw matches (2 Critical, 8 High, 20 Medium
and 3 Low), exit 2. Source-backed applicability proposals remain without
independent security-owner acceptance. The release owner explicitly directed
publication of this private prerelease with the reported licensing/security
qualification gaps remaining open. This direction does not turn the scan into a
pass or establish independent legal/security qualification.

After the application restarts and reconnects through the GitHub CLI, a tour
draft written before the restart may not appear in the restored window. A
tour publication that was already saved still resumes.

Installed agents and GitHub CLI are separately configured capabilities.
Profile purge excludes shared updater and registry state and is not
uninstall. Tour publication depends on exact host and transport
qualification.

The release remains private and must be marked as a GitHub prerelease without
replacing the current stable Latest release. The macOS packages are Developer-ID signed and notarized. Windows and Ubuntu
packages follow separately.