Skip to content

0.3.1

Reference. What this release does, what it does not, and what is simulated.

Released: 2026-10-15, on PyPI the same day. Previous: 0.3.0, on PyPI 2026-10-12.


What 0.3.1 is

Four pull requests on top of 0.3.0, #170 to #174, every one about the first hour on somebody else's PC. 0.3.0 proved the plant starts from pipx install on Windows; this release is what happens when it does not.

The first run on a Windows PC recovers itself

Three things went wrong in the first twenty minutes for the first person to install 0.3.0 on Windows. All three are fixed:

py -m fsmes demo bottling        # when `fsmes` is "not recognized"
py -m fsmes demo bottling status # when nothing answers on 8010
py -m fsmes demo bottling stop   # when the plant is half dead
  • py -m fsmes works. pip install puts fsmes.exe in a Scripts folder a default Python install does not put on PATH. Every command works this way now, and a plant started this way starts its child processes this way, so PATH never has to be fixed first.
  • status names what died. A plant records what each of its five processes is for, so status says which are alive and which is gone by role — the dashboard and API, the OPC server, the reader, the simulated floor, the log sink — prints the path of the gone one's log, and ends with the command to type next. A healthy plant prints its dashboard URL.
  • stop clears a half-dead plant, with no flag. When one process dies and the rest keep running, nothing answers and nothing can be started over the top. stop ends the survivors and says what it found; a start on top of a silent plant is refused in the same words instead of failing at bind five times.

One page for that first hour: run it on your own box.

A simulated plant shaped like your own

0.3.0 could write a file describing your plant's shape and do nothing with it:

fsmes skills unpack plant-from-your-mes .\assistant   # offline, out of the wheel
# the three commands in assistant\SKILL.md, by hand on the MES box -> plant-shape.toml
fsmes demo from-shape .\plant-shape.toml --name acme

Your machines, routings, stop mix, order sizes and shifts, in six seconds, with the one number the file cannot carry asked for on the way (the space between each pair of machines). fsmes shape plant writes the pack without starting it.

One folder any assistant can walk you through

fsmes-assistant.zip is attached to this release, and fsmes skills unpack assistant ./assistant writes the same folder out of an installation with the network off. It is plain markdown you hand to whatever AI assistant you already use — in a chat window, with no access to your machine. Four stages: install until fsmes demo bottling answers; a plant shaped like yours; this one beside your own MES in shadow mode, ending at the scorecard; and an honest page on why "can I switch my old MES off?" is still answered no. It never asks you for plant data: you run the commands and paste what was printed.

fsmes doctor: one file you can paste to anybody

fsmes doctor --out doctor.md: one command, one Markdown file with the version, the OS, how it was installed, every plant in this home with each process alive or gone, the ports and whether they answer, and the last 40 lines of every process log with every value replaced by its shape — a tag becomes AAAAAA_AAA_AAA, an order AA-AAAA-#, a measurement <float>. For a plant in shadow mode a second half says how long it has been watching, how much of that window it saw, the kept scorecards as one row each, and what is not built toward a real switch-over. The file is read back by the shape file's own leak check and is not written at all if any value got through. It starts nothing, stops nothing, and nothing sends it anywhere: one file to paste when something is wrong.

What 0.3.1 does not do

  • It has not run a real plant. Not one, still. Every number in this repository comes from a simulated line and says so where it appears.
  • No real SQL Server has run the shape queries. That path is proven on this project's own fixtures and on Windows in CI, nowhere else.
  • Shadow mode has never run beside a real MES, so the doctor file's second half has only ever described simulated plants.
  • A real switch-over is not built — the old MES off, this one booking for real, writing to PLCs, carrying the old history. The folder says so.
  • You still need Python 3.12 or newer, the real obstacle on a locked-down plant PC. Nothing here removes it.
  • Everything 0.3.0 does not do, it still does not do: 0.3.0.

What is simulated

Everything that produces a number, as in 0.3.0: a deterministic line simulator in src/fsmes/sim/, replayed over a real OPC UA server. A plant from your shape file is shaped like yours; none of its readings are yours.

Upgrading from 0.3.0

pipx upgrade factorysemantics-mes   # or pip install --upgrade
fsmes --version                     # 0.3.1

No migrations. Nothing here changes the database schema, so a plant that runs on 0.3.0 runs on 0.3.1 with no init-db step; d4e8a1c93b70 is still head. The procedure, and 0.2.0's, is on upgrading between versions.