Skip to content Documentation index for agents (llms.txt)
Glotto Beta
Get started

Migration diagnostics

Migration diagnostics — from Stainless

Migrating from Stainless translates a stainless.yml into a glotto.yml. It is non-destructive and never silently drops anything: every key it could not carry over is reported, so the migration report is the checklist of what still needs a human.

Code Severity Meaning
GLOTTO_MIGRATE_STAINLESS_UNMAPPED warning A key in your stainless.yml has no glotto.yml equivalent, so it was dropped rather than guessed at. The path names the key (nested paths are reported in full). Review each one against the migration guide — some are Stainless-specific and safely gone, others have a different Glotto mechanism worth re-expressing by hand.
GLOTTO_MIGRATE_STAINLESS_PLACEHOLDER warning A required glotto.yml field could not be derived from the Stainless input, so the migrator wrote a placeholder value to keep the output well-formed. Replace every placeholder before running glotto generate — the config is not usable until you do.

Both are warnings rather than errors because the migration itself succeeded; they describe work remaining, not a failure. Together they are the first Glotto diagnostics most migrating teams see.

Migration diagnostics — from Fern

Migrating from Fern translates a fern/generators.yml into a glotto.yml. Where the Stainless migrator’s report is binary — carried over, or dropped — this one gives every input key one of four verdicts, because several Fern knobs are Glotto guarantees: reporting those as a loss would say you are giving up a property at the moment you are gaining a stronger version of it.

Code Severity Meaning
GLOTTO_MIGRATE_FERN_MAPPED info The key was translated. The message names the glotto.yml key it became.
GLOTTO_MIGRATE_FERN_GUARANTEED info You are not losing this. Glotto provides the property unconditionally, so there is nothing to configure — the message names the guarantee (open enums, unknown-field preservation, the emitted test suite).
GLOTTO_MIGRATE_FERN_NOT_HONORED info A Fern emission-shape knob Glotto answers differently on purpose (noSerdeLayer, the pydantic_config block, union: v0|v1, …). Honoring it would mean re-implementing Fern’s emitter, so it is a deliberate non-goal rather than a gap.
GLOTTO_MIGRATE_FERN_UNMAPPED warning Genuinely no glotto.yml home, reported at its precise dotted path. This is the list that needs your attention.
GLOTTO_MIGRATE_FERN_PLACEHOLDER warning A required glotto.yml field your Fern config cannot supply (your organization details live in fern.config.json, your environments in the API definition). Replace every placeholder before running glotto generate.
GLOTTO_MIGRATE_FERN_IGNORE info A .fernignore entry. Fern freezes a listed file; Glotto three-way-merges instead, so the entry is reported with the construct that replaces it and no file is written.
GLOTTO_MIGRATE_FERN_NAME_UNPINNED warning Under --preserve-names, an emitted member name that could not be pinned to the Fern spelling — a reserved word (pinning it would emit code that does not compile), an ambiguous acronym split, the client class name, or a transparent-DTO engine. Names both spellings so nothing is left silently divergent.
GLOTTO_MIGRATE_FERN_GROUP_AMBIGUOUS error Your project declares several generator groups and no default-group, so there is nothing to migrate without a choice. Re-run with --group <id>; no file is written.
GLOTTO_MIGRATE_FERN_DOCS_PLACEHOLDER warning The docs half’s sibling of GLOTTO_MIGRATE_FERN_PLACEHOLDER: a required field of the migrated docs block your fern/docs.yml cannot supply. Today that is a docs.versions[] spec snapshot — Fern’s versions[].path names that version’s docs config, not a spec — so each entry is written with a clearly-marked TODO source for you to replace.
GLOTTO_MIGRATE_FERN_DEFINITION_INPUT error This is a Fern Definition project, not an OpenAPI one. Export the API first (fern api export --openapi) and re-run against the exported document.

The two error codes stop the migration and write no output — half-migrating either case would produce a config that validates but generates the wrong SDKs.