The spec has two different mechanisms for defining heterogeneous aggregations:
-- a Record, with named fields
(e.g., a Completion is a Record whose fields are named
"[[type]]", "[[value]]", and "[[target]]")
-- a something (that isn't a Record), with named components.
(e.g., a Reference consists of three components, named
"base", "referenced name", and "strict reference")
Presumably there's no particular advantage to using two, so it would be somewhat simpler to use just one.
Might as well go with Record, since that at least has a name and some support notation defined. (On the other hand, the square brackets in every field's name seem unnecessary.)
that's the general direction I'm moving things, but generally I've only been making the changes when I have to do something significant related to one of the non-Record based abstractions.
I'm probably not going to get them all cleaned up in ES6.
moved to 7th edition