Feature/zulrah slayer - #525
Conversation
Development
Release development to main
Bug In table potion
Development
Add an "Auto Pay Tree Removal" toggle (Dialogue section, default on) that selects 'Yes.' on the "Pay X Coins to have your tree chopped down?" prompt, so farm runs don't wait on a manual click. Matched on the question title (widget 219,1 index 0, verified live via the agent server) rather than the option text, so it can never fire on unrelated Yes/No dialogues; the coin amount is intentionally not matched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…emoval QoL: auto-confirm the farming tree-removal payment dialogue
…-navigation Fix mahogany upstairs navigation
Update MixologyScript.java
Merge development into main
… of random. (chsami#520) * Update StrugglingSaplingEvent.java Updated Ingredient Collection to use closest first instead of Random Ingredient. Behavior is more player-like. * Update AutoWoodcuttingPlugin.java Updated Plugin version to 1.8.4
merge with main
|
The new plugin JAR compiles against Microbot 2.6.19, but I’m holding the merge because the PR still needs substantial contributor work:
After those changes, the plugin itself can be reviewed without accepting untested shared build/runtime infrastructure at the same time. |
|
I understand your points and I wanted to address these with you on Discord before I created this PR, but that ultimately didn't happen (I sent you a friend request). I'll make the modification for the first 2 points, though I'm not sure what is fully expected in terms of tests. I'm happy to add tests as I see fit, but perhaps it might be best for you to give some guidance on this. |
|
Concrete test guidance: For the shared
For the Zulrah plugin, unit-test the pure rotation/phase and action-decision logic where possible, then report live evidence for:
A short table in the PR description with scenario, starting state/loadout, expected result, and observed result is enough for the live portion. The key is separating reusable framework guarantees from the Zulrah-specific behavior. |
chsami
left a comment
There was a problem hiding this comment.
The added JUnit and packaging coverage materially improves the shared action framework, and the base now targets development. The PR is still not ready to merge: every Observed cell in the 17-scenario live matrix is blank, and the branch still has multiple merge bases plus unrelated changes to CLAUDE.md, Mahogany Homes, Mixology, QoL, and Forestry. Please rebuild the branch cleanly on current development so the diff contains only the action framework and Zulrah feature, then fill the live matrix for the supported cycle, multi-kill, rotation/Jad, death/logout, and stop-mid-action paths.
|
Requested changes summary: please rebuild this branch cleanly on current development so the diff contains only the shared action framework and Zulrah feature. It still has multiple merge bases and unrelated CLAUDE.md, Mahogany Homes, Mixology, QoL, and Forestry changes. The automated coverage is much improved, but the 17-scenario live matrix still needs observed results for the supported cycle, multi-kill, rotation/Jad, recovery, logout, and stop-mid-action paths. |
Zulrah Slayer — Test Evidence
This document separates the reusable framework guarantees (covered by fast JUnit tests that run in
./gradlew test) from the Zulrah-specific behavior (unit-tested where pure; otherwise verified by alive run and recorded in the matrix below).
1. Reusable framework guarantees (automated)
Tests live under
src/test/java/net/runelite/client/plugins/microbot/actions/.order()regardless of input orderActionRunnerTest.runsActionsInAscendingOrderRegardlessOfInputOrderScriptStateActionRunnerTest.laterActionsCanReadEarlierResultsFromTheSameStateneedsExecution == falserecords a skipped action without callingexecuteActionRunnerTest.needsExecutionFalseRecordsASkipWithoutCallingExecuteneedsExecutionorexecutedoes not prevent later actions runningActionRunnerTest.oneThrowingActionDoesNotAbortTheRestOfTheTickActionRunnerTest.duplicateActionKeysAreRejectedDeterministicallyActionRegistryTest(discoversEveryConcreteActionInThePackage,skipsTheInterfaceAndAbstractBases,buildsInstancesThroughGuice)ActionRegistryTest.returnsEmptyListWhenThePackageHasNoImplementationsgameTick()dispatches to the executor (off the client thread), never inlineActionScriptTickTest.tickBodyIsDispatchedToTheExecutorAndNotRunInlinegameTick()cannot overlap while a slow action is runningActionScriptTickTest.dropsAnOverlappingTickAndResumesAfterTheInFlightOneCompletesActionScriptTickTest.loggedOutTickSkipsCleanlyAndReleasesTheGuard,uninitialisedTickDoesNotThrowAndReleasesTheGuardActionScriptTickTest.rejectedSubmissionDoesNotLeaveTheGuardPermanentlyStuckPluginJarPackagingTest.pluginJarBundlesTheSharedActionsFrameworkAndNotTheMarkerFilePluginJarPackagingTest.everyZulrahActionClassInTheJarLoadsAndImplementsTheSharedActionInterfaceKnown gap: the "a class cannot load during discovery" path is guarded in
ActionRegistry(
info.load()is wrapped intry/catch(Throwable)→ log & skip) but is not unit-tested, because adeliberately-unloadable class cannot be produced from normally compiled sources. Verified by inspection.
Bugs found and fixed while writing these tests
ScriptState.result()threwNullPointerExceptionfor any action that returnednull(or whoseexecutethrew) —findFirst()cannot wrap a null. Reordered tofindFirst().map(...).ActionScript.gameTick()left the re-entrancy guard permanently stuck ifsubmit()was rejected(the resetting
finallylived inside the never-run task). The guard is now released on submit failure.ActionRunnerdid not enforce the documented uniqueness ofAction.key(); duplicates now fail fast.2. Zulrah-specific pure logic (automated)
Tests under
src/test/java/net/runelite/client/plugins/microbot/zulrahslayer/.rotationutils/RotationTypeTestmatchingreturns empty for an invalid stage or unrecognised NPC (no wrong guess)RotationTypeTest.matchingReturnsEmptyForInvalidStageOrUnknownNpcactions/ZulrahDecisionLogicTest.onlyTheTanzaniteMagicFormIsAttackedWithRangedZulrahDecisionLogicTest(venomDamage…,antiVenomThresholdBoundary…)actions/EatActionTest3. Zulrah-specific live behavior (manual run)
Pure logic above is automated; the following require a live client at Zulrah with both inventory setups
configured. Fill the Observed column from a run (client version, date).
startUpshows a message and stops the plugin (no crash)gameTickskips cleanly; resumes on loginshutDownresets context and stops the script cleanly