IntentiAI

Exported function changed while callers still use it

A public function or export removed or re-signed while other code still calls it.

Check breaking-exportShip CheckTypeScript, JavaScript, Python, Go, Rust

Why it matters

An agent edits the file it is working in. When it renames a function, drops an export or adds a required parameter, the callers in other files are often never opened. The change looks complete and the tests for this file pass.

The break appears somewhere else: a type error in a package you did not rebuild, an import error in a route nobody tested, or in JavaScript and Python a call that silently passes the wrong arguments. For a published package, consumers outside the repository break on their next upgrade.

Example

 import { db } from "./db";
-export async function getUser(id: string) {
-  return db.user.findUnique({ where: { id } });
+export async function getUser(id: string, orgId: string) {
+  return db.user.findFirst({ where: { id, orgId } });
 }
-export function formatUserName(user: User) {
-  return `${user.first} ${user.last}`;
-}

What it detects

  • Removed exports: JavaScript and TypeScript export declarations and module.exports, public top-level Python def and class, exported Go functions, Rust pub fn, and names dropped from barrel files (index.ts, __init__.py, mod.rs).
  • Signature changes that break callers: more required parameters, fewer parameters, or renamed parameters in Python, where callers can pass by keyword. Type-only changes and new optional parameters are ignored.
  • The working tree (up to 4,000 source files) is searched for files outside the change that still import the name from a path resolving to that module and call or import it.
  • Symbols moved to another file in the same change, and renames where the diff also updates the call sites, are not flagged. A removal with no callers from a published surface (src/, lib/, packages/*/src, index files) is reported at lower severity as a prompt to check.

What to do when it fires

Update every call site the finding lists, then run a full build of every package that imports this module. If the old shape has to keep working, accept both forms for a release and mark the old one deprecated.

For a removal from a published module, keep the old name as a deprecated re-export until the next major version. If it was never used outside the repository, say so in the commit message.

Exported function changed while callers still use it: AI code review check | IntentiAI