# readCellField

> _Since v3.3.0_

Read the raw stored value for `field` from `row`, honoring nested dotted
paths — the non-accessor counterpart to resolveCellValue.

Resolution rules (back-compat critical, see `grid-core.md` DECIDED #438):
1. Plain field (no `.`) → direct `row[field]` (identical to legacy path),
   except prototype-polluting keys (`__proto__`/`constructor`/`prototype`)
   which return `undefined` — symmetric with writeCellField.
2. Dotted field whose literal key is an **own property** of `row` → that
   flat value wins (preserves synthetic-key rows that really store `'a.b'`).
3. Otherwise → nested traversal via getByPath.

```ts
function readCellField(row: unknown, field: string): unknown
```

## Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| `row` | <code>unknown</code> |  |
| `field` | <code>string</code> |  |
