Advisory checks (clippy)
The rules orion-server clippy runs beyond lint. Each has its own page with the proof it rests on and where it stays silent.
orion-server clippy runs lint’s gate over a definition set, then a fixed set of rules. They cover things lint accepts but an author would want to know. A workflow whose condition can never match, steps that can never run, a call cycle that always fails. Work the engine does for nothing, and things the set says three times that it could say once.
It has no configuration and no suppression. That is what sets the bar. An author cannot silence a wrong rule, so every rule here fires only when its finding is certain. Each one states the proof it rests on and the shapes on which it stays silent. orion-server clippy --explain <rule> prints both. Silence is never wrong; a wrong warning is.
The command, its flags and exit codes are on the CLI reference.
| Rule | Level | Scope | Summary |
|---|---|---|---|
correctness.workflow_never_matches | deny | workflow | the workflow-level condition is false for every request, so the workflow never runs |
correctness.task_never_runs | warn | workflow | a step’s condition folds to a constant false, so the step never runs |
correctness.unreachable_step | deny | workflow | steps after an unconditional terminal step can never run |
correctness.unconditional_call_cycle | deny | set | channel_call edges that are all unconditional form a cycle, so every request into it fails at the depth limit |
correctness.payload_var | deny | workflow | a read of payload — which is not in the data context — is always null |
correctness.mapping_overwritten | warn | workflow | two mappings in one map write the same path with nothing reading it in between |
correctness.metadata_var_undeclared | deny | workflow | a read of metadata.vars.<name> that the config given with -c does not declare |
correctness.secret_undeclared | deny | set | a {“secret”: name} that the config given with -c does not declare |
correctness.response_cookie_type | warn | workflow | a response cookie attribute is a literal of the wrong type, so the cookie is always dropped |
correctness.unknown_input_key | deny | workflow | a task input key the function does not declare, which is silently ignored |
correctness.unordered_page | deny | workflow | a read that skips rows without ordering them, so the page it skips is undefined |
perf.parse_result_overwritten | warn | workflow | a parse/publish target is overwritten by a later unconditional task before anything reads it |
perf.redundant_step_condition | warn | workflow | consecutive steps repeat one condition that none of them can change; a task group evaluates it once |
perf.group_condition_repeated | warn | workflow | a group member repeats the group’s own condition, which was already true on entry |
duplication.fragment_available | warn | set | a run of steps is exactly what an existing fragment expands to; a use would say it once |
duplication.repeated_task_sequence | warn | set | the same run of two or more steps appears three or more times across the set |
duplication.repeated_value | warn | set | the same object literal appears three or more times across the set |
style.terminal_on_last_step | warn | workflow | terminal: true on the last top-level step is a no-op |
| Page | Holds |
|---|---|
| Levels | deny and warn, what each does to the exit code, and how a rule is promoted. |
| Where certainty comes from | the proof sources a rule may rest on, and nothing else. |
| What is not a rule, and why | the candidates turned down, each with its reason. |
| Adding a rule | what a new rule must ship with, and the tests that check it. |
Related
orion-server clippy: the command, its flags and exit codes.- Definition style (
fmt): the formatter the same set passes through. - Test workflows offline: running the rules against a set.
- Reference: every reference page, by what you are looking up.
Last verified 14 September 2026