From 1e0aab566f4ce537cc96e06af5cec640b336fc90 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Mon, 19 Oct 2026 21:38:15 -0700 Subject: [PATCH] Record T1000 bootloader correction and remaining BLE failure --- ..._qualification_f807_followup_2026-10-19.md | 43 ++ ...ication_f807_followup_2026-10-19.safe.json | 493 ++++++++++++++++++ ...anion_qualification_followup_2026-10-19.md | 2 + 3 files changed, 538 insertions(+) create mode 100644 docs/test-results/companion_qualification_f807_followup_2026-10-19.md create mode 100644 docs/test-results/companion_qualification_f807_followup_2026-10-19.safe.json diff --git a/docs/test-results/companion_qualification_f807_followup_2026-10-19.md b/docs/test-results/companion_qualification_f807_followup_2026-10-19.md new file mode 100644 index 000000000..225b3eccb --- /dev/null +++ b/docs/test-results/companion_qualification_f807_followup_2026-10-19.md @@ -0,0 +1,43 @@ + + + + +# Mercerwood Companion diagnosis follow-up, 2026-10-19 + +Overall status: **FAIL, incomplete**. Across the selected measured sources, **1/2 Companions PASS, 1 FAIL**. RAK 4631 passed USB, BLE and two-way LoRa at f807. T1000-E passed latest normal Full USB but remains **FAIL** because BLE has not qualified. XIAO nRF52 remains a carried-forward failure. + +Both selected boards first returned to Full `f80751354ffc530461e87109ced4f575d3950a52`. T1000 subsequently received normal Full `42f7df082fc4c7362ecd5c18c8644ab25b51b9e9`, version `v1.18.0.1-halo-keymind-cascade-dev-42f7df08`, after the corrected bootloader. Its ZIP SHA-256 is `7fac141e40183ada315f70b296583eaf854fd819c76fbd896a1f0f2e4a405e5b`. Checks ran on October 20 UTC during the October 19 local campaign. + +| Companion | Source | USB | BLE | LoRa | Overall | +| --- | --- | --- | --- | --- | --- | +| RAK 4631 | f8075135 | PASS | PASS | PASS | PASS | +| Seeed T1000-E | 42f7df08 | PASS | FAIL | not requalified; f807 passed | FAIL | +| Seeed XIAO nRF52 | prior failure retained | FAIL | not qualified | not qualified | FAIL retained | + +This is a selected-board follow-up, not a 13-radio fleet qualification. Repeaters were outside scope. Earlier mixed-source results remain in [the previous follow-up](companion_qualification_followup_2026-10-19.md). + +Before the bootloader comparison, each f807 USB run passed 100 query cycles, 10 reopens, radio2 checks, owned-contact CRUD, persistence through warm reboot and contact cleanup. Each closed 18/18 ports with clean final core flags and zero stable binary prefix discards or invalid lengths. ASCII setup and intentional reboot recovery remain separate transition evidence. + +RAK BLE passed three 30-second sessions with USB-bound identity, board, full version, NUS services and getters verified. Uptime advanced, flags stayed clean and each session disconnected. LoRa passed an exact zero-hop DEV datagram in each direction between RAK and T1000, with packet-counter checks, owned-channel cleanup and restored radio leases. These finite checks do not establish phone interoperability, range or text delivery. + +T1000's original f807 BLE run failed current-advertisement identity binding with zero sessions. A later 90-second Pi follow-up also completed none despite Bluetooth enabled, stealth off and clean USB core flags. The unpaired BlueZ cache retained `T1000-BLE-PROBE` while USB verified normal f807 and its configured MeshCore name. Cached naming may affect filtering without a current scan response; it proves neither the BLE cause nor a duplicate address or working connection. + +Minimal BLE-only, payload/timing, clock-request, transmit-power and LFRC images were diagnostic probes, not Full acceptance. The LFRC probe used an explicit RC configuration and valid vectors; this does not establish a defective crystal or justify changing production clocks. Advertising/HFXO readbacks do not measure RF accuracy or prove over-air packets. + +The official upstream `companion-v1.18.0` T1000 BLE reference had matching ZIP/UF2 application bytes, base `0x27000` and SoftDevice requirement `0x0123`. Its bounded Pi scan did not find the required current advertisement. Phone visibility was insufficiently bound to name/time. This application-only experiment retained the same bootloader/SoftDevice and cannot isolate them. Normal Full was restored. Reference ZIP SHA-256: `79e53c2ce13521ccda5db3621a68f79728d2f241c3a8345e4107b7ae6b5a374d`. + +Installed S140 7.3.0 readback CRC `733639BD` matched the package bytes, also identical to Seeed's recovery package SoftDevice. That checks the covered image, not RF operation. C2 installation preceded a historical secured diagnostic link that never completed full BLE qualification. + +A separate DFU defect was corrected in bootloader `c0c421184a3cf1ca66b40b055101f20b8c587e26`: active-high P0.06 had been configured pull-up/active-low, with RESET/P0.18 treated as another button. The correction adds qualified three-second hold/USB-first recovery while retaining explicit-request latency and other boards' two-button behavior. Eleven actual-function host tests, 13 DFU-entry checks and T1000/T096/T114 cross-builds passed. See [candidate PR #1](https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/pull/1) and [upstream polarity evidence](https://github.com/meshtastic/Adafruit_nRF52_Bootloader_OTAFIX/commit/0f415c3ee26816ad52a7587b3d6cdd30547987ec). + +The reviewed combined bootloader transfer returned 0, but its installer stopped when the MSC disk was unavailable. That failed workflow remains failed. Later exact-device public INFO verified model `Seeed T1000-E for Meshtastic`, Board-ID `nRF52840-T1000-E-v1` and version `TEST_0x02040C01`. Package CRC `6BA4D206` was validated offline; installed CRC was not exposed. Combined ZIP SHA-256: `8db09e6b7f253b1e54aae754220f0d1053d369c07bff299a26b384233de6e234`. + +Separate f807 application programming and its adapter command both returned 0. An independent USB check passed 15 queries/two reopens, closed 5/5 ports and verified normal f807, the same public identity, clean framing and zero core errors. With the corrected bootloader and same f807, an explicit-address 90-second BLE attempt still failed advertisement binding with zero sessions. No BLE fix or bootloader cause is established. + +Final normal Full 42f7df08 installation succeeded. Its fresh USB run passed 100 queries, 10 reopens, owned-contact CRUD/cleanup, warm reboot and radio2 checks, with 18/18 ports closed, zero stable framing rejects and clean core flags. Its normal 25-second BLE discovery still failed with zero sessions. LoRa was not requalified at 42f7df08; the earlier f807 RF pass remains source-bound. + +Combined serial delivery avoided legacy UF2 scratch `0xE0000..0xEA000`, which overlaps internal ExtraFS. Its staging and f807 restore remain below ExtraFS. No filesystem-preservation claim replaces runtime checks. + +A subsequent 90-second scan by the independently verified Bluetooth address also failed to reach a connection on normal Full `42f7df08`. The requested physical battery restart was still unconfirmed, so this is not battery-only evidence. + +Cold boot, physical battery-only BLE, complete phone/feature testing and fleet qualification remain untested. Longer USB-powered scans are not battery tests. [Safe JSON](companion_qualification_f807_followup_2026-10-19.safe.json) retains source bindings, workflow distinctions and evidence digests without device secrets or raw addresses. diff --git a/docs/test-results/companion_qualification_f807_followup_2026-10-19.safe.json b/docs/test-results/companion_qualification_f807_followup_2026-10-19.safe.json new file mode 100644 index 000000000..9a6ea9a8a --- /dev/null +++ b/docs/test-results/companion_qualification_f807_followup_2026-10-19.safe.json @@ -0,0 +1,493 @@ +{ + "baseline_source_commit": "f80751354ffc530461e87109ced4f575d3950a52", + "baseline_version": "v1.18.0.1-halo-keymind-cascade-dev-f8075135", + "boards": [ + { + "axes": { + "ble": { + "all_sessions_disconnected": true, + "evidence": "rak-ble.safe.json", + "finished_at": "2026-10-20T03:57:37.611821+00:00", + "full_version_matches": true, + "hold_seconds_requested": 30.0, + "nus_services_verified": true, + "sessions_completed": 3, + "sessions_requested": 3, + "status": "passed", + "uptime_monotonic": true, + "usb_public_identity_matches": true + }, + "rf": { + "directions_verified": 2, + "evidence": "rf.safe.json", + "exact_dev_datagrams": true, + "owned_channels_cleared": true, + "peer": "t1000", + "radio_leases_restored": true, + "scope": "Zero-hop DATA_TYPE_DEV datagrams; not text, range or RF calibration.", + "status": "passed" + }, + "usb": { + "core_error_flags": 0, + "evidence": "rak-usb.safe.json", + "finished_at": "2026-10-20T03:50:24.438315+00:00", + "full_runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-f8075135 (Build: 20-Oct-2026)", + "owned_contact_crud_passed": true, + "owned_contact_removed_and_reopen_verified": true, + "persistent_query_cycles": 100, + "ports_closed": 18, + "ports_opened": 18, + "radio2_passed": true, + "reopens": 10, + "stable_discarded_prefix_bytes": 0, + "stable_invalid_length_candidates": 0, + "status": "passed", + "transport_scope": "Stable binary sessions; ASCII setup and deliberate reboot recovery recorded separately.", + "warm_reboot_verified": true + } + }, + "key": "rak", + "name": "RAK 4631", + "normal_full_restored_and_runtime_verified": true, + "overall": "passed", + "source_commit": "f80751354ffc530461e87109ced4f575d3950a52" + }, + { + "axes": { + "ble": { + "connection_failure_inferred": false, + "evidence": "t1000-42f7df08-ble.safe.json", + "failure_stage": "current_advertisement_identity_gate", + "failure_type": "GateError", + "finished_at": "2026-10-20T04:33:52.224067+00:00", + "scan_seconds": 25, + "sessions_completed": 0, + "sessions_requested": 3, + "source_commit": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9", + "status": "failed" + }, + "rf": { + "current_source_rf_pass_claimed": false, + "retained_prior_result": { + "directions_verified": 2, + "evidence": "rf.safe.json", + "owned_channels_cleared": true, + "radio_leases_restored": true, + "source_commit": "f80751354ffc530461e87109ced4f575d3950a52", + "status": "passed" + }, + "source_commit": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9", + "status": "not_requalified" + }, + "usb": { + "core_error_flags": 0, + "evidence": "t1000-42f7df08-usb.safe.json", + "finished_at": "2026-10-20T04:32:30.130040+00:00", + "full_runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-42f7df08 (Build: 20-Oct-2026)", + "owned_contact_crud_passed": true, + "owned_contact_removed_and_reopen_verified": true, + "persistent_query_cycles": 100, + "ports_closed": 18, + "ports_opened": 18, + "radio2_passed": true, + "reopens": 10, + "source_commit": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9", + "stable_discarded_prefix_bytes": 0, + "stable_invalid_length_candidates": 0, + "status": "passed", + "transport_scope": "Stable binary sessions; ASCII setup and deliberate reboot recovery recorded separately.", + "warm_reboot_verified": true + } + }, + "key": "t1000", + "name": "Seeed T1000-E", + "normal_full_restored_and_runtime_verified": true, + "overall": "failed", + "source_commit": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9" + } + ], + "bootloader_correction": { + "application_ble_cause_proven": false, + "bootloader_install_workflow": { + "combined_dfu_transfer_returncode": 0, + "failure_stage": "post_transfer_missing_msc_disk", + "installer_returncode": 1, + "later_exact_bound_public_info_verification": "passed", + "original_failure_preserved": true, + "status": "failed" + }, + "candidate_pr": "https://github.com/mikecarper/Adafruit_nRF52_Bootloader_OTAFIX/pull/1", + "code_endf_guard_proves_filesystem_preservation": false, + "combined_serial_staging_rounded_end": "0x57000", + "combined_zip_sha256": "8db09e6b7f253b1e54aae754220f0d1053d369c07bff299a26b384233de6e234", + "defect": "T1000-E active-high P0.06 configured pull-up/active-low; RESET P0.18 treated as second user control.", + "delivery_used": "Reviewed exact-device combined SD+BL USB installer, then separate exact same Fullf807 app-only restoration.", + "existing_dfu_entry_checks_passed": 13, + "f807_restore_rounded_end": "0xB9000", + "final_head_ble_fix_demonstrated": false, + "final_normal_head_installed": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9", + "hardware_fix_claimed": false, + "host_actual_function_tests_passed": 11, + "installation_status": "public_candidate_version_verified_after_combined_transfer", + "installed_complete_image_readback_verified": false, + "installed_manifest_crc_verified": false, + "internal_extrafs_start": "0xD4000", + "legacy_uf2_scratch_overlaps_internal_extrafs": true, + "manifest_crc32": "6BA4D206", + "manifest_crc_scope": "Offline package CRC only; installed CRC was not exposed.", + "packed_test_version": "0x02040C01", + "post_install_rf_requalified": false, + "post_install_same_f807_ble": { + "ble_fix_demonstrated": false, + "discovery_seconds": 90, + "evidence": "t1000-after-button-bootloader-ble.safe.json", + "explicit_address_targeted": true, + "failure_stage": "current_advertisement_identity_gate", + "failure_type": "GateError", + "finished_at": "2026-10-20T04:29:48.854863+00:00", + "sessions_completed": 0, + "status": "failed" + }, + "post_install_same_f807_usb": { + "evidence": "t1000-after-button-bootloader-usb.safe.json", + "final_core_error_flags": 0, + "finished_at": "2026-10-20T04:27:56.032934+00:00", + "full_100_cycle_10_reopen_campaign_repeated": false, + "full_runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-f8075135 (Build: 20-Oct-2026)", + "persistent_query_cycles": 15, + "ports_closed": 5, + "ports_opened": 5, + "reopens": 2, + "same_public_identity_as_before": true, + "stable_discarded_prefix_bytes": 0, + "stable_invalid_length_candidates": 0, + "status": "passed" + }, + "public_info": { + "board_id": "nRF52840-T1000-E-v1", + "exact_image_version_verified": true, + "info_sha256": "de7c21cbd600b54e9fed7ed483cfe38fba36206814487c2ac73ddeed81d08753", + "model": "Seeed T1000-E for Meshtastic", + "reader": "identity-bound read-only public FAT16 INFO_UF2", + "version": "TEST_0x02040C01" + }, + "released_version_claimed": false, + "remote_ble_only_bootloader_entry_planned": false, + "required_cross_builds_passed": [ + "t1000_e", + "heltec_t096", + "heltec_t114" + ], + "separate_same_f807_app_restore_workflow": { + "adapter_returncode": 0, + "fresh_runtime_verified_separately": true, + "programming_returncode": 0, + "status": "passed" + }, + "source_commit": "c0c421184a3cf1ca66b40b055101f20b8c587e26", + "upstream_correction_url": "https://github.com/meshtastic/Adafruit_nRF52_Bootloader_OTAFIX/commit/0f415c3ee26816ad52a7587b3d6cdd30547987ec" + }, + "campaign_local_date": "2026-10-19", + "carried_forward_failures": [ + { + "ble": "not_qualified", + "key": "xiao_nrf", + "name": "Seeed XIAO nRF52", + "new_pass_claimed": false, + "reason": "Prior normal USB/runtime failure retained; no new passing recovery in this follow-up.", + "rf": "not_qualified", + "status": "failed" + } + ], + "diagnostics": { + "bluez_unpaired_name_cache": { + "ble_pass_claimed": false, + "bond_info_file_present": false, + "duplicate_address_proven": false, + "limit": "Cached name can affect name filtering without current scan-response evidence; current RF payload and USB-bound GATT identity remain distinct.", + "normal_full_version_and_configured_name_verified_over_usb": true, + "root_cause_proven": false, + "stale_name": "T1000-BLE-PROBE" + }, + "minimal_lfrc_probe": { + "clock": "LFRC", + "crystal_defect_proven": false, + "diagnostic_only": true, + "evidence": "lfrc-probe/artifact.json", + "full_acceptance": false, + "production_clock_change_justified": false, + "sdk_rc_config": { + "accuracy": 0, + "rc_ctiv": 16, + "rc_temp_ctiv": 2, + "source": 0 + }, + "zip_sha256": "b5bf563e72608f637694a65a3efdfc61dfdf4b3d9dcf47285bd3cb153a116eb6" + }, + "official_upstream_reference": { + "app_base": "0x27000", + "application_only": true, + "bootloader_and_softdevice_independently_varied": false, + "bounded_pi_target_advertisement_found": false, + "counts_as_full_qualification": false, + "evidence": "upstream-reference/artifact.json", + "normal_full_f807_restored_afterward": true, + "phone_observation_qualified": false, + "release": "meshcore-dev/MeshCore companion-v1.18.0", + "softdevice_fwid": "0x0123", + "source_url": "https://github.com/meshcore-dev/MeshCore/releases/tag/companion-v1.18.0", + "zip_sha256": "79e53c2ce13521ccda5db3621a68f79728d2f241c3a8345e4107b7ae6b5a374d", + "zip_uf2_application_bytes_identical": true + }, + "softdevice_readback": { + "exact_package_bytes_match_reported_by_coordinator": true, + "expected_binary_sha256": "fbd42f29af8f95309e7aaef9f60994e4749526c3e0c08cb30a8bf44bbda78663", + "family": "S140", + "fwid": "0x0123", + "manufacturer_package_has_identical_softdevice": true, + "readback_crc32": "733639BD", + "rf_operation_proven_by_image_crc": false, + "version": "7.3.0" + }, + "t1000_later_address_targeted_pi_followup": { + "bounded_observation_seconds": 90, + "evidence": "t1000-pi-followup.safe.json", + "finished_at": "2026-10-20T04:21:28.920775+00:00", + "normal_firmware_qualified_by_this_followup": false, + "sessions_completed": 0, + "status": "failed", + "usb_bluetooth_enabled": true, + "usb_core_error_flags": 0, + "usb_stealth_off": true, + "usb_uptime_seconds": 1266 + } + }, + "evidence": { + "bootloader_host_test_source": { + "kind": "source", + "sha256": "15c3858b45f58dba68b06bc5fe44de9d517d943a31e9a9d80cc02276e2bcabdb", + "source_commit": "c0c421184a3cf1ca66b40b055101f20b8c587e26" + }, + "build-t096-final.log": { + "kind": "cross_build_and_package_log", + "sha256": "dc88bf27ed50f6e594687d6543f0e2721295e7484c89fdd6a2f9dbb26130940a" + }, + "build-t1000-final.log": { + "kind": "cross_build_and_package_log", + "sha256": "3ca818fad79107234f4de72ab8e1302528e33b5262b11b2dd1737e60eeeab8d6" + }, + "build-t114-final.log": { + "kind": "cross_build_and_package_log", + "sha256": "8ca9432ff8b8eab043aff83b49705bc05f61db4e6fb73e1e79eb728dc79c04e4" + }, + "candidate-public-info.safe.json": { + "kind": "sanitized_post_bootloader_evidence", + "sha256": "45720bfb7125a41de4577751778f44d3cb17cba629660fdfa837595b710469f3" + }, + "lfrc-probe/artifact.json": { + "kind": "diagnostic_artifact_provenance", + "sha256": "168db359b82d62a82ae66b278175fc9477a844fa0f3eeea3c4321ac8da48a067" + }, + "rak-ble.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "8afe8acf3ff97238b428115e140f0d2ea4c51c86cb9df319f62406b83edc7beb" + }, + "rak-usb.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "4423a497f9efb6f7db577a0454e28083103c3552cdadd721db6f1b33fd0b7436" + }, + "rf.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "8c7a50bfd5916e02f6384ad449351e1a72d40c46aac8b4c9b97f2f19f75ba161" + }, + "t1000-42f7df08-address-ble.safe.json": { + "kind": "sanitized_current_head_qualification_summary", + "sha256": "5f79f2c78b02db08c9b33d9cfca7fd93300d3b68dc24d02c2bda023c5db54b5b" + }, + "t1000-42f7df08-ble.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "5046e90293d797097b8598023c3f2a154674b52c0a5259f0cbea18c0ba627b59" + }, + "t1000-42f7df08-usb.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "d6bf10ff6fb4a54d38f40c601cf5b682c360a0372de8900ef356937ffda5be59" + }, + "t1000-after-button-bootloader-ble.safe.json": { + "kind": "sanitized_post_bootloader_evidence", + "sha256": "dc290023671b164a1a82a1c63c89a5058a17e58e6e2d77d243120e0fab5e7392" + }, + "t1000-after-button-bootloader-usb.safe.json": { + "kind": "sanitized_post_bootloader_evidence", + "sha256": "8e74de0e231a2996c650f93d5d309feda24d56b416f10277c311234196582f8a" + }, + "t1000-ble.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "128cabd382c517e750a5b125397539d09613bdb530378fdb5748013e3c243df3" + }, + "t1000-pi-followup.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "3d8d8c9cf9f40d2dee1a7a45a10348254ccab3fa60518509062c02ada72090b0" + }, + "t1000-usb.safe.json": { + "kind": "sanitized_qualification_summary", + "sha256": "0811e3bdee08a4004ecf9f64a07ebb3a52faa44c60ad4632f8d21d35b5e1dab6" + }, + "upstream-reference/artifact.json": { + "kind": "diagnostic_artifact_provenance", + "sha256": "23120c40b9a53cdcf0ce2f04fa5e6354e1f0110d7b91b83681e147b493929763" + } + }, + "final_normal_head": { + "application_zip_sha256": "7fac141e40183ada315f70b296583eaf854fd819c76fbd896a1f0f2e4a405e5b", + "ble_evidence": "t1000-42f7df08-ble.safe.json", + "ble_qualification_status": "failed", + "ble_sessions_completed": 0, + "explicit_address_followup": { + "discovery_seconds": 90, + "evidence": "t1000-42f7df08-address-ble.safe.json", + "physical_battery_test_confirmed": false, + "sessions_completed": 0, + "status": "failed" + }, + "installation_status": "installed_successfully", + "post_corrected_bootloader": true, + "rf_qualification_status": "not_requalified", + "source_commit": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9", + "usb_evidence": "t1000-42f7df08-usb.safe.json", + "usb_qualification_status": "passed" + }, + "generated_at": "2026-10-20T04:31:16.913541+00:00", + "measured_source_commits": { + "rak": "f80751354ffc530461e87109ced4f575d3950a52", + "t1000": "42f7df082fc4c7362ecd5c18c8644ab25b51b9e9" + }, + "overall": "failed_incomplete", + "prior_f807_selected_board_results": [ + { + "axes": { + "ble": { + "all_sessions_disconnected": true, + "evidence": "rak-ble.safe.json", + "finished_at": "2026-10-20T03:57:37.611821+00:00", + "full_version_matches": true, + "hold_seconds_requested": 30.0, + "nus_services_verified": true, + "sessions_completed": 3, + "sessions_requested": 3, + "status": "passed", + "uptime_monotonic": true, + "usb_public_identity_matches": true + }, + "rf": { + "directions_verified": 2, + "evidence": "rf.safe.json", + "exact_dev_datagrams": true, + "owned_channels_cleared": true, + "peer": "t1000", + "radio_leases_restored": true, + "scope": "Zero-hop DATA_TYPE_DEV datagrams; not text, range or RF calibration.", + "status": "passed" + }, + "usb": { + "core_error_flags": 0, + "evidence": "rak-usb.safe.json", + "finished_at": "2026-10-20T03:50:24.438315+00:00", + "full_runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-f8075135 (Build: 20-Oct-2026)", + "owned_contact_crud_passed": true, + "owned_contact_removed_and_reopen_verified": true, + "persistent_query_cycles": 100, + "ports_closed": 18, + "ports_opened": 18, + "radio2_passed": true, + "reopens": 10, + "stable_discarded_prefix_bytes": 0, + "stable_invalid_length_candidates": 0, + "status": "passed", + "transport_scope": "Stable binary sessions; ASCII setup and deliberate reboot recovery recorded separately.", + "warm_reboot_verified": true + } + }, + "key": "rak", + "name": "RAK 4631", + "normal_full_restored_and_runtime_verified": true, + "overall": "passed", + "source_commit": "f80751354ffc530461e87109ced4f575d3950a52" + }, + { + "axes": { + "ble": { + "connection_failure_inferred": false, + "evidence": "t1000-ble.safe.json", + "failure_stage": "current_advertisement_identity_gate", + "failure_type": "GateError", + "finished_at": "2026-10-20T03:53:17.589165+00:00", + "hold_seconds_requested": 30.0, + "sessions_completed": 0, + "sessions_requested": 3, + "status": "failed" + }, + "rf": { + "directions_verified": 2, + "evidence": "rf.safe.json", + "exact_dev_datagrams": true, + "owned_channels_cleared": true, + "peer": "rak", + "radio_leases_restored": true, + "scope": "Zero-hop DATA_TYPE_DEV datagrams; not text, range or RF calibration.", + "status": "passed" + }, + "usb": { + "core_error_flags": 0, + "evidence": "t1000-usb.safe.json", + "finished_at": "2026-10-20T03:49:08.548576+00:00", + "full_runtime_version": "v1.18.0.1-halo-keymind-cascade-dev-f8075135 (Build: 20-Oct-2026)", + "owned_contact_crud_passed": true, + "owned_contact_removed_and_reopen_verified": true, + "persistent_query_cycles": 100, + "ports_closed": 18, + "ports_opened": 18, + "radio2_passed": true, + "reopens": 10, + "stable_discarded_prefix_bytes": 0, + "stable_invalid_length_candidates": 0, + "status": "passed", + "transport_scope": "Stable binary sessions; ASCII setup and deliberate reboot recovery recorded separately.", + "warm_reboot_verified": true + } + }, + "key": "t1000", + "name": "Seeed T1000-E", + "normal_full_restored_and_runtime_verified": true, + "overall": "failed", + "source_commit": "f80751354ffc530461e87109ced4f575d3950a52" + } + ], + "privacy": { + "bluetooth_addresses_included": false, + "passkeys_included": false, + "raw_contact_or_channel_records_included": false, + "raw_private_keys_included": false, + "usb_serials_included": false + }, + "remaining_work": [ + "T1000 normal BLE qualification remains failed.", + "Physical battery-only restart/observation and cold-boot testing remain pending; USB-powered long scans do not qualify them.", + "XIAO nRF52 normal runtime recovery remains failed.", + "RF at42f7df08, phone interoperability, full feature and13-radio fleet qualification are not established." + ], + "report_status": "failed_incomplete", + "schema_version": 1, + "scope": { + "all_three_axes_passed": 1, + "cold_boot_tested": false, + "fleet_13_qualified": false, + "fleet_inventory_refreshed": false, + "independent_observer_acceptance_complete": false, + "phone_interoperability_qualified": false, + "physical_battery_only_ble_tested": false, + "repeaters_qualified": false, + "required_axis_failed": 1, + "selected_companions_requalified": 2 + }, + "updated_at": "2026-10-20T04:35:34.121146+00:00" +} diff --git a/docs/test-results/companion_qualification_followup_2026-10-19.md b/docs/test-results/companion_qualification_followup_2026-10-19.md index 6ec835055..f02d12bd5 100644 --- a/docs/test-results/companion_qualification_followup_2026-10-19.md +++ b/docs/test-results/companion_qualification_followup_2026-10-19.md @@ -55,3 +55,5 @@ Original histories remain in [the earlier campaign report](hardware_validation_m [Machine-readable results](companion_qualification_followup_2026-10-19.safe.json) contain source-bound board records and SHA-256 evidence digests. The unit-test workflow passed all 12 jobs for source `51538f03`: [GitHub run](https://github.com/mikecarper/MeshCore/actions/runs/39350014767). + +Later selected-board evidence, the T1000 bootloader button correction and the final Full Companion USB/BLE results are recorded in [the diagnosis follow-up](companion_qualification_f807_followup_2026-10-19.md). The T1000 BLE and XIAO nRF52 failures remain open.