Skip to content

Maintenance 9.x to master - #2674

Merged
sensei-hacker merged 26 commits into
masterfrom
maintenance-9.x
Jul 8, 2026
Merged

Maintenance 9.x to master#2674
sensei-hacker merged 26 commits into
masterfrom
maintenance-9.x

Conversation

@sensei-hacker

Copy link
Copy Markdown
Member

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.

MartinovEm and others added 26 commits May 24, 2026 00:27
…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.
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-code-review

Copy link
Copy Markdown
Contributor

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Branch Targeting Suggestion

You've targeted the master branch with this PR. Please consider if a version branch might be more appropriate:

  • maintenance-9.x - If your change is backward-compatible and won't create compatibility issues between INAV firmware and Configurator 9.x versions. This will allow your PR to be included in the next 9.x release.

  • maintenance-10.x - If your change introduces compatibility requirements between firmware and configurator that would break 9.x compatibility. This is for PRs which will be included in INAV 10.x

If master is the correct target for this change because it should never be included in any release, no action is needed.


This is an automated suggestion to help route contributions to the appropriate branch.

@sonarqubecloud

sonarqubecloud Bot commented Jul 8, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
9.1% Duplication on New Code (required ≤ 3%)
C Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Configurator test build ready — commit 3d1b07a

Download build artifacts for PR #2674

Available platforms (scroll to the Artifacts section at the bottom of the run page):

  • Windows x64 (ZIP, MSI) and x32 (ZIP, MSI)
  • macOS arm64 (ZIP, DMG) and x64 (ZIP, DMG)
  • Linux x64 (DEB, RPM, ZIP) and aarch64 (DEB, RPM, ZIP)

A GitHub login is required to download artifacts. Build is for testing only.

@sensei-hacker
sensei-hacker merged commit f680269 into master Jul 8, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants