2026-06-19vault v1.2.0
True rolling 24h cap window; role-distinctness enforced on rotation. External bounty fix.
- •Daily cap is now a true rolling 24h window (25 one-hour buckets, strict ≥24h floor) — closes a fixed/tumbling-window edge that allowed up to 2× dailyCap across the boundary. Reported by an external researcher; confirmed and credited.
- •attestWithdraw validUntil bounded to ≤ now + 24h (AttestExpiryTooFar).
- •Role separation (operator ≠ guardian ≠ governance) now enforced on rotateOperator / rotateGuardian / nominateGovernance / acceptGovernance — previously construction-only.
- •New vault deployed at 0xd25d…4DF5; 4 USDC migrated from v1.1.0 via the capped operator path (no governance drain function — governance still cannot unilaterally move funds).
- •Source verified on Sourcify (exact_match); 44 Foundry tests; independent multi-agent re-audit before cutover. v1.1.0 paused.