When adding or changing public methods, properties, or events, make sure the new surface area is consistent with existing conventions and does not silently break current behavior.
createCommand()/createOption() factory style for subclassing, add new extension points (e.g. createArgument()) the same way rather than asking callers to instantiate internal classes directly..commands and .options already store class instances, new collections like .args/_args should also store the actual class instance (e.g. Argument), not plain objects, so callers can rely on a single, predictable shape.aliases(), rather than mixing arguments.length-based varargs with array-based getters.// Bad: introduces a new property that collides with intent of existing `options`
this.options = [];
this.opts = {}; // confusing overlap, breaks expectations of namespacing
// Good: pick a name that doesn't conflict and clearly documents intent
this.optsSnapshot = this.opts();
Before merging an API change, ask: “Does this match our existing patterns, could it collide with something a user already relies on, and does it have any non-obvious side effects on other state?” If yes to any, redesign before shipping.</description>