Index: /trunk/BNC/src/bnchelp.html
===================================================================
--- /trunk/BNC/src/bnchelp.html	(revision 10939)
+++ /trunk/BNC/src/bnchelp.html	(revision 10940)
@@ -208,4 +208,5 @@
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.10.3 <a href=#ppparmax>Max Frac and Sig</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.10.4 <a href=#ppparyaw>Yaw Usage</a><br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.2.10.5 <a href=#ppparfix>Per-epoch fix percentage</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.3 <a href=#pppStation><b>PPP (3): Processed Stations</b></a><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.13.3.1 <a href=#pppsite>Station</a><br>
@@ -4637,5 +4638,5 @@
 <p><h4 id="ppparmin">2.13.2.10.2 Min # Epo and Sat - optional</h4></p>
 <p>
-Using 'Min # Epo you can specify the number of epochs for which the unknown ambiguity parameter has to be observed at least,
+Using 'Min # Epo' you can specify the number of epochs for which the unknown ambiguity parameter has to be observed at least,
 to be included into the search.
 </p>
@@ -4660,6 +4661,33 @@
 If 'Use Yaw' is set, the information about the satellite attitude (yaw angle) is taken from the corresponding
 SSR correction (phase bias message). Otherwise a standard satellite attitude model is used.
-</p>
-
+</p> 
+
+<p><h4 id="ppparfix">2.13.2.10.5 Per-epoch fix percentage</h4></p>
+<p>
+The number printed in the log (... fix XX %) is a fixRatio computed as follows: 
+<ol>
+  <li>A copy of the float filter state is taken — the real recursive filter state is never touched by AR.</li>
+  <li>Ambiguities are grouped per system/LC into zero-difference sets if minimum number of tracked epochs (see <a href="#ppparmin">Min # Epo</a>) and the minimum elevation (see <a href=#pppmineleva>Minimum Elevation</a>) is exceeded.</li>
+  <li>One reference ambiguity per group is hard-constrained to its rounded value with a tiny σ (sigCon = 1e-4 cycles, turning the rest into single-differences (SD).</li>
+  <li>A LAMBDA/BIE (Best Integer Equivariant) search produces xBie/covBie — a probability-weighted blend over candidate integer vectors, not a hard integer.</li>
+  <li>isFixable() flags an SD ambiguity as fixed if |frac(xBie)| ≤ arMaxFrac and sqrt(covBie) ≤ arMaxSig (see <a href=#ppparmax>Max Frac and Sig</a>).</li>
+  <li>fixRatio = numFixSdAll / numSdAmbs — fixed SD ambiguities divided by all SD ambiguities in groups that already passed step 2's pre-filter.</li>
+</ol>
+Some remarks: 
+<ul>
+  <li>It's a statistical sharpness test, not a validated fix. Unlike classical LAMBDA AR (ratio test against the second-best candidate), isFixable() only checks that the BIE estimate is close to an integer with small posterior variance. BIE will confidently "fix" a self-consistent but wrong combination if the underlying float ambiguities carry a systematic, unmodeled bias — there's no independent validation step.</li>
+  <li> The fix is a per-epoch snapshot, not a recursive hold. Since AR runs on a copy of the filter state and the result is never fed back into _xFlt/_QFlt, each epoch's "fix" is recomputed from scratch from whatever the float ambiguity looks like that epoch. A satellite can be reported "fixed" to slightly different integer realizations epoch-to-epoch, which shows up as scatter in the AR-constrained coordinate even though the printed percentage stays high.</li>
+  <li>Everything hinges on the phase-bias corrections. Ambiguity resolution only works because incoming SSR phase-bias corrections with fixIndicator set are applied per satellite/frequency before this stage; satellites lacking valid biases are dropped entirely when AR is on (useObsWithBiasesOnly). If that correction stream is stale, low-quality, or inconsistent with the orbit/clock product (different AC, different update interval), the float ambiguities will still sharpen and "fix" statistically — just around the wrong integer — degrading rather than improving the position.</li>
+  <li> Small denominator effect: 'numSdAmbs' only counts already pre-filtered, resolvable ambiguities in groups of ≥2; with a thin satellite/group count it's easy to get 100% from very few satellites, which isn't representative of overall solution strength.</li>
+</ul>
+ If the per-epoch fix percentage values look too high in comparison with the resulting coordinate displacements, 
+ try:
+  <ul>
+  <li>tightening 'Max Frac' / 'Max Sig' and </li>
+  <li>raising 'Min # Sat' / 'Min # Epo' </li>
+  </ul>
+to see if the percentage drops to something  more consistent with the achieved coordinate repeatability — if it doesn't, the bias-correction quality/consistency 
+ is the more likely root cause than the AR logic itself. 
+</p>
 <p><h4 id="pppStation">2.13.3 PPP (3): Processed Stations</h4></p>
 <p>
