Joseph Doherty
ace366ebcf
test(uns): cover #122 allow-when-driver-already-in-target-cluster (review)
2026-06-08 12:42:13 -04:00
Joseph Doherty
4a32edef1a
fix(uns): re-entrancy guard + clear stale error + PageTitle on GlobalUns (review)
2026-06-08 12:39:23 -04:00
Joseph Doherty
47b1d2259f
feat(uns): area + line CRUD with #122 reassignment guard
2026-06-08 12:35:58 -04:00
Joseph Doherty
c9f59e4bd2
feat(uns): GlobalUns page with browsable tree
2026-06-08 12:34:37 -04:00
Joseph Doherty
b33cf1c80d
feat(uns): lazy per-equipment tag + virtual-tag load
...
Add LoadEquipmentChildrenAsync to IUnsTreeService and UnsTreeService; returns
Tag nodes (ordered by Name) then VirtualTag nodes (ordered by Name) as leaf
nodes with ChildCount=0, HasLazyChildren=false, keys tag:{id}/vtag:{id}.
2026-06-08 12:29:52 -04:00
Joseph Doherty
c264441b74
refactor(uns): clarify service lifetime doc + defensive vtag-count null filter (review)
2026-06-08 12:27:29 -04:00
Joseph Doherty
2c0297c1af
fix(uns): @key node rows for stable Blazor diffing (review)
2026-06-08 12:27:19 -04:00
Joseph Doherty
cec670f0c8
feat(uns): IUnsTreeService structural load + DI registration
2026-06-08 12:23:00 -04:00
Joseph Doherty
0f286a70b8
feat(uns): recursive UnsTree renderer
2026-06-08 12:21:38 -04:00
Joseph Doherty
3e8941bce4
docs(uns): clarify HasLazyChildren + cluster EntityId, add tie-break test (review I1/I2/M2)
2026-06-08 12:18:37 -04:00
Joseph Doherty
d9082e22e3
feat(uns): UnsNode VM + pure tree-assembly helper
2026-06-08 12:14:49 -04:00
Joseph Doherty
944732e500
docs(uns): implementation plan + task graph for global UNS management
2026-06-08 12:11:40 -04:00
Joseph Doherty
3361eac6d8
docs(uns): design for global UNS management tree-table
2026-06-08 12:02:18 -04:00
Joseph Doherty
f5ef0991af
docs(adminui): correct equipment help text for driver-less equipment (review I1/M1)
v2-ci / build (push) Failing after 4m24s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-08 07:13:45 -04:00
Joseph Doherty
b962b041f3
docs(plan): driver-less equipment — all tasks complete + live-verified
2026-06-08 07:10:14 -04:00
Joseph Doherty
d909a8e4f6
docs+test(deploy): clarify driver-less attribution docs + no-line exclusion test (Task 2 review)
2026-06-08 07:02:25 -04:00
Joseph Doherty
0b5fc44866
fix(adminui): show + clarify driver-less equipment across list/import (Task 1 review)
2026-06-08 07:00:03 -04:00
Joseph Doherty
53eb3fcda5
test(config): DraftValidator accepts driver-less equipment + driverless equipment namespace
2026-06-08 06:56:22 -04:00
Joseph Doherty
c688899134
fix(deploy): cluster-attribute driver-less equipment via its UNS line area (BuildClusterSets)
2026-06-08 06:53:41 -04:00
Joseph Doherty
d2dbf7b0d7
feat(config): make Equipment.DriverInstanceId nullable + driver-less AdminUI support + migration
2026-06-08 06:49:28 -04:00
Joseph Doherty
a94d03a194
docs(plan): driver-less equipment namespace implementation plan (#143-147)
2026-06-08 06:40:14 -04:00
Joseph Doherty
064adb0bd0
docs(design): driver-less equipment namespace (nullable Equipment.DriverInstanceId, drop Modbus placeholder)
2026-06-08 06:36:40 -04:00
Joseph Doherty
446a45686f
docs(plan): mark all VirtualTag/script-memory Phase-1 tasks complete
v2-ci / build (push) Failing after 37s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-07 15:57:43 -04:00
Joseph Doherty
92d1df88f4
fix(deploy): guardrail estimate is best-effort, never blocks a valid deploy
...
Wrap the script compile-cost guardrail block in its own inner try/catch so a
transient SQL failure on ToListAsync cannot fall through to the outer catch and
produce a Rejected reply for an otherwise-valid deploy. advisory is declared in
the outer scope so the Accepted StartDeploymentResult Message is unaffected on
the happy path; the inner catch logs a Warning and leaves advisory null.
2026-06-07 15:40:06 -04:00
Joseph Doherty
cfbf0b2a17
feat(deploy): warn-only script-compile-cost advisory on deploy
2026-06-07 15:36:09 -04:00
Joseph Doherty
b73ce75402
harden(vtag): exclude backslash from passthrough capture + parity tests (A review)
2026-06-07 15:31:54 -04:00
Joseph Doherty
08d7477860
feat(vtag): passthrough fast-path skips Roslyn for mirror scripts (A)
2026-06-07 15:26:20 -04:00
Joseph Doherty
3834400f05
test(mem-probe): confirm A0 drops production per-script RSS ~11x (18->~1.66 MiB)
...
Swap MemProbe's ProjectReference from Core.VirtualTags to
Core.Scripting.Abstractions so the heavy-mode globalsType
(ScriptGlobals<VirtualTagContext>) resolves from the post-A0
Roslyn-free assembly.
Measured results (2026-06-07, N=50, Release):
heavy (post-A0): 2.40 / 2.53 MiB/script (was ~18 MiB)
lean: 1.64 / 1.65 MiB/script
=> heavy ≈ lean; both well under the 3 MiB gate. PASS.
2026-06-07 15:19:02 -04:00
Joseph Doherty
1827c51c42
refactor(scripting): clarify sandbox-pin invariant + add RootNamespace (A0 review)
2026-06-07 15:16:14 -04:00
Joseph Doherty
56cac39216
refactor(scripting): extract script-callable types into Roslyn-free Core.Scripting.Abstractions (A0)
2026-06-07 15:10:00 -04:00
Joseph Doherty
df772dd09a
docs(plan): VirtualTag/script memory Phase-1 implementation plan (A0+A+guardrail)
2026-06-07 15:00:11 -04:00
Joseph Doherty
321d57938f
docs(design): VirtualTag/script memory scalability (A0+A+guardrail; C2 deferred) + measurement harness
2026-06-07 14:55:28 -04:00
Joseph Doherty
89c07fc382
fix(docker-dev): mem_limit 1g->2g (1g OOM-killed central nodes under materialise load)
2026-06-07 14:40:43 -04:00
Joseph Doherty
f078d41a8b
test(deploy): cover cross-cluster rejection through the actor; note reservation false-positive at gate
v2-ci / build (push) Failing after 42s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-07 11:28:17 -04:00
Joseph Doherty
2676fc17b5
fix(host): pin EF/AspNetCore logs to Warning in appsettings.Development
2026-06-07 11:19:26 -04:00
Joseph Doherty
5aba418074
feat(deploy): activate full DraftValidator gate (reject on any validation error)
2026-06-07 11:19:23 -04:00
Joseph Doherty
fc52fbce49
docs: follow-ons tasks all complete
v2-ci / build (push) Failing after 43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-07 10:56:27 -04:00
Joseph Doherty
f817fc8a8f
fix(docker-dev): pin EF/AspNetCore logs to Warning + per-service mem limits to stop OOM/starvation
2026-06-07 10:53:08 -04:00
Joseph Doherty
46aba992c5
fix(config): DraftSnapshotFactory loads only active (unreleased) reservations
...
Filter ExternalIdReservations to WHERE ReleasedAt IS NULL so
DraftSnapshot.ActiveReservations matches its documented semantics and
ValidateReservationPreflight cannot emit spurious BadDuplicateExternalIdentifier
errors from already-released rows. Adds a focused unit test seeding one active
and one released reservation and asserting only the active row is returned.
2026-06-07 10:47:33 -04:00
Joseph Doherty
1023209d52
feat(deploy): reject Tag/VirtualTag NodeId collisions at deploy (surgical DraftValidator gate)
2026-06-07 10:42:13 -04:00
Joseph Doherty
fce66d104a
refactor(config): materialise collision groups once; note VirtualTag folder coupling
2026-06-07 10:37:22 -04:00
Joseph Doherty
83c7149be0
feat(config): DraftValidator rule + DraftSnapshot.VirtualTags for Tag/VirtualTag NodeId collisions
2026-06-07 10:33:45 -04:00
Joseph Doherty
6b36eff2d3
refactor(runtime): capture-first in HandleWriteAsync; assert no handler leak on resubscribe; fix stale comment
2026-06-07 10:31:20 -04:00
Joseph Doherty
98259ab026
fix(runtime): capture Sender before await in DriverInstanceActor subscribe (no-ActorContext race)
2026-06-07 10:26:17 -04:00
Joseph Doherty
ce8c0811eb
docs(plan): OtOpcUa follow-ons implementation plan (subscribe race, collision gate, docker-dev)
2026-06-07 10:20:52 -04:00
Joseph Doherty
4cb488c53e
docs(design): OtOpcUa follow-ons — subscribe race, signal-name collision validation, docker-dev resources
2026-06-07 10:06:08 -04:00
Joseph Doherty
4c221ce2b3
merge: equipment-namespace live values (VirtualTag route)
v2-ci / build (push) Failing after 36s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-07 09:33:21 -04:00
Joseph Doherty
1c579410cd
fix(runtime): flag cross-cluster orphan-equipment bindings on rebuild
...
v2-ci / build (push) Failing after 42s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
ParseComposition(blob, nodeId, onInconsistency?) detects a kept equipment whose
UNS line belongs to another cluster (a same-cluster-invariant violation that
would orphan the equipment folder) and reports it via an optional callback,
wired to OpcUaPublishActor's logger. Detection-only; the upstream draft
validator remains the authority. Adds two unit tests.
2026-06-07 08:24:11 -04:00
Joseph Doherty
b0a62a9f3b
fix(docker-dev): self-bootstrap schema via one-shot migrator (fixes fresh-volume quirks)
...
Adds a 'migrator' Dockerfile stage + Compose service that runs 'dotnet ef
database update' once on bring-up, so a fresh SQL volume gets the schema with no
operator step (quirk 1). cluster-seed + every host node depend on it via
service_completed_successfully, so the seed never races an in-progress migration
(quirk 2). Host build pinned to target: runtime (the migrator is now the last
stage). entrypoint + README updated; the manual 'dotnet ef' first-time step is
gone. Verified: down -v + up --build self-bootstraps (migrator+seed exit 0,
6 nodes up), deploy Sealed 6/6.
2026-06-07 08:20:56 -04:00
Joseph Doherty
1f76eac97a
fix(controlplane): case-insensitive NodeId equality for deploy ack-set
...
Aligns ConfigPublishCoordinator's _acks/_expectedAcks with the case-insensitive
ClusterId/NodeId scoping in DeploymentArtifact.ResolveClusterScope, so an ack
from a node whose host:port differs only in case still matches its expected-ack
entry (SQL collation + DNS are case-insensitive).
2026-06-07 08:20:56 -04:00