measured | Current LeoAware v3.17 FillGap | Crest starlink_v1 ACCEPT, not Current
Full-speed Starlink
Built for engineers shipping real traffic over LEO - including X and other high-volume apps on Starlink-class paths. LeoAware is an endpoint congestion controller that invalidates stale RTT/BW samples after reconfigs. ASCENT-D optionally feeds integrity-protected satellite state (erase-on-fail). Optional OrbCC-style pathID signals for hybrid assist.
Source: open-source discrete-time sim
(Pitchfork-and-Torch/leo-aware-transport).
Do not mix eras.
Current is v3.17 FillGap on starlink_v1
(seeds 13,7,42,99,123; 90s; endpoint-only). Absolute dual-gate: gp >= 75 and p95 <= 138.8.
FillGap 82.45 / 76.26 vs BBR 82.44 / 76.66. Terr 79.05. Soft-QIR stays 0.20 / 25 ms.
Constructor defaults stay use_fill_gap=False / use_openslot=False.
SHA 781bd77 (PR #22). Docs 58b6e28 (PR #24).
v3.9 Crest on the same path is ACCEPT, not Current
(82.07 / 76.26).
v3.7 OCE on ope_v36 is not Current
(58.78 / 152.09 vs BBR 58.21 / 152.89).
WetLinks v3.11 is a separate measured-CSV era (156.70 / 63.98 vs BBR 161.91 / 64.38). Not Current.
v3.13 leocc_v1 is a research era (337.97 / 89.60 vs BBR 379.80 / 89.60). Not Current.
Coupled-RNG 75/138.8 numbers from v3.4/v3.5 are historical only. Not dish PHY Mbps.
Reproduce: python3 -m experiments.run_starlink.
01 / measured
Actual suite output (not marketing placeholders)
Same path model for all three CCAs. Handovers redraw RTT and capacity and inject non-congestive
loss bursts. The stress case is frequent reconfiguration - the failure mode Starlink-class
users hit when CUBIC treats mobility loss as queue overflow. Tabs below show algorithm evolution
(scientific honesty): Current is v3.17 FillGap on starlink_v1. Crest, OCE, WetLinks, and leocc_v1 are
other eras, not Current. Coupled-era absolute Mbps (v3.4 / v3.5) remain as history and are not comparable.
Primary objective: starlink_v1 multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 8.57 Mbps | 71.63 ms | baseline |
| BBRv3approx | 82.44 Mbps | 76.66 ms | same starlink_v1 orbit |
| LeoAware v3.17 FillGap | 82.45 Mbps | 76.26 ms | gp >= 75; p95 <= 138.8; edges BBR |
| LeoAware v3.9 Crest (prior lock) | 82.07 Mbps | 76.26 ms | ACCEPT, not Current |
| Geometry (oracle) | 84.03 Mbps | 70.79 ms | path ceiling, not a CCA |
Per-seed FillGap (means are the gate)
| Seed | Goodput | p95 |
|---|---|---|
| 7 | 75.36 Mbps | 67.81 ms |
| 13 | 96.80 Mbps | 72.21 ms |
| 42 | 81.25 Mbps | 97.56 ms |
| 99 | 73.19 Mbps | 64.09 ms |
| 123 | 85.61 Mbps | 79.65 ms |
Product lock on starlink_v1. FillGap is a delay-clean 1 MSS cwnd fill when delivery is
caught and cwnd is under 0.85x delivery BDP. It does not retune OpenSlot 0.80 and never gates
ep:loss_burst. Constructor defaults stay False. Seed 99 is below 75; the published
gate is the five-seed mean. Archive:
results/archive/20260814-v317-fillgap/. Design:
leoaware_v317_fillgap.md
| SHA 781bd77 (PR #22) | docs 58b6e28 (PR #24)
| eras:
harness_eras.md
Terrestrial control
| CCA | Goodput mean | p95 |
|---|---|---|
| LeoAware v3.17 FillGap | 79.05 Mbps | 46 ms |
Terrestrial gp>=77 PASS. Soft-QIR sojourn is in the p95 (path 40 ms + sojourn), not a path-only 40 ms floor. Reproduce: python3 -m experiments.run_starlink.
Primary objective: starlink_v1 multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| BBRv3approx | 82.44 Mbps | 76.66 ms | same starlink_v1 orbit |
| LeoAware v3.9 Crest | 82.07 Mbps | 76.26 ms | gp ≥ 75; p95 ≤ 138.8 |
| Geometry (oracle) | 84.03 Mbps | 70.79 ms | path ceiling, not a CCA |
Per-seed Crest (means are the gate)
| Seed | Goodput | p95 |
|---|---|---|
| 7 | 75.01 Mbps | 67.81 ms |
| 13 | 96.65 Mbps | 72.21 ms |
| 42 | 80.67 Mbps | 97.56 ms |
| 99 | 72.83 Mbps | 64.09 ms |
| 123 | 85.17 Mbps | 79.65 ms |
Product lock on starlink_v1 (cruise RTT 40-75 ms, HO spike in the 0.4s loss window, cap 40-150 Mbps).
Crest does not beat BBR on mean goodput (82.07 vs 82.44). It does clear the absolute bars
that OPE-fair cannot reach (oracle gp 60.48 on ope_v36). Seed 99 is below 75; the published
gate is the five-seed mean. Archive:
results/archive/20260812-v39-starlink-v1/. Design:
leoaware_v39_starlink_v1.md
| eras:
harness_eras.md
Terrestrial control
| CCA | Goodput mean | p95 |
|---|---|---|
| LeoAware v3.9 | 78.62 Mbps | 46 ms |
Terrestrial gp≥77 PASS. Soft-QIR sojourn is in the p95 (path 40 ms + sojourn), not a path-only 40 ms floor.
leocc_v1 three-CCA means (not Current)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 31.14 Mbps | 87.20 ms | baseline |
| BBRv3approx | 379.80 Mbps | 89.60 ms | ahead on goodput |
| LeoAware v3.13 leocc | 337.97 Mbps | 89.60 ms | absolute 75 / 138.8 PASS |
Research era. Label ACCEPT_ERA_REJECT_BBR, not Current. Absolute 75 / 138.8 PASS. Terrestrial 78.62 PASS. leocc does not clear BBR (337.97 vs 379.80). Do not mix with WetLinks 156.70 / 63.98 or v3.9 Crest 82.07 / 76.26.
Terrestrial control
| CCA | Goodput mean | Gate |
|---|---|---|
| LeoAware v3.13 | 78.62 Mbps | terr PASS |
Hold-expanded WetLinks windows (net_iperf + net_ping)
| CCA | Goodput mean | p95 mean | Notes |
|---|---|---|---|
| CUBIC | 38.46 Mbps | 63.58 ms | same 5 windows |
| BBRv3approx | 161.91 Mbps | 64.38 ms | ahead on goodput |
| LeoAware Crest replay | 156.70 Mbps | 63.98 ms | gp ≥ 75; p95 ≤ 138.8 |
| Geometry (oracle) | 244.85 Mbps | 60.78 ms | UDP iperf mean, not dish PHY |
New era. Do not mix with Crest 82.07 / 76.26 or OPE-fair 58.78 / 152.09.
Product replay uses dt=0.01 and a 250 KB / 200 Mbps send ceiling (w1/w2 sit on that ceiling).
An uncapped-buffer cook reached LeoAware 239.72 vs BBR 240.48 and was
REJECT (does not clear BBR). Archive:
results/archive/20260813-v311-wetlinks/. Spec:
leoaware_v311_wetlinks.md
Primary objective: OPE-fair multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 5.56 Mbps | 130.4 ms | baseline |
| BBRv3approx | 58.21 Mbps | 152.89 ms | OPE-fair reference |
| LeoAware v3.7 OCE | 58.78 Mbps | 152.09 ms | gp ≥ BBR; p95 ≤ BBR (+0.57 / -0.80) |
| LeoAware v3.6 Keel (prior) | 58.27 Mbps | 152.09 ms | first OPE-fair dual-gate pass |
| LeoAware v3.5 Tide (coupled historical) | 76.27 Mbps | 147.39 ms | coupled-RNG era; not comparable |
Novel: OCE arms a ~3 RTT echo after SER - chase delivery into bw_est / 1.42×BDP, roll back if
delay_ratio > 1.30. SER-lite: ack_ia+loss_burst without rtt_mad/loss_rtt keeps min_rtt (cut 0.80).
Builds on v3.6 Soft-QIR, Keel, 2PC TBPR, SER. Hybrid fuse rails unchanged (endpoint suite default). Archive:
results/archive/20260812-v37-oce/. Integrity green. Design:
leoaware_v37_oce.md
Terrestrial control
| CCA | Goodput mean | p95 |
|---|---|---|
| LeoAware v3.7 | ~78.65 Mbps | 46 ms |
Terrestrial gp≥77 PASS. Delay includes soft-QIR sojourn term (not path-base-only).
OPE-fair multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 5.56 Mbps | 130.4 ms | baseline |
| BBRv3approx | 58.21 Mbps | 152.89 ms | OPE-fair reference |
| LeoAware v3.6 Keel | 58.27 Mbps | 152.09 ms | gp ≥ BBR; p95 ≤ BBR (thin margin) |
Integrity fix: separate loss_rng so path identity is CCA-independent (OPE). Soft-QIR exposes queue
without letting a full buffer dominate p95. Keel anchors delay across epochs; SER keeps min_rtt on pure
ep:loss_burst; 2PC TBPR rolls back on delay spikes. Coupled-era absolute bars retired as primary gate.
Design: leoaware_v36_keel.md
Historical (coupled-RNG): multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 5.47 Mbps | 124.8 ms | baseline |
| BBRv3approx | 70.88 Mbps | 138.8 ms | coupled-era reference |
| LeoAware v3.4-p95 | 73.57 Mbps | 138.37 ms | coupled-era: gp > BBR; p95 under BBR |
| LeoAware v3.3-A (prior) | 78.06 Mbps | 149.7 ms | higher gp; p95 residual |
| LeoAware v3.1 (prior) | 68.98 Mbps | 133.6 ms | historical p95 under BBR |
Not comparable to OPE-fair numbers. Coupled-era mobility-loss draws advanced the same RNG as
path dynamics, so each CCA saw a different orbit. Absolute bars (gp≥75 / p95≤138.8) are retired.
v3.5 Tide later closed gp≥75 on that same coupled sim (76.27 / 147.39) - also historical.
Levers: earlier cruise delay_yield, soft max-filter under delay, lower REPROBE fill ceiling.
Archive: results/archive/20260812-p95-reclaim/.
Terrestrial control (coupled-era)
| CCA | Goodput mean | p95 |
|---|---|---|
| BBRv3approx | 78.81 Mbps | 40.0 ms |
| LeoAware | 78.20 Mbps | 40.0 ms |
Historical: multi-seed leo_fast_ho endpoint (seeds 13,7,42,99,123)
| CCA | Goodput mean | p95 mean | Gate |
|---|---|---|---|
| CUBIC | 5.47 Mbps | 124.8 ms | baseline |
| BBRv3approx | 70.88 Mbps | 138.8 ms | reference |
| LeoAware v3.3-A | 78.06 Mbps | 149.7 ms | gp beats BBR; p95 residual |
Hybrid fuse ablation (fast, seeds 13+7) - fuse accept record
| Variant | leo_fast_ho gp | p95 | Note |
|---|---|---|---|
| endpoint | 84.04 Mbps | 123.9 ms | no assist |
| hybrid (D+Orb fuse) | 75.57 Mbps | 109.6 ms | no double-cut; p95 under endpoint |
| orb | 72.99 Mbps | 116.9 ms | pathID only |
| ASCENT-D noisy | = endpoint | = endpoint | erase-on-fail proven |
Hybrid fuse: Orb pathID REPROBE suppressed during ASCENT assist/freeze/REPROBE (2.0s); never util-MD when path hints on.
Integrity: python -m experiments.test_ascent_d_integrity.
Design: leoaware_v33_hybrid_fuse.md
Terrestrial control
| CCA | Goodput mean | p95 |
|---|---|---|
| BBRv3approx | 78.81 Mbps | 40.0 ms |
| LeoAware | 77.43 Mbps | 40.0 ms |
Endpoint multi-seed gate accepted in v3.1; v3.2 added ASCENT-D / Orb control-plane rails (no standalone tab - see Multi-seed history). Superseded by later reclaim / OPE work.
| CCA | Goodput mean | p95 mean |
|---|---|---|
| BBRv3approx | 70.88 Mbps | 138.8 ms |
| LeoAware v3.1 | 68.98 Mbps | 133.6 ms |
Multi-seed leo_fast_ho (accepted v3)
| CCA | Goodput mean | p95 mean |
|---|---|---|
| BBRv3approx | 70.88 Mbps | 138.8 ms |
| LeoAware v3 | 66.44 Mbps | 133.2 ms |
Superseded by v3.1 (+2.5 Mbps multi-seed mean under same p95 gate).
Fast handovers
| CCA | Goodput | p95 RTT |
|---|---|---|
| BBRv3approx | 65.38 Mbps | 188.6 ms |
| LeoAware | 70.36 Mbps | 123.2 ms |
Strong single-seed result; multi-seed mean goodput 64.8 with p95 146 (above BBR p95 mean).
Fast handovers (leo_fast_ho)
| CCA | Goodput | Avg RTT | p95 RTT | Loss | HOs |
|---|---|---|---|---|---|
| CUBIC | 6.44 Mbps | 65.4 ms | 134.3 ms | 0.14% | 7 |
| BBRv3approx | 65.38 Mbps | 116.2 ms | 188.6 ms | 1.18% | 7 |
| LeoAware | 68.31 Mbps | 87.3 ms | 164.0 ms | 1.26% | 7 |
Single long flow (leo_single)
| CCA | Goodput | p95 RTT | Loss |
|---|---|---|---|
| CUBIC | 9.04 Mbps | 111.2 ms | 0.10% |
| BBRv3approx | 83.99 Mbps | 161.8 ms | 1.27% |
| LeoAware | 64.67 Mbps | 129.1 ms | 1.32% |
Terrestrial control
| CCA | Goodput | p95 RTT |
|---|---|---|
| BBRv3approx | 78.81 Mbps | 40.0 ms |
| LeoAware | 77.98 Mbps | 40.0 ms |
leo_fast_ho multi-seed mean (primary objective)
| Version | Goodput mean | p95 mean | Era / vs BBR | Notes |
|---|---|---|---|---|
| BBRv3approx (coupled) | 70.88 Mbps | 138.8 ms | coupled reference | pre-OPE |
| BBRv3approx (OPE-fair) | 58.21 Mbps | 152.89 ms | OPE + soft-QIR reference | identical orbit timeline |
| LeoAware v2 | 64.82 Mbps | 146.5 ms | coupled; above BBR p95 | prior best single-seed peaky |
| LeoAware v3 | 66.44 Mbps | 133.2 ms | coupled; under BBR p95 | +1.6 Mbps vs v2 |
| LeoAware v3.1 | 68.98 Mbps | 133.6 ms | coupled; under BBR p95 | +2.5 Mbps vs v3 |
| LeoAware v3.2 rails | (assist mixed) | (assist mixed) | integrity gate | ASCENT-D + Orb modules (no standalone tab) |
| LeoAware v3.3-A | 78.06 Mbps | 149.7 ms | coupled; gp beats BBR | hybrid fuse; p95 residual |
| LeoAware v3.4-p95 | 73.57 Mbps | 138.37 ms | coupled; under BBR p95 | gp > BBR; delay reclaim |
| LeoAware v3.5 Tide | 76.27 Mbps | 147.39 ms | coupled HISTORICAL | gp≥75 stretch; p95 residual |
| LeoAware v3.6 Keel | 58.27 Mbps | 152.09 ms | OPE-fair; dual-gate pass | first fair gp≥BBR and p95≤BBR |
| LeoAware v3.7 OCE | 58.78 Mbps | 152.09 ms | OPE-fair, not Current | relative-BBR dual-gate (+0.57 / -0.80) |
| LeoAware v3.9 Crest | 82.07 Mbps | 76.26 ms | starlink_v1 ACCEPT, not Current | absolute 75 / 138.8 ACCEPT |
| LeoAware v3.17 FillGap | 82.45 Mbps | 76.26 ms | starlink_v1 Current | edges BBR 82.44; absolute 75 / 138.8 PASS |
| LeoAware v3.13 leocc | 337.97 Mbps | 89.60 ms | leocc_v1 research, not Current | ACCEPT_ERA_REJECT_BBR |
| LeoAware v3.11 WetLinks | 156.70 Mbps | 63.98 ms | wetlinks_v1 CSV | measured batch; not Current |
Capabilities (v3 through v3.17)
- CSV trace replay - Starlink-like
t_s,rtt_ms,capacity_mbps,reconfigpaths. - fair_mode - multi-flow delay AIMD friendliness.
- ASCENT freeze windows - hold + honest next_capacity peek + REPROBE.
- v3.1 path-aware BDP - soft min_rtt age + max-filter reclaim (multi-seed win).
- v3.2 ASCENT-D - RS(255,223) erase-on-fail path hints; never act on corrupted control.
- v3.2 Orb hybrid - optional pathID assist surface.
- v3.3-A hybrid fuse - single REPROBE ownership; no stacked ASCENT+Orb soft cuts.
- v3.4-p95 reclaim - delay-aware cruise/fill; coupled-era p95 under BBR while gp still beats BBR.
- v3.5 Tide - time-bounded post-hop reclaim; coupled-era gp≥75 stretch (historical only).
- v3.6 Keel / OPE - Orthogonal Path Entropy + Soft-QIR + Keel + SER + 2PC TBPR; fair dual gate.
- v3.7 OCE - Orbit Capacity Echo + SER-lite; ope_v36 relative dual-gate vs BBR, not Current.
- v3.9 Crest -
starlink_v1ACCEPT, not Current; first absolute 75 / 138.8 ACCEPT. - v3.11 WetLinks - 5 measured CSV windows; 156.7 Mbps batch (era separate, not Current).
- v3.13 leocc - leocc_v1 research era; ACCEPT_ERA_REJECT_BBR, not Current.
- v3.17 FillGap - delay-clean 1 MSS cwnd fill; Current starlink_v1 dual-gate vs BBR (constructor default False).
Log: experiment_log.md | leoaware_v37_oce.md | traces_and_ascent.md
02 / problem
What breaks on Starlink-class paths
Peak bandwidth is fine. The path is not. Handovers, beam switches, ISL re-routes, and non-congestive loss look like congestion to loss-based CCAs and leave model-based CCAs with stale min-RTT and BDP. Interactive and bulk both suffer - latency variance and self-limited goodput.
| What most stacks assume | What OrbitStack does |
|---|---|
Stable path, stable RTT
|
Reconfiguration-aware control
|
03 / ASCENT
Wire state the CCA can actually trust
Endpoint detection alone is deployable today. ASCENT is the upgrade path: a greppable, integrity-protected stream for telemetry, agent roles, and multimodal refs - so Starlink-class terminals or edge agents can announce reconfigs and capacity instead of forcing the sender to discover them after the RTT spike.
Sacred ASCII stays greppable. ASCENT-D can wrap critical feedback with RS(255,223) erase-on-fail so the CCA never acts on corrupted control.
state
Predict, do not only react
Altitude, status, vector into the bottleneck model. Freeze/ramp around known windows before p95 blows out.
control
Protected feedback
Capacity estimates and reconfig notices in ASCENT-D. Erase on parity failure. No thrash on garbage state.
efficiency
Lower offered load
Content-addressed REFs and lightweight sacred control free headroom for goodput on the same window.
04 / design
Endpoint-first, quiche-shaped
No network cooperation required to start. Interface maps cleanly onto a QUIC congestion controller
(on_ack, on_loss(congestive?), optional on_path_hint / ASCENT-D ingest, optional on_orb_signal).
That is the integration surface for Cloudflare-class edge stacks and client-side mobile/desktop transports.
-
01
LeoAware detection
RTT jump outliers, ACK inter-arrival gaps, loss bursts without RTT inflation. Soft re-probe - not CUBIC collapse. SER / SER-lite keep min_rtt on RTT-stable mobility.
-
02
Optional ASCENT-D side channel
Subscribe to pilot / dish / gateway agent frames wrapped in ASCENT-D (erase-on-fail). Cross-check untrusted roles. Optional Orb pathID when in-network telemetry exists.
-
03
Adaptive profiles
Nominal -> lower ECC, higher probe headroom. Degraded geometry -> stronger protection + QUEUE coordination. OCE chases capacity only inside a short echo window.
-
04
Measure on real ASNs
A/B CUBIC / BBR / LeoAware on Starlink-attached clients or edge PoPs. Endpoint-only first; path hints when available.
05 / audience
For X engineers (and anyone on LEO)
If you run interactive product, media, or bulk sync over Starlink-class last miles, classic CCA assumptions leak into user-visible latency and goodput. OrbitStack is a concrete brief plus measured sim evidence for two complementary pieces:
- LeoAware - ship endpoint logic that does not self-limit on mobility loss (v3.17 FillGap Current on starlink_v1 82.45 / 76.26 vs BBR 82.44 / 76.66; v3.9 Crest 82.07 / 76.26 is ACCEPT, not Current; v3.7 OCE 58.78 is ope_v36, not Current).
- ASCENT-D - integrity-protected structured state so reconfigs are signals, not mysteries (never act on garbage).
- VELA - the language that builds onto LeoAware. hint.ascent is Option (erase-on-fail). Missing hint is None, not a hop. Observe-only Reach is the no-regress wrap. Not a rival CCA.
- Orb hybrid - optional pathID / queue assist when programmable telemetry exists; degrades to endpoint otherwise.
- Honest scope - research sim and design, not a claim of production BBRv3 parity or official Starlink affiliation. Coupled-era absolute Mbps are historical only. Not dish PHY Mbps.
Natural pilot: Starlink-attached clients or edge terminations A/B'ing rate controllers, with ASCENT frames as a later assist. Related: ascent.jonbailey.xyz (wire) and skycache.jonbailey.xyz (mesh / DTN).
06 / path
Cloudflare x Starlink collaboration shape
Cloudflare: high-volume QUIC and global edge. Starlink: LEO topology and potential path-change signals. OrbitStack is the bridge brief - endpoint measurement first, authenticated reconfiguration hints later. Multipath and AI-scale bulk are phase-two traffic classes once the single-path rate loop is honest about handovers.
phase 0
This brief + sim
Shared vocabulary, metrics, and LeoAware behavior under synthetic LEO dynamics.
phase 1
Live A/B
Instrument Starlink ASNs / PoPs. Validate which endpoint signals fire around real hops.
phase 2
ASCENT assists
Optional epoch markers and capacity advice into on_path_hint without forcing cooperation.