fixed claw power capping before it knows where they are
diff --git a/frc971/control_loops/claw/claw.cc b/frc971/control_loops/claw/claw.cc
index 611dd0e..f9ee982 100644
--- a/frc971/control_loops/claw/claw.cc
+++ b/frc971/control_loops/claw/claw.cc
@@ -191,21 +191,25 @@
 
     {
       const auto values = constants::GetValues().claw;
-      if (X_hat(0, 0) + X_hat(1, 0) > values.upper_claw.upper_limit &&
-          U(1, 0) > 0) {
-        LOG(WARNING, "upper claw too high and moving up\n");
-        U(1, 0) = 0;
-      } else if (X_hat(0, 0) + X_hat(1, 0) < values.upper_claw.lower_limit &&
-                 U(1, 0) < 0) {
-        LOG(WARNING, "upper claw too low and moving down\n");
-        U(1, 0) = 0;
+      if (top_known_) {
+        if (X_hat(0, 0) + X_hat(1, 0) > values.upper_claw.upper_limit &&
+            U(1, 0) > 0) {
+          LOG(WARNING, "upper claw too high and moving up\n");
+          U(1, 0) = 0;
+        } else if (X_hat(0, 0) + X_hat(1, 0) < values.upper_claw.lower_limit &&
+                   U(1, 0) < 0) {
+          LOG(WARNING, "upper claw too low and moving down\n");
+          U(1, 0) = 0;
+        }
       }
-      if (X_hat(0, 0) > values.lower_claw.upper_limit && U(0, 0) > 0) {
-        LOG(WARNING, "lower claw too high and moving up\n");
-        U(0, 0) = 0;
-      } else if (X_hat(0, 0) < values.lower_claw.lower_limit && U(0, 0) < 0) {
-        LOG(WARNING, "lower claw too low and moving down\n");
-        U(0, 0) = 0;
+      if (bottom_known_) {
+        if (X_hat(0, 0) > values.lower_claw.upper_limit && U(0, 0) > 0) {
+          LOG(WARNING, "lower claw too high and moving up\n");
+          U(0, 0) = 0;
+        } else if (X_hat(0, 0) < values.lower_claw.lower_limit && U(0, 0) < 0) {
+          LOG(WARNING, "lower claw too low and moving down\n");
+          U(0, 0) = 0;
+        }
       }
     }
   }
@@ -806,6 +810,7 @@
     LimitClawGoal(&bottom_claw_goal_, &top_claw_goal_, values);
   }
 
+  claw_.set_positions_known(top_claw_.zeroing_state() != ZeroedStateFeedbackLoop::UNKNOWN_POSITION, bottom_claw_.zeroing_state() != ZeroedStateFeedbackLoop::UNKNOWN_POSITION);
   if (has_top_claw_goal_ && has_bottom_claw_goal_) {
     claw_.R << bottom_claw_goal_, top_claw_goal_ - bottom_claw_goal_,
         bottom_claw_velocity_, top_claw_velocity_ - bottom_claw_velocity_;
diff --git a/frc971/control_loops/claw/claw.h b/frc971/control_loops/claw/claw.h
index 6dbc408..8c81e62 100644
--- a/frc971/control_loops/claw/claw.h
+++ b/frc971/control_loops/claw/claw.h
@@ -29,6 +29,10 @@
   virtual void CapU();
 
   void set_is_zeroing(bool is_zeroing) { is_zeroing_ = is_zeroing; }
+  void set_positions_known(bool top_known, bool bottom_known) {
+    top_known_ = top_known;
+    bottom_known_ = bottom_known;
+  }
 
   void ChangeTopOffset(double doffset);
   void ChangeBottomOffset(double doffset);
@@ -39,6 +43,8 @@
   double uncapped_average_voltage_;
   bool is_zeroing_;
 
+  bool top_known_ = false, bottom_known_ = false;
+
   const ::aos::controls::HPolytope<2> U_Poly_, U_Poly_zeroing_;
 };