docs(IB20): clarify inverted seize-holder semantics - #207
Merged
Conversation
Make the SEIZE_HOLDER_POLICY NatSpec explicit that seize uses inverted policy semantics: a holder is seizable only when the policy does not authorize it, and an unset slot remains safe by default. Co-authored-by: Cursor <cursoragent@cursor.com>
rayyan224
requested review from
amiecorso,
eric-ships,
ilikesymmetry and
stevieraykatz
as code owners
August 24, 2026 15:27
Interface Coverage✅ All interface functions have test coverage. |
📊 Forge Coverage (
|
| File | Lines | Stmts | Branches | Funcs |
|---|---|---|---|---|
| 🟡 B20FactoryLib.sol | 97.70% | 98.00% | 100.00% | 95.00% |
| 🔴 test/lib/ForceFeeder.sol | 0.00% | 0.00% | 100.00% | 0.00% |
| 🔴 test/lib/PrecompileProbe.sol | 0.00% | 0.00% | 0.00% | 0.00% |
| 🟢 MockActivationRegistry.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟢 MockActivationRegistryStorage.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟢 MockB20.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟢 MockB20Asset.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟡 MockB20Factory.sol | 98.96% | 99.10% | 100.00% | 100.00% |
| 🟢 MockB20Stablecoin.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟢 MockB20Storage.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| 🟡 MockPolicyRegistry.sol | 100.00% | 99.54% | 97.67% | 100.00% |
| 🟢 MockPolicyRegistryStorage.sol | 100.00% | 100.00% | 100.00% | 100.00% |
| Total | 97.07% | 97.52% | 98.16% | 97.00% |
Full report: download artifact. To browse locally: make coverage (runs forge coverage + genhtml + opens the HTML report).
Replace the "inverted semantics" phrasing with direct `isAuthorized(...)` language so the seize-holder gate reads more concretely in the interface docs. Co-authored-by: Cursor <cursoragent@cursor.com>
✅ Fork tests: all 721 passedbase/base is fully in sync with the base-std spec. |
Explain in the IB20 NatSpec and seize changelog that SEIZE_HOLDER_POLICY is distinct from the allowlist-style checks used by transfer and transferFrom, and intentionally uses the inverse authorization result. Co-authored-by: Cursor <cursoragent@cursor.com>
Add the design rationale that SEIZE_HOLDER_POLICY intentionally uses the inverse of the allowlist-style transfer checks so the seize path can target denied accounts while preserving the safe unset default. Co-authored-by: Cursor <cursoragent@cursor.com>
Explain the inverted `SEIZE_HOLDER_POLICY` behavior in plainer technical English so the interface docs and changelog more clearly describe the default behavior and blocked-account model. Co-authored-by: Cursor <cursoragent@cursor.com>
stephancill
approved these changes
Aug 24, 2026
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.
Summary
IB20NatSpec thatSEIZE_HOLDER_POLICYuses inverted semantics.seizeWithMemoreverts whenfromis authorized underSEIZE_HOLDER_POLICY.ALWAYS_ALLOW, so no account is seizable until the issuer explicitly configures the slot.Test plan
forge buildMade with Cursor