Skip to content

Release Microbot 2.6.31: telemetry-driven stability fixes - #1941

Merged
chsami merged 120 commits into
mainfrom
claude/release-microbot-2.6.31
Oct 12, 2026
Merged

chsami merged 120 commits into
mainfrom
claude/release-microbot-2.6.31

Conversation

@chsami

@chsami chsami commented Oct 12, 2026

Copy link
Copy Markdown
Owner

Summary

Promotes development to main as 2.6.31. It is mostly stability work driven by the script error telemetry that shipped in 2.6.30.

Error telemetry fixes (the largest prod error groups on 2.6.30):

Other

Release tree

  • bb9a7b866f merges origin/development into main with no conflicts.
  • 623c09230d bumps microbot.version 2.6.30 → 2.6.31.
  • The tree equals development apart from that line. RuneLite stays on 1.13.1.

Test plan

  • :client:runUnitTests: 2283 tests, 0 failures, 2 skipped
  • All Microbot-Hub plugins plus their tests compile against this shaded jar (-PmicrobotClientPath), so Hub CI stays green once 2.6.31 is the latest client
  • Release E2E, full tier, against the shaded jar (below)
  • Windows and macOS untested

Microbot release E2E: PASS (full tier)

  • Microbot 2.6.31 (commit nogit), RuneLite 1.13.1
  • Expected version: 2.6.31
  • Started: 2026-10-12T12:25:38.308053217Z, total 4m29s
  • Result: 15 passed, 0 failed, 0 skipped, 0 not run (exit completed, code 0)
# Check Tier Status Duration Detail
1 boot Client version, core plugins, clean startup log quick PASSED 0.0s
2 login Logged in with a known player location quick PASSED 0.0s
3 state-caches Skills, items, varbits/varps and entity queryables at Lumbridge castle quick PASSED 7.9s
4 widgets Tab switching by widget click and widget text search quick PASSED 0.7s
5 walker-transport Short walk, closed door and Lumbridge castle stairs quick PASSED 42.4s
6 bank Open nearest bank, deposit and withdraw one junk item quick PASSED 3.4s
7 npc-dialogue Talk to a banker, read and pick a dialogue option, exit quick PASSED 5.1s
8 object-interaction Open and close a door, restoring its state quick PASSED 25.3s
9 agent-server Agent Server state, inventory, widgets and skills endpoints quick PASSED 0.1s
10 walker-medium Lumbridge to Varrock west bank full PASSED 2m10s
11 grand-exchange Open and close the Grand Exchange without offers full PASSED 30.8s
12 world-hop Hop to another F2P world and back full PASSED 13.6s
13 hub-plugins Plugin Hub manifest, install/start/stop/uninstall a harmless plugin full PASSED 2.7s
14 script-lifecycle Start and stop a built-in script twice without leaked threads full PASSED 6.2s
15 logout Clean logout and full-run client.log scan quick PASSED 0.6s

After merge, the Release workflow publishes microbot-2.6.31.jar, uploads it to Hetzner and updates the version on microbot.cloud. Hub release: chsami/Microbot-Hub#595.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV

chsami and others added 30 commits October 7, 2026 22:31
… first

CodeRabbit on #1901: if building the upload request throws synchronously
(e.g. a malformed -Dmicrobot.apiUrl) the drained batch was lost; requeue
it before rethrowing. Close the HTTP response before running the
rejection callback so a throwing callback cannot leak it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PKz6YjDRJdva762xPzTaia
Client.getLocalPlayer() is null on the login screen, during world hops and
while loading. getWorldLocation_Internal and getPoseAnimation dereferenced it
directly and threw NullPointerExceptions on the client thread. Guard those and
the sibling accessors that read the local player the same way, returning the
existing no-player fallback values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
new Rs2PlayerModel() wraps Client.getLocalPlayer(), which is null during
login, world hops and loading. Callers already treat null world location
and world view as no player, but the model dereferenced the null actor and
threw NPEs from inside the client-thread lambda.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… unavailable

