Skip to content

v1.4.1: IEC104 standard frame format revert, sqlalchemy[asyncio], privileged-port precheck - #26

Merged
suoten merged 3 commits into
masterfrom
release-v1.4.1
Sep 30, 2026
Merged

suoten merged 3 commits into
masterfrom
release-v1.4.1

Conversation

@suoten

@suoten suoten commented Sep 30, 2026

Copy link
Copy Markdown
Owner

v1.4.1 patch release (user-reported v1.4.0 issues):

  • revert(iec104): restore standard 1-byte APDU length + 6-byte ASDU header (regression from 1df6f50 shipped in v1.4.0)
  • fix(deploy): explicit sqlalchemy[asyncio] (greenlet missing in Docker), alembic.ini ASCII-only, privileged-port precheck with actionable error (S7 on 102 in Docker)
  • chore: version 1.4.1 + CHANGELOG

Regressions: test_iec104_wire 7/7 green, test_privileged_port_precheck 4/4 green.

ConvergeLoop Bot added 3 commits September 30, 2026 20:57
…-byte ASDU header

ConvergeLoop commit 1df6f50 mistakenly applied IEC 60870-5-101 (FT1.2)
frame layout to IEC 60870-5-104: 2-byte APDU length (L1 L2) and 2-byte
COT/OA in the ASDU header. Standard 104 frames are 68 L(1) C1..C4 with
a 6-byte ASDU header (TI+VSQ+COT(1)+OA(1)+CA(2 LE)). The regression
made the server drop standard masters on connect (0x07 control byte
rejected as L2) and reintroduced the CA/IOA x256 bug fixed in 4f7f803,
which shipped in v1.4.0. Restore the wire-verified 4f7f803 server.
…ASCII alembic.ini

- pyproject: declare sqlalchemy[asyncio]>=2.0.0. SQLAlchemy 2.1 dropped
  the default platform greenlet dependency (extra-only); alembic resolved
  to 2.1.1 in the v1.4.0 image so containers crashed at migration step
  with 'No module named greenlet'
- alembic.ini: ASCII-only comments - configparser decodes it with the
  system locale, which crashes on Windows GBK systems when non-ASCII
  characters are present (also affected local pip installs)
- engine.start_protocol: pre-flight bind probe for ports < 1024.
  PermissionError used to be misread as 'port in use', auto-switch then
  walked the whole privileged range and died with 'No free port found'
  (API 503) - the reported S7-on-102 failure in Docker. Now surfaces an
  actionable bilingual error (cap-add NET_BIND_SERVICE or port >= 1024)
- defaults.get_friendly_error: map 'no free port found' to the same
  root-cause guidance (zh/en)
- DEPLOYMENT.md + docker-compose.simple.yml: document/enable
  NET_BIND_SERVICE for privileged ports (S7 102)
- tests/test_privileged_port_precheck.py: 4 regression cases
@suoten
suoten merged commit 2cf9008 into master Sep 30, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant