openvibers/openvibe.domains CHANGELOG.md
CHANGELOG.md
| 1 | # Changelog |
| 2 | |
| 3 | What changed in OpenVibe.Domains, newest first. |
| 4 | |
| 5 | |
| 6 | ## 0.2.0 — 2026-10-28 |
| 7 | |
| 8 | - **The control panel** (`/panel`, plan 2026-10-28 §5.1, DOM-2): |
| 9 | - Sign in with OpenVibe.Network (client `domains`), then connect Cloudflare. The token is verified, then stored as a |
| 10 | secret in your own Network project, granted to Domains for calls to api.cloudflare.com only (ADR-056). Domains' |
| 11 | database (`ov_domains`) keeps its name, never its value. |
| 12 | - Zones are synced; a zone's records are read live from Cloudflare. |
| 13 | - Every change (yours, a bulk edit's or an agent's) is a proposal (`domains.proposal@1`): the record diff, why, what |
| 14 | could break, and 7 days to decide. Approve on its page or in the Action Center. A record that moved since the |
| 15 | proposal is refused as stale; an applied proposal rolls back in one step; everything is audited. |
| 16 | - API: `/api/v1/panel/*`, `/api/v1/proposals`; Network's Action Center reads `/api/v1/actions` and decides with |
| 17 | `domains.actions.read` and `domains.proposal.decide`. Account export and deletion (ADR-033). |
| 18 | |
| 19 | ## 0.1.0 — 2026-10-28 |
| 20 | |
| 21 | The service skeleton: a stateless read-only front over OpenVibe.Host's price catalog and OpenVibe.Tools' public |
| 22 | domain history. |
| 23 | |
| 24 | - **Name parsing** (`server/names.js`): a label and an optional ending from what a person types — a bare label with |
| 25 | spaces or underscores, a full name, a URL with a scheme, path or port, an IDN (`münchen.de`) — normalized to ASCII |
| 26 | for the Host call and kept in Unicode for display. 1–63 character labels, no edge hyphens, 253 characters total. |
| 27 | - **Pricing** (`server/pricing.js`): every registrar row gains `y1`, `y3`, `y5` and the renewal trap |
| 28 | (`renew ≥ 2 × register` and `renew − register ≥ 5`), rounded to cents. USD rows are compared and sorted by `y3`; |
| 29 | other currencies are kept after them and flagged `currency_other`. |
| 30 | - **Data clients** (`server/data/host.js`, `server/data/tools.js`): injectable `fetchImpl`, 8-second timeouts, a |
| 31 | 2,000-entry in-process cache (catalog 10 minutes, ending 10, name check 2, domain history 10), a failure is null |
| 32 | and one short log line. |
| 33 | - **Pages** (`server/http/pages.js`): `/` (the popular first catalog page and the Tools lists), `/search?q=` |
| 34 | (registry status and prices, `noindex`), `/tld/:tld`, `/.dev` 301, `/d/:domain` (public history plus its ending's |
| 35 | prices), and a 404. The views are plain placeholders on the shared Frame for the main session to replace. |
| 36 | - **API** (`server/http/api.js`): `GET /api/v1/search?q=`, `/tlds`, `/tlds/:tld`, `/domains/:domain`; CORS-open, |
| 37 | public for five minutes, 400 problem+json for a bad name, 404 for an unknown ending, and a 120/min per-IP limit |
| 38 | shared with `/search`. |
| 39 | - **Plumbing:** helmet with Help's CSP, health, truthful readiness (Host and Tools are optional checks, so a failure |
| 40 | is `degraded`, not 503), release.json and the release collector, `/shared`, robots.txt, sitemap.xml (every ending |
| 41 | in the catalog pages), llms.txt, loopback-only metrics and graceful stop. |
| 42 | - **Repo:** deploy files (systemd, nginx), CI, README, STATUS, SECURITY, LICENSE, .env.example and four test files. |
| 43 |