Skip to content

Improve PoE2 Build Export#2012

Closed
jay9297 wants to merge 38 commits into
PathOfBuildingCommunity:devfrom
jay9297:feature/poe2-build-export-improved
Closed

Improve PoE2 Build Export#2012
jay9297 wants to merge 38 commits into
PathOfBuildingCommunity:devfrom
jay9297:feature/poe2-build-export-improved

Conversation

@jay9297

@jay9297 jay9297 commented May 29, 2026

Copy link
Copy Markdown

Summary

  • Merge upstream dev (v0.16.0 + latest fixes) into the build export feature branch
  • Includes improved build export functionality

Changes

See individual commits for details.

TheClassified and others added 30 commits May 11, 2026 22:44
Writes a .build JSON file to the in-game BuildPlanner folder
(Documents/My Games/Path of Exile 2/BuildPlanner/) from a new section in
the Import tab. Tree specs, item sets and skill sets export as
level-bracketed loadouts via the format's level_interval field, with
per-set Lvl Min/Max in each tab's Manage popup. The New Loadout dialog
also takes a level range that propagates across the matching tree spec,
item set and skill set on save. New sets auto-preset on a 30-level
cadence (1-30, 30-60, 60-90, 90-100).

Per-passive and per-gem author notes via Shift+Right-Click on the Tree
and Skills tabs. The keybind hint and any existing note are shown in
the respective tooltips. Notes flow into the exported additional_text;
the format's Custom Text markup (<bold>{}, <italic>{}, <red>{},
<rgb(R,G,B)>{}) is preserved in the input.

Non-unique items render rolled title + base type + mod list using the
same markup (italic implicits, plain explicits). Active skills carry a
"Level N[, Q% Quality]" hint when no note is set; trivial Level 1 /
0% Quality on uncustomised support gems is suppressed to avoid noise.

Skill IDs use the Gems.lua table key to work around the singular
"Metadata/Items/Gem/" typo on the gameId field of ~486 auto-generated
entries.

Passive IDs are emitted as PassiveSkills.Id strings (e.g.
"projectiles18", "AscendancyMercenary2Notable5"). This required adding
stringId to src/Export/Scripts/passivetree.lua and regenerating
src/TreeData/0_4/tree.lua against GGPK. Older tree versions (0_1, 0_2,
0_3) still carry numeric IDs and fall back accordingly with a one-time
console warning until they're regenerated too.
- Add scripts/ai-agent.sh with 2-tier fallback (Claude Pro → OpenCode Go)
- Add CLAUDE.md and AGENTS.md with project-specific agent instructions
- Add .github/workflows: ci.yml, ai-fix.yml, ai-review.yml, auto-merge.yml
- Model slugs verified against opencode v1.15.7:
  review: opencode-go/glm-5.1
  fix: opencode/deepseek-v4-flash-free → opencode-go/qwen3.6-plus → opencode-go/deepseek-v4-flash
