YASS results / UC4 — Sat Failure
Use Case

UC4 — Sat Failure

Abstract

A single satellite captures one high-priority image while flying over a pole (far from any ESTRACK ground station). Shortly afterwards — and before the satellite has any line-of-sight with any GS — the satellite is killed by a Destroy hardware event. We then watch whether the image still reaches the ground via peer satellites. Run on both engines: EDFS is expected to deliver via inter-satellite links; TUS is expected to lose the file entirely.

Success Condition

The run ends successfully if the image reaches any ground station despite the producer being destroyed.

Detailed description

The producer satellite is placed on an orbit whose initial position at t=0 is high-latitude and out of LOS with every ESTRACK station. The producer's agent writes one file of size S, with priority high, and exits. Roughly T_destroy seconds after the photo is taken — but always before the producer's first contact window with any GS — a Destroy hardware event fires on the producer, irreversibly taking it offline.

For EDFS, success requires that the producer has had enough time (between the photo and the destroy) to replicate at least one block of the file to at least one surviving peer satellite, which then carries it forward until a GS comes into LOS. For TUS, the file existed only on the producer and the run becomes a control: TUS should fail to deliver, demonstrating the loss-mode that EDFS is supposed to mitigate.

The other satellites in the constellation do nothing besides act as relays; the seven ESTRACK ground stations all have END_ON_ANY=true so the first RECEIVED terminates the run.

Producer exit ordering (why Destroy does not mark the run failed)

The producer's agent writes its single file and exits with code 0 within seconds of activation — long before Destroy fires at T_destroy (≥ 5m). This ordering is deliberate and load-bearing: the operator decides the experiment's terminal Success/Failure from the agent containers' exit codes (evaluateAgentExitCodes), not from delivery. Because the producer's agent container has already terminated 0 before Destroy, the SIGKILL that Destroy delivers to the (now-empty) producer pod does not turn the run into a Failure. The producer agent must therefore always exit 0 right after producing; do not give it long-running / post-photo behaviour in UC4.

Whether the file actually reached the ground (the real UC4 outcome) is determined by the ground-station agents' end-request on first RECEIVED, and is read from the delivery metrics — independently of the producer's destruction.

Main goal

Demonstrate that EDFS survives the loss of the file's original producer for an image with no remaining copies, and quantify the trade-off. The headline deliverable is a delivery-success surface success(n_sat, dt) per engine, where the two swept variables are:

success is the fraction (over repeats) of runs in which the image reached at least one GS. EDFS is expected to dominate TUS across the whole grid:

KPI:

Parameters

