The problem with the quest log method is that you can end up in a state like I was in.
There are two methods:
- Keep a preference "lastXXXDone" set to the ascension # when you last did XXX. Read it whenever you want to see if XXX is done and set it when you do XXX
- For things that are "Quests", don't bother with a Preference - a database lookup backed with a disk file - but read the Quest Log at startup and set a local variable, and set that same variable when you finish the Quest in run.
They are equivalent. The first one requires a proliferation of Preferences. The second one works only for things that appear in the Quest Log. In order to operate correctly, both require that you notice the Quest completion in-run and either set the local variable or the Preference. The bug - or "problem" - you mention is when you do NOT include the "detect XXX in run" part of the process.
Frankly, I'd just as soon skip the (3!) page loads of the Quest Log at login and make everything a Preference; we have to read the Preference file anyway. But, a fair number of the things we read from the Quest Log we do NOT bother "noticing" in-run and keeping up-to-date. So, it's basically a lazy way to avoid keeping Preferences correct and creating bugs - like this bug report.
That would be a good Project for a new Developer: Find everything we read from the Quest Log and make them all into Preferences, complete with detecting in-run when such-and-such an event happens and you complete a Quest. And, for things that ARE in the Quest Log but are also Preferences, if we detect Quest completion on the Quest Log, set the Preference...
I would turn all the local variable Quest variables into Preferences. I would make parsing the Quest Log - if you happen to visit it in-run - set those Preferences (and this is how we would detect and correct for finishing quests outside of KoLmafia - or before we started detecting the completion as it happens). I would stop reading the Quest Log at login.
I really don't have time to do this - but this would make logging in faster at the expense of an unnoticable Preference lookup instead of a local variable access to check for quest completion.