Maintenance 9.x to master - #2674
Conversation
…y internals
The textComplete:show handler was using $._data(el, 'events').mouseover[0].handler
to retrieve jquery-textcomplete's mouseover handler before suppressing it. $._data
is jQuery's undocumented internal event cache — its structure is not part of the
public API and can vary between jQuery versions or fail when the handler is absent.
The Completer object is stored by the plugin via the public $textarea.data('textComplete')
API. Access the handler directly: $.proxy(completer.dropdown._onMouseover, completer.dropdown)
gives the same bound handler without relying on jQuery internals.
Also namespace the cliAutocomplete-owned mousemove/mouseover handlers so they are
distinct from textcomplete's own namespaced events and can be removed cleanly.
Five ad-hoc test_*.mjs files were accumulating in the repo root with no runner configured. Moves the transpiler's existing 28-test suite from js/transpiler/transpiler/tests/ to tests/transpiler/, adds two new ESM test files (firmware-flasher regressions, magnetometer slider logic), converts the root-level scripts to node:test format in tests/, and wires everything into `npm test` (custom CJS runner for transpiler, node --test for the ESM files).
28 nearly-identical one-shot runner shims were causing 19.3% code duplication on new code. Each test file now self-executes via `if (require.main === module)` and run_all_tests.cjs discovers *.test.cjs files directly. Also fixes two pre-existing test failures that were never surfaced (const_support destructuring API and variable_map empty-map expectations), and removes the LC-index filter from buildVariableMap() so inline let variables are preserved in the variable map alongside LC-backed ones.
- Rename sticky_scope_test.cjs → sticky_scope.test.cjs so run_all_tests discovers it (was silently dropped from the test suite by the wrong suffix) - Add self-execution block to sticky_scope.test.cjs - Fix vacuous allocatedToVars assertion: use summary.varCount which is the actual field getAllocationSummary() returns - Add comment explaining why simple_test_runner output goes to stdout - Improve codegen.js comment to explain why inlined let vars have no lcIndex
run_all_tests.cjs now scans for *.cjs files whose name contains "test" but don't end in .test.cjs. These would be silently skipped by the discovery glob. Exits with an error and a rename hint before running anything, so CI fails fast instead of silently passing with missing tests. This would have caught sticky_scope_test.cjs immediately.
…rator-root tests/ directory and wire up npm test
- header battery: voltage-only readout with fixed width so it no longer jumps sideways when the voltage changes - header dataflash: hide the 'Dataflash:' label when no flash chip is present - OSD toolbar: keep Save / Font Manager buttons right-aligned in one row - OSD element groups: lay out as balanced columns instead of unevenly packed floats, and keep each box wrapping its content
Switching tabs while a tab streamed its settings in the background could permanently stall the new tab's load (stuck on 'Waiting for data', tabs locked). - tab_switch_cleanup now also flushes the MSP queue and releases the port lock, so the previous tab's still-queued setting reads can't linger and re-reserve their (shared) MSP code in the dedup queue. - send_message no longer silently drops a request that the queue rejects (duplicate code in flight / queue locked); it retries the enqueue and finally invokes the callback instead of leaving its promise hanging.
A failed or hung connection could leave the connect button and the BLE GATT in an inconsistent state, blocking all further attempts until the configurator was restarted. - Decide connect-vs-disconnect from the real connection state instead of a toggling flag that competing async aborts (connect timeout, GATT disconnect, receive error) could desync; reset connecting state on failed open and on disconnect. - Clear leftover MSP queue/locks/callbacks at the start of every connect so a fast reconnect isn't blocked by a previous session's retries. - BLE: time out the connect chain so a hung GATT step fails cleanly, tear down a half-open GATT before retrying, and guard writes against a dropped link instead of throwing.
- BLE: send via a void wrapper delegating to an async helper (the override no longer returns a Promise where void is expected); use optional chaining for the GATT-connected checks - msp: enqueue retry via an arrow function instead of var self = this - serial_backend: use const and a positive condition for the connect state check
Add complete German locale and register 'de' in the language selector.
German (de) translation
Servo numbering in INAV starts at 1, but the Outputs tab's servo table used the 0-based loop index directly as the row label, producing "Servo 0" for the first servo. Only the display label is adjusted; the underlying 0-based indexing used for FC.SERVO_CONFIG, isServoConfigured, and writeback is unchanged.
The static title list above the servo bar charts showed 0-based numbers (15 down to 0) with tooltips capped and repeating at 'Servo - 8' through 'Servo - 1'. Renumber to 1-16 with matching 'Servo - N' tooltips, consistent with INAV's 1-based servo numbering and the motor titles above.
…bering-display Fix servo numbering display in Outputs tab
Missions with a looping JUMP made getDistance return the -1 sentinel, which zeroed the opentopodata sample count and produced a 400 response; the failed lookup then threw on a string elevation and the graph never drew. Use the geometric distance for sampling, guard the minimum sample count, and keep elevation as an array on failure. Also rebind the chart to the current canvas and destroy it on tab cleanup so re-entering the tab redraws instead of updating a detached canvas.
Fix OSD tab and connected-header UI glitches
Fix MSP connection stability: load stalls and connect/reconnect recovery
- README: stray double space, "monit" -> "prompt", "build the and start" -> "build and start", "User hardware acceleration" -> "Use hardware acceleration" - MAPPROXY: "WSM servers" -> "WMS servers" (matches the linked URL) - 3D_model_creation: lowercase "i" -> "I", "reccomend" -> "recommend", "obkect" -> "object", "Select you" -> "Select your", "ammend" -> "amend", "files was" -> "files were"
Fix OSM 403: inject Referer and User-Agent for tile requests
…fined fix(cli): get mouseover handler via textcomplete Completer, not jQuery internals
docs: add detailed MapProxy Docker setup instructions
Fix typos and grammar in README, MAPPROXY, and 3D model docs
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
Branch Targeting SuggestionYou've targeted the
If This is an automated suggestion to help route contributions to the appropriate branch. |
|
|
Configurator test build ready — commit Download build artifacts for PR #2674 Available platforms (scroll to the Artifacts section at the bottom of the run page):
|




Sync master with maintenance-9.x ahead of the INAV 9.1.0 final release. Master's pre-release build workflow only triggers on push to master/maintenance-8.x.x, so this also gets the last 18 commits (including the MSP connection-stability fix, #2656) through a real CI build for the first time.