Colour trend spare pens like the legend background; Micro Trend is intermittent (ISS-055)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Clio Liu 2026-10-02 14:06:04 +10:00
parent e98322d165
commit de55132dbf
4 changed files with 59 additions and 51 deletions

View file

@ -117,6 +117,7 @@ rotation, zoom. Outputs (⇨): *Hairline value[n]*, *Time range begin/end*, *Upd
- **Workaround** (verified 2026-10-02): pad the trend to 50 pens with - **Workaround** (verified 2026-10-02): pad the trend to 50 pens with
`displays/add_trend_spares.ps1 -Path <display>.xml`. Spares copy the first pen's source, `displays/add_trend_spares.ps1 -Path <display>.xml`. Spares copy the first pen's source,
are scaled to 1E30–2E30 (clipped), hidden from the legend and get blank unique legend texts are scaled to 1E30–2E30 (clipped), hidden from the legend and get blank unique legend texts
in the legend background colour
(the web legend ignores *Show in legend*, ISS-056). Run it again after editing the trend; do (the web legend ignores *Show in legend*, ISS-056). Run it again after editing the trend; do
not keep hidden real pens (they count against the 50). Cost: 50 history requests per trend. not keep hidden real pens (they count against the 50). Cost: 50 history requests per trend.
- Working on the web as on the desktop: value axis, last/current time range, update interval, - Working on the web as on the desktop: value axis, last/current time range, update interval,
@ -127,4 +128,5 @@ rotation, zoom. Outputs (⇨): *Hairline value[n]*, *Time range begin/end*, *Upd
`<property type="componentProperty"><name>itemName[0]</name><value>…</value></property>`, `<property type="componentProperty"><name>itemName[0]</name><value>…</value></property>`,
`scaleMin[n]`, `scaleMax[n]`; elements `numberOfPens`, `realTime`, `fillWithHistory`, `scaleMin[n]`, `scaleMax[n]`; elements `numberOfPens`, `realTime`, `fillWithHistory`,
`timeRange` (s, default 300), `sampleCount` (default 300)): drew on desktop and web the first `timeRange` (s, default 300), `sampleCount` (default 300)): drew on desktop and web the first
time, then stayed blank on every later open (ISS-055, open). time, then stayed blank on several later opens and later drew again; after an in-page reload
sometimes only part of a pen shows (intermittent, ISS-055, open).

View file

@ -280,7 +280,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -326,7 +326,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -372,7 +372,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -418,7 +418,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -464,7 +464,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -510,7 +510,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -556,7 +556,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -602,7 +602,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -648,7 +648,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -694,7 +694,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -740,7 +740,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -786,7 +786,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -832,7 +832,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -878,7 +878,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -924,7 +924,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -970,7 +970,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1016,7 +1016,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1062,7 +1062,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1108,7 +1108,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1154,7 +1154,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1200,7 +1200,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1246,7 +1246,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1292,7 +1292,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1338,7 +1338,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1384,7 +1384,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1430,7 +1430,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1476,7 +1476,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1522,7 +1522,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1568,7 +1568,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1614,7 +1614,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1660,7 +1660,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1706,7 +1706,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1752,7 +1752,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1798,7 +1798,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1844,7 +1844,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1890,7 +1890,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1936,7 +1936,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -1982,7 +1982,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2028,7 +2028,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2074,7 +2074,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2120,7 +2120,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2166,7 +2166,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2212,7 +2212,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2258,7 +2258,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2304,7 +2304,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2350,7 +2350,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2396,7 +2396,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>
@ -2442,7 +2442,7 @@
</pen> </pen>
<pen type="pen"> <pen type="pen">
<type>1</type> <type>1</type>
<color type="colorSet" r="65" g="105" b="225"/> <color type="colorSet" r="240" g="240" b="240"/>
<stroke type="stroke" width="0.0"/> <stroke type="stroke" width="0.0"/>
<paint>@NULL</paint> <paint>@NULL</paint>
<visible>true</visible> <visible>true</visible>

View file

