Hi @sebmercier, thanks for the detailed message! I'll take on the issues you raised piece-by-piece.
Are the docs wrong?
ODK Collect, from May 2018 and likely before, should behave as is described at https://docs.opendatakit.org/form-logic/#when-expressions-are-evaluated. I have tried the example in the docs with ODK Collect v1.18.2 (the latest version) and it works as described. That is, when I use now()
in a calculate, I get the datetime of the last finalized save.
I've sent in a pull request to fix the minor ${age}
issue you found at https://github.com/opendatakit/docs/pull/943. In the future, please do file issues and send in pull requests if you find mistakes in the docs. We really need help with the docs, so if you find those docs valuable and you want to contribute, let me know and we can help you get started.
Why forks of Collect and Enketo might behave differently
ODK Collect and Enketo use different form processing engines. While we work really hard to make sure their behavior is the same (Enketo's developer is on the ODK technical steering committee), their behavior can be different.
Kobo Collect is a clone of ODK Collect with the icons changed, so you'd think the behavior should be the same, but it's sometimes not because it's a clone from April 2018. We've shipped a lot of fixes and features since then...
Recommended ways to do timestamping
If you do have interviewer fabrication, the form audit log is what I'd recommend you use. It should work really well for you. If it doesn't let us know! P.S. We'll be adding background GPS coordinates to the audit log in the next few weeks!
If you need lightweight timestamping, try the technique described by @LN at Timestamping responses - #3 by LN. Personally, I'd do this in addition to turning on the audit log so you have both data for quick review and for detailed analysis.
One more thing
When you get a chance, please introduce yourself here. It helps build community!