## Specialized Configuration Tools

Use these dedicated tools for board widget configuration:

| Tool | Purpose |
|------|---------|
| `cplace_board_get_configuration` | Get current config in friendly format |
| `cplace_board_configure_cards` | Configure card sources (searches) |
| `cplace_board_configure_columns` | Configure columns (static or dynamic) |
| `cplace_board_configure_swimlanes` | Configure swimlanes (or disable for flat board) |
| `cplace_board_configure_visual` | Configure UI settings (partial updates allowed) |

**Workflow**:
1. Add board widget using `cplace_execute_layout_script` / `layout.define()` with type `cf.cplace.cboard.main.board` and **required minimal configuration** (see below)
2. Configure cards: `cplace_board_configure_cards` (establishes searchIds)
3. Configure columns: `cplace_board_configure_columns` (references searchIds from step 2)
4. Optionally configure swimlanes: `cplace_board_configure_swimlanes`
5. Adjust visual settings: `cplace_board_configure_visual`

**Required Initial Configuration**:
The board widget cannot be added without initial configuration. Use this minimal configuration when adding the widget:
```json
{
  "cf.cplace.cboard.searchConfigurations": ["{}"],
  "cf.cplace.cboard.columnMapping": "{}"
}
```
This creates an empty board that can then be configured using the specialized tools above.

**Get-Modify-Set Pattern**:
1. Call `cplace_board_get_configuration` to get current state
2. Modify the relevant section
3. Call the corresponding configure tool with the complete desired state

**Cross-Reference Validation**: Column and swimlane tools validate that all `searchId` references exist in card configurations.

**searchId Linking**: The `searchId` connects card sources to column/swimlane mappings, enabling multi-type boards with different mappings per source.

## Attribute Type Constraints

Columns and swimlanes only support a subset of attribute types. Using an unsupported type will cause configuration to fail.

**Valid attribute types for columns and swimlanes:**
- Enumeration values (text/number)
- References
- Linked attributes of type "Link" or "Enumeration value"
- Date values

**NOT valid for columns/swimlanes** (but valid for card display attributes):
- Workflow attributes (despite looking similar to enumerations, they are excluded)
- Number attributes
- Boolean attributes
- Color attributes

Card display is configured via `cardDisplay` in card configuration. Available display fields:
- `dateAttribute`: Date shown in card footer
- `tagAttributes`: Colored tag badges (array of attribute names)
- `colorAttribute`: Dynamic left-border color (requires `attribute` name and `colorMapping` of enum values to hex colors)
- `iconAttributes`: Icon indicators (array of `{attribute, enabled}` objects)

Columns and swimlanes are restricted to the attribute types listed above.

**Column Attribute Type Restriction**:
The attribute used for column mapping must be of type `textEnumeration`, `reference`, or `date`. Workflow-managed attributes are NOT supported as column attributes — the board will show "The board is not properly configured." If the type uses a workflow attribute for status and a board visualization is needed, create a mirror `textEnumeration` attribute with the same values as the workflow states, and add a change listener to keep it in sync.
