Clear a field type conflict
You will learn how to clear a stuck type conflict on the Fields page after producers stop sending incompatible types for the same path.
When this shows up
On Fields, the Conflict column names a second concrete type Cordo saw for
that path (for example object while the learned type stayed string). The
catalog keeps the first type; later incompatible values do not flip it.
A common DigitalOcean App Platform case: path log is sometimes a plain string
(shell echo / non-JSON stdout) and sometimes a nested JSON object (structured
app logs). Nested paths such as log.msg can still appear once object-shaped
events arrive. Background: Fields and shapes
and OpenSearch-compatible ingest.
1. Stop incompatible values
- Emit one consistent JSON shape for the path going forward.
- For DO runtime logs, prefer JSON stdout so
logis an object (or a string that extracts to an object, with the original atlog._raw). Remove debug prefixes such asls … &&from job Run Commands that print plain text. - Confirm recent events no longer show a bare string in
log.
If plain text keeps arriving, clearing Conflict will come back on the next ingest merge.
2. Resolve in Fields
- Select the stream → open Fields.
- Find the path with a Conflict value (for example
log). - Click Resolve.
- Choose Keep the current type or Use the conflicting type.
- Confirm Resolve.
Cordo only offers choices that share the same analytics storage as the current
type (for example string ↔ object for DO log). The Resolve dialog explains
why each option is available or blocked. A switch like string ↔ number stays
disabled because it would change how values are stored — you can still clear
Conflict by keeping the current type.
3. Verify
- Fields: the path shows your chosen type and Conflict is empty.
- Ingest a fresh structured log; nested paths update as usual.
- Query or live view on a nested field (for example
log.level).
Next
- Concept: Fields and shapes
- DO forwarding: OpenSearch-compatible ingest
- Return to Workflows