{
  "slug": "tle-cannot-name-a-satellite-catalogued-after-july",
  "title": "The TLE can no longer name a satellite catalogued after 11 July 2026",
  "date": "2026-10-11",
  "summary": "CelesTrak's last thirty days of newly catalogued objects returns 402 records as JSON and HTTP 404 as TLE. Every new catalogue number is six digits, the two authoritative publishers have chosen different answers to that, and the identifier your scheduler joins on now depends on which one you asked.",
  "author": "Ido Yahalomi",
  "tags": [
    "providers",
    "tooling",
    "data-formats",
    "ccsds"
  ],
  "provenance": "measured",
  "words": 1491,
  "headings": [
    {
      "id": "the-format-ran-out-of-field-not-of-room",
      "level": 2,
      "text": "The format ran out of field, not of room"
    },
    {
      "id": "two-publishers-two-answers-for-the-same-object",
      "level": 2,
      "text": "Two publishers, two answers, for the same object"
    },
    {
      "id": "the-failure-that-costs-money-is-the-one-that-does-not-throw",
      "level": 2,
      "text": "The failure that costs money is the one that does not throw"
    },
    {
      "id": "what-this-changes-for-anyone-counting-beam-hours",
      "level": 2,
      "text": "What this changes for anyone counting beam-hours"
    },
    {
      "id": "what-would-change-my-mind",
      "level": 2,
      "text": "What would change my mind"
    },
    {
      "id": "sources",
      "level": 2,
      "text": "Sources"
    }
  ],
  "html": "<p>Ask CelesTrak for the last thirty days of newly catalogued objects in TLE format and</p>\n<p>you get HTTP 404. Ask for the same thirty days as JSON and you get 402 records. Every</p>\n<p>one of them is numbered above 100000, and that is now the normal case.</p>\n<p>Both of those are measured. I ran the two queries on 11 October 2026, three months</p>\n<p>after the catalogue crossed the line, and the query strings are in the sources at the</p>\n<p>foot of this piece so anyone can repeat them in a browser in under a minute. The</p>\n<p>single-object version is cleaner still. <code>gp.php?CATNR=100000&amp;FORMAT=json</code> serves</p>\n<p>SARAMAGO, international designator 2026-067CY, epoch 2026-10-10T03:17:45. The identical</p>\n<p>request with <code>FORMAT=tle</code> returns 404. A control run against object 25544 in TLE format</p>\n<p>on the same day served the International Space Station normally, so this is the</p>\n<p>catalogue number and not the endpoint.</p>\n<h2 id=\"the-format-ran-out-of-field-not-of-room\">The format ran out of field, not of room</h2>\n<p>CelesTrak&apos;s front page, read on 11 October 2026, carries the notice as its lead item.</p>\n<p>It puts the official USSF catalogue at 100982 and states that &quot;All newly cataloged</p>\n<p>objects have 6-digit catalog numbers of 100000+ and GP data will not be available for</p>\n<p>them using the TLE format.&quot;</p>\n<p>The cause is a column count. The TLE is a fixed-width text record from the punched-card</p>\n<p>era, and columns 3 to 7 of each line hold the satellite catalogue number. Five</p>\n<p>characters, maximum 99999. Dr T.S. Kelso&apos;s CelesTrak page on GP data formats, first</p>\n<p>published 27 May 2020 and updated 23 June 2026, states the consequence without</p>\n<p>decoration: &quot;Of course, TLE formats will not support objects with catalog numbers above</p>\n<p>99999.&quot;</p>\n<p>So the interesting number is not 100982. It is 982, the count of catalogue numbers</p>\n<p>assigned since 11 July 2026, every one of which is unrepresentable in the format most</p>\n<p>tooling still assumes. Across those 92 days that is an estimated average of about</p>\n<p>eleven a day, derived from two documented counter readings and nothing else. It is an</p>\n<p>average, not a forecast, and the population behind it is lumpy: a single breakup event</p>\n<p>can add hundreds in a week.</p>\n<p>What matters more than the rate is which objects they are. They are the new ones.</p>\n<p>Anything catalogued from 11 July onward, which includes every payload from every launch</p>\n<p>since, sits above the line. A pipeline built on TLE text does not degrade gracefully as</p>\n<p>this proceeds. It simply never sees the spacecraft that launched this quarter.</p>\n<h2 id=\"two-publishers-two-answers-for-the-same-object\">Two publishers, two answers, for the same object</h2>\n<p>The United States Space Force produced a bridge. Space-Track&apos;s own documentation, which</p>\n<p>is readable without a login and was read on 11 October 2026, describes Alpha-5 as &quot;a</p>\n<p>stopgap object numbering schema</p>\n<p>from the United States Space Force that increases the satellite catalog&apos;s capacity to</p>\n<p>display up to 339,999 objects&quot;. It replaces the leading digit with a letter, A for 10</p>\n<p>through Z for 33, skipping I and O. Object 100000 prints as <code>A0000</code>.</p>\n<p>Space-Track serves Alpha-5 in its TLE and 3LE outputs and recommends moving off them,</p>\n<p>pointing users to XML, KVN, JSON and CSV, which carry the full nine-digit range.</p>\n<p>CelesTrak declined the bridge. Kelso&apos;s page explains why in one line that is worth more</p>\n<p>than the rest of the argument combined: &quot;18 SPCS is already assigning catalog numbers in</p>\n<p>their new analyst sat range of 7995xxxxx (or over 799,500,000).&quot; Even letting all five</p>\n<p>characters run from 0 to Z, a base-36 field reaches 60,466,176 identifiers, which is</p>\n<p>more than 339,999 and still an order of magnitude short of the numbers the catalogue</p>\n<p>authority has already issued internally. A bridge that does not reach the far bank is a</p>\n<p>pier. CelesTrak&apos;s recommendation is the XML serialisation of the CCSDS Orbit</p>\n<p>Mean-Elements Message, from CCSDS 502.0-B-3, Blue Book, April 2023.</p>\n<p>That leaves two authoritative sources publishing different things about the same</p>\n<p>object, both defensibly. Space-Track gives you <code>A0000</code> in a TLE. CelesTrak gives you</p>\n<p><code>100000</code> in an OMM and gives you nothing at all in a TLE. Neither is wrong. They have</p>\n<p>made opposite bets about whether the installed base is worth two more years of</p>\n<p>compatibility.</p>\n<p>Downstream, that choice propagates. The AWS Ground Station user guide, whose document</p>\n<p>history dates the section to 28 May 2026, says Alpha-5 encoded satellite numbers in</p>\n<p>uploaded TLEs are parsed and resolved to integers, and that the service&apos;s own API field</p>\n<p>stays numeric: &quot;Alpha-5 is purely a display encoding for the TLE text format. The</p>\n<p>underlying numeric satellite catalog number does not change.&quot; N2YO&apos;s API page carries a</p>\n<p>notice dated 20 July 2026 telling callers to &quot;always use the object&apos;s assigned NORAD</p>\n<p>Catalog ID rather than the Alpha-5 identifier found in the TLE file&quot;, because its own</p>\n<p>TLE files show one form and its API expects the other.</p>\n<p>Three providers, three internally consistent conventions, one object. The identifier you</p>\n<p>hold depends on which door you came in through.</p>\n<h2 id=\"the-failure-that-costs-money-is-the-one-that-does-not-throw\">The failure that costs money is the one that does not throw</h2>\n<p>On 6 October 2026 somebody opened an issue against an open-source orbital tool titled,</p>\n<p>verbatim, `TLE with an Alpha-5 catalogue number (e.g. &quot;A0001&quot; = 100001) throws</p>\n<p>FormatException instead of parsing`. The parser called integer-parse on a field</p>\n<p>containing a letter. It has since been closed by a pull request. That is the good</p>\n<p>outcome. An exception is a bug report.</p>\n<p>The expensive version is quieter. satellite.js, which is the SGP4 implementation most</p>\n<p>JavaScript ground software depends on, takes the catalogue number as</p>\n<p><code>longstr1.substring(2, 7)</code> in <code>src/io.ts</code> on master, read 11 October 2026, and keeps it</p>\n<p>as a five-character string with no Alpha-5 decoding, while its OMM path takes</p>\n<p><code>NORAD_CAT_ID</code> and stringifies it. Nothing throws.</p>\n<p>You get <code>&quot;A0001&quot;</code> from one source and <code>&quot;100001&quot;</code> from the other, for the same</p>\n<p>spacecraft, and both look like perfectly good identifiers. Every join keyed on that</p>\n<p>value silently returns nothing. A contact list that comes back empty reads exactly like</p>\n<p>a spacecraft with no passes, and the difference between those two is invisible until</p>\n<p>somebody walks out to the pad.</p>\n<p>This is why the half of the field that has already moved to OMM has not noticed the</p>\n<p>change at all. BeamDesk&apos;s console reads the JSON serialisation of the OMM and never</p>\n<p>parses TLE text. That was not foresight. It was a decision taken for a duller reason,</p>\n<p>that the providers publish OMM and the parser we would otherwise maintain is a parser</p>\n<p>somebody else already maintains better.</p>\n<h2 id=\"what-this-changes-for-anyone-counting-beam-hours\">What this changes for anyone counting beam-hours</h2>\n<p>Every access number this site publishes is computed by propagating an element set. Beam</p>\n<p>hours, worst gap in a day, contact minutes at a particular site: all of them start with</p>\n<p>an identifier and a set of mean elements, and the identifier is the part that just</p>\n<p>changed.</p>\n<p>The cost of adopting OMM is small and it is also not zero. The record carries the same</p>\n<p>mean elements, so the propagator is untouched. What changes is ingestion, the type of</p>\n<p>the catalogue number in your database, every fixed-width assumption in your test</p>\n<p>fixtures, and any code path that compares an identifier from one provider against an</p>\n<p>identifier from another. A day of work for a team that has one ingestion point. Longer</p>\n<p>for a team that has seven, which is the usual number once somebody counts.</p>\n<p>The deadline is not in anyone&apos;s roadmap, which is the awkward part. Nothing breaks on a</p>\n<p>published date. The catalogue simply stops describing the newest spacecraft in the</p>\n<p>format you are reading, and the newest spacecraft are the ones a new market is built</p>\n<p>around. For a venue operator booking ground time against a demonstrator that launched</p>\n<p>this autumn, the first symptom is a spacecraft that cannot be looked up, and the second</p>\n<p>is an availability figure that is quietly computed over the wrong fleet.</p>\n<h2 id=\"what-would-change-my-mind\">What would change my mind</h2>\n<p>If CelesTrak began emitting Alpha-5 from its GP endpoint, the central claim here dies</p>\n<p>and this becomes an encoding footnote rather than a split between publishers. The test</p>\n<p>is one request: <code>gp.php?CATNR=100000&amp;FORMAT=tle</code> returning two lines instead of 404.</p>\n<p>If 18 SPCS released its nine-digit analyst numbers externally, the piece understates the</p>\n<p>problem rather than overstating it. Alpha-5 would stop being a bridge for anybody,</p>\n<p>Space-Track included, and the migration everyone is deferring would become compulsory in</p>\n<p>the same quarter.</p>\n<p>The argument that would genuinely soften this one is a breakdown of the 402 objects I</p>\n<p>counted. If they are overwhelmingly debris and rocket bodies rather than payloads anyone</p>\n<p>schedules a contact against, this is a data-hygiene problem with a long fuse rather than</p>\n<p>an operational one. The list I read contained both, and I have not done that split. I</p>\n<p>would want it before writing this with any more urgency than it already carries, and I</p>\n<p>would publish it either way.</p>\n<h2 id=\"sources\">Sources</h2>\n<ul>\n<li><a href=\"https://celestrak.org/\" rel=\"noreferrer noopener\">https://celestrak.org/</a></li>\n<li><a href=\"https://celestrak.org/NORAD/documentation/gp-data-formats.php\" rel=\"noreferrer noopener\">https://celestrak.org/NORAD/documentation/gp-data-formats.php</a></li>\n<li><a href=\"https://celestrak.org/NORAD/elements/gp.php?CATNR=100000&amp;FORMAT=json\" rel=\"noreferrer noopener\">https://celestrak.org/NORAD/elements/gp.php?CATNR=100000&amp;FORMAT=json</a></li>\n<li><a href=\"https://www.space-track.org/documentation\" rel=\"noreferrer noopener\">https://www.space-track.org/documentation</a></li>\n<li><a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/providing-tle-ephemeris-data.html\" rel=\"noreferrer noopener\">https://docs.aws.amazon.com/ground-station/latest/ug/providing-tle-ephemeris-data.html</a></li>\n<li><a href=\"https://docs.aws.amazon.com/ground-station/latest/ug/doc-history.html\" rel=\"noreferrer noopener\">https://docs.aws.amazon.com/ground-station/latest/ug/doc-history.html</a></li>\n<li><a href=\"https://www.n2yo.com/api/\" rel=\"noreferrer noopener\">https://www.n2yo.com/api/</a></li>\n<li><a href=\"https://ccsds.org/Pubs/502x0b3e1.pdf\" rel=\"noreferrer noopener\">https://ccsds.org/Pubs/502x0b3e1.pdf</a></li>\n<li><a href=\"https://github.com/ktsu-dev/Osculator/issues/69\" rel=\"noreferrer noopener\">https://github.com/ktsu-dev/Osculator/issues/69</a></li>\n<li><a href=\"https://github.com/shashwatak/satellite-js/blob/master/src/io.ts\" rel=\"noreferrer noopener\">https://github.com/shashwatak/satellite-js/blob/master/src/io.ts</a></li>\n</ul>"
}