• v0.1.3 8657e6afc6

    CI / Kotlin tests (android host + desktop) (push) Successful in 5m48s
    CI / Gateway plugin tests (push) Successful in 7m40s
    Stable

    ARIA released this 2026-08-31 21:44:41 +00:00 | 2 commits to master since this release

    Iris Release Notes — v0.1.3

    Covers the last 5 commits (b065d17 → 8657e6a).

    Bug Fixes

    HTTP fallback transport

    • Port-conflict pre-check now actually fires (8657e6a)
      acquire_scoped_lock returns (acquired, existing_record), but the old
      if not acquire_scoped_lock(...) tested the tuple — which is always
      truthy — so the "port in use by another profile" pre-check never ran and a
      conflict surfaced as a generic bind failure. The code now unpacks and tests
      the first element, matching the canonical usage in
      gateway/platforms/base.py.

    Gateway version reporting

    • Gateway no longer advertises unknown version in production installs
      (0f5b5a1)
      hermes plugins install <repo>#gateway-plugin ships only the
      gateway-plugin/ subdirectory into ~/.hermes/plugins/iris, so the
      repo-root VERSION file is absent there and plugin_version() fell back
      to unknown — causing the app to show a false "App and gateway versions
      differ" warning.
      • version.py: resolution chain is now repo-root VERSION (dev/symlink
        install) → plugin.yaml version field (production install) → unknown;
        stdlib-only parse, with a base= param for tests.
      • plugin.yaml: bumped stale 0.1.0 → 0.1.2 to match VERSION.
      • Added regression test simulating the production layout.

    App notifications

    • Fixed double notification + double unread count for cron deliveries
      (ea375fd)
      A cron delivery emits two frames (high-priority notification banner +
      message). When backgrounded, each posted its own system notification
      (Cron: <job_id> and the channel name), and the message frame's
      redelivery (live SSE + sync replay after the push-triggered reconnect)
      incremented the unread badge twice.
      • Records when a high-priority banner (cron/approval/clarify) was posted
        per lane; suppresses the message frame's system notification within a
        5 s window (mirrors the gateway's push-coalesce window).
      • Dedupes unread counting per lane by message id so a redelivered frame
        only counts once (recorded only when the message actually counts as
        unread).

    Documentation

    • Clarified ntfy privacy (b065d17)
      The docs claimed ntfy keeps push metadata on your own infrastructure, but
      the default NTFY_SERVER_URL is the public https://ntfy.sh cloud
      service. README.md, docs/08-push.md, docs/install.md, and
      docs/playstore-listing.md now make explicit that push metadata (topic,
      notification title) passes through ntfy.sh unless you self-host ntfy.

    • Refreshed AGENTS.md to match the current codebase (5b78e15)

      • Removed hardcoded ADB serial (differs per developer/machine).
      • Added the second pre-commit hook (check_version_sync) to hard rules.
      • Documented tests/, scripts/, backdrops/, and CI-SETUP.md in the
        layout.
      • Noted the committed tests/test_android.py copy and
        test_android_http.py.

    Tooling / Internal

    • New pre-commit hook: version sync guard (0f5b5a1)
      scripts/check_version_sync.sh (wired into .pre-commit-config.yaml)
      fails any commit where gateway-plugin/plugin.yaml version drifts from the
      repo-root VERSION file.

    Version

    • Bumped VERSION / plugin.yaml to 0.1.3 (8657e6a).
    Downloads