What problem does it solve? Solidity library contracts are inherited downstream, so small API design mistakes (missing virtual, wrong calldata usage, reverts instead of no-ops) break every inheriting contract. This Skill encodes the openzeppelin-contracts API design conventions so new or modified contracts under contracts/ stay inheritable and consistent. ## Core Features & Use Cases - Override-point design: Enforces virtual on overridable functions, the _update single-override pattern, and correct super usage in extensions. - Signature conventions: Guides memory vs calldata, public vs external, and the internal/external split where public functions only capture _msgSender() and delegate. - Behavioral rules: Prefers no-ops over reverts, defines empty virtual hooks, and covers constructors, immutables, the upgrades transpiler tag, and ERC-7201 namespaced storage. - Use Case: When adding a new ERC-20 extension, use this Skill to decide which functions should be virtual, where _msgSender() belongs, and whether a state transition should return a bool instead of reverting. ## Quick Start Review this new contract under contracts/ against the library API design rules and flag any violations.