It's because of 'config.include_child_root' which does not work correctly. I.e. when you set that you would expect no child root in collections. Which didn't work for the #collection call in RABL.
This caused what should look like this:

    GET .../project.json
    =>
    {
      "projects": [
        {
          "id": 42,
          /* ... */
        },
      /* ... */
      ]
    }

to look like this:

    GET .../project.json
    =>
    {
      "projects": [
        "project": {
          "id": 42,
          /* ... */
        },
      /* ... */
      ]
    }

The person that applied RABL in OpenProject originally worked around that bug through misusing RABL. They disabled 'include root' for both XML and JSON since only then would collections not have root elements either. But this broke the #show views which should look like this:

    GET .../project/42.json
    =>
    {
      "project": {
        "id": 42,
        /* ... */
      }
    }

By disabling the root in general, however, those were missing roots as well as the collection items. While it is desired with collections it is not with single objects shown. Hence then the show views had explicit #node calls where there shouldn't be any necessary.

So what I did is fix RABL to work as intended and then the views to use RABL as intended, too.

To summarise:

* single (root) objects should have a root node, collection items should not
* hence the following RABL options should be used:
    * include_xml_root = true, include_json_root = true
    * include_child_root = false

All this terminology is confusing for XML because in XML root and collection items _always_ need a root node by definition.