Follow-up from #302 review. Adaptive happy path validated by cluster nightly. Gaps: (G1) adaptive/scaler.go activeFor() reads only the currently-active sub-engine's conn count — during a switch with in-flight async-promoted conns on the old sub-engine, the desired-worker calculation undercounts; fix: sum both sub-engines' active counts in adaptiveScalerSource.ActiveConns() until old fully drains. (G3) Metrics() doesn't expose AsyncRoutes (static count) or AsyncPromotedConns (atomic counter). (Bench follow-up): mage matrixBench keepalive-simple + mixed-async + pure-async + H2 multiplex scenarios against pre-PR baseline to confirm zero pure-sync delta. Source: Adaptive + Performance reviewers.
Follow-up from #302 review. Adaptive happy path validated by cluster nightly. Gaps: (G1) adaptive/scaler.go activeFor() reads only the currently-active sub-engine's conn count — during a switch with in-flight async-promoted conns on the old sub-engine, the desired-worker calculation undercounts; fix: sum both sub-engines' active counts in adaptiveScalerSource.ActiveConns() until old fully drains. (G3) Metrics() doesn't expose AsyncRoutes (static count) or AsyncPromotedConns (atomic counter). (Bench follow-up): mage matrixBench keepalive-simple + mixed-async + pure-async + H2 multiplex scenarios against pre-PR baseline to confirm zero pure-sync delta. Source: Adaptive + Performance reviewers.