Skip to content

Commit e605b15

Browse files
[uss_qualifier/scenarios] Clarify and fix down-USS test for SCD0005 (#1368)
Co-authored-by: Michael Barroco <michael@orbitalize.com>
1 parent a5b93dd commit e605b15

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

monitoring/uss_qualifier/scenarios/astm/utm/off_nominal_planning/down_uss.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,33 @@ However, since:
7171
- the virtual USS is declared as down at the DSS,
7272
- it does not respond for operational intent details, and
7373
- the conflicting operational intent is in the 'Accepted' state,
74-
The tested USS should evaluate the conflicting operational intent as having the lowest bound priority status, i.e. a priority strictly lower than the lowest priority allowed by the local regulation.
74+
75+
the tested USS should evaluate the conflicting operational intent as having the lowest bound priority status, i.e. a priority strictly lower than the lowest priority allowed by the local regulation.
7576

7677
As such, the tested USS may either:
7778
- Successfully plan Flight 1 over the conflicting operational intent, or
7879
- Decide to be more conservative and reject the planning of Flight 1.
7980

8081
#### 🛑 Successful planning check
81-
All flight intent data provided is correct and the USS should have either successfully planned Flight 1 per **[astm.f3548.v21.SCD0005](../../../../requirements/astm/f3548/v21.md)**,
82-
or rejected properly the planning if it decided to be more conservative with such conflicts.
83-
If the USS indicates that the injection attempt failed, this check will fail.
82+
All flight intent data provided is correct and **[astm.f3548.v21.SCD0005](../../../../requirements/astm/f3548/v21.md)** allows the USS to plan an operational
83+
intent in conflict with the pre-existing operational intent managed by a down USS by applying the lowest-bound priority
84+
to that operational intent. If the USS indicates that the injection attempt failed, this check will fail.
8485

85-
Do take note that if the USS rejects the planning, this check will not fail, but the following *Rejected planning check*
86-
will. Refer to this check for more information.
86+
If the USS rejects the requested flight, this check will not fail, but the following *Rejected planning check* will.
87+
Refer to this check for more information.
8788

8889
#### ℹ️ Rejected planning check
89-
All flight intent data provided is correct and the USS should have either successfully planned Flight 1 or rejected
90-
properly the planning if it decided to be more conservative with such conflicts.
91-
If the USS rejects the planning, this check will produce a low severity finding per **[astm.f3548.v21.SCD0005](../../../../requirements/astm/f3548/v21.md)**.
90+
ASTM F3548-21 does not require USSs to accept flight requests in all circumstances not prohibited by F3548-21. USSs may
91+
(generally) apply any number of additional rules to determine whether or not a flight planning action is accepted by the
92+
USS. For instance, a USS may say, "even though we're allowed to plan over unactivated op intents managed by down USSs,
93+
we choose not to in order to avoid the small risk the USS may not realize it is down and start that flight any way."
94+
95+
For this reason, a USS may reject the planning request above while still complying with SCD0005 by applying the correct
96+
priority to the pre-existing operational intent. Therefore, a rejection of the planning request does not indicate
97+
non-compliance with SCD0005. However, because InterUSS uses successful planning as a means to measure whether a USS is
98+
in compliance with SCD0005, rejecting the planning attempt means that the primary mechanism for inferring compliance
99+
with **[astm.f3548.v21.SCD0005](../../../../requirements/astm/f3548/v21.md)** is not available. In this case, this check will produce a low-severity finding
100+
to note InterUSS's inability to use this primary mechanism for SCD0005 compliance verification.
92101

93102
#### 🛑 Injection fidelity check
94103

monitoring/uss_qualifier/scenarios/astm/utm/off_nominal_planning/down_uss.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
cleanup_flights,
4242
submit_flight,
4343
)
44-
from monitoring.uss_qualifier.scenarios.scenario import TestScenario
44+
from monitoring.uss_qualifier.scenarios.scenario import ScenarioLogicError, TestScenario
4545
from monitoring.uss_qualifier.suites.suite import ExecutionContext
4646

4747

@@ -250,22 +250,29 @@ def _plan_flight_conflict_planned(self):
250250
# TODO(#1326): Validate that flight as planned still allows this scenario to proceed
251251
flight1_planned = as_planned
252252

253-
if resp.activity_result == PlanningActivityResult.Completed:
254-
validator.expect_shared(flight1_planned)
255-
elif resp.activity_result == PlanningActivityResult.Rejected:
256-
with self.check(
257-
"Rejected planning", [self.tested_uss.participant_id]
258-
) as check:
253+
with self.check(
254+
"Rejected planning", [self.tested_uss.participant_id]
255+
) as check:
256+
if resp.activity_result == PlanningActivityResult.Rejected:
259257
msg = f"{self.tested_uss.participant_id} indicated {resp.activity_result}"
260258
if "notes" in resp and resp.notes:
261259
msg += f' with notes "{resp.notes}"'
262260
else:
263261
msg += " with no notes"
264262
check.record_failed(
265-
summary="Warning (not a failure): planning got rejected, USS may have been more conservative",
263+
summary="Warning (not a failure): flight was rejected, USS may have been more conservative",
266264
details=msg,
267265
)
266+
267+
if resp.activity_result == PlanningActivityResult.Completed:
268+
validator.expect_shared(flight1_planned)
269+
elif resp.activity_result == PlanningActivityResult.Rejected:
268270
validator.expect_not_shared()
271+
else:
272+
raise ScenarioLogicError(
273+
f"OpIntentValidator should have ensured that resp.activity_result was Completed or Rejected, but instead it was {resp.activity_result}"
274+
)
275+
269276
self.end_test_step()
270277

271278
def _clear_op_intents(self):

0 commit comments

Comments
 (0)