Skip to content

Verified: Languages overview

Each claim the Languages overview page makes, with the tests that prove it in the last green CI run: 3 of 7 verified. The claims live in docs/claims/languages.yaml.

Last green CI run 16 Oct 2026, 14:48 UTC on c7618d3 · all runtime claims

LANG-001 verified

A program file is .st, .ld, .fbd or .sfc, and the languages mix freely in one controller (one program file per task) against one tag store.

where the docs say so · The fixture runs four tasks, one .st, .ld, .fbd and .sfc program each, in one controller reading the same Level/Start tags. TestTasks (ST-only tasks) and TestLibrariesUserFBFromFBD (a library block) were dropped as adjacent.

LANG-002 partly verified

The same program written in ST, ladder, FBD and SFC behaves identically (the standard function blocks, timers, counters, latches, coils and conversions give the same results in every language).

where the docs say so · Each feature fixture runs the logic in every language it can express; the matrix covers the standard blocks, not every built-in.

LANG-003 verified

FBD and SFC transpile to ST in one hop and ladder in two (LD to FBD to ST), and ST lowers to the typed IR the runtime executes.

where the docs say so

  • pass TestLadderCompilesEndToEnd in lang/ld
  • pass TestArrayCompilesEndToEnd in lang/fbd
  • pass TestTranspileShape in lang/sfc

LANG-004 partly verified

The hops preserve line maps, so a diagnostic anywhere in the chain lands on the source: an .ld error at the rung, an .sfc error at the step or transition.

where the docs say so · Through naut check, a type error in a rung lands on its RUNG line and one in a transition condition on its TRANSITION line; the LD and FBD line maps are also tested at the transpile level. "An .sfc error at the step" is not asserted: the test's error in a step's action body lands on the offending statement's own line inside the ACTION block, not on the step (the same disagreement as SFC-037).

  • pass TestLineMap in lang/ld
  • pass TestTranspileLineMap in lang/fbd
  • pass TestCheckLandsDiagramErrorsOnSourceLine in cmd/naut

LANG-005 partly verified

Built-in functions and function blocks, user FUNCTION_BLOCKs from .st, .ld or .fbd library files, arrays and structs behave the same in every language.

where the docs say so · Ladder, FBD and SFC consumers of library blocks are tested (an SFC action calling a library block keeps its instance state). Arrays and structs, and the built-in functions, are not asserted in SFC, and no library block is called from every language side by side.

  • pass TestLibrariesUserFBFromFBD in runtime
  • pass TestLadderFunctionBlockFromST in lang/ld
  • pass TestSharedTypes in lang/fbd
  • pass TestLibrariesUserFBFromSFCAction in runtime

LANG-006 verified

naut new --language ld (or fbd, sfc) scaffolds a minimal project in that language.

where the docs say so

  • pass TestScaffoldedManifestProjectsPass/minimal-ld in cmd/naut
  • pass TestScaffoldedManifestProjectsPass/minimal-fbd in cmd/naut
  • pass TestScaffoldVariants/minimal manifest project in cmd/naut
  • pass TestScaffoldVariants/sdk, ladder program in cmd/naut
  • pass TestScaffoldedManifestProjectsPass/minimal-sfc in cmd/naut

LANG-007 partly verified

Tasks are declared in nautilus.yaml, one program file each, at their own scan rate.

where the docs say so · nautilus.yaml tasks load with their own scan periods and each runs its own program, and a task's dt follows its period; no test asserts tasks actually execute at their declared rates. TestTasksRunConcurrently (dropped) only shows both tasks scan.