diff --git a/docs/reference.md b/docs/reference.md
index a8d370a..75b75a0 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -6838,12 +6838,6 @@
       publicly depends on (directly or indirectly) are propagated up the
       dependency tree to dependents for linking.
 
-    - For non-binary targets (like actions, groups, etc.), their dependency
-      outputs (stamp or phony targets) will transitively depend on the
-      dependency outputs of their public_deps. This ensures that dependents
-      of the current target will also implicitly depend on the outputs of the
-      public_deps.
-
   See also "gn help public_configs".
 ```
 
diff --git a/src/gn/ninja_create_bundle_target_writer_unittest.cc b/src/gn/ninja_create_bundle_target_writer_unittest.cc
index 2d23969..7aa1313 100644
--- a/src/gn/ninja_create_bundle_target_writer_unittest.cc
+++ b/src/gn/ninja_create_bundle_target_writer_unittest.cc
@@ -493,7 +493,7 @@
       "| phony/baz/bar.postprocessing.inputdeps\n"
       "build phony/baz/bar: phony "
       "bar.bundle/Contents/quz "
-      "bar.bundle/_CodeSignature/CodeResources ./quz\n"
+      "bar.bundle/_CodeSignature/CodeResources\n"
       "build bar.bundle: phony phony/baz/bar\n";
   std::string out_str = out.str();
   EXPECT_EQ(expected, out_str);
@@ -579,7 +579,7 @@
       "| toolchain/phony/baz/bar.postprocessing.inputdeps\n"
       "build toolchain/phony/baz/bar: phony "
       "bar.bundle/Contents/quz "
-      "bar.bundle/_CodeSignature/CodeResources ./quz\n"
+      "bar.bundle/_CodeSignature/CodeResources\n"
       "build bar.bundle: phony toolchain/phony/baz/bar\n";
   std::string out_str = out.str();
   EXPECT_EQ(expected, out_str);
diff --git a/src/gn/ninja_generated_file_target_writer_unittest.cc b/src/gn/ninja_generated_file_target_writer_unittest.cc
index a5b84e9..481db80 100644
--- a/src/gn/ninja_generated_file_target_writer_unittest.cc
+++ b/src/gn/ninja_generated_file_target_writer_unittest.cc
@@ -64,7 +64,7 @@
 
   const char expected[] =
       "build phony/foo/bar: phony foo.json phony/foo/dep "
-      "phony/foo/dep2 phony/foo/bundle_data_dep || "
+      "phony/foo/dep2 || "
       "phony/foo/bundle_data_dep phony/foo/datadep\n";
   EXPECT_EQ(expected, out.str());
 }
diff --git a/src/gn/ninja_group_target_writer_unittest.cc b/src/gn/ninja_group_target_writer_unittest.cc
index 39a42c8..ec9f72d 100644
--- a/src/gn/ninja_group_target_writer_unittest.cc
+++ b/src/gn/ninja_group_target_writer_unittest.cc
@@ -54,8 +54,7 @@
   writer.Run();
 
   const char expected[] =
-      "build phony/foo/bar: phony phony/foo/dep phony/foo/dep2 "
-      "phony/foo/bundle_data_dep || "
+      "build phony/foo/bar: phony phony/foo/dep phony/foo/dep2 || "
       "phony/foo/bundle_data_dep phony/foo/datadep\n";
   EXPECT_EQ(expected, out.str());
 }
diff --git a/src/gn/ninja_target_writer.cc b/src/gn/ninja_target_writer.cc
index b321457..825439a 100644
--- a/src/gn/ninja_target_writer.cc
+++ b/src/gn/ninja_target_writer.cc
@@ -4,7 +4,6 @@
 
 #include "gn/ninja_target_writer.h"
 
-#include <algorithm>
 #include <sstream>
 
 #include "base/files/file_util.h"
@@ -620,22 +619,6 @@
 void NinjaTargetWriter::WriteStampOrPhonyForTarget(
     const std::vector<OutputFile>& files,
     const std::vector<OutputFile>& order_only_deps) {
-  // Add dependency outputs of public_deps to this target's stamp or phony
-  // target to propagate public dependencies transitively. This allows
-  // dependents of this target to implicitly depend on the public_deps without
-  // listing them all directly on their build lines, preventing inflation of
-  // implicit inputs.
-  std::vector<OutputFile> all_files = files;
-  for (const auto& pair : target_->public_deps()) {
-    if (pair.ptr->has_dependency_output()) {
-      OutputFile dep_out = pair.ptr->dependency_output();
-      if (std::find(all_files.begin(), all_files.end(), dep_out) ==
-          all_files.end()) {
-        all_files.push_back(dep_out);
-      }
-    }
-  }
-
   // We should have already discerned whether this target is a stamp or a phony.
   // If there's a dependency_output_file, it should be a stamp. Else is a phony
   // or omitted phony (in which case, we don't write it).
@@ -668,12 +651,12 @@
   } else {
     // This is the omitted phony case. We should not get here if there were any
     // dependencies, so ensure that none got added.
-    CHECK(all_files.empty());
+    CHECK(files.empty());
     CHECK(order_only_deps.empty());
     return;
   }
 
-  path_output_.WriteFiles(out_, all_files);
+  path_output_.WriteFiles(out_, files);
 
   if (!order_only_deps.empty()) {
     out_ << " ||";
diff --git a/src/gn/ninja_target_writer_unittest.cc b/src/gn/ninja_target_writer_unittest.cc
index 6ba1a27..cd4a5e4 100644
--- a/src/gn/ninja_target_writer_unittest.cc
+++ b/src/gn/ninja_target_writer_unittest.cc
@@ -5,7 +5,6 @@
 #include <sstream>
 
 #include "gn/ninja_action_target_writer.h"
-#include "gn/ninja_group_target_writer.h"
 #include "gn/ninja_target_writer.h"
 #include "gn/target.h"
 #include "gn/test_with_scope.h"
@@ -158,7 +157,7 @@
         "build: __foo_action___rule | ../../foo/script.py"
         " ../../foo/action_source.txt ./target\n"
         "\n"
-        "build phony/foo/action: phony ./target\n",
+        "build phony/foo/action: phony\n",
         stream.str());
   }
 
@@ -258,7 +257,7 @@
         "build: __foo_action___rule | ../../foo/script.py"
         " ../../foo/action_source.txt ./target\n"
         "\n"
-        "build obj/foo/action.stamp: stamp ./target\n",
+        "build obj/foo/action.stamp: stamp\n",
         stream.str());
   }
 
@@ -441,126 +440,3 @@
   // output.
   EXPECT_EQ("build phony/foo/target: phony phony/foo/dep\n", out);
 }
-
-TEST(NinjaTargetWriter, PhonyPropagation) {
-  TestWithScope setup;
-  Err err;
-
-  // Set up common target A (action)
-  Target a(setup.settings(), Label(SourceDir("//foo/"), "a"));
-  a.set_output_type(Target::ACTION);
-  a.visibility().SetPublic();
-  a.SetToolchain(setup.toolchain());
-  a.action_values().set_script(SourceFile("//foo/script.py"));
-  a.action_values().outputs() =
-      SubstitutionList::MakeForTest("//out/Debug/a.out");
-
-  // Set up B_pub (action, public_dep A)
-  Target b_pub(setup.settings(), Label(SourceDir("//foo/"), "b_pub"));
-  b_pub.set_output_type(Target::ACTION);
-  b_pub.visibility().SetPublic();
-  b_pub.SetToolchain(setup.toolchain());
-  b_pub.action_values().set_script(SourceFile("//foo/script.py"));
-  b_pub.action_values().outputs() =
-      SubstitutionList::MakeForTest("//out/Debug/b_pub.out");
-  b_pub.public_deps().push_back(LabelTargetPair(&a));
-
-  // Set up B_priv (action, private_dep A)
-  Target b_priv(setup.settings(), Label(SourceDir("//foo/"), "b_priv"));
-  b_priv.set_output_type(Target::ACTION);
-  b_priv.visibility().SetPublic();
-  b_priv.SetToolchain(setup.toolchain());
-  b_priv.action_values().set_script(SourceFile("//foo/script.py"));
-  b_priv.action_values().outputs() =
-      SubstitutionList::MakeForTest("//out/Debug/b_priv.out");
-  b_priv.private_deps().push_back(LabelTargetPair(&a));
-
-  // Set up C_pub (action, private_dep B_pub)
-  Target c_pub(setup.settings(), Label(SourceDir("//foo/"), "c_pub"));
-  c_pub.set_output_type(Target::ACTION);
-  c_pub.visibility().SetPublic();
-  c_pub.SetToolchain(setup.toolchain());
-  c_pub.action_values().set_script(SourceFile("//foo/script.py"));
-  c_pub.private_deps().push_back(LabelTargetPair(&b_pub));
-
-  // Set up C_priv (action, private_dep B_priv)
-  Target c_priv(setup.settings(), Label(SourceDir("//foo/"), "c_priv"));
-  c_priv.set_output_type(Target::ACTION);
-  c_priv.visibility().SetPublic();
-  c_priv.SetToolchain(setup.toolchain());
-  c_priv.action_values().set_script(SourceFile("//foo/script.py"));
-  c_priv.private_deps().push_back(LabelTargetPair(&b_priv));
-
-  ASSERT_TRUE(a.OnResolved(&err));
-  ASSERT_TRUE(b_pub.OnResolved(&err));
-  ASSERT_TRUE(b_priv.OnResolved(&err));
-  ASSERT_TRUE(c_pub.OnResolved(&err));
-  ASSERT_TRUE(c_priv.OnResolved(&err));
-
-  // 1. Verify B_pub's stamp/phony target. It should contain A's output
-  // (phony/foo/a).
-  {
-    std::ostringstream stream;
-    NinjaActionTargetWriter writer(&b_pub, stream);
-    writer.Run();
-    EXPECT_EQ(
-        "rule __foo_b_pub___rule\n"
-        "  command =  ../../foo/script.py\n"
-        "  description = ACTION //foo:b_pub()\n"
-        "  restat = 1\n"
-        "\n"
-        "build b_pub.out: __foo_b_pub___rule | ../../foo/script.py "
-        "phony/foo/a\n"
-        "\n"
-        "build phony/foo/b_pub: phony b_pub.out phony/foo/a\n",
-        stream.str());
-  }
-
-  // 2. Verify B_priv's stamp/phony target. It should NOT contain A's output.
-  {
-    std::ostringstream stream;
-    NinjaActionTargetWriter writer(&b_priv, stream);
-    writer.Run();
-    EXPECT_EQ(
-        "rule __foo_b_priv___rule\n"
-        "  command =  ../../foo/script.py\n"
-        "  description = ACTION //foo:b_priv()\n"
-        "  restat = 1\n"
-        "\n"
-        "build b_priv.out: __foo_b_priv___rule | ../../foo/script.py "
-        "phony/foo/a\n"
-        "\n"
-        "build phony/foo/b_priv: phony b_priv.out\n",
-        stream.str());
-  }
-
-  // 3. Verify C_pub's inputdeps contains B_pub's stamp/phony.
-  {
-    std::ostringstream stream;
-    TestingNinjaTargetWriter writer(&c_pub, setup.toolchain(), stream);
-    auto dep = writer.WriteInputDepsStampOrPhonyAndGetDep(
-        std::vector<const Target*>(), 10u);
-
-    ASSERT_EQ(1u, dep.implicit.size());
-    EXPECT_EQ("phony/foo/c_pub.inputdeps", dep.implicit[0].value());
-    EXPECT_EQ(
-        "build phony/foo/c_pub.inputdeps: phony ../../foo/script.py "
-        "phony/foo/b_pub\n",
-        stream.str());
-  }
-
-  // 4. Verify C_priv's inputdeps contains B_priv's stamp/phony.
-  {
-    std::ostringstream stream;
-    TestingNinjaTargetWriter writer(&c_priv, setup.toolchain(), stream);
-    auto dep = writer.WriteInputDepsStampOrPhonyAndGetDep(
-        std::vector<const Target*>(), 10u);
-
-    ASSERT_EQ(1u, dep.implicit.size());
-    EXPECT_EQ("phony/foo/c_priv.inputdeps", dep.implicit[0].value());
-    EXPECT_EQ(
-        "build phony/foo/c_priv.inputdeps: phony ../../foo/script.py "
-        "phony/foo/b_priv\n",
-        stream.str());
-  }
-}
diff --git a/src/gn/variables.cc b/src/gn/variables.cc
index dcb46e8..960689b 100644
--- a/src/gn/variables.cc
+++ b/src/gn/variables.cc
@@ -2025,12 +2025,6 @@
       publicly depends on (directly or indirectly) are propagated up the
       dependency tree to dependents for linking.
 
-    - For non-binary targets (like actions, groups, etc.), their dependency
-      outputs (stamp or phony targets) will transitively depend on the
-      dependency outputs of their public_deps. This ensures that dependents
-      of the current target will also implicitly depend on the outputs of the
-      public_deps.
-
   See also "gn help public_configs".
 
 Discussion
