Vendor RatEye into monorepo and update name-scan marker - #2
Conversation
Bring RatEye v4.0.1 sources under RatEye/ and wire the app via ProjectReference so scan/marker changes land with the app. Align RatStash and System.Drawing.Common with the app major versions, disable package publish on the vendored project, and document the layout.
Convert provided WebP (28x28) to PNG for System.Drawing, embed it in RatEye resources, set MarkerItemScale to 16/28, and ship a Data copy.
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR forks RatScanner as the "TarkovTracker Edition," removing the legacy application and rebuilding it as a new App project targeting .NET 10, alongside an in-repo vendored RatEye scan engine, restructured integrations (TarkovDev, TarkovTracker, display detection), a Blazor UI, presentation layer, expanded tooling/CI/documentation, and a new xUnit test suite. Estimated code review effort: 5 (Critical) | ~180 minutes ChangesRatScanner TarkovTracker Edition rewrite
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub. |
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
This comment was marked as resolved.
This comment was marked as resolved.
Production reliability - Do not terminate the process for missing/corrupt maps.json or failed remote resource downloads; Logger.LogError exits, so use LogWarning. - Keep icon scans alive when Data/icons is absent by degrading to empty matches instead of throwing from EnsureStaticIconsLoaded. - Prevent offering pre-release GitHub updates to stable installs. - Null-coalesce ItemIconScan.IconPath; tolerate missing screens during full-screen name scan; use a seed placeholder when ItemQueue is empty. - Use LazyThreadSafetyMode.ExecutionAndPublication for TarkovDevAPI request deduplication. Dead code and asset cleanup These were confirmed unreferenced at runtime (call-site + history audit): - Remove unused Discord OAuth stack (AuthService, OAuth2) and legacy api.ratscanner.com ApiManager resource client, kept only for abandoned patronage/updater flows after GitHub-update migration. - Drop OAuthRefreshToken config, Paths.Updater, unused Patreon/Discord SVG constants, and unused DeepCloner/upgrade-assistant packages. - Delete orphaned WPF assets left after 2021 UI rewrite: iconMods.png (old HasMods badge) and settings.png (old settings button), now replaced by MudBlazor Material icons. - Delete unused Data/icon_search.png duplicate; RatEye embeds the name- scan magnifier as the sole marker source. - Delete unused bender fonts (theme uses Segoe UI; fonts were already excluded from publish). - Delete dead ASP.NET Error.cshtml stubs, WindowsServices click-through helper, empty CSS stubs, and unused Resource model. Why - Reliability fixes prevent non-fatal data/network issues from becoming full app exits, and stop accidental beta auto-updates. - Cleanup reduces maintenance cost and repo bulk without changing product behavior: removed paths had zero live consumers since the WPF to Blazor shell migration and GitHub-based updates. Verified: dotnet test RatScanner.sln (71 passed).
Day-to-day coding should use Debug + dotnet watch, not a full single-file publish. This makes that path one command and documents it clearly. Added - dev.bat / scripts/dev.ps1: ensure Data, restore, then `dotnet watch --non-interactive --no-hot-reload run` (restart-on-save; WPF/WebView2 hot reload is not reliable) - scripts/Expand-Zip.ps1: Expand-Archive -> ZipFile -> python so setup/publish work when PowerShell Archive fails Hardened - setup-data.ps1: skip if Data already valid, -Force re-download, curl fallback, nested archive layout handling - publish.bat: shared zip helper, error checks, Data validation, overwriteable zip; tip to use dev.bat for iteration - RatScanner.csproj: exclude Data/** from DefaultItemExcludes and mark Content Watch=false so ~4k icons do not flood the watcher while still copying Data into bin/publish - BlazorUI dispose: null-safe WebView dispose for clean restarts Docs - README + AGENTS: local workflow, dev vs publish, hot-reload note
Delete leftover watch-verify/watch-test stdout/stderr captures from local tooling checks and keep them out of git status going forward.
Rename project folders so the monorepo no longer looks like nested product repos at the root. Assemblies and C# namespaces are unchanged (RatScanner app, RatEye engine) to avoid a huge API churn. Layout - RatScanner/ -> src/App/ - RatEye/ -> src/ScanEngine/ - RatScanner.Tests/ -> tests/RatScanner.Tests/ Wiring - RatScanner.sln project paths - ProjectReference paths (App -> ScanEngine, Tests -> App) - publish.bat, CI workflow, setup-data/dev/bench scripts - gitignore Data path: src/App/Data Docs - README + AGENTS: new layout, Data path, local commands - ScanEngine/VENDOR.md: provenance + explicit license note (upstream RatEye still has no LICENSE file) Local Data remains gitignored under src/App/Data.
All actionable findings in this superseded bot review have been addressed or triaged; all review threads are resolved and current local/CI validation is green.
|
Addressed the latest CodeRabbit finding in |
Addressed in e64e7cf with an explicit restoreAttempted assertion; focused and full test suites pass, and the review thread is resolved.
…ant scanner status section The IconScan and OpenInteractableOverlay hotkeys were constructed with three positional arguments, which C# resolved to the 3-param ActiveHotkey constructor (Hotkey, handler, bool suppressHotkey) instead of the 5-param one (Hotkey, handler, bool enabled, bool suppressHotkey, Func? canHandle). IconScan.Enable (true) was silently passed as suppressHotkey, so the low-level mouse/keyboard hook swallowed LBUTTONUP and Shift KEYUP events via return 1 instead of calling CallNextHookEx. The game never saw the button/key release, leaving both Shift and Left Click logically stuck (Alt+Tab cycled backwards, drag selection never ended). Fix: pass enabled/suppressHotkey explicitly by name so overload resolution selects the 5-param constructor. SuppressHotkey is now always false for scan hotkeys, so hook events pass through to the OS. Also removes the redundant "Scanner status" section from the scanning settings page — the toolbar already shows scanner status via the ScannerStatus component in the top-right of the app. Removes the ScanningStatusSection and ScanningStatusDescription i18n keys from all seven locales. Adds debug logging through the mouse/keyboard hook -> ActiveHotkey -> HotkeyManager -> RatScannerMain scan pipeline to aid future diagnosis. Adds .html/.js to the dev.ps1 file watcher so wwwroot edits trigger rebuilds.
Collapse the two identical fire-and-forget ActivateTrackerModeAsync + ContinueWith(OnlyOnFaulted) blocks (PvP source and team visibility changes) into a single RefreshTrackerInBackground(failureMessage) helper. Behavior is unchanged and the race/generation safety comment is preserved.
This comment was marked as resolved.
This comment was marked as resolved.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (10)
scripts/dev.ps1 (4)
41-47: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winReject non-positive debounce values.
-Debounce 0removes the quiet period, while negative values also bypass the-lt $Debouncecheck at Line [241]. Validate the parameter as a positive integer.Proposed fix
- [int]$Debounce = 15, + [ValidateRange(1, 2147483647)] + [int]$Debounce = 15,🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/dev.ps1` around lines 41 - 47, Update the parameter validation in scripts/dev.ps1 for the Debounce parameter to reject zero and negative values, requiring a positive integer while preserving the existing default and NoDebounce behavior.
101-105: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winAdd a UTF-8 BOM or use ASCII-only text.
PSScriptAnalyzer flags this file as missing a BOM while it contains Unicode punctuation. Since
dev.batinvokes Windows PowerShell, save the script as UTF-8 with BOM to avoid garbled output.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/dev.ps1` around lines 101 - 105, Update scripts/dev.ps1 encoding to UTF-8 with a BOM, preserving the existing Unicode punctuation and script behavior so Windows PowerShell invoked by dev.bat displays output correctly.Source: Linters/SAST tools
175-183: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winHandle FileSystemWatcher errors and dropped events.
FileSystemWatcherraisesErrorwhen monitoring fails or its buffer overflows; overflowed events are lost. Without recovery, the app can remain stale until another filesystem event arrives. (learn.microsoft.com)Register an
Errorhandler that marks the state dirty and triggers a rebuild or watcher recreation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/dev.ps1` around lines 175 - 183, Register an Error event handler alongside the existing Changed, Created, Deleted, and Renamed subscriptions for the FileSystemWatcher created in the watcher setup. Ensure the handler marks the synchronization state dirty and triggers the existing rebuild or watcher-recreation flow so monitoring recovers after failures or buffer overflows.Source: MCP tools
190-196: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winWait for the old process to exit before rebuilding
Stop-AppProcessignores theWaitForExit(5000)result, so a failed kill or a slow shutdown can still let the rebuild path launch a second app instance. Check the return value and stop the restart flow if the process is still running.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@scripts/dev.ps1` around lines 190 - 196, Update Stop-AppProcess to check the result of WaitForExit(5000) after taskkill; if the process remains running, signal failure and prevent the rebuild/restart flow from launching another app instance, while preserving the existing behavior for processes that exit successfully.Source: MCP tools
src/App/Pages/App/Settings/SettingsTracking.razor (4)
91-115: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winPrevent switching PvP credential sources during validation.
The source radio remains editable while an Org or IO test is running. A user can start an Org test, switch to IO, and start an IO test; both workflows may then persist tokens and update
PvpSource, with completion order deciding which credential becomes active. Disable source changes while either workflow is testing and defensively guard both connect methods.As per coding guidelines, meaningful App Razor defects should be fixed, validated, and covered with focused regression tests.
Also applies to: 326-331, 339-343, 454-458
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/Pages/App/Settings/SettingsTracking.razor` around lines 91 - 115, Prevent PvP source changes while either Org or IO validation is active by disabling the MudRadioGroup around _pvpDraftSource and enforcing the same guard in both connect methods referenced by the affected ranges. Ensure guarded methods return without testing, persisting tokens, or updating PvpSource when validation is already running, and add focused regression coverage for the concurrent-switch scenario.Source: Coding guidelines
424-445: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winReactivate the tracker after Org-to-IO fallback.
After switching
PvpSourceto IO,IsIoCredential(mode)becomestrue, so the condition at Line [444] skipsActivateTrackerModeAsync. An active PvP session can therefore continue using the removed Org token while the UI reports IO as the active credential.Suggested adjustment
- if (RatConfig.GameMode == mode && !IsIoCredential(mode)) + if (RatConfig.GameMode == mode) await RatScannerMain.Instance.ActivateTrackerModeAsync(mode);Then synchronize
_ioStateor_orgState[mode]from the post-activation database state.As per coding guidelines, meaningful App Razor defects should be fixed, validated, and covered with focused regression tests.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/Pages/App/Settings/SettingsTracking.razor` around lines 424 - 445, Update the Org-to-IO fallback flow around SetTarkovTrackerPvpSourceAsync so an already-active tracker is reactivated after switching credentials, rather than relying on the IsIoCredential(mode) guard to skip activation. Ensure the activation uses the post-switch database state and synchronize the corresponding _ioState or _orgState[mode] afterward; add focused regression coverage for this fallback path.Source: Coding guidelines
375-385: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftMake credential and source updates atomic on failure.
The connect paths ignore the result of token rollback when source persistence fails. The removal paths delete the token first, then return without restoring it if source normalization fails, leaving configuration and UI state inconsistent. Use a transactional/compensating workflow, inspect rollback failures, and avoid rewriting
PvpSourcewhen it already has the desired value.As per coding guidelines, meaningful App Razor defects should be fixed, validated, and covered with focused regression tests.
Also applies to: 435-439, 490-500, 549-564
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/Pages/App/Settings/SettingsTracking.razor` around lines 375 - 385, Make the credential connect and removal flows in SettingsTracking transactional: inspect the result of SetTarkovTrackerOrgTokenAsync rollback and preserve the prior token/source when source normalization or persistence fails. In the affected source-update paths, only call SetTarkovTrackerPvpSourceAsync when PvpSource differs from the desired value, and keep UI/error state consistent for rollback failures. Add focused regression tests covering connect and removal failures, including unsuccessful compensating updates.Source: Coding guidelines
702-711: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy liftAvoid disposing the validation CTS from
Dispose()while a connect task may still be running.
ConnectOrgAsync/ConnectIoAsyncreadvalidation.Tokenafter awaits, so component teardown can cancel/dispose the same source before those continuations finish and hitObjectDisposedException. Cancel here, but let the in-flight async owner dispose it after completion or coordinate shutdown first.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/Pages/App/Settings/SettingsTracking.razor` around lines 702 - 711, Update Dispose so it cancels, but does not dispose, the validation CancellationTokenSource instances in _orgValidation and _ioValidation while ConnectOrgAsync or ConnectIoAsync may still be running. Ensure each in-flight async owner disposes its own source after completion, or coordinate teardown so disposal occurs only after those continuations finish.Source: Coding guidelines
src/App/ActiveHotkey.cs (1)
26-102: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAmbiguous constructor overloads are the root cause of the stuck-hotkey bug HotkeyManager.cs works around.
HotkeyManager.csneeds an 8-line comment (lines 54-60) to explain why callers must use named arguments, because two overloads here differ only by which positionalboolslot they bind (suppressHotkeyvsenabled) — exactly the ambiguity that previously caused stuck LBUTTONUP/Shift-KEYUP events. Fixing call sites with named args mitigates today's usage but leaves the trap in place for any future constructor call.Consider replacing the overload set with distinctly-named static factory methods (e.g.
ActiveHotkey.Create(...),ActiveHotkey.CreateWithHandling(...)) or makingenabled/suppressHotkey/canHandlemandatory named-only parameters so a positional-argument mismatch fails to compile rather than silently binding to the wrong flag.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/ActiveHotkey.cs` around lines 26 - 102, Replace the ambiguous ActiveHotkey constructor overloads with distinct factory methods or an API requiring enabled, suppressHotkey, and canHandle to be explicitly named, so positional booleans cannot silently bind to the wrong option. Preserve the existing initialization behavior and handler-registration flow across all constructor variants, including the overloads taking Hotkey and keyboard/mouse lists.src/App/UserActivityHelper.cs (1)
382-427: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winDebug instrumentation now runs unconditionally on the global, OS-wide input-hook thread.
KeyboardHookProc/MouseHookProcareWH_KEYBOARD_LL/WH_MOUSE_LLcallbacks that fire for input in every application on the system, and each subscribedActiveHotkey.OnKeyUp/IsPressedruns synchronously inside that same callback before anyTask.Runoffload. The new logging in this PR (string interpolation plus aGetInvocationList()allocation) executes as an eagerly-evaluated call argument on every qualifying system-wide event, regardless of whetherRatConfig.LogDebugis actually enabled — e.g. every keystroke release or mouse click anywhere on the OS now pays this cost. Low-level hooks are expected to return quickly to avoid Windows-enforced callback timeouts; sustained per-event overhead here risks the exact input-lag/stuck-key class of bug this PR is trying to fix.
src/App/UserActivityHelper.cs#L382-L427: gate theMouseHookProcdebug logging (and theGetInvocationList().Lengthallocation) behind an earlyif (!Config.LogDebug)-style check, or drop it, so the cost isn't paid on every system-wide mouse event.src/App/UserActivityHelper.cs#L291-L299: same treatment for theKeyboardHookProcmodifier-key logging, which currently fires on every Shift/Ctrl/Alt press/release anywhere on the OS.src/App/ActiveHotkey.cs#L120-L196: gate or remove the per-eventLogger.LogDebugcalls inOnKeyUp/IsPressed(including the per-key-in-loop logging), since these run once perActiveHotkeyinstance for every matching system-wide event, compounding the hook-level overhead above.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App/UserActivityHelper.cs` around lines 382 - 427, Gate or remove the per-event debug instrumentation on the low-level hook paths: in src/App/UserActivityHelper.cs lines 382-427, guard MouseHookProc logging and GetInvocationList allocation with Config.LogDebug; apply the same treatment to modifier logging in KeyboardHookProc at lines 291-299. In src/App/ActiveHotkey.cs lines 120-196, gate or remove per-event Logger.LogDebug calls in OnKeyUp and IsPressed, including per-key loop logging, while preserving event handling behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@scripts/dev.ps1`:
- Around line 41-47: Update the parameter validation in scripts/dev.ps1 for the
Debounce parameter to reject zero and negative values, requiring a positive
integer while preserving the existing default and NoDebounce behavior.
- Around line 101-105: Update scripts/dev.ps1 encoding to UTF-8 with a BOM,
preserving the existing Unicode punctuation and script behavior so Windows
PowerShell invoked by dev.bat displays output correctly.
- Around line 175-183: Register an Error event handler alongside the existing
Changed, Created, Deleted, and Renamed subscriptions for the FileSystemWatcher
created in the watcher setup. Ensure the handler marks the synchronization state
dirty and triggers the existing rebuild or watcher-recreation flow so monitoring
recovers after failures or buffer overflows.
- Around line 190-196: Update Stop-AppProcess to check the result of
WaitForExit(5000) after taskkill; if the process remains running, signal failure
and prevent the rebuild/restart flow from launching another app instance, while
preserving the existing behavior for processes that exit successfully.
In `@src/App/ActiveHotkey.cs`:
- Around line 26-102: Replace the ambiguous ActiveHotkey constructor overloads
with distinct factory methods or an API requiring enabled, suppressHotkey, and
canHandle to be explicitly named, so positional booleans cannot silently bind to
the wrong option. Preserve the existing initialization behavior and
handler-registration flow across all constructor variants, including the
overloads taking Hotkey and keyboard/mouse lists.
In `@src/App/Pages/App/Settings/SettingsTracking.razor`:
- Around line 91-115: Prevent PvP source changes while either Org or IO
validation is active by disabling the MudRadioGroup around _pvpDraftSource and
enforcing the same guard in both connect methods referenced by the affected
ranges. Ensure guarded methods return without testing, persisting tokens, or
updating PvpSource when validation is already running, and add focused
regression coverage for the concurrent-switch scenario.
- Around line 424-445: Update the Org-to-IO fallback flow around
SetTarkovTrackerPvpSourceAsync so an already-active tracker is reactivated after
switching credentials, rather than relying on the IsIoCredential(mode) guard to
skip activation. Ensure the activation uses the post-switch database state and
synchronize the corresponding _ioState or _orgState[mode] afterward; add focused
regression coverage for this fallback path.
- Around line 375-385: Make the credential connect and removal flows in
SettingsTracking transactional: inspect the result of
SetTarkovTrackerOrgTokenAsync rollback and preserve the prior token/source when
source normalization or persistence fails. In the affected source-update paths,
only call SetTarkovTrackerPvpSourceAsync when PvpSource differs from the desired
value, and keep UI/error state consistent for rollback failures. Add focused
regression tests covering connect and removal failures, including unsuccessful
compensating updates.
- Around line 702-711: Update Dispose so it cancels, but does not dispose, the
validation CancellationTokenSource instances in _orgValidation and _ioValidation
while ConnectOrgAsync or ConnectIoAsync may still be running. Ensure each
in-flight async owner disposes its own source after completion, or coordinate
teardown so disposal occurs only after those continuations finish.
In `@src/App/UserActivityHelper.cs`:
- Around line 382-427: Gate or remove the per-event debug instrumentation on the
low-level hook paths: in src/App/UserActivityHelper.cs lines 382-427, guard
MouseHookProc logging and GetInvocationList allocation with Config.LogDebug;
apply the same treatment to modifier logging in KeyboardHookProc at lines
291-299. In src/App/ActiveHotkey.cs lines 120-196, gate or remove per-event
Logger.LogDebug calls in OnKeyUp and IsPressed, including per-key loop logging,
while preserving event handling behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 56135fc7-053b-4834-a0ed-a126ea1f1122
📒 Files selected for processing (16)
scripts/dev.ps1src/App/ActiveHotkey.cssrc/App/Components/ChangeConnectionDialog.razorsrc/App/HotkeyManager.cssrc/App/Pages/App/Settings/SettingsScanning.razorsrc/App/Pages/App/Settings/SettingsTracking.razorsrc/App/RatScannerMain.cssrc/App/UserActivityHelper.cssrc/App/ViewModel/SettingsVM.cssrc/App/i18n/en.jsonsrc/App/i18n/es.jsonsrc/App/i18n/fr.jsonsrc/App/i18n/pl.jsonsrc/App/i18n/pt.jsonsrc/App/i18n/ru.jsonsrc/App/i18n/zh.json
💤 Files with no reviewable changes (1)
- src/App/Pages/App/Settings/SettingsScanning.razor
Add a `deploy` boolean input to the Build workflow's workflow_dispatch so a release can be cut from the GitHub Actions "Run workflow" button. The release job now runs on either a v* tag push or a manual deploy, resolves the version from src/App/RatScanner.csproj <Version>, refuses to overwrite an existing tag/release on manual deploys, auto-creates the tag, and publishes the GitHub release directly as Latest (draft: false, prerelease: false, make_latest: true). Publishing as a non-prerelease Latest release is required for the in-app updater, which reads /releases/latest (drafts and pre-releases are hidden there). Bump product version to 4.0.0-beta and update release docs to match.
User description
Summary
RatEye/and switch RatScanner from the NuGet package to an in-repoProjectReference, so scan/marker/OCR changes ship with the app in one PR.RatStash6.0.0,System.Drawing.Common8.0.7), disable NuGet packaging on the vendored project, and document the layout inRatEye/VENDOR.mdandAGENTS.md.RatScanner/Data/icon_search.pngoverride) and setMarkerItemScaleto16/28.Test plan
dotnet restore RatScanner.slndotnet build RatScanner.sln(Debug) — 0 errorsdotnet build RatScanner.sln -c Release— 0 errorsCodeAnt-AI Description
Ship RatEye with the app and update scan detection to the new marker
What Changed
Impact
✅ Fewer broken scans after UI changes✅ More reliable name and item detection✅ Cleaner marker matching on current inspection windows💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.