Repository navigation
Releases: Sun-Tech-Software/WCS
Release list
WCS 0.1.0
The first release without the preview suffix. It is distributed as source, like the preview, and the
rules of versioning and compatibility apply from here:
a patch never breaks what that page lists; a minor may, and says so in this file.
Added
- WMS contract: two optional routes, 44 and 45; a WMS that does not offer them answers
404or
501and the WCS behaves as before.POST reservations/cell/check
(IWarehouse.CheckStorageCellAsync): whether the warehouse would reserve a precise cell, without
reserving it.POST notes/missing-among(IWarehouse.GetMissingNoteAssignmentsAsync): which of the
given shipping-note assignments no longer exist. Both have a default implementation inIWarehouse,
so an existing adapter keeps compiling.Wcs.ContractChecktreats an added optional operation as
compatible.
Fixed
-
Engine: an extraction still in its cell sent to a precise cell the warehouse refuses stays the
extraction it was: the cell is checked (route 44) before the warehouse is told about the change of
cell, which used to close the mission when the reservation was refused afterwards. -
Engine: the queued row of a shipping-note assignment deleted in the WMS leaves the extraction queue
(route 45) instead of moving a load unit nobody asked for. -
Engine: «does this process have handled load units?» also answers for the months that left the
history retention: their references are kept inwcs.dbbefore the month file is deleted. -
Wcs.Wms.Client: an enum answer the contract does not know (an outcome of a newer WMS) is a
permanent rejection, not the value of the caller's «anything else» branch. -
Engine: the second extraction trigger point selects the storing missions coming from its own
group; it compared against the first point's group, so with only the second point loaded every
storing mission was received. -
Engine: a loaded source whose load unit has no route yet no longer hides the sources after it
from the device that receives from them. -
Engine: updates and removals of commands and extraction queue rows are announced to the event
hub only after the save succeeds, as insertions already were. -
Host:
PUT /api/v1/plant/graphwith a null list or a null entry, and
PUT /api/v1/items/geometrywith a null entry, answer 400 instead of 500. -
Wcs.Api.Client: aBaseAddressthat is not a bare http(s) origin is refused when the client
is built; a successful response with anullbody is aWcsApiExceptionnaming the request. -
Wcs.DbTool:verifyandrestorerefuse a manifest whose file names are not bare WCS
database names, are listed twice, or whose format is unknown, before touching any file. -
Release workflow: the
--prereleaseswitch and a single release file reachghwhole. They
were splatted one character at a time, so the draft release of0.1.0-preview.1was not
created (it was created by hand from the same tag).
Changed
- Host: a warning at startup when
Wcs:ApiKeyorWcs:ReadOnlyApiKeyis shorter than 32
characters. - Engine: transit times (
GET /api/v1/log/transit-times) read each month once, with one query
instead of three: about four times faster on a month of 200,000 log rows. - Engine: a group's loading decision reads the load units ready to load once, instead of up to
four times. Wcs.Api.Clientdisposes every HTTP response; the host compares API keys without allocating.
WCS 0.1.0-preview.1
Added
Initial public preview of the Sun Tech WCS, extracted from Sun Tech's internal repository and
published under the Apache License 2.0. It contains:
- The engine (
WCS/Wcs.Engine): the plant graph built from the plant's devices and junctions,
missions and device states, the route recomputed at every hop, persistence on SQLite (wcs.db,
monthly history files, the driver's message log) with schema migrations applied when a file is
opened, and four durable queues that deliver the physical facts to the WMS at least once, with
operation ids for receipts. - The host (
WCS/Wcs.Host): the executable that runs the engine, as a console application or a
Windows service; the HTTP API under/api/v1and the SignalR event hub at/hub/plant; a full key
and an optional read-only key in theX-Api-Keyheader; the edit lease for plant changes; refusal
to start with placeholder keys, or with a plain HTTP endpoint off the loopback unless explicitly
allowed. - The web editor (
WCS/Wcs.WebEditor), served by the host at/editor: Blazor Server with a
bundled draw.io, to draw and configure the plant, link devices to the WMS's cells, and operate the
engine. - The contracts and clients:
Wcs.Api.ContractsandWcs.Api.Client(the host API and its typed
.NET client),Wcs.Wms.ContractsandWcs.Wms.Client(the 43 HTTP routes the WCS calls on a WMS,
IWarehouse),Wcs.Connection.Interface(the field-driver contract,IConnectionand
IConnectionFactory) andWcs.Common.Wcs.Viewer(a read-only copy of the engine state from the
hub) is included as experimental: no sample, no tests here, outside the compatibility rules. - The loopback driver (
WCS/Wcs.Connection.Test), which simulates the machines in the process, and
the loading of a field driver of your own through theWcs:ConnectionFactorysetting. - Fail-closed connections: a device of connection type Connected without its connection makes the
engine refuse Run and goes OffLine, instead of being served by the simulator. The opposite
behaviour exists only behindWcs:AllowSimulatorForMissingConnections, which the host refuses in
the Production environment. - A sample WMS and a sample plant (
samples/): a runnable in-memory WMS that answers the WCS's
contract, a plant on the loopback driver, the script that loads it, and their tests. - English guides (
docs/): quick start, overview and boundary, the WMS contract, writing a WMS
adapter, the host API, plant modelling, connecting machines, deployment and operations,
troubleshooting, security and threat model, production readiness, known limitations, and a
reference of routes, commands, configuration and terms. - Test suites for the engine, the host, the web editor (bUnit, and Playwright in a real browser),
the contracts and clients, and the sample WMS. - Build and release tooling: the .NET SDK pinned by
global.json, a committed
packages.lock.jsonper project with locked restores in CI, the version of the WCS in
Directory.Build.props, GitHub Actions workflows (build and pack, the test suites, the browser
tests, vulnerable packages, Markdown links, the SBOM, a clean working tree; tagged releases as
drafts with SHA-256 checksums), immutable commit pins for third-party GitHub Actions, a trusted
in-repository digest for the Gitleaks release binary, and Dependabot for NuGet packages and GitHub
Actions. - Source-only distribution: no NuGet package is published for this version; the libraries are
referenced from a clone or a submodule at a release tag (README, "Using the libraries from your
code"). - Project documents: SAFETY.md, SECURITY.md, SUPPORT.md,
CONTRIBUTING.md, CODE_OF_CONDUCT.md, third-party notices
and a CycloneDX SBOM.
Not included
Sun Tech's proprietary PLC driver and its protocol; the legacy WinForms plant editor and the WinForms
test bench of the viewer; the internal tool that migrates plants from Sun Tech's WMS database; the
internal demo scripts.