PRs are welcome. This is a personal-use app, so the bar is "would Jakob want this in his own daily workflow?", not "does this serve a wide user base?". Small focused changes land fastest.
Run the test suite. Both invocations should print a passing summary:
swift testxcodebuild \
-project Flytrap.xcodeproj \
-scheme Flytrap \
-configuration Release \
-derivedDataPath build \
CODE_SIGN_IDENTITY="-" \
CODE_SIGNING_REQUIRED=NO \
CODE_SIGNING_ALLOWED=NO \
buildCI will run both on push, but it's faster to find issues locally first.
- Match the surrounding style. Most of the codebase is SwiftUI/AppKit hybrid with
@MainActorisolation; if you're adding async work, preferMainActor.assumeIsolated { ... }overTask { @MainActor in ... }inside Timer / completion-handler callbacks (seeAppState.swiftfor the canonical pattern; theTaskform trips Swift 6 strict concurrency). - Don't change the on-disk format of daily notes (
<vault>/Captures/YYYY-MM-DD.md). The exact format —\n---\n\nseparator,## H:mm atime heading,![[attachments/X|500]]Obsidian wikilinks for media — is a contract with downstream consumers (Obsidian itself, and at least one author's Python pipeline). If you want to evolve it, open an issue first to discuss. - Tests live in
FlytrapTests/. New behaviour should land with new tests. Bugfixes should land with a regression test that fails onmainand passes with the fix.
- Bugfixes (especially with a failing-test repro)
- New
CaptureItemtypes (e.g. PDFs, audio files) with bundled-resource / serialization support - Modernizations of the inherited Zoidberg patterns (e.g.
MainActor.assumeIsolatedrewrites, replacing CarbonRegisterEventHotKeywith the modernKeyboardShortcutsAPI, etc.) - macOS-version-specific UI polish (Tahoe / Sequoia behaviours)
- New external dependencies. The dep graph is one package (
soffes/HotKey) on purpose. - Anything that replaces
UserDefaultswith a heavier persistence layer. - Cross-platform ports (Linux/Windows). The app is intentionally macOS-only.
- Asset-catalog migrations. The current
PBXResourcesBuildPhase+ loose.icns/MenubarIcon{,@2x}.pngsetup works with bothxcodebuildand SwiftPM; an Asset Catalog would only work withxcodebuild.
GitHub Issues. For security issues, see SECURITY.md — please don't file those publicly.