platformOS Check — Available Checks
Available Checks
You can run the following checks as part of platformOS Check. Each check identifies a specific problem or a place in your code where a best practice is not being followed.
For configuration options, severity overrides, and how to disable checks per-file, see platformOS Check Configuration.
Liquid File Checks
These checks analyze the style and validity of Liquid templates, including .liquid files in app/views/pages/, app/views/partials/, and app/lib/.
| Check | Severity | Description |
|---|---|---|
| DeprecatedFilter | warning | Reports usage of deprecated Liquid filters |
| DeprecatedTag | warning | Reports usage of deprecated Liquid tags |
| DuplicateFunctionArguments | warning | Reports duplicate argument names in {% function %} calls |
| DuplicateRenderPartialArguments | warning | Reports duplicate argument names in {% render %} tags |
| FilterArity | error | Reports a known filter called with the wrong number of arguments — platformOS raises Liquid::ArgumentError at render time |
| FilterWithoutEffect | warning | Reports a filter in a tag operand or argument, where the runtime never applies it and the value is used unfiltered |
| GraphQLVariablesCheck | error | Validates that parameters passed to {% graphql %} match the query's variable definitions |
| ImgWidthAndHeight | error | Requires width and height attributes on img tags to prevent cumulative layout shift |
| ImplicitIncludeArguments | warning | Reports a variable an {% include %}'d partial reads that the call site does not pass, and so inherits from the caller's scope — working, but invisible at the call site |
| InvalidWriteTarget | error | Reports a write into a container the runtime rejects — a subscript write ({% assign %}, {% hash_assign %}, {% function %}) that is neither a Hash with a key nor an Array with an index, or << against anything but an Array |
| JsonLiteralQuoteStyle | error | Enforces double-quoted string literals inside inline object/array literals — single quotes are not valid JSON |
| LiquidHTMLSyntaxError | error | Reports Liquid and HTML syntax errors |
| MissingAsset | error | Reports references to asset files that do not exist |
| MissingContentForLayout | error | Reports layouts that never output {{ content_for_layout }}, which drops the page body |
| MissingDocParam | error | Reports a variable a partial reads from its caller without declaring it as a @param in its {% doc %} tag, which leaves it required by the implementation and impossible to pass |
| MissingPage | warning | Reports links and form actions pointing to routes with no matching platformOS page |
| MissingPartial | error | Reports references to partial, function, or GraphQL files that do not exist |
| MissingRenderPartialArguments | error | Reports missing required arguments at {% render %} and {% function %} call sites, for partials that declare their parameters with a {% doc %} tag |
| NestedGraphQLQuery | warning | Detects {% graphql %} tags inside loop tags — the N+1 pattern — including transitive calls via {% render %} and {% function %} |
| ParserBlockingScript | error | Reports <script> tags without defer or async that block HTML parsing |
| PartialCallArguments | error | Ensures required arguments are passed to {% render %} and {% function %} call sites and no unknown arguments are passed, for partials with NO {% doc %} tag, inferring the parameter list from the partial body (formerly MetadataParamsCheck) |
| RequiredDocParamWithDefault | warning | Reports a parameter a {% doc %} tag declares as required that the partial then reads through the default filter, which almost always means the declaration should have been [param] |
| ReservedVariableName | error | Reports reserved Liquid literals (true, false, nil, null, empty, blank) used as variable names |
| RollbackOutsideTransaction | error | Reports a {% rollback %} reached outside a {% transaction %} block, following {% render %}, {% function %} and {% background %} calls and reporting on the call site |
| TranslationKeyExists | error | Reports translation keys used in templates that are not defined in the default language file |
| UnclosedHTMLElement | warning | Reports unbalanced HTML tags in branching Liquid code |
| UndefinedObject | warning | Reports references to variables that have not been defined |
| UniqueDocParamNames | error | Reports duplicate @param names in {% doc %} tags |
| UnknownFilter | error | Reports usage of Liquid filters that do not exist in the platformOS filter set |
| UnknownProperty | error | Reports access to properties that do not exist on variables whose structure the linter can determine — including GraphQL results and values returned from a {% function %} call |
| UnrecognizedRenderPartialArguments | warning | Reports arguments passed to {% render %} or {% function %} that are not declared in the partial's {% doc %} tag |
| UnusedAssign | warning | Reports variables assigned with {% assign %} or {% function %} that are never used |
| UnusedDocParam | warning | Reports @param entries in {% doc %} tags that are never used in the partial body |
| ValidDocParamTypes | error | Reports @param type annotations in {% doc %} tags that are not valid platformOS types |
| ValidFrontmatter | warning | Validates YAML frontmatter (required fields, allowed values, deprecated keys, association existence) for known platformOS file types |
| ValidRenderPartialArgumentTypes | warning | Reports type mismatches between arguments passed to {% render %} and the types declared in the partial's {% doc %} tag |
| ValidFilterArgumentTypes | warning | Reports a value passed to a Liquid filter, the piped value included, whose type contradicts the type the documentation publishes for it |
| ValidTagArgumentTypes | warning | Reports arguments passed to a Liquid tag whose type contradicts the type the documentation publishes for them |
| VariableName | warning | Enforces a consistent variable naming convention (default: snake_case) |
GraphQL File Checks
These checks analyze .graphql files and validate them against the platformOS schema. Run pos-cli check update-docs to keep the local schema up to date.
| Check | Severity | Description |
|---|---|---|
| GraphQLCheck | error | Validates GraphQL query and mutation files for syntax errors and schema conformance |
YAML File Checks
These checks analyze YAML files: translations in app/translations/, and — for YAMLSyntaxError — every other YAML source the platform deploys, including app/config.yml and model schemas.
| Check | Severity | Description |
|---|---|---|
| DuplicateYAMLKey | warning | Reports a key defined twice in one mapping, where the earlier value is silently discarded |
| MatchingTranslations | error | Reports translation files where keys are missing compared to the default language file |
| ValidHTMLTranslation | warning | Reports translation values that contain invalid HTML markup |
| YAMLSyntaxError | error | Reports what the YAML parser could not read — the file is rejected on deploy, which fails the whole changeset |