Skip to content

Release candidate - #310

Merged
jwrosewell merged 19 commits into
mainfrom
rc
Nov 12, 2026
Merged

jwrosewell merged 19 commits into
mainfrom
rc

Conversation

@jwrosewell

Copy link
Copy Markdown
Contributor

Release candidate for the documentation: rc into main.

What it brings

  • #309, a new page, Your connection and device as JSON (src/services/json.md), for https://51degrees.com/json, listed last on the Services index. A customer opens 51degrees.com/json in the browser that is giving them trouble and pastes the answer into a support request. The page shows an example answer, describes each key, explains calling it with fetch, and says it is free and throttled.
  • #306, space between list items across the documentation.

Timing

A 51degrees.com blog post about the JSON page is scheduled for 11:00 UK on Thursday 12 November and links to it, at https://51degrees.com/documentation/_services__json.html. The page goes live after this merges into main and the Build Documentation run that follows finishes. The 51degrees.com release the page depends on is already live, because on 11 November https://51degrees.com/json answered with the release years the page describes.

The last release from rc into main was #301, merged on 6 November at 14:57 UTC.

Checks

This repository has no build of its own on a pull request beyond the Preview Documentation build and the link checks, which run on this pull request. Both drafts above passed them on their own heads before merging into rc.

jwrosewell and others added 19 commits November 3, 2026 21:05
…285)

* Grab the Go IP Intelligence examples by their names in the Go repository

* Grab the Go IP Intelligence examples by their names in the Go repository

* Grab the Go IP Intelligence examples by their names in the Go repository