- .busted: enable coverage = true
- .luacov: configure include/exclude paths and report file
- .luacheckrc: lua51+luajit std, ignore unused args/loop vars
- Dockerfile: install luacheck via luarocks
Remove the build step (pre-built image from GHCR needs no local build)
and replace all `tests` service references with `busted-tests` to match
the name defined in docker-compose.yml.
docker compose run args replace 'command' but append to 'entrypoint',
so --tags and --coverage flags were being treated as executables.
Updated AI fix workflow to extract issue metadata and improve branch handling.
Added concurrency control to cancel in-progress AI reviews and improved diff handling.
Added caching and image management steps to the verify job.
Updated AI fix workflow to improve error handling and timeout settings.
Increased timeout for AI review job from 15 to 30 minutes and updated review prompt structure.
Update commit message format and error handling in AI workflow.
- Make 'rating' optional in evasion suffix patterns (r?a?t?i?n?g?)
- Remove dead-code keystone pattern with wrong parameter order
- Add bounds check for hollowPalmAddedPhys table (levels 1-40)
- Add descriptive line patterns for Hollow Palm Technique node
- Add Spectral Ward pattern for 'per X item evasion on equipped body armour'
- Update ModCache entries for all affected patterns
* Chore:  Bump action version numbers (PathOfBuildingCommunity#1993)

* Add support for Legacy Grand Spectrum mods (PathOfBuildingCommunity#1994)

Some old mods don't require the socketed in text

Co-authored-by: LocalIdentity <localidentity2@gmail.com>

* Add support for Ancestral Empowerment, Ancestral Call, Crescendo II and III, Infernal Cry, and "Ancestrally Boosted Attacks" passive nodes (PathOfBuildingCommunity#1839)

* add support for Ancestral Call, Crescendo II and III, ancestral boost tree nodes

* fix ancestral call inc dmg from tree

* big ole refactor so we stop duplicating code
one commit so I can revert if it goes boom

* added test
update CalcSection from "Exerted Warcries" to "Ancestral Boosts"

* add data map for gemName given a modSource

* boosted attacks configOption

* add support for Ancestral Empowerment, including combining Ancestral Empowerment with Fist of War
fix Fist of War/ancestrally boosted slams more AOE to inc AOE
add test for Combined logic for Ancestral Empowerment and Fist of War

* comment spelling

* better label

* fix avg aoe from fist of war

* forgot AOE portion for Crescendo III

* add support for Infernal Cry's empowered buff

* refactor away from specific baseMod for FistOfWar
fix Ancestral Empowerment not getting the double from fist of war III

* empowered condition for all Ancestrally Boosted

* ancestralBoostEffect

* multiplier instead

* pr comments
also refactored Crescendo III to use the new logic instead of an extra isolated block of logic by introducing a way to conditionally max uptime for Boosted or Empowered attacks

* Fix issues

Move the Infernal Cry buff to calc offence so it doesn't rely on stale calc output
Fix Ancestral Empowerment uptime calculation
Move gain table so Infernal Cry still works

* Fix spelling

---------

Co-authored-by: LocalIdentity <localidentity2@gmail.com>

* Add support for 0.5 JSON skill tree (PathOfBuildingCommunity#1984)

* Passive tree parser from ggg web data

* enhanced escapeGGGString

* Fix ascendancy unlock constraint check in node search parameters

* Refactor DrawQuadAndRotate to handle different data lengths for vertex calculations

* Add node overlay for Blighted Notable Frames in passive tree

* Fix typos and improve comments in passive tree script

* Fix typos in ascendancy handling and update inner radius calculations in passive tree script

* Refactor passive tree node replacement logic and add switchable options for Druid nodes

* Add support for alias notable maps and enhance jewel socket handling

- Enhanced passivetree_ggg.lua to support aliasNotableMap for jewel sockets.

* Rename aliasNotableMap to aliasPassiveSocket for clarity in passive tree data

* Enhance jewel socket handling by adding noRadius property and updating related logic in passive tree

* Enable Abyssal Lich parser

* Fix tests

Export ModCache
Fix crash with class Ids
Fix unarmed data for Ids

* Add legacy class ID remap

Old builds from 0.1 to 0.3 used the wrong id for the character class and opening them now would convert them to the wrong class. This maps the old builds so they now open correctly

* Formatting + typos

* AliasPassiveSocket fix

Was using the wrong name from a previous commit

* Export fixes

Uses the tree data folder to look for the ggg assets and json files
Fixes the tree file changing each time on export due to pairs usage

* Use copy file command to speed up export

Now runs in 0.1s instead of 8s

---------

Co-authored-by: justjuangui <servicios@juacarvajal.com>
Co-authored-by: LocalIdentity <localidentity2@gmail.com>

* Remove aliasPassiveSocket temp code

* Fix Hollow Palm Technique parsing and add Spectral Ward support

- Make 'rating' optional in evasion suffix patterns (r?a?t?i?n?g?)
- Remove dead-code keystone pattern with wrong parameter order
- Add bounds check for hollowPalmAddedPhys table (levels 1-40)
- Add descriptive line patterns for Hollow Palm Technique node
- Add Spectral Ward pattern for 'per X item evasion on equipped body armour'
- Update ModCache entries for all affected patterns

---------

Co-authored-by: Nighty <Nightblade@users.noreply.github.com>
Co-authored-by: LocalIdentity <31035929+LocalIdentity@users.noreply.github.com>
Co-authored-by: LocalIdentity <localidentity2@gmail.com>
Co-authored-by: Peechey <92683202+Peechey@users.noreply.github.com>
Co-authored-by: Juangui <80857657+justjuangui@users.noreply.github.com>
Co-authored-by: justjuangui <servicios@juacarvajal.com>
Co-authored-by: jay9297 <jay9297@users.noreply.github.com>
jay9297 added 8 commits May 28, 2026 23:09
…' into feature/poe2-build-export-improved

# Conflicts:
#	src/Classes/GemSelectControl.lua
#	src/Classes/ItemSetListControl.lua
#	src/Classes/SkillSetListControl.lua
#	src/Classes/SkillsTab.lua
#	src/Modules/Build.lua
The SlotMap values are derived from GGG's .build format documentation
example, not just educated guesses. Updated comment to reflect this.
Long rare items with many mods were losing important information.
1000 chars should accommodate most items without truncation.
# Conflicts:
#	spec/System/TestSkills_spec.lua
#	src/Data/ModCache.lua
#	src/Export/Scripts/passivetree_ggg.lua
#	src/TreeData/0_5/tree.lua
- Regenerate ModCache.lua to match current ModParser (removes stale
  combined modifier entries from pre-upstream Hollow Palm changes)
- Fix spellcheck workflow: remove stale dictionary cache that was
  causing upstream words to be missed, align with upstream config
…t-improved

# Conflicts:
#	src/Modules/Build.lua
#	src/TreeData/0_4/tree.json
@jay9297

jay9297 commented May 29, 2026

Copy link
Copy Markdown
Author

Closing - will reopen against fork.

@jay9297 jay9297 closed this May 29, 2026
@jay9297

jay9297 commented May 29, 2026

Copy link
Copy Markdown
Author

Didn't mean to open

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