Skip to content
Platform docsPlatform docsPlatform docs

Self-check

What the self-check catches before you deploy — configuration validation and the runnable checks, the kinds each node offers, who runs them, the states you see, and how the Issues gate blocks errors and lets you override warnings.

Before you deploy a pipeline, the platform checks that it is built correctly, while fixing anything wrong is still free. Self-check is this page’s collective name for that gate — the product has no screen with that label. It combines two things: an always-on look at whether every node is configured, and a set of checks you can run to exercise each node on sample values. Together they decide whether the pipeline can deploy.

In the product, the self-check shows up as the check cards on each node and, when you go to deploy, the Issues window.

The self-check model: node settings and the check cases you add feed two mechanisms — always-on configuration validation and the runnable checks the agent or you run, each ending passed, failed, or not run. Both feed one Issues report shown at deploy: errors block the deploy (Fix all with agent), in the warnings-only case they can be overridden (tick the box, then Deploy), and a graph with no issues goes straight to the cost window.

Two mechanisms feed the self-check, and they behave differently.

Configuration validation is always on. Each time you or the agent change a node, the platform rechecks its settings and flags anything missing or malformed, such as an empty Code node or a missing or badly formatted node name. These are errors, and they last until the setting is fixed.

Checks are runs you start. Each check belongs to one node and holds a result: it starts not run, and running it leaves it passed or failed. A check runs only when you or the agent run it. It does not run on save, on a schedule, or at deploy.

The two come together at deploy. The platform gathers the current validation and the state of every check into one report, the Issues window, and that report decides what happens next.

Seven kinds of check exist, in two families. Test checks hold cases you author — a case is a sample input you name and fill in yourself — and you decide whether to run them. Lint checks always exist on their node, take no case, and must finish before the deploy is allowed.

Test checkOn which nodesWhat running it doesWho can run it
Code TestCode nodeRuns your Python once on the case’s sample inputs, with the node’s real environment variables and secretsThe agent or you
User InterfaceGeneration, QuorumRenders the real labeling screen with the check’s own sample pre-filled. A person completes and submits itYou only. The agent cannot run it
LLM Quality AssuranceGeneration, QuorumRuns the node’s LLM review on a sample output and returns a verdict per quality criterion (one per expert on a Quorum node)The agent or you
Synthetic Generation TestGeneration, under synthetic labelingGenerates one sample output with the node’s model and settings, and reports the input, cached, and output tokens it usedThe agent or you
Lint checkOn which nodesWhat it reports
Quality RequirementsGeneration, QuorumAn LLM critique of how your quality criteria are configured: contradictions with the instruction, overlaps, checks the task cannot support
User Interface TypesGeneration, QuorumType errors in the labeling interface against the node’s fields — the first 20 issues, each message capped at 500 characters, with a count of the rest
Dataset ItemsStartWhether the current dataset, filter, and item limit select anything, and whether the selected items carry the required fields

The Match node has no checks at all.

Which one to run depends on what you want to know:

  • Run Code Test to confirm your Python returns the right output before a run relies on it.
  • Run User Interface to see and try the real labeling screen yourself, the way an expert will.
  • Run LLM Quality Assurance to preview how the LLM reviewer judges an output before a run.
  • Run Synthetic Generation Test to see what your model actually produces, and what it costs in tokens, before paying for a run.

The three lint checks read the node’s current settings instead of a case you write, but you or the agent still press Run. On the node each appears as its own card, marked with a Lint badge.

Both the agent and the node’s own cards can run a check, and they act on the same stored cases.

Ask the agent, in the chat, to add check cases to a node or to run its checks. It can run every kind except one. On the node itself, each check kind is a card in the inspector. In a test-check card you add a case with +, give it a name and a JSON input, then Run or Delete it. An empty card reads “No checks yet”. Adding a case pre-fills its name and an empty {} input for you to edit. The Quality Requirements card has no case to add, so you run it directly.