@ -4,7 +4,8 @@
# #
# Spare pens copy the first real pen's source, are scaled far outside the data (manual scale # Spare pens copy the first real pen's source, are scaled far outside the data (manual scale
# 1E30..2E30, so the line is clipped), hidden from the legend and get blank, unique legend texts # 1E30..2E30, so the line is clipped), hidden from the legend and get blank, unique legend texts
# (1, 2, 3 ... spaces) because the web legend ignores "Show in legend". Empty pens are removed. # (1, 2, 3 ... spaces) in the legend background colour, because the web legend ignores
# "Show in legend". Empty pens are removed; do not keep hidden real pens (they count against 50).
# Run it again after editing the trend in the Edit Module (it only adds what is missing). # Run it again after editing the trend in the Edit Module (it only adds what is missing).
# #
# Usage: powershell -ExecutionPolicy Bypass -File add_trend_spares.ps1 -Path <display>.xml # Usage: powershell -ExecutionPolicy Bypass -File add_trend_spares.ps1 -Path <display>.xml
@ -42,6 +43,10 @@ $text = $panelRx.Replace($text, {
$need = $target - $visibleReal $need = $target - $visibleReal
if ($need -lt 0) { $need = 0 } if ($need -lt 0) { $need = 0 }
$template = $real[0] $template = $real[0]
# spare colour = legend background, so their (blank) web legend entries do not show
$bg = (New-Object Text.RegularExpressions.Regex '<legendBackgroundColor type="colorSet" r="\d+" g="\d+" b="\d+"/>').Match($panel)
$spareColor = '<color type="colorSet" r="240" g="240" b="240"/>'
if ($bg.Success) { $spareColor = $bg.Value.Replace('<legendBackgroundColor ', '<color ') }
$spares = @() $spares = @()
for ($i = 1; $i -le $need; $i++) { for ($i = 1; $i -le $need; $i++) {
$s = $template $s = $template
@ -57,6 +62,7 @@ $text = $panelRx.Replace($text, {
$s = Set-Tag $s 'procentual' 'false' $s = Set-Tag $s 'procentual' 'false'
$s = Set-Tag $s 'annotationVisible' 'false' $s = Set-Tag $s 'annotationVisible' 'false'
foreach ($g in @('majorGridVisible', 'minorGridVisible', 'lowHighLimitGridVisible', 'lowHighLimitGridAreaVisible', 'lowLowHighHighLimitGridVisible')) { $s = Set-Tag $s $g 'false' } foreach ($g in @('majorGridVisible', 'minorGridVisible', 'lowHighLimitGridVisible', 'lowHighLimitGridAreaVisible', 'lowLowHighHighLimitGridVisible')) { $s = Set-Tag $s $g 'false' }
$s = (New-Object Text.RegularExpressions.Regex '<color type="colorSet" r="\d+" g="\d+" b="\d+"/>').Replace($s, $spareColor, 1)
$s = (New-Object Text.RegularExpressions.Regex '<stroke type="stroke" width="[^"]*"').Replace($s, '<stroke type="stroke" width="0.0"', 1) $s = (New-Object Text.RegularExpressions.Regex '<stroke type="stroke" width="[^"]*"').Replace($s, '<stroke type="stroke" width="0.0"', 1)
$s = (New-Object Text.RegularExpressions.Regex '<paint type="paint">.*?</paint>(?=\s*<visible>)', 'Singleline').Replace($s, '<paint>@NULL</paint>', 1) $s = (New-Object Text.RegularExpressions.Regex '<paint type="paint">.*?</paint>(?=\s*<visible>)', 'Singleline').Replace($s, '<paint>@NULL</paint>', 1)
$spares += $s $spares += $s

View file

@ -74,5 +74,5 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-052 | 2026-10-01 | GRAPHICS (stale item id) | The HTML display `CIENG_Tank` showed **0** in its number field on `CI-Eng-Sample.TANK1.LEVEL` (live value 50) and the popup `ITM-E-NO_MAIN, No main item found`, in a fresh session after a CI Server restart. The display XML stores `<itemName>` **and** `<itemId>1.1.268.0.0.1.1.7</itemId>` from when it was built; after today's sample reloads the item has `ID_NUMBER` 357. Phase 10 had seen live values after a reload, so the id is not always used, but here it broke the field. | closed | Fixed in the sample: removed the `<itemId>` line from `displays/CIENG_Tank.xml`, redeployed; the field shows 50 and the popup is gone (binding by name). Documented in `create-display.md`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `examples/CI-Eng-Sample/displays/CIENG_Tank.xml`; `.claude/skills/graphics/tasks/create-display.md`; `.claude/skills/graphics/tasks/deploy-displays.md` | | ISS-052 | 2026-10-01 | GRAPHICS (stale item id) | The HTML display `CIENG_Tank` showed **0** in its number field on `CI-Eng-Sample.TANK1.LEVEL` (live value 50) and the popup `ITM-E-NO_MAIN, No main item found`, in a fresh session after a CI Server restart. The display XML stores `<itemName>` **and** `<itemId>1.1.268.0.0.1.1.7</itemId>` from when it was built; after today's sample reloads the item has `ID_NUMBER` 357. Phase 10 had seen live values after a reload, so the id is not always used, but here it broke the field. | closed | Fixed in the sample: removed the `<itemId>` line from `displays/CIENG_Tank.xml`, redeployed; the field shows 50 and the popup is gone (binding by name). Documented in `create-display.md`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `examples/CI-Eng-Sample/displays/CIENG_Tank.xml`; `.claude/skills/graphics/tasks/create-display.md`; `.claude/skills/graphics/tasks/deploy-displays.md` |
| ISS-053 | 2026-10-01 | HAC (manual vs installed) | IM 36K10J20 vs the installed `hac.sup`/scripts: (1) *Start in manual mode*: §1.3 says HAC starts in manual by default, §1.5 and the `hac.sup` help say automatic; the installed template sets `START_MANUAL = YES`. (2) `MAXOPNDB` default: help 500, manual 50 (§1.5) and 5 (§4.8). (3) `QUESIZE` default: help 100 K, manual 2000 K (file sets 2000). (4) §4.5 says `tls\com` and `tls\exe` cannot be mirrored, but the template mirrors `12 COM` (excluding `ci_command.cmd`). (5) §4.4 says the critical processes are already in the queue/CPU check lists; the installed file has no `MAX_QUEUE`/`MAX_CPU`/`INACTIVE` lines. (6) `hacw_standby` uses `TLS_LST_PATH` when `TLS_BACKUP_PATH` is unset (manual: `TLS_ALLUSERS_PATH`). (7) The template `IP_DEVICE` is `localhost` (priority 0), which §1.3 says to remove after testing. (8) HMI properties have `communicationInterval`/`Timeout`/`RetryCount`, not in the manual. | closed | Installed software is the reference (standing user decision); documented in the J20 summary §5 and the `high-availability` skill. Not testable on one server. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J20-01EN.md`; `.claude/skills/high-availability/tasks/*.md` | | ISS-053 | 2026-10-01 | HAC (manual vs installed) | IM 36K10J20 vs the installed `hac.sup`/scripts: (1) *Start in manual mode*: §1.3 says HAC starts in manual by default, §1.5 and the `hac.sup` help say automatic; the installed template sets `START_MANUAL = YES`. (2) `MAXOPNDB` default: help 500, manual 50 (§1.5) and 5 (§4.8). (3) `QUESIZE` default: help 100 K, manual 2000 K (file sets 2000). (4) §4.5 says `tls\com` and `tls\exe` cannot be mirrored, but the template mirrors `12 COM` (excluding `ci_command.cmd`). (5) §4.4 says the critical processes are already in the queue/CPU check lists; the installed file has no `MAX_QUEUE`/`MAX_CPU`/`INACTIVE` lines. (6) `hacw_standby` uses `TLS_LST_PATH` when `TLS_BACKUP_PATH` is unset (manual: `TLS_ALLUSERS_PATH`). (7) The template `IP_DEVICE` is `localhost` (priority 0), which §1.3 says to remove after testing. (8) HMI properties have `communicationInterval`/`Timeout`/`RetryCount`, not in the manual. | closed | Installed software is the reference (standing user decision); documented in the J20 summary §5 and the `high-availability` skill. Not testable on one server. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J20-01EN.md`; `.claude/skills/high-availability/tasks/*.md` |
| ISS-054 | 2026-10-01 | AD (manual vs installed) | IM 36K10J40 vs the installed `dssana.sup`: the *Active Directory* tab has keywords the manual does not describe — `AD_SERVER`, `AD_SERVER_BACKUP` (host[:port], 389/636), `AD_SECURE` (LDAPS; installed `NO`, help says default yes), `AD_ACCESS_USER`/`AD_ACCESS_PASSWORD` (blank = the CI Server service account). The manual's *Profile priority* is `USER_DF.MERGE_PRIORITY`; *Directory group* is `DIRECTORY_GROUP` (68 characters). The SSO keytab path is given as `%TLS_WAP_PATH%\webapps\auth\WEB-INF` (§2.5.1) and `%TLS_ALLUSERS_PATH%\wap\webapps\auth\WEB-INF` (§3.4.3) — the same folder on the test system. | closed | Installed software is the reference; documented in the J40 summary §5 and `authorization/tasks/active-directory.md`. Not testable without a domain. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J40-01EN.md`; `.claude/skills/authorization/tasks/active-directory.md` | | ISS-054 | 2026-10-01 | AD (manual vs installed) | IM 36K10J40 vs the installed `dssana.sup`: the *Active Directory* tab has keywords the manual does not describe — `AD_SERVER`, `AD_SERVER_BACKUP` (host[:port], 389/636), `AD_SECURE` (LDAPS; installed `NO`, help says default yes), `AD_ACCESS_USER`/`AD_ACCESS_PASSWORD` (blank = the CI Server service account). The manual's *Profile priority* is `USER_DF.MERGE_PRIORITY`; *Directory group* is `DIRECTORY_GROUP` (68 characters). The SSO keytab path is given as `%TLS_WAP_PATH%\webapps\auth\WEB-INF` (§2.5.1) and `%TLS_ALLUSERS_PATH%\wap\webapps\auth\WEB-INF` (§3.4.3) — the same folder on the test system. | closed | Installed software is the reference; documented in the J40 summary §5 and `authorization/tasks/active-directory.md`. Not testable without a domain. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J40-01EN.md`; `.claude/skills/authorization/tasks/active-directory.md` |
| ISS-055 | 2026-10-02 | GRAPHICS (Micro Trend) | A Micro Trend written into `CIENG_TrendLab` (`itemName[0..1]` = `TANK1.LEVEL`/`INFLOW`, `numberOfPens` 2, `realTime`, `fillWithHistory`) drew both pens on the desktop and in the browser the first time (about 13:33), then stayed **blank** on every later open on both clients: with and without the 48 spare trend pens, and with explicit `timeRange` 600 / `sampleCount` 60. No console error; CI Server running. Code: `MicroTrend.js` only starts when all properties are set (`startTrendIfAllPropertiesAreSet`; it also compares `scaleMax[i]` with `scaleMin[1]`). | open | Still to try: build the Micro Trend in the Edit Module (compare the XML), connect `itemName[n]` instead of a fixed value (as in factory/test displays), a display with only the Micro Trend, a CI Server restart. | `.claude/skills/graphics/tasks/trend.md` §6; `examples/CI-Eng-Sample/displays/CIENG_TrendLab.xml` | | ISS-055 | 2026-10-02 | GRAPHICS (Micro Trend) | A Micro Trend written into `CIENG_TrendLab` (`itemName[0..1]` = `TANK1.LEVEL`/`INFLOW`, `numberOfPens` 2, `realTime`, `fillWithHistory`) drew both pens on the desktop and in the browser the first time (about 13:33), then stayed **blank** on every later open on both clients: with and without the 48 spare trend pens, and with explicit `timeRange` 600 / `sampleCount` 60. No console error; CI Server running. Code: `MicroTrend.js` only starts when all properties are set (`startTrendIfAllPropertiesAreSet`; it also compares `scaleMax[i]` with `scaleMin[1]`). | open | Later 2026-10-02 the clean sample file (no explicit `timeRange`/`sampleCount`, 48 spare trend pens) drew both pens on the desktop and in the browser after a fresh login; after a *View > Reload* in the browser only LEVEL showed fully, INFLOW only a short piece: the behaviour is intermittent. Still to try: build the Micro Trend in the Edit Module (compare the XML), connect `itemName[n]` instead of a fixed value (as in factory/test displays), a display with only the Micro Trend, a CI Server restart. | `.claude/skills/graphics/tasks/trend.md` §6; `examples/CI-Eng-Sample/displays/CIENG_TrendLab.xml` |
| ISS-056 | 2026-10-02 | GRAPHICS (trend, manual vs installed) | (1) IM 36K10C50 Table 2.27-28 lists *Appearance - Show in Legend* as supported in the HTML display, but the web legend listed pens with `visibleLegend` false (the desktop hides them). (2) The legend position (`PositionSouthWest`) was not applied in the browser (not supported per the table). (3) The manual says a trend has up to 20 pens; the component property sheet has 20 slots, but the web code reserves 50 and `maximumPens` 50 works on the desktop. (4) Desktop: pen `title`/`titlePlacement`, pen limit values `lowLimit`… and chart `backgroundPaint` had no visible effect; time-axis minor ticks/grid showed nothing at a 10-minute range. | open | Documented in `trend.md`; installed software is the reference. Close when the user confirms. | `.claude/skills/graphics/tasks/trend.md` | | ISS-056 | 2026-10-02 | GRAPHICS (trend, manual vs installed) | (1) IM 36K10C50 Table 2.27-28 lists *Appearance - Show in Legend* as supported in the HTML display, but the web legend listed pens with `visibleLegend` false (the desktop hides them). (2) The legend position (`PositionSouthWest`) was not applied in the browser (not supported per the table). (3) The manual says a trend has up to 20 pens; the component property sheet has 20 slots, but the web code reserves 50 and `maximumPens` 50 works on the desktop. (4) Desktop: pen `title`/`titlePlacement`, pen limit values `lowLimit`… and chart `backgroundPaint` had no visible effect; time-axis minor ticks/grid showed nothing at a 10-minute range. | open | Documented in `trend.md`; installed software is the reference. Close when the user confirms. | `.claude/skills/graphics/tasks/trend.md` |