Joseph Doherty
dc0d7653b9
feat(v3-batch3): B3-WP4 — {{equip}}/<RefName> reference-relative resolution
...
Replace the deleted equipment-base-prefix {{equip}} mechanism (impossible now
that equipment is reference-only) with per-reference resolution:
{{equip}}/<RefName> resolves through the owning equipment's UnsTagReference rows
(by effective name) to the backing raw tag's RawPath. Every unresolved <RefName>
is a clear deploy error + authoring rejection + Monaco diagnostic — preserving
"editor accepts <=> publish accepts".
Commons:
- EquipmentScriptPaths: delete DeriveEquipmentBase; SubstituteEquipmentToken now
takes the equipment's reference map (effectiveName -> RawPath) and substitutes
{{equip}}/<RefName> inside path literals (unresolved left intact, never throws);
add ExtractEquipReferenceNames (path-literal scoped) +
ExtractEquipReferenceNamesFromText (message templates). Slash syntax replaces
the v2 dot joint.
- New EquipmentReferenceMap: shared, input-shape-agnostic builder (entity + JSON
sides) over RawPathResolver — the single authority both compose seams + the
validator use, so resolved RawPaths agree byte-for-byte.
Compose seams (byte-parity kept):
- AddressSpaceComposer.Compose + DeploymentArtifact.ParseComposition both build
the per-equipment reference map from UnsTagReferences + Tags + raw topology and
substitute VirtualTag AND ScriptedAlarm-predicate sources before dependency
extraction (runtime dep refs = resolved RawPaths).
Deploy gate + authoring + editor:
- DraftValidator.ValidateEquipReferenceResolution: EquipReferenceUnresolved error
for unresolved {{equip}}/<RefName> in VirtualTag/ScriptedAlarm scripts + alarm
message-template tokens (naming script, equipment, missing ref).
- UnsTreeService.ValidateEquipTokenAsync (Wave-A M1): reference-relative authoring
rejection, replacing the stale DeriveEquipmentBase(empty)->reject-all logic.
- ScriptAnalysisService: {{equip}}/ completion offers the equipment's reference
effective names; DiagnoseAsync flags unresolved refs (OTSCRIPT_EQUIPREF) same as
the deploy gate. Requests carry optional EquipmentId (threaded MonacoEditor ->
monaco-init.js -> fetch bodies). IScriptTagCatalog.GetEquipmentRelativeLeavesAsync
repurposed to GetEquipmentReferenceNamesAsync(equipmentId, filter).
Tests: EquipmentScriptPaths substitution/extraction (slash pinned); composer<->
artifact reference-resolution byte-parity; DraftValidator unresolved-ref;
ScriptAnalysis completion+diagnostic; M1 authoring gate. Build clean (0/0); all
five affected suites green.
Claude-Session: https://claude.ai/code/session_01LVneM3eh1UtJxEisFXgmox
2026-07-16 06:58:17 -04:00
Joseph Doherty
11576460a7
v3(b1-wp4b): make AdminUI compile against greenfield schema behind Batch-2/3 stubs
...
Namespace entity + NamespaceKind retired; DriverInstance dropped NamespaceId;
Tag is raw-only (no EquipmentId/DriverInstanceId/FullName/FolderPath); driver
options replaced pre-declared Tags with RawTags. Stub the retired surfaces so
the AdminUI + Host build green; real Raw/UNS authoring arrives in v3 Batch 2/3.
- ClusterNamespaces/NamespaceEdit: bodies replaced with 'Namespaces retired' banner
- DriverIdentitySection: dropped Namespace dropdown + NamespaceId model field
- 8 driver pages: dropped Namespace binding; retired the pre-declared Tags editor
(replaced with a '/raw Batch 2' note); multi-device pages keep their Devices editor
- UnsTreeService: equipment-tag counts/list -> empty; Create/UpdateTag -> failure
result ('Tag authoring moved to the Raw tree (/raw) in v3 Batch 2'); Namespace/
driver-binding queries removed
- IScriptTagCatalog: project surviving Tag columns only (path from TagConfig FullName, else Name)
- OpcUaClientTagConfigEditor: rebind stale FullName -> model's NodeId
- ClusterDrivers: drop retired NamespaceId column
AdminUI + Host build 0/0. AdminUI.Tests / Host.IntegrationTests remain red (WP6).
2026-07-15 21:09:04 -04:00
Joseph Doherty
9cad9ed0fc
docs(xmldoc): fill missing XML docs + strip tracking-ID comments across src
...
v2-ci / build (push) Failing after 41s
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
Adds <summary>/<param>/<returns>/<inheritdoc> where missing and removes
project bookkeeping IDs (task/tracking refs) from shipped code comments,
so the docs read cleanly and CommentChecker is quiet except for known
false positives (PLC/protocol terms, event/IEqualityComparer inheritdoc).
Doc/comment-only; no logic changed; solution builds clean.
2026-07-07 12:38:39 -04:00
Joseph Doherty
3c908f1df0
review(AdminUI): fix null-TagConfig crash, CTS leak, unencoded historian tag
...
Review at HEAD 7286d320 . AdminUI-002: IsValidJson null/blank -> friendly error (was
ArgumentNullException). AdminUI-003: DriverStatusPanel Reconnect/Restart dispose CTS (build-
verified, live /run deferred). AdminUI-005: HistorianWonderware picker URL-encodes tag name.
AdminUI-008: Format round-trip test. 001 (script-page authz) + 004 (hub [Authorize]) left
Open as cross-cutting w/ Host/Security.
2026-06-19 10:52:23 -04:00
Joseph Doherty
c98625fd9f
feat(adminui): create-new-script from the inline virtual-tag panel
2026-06-16 16:44:14 -04:00
Joseph Doherty
526eebb3bb
feat(adminui): UNS-tree delete for Cluster + Enterprise (refuse-if-children, no rowversion)
2026-06-16 16:35:07 -04:00
Joseph Doherty
0945f19a50
feat(adminui): wire Galaxy live-browse picker into the standard TagModal
2026-06-12 22:09:22 -04:00
Joseph Doherty
5dfb797817
refactor(adminui): strip alias/relay machinery from UnsTreeService + EquipmentPage; Galaxy tags use standard TagModal
2026-06-12 21:28:13 -04:00
Joseph Doherty
d19271fff8
fix(adminui): converter skips name-collisions + disabled relays (review)
2026-06-11 21:44:19 -04:00
Joseph Doherty
943bc5f709
feat(adminui): ConvertRelayVirtualTagsToAliasesAsync (relay VTag -> alias Tag)
2026-06-11 21:32:43 -04:00
Joseph Doherty
fe068652b3
fix(adminui): alias update pins invariants + LoadAliasTagAsync + null-driver guard (review)
2026-06-11 21:25:06 -04:00
Joseph Doherty
53116bdd83
feat(adminui): CreateAliasTagAsync/UpdateAliasTagAsync + Galaxy-gateway guard
2026-06-11 21:17:45 -04:00
Joseph Doherty
fcc73ccd2d
fix(adminui): null Source for alias rows without a FullName (review nits)
2026-06-11 21:12:52 -04:00
Joseph Doherty
4b4738a891
feat(adminui): alias DTO + Galaxy gateway lookup + Source/IsAlias on tag rows
2026-06-11 21:05:02 -04:00
Joseph Doherty
f1c4392b0d
refactor(uns): drop dead LoadEquipmentChildrenAsync + LinesForCluster; fix stale comment
2026-06-11 15:11:28 -04:00
Joseph Doherty
7fbfeca451
feat(uns): equipment detail page shell + Details tab + create-redirect
2026-06-11 14:36:48 -04:00
Joseph Doherty
5cae3c5b96
fix(uns): guard scripted-alarm name uniqueness on create/update (code-review)
2026-06-11 14:31:35 -04:00
Joseph Doherty
705ed6234f
feat(uns): scripted-alarm CRUD in IUnsTreeService for the equipment Alarms tab
2026-06-11 14:25:59 -04:00
Joseph Doherty
7c22861598
feat(uns): per-equipment tag/virtual-tag list service methods
2026-06-11 14:19:46 -04:00
Joseph Doherty
7d91737dac
feat(uns): carry created id on UnsMutationResult for equipment create
2026-06-11 14:16:21 -04:00
Joseph Doherty
a7c1d7f7cb
test(adminui): cover divergent-prefix {{equip}} rejection; use EquipToken constant in message
2026-06-10 08:08:13 -04:00
Joseph Doherty
cadd6c60b7
feat(adminui): reject {{equip}} virtual tags whose equipment has no derivable base
2026-06-10 07:58:38 -04:00
Joseph Doherty
fc7dc3b57d
feat(adminui): inline script-source editor in the virtual-tag modal
2026-06-09 15:23:35 -04:00
Joseph Doherty
d9dbd7917a
feat(uns): surface DriverType to the TagModal driver dropdown (F-uns-1 T1)
2026-06-09 09:16:07 -04:00
Joseph Doherty
8ba64b1d99
fix(uns): enforce #122 on line reparent across clusters (final review)
v2-ci / build (push) Failing after 4m38s
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 14:12:46 -04:00
Joseph Doherty
983d30cb15
fix(uns): guard import save + comma-limitation hint + reset-on-open (review)
2026-06-08 14:00:26 -04:00
Joseph Doherty
7db9a24403
feat(uns): equipment CSV import folded into the tree toolbar
2026-06-08 13:56:01 -04:00
Joseph Doherty
c0346f14ce
feat(uns): tag + virtual-tag modals wired into the tree
2026-06-08 13:47:34 -04:00
Joseph Doherty
d637b834b9
fix(uns): reject equipment bind to non-existent driver + modal-xl (review)
2026-06-08 13:38:33 -04:00
Joseph Doherty
2beaa43d60
feat(uns): equipment modal wired into the tree
2026-06-08 13:31:14 -04:00
Joseph Doherty
a4a9dc912a
feat(uns): area + line modals wired into the tree
2026-06-08 13:20:25 -04:00
Joseph Doherty
d8fba02a5e
feat(uns): equipment-bound virtual-tag CRUD
2026-06-08 13:11:12 -04:00
Joseph Doherty
77024f87da
fix(uns): reject tag create on non-existent equipment + narrow JSON catch (review)
2026-06-08 13:06:45 -04:00
Joseph Doherty
5a392c5db0
feat(uns): equipment-bound tag CRUD with namespace + cluster guards
2026-06-08 13:00:26 -04:00
Joseph Doherty
ab0ff8aedf
fix(uns): reject driver-bind on unresolvable line + enforce MachineCode uniqueness on update (review)
2026-06-08 12:55:36 -04:00
Joseph Doherty
2836a0704b
feat(uns): equipment CRUD with #122 driver-cluster guard
2026-06-08 12:47:19 -04:00
Joseph Doherty
47b1d2259f
feat(uns): area + line CRUD with #122 reassignment guard
2026-06-08 12:35:58 -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
cec670f0c8
feat(uns): IUnsTreeService structural load + DI registration
2026-06-08 12:23:00 -04:00