RUGitHubInstall

Goal checks reuse helpers

Owner decisions, 2026-10-10 through 2026-10-14. Continues ADR-0025.

A Goal follows an observable result that depends on another person or on time. The owner stays in the conversation while a Helper checks the sources. An owner’s «Следить» tap starts an observation Goal with empty may from the item’s source and deadline.

The Goal lives in helpers.json with the Helper rows, under their existing lock. The existing minute tick creates a Goal check row when due. The check is a regular Helper turn. Its Verdict and the Helper Outcome settle the Goal in the same write. Iva reads and tells the Outcome through the existing delivery path. quiet and failures below the pause threshold close silently.

The model keeps a short Plan with observations, sources and performed actions. The owner’s named check time survives settlement. Editing the wording, may or Plan detaches the old check. The owner closes a Goal; done proposes closure. may contains the owner’s permitted actions in their own words and is required even when empty. An empty boundary permits observation and drafts. Signal, like Watch, may only list Goals and advance a related active Goal with no running check to now.

The implementation follows spec v3.5.1 in .scratch/work/goal/spec-v3.5.md. GoalCheck.tla describes the Goal transitions; the existing Helper models describe the check’s execution and Outcome delivery.

Accepted risks

The owner confirmed both additional risks on 2026-10-14:

  1. A Goal can silently check up to eight times daily for thirty days with no separate spending brake. Five Goals permit 5 × 8 × 30 = 1200 checks in a month per installation, each with the Helper’s work ceiling. Usage remains visible under helper.
  2. A quiet check and a failure below the third consecutive failure close without an account to the owner. This is an exception to ADR-0025’s delivery of every Helper Outcome. The goal-check skill requires news after a send or change so Iva can tell the action.

ADR-0025’s accepted risks also apply: malicious instructions in incoming content, repeated actions after an interruption, Trace as the action record, and irrevocable sends. The model follows may; code validates the field and Iva repeats its boundary in the receipt. A recovered old step may finish an already started action before cancellation. Outcome delivery permits a repeat after a crash between sending and marking delivery.

During rollback, a reader that rejects the whole newer helper document leaves the file available for a compatible build. A reader with per-record quarantine copies rows with unknown fields to .damaged-*.json and skips them; the next write removes those rows from the active file. Recovery then requires restoring the saved rows with a compatible build. Replacing the file with an older-format copy loses Goals created since that copy. Expiry is told in the next conversation turn. A completion event has the owner’s turn authority; the Helper and Goal skills permit only telling the Outcome from that event.

Rejected alternatives

Beta

The owner accepted the smaller implementation through the operator on 2026-10-14. Receipts supply timing data and the Goal skill phrases the nearest start. Goal and owner Helper insertion share one capacity check. Code validates the private owner chat and the matching Helper check; the Goal skill limits Watch and Signal to listing and advancing a check, Brief to listing, and other service turns to preserving Goals. All readers receive the owner’s full list view.

Goal stays in beta until the owner’s instruction to release it. No date is set.

View original Markdown ↗