# Recommended OSI and Adaptive-Authority Solution

Date: 2026-07-31

## Recommendation

Use the following settings for the next offline/commissioning validation:

```matlab
hs.target_outer_ncf = 0.46;
hs.sol_osi_override = struct( ...
    'osi', struct('rho_detect', 1.35), ...
    'auth', struct());
```

Keep the remaining V6 settings unchanged:

- OSI frequency band: `[2 100]` Hz
- `step_s = 0.125`
- `segment_s = 0.5`
- `margin_s = 0.25`
- `residual_s = 1.0`
- `rho_recover_s = 0.4`
- adaptive-factor initial value: `1.0`
- adaptive-factor minimum: `0.20`
- adaptive-factor maximum: `1.0`
- authority `guard = 0.02`
- authority `deadband = 0.008`
- authority `rate = 5.0`
- authority `max_step = 0.05`

This is preferable to a permanent adaptive-factor cap because it preserves full
authority in healthy cases while making the residual evidence count earlier and
regulating the test at a safer outer-loop NCF target.

## Stability Evidence

The instability was concentrated near 99.25 Hz in the latest record and near
102--103 Hz in the prior record. Local measured-loop reconstructions placed the
critical adaptive factors at approximately 0.853 and 0.897, respectively.

| Configuration | Latest maximum factor | Prior maximum factor | Latest margin | Prior margin |
|---|---:|---:|---:|---:|
| Current V6 | 0.996 | 1.000 | -0.143 | -0.103 |
| `rho_detect = 1.35` only | 0.961 | 1.000 | -0.108 | -0.103 |
| `target_outer_ncf = 0.46` only | 0.798 | 0.760 | 0.055 | 0.137 |
| Recommended combination | **0.774** | **0.746** | **0.079** | **0.151** |
| Permanent `a_max = 0.80` | 0.800 | 0.800 | 0.053 | 0.097 |

The recommended combination did not cross either measured boundary anywhere in
the available post-onset records. This is an offline counterfactual replay, not
a guarantee of physical stability; a controlled physical verification is still
required before treating the settings as validated for unrestricted testing.

## Why the Residual Branch Did Not Prevent the Failures

`b_res` did contain useful warning information:

- In the latest record, `b_res` crossed the 0.40 target approximately 1.06 s
  after high-frequency onset. The published `b_osi` did not cross until about
  1.56 s after onset.
- In the prior record, `b_res` briefly crossed its target approximately 1.30 s
  before the selected high-frequency onset, but the warning did not remain
  binding while authority recovered.

The V6 fusion does not directly apply the scalar minimum `b_res` to the authority
law. It forms residual evidence per frequency, blends it with direct and prior
evidence, and then uses the second-smallest fused bin. The governing residual
bins during the failures were mainly around 32--38 Hz, even though the physical
instability was near 100 Hz.

The unstable component was dominated by `dd - u_osi`, which is generated by the
numerical-substructure/phase-lead outer path. V6 consumes only `u_osi`, `dm`, and
authority feedback, so it observes this outer-path mode indirectly. Lowering
`rho_detect` from 1.75 to 1.35 makes moderate residual evidence influence the
fused margin earlier, but it is not sufficient by itself. Raising the regulated
target to 0.46 prevents the authority law from recovering back into the measured
unstable region.

Increasing `rho_recover_s` to 1--4 s delayed recovery but did not prevent the
prior replay from returning to full authority. It is therefore not recommended
as the primary correction.

## Why 120 Hz Is Not Recommended

The present 0.5 s spectral segment gives 2 Hz FFT spacing. The `[2 100]` Hz band
therefore contains bins through 100 Hz, while a `[2 120]` Hz band also includes
102, 104, ..., 120 Hz. The extension adds ten frequency bins, approximately 20%
more per-frequency work in the time-sliced runtime.

The 120 Hz idea was investigated because the prior instability was near
102--103 Hz, just above the current upper limit. The results did not support it
as the main solution:

| OSI configuration | Fabby F1 | Failure-replay outcome |
|---|---:|---|
| Current `[2 100]` Hz | 92.94 | Both boundaries crossed |
| `[2 120]` Hz only | 91.24 | Prior authority still reached 1.0 |
| `[2 120]` Hz with faster/sensitive residual settings | 93.12 | Initially safer, but the prior boundary was crossed after about 2.93 s and authority later reached 1.0 |

Adding the 102--120 Hz bins did not make them govern `b_res`; lower-frequency
bins continued to control the fused result. It also changes the runtime array
size and computational load. Retain `[2 100]` Hz unless a separate high-frequency
outer-path monitor is designed and validated.

## Fabby Benchmark Comparison

The archived full V6 benchmark is:

| Metric | Current V6 |
|---|---:|
| Seven hard gates | PASS |
| Fabby F1 | 92.937 |
| Fabby F2 | 62.485 |
| S3 detection | 60.000 |
| S4 smoothness | 87.728 |
| S5 GDB recovery | 100.000 |
| Composite | **80.630** |

The recommended estimator setting (`rho_detect = 1.35`) was rerun on the complete
ten-case synthetic Fabby suite:

| Metric | Current V6 | Recommended estimator |
|---|---:|---:|
| Synthetic cases passed | 10/10 | 10/10 |
| Fabby F1 | 92.937 | 93.010 |
| Healthy-case mean authority | 0.9991 | 0.9983 |
| Healthy-case minimum authority | 0.9376 | 0.9230 |
| Maximum authority update | 0.05 | 0.05 |

A fresh full composite for the recommendation has not yet been computed because
the raw `saved_results/tests/tsting_osi/GDBqFpKb.mat` record is absent from this
checkout. The calibration record was located under its original filename, but
the GDB record is required for G5, G6, part of S3, and S5. The archived 80.630
score must remain the full-benchmark reference until that record is recovered.

The test-specific `target_outer_ncf = 0.46` is a commissioning target, not a
candidate estimator parameter in the canonical Fabby rules. Fabby supplies its
own recorded target to every candidate. Therefore the synthetic comparison
directly tests the `rho_detect` change, while the target change is assessed in
the two unstable-record counterfactual replays.

## Adaptive-Factor Alternatives

A global `a_max = 0.80` stayed below both measured boundaries, but it is not a
good normal setting:

- Fabby cases passed fell from 10/10 to 6/10.
- Fabby F1 fell from 92.94 to 74.66.
- Healthy authority was permanently limited to 0.80.

If an independent emergency guard is later added, a conditional ceiling around
0.75--0.80 is defensible while the guard is active. It should not be used as the
unconditional V6 `a_max`.

## Next Validation Steps

1. Recover `GDBqFpKb.mat` and rerun all seven gates and five scores for V6 and
   the recommended estimator with identical benchmark targets.
2. Confirm the recommended setting retains a full-benchmark composite close to
   the archived 80.630 result.
3. Apply the settings to `main_ColumnSetup.m` only after the offline comparison
   is accepted.
4. Run a short controlled physical verification while monitoring the 80--120 Hz
   content of `dd - u_osi`, `dm`, and `fm`, plus adaptive authority and target
   execution time.

No production setting or Simulink model was changed during this investigation,
and no physical Speedgoat/actuator run was performed.
