If you want to define a permission predicate for write operations, then the predicate indeed takes two arguments, the “old” and the “new” state of the document.
Check constraint
Check constraints are unrelated to permissions. You may be authorized to write to a document, but a check constraint applies a custom validation on the input. The only argument for the check constraint body is the new document.
The body definition .balance >= 0 is shorthand for the lambda (doc) => doc.balance >= 0, where it’s easier to see that exactly one argument was provided.
The documentation (FQL and FSL) indicate the signature accepts ZERO arguments, and that is incorrect. I’m filing that for our docs team.