Skip to content

v0.3.1

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Oct 08:29
· 2 commits to main since this release
4b4d96d

0.3.1

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

Released: 2026-10-15. 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.


Every change in this release: CHANGELOG.