The one action the agent cannot take is running a User Interface check. Running that check means completing the task yourself: the platform opens the real labeling screen, and a person fills it in and submits. The agent can set up the case, but only you can complete the screen. A User Interface check you open and leave unsubmitted expires after about an hour, and the run then shows as failed.

A test-check card — Code Test, User Interface, LLM Quality Assurance, or Synthetic Generation Test — shows one of four states:

  • Check not run means no run yet.
  • Check running means a run is under way.
  • Check passed means the last run succeeded.
  • Check failed means the last run failed.

A lint card uses its own words and has one state more: Not started, Running, Completed, Completed with issues when the run found something, and Failed. The Dataset Items card also reports how many items it checked.

A finished run keeps its detail on the card. A passed run shows its Output, a failed run shows its Error, and either can show Logs.

When you deploy, the platform sorts every issue into one of two severities: an error you must resolve, or a warning you can override. The built-in lints are the strict ones.

IssueSeverityDeploy past it?
A configuration error (empty code, a missing or badly formatted node name)ErrorNo
Any built-in lint not run or still running — Quality Requirements, User Interface Types, Dataset ItemsErrorNo
A completed User Interface Types lint reporting an error-level findingErrorNo
Any check that failedErrorNo
A check case whose input no longer matches the nodeErrorNo. Fix or delete it
A test check not run or still runningWarningYes, with override
A node with no checks configuredWarningYes, with override

So a missing test check is a warning you can override, while a built-in lint that has never finished blocks the deploy, and so does a failed check of any kind. A check case that no longer fits its node also blocks until you fix or delete it. For example, its input may name a field the node has since dropped.

What the Issues window lets you do depends on what it found:

  • With Errors present, the window has no deploy control at all — only Fix all with agent, the per-row fix icons, and the close button. There is no way to deploy past an error.
  • With Warnings only, the window adds a Deploy button, but you must first tick I want to deploy with unresolved warnings. Fix all with agent is there too.
  • With No issues, no window appears. Deploy takes you straight to the Cost breakdown (forecast) window to confirm the spend, covered in Pricing and billing.

Every issue row also has a fix-with-agent icon button that hands the agent that one issue to resolve. The gate also holds outside the window: the server revalidates before it starts the run and refuses if any blocking error remains. One asymmetry — a run started through the public API skips the not-run and still-running lint errors, though configuration errors and failed checks still stop it.

A passing check is a statement about the configuration it ran against. Change that configuration and the statement no longer holds, so the check reverts to not run and you rerun it. Each kind watches a different slice of the node. Synthetic Generation Test watches the fields, the instruction, and the Audience & Pricing card; User Interface Types watches the interface; Dataset Items watches the dataset, filter, and item limit the Start node selects. For the four older kinds:

  • Code Test watches the code, the fields, and the environment variables.
  • User Interface watches the labeling screen and the node’s fields.
  • LLM Quality Assurance watches the quality criteria, the node’s fields, the instruction, and the review settings.
  • Quality Requirements Lint watches the quality criteria, the node’s fields, and the instruction.

Editing a check’s own sample input resets it the same way. A green check therefore reflects the node as it stands now, not an earlier version of it.

The self-check tells you the pipeline is built correctly. It does not assess label quality or replace the run.

  • Test checks use sample values, not your data. Each runs on the input you enter into the case. The Dataset Items lint is the exception: it reads the items the Start node currently selects, to tell you the selection is empty or missing required values.
  • It costs nothing. Running checks adds nothing to your bill. Billing starts only when a real run labels real items. See Pricing and billing.
  • It does not judge label quality. Quality control decides whether a label is good during the run. See Quality control. The Quality Requirements Lint only critiques how your criteria are set up, and the LLM Quality Assurance check only exercises the review on one sample.
  • A pass does not guarantee the run will succeed. At run time an item can still fail on its own because of a returned value that breaks the node’s contract, a timeout, or a value over the size cap. The Code node reference lists those run-time limits.