Skip to content

Prism 1.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 16:29
· 2 commits to master since this release

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.