diff --git a/ts_auto_deps/updater/test_register.go b/ts_auto_deps/updater/test_register.go
index 130e3d1..19529c9 100644
--- a/ts_auto_deps/updater/test_register.go
+++ b/ts_auto_deps/updater/test_register.go
@@ -38,11 +38,13 @@
 // RegisterTestRules registers ts_library test targets with the project's
 // ts_config and ts_development_sources rules.  It may also register the tests
 // with a testonly ts_library named "all_tests", which allows users to set up
-// their own BUILD layout.  It's separated from UpdateBUILD since it's non-local,
-// multiple packages may all need to make writes to the same ts_config.
-func (upd *Updater) RegisterTestRules(ctx context.Context, paths ...string) (bool, error) {
+// their own BUILD layout.  It's separated from UpdateBUILD since it's
+// non-local, multiple packages may all need to make writes to the same
+// ts_config.  It returns a set of the paths for the packages that were updated.
+func (upd *Updater) RegisterTestRules(ctx context.Context, paths ...string) (bool, map[string]bool, error) {
 	reg := &buildRegistry{make(map[string]*build.File), make(map[*build.File]bool)}
 	var g3root string
+	updatedAncestorPackages := make(map[string]bool)
 	for _, path := range paths {
 		// declare variables manually so that g3root doesn't get overwritten by a :=
 		// declaration
@@ -50,11 +52,11 @@
 		var buildPath string
 		g3root, buildPath, err = getBUILDPath(ctx, path)
 		if err != nil {
-			return false, err
+			return false, nil, err
 		}
 		bld, err := reg.readBUILD(ctx, g3root, buildPath)
 		if err != nil {
-			return false, err
+			return false, nil, err
 		}
 		for _, tr := range getRules(bld, "ts_library", ruleTypeTest) {
 			// don't register all_test libraries themselves
@@ -63,14 +65,22 @@
 			}
 			platform.Infof("Registering test rule in closest ts_config & ts_development_sources")
 			target := AbsoluteBazelTarget(bld, tr.Name())
-			if err := reg.registerTestRule(ctx, bld, tsConfig, g3root, target); err != nil {
-				return false, err
+			ancestorBuild, err := reg.registerTestRule(ctx, bld, tsConfig, g3root, target)
+			if err != nil {
+				return false, nil, err
+			}
+			if ancestorBuild != "" {
+				updatedAncestorPackages[ancestorBuild] = true
 			}
 			// NodeJS rules should not be added to ts_development_sources automatically, because
 			// they typically do not run in the browser.
 			if tr.AttrString("runtime") != "nodejs" {
-				if err := reg.registerTestRule(ctx, bld, tsDevSrcs, g3root, target); err != nil {
-					return false, err
+				ancestorBuild, err := reg.registerTestRule(ctx, bld, tsDevSrcs, g3root, target)
+				if err != nil {
+					return false, nil, err
+				}
+				if ancestorBuild != "" {
+					updatedAncestorPackages[ancestorBuild] = true
 				}
 			}
 		}
@@ -81,12 +91,12 @@
 		fmt.Printf("Registered test(s) in %s\n", b.Path)
 		fileChanged, err := upd.maybeWriteBUILD(ctx, filepath.Join(g3root, b.Path), b)
 		if err != nil {
-			return false, err
+			return false, nil, err
 		}
 		updated = updated || fileChanged
 	}
 
-	return updated, nil
+	return updated, updatedAncestorPackages, nil
 }
 
 // buildRegistry buffers reads and writes done while registering ts_libraries
@@ -149,16 +159,16 @@
 // rule is registered with it, instead of specified register target. Prints a
 // warning if no rule is found, but only returns an error if adding the
 // dependency fails.
-func (reg *buildRegistry) registerTestRule(ctx context.Context, bld *build.File, rt registerTarget, g3root, target string) error {
+func (reg *buildRegistry) registerTestRule(ctx context.Context, bld *build.File, rt registerTarget, g3root, target string) (string, error) {
 	if buildHasDisableTaze(bld) {
-		return nil
+		return "", nil
 	}
 
 	var ruleToRegister *build.Rule
 	for _, r := range bld.Rules("") {
 		if isAllTestLibrary(bld, r) {
 			if hasDependency(bld, r, target) {
-				return nil
+				return "", nil
 			}
 
 			// an all_tests library takes presidence over a registerTarget, and there
@@ -169,7 +179,7 @@
 		}
 		if ruleMatches(bld, r, rt.kind(), rt.ruleType()) {
 			if hasDependency(bld, r, target) {
-				return nil
+				return "", nil
 			}
 
 			// keep overwriting ruleToRegister so the last match in the BUILD gets
@@ -181,7 +191,7 @@
 	if ruleToRegister != nil {
 		addDep(bld, ruleToRegister, target)
 		reg.registerForPossibleUpdate(bld)
-		return nil
+		return filepath.Dir(bld.Path), nil
 	}
 
 	parentDir := filepath.Dir(filepath.Dir(bld.Path))
@@ -190,7 +200,7 @@
 		if _, err := platform.Stat(ctx, buildFile); err == nil {
 			parent, err := reg.readBUILD(ctx, g3root, buildFile)
 			if err != nil {
-				return err
+				return "", err
 			}
 			return reg.registerTestRule(ctx, parent, rt, g3root, target)
 		}
@@ -198,5 +208,5 @@
 	}
 	fmt.Printf("WARNING: no %s rule in parent packages of %s to register with.\n",
 		rt.kind(), target)
-	return nil
+	return "", nil
 }
