openvibers/openvibe.help CHANGELOG.md

CHANGELOG.md

main 3.7 KB · 46 lines · markdown

1# Changelog
2
3What changed in OpenVibe.Help, newest first. Each site also publishes its patch notes at /updates.
4
5## 0.2.0 — 2026-10-08
6
7The product: a help centre generated from OpenVibe.Contracts, search over it and over the network, and support
8tickets that stay one conversation.
9
10- **Help articles from real content, generated at boot.** `server/catalog.js` reads every product manifest and every
11 service manifest whose `site` block presents a site, and builds one page per site (`/sites`, `/sites/<domain>`) and
12 one page per FAQ entry (`/a/<domain>/<slug>`, one question per page, the question as the title). Every text is the
13 manifest's, verbatim; each page names the manifests it read and links back to them.
14- **Search** (`server/search.js`, `/search`, `GET /api/v1/articles?q=`): a fixed, explainable score over the question,
15 the answer and the site's own text, plus OpenVibe.Search's public API in a second section. The network answer is
16 cached in-process for 5 minutes; a failure is shown as a failure and the page falls back to the articles alone.
17- **Support tickets** (`migrations/0002_tickets.sql`, `server/tickets/`, `/tickets`, `/staff`): a signed-in person
18 opens one (site from the catalog, subject, message, an optional page URL stored as text and never fetched), sees
19 only their own, and replies; staff (`admin` / `global_mod` on the session's role claim) read the queue, filter it by
20 site and state, reply, and set `open | waiting | solved`. Bodies are plain text, escaped with their line breaks,
21 capped at 10 000 characters.
22- **API:** `GET /sites`, `GET /sites/:id`, `GET /articles?q=`, `POST|GET /tickets`, `GET /tickets/:id`,
23 `POST /tickets/:id/messages`, and for staff `GET /staff/tickets` and `POST /tickets/:id/state`. Writes made with the
24 session cookie must come from openvibe.help itself; another person's ticket is a 404; an app token cannot act as a
25 person. `http/principal.js` now carries the Network role claim so a route can tell staff from everyone else.
26- **Per-caller limits:** `help.ticket.create` 6 a minute / 60 an hour, `help.ticket.message` 30 / 300. The skeleton's
27 `caller-limits.test.js` pinned an empty `BUDGETS`; it now pins these.
28- **Pages:** the home page is the help centre (a search box, the questions the sites answer, the site grid, contact
29 support), plus `/sites`, `/sites/:id`, `/a/:site/:slug`, `/search`, `/tickets`, `/tickets/new`, `/tickets/:id`,
30 `/staff` and `/updates`. All server-rendered, all working without JavaScript. The navbar gained Answers, Search and
31 Your tickets.
32- **Discovery:** the sitemap and `llms-full.txt` are two renderings of one page list, so every site and every question
33 is crawlable in both; `llms.txt` lists the sites; `/tickets` and `/staff` are disallowed. The home page's JSON-LD
34 gained the sitelinks search action.
35- **CSS budget raised** (16.5 → 18.5 KB raw, 4.1 → 4.5 KB brotli) for the help centre's own styles: measured
36 17.5/4.3 KB. The HTML budget did not move — the home page is 25.3 KB against 27.5.
37- **Tests:** `test/help-articles.test.js` (the pages against the manifests, escaping), `test/help-search.test.js` (the
38 score and the OpenVibe.Search stand-in, `test/helpers/search-provider.js`), `test/tickets.test.js` (the whole
39 lifecycle, privacy, cross-site writes, limits). `test/skeleton.test.js` now skips itself in a generated service
40 (the skeleton's placeholders are already substituted here, so the generator cannot rebuild the sample) — a skip, not
41 a pass.
42
43## 0.1.0 — 2026-10-08
44
45- **First release:** the service starts from the OpenVibe skeleton — sign-in with OpenVibe.Network (OAuth 2 + PKCE), server-rendered pages through the OpenVibe Frame, the `/api/v1` mount with per-caller limits, crawl artifacts, PostgreSQL migrations, the deploy files and the test suite.
46