> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eigenpal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 0.10.8

> EigenPal platform release 0.10.8

## Platform (Studio)

* Single-file workflow inputs now display correctly after a dataset import. Previously an input that takes one file could show an empty file slot; imported examples now match each file to the workflow's declared input shape.
* Evaluator scoring now uses a single pass threshold for the whole workflow. The score-by-example chart's cutoff line and every evaluator's pass/fail are measured against that one threshold, so the chart, the per-evaluator results, and the run gate always agree. Experiment scores are shown in two states — passing (green) or below threshold (amber).
* The LLM judge evaluator now requires evaluation criteria. Without them the model invents its own scoring rubric, so the editor marks the field required, renames it to "Evaluation criteria" with a worked example, and blocks saving until it is filled in.
* Workflow folders can now be reorganized. A new "Move to folder" action in each folder's menu lets you move a folder (and everything inside it) into another folder or back to the top level, so you can restructure your workspace without recreating folders. Destinations that would nest a folder inside itself are blocked, with a tooltip explaining why.
* Nested sub-workflows now display and resolve correctly across runs, the workflow builder, and the CLI. In the Runs list, a run that invokes a sub-workflow which itself invokes another sub-workflow now nests every level under its parent, instead of stopping at the first level. In the workflow builder, an "Invoke Workflow" step that targets a workflow built from other invoked workflows now shows the real output field types instead of "unknown", so you can reference those fields with autocomplete; referencing one of those fields no longer triggers a false "field not found" warning. The same resolution now applies when validating and publishing workflows (including via the CLI), so deeply nested invoke chains validate against their real output fields. All of this resolves through arbitrarily deep chains with a safety limit that prevents looping on workflows that invoke each other.
* Runs: add a simplified review mode with developer-view toggle, review status badges, and inline output review for JSON fields and generated files.
* New debugging and control primitives for runs. You can now cancel an in-progress run through the API, experiment results report when a batch has fully finished, steps skipped by a condition or an empty loop are reported as skipped rather than succeeded, and each step records the exact configuration it ran with so failures are easier to diagnose.
* Run detail responses are leaner and more explicit: you choose exactly which sections to expand, and the public run schema now exposes the workflow version, cancellation-request time, and trace, retry, and email-trigger details.

## CLI

* `eigenpal workflow validate` now tells you when a workflow contains Invoke Workflow steps that local validation cannot fully check. Because those steps reference other workflows that live on the server, the command prints a short note pointing you to `validate --online` (or push) to verify the invoke targets, input types, and cycles. The skill guidance now shows the `--online` step in the validate-then-push flow as well.
* The evaluator configuration reference now reflects the single workflow-level pass threshold. A per-evaluator `passThreshold` is documented as legacy — pass/fail is decided by the one workflow-level threshold — and that workflow-level threshold no longer shows a fixed default, since it is derived when omitted.

## SDK

* The Python SDK now requires Python 3.10 or newer. Python 3.9 has reached the end of its support window, and dropping it keeps the SDK on current, actively maintained dependencies. If you are still on Python 3.9, upgrade to 3.10+ to continue receiving SDK updates.

## Infrastructure & processing

* Improved how deliberate workflow rejections are handled and shown. When a workflow invokes another workflow that deliberately rejects (for example, failing because a document does not meet a required condition), the rejection now stops the parent workflow immediately with the same status code and message, instead of retrying and re-running the sub-workflow. The run now shows the rejection's own message (such as "Document does not meet criteria") rather than a generic "Run failed" notice, and dataset examples that expect a specific failure are now scored against that rejection correctly.
* The LLM judge evaluator now requires evaluation criteria. Without them the model invents its own scoring rubric, so the editor marks the field required, renames it to "Evaluation criteria" with a worked example, and blocks saving until it is filled in.
* Cleaner plain-text extraction from Office documents. Requesting plain-text output for formats like DOCX and RTF no longer leaves stray formatting markers in the extracted content, so downstream steps receive clean text.
* You can now evaluate EigenPal on a single virtual machine from one self-contained image that runs the entire platform, including the document-processing pipeline, in a single container. It is designed for proof-of-concept and locked-down or air-gapped environments: the core document pipeline works with no public internet, state lives on one volume that is simple to back up and snapshot, and startup is fully automated with sensible defaults so a first run needs no configuration. This is intended for evaluation; production deployments should continue to use the Kubernetes path with managed database and object storage.
* New debugging and control primitives for runs. You can now cancel an in-progress run through the API, experiment results report when a batch has fully finished, steps skipped by a condition or an empty loop are reported as skipped rather than succeeded, and each step records the exact configuration it ran with so failures are easier to diagnose.
