Wrapper tool hardening and cleanup

This commit is contained in:
2026-05-13 19:06:24 +02:00
parent 53cb1e6996
commit 7d286551b3
19 changed files with 1376 additions and 149 deletions
@@ -1,5 +1,22 @@
# Global Feat Injection — Specification
## Status Snapshot
Current state as of 2026-05-13:
- This document is partially stale relative to the implementation in
`internal/topdata/native.go`.
- Current code injects:
- always-on menu feats: `feat:specialattacks`, `feat:throw`,
`feat:grapple`, `feat:offensivefighting`, `feat:defensivefighting`,
`feat:horsemenu`
- conditional combat feats: `feat:powerattack`, `feat:combatexpertise`
- class-skill shorthand rows for `masterfeats:skillfocus` at level `-1` and
`masterfeats:greaterskillfocus` at level `12`
- This contract should be treated as a parity note, not as an exact
implementation transcript, until it is fully rewritten around the current
behavior.
## Objective
Ensure the native class feat generation pipeline produces **functionally identical output** to the legacy system by applying deterministic global feat injections.
@@ -24,6 +41,9 @@ With properties:
"OnMenu": "0"
}
For the current implementation, `masterfeats:greaterskillfocus` is injected with
`GrantedOnLevel = 12`, not `-1`.
---
### R2 — Spellcasting master feats
@@ -37,6 +57,16 @@ Then inject:
- `masterfeats:spellfocus`
- `masterfeats:greaterspellfocus`
Historical note:
- This rule is not currently implemented as an automatic global injection in
`native.go`.
- Spell-focus expansion is supported when the class feat data explicitly
references `masterfeats:spellfocus`.
If automatic spellcaster-driven injection is still required, it remains
outstanding work.
With properties:
```json
@@ -75,6 +105,9 @@ With properties:
Always inject:
- `feat:specialattacks`
- `feat:throw`
- `feat:grapple`
- `feat:offensivefighting`
- `feat:defensivefighting`
- `feat:horsemenu`