* Grab the Go IP Intelligence examples by their names in the Go repository
…ation can be from the device (#293)

Accurate means a location is correct. A location from an IP address can be
correct and still only narrow the device down to an area, so the pages say
imprecision and precise where they describe that. The property names, such as
AccuracyRadiusMin, are unchanged.
* Plainer wording and small fixes across the documentation

434 changes on 137 pages from a full copy review of the documentation:
plain statements in place of marketing phrases, US spelling, consistent
names, and small grammar and punctuation fixes. No link target, anchor or
code example changes. A few sentences that carried inline code or a link
are shortened or removed, for example a note on the false positive control
page about a change that is not planned. Accuracy questions and changes
that need a decision are not included.

* Headings in sentence case

267 headings change to sentence case, as the 51Degrees writing guide asks.
Product and feature names keep their capitals, for example Device
Detection, IP Intelligence, Reverse Geocoding, Human Confidence and
Pipeline API. Documenting.md now asks for sentence case in place of Title
Case. Only letter case changes, so anchors and links are unaffected.
…quests (#299)

The preview repository's main branch has refused force pushes since the
morning of 4 November, so no preview has been published since. The
fallback after a failed push could never succeed, because the rebase had no
committer identity, and because it sat inside an && list the step still
passed and posted a link to a preview that was not there. Both workflows
now push once and fail when the push is refused. The shared concurrency
group already runs one push at a time.

Cleanup now passes when a pull request has no preview, as happens when it
closes before its preview is published, and publishing skips a pull request
that has already closed, so no preview is left behind with nothing to
remove it.
The search box at the top right of every documentation page called
/api/search/, which no longer exists, and Enter went to /SearchResults/<q>,
which now redirects to /search-results and drops the question.

The box now starts hidden, and search51.js shows it only when
GET /api/v1/sid/status answers ready: true. On pages that carry the
51degrees.com analytics script it asks once that script announces the
cloud scripts have run, or after 12 seconds. A failed request, a response
that is not OK, or no answer within 4 seconds leaves the box hidden, which
is what happens on GitHub Pages where there is no assistant. Enter with at
least 3 characters, once trimmed, stores the question under
sidTypedQuestion in sessionStorage and opens
/search-results?query=<question>.

In the docs header the box grows into free space up to 30rem (480px), so a
whole question fits. While hidden it keeps its space with
visibility: hidden, so the header does not move when the box appears.

The type-ahead results list and its markup go with the endpoint they
called. The placeholder and label read "Ask a question", as the
51degrees.com assistant's own boxes do. HEADER-NOTES.md explains the
hidden box.
…#295)

The snippet every on-premise example page includes sent readers to the pricing
page for the more capable data files. The Enterprise data file comes by
contacting 51Degrees, so the snippet now says it has every property and links
to the contact page.

The Go IP Intelligence examples include example-require-datafile-ipi.txt,
which did not exist, so their pages said nothing about the data file. The new
snippet says how to download the free Lite file, which properties it gives,
and where to ask for the Enterprise file.
The concurrent processing page and the version 4 upgrade page show C and
C++ programs sharing a resource manager or an engine across threads, and
said nothing about the results. Reading a value writes into the results,
so each thread needs its own, which both pages now say.
…plans (#300)

* Correct statements that no longer match the code, the service or the plans

The plain wording pass held back 250 statements as questions about whether
they were still true. Each was checked against the code in the language
repositories, the cloud service's live answers, the pricing page, the
Property Dictionary or the relevant specification. 210 needed correcting,
on 86 pages. The other 40 are either right as they are or left for a
decision.

* Correct further statements found while checking the held ones

Checking the held statements turned up 28 more faults on 31 pages, each
confirmed against the code, the cloud service's live answers, the data
files, the package registries or the relevant specification before it was
changed.

* Describe exactly how the random and hashed email match keys are made

The hashed email key is SHA-256 of one byte holding the salt length, the
salt, then the trimmed and lowercased email, with a salt of 2 to 64 bytes
in URL-safe base64. A worked example was checked against the live
service. The random key is a version 4 UUID in .NET byte order, new on
every call. Each 51Did type now has its own stability rule.
Co-authored-by: James Rosewell <james@51degrees.com>
…rified by data team (#289)

Co-authored-by: James Rosewell <james@51degrees.com>
Bulleted and numbered list items in documentation pages sat directly on
top of each other, so a list of long items, such as Request inputs on the
51Did page, read as one block of text. Each list item after the first now
has a top margin of size(-2), 0.69rem or about 11px, which is less than
the 1rem after a paragraph so a list still reads as one group.

The rule sits under .l-docs-index .g-docs__primary, so it reaches only
lists in the page content. The side navigation is outside that element,
the tabbed code snippets use buttons, and the Doxygen code fragments use
div.line, so none of them change.
* Document 51degrees.com/json for support requests and scripts

A new Services page explains what 51degrees.com/json returns for the
request that asks: the IP address with its location and network, and
the device, operating system and browser. It covers pasting the answer
into a support request, calling it with curl or fetch from any website,
the request limits and the redirect to the contact page over them, and
what is sent to the cloud service.

* The JSON page says it is throttled without giving the limits

The page now says 51degrees.com/json is throttled to prevent abuse and that the throttling can change, rather than stating the number of requests, the window and the redirect, so the throttling can be changed without changing the documentation.

* The JSON page gives the release years and says crawlers are refused

51degrees.com/json gives the release year of the device, operating system and browser beside each age, because an age of 0 means both released this month and could not be dated, and it refuses crawlers, curl included. The device table and the code section say so. The example answer is replaced with a fresh one once the change is live.

* The JSON page opens with what it is for, support

51degrees.com/json is there so a customer can paste the details of their connection and device into a support ticket. The page now says so first, before what it returns.

* The JSON page's example is a real answer from 51Degrees, and it names no other provider

The example answer is now one recorded at 51Degrees on 11 November 2026 for Edge 157 on Windows 11, with only the IP address replaced, so the location fields are what the data returned. It no longer shows iscrawler, which the page no longer returns, and the text says the release years now come beside the release ages. The sentence pointing users of another IP data provider at a migration page is removed.

* The JSON page says it needs a real web browser

51degrees.com/json only answers a real web browser. Curl and other
command-line tools are treated as crawlers, and crawlers are now sent to
the AI notice, which explains how to license the data, rather than
refused. The throttling section says a crawler's request is redirected
too, so code should check the response before using it.

* The JSON example gives an example network name

The registered name in the example answer is replaced by EXAMPLE-NETWORK, as the IP address is replaced by one reserved for documentation, and the sentence above the example says so.

* The JSON page's fetch example handles a redirect, and its example location is an example

A request that is throttled, or that comes from a crawler, is redirected to a page that sends no Access-Control-Allow-Origin header, so a call from another site fails before the response can be read. The example now catches that and checks response.redirected as well as response.ok. The example answer's town and coordinates are replaced by example values, as the IP address and network name already were, and the sentence above it says so.

* The JSON page's sample answer carries the release years

The sample was recorded before 51degrees.com/json gave releaseyear, platformreleaseyear and browserreleaseyear. It is now the live answer of 11 November 2026 for the most common Edge 157 on Windows browser string, sent without Client Hints, with the IP address, town, position and network name still replaced by examples. Its sentence says the browser string alone can't tell Windows 10 from Windows 11, and that the data can't yet date Edge 157, so its release year is 0.

* The JSON page's sample is a real Windows 11 answer with its release years

The sample is now the answer 51degrees.com/json gave a computer at 51Degrees running Edge 157 on Windows 11 on 11 November 2026, with its Client Hints, so the platform is Windows 11.0 (released 2021) rather than the 10.0 a browser string alone gives. Both other release years are 0, because the data can't yet date Edge 157 and a desktop doesn't say who made it, and the sentence above the sample says so. The IP address, town, position and network name stay replaced by examples.

* The JSON page gives both reasons for a release year of 0

The table's note said a release year of 0 means the request did not
carry enough to tell, while the sample's browserreleaseyear is 0 for
Edge 157, a version the request did identify. The note now also says a
release year is 0 where the data has no release date for a version it
did identify, as the sentence above the sample already does.

The sentence above the sample called the town and position examples,
but Reading at 51.454, -0.978 is a real town and position. It now says
they were replaced by a position in Reading, and that the network's
registered name was replaced by an example.
@github-actions

Copy link
Copy Markdown
Contributor

Documentation preview 👀

@jwrosewell
jwrosewell marked this pull request as ready for review November 12, 2026 08:01
@jwrosewell
jwrosewell merged commit 1fcf107 into main Nov 12, 2026
4 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.

3 participants