openvibers/openvibe.host Commits

browser-check --network-down (ADR-024, roadmap WS-E task 1): every site's home loads with openvibe.network unreachable (Shared 1.21.0 checkUnreachable) at 390 and 1280 px and must still paint: 200, settled, 120+ characters, a --accent theme token and a background. First run 20/22 (Media had no theme tokens, fixed in Media 2be314b and the index page; Billing's short sign-in page was under the old 200-character bar); recorded run 22/22. Plus two 23/23 full browser checks after today's deploys

OP OpenVibers committed 26 Sept 2026 · 9d719133b1 · 2 files, +505 −0


Changes

ddiff --git a/docs/browser-check.md b/docs/browser-check.md
iindex da6763f..aa0f99c 100644
---- a/docs/browser-check.md
++++ b/docs/browser-check.md
@@@ -879,3 +879,471 @@ Known errors, counted and not failed (`--strict-errors` fails them):
- idle 5s after settle: CPU 0.1% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 6 KB (`https://openvibe.wiki/shared/release-watch.js`, `https://openvibe.wiki/release.json`, `https://events.openvibe.network/realtime/stream`)
</details>
++
++### Run 2026-09-26T10:30:41.088Z (local; Chrome/150.0.7843.0)
++
++23/23 sites pass. Widths 390, 768, 1280; axe axe-core 4.13.0, WCAG 2.1 A/AA; navigation 5 laps. Cells: ✓ all pass, **n✗** routes failing, n! warnings, - not run.
++
++| Site | Routes | Status | Errors | Overflow | Scripts | No-JS | Canonical | JSON-LD | axe | Nav | axe serious/critical (moderate) | Growth lap 2→last | Idle 5 s: CPU · requests · infinite animations |
++|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
++| ai.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| billing.openvibe.network | 1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · 0 lst | 0% · 0 req |
++| openvibe.blog | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +5 KB · 0 nodes · 0 lst | 0.1% · 4 req |
++| openvibe.chat | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | +4 KB · 0 nodes · 0 lst | 0.3% · 4 req |
++| openvibe.codes | 7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.1% · 4 req |
++| openvibe.community | 6 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.2% · 4 req |
++| openvibe.coupons | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.deals | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -6 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.games | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +26 KB · 0 nodes · +2 lst | 15.4% · 3 req · 1 anim |
++| openvibe.host | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.3% · 3 req · 3 anim |
++| openvibe.live | 8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -77 KB · 0 nodes · 0 lst | 24.8% · 17 req · 33 anim |
++| openvibe.media | 3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · -2 lst | 0.1% · 4 req |
++| openvibe.network | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 30.3% · 4 req · 19 anim |
++| openvibe.news | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -7 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openre.stream | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.3% · 3 req · 3 anim |
++| openvibe.reviews | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 0.3% · 3 req · 3 anim |
++| search.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.4% · 4 req |
++| sources.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0% · 0 req |
++| openvibe.tips | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · 0 lst | 0.5% · 3 req · 3 anim |
++| openvibe.tools | 8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -3 KB · 0 nodes · -2 lst | 0.1% · 4 req |
++| openvibe.trade | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 0.3% · 3 req · 3 anim |
++| openvibe.vip | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.4% · 3 req · 3 anim |
++| openvibe.wiki | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -6 KB · 0 nodes · -2 lst | 0.2% · 4 req |
++
++Known errors, counted and not failed (`--strict-errors` fails them):
++- Cloudflare Web Analytics beacon, injected at the edge, blocked by the site CSP: 17× on openvibe.media, sources.openvibe.network
++
++<details><summary>Details: routes and findings per site</summary>
++
++**https://ai.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://ai.openvibe.network/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://billing.openvibe.network**: pass (1 route(s), Chrome/150.0.7843.0)
++- `/policy`: pass
++- navigation `/policy` ↔ `/policy` ×5 (load): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0% (script 0 ms, style 0 ms, layout 0 ms), 0 request(s), 0 KB
++
++**https://openvibe.blog**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/@openvibe/patch-notes-chat-parity-script`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap +5 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 2 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.blog/shared/release-watch.js`, `https://openvibe.blog/release.json`, `https://openvibe.blog/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.chat**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/rooms`: pass
++- `/updates`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/rooms` ×5 (link): pass; growth lap 2→5: heap +4 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.chat/shared/release-watch.js`, `https://openvibe.chat/release.json`, `https://openvibe.chat/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.codes**: pass (7 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/tools/webhooks`: pass
++- `/manifests/validate`: pass
++- `/docs`: pass
++- `/oauth`: pass
++- `/policy`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/tools/webhooks` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 2 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.codes/shared/release-watch.js`, `https://openvibe.codes/release.json`, `https://openvibe.codes/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.community**: pass (6 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/pastes`: pass
++- `/pulse`: pass
++- `/p/rogue-frame-5292`: pass
++- `/s`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/pastes` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.community/shared/release-watch.js`, `https://openvibe.community/release.json`, `https://openvibe.community/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.coupons**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.coupons/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.deals**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -6 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.deals/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.games**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +26 KB, nodes 0, listeners +2, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 15.4% (script 5 ms, style 42 ms, layout 0 ms), 3 request(s), 0.3 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.games/release.json`, `https://events.openvibe.network/realtime/stream`); 1 running animation(s), 1 infinite: `pulse on a.play-cta`
++
++**https://openvibe.host**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 6 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.host/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.live**: pass (8 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/content`: pass
++- `/chat`: pass
++- `/search?q=minecraft`: pass
++- `/vod/5627`: pass
++- `/clip/369`: pass
++- `/@JapaneseOldGuy`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/content` ×5 (in-page+link): pass; growth lap 2→5: heap -77 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 24.8% (script 55 ms, style 182 ms, layout 22 ms), 17 request(s), 158.8 KB; 36 running animation(s), 33 infinite: `opacity on div.hero-float-inner`, `transform on div.hero-float-inner`, `heroBgKenBurns on div.hero-bg-layer`, `heroFloat3d on a.hero-float`
++
++**https://openvibe.media**: pass (3 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners -2, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 2 ms, style 0 ms, layout 0 ms), 4 request(s), 6.4 KB (`https://openvibe.media/shared/release-watch.js`, `https://openvibe.media/release.json`, `https://openvibe.media/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.network**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/login`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 30.3% (script 3 ms, style 123 ms, layout 164 ms), 4 request(s), 6.4 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.network/release.json`, `https://openvibe.network/release-metrics`, `https://events.openvibe.network/realtime/stream`); 19 running animation(s), 19 infinite: `orb-drift on div.orb`, `ovmFloat on svg`, `ovmGlow on circle`, `ovmComet on circle`
++
++**https://openvibe.news**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -7 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 4 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.news/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openre.stream**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.3 KB (`https://openvibe.network/shared/release-watch.js`, `https://openre.stream/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.reviews**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.reviews/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://search.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass (application/problem+json: only the status is checked)
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.4% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.7 KB (`https://search.openvibe.network/shared/release-watch.js`, `https://search.openvibe.network/release.json`, `https://search.openvibe.network/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++ - error during navigation: network: Failed to load resource: the server responded with a status of 404 ()
++
++**https://sources.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass (application/problem+json: only the status is checked)
++- navigation `/` ↔ `/` ×5 (load): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0% (script 0 ms, style 0 ms, layout 0 ms), 0 request(s), 0 KB
++
++**https://openvibe.tips**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.5% (script 7 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.tips/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.tools**: pass (8 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/developers`: pass
++- `/updates`: pass
++- `/tool/yaml`: pass
++- `/all-tools`: pass
++- `/network-tools`: pass
++- `/developer-tools`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/developers` ×5 (link): pass; growth lap 2→5: heap -3 KB, nodes 0, listeners -2, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.4 KB (`https://openvibe.tools/shared/release-watch.js`, `https://openvibe.tools/release.json`, `https://openvibe.tools/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.trade**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.trade/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.vip**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.4% (script 7 ms, style 0 ms, layout 0 ms), 3 request(s), 6.4 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.vip/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.wiki**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/s/openvibe`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap -6 KB, nodes 0, listeners -2, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 7 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.wiki/shared/release-watch.js`, `https://openvibe.wiki/release.json`, `https://openvibe.wiki/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++</details>
++
++### Run 2026-09-26T10:46:24.226Z (local; Chrome/150.0.7843.0)
++
++23/23 sites pass. Widths 390, 768, 1280; axe axe-core 4.13.0, WCAG 2.1 A/AA; navigation 5 laps. Cells: ✓ all pass, **n✗** routes failing, n! warnings, - not run.
++
++| Site | Routes | Status | Errors | Overflow | Scripts | No-JS | Canonical | JSON-LD | axe | Nav | axe serious/critical (moderate) | Growth lap 2→last | Idle 5 s: CPU · requests · infinite animations |
++|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
++| ai.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +3 KB · 0 nodes · +2 lst | 0.3% · 3 req · 3 anim |
++| billing.openvibe.network | 1 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · 0 lst | 0% · 0 req |
++| openvibe.blog | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.2% · 4 req |
++| openvibe.chat | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 0.1% · 4 req |
++| openvibe.codes | 7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.1% · 4 req |
++| openvibe.community | 6 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.2% · 4 req |
++| openvibe.coupons | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -16 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.deals | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.games | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -1 KB · 0 nodes · 0 lst | 12.9% · 3 req · 1 anim |
++| openvibe.host | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.live | 8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +34 KB · +10 nodes · +1 lst | 22% · 17 req · 33 anim |
++| openvibe.media | 3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | +3 KB · 0 nodes · 0 lst | 0.3% · 4 req |
++| openvibe.network | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -3 KB · 0 nodes · +1 lst | 28.4% · 4 req · 19 anim |
++| openvibe.news | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +1 KB · 0 nodes · 0 lst | 0.6% · 3 req · 3 anim |
++| openre.stream | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +3 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.reviews | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | -2 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| search.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.3% · 4 req |
++| sources.openvibe.network | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0% · 0 req |
++| openvibe.tips | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.3% · 3 req · 3 anim |
++| openvibe.tools | 8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · -2 lst | 0.2% · 4 req |
++| openvibe.trade | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.vip | 2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | +2 KB · 0 nodes · 0 lst | 0.2% · 3 req · 3 anim |
++| openvibe.wiki | 4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | 0/0 (0) | 0 KB · 0 nodes · 0 lst | 0.1% · 4 req |
++
++Known errors, counted and not failed (`--strict-errors` fails them):
++- Cloudflare Web Analytics beacon, injected at the edge, blocked by the site CSP: 17× on openvibe.media, sources.openvibe.network
++
++<details><summary>Details: routes and findings per site</summary>
++
++**https://ai.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +3 KB, nodes 0, listeners +2, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://ai.openvibe.network/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://billing.openvibe.network**: pass (1 route(s), Chrome/150.0.7843.0)
++- `/policy`: pass
++- navigation `/policy` ↔ `/policy` ×5 (load): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0% (script 0 ms, style 0 ms, layout 0 ms), 0 request(s), 0 KB
++
++**https://openvibe.blog**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/@openvibe/patch-notes-chat-parity-script`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.blog/shared/release-watch.js`, `https://openvibe.blog/release.json`, `https://openvibe.blog/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.chat**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/rooms`: pass
++- `/updates`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/rooms` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.chat/shared/release-watch.js`, `https://openvibe.chat/release.json`, `https://openvibe.chat/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.codes**: pass (7 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/tools/webhooks`: pass
++- `/manifests/validate`: pass
++- `/docs`: pass
++- `/oauth`: pass
++- `/policy`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/tools/webhooks` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 2 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.codes/shared/release-watch.js`, `https://openvibe.codes/release.json`, `https://openvibe.codes/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.community**: pass (6 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/pastes`: pass
++- `/pulse`: pass
++- `/p/rogue-frame-5292`: pass
++- `/s`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/pastes` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.community/shared/release-watch.js`, `https://openvibe.community/release.json`, `https://openvibe.community/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.coupons**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -16 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.coupons/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.deals**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 2 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.deals/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.games**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 12.9% (script 3 ms, style 35 ms, layout 0 ms), 3 request(s), 0.3 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.games/release.json`, `https://events.openvibe.network/realtime/stream`); 1 running animation(s), 1 infinite: `pulse on a.play-cta`
++
++**https://openvibe.host**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.host/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.live**: pass (8 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/content`: pass
++- `/chat`: pass
++- `/search?q=minecraft`: pass
++- `/vod/5627`: pass
++- `/clip/369`: pass
++- `/@JapaneseOldGuy`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/content` ×5 (in-page+link): pass; growth lap 2→5: heap +34 KB, nodes +10, listeners +1, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 22% (script 46 ms, style 182 ms, layout 20 ms), 17 request(s), 158.8 KB; 36 running animation(s), 33 infinite: `opacity on div.hero-float-inner`, `transform on div.hero-float-inner`, `heroBgKenBurns on div.hero-bg-layer`, `heroFloat3d on a.hero-float`
++
++**https://openvibe.media**: pass (3 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap +3 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.4 KB (`https://openvibe.media/shared/release-watch.js`, `https://openvibe.media/release.json`, `https://openvibe.media/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.network**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/login`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap -3 KB, nodes 0, listeners +1, documents 0, intervals -1, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 28.4% (script 3 ms, style 130 ms, layout 155 ms), 4 request(s), 6.4 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.network/release.json`, `https://openvibe.network/release-metrics`, `https://events.openvibe.network/realtime/stream`); 19 running animation(s), 19 infinite: `orb-drift on div.orb`, `ovmFloat on svg`, `ovmGlow on circle`, `ovmComet on circle`
++
++**https://openvibe.news**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +1 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.6% (script 7 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.news/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openre.stream**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +3 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openre.stream/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.reviews**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap -2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.reviews/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://search.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass (application/problem+json: only the status is checked)
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts -2, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 5 ms, style 0 ms, layout 0 ms), 4 request(s), 6.6 KB (`https://search.openvibe.network/shared/release-watch.js`, `https://search.openvibe.network/release.json`, `https://search.openvibe.network/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++ - error during navigation: network: Failed to load resource: the server responded with a status of 404 ()
++
++**https://sources.openvibe.network**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass (application/problem+json: only the status is checked)
++- navigation `/` ↔ `/` ×5 (load): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0% (script 0 ms, style 0 ms, layout 0 ms), 0 request(s), 0 KB
++
++**https://openvibe.tips**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.3% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.tips/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.tools**: pass (8 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/developers`: pass
++- `/updates`: pass
++- `/tool/yaml`: pass
++- `/all-tools`: pass
++- `/network-tools`: pass
++- `/developer-tools`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/developers` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners -2, documents 0, intervals 0, timeouts -1, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 2 ms, style 0 ms, layout 0 ms), 4 request(s), 6.4 KB (`https://openvibe.tools/shared/release-watch.js`, `https://openvibe.tools/release.json`, `https://openvibe.tools/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++**https://openvibe.trade**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 2 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.trade/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.vip**: pass (2 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/` ×5 (link): pass; growth lap 2→5: heap +2 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.2% (script 3 ms, style 0 ms, layout 0 ms), 3 request(s), 0.2 KB (`https://openvibe.network/shared/release-watch.js`, `https://openvibe.vip/release.json`, `https://events.openvibe.network/realtime/stream`); 3 running animation(s), 3 infinite: `drift on i`
++
++**https://openvibe.wiki**: pass (4 route(s), Chrome/150.0.7843.0)
++- `/`: pass
++- `/updates`: pass
++- `/s/openvibe`: pass
++- `/__ovcheck-404`: pass
++- navigation `/` ↔ `/updates` ×5 (link): pass; growth lap 2→5: heap 0 KB, nodes 0, listeners 0, documents 0, intervals 0, timeouts 0, sockets 0
++ - idle 5s after settle: CPU 0.1% (script 3 ms, style 0 ms, layout 0 ms), 4 request(s), 6.1 KB (`https://openvibe.wiki/shared/release-watch.js`, `https://openvibe.wiki/release.json`, `https://openvibe.wiki/release-metrics`, `https://events.openvibe.network/realtime/stream`)
++
++</details>
++
++### Network-down run 2026-09-26T11:03:32.079Z (ADR-024)
++
++20/22 sites paint with openvibe.network unreachable (every request to it fails). Checked at 390 and 1280 px: status 200, settled, at least 200 characters of text, a `--accent` theme token and a background.
++
++| Site | 390 | 1280 | --accent | Note |
++|---|---|---|---|---|
++| ai.openvibe.network | ✓ | ✓ | #3b82f6 | |
++| billing.openvibe.network | **✗** 200 188 chars | ✓ | #7aa7ff | |
++| openvibe.blog | ✓ | ✓ | #3b82f6 | |
++| openvibe.chat | ✓ | ✓ | #3b82f6 | |
++| openvibe.codes | ✓ | ✓ | #3b82f6 | |
++| openvibe.community | ✓ | ✓ | #3b82f6 | |
++| openvibe.coupons | ✓ | ✓ | #3b82f6 | |
++| openvibe.deals | ✓ | ✓ | #3b82f6 | |
++| openvibe.games | ✓ | ✓ | #3b82f6 | |
++| openvibe.host | ✓ | ✓ | #3b82f6 | |
++| openvibe.live | ✓ | ✓ | #3b82f6 | |
++| openvibe.media | **✗** 200 no theme | **✗** 200 no theme | — | |
++| openvibe.news | ✓ | ✓ | #3b82f6 | |
++| openre.stream | ✓ | ✓ | #3b82f6 | |
++| openvibe.reviews | ✓ | ✓ | #3b82f6 | |
++| search.openvibe.network | ✓ | ✓ | #3b82f6 | |
++| sources.openvibe.network | ✓ | ✓ | #7aa2ff | |
++| openvibe.tips | ✓ | ✓ | #3b82f6 | |
++| openvibe.tools | ✓ | ✓ | #3b82f6 | |
++| openvibe.trade | ✓ | ✓ | #3b82f6 | |
++| openvibe.vip | ✓ | ✓ | #3b82f6 | |
++| openvibe.wiki | ✓ | ✓ | #3b82f6 | |
++
++### Network-down run 2026-09-26T11:09:21.983Z (ADR-024)
++
++22/22 sites paint with openvibe.network unreachable (every request to it fails). Checked at 390 and 1280 px: status 200, settled, at least 120 characters of text, a `--accent` theme token and a background.
++
++| Site | 390 | 1280 | --accent | Note |
++|---|---|---|---|---|
++| ai.openvibe.network | ✓ | ✓ | #3b82f6 | |
++| billing.openvibe.network | ✓ | ✓ | #7aa7ff | |
++| openvibe.blog | ✓ | ✓ | #3b82f6 | |
++| openvibe.chat | ✓ | ✓ | #3b82f6 | |
++| openvibe.codes | ✓ | ✓ | #3b82f6 | |
++| openvibe.community | ✓ | ✓ | #3b82f6 | |
++| openvibe.coupons | ✓ | ✓ | #3b82f6 | |
++| openvibe.deals | ✓ | ✓ | #3b82f6 | |
++| openvibe.games | ✓ | ✓ | #3b82f6 | |
++| openvibe.host | ✓ | ✓ | #3b82f6 | |
++| openvibe.live | ✓ | ✓ | #3b82f6 | |
++| openvibe.media | ✓ | ✓ | #3b82f6 | |
++| openvibe.news | ✓ | ✓ | #3b82f6 | |
++| openre.stream | ✓ | ✓ | #3b82f6 | |
++| openvibe.reviews | ✓ | ✓ | #3b82f6 | |
++| search.openvibe.network | ✓ | ✓ | #3b82f6 | |
++| sources.openvibe.network | ✓ | ✓ | #7aa2ff | |
++| openvibe.tips | ✓ | ✓ | #3b82f6 | |
++| openvibe.tools | ✓ | ✓ | #3b82f6 | |
++| openvibe.trade | ✓ | ✓ | #3b82f6 | |
++| openvibe.vip | ✓ | ✓ | #3b82f6 | |
++| openvibe.wiki | ✓ | ✓ | #3b82f6 | |
ddiff --git a/scripts/browser-check.js b/scripts/browser-check.js
iindex 84ffc8a..b7c68f5 100644
---- a/scripts/browser-check.js
++++ b/scripts/browser-check.js
@@@ -26,6 +26,12 @@
* the report is written here. The remote needs Node 22+ and Chrome (CHROME_BIN or /usr/bin/google-chrome),
* and reaches the sites itself. OVHOST_SSH overrides the ssh command (e.g. "ssh -p 2222").
*
++ * --network-down (ADR-024, WS-E task 1): instead, each site's home page loads with openvibe.network unreachable
++ * (the harness's checkUnreachable: every request to it fails), at 390 and 1280 px, and must still paint: status
++ * 200, settled, 120+ characters of text (a blank page has none; a short sign-in page has ~190), a --accent
++ * theme token and a background. openvibe.network itself is left out. Needs
++ * a harness with checkUnreachable (Shared 1.21.0 and later, or --harness a checkout).
++ *
* The harness comes from --harness, else openvibe-shared/browser-harness (Shared 1.16.0 and later), else a
* sibling OpenVibe.Shared checkout. Needs Chrome and Node 22. (--routes-json '<json>' is --routes-file inline;
* --remote uses it to carry the routes file.)
@@@ -227,8 +233,39 @@ function runRemote(host, harnessFile) {
// ─── Main ─────────────────────────────────────────────────────────────────────────────────────────
++/** --network-down: every site's home with openvibe.network unreachable (ADR-024). */
++async function networkDown(h) {
++ if (typeof h.checkUnreachable !== 'function') throw new Error('this harness has no checkUnreachable (Shared 1.21.0+); pass --harness <OpenVibe.Shared/browser-harness.js>');
++ const netHost = new URL(NETWORK).hostname;
++ const sites = (await resolveSites(await registry())).filter((s) => new URL(s.origin).hostname !== netHost);
++ const block = [`*://${netHost}/*`];
++ const results = [];
++ const browser = await h.launch({});
++ try {
++ for (const site of sites) {
++ let r;
++ try { r = await h.checkUnreachable(`${site.origin}/`, { block, widths: [390, 1280], browser, minText: 120 }); } catch (e) { r = { url: `${site.origin}/`, ok: false, error: e.message, widths: [] }; }
++ r.id = site.id;
++ results.push(r);
++ errLog(`${r.ok ? 'ok ' : 'FAIL'} ${site.origin}${r.error ? ` (${r.error})` : ''}`);
++ }
++ } finally { await browser.close(); }
++ const at = new Date().toISOString();
++ const rows = results.map((r) => {
++ const w = (px) => r.widths.find((x) => x.width === px) || {};
++ const cell = (x) => (x.ok ? '✓' : x.status == null ? '—' : `**✗** ${x.status}${x.settled === false ? ' unsettled' : ''}${x.accent ? '' : ' no theme'}${(x.textChars || 0) < 120 ? ` ${x.textChars || 0} chars` : ''}`);
++ return `| ${new URL(r.url).hostname} | ${cell(w(390))} | ${cell(w(1280))} | ${(w(1280).accent || '—')} | ${r.error ? r.error.slice(0, 80) : ''} |`;
++ });
++ const md = `### Network-down run ${at} (ADR-024)\n\n${results.filter((r) => r.ok).length}/${results.length} sites paint with ${netHost} unreachable (every request to it fails). Checked at 390 and 1280 px: status 200, settled, at least 120 characters of text, a \`--accent\` theme token and a background.\n\n| Site | 390 | 1280 | --accent | Note |\n|---|---|---|---|---|\n${rows.join('\n')}\n`;
++ if (has('json')) process.stdout.write(`${JSON.stringify(results, null, 2)}\n`);
++ else console.log(md);
++ if (arg('out')) fs.appendFileSync(arg('out'), `\n${md}`);
++ process.exit(results.every((r) => r.ok) ? 0 : 1);
++}
++
(async () => {
const { h, file: harnessFile } = loadHarness();
++ if (has('network-down')) return networkDown(h);
const widths = arg('widths') ? arg('widths').split(',').map(Number) : h.WIDTHS;
const meta = { at: new Date().toISOString(), runner: 'local', widths, axe: has('no-axe') ? 'off' : `axe-core ${h.AXE.version}, WCAG 2.1 A/AA`, nav: has('no-nav') ? 'off' : `${Number(arg('laps') || 5)} laps` };
let reports, code;