Skip to content

Releases: pditommaso/prism-diff

Prism 1.1.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 09:52

Prism 1.1.0

Added

  • The changeset sidebar is resizable: drag its right edge, double-click
    it to return to the default width.
  • The divider between the A and B panes can be dragged in the Blocks and
    Fluid layouts (the whole Fluid gutter is the grip); the path bar
    follows it, each pane keeps a minimum width, and a double-click splits
    the panes evenly again.
  • New windows open with the sidebar width and pane split last dragged.
  • Folder groups in the changeset sidebar collapse and expand with a
    click, shown by a chevron and a folder icon. The file being compared
    stays open while its folder is collapsed, and Next File / Previous File
    open collapsed folders as they reach them.

Fixed

  • Folder comparison with "compare contents": files whose dates differ
    could stay marked as pending while the Mac was busy with other work
    (another folder scan, for example), because their checks got no
    processor time until the load stopped. They now run alongside it.
  • Folder comparison with "compare contents": each checked file no
    longer re-sorts its whole folder. With thousands of touched files (a
    fresh checkout, for example) the checks used to take minutes of CPU;
    they now finish in about the time it takes to read the files.

Unverified on screen

  • The 50 ms cancellation bound for a 300k-line diff (unit test) is now
    checked on a developer Mac only, like the other timing-sensitive tests:
    the shared 3-CPU CI runners miss it under load (118 ms).
  • The deep pass of the 200k-file folder tree gets a 16 s budget on CI
    (scale 8), up from 6 s: the current macos-26 runner image takes 8.6 to
    13.3 s for it with this release and with 1.0.0 alike. On a developer
    Mac it stays under 1 s, within the 2 s budget.
  • On CI, the M1 acceptance run checks that every diff stops when
    cancelled, but no longer the 50 ms bound; that bound is checked on a
    developer Mac.
  • Resizing and collapsing were checked by hand on a developer build;
    VoiceOver on the new folder rows and on the resize handles was not.
  • The release candidate itself: Prism.app from the zip is verified
    (signature, versions) but not launched.

Files

  • Prism-1.1.0-macos-arm64.zip: Prism.app (Apple silicon, macOS 14 or later). Ad-hoc signed
    with the hardened runtime and not notarized.
  • SHA256SUMS: check the downloads with shasum -a 256 -c SHA256SUMS.

Installing

  1. Unzip Prism-1.1.0-macos-arm64.zip and move Prism.app to /Applications.
  2. The app is not notarized, so macOS quarantines the download. Clear the
    flag once: xattr -dr com.apple.quarantine /Applications/Prism.app.
  3. To use prism from a terminal (git difftool and mergetool, editors,
    scripts), choose Prism > Integration… and install the command-line
    tool, or link it yourself:
    ln -s /Applications/Prism.app/Contents/Helpers/prism ~/bin/prism.

Updates: download new versions from the GitHub Releases page.

Prism 1.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:29

Prism 1.0.0

Prism 1.0: the first release of the app. A native macOS (14 or later,
Apple silicon) comparison tool for text files and folders, with one
command-line tool, prism: it opens comparisons in the app for git,
editors and scripts (ksdiff-compatible options), and runs the headless
diff, sniff and merge3 subcommands.

Highlights

  • Text comparison in Blocks, Fluid and Unified layouts, with word-level
    highlights, Ignore Whitespace, Wrap Lines, find, text size and four
    built-in themes (light or dark, multicolor or single color). Encodings,
    byte order marks, UTF-16 and RTF, PDF and office documents are imported
    as text.
  • Editing in place with live re-diff, copying changes between sides, and
    saving in the file's own encoding.
  • Three-way merge (prism --merge, git mergetool -t prism): choose
    left, right or both per conflict, edit the result, and exit 0 only for a
    saved, fully resolved merge.
  • git difftool -t prism opens one window per run listing every changed
    file; prism --wait blocks until the comparison closes.
  • Folder comparison with live refresh, filters, drill-down tabs, and
    staged copies between the two sides with a summary before copying.
  • Tabs, the file shelf, a launch window, full menus and window
    restoration (Quit and Keep Windows).
  • The Integration window installs the prism command and the git
    difftool and mergetool settings, and removes them again.

