# Reported issues for orion by GoPlasmatic

Pod holds 10 of 10 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [orion by GoPlasmatic](/mcp/orion-by-goplasmatic).

## Most discussed

### models: a manifest cannot declare a dynamic dimension, though tract already parses one

## Summary

A model manifest declares every input and output shape as a fixed list of positive integers, so an
ONNX graph exported with a **dynamic axis** — a batch dimension, a sequence length, a variable image
size — cannot be described by a manifest and therefore cannot be served.

The runtime underneath already supports symbolic dimensions. `model/runtimes/tract.rs` binds input
facts by handing tract a *string spec*, and tract parses each dimension with `parse_tdim`, which
accepts a symbol.…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/318) · 2026-09-14 · closed · 3 comments

### oauth2_login: userinfo fetch sends no User-Agent, so GitHub rejects it with 403

## Summary

An `oauth2_login` channel's userinfo fetch sends no `User-Agent` header, so an identity provider whose API requires one — GitHub, which is the userinfo example in the docs — rejects the authenticated request with `403 Forbidden`, and the sign-in fails at the callback.

`fetch_userinfo` in `crates/orion-server/src/channel/oauth2_login.rs` builds the request with the bearer token and `Accept: application/json`, but no `User-Agent`, and the shared HTTP client it uses is not built with…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/356) · 2026-09-27 · closed · 1 comment

### orion-server test / dry-run keep capture_changes and a per-step trace: a long loop needs tens of GB offline

`orion-server test` and `orion-server dry-run` always build the message with dataflow-rs's default `capture_changes = true` and run it with a per-step `ExecutionTrace`. A node running the same workflow does neither (since 1.9.1, `execute_admitted` turns capture on only for a `task_details` run, #350). So a long looping workflow cannot be tested offline at the cost it has on a node, and a test of one can take the machine down.

**Seen:** a cron workflow looping up to 1010 sweeps (one per turn of…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/353) · 2026-09-23 · closed · 1 comment

### A dead node's running cron occurrences hold their singleton slots until the lease runs out

When a node dies with cron occurrences `running` (no shutdown, e.g. killed or OOM), those occurrences keep their singleton slots until their lease runs out, and nothing can release them sooner.

**Seen:** a runner playing 4 concurrent matches (`concurrency: {policy: forbid, key: match, slots: 4}`, channel `timeout_ms` 2400000) died with no shutdown log. Docker restarted it with the same state database. Its 4 occurrences stayed `running`, claimed by the dead instance id, and the new process…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/352) · 2026-09-23 · closed · 1 comment

### lint/clippy do not see into dataflow-rs 3.14's loop.setup/over and for_each

Orion 1.9.1 runs dataflow-rs 3.14, and a workflow using its new keys runs correctly, but Orion's own static checks do not see into them. `lint` and `clippy --deny-warnings` stay green on definitions the engine then refuses at build (so `[packages] apply` stops the node at boot), or that fail only at run time.

Found adopting 3.14 in two packages (the release commit 0d5a0c24 already notes "Orion's own loop validation and definition analysis do not know the new keys yet").

**`loop.setup` /…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/351) · 2026-09-23 · closed · 1 comment

### lint: a model manifest that fails validation is reported as 'no definitions found'

## Summary

A model manifest that fails validation is reported as **not a definition at all**, rather than as a
definition with a problem. `orion-server lint` exits with

```
Error: no definitions found under '<dir>'. A definition is a JSON object with 'tasks' (workflow),
'channel_type' (channel), 'connector_type' (connector) or an 'abi' of orion:model@… (model manifest).
```

for a file named `model.json`, sitting beside its artifact, whose `abi` *does* start `orion:model@`.
The field errors…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/330) · 2026-09-14 · closed · 1 comment

### models: model_infer.timeout_ms is not templatable, unlike channel_call's and http_call's

## Summary

`model_infer.timeout_ms` accepts only a literal integer. `channel_call.timeout_ms` and
`http_call.timeout_ms` — the same field, on the two sibling functions that also take a per-call
deadline — are both `template_at: &[""]`. Nothing in the docs or the CHANGELOG says `model_infer`'s
should differ, so this looks like an omission.

**Version:** 1.8.0 (`770147fc`)

## Reproduction

```jsonc
{ "name": "timeout", "tasks": [
  { "id": "ms", "name": "compute a deadline", "function": {…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/327) · 2026-09-14 · closed · 1 comment

### models: surface the graph's operator set in stats — op_type is already decoded and discarded

## Summary

`NodeProto.op_type` is decoded on every admission and read by nothing. Surfacing it as
`stats.operators` would cost a `BTreeSet` over `graph.node` and would answer the first question
anyone asks when a model that worked stops loading.

**Version:** 1.8.0 (`770147fc`)

## What admission records

```
note: [model.stats] model 'ada.c4-tiny': artifact sha256:a846b0… (6171 bytes):
      1479 parameters, 4 nodes, IR 9, opset 17; graph inputs 'board', outputs 'policy'
```

`Stats`…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/326) · 2026-09-14 · closed · 1 comment

## Most recent

### models: stats.parameters counts initializers only, so a Constant-attribute graph reports zero

## Summary

`stats.parameters` counts only `GraphProto.initializer` dims. A graph that carries the same weights
as `Constant` **node attributes** computes the same function and reports **0 parameters**, and
`models.max_parameters` — the only graph-shape ceiling admission has — is bounded by the same
number, so it is evaded by the same rewrite.

This is documented and deliberate, and it is fine where the model owner is the node operator. It is
not fine against the guarantee…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/325) · 2026-09-14 · closed · 1 comment

### models: model_infer reports no operation count, so engine.ops_budget cannot be sized from evidence

## Summary

`engine.ops_budget` is what makes it safe to run a manifest whose adapters someone else wrote — the
docs are explicit about that, and it is the right mechanism. But **nothing reports what an
evaluation spent**, so the ceiling can only ever be set by guessing, and an author whose manifest is
refused cannot see how close a working one would have to be.

`model_infer` evaluates with `Engine::evaluate`; datalogic's `Engine::evaluate_metered` returns the
same value plus the count, and…

[Read the thread](https://github.com/GoPlasmatic/Orion/issues/324) · 2026-09-14 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/GoPlasmatic/Orion/issues).
