I think if you don’t support classic IF Cloak of Darkness out of the box, your new IF system doesn’t work. It’s artificial and contrived for a good reason, You have to start here.
If you have a new one, that doesn’t support Cloak of Darkness, it’s useless and it’s trash. I am saying that affirmatively.
I just mean that Cloak of Darkness can be added to, if you are actually working on an IF language or system that needs more. But you can’t fool yourself if it doesn’t have the basics. I got a lot of what I thought was the basic, start from scratch, that I could define a Room, and I could with certainty define which Room an Object was in. That’s when I had started over with Scott Adams.
Once I defined an Object, and which Room it was in, and I brutally defined Inventory as a Room, I was writing IF in Swift. Then I made absolutely sure, that my function moved Object from Room to Room, I started writing interactive fiction with my own code. Then when I tried my successful code with Cloak of Darkness, I understood why Closk of Darkness is the standard, and I still stand by it.
I’ve always thought that “darkness”, however you want it to be, should be definable in your IF language and therefore not have to be a built-in system primitive. So, yes, your IF system needs to be able to do it, but there should be no requirement that it exists a priori.
If you can customise scope, which i think you can in Inform, is it not possible to build “darkness” yourself. A first approximation of darkness is to set the scope to the player (and within) as opposed to the standard definition of the current location (and within). You then need to take account of lights etc.