Added in milestone m11 (release hardening)

  • Performance regression suite, scripts/perf/run.sh, run in CI (job
    perf) with PRISM_PERF_SCALE=3. Every budget is a test: the M1
    engine cases, the M5 warm prism app-integration round trip (median <= 1 ms), the M8
    200k-file folder scan and live refresh, and the M3/M4 first screen
    (read, diff and model build, layout and an offscreen draw: the
    100k-line pair within 500 ms in Blocks, Unified and wrapped, and a 5 MB
    single line within 3 s). Locally, at scale 1, the first screen of the
    100k-line pair takes 60-80 ms.
  • Prism --bench-first-screen [options] A B, the headless mode behind the
    first-screen tests: no window, no Dock icon, no run loop. Prism --version prints the version line shown in About.
  • Diagnostics through unified logging (os.Logger): subsystem
    io.github.pditommaso.prism, categories diff, import, folder,
    ipc, merge and ui. Paths and user text are logged as private.
    The PRISM_PERF_LOG test hooks are unchanged. There is no crash or
    usage reporting.
  • Clean-room audit, scripts/ci/cleanroom-audit.sh, run by the guards
    CI job: every string literal and every run of words in the repository
    is compared against SHA-256 hashes of distinctive strings of the
    original app (the list holds hashes only), and, with
    PRISM_REFERENCE_SCREENS, every file against the reference screenshots
    by hash. It reports 0 matches. Five strings it found were reworded:
    Settings > Text "Turn on Wrap Lines for new comparisons", Settings >
    Folders "Show hidden files", the Integration window's "Example:"
    captions, a find bar comment and a bench help line.
  • Release flow. The VERSION file is the single source of the version:
    a SwiftPM build-tool plugin (Plugins/VersionPlugin) compiles it into
    PrismInfo.version, with the build number from PRISM_BUILD_NUMBER
    (default 1; the CI run number for releases). scripts/release.sh [--dry-run] does the whole release: preflight (tools, clean tree,
    SemVer, a dated CHANGELOG section, a new tag), a clean strict build and
    all tests, the clean-room guards, the headless acceptance scripts,
    Prism.app ad-hoc signed with the hardened runtime and checked with
    codesign --verify --deep --strict and for its version strings, then
    dist/Prism-<version>.zip, the standalone prism zip, SHA256SUMS and
    release notes from this section, with file times set to the commit
    time. Without --dry-run it tags v<version>, pushes the tag and
    publishes the GitHub release. CI runs it for a push to master whose
    commit message contains [release], after all checks pass.

Changed

  • Version 1.0.0 (CFBundleShortVersionString); CFBundleVersion is the
    build number of the release run.
  • Distribution (decision D7): a zipped, ad-hoc-signed Prism.app on GitHub
    Releases. It is not notarized: clear the quarantine flag once with
    xattr -dr com.apple.quarantine /Applications/Prism.app. There is no
    DMG, Homebrew cask or in-app updater; new versions come from GitHub
    Releases.

Known gaps

  • Not notarized (see above); Gatekeeper refuses the app until the
    quarantine flag is cleared.
  • In merge windows, long lines are clipped (no horizontal scrolling or
    wrapping), and Find, Swap A & B and the file shelf are not available.
    Images and folders cannot be merged.
  • Installing prism into /usr/local/bin needs write access there; Prism
    never asks for administrator rights and suggests ~/bin instead.
  • Changesets from git difftool are not saved with the window state.
  • File > Save stays disabled while nothing is unsaved, and there are no
    registration or update-check menu items (intended).

Unverified on screen

No GUI test runs remain before this release. Everything below is covered
by unit tests and headless runs only; the owner checks it on the release
candidate.

  • The AppKit app unit tests (and three timing-sensitive tests) run on a
    developer Mac, not on the CI runners, which have no usable display; the
    release build on CI is gated on every other test and check.
  • The release candidate itself: Prism.app from the zip has been verified
    (signature, versions) but not launched.
  • First paint and scrolling frame rates: the perf suite measures the first
    screen offscreen; missed-frame budgets during scrolling and live resize
    have no headless check.
  • Text (M03/M04): the selected-band colours and the jump to change 473
    with the layout pinned to Blocks.
  • Editing (M06): copying every change through the menus.
  • Merge (M07): the merge window itself (layouts were compared only as
    offscreen renders).
  • Folders (M08/M09): the folder window, filters, drill-down tabs, staging
    and the copy sheet; the 200k-file "first rows <= 50 ms" check once
    failed under load (62.6 ms) and passed on rerun.
  • Shell (M10): the launch window, the file shelf, the menus through
    accessibility, tab modes after View-menu presses, Quit and Keep Windows
    through its alternate menu item and the relaunch that restores three
    tabs, and Move Tab to New Window.
  • The reworded settings labels ("Turn on Wrap Lines for new comparisons",
    "Show hidden files") and the Integration window's "Example:" captions.

Files

  • Prism-1.0.0-macos-arm64.zip: Prism.app (Apple silicon, macOS 14 or later). Ad-hoc signed
    with the hardened runtime and not notarized.
  • SHA256SUMS: check the downloads with shasum -a 256 -c SHA256SUMS.

Installing

  1. Unzip Prism-1.0.0-macos-arm64.zip and move Prism.app to /Applications.
  2. The app is not notarized, so macOS quarantines the download. Clear the
    flag once: xattr -dr com.apple.quarantine /Applications/Prism.app.
  3. To use prism from a terminal (git difftool and mergetool, editors,
    scripts), choose Prism > Integration… and install the command-line
    tool, or link it yourself:
    ln -s /Applications/Prism.app/Contents/Helpers/prism ~/bin/prism.

Updates: download new versions from the GitHub Releases page.