Ethereum contracts deployedTransactions may use real assets. Primary-market minting and instant redemption are KYC-gated; deployment does not mean every product or entry path is open. Review the legal and risk disclosures.

Protocol fee stack, dual-NAV re-check

Internal review. This is an internal engineering review of source, not an independent external audit, and it does not by itself authorize a production launch. It reviews the source at the baseline below, which is not necessarily identical to the code deployed on any network. Forest Road Vault is live on Ethereum mainnet; its Solana curator vault remains on devnet and BSC has its own deployment status. An open finding applies only to the product, version and deployment state named by this review. Each review's scope bounds what its clean result is worth. Nothing here is a securities-law representation; token characterization is a matter for counsel.

Scope
The dual-NAV remediation of the Round 11 findings: performance-fee impairment, share-flow HWM accounting, backstop replacement, and the queue and invariant assurance surfaces.
Method
Sixty-four agents, 26 raw candidates, two-lens refutation, arithmetic re-derivation, production-path tracing, evidence reproduction, and a completeness critic.

Findings and remediation history

  • R12-01HighRemediated

    A junior-supported exit carries the performance hurdle at the redemption price and transfers deferred fee exposure to stayers

    The pre-remediation exit preserved the absolute drawdown by subtracting the physical redemption payout from a hurdle denominated in the lower performance-fee NAV. A later cure therefore charged the same absolute profit after shares had left. The required rule is the greater of physical asset carry and the pre-flow hurdle's pro-rata carry. Round 13 confirms that rule independently: converting the pro-rata carry back into a per-share rate leaves it exactly unchanged, and the maximum is never below it, so the stored per-share high-water mark is monotonically non-decreasing across every exit in every reachable state. The failure direction is now structurally impossible rather than merely absent. Round 13 does find that the entry and exit laws are not composable, filed separately as R13-01, protocol-harming rather than holder-harming.

  • R12-02MediumRemediated

    The queue assurance tier cannot construct or independently judge the production dual-NAV state

    The mock used one slot for both impairment views, the real assessed-source fixture lacked an exit handler, and the legality witness consulted the HWM under test. Round 13 confirms all three are closed: the mock now carries an independently settable performance view: the queue handler can drive the two NAVs apart, and the new invariant derives its reference law without consulting the post-flow high-water mark. A residual remains, the reference law restates the production expression and is evaluated one operation at a time, so a composition defect stays outside its frame. Filed separately as R13-05.

  • R12-03MediumRemediated

    An entrant during a global deferral window can pay performance fees on pre-arrival gains without an exit-impairment signal

    The deposit arithmetic is internally consistent, but the HWM is global rather than per investor. When junior capital makes redemption NAV healthy while fee NAV remains below the hurdle: a new depositor can share a later crystallization. The disclosure now exists on the staking interface, which is the right remedy for a pooled high-water mark that cannot be made per-investor without lots or share classes. Round 13 finds its trigger fires on one wei of rounding dust, so it displays permanently on a healthy vault, filed separately as R13-06.

  • R12-04MediumRemediated

    A legacy proxy with a zero HWM seeds against the lower fee NAV during a junior-covered impairment

    The upgrade-only seed anchored rather than ratcheted, so rebasing performance accounting onto the lower view could turn pre-upgrade value into later profit. The seed now anchors to the higher redemption base, which closes the junior-covered portion of the mismatch, and the added regression pins it. Round 13 finds the senior-marked portion survives, the residual equals the live pending senior mark at seed time, and the anchor that is neutral in both terminal states is the realized asset base. Filed separately as R13-02.

  • R12-05MediumRemediated

    Management/performance sequencing has no discriminating divergent-NAV coverage

    Every prior management-fee test made the two NAV views equal, where the rewritten formula algebraically collapses to the old one. Round 13 confirms the gap is closed: a value-asserting case now runs the management fee at its cap against genuinely distinct views, computing its expectations independently rather than restating the implementation, and verifies management dilution before performance crystallization.

  • R12-06LowRemediated

    Backstop rotation prices elapsed management fees at replacement NAV even when the outgoing dependency is readable

    Always using effects-first ordering is necessary only for repair of an unreadable outgoing backstop. The rotation now probes the outgoing dependency, checkpoints before a healthy rotation, and falls back to effects-first only for one-transaction repair. Round 13 verified the checkpoint pairing by inspection, exactly one open on every path, always followed by the single close, with the no-op early exit skipping both, so the lock cannot strand. The regression added for it is vacuous, however: its fixture never reaches a state in which the outgoing backstop is read. Filed separately as R13-03.

Why this round exists

The preceding remediation separated redemption NAV from performance-fee NAV so temporary junior protection could support exits without being mistaken for investment performance. That removed the bracket-driven high-water-mark mutations reported in the prior round.

