**Groups table rows by the value of a single attribute.**

**Format**: a single attribute-name string (not an array), plus an optional `groupOrder`.
- **Custom attributes** require single quotes around the attribute name: `"'cf.cplace.myType.attributeName'"`
- **Builtin attributes** (e.g., `name`, `createdAt`, `creator`, `modifiedAt`, `modifier`, `owner`) are specified without quotes: `"name"`
- **`groupOrder`**: `"asc"` or `"desc"`.
- **Inside a `layout.define` string**: wrap the config value in a **double-quoted** outer JS string so the single-quoted token needs no escaping — see the `cplace_execute_layout_script` tool description (quoting/escaping note). Never wrap it in a single-quoted string with unescaped inner `'` (throws `SyntaxError`).

Live-verified on a current-version instance: the apostrophe-wrapped custom token validates (`VALID_COMPLETE`), is stored byte-for-byte, and renders visible grouping (rows grouped under "Status: Draft" / "Status: Active"). The **bare** custom name (no apostrophes) is rejected with `VALIDATION_ERROR` "Invalid Value" — the apostrophes are the discriminator. Read-back returns the stored value in the `\'`-escaped single-quoted form.

**Precondition — the attribute must be in the widget's `search`**: `groupColumn`'s legal options are computed live from the widget's `search`; the search's result type(s) must expose the attribute for it to appear in the enumeration. **If a correctly-quoted token still errors, check `search` first** — do not re-try quoting variants. (Reported edge, not re-verified live: if the `search` JSON is malformed, the option set collapses to a single `name`, so only `groupColumn: "name"` validates until `search` is fixed.)

**Multi-level grouping (current cplace)**: `enableMultiGrouping: true` + `multiGroupColumns` is the multi-level grouping path on current cplace. Both are **declared** attributes of the current tableWidget definition (confirm via `cplace_get_widget_definition`). They are **absent in 25.3/25.4** — on an older instance `groupColumn` is the only grouping path. The exact `multiGroupColumns` JSON is version-dependent; obtain it by configuring multi-grouping once in the UI, then reading it back via `cplace_get_layout_script`, rather than hand-authoring a literal.
