f2377251af
merge: Task 14 — native AbLegacy tag runtime + factory
Joseph Doherty
2026-10-07 16:54:40 -04:00
b249c15c1a
fix(ablegacy): refuse status-bit writes, decode status bits as 0/1, reject over-long replies, global TNS
Joseph Doherty
2026-10-07 16:54:18 -04:00
d0f89f9ec1
docs(plans): native AB transport tasks.json status sync
Joseph Doherty
2026-10-07 16:49:32 -04:00
33dbd342e5
fix(ab-transport): trim-only CIP path canonicalisation, observe abandoned shared opens, no Forward Open after dispose during connect
Joseph Doherty
2026-10-07 16:49:19 -04:00
25cc836865
feat(abcip): native tag runtime over the managed CIP transport, with returned-type checking
Joseph Doherty
2026-10-07 16:47:48 -04:00
c31e6deebf
feat(ablegacy): native PCCC tag runtime over the managed transport
Joseph Doherty
2026-10-07 16:45:50 -04:00
a251954bf7
fix(ab-transport): harden Task 9 pool and connection (close chaining, uncancellable shared open, monotonic throttle, canonical CIP path, internal ctors, shared-pool logger)
Joseph Doherty
2026-10-07 16:45:26 -04:00
b82fffd269
feat(ab-transport): per-device connection with routing modes, shared scheduler, keep-alive and Forward Open throttle
Joseph Doherty
2026-10-07 16:35:11 -04:00
d7145ddfa5
docs(plans): native AB transport tasks.json status sync
Joseph Doherty
2026-10-07 16:23:09 -04:00
ba73f48f9c
merge: Task 10 — RequestScheduler (MSP coalescing) + LogixTagClient fragment loops
Joseph Doherty
2026-10-07 16:23:08 -04:00
5211975067
fix(ab-transport): harden Task 10 scheduler and tag client (dispose faults, pump guard, read cap, write validation, 8-byte wide-struct alignment)
Joseph Doherty
2026-10-07 16:22:40 -04:00
1c7fd5d5de
feat(ab-transport): MSP-coalescing request scheduler and fragmented Logix read/write
Joseph Doherty
2026-10-07 16:15:05 -04:00
1201d5fcfb
test(ab-transport): golden libplctag<->ab_server frame captures for Logix, Micro800 and PCCC
Joseph Doherty
2026-10-07 15:50:00 -04:00
de14d354e6
fix(ab-transport): widen libplctag guard regex to catch aliases and static usings
Joseph Doherty
2026-10-07 15:49:24 -04:00
29f456c3ef
test(ab-transport): guard libplctag confinement to its adapters (falsified by adding using libplctag to AbCipDriver.cs)
Joseph Doherty
2026-10-07 15:47:52 -04:00
d602a08925
merge: Task 6 — CIP path encoding + Logix type codes
Joseph Doherty
2026-10-07 15:46:31 -04:00
0d2f27bb1d
merge: Task 3 — AbLegacy seam decoupled from libplctag types
Joseph Doherty
2026-10-07 15:46:31 -04:00
62abdb4c5b
merge: Task 2 — AbCip seam decoupled from libplctag types
Joseph Doherty
2026-10-07 15:46:31 -04:00
52505678d6
docs(plans): native AB transport tasks.json status sync
Joseph Doherty
2026-10-07 15:46:31 -04:00
10c909cbc2
fix(abcip): translate decode/encode-time libplctag exceptions; doc and probe-test cleanups
Joseph Doherty
2026-10-07 15:44:02 -04:00
a57d61c484
refactor(abcip): confine libplctag to its adapters behind AbStatus/AbTransportException
Joseph Doherty
2026-10-07 15:40:07 -04:00
1affb4b613
refactor(ablegacy): confine libplctag to its adapter behind AbStatus/AbTransportException
Joseph Doherty
2026-10-07 15:39:01 -04:00
f2f1ec2585
feat(ab-transport): CIP route/symbolic path encoders and Logix type codes
Joseph Doherty
2026-10-07 15:38:04 -04:00
a0897fda96
feat(ab-transport): project skeleton with AbStatus, CIP reply parsing and the ICipChannel seam
Joseph Doherty
2026-10-07 15:34:34 -04:00
b6f64c369a
docs(plans): sync native AB transport plan + tasks.json after task transcription fixes
Joseph Doherty
2026-10-07 15:24:25 -04:00
d4808fa948
docs(plans): fold Fable review into the native AB transport plan; add tasks.json
Joseph Doherty
2026-10-07 15:17:07 -04:00
f3e92fec27
Merge TwinCAT native array subscriptions (live-validated on the Elma PLCs)
Joseph Doherty
2026-10-07 15:08:17 -04:00
6106946504
docs(plans): native AB transport implementation plan (draft, pre-review)
Joseph Doherty
2026-10-07 14:59:26 -04:00
1982af8155
docs(twincat): native array notifications, sub-range / size-cap rules, live TC2 gate record
Joseph Doherty
2026-10-07 14:56:03 -04:00
313946e6ea
fix(twincat): refuse a scalar tag over a PLC array on the read path too
Joseph Doherty
2026-10-07 14:50:39 -04:00
1e68121b17
fix(twincat): register a bit-indexed BOOL notification on its parent word (live TC2 gate)
Joseph Doherty
2026-10-07 14:50:39 -04:00
dcc35f3481
feat(twincat): native ADS notifications for array tags, decoded from raw bytes
Joseph Doherty
2026-10-07 14:45:35 -04:00
45b6062de5
docs(plans): native .NET EtherNet/IP+CIP+PCCC transport to replace libplctag under AbCip/AbLegacy — design
Joseph Doherty
2026-10-07 14:35:14 -04:00
9dbaa6d758
Merge TwinCAT fixes ported from ignitionoee + live-validated on the Elma PLCs
Joseph Doherty
2026-10-07 14:28:01 -04:00
8060cfd2a5
fix(twincat): size strings by the resolved type and refuse VAR_IN_OUT references (live TC2 gate)
Joseph Doherty
2026-10-07 14:27:22 -04:00
6cc40963b4
Merge AbCip fixes found against real CompactLogix presses
Joseph Doherty
2026-10-07 14:17:58 -04:00
58c61c1610
Merge FOCAS wire-decode corrections ported from ignitionoee
Joseph Doherty
2026-10-07 14:17:58 -04:00
cc876bdf43
docs(abcip): record the 2026-10-07 real-controller verification and the browse/read behaviour it changed
Joseph Doherty
2026-10-07 14:17:19 -04:00
e3d6b76ede
fix(abcip): a scalar read whose width disagrees with its authored type is BadTypeMismatch
Joseph Doherty
2026-10-07 14:15:19 -04:00
2fc1b488fe
docs(focas): record the wire decode corrections ported from the ignitionoee driver
Joseph Doherty
2026-10-07 14:13:00 -04:00
9b51dbca60
test(focas): bring the vendored focas-mock onto the real 31i-B wire shapes; integration tests follow
Joseph Doherty
2026-10-07 14:12:06 -04:00
68cf3ae8b7
fix(abcip): stride user-string arrays by the read buffer, not the built-in STRING size
Joseph Doherty
2026-10-07 14:11:08 -04:00
0ca56cb1f6
fix(abcip): an unknown tag no longer throttles its whole device or reads as a comms error
Joseph Doherty
2026-10-07 14:09:43 -04:00
26b512adba
fix(focas): a missing O-number or refused program sub-read goes Bad, not a Good 0
Joseph Doherty
2026-10-07 14:08:26 -04:00
a0a024c80b
fix(abcip): accept module-defined I/O tag paths (Local:1:I.Data, ABB_OmniCore:I.X)
Joseph Doherty
2026-10-07 14:07:49 -04:00
75754478ac
docs(twincat): TC2 leading-dot globals, port 801 / no AddRoute, string + declared-type rules, native arrays refused
Joseph Doherty
2026-10-07 14:07:35 -04:00
1dba46bd7b
fix(focas): decode servo/spindle meters by their base/exponent envelope; MaxRpm -> MotorSpeedPct
Joseph Doherty
2026-10-07 14:07:22 -04:00
28bbb5e5e2
fix(abcip): browse program-scoped tags and surface symbol array dimensions
Joseph Doherty
2026-10-07 14:06:48 -04:00
83a314e734
fix(twincat): string subscriptions, Windows-1252 STRING decode, and declared-type kind checks (ignitionoee 0.19.2-0.19.4)
Joseph Doherty
2026-10-07 14:05:46 -04:00
3b48e05e9a
fix(abcip): decode real @udt template buffers; browse STRINGs as String, hide BOOL hosts
Joseph Doherty
2026-10-07 14:04:11 -04:00
69e0a622f3
fix(focas): scale positions from each cnc_rddynamic2 block; delete the fabricated cnc_getfigure
Joseph Doherty
2026-10-07 14:03:08 -04:00
1a74c3c2e0
fix(twincat): map TwinCAT 2 ADS base-type names in symbol browse
Joseph Doherty
2026-10-07 13:59:40 -04:00
9460da513c
fix(focas): decode all four bytes of an axis/spindle name record, up to the first NUL
Joseph Doherty
2026-10-07 13:58:40 -04:00
b7b754fd98
fix(twincat): accept TwinCAT 2 leading-dot globals in TwinCATSymbolPath (ignitionoee 0.19.1)
Joseph Doherty
2026-10-07 13:58:40 -04:00
665ecd55c2
fix(focas): decode cnc_rdmacro dec_val at offset 6; vacant/fractional macros go Bad
Joseph Doherty
2026-10-07 13:57:11 -04:00
e3d7a8f071
docs: note that psbridge and winrm remote access to the wonder boxes are disabled (2026-09-11)
Joseph Doherty
2026-09-11 09:05:33 -04:00
2c792613bf
docs(claude): point sister-project-history detail to scadaproj skill dir
Joseph Doherty
2026-09-03 10:58:37 -04:00
fcbfb56181
docs(archreview): tranche-1 capstone — five live gates PASS (S18 re-gated after the hard-deadline fix); follow-ups surfaced by the gates
Joseph Doherty
2026-08-20 14:34:16 -04:00
12faa423d0
docs(plans): R3-02 T19 live gate — PASS on docker-dev at 97cb5cefb6d2: a constant Modbus register (HR5=5) re-publishes 5 Good on raw AND its UNS mirror after a 2-min fixture outage with no value change (0x80050000 → BadNoCommunication → Good), calc follows input quality with an unchanged value, comms_latched_refs 0, deadband-1000 and operator-Restart legs pass; first cycle was vacuous (fixture re-seeds registers on restart) and re-run; wire never carries a value with a Bad status (SDK NodeState.ReadAttribute); MQTT leg not run
Joseph Doherty
2026-08-20 14:33:38 -04:00
1234d869c0
docs(plans): R3-05 S18 re-gate — PASS on docker-dev at 97cb5cefb6d2 (master b9b3cf9a): with SQL paused a keyed activation is denied in 2.42 s, the 2000 ms Warning lands at the deadline not at unpause, the open subscription's max gap is 1.00 s (was 57 s), timeout counter 1, no-activation control clean; T11 done
Joseph Doherty
2026-08-20 14:32:30 -04:00
b9b3cf9a58
docs(plans): R3-04 live gate — PASS on docker-dev (pre-fix control at 7c77a8c7: Cluster:Roles-only site-b-2 booted roles=[] and timed out the fleet deploy 5/6, miscased site-a-2 ServiceLevel 0; post-fix: six banners source=Configured, deploy Sealed 6/6 in 224 ms, one Primary + standby per pair, disagreement Warning fires, unknown role refuses to start)
Joseph Doherty
2026-08-20 13:44:31 -04:00
f665e8b87e
Merge branch 'fix/r3-05-s18-hard-deadline' — R3-05 S18 live-gate failure: the API-key store deadline is a hard Task.WhenAny race (SqlClient ignores cooperative cancellation on a black-holed socket: 42.9 s activation hang, 57 s stall of open subscriptions); compose wires OTOPCUA_ACL_ENABLED to the centrals
Joseph Doherty
2026-08-20 13:29:59 -04:00
cde5cdfd9f
fix(docker-dev): wire OTOPCUA_ACL_ENABLED to the centrals; record the S18 follow-up
Joseph Doherty
2026-08-20 13:29:30 -04:00
c657b2e03d
fix(acl): make the API-key store deadline a HARD race (R3-05 S18 live-gate failure)
Joseph Doherty
2026-08-20 13:29:21 -04:00
9242630c98
docs(plans): R3-05 live gate — S19 PASS (BadUserAccessDenied 0.09 s after ExpiresUtc, no deploy; 1 h negative control clean), S18 FAIL (paused SQL: keyed activation hung 42 s past the 2 s bound and stalled an open subscription 57 s; cooperative token not honoured by SqlClient)
Joseph Doherty
2026-08-20 13:21:21 -04:00
cb378e7da2
docs(plans): R3-03 live gate — PASS on docker-dev (restart re-subscribe resumes values in 0.36 s; pre-fix control at 7c77a8c7 silent for 155 s; F1 widened alarm set re-subscribes 1→2; watchdog no re-trip post-reconnect)
Joseph Doherty
2026-08-20 13:20:29 -04:00
f2eb375e81
docs(archreview): STATUS — round-3 tranche 1 executed + merged; per-plan review verdicts and merge hashes
Joseph Doherty
2026-08-20 12:43:35 -04:00
2b3e1f1549
docs(plans): R3-01 live gate — PASS on docker-dev with DisableLogin=false (control failed first)
Joseph Doherty
2026-08-20 12:41:55 -04:00
e280db3753
fix(runtime): comms_latched_refs meter tag key 'driver' -> 'driver_instance' — the R3-04 bare-role-literal guard caught the R3-02 tag key at merge (cross-branch collision; neither branch saw the other)
Joseph Doherty
2026-08-20 11:55:16 -04:00
157d01c2c2
Merge branch 'fix/r3-02-stale-good-family' — R3-02: one quality contract at four seams — comms loss marks raw+UNS value variables BadNoCommunication (WriteStatuses sink member, recovery audit), Calculation + VT hold on Bad / worst-of sub-code / (value,status) dedup, MQTT initial push + ConnectionLost stale, Sparkplug birth replay (archreview 03/S15, 05/STAB-19, 05/STAB-18, 02/S14)
Joseph Doherty
2026-08-20 11:49:06 -04:00
886082fec7
fix(review): calc ReadOne reports an inputs-Bad publish; VT inputs-bad counter ticks only on a real report
Joseph Doherty
2026-08-20 11:48:41 -04:00
74794f4365
docs(archreview): R3-02 execution notes — T18 sweep + outstanding live gate
Joseph Doherty
2026-08-20 11:34:18 -04:00
93704f64ab
docs(archreview): R3-02 status
Joseph Doherty
2026-08-20 11:33:56 -04:00
62c5bc3aad
fix(runtime): a stopping driver child announces comms loss so restart/respawn latches its nodes Bad
Joseph Doherty
2026-08-20 11:07:02 -04:00
f1b976f5e2
Merge branch 'fix/r3-04-one-role-authority' — R3-04: EffectiveRoles is the one role authority (Cluster:Roles wins over OTOPCUA_ROLES, normalised, validated, fail-start on unknown/overlay-changed roles); Program.cs + all four validators consume it; case-insensitive gossip predicates; source-scan guard (archreview 01/S-12 = 03/C5, 01/C-9)
Joseph Doherty
2026-08-20 11:05:09 -04:00
1d251cc037
Merge branch 'master' into fix/r3-02-stale-good-family
Joseph Doherty
2026-08-20 11:03:02 -04:00
af39e61638
fix(cluster): T7's post-overlay guard was structurally unreachable — compare live Cluster:Roles, not the PostConfigured options.Roles (review finding, R3-04)
Joseph Doherty
2026-08-20 11:01:33 -04:00
5dc8d34472
docs: the stale-Good quality contract, stated once (R3-02)
Joseph Doherty
2026-08-20 10:56:16 -04:00
e3a72dc385
fix(runtime): virtual tags hold on Bad inputs and inherit the worst input status (archreview 02/S14)
Joseph Doherty
2026-08-20 10:53:26 -04:00
3648d3c129
fix(cluster): ClusterRoleInfo._roleLeaders stays Ordinal — Akka tracks role-leadership per exact gossiped role string (review finding, R3-04)
Joseph Doherty
2026-08-20 10:52:51 -04:00
cc9b845f99
feat(engines): IVirtualTagEvaluator snapshot overload; Roslyn read cache stops fabricating Good (02/S14)
Joseph Doherty
2026-08-20 10:45:11 -04:00
d79d51dd4f
Merge branch 'fix/r3-01-mesh-grpc-allowanonymous' — R3-01: mesh gRPC + LocalDb sync endpoints opt out of the AdminUI cookie FallbackPolicy (PSK interceptors are the gate); real-auth-stack boundary tests + map-convention guard; rig DisableLogin parameterised (archreview 03/S14 Critical)
Joseph Doherty
2026-08-20 10:43:49 -04:00
c8cf5c8032
test(host): the R3-01 falsifiability control asserts the cookie-challenge signature (a bare Exception was satisfiable by an anonymised endpoint too); docs wording
Joseph Doherty
2026-08-20 10:43:49 -04:00
60e5b40228
fix(calculation): read cache carries real input status + timestamps
Joseph Doherty
2026-08-20 10:40:15 -04:00