What problem does it solve? Solidity library contracts are inherited downstream, so API design mistakes (missing virtual, wrong calldata usage, reverts instead of no-ops) break inheritors and cannot be caught by linters. This Skill codifies the openzeppelin-contracts conventions so new or modified contracts preserve inheritability. ## Core Features & Use Cases - Virtual and override rules: Defines when functions must be virtual, why alias functions and convenience overloads are not, and why external cannot be an override point. - Data location and visibility guidance: Specifies memory vs calldata for reference types, public vs external defaults, and the internal/external split pattern using _msgSender(). - State machine and storage patterns: Covers the _update single-override pattern, no-op over revert philosophy, super calls in extensions, immutable tagging for the upgrades transpiler, and ERC-7201 namespaced storage. - Use Case: When adding a new ERC extension contract, apply these rules to decide which functions are virtual, where _update is overridden, and whether ERC-7201 storage is justified. ## Quick Start Review my new contract under contracts/ against the library API design rules and flag any violations.