{
 "date": "2026-10-04",
 "group": "Orbit and upper-atmosphere studies",
 "generated_at": "2026-10-05T07:30:31Z",
 "sources": [
  "job logs and records brought home from the cluster",
  "the hub's jobs list",
  "notebook entries",
  "the research register",
  "commits under tools/hpc"
 ],
 "read_against_pass_lines_today": [
  "the two full-depth screen runs (authority and deep)",
  "the reentry forecast",
  "the fuel gauge",
  "the avoidance map",
  "the intercept forecast",
  "the antenna study"
 ],
 "totals": {
  "jobs": 25,
  "studies_read_against_pass_lines_today": 6,
  "studies_with_jobs": 5,
  "finished": 21,
  "stopped": 1,
  "running_at_end": 0,
  "saving_jobs": 5,
  "node_hours": 28.82
 },
 "pass_line_definition": "A pass line is the result a study's plan named, before the run, as the answer to its question.",
 "studies": [
  {
   "short_name": "the detector rerun",
   "state": "scored; follow-ups owed",
   "provisional": false,
   "pass_line_counts": {
    "met": 1,
    "being read": 1,
    "not met": 2
   },
   "pass_lines": [
    {
     "name": "The published counts come back",
     "status": "not met",
     "reading": "The published counts come back: not met. 22 of 36 quantities fall inside their ranges, so this line is not met. The ranges allow for rows added to the archive during the morning of 20 September.",
     "reason": "22 of 36 quantities fall inside their ranges, so this line is not met."
    },
    {
     "name": "Separation of 10 or more on the SGP4 axis",
     "status": "met",
     "reading": "Separation of 10 or more on the SGP4 axis: met. The separation is 18.212 on the rows to 20 September and 26.848 on all rows to 3 October, so this line is met. Before the rule the figures are 6.9 and 10.399.",
     "reason": "The separation is 18.212 on the rows to 20 September and 26.848 on all rows to 3 October, so this line is met."
    },
    {
     "name": "The SGP4 axis corroborates the inclination by itself",
     "status": "being read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Per-object counts move more than the two halves of a record differ",
     "status": "not met",
     "reading": "R, with a 95% interval from 2,000 object resamples: not met. Not met in all four rows",
     "reason": ""
    }
   ],
   "verdict_today": null,
   "node_hours_last_7_days": 1.29,
   "next": [
    "name the 15 objects behind the failed check against the published counts (11 passive, 4 payload) from an object table as of 20 September, and rerun the check with it"
   ]
  },
  {
   "short_name": "the close-pass study",
   "state": "scored; follow-ups owed",
   "provisional": false,
   "pass_line_counts": {
    "met": 4,
    "not met": 1
   },
   "pass_lines": [
    {
     "name": "A normal error spread covers the truth",
     "status": "not met",
     "reading": "Truth coverage, normal spread: not met. Within one sigma the three directions sit at 0.589, 0.588 and 0.639, inside the 58% to 78% band. Within two they sit at 0.812, 0.781 and 0.865, under 90%.",
     "reason": ""
    },
    {
     "name": "Student-t coverage on held-out objects",
     "status": "met",
     "reading": "Student-t coverage on held-out objects: met. both ways round. The pooled fit gives 1.87 degrees of freedom (1.81 radial, 1.56 along-track, 2.54 cross-track); the two halves give 1.82 and 1.92.",
     "reason": "Below 2 the spread has no finite variance, so sigma here is a scale."
    },
    {
     "name": "Shuffled pairs: summed chance against the count",
     "status": "met",
     "reading": "The summed chance under 1 km must lie inside the 95% Poisson interval of the count under 1 km, on all pairs and on low-orbit pairs with a long axis under 200 m.: met. Met",
     "reason": ""
    },
    {
     "name": "Round integral",
     "status": "met",
     "reading": "Round integral: met. the largest difference from the site's chance was 1.3e-06 against 0.0002. Geometry: met; 99.89% of passes reproduce the record's miss within 10 m.",
     "reason": ""
    },
    {
     "name": "Geometry",
     "status": "met",
     "reading": "Geometry: met. 99.89% of passes reproduce the record's miss within 10 m.",
     "reason": ""
    }
   ],
   "verdict_today": null,
   "node_hours_last_7_days": 0.21,
   "next": [
    "a check of the low-orbit factor on debris or rocket bodies with precise orbits; today 11 objects (five laser spheres, six altimetry satellites) set every non-Starlink low ellipse, along-track factor 13.8"
   ]
  },
  {
   "short_name": "the burn-cadence detector",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 3,
    "not met": 3
   },
   "pass_lines": [
    {
     "name": "1. Recall of 50 mm/s cross-track burns, cadence minus step at least +0.30",
     "status": "not met",
     "reading": "1. Recall of 50 mm/s cross-track burns, cadence minus step at least +0.30: not met. Not met: +0.0027 at k = 134.477. At the same level the cadence detector finds 0.0464 of 75 mm/s burns, 0.1103 of 100 mm/s and 0.3055 of 200 mm/s;",
     "reason": ""
    },
    {
     "name": "2. Passive control at most 5%, upper bound at most 8%",
     "status": "met",
     "reading": "2. Passive control at most 5%, upper bound at most 8%: met. Met: 49 of 4,408 windows of the test half, 0.0111, Jeffreys interval 0.0083 to 0.0145.",
     "reason": ""
    },
    {
     "name": "3a. The period survives the step shuffle, grid",
     "status": "met",
     "reading": "3. The period survives the step shuffle in at most 10% of declared trains: partly met. On the grid, met: 0.0182 of 2,092 declared trains. On payload windows, not met: 159 of 1,295, 0.1228. On passive ring windows from both halves, 1 of 93.",
     "reason": ""
    },
    {
     "name": "3b. The period survives the step shuffle, payload windows",
     "status": "not met",
     "reading": "3. The period survives the step shuffle in at most 10% of declared trains: partly met. On the grid, met: 0.0182 of 2,092 declared trains. On payload windows, not met: 159 of 1,295, 0.1228. On passive ring windows from both halves, 1 of 93.",
     "reason": ""
    },
    {
     "name": "4. At least 80% of declared trains within 10% of the planted period",
     "status": "not met",
     "reading": "4. At least 80% of declared trains within 10% of the planted period: not met. Not met: 0.7610 of 2,092. The share falls with the cadence, from 0.865 at 7 days to 0.517 at 56 days. Passive ring objects reach 0.969 over 1,451 trains;",
     "reason": ""
    },
    {
     "name": "5. Median recovered over planted size within 0.80 to 1.25",
     "status": "met",
     "reading": "5. Median recovered over planted size within 0.80 to 1.25: met. Met: 0.9741 over 2,092 trains.",
     "reason": ""
    }
   ],
   "verdict_today": null,
   "node_hours_last_7_days": 4.61,
   "next": [
    "a declaration level chosen on held-out data that meets pass lines 1 and 2 together: thresholds rebuilt from each window's own resampled residuals, or a level set on the years the recall covers (the 2023 to 2025 passive windows give 80.959, where recall is 0.0302)"
   ]
  },
  {
   "short_name": "the error atlas",
   "state": "scored; follow-ups owed",
   "provisional": true,
   "pass_line_counts": {
    "met": 2,
    "partly met": 2,
    "not met": 2
   },
   "pass_lines": [
    {
     "name": "L1 held-out coverage",
     "status": "partly met",
     "reading": "L1 pooled: met. within one scale 0.655 to 0.742, within two 0.915 to 0.980, both halves L1 medium: not met. 118 objects; within two cross-track 0.983 on one half, every other value inside L1 geosynchronous: not met. 18 objects; within two along-track 0.895 on one half, radial 0.995 on the other L1 low: not met. 12 objects, 6 a half; within two along-track 1.000 both ways, radial 0.829 and 0.891",
     "reason": ""
    },
    {
     "name": "L2 planted errors recovered",
     "status": "partly met",
     "reading": "L2a: met. growth error 0.068 to 0.079; scale spread 0.054 to 0.064 dex; degrees of freedom 1.51, 1.91, 2.98, 24.47 for 1.5, 1.9, 3, 30 L2b: not met. factor recovered 2.0; planted half within two scales 0.830 radial, 0.870 along, 0.945 cross",
     "reason": "Cross-track, coverage of the planted half fell from 0.993 to 0.945 and stayed inside the band, so a doubled cross-track error does not show."
    },
    {
     "name": "L3 factors stable across Septembers",
     "status": "not met",
     "reading": "L3a: not met. geosynchronous 1.35 at most, met; medium 1.73 along and 1.69 cross, not met; low one September only L3b: not met. medium within two along-track 0.871; geosynchronous within one along-track 0.561",
     "reason": ""
    },
    {
     "name": "N1 truth shuffled among objects",
     "status": "not met",
     "reading": "N1: not met. medium radial 0.246 against 0.139 and along 0.192 against 0.084; cross -0.202 against 0.103; low and geosynchronous below their shuffles",
     "reason": ""
    },
    {
     "name": "N2 class labels scrambled",
     "status": "met",
     "reading": "N2: met. 3.07, 3.20 and 2.94 against 2.11, 2.41 and 2.89",
     "reason": ""
    },
    {
     "name": "R the close-pass fit reproduced",
     "status": "met",
     "reading": "R: met. 19 quarters, largest difference 0",
     "reason": ""
    }
   ],
   "verdict_today": null,
   "node_hours_last_7_days": 0.25,
   "next": [
    "rebuild the atlas files with factors per class and per era, split at 1 October 2025 (medium along-track 5.6 to 5.9 before, 3.39 after), from the finished fits with no refit, and rerun held-out coverage under them"
   ]
  },
  {
   "short_name": "the thermosphere study",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 4,
    "not met": 2
   },
   "pass_lines": [
    {
     "name": "P1 quiet agreement",
     "status": "met",
     "reading": "P1, quiet agreement: met. Met in all 15 shells read. From 250 to 600 km, 0.874 to 0.997 of quiet shell-days lie within a factor of 1.5 of the model (line 0.80);",
     "reason": "Each shell's ratio is scaled so that its median on quiet days is 1, so P1 measures the scatter of the ratio around the model's day-to-day shape and says nothing about the absolute level."
    },
    {
     "name": "P2 storm enhancement",
     "status": "not met",
     "reading": "P2, storm enhancement: not met. Not met in any of the 8 shells from 250 to 650 km.",
     "reason": ""
    },
    {
     "name": "P3 planted signal",
     "status": "not met",
     "reading": "P3, planted signal: not met. Not met. From 250 to 600 km the median recovered share of a planted factor of 1.5 is 0.791 to 0.998;",
     "reason": ""
    },
    {
     "name": "N1 storm dates shuffled",
     "status": "met",
     "reading": "N1, storm dates shuffled: met. Met in every shell. The real median rise of recovered density is 1.138 to 1.511 against shuffled 99th percentiles of 1.046 to 1.105.",
     "reason": "This null reads recovered density, which is the ratio times the model, so the model's own storm term passes it."
    },
    {
     "name": "N2 objects scrambled across shells",
     "status": "met",
     "reading": "N2, objects scrambled across shells: met. Met. The log storm response of the ratio falls by 0.0176 per 100 km from 250 to 800 km; 20 scrambles give slopes of -0.0040 to +0.0028.",
     "reason": ""
    },
    {
     "name": "R1 the raw sets",
     "status": "met",
     "reading": "R1, the raw sets: met. Met as read on 3 October: all five objects at 370 to 538 km fall 1.77 to 3.89 times faster on 10 and 11 May 2024 than in the six days before, at 4.9 to 6.7 standard errors.",
     "reason": ""
    }
   ],
   "verdict_today": null,
   "node_hours_last_7_days": 1.4,
   "next": [
    "the comparison with the published catalog-derived density record (Narayanan, Sicoli and Mehta, arXiv 2604.24646) and with Gondelach and Linares 2020: yearly quiet-day ratio and storm rise by shell"
   ]
  },
  {
   "short_name": "the two full-depth screen runs (authority and deep)",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 10,
    "not met": 1
   },
   "pass_lines": [
    {
     "name": "A1 messaged passes found",
     "status": "met",
     "reading": "490 of 490, line 97 percent",
     "reason": ""
    },
    {
     "name": "A3 passes the authority would have dropped",
     "status": "met",
     "reading": "0 of 10,157, line at most 2 percent",
     "reason": ""
    },
    {
     "name": "N1 low-orbit null",
     "status": "met",
     "reading": "0.090",
     "reason": ""
    },
    {
     "name": "N2 low-orbit null",
     "status": "met",
     "reading": "0.172",
     "reason": ""
    },
    {
     "name": "Brute 10-second check",
     "status": "met",
     "reading": "99 percent",
     "reason": ""
    },
    {
     "name": "Against the September record",
     "status": "met",
     "reading": "959,029 to 959,001, ratio 1.00003",
     "reason": ""
    },
    {
     "name": "D1, the 60-second step",
     "status": "met",
     "reading": "Met. Of 11,956 passes under 10 km in the 10-second screen on 12 days, the 60-second screen holds 11,915 within 60 s (0.9966, 95% interval 0.9954 to 0.9975; line 0.99 per run). By region the summary gives medium 33 of 53 and belt 94 of 111.",
     "reason": ""
    },
    {
     "name": "D2, measured over shuffled",
     "status": "met",
     "reading": "Met. Stretched passes under 10 km give 0.9982 (0.9954 to 1.0012) on 1,006 days, inside 0.95 to 1.05, and 0.9912 (0.9816 to 1.0005) under 3 km. The line covers stretched orbits only.",
     "reason": ""
    },
    {
     "name": "D3, the spread over neighboring sets",
     "status": "not met",
     "reading": "Not met in any region at either line. The spread is the greatest minus the least count of passes under the line over every combination of each object's sets within three days, divided by the nearest-set count; the line is 0.40.",
     "reason": ""
    },
    {
     "name": "D4, the 1 October record",
     "status": "met",
     "reading": "Met. Over 33 whole months, stretched passes under 10 km number 990,176 against 989,641 (ratio 1.00054), and 88,461 against 88,413 under 3 km; medium gives 4,910 against 4,908 under 10 km and 518 against 518 under 3 km.",
     "reason": ""
    },
    {
     "name": "R1, a second propagator",
     "status": "met",
     "reading": "Met in all three regions. The ten closest passes of each region, recomputed every 0.1 s from the same two element sets by a second, independent implementation of SGP4, agree within 0.0014 km in all 30.",
     "reason": ""
    }
   ],
   "verdict_today": "Met: 490 of 490 messaged passes found (line 97 percent); 959,029 passes under 1 km against 959,001 in the earlier record.",
   "node_hours_last_7_days": 5.5,
   "next": [
    "the authority comparison outside the 37 days the public message store holds (needs a longer message archive)",
    "the 88 and 443 extra stretched passes of January 2024 and September 2026 against the 1 October record (sets added to the archive after 1 October is the first guess)"
   ]
  },
  {
   "short_name": "the reentry forecast",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 4,
    "not met": 5
   },
   "pass_lines": [
    {
     "name": "NP1 density error against the model",
     "status": "met",
     "reading": "NP1 density error against the model: met. 0.79 all days, 0.85 storm days",
     "reason": ""
    },
    {
     "name": "NP2 density error against persistence",
     "status": "met",
     "reading": "NP2 density error against persistence: met. 0.93 at 6 h, 0.81 at 24 h, 0.78 at 72 h",
     "reason": ""
    },
    {
     "name": "NP3 density intervals hold",
     "status": "not met",
     "reading": "NP3 density intervals hold: not met. 0.52, 0.48, 0.43 against 0.75 to 0.85",
     "reason": ""
    },
    {
     "name": "NN1 the catalog adds skill the shuffled catalog does not",
     "status": "met",
     "reading": "NN1 catalog adds skill the shuffled catalog does not: met. 0.059 against -0.009",
     "reason": ""
    },
    {
     "name": "NW1 solar wind helps on storm days",
     "status": "not met",
     "reading": "NW1 solar wind helps on storm days: not met. 0.958 against 0.95",
     "reason": ""
    },
    {
     "name": "RP1 reentry windows hold",
     "status": "met",
     "reading": "RP1 reentry windows hold: met. 79.8, 76.9, 77.7 percent by lead band",
     "reason": ""
    },
    {
     "name": "RP2 error against the official messages",
     "status": "not met",
     "reading": "RP2 error against the official messages: not met. 6.2 h against 3.3 h, 63 messages, 13 objects",
     "reason": ""
    },
    {
     "name": "RP3 shuffled density is worse",
     "status": "not met",
     "reading": "RP3 shuffled density is worse: not met. 1.10 times, 4 of 10 draws",
     "reason": ""
    },
    {
     "name": "RP4 forecast-fed beats model-fed",
     "status": "not met",
     "reading": "RP4 forecast-fed beats model-fed: not met. 0.99 against 0.90",
     "reason": ""
    }
   ],
   "verdict_today": "Partly met, 3 of 9 lines: density error 0.79 of the model at 24 h; reentry median error 6.2 h against the authority's 3.3 h.",
   "node_hours_last_7_days": 0.36,
   "next": [
    "figure: reentry error against the number of sets in the fit window (what carries the two-day error)"
   ]
  },
  {
   "short_name": "the fuel gauge",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 2,
    "not met": 7
   },
   "pass_lines": [
    {
     "name": "P1a engine type, bus families held out",
     "status": "not met",
     "reading": "P1a engine type, bus families held out: not met. 0.70 against 0.75",
     "reason": ""
    },
    {
     "name": "P1b engine type, operators held out",
     "status": "met",
     "reading": "P1b engine type, operators held out: met. 0.82 against 0.70",
     "reason": ""
    },
    {
     "name": "N1 bus-shuffled null",
     "status": "not met",
     "reading": "N1 bus-shuffled null: not met. 0.64, gap 0.06 against 0.10",
     "reason": ""
    },
    {
     "name": "P2 delta-v budget within a factor of 2",
     "status": "not met",
     "reading": "P2 delta-v budget within a factor of 2: not met. 67 percent against 70",
     "reason": ""
    },
    {
     "name": "P3 retirement forecast inside its band",
     "status": "not met",
     "reading": "P3 retirement forecast inside its band: not met. 3 of 11 years against 8",
     "reason": ""
    },
    {
     "name": "P4 fuel adds skill over age",
     "status": "not met",
     "reading": "P4 fuel adds skill over age: not met. 0.004 against 0.02",
     "reason": ""
    },
    {
     "name": "N3 fuel shuffled adds none",
     "status": "not met",
     "reading": "N3 fuel shuffled adds none: not met. 0.0052 against 0.005",
     "reason": ""
    },
    {
     "name": "R1 planted burns recovered",
     "status": "met",
     "reading": "R1 planted burns recovered: met. GEO 100 percent, LEO 92 percent",
     "reason": ""
    },
    {
     "name": "R2 payload burn rate over the passive floor",
     "status": "not met",
     "reading": "R2 payload burn rate over the passive floor: not met. GEO 17.8, LEO-mid 2.5, others under 0.2",
     "reason": ""
    }
   ],
   "verdict_today": "Not met, 2 of 9 lines: planted 1 m/s burns found (GEO 100, LEO 92 percent); belt delta-v 17.8 times the passive floor, under 3 elsewhere.",
   "node_hours_last_7_days": 0.09,
   "next": [
    "the belt delta-v record as a site reading (per fleet, per year), with the passive floor beside it"
   ]
  },
  {
   "short_name": "the avoidance map",
   "state": "finished and scored",
   "provisional": false,
   "pass_line_counts": {
    "met": 1,
    "not met": 9
   },
   "pass_lines": [
    {
     "name": "P1 placebo day at most a third of the real rate",
     "status": "not met",
     "reading": "P1 placebo day at most a third of the real rate: not met. 0.82",
     "reason": ""
    },
    {
     "name": "P2 placebo at most a third, fleet by fleet",
     "status": "not met",
     "reading": "P2 placebo at most a third, fleet by fleet: not met. 0 of 40 fleets",
     "reason": ""
    },
    {
     "name": "P3 objects that cannot burn at most a third",
     "status": "not met",
     "reading": "P3 objects that cannot burn at most a third: not met. 0.58",
     "reason": ""
    },
    {
     "name": "P4 recall of SpaceX planned burns over 100 m",
     "status": "not met",
     "reading": "P4 recall of SpaceX planned burns over 100 m: not met. 21 percent against 50",
     "reason": ""
    },
    {
     "name": "P4b the counted calendar's recall",
     "status": "not met",
     "reading": "P4b the counted calendar's recall: not met. 14 percent",
     "reason": ""
    },
    {
     "name": "P5 Starlink count against the public figure",
     "status": "not met",
     "reading": "P5 Starlink count against the public figure: not met. 0.51, 0.31, 0.18 of reported",
     "reason": ""
    },
    {
     "name": "P6 planted 300 m dodges caught",
     "status": "met",
     "reading": "P6 planted 300 m dodges caught: met. 95 percent",
     "reason": ""
    },
    {
     "name": "P7 held-out-fleet classifier",
     "status": "not met",
     "reading": "P7 held-out-fleet classifier: not met. lowest AUC 0.56 against 0.75",
     "reason": ""
    },
    {
     "name": "P8 both parties moved, over chance",
     "status": "not met",
     "reading": "P8 both parties moved, over chance: not met. 1.23 times against 2",
     "reason": ""
    },
    {
     "name": "P9 burns before recorded passes, over shifted",
     "status": "not met",
     "reading": "P9 burns before recorded passes, over shifted: not met. 1.15 times against 2",
     "reason": ""
    }
   ],
   "verdict_today": "Not met, 1 of 10 lines: placebo rate 0.82 of real (line one third); planned burns over 100 m found 21 percent; planted dodges 95 percent.",
   "node_hours_last_7_days": 1.75,
   "next": [
    "a who-moves-for-whom reading on the fleets whose own ephemerides are public (SpaceX), with the ephemeris as truth instead of the catalog"
   ]
  },
  {
   "short_name": "the intercept forecast",
   "state": "scored; follow-ups owed",
   "provisional": false,
   "pass_line_counts": {
    "not yet read": 8
   },
   "pass_lines": [
    {
     "name": "Line 0 the minute search finds the 10-second passes",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 3 recall on recorded belt approaches",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 1 belt drifts stand out",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 1 phasing stands out",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 1 plane changes stand out",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 2 station-keeping near chance",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Line 2 raises and lowerings near chance",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    },
    {
     "name": "Held belt satellites, no excess expected",
     "status": "not yet read",
     "reading": "",
     "reason": ""
    }
   ],
   "verdict_today": "Partly met: minute search finds 99.5 percent; belt recall 95 against 29 percent shuffled; predicted classes 0.97 to 1.31 times chance.",
   "node_hours_last_7_days": 0.67,
   "next": [
    "a null matched to held belt satellites' slot spacing before the 3.5x excess is read"
   ]
  },
  {
   "short_name": "the antenna study",
   "state": "scored; follow-ups owed",
   "provisional": true,
   "pass_line_counts": {
    "partly met": 1,
    "not met": 3
   },
   "pass_lines": [
    {
     "name": "G1 recovered terms within three bounds of the published field",
     "status": "not met",
     "reading": "G1 recovered terms within three bounds of the published field: not met. C22 438 bounds, S22 36 bounds off",
     "reason": ""
    },
    {
     "name": "G2 planted changes recovered at three sizes",
     "status": "not met",
     "reading": "G2 planted changes recovered at three sizes: not met. C22 -0.1, -1.4, -1.5 bounds; S22 -4.3, -5.9, -4.9",
     "reason": ""
    },
    {
     "name": "G3 synthetic null: 9 of 10 draws within three bounds, mean within one",
     "status": "partly met",
     "reading": "G3 synthetic null: 9 of 10 draws within three bounds, mean within one: not met. C22 10 of 10, mean -1.1; S22 0 of 10, mean -4.5 G3 constants check: a shifted catalog J2 moves the result under one bound: met. 0.002 bounds",
     "reason": ""
    },
    {
     "name": "G4 error falls as the square root of the object count to a floor",
     "status": "not met",
     "reading": "G4 error falls as the square root of the object count to a floor: not met. synthetic C22 at the floor from 10 objects; real C22 flat at 2.4e-9; real S22 falls to 2.5e-10",
     "reason": ""
    }
   ],
   "verdict_today": "Not met: C22 449 and S22 44 bounds off the field; synthetic bias -14 and -7 bounds, scatter under one; real S22 falls to 3.2e-10.",
   "node_hours_last_7_days": 25.96,
   "next": [
    "stage 0: the information bound for the two equatorial coefficients, the flattening term and its yearly change, computed from the error atlas before any model"
   ]
  }
 ],
 "jobs": [
  {
   "job": "3449105",
   "study": "the antenna study",
   "part": "orbit antenna null v2",
   "state": "finished",
   "started": "2026-10-04T21:29:55Z",
   "ended": "2026-10-05T02:11:40Z",
   "run_hours": 4.7,
   "node_hours": 4.7,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3449104",
   "study": "the antenna study",
   "part": "orbit antenna planted v2",
   "state": "finished",
   "started": "2026-10-04T21:29:55Z",
   "ended": "2026-10-05T02:08:41Z",
   "run_hours": 4.65,
   "node_hours": 4.65,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3449103",
   "study": "the antenna study",
   "part": "orbit antenna fit v2",
   "state": "finished",
   "started": "2026-10-04T21:29:55Z",
   "ended": "2026-10-05T00:32:42Z",
   "run_hours": 3.05,
   "node_hours": 3.05,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3449102",
   "study": "the antenna study",
   "part": "orbit antenna timing v2",
   "state": "finished",
   "started": "2026-10-04T21:04:19Z",
   "ended": "2026-10-04T21:29:37Z",
   "run_hours": 0.42,
   "node_hours": 0.42,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3444238",
   "study": "the antenna study",
   "part": "orbit antenna curve",
   "state": "finished",
   "started": "2026-10-04T19:59:00Z",
   "ended": "2026-10-04T19:59:43Z",
   "run_hours": 0.01,
   "node_hours": 0.01,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3444237",
   "study": "the antenna study",
   "part": "null test",
   "state": "finished",
   "started": "2026-10-04T15:03:01Z",
   "ended": "2026-10-04T19:58:37Z",
   "run_hours": 4.93,
   "node_hours": 4.93,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3444236",
   "study": "the antenna study",
   "part": "orbit antenna planted",
   "state": "finished",
   "started": "2026-10-04T15:03:01Z",
   "ended": "2026-10-04T19:46:08Z",
   "run_hours": 4.72,
   "node_hours": 4.72,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3444235",
   "study": "the antenna study",
   "part": "orbit antenna fit",
   "state": "finished",
   "started": "2026-10-04T15:03:01Z",
   "ended": "2026-10-04T18:06:40Z",
   "run_hours": 3.06,
   "node_hours": 3.06,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3444234",
   "study": "the antenna study",
   "part": "timing test",
   "state": "finished",
   "started": "2026-10-04T14:38:30Z",
   "ended": "2026-10-04T15:02:49Z",
   "run_hours": 0.41,
   "node_hours": 0.41,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3438680",
   "study": "the reentry forecast",
   "part": "orbit reentry refit",
   "state": "finished",
   "started": "2026-10-04T07:33:45Z",
   "ended": "2026-10-04T07:40:46Z",
   "run_hours": 0.12,
   "node_hours": 0.12,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3438423",
   "study": "the fuel gauge",
   "part": "orbit fuel belt",
   "state": "finished",
   "started": "2026-10-04T07:19:00Z",
   "ended": "2026-10-04T07:20:02Z",
   "run_hours": 0.02,
   "node_hours": 0.02,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3438024",
   "study": "the reentry forecast",
   "part": "first submission of the orbit reentry refit",
   "state": "stopped with an error",
   "started": "2026-10-04T06:50:20Z",
   "ended": "2026-10-04T06:50:57Z",
   "run_hours": 0.01,
   "node_hours": 0.01,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432518",
   "study": "the avoidance map",
   "part": "orbit avoidance finish",
   "state": "finished",
   "started": "2026-10-04T01:13:16Z",
   "ended": "2026-10-04T01:28:59Z",
   "run_hours": 0.26,
   "node_hours": 0.26,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432260",
   "study": "the reentry forecast",
   "part": "orbit reentry finish",
   "state": "finished",
   "started": "2026-10-04T00:50:10Z",
   "ended": "2026-10-04T00:54:17Z",
   "run_hours": 0.07,
   "node_hours": 0.07,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432259",
   "study": "the reentry forecast",
   "part": "training",
   "state": "finished",
   "started": "2026-10-04T00:44:09Z",
   "ended": "2026-10-04T00:49:51Z",
   "run_hours": 0.1,
   "node_hours": 0.1,
   "machine": "a node with 128 CPU cores, four A100 graphics processors and 503 GB of memory"
  },
  {
   "job": "3432623",
   "study": "the intercept forecast",
   "part": "orbit intercept first",
   "state": "finished",
   "started": "2026-10-04T00:39:08Z",
   "ended": "2026-10-04T01:13:29Z",
   "run_hours": 0.57,
   "node_hours": 0.57,
   "machine": "a node with 128 CPU cores and 224 GB of memory"
  },
  {
   "job": "3432622",
   "study": "the intercept forecast",
   "part": "timing test",
   "state": "finished",
   "started": "2026-10-04T00:32:36Z",
   "ended": "2026-10-04T00:38:46Z",
   "run_hours": 0.1,
   "node_hours": 0.1,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432258",
   "study": "the reentry forecast",
   "part": "orbit reentry record",
   "state": "finished",
   "started": "2026-10-04T00:32:36Z",
   "ended": "2026-10-04T00:33:45Z",
   "run_hours": 0.02,
   "node_hours": 0.02,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432517",
   "study": "the avoidance map",
   "part": "orbit avoidance screen 2",
   "state": "finished",
   "started": "2026-10-04T00:30:06Z",
   "ended": "2026-10-04T01:12:56Z",
   "run_hours": 0.71,
   "node_hours": 0.71,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432516",
   "study": "the avoidance map",
   "part": "orbit avoidance screen 1",
   "state": "finished",
   "started": "2026-10-04T00:30:06Z",
   "ended": "2026-10-04T01:12:26Z",
   "run_hours": 0.71,
   "node_hours": 0.71,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432257",
   "study": "the reentry forecast",
   "part": "timing test",
   "state": "finished",
   "started": "2026-10-04T00:30:06Z",
   "ended": "2026-10-04T00:32:24Z",
   "run_hours": 0.04,
   "node_hours": 0.04,
   "machine": "a node with 128 CPU cores, four A100 graphics processors and 503 GB of memory"
  },
  {
   "job": "3432515",
   "study": "the avoidance map",
   "part": "orbit avoidance prep",
   "state": "finished",
   "started": "2026-10-04T00:26:35Z",
   "ended": "2026-10-04T00:29:30Z",
   "run_hours": 0.05,
   "node_hours": 0.05,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432514",
   "study": "the avoidance map",
   "part": "timing test",
   "state": "finished",
   "started": "2026-10-04T00:25:04Z",
   "ended": "2026-10-04T00:26:21Z",
   "run_hours": 0.02,
   "node_hours": 0.02,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432336",
   "study": "the fuel gauge",
   "part": "orbit fuel",
   "state": "finished",
   "started": "2026-10-04T00:11:31Z",
   "ended": "2026-10-04T00:14:33Z",
   "run_hours": 0.05,
   "node_hours": 0.05,
   "machine": "a node with 128 CPU cores and 251 GB of memory"
  },
  {
   "job": "3432335",
   "study": "the fuel gauge",
   "part": "timing test",
   "state": "finished",
   "started": "2026-10-04T00:10:01Z",
   "ended": "2026-10-04T00:10:58Z",
   "run_hours": 0.02,
   "node_hours": 0.02,
   "machine": "a node with 128 CPU cores and 224 GB of memory"
  }
 ],
 "failures": [
  {
   "job": "3438024",
   "study": "the reentry forecast",
   "part": "first submission of the orbit reentry refit",
   "state": "stopped with an error",
   "fix": [
    {
     "commit": "a52d3c1b",
     "change": "Refuse to submit reentry jobs when the unpacked code is stale",
     "why": "compares src/.code-sha with code-sha.txt and stops with one line naming when they differ, so a pushed tar that was never unpacked cannot run old code. The stand-in test covers the refusal."
    }
   ]
  }
 ],
 "timing_estimates": [
  {
   "study": "the antenna study",
   "run": "orbit-antenna-fit",
   "estimate_hours": 3.607,
   "actual_hours": 3.058,
   "measured_part": "whole run"
  },
  {
   "study": "the antenna study",
   "run": "orbit-antenna-fit-v2",
   "estimate_hours": 3.606,
   "actual_hours": 3.043,
   "measured_part": "whole run"
  },
  {
   "study": "the avoidance map",
   "run": "orbit-avoidance-prep",
   "estimate_hours": 5.836,
   "actual_hours": 0.046,
   "measured_part": "whole run"
  },
  {
   "study": "the fuel gauge",
   "run": "orbit-fuel",
   "estimate_hours": 0.12,
   "actual_hours": 0.047,
   "measured_part": "whole run"
  }
 ],
 "commits": [
  {
   "id": "11650361",
   "subject": "Ignore memory figures when comparing job output in the card tests"
  },
  {
   "id": "224fe854",
   "subject": "Add the job card smoke test and report the shared tape job"
  },
  {
   "id": "f65cadba",
   "subject": "Report intercept forecast jobs to the job card"
  },
  {
   "id": "f164b62d",
   "subject": "Report avoidance map jobs to the job card"
  },
  {
   "id": "aed8b798",
   "subject": "Report full-depth screen jobs to the job card"
  },
  {
   "id": "46455e80",
   "subject": "Report thermosphere jobs to the job card"
  },
  {
   "id": "d1b90977",
   "subject": "Report error atlas jobs to the job card"
  },
  {
   "id": "03ef4990",
   "subject": "Report cadence detector jobs to the job card"
  },
  {
   "id": "f5cbbae9",
   "subject": "Report close-pass chance jobs to the job card"
  },
  {
   "id": "3593e4a6",
   "subject": "Report SGP4 axis jobs to the job card"
  },
  {
   "id": "cf598a7d",
   "subject": "Report fuel gauge jobs to the job card"
  },
  {
   "id": "58816b20",
   "subject": "Report reentry jobs to the job card"
  },
  {
   "id": "3b6a4bb7",
   "subject": "Report antenna stage-1 jobs to the job card"
  },
  {
   "id": "5d6a409b",
   "subject": "Let the tagged-run check accept the shared preparation"
  },
  {
   "id": "492a1582",
   "subject": "Add a run tag to the antenna package"
  },
  {
   "id": "e4beae85",
   "subject": "Derive the belt longitude rates under J2 and fix the S22 offset"
  },
  {
   "id": "e181d445",
   "subject": "State the G3 reading in the design, notebook and package inputs"
  },
  {
   "id": "16b33e3e",
   "subject": "Add the stage-1 belt gravity fit and its cluster package"
  },
  {
   "id": "a52d3c1b",
   "subject": "Refuse to submit reentry jobs when the unpacked code is stale"
  },
  {
   "id": "0bc67e3e",
   "subject": "Add the belt-only fuel gauge run"
  },
  {
   "id": "283ca6d6",
   "subject": "Add the drag-term refit run to the reentry package"
  },
  {
   "id": "d2456d2e",
   "subject": "Write the reentry, fuel and intercept reports in the shared layout"
  },
  {
   "id": "395aaabd",
   "subject": "Add a scorer for Aerospace reentry times as a second truth"
  },
  {
   "id": "84bf1196",
   "subject": "Carry every created approach and change count in the report"
  },
  {
   "id": "68f27142",
   "subject": "Add the avoidance map manifest and open its notebook entry"
  },
  {
   "id": "f0381cef",
   "subject": "Remove a report script the avoidance map does not use"
  },
  {
   "id": "aa072543",
   "subject": "Add the design for the avoidance map and a slice argument for tests"
  },
  {
   "id": "f826e09c",
   "subject": "Let the intercept package build without loose Python files"
  },
  {
   "id": "4d6278b6",
   "subject": "Add the intercept forecast for the cluster CPU nodes"
  },
  {
   "id": "5f6f553b",
   "subject": "Add the code that joins detected burns to the passes they avoid"
  },
  {
   "id": "cb5b529c",
   "subject": "Record the stand-in test times in the fuel gauge manifest"
  },
  {
   "id": "7b1180cc",
   "subject": "List the four new orbit packages in the tape job itself"
  },
  {
   "id": "5cb8ccfb",
   "subject": "Note the four new orbit packages in the gather and tape script headers"
  },
  {
   "id": "706643b7",
   "subject": "Add the fuel gauge study for the supercomputer"
  },
  {
   "id": "9d214414",
   "subject": "List the four new orbit packages for the gather and the tape job"
  }
 ]
}