Skip to content

Dev - #360

Merged
jason5ng32 merged 33 commits into
mainfrom
dev
Jul 28, 2026
Merged

Dev#360
jason5ng32 merged 33 commits into
mainfrom
dev

Conversation

@jason5ng32

Copy link
Copy Markdown
Owner

No description provided.

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>
@greptile-apps

greptile-apps Bot commented Jul 28, 2026

Copy link
Copy Markdown

Greptile Summary

This PR expands the application’s network-diagnostics and documentation capabilities.

  • Adds Globalping-backed probe inventory, latency, MTR, and country-selection workflows.
  • Adds OONI-based censorship checks and shared upstream request safeguards.
  • Introduces in-app documentation search and assistant components backed by a configurable docs site.
  • Updates service-status integrations, UI components, translations, documentation, dependencies, and tests.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains; the previously reported manual-input bypass is prevented by validating the shared runnable state inside both measurement submission handlers.

Important Files Changed

Filename Overview
frontend/components/advanced-tools/MtrTest.vue Adds country-based Globalping MTR controls and now validates the complete runnable state inside the submission handler, preventing the previously reported Enter-key limit bypass.
frontend/components/advanced-tools/GlobalLatencyTest.vue Adds selectable Globalping probe countries and applies the same guarded submission behavior across button and Enter-key invocation paths.
frontend/components/advanced-tools/CensorshipCheck.vue Adds combined OONI and real-time Globalping censorship diagnostics with country-oriented result presentation.
common/fetch-with-timeout.js Centralizes bounded upstream requests for the newly added and updated backend integrations.
common/globalping-inventory.js Builds the normalized Globalping country inventory consumed by frontend probe selectors.
common/ooni-blocking.js Normalizes and aggregates OONI measurements into country-level blocking results.
backend-server.js Integrates the new API handlers and supporting backend behavior into the server.
package.json Updates application dependencies for the expanded frontend, monitoring, and tooling functionality.

Reviews (2): Last reviewed commit: "Improvements" | Re-trigger Greptile

@jason5ng32
jason5ng32 merged commit 26bd8bd into main Jul 28, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant