openvibers/openvibe.fun CHANGELOG.md

CHANGELOG.md

main 3.5 KB · 42 lines · markdown

1# Changelog
2
3What changed in OpenVibe.Fun, newest first.
4
5## 0.1.0 — 2026-10-28
6
7The first version: IRL quests on Live, the local guide and group plans.
8
9- **IRL quests on Live.** `fun_quest_boards` is a streamer's board for one session, checked against the public
10 OpenVibe.Live channel and the signed-in Network username. `fun_quests` is suggested → accepted → live → completed
11 → verified, with `rejected` and `hidden`. Suggestions pass an explainable dangerous/illegal/trespassing/
12 harassment filter before they are stored; a board can be accessible-only and has a suggestion cap. One vote per
13 person per quest.
14- **Verification and reward.** A completed quest is verified by `FUN_QUEST_VERIFY_VOTES` distinct public chat checks
15 or by a Network moderator (`global_mod`+). A local `fun_badges` row is always paid; `fun_quest_rewards` records the
16 OpenCoins ledger. OpenCoins are loyalty points, never money, and are credited only with `FUN_COINS=on` through
17 Network's `identity.subject.resolve` + `network.coins.credit` with the reward id as the idempotency key.
18- **Chat is read, never posted.** A timer reads one public page of the channel's `GET /api/chat/global/history` and
19 applies `!quest vote`, `!quest suggest`, `!quest verify` and `!plan vote` at most once per message id. Deleted or
20 unsafe messages are skipped. Under `FUN_DRILL` the timer is off; tests call `runOnce()`.
21- **The local guide.** `fun_geo_cache` stores OSM/Ticketmaster JSON. Nominatim and Overpass requests carry
22 `FUN_OSM_USER_AGENT`, are paced per host (1/s by default), cached seven days with stale fallback and are bounded to
23 one around: radius. Places show distance, address, opening hours, accessibility, a tile-free map and ODbL
24 attribution. Ticketmaster Discovery is off unless `TICKETMASTER_API_KEY` is set; the key is never cached, returned
25 or logged. No model call, no AI capability, no paid provider.
26- **Group plans.** `fun_plans` + `fun_plan_options` + `fun_plan_votes`: one vote per person or public chat username,
27 changing allowed until close, a tie refused, owner/staff decides, and the winner goes to the caller's own
28 OpenVibe.Today through Today's public event API with the caller's token and `Idempotency-Key: fun-plan-<id>`.
29- **Safety and moderation.** `fun_reports` collects signed-in safety/spam/other reports; staff list them and can hide
30 a public quest or plan. Hiding writes a Search tombstone.
31- **Search.** Each public quest/plan is one `search.index-document@1` in `fun_outbox` (owner `fun`, types `quest`
32 and `plan`), with a revision, public URL and public body. The relay waits for the `search.document.write` grant.
33- **The service.** Network SSO as OAuth client `fun` (PKCE S256, `fun_at`/`fun_rt`/`fun_oauth`), truthful readiness,
34 Prometheus metrics on loopback, discovery, deploy files, and server-rendered pages with stable `fu-` ids plus a
35 no-JS OBS overlay. `public/css/fun.css` and `public/js/fun.js` are one-comment placeholders for the main session.
36- **Account data.** Export covers boards, suggestions, votes, checks, badges, rewards, plans, options, plan votes and
37 reports. Deletion erases personal rows and anonymizes the community record (subject NULL); another person's rows
38 and public titles stay.
39- **Tests.** Migration, guide/cache/pacer/Ticketmaster, quest safety and state machine, chat idempotency, plans and
40 Today, Search document validation, SSO, pages/cache, coins opt-in and account export/deletion, each in its own
41 process on a temporary PGlite database with a mock Network and upstream fixtures.
42