- Task: 7.3
- Scope: pre-ui watcher semantic contract and persistence boundary
- Record digest:
51b65cb7dc4b1355318f36220ee6d21a83c8dd844ae34c4ee0a607487cc47f69 - Product admission: not-admitted
- Phase/gaps: open
Semantic decisions#
| Area | Decision |
|---|---|
| Source and truth | Event and polling sources are distinct; truth is a bounded declarative DSL with no code or model. |
| Evidence | Past age is definition-bound; future skew is 30000 ms. Unauthorized evidence cannot advance a checkpoint. |
| Delivery | at-least-once; canonical SHA-256 key; no exactly-once claim. Dispatch requires authority, durable CAS, invocation, then settlement. |
| Missed runs and time | skip, latest, bounded backfill; IANA zones; real-instant DST traversal; local quiet hours. |
| Budgets | Fixed window over evaluations, unique-deliveries, delivery-attempts, tokens, cost-microusd. |
| Failure | Capped exponential retry, categorical errors, terminal dead_letter. |
| Authority | Rechecked for evaluate, deliver-every-attempt, manage, erase across every exact subject/resource/time binding. |
| Lifecycle | active, paused, cancelled, expired; cancellation is terminal and expiry covers active/paused. |
| Restart | Initial creation cannot overwrite; interrupted dispatch returns pending with the same key/attempt count; revisions use compare-and-set. |
| Privacy | Only allowlisted scalar evidence paths persist; cancellation/retention/exact-subject erasure are explicit; credentials are excluded. |
Implementation boundary#
libs/oshun/assistant/src/watchers/watcher-contract.tslibs/oshun/assistant/src/watchers/watcher-engine.tslibs/oshun/assistant/src/watchers/watcher-store.tslibs/oshun/assistant/src/watchers/postgres-watcher-store.tslibs/oshun/assistant/src/watchers/index.ts
Product consumers of this watcher API: 0. No UI tool is present and no worker starts. Tasks 7.4 and 7.5 own admission and live reliability.
Automated verification#
libs/oshun/assistant/src/watchers/watcher-contract.spec.tslibs/oshun/assistant/src/watchers/watcher-engine.spec.tslibs/oshun/assistant/src/watchers/watcher-store.spec.ts
Layers: contract, state-machine, in-memory-restart, postgres-sql-boundary.
Source evidence#
| Path | Digest of | SHA-256 | Bytes |
|---|---|---|---|
EVE_SOTA_GAP_CLOSURE_TODOS_2026-09-01.md |
task-requirement | 8acf66c44561ed36aa456a6bdca78903b09a3411ae807565d46466534c5f5f0c |
316 |
libs/oshun/assistant/src/watchers/watcher-contract.ts |
file-bytes | 17cbfdfe938f975b6a35b575572236b62ce51b5ee87507ef81b33a40f218100c |
26900 |
libs/oshun/assistant/src/watchers/watcher-engine.ts |
file-bytes | 07c5b254279e0f140ffc7851b4fa878cfbf7a9730b480036e317ca052a3639f6 |
20053 |
libs/oshun/assistant/src/watchers/watcher-store.ts |
file-bytes | dbeb189921200125e2efb6a857f6310bde2da9d03ad61662b3c79c5ed39d209a |
9916 |
libs/oshun/assistant/src/watchers/postgres-watcher-store.ts |
file-bytes | 43a5f5fe3faed7b8018a0bdb5ae4fc42576f002cc1e4f83b49a3cc394a8113a1 |
6354 |
libs/oshun/assistant/src/watchers/index.ts |
file-bytes | 303b3e3c3a483b6a976e017b76c2a7e8af650da0d3a62139b97044513a8810c8 |
145 |
docs/adr/ADR-0081-eve-watcher-semantics-before-ui.md |
file-bytes | 9c19467c4ea22a8b102e1d6ecceb3fcf2eb3e33f7cac79346b821c309fdd019b |
7439 |
libs/oshun/assistant/src/watchers/watcher-contract.spec.ts |
file-bytes | b018a96649ee65dd6ee3d991a58c352f928f8697483f51eeaa9f92604e8a8195 |
11783 |
libs/oshun/assistant/src/watchers/watcher-engine.spec.ts |
file-bytes | 30c635008d919d54b1895e8772795edd1f9ae73f03e778178327f3cb3c288a5a |
14011 |
libs/oshun/assistant/src/watchers/watcher-store.spec.ts |
file-bytes | c5321d58a073358a1cb767a48beb2700602c4b127ac4809fb88db6a9c93cfb99 |
10907 |
Honest limits#
- No real event stream, polling source, destination, or Postgres service ran for Task 7.3.
- Cron occurrence enumeration and worker orchestration are not implemented by this semantic substrate.
- The SQL boundary is tested, but a live database restart and distributed race remain unproved.
- At-least-once delivery can redeliver after an acknowledgement crash; downstream adapters must honor the stable idempotency key.
- User-facing tools and notifications remain gated to Task 7.4; live reliability breadth remains Task 7.5.
Task 7.3 is closed by this contract. Phase 7 and G3/G11/G12/G13/G14/G15/G16/G17/G18 remain open.