This round reviewed that dual-NAV change. It confirmed all four prior code findings were closed, but found that the same unit mismatch survived on the exit leg: the performance hurdle was denominated in performance NAV while the amount carried out was measured at the higher redemption price.

How it was run

The review used 64 agents, produced 26 raw candidates, retained 16 after two-lens refutation, and consolidated the surviving issues into code and completeness findings. The review re-derived the arithmetic from source, traced the permissionless past-due and queue paths, reproduced the stated local test and bytecode-size figures, and inspected whether the invariant harness could construct the production dual-NAV state.

What the preceding remediation got right

The assessment-invalidating bracket defect is structurally gone: endFeeNeutralMarkedNavChange only releases the lock, and junior-capacity changes do not write the HWM. Performance-fee impairment no longer contains live curator or backstop capacity, so temporary netting cannot permanently raise or lower the fee hurdle.

The replacement-backstop probe is also genuine and restores the one-transaction self-repair path. The assessment snapshot's presence bit and the ordering between redemption and performance impairment were independently checked and found sound.

High finding: an exit carried the hurdle at the wrong price

Let:

  • R be redemption NAV, after temporary junior-capital netting;
  • P be performance-fee NAV, before that temporary credit; and
  • H be the asset-denominated performance hurdle.

During a junior-covered workout, R can be greater than P. An exit pays its share of R, but the pre-remediation helper subtracted that physical payout directly from H. That preserved the absolute H - P drawdown rather than its per-share value. The exiting holder could therefore leave their deferred fee exposure with the remaining holders. A later cure charged the same absolute profit even though only a fraction of the original shares remained.

This creates a permissionless run incentive: request and settle an exit while junior capital supports redemption NAV, then let stayers absorb the deferred performance fee when the impairment cures.

The required carry is the greater of two independently meaningful quantities:

  1. the asset carry, max(H - assetsPaid, 0), which protects stayers in a genuine drawdown; and
  2. the pro-rata carry, ceil(H × postFlowVirtualSupply / preFlowVirtualSupply), which keeps the leaver's share of deferred fee exposure with the shares that leave.

Neither term can replace the other safely. The maximum selects the protective rule for the valuation regime actually in force.

Remaining findings

The review also reported:

  • the queue assurance tier could not construct divergent redemption and performance NAVs, and its fee-legality witness depended on the HWM being tested;
  • an entrant during a global fee-deferral window could later pay a share of pre-arrival performance without any ERC-4626 redemption impairment signalling it;
  • the legacy-proxy zero-HWM upgrade seed anchored to the new lower performance base;
  • management/performance sequencing had no test that could distinguish the new formula because every existing case used equal NAV views; and
  • setBackstop always used effects-first ordering, billing elapsed management fees at the replacement NAV even when the outgoing dependency was healthy.

Subsequent remediation in the working tree

The working tree now implements the two-term maximum on exits. The regression first reproduced the reported cure overcharge, then verifies that a half exit carries exactly the correct remaining hurdle and cannot transfer deferred performance-fee exposure to stayers.

The queue handler can now drive redemption and performance impairment independently. Its named HWM property derives the expected post-flow hurdle from pre-flow assets and supply rather than treating the HWM itself as proof that a fee was legitimate. A separate integration uses the production AssessedImpairmentSource wiring with a live queue exit.

The legacy zero-HWM path anchors to the higher redemption base. A distinct-NAV test now discriminates management-fee sequencing from performance-fee sequencing. setBackstop checkpoints before rotation when the outgoing dependency is readable, while retaining effects-first recovery when it is not. The staking interface warns when performance-fee NAV is below the global HWM and explicitly says the mark is not personal to the depositor.

Local verification of the remediation

The current candidate reports:

  • 936 passing, 0 failing, and 183 RPC-dependent skipped tests in both optimized and coverage profiles;
  • 2,809/2,811 production lines, 438/443 branches, and 492/492 source-defined functions covered;
  • 60/60 heavy invariant properties at 512 runs by 256 depth, with zero handler reverts;
  • 181/181 pinned Ethereum-mainnet fork tests and 3/3 tests against the existing Sepolia deployment;
  • 18/18 storage-layout structures matched;
  • 98 Slither results matched by 92 reviewed fingerprints;
  • zero-counterexample backing and cascade symbolic checks; and
  • frontend logic, 395/395 contract-sync checks, 10/10 mounted render tests, lint, TypeScript, dependency audit, and an explicit-Sepolia build passing.

The changed sUSDfr runtime is 24,221 bytes, leaving 355 bytes below the EIP-170 limit. That margin is a maintenance constraint, not a security claim.

Status

The findings in this historical review remain open until the external reviewer confirms the remediation delta. The evidence above is local engineering evidence, not an external closure opinion. No deployment or broadcast occurred, and prior mainnet deployment or artifact receipts do not identify this changed source.

Earlier roundProtocol fee stack, remediation re-check→