docs(security): add recovery outcome lanes
This commit is contained in:
@@ -413,6 +413,16 @@ EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_CHECKS = [
|
||||
"check-recovery-record-next-focus-s4-9",
|
||||
]
|
||||
|
||||
EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_OUTCOME_LANES = [
|
||||
"outcome-recovery-ready-readonly",
|
||||
"outcome-recovery-branch-still-diverged",
|
||||
"outcome-recovery-ledger-still-stale",
|
||||
"outcome-recovery-guard-failed",
|
||||
"outcome-recovery-diff-out-of-scope",
|
||||
"outcome-recovery-runtime-flag-drift",
|
||||
"outcome-recovery-next-focus-drift",
|
||||
]
|
||||
|
||||
|
||||
def load_json(path: Path) -> dict[str, Any]:
|
||||
return json.loads(path.read_text(encoding="utf-8"))
|
||||
@@ -530,6 +540,11 @@ def validate(root: Path) -> None:
|
||||
rollup_summary["owner_response_validation_parallel_session_recovery_check_count"],
|
||||
len(EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_CHECKS),
|
||||
)
|
||||
assert_equal(
|
||||
"rollup.owner_response_validation_parallel_session_recovery_outcome_lane_count",
|
||||
rollup_summary["owner_response_validation_parallel_session_recovery_outcome_lane_count"],
|
||||
len(EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_OUTCOME_LANES),
|
||||
)
|
||||
assert_true("rollup.quarantine_required", rollup_summary["quarantine_required"])
|
||||
assert_equal("rollup.primary_ready_count", rollup_summary["primary_ready_count"], 0)
|
||||
|
||||
@@ -1467,6 +1482,62 @@ def validate(root: Path) -> None:
|
||||
item["execution_authorized"],
|
||||
)
|
||||
|
||||
parallel_session_recovery_outcome_lanes = rollup[
|
||||
"owner_response_validation_parallel_session_recovery_outcome_lanes"
|
||||
]
|
||||
assert_equal(
|
||||
"owner_response_validation_parallel_session_recovery_outcome_lanes.ids",
|
||||
[item["lane_id"] for item in parallel_session_recovery_outcome_lanes],
|
||||
EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_OUTCOME_LANES,
|
||||
)
|
||||
assert_equal(
|
||||
"owner_response_validation_parallel_session_recovery_outcome_lanes.display_order",
|
||||
[item["display_order"] for item in parallel_session_recovery_outcome_lanes],
|
||||
list(range(1, len(EXPECTED_ROLLUP_PARALLEL_SESSION_RECOVERY_OUTCOME_LANES) + 1)),
|
||||
)
|
||||
for item in parallel_session_recovery_outcome_lanes:
|
||||
assert_equal(
|
||||
f"owner_response_validation_parallel_session_recovery_outcome_lanes.{item['lane_id']}.awooop_display_mode",
|
||||
item["awooop_display_mode"],
|
||||
"display_parallel_session_recovery_outcome_lane_only",
|
||||
)
|
||||
assert_false(
|
||||
f"owner_response_validation_parallel_session_recovery_outcome_lanes.{item['lane_id']}.execution_authorized",
|
||||
item["execution_authorized"],
|
||||
)
|
||||
assert_true(
|
||||
f"owner_response_validation_parallel_session_recovery_outcome_lanes.{item['lane_id']}.not_approval",
|
||||
item["not_approval"],
|
||||
)
|
||||
for blocked in item["blocked_interpretations"]:
|
||||
if blocked in {
|
||||
"treat_recovery_ready_as_merge_approval",
|
||||
"treat_recovery_ready_as_owner_response",
|
||||
"treat_recovery_ready_as_runtime_gate",
|
||||
"auto_rebase_still_diverged_branch",
|
||||
"auto_merge_still_diverged_branch",
|
||||
"force_push_still_diverged_branch",
|
||||
"continue_from_stale_ledger",
|
||||
"skip_latest_logbook_after_recovery",
|
||||
"mark_response_received_from_stale_handoff",
|
||||
"ignore_guard_failure",
|
||||
"treat_guard_failure_as_runtime_incident",
|
||||
"open_action_button_from_guard_failure",
|
||||
"stage_out_of_scope_diff",
|
||||
"commit_out_of_scope_diff",
|
||||
"drop_out_of_scope_diff_without_review",
|
||||
"accept_runtime_flag_drift",
|
||||
"create_action_button_from_flag_drift",
|
||||
"enqueue_runtime_job_from_flag_drift",
|
||||
"advance_next_focus_without_owner_response",
|
||||
"mark_later_packet_received_after_recovery",
|
||||
"create_followup_gate_from_focus_drift",
|
||||
}:
|
||||
assert_false(
|
||||
f"owner_response_validation_parallel_session_recovery_outcome_lanes.{item['lane_id']}.runtime_execution_authorized",
|
||||
item["execution_authorized"],
|
||||
)
|
||||
|
||||
first_lane = LANES[0]
|
||||
first_collection_item = collection_order_by_id[first_lane["lane_id"]]
|
||||
first_missing_lane = missing_lane_by_id[first_lane["lane_id"]]
|
||||
|
||||
Reference in New Issue
Block a user