Inform 7 extension versions experience

Happy new year everyone.

I think history has shown that it is important that Inform 7 source code explicitly identify extensions by version. On a practical level, you may change from Windows 10 to Apple computer and be setting up Inform 7 from scratch and forgot what extension version you used last year. For example, reference Bronze source code that skips the version references:

github.com/I7-Standard-Examples … e/story.ni

Include Singing Reloaded by Shin.

Include Locksmith by Emily Short.

Also consider what happens if you have authors in different places working on the same project - and the behavior of the story changes because one has a different version of the extension installed. Testing and fixing interactive fiction can be very time consuming and this is exactly the kind of hair-pulling problem you can run into.

By not having explicit indicators of the extension version - it can be much more difficult to compile years later. And the Inform 7 IDE / compiler environment doesn’t seem to promote a way to have multiple versions of the same .i7x extension installed (side by side in ~/Inform/Extensions ) - except to include them specifically in the IDE materials of this one story. Which the updated Bronze I linked to, does publish a set github.com/I7-Standard-Examples … Extensions since someone has bundled them together. Alas, often one encounters that the entire tree of files is not what gets published. Even right here on this intfiction.org forum you can encounter source code without extension version references and be perplexed why the 10 line example code fails on your system.

If authors routinely mark exact extension versions - it also makes it easier to research how to update Inform 7 source code to the newer versions of the extension. Often it comes down to finding an obscure posting on the Internet where someone can save you many hours.

Perhaps the Inform 7 IDE could even add a menu option to replace all existing extension references with explicit ones (or put a comment before each one with hash + version). And recommend this step at the start of a Release build (and preference to auto-update source on Release build).

It would almost be ideal that every Release binary file generated by newer versions of Inform 7 compiler include a hash (SHA-256 of the .i7z) manifest of every extension that was used by the compiler (does it do this already?) - so a tool could track popular extensions and their versions. Also include a SHA-256 of the story.ni source itself - who knows if years later some story becomes world famous and someone wants to prove that the original manuscript (story source code) is signed by the author :wink: This list of SHA-256 hashes would be anonymous (not revealing the extension name, only it’s existence) and could also be useful for interpreter app developers to workaround specific bugs or quirks in stories at run-time. Like manuscripts or screen plays, Inform 7 authorship has proven to often have a long lifetime - and people can come along later to do language translations or even recompile from z-code to glulx.