PathMinimapOverlay passed ShortestPathPlugin.getMinimapClipArea() straight
to Graphics2D.setClip. That returns null when the minimap draw widget is
missing or hidden, which removed the clip and made OverlayRenderer's
graphics.getClip().equals(clip) throw a NullPointerException every frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rs2GameObject's WorldPoint-anchored list queries passed the anchor straight
into LocalPoint.fromWorld, which throws when the player's world location is
not yet known (login, hop, loading). findBank and the other no-anchor
overloads feed Rs2Player.getWorldLocation() into these, so they crashed the
calling script instead of finding nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t one

Rs2Antiban.actionCooldown() dereferenced playStyle unconditionally, so it
threw a NullPointerException whenever usePlayStyle was on but no activity
had been set (for example when overwriteScriptSettings makes the script's
setup template return before setActivity, or after a forced reset).
performActionCooldown now resolves a missing play style the same way
setActivity does, from the current activity intensity (EXTREME after a
reset) or RANDOM when randomIntervals is enabled. The cooldown timer
overlay skips drawing when no play style is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…walk tail

processWalk's finish check dereferenced Rs2Player.getWorldLocation() directly,
so a null location during a world hop or loading screen threw an NPE and the
walk ended as an exception. Return MOVING (the same not-ready result
walkWithStateInternal already uses) and guard the final canvas click and tail
diagnostic the same way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
refreshTransports allocated refreshBoostedLevels and then filled it from a
client-thread lambda that dereferenced the field. PathfinderConfig.refresh is
called from several threads, so a concurrent refresh that finished first reset
the field to null before the queued lambda ran, throwing an NPE on the client
thread. The lambda and the verification hash now use a local array; the field
is still published for hasRequiredLevels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rld view

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…yer example

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…player

fix(player): guard Rs2Player accessors against a null local player
…ll local player gotcha

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(actor): return null positions when Rs2ActorModel wraps no actor
…or is null

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(gameobject): return empty when the scene query anchor is null
…t null

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(walker): yield instead of NPE when player location is missing at walk tail
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(shortestpath): skip minimap path overlay when minimap clip is unavailable
fix(antiban): default the play style when action cooldown runs without one
…vels-race

fix(shortestpath): capture refresh boosted-levels array locally
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(tileitem): return null location when ground item tile lost its world view
chsami and others added 28 commits October 10, 2026 23:32
…-actor-offthread

fix(walker): read interacting actor location on the client thread
fix(widget): guard null root widget in Rs2Widget.clickWidget (telemetry NPE, 3k events)
fix(dialogue): guard Rs2Dialogue.getQuestion against dialog closing between check and fetch
Expose Hunter plugin instance for AutoHunter
…y-stop

fix(autologin): opt-in terminal supply logout with bounded pending suppression
Adds a hidden Release Smoke Harness plugin, scripts/run-release-e2e.sh and
docs/RELEASE_E2E.md so a maintainer can run quick or full F2P smoke checks
against the release candidate jar before merging development into main.

The harness reuses TestRunnerPlugin/test mode, runs ordered checks with
per-check and total timeouts, skip handling, cleanups that restore game
state, and writes result.json plus a Markdown summary. TestRunnerPlugin
gains microbot.test.world to log in to a chosen world.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
… world login

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
LoginManager.login() printed the whole active ConfigProfile, including
login name, encrypted password, bank PIN and Discord webhook URL. Remove
that print, exclude the secret fields from ConfigProfile.toString() so
existing "{}" profile log lines stay safe, and drop the bank PIN, webhook
URL and login name from a few other log messages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
In Microbot the ConfigProfile name is the account login, and the
startup, switch, rename and sync log lines wrote it to stdout and
client.log. Log the profile id instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
The export path defaults to the profile name, and an IOException message
can contain the webhook URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
A stopped script kept initialized=true, so the next start skipped
initialize(): it never re-registered in the registry and resumed from
its previous state with stale counters and trace. Stopping now resets
the machine and only unregisters the entry it owns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
Stop cancels the loop before resetting, initialisation skips an
interrupted (cancelled) step, and snapshot publication and reset share
a short lifecycle lock so a step finishing after stop cannot leave a
registry entry or stale snapshot behind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
fix(security): stop logging profile credentials to stdout
fix(world-hop): wait for the world switcher to load before hopping
fix(statemachine): re-initialise StateMachineScript on restart
test(release): live release E2E smoke harness
…in fighting BreakHandler V2