Parameter Values Notes
engine tus, edfs TUS run is the negative-control baseline.
sat_count 1, 2, 8, 21, 100, 200 At sat_count = 1 even EDFS must fail — no peers to replicate to. That is itself a useful data point.
T_destroy (= dt) 5m, 15m, 45m Minutes between "photo taken" (t≈0) and "Destroy fires" — the dt KPI axis. All three precede the producer's first GS contact (~54m, see orbit note), so all are genuine pre-contact destructions. Smaller dt = tighter race for replication.
S (file size) 32M Single regime; the sweep is priority × dt × sat_count.
priority (EDFS) high, default, low Swept (EDFS only). Sets EDFS replication width: high→ceil(0.9·peers), default→ceil(0.1·peers), low→local-only. low should fail like TUS (file never leaves the producer). TUS ignores priority (one TUS run per dt × sat_count).
RF (EDFS only) fixed at 3 A single RF keeps the priority/dt effects interpretable.
gs_count fixed at 7 (ESTRACK)
simulationStartTime fixed 2026-05-16T23:59:00.000Z (= synthetic producer's TLE epoch) Same for all sat_counts: the producer orbit is designed so its sub-point is over the South pole, out of LOS with every ESTRACK GS, at this epoch. See "Producer over the pole".
max_duration EDFS 4h; TUS T_destroy + 10m EDFS needs a long window for a relay peer to fly into LOS with a GS. TUS cannot recover once the producer is destroyed (no inter-sat relay), so its run is stopped 10 minutes after the Destroy event — no point burning the full EDFS budget. Set per engine in run.sh (EDFS_MAX_DURATION, TUS_GRACE_SECONDS).

TUS parameter coverage. priority (an EDFS-only axis) and RF are both ignored by TUS. The TUS sweep therefore reduces to (sat_count, T_destroy); priority and RF are omitted from the TUS run-id entirely. This is by design — UC4 measures binary "does the file survive the producer's loss?", and on TUS that answer is "no" for every parameter combination, so a single run per (sat_count, T_destroy) suffices as the negative baseline.

Assumptions

Expectations

Additional metrics

Beyond yass_file_delivery_seconds:

Charts

EDFS delivery rate (% of produced files reaching a GA), HIGH priority only — high is the only priority run at every n, so the columns are directly comparable. Default behaves identically (see the priority breakdown below); low is the priority that fails. Coloured by destroy time (white-background copy: charts/uc4_delivery_pct_light.png)
EDFS delivery rate (% of produced files reaching a GA), HIGH priority only — high is the only priority run at every n, so the columns are directly comparable. Default behaves identically (see the priority breakdown below); low is the priority that fails. Coloured by destroy time (white-background copy: charts/uc4_delivery_pct_light.png)
EDFS delivery rate by file priority for the n=21, dt=15m cell — low priority fails where default/high succeed (white-background copy: charts/uc4_priority_breakdown_light.png)
EDFS delivery rate by file priority for the n=21, dt=15m cell — low priority fails where default/high succeed (white-background copy: charts/uc4_priority_breakdown_light.png)

Variants (40)

variantengineprioritydtsatRFdeliveredfirstGS(s)state
uc4-edfs-phigh-td15m-n01-rf3 edfshigh15m13non/a TimedOut
uc4-edfs-phigh-td45m-n01-rf3 edfshigh45m13non/a TimedOut
uc4-edfs-phigh-td15m-n02-rf3 edfshigh15m23yes2796 Success
uc4-edfs-phigh-td45m-n02-rf3 edfshigh45m23yes2807 Success
uc4-edfs-phigh-td5m-n02-rf3 edfshigh5m23yes2797 Success
uc4-edfs-pdefault-td15m-n08-rf3 edfsdefault15m83yes1296 Success
uc4-edfs-pdefault-td45m-n08-rf3 edfsdefault45m83yes1326 Success
uc4-edfs-phigh-td15m-n08-rf3 edfshigh15m83yes1331 Success
uc4-edfs-phigh-td45m-n08-rf3 edfshigh45m83yes1293 Success
uc4-edfs-phigh-td5m-n08-rf3 edfshigh5m83yes1343 Success
uc4-edfs-plow-td15m-n08-rf3 edfslow15m83non/a Ongoing
uc4-edfs-plow-td45m-n08-rf3 edfslow45m83non/a TimedOut
uc4-edfs-plow-td5m-n08-rf3 edfslow5m83non/a Ongoing
uc4-edfs-pdefault-td15m-n21-rf3 edfsdefault15m213yes1302 Success
uc4-edfs-pdefault-td45m-n21-rf3 edfsdefault45m213yes1306 Success
uc4-edfs-pdefault-td5m-n21-rf3 edfsdefault5m213yes1305 Success
uc4-edfs-phigh-td15m-n21-rf3 edfshigh15m213yes1296 Success
uc4-edfs-phigh-td45m-n21-rf3 edfshigh45m213yes1322 Success
uc4-edfs-phigh-td5m-n21-rf3 edfshigh5m213yes1302 Success
uc4-edfs-plow-td15m-n21-rf3 edfslow15m213non/a TimedOut
uc4-edfs-plow-td45m-n21-rf3 edfslow45m213non/a TimedOut
uc4-edfs-plow-td5m-n21-rf3 edfslow5m213non/a TimedOut
uc4-edfs-phigh-td15m-n100-rf3 edfshigh15m1003yes84 Success
uc4-edfs-phigh-td45m-n100-rf3 edfshigh45m1003yes101 Success
uc4-edfs-phigh-td5m-n100-rf3 edfshigh5m1003yes60 Success
uc4-tus-td15m-n01 tus-15m1non/a TimedOut
uc4-tus-td45m-n01 tus-45m1non/a TimedOut
uc4-tus-td5m-n01 tus-5m1non/a TimedOut
uc4-tus-td15m-n02 tus-15m2non/a TimedOut
uc4-tus-td45m-n02 tus-45m2non/a TimedOut
uc4-tus-td5m-n02 tus-5m2non/a TimedOut
uc4-tus-td15m-n08 tus-15m8non/a TimedOut
uc4-tus-td45m-n08 tus-45m8non/a TimedOut
uc4-tus-td5m-n08 tus-5m8non/a TimedOut
uc4-tus-td15m-n21 tus-15m21non/a TimedOut
uc4-tus-td45m-n21 tus-45m21non/a TimedOut
uc4-tus-td5m-n21 tus-5m21non/a TimedOut
uc4-tus-td15m-n100 tus-15m100non/a TimedOut
uc4-tus-td45m-n100 tus-45m100non/a TimedOut
uc4-tus-td5m-n100 tus-5m100non/a TimedOut