Castillo (1-0) struck out the side in the second and fanned eight over the first six innings before Jurickson Profar led off the seventh for the Rockies with a soft single to left-center. Kris Bryant followed with an infield single.
But with two outs and runners at second and third, Castillo got Ryan McMahon to line out to shortstop J.P. Crawford, ending Colorado’s only threat.
“It came into my mind around the fifth inning when I looked up at the scoreboard and I realized nobody’s gotten on base” Castillo said through a translator. “And I remember just going into the dugout and everybody’s just quiet.”
Castillo permitted two hits and struck out nine in seven innings. Justin Topa worked a one-hit eighth, and Paul Sewald struck out the top three batters in the order to finish the three-hitter and earn his fourth save.
Kelenic delivered an RBI single to right field in the sixth to score Ty France from second base.
On defense, Kelenic snagged two hard-hit balls to keep Castillo’s bid for a perfect game intact, then made a terrific grab in the eighth to rob pinch-hitter Elias Diaz.
“I got a good jump,” Kelenic said. “Ball was tailing away from me and I knew I had to just beat it to the spot. Those balls are tailing like that, you have to outrun it.”
Noah Davis, making his first major league start for the Rockies, retired his first eight batters before Kolten Wong singled. Davis pitched five scoreless innings, allowing three hits and three walks while striking out five.
“I thought his poise was there in his first major league start,” Colorado manager Bud Black said.
Dinelson Lamet (1-1) walked two in the sixth before Brad Hand gave up Kelenic’s run-scoring single.
UP NEXT
Mariners: RHP Chris Flexen (0-2) looks to rebound Monday against Milwaukee after allowing eight runs on 10 hits in his last outing.