- Detect login index 33 (Too many login attempts), press Back once, and pause
  every LoginManager login for an escalating cooldown (5/10/20/30 min, jittered)
  that resets after a successful login.
- AutoLogin and BreakHandler V2 wait out the cooldown instead of retrying.
- AutoLogin defers to BreakHandler V2 while a V2 break is active, so the two no
  longer log in/out against each other during a logout break.
- AutoLogin only starts a login from LOGIN_SCREEN, not during HOPPING/LOADING.
- Agent server reports the lockout and returns 429 while the cooldown runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
- Count a lockout only once per appearance of the lockout screen, so a screen
  that outlives its cooldown does not escalate on its own.
- Reset the AutoLogin watchdog while waiting out a lockout.
- Agent server /login returns 429 with loginCooldownMs when polling hits the
  lockout screen, matching the rejected-initiation path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
fix(login): handle "Too many login attempts" lockout; stop AutoLogin fighting BreakHandler V2
AutoLogin reset its retry count and last-attempt time as soon as the
client left LOGIN_SCREEN, so every LOGIN_SCREEN -> LOGGING_IN ->
LOGIN_SCREEN failure restarted from attempt one and retried within
seconds. Stay in ATTEMPTING_LOGIN while the client is logging in or
loading, only reset on a confirmed login, and apply the escalating
backoff and retry limit when the client falls back to the login screen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
fix(autologin): keep retry backoff across failed login attempts
…race and antiban EDT block

- Rs2ActorModel.getAnimation returns -1 when the model wraps no actor
  (new Rs2PlayerModel() while logged out / loading)
- Rs2UiHelper.isRectangleWithinCanvas treats a null rectangle as off-canvas,
  so doInvoke falls back instead of throwing
- QuestScript captures the selected quest once instead of re-reading it
  inside the client-thread lambda, and no longer unboxes an empty Optional
- Antiban panel computes Category.isBusy on the refresh timer thread instead
  of the Swing EDT, which blocked the UI for up to 10 s per tick

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
…ategory once

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
fix(telemetry): null actor animation, null click bounds, quest race, antiban EDT block
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LjtEMzQHGuq4M1Mpqk9pPV
@coderabbitai

coderabbitai Bot commented Oct 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 135 files, which is 35 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 274870e7-5680-415f-bb90-0ea59171da0a

📥 Commits

Reviewing files that changed from the base of the PR and between 214b2f9 and 623c092.


