Below is a quick demonstration I wrote to show the issue. Normally all three lines inside the testMethod should reset the value of $string variable. But when I submit the form, even though it shows the $writeHere text inside the span, it doesn't clear the input.
Am I doing something wrong? This is the only volt component on the page, there's nothing that can interrupt it from resetting it.
Similarly $this->string = 'test'; also doesn't work in the testMethod
<?php
use Livewire\Volt\Component;
new class extends Component {
public $string = '';
public string $writeHere = '';
public function testMethod(){
$this->writeHere = $this->pull('string');
$this->string = '';
$this->reset('string');
}
}; ?>
<div>
<form wire:submit.prevent="testMethod"
class="flex flex-col items-center justify-center gap-3 py-4">
<input type="text" wire:model="string">
<button type="submit">Submit</button>
<span>{{ $writeHere }}</span>
</form>
</div>
This example in the gif is running the code above.

Found the bug
I installed this app with Breeze starter kit, which includes AlpineJs and imports it in the app.js file. And I wasn't smart enough to check dev tools console before making this post. So I didn't notice the error log saying Detected multiple instances of Alpine running. I commented out three lines that import alpinejs in the app.js file and everything started working fine. I often forget there is javascript magic happening in the background because I'm writing php code.
And this is not even the first time this bug haunts me.