openvibers/openvibe.help STATUS.json

STATUS.json

main 5.3 KB · 60 lines · json

1{
2 "repository": "OpenVibers/OpenVibe.Help",
3 "stage": "product",
4 "code": true,
5 "wave": "W20",
6 "plan": "OpenVibe.Help: a help centre generated from OpenVibe.Contracts at boot, search over it and over OpenVibe.Search, and support tickets that stay one conversation",
7 "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9",
8 "port": "5020",
9 "domain": "openvibe.help",
10 "contracts": "openvibe-contracts v0.419.0",
11 "sdk": "openvibe-sdk v0.161.0",
12 "shared": "openvibe-shared v4.235.0",
13 "packages": [
14 "openvibe-contracts v0.419.0",
15 "openvibe-sdk v0.161.0",
16 "openvibe-shared v4.235.0",
17 "openvibe-publishing v1.7.0"
18 ],
19 "summary": "The help and support centre for every OpenVibe site. The help centre is generated at boot from openvibe-contracts (every product manifest and every service manifest's site block): one page per site, one page per question, each text quoted verbatim with its manifest named. /search searches those articles with a fixed explainable score and the network through OpenVibe.Search's public API (cached 5 minutes, degrading to the articles alone when it fails). A signed-in person opens a support ticket that stays one conversation — site, subject, message, an optional page URL stored as text and never fetched — sees only their own, and replies; staff by their Network role claim read the queue, filter it and set the state. Tickets live in PostgreSQL (migrations/0002_tickets.sql), writes made with the session cookie must be same-origin, and opening and answering are limited per caller. Sign-in is OpenVibe.Network (OAuth 2 + PKCE), the pages are server-rendered through the OpenVibe Frame and work without JavaScript, and the crawl artifacts cover every site and every question.",
20 "works": [
21 "Help articles generated at boot from openvibe-contracts: 45 sites (22 live, 23 coming) and 20 questions across the 3 sites whose manifest carries an faq, quoted verbatim with provenance (manifest path, link back, read time)",
22 "/sites, /sites/:id (pillars as \"what you can do\", the FAQ as anchored articles, links to the site and its /updates) and /a/:site/:slug (one question per page, the question as the title)",
23 "Search: a fixed score over question/answer/site text for the help articles, plus OpenVibe.Search's public API in a second section; a 5-minute in-process cache, and a failure shown as a failure",
24 "Support tickets: create, list your own, one conversation per ticket, reply, staff queue with filters and open|waiting|solved, all in help_tickets and help_messages",
25 "Privacy: another person's ticket is a 404, anonymous is 401, an app token cannot act as a person, and a write with the session cookie must come from openvibe.help",
26 "Bodies are plain text, escaped with line breaks kept, capped at 10 000 characters; a page URL is stored as text and never fetched",
27 "Per-caller limits: help.ticket.create 6 a minute / 60 an hour, help.ticket.message 30 / 300",
28 "The API at /api/v1 with the problem+json error shape: sites, articles, tickets, staff",
29 "Crawl artifacts: a sitemap and llms-full.txt built from one page list (every site, every question), llms.txt listing the sites, JSON-LD for the home page, a site and a question",
30 "Sign-in with OpenVibe.Network (PKCE S256, server-side code exchange, httpOnly session cookies)",
31 "Truthful readiness (/api/ready: the database is required) and Prometheus metrics on loopback",
32 "Tests: the catalog against the manifests, escaping, search scoring with an OpenVibe.Search stand-in, and the whole ticket lifecycle including limits",
33 "Account export and deletion (ADR-033): the tickets a person opened and every message they wrote are exported to OpenVibe.Network on network.account.export_requested; on network.account.deleted their own tickets (and, by cascade, every message under them) are erased while a staff reply they left in someone else's ticket is anonymized, with the counts confirmed back; the two Events topics are subscribed at boot (server/identity/account-data.js)"
34 ],
35 "notYet": [
36 "Capabilities of its own: its service manifest is in openvibe-contracts (manifests/services/help.json) with an empty capabilities list, so CAPABILITIES in server/http/principal.js is empty and no other service calls Help",
37 "An email side to a ticket: today one conversation on the web, not yet the same thread by email",
38 "A \"Report a problem\" button on every other OpenVibe site (the product manifest's own launch note); a ticket can name a site but no site embeds the form yet",
39 "Answers drawn from the docs, wiki, blog and service status (the product manifest's description): today the articles are the sites' own manifests, and the network half of /search is what covers the rest"
40 ],
41 "capabilitiesRegistered": false,
42 "serviceManifestRegistered": true,
43 "deployed": true,
44 "placeholderInSites": false,
45 "features": [
46 "generated help articles",
47 "search (articles + OpenVibe.Search)",
48 "support tickets",
49 "staff queue",
50 "Network sign-in",
51 "server-rendered pages",
52 "api mount",
53 "limits and readiness",
54 "discovery",
55 "deploy files"
56 ],
57 "deployment": "openvibe-ovh: unit openvibe-help.service on 127.0.0.1:5020 (git checkout /opt/openvibe.help, env /etc/openvibe/help.env, database ov_help), deployed with `sudo ovhost deploy help`; public at https://openvibe.help since 2026-10-08.",
58 "updated": "2026-11-13"
59}
60