<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
  <channel>
    <title>PeaceTimer</title>
    <item>
      <title>1.0.14</title>
      <sparkle:version>14</sparkle:version>
      <sparkle:shortVersionString>1.0.14</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>Add one-command setup for the CI signing secrets

Scripts/setup-signing-secrets.sh exports the codesigning identity from the login
keychain to a temporary .p12 with a random password, stores it as MACOS_CERT_P12 /
MACOS_CERT_PASSWORD on the repo, and shreds the file. The keychain approval dialog
is why this can't run unattended.</description>
      <pubDate>Fri, 31 Jul 2026 22:38:46 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0.14/PeaceTimer-1.0.14.zip" length="2587947" type="application/octet-stream" sparkle:edSignature="3kqLlT/SoLbbp8hjteEUzqLWY5QMwSJWuFqf5HPCcRnXacG9FNtFa8Y+ApQsf9X8ftW1SSR1p67TMgBpNGkOAA==" sparkle:version="14" sparkle:shortVersionString="1.0.14" />
    </item>
    <item>
      <title>1.0.13</title>
      <sparkle:version>13</sparkle:version>
      <sparkle:shortVersionString>1.0.13</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>Take version from build settings so each build reports a real version

CFBundleShortVersionString/CFBundleVersion were hardcoded to 1.0/1, so the
MARKETING_VERSION and CURRENT_PROJECT_VERSION passed by CI were ignored: every
build shipped as version 1.0 (build 1).

Beyond the wrong version string, this broke updates — Sparkle compares the
installed CFBundleVersion against the appcast, and with a constant 1 the app would
be offered the same update again after installing it. Use $(MARKETING_VERSION) and
$(CURRENT_PROJECT_VERSION) so Xcode substitutes the real values.</description>
      <pubDate>Fri, 31 Jul 2026 22:06:55 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0.13/PeaceTimer-1.0.13.zip" length="2526092" type="application/octet-stream" sparkle:edSignature="v6leQi7HC/OuhsXo3cDxAjIsjoyaDBa8rHrEg/pf9tNj/RxhcH7OXBCiAH3oW2HlwE0YwR/ure4CQvTYiSYFBA==" sparkle:version="13" sparkle:shortVersionString="1.0.13" />
    </item>
    <item>
      <title>1.0</title>
      <sparkle:version>12</sparkle:version>
      <sparkle:shortVersionString>1.0</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>CI: new app version on every push + optional real signing/notarisation

Versioning
- Compute MARKETING_VERSION as &lt;base&gt;.&lt;run_number&gt; (e.g. 1.0.42) so every push to
  main ships a genuinely new version; drop the alpha counter, the tag is just
  v&lt;version&gt;. Bump MARKETING_VERSION in project.yml for a real 1.1/2.0.

Signing (gated on secrets — CI stays green without them)
- Import MACOS_CERT_P12/MACOS_CERT_PASSWORD into a temporary keychain and sign with
  that identity, giving the app a stable TeamIdentifier. That is what lets the macOS
  Accessibility grant survive updates instead of being re-asked for every build.
- Hardened runtime + secure timestamp only when a real certificate is used; ad-hoc
  signatures cannot carry it (library validation would reject the frameworks).
- Optional notarytool submit + staple when AC_API_KEY_* are present.
- Falls back to the previous ad-hoc behaviour when no certificate is configured.</description>
      <pubDate>Fri, 31 Jul 2026 22:03:01 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0/PeaceTimer-1.0.zip" length="2526089" type="application/octet-stream" sparkle:edSignature="78ut4tlbXuHO3AZCHQJoUJJEBjop4w7+Yg+5/NXE9lW/pjOcJx7q7DfHnxJBrQoSRSPdBU7xHYB6pQTzOIf8Cg==" sparkle:version="12" sparkle:shortVersionString="1.0" />
    </item>
    <item>
      <title>1.0-alpha.8</title>
      <sparkle:version>11</sparkle:version>
      <sparkle:shortVersionString>1.0-alpha.8</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>Make the Accessibility grant stick: stable code signature

TCC keys the Accessibility permission to the app's code signature. CI builds are
ad-hoc signed (TeamIdentifier not set), and an ad-hoc identity is derived from the
binary hash — so every build looks like a different app and the grant has to be
given again, while dead entries pile up in System Settings.

- project.yml: DEVELOPMENT_TEAM so local builds are signed with a stable identity
  (CI still overrides with CODE_SIGN_IDENTITY=- so release builds are unaffected).
