diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index a57bc1671..b87b77aaf 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -29,13 +29,18 @@ jobs: python3 -B scripts/check_nrf52_companion_reader.py .pio/build/RAK_4631_companion_radio_full/firmware.elf python3 -B scripts/check_nrf52_companion_ota_workspace.py .pio/build/RAK_4631_companion_radio_full/firmware.elf - - name: Qualify direct-OTA-only XIAO Full Companion - # This configuration has no Meshtext/Ethernet application callbacks. + - name: Qualify XIAO Full Companion with Meshtext and direct OTA run: >- bash build.sh build-firmware Xiao_nrf52_companion_radio_full --firmware-version v1.18.0.1-halo-keymind-cascade-dev --radio-preset usa-cascade-fixed --profile cascade --require-ota + - name: Qualify T1000-E Full Companion with LR1110 Meshtext + run: >- + bash build.sh build-firmware t1000e_companion_radio_full + --firmware-version v1.18.0.1-halo-keymind-cascade-dev + --radio-preset usa-cascade-fixed --profile cascade --require-ota + - name: Qualify unified T114 Full Companion with automatic screen detection run: >- bash build.sh build-firmware Heltec_t114_companion_radio_full @@ -162,6 +167,34 @@ jobs: --firmware-version v1.18.0.1-halo-keymind-cascade-dev --radio-preset usa-cascadia --profile cascade --auto + - name: Qualify Heltec V2 Full Companion with SX1276 Meshtext + run: >- + bash build.sh build-firmware Heltec_v2_companion_radio_full + --firmware-version v1.18.0.1-halo-keymind-cascade-dev + --radio-preset usa-cascade-fixed --profile cascade --require-ota + + esp32-constrained-companion-smoke: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Build Environment + uses: ./.github/actions/setup-build-environment + - name: Qualify C3 Full Companion with all transports and Meshtext + run: >- + bash build.sh build-firmware Xiao_C3_companion_radio_full + --firmware-version v1.18.0.1-halo-keymind-cascade-dev + --radio-preset usa-cascade-fixed --profile cascade --require-ota + - name: Qualify C6 Full Companion with Meshtext + run: >- + bash build.sh build-firmware Xiao_C6_companion_radio_full_ + --firmware-version v1.18.0.1-halo-keymind-cascade-dev + --radio-preset usa-cascade-fixed --profile cascade --require-ota + - name: Qualify Tracker V2 Full Companion with shared cold storage + run: >- + bash build.sh build-firmware heltec_tracker_v2_companion_radio_full_femon + --firmware-version v1.18.0.1-halo-keymind-cascade-dev + --radio-preset usa-cascade-fixed --profile cascade --require-ota + cross-platform-smoke: runs-on: ubuntu-latest steps: @@ -584,6 +617,9 @@ jobs: python3 -B test/test_identity_and_settings_recovery.py -v python3 -B test/test_contact_cache.py -v python3 -B test/test_one_key_dm_shared_queue.py -v + python3 -B test/test_one_key_dm_compact_held.py -v + python3 -B test/test_companion_shared_ota_capacity.py -v + python3 -B test/test_espnow_raw_initialization.py -v - name: Verify Ethernet RF harness framing, TX lock, isolation and safe serial ownership run: | diff --git a/docs/test-results/2026-10-23-meshtext-full-defaults.md b/docs/test-results/2026-10-23-meshtext-full-defaults.md new file mode 100644 index 000000000..68557a24e --- /dev/null +++ b/docs/test-results/2026-10-23-meshtext-full-defaults.md @@ -0,0 +1,68 @@ +# Full Companion Meshtext defaults, 2026-10-23 + +The T1000-E image originally installed on MercerWoodMesh did not expose +`get mt.status`. Its LR1110 board was outside the former default-enable gate. +Commit `127d1bec2` enables Meshtext for supported ESP32/nRF52 Full Companions, +independently of board/chip-name macros. Explicit overrides, ESP-NOW primary +exclusion and actual modem/profile validation remain in force. + +## Physical interoperability + +The T1000-E and Heltec V4.3 OLED ran Full Companion `127d1bec2`. The independent +witness was XIAO S3 WIO running official Meshtastic `2.7.26.54e0d8d`, hardware +model 81, controlled using SDK 2.7.11. Its official radio pins match the WIO +carrier. No nRF52 bootloader or SoftDevice was replaced for this campaign. + +Meshtext used US LongFast: 906.875 MHz, BW250, SF11, CR5, public AQ key, +16-symbol preamble. Both Companions retained a 917 MHz/BW62.5/SF7/CR5 primary. +No test transmissions used 910.525 MHz. Generic retries were off, MT hop limit +was 1, and the stock witness was CLIENT_MUTE with MQTT disabled. + +| Check | Independently received | +| --- | --- | +| T1000-E to V4 and stock witness | 5/5 at each receiver | +| V4 to T1000-E and stock witness | 5/5 at each receiver | +| Paced stock witness to both Companions | 3/3 at each receiver | +| Primary MeshCore, T1000-E to V4, MT still active | 3/3 | +| Primary MeshCore, V4 to T1000-E, MT still active | 3/3 | + +Each of the three paced stock messages increased V4 Meshtext RX by one and +completed TX by one with `mt.rebroadcast on`, without an originated V4 message. +T1000-E TX remained unchanged with rebroadcast off. This verifies forwarding +activity; it does not establish an isolated, exclusively one-hop route. +V4 was left with `mt.rebroadcast on`. The temporary primary test channel was +removed after its six messages. + +The initial sweep used 14-second observation windows and reported missing +messages. One appeared in the next window. Follow-up sends, paced 45 seconds +apart, reached both receivers after 9.6, 15.2 and 20.6 seconds from the local +stock queue request. Short-window misses therefore are not a reliable RF-loss +measurement and are not counted as successful deliveries. Dual-profile RX +remains time-shared; these checks do not promise lossless simultaneous reception. + +Private raw evidence and identity-bound flashing logs are retained under +`/home/mesh/hwtest/mt-longfast-20261023` and the matching Pi directory. + +## Build and memory checks + +The T1000-E, V4.3 Full and Heltec V2 Full images passed linking, executable +Meshtext capability checks and memory/flash budgets. At merged source +`170c1761d`, XIAO C3, C6, nRF52, S3 WIO, Heltec CT62 and Tracker V2 Full also +passed. Compile qualification is separate from physical board qualification. + +The first C3 build failed the unchanged runtime heap guard. Constrained Full +recipes now borrow idle queue storage for explicit OTA, retain all 224 normal +queued frames and all 15 held private messages, and store only authenticated +message fields needed for later delivery. Constant initialization also removes +unused ESP-NOW primary workspace from LoRa-only images. No feature was disabled. +Final C3 linked headroom was 146000 bytes against the existing 145952-byte +requirement, which includes a 16384-byte transient margin. + +Native coverage includes the board/include-order default matrix, linked-code +packaging and override contracts, real-crypto protocol interoperability, +224/128 queue ownership and wraparound, compact-message ACK/dedup/FIFO/retry +behavior, and ESP-NOW initialization/fragmentation under sanitizers. CI now +builds T1000-E and SX1276 Full plus constrained C3/C6/Tracker Full images. + +LLCC68 still cannot use SF11 at BW250. Its manufacturer modulation limits +exclude LongFast; enabling software cannot add that hardware mode.