openvibers/openvibe.today CHANGELOG.md
CHANGELOG.md
| 1 | # Changelog |
| 2 | |
| 3 | What changed in OpenVibe.Today, newest first. |
| 4 | |
| 5 | ## 0.1.0 — 2026-10-28 |
| 6 | |
| 7 | The first version: the network's time bus and calendar authority. |
| 8 | |
| 9 | - **Scheduling.** `POST|PATCH|DELETE /api/v1/events`, with title/description/time-zone/range validation, a stream's |
| 10 | channel and URL taken from the caller's token, followers-only visibility, a cap of 60 scheduled future events per |
| 11 | owner, an `Idempotency-Key` that returns the first event, and a same-origin rule for writes made with the session |
| 12 | cookie (`403 today.cross_site`). The event and its `today.event.scheduled` outbox row commit in one transaction. |
| 13 | - **Public read.** `GET /api/v1/events` (soonest first, public cache 60 s) and `GET /api/v1/events/:id`; a cancelled |
| 14 | event answers with its cancelled status, and a followers-only one is 404 unless the caller owns it. |
| 15 | - **ICS.** `/ics/@<username>.ics` (public) and `/ics/<token>.ics` (private, 300 s): RFC 5545 CRLF, 75-octet UTF-8-safe |
| 16 | folding, TEXT escaping, UID/SEQUENCE/STATUS/LAST-MODIFIED, one-hour default end, a cancelled event as |
| 17 | `STATUS:CANCELLED` for 7 days then dropped, and rotation that makes the old token 404 at once. |
| 18 | - **Reminders.** Upsert/remove/list and a 60 s job that claims a due row atomically before pushing one |
| 19 | `TODAY_REMINDER` through OpenVibe.Network's `/internal/notifications/push` (user id resolved in batches and cached). |
| 20 | A cancelled or done event's reminder never sends. |
| 21 | - **Agenda.** Own events, reminded events and the public or followers-only events of followed channels, with the |
| 22 | follow graph read from Network with the person's own token and cached 60 s. Network down still answers own and |
| 23 | reminded events with `follows_unavailable: true`. |
| 24 | - **Brief.** Later today, your reminders and up to three items from OpenVibe.Live's public Rundown; the Rundown |
| 25 | section is omitted when it fails; one stored brief per person per day; a 06:00 UTC job for subjects active in the |
| 26 | last 30 days (no notification in v1). |
| 27 | - **Events.** A transactional outbox with a fixed `evt_` id, claim lease, backoff and `attempts`/`last_error`, and a |
| 28 | v2-signed consumer at `/internal/events` for `live.stream.started|ended`; `today_processed` makes a replay a no-op. |
| 29 | Account export and deletion go through openvibe-sdk/account-data over every table that holds a subject; the feed |
| 30 | token itself is never exported. |
| 31 | - **The service.** OpenVibe.Network sign-in as OAuth client `today` (PKCE S256, `today_at`/`today_rt`/`today_oauth`), |
| 32 | truthful readiness (the database is required), Prometheus metrics on loopback, crawl artifacts, deploy files, and |
| 33 | server-rendered pages with schema.org Event JSON-LD. |
| 34 | - **Tests.** `events`, `ics`, `consumer`, `outbox`, `reminders`, `agenda`, `brief`, `pages`, `sso`, `account-data` and |
| 35 | `discovery`, each in its own process on a temporary PGlite database with a mock Network/Events. |
| 36 |