How it was built

Where the numbers come from, who checked them, and who is responsible.

Why gpconf?

GP is what CelesTrak and Space-Track call the orbital data: general perturbations. Conf is conformance: whether your code reads that data the way it is actually served, not the way it used to be.

Test what your parser actually reads.

Where the numbers come from

Nothing on this site or in the test kit was made up. Every expected value in the kit comes from a real answer that CelesTrak gave (nearly all on 21 September 2026), from the printed international standard cited by clause, or from a labelled re-encoding of such an answer that the kit keeps beside its source; each answer’s web address, time and fingerprint (a SHA-256 hash) are written down. The example satellite used on every page here comes from the printed international standard, not from live data.

Who checked it

Before its first publication, v0.1.0, the kit went through an independent audit: a separate reviewer, with no access to the notes of the people who built it, recomputed every value from the raw responses with its own code. It found no wrong value, and a list of documentation problems that were then fixed. The audit report is public, including the findings. The parts added since, the writer-side case and the later fixes, have not been separately audited.

AI, under human direction

The kit and this site were built with an AI coding assistant (Anthropic’s Claude) working under written rules and step-by-step human review. The AI was not allowed to invent data, had to record every decision in a public log, and could not publish anything on its own. The auditor was also an AI, in a separate session, told to trust nothing in the repository. This is stated plainly so you can weigh it.

Who is responsible

The corpus and this site are maintained by Honorius Neogy and published by NEOGY LLC: the corpus under the Apache-2.0 licence from v0.7.0 (its releases up to 0.6.2 under the MIT licence), this site’s code and text under the MIT licence. gpconf™ is a trademark of NEOGY LLC: fork the corpus freely, under another name (trademark policy). If you find a mistake, the most useful report names the case, the file’s hash and the field; open an issue on the corpus repository.

What this site will never show

  • No orbit data copied from CelesTrak: only counts, yes/no answers and times.
  • No values from operator-supplied (SupGP) data.
  • Nothing from Space-Track, whose terms forbid passing its data on.
  • No requests to CelesTrak caused by you visiting. A scheduled job fetches a few pages a day; the site only shows what it computed.
  • No trackers, no cookies, no outside scripts. The tools run in your browser and send nothing.

Provenance, verification, the audit, AI assistance under human direction, and the rules this site is built under.

Why gpconf?

GP is what CelesTrak and Space-Track call the orbital data: general perturbations. Conf is conformance: whether your code reads that data the way it is actually served, not the way it used to be.

Test what your parser actually reads.

Provenance of the corpus

  • No element set was invented. Every value traces to a CelesTrak response whose URL, retrieval time and SHA-256 are recorded in manifest.json, to a published standard cited by clause, or to a committed, labelled transformation of such a record (derived/, each with a provenance sidecar).
  • Provider data is not redistributed. CelesTrak states no redistribution terms and silence is not permission; tools/fetch.py rebuilds the fixtures on your machine under CelesTrak’s own policy, once, cached, never looped, and reports hash drift for stable sources. One response from CelesTrak is shipped, and named as the exception (corpus D-247): the 16-byte text No GP data found, which it returns with HTTP 404 to a TLE request for an object numbered above 99999. It holds no orbital data, and shipping it means a fetch never asks for an answer it knows to be an error.
  • Verification. Expected values were produced by reference readers written from the format documents and cross-checked record by record against python-sgp4 and Skyfield; the renderer behind the derived TLE sets reproduced 304 of 304 fetched CelesTrak TLE sets byte for byte, the name line, line 1 and line 2 of each. Where a specification and provider practice disagree, both are recorded as an ambiguity and neither is silently chosen.
  • Space-Track. Its user agreement prohibits transferring its data, so none is in the corpus or on this site. The maintainer verified the Alpha-5 encoding against their own Space-Track account with a tool that prints verdicts only (decision D-070); a name guard in the repository refuses any Space-Track-named path.

The independent audit

Completed 2026-09-21 before publication, at commit 4db7d2a. The auditor was a separate AI session with no access to the building session’s context, instructed to trust nothing in the repository and to recompute values independently. It made 65,887 field-level comparisons across every record of every case, all agreeing with the frozen expected values, and confirmed all 128 recorded hashes (v0.1.0), byte counts, statuses and record counts. It found three false statements in public documentation, several overstated claims, two decisions never implemented and minor inconsistencies; every finding and its resolution is in AUDIT.md and DECISIONS.md (D-054 onward). It was not a human review.

AI assistance under human direction

The corpus was built with Anthropic’s Claude operating as a coding agent under a written decision policy (CLAUDE.md): decide technical matters autonomously, log every non-trivial choice, reversal and correction in an append-only DECISIONS.md, fix weak provenance without asking, and stop for anything involving terms, credentials, publishing, contacting people or spending. Work ran in phases, each ending in the owner’s review. This site was built the same way, with its own DECISIONS.md; the catalog change it documents happened after the model’s training data ends, so nothing rests on the model’s memory of the domain.

Upstream

  • python-sgp4 #171: empty <OBJECT_ID/> import failure, filed from the corpus; the fix is PR #172, submitted at the maintainer’s invitation, amended after review, merged 2026-09-24.
  • python-sgp4 #169 / PR #170: nine-digit ids, reported independently before the corpus existed; the corpus tested the PR across all sixteen cases the corpus had at the time and reported the result.

This site

  • Static HTML built by a small Python script (Jinja2 templates), served from Cloudflare Pages; no framework, no external scripts, fonts or images. The one font the pages bring, Space Grotesk, for headings and labels, is served from this site under the SIL Open Font License. A strict Content-Security-Policy (connect-src 'self', form-action 'none') so the tools cannot send anything anywhere.
  • The tracker and library data are produced by scheduled GitHub Actions jobs that commit computed JSON; the pages are rendered from that JSON at build time and work without JavaScript. Visitors never trigger a request to CelesTrak.
  • Fetch etiquette: at most eight CelesTrak requests per day (four daily endpoints plus at most four weekly drift checks), each URL once per run, a User-Agent naming the project and this site, no redirects, no retries, two seconds between requests; a rerun on the same day makes no request, and the day after a refused (HTTP 403) run makes none. The policy is enforced in code and tested.
  • Shown data: counts, yes/no states, HTTP statuses, byte counts, hashes and timestamps. The only element sets on the site are the CCSDS annex G example and the corpus’s published derived Alpha-5 example.

Responsibility and licence

Maintainer: Honorius Neogy. Publisher and copyright holder: NEOGY LLC. The corpus’s code, text, vectors, derived files and expected values are under the Apache-2.0 licence from v0.7.0; its releases up to 0.6.2 stay under the MIT licence. gpconf™ is a trademark of NEOGY LLC, and forks are welcome under a different name; the trademark policy says what the name may and may not be used for. Provider data is not included; the one provider response the corpus ships, CelesTrak’s 16-byte no-data answer, is CelesTrak’s text and is not under that licence. To cite the corpus use its CITATION.cff: concept DOI 10.5281/zenodo.22867654, version DOI 10.5281/zenodo.23382463 for v0.7.0.