Repository navigation
Releases: pditommaso/prism-diff
Releases · pditommaso/prism-diff
Release list
Prism 1.1.0
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 withshasum -a 256 -c SHA256SUMS.
Installing
- Unzip
Prism-1.1.0-macos-arm64.zipand move Prism.app to /Applications. - The app is not notarized, so macOS quarantines the download. Clear the
flag once:xattr -dr com.apple.quarantine /Applications/Prism.app. - To use
prismfrom 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
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 prismopens one window per run listing every changed
file;prism --waitblocks 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
prismcommand 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) withPRISM_PERF_SCALE=3. Every budget is a test: the M1
engine cases, the M5 warmprismapp-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 --versionprints the version line shown in About.- Diagnostics through unified logging (
os.Logger): subsystem
io.github.pditommaso.prism, categoriesdiff,import,folder,
ipc,mergeandui. Paths and user text are logged as private.
ThePRISM_PERF_LOGtest hooks are unchanged. There is no crash or
usage reporting. - Clean-room audit,
scripts/ci/cleanroom-audit.sh, run by theguards
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
VERSIONfile is the single source of the version:
a SwiftPM build-tool plugin (Plugins/VersionPlugin) compiles it into
PrismInfo.version, with the build number fromPRISM_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 --strictand for its version strings, then
dist/Prism-<version>.zip, the standaloneprismzip, SHA256SUMS and
release notes from this section, with file times set to the commit
time. Without--dry-runit tagsv<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);CFBundleVersionis 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
prisminto/usr/local/binneeds write access there; Prism
never asks for administrator rights and suggests~/bininstead. - Changesets from
git difftoolare 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 withshasum -a 256 -c SHA256SUMS.
Installing
- Unzip
Prism-1.0.0-macos-arm64.zipand move Prism.app to /Applications. - The app is not notarized, so macOS quarantines the download. Clear the
flag once:xattr -dr com.apple.quarantine /Applications/Prism.app. - To use
prismfrom 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.