---
title: "Version 1.3"
description: "All releases in the Koios 1.3 line: the v1.3.0 feature release"
source_url: https://ai-ops.com/docs/release-notes/v1-3
---

# Koios 1.3

Koios 1.3 lets a tag hold text as well as numbers, and turns commissioning a
device into browsing it and picking what you want rather than typing addresses.
It connects OPC-UA servers through a guided flow that says which step failed and
why, makes far more of a generic CIP device's EDS file, and reads SLC 500 and
MicroLogix processors directly.

- [Before you upgrade](#before-you-upgrade): what to check first
- [What else changed](#what-else-changed): every other change, by area
- [Fixes](#fixes): every fix, by area
- [For integrators](#for-integrators): removed tag fields, values as text, and permission to dial an address

| Release | Date | What changed |
|---|---|---|
| v1.3.0 | October 23, 2026 | The feature release, below |

## Read and write any data type

**Every tag is a Boolean, Integer, Float or String, so a machine state reads RUNNING rather than 1, all the way to the trend.**

Every tag now has a data type — Boolean, Integer, Float or String — saying what
its value is, separately from how the device encodes it. Koios fills it in from
the protocol data type or from what a browser reports, and applies it to every
reading: an Integer tag holds a whole number, and a String tag keeps the text
the device sent. A Boolean tag's history keeps every change, however brief. A String tag is archived, compressed on change, drawn on a
trend as a color band, and can be written by a component, calculated by an
expression, pinned in Test Output, or produced by value mapping, so a register's
`0`, `1` and `2` can read `STOPPED`, `RUNNING` and `FAULTED`. Modbus TCP and
generic CIP gain a String data type for ASCII fields. A String tag cannot feed a
model, which reads numbers.

See [Creating a Tag](https://ai-ops.com/docs/tags/creating-getting-started.md#data-type).

## Browse a device and create tags in one reviewed batch

**Pick points across a whole device, then name and range them before any tag exists.**

Browsing a device opens a three-pane explorer: a folder tree, the level you are
in at full width, and the details of what you select. Tick points as you go and
they stay picked across folders, filters and searches, and points you have
already tagged are marked. The picks open in a review sheet where you set each
tag's name, description, usage, units, range and decimals, or fill one value
down a column, before anything is created; rows the server refuses stay behind
to correct and send again. You can index a whole OPC-UA server in one pass and
search all of it, and read the values of the rows on screen from OPC-UA, Logix,
SLC and MicroLogix devices. A single review holds at most 2,000 rows.

See [Browsing a Device](https://ai-ops.com/docs/devices/browsing-a-device.md).

## Generic CIP tags arrive labelled, ranged and checked

**Tags take their labels, units and ranges from the device's EDS file, and Koios checks the file against the device.**

A generic CIP device's EDS file now says what each field means, not only where
it sits. Fields read back their labelled values, and tags created from them
carry the file's units, description and bounds instead of the default 0 to 100.
Assemblies follow the file's groups, say which way they go, and narrow to the
connection you choose. Koios checks the file against the device's own identity
and says when they disagree, and can read the file straight off a device that
holds one. Where a file gives an assembly's length but not its contents, lay the
fields out yourself: the layout is kept with the device, and a map shows which
bytes are described and which are tagged. Byte swap and word swap read data
packed the other way round.

See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md).

## Connecting an OPC-UA server is four guided steps

**Find the server, choose an endpoint, sign in, and prove it with one real connection before anything is saved.**

Setting up an OPC-UA device is now a guided flow: find the server, choose an
endpoint, sign in, and prove it with one real connection. Endpoints are ranked
best first with the reason for each, and every address the server publishes
says whether it answered; one that did not can be reached through the new
Connect Address. The connection test reports its six steps and stops at the one
that failed, with the one thing to do about it. A server that has not yet
trusted Koios's certificate is a hold rather than a failure: take it the
certificate, identified by its fingerprint, or park the device until someone
has. Nothing is saved until the last step. Two current security policies,
Aes128Sha256RsaOaep and Aes256Sha256RsaPss, can now be selected.

See [Creating an OPC-UA Device](https://ai-ops.com/docs/devices/creating-opc-ua.md).

## Read SLC 500 and MicroLogix processors

**Browse, read and write the data files of Allen-Bradley SLC 500 and MicroLogix processors, with no gateway.**

Koios reads Allen-Bradley SLC 500 and MicroLogix processors as a third kind of
EtherNet/IP device, with no gateway in front of them. Give each tag the
data-file address the ladder program already uses, such as `N7:0`, `F8:2` or
`B3:0/5`, or pick it from the processor's data files, labelled with your
RSLogix 500 project's symbols, and its data type follows from the address. Find by value locates an element you know only by
what it holds, then narrows to the ones that change. An SLC 5/05 or a
MicroLogix 1100 or 1400 is reached at its own address, and a processor with only
a serial port through an EtherNet/IP interface. Neighbouring elements are read
together. Output tags write integer, binary, float and long files and timer and
counter presets and accumulated values; every other address is read-only in
this release. A network search sets the device up for you.

See [Creating an EtherNet/IP Device](https://ai-ops.com/docs/devices/creating-ethernet-ip.md#slc-and-micrologix-configuration) and [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#slc-and-micrologix-tags).

## Before you upgrade

1. Every existing tag becomes Float, which is how it was already read, and Logix tags keep their old tag type. Review any tag that should be something else. See [Creating a Tag](https://ai-ops.com/docs/tags/creating-getting-started.md#data-type).
2. A model or component input fed by a Logix String tag stops after the upgrade. If the tag holds a number, set its data type to Float; otherwise assign a numeric tag. See [Assigning Bindings](https://ai-ops.com/docs/models/assigning-bindings.md#assigning-a-tag).
3. A component output wired into a Logix String tag keeps writing, but its canvas cannot be saved until you set the tag's data type to Float or remove the wire. See [The Canvas](https://ai-ops.com/docs/components/canvas.md#tag-connector).
4. A Modbus device whose Max Registers Per Read was lowered gets larger coil and discrete-input requests. Lower it further if the device refuses them. See [Creating a Modbus TCP Device](https://ai-ops.com/docs/devices/creating-modbus-tcp.md#max-registers-per-read).
5. A generic CIP tag created from the browser that has never read a value may point at the wrong assembly instance. Check it against the browser. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#assembly-instance).
6. An output tag whose reverse mapping receives text now reverses it before writing, where before it was sent unchanged. Check its rules. See [Value Mapping](https://ai-ops.com/docs/tags/value-mapping.md#reverse-mapping-on-write).
7. An expression tag saved on 1.0 that never evaluated is repaired on first start, and a model reading it begins receiving its value. Check any such model before upgrading. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
8. A value mapping on an OPC-UA tag now matches localized text, byte strings, node IDs and status codes by their plain text. Rewrite a pattern that spelled out the type name or locale. See [Creating an OPC-UA Tag](https://ai-ops.com/docs/tags/creating-opc-ua.md#there-is-no-opc-ua-data-type-to-set).
9. An OPC-UA byte-string tag picked from the browser that has never read still has b'…' around its identifier. Edit the identifier to drop the b'…', or pick the node again. See [Creating an OPC-UA Tag](https://ai-ops.com/docs/tags/creating-opc-ua.md#identifier-type).
10. A component that reads an SLC or MicroLogix through pycomm3 can start failing on an address it was never really reading, since each address now reads the bit or slot it names. Correct the address. See [Stacks](https://ai-ops.com/docs/components/stacks.md).
11. A Logix tag on a bit past its tag's width, such as bit 32 of a DINT, fails after the upgrade instead of reading a wrong value. Correct the bit number, which counts from 0. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#logix-tag-name).
12. With TLS turned off, a portal or dashboard that shows Koios inside a frame shows an error in its place, as it already did with TLS on. Open Koios in its own tab or window. See [Environment Variables](https://ai-ops.com/docs/installation/environment-variables.md#proxy-headers).
13. Integrations that use the removed Logix or OPC-UA type fields or model file mutations, read tag values or a model ZIP import preview, or introspect the schema without a token need updating. See [For integrators](#for-integrators).
14. A user or API client that searches an address for OPC-UA servers, browses a device at another address, tests unsaved settings, or attaches or removes an EDS file needs permission to manage devices. See [For integrators](#for-integrators).
15. An API client that imports or exports tags needs permission to manage tags, and one that uploads model files or imports models needs permission to manage AI models. See [For integrators](#for-integrators).
16. Downgrading is not supported, because an earlier version cannot run against a 1.3 database. Restore a pre-upgrade backup to go back. See [Downgrade to a Previous Version](https://ai-ops.com/docs/updates/general.md#to-an-earlier-minor-version).

Coming from an earlier version? [Upgrading Koios](https://ai-ops.com/docs/updates/general.md) lists every check between it and this release, then the steps.

## What else changed

### Devices and tags

- Find an EtherNet/IP device without knowing its address: search the network or one address, and Koios fills in the device type and slot, writing nothing to the device. See [Creating an EtherNet/IP Device](https://ai-ops.com/docs/devices/creating-ethernet-ip.md#finding-a-device-on-the-network).
- Set an in-memory tag's value wherever it is shown, and it holds until something else writes it, with models reading it as current. It needs permission to control the tag, as Test Output now does. See [Tags](https://ai-ops.com/docs/tags/introduction.md#setting-an-in-memory-tags-value).
- An expression opens in a full view with its latest result and every tag it reads, broken references first. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
- Logix and OPC-UA tags read the type the device reports rather than a type of their own, and the tag list shows, filters and sorts on every tag's data type. See [Creating a Tag](https://ai-ops.com/docs/tags/creating-getting-started.md#data-type).
- A reading its data type cannot hold reports Bad: Type Mismatch (111), as does a numeric expression returning text, which reported 106 before. See [Bad, Missing, or Frozen Tag Values](https://ai-ops.com/docs/troubleshoot/tag-values.md).
- Generic CIP tags read and write 64-bit integers, and the EDS browser makes tags from 64-bit fields. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#data-type).

### Lists and trends

- Exports read their history several times faster, most of all across many tags. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#exporting-data).

### Accounts and security

- OPC-UA client certificates show their fingerprint, and the withdrawn Basic128Rsa15 and Basic256 policies are marked as such, kept for servers that offer nothing else. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md).
- The cache runs without administrator rights, and startup no longer opens raw shell connections, which runtime security scanners can report as a reverse shell.
- The log forwarder, the system metrics collector, the certificate bundle and the sign-in token library are updated to versions that fix vulnerabilities image scanners report.

### System

- Tag history can move to a new history store: new installs start there, and an upgraded install moves its history from System > Data Storage, checking both stores match before it switches. See [Data Storage](https://ai-ops.com/docs/system/data-storage.md).
- The Services page always shows how busy each Koios service is and which devices, models, scan groups or tags keep it busy, with no setting to turn on first. See [Services](https://ai-ops.com/docs/system/services.md#service-load).
- Every configuration tab, your profile included, is a stack of sections that fold away and save on their own, each linking to its page in these docs. See [Configuring a Model](https://ai-ops.com/docs/models/configuring-a-model.md).

### Installation

- Koios installs from one file on the customer portal that carries everything it needs, with or without internet, and the install guide walks you through it. See [Installing Koios](https://ai-ops.com/docs/installation/overview.md).
- The system requirements list the web browsers Koios supports, and Koios warns along the bottom of the window when a browser is older than those. See [System Requirements](https://ai-ops.com/docs/installation/system-requirements.md#web-browser).

## Fixes

### Devices and tags

- A device whose history cannot be saved keeps running and connected, and shows a warning, instead of reconnecting and raising an alarm every scan. See [Stale Data](https://ai-ops.com/docs/troubleshoot/stale-data.md#history-write-failures).
- A value written to a Logix or OPC-UA tag is sent in the type the device reports: a floating-point tag takes it as written, and an integer tag takes its whole-number part. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#data-type).
- The Logix browser matches the controller's own type names, so a structure named like a data type is no longer read as an integer.
- A large OPC-UA level opens on servers that limit how much they answer at once. See [Browsing a Device](https://ai-ops.com/docs/devices/browsing-a-device.md).
- An OPC-UA node its parent reaches by two references is listed once.
- An OPC-UA folder the server refuses to list says so on that folder and keeps the rest of the tree, rather than reporting the device unreachable. See [Browsing a Device](https://ai-ops.com/docs/devices/browsing-a-device.md#a-folder-the-server-will-not-list).
- An OPC-UA node whose identifier or namespace is longer than 256 characters can be made into a tag.
- After an OPC-UA server restarts with its namespaces in a different order, browsing, values and indexing still read each node from its own namespace. See [Browsing a Device](https://ai-ops.com/docs/devices/browsing-a-device.md#where-the-rows-came-from).
- Generic CIP devices that describe assemblies only through their connections, or spell the entries differently, now browse, and an assembly with a length but no contents lists at its real size.
- The generic CIP browser takes each assembly's instance from the connection the file declares, so a tag created from it reads the instance the device answers to.
- An endpoint offering a policy Koios does not support shows that policy, marked unsupported, instead of appearing unsecured.
- Duplicating a generic CIP device copies its EDS file as a file of its own. See [Creating a Device](https://ai-ops.com/docs/devices/creating-getting-started.md#duplicating-a-device).
- A generic CIP device refuses an address with a route after it, which it would only have dropped, so it is always reached at the address it shows. See [Creating an EtherNet/IP Device](https://ai-ops.com/docs/devices/creating-ethernet-ip.md#hostname).
- The Parameters tab names each value as the rest of the product does. Nothing stored changed. See [Device Parameters](https://ai-ops.com/docs/devices/device-parameters.md).
- The OPC-UA browser names security modes as the device settings do.
- A failed OPC-UA connection names its own cause and fix: a withdrawn certificate, a mismatched identifier, a sign-in method the endpoint refuses, a full session limit, or a port to open. See [Troubleshoot a Connection](https://ai-ops.com/docs/troubleshoot/connection.md).
- An unreachable host is named as one, a refused connection says a closed port and a firewall look alike, and a server publishing only unreachable addresses says so. See [Troubleshoot a Connection](https://ai-ops.com/docs/troubleshoot/connection.md).
- Number boxes no longer put a value back while you type: clearing one leaves it empty, negative and decimal numbers type normally, and a box left empty returns to its last value.
- A tag's history card averages every reading recorded in the period, and its trend weighs them all, rather than only the highs and lows its chart draws.
- A tag made by a parameter mapping starts switched on, so the mapping writes to it straight away.
- An OPC-UA device set to a security mode and policy the server does not offer says so, and the connection check lists the ones it offers. See [Troubleshoot a Connection](https://ai-ops.com/docs/troubleshoot/connection.md).
- When an EtherNet/IP device refuses a connection, the error names the reason and its status codes, and says what to check for a connection size, connection limit or route refusal. A refused network connection says so too.
- An expression tag whose result is not a finite number points you to the expression's scaling and the readings it uses, not to a device. See [Expression & Value-Mapping Errors](https://ai-ops.com/docs/troubleshoot/expressions-and-mapping.md).
- Testing the connection to a BOSS device that uses no authentication, and browsing it, now work. See [Creating a REST Device](https://ai-ops.com/docs/devices/creating-rest.md).
- When an enabled model blocks deleting a device or tag, the message lists and counts each model once and shows its name as written.
- A tag's address, in the tag list and the API, is written as an OPC-UA node ID that names its namespace by URI, and a generic CIP tag's shows its assembly instance and byte offset.
- Byte-string OPC-UA nodes picked from the browser now read, and testing a byte-string tag works. See [Creating an OPC-UA Tag](https://ai-ops.com/docs/tags/creating-opc-ua.md#identifier-type).
- A device's log keeps the messages from its OPC-UA or SOAP connection after the device is edited or its log level changes.
- An expression re-evaluates when an in-memory tag it reads changes, so one that reads only in-memory tags no longer keeps its first result or error. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
- A Logix device no longer fails every scan when one tag's read lands near the connection size, and a tag changed by an online edit is reported instead of read as its old type.
- Escape in a confirmation, a dialog opened from Site Explorer, or a browse opened while creating a device or tag closes only that, leaving the panel or form behind it open with your changes kept.
- The EDS browser types each field by its declared width: BYTE, WORD and DWORD fields become unsigned integers, one-bit fields Booleans, and a field Koios cannot read, such as a date, is not offered. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#generic-cip-tags).
- An EtherNet/IP device that closes its connection partway through a reply now fails and reconnects instead of stalling its collection, and one that refuses a session says why.
- An EtherNet/IP reply that arrives after its request gave up is set aside rather than read as the answer to the next request, so a slow device cannot report one tag's value as another's.
- A Logix tag on an array element past index 65,535 now reads and writes.
- A Logix tag name matches whatever its case, as the controller's own names do, and two tags on one controller tag both read it. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#logix-tag-name).
- Writes to a Logix controller land in the order they were made, so a bit and its whole tag written together end as the later one says.
- A Logix string too long for its tag fails that write with the reason, and a bit past its tag's width fails that tag's reads and writes, instead of reading or writing something else. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#logix-tag-name).
- A device or model that fails just after Koios starts raises a notification and lights the Events indicator. A model first waits, by default up to a minute, for the tags it reads and writes to come live. See [Events](https://ai-ops.com/docs/events/introduction.md).
- A device that cannot write its long-term history shows the database's own message as its error detail, rather than the raw server response. See [Data Is Stale, Frozen, or Has Gaps](https://ai-ops.com/docs/troubleshoot/stale-data.md).
- A device stopped part-way through reading or writing shows Stopped, with its tags, rather than sometimes staying Running.
- An in-memory tag written twice in quick succession takes the second value at once, rather than at its next periodic check.
- An expression tag needs an expression, and a device set member's priority must be 1 or more, through the API and the tag CSV import too. An expression tag saved without one needs it at its next edit.
- A Modbus TCP tag's overview and Site Explorer panel show its register type, address, data type and byte order, and a Modbus TCP device's overview and panel show its host, port, unit ID, timeout and addressing.
- On an unlicensed instance, expression and in-memory tags keep their own status instead of alternating with Unlicensed. See [Licensing Problems](https://ai-ops.com/docs/troubleshoot/licensing.md).
- An expression tag saved on 1.0 that failed with a syntax error is repaired when you upgrade or restore an older backup, and starts evaluating, so a model reading it begins receiving its value. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
- The node browser, a tag's test and value mapping read an OPC-UA localized text, XML element, node ID, qualified name or status code as text, a byte string as hex, and a structure as JSON. See [Creating an OPC-UA Tag](https://ai-ops.com/docs/tags/creating-opc-ua.md#there-is-no-opc-ua-data-type-to-set).
- The OPC-UA node browser shows an array value as the JSON text a String tag holds for it. See [Creating an OPC-UA Tag](https://ai-ops.com/docs/tags/creating-opc-ua.md).
- A Logix item inside an array element, such as a structure member, opened from search shows the array in its trail, so you can step back to it.
- A generic CIP tag needs a data type, through the API and the tag CSV import too. A tag saved without one still loads and takes a type at its next edit. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#generic-cip-tags).
- When an import row names a device, tag or user that does not exist, the preview marks that column and names the missing record, rather than showing an internal error. See [Importing & Exporting Tags](https://ai-ops.com/docs/tags/importing-exporting.md#preview-step).
- A device set on a protocol other than OPC-UA, made through the API on an earlier version, can be renamed, described and moved into a folder again.
- A tag whose name holds brackets, such as an array element, can be used in an expression. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
- An expression such as `sqrt(@[Tag:Level:value] - 2)` saves, as does a filter that reads a tag partway through its first argument, such as `deadband(filter(@[Tag:Noisy:value], 10), 1.0)`. See [Expression Tags](https://ai-ops.com/docs/tags/expressions.md).
- Value mapping matches a Boolean reading from the device on rules for 1 and 0 or true and false, in any letter case, and numeric rules compare it as 1 or 0. See [Value Mapping](https://ai-ops.com/docs/tags/value-mapping.md#exact-match).
- Recording scan timings and status history no longer slows device scans while the time-series database is slow or stops answering. Writing long-term history, and stopping a running device, still wait on it.
- Choosing a Microsoft SQL device's database driver no longer makes creating or saving it fail, a new device starts with the driver selected, and a saved device shows it. See [Creating a Microsoft SQL Device](https://ai-ops.com/docs/devices/creating-mssql.md#database-driver).
- An OPC-UA, Modbus TCP, EtherNet/IP or Microsoft SQL device's timeout takes whole seconds, and the form refuses a fraction on the field instead of failing to save with a technical error. See [Creating an OPC-UA Device](https://ai-ops.com/docs/devices/creating-opc-ua.md#timeout-seconds).
- The test value field of an output tag keeps the decimal point you type when the tag shows whole numbers, and no longer drops digits past the tag's decimal places. See [Creating a Tag](https://ai-ops.com/docs/tags/creating-getting-started.md#after-creation).
- A Logix tag name with a malformed array index, such as empty brackets, fails only that tag instead of every tag on the controller, and is refused when you save the tag. See [Creating an EtherNet/IP Tag](https://ai-ops.com/docs/tags/creating-ethernet-ip.md#logix-tag-name).
- A tag configuration section whose save is refused for a setting it does not show, such as an expression referring to a deleted tag, says why instead of appearing to do nothing.
- Clearing a tag's description or engineering units and saving removes them. See [Creating a Tag](https://ai-ops.com/docs/tags/creating-getting-started.md).
- When you delete tags together with the expression tags that read them, the delete warning no longer counts those expression tags among the expressions that will break. See [Tags](https://ai-ops.com/docs/tags/introduction.md#tag-list).
- A Modbus TCP register scan that reaches addresses the device refuses lists them with the device's reason, among any registers it read, instead of reporting that the device cannot be reached. See [Creating a Modbus TCP Device](https://ai-ops.com/docs/devices/creating-modbus-tcp.md).
- A Modbus TCP tag whose value would run past register 65535 is refused when you save it, rather than failing every scan. See [Creating a Modbus TCP Tag](https://ai-ops.com/docs/tags/creating-modbus-tcp.md).
- Choosing Boolean on a register in the Modbus TCP register browser previews bit 0 and creates the tag on that same bit, and a tag's bit number can no longer be cleared. See [Creating a Modbus TCP Tag](https://ai-ops.com/docs/tags/creating-modbus-tcp.md).

### Models

- A model with more than about 165 input bindings reads its input history instead of failing.
- A model's last prediction time is no longer offered for mapping to a tag, because a mapping writes only numbers. Delete any mapping already made from it. See [Enabling a Model](https://ai-ops.com/docs/models/enabling-a-model.md#parameters-tab).
- A model file whose input space Koios cannot read or store, such as one with an input path over 256 characters, is refused with a message naming the problem. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#metadata-koios-cannot-apply).
- A bindings CSV trimmed to the columns you are editing imports as bindings, as long as it keeps one bindings column such as `binding_order` or `tag`. See [Importing & Exporting Models](https://ai-ops.com/docs/models/importing-exporting.md).
- A model's Overview tab and its Site Explorer panel describe the active model file rather than the newest upload, say when no file is active, and offer resetting from metadata only when the active file carries metadata. See [Model Files](https://ai-ops.com/docs/models/model-files.md#reset-from-metadata).
- An input's trace in detailed diagnostics drops the previous tag's points as soon as its binding is pointed at another tag. See [Monitoring a Model](https://ai-ops.com/docs/models/enabling-a-model.md#detailed-diagnostics).
- A model file whose binding metadata has a name over 128 characters or a description over 256 uploads with a warning instead of failing, and Koios leaves that field unset. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#metadata-koios-cannot-apply).
- A model file whose embedded metadata gives a true-or-false setting any other value, or a minimum equal to its maximum, uploads with a warning and its metadata unapplied. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#metadata-koios-cannot-apply).
- Clamp Output on an output with no scaling stays on when you save the binding, as long as its failure range is Custom, and you can turn it on there. See [Assigning Bindings](https://ai-ops.com/docs/models/assigning-bindings.md#clamp-output).
- A model file whose embedded metadata holds NaN or an infinite number leaves out only that number and applies the rest, and an action given one keeps its label without a value. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#metadata-koios-cannot-apply).
- Creating, renaming or duplicating a model under a name another trend uses is refused with a message naming the trend, and a model whose trend was renamed at upgrade can be edited and activated again. See [Creating a Model](https://ai-ops.com/docs/models/creating-a-model.md).
- Recovery hysteresis pulls in only the failure bound a value crossed, so one value past one end of the range no longer holds a binding failed while its readings sit at the other end. See [Assigning Bindings](https://ai-ops.com/docs/models/assigning-bindings.md#recovery-hysteresis).
- A model's missed-scan count no longer includes cycles a scan group skipped, and one model's missed scans no longer go unrecorded when another's cannot be written. See [Monitoring a Model](https://ai-ops.com/docs/models/enabling-a-model.md#metric-cards).
- A model enabled or initialized over compressed history interpolates its window from the last stored reading into the current one instead of holding it flat, and a long window fills faster. See [A Model or Binding Isn't Running](https://ai-ops.com/docs/troubleshoot/models.md).
- Initializing a model's history while its tags are being collected no longer leaves the model failing for want of history for up to an hour, or up to a day for a model with a long window.
- A model ZIP's import preview lists the binding rows beside the model rows, with the rejected rows in each file, and the import counts both. See [Importing & Exporting Models](https://ai-ops.com/docs/models/importing-exporting.md#preview-step).
- An input whose readings arrive less often than its model samples, such as a slowly scanned tag or one written by a slower model, no longer fails intermittently while waiting for history. See [A Model or Binding Isn't Running](https://ai-ops.com/docs/troubleshoot/models.md).
- An input a model file declares newest-first in lowercase runs newest first, and a file declaring a window order or interpolation this version does not recognize uploads with a warning naming it. See [Structured Input Spaces](https://ai-ops.com/docs/models/structured-input-spaces.md).
- A model scan rate below 10ms is refused through the API and the model CSV import, as the model form refuses it. A model saved with one needs a valid rate at its next edit. See [Importing & Exporting Models](https://ai-ops.com/docs/models/importing-exporting.md).
- A discrete model's Bindings tab opens when an action's Q-value is negative infinity or not a number, and shows a dash for it. See [Configuring a Model](https://ai-ops.com/docs/models/configuring-a-model.md#action-map).
- Recording execution metrics and status history no longer slows models while the time-series database is slow or stops answering. A model reading its input history from the database still waits on it. See [Memory Only Mode](https://ai-ops.com/docs/models/introduction.md#memory-only-mode).
- Activating a model file whose metadata changes the output mode keeps the tags on outputs that still fit, and the preview lists each output it removes. Resetting from metadata does the same. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#activation-preview).

### Components

- The pycomm3 Koios provides to components reads the bit a `B3/17` address and the slot an `I:1.0` address name, writes a timer's or counter's preset and accumulated value, and refuses a malformed address. See [Stacks](https://ai-ops.com/docs/components/stacks.md).
- The pycomm3 Koios provides to components raises `CommError` with the reason when a device refuses a session or closes the connection mid-reply, rather than returning False or hanging, and reads Logix array elements past index 65,535. See [Stacks](https://ai-ops.com/docs/components/stacks.md).
- The component builder reads a custom audit policy on a plain install, and the audit's JSON report parses when a policy is given. See [Component Builder SDK](https://ai-ops.com/docs/python-packages/component-builder.md#custom-policies).
- An instance's input and output values in the Inspector show two decimal places, as on the canvas, rather than every digit. Hover a value to see it in full. See [Component Canvas](https://ai-ops.com/docs/components/canvas.md#overview).
- The library upload area says what an upload activates: a new library goes live unless its security audit flags it, and a new version of an existing library starts inactive. See [Component Libraries](https://ai-ops.com/docs/components/libraries.md#uploading-a-library).

### Lists and trends

- A right-click menu opened near the bottom or right edge of the window opens above or to the left of the pointer, so every item stays in view.
- The export panel will not start an export whose end comes before its start, and says so beside the end date. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#exporting-data).
- Exporting data for tags selected across several pages of the tag list names each tag in the export panel.
- A trend or export of more than about 165 tags reads its history instead of failing.
- A trend of a few hundred tags loads, and loading a large trend no longer holds up the rest of the app. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#sampling).
- An export across many tags or a long range no longer fails because checking its size took more than a few seconds: the check now waits up to 45 seconds. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#size-limits).
- The Explorer's list of items to add to a folder loads each item once when you scroll quickly, instead of repeating some and stopping short.
- Filtering a list to Stopped includes the devices, tags and models that show Stopped because they are disabled or have never run. See [The Device List](https://ai-ops.com/docs/devices/device-list.md#filtering-by-status).
- The tag list loads a page of many tags faster: showing each tag's address no longer looks it up one tag at a time.
- Viewing more than 200 selected tags in a trend opens all of them, and says when a selected tag no longer exists. A saved trend with more than 200 traces reopens with every one. See [Trends](https://ai-ops.com/docs/trends/introduction.md#creating-a-trend).
- Raw exports of tags from devices that record at different moments are sized for the rows they really have, and no longer need many times the memory of other exports. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#size-limits).
- After you delete tags, the tag list's counts and pages update straight away, instead of keeping the old totals or showing an empty page until you reload. See [Tags](https://ai-ops.com/docs/tags/introduction.md#tag-list).
- A resampled export, and tag history read through the API, no longer invent readings after a tag's last value or while it was stopped or failed; those intervals stay empty. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md).
- A resampled export of all dates is sized on the history your tags hold, so a small one is no longer warned about or refused as too large. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md).
- Daily export files start and end at midnight in your browser's time zone and are named for that local day. Timestamps inside stay in UTC. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md).
- In a CSV export, a tag name starting with =, +, - or @ gets a leading apostrophe, so a spreadsheet shows it as text instead of running it. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md).
- Exporting a thousand or more tags from the export panel downloads instead of failing as soon as it starts. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md).
- Exporting all dates of a few thousand tags no longer fails part-way through, and a resampled one is no longer refused as too large. See [Settings & Export](https://ai-ops.com/docs/trends/settings-and-export.md#size-limits).

### Accounts and security

- You can give an API client only roles and permissions you hold, and regenerate its secret only if you hold every permission it has. See [API Clients](https://ai-ops.com/docs/system/endpoints.md).
- Servers that check whether certificates were withdrawn, such as Honeywell Experion, accept a trusted OPC-UA certificate Koios generates. Regenerate one made by an earlier version and trust the new one. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md).
- Regenerating an OPC-UA client certificate reconnects the secured devices using it at their next scan, so a server that does not yet trust the new certificate refuses them then, not at a later reconnect. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md#regenerating-a-certificate).
- Signing in records the time on the account, so the user list, each user's page and your profile show when a user last signed in. See [Users](https://ai-ops.com/docs/system/users.md).
- A custom role that can manage tags can import tags from a CSV file, and one that can manage devices can attach and remove a device's EDS file. See [Roles & Permissions](https://ai-ops.com/docs/system/roles-permissions.md).
- Acknowledging an event from a chart or timeline, downloading a backup, and the switch and action menu in Explorer's detail panel are disabled, and say why on hover, for users without the permission. See [Roles & Permissions](https://ai-ops.com/docs/system/roles-permissions.md).
- A custom role that can manage AI models can upload model files and import models. See [Roles & Permissions](https://ai-ops.com/docs/system/roles-permissions.md).
- Explorer's folder actions are disabled, and say why on hover, for users without permission to manage dashboards, who also cannot drag folders or items. See [Explorer](https://ai-ops.com/docs/explorer/introduction.md).
- Deleting users from the user list, or deleting an OPC-UA client certificate, reports success and refreshes the list.
- Exporting tag configuration needs permission to manage tags, so the built-in Operator role no longer can. See [Roles & Permissions](https://ai-ops.com/docs/system/roles-permissions.md).
- A user or role that fails to create is no longer saved anyway, so saving again after correcting the form succeeds, and the role dialogs show the reason instead of reporting success.
- With TLS turned off, another site can no longer show Koios inside a frame, as with TLS on. A page that embeds Koios this way shows an error instead. See [Environment Variables](https://ai-ops.com/docs/installation/environment-variables.md).
- Every user, whatever their role, can change their own name, email and password from My Profile, and changing the password asks for the current one. See [Users](https://ai-ops.com/docs/system/users.md#my-profile).
- The account card at the bottom of the sidebar shows a name or email you save, from My Profile, a user's settings or first-time setup, straight away and after a reload. See [Users](https://ai-ops.com/docs/system/users.md#my-profile).
- You can no longer disable or delete your own account or the last active superuser, and a disabled user who enters the right password is told the account is disabled. See [Users](https://ai-ops.com/docs/system/users.md#disabling-and-deleting-users).
- Generating an OPC-UA client certificate with a name already in use is refused on the name field. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md).
- Generating an OPC-UA client certificate refuses a hostname a server could not use, and a refused certificate upload says why in plain words. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md#generating-a-certificate).
- A role name that is blank or over 150 characters, a username with spaces, or a malformed email is refused on its field, and spaces around a role name or username are dropped. See [Users](https://ai-ops.com/docs/system/users.md).
- Disabling or deleting a user signs out their open sessions the next time they reach Koios, and a disabled or deleted API client can no longer refresh its token. See [Users](https://ai-ops.com/docs/system/users.md#disabling-and-deleting-users).
- Creating or editing a user refuses an email another account already uses, in any letter case. Two accounts that already share one still cannot sign in with it until you change one of them. See [Users](https://ai-ops.com/docs/system/users.md#creating-a-user).
- An OPC-UA client certificate without an application URI is refused at upload with a message naming what is missing, rather than accepted and then refused when a device connects. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md#uploading-a-certificate).
- An OPC-UA client certificate whose start date has not arrived shows as not yet valid, with the date on hover, instead of valid. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md#certificate-status).
- Regenerating an OPC-UA client certificate Koios generated keeps its hostname, and regenerating one you uploaded warns first that it and its key are replaced by a self-signed one. See [OPC-UA Certificates](https://ai-ops.com/docs/protocols/opc-ua-certificates.md#regenerating-a-certificate).

### System

- Each backup records the Koios version that created it, shown in the backup history and when you upload a backup to restore. Backups taken before this version still show it as unknown. See [Backup & Restore](https://ai-ops.com/docs/system/backup.md).
- The Services page no longer offers to start, stop or restart the time-series database, which cannot be controlled from there. See [Services](https://ai-ops.com/docs/system/services.md).
- A damaged backup file, or one that is not a Koios backup, is refused with a reason when uploaded for restore, and a restore that cannot start says why. See [Backup & Restore](https://ai-ops.com/docs/system/backup.md).
- Downloading a log that is still being written completes on the first try, with the file as it stood when the download started. See [Logs](https://ai-ops.com/docs/system/logs.md).
- On the Logs page, Delete, a service's log level and the debug log timeout are disabled, and say why on hover, for users who may not manage logs; Delete is offered only for the Koios services' own logs. See [Logs](https://ai-ops.com/docs/system/logs.md).
- The network diagnostic tools accept only an IPv4 address or a hostname as a target; write a shortened address such as 10.1 in full. See [Network](https://ai-ops.com/docs/system/network.md).
- Logs also mask bearer and basic tokens, JSON web tokens, cookies, credentials, and secrets written as quoted keys. See [Logs](https://ai-ops.com/docs/system/logs.md).
- The failed device, tag, model and scan group alerts, and the alert dot on the browser tab, no longer count items that have since been deleted. See [Service Health & Resource Alarms](https://ai-ops.com/docs/troubleshoot/services-and-alarms.md).
- The performance monitor records an event when it stops, as the other services do. See [Events](https://ai-ops.com/docs/events/introduction.md).
- The per-service CPU and memory charts on System Health show the cache and the metrics collection agent. See [System Health](https://ai-ops.com/docs/system/performance.md).
- Gray badges, buttons and icons show their fill in dark mode instead of blending into the page.
- If the metrics collection agent stops unexpectedly, starting or restarting it on the Services page, or restarting Koios, brings system metrics back. See [Services](https://ai-ops.com/docs/system/services.md).
- The Log Files tab now shows the web server's access and error logs instead of the database log. A log that cannot be read says so instead of appearing empty. See [Logs](https://ai-ops.com/docs/system/logs.md).
- A file that is not a license is refused with a plain explanation, and an installed license file that cannot be read is reported as unreadable.
- A mistyped address for a tag, model, user, trend or other detail page shows the page's not-found state instead of an error.
- The release date shown with the version on the System Overview page matches the release notes, instead of sometimes falling a day later. See [System Overview](https://ai-ops.com/docs/system/information.md).
- Large backup, model-file and component downloads start straight away instead of after the server has read the whole file.
- The Services card on System Overview and the services alert count a stopped web server, cache, database or metrics agent, not only the Koios services. See [System Overview](https://ai-ops.com/docs/system/information.md#system-health).
- The network diagnostic tools show each line of output as it arrives, and an audit log export starts downloading straight away. See [Network](https://ai-ops.com/docs/system/network.md).
- Searching the documentation for a short word, such as test, finds that word rather than ones a letter away, like rest. A misspelled longer word still finds what you meant.
- The storage breakdown on System Health recovers after the configuration database restarts, without restarting Koios. See [System Health](https://ai-ops.com/docs/system/performance.md).
- Filtering the web server, database or cache log by level on the Logs page shows the lines at that level instead of none. See [Logs](https://ai-ops.com/docs/system/logs.md).
- The audit log names roles, components, wires, events and audit records by kind, as it does other records, and its entity type filter finds them. See [Audit Log](https://ai-ops.com/docs/system/audit-log.md).
- A backup that fails partway no longer takes a place under Backups to Keep, so it cannot push out your oldest good backup. See [Backup & Restore](https://ai-ops.com/docs/system/backup.md#scheduled-backups).
- Hovering the storage ring on the Data Retention page shows how much the configuration database and the time-series database take, instead of counting them with everything else. See [Data Retention](https://ai-ops.com/docs/system/retention.md#storage-overview).
- Clearing History Database Retention keeps tag history forever, as the docs describe, even after a number of weeks was saved. See [Data Retention](https://ai-ops.com/docs/system/retention.md#retention-policies).
- An archive uploaded for a restore is deleted once the restore succeeds, and uploads more than a day old, including those from earlier versions, are removed overnight. See [Backup & Restore](https://ai-ops.com/docs/system/backup.md#from-a-backup-file-you-upload).
- Picking another file on the Log Files tab opens it at its first page with no search or level filter carried over, and the viewer's close button closes it on a wide screen. See [Logs](https://ai-ops.com/docs/system/logs.md).
- A Log Files search shows its matches from the first page as you type, and with a search or level filter on, pages count only matches and each line keeps its number in the file. See [Logs](https://ai-ops.com/docs/system/logs.md).
- A notice along the bottom of the screen, such as one about stopped services, no longer covers the buttons of a full-screen window, which is how windows open on a phone.

### Installation

- Worker pool sizes, the database connection pool, log file rotation, per-library log levels, sign-in token lifetimes and the OPC-UA certificate hostname take effect when set as environment variables, instead of being ignored. See [Environment Variables](https://ai-ops.com/docs/installation/environment-variables.md).
- When Koios is served under a sub-path behind a reverse proxy, downloading a component library's .kcl file and exporting the audit log work. See [Environment Variables](https://ai-ops.com/docs/installation/environment-variables.md).
- Instances on different ports of one address keep separate sign-ins, so live logs, log downloads, network diagnostics and trend export work in each at once. See [Running Multiple Instances](https://ai-ops.com/docs/installation/running-multiple-instances.md).
- The readiness check reports not ready when the expression evaluator stops, as it does for the other application services.
- The image's version label names the Koios release it carries instead of the operating system's version.
- The boot summary in the container log names the version Koios last ran and notes a start that signed everyone out, so an upgrade or a credential replacement no longer reads like a restart. See [Server Won't Start](https://ai-ops.com/docs/troubleshoot/server-startup.md#a-database-update-failed).
- With service logs streamed to the container output, the default on Kubernetes, a restart no longer repeats the previous run's last lines as if they were new. See [Environment Variables](https://ai-ops.com/docs/installation/environment-variables.md).
- On a host running several instances, start-up messages name the instance's own volumes, so a reset command they suggest no longer removes another instance's. See [Running Multiple Instances](https://ai-ops.com/docs/installation/running-multiple-instances.md#copying-an-instances-setup).
- The web server's access and error logs rotate at 10 MB like the service logs, rather than being deleted each week, and the time-series database and cache logs rotate too instead of growing without limit. See [Logs](https://ai-ops.com/docs/system/logs.md).
- Stopping or restarting Koios while it starts shuts it down cleanly instead of ending it at the stop timeout, and lets a database update already under way finish first. See [Upgrading Koios](https://ai-ops.com/docs/updates/general.md#update-manual-docker-run).
- Running the installer again keeps a service file you edited, such as for a port, TLS or a serial device, and shows how the new one differs; an unedited one is updated. See [Running the Installer](https://ai-ops.com/docs/installation/running-the-installer.md#when-it-finishes).
- The installer's force-pull option installs the newest release, never the version of the folder it runs from.
- The installer finishes and returns you to your own shell instead of leaving you in an administrator's one.

## For integrators

### API and client library changes

- The `ethernetIpLogixTagType` and `opcuaDatatype` tag fields are removed. Use the tag's data type instead.
- A tag's reading, the value last commanded for it, and a failing tag's last reading cross the wire as text. Read each through the tag's data type. See [Python API Client](https://ai-ops.com/docs/python-packages/client.md).
- A tag and its live reading carry `valueHeld`, true while an operator-set value holds. A held value is current however old its timestamp is. See [Tags](https://ai-ops.com/docs/tags/introduction.md#setting-an-in-memory-tags-value).
- `outputConflicts` is deprecated in favor of `outputSources`, which names every model, mapping or component writing to an output tag. The old name still works until a future release.
- `trendSeries` returns a trend's history as arrays per tag and answers a trend of many tags several times faster. `trendHistory` is deprecated in its favor and still works until a future release.
- Searching an address for OPC-UA servers, browsing a device at an address other than its own, or testing with unsaved values needs permission to manage devices. Without it, the app disables searching and tests the saved settings.
- Testing an OPC-UA connection through the API takes the same steps as the app, so a server that accepts a session but cannot be read back now fails.
- Model bindings can be filtered by model, and the 1.3 client library lists all of a model's bindings with a correct total.
- History reads take `COUNT` as an aggregate function: the number of readings recorded in each window.
- Importing and exporting tags needs permission to manage tags, and attaching or removing an EDS file needs permission to manage devices. Give any API client that does any of these that permission.
- The `importTagsPreview` and `importTagsConfirm` mutations return the row counts and rejected rows in `result`; selecting it no longer fails the whole response.
- Deleting a model's active file through the API is refused; activate another file first. See [Managing Model Files](https://ai-ops.com/docs/models/model-files.md#actions-per-file).
- Uploading model files and importing models needs permission to manage AI models. Give any API client that does either that permission.
- A model ZIP import preview returns model rows in `result` and binding rows in `bindings_result`, even when only binding rows are rejected. A ZIP with no model rows puts its bindings in `result`, and `result_kind` names which.
- The `uploadModelFile` and `updateModelFile` mutations are removed. Upload a model file through the REST upload at `/api/v1/aiops/model-file/upload/`, or the client library's `upload_model_file()`, then activate it. See [Python API Client](https://ai-ops.com/docs/python-packages/client.md#model-files).
- A license file the `uploadLicense` mutation refuses is recorded in the audit log as a failed upload, as one refused in the app already is.
- Deleting a wired component instance or component definition through the API succeeds and removes its wires with it.
- The deprecated `refreshClientToken` mutation returns a new access token, as `refreshToken` does, instead of an error. Use `refreshToken` in new code.
- The `unseenEvents` query answers instead of failing, and leaves the events it returns unseen.
- Streaming or downloading a device, model, scan group or component instance log, or downloading a model file, by a slug that is not a UUID answers not found instead of a server error.
- Schema introspection needs a signed-in user's or an API client's token, and the GraphQL endpoint no longer serves an in-browser query editor.
- The 1.3 client library's device, tag and model import calls apply the import when asked to, rather than failing after the preview and importing nothing. See [Python API Client](https://ai-ops.com/docs/python-packages/client.md).
- The 1.3 client library exports every enum, filter and input type its documented examples use, so they run as written, and uploads an EDS file to the device you name and reports removing one as done. See [Python API Client](https://ai-ops.com/docs/python-packages/client.md).
- A 1.3 client library ships alongside this release and handles the changes above. See [Python API Client](https://ai-ops.com/docs/python-packages/client.md).
- OPC-UA browsing drops `NodeInfoType.isSupported` and the `forceRefresh` argument of `opcuaGetNodeDetails`, which always reads the device. `securityMode` on security policies and user modes is an enum, and an EDS assembly's `size` is null when the file states none.
- koios-component-builder 1.3.2 and koios-model-utils 1.2.1 ship alongside this release. Model-utils refuses a binding whose minimum equals its maximum, and a file whose true-or-false setting holds any other value. See [Model Metadata Library](https://ai-ops.com/docs/python-packages/model-utils.md).
