openvibers/openvibe.contracts Commits

Watch contracts, events, capabilities and placeholder service manifest (planned); document runtime:<class>; release 0.102.0 (#47)

OP OpenVibers committed 5 Oct 2026 · tag v0.102 · 0 files, +0 −0

Release 0.102.0 is complete. Here is the change list and verification.

**Schemas (all new, planned, owner `watch`, first-party)**
- `contracts/watch/watch.v1.json:1` — `watch.watch@1` (source/extraction/comparison/condition/actions/budget/retention); source/cadence/extraction/comparison/condition/action/budget/retention live in `$defs` so the request reuses them.
- `contracts/watch/watch-request.v1.json:1` — `watch.watch-request@1` (create/patch body; every field optional, create rules in code).
- `contracts/watch/watch-result.v1.json:1` — `watch.watch-result@1` (`{watches}`/`{watch}`/`{id,status}`/`{id,deleted:true}`).
- `contracts/watch/observation.v1.json:1` — `watch.observation@1` (immutable observation).
- `contracts/watch/check-run.v1.json:1` — `watch.check-run@1` (immutable run; the migration's 12 terminal states).
- `contracts/events/payloads/watch.observation.recorded.v1.json:1` — subject `{watch}`, internal, low, `service:watch`.
- `contracts/events/payloads/watch.watch.triggered.v1.json:1` — subject `{watch}`, internal, important; Network → `WATCH_TRIGGERED` for `recipient`.
- `contracts/events/payloads/watch.check.failed.v1.json:1` — internal, normal, `consecutive_failures`.

**Fixtures** (valid + invalid each): `fixtures/watch.watch/{valid/price-threshold,invalid/missing-owner}.json:1`, `fixtures/watch.watch-request/{valid/create-event-watch,invalid/unknown-status}.json:1`, `fixtures/watch.watch-result/{valid/paused,invalid/not-deleted}.json:1`, `fixtures/watch.observation/{valid/price-changed,invalid/missing-check-run}.json:1`, `fixtures/watch.check-run/{valid/http-changed,invalid/unknown-state}.json:1`, `fixtures/watch.observation.recorded/{valid/price-changed,invalid/missing-owner}.json:1`, `fixtures/watch.watch.triggered/{valid/price-below,invalid/missing-observation}.json:1`, `fixtures/watch.check.failed/{valid/http-error,invalid/zero-failures}.json:1`.

**Catalog / manifests / docs / release**
- `contracts/catalog.json:4190` — the 8 entries, status `planned`, inserted at the end of the `trade.*` block.
- `manifests/capabilities/watch.watch.read.json:1`, `watch.watch.manage.json:1`, `watch.observation.read.json:1`, `watch.check.run.json:1` — planned; `inputSchema`/`outputSchema` (`common.no-body@1`, `watch.watch-request@1`, `watch.watch-result@1`, `watch.observation@1`, `watch.check-run@1`); `implementedBy` empty (no routes exist).
- `manifests/services/watch.json:1` — placeholder like `run.json` (no site/health/internalOrigin; lifecycle all `none`; `>=0.102.0 <1.0.0`).
- `manifests/products/openvibe.watch.json:30` — `relationships.service: "watch"` (needed so `product-catalog.test.js` sees one service serving the domain, exactly as `openvibe.run`→`run`).
- `contracts/platform/resource-offer.v1.json:69` — `capabilities` description now documents `runtime:<class>` for a kind harness beside the reserved `worker:<class>` names (docs-only).
- `CHANGELOG.md:7`, `STATUS.json:12,26`, `package.json:3`, `package-lock.json:3,9` — 0.102.0 release entry/line/feature/version, as the 0.101.0 commit did.
- `generated/` — `npm run generate`: 26 OpenAPI docs (version line), `json-schema/bundle.json`, `typescript/index.d.ts`; no `openapi/watch.json` (planned capabilities are excluded).
- `lib/ids.js:9` — **untouched**: `watch:'wch'`, `observation:'wco'`, `check:'ckr'` were already present.

**Repo-convention deviations from the dossier (stated as requested)**
- The dossier's `watch.triggered` became **`watch.watch.triggered`** (file an

This commit has no diff to show.