Upstream record

What happened to each problem the test kit found in other people’s software: what was wrong, who fixed it, and whether a released version has the fix. Every line links to the public discussion, so nothing here has to be taken on trust.

One row per finding reported upstream. The wording of each row is kept by hand (site/content/upstream.json); every state, date, name and release tag is read from the GitHub REST API by a job (jobs/upstream_status.py), and the build refuses a row whose outcome the API does not bear out.

How to read it

The outcome column keeps four things apart, because they are not the same kind of credit. “Pull request from this project, merged” means the fix was written here and the other project accepted it. “Fixed by the maintainer after this project’s report” means the problem was reported from here and they wrote the fix. “Open” means it is reported and not settled. “Other” covers the rest, with a line saying what happened. A report that led nowhere is listed like any other.

Outcomes: pull request from this project, merged (the fix thread is a merged pull request authored by the corpus’s maintainer); fixed by the maintainer or by another contributor after this project’s report (their merged pull request, or their release); open (the report is open); other (stated per row). “Released in” is the oldest release tag that contains the fix’s merge commit, by the API’s comparison; where none does, the row says so and names the latest release.

Findings reported upstream, by project
projectwhat was wrong, and where it was saidoutcomereleased in
python-sgp4 An OMM whose OBJECT_ID is empty, as CelesTrak writes analyst objects, raised a TypeError.
#171 closed 2026-09-24 (report) · #172 merged 2026-09-24 (fix)
Pull request from this project, merged
merged 2026-09-24 by brandon-rhodes
merged, not yet released
latest release: 2.27
python-sgp4 A nine-digit NORAD_CAT_ID is refused by the OMM reader.
Not this project's report: found and reported by another user before the corpus existed. The open pull request was tested against the corpus, and the results posted on it.
#169 open 2026-08-20 (report by michaelbaisch) · #170 open 2026-09-01 (proposed fix by karlhillx) · test report on #170 (this project's comment) · comment on #169 (this project's comment)
Other —
python-sgp4 The compiled Satrec writes the letters I and O in Alpha-5 fields, which the format skips.
Found by the writer case of corpus v0.7.0 on the compiled build: three failing items, in the catalogue at that tag. (corpus D-307)
#173 open 2026-10-10 (report)
Open —
satellite.js json2satrec dropped the digits of an OMM epoch beyond the millisecond.
#185 closed 2026-10-13 (report) · #186 merged 2026-09-26 (fix)
Pull request from this project, merged
merged 2026-09-26 by 1valdis
merged, not yet released
latest release: 7.1.0
satellite.js Nothing in the library decoded an Alpha-5 catalog field.
#185 closed 2026-10-13 (question) · #187 merged 2026-09-28 (decoder)
Pull request from this project, merged
merged 2026-09-28 by 1valdis
merged, not yet released
latest release: 7.1.0
satellite.js twoline2satrec reads a TLE field up to a stray letter and sets no error.
#190 closed 2026-10-14 (report) · #197 merged 2026-10-14 (fix)
Pull request from this project, merged
merged 2026-10-14 by 1valdis
merged, not yet released
latest release: 7.1.0
Gpredict The mean motion lost its eighth decimal on every element set: ten characters read of an eleven-character field.
Checked by the corpus at the merge commit: the project’s own test set, printed 16.05824518, reads 16.0582451 at v2.6 and 16.05824518 at the merge. (corpus D-316)
#426 closed 2026-10-08 (report) · #428 merged 2026-10-08 (fix)
Pull request from this project, merged
merged 2026-10-08 by csete
merged, not yet released
latest release: v2.6
Gpredict A letter in a TLE's epoch field was accepted, and the epoch read up to it.
Checked by the corpus at the merge commit: the altered line is refused and the unaltered line reads in full. (corpus D-309)
#427 closed 2026-10-10 (report) · #430 merged 2026-10-10 (fix by Wahaj18)
Fixed by Wahaj18 after this project's report
merged 2026-10-10 by csete
merged, not yet released
latest release: v2.6
swift-sgp4 Satellites numbered 100000 and up were refused: the bundled libsgp4 predated Alpha-5.
#4 closed 2026-10-11 (report) · maintainer's note (fix announced)
Fixed by the maintainer after this project's report 4.1.0
astroz Alpha-5 catalog numbers were decoded without skipping I and O, so every id from J upward was wrong.
#97 closed 2026-09-26 (report) · #99 merged 2026-09-26 (fix by the maintainer)
Fixed by the maintainer after this project's report
merged 2026-09-26 by ATTron
v0.13.0
astroz The TLE epoch came out as a Julian date hundreds of days off.
#98 closed 2026-09-26 (report) · #99 merged 2026-09-26 (fix by the maintainer)
Fixed by the maintainer after this project's report
merged 2026-09-26 by ATTron
v0.13.0
astroz Seconds passed through a half-precision float, up to 15.5 ms off.
Found by probing the library directly, not by a corpus case.
#102 closed 2026-09-26 (report) · #104 merged 2026-09-26 (fix by the maintainer)
Fixed by the maintainer after this project's report
merged 2026-09-26 by ATTron
v0.14.0
libsgp4 Every Alpha-5 field was refused, and the pull request open to decode them mapped X, Y and Z wrongly.
results on #42 (this project's comment) · #44 open 2026-08-05 (request by alexanderZorg) · #46 merged 2026-09-26 (fix by the maintainer)
Fixed by the maintainer after this project's report
merged 2026-09-26 by dnwrnr
v3.0
libsgp4 A TLE epoch is 8 microseconds off through DateTime(year, day), and FromCsv reads garbage microseconds from an epoch with no fraction.
#45 open 2026-09-24 (report)
Open —
PyEphem readtle() gives catalog number 0 for an Alpha-5 element set.
#296 open 2026-09-25 (report)
Open —
PyEphem readtle() accepts a letter in the epoch field and reads the epoch up to it.
Closed by the maintainer without a change: PyEphem follows the reference implementation's behaviour, and it is a legacy library that is not taking new code.
#297 closed 2026-10-01 (report) · maintainer's reply (closed)
Other —
strf number_to_alpha5 has no range check above 339999 (a hardening suggestion, not a bug report).
#88 open 2026-09-23 (suggestion)
Open —
tle.js getCatalogNumber() returns NaN for Alpha-5 numbers, and two-digit years pivot at 50 instead of 57.
#62 closed 2026-10-19 (report) · #64 merged 2026-10-19 (fix)
Pull request from this project, merged
merged 2026-10-19 by davidcalhoun
v6.0.0
tle.js getEpochDay() reads the epoch up to a stray letter, and isValidTLE() calls the set valid.
#63 open 2026-09-28 (report)
Open —
SatDump The TLE registry drops Alpha-5 sets silently, and the Kepler CSV reader rejects CelesTrak SupGP files.
Closed by the reporter after the reply: both are known and planned, Alpha-5 support and a rewrite of the OMM parsing. The same reply asked for shorter reports that keep to the issue; later reports are shorter.
#1221 closed 2026-09-27 (report) · collaborator's reply (answer)
Other —
gods-eye-view Satellites with Alpha-5 catalog numbers collapse onto one NaN key, and all but the first are dropped.
#751 open 2026-09-24 (report) · #767 merged 2026-10-17 (fix)
Pull request from this project, merged
merged 2026-10-17 by samehkhamis
merged, not yet released
latest release: v0.2.1
gods-eye-view One TLE set missing a line drops every satellite after it in the group.
#906 closed 2026-10-12 (report) · #936 merged 2026-10-12 (fix by xiehuanyi) · kvnloo’s comment on #906 (credits this project’s report) · #1101 merged 2026-10-17 (follow-up by VG31OP: pairs with mismatched catalog numbers refused)
Fixed by xiehuanyi after this project's report
merged 2026-10-12 by asturksever
merged, not yet released
latest release: v0.2.1
SatelliteKit B* read from a TLE comes out as e-53 instead of e-05.
#16 open 2026-10-08 (report)
Open —

States, dates and release tags read from the GitHub API on 2026-10-23 02:43 UTC; the data is at /data/upstream/latest.json. A thread’s badge is its state on GitHub, not a judgement of it.

Who did the work on the other side

A report is the small part. These people read them, answered, and in most cases wrote or merged the fix. Each name links to what they wrote in public.

Maintainers and contributors who acted on these threads, each linked to their own public comment or pull request.

What is not on this page

Findings that have not been reported to the project concerned are not listed until they are. The counts of failing cases per library are on Library status, and the live state of the python-sgp4 threads on Activity.