1A. DL Solomon Thomas. The No. 3 pick in the draft didn’t start — Tank Carradine did — but made an impact on his first snap when he pressured Tyler Bray into an interception. Thomas played throughout the contest — he, Reuben Foster and Lorenzo Jerome played the most snaps on defense — including in the fourth quarter after third stringer Ronald Blair left with a groin injury. Thomas had a strong debut, played both defensive end and defensive tackle, and was credited with two tackles. During the fourth quarter he got some work from trainers on his neck and shoulder but said afterward it was not a big concern.
1B. LB Reuben Foster. He started the game and saw action at both weak-side and middle linebacker. Foster didn’t make a big impact on the stat sheet — two tackles — but he broke up a pass in the end zone and had a tackle on the goal line. It should be noted that Foster has been playing with a sprained left ankle for the last week. With the regular-season opener less than a month away, the 49ers want him to play a lot of snaps both in practice and the preseason.
3A. CB Ahkello Witherspoon. As has been the case in practice, Witherspoon entered the game with the second-team defense. A good sign: He wasn’t targeted often when he was on the field. A better one: He was credited with a tackle.
3B. QB C.J. Beathard. He was the third quarterback to enter the game and he admitted his timing wasn’t great initially. But he eventually got into a rhythm, especially with fellow rookie Kendrick Bourne. Bourne and Beathard didn’t have a lot of time to develop chemistry in the offseason because Bourne was held out by the same rule that prevented Thomas and some other Pac 12 players from attending spring camp. But they made up for lost time, especially on a 46-yard touchdown early in the fourth quarter. Beathard hit Bourne on the two-point conversion for good measure. Beathard also showed the toughness that prompted Kyle Shanahan to trade up into the third round for him as he threw strikes while absorbing big hits in the pocket.
4. RB Joe Williams. He and Raheem Mostert were the 49ers’ two most impressive running backs. Williams averaged 8.6 yards on seven carries and showed the burst — especially on a couple of outside runs — that convinced the 49ers he was worth taking in the fourth round of the draft.
5A. TE George Kittle. He did not play due to a hamstring injury. Vance McDonald started at tight end.
5B. WR Trent Taylor. Jeremy Kerley was the team’s top slot receiver. Taylor got most of his work in the second half but was as efficient as he’s been in practice, catching all three of the passes that went his way for 33 yards. He also looked good on punt returns, including one he took back for 33 yards. (Kerley also was the first choice on punt returns DeAndre Carter was second).
6A. NT D.J. Dones. He entered the game with the third-team defense and recorded a fumble recovery after linebacker Austin Calitro jarred the ball loose.
6B. DE Pita Taumoepenu. Effort is not an issue with Taumoepenus. But he probably needs more experience and more time in the weight room before he will land on a 53-man roster. The practice squad seems like his best bet.
7. CB Adrian Colbert. He did not play after suffering an ankle injury on Saturday.
Others of note: Jerome and Foster were the only 49ers rookies who started. He had a strong hit that upended receiver Chris Conley that nearly caused a fumble. (It was correctly ruled a reception upon review. He finished with three tackles. The Chiefs completed quite a few long passes when he was in the game, but they mostly were down the sidelines, which is not his purview. … Tight end Cole Hikutini played with Blake Bell with the third-string offense. He was not targeted in the passing game.