Best way to enumerate actions and rules applying to objects

You can list the names of rulebooks.

Include (-
[ PrintRulebookNames i;
  for (i = 1 : i < NUMBER_RULEBOOKS_CREATED : i++) {
    print (string) RulebookNames-->i;
    print "^";
  }
];
-)

To say rulebook names:
    (- PrintRulebookNames(); -)

You should look at auto.inf and see what ni (the I7 compiler) actually generates. If you know C, much of it will be straightforward to read; the Inform 6 Documentation will fill in the less straightforward parts.

You’ll see that the I7 compiler does a huge amount of what would be considered ugly hard-coding if it were done by a human. And that’s why there are all these things where it seems like there must be a way to get at information, but we keep saying there isn’t.