Skip to content

Feat/safety circuit breaker#18

Merged
jayeshy14 merged 2 commits into
mainfrom
feat/safety-circuit-breaker
Jun 30, 2026
Merged

Feat/safety circuit breaker#18
jayeshy14 merged 2 commits into
mainfrom
feat/safety-circuit-breaker

Conversation

@jayeshy14

Copy link
Copy Markdown
Owner

No description provided.

A single stale feed previously reverted the whole rebalance, because
getWeights priced every constituent. The rebalancer now weights and trades
over the FRESH subset, so the healthy names rebalance while a quarantined name
is held marked-down (Section 4) until its feed recovers.

- openEpoch and maxDriftBps build a fresh subset (constituents whose feeds are
  not quarantined) and call getWeights over it, so a stale feed no longer
  reverts the trigger or the snapshot. maxDriftBps keeps a fresh-index cursor
  aligned to the full holdings array.
- A quarantined name is excluded from the epoch entirely: not targeted, and
  validateOrder's inEpoch check rejects any order for it. This is the Section
  16.5 stale-feed special case: the name cannot be priced, so it cannot be
  sold either (sellMinOut anchors to the failed oracle), so it is held rather
  than wound down until the feed recovers.

Completes the Section 4 safety layer (quarantine, circuit breaker, rebalance
around quarantine). 3 new tests, 162 total green.
feat(rebalancer): rebalance around a quarantined constituent (Section 4)
@jayeshy14 jayeshy14 merged commit 2be176c into main Jun 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant