Record updated V4 build and native console qualification

This commit is contained in:
mikecarper committed 2026-10-06 00:06:30 -07:00
1 parent ebf2f0823e
commit 3a7d273d49
4 files changed
+208 -11

No files matched your search

+6 -2
View File
@@ -139,8 +139,12 @@ off, and 600 seconds open with USB logging. See the [V4 native console
qualification](../test-results/hardware_validation_heltec_v4_native_console_2026-10-06.md)
for deadlines, host preparation and retained failed attempts. USB remained
attached, so these checks do not measure CPU sleep or button wake. The subsequent
V4 button-wake correction and its software validation are separate; physical
button wake was not tested here.
`ebf2f082` V4 button-wake profile correction passed host tests and linked-image
checks, followed by another unchanged native GUI fresh-flash connection and
180-second open/closed console checks with power saving on and USB logging.
Original settings, identity and ACL response were restored. Physical button
wake, CPU sleep and current draw were not tested here; the new source's GitHub
unit workflow remains in progress.
Build qualification does not establish physical compatibility on every board.
Hardware CDC has finite buffers, and closing a Linux TTY does not necessarily
@@ -98,5 +98,7 @@ deadline, and measured fresh-flash and power-saving console idle results. The
older source and boundaries above remain historical evidence. Neither report
qualifies every host OS, physical USB adapter, cold power cycle, ESP32 board,
firmware profile, or radio traffic load. USB-attached console checks do not
establish CPU sleep, measured current or button wake; the subsequent V4
button-wake correction needs separate qualification.
establish CPU sleep, measured current or button wake. The subsequent V4
button-wake profile correction passed host/build validation and another native
GUI fresh-flash plus 180-second open/closed console check, as recorded in that
linked report; physical button wake remains untested.
@@ -10,6 +10,11 @@ original settings and closed their streams. Final operator readback and owned
browser/host-service cleanup also passed. Release 1.17.1.9 remains held and
unpublished.
The subsequent button-profile correction at `ebf2f082` passed host/build checks
and another native fresh-flash GUI connection with 180-second open/closed
console intervals. That updated-source checkpoint is recorded separately below;
it does not extend the older source's 600-second measurements to the new image.
These results extend the [earlier startup investigation](hardware_validation_esp32_web_console_startup_2026-10-05.md)
to the current normal Full image and native hardware CDC. They are physical
console stability checks, not a measurement of sleep current, radio traffic
@@ -22,7 +27,7 @@ The requested target was `heltec_v4_repeater`, Full profile. Its resolved
update identity. Runtime readback had to match the complete version
`v1.17.1.9-halo-keymind-cascade-dev-c88885a3 (Build: 06-Oct-2026)`.
The source includes the OTA upload correction in `d2983762` and WiFi ownership
correction in `95913c53`. The GitHub unit workflow for the current source passed;
correction in `95913c53`. The GitHub unit workflow for `c88885a3` passed;
this does not replace the physical checks below or the final release matrix.
| Artifact | Bytes | SHA-256 |
@@ -139,10 +144,9 @@ The USB cable remained attached throughout these trials. The native-host sleep
guard keeps CPU command service available while the USB host is connected,
including when its serial port is closed. Power saving on is therefore not
proof of CPU light-sleep entry, measured current, or physical button wake.
At this source, V4 lacks the momentary-button wake profile flag. The later
profile correction is outside this image and needs separate software/build
and console validation. No physical button access is available in this setup,
so physical button wake remains unqualified.
At this source, V4 lacks the momentary-button wake profile flag. Its subsequent
software/build and console validation is recorded below. No physical button
access is available in this setup, so physical button wake remains unqualified.
These checks qualify this historical `c88885a3` Full application, native Pi Chromium setup,
protected active-slot application flash, and measured intervals. They do not
@@ -151,3 +155,55 @@ heavy logging volume, measured power consumption, or RF traffic load. GPIO/reset
behavior outside the unchanged stock flasher's reset sequence was not separately
qualified. The release remains unpublished; the final same-source all-board
build and release packaging are separate gates.
## Updated button-profile checkpoint: `ebf2f082`
Source `ebf2f0823ef8413987d31ccb2d044a2090e88469` enables the existing
momentary-button wake flag in the shared V4 and V4-R8 profiles. Seven ESP32
USB/sleep tests and two display-power tests passed. Configuration assertions
cover 71 firmware profiles, excluding four deliberately standalone partition
migrators. Six host cases execute actual board sleep/USB methods, real family
button constructors and implementation, role polling guards, UITask button
fragments and DisplayPowerPolicy. Three controls must fail if the profile flag,
gesture polling guard or display wake is removed. These are synthetic GPIO/sleep
results, not a physical button press.
| Updated artifact | Bytes | SHA-256 |
| --- | ---: | --- |
| Full application | 2,097,560 | `aebfd06f5e35ad636f52f329bd051deb9dfeb633361dc77396c0ee9d4456e7c1` |
| Merged image | 2,163,096 | `08750bd38f9f71ea37b8739a8b3c26befa91829df6d5754ad9cffbf61a796a90` |
| Matching ELF | - | `c2ec6d54c32c4b3cb331f9216607480e851933cf4865cc399be9409fdf587467` |
The normal Full target, table, two slots, capabilities and RAM gates passed,
with the same 20,880-byte required-heap margin. Linked instructions now contain
the GPIO0 pending-press check, active-low wake and button cleanup, plus the
gesture polling guard, while retaining radio IRQ14 wake. The HWCDC PHY handoff
and startup hook remain linked; no TinyUSB USBCDC class is linked. This confirms
the profile flag reached the application rather than only its source recipe.
The same pinned stock native GUI/flasher and unchanged 5,000 ms deadline were
used. Before this flash, host-only TTY preparation again changed VMIN/VTIME from
0/0 to 1/0 with zero explicit modem-signal calls. The app-only ROM preflight
again selected the protected active slot. Exact runtime readback was
`v1.17.1.9-halo-keymind-cascade-dev-ebf2f082 (Build: 06-Oct-2026)`.
| Updated-source check | Result |
| --- | --- |
| First stock DOM GUI Connect after fresh flash | PASS. Plain time clock-set acknowledgement in 2,036.4 ms; full GUI bootstrap, exact version and original reference checks passed. No extra reset, replug, settle or retry. |
| Power saving on, USB logging, console open | PASS. 180.061 seconds with zero native writes or keepalives; uptime 17 -> 198 seconds. First post-idle core reply took 39.7 ms; full DOM reconnect time acknowledgement took 45.0 ms. |
| Power saving on, USB logging, console closed | PASS. 180.100 seconds with streams closed and zero writes; uptime 205 -> 391 seconds. First DOM reconnect time response took 26.7 ms and was the recognized clock-cannot-go-backwards rejection, not an acknowledgement. Full GUI bootstrap passed. |
| Cleanup and operator readback | PASS. Original power saving off, USB logging, all 15 checked preferences, public identity and ACL response were restored. Streams closed; independent operator readback again matched the exact updated version and original digests at uptime 448 seconds. |
There were no native command errors or GUI modem-signal calls. Radio remained
in active RX with zero physical RX errors; flags changed 0 -> 8, received
packets stayed zero and one packet was sent. This remains a receive-silence
watchdog warning, not a CPU crash or loaded-radio qualification. The owned
browser and tunnel were closed, the serial port had no owner, original host
service states were restored, and no Pi network configuration changed.
The compact safe audit records this as `updated_source_checkpoint`, separate
from the older 600-second trials. The updated source qualifies these
180-second console intervals; physical button wake, CPU sleep and current draw
remain untested with USB attached. GitHub unit run `37426156162` for this new
source is still in progress at this checkpoint. Release 1.17.1.9 remains held
and unpublished.
@@ -90,7 +90,7 @@
"Failed flasher preparations remain failed and did not exercise the GUI five-second command timer.",
"Merged artifact is audited; actual browser tests flashed only the protected active application slot.",
"No measured sleep current, factory erase/cold-cycle, heavy logging or RF traffic-soak claim.",
"USB-attached CPU sleep guard means no physical light-sleep/button-wake or current-draw qualification; V4 momentary-button wake profile correction needs new-source qualification.",
"USB-attached CPU sleep guard means no physical light-sleep/button-wake or current-draw qualification; Updated profile host/build and native USB console checks are recorded separately; physical button wake remains untested.",
"Original host service states restored; MQTT packet delivery was not measured."
],
"qualified_trials": [
@@ -235,6 +235,141 @@
"current_draw_measured": false,
"physical_button_wake_tested": false,
"c888_V4_momentary_button_wake_profile_flag_present": false,
"new_button_fix_qualification": "pending"
"new_button_fix_qualification": "Host/build and updated-source native USB console180s qualified; physical button/CPU sleep/current untested."
},
"updated_source_checkpoint": {
"source_commit": "ebf2f0823ef8413987d31ccb2d044a2090e88469",
"firmware_version": "v1.17.1.9-halo-keymind-cascade-dev-ebf2f082 (Build: 06-Oct-2026)",
"status": "host_build_and_native_console_180s_passed_operator_restored",
"build": {
"target": "heltec_v4_repeater",
"profile": "full",
"platformio_feature_base": "heltec_v4_repeater_observer_mqtt",
"app_sha256": "aebfd06f5e35ad636f52f329bd051deb9dfeb633361dc77396c0ee9d4456e7c1",
"app_bytes": 2097560,
"merged_sha256": "08750bd38f9f71ea37b8739a8b3c26befa91829df6d5754ad9cffbf61a796a90",
"merged_bytes": 2163096,
"elf_sha256": "c2ec6d54c32c4b3cb331f9216607480e851933cf4865cc399be9409fdf587467",
"partition_table_4096_sha256": "9af3af2b74e944337ba85f2b0027ee80df160579a1ab746ba0f95853f618cd60",
"slot_bytes": 6553600,
"RAM_capability_and_file_hash_gates_passed": true,
"heap_margin_bytes": 20880,
"linked_HWCDC_PHY_handoff_and_startup_hook": true,
"linked_GPIO0_active_low_button_wake_and_pending_press_cleanup": true,
"linked_radio_IRQ14_wake_retained": true,
"linked_role_gesture_polling_guard": true,
"independent_build_audit_sha256": "826089a49402a4cc23f648f4d642c7547f33f05520333877373a2a134af0c2d4"
},
"host_validation": {
"ESP32_USB_sleep_tests_passed": 7,
"display_power_tests_passed": 2,
"profile_flag_assertions": 71,
"standalone_migrator_exclusions": 4,
"actual_family_role_CXX_cases": 6,
"required_failure_controls": 3,
"scope": "Real Board.sleep/USB methods, MomentaryButton, role polling and UITask button fragments with DisplayPowerPolicy; simulated GPIO/sleep."
},
"native_browser": {
"version": "154.0.8037.92",
"same_pinned_stock_GUI_and_flasher": true,
"native_command_deadline_ms": 5000,
"extra_post_flash_reset_replug_settle_retry": false,
"report_sha256": "ba7d9f415a1cd27fd5fe4070d47306f2cd67e4ce08baee684f07c83eb364cef3",
"independent_report_review_sha256": "be8eed53f8ec012f4c217c52e55fbdab3b29aad972fda933c4fb18fbe75c5f43",
"first_plain_time_ms": 2036.3999999985099,
"first_plain_time_clock_set_acknowledged": true,
"power_saving": "on",
"logging_output": "usb",
"quiet_intervals": [
{
"kind": "open",
"requested_seconds": 180,
"actual_seconds": 180.0605071799946,
"native_writes_during_idle": 0,
"uptime_before": 17,
"serial_open": true,
"uptime_after": 198,
"uptime_delta": 181,
"uptime_continuity_verified": true,
"ok": true
},
{
"kind": "closed",
"requested_seconds": 180,
"actual_seconds": 180.10022866498912,
"native_writes_during_idle": 0,
"uptime_before": 205,
"serial_open": false,
"uptime_after": 391,
"uptime_delta": 186,
"uptime_continuity_verified": true,
"ok": true
}
],
"first_post_open_idle_core_ms": 39.70000000111759,
"post_open_idle_DOM_clock_reply_ms": 45,
"post_open_idle_DOM_clock_set_acknowledged": true,
"post_closed_idle_DOM_clock_reply_ms": 26.700000001117587,
"post_closed_idle_DOM_clock_set_acknowledged": false,
"post_closed_idle_response": "recognized framed clock-cannot-go-backwards rejection",
"full_GUI_rereads_passed": true,
"native_command_errors": 0,
"GUI_modem_signal_calls": 0,
"original_reference_and_final_restoration_verified": true,
"checked_preferences_count": 15,
"original_power_saving": "off",
"original_logging_output": "usb",
"streams_closed": true
},
"host_preparation": {
"tty_before": {
"VMIN": 0,
"VTIME": 0
},
"tty_after": {
"VMIN": 1,
"VTIME": 0
},
"explicit_modem_signal_calls": 0,
"safe_start_report_sha256": "7129af121900b598d02ec3e33702bb87dec988ae3a8d3f2eaf9550cb73ddd3d3"
},
"radio": {
"initial_core_error_flags": 0,
"final_core_error_flags": 8,
"all_observations_active_RX": true,
"physical_rx_errors_max": 0,
"final_recv": 0,
"final_sent": 1,
"scope": "Known CAD/receive-silence flags are warnings; no zero-error RF or traffic-soak claim."
},
"operator_cleanup": {
"ok": true,
"exact_runtime_version_and_reference_digests_verified": true,
"uptime_seconds": 448,
"core_error_flags": 8,
"serial_closed_and_no_owner": true,
"owned_browser_profile_closed": true,
"owned_tunnel_closed": "parent independently verified",
"original_services_restored": {
"ModemManager": "active",
"mctomqtt": "active",
"mesh-logger": "inactive"
},
"network_configuration_changed": false,
"operator_report_sha256": "c79f570fa7d5b4599d4538527aa9edefeb8d5173a47dc5689c44cfdb632d33fd",
"services_report_sha256": "bc98de9e3753d736de35a45d4cfda1c7380a7c2eff66891c3a3f4444e1d74425",
"browser_cleanup_report_sha256": "c848c50e4ae1ab73fee92f5381dc60e0b9cd23b04a672ad9a5df60dd0fb3b3dc",
"independent_cleanup_audit_sha256": "f96f14695beafba898cb2361b41540614026bda3316764a0421a93158de3ce38"
},
"CI": {
"run_id": 37426156162,
"status": "in_progress_at_checkpoint"
},
"limitations": [
"Updated-source180s intervals are separate from historical c888600s trials.",
"USB cable remained attached; no physical button wake, measured CPU sleep or current draw.",
"Host services restored; no MQTT delivery or loaded-RF qualification.",
"Release held and unpublished."
]
}
}