Repository navigation
Add per-underlying, per-strike-bucket, and per-expiry exposure limits - #353
Merged
techisigu merged 8 commits intoOct 24, 2026
Merged
Conversation
…Expiry Concentrat Closes Zenith-options#273
…isting, and Compl Closes Zenith-options#274
…evalidation, and Closes Zenith-options#276
|
@emilylevi025-wq Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
- src/env.ts: merged [markers] — model resolved the conflict markers - src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers Co-authored-by: Simple Agent <agent@simple.dev>
- src/lib/api/vaults.ts: merged [markers] — model resolved the conflict markers Co-authored-by: Simple Agent <agent@simple.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add per-underlying, per-strike-bucket, and per-expiry exposure limits
What was solved
#273 — Implement Per-Underlying, Strike-Bucket, and Expiry Concentration Limits With Position-Sizing Policies
Add a declarative exposure-policy layer to the vault: per-underlying, per-strike-bucket (moneyness band), and per-expiry limits as fractions of committed-epoch NAV, evaluated by one shared
evaluate_exposure()used by both a pre-submission sizing step and contract-boundary enforcement. Sizing clamps requested notional to the tightest remaining headroom and records the clamp decision (reason, remaining headroom) for observability. Limits are configurable per vault through the existing timelock/multisig parameter-change workflow with an emitted event, validated on write so they cannot be jointly unsatisfiable, and degrade gracefully (block new writes, allow roll-off) when a vault is already over a tightened limit. Out of scope: drawdown circuit breakers, oracle mark-to-market valuation authority, and the strategy modules themselves.Addressed:
#274 — Implement Share Transfer Restrictions, Allowlisting, and Compliance Hooks for Vault LP Shares
Add a configurable transfer-restriction layer to vault LP shares: per-vault policy (OPEN / ALLOWLISTED / BLOCKED), a versioned allowlist/denylist with deny-wins resolution, a single can_transfer(from, to) gate used by all transfer paths, exemptions for the contract itself and the redemption queue, a compliance hook surface (pre-transfer advisory + post-settlement reconciliation feed), and surfacing policy/allowlist state in the depositor disclosure and transparency UI. Redemptions and forced burns must always succeed under every policy.
Addressed:
#276 — Implement Frontend Vault Read-Path Caching, Revalidation, and Optimistic Deposit/Withdrawal State
Add a shared client-side data layer for vault reads and mutations: a cache keyed by vault id and epoch with configurable NAV staleness, explicit invalidation after deposit/withdraw/epoch-close/operator actions, optimistic deposit/withdraw state that reconciles or rolls back, and typed query/mutation hooks exposed from src/lib/api/vaults.ts so components cannot bypass the cache. Revalidation policy must be documented per surface and avoid duplicate fetches on pages already receiving WebSocket ticks, with distinct loading/empty/stale/offline states. Server-side caching/pagination for vault list and epoch history is explicitly out of scope.
Addressed:
Changes
src/env.ts(modify)src/lib/api/vaults.ts(modify)Approach
Issues
Closes #273
Closes #274
Closes #276