Validation Code Reference
Every issue code StringLane reports, its severity, and what it means. The same codes appear in the desktop app Issues Panel, in stringlane check, and in the MCP validation tools.
Last updated
Every finding carries a stable code. Branch on that rather than on the message, which is written for a person and may be reworded.
Severity is what StringLane thinks of the finding. What fails your build is a separate decision: by default any finding not in your baseline sets exit 1, and --fail-on narrows that to the codes you name.
Errors#
Something is structurally wrong. These are the findings that break an app rather than read badly.
Warnings#
Legal, and probably not what you meant.
Info#
Worth a look, never worth failing a build over.
The last two come from the source-code scan rather than from reading your locale files, so they only exist on a run that read your code. They are info deliberately: upgrading the CLI must not turn a pipeline red, and a recorded baseline must not flip. --fail-on unused_key opts in, and --no-scan turns the scan off — but not both, which is refused rather than silently never firing. Neither is a verdict: see Unused keys for the four ways a live key lands in that list.
Choosing what fails CI#
Start narrow and widen. The errors are the ones that break a running app:
stringlane check . --fail-on missing_key,placeholder_mismatch,format_placeholder_mismatch,malformed_placeholder,markup_mismatchIf the project already carries a great deal of this, do not encode it in --fail-on. Record a baseline instead, so the debt stays visible and only new findings can fail: see Inspect and check.
Where these appear#
The same codes surface in three places, because they come from one validator:
- the desktop app's Issues Panel, as validation badges;
stringlane check, in the terminal and in the--jsonenvelope;- the MCP
validate_translationsandapply_translationstools, which is what stops an agent writing a broken translation.
Not every code can fire on every format. A format with no native comment syntax cannot raise findings about comments, and format_placeholder_mismatch is about printf-style specifiers, so it is an Apple and Android concern rather than an ARB one.
Frequently asked questions
- Which StringLane issues fail a CI build?
- By default every finding that is not in your committed baseline sets exit 1, whatever its severity. Pass --fail-on with a comma-separated list of codes to narrow that to the ones you care about; it can only soften the result, never harden it.
- Are the same validation rules used in the app and the CLI?
- Yes. The desktop app, stringlane check and the MCP validate_translations tool are built on one validator over the same files, rather than three implementations of the same rules that drift apart.
Where Key Metadata Is Stored: .stringlane/metadata.yaml
Next →stringlane.yaml Reference