# 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

- A separate Goal process, tick, queue or delivery path duplicates Helpers.
- A dedicated sending log and code preventing repeated mail duplicate the
  model's inspection of sent items under the owner's accepted risk.
- A separate Goal spending ceiling adds a mechanism the owner declined.
- Closing by the model would stop checks without the owner's decision.
- Revision counters, outcome snapshots and a separate `last.md` duplicate
  detachment, the current Plan and conversation history.

## 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.
