Conversation
mcagnion
force-pushed
the
feature/radius-jewel-finder-pr
branch
5 times, most recently
from
August 7, 2026 18:27
55ff588 to
3411fbe
Compare
mcagnion
force-pushed
the
feature/radius-jewel-finder-pr
branch
from
August 15, 2026 15:55
3411fbe to
d33c7aa
Compare
mcagnion
marked this pull request as ready for review
August 16, 2026 12:15
mcagnion
marked this pull request as draft
August 16, 2026 12:26
mcagnion
force-pushed
the
feature/radius-jewel-finder-pr
branch
from
August 26, 2026 21:50
ee975c7 to
846ca4b
Compare
mcagnion
marked this pull request as ready for review
August 28, 2026 19:43
Add the Tree tab Radius Jewel Finder UI, data catalog, computation helpers, and manifest entries.
Cover socket discovery, variant handling, ranking, apply safety, occupied sockets, and state restoration for the Radius Jewel Finder.
Default variant-aware jewel types to All variants, and constrain compute/find paths when a specific variant is selected.
Adapt the finder to the current per-mod Foulborn data model, preserve selected variants through Find and Compute, and cover the regression paths. Excludes Foulborn Might of the Meek until its radius is modelled.
Ensure All occupied scores a replacement after removing the cluster's allocated passives.
Update generated hashes for the radius jewel sources.
Reuse ItemsTab's main-tree comparison predicate in Radius Jewel computations while keeping Cluster Jewel rebuilds explicit.
Move result and detail controls into their own modules so the finder class can focus on coordinating the popup.
Drop nested requirement source objects from tooltip snapshots because stat comparison tooltips consume only scalar values. Cover both stored snapshots with a regression test.
Keep the data module API limited to active consumers and clean up the surrounding popup wiring.
Use unique-item identity for grouped-family limits, and take Thread and Massive radii from canonical item and tree data.
Invalidate cached and visible results when the build revision or a result-affecting criterion changes, and prevent stale Apply actions.
Use one placement plan for Find and Compute so Equip, Move, Replace, and Equipped stay consistent. Add a non-equipping path and preserve exact item and socket state through Items undo.
Remove the two-pass top-five enrichment that associated sorted results through stale indices. Treat ring selection as a real result criterion, including Any ring, explicit filtering, preview, cache identity, restoration, and canonical labels.
Carry each representative group identity through fan-out and rebuild full plan details in the group's own budget and replacement context. Stop reusing or copying plans across groups that happen to choose the same variant.
Limit the temporary socket distance mutation to protected calculator calls so cooperative cancellation never abandons modified live tree state. Restore the original value before returning or propagating calculator errors.
Individual passive gains are not an upper bound for combinations with non-additive interactions. Always run the final combined calculation before ranking Thread of Hope and Impossible Escape variants.
Replace the class-mutating compute mixin with a per-finder object so production code and tests use the same calculation boundary.
Pass one named request table to each calculation and route disconnected-passive work through the Fast or Simulated selector.
Give each jewel type one strategy for Find and Compute instead of repeating name and flag checks throughout the popup.
Move cached results, view selection, and applicability checks into a dedicated state object. Keep criterion-key construction in the popup.
Move selection, confirmation, action buttons, and action tooltips into a dedicated object. Keep the existing placement plans and Undo behavior.
Move previews, result details, and selection updates into a dedicated object without changing result or action behavior.
Explain criterion changes without hiding the previous result view. Keep stale actions disabled and restore matching cached results when criteria return.
Keep Find visible but disabled for ordinary All variants selections while preserving multi-variant searches for Impossible Escape and Thread of Hope.
Filter Find candidates by displayed Points while keeping Score independent. Preserve zero-cost occupied sockets and keep cached results separate for each Max points value.
Use one full-height Details pane with the most useful facts first. Cache stable hover tooltips and avoid repeating variant and passive-count summaries.
Replace parallel jewel preview and result-column branches with explicit schemas. Remove optional cross-interaction result caches while preserving visible stale rows, refresh warnings, and Apply correctness guards.
Separate guarded item-plan construction and execution from popup orchestration while preserving existing action and Undo behavior.
Name Impossible Escape effect independence precisely and remove redundant row aliases in favor of the shared action plan.
Build previews directly from jewel descriptors and keep finder capabilities in strategies. Remove duplicate flags and metadata without changing preview or result behavior.
Update generated hashes for the radius jewel sources.
Keep one outer result table per socket while sharing immutable plan and tooltip snapshots inside equivalent groups. Avoid recursively copying passive-node object graphs after the current class proxy caching changes.
Use a different best jewel for each socket and add competing rows for tie-break cases. This makes the tests fail when the wrong result wins.
Keep saved builds for integration cases. Use small socket graphs for helper tests so each case only sets up the data it needs.
Restore popup, node, and data globals after every test, including failures. Also avoid fixed tooltip line numbers.
Keep action outcomes and guidance coverage while avoiding exact labels, full status copy, and fixed pixel geometry.
mcagnion
force-pushed
the
feature/radius-jewel-finder-pr
branch
from
September 27, 2026 13:01
846ca4b to
6b9cc1e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description of the problem being solved:
Finding a good socket for a radius jewel currently means manually comparing each socket, its passive radius, and the effect on the build.
This adds Find Radius Jewel to the Tree tab. Select a jewel family—or
All jewels—and PoB ranks the supported jewel and socket combinations against the chosen stat. Results can be previewed and applied directly to the build.Use the panel to select the jewel family and comparison stat, then run the calculation. The result list shows the gain, percentage gain and gain per passive point; selecting a row shows the affected socket, passives and any Foulborn mutation.
The finder can restrict searches to free sockets, safely replace ordinary occupied jewels, or consider all occupied sockets. Replacement details identify the existing jewel, while position-sensitive jewels are excluded from
Safe occupiedmode. Full replacement evaluation also handles cluster-tree and Timeless Jewel state safely.The finder covers the radius jewels it can evaluate generically, including applicable Foulborn variants. Timeless Jewels continue to use their dedicated finder; conversion jewels such as Cold Steel and Fireborn are outside this tool's scope. Foulborn Might of the Meek is not included until its radius is modeled.
Steps taken to verify a working solution:
All jewelsview.Screenshots
Technical notes for reviewers
RadiusJewelDataowns the supported jewel catalogue and variant construction.RadiusJewelComputeowns socket evaluation, replacement handling and disconnected-passive planning. Popup workflows are separated from construction, while result, detail and tooltip controls are dedicated class modules.