SDK hardening: rebalance reads, exposure/fee contracts, governance state derivation - #27
Conversation
…ivation; test(rebalance): unmocked zero-price/supply + golden openAuction calldata
…imepoint over wall clock - a PENDING proposal past its deadline resolves to the vote/quorum outcome like stale ACTIVE (OZ Governor.state() semantics) — never EXPIRED - getYieldDtfProposals reads one latest block per request and derives Anastasius from block.timestamp, Alexios from block.number; the consumer machine's clock is never consulted
A zero denominator is an impossible fee tuple, not a 0% fee (numerator=0 over a positive denominator is the real 0%). Mapping it to percent:0 fabricated a confident 0% for an invalid registry response — the same class as a fabricated 50%. Now throws INVALID_RESPONSE so consumers render 'unavailable'.
…ngMarketCap, native/bridge) The exposure endpoint (which Register consumes) returned ytd data, per-token underlyingMarketCap, and typed native/bridge metadata, but the SDK types declared period without ytd, omitted underlyingMarketCap, and left native/bridge as unknown — forcing consumers to cast. Types now match the response; fixture pins the fields.
…ularity) The /historical/dtf endpoint serves 5m data for the 24h range, but the interval union only declared 1h|1d, forcing consumers to cast. Widened both the public param and the API-layer types; fixture pins the 5m passthrough.
The Reserve API /dtf/rebalance nonce query returns a single-element ARRAY, not an object (verified against api.reserve.org, base/lcap nonces 1-5). getCompletedRebalance read it as an object, so the mapper received the array, .auctions was undefined, and it threw INVALID_RESPONSE on every real response — the read was broken end-to-end, unnoticed because it had no consumer. Fixes: - Normalize the single-element-array envelope inside the client api method (getIndexDtfRebalanceDetail stays singular); throw RECORD_NOT_FOUND on empty. - Complete IndexDtfCompletedRebalanceDetail with the analytics fields the detail surface renders (avgPriceImpactPercent, totalPriceImpactUsd, marketCapRebalanceImpact, tracking/nativeBasketDeviation) so consumers can drop the raw /dtf/rebalance fetch. - Keep the mapper fail-loud on a truly-absent auctions field: auctions is always present ([] when none ran), so absence is malformed, not '0 auctions'. Tests: array-unwrap + not-found (api), singular map (index), normal/present-empty/ malformed (mappers).
|
Warning Review limit reached
Next review available in: 48 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThis PR updates SDK governance state derivation, rebalance and exposure contracts, account snapshot and performance APIs, catalog-backed status lookups, normalized brand data, React hooks, release validation, licensing, and related documentation. ChangesGovernance state derivation
Rebalance and SDK data contracts
Account and display APIs
Release validation and documentation
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/sdk/src/index-dtf/dtf/exposure.test.ts`:
- Around line 13-20: Run oxfmt across the affected test files and commit the
resulting formatting changes: format the long object literals in
packages/sdk/src/index-dtf/dtf/exposure.test.ts lines 13-20,
packages/sdk/src/index-dtf/dtf/price-history.test.ts lines 16-18, and
packages/sdk/src/index-dtf/dtf/platform-fee.test.ts lines 12-18 so the oxfmt
check passes.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: cc8def9e-e80d-485c-af38-a4f592bece11
📒 Files selected for processing (25)
.changeset/strict-tie-semantics.mddocs/wiki/domains/sdk.mddocs/wiki/log.mddocs/wiki/progress.mdpackages/sdk/src/client/api.test.tspackages/sdk/src/client/api/index.tspackages/sdk/src/index-dtf/dtf/exposure.test.tspackages/sdk/src/index-dtf/dtf/exposure.tspackages/sdk/src/index-dtf/dtf/platform-fee.test.tspackages/sdk/src/index-dtf/dtf/platform-fee.tspackages/sdk/src/index-dtf/dtf/price-history.test.tspackages/sdk/src/index-dtf/governance/utils.test.tspackages/sdk/src/index-dtf/governance/utils.tspackages/sdk/src/index-dtf/rebalance/index.test.tspackages/sdk/src/index-dtf/rebalance/mappers.test.tspackages/sdk/src/index-dtf/rebalance/mappers.tspackages/sdk/src/index-dtf/rebalance/open-auction.integration.test.tspackages/sdk/src/index-dtf/rebalance/types.tspackages/sdk/src/index.tspackages/sdk/src/types/api.tspackages/sdk/src/types/index-dtf.tspackages/sdk/src/types/yield-dtf.tspackages/sdk/src/yield-dtf/governance.test.tspackages/sdk/src/yield-dtf/governance.tspackages/sdk/src/yield-dtf/index.ts
…te outcome, never EXPIRED FolioGovernor.state() never returns Expired for an unqueued proposal — past the deadline it derives Defeated/Succeeded from the votes. A subgraph state stuck PENDING past voteEnd now resolves like a stale ACTIVE (tie/zero-for -> DEFEATED, under quorum -> QUORUM_NOT_REACHED, else SUCCEEDED), mirroring the yield-side getYieldDtfProposalState semantics. Optimistic paths and the exact-boundary (<=) behavior are unchanged; the shared outcome logic is extracted as getStandardFinalState next to getOptimisticFinalState.
The release changes behavior and types 0.4.x consumers depend on: YieldDtfProposalState gained QUORUM_NOT_REACHED, rebalance detail auctions went optional->required, and getIndexDtfPlatformFee throws where it returned 0%. Those (plus the exposure typing and 5m interval additions) get minor changesets; the stale-PENDING outcome derivation stays a patch note.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
packages/sdk/src/index-dtf/governance/utils.ts (1)
128-138: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSimplify control flow to match the
ACTIVEbranch.You can consolidate the
timestamp > proposal.voteEndchecks to match the structure of theACTIVEbranch. This makes the logic easier to follow and ensures consistent grouping of optimistic and standard finalization.♻️ Proposed refactor
- } else if (timestamp > proposal.voteEnd && isOptimistic) { - state.state = getOptimisticFinalState(proposal, optimisticVetoThresholdVotes); - } else if (timestamp <= proposal.voteEnd) { - state.state = "ACTIVE"; - state.deadline = proposal.voteEnd - timestamp; - } else { - // WHY: past the deadline FolioGovernor.state() derives Defeated/Succeeded - // from the vote counts even if the ACTIVE transition was never indexed — - // a stale PENDING is never EXPIRED (that is a queue-lifecycle state). - state.state = getStandardFinalState(proposal); - } + } else if (timestamp > proposal.voteEnd) { + // WHY: past the deadline FolioGovernor.state() derives Defeated/Succeeded + // from the vote counts even if the ACTIVE transition was never indexed — + // a stale PENDING is never EXPIRED (that is a queue-lifecycle state). + state.state = isOptimistic + ? getOptimisticFinalState(proposal, optimisticVetoThresholdVotes) + : getStandardFinalState(proposal); + } else { + state.state = "ACTIVE"; + state.deadline = proposal.voteEnd - timestamp; + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/sdk/src/index-dtf/governance/utils.ts` around lines 128 - 138, Refactor the branching around timestamp and proposal.voteEnd so the timestamp > proposal.voteEnd cases are grouped together, with optimistic finalization via getOptimisticFinalState when isOptimistic and standard finalization via getStandardFinalState otherwise. Preserve the existing ACTIVE state and deadline assignment for timestamps at or before proposal.voteEnd.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/sdk/src/index-dtf/governance/utils.ts`:
- Around line 128-138: Refactor the branching around timestamp and
proposal.voteEnd so the timestamp > proposal.voteEnd cases are grouped together,
with optimistic finalization via getOptimisticFinalState when isOptimistic and
standard finalization via getStandardFinalState otherwise. Preserve the existing
ACTIVE state and deadline assignment for timestamps at or before
proposal.voteEnd.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 7e25243f-0803-4357-99d3-1a03542685d8
📒 Files selected for processing (8)
.changeset/exposure-api-types.md.changeset/platform-fee-invalid-response.md.changeset/price-history-5m-interval.md.changeset/rebalance-detail-contract.md.changeset/stale-pending-outcomes.md.changeset/strict-tie-semantics.mdpackages/sdk/src/index-dtf/governance/utils.test.tspackages/sdk/src/index-dtf/governance/utils.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- .changeset/strict-tie-semantics.md
IndexDtfBrand is now the exact shape consumers store: nested dtf block, creator/curator/socials always present, absent API values coerced to '' defaults, basketType narrowed to percentage-based | unit-based. Removes the need for app-side brand mapping layers.
getIndexDtfStatus({ address, chainId }) reads dtf-catalog directly with
case-insensitive address matching; absent entries are active. getFull and
ref.getStatus share the same lookup. useIndexDtfStatus becomes a trivial
sync wrapper; the async /discover scan, indexDtfStatusQueryOptions and the
status query key are gone.
…t, raw cache preserved
…ply (raw contract)
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
packages/sdk/src/index-dtf/dtf/mappers.ts (1)
187-201: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMinor inconsistency:
basketTypeisn't normalized like the other fields.Every other string field routes through
nonEmpty()(trims whitespace, treats blank as absent) before defaulting.basketTypeinstead does a raw strict-equality check, so a value like" unit-based"or"Unit-Based"would silently fall back to"percentage-based"instead of erroring or matching. Low risk today, but worth aligning for consistency.♻️ Optional normalization
- basketType: dtf?.basketType === "unit-based" ? "unit-based" : "percentage-based", + basketType: nonEmpty(dtf?.basketType)?.trim().toLowerCase() === "unit-based" ? "unit-based" : "percentage-based",🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/sdk/src/index-dtf/dtf/mappers.ts` around lines 187 - 201, The dtf mapping’s basketType handling in the visible dtf mapper does not normalize input consistently with the other fields. Update basketType to pass through the existing nonEmpty normalization before determining the supported value, preserving unit-based for normalized unit-based input and the existing percentage-based fallback otherwise.packages/react-sdk/src/index-dtf/use-index-dtf-performance.test.tsx (1)
42-45: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd a test case for zero values.
To prevent regressions, it is recommended to add a test case verifying that the live point is appended correctly when
currentPriceandcurrentTotalSupplyare explicitly0.🧪 Proposed test addition
const composed = composeIndexDtfPerformance(points, 2, 100); expect(composed).toHaveLength(2); expect(composed[1]).toMatchObject({ price: 2, marketCap: 200, totalSupply: 100 }); + + const composedZero = composeIndexDtfPerformance(points, 0, 0); + expect(composedZero).toHaveLength(2); + expect(composedZero[1]).toMatchObject({ price: 0, marketCap: 0, totalSupply: 0 }); });🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/react-sdk/src/index-dtf/use-index-dtf-performance.test.tsx` around lines 42 - 45, Add a test case in the composeIndexDtfPerformance tests that calls the function with currentPrice and currentTotalSupply explicitly set to 0, then verifies the live point is appended and retains those zero values. Keep the existing positive-value assertions unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/react-sdk/src/index-dtf/use-index-dtf-performance.ts`:
- Line 50: Update the live-point condition in the index DTF performance hook to
accept zero-valued currentPrice and currentTotalSupply by checking each
explicitly against undefined. Preserve the existing last-point timestamp guard
and append behavior.
In `@packages/react-sdk/src/index.ts`:
- Around line 213-227: Format and sort the newly added exports in the package
entrypoint according to the repository’s oxfmt configuration, including the
composeIndexDtfPerformance, dedupeIndexDtfPricePoints, useIndexDtfPerformance,
and useAccountBalancePnl exports and their associated type exports. Preserve the
exported symbols and module paths while ensuring the file passes the formatter
check.
---
Nitpick comments:
In `@packages/react-sdk/src/index-dtf/use-index-dtf-performance.test.tsx`:
- Around line 42-45: Add a test case in the composeIndexDtfPerformance tests
that calls the function with currentPrice and currentTotalSupply explicitly set
to 0, then verifies the live point is appended and retains those zero values.
Keep the existing positive-value assertions unchanged.
In `@packages/sdk/src/index-dtf/dtf/mappers.ts`:
- Around line 187-201: The dtf mapping’s basketType handling in the visible dtf
mapper does not normalize input consistently with the other fields. Update
basketType to pass through the existing nonEmpty normalization before
determining the supported value, preserving unit-based for normalized unit-based
input and the existing percentage-based fallback otherwise.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 4caf969a-afdb-495e-bf73-3b60055424d8
📒 Files selected for processing (27)
.changeset/account-balance-pnl.md.changeset/brand-display-shape.md.changeset/index-dtf-performance-hook.md.changeset/status-sync-catalog.mdpackages/react-sdk/src/index-dtf-extra-hooks.tspackages/react-sdk/src/index-dtf-query-options.tspackages/react-sdk/src/index-dtf/use-account-balance-pnl.test.tsxpackages/react-sdk/src/index-dtf/use-account-balance-pnl.tspackages/react-sdk/src/index-dtf/use-index-dtf-performance.test.tsxpackages/react-sdk/src/index-dtf/use-index-dtf-performance.tspackages/react-sdk/src/index.tspackages/react-sdk/src/query-keys.tspackages/react-sdk/src/use-index-dtf-status.test.tsxpackages/sdk/src/index-dtf/dtf/account-pnl.test.tspackages/sdk/src/index-dtf/dtf/account-pnl.tspackages/sdk/src/index-dtf/dtf/discovery.test.tspackages/sdk/src/index-dtf/dtf/discovery.tspackages/sdk/src/index-dtf/dtf/index.test.tspackages/sdk/src/index-dtf/dtf/index.tspackages/sdk/src/index-dtf/dtf/mappers.tspackages/sdk/src/index-dtf/dtf/status.test.tspackages/sdk/src/index-dtf/dtf/status.tspackages/sdk/src/index-dtf/index.tspackages/sdk/src/index-dtf/namespace.tspackages/sdk/src/index-dtf/ref.tspackages/sdk/src/index.tspackages/sdk/src/types/index-dtf.ts
💤 Files with no reviewable changes (3)
- packages/sdk/src/index-dtf/dtf/discovery.ts
- packages/react-sdk/src/index-dtf-query-options.ts
- packages/sdk/src/index-dtf/dtf/discovery.test.ts
…s out of the SDK sdk keeps transport + data-hygiene primitives (snapshot read, selectPriceAtMark); react-sdk is strictly the hook-per-read access layer, gaining useIndexDtfAccountBalanceSnapshot and usePrefetchIndexDtfPriceHistory (so apps never touch the sdk client directly). useAccountBalancePnl and calculateAccountBalancePnl are deleted — a product metric like week-ago PnL is app-side composition; its semantics change on design revisions, not protocol versions, so it doesn't belong here.
- Live performance point accepts zero price/supply (defined-ness gate, not truthiness) with zero-vector regressions; prefetch covered by test. - selectPriceAtMark is timestamp-aware with an optional mark (defaults to the old latest-positive behavior); snapshot read wired through namespace, ref, query options and hook, with a hook test. - getIndexDtfStatus validates/normalizes the address before the catalog lookup. - Brand normalization + governance control-flow cleanup; fresh GraphQL output. - LICENSE shipped in all package tarballs.
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/wiki/log.md (1)
22-25: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winCorrect the block-fetch wording.
packages/sdk/src/yield-dtf/governance.tsfetches a block whenever anyPENDINGorACTIVEproposal exists, including Anastasius proposals that useblock.timestamp; it is not limited to non-terminal Alexios proposals.Suggested wording
-- fetching the block number only when a non-terminal Alexios proposal needs it. +- fetching one latest block when a non-terminal proposal needs a chain timepoint (timestamp for Anastasius or block number for Alexios).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/wiki/log.md` around lines 22 - 25, Update the 2026-07-14 governance-hardening bullet in docs/wiki/log.md so its description of getYieldDtfProposalState accurately states that block data is fetched whenever a PENDING or ACTIVE proposal exists, including Anastasius proposals using block.timestamp, rather than limiting this behavior to non-terminal Alexios proposals.
🧹 Nitpick comments (2)
packages/react-sdk/src/hooks.ts (1)
125-142: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winPass
staleTimedirectly.Line 138 adds conditional-spread noise; use
{ staleTime }unless this package’s exact optional-property configuration rejectsundefined.Proposed fix
queryClient.prefetchQuery({ ...indexDtfPriceHistoryQueryOptions(sdk, params), - ...(staleTime !== undefined ? { staleTime } : {}), + staleTime, }),As per coding guidelines, use
{ value }rather than...(value === undefined ? {} : { value })unless omission is needed for exact optional typing or serialization behavior.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/react-sdk/src/hooks.ts` around lines 125 - 142, Update usePrefetchIndexDtfPriceHistory to pass staleTime directly in the prefetchQuery options object, replacing the conditional spread with the concise { staleTime } form unless the package’s exact optional-property typing requires omission of undefined.Source: Coding guidelines
.github/workflows/ci.yml (1)
47-48: 🩺 Stability & Availability | 🔵 TrivialBound the live-schema codegen check.
This step invokes GraphQL Codegen against remote schemas, and
pnpm release:cinow runs the same check during publication. The wrapper has no process timeout, so a schema-provider stall can hold CI or release jobs until the runner timeout; add a bounded timeout or explicit job-level timeout.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ci.yml around lines 47 - 48, Bound the GraphQL Codegen Check step so remote schema stalls cannot hang CI or release jobs indefinitely. Add an explicit timeout to the step or its enclosing job, preserving the existing pnpm graphql:codegen:check command and ensuring the timeout applies to this live-schema validation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/docs/src/pages/react-sdk/index-dtf-hooks.mdx`:
- Line 73: Update the `select` documentation in the React SDK hooks page so it
applies only to ordinary query-backed hooks, explicitly excluding
`useIndexDtfStatus` and `useIndexDtfPerformance`; preserve the existing guidance
to use `usePrefetchIndexDtfPriceHistory` for canonical price-history keys.
In `@docs/wiki/domains/sdk.md`:
- Line 29: Update the documentation sentence to hyphenate the compound modifier,
changing “GraphQL generated output” to “GraphQL-generated output” while
preserving the rest of the statement.
- Around line 26-31: Clarify the proposal-state bullet to explicitly scope its
vote, quorum, deadline, and subgraph-lag behavior to Index DTFs, or revise the
adjacent proposal-ID and Yield detail bullets so their Index-versus-Yield
distinctions are unambiguous. Preserve the stated Yield proposal-list and
detail-state behavior.
---
Outside diff comments:
In `@docs/wiki/log.md`:
- Around line 22-25: Update the 2026-07-14 governance-hardening bullet in
docs/wiki/log.md so its description of getYieldDtfProposalState accurately
states that block data is fetched whenever a PENDING or ACTIVE proposal exists,
including Anastasius proposals using block.timestamp, rather than limiting this
behavior to non-terminal Alexios proposals.
---
Nitpick comments:
In @.github/workflows/ci.yml:
- Around line 47-48: Bound the GraphQL Codegen Check step so remote schema
stalls cannot hang CI or release jobs indefinitely. Add an explicit timeout to
the step or its enclosing job, preserving the existing pnpm
graphql:codegen:check command and ensuring the timeout applies to this
live-schema validation.
In `@packages/react-sdk/src/hooks.ts`:
- Around line 125-142: Update usePrefetchIndexDtfPriceHistory to pass staleTime
directly in the prefetchQuery options object, replacing the conditional spread
with the concise { staleTime } form unless the package’s exact optional-property
typing requires omission of undefined.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 0bf90b63-2109-477a-a50f-d9d8b838eb90
⛔ Files ignored due to path filters (1)
packages/sdk/src/index-dtf/subgraph/dtf.generated.tsis excluded by!**/*.generated.*
📒 Files selected for processing (51)
.changeset/account-balance-pnl.md.changeset/status-sync-catalog.md.github/workflows/ci.yml.github/workflows/publish.ymlLICENSEREADME.mdapps/docs/src/pages/protocol/data-sources.mdxapps/docs/src/pages/react-sdk/index-dtf-hooks.mdxapps/docs/src/pages/sdk/index-dtf.mdxdocs/index-dtf/discovery-holders.mddocs/index-dtf/issuance-redemption.mddocs/plans/register-index-dtf-react-sdk-migration.mddocs/protocol/data-sources.mddocs/register/interface.mddocs/wiki/decisions.mddocs/wiki/domains/react-sdk.mddocs/wiki/domains/sdk.mddocs/wiki/log.mddocs/wiki/progress.mddocs/wiki/project.mdpackage.jsonpackages/dtf-catalog/LICENSEpackages/react-sdk/LICENSEpackages/react-sdk/README.mdpackages/react-sdk/src/hooks.tspackages/react-sdk/src/index-dtf-extra-hooks.tspackages/react-sdk/src/index-dtf-query-options.tspackages/react-sdk/src/index-dtf/use-index-dtf-performance.test.tsxpackages/react-sdk/src/index-dtf/use-index-dtf-performance.tspackages/react-sdk/src/index.tspackages/react-sdk/src/query-options.test.tspackages/react-sdk/src/use-index-dtf-account-balance-snapshot.test.tsxpackages/sdk/LICENSEpackages/sdk/src/index-dtf/dtf/account-pnl.test.tspackages/sdk/src/index-dtf/dtf/account-pnl.tspackages/sdk/src/index-dtf/dtf/discovery.test.tspackages/sdk/src/index-dtf/dtf/exposure.test.tspackages/sdk/src/index-dtf/dtf/index.test.tspackages/sdk/src/index-dtf/dtf/mappers.tspackages/sdk/src/index-dtf/dtf/platform-fee.test.tspackages/sdk/src/index-dtf/dtf/price-history.test.tspackages/sdk/src/index-dtf/dtf/status.test.tspackages/sdk/src/index-dtf/dtf/status.tspackages/sdk/src/index-dtf/governance/utils.tspackages/sdk/src/index-dtf/index.tspackages/sdk/src/index-dtf/namespace.test.tspackages/sdk/src/index-dtf/namespace.tspackages/sdk/src/index-dtf/rebalance/index.test.tspackages/sdk/src/index-dtf/ref.tspackages/sdk/src/index.tspackages/sdk/src/yield-dtf/governance.ts
💤 Files with no reviewable changes (2)
- packages/sdk/src/index-dtf/dtf/price-history.test.ts
- packages/sdk/src/index.ts
🚧 Files skipped from review as they are similar to previous changes (15)
- packages/sdk/src/index-dtf/dtf/exposure.test.ts
- packages/sdk/src/index-dtf/dtf/platform-fee.test.ts
- packages/sdk/src/index-dtf/ref.ts
- packages/sdk/src/index-dtf/rebalance/index.test.ts
- .changeset/status-sync-catalog.md
- packages/sdk/src/index-dtf/dtf/index.test.ts
- packages/react-sdk/src/index-dtf/use-index-dtf-performance.ts
- packages/sdk/src/index-dtf/dtf/status.ts
- packages/react-sdk/src/index-dtf-query-options.ts
- docs/wiki/progress.md
- packages/sdk/src/index-dtf/namespace.ts
- packages/sdk/src/index-dtf/index.ts
- packages/sdk/src/index-dtf/dtf/discovery.test.ts
- packages/sdk/src/index-dtf/dtf/status.test.ts
- packages/sdk/src/index-dtf/dtf/mappers.ts
SDK-side hardening changes backing the register hardening effort.
Rebalance
openAuctioncalldata integration test; unmocked zero-price/supply coverage.Index DTF data contracts
underlyingMarketCap, native/bridge), dropping the need for consumer casts.5mfor the 24h chart granularity.Governance
Includes accompanying unit tests and a changeset.
Summary by CodeRabbit
New Features
Bug Fixes
Documentation