Skip to content

v1.4.0-beta.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Oct 05:05
· 14 commits to main since this release

[Unreleased]

Bug Fixes

  • Qualify history columns against the joined users row by @John710
    recurring_history and users both have id and created_at, so the unqualified
    select list raised "column reference is ambiguous" and the endpoint answered
    500. CI's blackbox run caught it; the unit suite cannot, because its stub
    never executes SQL.

Documentation

  • Warn that Shoutrrr webhook tokens leak over plain HTTP by @John710
    The last open item from the v1.2.4 audit. Also records why a dead refresh
    token reloads the whole SPA instead of surfacing an in-app error.

Features

  • Anchor-based recurring cron with reminders and overdue alerts by @John710
    The hourly job drove generation from next_date + INTERVAL, which ratchets a
    31st-of-month anchor backwards and can only emit one occurrence per run, so a
    rule that fell behind stayed behind for weeks.
    Occurrence dates now come from the schedule service: the cron asks for the
    dates owed up to today (bounded catch-up, rewound ones recorded as skipped in
    history) and writes them through one transaction per rule with
    FOR UPDATE SKIP LOCKED, so a crash rolls back cleanly and two instances cannot
    double-book. Balance moves use numeric strings, notifications fire only after
    COMMIT, and the legacy frequency column stays in sync so the image can roll
    back. Adds daily due-soon and overdue reminders, deduplicated per rule.
  • Anchor-based schedule API with pay/skip and history by @John710
    The recurring endpoints only stored next_date and a fixed frequency, so the
    list could not show what a rule will actually ask for, and PUT rebound every
    column (currency included) whether the client sent it or not.
    Adds PATCH with a column whitelist built by the schedule service, an occurrence
    projection window, per-occurrence pay/unpay and skip, run-now, and a change
    history read — all with dates cast to text so the container timezone cannot move
    a calendar day. PUT stays for one release behind a Deprecation header.
    Editing an auto-transaction onto a date its rule already paid now hits the new
    (recurring_rule_id, date) unique index; the route maps that conflict to a
    localized 400 instead of a 500.
  • Recurring schedule fields, occurrence integrity, history and exceptions by @John710
    Schedules need real state: interval + anchor fields so the next date is derived
    instead of nudged, a FK and a partial unique index so one occurrence can only
    ever be one transaction, and tables for skips and price/schedule changes.
    frequency stays populated so the container can roll back to finapp:1.3.2.
  • Recurring schedule service with anchor-based occurrence math by @John710

Testing

  • Cover recurring projection, pay/skip cycle and run-now in blackbox by @John710
    Runs against a live container, so it pins what the unit suites cannot: the
    server-side date casting, the partial unique index and the balance effects.
    Appended after the net-worth section on purpose — it writes transactions and
    that assertion expects exact balances. Fixtures start in 2027 so the expected
    occurrence dates do not follow the container clock.

Full Changelog: v1.3.2...