Skip to content

Jonny extreme signal v1#4852

Open
Kloudz805 wants to merge 17 commits intobetaflight:masterfrom
Kloudz805:jonny-extreme-signal-v1
Open

Jonny extreme signal v1#4852
Kloudz805 wants to merge 17 commits intobetaflight:masterfrom
Kloudz805:jonny-extreme-signal-v1

Conversation

@Kloudz805
Copy link

@Kloudz805 Kloudz805 commented Feb 5, 2026

Important considerations when opening a pull request:

  1. Make sure you do not make the changes you want to open a pull request for on the master branch of your fork, or open the pull request from the master branch of your fork. Some of our integrations will fail if you do this, resulting in your pull request not being accepted. If this is your first pull request, it is probably a good idea to first read up on how opening pull requests work (https://opensource.com/article/19/7/create-pull-request-github is a good introduction);

  2. Pull requests will only be accepted if they are opened against the master branch of our repository. Pull requests opened against other branches without prior consent from the maintainers will be closed;

  3. Please follow the coding style guidelines: https://betaflight.com/docs/development/CodingStyle

  4. Keep your pull requests as small and concise as possible. One pull request should only ever add / update one feature. If the change that you are proposing has a wider scope, consider splitting it over multiple pull requests. In particular, pull requests that combine changes to features and one or more new targets are not acceptable.

  5. Ideally, a pull request should contain only one commit, with a descriptive message. If your changes use more than one commit, rebase / squash them into one commit before submitting a pull request. If you need to amend your pull request, make sure that the additional commit has a descriptive message, or - even better - use git commit --amend to amend your original commit.

  6. All pull requests are reviewed. Be ready to receive constructive criticism, and to learn and improve your coding style. Also, be ready to clarify anything that isn't already sufficiently explained in the code and text of the pull request, and to defend your ideas.

  7. We use continuous integration (CI) with GitHub Actions to build all targets and run the test suite for every pull request. Pull requests that fail any of the builds or fail tests will most likely not be reviewed before they are fixed to build successfully and pass the tests. In order to get a quick idea if there are things that need fixing before opening a pull request or pushing an update into an existing pull request, run yarn lint to verify formatting and yarn run vitest run to execute the test suite. Note: This is not an exhaustive test, so even if this passes the CI build might still fail.

  8. If your pull request is a fix for one or more issues that are open in GitHub, add a comment to your pull request, and add the issue numbers of the issues that are fixed in the form Fixes #<issue number>. This will cause the issues to be closed when the pull request is merged;

  9. Remove this Text :).

Summary by CodeRabbit

  • New Features

    • Introduced an extreme signal preset with optimized thresholds, high-priority telemetry, active interference mitigation, and low-resource logging
    • Added support for website-based preset repositories to load presets from external sources
  • Documentation

    • Added an AI quick-start guide covering project structure, conventions, build/dev commands, integrations, and safe-change procedures
  • Chores

    • Enhanced translations upload workflow with an additional automation step

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 5, 2026

Walkthrough

Adds a Copilot integration developer guide, appends a Crowdin step to the translations workflow, introduces a new signal preset module for high-interference scenarios, and adds a PresetsWebsiteRepo utility that normalizes repository URLs.

Changes

Cohort / File(s) Summary
Documentation
.github/copilot-instructions.md
New agent quick-start guide describing project structure, key entry points, build/dev commands, conventions (Vue 3 + legacy jQuery), integrations (Capacitor, i18next), and common development tasks.
Build & CI/CD
.github/workflows/translations-upload.yml
Appended a crowdin-action step using crowdin/github-action@v1.15.2 to the translations upload workflow.
Signal Configuration
src/jonny_extreme_signal.js
New module exporting default extremeSignalPreset object with properties: linkQualityThreshold: 85, telemetryPriority: "HIGH", interferenceMitigation: "ACTIVE", lowResourceLogging: true.
Repository Utilities
web_configurator_crossconfigurator2.js
New PresetsWebsiteRepo class extending PresetsRepoIndexed; constructor normalizes input url (trim + ensure trailing slash) and calls super(urlRaw, urlViewOnline, official, name).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

RN: BUILD SYSTEM

Suggested reviewers

  • haslinghuis
  • nerdCopter
  • SupaflyFPV
🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is entirely the default template boilerplate without any custom information about the specific changes, features, or issues being addressed by this pull request. Replace the template text with a meaningful description of what this PR implements, why it's needed, and reference any related issues using 'Fixes #'.
Title check ❓ Inconclusive The title 'Jonny extreme signal v1' is vague and does not clearly convey what the pull request actually changes. It appears to reference a feature name but lacks descriptive context about the specific changes being made. Use a more descriptive title that explains the primary change, such as 'Add extreme signal preset module and cross-configurator support' or 'Implement Jonny extreme signal configuration feature'.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Fix all issues with AI agents
In @.github/copilot-instructions.md:
- Line 10: Update the file path list on line 10 to include the src/ prefix so
the entries read `src/js/fc.js`, `src/js/msp.js`, `src/js/port_handler.js`, and
`src/js/data_storage.js` instead of `js/fc.js`, `js/msp.js`,
`js/port_handler.js`, `js/data_storage.js`; modify the line where those module
paths are enumerated to replace each `js/...` occurrence with `src/js/...`.

In @.github/workflows/translations-upload.yml:
- Around line 35-37: The new GitHub Actions step named "crowdin-action" is
incorrectly indented inside the previous step's with: block and thus breaks YAML
parsing; move the entire step out to the same step-level indentation as other
steps (column 5), and either remove it if it duplicates the existing "Upload
messages file" step or properly configure it: use the same action version as the
other Crowdin usage (switch uses: crowdin/github-action@v1.15.2 to `@v2` for
consistency), and add the required credentials blocks (env and with) matching
the repository's Crowdin upload step so it has api_key/project/branch settings.
Ensure the final step name "crowdin-action" appears at the top-level steps array
and is not nested under another step's with: block.

