I was not using await syntax on my custom expectation.
await
BAD
test("my test", async({fixture}) => { expect(fixture).customExpect() }
GOOD
test("my test", async({fixture}) => { await expect(fixture).customExpect() }