v0.9.2 — Duplicate Reservation ID Fix
v0.9.2 — Reservation Identity & Accounting Integrity Patch
🐛 Bug Fixed
Duplicate reservation IDs could silently overwrite active reservations.
Previously:
reserve("r1", 0.50) → Map["r1"] = 0.50, _totalReserved += 0.50
reserve("r1", 0.25) → Map["r1"] = 0.25, _totalReserved += 0.25
// Result: Map has 0.25, but _totalReserved = 0.75
// The 0.50 reservation is orphaned — cannot be settled or released
Now: reserve() rejects duplicate IDs, preserving accounting integrity.
🛡️ Regression Tests
11 new tests covering:
- Duplicate ID rejection (returns null)
- No modification to existing reservation amount
- No increase in totalReserved
- Release/settle after rejected duplicate
- Repeated duplicate attempts (100×)
- Duplicate IDs under concurrency (1000 calls)
- Random collision scenarios (1000 iterations, 4-ID pool)
- Reserve after settle/release frees the ID
- Client-generated IDs are verified unique
772 Tests Passing
Changelog: https://github.com/Hilbras/Hilbras-ai-sdk/blob/main/CHANGELOG.md