One thought, though I think the solution is simple: when Researcher A goes to work on a model and needs to update code on the HTTP server to match, those changes should not go live for everyone.
Researcher A might be expected to spin up a dev instance of the HTTP server, update a URL in their Excel sheet to point to their dev instance, and go.
Alternately, there could be URL parameters to pass some kind of version indication, and Researcher A might use the same HTTP server as everyone else but set their Excel sheet to request "?v=dgentry.9.5.2018" in their URLs (for example).
Versioning might also get used to resolve some of the compatibility issues mentioned earlier today, like how many regions there are. Honestly though, I think we have other options there like named fields in JSON rather than fixed-size arrays where Excel code needs to know the definition of each column.
Possibility for integration tests of Excel: http://docs.xlwings.org/en/stable/quickstart.html
For example, a test could be:
import xlwings as xw
with xw.Book(r'/path/to/drawdown.xlsx') as workbook:
sheet1 = workbook.sheets['Sheet1']
cell_A1 = sheet1.range('A1').value