Verified: Allen-Bradley Logix
Each claim the Allen-Bradley Logix page makes, with the tests that
prove it in the last green CI run: 18 of 32 verified.
The claims live in docs/claims/logix.yaml.
Last green CI run 16 Oct 2026, 14:48 UTC on c7618d3 · all runtime claims
LGX-001 verified
`naut logix import` reads an L5X export directly, on any OS with no Rockwell software, and turns its UDTs into IEC types and its tags into a tag file.
- pass
TestLogixImportProducesACheckableProjectincmd/naut
LGX-002 verified
Tag descriptions from the offline project are recovered into the imported tag file as `desc:`, which a live CIP browse cannot do.
LGX-003 verified
`naut logix import --scope '*'` imports program-scope tags along with the controller-scope ones.
LGX-004 verified
A Logix UDT imports as an IEC STRUCT: the hidden byte that hosts its BOOLs is dropped and the BOOLs the author wrote are declared; nested UDTs and arrays come across.
LGX-005 verified
An L5X RLL routine renders as the same ladder model as nautilus `.ld` source: contacts, branches, in-rung blocks and coils.
LGX-006 verified
An instruction nautilus has never seen still draws, as a box with its operands.
- pass
TestLadderUnknownInstructionsDrawinlang/l5x
LGX-007 verified
Normalizing pins `ExportDate` and the other attributes that move on every export, so two exports of unchanged code compare equal.
LGX-008 verified
`naut logix normalize --check` compares two exports after normalizing: exports of unchanged code compare equal, and a real change still shows as drift.
LGX-009 verified
`naut logix serve` browses the controller over EtherNet/IP at startup and serves every user tag it can decode through the nautilus HTTP API; controller-scope tags keep their names and a program-scope tag is served as `<Program>_<Tag>`; values change when the controller's own logic changes them.
- pass
TestLiveValuesFromTheControllerinlogix/facade
LGX-010 verified
`naut logix serve` leaves module I/O tags out, and `--tags` narrows what is served with globs such as `Program:MainProgram.*`.
LGX-011 verified
`--l5x` supplies tag descriptions to the served API, since a CIP browse cannot read documentation.
- pass
TestLogixServeL5XSuppliesDescriptionsincmd/naut
LGX-012 verified
A write through `naut logix serve` goes to the controller and the frame shows the value the next poll read back, not the value that was sent.
- pass
TestWritesReachTheControllerinlogix/facade - pass
TestTheFrameShowsTheReadBackNotTheRequestinlogix/facade(3 of 3 passed)
LGX-013 verified
A write names one value, so a member such as `P101.Run` can be written but a whole UDT cannot; a tag the controller refuses to write returns its refusal.
- pass
TestWritesReachTheControllerinlogix/facade - pass
TestWritesThatCannotWorkinlogix/facade - pass
TestAWriteTheControllerRefusesReturnsItsRefusalinlogix/facade
LGX-014 verified
Against a served Logix controller, *Diff with Controller* and *Download* explain that there is no nautilus source and point at `naut logix drift` and `naut logix push`.
- pass
TestProgramEndpointsinlogix/facade
LGX-015 verified
With `NAUTILUS_TOKEN` set, `naut logix serve` requires a bearer token for writes; without it, writes are open to anything that can reach the port.
- pass
TestLogixServeNautilusTokenGuardsWritesincmd/naut(3 of 3 passed)
LGX-016 partly verified
`naut logix probe` reports each SDK prerequisite (FactoryTalk token, FlexNet feature, CodeMeter entitlement) as its own gate, so one failure does not mask the rest.
- pass
TestLogixProbePrintsTheRemedyForAFailingGateincmd/naut - skip
TestAgentProbeReportsGatesinlogix/logixd
LGX-017 partly verified
A probe gate that fails prints what to do about it, underneath the failure.
- pass
TestLogixProbePrintsTheRemedyForAFailingGateincmd/naut
LGX-018 verified
An agent that is not running is reported as `logixd: unreachable ... connection refused`; a wrong bearer token (HTTP 401) as `logixd: unauthorized: <agent URL> refused the token; check --token or NAUTILUS_LOGIXD_TOKEN against %ProgramData%\logixd\logixd.token on the agent's machine`, and no token at all as `... wants a token and none was sent`.
- pass
TestClientUnreachableIsFatalAndNamesTheURLinlogix/logixd - pass
TestLogixAgentReportsAnUnreachableAgentHelpfullyincmd/naut - pass
TestLogixAgentReportsAWrongTokenincmd/naut - pass
TestUnauthorizedNamesTheAgentAndTheTokeninlogix/logixd
LGX-019 partly verified
`naut logix convert` converts ACD to L5X and L5X to ACD.
- pass
TestLogixConvertStagesAndFetchesincmd/naut - skip
TestSDKConvertAndInspectinlogix/logixd
LGX-020 not run in CI
`naut logix build` compiles a project through the SDK, with no controller.
- skip
TestSDKBuildinlogix/logixd
LGX-021 verified
`naut logix drift` compares the controller with the repo file and exits 1 on a mismatch, so it works as a CI gate; it requests the same export kind (detailed or basic) as the repo file.
LGX-022 partly verified
`naut logix browse` lists the controllers FactoryTalk Linx has already discovered, as comm paths with the controller name and catalog number, without scanning the network.
- pass
TestParseLinxConfigFindsTheControllerinlogix/logixd - pass
TestLogixBrowseListsWhatFTLinxDiscoveredincmd/naut - skip
TestAgentCommPathsinlogix/logixd
LGX-023 verified
`naut logix push --accept` or `--finalize` without `--comm-path` is refused rather than landing as unaccepted pending edits.
- pass
TestLogixPushRefusesOnlineOptionsWithoutACommPathincmd/naut
LGX-024 partly verified
`--accept` sends the change to the controller; `--finalize` also assembles it if the controller is in Run.
- pass
TestLogixPushSendsTheChosenOnlineOptionincmd/naut - pass
TestImportRungsSendsTheOnlineOptionVerbatiminlogix/logixd - skip
TestSDKOnlineRungImportinlogix/logixd
LGX-025 partly verified
An online edit takes no project file: it uploads the program the controller is running, imports the rungs into that, and sends it back.
- pass
TestLogixPushSendsTheChosenOnlineOptionincmd/naut - skip
TestSDKUploadFromControllerinlogix/logixd
LGX-027 partly verified
`download` never changes the controller mode unless explicitly asked.
- pass
TestDownloadSendsEnsureProgramModeExplicitlyinlogix/logixd
LGX-028 not run in CI
`logixd` listening on a routable address requires a token and refuses to start without one.
- skip
TestAgentRefusesARoutableBindWithoutATokeninlogix/logixd
LGX-029 not run in CI
`LOGIXD_COMM_ALLOW` is agent-side configuration only, so a request cannot name a controller the operator has not allowed.
- skip
TestAgentRefusesACommPathOutsideItsAllowlistinlogix/logixd
LGX-030 not run in CI
Every path the agent touches is confined to `LOGIXD_WORKDIR`, compared after full resolution so traversal is rejected.
- skip
TestAgentRefusesToEscapeItsWorkDirectoryinlogix/logixd
LGX-031 not run in CI
An agent that has a token answers an unauthenticated or wrongly authenticated caller with 401.
- skip
TestAgentRejectsMissingTokeninlogix/logixd - skip
TestAgentAnswersAMissingOrWrongTokenWith401inlogix/logixd
LGX-032 not run in CI
The installer refuses to run while plain `DOTNET_ROOT` is set and prints the commands that fix it.
- skip
TestInstallerRefusesPlainDOTNET_ROOTinlogix/logixd
LGX-033 partly verified
The mnemonics nautilus writes into neutral text are the short spellings the Logix importer accepts (`GE` `GT` `LE` `LT` `EQ` `NE` `MOVE` `LIMIT`), never the editor captions (`GEQ`, `GRT`, `MOV`, `LIM`).
- pass
TestMnemonicsAreCorpusVocabularyinlogix/writer