⛔ Files ignored due to path filters (1)
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/transports.tsv is excluded by !**/*.tsv

📒 Files selected for processing (135)
  • AGENTS.md
  • docs/AGENTIC_TESTING_LOOP.md
  • docs/AGENT_SERVER.md
  • docs/INDEX.md
  • docs/RELEASE_E2E.md
  • docs/entity-guides/README.md
  • docs/entity-guides/items.md
  • docs/entity-guides/worlds.md
  • gradle.properties
  • runelite-client/src/main/java/net/runelite/client/callback/ClientThread.java
  • runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java
  • runelite-client/src/main/java/net/runelite/client/config/ConfigProfile.java
  • runelite-client/src/main/java/net/runelite/client/config/ProfileManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/hunter/HunterPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/Microbot.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotApi.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/Script.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/ScriptStarted.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginSuppression.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginSuppressionRequest.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/AgentServerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/LoginHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/ProfileHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/AbstractEntityQueryable.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/actor/Rs2ActorModel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/tileitem/models/Rs2TileItemModel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/breakhandler/breakhandlerv2/BreakHandlerV2Script.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/breakhandler/breakhandlerv2/MicrobotPluginChoice.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/diagnostics/ScriptErrorReporter.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/example/ExamplePlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/example/ExampleScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/example/ExampleScriptOverlay.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/externalplugins/MicrobotPluginManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/inventorysetups/MInventorySetupsPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/config/SkillFiltering.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/PathMinimapOverlay.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/CollisionMap.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/StateMachineScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/TestRunnerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/CheckContext.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/CheckFailedException.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/CheckOutcome.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/CheckSkippedException.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/CheckStatus.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ClientLogScanner.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseCheck.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseCheckRunner.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeChecks.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeHarnessPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeLive.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeReport.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeResult.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/testing/release/ReleaseTier.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/ui/MicrobotProfilePanel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/ui/WorldSelectorDialog.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/Rs2InventorySetup.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanOverlay.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/AntibanPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/Rs2Antiban.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/ui/MasterPanel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/bank/Rs2Bank.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/coords/Rs2WorldPoint.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/discord/Rs2Discord.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObject.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/inventory/Rs2Inventory.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/magic/Rs2Magic.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/Rs2UiHelper.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/npc/Rs2NpcModel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/player/Rs2Player.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/player/Rs2PlayerModel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/security/LoginLockout.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/security/LoginManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/tile/Rs2Tile.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2Walker.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerTransports.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/transport/TransportDispatchTrace.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/transport/TransportRefusalLedger.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/widget/Rs2Widget.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/world/Rs2WorldUtil.java
  • runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/CalculatorType.java
  • runelite-client/src/main/java/net/runelite/client/plugins/skillcalculator/skills/MagicAction.java
  • runelite-client/src/test/java/net/runelite/client/callback/ClientThreadTimeoutLoggingTest.java
  • runelite-client/src/test/java/net/runelite/client/config/ConfigProfileTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPluginTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/MicrobotLogInterruptTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/MicrobotWorldHopTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/ScriptStartedTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginGateTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginPluginSupplyStopTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginRetryStateTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginSuppressionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/TerminalSupplyLogoutTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/AgentServerGsonTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/api/AbstractEntityQueryableInterruptionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/api/player/Rs2PlayerModelNullLocalPlayerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/api/tileitem/Rs2TileItemModelDetachedTileTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/diagnostics/ScriptErrorReporterTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/externalplugins/MicrobotPluginManagerHealthTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/questhelper/config/SkillFilteringTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/PathMinimapOverlayTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/WalkerRouteCorpusTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/FarmedSpiritTreeDefaultsTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderConfigRequirementLevelsTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/statemachine/StateMachineScriptRestartTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/testing/TestRunnerPluginTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/testing/release/ClientLogScannerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/testing/release/ReleaseCheckRunnerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/testing/release/ReleaseSmokeResultTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/InventorySetupSupplyLogoutTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/antiban/Rs2AntibanActionCooldownTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/bank/Rs2BankNullPlayerLocationTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/coords/Rs2WorldPointNullPointTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2DialogueClosingWidgetTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/gameobject/Rs2GameObjectNullAnchorTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/magic/Rs2MagicBlightedSacksTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/magic/Rs2MagicMissingSpellWidgetTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/misc/Rs2UiHelperCanvasBoundsTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/player/Rs2PlayerNullLocalPlayerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/security/LoginLockoutTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/security/LoginManagerLockoutTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerInteractingActorThreadTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/TransportRefusalExecutorTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/TransportRefusalStrikeOutTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/widget/Rs2WidgetNullRootTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/skillcalculator/CalculatorTypeTest.java
  • runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt
  • scripts/run-release-e2e.sh

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@chsami
chsami merged commit 8b716a4 into main Oct 12, 2026
3 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