Repository navigation
fix(registry): fail on missing governance entries and fix splitter/batch sender rows - #201
Merged
truthixify merged 2 commits intoOct 18, 2026
Conversation
|
@izzetemredemir 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! 🚀 |
truthixify
approved these changes
Oct 17, 2026
truthixify
left a comment
Contributor
There was a problem hiding this comment.
The stricter registry governance validation passes all focused and offline registry checks. Approved; leaving the draft unmerged.
…tch sender rows The contract registry check only warned when a mainnet contract had no governance entry in the pinned contracts manifest. That is how stealth-splitter and stealth-batch-sender stayed unverified while the registry listed both as upgradeable, although neither contract has an upgrade entrypoint. Registry and page: - Record both contracts as non-upgradeable in the testnet and mainnet rows and in the governance table on the registry page. - Re-pin pinnedContractsRepoCommit to the contracts commit that adds their governance entries. Check script: - A missing governance entry is a failure. This applies to a contract listed on any network, not only mainnet. - A pinned manifest that returns 404 is a failure. Network errors are still warnings. - Parse the manifest's new "Non-Upgradeable Contracts" section. It holds contracts with immutable code and a pause admin. - `upgradeable` must be a boolean, and the same contract version must have the same flag on every network. - main() runs when the script is invoked through a symlinked path. Tests: - Export the pure checks and add node:test coverage. - check:contract-registry runs the tests before the network checks, so CI runs them without workflow changes. Closes #182
wraith-protocol/contracts#255 merged as affc51c. Pin it instead of the PR head so the registry is checked against the manifest on develop.
izzetemredemir
force-pushed
the
fix/182-splitter-batch-sender-governance
branch
from
October 17, 2026 15:40
6e1e2e7 to
6d2de9f
Compare
izzetemredemir
marked this pull request as ready for review
October 17, 2026 15:40
truthixify
approved these changes
Oct 18, 2026
truthixify
left a comment
Contributor
There was a problem hiding this comment.
The branch is ready after rebasing onto the merged governance source. All eight focused registry tests pass, the pin now targets the contracts #255 merge commit, and the required documentation checks are green.
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.
Closes #182
The governance entries this check needs landed in wraith-protocol/contracts#255 (merged as
affc51c), and the registry is pinned to that commit.Problem
check-contract-registry.mjsonly warned when a mainnet contract had no governance entry in the pinned contracts manifest.stealth-splitterandstealth-batch-senderhad none, so theirupgradeable: truerows were never checked. Neither contract has an upgrade path.Upgrade model, checked against the contracts source
stealth-splitterupdate_current_contract_wasminitstores the announcer once.stealth-batch-senderinitand never changed after; it can only pause and unpausebatch_send. A signer multisig, set once byinit_multisig, can only rotate its own signers, behind a 7-day timelock.Sources:
stellar/stealth-splitter/src/lib.rsandstellar/stealth-batch-sender/src/{lib.rs,multisig.rs}on contracts develop 66273f2. This matchesAUTHORIZATION_MATRIX.mdthere. contracts#255 records both inaudit-prep/DEPLOYMENT_MANIFEST.md:Changes
scripts/contract-registry.jsonupgradeable: falsein the testnet and mainnet rows.verifiedAtis updated (the full verification was re-run).reference/contract-registry.mdx: two rows added to the "Governance and upgradeability" table.scripts/check-contract-registry.mjsupgradeable: false.upgradeablemust be a boolean, and the same contract version must have the same flag on every network. Only mainnet rows are compared with the manifest, and the testnet rows had the same wrongtrue.main()only runs when the file is executed directly, comparing real paths so a symlinked checkout still runs.scripts/check-contract-registry.test.mjs(new): 8node:testcases covering:upgradeablefails.check:contract-registryruns them before the network checks, so CI covers them without a workflow change.test:contract-registryruns them alone.Pin
pinnedContractsRepoCommitisaffc51c, the merge commit of contracts#255 ondevelop. It was moved from the PR head in a separate commit. The branch is rebased on the currentdevelop, and the full checks pass again (with network verification and no warnings).Testing
pnpm testpasses: snippets, nav coverage, the 8 new tests, the full registry check with network verification (no warnings), the compatibility matrix, and the redirects tests.check:placeholdersandcheck:redirects-and-anchorspass as well.7bc1c6c, the check exits 1 and names both contracts.stealth-batch-senderset back totrue, it fails on both the manifest mismatch and the cross-network mismatch.Noticed, not changed
The registry page and the manifest also list
stealth-senderandwraith-namesas upgradeable, but neither has an upgrade entry point on contracts develop. The page also sayswraith-nameshas no pause, while the contract haspause/unpause. I left both alone: they need a decision on the intended model (see the note in contracts#255).