Reports are divided into two broad classes: "default" and "full" reports.
A "default" report is one that simply confirms that an action was performed, and provides little additional information. The library uses default reports for simple commands whose full implications should normally be obvious to a player typing such commands: take, drop, put in, and the like. The library's default reports are usually quite terse: "Taken", "Dropped", "Done".
A "full" report is one that gives the player more information than a simple confirmation. These reports typically describe either the changes to the game state caused by a command or surprising side effects of a command. For example, if the command is "push button," and pushing the button opens the door next to the button, a full report would describe the door opening.
Note that a full report is warranted any time a command describes anything beyond a simple confirmation. In our door-opening button example, opening the door by pushing the button always warrants a full report, even if the player has already seen the effects of the button a hundred times before, and even if the button is labeled "push to open door." It doesn't matter whether or not the consequences of the command ought to be obvious to the player; what matters is that the command warrants a report beyond a simple confirmation. Any time a report is more than a simple confirmation, it is a full report, no matter how obvious to the player the effects of the action.
Full reports are further divided into three subcategories by time ordering: "main," "before," and "after." "Before" and "after" reports are ordered before and after (respectively) a main report.
CommandReport : object