Virtual tags: TimerIntervalMs is ignored at runtime, so a timer-only virtual tag never evaluates (no deploy warning) #783
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Source: docs/reviews/2026-10-21/gates.md (master
7891b3cb), observations section — found running the #761 docker-dev gates on1b9c36f3.A virtual tag with
TimerIntervalMsset and noctx.GetTagdependency deploys cleanly, then sits atBadWaitingForInitialDataindefinitely.VirtualTag.TimerIntervalMsisn't read at runtime:VirtualTagActorevaluates only on dependency changes, and there's no timer scheduler. TheCalculationNoEffectiveTriggerDraftValidator rule (E4) covers Calculation tags only.Fix one of two ways:
VirtualTagNoEffectiveTriggerrule) and stop exposing the field in the AdminUI.Either way, add a test that a timer-only virtual tag either evaluates on its interval or is refused at deploy.
Fixed on master
d9b95dcfby implementing the timer (option a). The repo already presentsTimerIntervalMsas a working trigger: the entity docs, the DB check constraint (ChangeTriggered OR timer ≥ 50 ms), the AdminUI field, UnsTreeService's validation and the 2026-06-08 design all treat it that way. Only the runtime ignored it; the oldTimerTriggerSchedulerwas deleted in #603 with no replacement.EquipmentVirtualTagPlannow carries ChangeTriggered + TimerIntervalMs, and both are part of its equality, so an edit respawns the actor. The artifact decode was dropping them.VirtualTagActorschedules a repeating tick in PreStart, clamped to 50 ms, and cancels it in PostStop. A tick that arrives while an async run (#779) is in flight is dropped, never stashed, so slow scripts don't build a backlog.VirtualTagNoEffectiveTrigger: a hard error, same severity as E4.Tests: VirtualTagActorTimerTests 5, DraftValidatorVirtualTagTriggerTests 5, plus an artifact-decode test. Each mutation turns tests red: no scheduling, stashing ticks instead of dropping, no cancel in PostStop, removing the validator call. Release build 0 warnings; Core.VirtualTags 16, Runtime 988, Configuration 219, AdminUI 1962, OpcUaServer.IntegrationTests 132 (AKKA_TEST_TIMEFACTOR=3).
⚠ Deploy note: the new rule refuses a deploy containing a virtual tag that has neither a timer nor a literal
ctx.GetTagdependency. Such a tag never evaluated before either. Before rolling this to DEV/QA, check their ConfigDbs for such tags, or the first deploy after upgrade will be refused until they're fixed.