Skip to content

0.1.0: make invalid Reminder failure terminal #113

Description

@suraciii

Goal

Report an invalid persisted Reminder once and stop repeated error traffic.

Problem

The poller resolves a stored GrainType and method before it claims the Reminder. If resolution fails, the row remains due. Every later poll reports the same failure again without a bound.

Scope

  • Define one terminal result for an invalid persisted Reminder.
  • Keep the Reminder identity in the error report.
  • Stop later polls from reporting the same unchanged row.
  • Keep normal claim and delivery behavior unchanged.
  • Add deterministic tests across more than one poll interval.

Acceptance

  • One invalid row produces one visible failure.
  • The same row does not produce a failure on each later poll.
  • The result is stable after process restart.
  • Valid one-shot and periodic Reminders keep their current behavior.
  • make ci passes.

References

internal/timer/timer.go
design/timers.md
docs/release-0.1.0.md

Activity

  1. added this to the v0.1.0 milestone on Aug 11, 2026
  2. suraciii commented on Aug 11, 2026

    @suraciii
    OwnerAuthor

    Local reviewed implementation is complete at commit a9af5b0.

    Implemented:

    • An Invalid Reminder uses the existing ETag-guarded zero-time Claim as its Terminal Result. Only the CAS winner reports ReminderDispatch.
    • A Store error in the terminal step reports ReminderTerminal with the GrainId, Reminder name, method, and Store error.
    • Reminder ETags are Store-wide and never reused after Delete, Set, or SQLite restart, so an old Claim cannot change a new setting with the same identity.
    • Terminal work shares the configured Reminder worker bound. No extra public ReminderStore operation or retained terminal row was added.
    • SQLite schema validation, migration rollback, simulation behavior, public docs, and the conformance Application were updated.

    Evidence on the exact commit:

    • Final independent review: no remaining finding after the Set/Cancel race, two-handle SQLite race, migration rollback, and simulation gaps were fixed.
    • Targeted mutations caught reporting without a CAS win, ETag reuse, acceptance of a partial due index, and terminal worker-limit expansion.
    • make ci: exit 0 in 48.12s. It reported 4 release-command tests, 631 normal tests, 631 race tests, 20 simulation tests, 19 generated-code tests, 45 network tests, 49 example tests, two resource tests, and three 10-second fuzz targets.
    • make external: exit 0 in 20.33s. It reported 4 release-command tests, 1 clean Quick Start test, and 19 external-module and process-restart tests.
    • git diff --check: pass. The worktree is clean.

    The commit is still local. Remote master remains 584f008, so this issue stays open until the commit reaches remote master and the required remote proof passes.

  3. suraciii commented on Aug 11, 2026

    @suraciii
    OwnerAuthor

    Completed in the integrated candidate #116. An invalid persisted Reminder produces one Terminal Result with its identity, does not repeat across later polls or restart, and valid one-shot and periodic behavior remains covered. Exact master 0c41f9f644905183d7d4fd8f7efed24e4396bf0d passed local make ci and hosted run https://github.com/suraciii/gor/actions/runs/31504300130.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions