# When changing a public interface, all callers must be updated in the same atomic commit ### The contract-change check (mandatory for any edit that changes a public interface) Before any edit, search the codebase for callers of the function/symbol/yield shape you're changing. If your edit changes: - A function signature (add/remove/rename a parameter) - A return type or yield shape (e.g. `yield process, gui_script` -> `yield process, gui_script, workspace_path`) - A class hierarchy (add/remove a base class, change a method's name) - A module-level function name (rename) - A public attribute name ...you MUST update ALL callers in the same atomic commit. Use `py_find_usages` to locate them. If you change a contract and don't update callers, you have broken the codebase.