Skip to content

v1.4.3: Validation hardening + Range.diff + docs refresh

Choose a tag to compare

@amaster97 amaster97 released this 23 May 10:30
· 301 commits to main since this release

v1.4.3 — Validation hardening + Range.diff + docs refresh (PATCH)

A bundled patch release combining an input-validation hardening pass on HUNLConfig, a small set-difference utility on Range, and a documentation refresh covering v1.4.x capabilities, CLI ergonomics gaps, and two-tier architecture honesty.

HUNLConfig input-validation hardening

HUNLConfig.__post_init__ now raises TypeError/ValueError early on malformed inputs (type-level guards on contribution tuple shape, scalar types for starting_stack/big_blind/small_blind/ante/initial_pot, bet-size-fraction containers, and bool rejected where int is expected). Loud failure at the Python/Rust boundary instead of silent corruption propagating to the Rust backend. Builds on v1.4.1's validation foundation (which caught negative and over-stack contributions). 28 new test cases in tests/test_hunl_config_validation.py cover the expanded guard surface.

Range.diff() set-difference utility

New Range.diff(other) method returns a new Range of combos in self not in other — directional, non-mutating set-difference. Equivalent to frequency-aware max(self.freq - other.freq, 0) under the current Range invariant (all stored frequencies are 1.0). Useful for computing range complements without rebuilding combo lists by hand. 8 new test cases in tests/test_range.py (22/22 passing) cover empty/self/superset/disjoint diffs, directionality, partial overlap, and non-mutation. Fractional-frequency exemplars remain pending the Range refactor.

USAGE.md + DEVELOPER.md refresh

USAGE.md updated for v1.4.x capabilities (node-locking, asymmetric contributions, the new Range.diff() utility), known CLI ergonomics gaps (pushfold subcommand, exploit-target positional convention, batch-solve CSV quoting), and observed performance cliffs (range-vs-range walk vs. Rust port). DEVELOPER.md adds two-tier (Python solve_hunl_postflop chance-enum-at-root vs. Rust solve_range_vs_range_rust vector-form CFR) honesty framing, action-abstraction notes (ActionAbstractionConfig defaults; library round-trip behavior including exploitability_history truncation), and operational guidance for contributors.

Honest framing

PATCH bump on the v1.4.x line: additive utility + input-validation hardening + docs refresh. No public API breakage, no behavior change to existing call sites, no Rust source changes. The v1.4.2 compiled binding is byte-identical for this release — users on v1.4.2 do not need to rebuild Rust to pick up v1.4.3. Smoke regression on test_range.py (22 tests) and test_hunl_config_validation.py (28 tests) all green. No new persona workflow structurally unblocked beyond v1.4.1; PR 27 enables the W2.2 categorical-leak-slice workflow at the set-membership level (utility-level convenience).