Index: resources/data/validator/combinations.mapcss
===================================================================
--- resources/data/validator/combinations.mapcss	(revision 16713)
+++ resources/data/validator/combinations.mapcss	(working copy)
@@ -590,6 +590,32 @@
     group: tr("suspicious tag combination");
 }
 
+/* #19094 */
+way[highway][placement=transition][join_list("", uniq_list(tag_regex("^placement:.*$")))==transition],
+way[highway][!placement][/^placement:.*$/][join_list("", uniq_list(tag_regex("^placement:.*$")))==transition] {
+  throwWarning: tr("Use `transition` only as value of `placement=*`");
+  group: tr("suspicious tag combination");
+  set PlacementTransitionWarning;
+  fixAdd: "placement=transition;
+  fixRemove: "placement:forward";
+  fixRemove: "placement:backward";
+  fixRemove: "placement:both_ways";
+  assertMatch: "way highway=primary placement=transition placement:both_ways=transition";
+  assertMatch: "way highway=primary placement:backward=transition placement:forward=transition";
+  assertNoMatch: "way highway=primary placement:backward=middle_of:1 placement:forward=transition";
+  assertNoMatch: "way highway=primary placement=middle_of:1 placement:backward=transition placement:forward=transition";
+}
+way[highway][placement][/^placement:.*$/]!.PlacementTransitionWarning,
+way[highway]["placement:forward"]["placement:backward"]!.PlacementTransitionWarning,
+way[highway]["placement:forward"]["placement:both_ways"]!.PlacementTransitionWarning,
+way[highway]["placement:backward"]["placement:both_ways"]!.PlacementTransitionWarning {
+  throwError: tr("`{0}` together with `{1}`. Use only one", "{1.key}", "{2.key}");
+  group: tr("suspicious tag combination");
+  assertMatch: "way highway=primary placement=left_of:2 placement:forward=right_of:1";
+  assertNoMatch: "way highway=primary placement:forward=right_of:1";
+  assertNoMatch: "way highway=primary placement:forward=transition placement:both_ways=transition";
+}
+
 /* #13680 */
 area[golf=bunker][natural=beach] {
   throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
@@ -747,4 +773,4 @@
   assertNoMatch: "node man_made=communications_tower height=\"328.22 ft\"";
   assertNoMatch: "node man_made=communications_tower height=4358'8\"";
   assertNoMatch: "node height=4358'";
-}
\ No newline at end of file
+}
