Online telemetry for IF quality control?


One of the features that I’ve considered implementing for a long time in the trombicula web-based Scott Adams interpreter is optional telemetry. (It was actually one of the reasons to create it in the first place.) The idea in my mind, is that a developer of a text adventure game could configure an interpreter to log and send anonymous debugging information whenever generic “error messages” like “i can’t do that” or “i don’t know that word” occur, when a tester (or even a “real” player) is playing the game.

I have a couple of questions relating to this:

  1. What is morally “okay” to do, considering personal integrity and existing laws?
  2. What (if any) interpreters/devsystems currently do this already? How do they do it?
  3. How would you implement the systems around this most elegantly? I imagine some simple web API endpoint that receives JSON blobs… somehow.
  4. How valuable would this be? Are there equally valid, or more valid approaches?

My apologies if this has been brought up before. I couldn’t find any previous discussions around this. Thanks :slight_smile:

1 Like

My gut feeling is that it sounds a bit creepy having the interpreter phoning home with details of a play session - but maybe that’s just me. No doubt you’d be obliged to alert the player about it up front.

I’d be interested to know if any other systems do this. I recall when I tested The Impossible Bottle that Linus had it set up to send him a transcript automatically - not sure if that’s a Dialog thing or just the way it was set up on his server.

1 Like

Thanks. It’s not just you. It’s creepy as hell when software does this. It would have to be “opt-in” and clearly visible, or it’d do more harm than good by pissing people off.

I’d like to know a bit more about this as well! Did a quick search through the source code and documentation and couldn’t find anything right away though. :confused:


IFComp does this for games written in Inform:


If your game is written with Inform, then its online-play version might support transcripts, via Juhana Leinonen’s “if-recorder” software.

The website’s software will do its best to set up transcript-recording by itself, without requiring any additional work from you. If transcripts are available, they’ll appear on your entry-management screen once judging begins. We don’t guarantee that this will work — but it probably will.
Quoted from IFComp - Author’s Handbook


Cool - “if-recorder” does something similar to what I had in mind (even if I wouldn’t implement it the same way for my particular usecase).

The facility is built into the GlkOte library – this is what IFComp uses. There’s some documentation at – see the section about recording_url.

This sends every command and its response. It doesn’t try to filter out error messages, since the interface can’t really tell what’s an error, and you want the context anyway.

However, you do have to think about how intrusive it is. IFComp’s privacy policy links to, which is not a short document and has a few lawyer-hours in it. (And in fact it probably needs some more – we haven’t updated it since before IFDB was taken on board.)

1 Like

This is the major reason I refuse to play any browser game ever.
Authors should just trust players to send bug reports.

GlkOte is impressive. It’ll take me a little while to understand what’s even going on, I think :slight_smile:

Would it be better if the testers/players were given the option to explicitly send debug information by pressing a “submit telemetry” button or something like that, rather than doing it in the background?

Yeah, I think this is a good approach, and mirrors what I’ve seen a lot of other games and applications do – and it enables different players to make different judgments based on their comfort level with the general idea and the specific author/application.

I do think this is a good idea, and does add something beyond bug reports – especially for IF, transcripts provide a huge value to authors since instead of just getting “I had to play a bunch of guess-the-verb to solve this puzzle,” you get the ten different commands they actually tried to type, which makes implementation way easier.

1 Like

As an author I would love to get as many transcripts as possible. As a player I’d appreciate an easy way to provide a transcript to the author of every game I play. And as a 2021 netizen I demand I get informed about the data transfer in advance, get to know what data is being transferred (IP, email address etc.), and get an option to not send anything.


Very well put.
Follow up question: What information would be reasonable to transfer?

Off the top of my head, the following seem both useful and only moderately intrusive to me:

  • Some way to discern the specific playing session of the tester/player (session start time?)
  • Snapshot of game state when “error” occurred, along with what the tester/player typed in plain text
  • An audit trail of what the player needed to do to get to the current state (possibly including pseudo-random number generator seed)

Are any of these problematic, and/or could something else be included in these to add more “debugging” value?

1 Like

Has session length been brought up? That is, how long it took to generate a specific transcript.
Would this be intrusive? I think it kinda might. :thinking:

1 Like

I would definitely want to know ahead of time along with with details. With options not to play or prevent telemetry.

From an Inform author point of view, I just need the raw transcript. No name, no IP address, no email address, just everything that happens in the game from the first “look” to the final “quit”. Optionally it would be nice to be able to contact the player to thank him and, if requested, put him into the credits, but to improve the game, that’s not necessary.

Does that privacy policy mention recording? I couldn’t find anything.

I too would prefer it as a clear per-game opt-in choice. It is a potentially very good thing and I expect authors learn a lot from it. But it would feel wrong if the user hadn’t been presented with this clear choice.

1 Like
    • It’s morally ok to record transcripts if there is informed consent, and it’s entirely optional, and there are no UI tricks to confuse the player into consenting to something they don’t understand. It’s immoral and may even be illegal to do it secretly - especially for applications where players are free to type in a lot of freeform text.
    • Adventuron’s approach is to allow transcripts to be started and ended MANUALLY via the TSTART and TSTOP commands. As this is a user action, it’s equivalent to granting consent. There is an additional control in that the transcripts are only saved locally. The user themselves must take the transcript file and email it manually to the author in order for the author to see the transcript, the game itself never phones home.
    • Yes, a web api that received a string argument would work if you were “phoning home” - but I strongly advise against that approach as it’s creepy and would likely set a lot of people against your interpreter.
    • It’s very valuable to have transcripts, but consent matters. If you have a special version with optional telemetry baked in - make sure that it doesn’t phone home, and guarantee it doesn’t phone home, and make sure a manual step (of sending the telemetry is required). The manual step is critical to the user doing something of their own free will.

This is also a capability of fyrevm-web if the author implemented sending turn objects to a server. I’d only do this in two cases. For beta-testing with testers knowing this is happening and if I built an educational story to inform the teacher what their students were doing.


I like this approach! It’s simple to implement. For a web-only client, saving things locally as a file is more complex to implement but it does get rid of the additional complexity to run a separate service for receiving report data, while preserving the personal integrity of the tester/user since they explicitly have to send the “debug” file to the author.


Saving from a web-page isn’t too bad these days: just make a link with a data-url and a download attribute. Often I hook it up to a button (on click, insert a hidden link, call its click method, remove hidden link) like this: schedule-me/schedule-me.js at master · JoshuaGrams/schedule-me · GitHub