Skip to content

Walker overhaul: decomposed executor, door ledger, planner-selection gate - #1838

Draft
infuse21 wants to merge 2 commits into
chsami:developmentfrom
infuse21:walker-fix-pr
Draft

Walker overhaul: decomposed executor, door ledger, planner-selection gate#1838
infuse21 wants to merge 2 commits into
chsami:developmentfrom
infuse21:walker-fix-pr

Conversation

@infuse21

@infuse21 infuse21 commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

What

The walker as it runs on my fork today, delivered as one clean commit cut directly from the current `development` tip (post-revert of #1832), so it auto-merges with no unrelated history attached.

  • Decomposed executor — the former 14k-line `Rs2Walker` split into a route loop + public API (`Rs2Walker`), transport dispatch/handlers (`Rs2WalkerTransports`), the door cascade (`Rs2WalkerDoors`), and movement/click issuance (`Rs2WalkerMovement`). Every move verified behaviour-identical (full suite + live walks at each step).
  • Door handling rework — a single `DoorAttemptLedger` owning all door state (attempt cooldowns, strikes, settle windows, per-pass claims), a unified route-door classifier replacing four contradictory rules, crossed-face release (door wait releases when the collision edge opens, not when the player is through), goal-object and double-gate-wing guards.
  • Route execution fixes — fold-stall fix (multi-gate corridors no longer stall 4–26s per gate), WalkExit taxonomy with correct progress classification, oscillation-proof no-progress budgets, stuck-recovery that respects route order.
  • Planner-selection gate — vendored upstream shortest-path planner as a pinned source set (`src/upstreamPlanner`) with comparison harness tasks, for convergence work against Skretzo's planner.
  • Refreshed transport data (`transports.tsv`, `blocked_edges.tsv`, and friends) and the walker test suite: decision tables, route corpus, session-reset pins, and the client-thread guardrail baseline regenerated for this tree.

Support-file changes are limited to what the walker compiles against: `Rs2Tile` (edge passability), `Rs2Magic`/`Rs2Staff`/`Rs2Tome` (cast + rune providers), `Rs2LeaguesTransport` injection, and the client build script (source set + verification tasks).

Why

The walker's runtime executor was the failure source (path generation was healthy). This is several weeks of log-driven fixes, each verified on live walks — multi-gate corridors that took minutes now run in ~90–120s; long cross-map walks (e.g. Lumbridge→Varlamore, 2 gates + 2 NPC travels) complete clean with zero recovery interventions.

Notes for review

🤖 Generated with Claude Code


Update 2026-08-14 (second commit)

A day of log-driven reliability fixes on top of the original snapshot, each live-verified on the route that exposed it:

  • Crossed-edge guard — a planned transport edge is never re-dispatched from its destination side (one tile of landing drift used to walk agility shortcuts backward).
  • Terminal-travel landing release — NPC travel waits release on landing in the destination area, and the wait outlasts the longest direct flight; no more false timeouts at touchdown.
  • One click per pass — a successful route click ends the walk pass; this removed the 8–15s "arrive and stand" stalls, cruising cadence is now ~2–3.5s per click.
  • Live-collision door poisoning fix — a closed door's corner diagonals were being captured as permanent blocks and persisted, sealing interiors across sessions; wall doors now get full-footprint deferral and a capture-version bump auto-discards old stores.
  • Sealed-destination retarget — a provably unreachable clicked tile retargets once to its walkable rim instead of re-running the sealed substitute search on every replan.
  • Progress-aware walk budget + an eight-stage per-pass stopwatch (pass_slow) for diagnosing slow passes from logs.

Full suite green on the branch; guardrail baseline regenerated on-branch.

The complete walker as live-tested on the fork: the decomposed executor
(Rs2Walker route loop + Rs2WalkerTransports + Rs2WalkerDoors +
Rs2WalkerMovement), the door-attempt ledger and door decision layer, the
route-state holder, the WalkExit taxonomy, the planner-selection gate with
the vendored upstream planner source set, refreshed transport data files,
and the walker test suite (decision tables, route corpus, guardrail
baseline regenerated for this tree).

Support-file changes limited to what the walker compiles against:
Rs2Tile (edge passability), Rs2Magic/Rs2Staff/Rs2Tome (cast + rune
providers), Rs2LeaguesTransport injection, and the client build script
(upstreamPlanner source set + planner comparison tasks).

Deliberately excluded: the Rs2Death API (tracked separately in PR chsami#1834),
gameval/script drift owned by the release flow, and the reverted PR chsami#1832
sync machinery (scripts/, evidence docs, shadow handler).

Full unit suite green on this branch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 182 files, which is 82 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: Pro Plus

Run ID: 4e62f2a5-e6a3-4cb3-8aba-223baf344527

📥 Commits

Reviewing files that changed from the base of the PR and between ffc9066 and 97fee66.

⛔ Files ignored due to path filters (13)
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/agility_shortcuts.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/blocked_edges.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/canoes.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/collision-map.zip is excluded by !**/*.zip
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/minecarts.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/quetzals.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/restrictions.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/ships.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/spirit_trees.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/teleportation_items.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/teleportation_minigames.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/teleportation_spells.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/transports.tsv is excluded by !**/*.tsv
📒 Files selected for processing (182)
  • runelite-client/build.gradle.kts
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/PlannerSelectionMode.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/PurchasableItemCatalog.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/ShortestPathPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/Transport.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/TransportExecutionRegistry.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/TransportItemRequirement.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/TransportItemResolver.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/UPSTREAM_COMPARISON.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/WEBWALKER_IMPROVEMENT_PLAN.md
  • 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/LearnedBlockedEdges.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/Node.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathEdge.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathTerminationReason.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/Pathfinder.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/shortestpath/pathfinder/TransportNode.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/TransportPlanningPolicy.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/live/LiveCollisionCapture.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/live/LiveCollisionConflicts.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/live/LiveRouteValidator.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/leaguetransport/LeaguesTransportInjection.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/leaguetransport/Rs2LeaguesTransport.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/magic/Rs2Staff.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/magic/Rs2Tome.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/Rs2ActiveRouteStatus.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2HotAirBalloon.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PathApi.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerCanaryPerformanceStats.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerShadowComparison.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerShadowContext.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerShadowCoverageStats.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerShadowStats.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlanningSnapshot.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RouteMetrics.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RoutePlanner.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RoutePolicy.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RouteRequest.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RouteResult.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RouteStep.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2RouteTermination.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TerminalTravelMode.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportEdge.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportExecutor.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportItemRequirement.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportLoadout.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportPlanningPolicy.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2TransportType.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/Rs2WalkerDoors.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerMovement.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerShadowExecutionStats.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/TransportRouteAnalysis.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/UpstreamRoutePlanner.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/WalkPassStats.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/awaits/Rs2WalkerRuntimeAwaits.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/banking/Rs2WalkerBankingPlanner.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/DoorAttemptLedger.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorClassifier.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorDetection.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorGeometry.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorProbe.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2WalkerAwaits.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/lifecycle/Rs2WalkerLifecycleRuntime.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/obstacle/LiveScene.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/obstacle/Rs2LiveScene.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/obstacle/Rs2ObstacleHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/obstacle/TransportResolver.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/recovery/FrontierDecision.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/recovery/RouteRecovery.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/recovery/TailDecision.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/segment/SegmentGate.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/stall/Rs2WalkerStallPolicy.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/state/WalkExit.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/state/WalkerRouteState.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/LiveCollisionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/RouteClickTargetRegressionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/SealedTargetFastPathTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathCoreTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/TransportExecutionRegistryTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/TransportItemRequirementTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/TransportSkillRequirementDataTest.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/LearnedBlockedEdgeSessionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/LearnedBlockedEdgeStrikesTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/LearnedBlockedEdgesTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderConfigTransportRefreshHashTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderHomeTeleportTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderItemRequirementTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderPathMaterializationTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderSpecialRequirementTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderTerminationReasonTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/TransportPlanningPolicyTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/live/LiveCollisionConflictsTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/LocalPlannerComparisonMain.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/RouteProgressWatermarkTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2HotAirBalloonTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2PathApiPlanningTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2PlannerShadowContextTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerStaminaTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerUnitTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/TargetWalkabilityPreflightTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/TransportRouteAnalysisTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/UpstreamRoutePlannerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/WalkExitTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/WalkSessionStateResetTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/banking/BankedTransportItemPlanningTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/DoorAttemptLedgerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorClassifierTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorGeometryTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorHandlerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2DoorProbeTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/door/Rs2WalkerAwaitsTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/obstacle/MineableResolverTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/obstacle/ObstacleRegistryTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/obstacle/TransportResolverTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/recovery/FrontierDecisionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/recovery/RouteRecoveryTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/recovery/TailDecisionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/segment/SegmentGateTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/stall/Rs2WalkerStallPolicyTest.java
  • runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt
  • runelite-client/src/upstreamPlanner/ADAPTER_PATCHES.md
  • runelite-client/src/upstreamPlanner/LICENSE
  • runelite-client/src/upstreamPlanner/README.md
  • runelite-client/src/upstreamPlanner/UPSTREAM_REVISION
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/Destination.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/DestinationRequirements.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/ItemVariations.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/JewelleryBoxTier.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/PrimitiveIntHashMap.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/PrimitiveIntList.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/ShortestPathConfig.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/ShortestPathPlugin.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/TeleportationItem.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/TileCounter.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/TileStyle.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/Util.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/WorldPointUtil.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/leagues/LeagueModeState.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/leagues/LeagueRegion.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/leagues/LeagueRegionChecker.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/AbstractNodeKind.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/CollisionMap.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/EdgeOverride.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/IntDeque.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/IntMinHeap.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/NodeGraph.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/OrdinalDirection.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/PathStep.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/PathTerminationReason.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/Pathfinder.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/PathfinderConfig.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/PathfinderResult.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/SplitFlagMap.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/TransportAvailability.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/VisitedTiles.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/pathfinder/WildernessChecker.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/BankPickupRequirements.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/LoadInterner.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/Transport.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/TransportLoader.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/TransportType.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/TransportTypeConfig.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/FieldParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/ItemRequirementParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/QuestParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/SkillRequirementParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/TransportRecord.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/TsvParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/VarCheckType.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/VarRequirement.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/VarRequirementParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/parser/WorldPointParser.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/requirement/ItemRequirement.java
  • runelite-client/src/upstreamPlanner/src/main/java/shortestpath/transport/requirement/TransportItems.java

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


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 commented Aug 14, 2026

Copy link
Copy Markdown
Owner

The Build check is green, but I’m holding this from merge because the review surface is too large to validate safely as one PR: 193 files / ~47k changed lines across executor decomposition, door behavior, planner vendoring/build wiring, transport data, and generated test/resources. CodeRabbit did not review it because the PR exceeded its 100-file limit, so the green status currently provides compilation/tests but no code-review coverage.

Please split this into reviewable, independently testable PRs — for example: (1) executor decomposition with behavior-preservation tests, (2) door ledger/cascade changes, (3) planner-selection/source-set gate, and (4) transport/data refresh. Each part should be cut from current development and include the focused unit/live-walk evidence relevant to that behavior.

This is substantial enough that I don’t want to make ad-hoc maintainer edits or merge it on Build alone.

…atch

Log-driven fixes from live walks since the PR was opened, each verified
on the routes that exposed it:

- Crossed-edge guard: a planned transport edge whose destination SIDE
  the player is already on (strictly closer to destination than origin,
  same plane) is never re-dispatched — one tile of landing drift was
  enough to walk an agility shortcut backward in front of players.
- Terminal-travel landing release: the destination-dialogue wait also
  releases on landing in the destination AREA (radius 5, moved-closer
  guard keeps short ferries honest), and its budget outlasts the
  longest direct flight (5s -> 12s) so it cannot warn at touchdown.
- One click per pass: a successful route click ends the pass instead
  of stacking 2-3 clicks with their own bounded waits — this was the
  8-15s 'arrive and stand' stall; cruising cadence is now 2-3.5s/click.
- Live-collision capture: wall doors get full-footprint deferral (a
  closed door also blocks its corner diagonals; those were captured
  known+blocked and PERSISTED, sealing a farm interior across
  sessions); CAPTURE_VERSION 2 -> 3 auto-discards existing stores.
- Sealed-destination retarget: when the reverse probe proves a clicked
  tile unreachable and the substitute search reached its rim, the walk
  retargets to the rim once — no more 50k-node sealed replans per pass.
- Progress-aware walk budget + eight-stage pass_slow stopwatch
  (WalkPassStats) + far-unreachable pre-gate (FrontierDecision).

Baseline regenerated on-branch; verified identical to the walker-only
delta. Full suite (:client:runUnitTests) green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@infuse21

Copy link
Copy Markdown
Contributor Author

Agreed — splitting it. Proposed stack, each cut from the development tip at open time and merged sequentially, all under the 100-file review limit:

  1. Transport data refresh (~25–30 files) — tsv updates only, incl. corrected durations for spirit trees/gliders/mushtrees. Data-validation tests.
  2. Planner vendoring / source-set gate (~52 files) — the pinned src/upstreamPlanner source set + gradle wiring + comparison harness tasks. No runtime behavior change.
  3. Shortestpath engine (~45 files) — pathfinder improvements (sealed-target probe, config caching, live-collision store/capture) with unit tests and the route corpus.
  4. Walker executor (~92 files) — the decomposed executor with its components and tests; decision tables, corpus, and live-walk logs attached as evidence.

One adjustment to your sketch: the executor decomposition and the door ledger/cascade can't be honestly separated — the door subsystem is one of the extracted components, and an intermediate "decomposed but with old door behavior" state never existed and was never live-tested; manufacturing it for review would put synthetic, untested code in front of you. PR 4 carries both, with behavior-preservation evidence.

Parts 1 and 2 are independent and will open first; 3 and 4 follow as their predecessors merge so each stays a clean cut from development. I'll convert this PR to draft once part 1 is open.

🤖 Generated with Claude Code

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