The 49ers still won't call this a quarterback competition.
But it is a competition, because Trey Lance took his first rep with the starters today. Which means Jimmy Garoppolo had to walk to the sideline and watch the rookie play his position.
And the rookie was better than him.
Here's what each quarterback did Tuesday morning.
Completed his first 13 pass attempts before missing his final throw of the morning -- a deep shot to Richie James Jr. Which means Lance finished practice with a completion percentage of 93. It was one of the best training camp practices I've ever seen from a 49ers quarterback, and I've been covering the team since 2011.
Here's the blow by blow of Lance's morning.
1. Ran a zone read between the tackles and gained 10 yards.
2. Ran a zone read around the right end and gained 15 yards.
3. Ran another zone read around the right end and gained another 15 yards.
4. Completed a checkdown pass to running back Elijah Mitchell in the right flat.
5. Ran a zone read between the tackles and gained 20 yards.
6. Completed a 15-yard pass to River Cracraft running an out route. Beautiful throw.
7. Completed a five-yard pass to Mohamed Sanu running a curl route.
8. Replaced Garoppolo on the first-team offense for one play, ran a zone read between the tackles and gained 15 yards.
9. Ran a zone read to the left and lost five yards. Should have handed off to the running back. Bad read.
10. Completed another five-yard pass to Sanu running a curl.
11. Scrambled out of the pocket to his left and threw a 60-yard rocket on the run to Trent Sherfield for a touchdown. This was by far the best play of camp by any player. Garoppolo will never make this play in his life. He simply doesn't have the talent.
12. Ran a zone read up the middle and gained five yards.
13. Ran a naked bootleg to the right and gained five yards.
14. Completed a checkdown pass to Wayne Gallman.
15. Got sacked by Jordan Willis.
16. Completed a 10-yard pass to Ross Dwelley running a stick route.
17. Ran a zone read to the left and gained five yards.
18. Rolled right and completed a quick pass to Sanu.
19. Completed a 10-yard pass to tight end Charlie Woerner running a stick route.
20. Fumbled the exchange during a handoff to Gallman.
21. Rolled left and completed a five-yard pass to Woerner.
22. Completed a five-yard pass to Sherfield running a curl route.
23. Rolled right and completed a 15-yard pass to Sherfield.
24. Rolled left and completed a 10-yard pass to Cracraft.
25. Overthrew Richie James Jr. deep up the sideline. This was Lance's only incomplete pass of the day. Give the man more reps with the starters. He has earned them.
Completed 11 of 18 pass attempts (61 percent), his longest completion went for 15 yards, and he never scrambled. Meaning it was a typical day for Garoppolo.
Here's a blow by blow of his morning.
1. Threw late to his second read, River Cracraft, who was running a curl, and the pass got batted down by cornerback Ken Webster.
2. Completd a checkdown pass to Kyle Juszczyk in the right flat. George Kittle was open running up the right sideline but Garoppolo didn't throw it to him.
3. Completed a five-yard pass to Brandon Aiyuk who was covered by Webster.
4. Completed another five-yard pass to Aiyuk who was covered by Webster again. Webster isn't good.
5. Threw to Kittle running a deep crossing route and almost got picked off by Jimmie Ward, who was waiting in the area where Garoppolo threw the ball. Garoppolo never saw him.
6. Completed a five-yard pass to Aiyuk after getting sacked by Dee Ford.
7. Completed a 15-yard pass to Aiyuk running a curl route against Jason Verrett.
8. Rolled left and completed a 10-yard pass to Kittle.
9. Threw an incomplete pass behind Aiyuk who was running a shallow cross.
10. Competed a 10-yard pass to Sherfield running a curl.
11. Completed another 10-yard pass to Sherfield running another curl. Sherfield is the king of curls.
12. Completed a 10-yard pass to Cracraft running an out route instead of throwing to Travis Benjamin who was open deep. This is a big reason why the 49ers traded for Lance. Garoppolo simply won't pull the trigger on the downfield throws consistently.
13. Rolled to the right and fired an incomplete pass over Cracraft's head.
14. Threw a deep pass to Raheem Mostert running a wheel route and missed inside and low. Never gave Mostert a chance.
15. Threw a deep pass to Aiyuk running a fade route and got his pass broken up by Jason Verrett.
16. Completed a five-yard pass to Kittle running a stick route.
17. Completed a five-yard pass to Aiyuk running a curl route.
Decent practice for Garoppolo, who got completely upstaged by his understudy. Pretty soon, the understudy will be Garoppolo.