The key idea: When a program gives some kind of result, it should be able to say how it came up with that answer – what rules did it apply, in what order, and why. If a reference was consulted, which one?
Basically, software should be held to the same standards we have for people, especially in the field of law. Here’s what that might look like. This is, again, the “development” interface… an end-user would see something much fancier:
>> Abbreviation.abbreviate 'Chief Justice' => "C.J." >> Abbreviation.rule => "Appendix 3"
It’s a start.
As far as the technical implementation, I’ve been considering rule-based systems, prolog-based systems and object-oriented decomposition.