Index: /trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- /trunk/BNC/src/combination/bnccomb.cpp	(revision 10957)
+++ /trunk/BNC/src/combination/bnccomb.cpp	(revision 10958)
@@ -1174,4 +1174,22 @@
     cmbCorr* corr = it.value();
 
+    // Reject GLONASS corrections whose broadcast ephemeris has exceeded its
+    // declared validity window.  GLONASS nav ephemerides are issued every
+    // 30 min and are valid for ±900 s around the reference time (TOC).
+    // t_ephGlo::position() uses Runge-Kutta integration from TOC; beyond
+    // ±900 s the integration error grows unchecked and propagates into both
+    // the combined clock estimate and the SP3 position.
+    if (corr->_eph->prn().system() == 'R') {
+      double age = epoTime - corr->_eph->TOC();
+      if (fabs(age) > 900.0) {
+        emit newMessage(QString().asprintf(
+          "bncComb: skip %s, GLONASS eph age %.0fs",
+          corr->_prn.mid(0,3).toLatin1().data(), age).toLatin1(), false);
+        delete corr;
+        it.remove();
+        continue;
+      }
+    }
+
     // ORBIT
     t_orbCorr orbCorr(corr->_orbCorr);
@@ -1196,20 +1214,4 @@
       it.remove();
       continue;
-    }
-
-    // TEMPORARY DIAGNOSTIC: how far is this epoch from the GLONASS broadcast
-    // ephemeris reference time? t_ephGlo::position() numerically integrates
-    // (Runge-Kutta) from that reference time, with a 24h extrapolation
-    // guard far looser than GLONASS nav's ~30-35 min nominal validity - a
-    // large age here would point to extrapolation-driven along-track error
-    // rather than anything attitude/yaw related.
-    if (corr->_eph->prn().system() == 'R') {
-      double age = epoTime - corr->_eph->TOC();
-      if (fabs(age) > 600.0) {
-        emit newMessage(QString().asprintf(
-          "bncComb: GLONASS eph age %s %.0fs Mjd=%.6f",
-          corr->_prn.mid(0,3).toLatin1().data(), age,
-          epoTime.mjd() + epoTime.daysec()/86400.0).toLatin1(), false);
-      }
     }
 
