this derivation will be built: /nix/store/1rpr028c0sjr4x6bg1qp22rrds5ls63z-network-status-pytest.drv building '/nix/store/1rpr028c0sjr4x6bg1qp22rrds5ls63z-network-status-pytest.drv' on 'ssh-ng://builder@build01.clan.lol' building '/nix/store/1rpr028c0sjr4x6bg1qp22rrds5ls63z-network-status-pytest.drv' network-status-pytest> Running pytest... network-status-pytest> ============================= test session starts ============================== network-status-pytest> platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0 -- /nix/store/fd6xbzjdbr4f26jh3yd8yssbph48f5ni-python3-3.14.7-env/bin/python network-status-pytest> cachedir: .pytest_cache network-status-pytest> rootdir: /build/src network-status-pytest> collected 61 items network-status-pytest> network-status-pytest> tests/test_format.py::TestCenterText::test_centers_single_line PASSED [ 1%] network-status-pytest> tests/test_format.py::TestCenterText::test_centers_multiple_lines PASSED [ 3%] network-status-pytest> tests/test_format.py::TestCenterText::test_handles_empty_string PASSED [ 4%] network-status-pytest> tests/test_format.py::TestCenterText::test_handles_line_wider_than_width PASSED [ 6%] network-status-pytest> tests/test_format.py::TestCenterText::test_uses_longest_line_for_padding PASSED [ 8%] network-status-pytest> tests/test_format.py::TestGetTerminalWidth::test_returns_default_on_failure PASSED [ 9%] network-status-pytest> tests/test_format.py::TestGetTerminalWidth::test_returns_actual_columns PASSED [ 11%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_returns_nixos_when_file_not_found PASSED [ 13%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_returns_nixos_on_permission_error PASSED [ 14%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_returns_nixos_when_path_is_directory PASSED [ 16%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_returns_nixos_on_binary_content PASSED [ 18%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_returns_hostname_from_file PASSED [ 19%] network-status-pytest> tests/test_hostname.py::TestGetHostname::test_strips_whitespace PASSED [ 21%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_filters_loopback PASSED [ 22%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_filters_down_interfaces PASSED [ 24%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_filters_link_local_ipv6 PASSED [ 26%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_interface_name_containing_up_substring_not_treated_as_up PASSED [ 27%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_handles_empty_output PASSED [ 29%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_handles_multiple_up_interfaces PASSED [ 31%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_returns_error_row_when_ip_command_missing PASSED [ 32%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_strips_ansi_color_codes_for_state_parsing PASSED [ 34%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_name_with_parent_link_suffix_is_kept PASSED [ 36%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_multiple_addresses_mixed_families PASSED [ 37%] network-status-pytest> tests/test_ip_addresses.py::TestGetIpAddresses::test_non_up_states_filtered PASSED [ 39%] network-status-pytest> tests/test_print_status.py::TestPrintStatus::test_output_contains_all_sections PASSED [ 40%] network-status-pytest> tests/test_print_status.py::TestPrintStatus::test_hides_vpn_section_when_empty PASSED [ 42%] network-status-pytest> tests/test_print_status.py::TestPrintStatus::test_shows_tor_without_vpn PASSED [ 44%] network-status-pytest> tests/test_print_status.py::TestPrintStatus::test_all_optional_sections_empty PASSED [ 45%] network-status-pytest> tests/test_print_status.py::TestPrintStatus::test_footer_present PASSED [ 47%] network-status-pytest> tests/test_tor.py::TestReadOnionAddress::test_reads_valid_onion_address PASSED [ 49%] network-status-pytest> tests/test_tor.py::TestReadOnionAddress::test_returns_none_for_non_onion PASSED [ 50%] network-status-pytest> tests/test_tor.py::TestReadOnionAddress::test_returns_none_for_missing_file PASSED [ 52%] network-status-pytest> tests/test_tor.py::TestReadOnionAddress::test_does_not_match_onion_substring_in_middle PASSED [ 54%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesExplicit::test_reads_explicit_paths PASSED [ 55%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesExplicit::test_deduplicates_addresses PASSED [ 57%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesExplicit::test_explicit_paths_skip_auto_detect PASSED [ 59%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesAutoDetect::test_reads_hostname_directly_in_base_dir PASSED [ 60%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesAutoDetect::test_reads_hostname_from_subdirectory PASSED [ 62%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesAutoDetect::test_combines_direct_and_subdirectory_hostnames PASSED [ 63%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesAutoDetect::test_auto_detected_sorted PASSED [ 65%] network-status-pytest> tests/test_tor.py::TestGetTorAddressesAutoDetect::test_missing_base_dir_is_skipped PASSED [ 67%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_wireguard_interfaces PASSED [ 68%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_wireguard_with_carrier_suffix PASSED [ 70%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_zerotier_interfaces PASSED [ 72%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_yggdrasil_interfaces PASSED [ 73%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_tailscale_interfaces PASSED [ 75%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_mycelium_interfaces PASSED [ 77%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_dedup_when_wireguard_matches_name_pattern PASSED [ 78%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_ip_command_missing_falls_back_to_sysfs PASSED [ 80%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_detects_multiple_wireguard_interfaces PASSED [ 81%] network-status-pytest> tests/test_vpn.py::TestDetectVpnInterfaces::test_ignores_link_ether_continuation PASSED [ 83%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_returns_addresses_for_up_interface PASSED [ 85%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_handles_unknown_state PASSED [ 86%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_shows_offline_for_down_interface PASSED [ 88%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_shows_offline_for_empty_output PASSED [ 90%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_shows_no_addresses_when_only_link_local PASSED [ 91%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_mixed_fe80_and_routable_keeps_routable PASSED [ 93%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_multiple_interfaces_returned_in_order PASSED [ 95%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_ip_command_missing_reports_per_interface PASSED [ 96%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_name_with_none_parent_suffix_accepted PASSED [ 98%] network-status-pytest> tests/test_vpn.py::TestGetVpnAddresses::test_mixed_v4_and_v6_routable_with_link_local PASSED [100%] network-status-pytest> network-status-pytest> ============================== 61 passed in 1.00s ============================== network-status-pytest> Running mypy... network-status-pytest> Success: no issues found in 1 source file post-build step Upload to niks3: ok time=2026-08-27T20:04:16.512Z level=INFO msg="Uploading 0 paths to niks3.clan.lol (1 already cached)" time=2026-08-27T20:04:18.530Z level=INFO msg="Uploading 1 narinfos" time=2026-08-27T20:04:18.722Z level=INFO msg="Upload complete. (2.268s)"