In `@src/jonny_extreme_signal.js`:
- Around line 1-14: The defined constant extremeSignalPreset is unused and
doesn't follow the existing preset pattern; either register it with the
PresetsRepoIndexed system (create a preset entry that loads remotely or add
extremeSignalPreset to the repository loader so PresetsRepoIndexed can return
it, update the loader/registry to reference the preset ID and ensure consumers
import via PresetsRepoIndexed instead of direct object import) or remove the
file and any references; update any consumers that expect a preset to use
PresetsRepoIndexed.get(...) (or the repo's add/register API) so the preset
follows the remote-repository pattern used by other presets.

In `@web_configurator_crossconfigurator2.js`:
- Around line 3-16: Fix the inconsistent indentation and remove tabs in the
PresetsWebsiteRepo class: reformat the class body to use 4-space indentation and
the constructor body to use 8-space indentation (no mixed tabs/spaces) so ESLint
passes; inside the constructor (PresetsWebsiteRepo.constructor) normalize url
trimming logic to use a single local variable (e.g., correctUrl) and either pass
correctUrl directly to super instead of creating duplicate urlRaw and
urlViewOnline variables, or keep them but declare/indent them consistently
before calling super(correctUrl, correctUrl, official, name).
- Line 1: This file web_configurator_crossconfigurator2.js is a misplaced
duplicate that imports PresetsRepoIndexed from an unresolved relative path;
remove this duplicate file (or move it into the PresetsRepoIndexed module
folder) so only the canonical PresetsRepoIndexed implementation remains, and if
you move it update the import to point to the actual module file name
(PresetsRepoIndexed.js) and fix any relative path accordingly.
🧹 Nitpick comments (1)
.github/copilot-instructions.md (1)

33-33: Minor: Add hyphen for compound adjective.

✏️ Grammar fix
-  - Some native-like features and discovery use `multicast-dns` and other Node/browser libs — check `package.json` for network/device related dependencies.
+  - Some native-like features and discovery use `multicast-dns` and other Node/browser libs — check `package.json` for network/device-related dependencies.

- Key entry points and places to read first:
- `index.html` — web app HTML shell.
- `src/components/init.js` — bootstraps i18n and the Vue app; shows global model exposure (`window.vm`) and reactivity patterns.
- `js/fc.js`, `js/msp.js`, `js/port_handler.js`, `js/data_storage.js` — core domain modules (flight-controller model, MSP protocol, port handling, persistent storage).
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -name "fc.js" -o -name "msp.js" -o -name "port_handler.js" -o -name "data_storage.js"

Repository: betaflight/betaflight-configurator

Length of output: 158


Add src/ prefix to file paths.

The referenced core modules are located at src/js/fc.js, src/js/msp.js, src/js/port_handler.js, and src/js/data_storage.js, not js/fc.js etc. Update the paths on line 10 to include the src/ directory prefix.

🤖 Prompt for AI Agents
In @.github/copilot-instructions.md at line 10, Update the file path list on
line 10 to include the src/ prefix so the entries read `src/js/fc.js`,
`src/js/msp.js`, `src/js/port_handler.js`, and `src/js/data_storage.js` instead
of `js/fc.js`, `js/msp.js`, `js/port_handler.js`, `js/data_storage.js`; modify
the line where those module paths are enumerated to replace each `js/...`
occurrence with `src/js/...`.

Comment on lines +35 to +37
- name: crowdin-action
uses: crowdin/github-action@v1.15.2

No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

cd .github/workflows && cat -n translations-upload.yml

Repository: betaflight/betaflight-configurator

Length of output: 1205


Critical: YAML syntax error breaks the workflow.

The new step is indented at 14 spaces inside the with: block of the previous step instead of at the proper 4-space step level, causing a YAML parsing error. Additionally:

  1. The step lacks required configuration (env, with blocks for credentials)
  2. Version inconsistency: line 22 uses @v2 while this uses @v1.15.2
  3. Duplicate Crowdin action with unclear purpose—the "Upload messages file" step (line 22) already handles source uploads

The step should be at column 5 (same level as other steps) and include proper configuration, or removed if redundant.

🧰 Tools
🪛 actionlint (1.7.10)

[error] 35-35: could not parse as YAML: mapping values are not allowed in this context

(syntax-check)

🪛 YAMLlint (1.38.0)

[error] 35-35: syntax error: mapping values are not allowed here

(syntax)

🤖 Prompt for AI Agents
In @.github/workflows/translations-upload.yml around lines 35 - 37, The new
GitHub Actions step named "crowdin-action" is incorrectly indented inside the
previous step's with: block and thus breaks YAML parsing; move the entire step
out to the same step-level indentation as other steps (column 5), and either
remove it if it duplicates the existing "Upload messages file" step or properly
configure it: use the same action version as the other Crowdin usage (switch
uses: crowdin/github-action@v1.15.2 to `@v2` for consistency), and add the
required credentials blocks (env and with) matching the repository's Crowdin
upload step so it has api_key/project/branch settings. Ensure the final step
name "crowdin-action" appears at the top-level steps array and is not nested
under another step's with: block.

Comment on lines 1 to 14
/**
* AUTHOR: Jonny Alva
* PROJECT: FPV Field Operations - Extreme Environment Preset
* MISSION: Optimization for high-interference and low-resource logging.
*/

const extremeSignalPreset = {
linkQualityThreshold: 85,
telemetryPriority: "HIGH",
interferenceMitigation: "ACTIVE",
lowResourceLogging: true
};

export default extremeSignalPreset;
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for imports or references to this new module
echo "=== Searching for jonny_extreme_signal imports ==="
rg -n "jonny_extreme_signal|extremeSignalPreset" --type js --type ts 2>/dev/null || echo "No results found"

# Also check for imports using patterns
echo -e "\n=== Checking for any imports of the file ==="
rg -n "from.*jonny_extreme_signal|import.*jonny_extreme_signal" 2>/dev/null || echo "No imports found"

# Check if the other mentioned file exists and its content
echo -e "\n=== Checking for web_configurator_crossconfigurator2.js ==="
fd -n "web_configurator_crossconfigurator2.js" 2>/dev/null || echo "File not found"

# Check existing preset patterns in the codebase
echo -e "\n=== Looking for existing preset definitions ==="
rg -n "Preset|preset" --type js --type ts -l 2>/dev/null | head -20 || echo "No preset files found"

# Look at the structure of src directory
echo -e "\n=== Files in src directory ==="
fd -type f -e js -e ts . src 2>/dev/null | head -30 || echo "src directory not found or empty"

Repository: betaflight/betaflight-configurator

Length of output: 1240


🏁 Script executed:

#!/bin/bash
# Check how existing presets are integrated
echo "=== Examining existing preset imports in presets.js ==="
head -50 src/tabs/presets/presets.js

echo -e "\n=== Checking PresetsRepoIndexed.js structure ==="
head -80 src/tabs/presets/PresetsRepoIndexed/PresetsRepoIndexed.js

Repository: betaflight/betaflight-configurator

Length of output: 4530


This preset is unused and doesn't integrate with the existing system.

The extremeSignalPreset object is defined but never imported anywhere in the codebase. Additionally, it doesn't follow the established preset pattern—existing presets use the PresetsRepoIndexed system (with remote repository loading) rather than hardcoded configuration objects. Clarify the intended usage and either integrate it with the existing preset infrastructure or remove it.

🤖 Prompt for AI Agents
In `@src/jonny_extreme_signal.js` around lines 1 - 14, The defined constant
extremeSignalPreset is unused and doesn't follow the existing preset pattern;
either register it with the PresetsRepoIndexed system (create a preset entry
that loads remotely or add extremeSignalPreset to the repository loader so
PresetsRepoIndexed can return it, update the loader/registry to reference the
preset ID and ensure consumers import via PresetsRepoIndexed instead of direct
object import) or remove the file and any references; update any consumers that
expect a preset to use PresetsRepoIndexed.get(...) (or the repo's add/register
API) so the preset follows the remote-repository pattern used by other presets.

@@ -0,0 +1,16 @@
import PresetsRepoIndexed from "./PresetsRepoIndexed";
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# Find PresetsRepoIndexed location
fd -t f "PresetsRepoIndexed" --extension js --extension ts

# Check existing preset file locations
fd -t f -i preset --extension js

# List files at repository root to confirm location of the file in question
ls -la *.js 2>/dev/null | head -20

# Check project structure
git ls-files | grep -E "(src/|web_configurator)" | head -20

Repository: betaflight/betaflight-configurator

Length of output: 1960


🏁 Script executed:

cat -n web_configurator_crossconfigurator2.js

Repository: betaflight/betaflight-configurator

Length of output: 748


🏁 Script executed:

cat -n src/tabs/presets/PresetsRepoIndexed/PresetsWebsiteRepo.js

Repository: betaflight/betaflight-configurator

Length of output: 614


Delete this duplicate file or move it to the correct location.

This file is a duplicate of src/tabs/presets/PresetsRepoIndexed/PresetsWebsiteRepo.js placed at the repository root. The import statement ./PresetsRepoIndexed cannot resolve from the root—the actual module is at src/tabs/presets/PresetsRepoIndexed/PresetsRepoIndexed.js. Only the correctly-placed version in src/tabs/presets/PresetsRepoIndexed/ should exist; remove this misplaced copy to prevent confusion and broken imports.

🤖 Prompt for AI Agents
In `@web_configurator_crossconfigurator2.js` at line 1, This file
web_configurator_crossconfigurator2.js is a misplaced duplicate that imports
PresetsRepoIndexed from an unresolved relative path; remove this duplicate file
(or move it into the PresetsRepoIndexed module folder) so only the canonical
PresetsRepoIndexed implementation remains, and if you move it update the import
to point to the actual module file name (PresetsRepoIndexed.js) and fix any
relative path accordingly.

Comment on lines +3 to +16
export default class PresetsWebsiteRepo extends PresetsRepoIndexed {
constructor(url, official, name) {
let correctUrl = url.trim();

if (!correctUrl.endsWith("/")) {
correctUrl += "/";
}

const urlRaw = correctUrl;
const urlViewOnline = correctUrl;

super(urlRaw, urlViewOnline, official, name);
}
} No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix indentation to pass ESLint.

The file has severe inconsistent indentation (mixed tabs/spaces, incorrect nesting levels) that will fail the lint check. ESLint expects 4-space indentation for class body and 8-space for method body.

Also, urlRaw and urlViewOnline are assigned identical values—if they're always the same for this class, consider simplifying.

🔧 Proposed fix for indentation
-export default class PresetsWebsiteRepo extends PresetsRepoIndexed { 
-	       constructor(url, official, name) {
-		            let correctUrl = url.trim();
-
-                    if (!correctUrl.endsWith("/")) { 
-                    	    correctUrl += "/";
-                    }
-                    
-                    const urlRaw = correctUrl;
-                    const urlViewOnline = correctUrl;
-                    
-                    super(urlRaw, urlViewOnline, official, name);
-            }
- }
+export default class PresetsWebsiteRepo extends PresetsRepoIndexed {
+    constructor(url, official, name) {
+        let correctUrl = url.trim();
+
+        if (!correctUrl.endsWith("/")) {
+            correctUrl += "/";
+        }
+
+        super(correctUrl, correctUrl, official, name);
+    }
+}
🧰 Tools
🪛 ESLint

[error] 7-7: Expected indentation of 8 spaces but found 20.

(indent)


[error] 9-9: Expected indentation of 8 spaces but found 20.

(indent)


[error] 11-11: Expected indentation of 8 spaces but found 20.

(indent)


[error] 12-12: Expected indentation of 8 spaces but found 20.

(indent)


[error] 14-14: Expected indentation of 8 spaces but found 20.

(indent)


[error] 15-15: Expected indentation of 4 spaces but found 12.

(indent)


[error] 16-16: Expected indentation of 0 spaces but found 1.

(indent)

🤖 Prompt for AI Agents
In `@web_configurator_crossconfigurator2.js` around lines 3 - 16, Fix the
inconsistent indentation and remove tabs in the PresetsWebsiteRepo class:
reformat the class body to use 4-space indentation and the constructor body to
use 8-space indentation (no mixed tabs/spaces) so ESLint passes; inside the
constructor (PresetsWebsiteRepo.constructor) normalize url trimming logic to use
a single local variable (e.g., correctUrl) and either pass correctUrl directly
to super instead of creating duplicate urlRaw and urlViewOnline variables, or
keep them but declare/indent them consistently before calling super(correctUrl,
correctUrl, official, name).

@sonarqubecloud
Copy link

sonarqubecloud bot commented Feb 5, 2026

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

🎉 Do you want to test this code? 🎉

⚠️ CAUTION: The build may be unstable and result in corrupted configurations or data loss. Use only for testing! ⚠️

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/jonny_extreme_signal.js`:
- Around line 11-14: The four imported symbols fc, msp, portHandler, and
dataStorage in src/jonny_extreme_signal.js are unused and cause ESLint errors;
fix by either removing their import statements (delete the import lines
referencing fc, msp, portHandler, dataStorage) or, if they are needed, reference
them in this module (e.g., call a function or export them) so they are used
(ensure any added usage is meaningful and preserved by tree-shaking); update
only the import lines or add minimal usage where you intend these modules to be
used.
🧹 Nitpick comments (1)
src/jonny_extreme_signal.js (1)

1-9: Remove the duplicate header block.

The header comment is duplicated; keep a single block to avoid noise.

🧹 Suggested cleanup
 /**
  * AUTHOR: Jonny Alva
  * PROJECT: FPV Field Operations - Extreme Environment Preset
  * MISSION: Optimization for high-interference and low-resource logging.
- /**
- * AUTHOR: Jonny Alva
- * PROJECT: FPV Field Operations - Extreme Environment Preset
- * MISSION: Optimization for high-interference and low-resource logging.
- */
+ */

Comment on lines +11 to +14
import { fc } from 'src/js/fc.js';
import { msp } from 'src/js/msp.js';
import { portHandler } from 'src/js/port_handler.js';
import { dataStorage } from 'src/js/data_storage.js';
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix unused imports (ESLint errors).

All four imports are unused, which triggers the provided lint errors and can break CI. Remove them or use them in this module.

🧽 If unused, remove them
-import { fc } from 'src/js/fc.js';
-import { msp } from 'src/js/msp.js';
-import { portHandler } from 'src/js/port_handler.js';
-import { dataStorage } from 'src/js/data_storage.js';
🧰 Tools
🪛 ESLint

[error] 11-11: 'fc' is defined but never used.

(unused-imports/no-unused-imports)


[error] 12-12: 'msp' is defined but never used.

(unused-imports/no-unused-imports)


[error] 13-13: 'portHandler' is defined but never used.

(unused-imports/no-unused-imports)


[error] 14-14: 'dataStorage' is defined but never used.

(unused-imports/no-unused-imports)

🤖 Prompt for AI Agents
In `@src/jonny_extreme_signal.js` around lines 11 - 14, The four imported symbols
fc, msp, portHandler, and dataStorage in src/jonny_extreme_signal.js are unused
and cause ESLint errors; fix by either removing their import statements (delete
the import lines referencing fc, msp, portHandler, dataStorage) or, if they are
needed, reference them in this module (e.g., call a function or export them) so
they are used (ensure any added usage is meaningful and preserved by
tree-shaking); update only the import lines or add minimal usage where you
intend these modules to be used.

@haslinghuis
Copy link
Member

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.

2 participants