Skip to content

Grid Survey Pattern Generator, Quickly See Heading and RTH Icons along with new Keyboard Navigation (conflict resolution for #2593) - #2698

Open
sensei-hacker wants to merge 17 commits into
iNavFlight:maintenance-10.xfrom
sensei-hacker:merge-conflict-fix-pr2593
Open

Grid Survey Pattern Generator, Quickly See Heading and RTH Icons along with new Keyboard Navigation (conflict resolution for #2593)#2698
sensei-hacker wants to merge 17 commits into
iNavFlight:maintenance-10.xfrom
sensei-hacker:merge-conflict-fix-pr2593

Conversation

@sensei-hacker

Copy link
Copy Markdown
Member

Summary

PR #2593 (GenCodeInc's feature/grid-pattern — Grid Survey Pattern Generator, heading/RTH icons, keyboard navigation) was retargeted from maintenance-9.x to maintenance-10.x and picked up a merge conflict against the new base. Attempting to push the resolution directly to the author's fork via maintainer-edit failed (403 — the available credential doesn't cover write access to that third-party fork), so this PR carries the resolved merge from my own fork instead.

This branch is feature/grid-pattern + a merge commit resolving conflicts against maintenance-10.x. No functional changes beyond what #2593 already contained.

Conflict resolution

Two files conflicted:

  • locale/en/messages.json: maintenance-10.x had independently reformatted/expanded this file (770+ line diff: many new keys for settings search, migration preview, backup/restore, unrelated to this PR). The PR's actual change here was a clean 42-line addition (two new translation keys: confirm_delete_selected_point, and the missionGridPattern* block). Resolved by taking maintenance-10.x's version of the file and inserting only those two hunks at the same relative positions, matching maintenance-10.x's indentation.
  • tabs/mission_control.js: the PR restructured the #removePoint click handler (early-return guard, extracted prevLayerNum/attachedWaypoints, new removeAttachedWaypoints()/finalizeWaypointRemoval() helpers). Independently, maintenance-10.x had migrated dialog.confirm() calls file-wide to be awaited (part of a broader async-dialog migration — confirmed by checking other call sites in the file). Resolved by keeping the PR's restructured control flow and applying maintenance-10.x's async/await pattern to the dialog.confirm() call in that function, consistent with the rest of the file.

Testing

  • node --check tabs/mission_control.js — syntax OK.
  • locale/en/messages.json validated as well-formed JSON after resolution.
  • Diffed both resolved files against maintenance-10.x: mission_control.js shows exactly 751 insertions / 92 deletions — byte-for-byte identical to PR Grid Survey Pattern Generator, Quickly See Heading and RTH Icons along with new Keyboard Navigation #2593's own diff against the merge-base, confirming no base-branch content was dropped and no PR content was lost.
  • Diffed the three cleanly auto-merged files (images/icons/cf_icon_MP_grid_grey.svg, src/css/tabs/mission_planer.css, tabs/mission_control.html) against maintenance-10.x: also byte-for-byte identical to the PR's own diff.
  • No leftover conflict markers in any file.

Closes/supersedes #2593.

https://claude.ai/code/session_073a8e72-596e-49b0-8684-e90575ae33fe

GenCodeInc and others added 17 commits March 15, 2026 15:50
Add a lawnmower/grid survey pattern generator that allows users to
define a polygon area on the map and automatically generate survey
waypoints within it.

Features:
- Grid survey button in Action Menu with polygon drawing interaction
- Sidebar settings card with line spacing, altitude, speed, sweep angle,
  overshoot, and End with RTH checkbox
- Live auto-preview: polygon outline, dashed survey path, and numbered
  waypoint dots update as parameters change
- Lawnmower pattern algorithm with configurable sweep angle and overshoot
- RTH waypoint automatically appended when End with RTH is checked
- Waypoint count display with remaining capacity
- Ctrl+G keyboard shortcut to activate grid draw mode
- Full i18n support for all UI strings
- Arrow keys (Left/Right) navigate between waypoints with card transition
- Delete key removes selected waypoint with confirmation dialog
- Auto-select previous waypoint after deletion
- Auto-select WP1 after grid survey generation
- Show 'Add WP' tooltip with crosshair when hovering flight path lines
- Green RTH marker at last waypoint position for all missions
- Ctrl+G keyboard shortcut for grid polygon draw
- SET_HEAD waypoints show black circle with white arrow pointing in heading direction
- Heading degree label displayed below the marker
- Heading marker and RTH marker render above flight path lines (zIndex: 99)
- SET_HEAD shows black circle with white directional dot (pure geometry, no text rotation)
- RTH and heading markers aligned with WP pin center via MARKER_ICON_OFFSET_X/Y
- Both marker circles same size (radius 10)
- Offset constants adjustable: MARKER_ICON_OFFSET_Y=12, MARKER_ICON_OFFSET_X=-2
…ht#2593

# Conflicts:
#	locale/en/messages.json
#	tabs/mission_control.js
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Mission Control: grid survey generator, keyboard waypoint nav, heading/RTH markers

✨ Enhancement 🕐 40+ Minutes

Grey Divider

AI Description

• Add grid survey generator with polygon draw, live preview, and waypoint generation controls.
• Improve Mission Control usability with Ctrl+G, arrow-key navigation, Delete-to-remove, and hover
 “Add WP” tooltip.
• Render heading and RTH as dedicated overlay markers linked to the parent waypoint.
Diagram

graph TD
  U["User"] --> UI["Mission Control UI"] --> MCJS["tabs/mission_control.js"] --> OL["OpenLayers map"]
  MCJS --> GEN["Grid generator"] --> M["Mission model"]
  M --> OL
  MCJS --> I18N["locale/en/messages.json"]
  UI --> ASSETS["Icon + CSS"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Use a geometry library for sweep generation (e.g., Turf.js)
  • ➕ More robust polygon handling (holes, self-intersections, edge cases)
  • ➕ Potentially simpler code and easier long-term maintenance
  • ➖ Adds dependency weight/size
  • ➖ May require careful CRS/projection handling to match current mission units
2. Leverage OpenLayers geometry utilities more directly
  • ➕ Keeps implementation within existing mapping stack
  • ➕ Can reuse OL polygon intersection/extents utilities for correctness
  • ➖ Still requires careful numeric handling; may not significantly reduce complexity
  • ➖ Can be harder to unit test if tightly coupled to OL objects
3. Extract grid generator + keyboard handling into dedicated modules with unit tests
  • ➕ Improves testability of the waypoint algorithm and key handling
  • ➕ Reduces mission_control.js size and review surface for future changes
  • ➖ Requires additional refactor/structure work now
  • ➖ May be seen as scope increase for a feature-focused PR

Recommendation: Current approach is reasonable for an incremental feature, but reviewers should scrutinize async confirm usage and edge cases in the sweep algorithm. Notably, the Delete-key handler calls dialog.confirm() without await (dialog.confirm returns a Promise in this codebase), which would likely cause unconditional deletion; aligning it with the file’s other await dialog.confirm(...) call sites would make behavior consistent. If grid generation becomes core workflow, extracting the generator into a separate, test-covered module would be the best next step.

Files changed (5) +858 / -94

Enhancement (5) +858 / -94
cf_icon_MP_grid_grey.svgAdd grid-pattern toolbar icon asset +10/-0

Add grid-pattern toolbar icon asset

• Introduces a new SVG icon representing a grid/lawnmower survey pattern. Used for the new Mission Control grid action button.

images/icons/cf_icon_MP_grid_grey.svg

messages.jsonAdd i18n strings for grid generator and delete-selected confirm +42/-0

Add i18n strings for grid generator and delete-selected confirm

• Adds a new confirmation string for deleting the currently selected waypoint. Adds the Mission Control grid survey UI string set (title, prompts, settings labels, and capacity/error messages).

locale/en/messages.json

mission_planer.cssWire grid icon styling for Mission Control toolbar +4/-0

Wire grid icon styling for Mission Control toolbar

• Adds the '.ic_grid' background-image rule pointing to the new grid SVG icon. Enables the new grid button to display correctly in the Mission Control toolbar.

src/css/tabs/mission_planer.css

mission_control.htmlAdd grid button and Grid Survey Settings sidebar card +51/-2

Add grid button and Grid Survey Settings sidebar card

• Adds a new toolbar button for grid survey generation with i18n title and accessibility labels. Introduces a hidden settings card (spacing/altitude/speed/angle/overshoot/RTH) shown during grid generation, plus minor accessibility improvements on existing toolbar buttons.

tabs/mission_control.html

mission_control.jsImplement grid polygon draw + preview + waypoint generation; add nav/markers UX +751/-92

Implement grid polygon draw + preview + waypoint generation; add nav/markers UX

• Adds a polygon-based grid survey generator: Draw interaction, preview layer (polygon + dashed path + numbered dots), settings card wiring, and mission waypoint creation with optional final RTH. Enhances Mission Control UX with Ctrl+G, arrow-key waypoint navigation, Delete-key removal path, hover “Add WP” tooltip on flight-path lines, and heading/RTH overlay markers linked to the parent waypoint selection. Refactors waypoint removal flow into helper functions and improves interaction guards to ignore non-selectable preview layers.

tabs/mission_control.js

@sonarqubecloud

sonarqubecloud Bot commented Aug 3, 2026

Copy link
Copy Markdown

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (4) 📘 Rule violations (1) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 15 rules

Grey Divider


Action required

1. Delete confirm not awaited 🐞 Bug ≡ Correctness
Description
handleMissionControlDeleteShortcut() treats dialog.confirm() as a synchronous boolean, but
dialog.confirm() returns a Promise, so the condition is always truthy and the selected waypoint can
be deleted even if the user cancels.
Code

tabs/mission_control.js[R4557-4560]

+            e.preventDefault();
+            if (dialog.confirm(i18n.getMessage('confirm_delete_selected_point'))) {
+                $('#removePoint').trigger('click');
+            }
Evidence
dialog.confirm() returns the result of electronAPI.confirmDialog (a Promise), and mission_control.js
already awaits dialog.confirm() elsewhere; in the new Delete shortcut it is used as a boolean,
making the check always pass.

js/dialog.js[8-13]
tabs/mission_control.js[4552-4560]
tabs/mission_control.js[4715-4727]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The Delete-key shortcut uses `if (dialog.confirm(...))` even though `dialog.confirm()` returns a Promise, so cancellation is ignored and the waypoint deletion is triggered.

### Issue Context
`dialog.confirm()` is a thin wrapper over `window.electronAPI.confirmDialog(...)` and is used with `await` elsewhere in this same file.

### Fix
Resolve the Promise before acting.
- Option A (keep keydown handler synchronous):
 - Replace the `if (dialog.confirm(...))` block with `dialog.confirm(...).then(ok => { if (ok) ... })`.
- Option B: make the keydown path async end-to-end (more invasive).

### Fix Focus Areas
- tabs/mission_control.js[4552-4563]
- js/dialog.js[8-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Grid bypasses edit lock 🐞 Bug ≡ Correctness
Description
The grid generator can clear and rewrite missions via removeAllWaypoints()/mission.put() even when
disableMarkerEdit is true (multi-mission/all-missions view where editing is disabled), violating the
tab’s read-only behavior and allowing destructive edits.
Code

tabs/mission_control.js[R4446-4448]

+            // Clear existing waypoints before generating grid
+            removeAllWaypoints();
+
Evidence
disableMarkerEdit is the established edit-lock (set by setMultimissionEditControl) and is checked by
other map interactions, but the new grid generate path performs removeAllWaypoints() and inserts new
waypoints without any such check.

tabs/mission_control.js[1659-1669]
tabs/mission_control.js[2635-2637]
tabs/mission_control.js[4427-4448]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Grid generation mutates mission state (clears all waypoints and inserts new ones) without checking `disableMarkerEdit`, which is the mechanism used throughout the tab to prevent editing in read-only modes.

### Issue Context
`setMultimissionEditControl(true)` sets `disableMarkerEdit` and disables edit UI; other interactions early-return when `disableMarkerEdit` is true. The grid flow currently does not.

### Fix
Add a guard for read-only mode:
- In `startGridPolygonDraw()` and the Ctrl+G shortcut path: return early if `disableMarkerEdit`.
- In the `#gridGenerate` handler: also guard (so generation cannot happen via any path even if drawing started earlier).
Optionally show a dialog/tooltip explaining that editing is disabled.

### Fix Focus Areas
- tabs/mission_control.js[1659-1669]
- tabs/mission_control.js[4251-4263]
- tabs/mission_control.js[4427-4448]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

3. sr-only text lacks data-i18n 📘 Rule violation ✧ Quality
Description
New accessibility labels in tabs/mission_control.html add hardcoded English text without
data-i18n, so they won’t be translated by i18next. This can cause untranslated UI for screen
readers and violates the project’s i18n HTML convention.
Code

tabs/mission_control.html[R43-44]

+                            title="Search for address (Ctrl+A)"
+                            aria-label="Search for address (Ctrl+A)"><span class="sr-only">Search for address</span></a>
Evidence
PR Compliance ID 353261 requires user-visible (including screen-reader-only) HTML text to use
data-i18n keys instead of hardcoded strings. The newly-added `<span class="sr-only">Search for
address</span> and <span class="sr-only">Center map on latest GPS fix</span>` are hardcoded and
missing data-i18n.

Rule 353261: Use data-i18n attributes for all i18next-translated HTML text
tabs/mission_control.html[39-45]
tabs/mission_control.html[47-53]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
New screen-reader-only labels (and related accessible text) were added as hardcoded English strings without `data-i18n`, so they won’t be translated by i18next.

## Issue Context
In `tabs/mission_control.html`, the new `<span class="sr-only">…</span>` content for the search and center buttons is missing `data-i18n`.

## Fix Focus Areas
- tabs/mission_control.html[39-53]
- locale/en/messages.json[5379-5384]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. Escape handler leaks after draw 🐞 Bug ☼ Reliability
Description
startGridPolygonDraw() registers a keydown.gridDraw Escape handler, but the drawend callback never
unregisters it; pressing Escape after finishing the polygon draw can unexpectedly call
cancelGridDraw() and remove the preview layer while the settings card stays open.
Code

tabs/mission_control.js[R4279-4284]

+            gridDrawInteraction.on('drawend', function (evt) {
+                const polygon = evt.feature.getGeometry();
+                map.removeInteraction(gridDrawInteraction);
+                gridDrawInteraction = null;
+                hideGridBanner();
+                showGridSettingsDialog(polygon);
Evidence
The Escape handler is bound in startGridPolygonDraw(), unbound only in cancelGridDraw(), and the
drawend path does not call cancelGridDraw() or unbind the handler, leaving it active after success.

tabs/mission_control.js[4257-4308]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The Escape key handler (`keydown.gridDraw`) is installed when drawing starts, but is only removed by `cancelGridDraw()`. After a successful polygon draw (`drawend`), the handler remains active, so later Escape presses can remove the preview layer and leave the UI in an inconsistent state.

### Issue Context
`drawend` currently removes the Draw interaction and opens the settings card, but does not call `$(document).off('keydown.gridDraw')`.

### Fix
In the `drawend` handler, explicitly unregister `keydown.gridDraw` (or refactor so the handler lifecycle is always cleaned up on both cancel and success).

### Fix Focus Areas
- tabs/mission_control.js[4257-4295]
- tabs/mission_control.js[4297-4308]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Extreme-latitude grid instability 🐞 Bug ☼ Reliability
Description
createGridProjection() divides by metersPerDegLon (computed from cos(latitude)); at very high
latitudes this becomes extremely small, causing numerically unstable longitude conversions and
potentially wildly incorrect generated waypoints.
Code

tabs/mission_control.js[R152-155]

+        toGeo(point) {
+            return [
+                centroid[0] + point[0] / metersPerDegLon,
+                centroid[1] + point[1] / metersPerDegLat,
Evidence
metersPerDegLon is derived from cos(latitude) and is used as a divisor in toGeo(); near the poles
this makes the transformation ill-conditioned, which can yield incorrect coordinates.

tabs/mission_control.js[136-158]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Grid generation uses a simple degrees→meters approximation where `metersPerDegLon = 111320 * cos(lat)` and later divides by it. As latitude approaches ±90°, `cos(lat)` approaches 0, making conversions unstable.

### Issue Context
This affects both preview and generated mission waypoints because `generateGridWaypoints()` relies on `createGridProjection().toGeo()`.

### Fix
Add an explicit safeguard:
- Clamp `metersPerDegLon` to a reasonable minimum epsilon, OR
- Reject/disable grid generation when `|cosLat|` is below a threshold and inform the user.

### Fix Focus Areas
- tabs/mission_control.js[136-158]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

To customize comments, go to the Qodo configuration screen, or learn more in the docs.

Qodo Logo

Comment thread tabs/mission_control.html
Comment on lines +43 to +44
title="Search for address (Ctrl+A)"
aria-label="Search for address (Ctrl+A)"><span class="sr-only">Search for address</span></a>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. sr-only text lacks data-i18n 📘 Rule violation ✧ Quality

New accessibility labels in tabs/mission_control.html add hardcoded English text without
data-i18n, so they won’t be translated by i18next. This can cause untranslated UI for screen
readers and violates the project’s i18n HTML convention.
Agent Prompt
## Issue description
New screen-reader-only labels (and related accessible text) were added as hardcoded English strings without `data-i18n`, so they won’t be translated by i18next.

## Issue Context
In `tabs/mission_control.html`, the new `<span class="sr-only">…</span>` content for the search and center buttons is missing `data-i18n`.

## Fix Focus Areas
- tabs/mission_control.html[39-53]
- locale/en/messages.json[5379-5384]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread tabs/mission_control.js
Comment on lines +4557 to +4560
e.preventDefault();
if (dialog.confirm(i18n.getMessage('confirm_delete_selected_point'))) {
$('#removePoint').trigger('click');
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Delete confirm not awaited 🐞 Bug ≡ Correctness

handleMissionControlDeleteShortcut() treats dialog.confirm() as a synchronous boolean, but
dialog.confirm() returns a Promise, so the condition is always truthy and the selected waypoint can
be deleted even if the user cancels.
Agent Prompt
### Issue description
The Delete-key shortcut uses `if (dialog.confirm(...))` even though `dialog.confirm()` returns a Promise, so cancellation is ignored and the waypoint deletion is triggered.

### Issue Context
`dialog.confirm()` is a thin wrapper over `window.electronAPI.confirmDialog(...)` and is used with `await` elsewhere in this same file.

### Fix
Resolve the Promise before acting.
- Option A (keep keydown handler synchronous):
  - Replace the `if (dialog.confirm(...))` block with `dialog.confirm(...).then(ok => { if (ok) ... })`.
- Option B: make the keydown path async end-to-end (more invasive).

### Fix Focus Areas
- tabs/mission_control.js[4552-4563]
- js/dialog.js[8-13]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread tabs/mission_control.js
Comment on lines +4279 to +4284
gridDrawInteraction.on('drawend', function (evt) {
const polygon = evt.feature.getGeometry();
map.removeInteraction(gridDrawInteraction);
gridDrawInteraction = null;
hideGridBanner();
showGridSettingsDialog(polygon);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

3. Escape handler leaks after draw 🐞 Bug ☼ Reliability

startGridPolygonDraw() registers a keydown.gridDraw Escape handler, but the drawend callback never
unregisters it; pressing Escape after finishing the polygon draw can unexpectedly call
cancelGridDraw() and remove the preview layer while the settings card stays open.
Agent Prompt
### Issue description
The Escape key handler (`keydown.gridDraw`) is installed when drawing starts, but is only removed by `cancelGridDraw()`. After a successful polygon draw (`drawend`), the handler remains active, so later Escape presses can remove the preview layer and leave the UI in an inconsistent state.

### Issue Context
`drawend` currently removes the Draw interaction and opens the settings card, but does not call `$(document).off('keydown.gridDraw')`.

### Fix
In the `drawend` handler, explicitly unregister `keydown.gridDraw` (or refactor so the handler lifecycle is always cleaned up on both cancel and success).

### Fix Focus Areas
- tabs/mission_control.js[4257-4295]
- tabs/mission_control.js[4297-4308]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread tabs/mission_control.js
Comment on lines +4446 to +4448
// Clear existing waypoints before generating grid
removeAllWaypoints();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

4. Grid bypasses edit lock 🐞 Bug ≡ Correctness

The grid generator can clear and rewrite missions via removeAllWaypoints()/mission.put() even when
disableMarkerEdit is true (multi-mission/all-missions view where editing is disabled), violating the
tab’s read-only behavior and allowing destructive edits.
Agent Prompt
### Issue description
Grid generation mutates mission state (clears all waypoints and inserts new ones) without checking `disableMarkerEdit`, which is the mechanism used throughout the tab to prevent editing in read-only modes.

### Issue Context
`setMultimissionEditControl(true)` sets `disableMarkerEdit` and disables edit UI; other interactions early-return when `disableMarkerEdit` is true. The grid flow currently does not.

### Fix
Add a guard for read-only mode:
- In `startGridPolygonDraw()` and the Ctrl+G shortcut path: return early if `disableMarkerEdit`.
- In the `#gridGenerate` handler: also guard (so generation cannot happen via any path even if drawing started earlier).
Optionally show a dialog/tooltip explaining that editing is disabled.

### Fix Focus Areas
- tabs/mission_control.js[1659-1669]
- tabs/mission_control.js[4251-4263]
- tabs/mission_control.js[4427-4448]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread tabs/mission_control.js
Comment on lines +152 to +155
toGeo(point) {
return [
centroid[0] + point[0] / metersPerDegLon,
centroid[1] + point[1] / metersPerDegLat,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

5. Extreme-latitude grid instability 🐞 Bug ☼ Reliability

createGridProjection() divides by metersPerDegLon (computed from cos(latitude)); at very high
latitudes this becomes extremely small, causing numerically unstable longitude conversions and
potentially wildly incorrect generated waypoints.
Agent Prompt
### Issue description
Grid generation uses a simple degrees→meters approximation where `metersPerDegLon = 111320 * cos(lat)` and later divides by it. As latitude approaches ±90°, `cos(lat)` approaches 0, making conversions unstable.

### Issue Context
This affects both preview and generated mission waypoints because `generateGridWaypoints()` relies on `createGridProjection().toGeo()`.

### Fix
Add an explicit safeguard:
- Clamp `metersPerDegLon` to a reasonable minimum epsilon, OR
- Reject/disable grid generation when `|cosLat|` is below a threshold and inform the user.

### Fix Focus Areas
- tabs/mission_control.js[136-158]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Configurator test build ready — commit e91da3d

Download build artifacts for PR #2698

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.

@GenCodeInc

Copy link
Copy Markdown

@sensei-hacker — the resolved review-follow-up changes are now in PR #2703 which is the one I can make changed in going forward.

If you want screenshots and all like before let me know

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New Feature Entirely new feature or major feature change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants