The discriminator between a membrane and a logger

The first version of this test passed for the wrong reason, and it took me a while to notice.

I'd built a small plugin that puts gx, a reversibility layer for agent effects, in front of OpenClaw's before_tool_call hook. The plan was straightforward: intercept a file write, escrow an inverse for it through gx, let the write proceed, and prove afterward that gx could undo it. Four scenarios, twenty-one assertions, everything green. Then I looked at what the passing assertion in scenario A actually checked, and it was this: the file, after the write, contains the content I wanted.

That's true if gx did anything at all. It's also true if gx did nothing and the native write tool just wrote the file itself, the way it would with no plugin installed. A test that passes identically whether or not the thing under test ran isn't testing the thing under test. It's testing that the file system works.

Why the fix isn't obvious