Repository navigation
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.