This is a presentation contract, not an engine concern — the SDK is code and has no need
of it. Number formatting (turning 0.04 into 4%) is legitimately the engine's job because
the grid renders it; the encoding on top — the ' prefix, TRUE/FALSE, error literals,
blank elision — exists so a model reading a flat listing can infer types without a type
column. That belongs here, above the SDK, beside the renderers that depend on it.
Every read surface shares this module. query_values, describe and the markdown migration
encode through it too, which is the property that makes CellEncoding.Display | display
greppable: whatever text a read printed, grep can find, because one encoder produced both.
Quarantine note.ICell.getText() is the only SDK text call this module makes, and it is on its
way out — its contract fuses formatting, localization, csv escaping and this encoding into one
method with no clear answer for large values. It is isolated to this file deliberately: when
the SDK splits pure number formatting away from the encoding, exactly one file changes and no
renderer notices.
The agent-facing value encoding.
Remarks
This is a presentation contract, not an engine concern — the SDK is code and has no need of it. Number formatting (turning
0.04into4%) is legitimately the engine's job because the grid renders it; the encoding on top — the'prefix,TRUE/FALSE, error literals, blank elision — exists so a model reading a flat listing can infer types without a type column. That belongs here, above the SDK, beside the renderers that depend on it.Every read surface shares this module.
query_values,describeand the markdown migration encode through it too, which is the property that makes CellEncoding.Display | display greppable: whatever text a read printed, grep can find, because one encoder produced both.Quarantine note.
ICell.getText()is the only SDK text call this module makes, and it is on its way out — its contract fuses formatting, localization, csv escaping and this encoding into one method with no clear answer for large values. It is isolated to this file deliberately: when the SDK splits pure number formatting away from the encoding, exactly one file changes and no renderer notices.