Repository navigation
feat: Omacy engine, host app, and screensaver appex - #2
Merged
Merged
Conversation
Vendored ttfx v0.3.2 with GUI seams (fill_grid snapshot at frame emit, advance, from_name). omacy-engine session/FFI matches docs/ffi.md. Parity matrix (37 effects, two inputs, two canvases, 180 frames) is green against the ANSI oracle. Conversion goldens, Fairfax HD (OFL), and the Aerial-style host + appex sources land together. Idle and System Settings listing remain a Mac gate. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
dedene
marked this pull request as ready for review
August 27, 2026 16:27
Atomic App Group writes with last-known-good, stop-before-start lifecycle, Metal-to-CALayer canary fallback, occupancy constants, atlas white-pixel UVs, dead-session recreate, and pending config on save. Add FFI panic-invalidates-cells and max-grid budget tests. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
Replace the flat screensaver thumbnails with the asymmetric canary fixture, add a host app icon catalog, reject SVG file/data image hrefs, size the Metal drawable on attach, and cover wait-queued pending config, begin_next geometry, re-entrant step, ESC art, and the 37-effect pool in tests. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
ScreenSaverEngine can call loadView(forFrame:isPreview:). Using only loadView() sized every display from NSScreen.main and left Settings preview uncapped. Also warn when PlugInKit has both DerivedData and /Applications registered. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
Linux cannot prove the Aerial-path targets link. Add a macos-15 xcodebuild of the Omacy scheme (ad-hoc sign), skip pluginkit on CI, and put the screensaver source dir on the appex header search path. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
PaperSaver 0.2.0 needs Swift 6.2, which macos-15/Xcode 16 does not ship. Keep MACOSX_DEPLOYMENT_TARGET at 15.0. Also put cargo back on PATH inside Xcode script phases, and make OmacyRenderer an NSObject so the display-link selectors compile. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
Xcode rejected two “Build Rust engine” script phases writing the same output. The host already depends on OmacyScreensaver, so cargo runs there once and both targets link the archive. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
NSView.displayLink returns a CADisplayLink, not an Optional. Log omacy_status with String(describing:) instead of Int(), which the imported C enum does not support. Co-authored-by: Peter Dedene <dedene@users.noreply.github.com>
deinit cannot call OmacyRenderer.stop (MainActor). PreviewView is a typealias, not a subclass of final OmacyHostView. Local xcodebuild Release arm64 now produces Omacy.app with the nested screensaver appex.
Reuse the Zentty certificate repo and existing Zenjoy Developer ID cert. Match now creates per-app Developer ID profiles so the App Group entitlement can sign. Archive and notarize lanes are thin; no Sparkle.
Gym archives a universal Mac binary by default; the Rust staticlib is arm64. Pin ARCHS and sign Release by hand so archive and notarize match the Intel-out-of-scope pin.
CAMetalLayer was the view layer, so AppKit layout discarded the drawable and presented black between ticks.
The ScreenSaver-Settings.extension URL no longer lands on the Screen Saver sheet; Tahoe hosts it under Wallpaper.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements architecture revision 7: vendored ttfx, C ABI session, Metal host + appex sources.
Proven
cargo test -p omacy-engine(37-effect ANSI oracle, conversion fixtures, session/FFI, thumbnails). Vendored ttfx tests green after fill_grid patches.xcodebuildRelease arm64 BUILD SUCCEEDED. Product isOmacy.appwith nestedOmacyScreensaver.appex(be.zenjoy.omacy.screensaver,com.apple.screensaver).macOS compile CI
GitHub Actions
macos.ymlonmacos-26(unsigned; deployment target 15.0). PaperSaver 0.2.0 needs Swift 6.2.Host / appex (idle unverified)
Aerial-style host + screensaver appex, App Group
group.be.zenjoy.omacy, PaperSaver enable, Metal renderer, 60 Hz engine accumulator, canary fallback.loadView(forFrame:isPreview:)so each display and the Settings preview get the real frame.Idle, System Settings listing, multi-display paint, and signed/notarized install are not claimed. Table:
docs/macos-gates.md. Fail that gate: keep host preview, do not put the engine in the appex.Pins
ttfx v0.3.2
7203e354498462064b7c0a89375051f65cf2ce99. Wordmark from Omarchyquattro. Font: Fairfax HD, SIL OFL.Verify
On this Mac: open
apps/Omacy/Omacy.xcodeproj, set a Development Team, copy to/Applicationsor stay in DerivedData (one location), register, idle.