Another obvious observation…
So in the end I have a sheet that must evaluate identically in the web browser and in a back-end process.
Spreadsheets typically have a small expression language used to calculate fields from other fields. The expression language is usually something invented - not used anywhere else - and need their own little specialized interpreter. In my case I have need for a similar interpreter. I could have one implementation on the server, and do a round-trip to the server every time a cell needed update. I could do an implementation to run in the browser, and another implementation for the back-end process, with the risk that the two implementations might differ (and additional development and testing time). Neither alternative is ideal.
Have to chew on this one a bit more…