- Scripts/fix-accessibility.sh: re-sign an installed build inside-out (including the
  nested Sparkle helpers) with the developer identity, then clear the stale TCC
  entry. Verified on the installed app: adhoc -&gt; TeamIdentifier=FJHAUWNNBH.</description>
      <pubDate>Fri, 31 Jul 2026 21:58:57 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0-alpha.8/PeaceTimer-1.0.zip" length="2526089" type="application/octet-stream" sparkle:edSignature="oLKknzpVxs6oEIX9Q3F5S8Hg7HVOyz73I23kSqdRa00AyHEvIFHfcD0NfzaNi/8qbLZMdF3K7FuUoKUQulZfDw==" sparkle:version="11" sparkle:shortVersionString="1.0-alpha.8" />
    </item>
    <item>
      <title>1.0-alpha.7</title>
      <sparkle:version>10</sparkle:version>
      <sparkle:shortVersionString>1.0-alpha.7</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>Fix focus, notifications, and reset-file timer

Use frontmostApplication.processIdentifier directly to avoid unsafe optional handling; switch UNUserNotificationCenter.add to the async try/await API and log errors on failure; ensure checkResetFile is invoked on the MainActor from the scheduled timer via Task { @MainActor in ... }; also remove an out-of-date "(new)" comment on FinishAction.</description>
      <pubDate>Fri, 31 Jul 2026 21:48:55 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0-alpha.7/PeaceTimer-1.0.zip" length="2526088" type="application/octet-stream" sparkle:edSignature="x1oUyJ7gLc/ERShKEri5Ed09Asq/QeL/jQUj1vHX2aI1TOoTX8ay2Z9XXtmFkvdRt/A4Epe0+AXrKa5rDoMPCA==" sparkle:version="10" sparkle:shortVersionString="1.0-alpha.7" />
    </item>
    <item>
      <title>1.0-alpha.6</title>
      <sparkle:version>8</sparkle:version>
      <sparkle:shortVersionString>1.0-alpha.6</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>Drag-from-menu-bar timer, app picker on main view, one-shot message

- StatusItemController: replace MenuBarExtra with a real NSStatusItem so mouse
  events are available. Click opens the popover; click-and-drag (down or sideways)
  stretches a duration and starts the countdown on release, with haptics every 30
  minutes. MenuBarExtra exposes no mouse events, hence the AppKit move.
- DragTimeOverlay: borderless click-through window that draws a glowing beam from
  the menu-bar icon to the cursor plus a live 'HHh MMm' bubble while dragging.
- App picker moved to the main view: AI presets plus every app installed on the
  Mac; the engine now targets any bundle id / path, not just the four presets.
- Message: default is 'continue' (editable in Settings). The main-screen field is a
  one-shot override that is wiped as soon as it has been sent once.
- Mark AITarget/AppTarget nonisolated (pure data) for -default-isolation MainActor.</description>
      <pubDate>Tue, 28 Jul 2026 11:35:49 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0-alpha.6/PeaceTimer-1.0.zip" length="2479024" type="application/octet-stream" sparkle:edSignature="Gm79+XV0Gh8SlIK5WFExThEthsyk1UYfPfJQ2oo30x9qrouDUtVA8H+K4NNTVuvIKo7bH3/8ShxskKAT0poyAQ==" sparkle:version="8" sparkle:shortVersionString="1.0-alpha.6" />
    </item>
    <item>
      <title>1.0-alpha.5</title>
      <sparkle:version>7</sparkle:version>
      <sparkle:shortVersionString>1.0-alpha.5</sparkle:shortVersionString>
      <sparkle:channel>beta</sparkle:channel>
      <description>CI: run the appcast job on macOS (sign_update is a Mach-O binary)

The pre-release job ran on ubuntu-latest, so Sparkle's sign_update failed with
'cannot execute binary file: Exec format error' as soon as the signing secret
was configured. Match the build job and run on macos-26.</description>
      <pubDate>Tue, 28 Jul 2026 11:00:57 GMT</pubDate>
      <enclosure url="https://github.com/RobyRew/pacetimer/releases/download/v1.0-alpha.5/PeaceTimer-1.0.zip" length="2407351" type="application/octet-stream" sparkle:edSignature="z38ClTxxCmsvRw5bQsyTDdb2O6SiksbCa9NwdHnPsbWvAVmazEDiInt8CFDjXdjKFJ4YNzTjKgV0PjAlsdUqBg==" sparkle:version="7" sparkle:shortVersionString="1.0-alpha.5" />
    </item>
  </channel>
</rss>