# UnifiedSpread Command Standard

## Prefix

UnifiedSpread uses `spread` as the canonical package prefix.

Canonical command IDs have this form:

```text
spread.<category>.<operation>
```

Examples:

```text
spread.file.open
spread.file.saveAs
spread.edit.undo
spread.view.freeze.row
spread.insert.image
spread.format.bold
spread.data.filter.apply
spread.tools.compat
```

## Development contract

Only `spread.*` command IDs are part of the public development contract. Unprefixed historical IDs such as `file.open` are intentionally rejected so the package can converge on a clean Host integration contract before product release.

## Descriptor shape

Each command descriptor includes:

- `id`: canonical command ID, for example `spread.file.open`.
- `category`: `file`, `edit`, `view`, `insert`, `format`, `data`, `tools`, `review`, or `contextual`.
- `mode`: supported modes such as `edit`, `view`, or `readOnly`.
- `labelKey`: i18n key.
- `label`: localized label for the current language.
- `iconClass`: Font Awesome class.
- `shortcut`: keyboard shortcut when applicable.
- `implemented`: whether the command is currently executable.

## UI ownership

Menu, toolbar, context menu, keyboard shortcut, and Host `exec()` must route through the same command path. UI components must not duplicate workbook mutation logic.
