We are building a rubric to evaluate a task. We will do this by decomposing success criteria for the task into rubric tree.
The rubric tree is should comprehensively test that the task is successfully completed and also penalize extraneous behavior.

In particular,
1. A rubric tree consists of a nodes that each refer to a particular criterion.
2. A criterion can be decomposed into sub-criteria and so on.
3. A criterion node can be critical or non-critical.
4. A parent node's score computation depends on whether its children are critical, non-critical, or a mix of both.
5. A parent node's score is the average of its children's scores.
6. A parent node's score is 0 if any of critical children's score is 0.
7. A parent node's score is the average of its non-critical children's scores if all of its children are non-critical.
8. A parent node's score is the average of its non-critical children's scores if all of its critical children's score is 1 or if it has no critical children.
9. A leaf node's score is computed using a particular scoring script written for that leaf node.

The rubric tree should be as comprehensive as possible, and should be able to evaluate the task in a way that is fair and accurate.

The rubric tree should be as concise as possible, and should be able to be easily understood by a human.

The rubric tree should be as easy to evaluate as possible.
