Skip to content

[pull] main from jason5ng32:main - #117

Merged
pull[bot] merged 34 commits into
Cosr-Backup:mainfrom
jason5ng32:main
Jul 28, 2026
Merged

[pull] main from jason5ng32:main#117
pull[bot] merged 34 commits into
Cosr-Backup:mainfrom
jason5ng32:main

Conversation

@pull

@pull pull Bot commented Jul 28, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

jason5ng32 and others added 30 commits July 18, 2026 09:36
Frontend accepted 6-12 hex chars while the backend requires a full
48-bit MAC, so OUI-prefix inputs passed local validation only to get a
400 upstream, surfacing as a generic fetch error.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
On close, reka-ui's DialogContentModal refocuses the pre-open
activeElement with a bare focus() (no preventScroll). Safari doesn't
focus links on click, so it records the outer tabindex container as the
trigger and closing scrolled the page back to that container's top.
Prevent close-auto-focus like SheetContent already does, and disable
vaul's Safari-only position:fixed body lock (noBodyStyles) — its rAF
scroll restore is unreliable on WebKit and reka-ui's lock already
covers background scrolling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New /api/ooni-blocking backs the reworked Censorship Check: OONI matches
domains against the exact tested hostname, so the handler merges the apex
and www. variants (probe_cc x blocking_type) and classifies each country
into confirmed / likely / signs tiers calibrated on real 30-day data.
Window is server-computed and day-aligned so the 6h edge cache holds; 5xx
from OONI's occasionally flaky API gets one fast retry, timeouts do not.
Adds the requireValidDomain() guard (lowercases for one canonical cache key).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ime tests

Default view is now 30 days of OONI observations (tiered per-country rows
with blocking methods) instead of an ad-hoc probe run. The realtime module
becomes a checkbox picker over three sections (flagged / heavily-censored /
usually-open) feeding one Globalping run - raw results, no verdict; rows
pre-padded to probes-per-country to avoid reflow. Degrades gracefully when
the OONI upstream errors: banner + presets stay usable. Probe availability
comes from a session-cached Globalping country list. OONI joins the footer
acknowledgements (CC BY 4.0); copy reworked in all four locales.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New /api/globalping-probes proxies Globalping's probe list and reduces it
server-side to the country picker's shape (which countries have an online
probe, bucketed into five continents) — a ~1.4KB payload instead of the
multi-hundred-KB raw list on the visitor's connection. Coverage changes
slowly and the pickers fail open, so the route sits behind a week of edge
cache. Aggregation is a pure function in common/ with its own spec.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ship

New GlobalpingCountryPicker renders the caller's suggestion sections plus
the full per-continent catalog of probe-having countries (from the backend
inventory), all over one v-model selection with section-level select-all
and a sticky tally. Caps are soft: past the limit (30 for MTR/latency, 12
for censorship) the tally turns red and the run button locks. MTR and
Global Latency keep their curated 28-country spread as the default-selected
suggestion; CensorshipCheck migrates its inline picker to the component and
gains the free catalog. Left picker column matches the results column's
height once results exist (absolute-fill trick, min-height floor).
Also folds CensorshipCheck's render-function table back into the template.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ping / MTR / censorship descriptions now name GlobalPing as the probe
network in all four locales. Adds the shared `globalping` locale section
(picker tally, presets, continents), drops the censorshipcheck keys the
shared picker superseded, and updates the v7.2.0 changelog entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The docs center now carries the full env-var reference and deployment
guides, so the READMEs keep only the two settings a first deploy must
get right (MaxMind, ALLOWED_DOMAINS) and link out for the rest.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A nav search box (desktop, rotating preset questions) and question icon
(mobile) open the GitBook assistant with the visitor's query as its first
message. The embed script loads on demand, never at page load.

Gated on VITE_DOCS_URL at build time and configs.originalSite at runtime.
Greeting, suggestions and the sidebar action follow the UI locale; theming
follows the page color-scheme. Launcher and panel are pinned bottom-left on
the FAB baseline with a height cap so they never overflow the viewport;
DocsAssistant.vue adds a mobile backdrop and scroll lock, syncing state from
the panel since the embed fires no open/close callbacks.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Links to the docs site from VITE_DOCS_URL; hidden when unset so forks
don't show a dead link.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Registers a get_my_test_results tool so questions like "is this normal?"
are answered against the visitor's actual data instead of generic docs.
It reuses the report collector's schema-shaped snapshots, so no new data
pipeline and the same whitelist (lookup tools stay out by design), and
reports which sections have not been run yet so the assistant can suggest
them. Reading is gated behind the embed's confirmation button — those
snapshots carry the visitor's IP.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New section covering what the assistant sends to GitBook, that reading
on-page results requires explicit confirmation, and that the conversation
never passes through our servers. Carries its own gate (VITE_DOCS_URL +
originalSite) rather than riding the report-sharing one, so a deployment
never reads about a feature it doesn't ship.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The embed ships a pill with a text label anchored to the viewport edge;
the FAB dock hugs the 1600px content area instead, so the two drifted
apart on wide screens. Mirrors the dock's inset formula and restyles the
launcher into the same 2.25rem circle, dropping the label and the pill's
padding so the icon keeps its size-4 box instead of being squeezed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Jul 28, 2026
@pull pull Bot added the ⤵️ pull label Jul 28, 2026
@pull
pull Bot merged commit 26bd8bd into Cosr-Backup:main Jul 28, 2026
1 of 2 checks passed
@4everland
4everland Bot requested a deployment to production July 28, 2026 18:27 Abandoned
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant