Conversation
1. rebalance guide review 2. builders page re-work 3. draft for basic stVault building guide 4. updated the onboarded node operators list
…cs into feat/stvaults-docs-rework
There was a problem hiding this comment.
🟡 Changes recommended
The container startup command is invalid, several operational commands are inaccurate, redirects are incomplete, and published guides remain placeholders.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Reorganizes and expands stVaults documentation by audience, preserves legacy material, updates links, and adds partner basic authentication.
Changes:
- Adds role-specific operational, architecture, and DeFi Wrapper guides.
- Migrates legacy documentation and redirects selected old routes.
- Adds a second basic-authenticated Docker user.
File summaries
| File | Description |
|---|---|
sidebars.js |
Updates primary navigation labels. |
run-on-lido/stvaults/vault-owners-curators-and-stakers/index.md |
Adds role navigation hub. |
.../vault-owners-and-curators/roles-and-permissions.md |
Documents wrapper roles. |
.../vault-owners-and-curators/non-custodial-operations.md |
Documents delegated operations. |
.../vault-owners-and-curators/index.md |
Adds owner/curator index. |
.../vault-owners-and-curators/health-guide.md |
Adds wrapper health guidance. |
.../stakers/supply-withdraw.md |
Documents deposits and withdrawals. |
.../stakers/rebalance.md |
Adds rebalance placeholder. |
.../stakers/index.md |
Adds staker index. |
.../stakers/emergency-guide.md |
Adds emergency placeholder. |
.../defi-wrapper/index.md |
Adds wrapper navigation. |
.../basic-stvaults/supply-withdraw-mint-repay.md |
Documents core vault operations. |
.../basic-stvaults/redemptions_coverage_with_steth.md |
Documents redemption liquidity. |
.../basic-stvaults/rebalance.md |
Documents rebalancing. |
.../basic-stvaults/index.md |
Adds basic stVault index. |
.../basic-stvaults/health-monitoring-guide.md |
Adds monitoring guidance. |
.../basic-stvaults/health-emergency-guide.md |
Adds emergency guidance. |
.../basic-stvaults/control-validators.md |
Documents validator controls. |
.../basic-stvaults/apply-oracle-reports.md |
Documents oracle reports. |
run-on-lido/stvaults/qualified-custodians/index.md |
Updates integration names. |
.../qualified-custodians/fireblocks.md |
Updates steps and links. |
.../qualified-custodians/copper.md |
Updates guide links. |
.../qualified-custodians/cactus.md |
Updates guide links. |
run-on-lido/stvaults/node-operators/index.md |
Adds operator hub. |
.../defi-wrapper/update-strategy-implementation.md |
Documents strategy upgrades. |
.../defi-wrapper/pdg-shortcut-bootstrap-guide.md |
Documents pool bootstrapping. |
.../defi-wrapper/manage-withdrawal-queue.md |
Documents queue operations. |
.../defi-wrapper/index.md |
Adds operator wrapper index. |
.../basic-stvaults/validators-basics.md |
Documents validator fundamentals. |
.../basic-stvaults/stvault-tier-and-steth-minting-limit.md |
Documents tiers and limits. |
.../basic-stvaults/onboarded-node-operators.md |
Lists onboarded operators. |
.../basic-stvaults/index.md |
Adds operator guide index. |
.../basic-stvaults/consolidation.md |
Documents validator consolidation. |
run-on-lido/stvaults/index.md |
Reworks documentation center. |
run-on-lido/stvaults/faq.md |
Adds stVault FAQ. |
.../concepts-and-reference/rr-limits-fees-tiers.md |
Adds reference placeholder. |
.../concepts-and-reference/lido-v3-whitepaper.mdx |
Relocates and simplifies paper page. |
.../concepts-and-reference/index.md |
Adds reference index. |
.../concepts-and-reference/how-quarantine-works.md |
Documents quarantine behavior. |
.../concepts-and-reference/exit-validators-permissions.md |
Documents exit permissions. |
.../concepts-and-reference/audits.md |
Adds audit index. |
.../concepts-and-reference/architecture-overview.md |
Adds architecture and addresses. |
run-on-lido/stvaults/builders/defi-wrapper/index.md |
Adds wrapper builder index. |
run-on-lido/stvaults/builders/basic-stvaults/index.md |
Adds basic builder index. |
run-on-lido/stvaults-legacy/tech-documentation/pdg.md |
Updates source link. |
.../tech-documentation/integration-overview.md |
Restores legacy integration guide. |
.../tech-documentation/index.md |
Adds legacy technical index. |
.../tech-documentation/consolidation.md |
Renames report links. |
.../qualified-custodians/index.md |
Restores legacy custodian overview. |
.../qualified-custodians/fireblocks.md |
Restores legacy Fireblocks guide. |
.../qualified-custodians/copper.md |
Restores legacy Copper guide. |
.../qualified-custodians/cactus.md |
Restores legacy Cactus guide. |
.../operational-and-management-guides/voluntary-rebalancing-and-vault-closure.md |
Restores legacy rebalance guide. |
.../operational-and-management-guides/stvault-disconnect-guide.md |
Renames report references. |
.../operational-and-management-guides/index.md |
Updates legacy navigation. |
.../operational-and-management-guides/health-monitoring-guide.md |
Restores legacy monitoring guide. |
.../operational-and-management-guides/health-emergency-guide.md |
Restores legacy emergency guide. |
.../operational-and-management-guides/applying-report-guide.md |
Renames and updates report guide. |
run-on-lido/stvaults-legacy/index.md |
Adds legacy documentation hub. |
.../features-and-mechanics/roles-and-permissions.md |
Restores legacy role reference. |
.../features-and-mechanics/parameters-and-metrics.md |
Restores legacy metrics reference. |
.../features-and-mechanics/index.md |
Adds legacy mechanics index. |
.../features-and-mechanics/exit-validators.md |
Restores legacy exit reference. |
.../building-guides/pooled-staking-product/withdrawals.md |
Updates legacy link. |
.../pooled-staking-product/roles-and-permissions.md |
Updates legacy role link. |
.../pooled-staking-product/index.md |
Updates legacy self-links. |
.../pooled-staking-product/custom-strategy.md |
Updates legacy strategy links. |
.../building-guides/index.md |
Adds legacy builder index. |
.../building-guides/basic-stvault.md |
Corrects duration and link text. |
run-on-lido/intro.md |
Updates whitepaper link. |
docusaurus.config.js |
Adds migration redirects. |
docs/guides/lido-tokens-integration-guide.md |
Updates title and stVault references. |
docs/contracts/validator-consolidation-requests.md |
Updates consolidation link. |
docs/contracts/staking-vault.md |
Updates related documentation. |
docs/contracts/predeposit-guarantee.md |
Updates PDG references. |
docs/contracts/operator-grid.md |
Updates related documentation. |
docs/contracts/lazy-oracle.md |
Updates related documentation. |
docs/contracts/dashboard.md |
Documents role renouncement semantics. |
docker/start.sh |
Adds partner authentication user. |
docker-compose.yml |
Passes partner credentials. |
.env.example |
Documents partner credentials. |
Review details
Suppressed comments (2)
run-on-lido/stvaults/vault-owners-curators-and-stakers/defi-wrapper/vault-owners-and-curators/non-custodial-operations.md:105
- This configuration does not let the operations manager adjust the PDG policy.
setPDGPolicyrequires the non-delegableDEFAULT_ADMIN_ROLE, which this guide routes through the timelock, so claiming it as a day-to-day capability contradicts the documented permission split.
run-on-lido/stvaults/vault-owners-curators-and-stakers/defi-wrapper/stakers/rebalance.md:7 - Correct the invalid possessive “Stakers's” in the page heading.
- Files reviewed: 88/118 changed files
- Comments generated: 18
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
New stVaults DocCenter updates
TheDZhon
left a comment
There was a problem hiding this comment.
GM, what an astonishing work 🔥 👏
I'd ask to consider following things to be addressed before we merge this PR 🙏 :
1. Blocking: Carry Spread does not decide the Health Factor direction (the declined suggestion was right)
From the page's own definitions, HF = TV·(1−FRT)/L and bottomLine ≈ ΔTV − ΔL for the period. HF rises only when ΔTV/TV > ΔL/L. A positive spread gives only ΔTV > ΔL, which is weaker because TV > L for any collateralised stVault.
Example: TV 100, L 50, ΔTV +1.0, ΔL +0.6. The bottom line is +0.4, so the spread is positive. HF moves from 100/50 = 2.000 to 101/50.6 = 1.996 and falls.
The other direction holds: a negative spread always lowers HF. So the suggestion in #990 (comment) is correct. Please restore it, or state that a positive spread is necessary but not sufficient, and that HF rises only when Total Value grows faster than the liability in percentage terms. The softer wording on the health-monitoring guide ("supports improving or stable") is fine as is.
2. Blocking: Two CLI snippets pass a role name where the CLI expects the role hash
vo w role-grant -r and contracts dashboard w role-revoke check the JSON for shape only and pass role into grantRoles / revokeRoles as bytes32. The only lookup is hash → name for the confirmation prompt, so "NODE_OPERATOR_UNGUARANTEED_DEPOSIT_ROLE" fails encoding:
- https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/programs/use-cases/vault-operations/write.ts#L614-L662
- https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/features/vault-operations/roles.ts#L14-L30
Only the dw uc tg … commands resolve names (https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/features/defi-wrapper/timelock-roles.ts#L65-L90), which is why the rest of the page works. The roles page documents the hash form:
docs/run-on-lido/stvaults/concepts-and-reference/roles-and-permissions.md
Lines 165 to 173 in f9c9a0b
The hash is 0x5c17b14b08ace6dda14c9642528ae92de2a73d59eacb65c71f39f309a5611063 = keccak256("vaults.NodeOperatorFee.UnguaranteedDepositRole") (https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/dashboard/NodeOperatorFee.sol#L52-L55). Either put the hash in both snippets or point to yarn start vo r roles.
3. Blocking: Confirmation Lifetime bounds, and "24 hours at the Mainnet minimum"
The same paragraph is in leveraged-staking-product.md#L182 and staking_with_redemptions_through_steth.md#L133. The contract range is 1 hour to 30 days, not 24 hours to 30 days: https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/utils/Confirmations.sol#L46-L51. The factory passes _confirmExpiry through unchanged. The lower bound was carried over from the old guide. If the Web UI enforces a one-day floor, state it as a UI rule.
The three DeFi Wrapper guides say the Node Operator confirms the tier change "within the confirmation time window period (24 hours at the Mainnet minimum)":
Same in multi-user-delegated-staking.md#L280, multi-user-staking-with-earn-eth.md#L162 / #L295, and multi-user-staking-with-custom-strategy.md#L437 / #L570. That window is the OperatorGrid confirmation expiry, a protocol-wide setting, not a minimum, and not the Dashboard's Confirmation Lifetime (OperatorGrid.changeTier collects both confirmations: https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/OperatorGrid.sol#L431-L505). OperatorGrid.getConfirmExpiry() returns 86400 on mainnet and Hoodi today, so "24 hours" is right by value. Suggest "within the OperatorGrid confirmation expiry (currently 24 hours)". The tier page already says this correctly.
4. Blocking: Two documented CLI commands are rejected by the CLI
docs/run-on-lido/stvaults/node-operators/basic-stvaults/consolidation.md
Lines 125 to 130 in f9c9a0b
--source_pubkeys and --target_pubkeys do not exist. The command takes -s, --source and -t, --target (https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/programs/use-cases/consolidation/write.ts#L39-L64), so Commander stops with unknown option. The same flags were on the old tech-documentation/consolidation.md page, so this is inherited rather than new, but the page was rewritten here and the value format ("group one, group two") already matches the --source parser.
operator-grid read vault-tier-info is a config entry marked hidden: true, and the read-command generator skips hidden entries (https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/programs/contracts/operator-grid/config.ts#L92-L94, https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/utils/read-programs-by-abi.ts#L85). The registered command for the same vaultTierInfo view is vault-info (https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/programs/contracts/operator-grid/read.ts#L45-L66):
yarn start contracts operator-grid read vault-info <vault_address>5. Low: the stale-report revert is VaultReportStale, not PartialValidatorWithdrawalNotAllowed
The three conditions are right. Only the jail and shortfall cases revert with PartialValidatorWithdrawalNotAllowed; a stale report reverts with VaultReportStale (https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/VaultHub.sol#L886-L919).
6. Low: non-custodial page — a retired term, and the PDG-policy remark the bot flagged
The dual-confirmation set at v4.0.0 is setFeeRate, setConfirmExpiry, correctSettledGrowth and transferVaultOwnership. "AccruedRewardsAdjustment" is the pre-v3 name; the roles page has the current list.
The intro was reworded after #990 (comment), but the Result paragraph still has the operations manager "adjusting the PDG policy" day to day. setPDGPolicy is DEFAULT_ADMIN_ROLE-only, and the page classifies that role as custody-sensitive. "Proposing PDG policy changes through the timelock" would be accurate.
7. Low: COLLECT_VAULT_ERC20_ROLE cannot perform Step 7.2 of the DeFi Wrapper disconnect
The Dashboard route is Dashboard.collectERC20FromVault → VaultHub.collectERC20FromVault, which runs _checkConnectionAndOwner and reverts for a vault that is no longer connected (https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/dashboard/Dashboard.sol#L557-L563, https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/VaultHub.sol#L1010-L1018). Step 7.2 runs after Step 6 has completed the disconnect and moved vault ownership to newOwner, and its command calls StakingVault.collectERC20 directly, which is onlyOwner (https://github.com/lidofinance/core/blob/17005714f151e5502c559932319a3f2f74ac2436/contracts/0.8.25/vaults/StakingVault.sol#L502-L513):
So at Step 7.2 only newOwner can collect, and the Dashboard role plays no part. Suggest dropping the Step 7.2 reference from that row, or moving the wstETH transfer before Step 6 if a delegated actor is meant to do it.
8. Low: redirect target for the retired vault-closure guide
Lines 211 to 214 in f9c9a0b
The old page covered repay vs rebalance to close an stVault, with the 1,000 ETH / 400 stETH example. That content now lives in the rebalance guide, not in the redemptions guide the redirect points at:
Suggest retargeting to …/basic-stvaults/rebalance. All 19 of the old page's anchors are lost either way. The other anchor losses in this pull are the expected result of rewritten pages, and every internal fragment link was updated (the build passes with onBrokenAnchors: throw).
9. Low: two grammar items marked "will be solved in #993" did not land on the top-level index
docs/run-on-lido/stvaults/vault-owners-curators-and-stakers/index.md
Lines 11 to 12 in f9c9a0b
"simultaneous reducing" → "simultaneously reducing"; "partial withdrawing" → "partially withdrawing". The mirror lines in basic-stvaults/index.md are fixed.
Notes, no change requested
- Reserve ratio / limits / fees / tiers reference. The placeholder page was removed rather than completed (#990 (comment) promised it for the following week). No dangling link remains; the tier grid on the identification guide covers part of it. Just making sure the follow-up has an owner.
- Docker
htpasswd -bi(#990 (comment)). In httpd 2.4.x,-iafter-bsets the password source to stdin, and only two positional arguments are then expected (https://github.com/apache/httpd/blob/2.4.x/support/passwd_common.c#L318-L322, https://github.com/apache/httpd/blob/2.4.x/support/htpasswd.c#L173-L229). The container should start bit I did not execute it worth saying.-bis redundant and worth dropping for clarity. eject-validators <amounts>(#990 (comment)). The CLI takes four positional arguments and sends only[pubkeys, refundRecipient](https://github.com/lidofinance/lido-staking-vault-cli/blob/0421f8b97c6d05de73c06c755619b526e95dd3d8/programs/contracts/vault/write.ts#L276-L322). The page's explanation is correct.- Onboarded operators. 13 of 37 addresses are lowercase. Checksummed form helps copy-paste checks. All 37 resolve to a registered group on the
Improved stVaults docs.
See - https://miro.com/app/board/uXjVHFzyjfE=/