Knowledge: sample operator HMI findings (layouts, display XML, users), ISS-068..075

- layouts.md: tab set must be the last child of its frame set (web); desktop tab frames ignore
  zoom (navigate ... stretchDisplay); web activates the last tab loaded; web tab labels = display
  title; one layout command at a time; connectionState breaks the web layout (corrects 6.3);
  per-user layout verified on desktop and web
- create-display.md: new section "Writing display XML directly" (text size, rounding, arc angles
  clockwise on both clients, Clicked b1, web item attributes, asDateTime, server-side command as
  CIX_PROCESS with group OPERATOR, alarm overview columns / white area)
- deploy-displays.md: 8-display sample scripts; jwuiutl -v re-saves files
- trend.md: CIENG_TrendLab as history, cieng_feed.ps1, 50-pen hairline trade-off, component
  opaque, micro trend "Record not found" without history
- users-groups.md: PASSWORD "" for an empty password; sample user CIENG; open session blocks
  group removal (DSSSDA03 stopped)
- configure-audit.md, L25 / R30 / C50 summaries, SKILL.md, issues ISS-068..075, progress rows
- Every statement tested on CI Server R1.03.00 2026-10-02..06 (desktop and web, test display and
  test layouts removed afterwards)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Clio Liu 2026-10-06 11:25:41 +11:00
parent 266e9e3710
commit ecf1f226f2
12 changed files with 145 additions and 49 deletions

View file

@ -35,7 +35,8 @@ switching anything off.
`ITEM_DF` / `SUB_ITEM_DF` / `EXTERNAL_ALARM_DF` field `AUDIT_INFO` (default 0). It switches the `ITEM_DF` / `SUB_ITEM_DF` / `EXTERNAL_ALARM_DF` field `AUDIT_INFO` (default 0). It switches the
`ITEM.*` / `SUB-ITEM.*` events raised by ITEM Service for **operator writes**. Verified on `ITEM.*` / `SUB-ITEM.*` events raised by ITEM Service for **operator writes**. Verified on
`CI-Eng-Sample.PUMP1.MODE` with the buttons on display `CIENG_Tank`: `CI-Eng-Sample.PUMP1.MODE` with the buttons on display `CIENG_Tank` (2026-10-01; re-checked
2026-10-06 with *Manual* / *Auto* on `CIENG_Control`: same events, user and old / new value):
- `AUDIT_INFO` 1: a button write 0 → 1 stored `ITEM` `VALUE` `MODIFY` `OPER-INTERFACE`, user - `AUDIT_INFO` 1: a button write 0 → 1 stored `ITEM` `VALUE` `MODIFY` `OPER-INTERFACE`, user
`ADMIN`, old 0 / new 1, plus `ITEM` `STATUS` `MODIFY` (13 → 9). `ADMIN`, old 0 / new 1, plus `ITEM` `STATUS` `MODIFY` (13 → 9).
- `AUDIT_INFO` 0: the write 1 → 0 left **no** audit record. - `AUDIT_INFO` 0: the write 1 → 0 left **no** audit record.

View file

@ -41,8 +41,11 @@ NAME,DESCRIPTION,ACTION_NAME_1,ACTION_NAME_2,ACTION_NAME_3,ACTION_NAME_4
Required: `NAME` (≤ 32) and `AUTH_GROUP` (an existing group). Optional: `DESCRIPTION`, Required: `NAME` (≤ 32) and `AUTH_GROUP` (an existing group). Optional: `DESCRIPTION`,
`PROCESS_AREAS` (e.g. `"1-999"`), `LOGOFF_TIMEOUT` (minutes, 0–999), `INITIAL_DISPLAY`, `PROCESS_AREAS` (e.g. `"1-999"`), `LOGOFF_TIMEOUT` (minutes, 0–999), `INITIAL_DISPLAY`,
`LOCALE`, `ENTERPRISE`, playback fields. A password is **not** required on import; set it in `LOCALE`, `ENTERPRISE`, `LAYOUT`, playback fields. Password: without a `PASSWORD` field the user
the Engineering Module (the user does this, not Claude). Template: is created **without any password set** and every logon fails with *DSS-E-UNK_USER Unknown user
name/password combination*; set the password in the Engineering Module (the user does this, not
Claude). A user with an **empty** password is created by giving `PASSWORD ""` explicitly
(tested 2026-10-06, sample user `CIENG`: logon on desktop and web). Template:
``` ```
@FIELDS @FIELDS
@ -81,6 +84,20 @@ NAME
## Test system (2026-09-30) ## Test system (2026-09-30)
Group `CIENG_VIEWER` and user `CIENG_TEST` (no password, logoff 15 min) loaded with 0 errors, Group `CIENG_VIEWER` and user `CIENG_TEST` (no `PASSWORD` field, logoff 15 min) loaded with 0
exported back as defined, then removed (1 + 1 removed, 0 errors). The group is part of errors, exported back as defined, then removed (1 + 1 removed, 0 errors). Logon was not tried;
CI-Eng-Sample; the sample creates no users. such a user cannot log on (see *User*). The group is part of CI-Eng-Sample.
## Sample user (2026-10-06)
`examples/CI-Eng-Sample/08b_user_df.qli`: user `CIENG`, `PASSWORD ""`, factory group `OPERATOR`,
`LAYOUT` `CIENG_Operator`, `INITIAL_DISPLAY` `CIENG_Overview`; logs on to that layout on the desktop
and on the web (no `?l=` needed). Removal (`85_remove_auth_group_df.qli`) removes the user before
the group.
**Log out all sessions of a user before removing its group**: while a session is open the group
is still referenced in `USER_VAL` and `dssqld -r` fails with *DSSP-E-NODEL … in dataset
USER_VAL*; logging out did not free it at once, and a retry in that state stopped the process
`DSSSDA03` (*DUR-F-BAD_SIZE, Negative size not allowed*; later requests failed with
*DUR-F-UNKNOWN_ATT*) until CI Server was restarted (2026-10-06, ISS-073). After a restart the
group was removed without error. `USER_VAL` exports only its header (no way to list sessions).

View file

@ -38,10 +38,11 @@ Rules:
| Task | File | Status | | Task | File | Status |
|---|---|---| |---|---|---|
| Build a display in the Edit Module (text, number field, alarm overview, trend) and check the saved XML | `tasks/create-display.md` | verified | | Build a display in the Edit Module (text, number field, alarm overview, trend) and check the saved XML | `tasks/create-display.md` | verified |
| Write display XML directly / with the sample generator (text size, rounding, arc angles, item attributes for the web, server-side command, alarm overview columns) | `tasks/create-display.md` (*Writing display XML directly*), `examples/CI-Eng-Sample/displays/generator/` | verified 2026-10-06 |
| Deploy / remove display files, export HTML, validate and search with `jwuiutl` | `tasks/deploy-displays.md` | verified | | Deploy / remove display files, export HTML, validate and search with `jwuiutl` | `tasks/deploy-displays.md` | verified |
| Trend: pen sources (history group, aggregates), every pen and chart setting, desktop vs HTML display, 50-pen web workaround (`add_trend_spares.ps1`), Micro Trend | `tasks/trend.md` | verified (desktop); web workaround verified; Micro Trend open (ISS-055) | | Trend: pen sources (history group, aggregates), every pen and chart setting, desktop vs HTML display, 50-pen web workaround (`add_trend_spares.ps1`), Micro Trend | `tasks/trend.md` | verified (desktop); web workaround verified; Micro Trend open (ISS-055) |
| Open and check a display in the browser (HTML display / Mobile Operator) | `tasks/deploy-displays.md` §4 | verified | | Open and check a display in the browser (HTML display / Mobile Operator) | `tasks/deploy-displays.md` §4 | verified |
| Operator layouts (`Layouts.xml`): windows, menus, toolbars, frames, popups, kiosk screens; open displays in frames and layouts; every parameter and command, desktop vs web (§6) | `tasks/layouts.md` | verified (dual screen, per-user layout from docs) | | Operator layouts (`Layouts.xml`): windows, menus, toolbars, frames, popups, kiosk screens; open displays in frames and layouts; every parameter and command, desktop vs web (§6) | `tasks/layouts.md` | verified (per-user layout 2026-10-06; dual screen from docs) |
| Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | from docs | | Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | from docs |
| Symbols, parameters, actions, localisation, record/playback | C50 summary §1, §4, §5 | from docs | | Symbols, parameters, actions, localisation, record/playback | C50 summary §1, §4, §5 | from docs |
| AOG library (styles, symbols, faceplates, templates) | C60 summary | from docs | | AOG library (styles, symbols, faceplates, templates) | C60 summary | from docs |

View file

@ -1,14 +1,15 @@
--- ---
task: Build a display in the Edit Module and check the saved file task: Build a display in the Edit Module and check the saved file
version: R1.03 version: R1.03
source: IM 36K10C50-01EN §1.2, §1.7, §2, §4.8.1; practiced on CI-Eng-Sample (display CIENG_Tank) 2026-10-01 source: IM 36K10C50-01EN §1.2, §1.7, §2, §4.8.1; practiced on CI-Eng-Sample (display CIENG_Tank) 2026-10-01; display XML written by the sample generator and checked on desktop and web 2026-10-02 to 2026-10-06 (installed web client code, component definitions in DEPLOY\components)
status: verified status: verified
--- ---
# Build a display (Edit Module) # Build a display (Edit Module)
The user draws; Claude gives the steps and checks the result. Example = the sample display The user draws; Claude gives the steps and checks the result. The sample displays
`examples/CI-Eng-Sample/displays/CIENG_Tank.xml`. `examples/CI-Eng-Sample/displays/CIENG_*.xml` are not drawn but written by a generator
(`displays/generator/`); *Writing display XML directly* lists the rules they follow.
## Steps for the user ## Steps for the user
@ -38,8 +39,8 @@ grep -n "<html>\|<width>\|<height>\|itemName\|itemId\|<source" <DisplayName>.xml
- `<html>true</html>` = HTML mode; `<width>`/`<height>` must be set for the HTML display. - `<html>true</html>` = HTML mode; `<width>`/`<height>` must be set for the HTML display.
- Item connections: `<itemName>` + `<itemId>` (node.group.number…); trend pens: - Item connections: `<itemName>` + `<itemId>` (node.group.number…); trend pens:
`<source type="sourceID" uri="ci:/item/<item>"/>` (`uri=""` = empty pen). `<source type="sourceID" uri="ci:/item/<item>"/>` (`uri=""` = empty pen).
- Write a fixed value with a button (verified in the HTML display, `CIENG_Tank` *Manual (0)* / - Write a fixed value with a button (verified in the HTML display, buttons *Manual* / *Auto* on
*Auto (1)*): `<button>` › `<data>` › `<action type="actionSetItemAttribute">` with the former `CIENG_Tank` and, since 2026-10-06, on `CIENG_Control`): `<button>` › `<data>` › `<action type="actionSetItemAttribute">` with
`<event type="event" event="On action"/>`, `<filter type="filter"><value>1.0</value></filter>` `<event type="event" event="On action"/>`, `<filter type="filter"><value>1.0</value></filter>`
and a `<connection>` with `<direction>2</direction>`, `<itemName>`, `<itemAttribute>ItemValue` and a `<connection>` with `<direction>2</direction>`, `<itemName>`, `<itemAttribute>ItemValue`
(the factory popups use `ItemValueOW`, presumably the overwrite variant like `itmval -o`; not tested). The factory popup `AOG_SetNumberPV` uses the (the factory popups use `ItemValueOW`, presumably the overwrite variant like `itmval -o`; not tested). The factory popup `AOG_SetNumberPV` uses the
@ -51,6 +52,25 @@ grep -n "<html>\|<width>\|<height>\|itemName\|itemId\|<source" <DisplayName>.xml
Sample displays therefore carry no `<itemId>`; for displays made in the Edit Module, reconnect Sample displays therefore carry no `<itemId>`; for displays made in the Edit Module, reconnect
or remove the ids after reloading items (ISS-052). or remove the ids after reloading items (ISS-052).
## Writing display XML directly (verified 2026-10-02 to 2026-10-06)
The Edit Module stores one element per component (`<text>`, `<number>`, `<rectangle>`, `<arc>`,
`<button>`, `<slider>` …, names as in `DEPLOY\components\*.xml`), its position as centre plus half
sizes, and the connections in `<data>`. Files written by hand or by a script load in the Edit
Module, the Operator Interface and the HTML display, if these rules are kept (sample generator:
`examples/CI-Eng-Sample/displays/generator/`):
| Topic | Rule (R1.03.00) |
|---|---|
| Text / number size | With `<keepOriginalSize>false` the HTML export **scales the text to its box** (e.g. `scale(0.98, 3.80)` in a 40 px box); with `true` it is drawn at its font size, centred on the box (tested 2026-10-06) |
| Rectangle rounding | `roundingX` / `roundingY` are a **fraction 0..1** of the half width / height; values above 1 draw an ellipse, on the desktop and on the web (tested 2026-10-06) |
| Arc angles | `startAngle` / `extentAngle` in degrees **clockwise** from 3 o'clock (screen y down), negative values allowed; the same on both clients, fixed or connected (tested 2026-10-06: 0/90 = lower-right quarter) |
| Click on a shape | event `Clicked b1` (buttons: `On action`), e.g. an *Open display* action on a rectangle (2026-10-02) |
| Item attributes for the web | `ItemValue`, `ItemDesc`, `ItemStatusMnemonic`, `ItemUpdTime` (epoch seconds), `ItemHHL` / `ItemHL` / `ItemLL` / `ItemLLL` (limits), `ItemName` (micro trend pens), list in the web client code; `ItemDescription` does not exist (sample faceplate and Control tab, 2026-10-06) |
| Showing a time | number field with `<asDateTime>true` connected to `ItemUpdTime`; a `dateTimeField` shows the value on the web only when editable (2026-10-02/06) |
| Server-side command | `<action type="actionExecuteCommand">` with `<command>` and `<onServer>true</onServer>` runs on the CI Server node as the service account `CIX_PROCESS`, also from the web; a user in the factory group `OPERATOR` may use it (tested 2026-10-06, sample live-data *Start*) |
| Alarm overview | `autoFit` true in a tab that is hidden while loading squeezes all columns to ~0 px on the web: set `autoFit` false and give `column<Name>Width`; `column…Visible` for `AlarmAttribute` is an array property (a plain value fails the HTML export with `ClassCastException`); the empty part of the list stays **white** on both clients (no property; web: `jquery.dataTables.css` forces it); web rows are 20 px at a 14 px font (2026-10-02/06) |
## Verified (CIENG_Tank, 2026-10-01) ## Verified (CIENG_Tank, 2026-10-01)
Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), alarm overview Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), alarm overview
@ -58,4 +78,6 @@ Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), al
`CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` = highest-priority storage group). In the HTML `CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` = highest-priority storage group). In the HTML
display the trend drew no line: a trend needs 50 visible pens to draw on the web (ISS-041; display the trend drew no line: a trend needs 50 visible pens to draw on the web (ISS-041;
workaround and all trend settings in `trend.md`). The sample file is now padded with workaround and all trend settings in `trend.md`). The sample file is now padded with
`add_trend_spares.ps1` (49 spares) and draws in the browser too. `add_trend_spares.ps1` (49 spares) and draws in the browser too. `CIENG_Tank` was replaced by the
generated `CIENG_*` displays on 2026-10-06; they carry no `<itemId>` and found the recreated items
after a full `remove.cmd` / `load.cmd` cycle in a fresh session (2026-10-06).

View file

@ -1,7 +1,7 @@
--- ---
task: Deploy, remove, export, validate and search displays; open them in the browser task: Deploy, remove, export, validate and search displays; open them in the browser
version: R1.03 version: R1.03
source: IM 36K10C50-01EN §1.5; IM 36K10R30-01EN §1.1, §4; practiced on CI-Eng-Sample 2026-10-01 source: IM 36K10C50-01EN §1.5; IM 36K10R30-01EN §1.1, §4; practiced on CI-Eng-Sample 2026-10-01; sample operator HMI (8 displays) and validate test 2026-10-06
status: verified status: verified
--- ---
@ -12,17 +12,19 @@ No admin rights needed (`C:\Users\Public\Yokogawa\tls\wap`). `jwuiutl.cmd` is in
## 1. Deploy / remove (sample scripts) ## 1. Deploy / remove (sample scripts)
`examples/CI-Eng-Sample/displays/deploy_displays.cmd`: copies `CIENG_Tank.xml` to `examples/CI-Eng-Sample/displays/deploy_displays.cmd`: copies the 8 sample displays
(`CIENG_Header`, `CIENG_Overview`, … `CIENG_TankFaceplate`) to
`%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\displays\` and runs `%TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\displays\` and runs
`jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank` (HTML into `jwuiutl.cmd -e HTML -i -f DEPLOY <name>` for each (HTML into
`%TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY\displays\`). `%TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY\displays\`).
`remove_displays.cmd` deletes both files (close the display in the Edit Module first). `remove_displays.cmd` deletes both files of each (close the displays in the Edit Module first).
Deploy after `load.cmd` so the items exist. Deploy after `load.cmd` so the items exist. Verified 2026-10-06: remove → 0 sample files left,
deploy → exactly the 8 XML + 8 HTML files.
For another display: copy `<name>.xml` into `DEPLOY\displays` and export it the same way. For another display: copy `<name>.xml` into `DEPLOY\displays` and export it the same way.
Displays with symbols also need the symbol files in `DEPLOY\symbols`. Displays with symbols also need the symbol files in `DEPLOY\symbols`.
## 2. Validate (report only) ## 2. Validate (re-saves the validated files)
``` ```
cmd /c "jwuiutl.cmd -d -v -i -l <scratch>\validate.txt" cmd /c "jwuiutl.cmd -d -v -i -l <scratch>\validate.txt"
@ -33,6 +35,13 @@ display <name>:` with `Problem: <component>: Connected item is not found (<item>
`*** Display locked <name>` (open in the Edit Module or a stale `.lck`; `-u` unlocks — with `*** Display locked <name>` (open in the Edit Module or a stale `.lck`; `-u` unlocks — with
approval), displays saved by a newer version. `-vf` re-saves all displays — only with approval. approval), displays saved by a newer version. `-vf` re-saves all displays — only with approval.
**`-v` also re-saves** (tested 2026-10-06: `jwuiutl -d -v -i -l … CIENG_Test` reported *No problems
found* and rewrote the file, 9 618 → 11 191 bytes: default values dropped, positions moved into
attributes - same content). Run it on copies, or redeploy the source files afterwards. On
2026-10-02 a validation of eight displays once hung on one of them and left `<name>.lck` and
`<name>.xml.tmp` (stop the `java` process, delete both files); not reproduced on 2026-10-06
(ISS-075).
## 3. Search ## 3. Search
``` ```

View file

@ -1,7 +1,7 @@
--- ---
task: Configure operator layouts (Layouts.xml): windows, menus, toolbars, frames, popups; open displays in frames and layouts task: Configure operator layouts (Layouts.xml): windows, menus, toolbars, frames, popups; open displays in frames and layouts
version: R1.03 version: R1.03
source: Layouts.readme (installed, %TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\layouts); IM 36K10R30-01EN §1, §4.7; IM 36K10C50-01EN §4.12; practiced with CI-Eng-Sample (layout CIENG_Operator) in the Operator Interface (desktop) and the HTML display 2026-10-01; parameter-by-parameter test (§6) on both clients 2026-10-02, web behaviour also read from the installed web client code (mobileoperator fasttools.min.js) source: Layouts.readme (installed, %TLS_WAP_PATH%\cfg\operatorInterfaces\DEPLOY\layouts); IM 36K10R30-01EN §1, §4.7; IM 36K10C50-01EN §4.12; practiced with CI-Eng-Sample (layout CIENG_Operator) in the Operator Interface (desktop) and the HTML display 2026-10-01; parameter-by-parameter test (§6) on both clients 2026-10-02, web behaviour also read from the installed web client code (mobileoperator fasttools.min.js); sample operator HMI (layouts CIENG_Operator with a tab set and CIENG_Popup, user CIENG) and test layouts on both clients 2026-10-06
status: verified (parameters tested on desktop and web 2026-10-02 except print orientation/margins, playback, multi-screen positions and the maximumTabs limit for new tabs) status: verified (parameters tested on desktop and web 2026-10-02 except print orientation/margins, playback, multi-screen positions and the maximumTabs limit for new tabs)
--- ---
@ -27,7 +27,8 @@ reference is `Layouts.readme` in the same folder; `Layouts-original.xml` is the
toolbar commands) open their targets in a frame called `default`. At login the user profile's toolbar commands) open their targets in a frame called `default`. At login the user profile's
*Initial display* replaces the `initialDisplay` of frame `default` (desktop; web: `?d=`). *Initial display* replaces the `initialDisplay` of frame `default` (desktop; web: `?d=`).
- Layouts used by **both** clients must have the web-compatible shape (§6.1): per frame set at - Layouts used by **both** clients must have the web-compatible shape (§6.1): per frame set at
most one `n*` division, and at most one nested frame set, placed in that `n*` slot. Always most one `n*` division, and at most one nested frame set, placed in that `n*` slot. A `<tab>`
set must be the **last** child of its frame set (§6.6). Always
set `title` and `drawBorder`. set `title` and `drawBorder`.
- Menu items whose command has an on/off state (`toolbar`, `statusline`, `playback record`) - Menu items whose command has an on/off state (`toolbar`, `statusline`, `playback record`)
**must** be `type="check"`: otherwise the Operator Interface fails at start **must** be `type="check"`: otherwise the Operator Interface fails at start
@ -89,11 +90,11 @@ reference is `Layouts.readme` in the same folder; `Layouts-original.xml` is the
|---|---| |---|---|
| Button / component (Edit Module, *Actions* sheet → *Open display*) | Display, **Layout** (empty = current window), **Frame**, parameters; stored as `<action type="actionActivateDisplay">` with `<type … value="ActivateSpecific"/>`, `<display>`, `<layout>`, `<layoutFrame>` | | Button / component (Edit Module, *Actions* sheet → *Open display*) | Display, **Layout** (empty = current window), **Frame**, parameters; stored as `<action type="actionActivateDisplay">` with `<type … value="ActivateSpecific"/>`, `<display>`, `<layout>`, `<layoutFrame>` |
| Menu / toolbar | `navigate to <frame> <display>` (current window only) | | Menu / toolbar | `navigate to <frame> <display>` (current window only) |
| Login | User profile *Layout* and *Initial display* (Engineering Module, Authorization > Users); empty layout = `default` (from docs; not changed on the test system) | | Login | User profile *Layout* and *Initial display* (Engineering Module, Authorization > Users, or `USER_DF` `LAYOUT` / `INITIAL_DISPLAY`); empty layout = `default`. Verified 2026-10-06 with the sample user `CIENG` (layout `CIENG_Operator`, display `CIENG_Overview`): applied on the desktop **and** at web logon without `?l=` |
| HTML display | URL `?d=<display>&l=<layout>` | | HTML display | URL `?d=<display>&l=<layout>` |
| Script on a component | *Execute command* with `ACTION <layout command>`, e.g. `ACTION toggleSize 50,50,710x520` | | Script on a component | *Execute command* (client side) with `ACTION <layout command>`, e.g. `ACTION toggleSize 50,50,710x520`. Desktop only: the web client ignores it (2026-10-02). **One command at a time**: a second `ACTION` while the first runs fails with *IllegalStateException: A command is already being executed* (desktop, tested 2026-10-06 with two `ACTION reload all` on one button) |
Verified behaviour (desktop): a button with layout `CIENG_Operator` opened a **second window** Verified behaviour (desktop, 2026-10-01, with the former sample layout `CIENG_Operator`): a button with that layout opened a **second window**
(1600 × 900, own menu/toolbar/frames); buttons without layout opened their display in the main (1600 × 900, own menu/toolbar/frames); buttons without layout opened their display in the main
frame of the current window; **Back** returned. A button with layout `popup` opened a separate frame of the current window; **Back** returned. A button with layout `popup` opened a separate
window: always on top, only a close button, sized to the display (`fitFrames`), and minimised window: always on top, only a close button, sized to the display (`fitFrames`), and minimised
@ -119,8 +120,10 @@ setpoint dialogs).
The browser window is the main layout (its size and window options are ignored); other layouts The browser window is the main layout (its size and window options are ignored); other layouts
open as windows inside the page; print, look-and-feel and the debug key are not supported; pick open as windows inside the page; print, look-and-feel and the debug key are not supported; pick
the layout with `&l=`. Verified: `?d=CIENG_Tank&l=CIENG_Operator` showed the sample menu, the layout with `&l=`, or let the user profile choose it (§3). Verified 2026-10-06:
toolbar, navigation frame and banner. `?l=CIENG_Operator` (and a plain logon as `CIENG`) showed the sample menu, navigation toolbar,
header, tab set and banner. The web client does not zoom displays (§6.1), so size them for the
browser window.
## 6. Parameter reference: desktop vs web (tested 2026-10-02) ## 6. Parameter reference: desktop vs web (tested 2026-10-02)
@ -139,7 +142,7 @@ browser and in the web client code. "n/a" = the browser window is the main layou
| `n*` fractions (`2*,1*`) | **not honoured** (sizes follow the displays, e.g. 800:88 px) | every `n*` becomes the *main* panel; two `n*` overwrite each other, only the last display shows | | `n*` fractions (`2*,1*`) | **not honoured** (sizes follow the displays, e.g. 800:88 px) | every `n*` becomes the *main* panel; two `n*` overwrite each other, only the last display shows |
| Divisions per frame set | any | first = top/left, last = bottom/right, `n*` = main; more do not fit | | Divisions per frame set | any | first = top/left, last = bottom/right, `n*` = main; more do not fit |
| Nested `frame-set` | anywhere, several | **always placed in the parent's main panel**; two nested sets, or one in an edge position, break the page (stays on *Loading…*) | | Nested `frame-set` | anywhere, several | **always placed in the parent's main panel**; two nested sets, or one in an edge position, break the page (stays on *Loading…*) |
| Frame `zoom` (`fitDisplay`, `stretchDisplay`, `n%`) | applied | ignored (always 100 %) | | Frame `zoom` (`fitDisplay`, `stretchDisplay`, `n%`) | applied, **except for frames inside a `<tab>`** (shown at 100 %; use `navigate to <frame> <display> fitDisplay|stretchDisplay`, tested 2026-10-06) | ignored (always 100 %) |
| `borderStyle` | drawn | only with `drawBorder="true"`; every value except `none` becomes a 1 px line | | `borderStyle` | drawn | only with `drawBorder="true"`; every value except `none` becomes a 1 px line |
| `stackSize` | honoured | honoured; default when missing = 1 | | `stackSize` | honoured | honoured; default when missing = 1 |
| `zoomingAllowed="false"` | `zoom` commands on that frame do nothing | zoom not supported at all | | `zoomingAllowed="false"` | `zoom` commands on that frame do nothing | zoom not supported at all |
@ -172,7 +175,7 @@ browser and in the web client code. "n/a" = the browser window is the main layou
| Toolbar `left` / `right` | shown | **not shown** | | Toolbar `left` / `right` | shown | **not shown** |
| Toolbar `bottom` | **not shown** (two layouts tried) | not shown | | Toolbar `bottom` | **not shown** (two layouts tried) | not shown |
| Toolbar item `combo`, `editableCombo`, `dropdownList` | shown | shown | | Toolbar item `combo`, `editableCombo`, `dropdownList` | shown | shown |
| Status line, all 8 types | shown | shown | | Status line, all 8 types | shown | 7 shown; **`connectionState` breaks the layout**: at login `createStatusline` fails (*Cannot read properties of undefined (reading 'split')*) and no frame is created (tested 2026-10-06, ISS-068) |
### 6.4 Commands ### 6.4 Commands
@ -221,7 +224,10 @@ Factory pattern (works on both clients): a `<tab name="default">` holding frames
| Parameter | Desktop | Web | | Parameter | Desktop | Web |
|---|---|---| |---|---|---|
| Tab labels | display title (the profile's initial display goes into the first tab) | display name | | Tab labels | display title (the profile's initial display goes into the first tab) | display **title** (`_` until the display is loaded; verified 2026-10-06 with the sample tabs) |
| Frame `zoom` on a tab frame or on `<tab>` | ignored (100 %); `navigate to <tab frame> <display> stretchDisplay` applies it (sample: toolbar, menu and an *On entry* `ACTION` of the banner) | not supported |
| Active tab after login | the profile's initial display tab | the **last** tab whose display loaded; the sample banner (loaded after the tab set) opens `CIENG_Overview` in its tab with an *On entry* action to bring Overview to the front |
| Position of `<tab>` in its frame set | any | must be the **last** child: the tab click handler uses the last panel created in the frame set; tab set first (banner after it): labels stay `_`, *Unable to switch/load requested display*, tab clicks fail, the banner frame is missing (tested 2026-10-06, ISS-069) |
| `tabPosition` `bottom` / `left` | applied | **ignored** (always top) | | `tabPosition` `bottom` / `left` | applied | **ignored** (always top) |
| `navigate to <tab set name> <display>` | replaces the display in the **active** tab; no new tab | — | | `navigate to <tab set name> <display>` | replaces the display in the **active** tab; no new tab | — |
| `navigate to <tab frame name> <display>` | shows it in that tab | — | | `navigate to <tab frame name> <display>` | shows it in that tab | — |
@ -239,3 +245,10 @@ Interface restart required before the layout was found; desktop and web windows
above; F11 (`toggleSize fullScreen`) worked within the taskbar limits; after restarting the above; F11 (`toggleSize fullScreen`) worked within the taskbar limits; after restarting the
Operator Interface the main window still used the factory `default` layout (Admin profile Operator Interface the main window still used the factory `default` layout (Admin profile
unchanged). unchanged).
2026-10-06 (sample operator HMI): `layout.ps1` add / remove / add with `CIENG_Operator` (tab set
in a nested frame set, last child) and `CIENG_Popup`; removal restored `Layouts.xml` byte for
byte. User `CIENG` lands in `CIENG_Operator` on Overview on both clients; ADMIN keeps the
default layout. Test layouts (removed again): tab set first in its frame set (web broken),
`maximumTabs` 8 with 2 tab frames (no extra tab on the web), status line with `connectionState`
(web broken).

View file

@ -1,22 +1,25 @@
--- ---
task: Configure a trend (chart) component; what each setting does on the desktop and in the HTML display task: Configure a trend (chart) component; what each setting does on the desktop and in the HTML display
version: R1.03 version: R1.03
source: IM 36K10C50-01EN §2.27 (Trend, Tables 2.27-10…28), §2.29 (Micro Trend); IM 36K10R30-01EN §4.8.7; installed web client code (`%TLS_WAP_PATH%\mobileoperator\src\fasttools\ui\components\implementation\charts\`); practiced on CI-Eng-Sample (display CIENG_TrendLab) 2026-10-02 source: IM 36K10C50-01EN §2.27 (Trend, Tables 2.27-10…28), §2.29 (Micro Trend); IM 36K10R30-01EN §4.8.7; installed web client code (`%TLS_WAP_PATH%\mobileoperator\src\fasttools\ui\components\implementation\charts\`); practiced on CI-Eng-Sample (display CIENG_TrendLab, removed 2026-10-06) 2026-10-02; sample trends CIENG_Trends / CIENG_TankFaceplate and a test display on both clients 2026-10-06
status: verified (desktop Operator Interface: every row marked ✅/❌ below; HTML display: §6) status: verified (desktop Operator Interface: every row marked ✅/❌ below; HTML display: §6)
--- ---
# Trend settings (desktop and web) # Trend settings (desktop and web)
Example: `examples/CI-Eng-Sample/displays/CIENG_TrendLab.xml` (deployed by The settings below were tested on the sample display `CIENG_TrendLab` (removed from the sample
`deploy_displays.cmd`). Method used: change one XML value in the display, deploy, *View > on 2026-10-06). Method used: change one XML value in the display, deploy, *View > Reload* in the
Reload* in the client, compare. client, compare. Current sample: `CIENG_Trends` (trend with 2 pens and micro trends) and the
micro trends on `CIENG_Overview` and `CIENG_TankFaceplate`.
## 1. Before you start ## 1. Before you start
- **Data**: the trend draws history. `TANK1.LEVEL` / `TANK1.INFLOW` are internal items: after a - **Data**: the trend draws history. `TANK1.LEVEL` / `TANK1.INFLOW` are internal items: after a
CI Server start they are `NOT INIT` (value 0) until something writes them, and the trend then CI Server start they are `NOT INIT` (value 0) until something writes them, and the trend then
shows nothing (or a bold black line at 0 with status drawing). For tests run shows nothing (or a bold black line at 0 with status drawing). For tests run
`displays/trend_feed.ps1` (writes sine waves with `itmval` every 5 s; `-Seconds` = run time). `feed/cieng_feed.ps1` (writes sine waves with `itmval` every 5 s; `-Seconds` = run time,
default 3600; it replaced `displays/trend_feed.ps1` on 2026-10-06), or the sample displays'
live-data button *Start*.
- **Reload**: changes in the display file show after *View > Reload*. A reload within a few - **Reload**: changes in the display file show after *View > Reload*. A reload within a few
seconds of the deploy can still show the old file — reload again. seconds of the deploy can still show the old file — reload again.
- The **Trend properties** dialog (right-click the trend) and the trend toolbar change the trend - The **Trend properties** dialog (right-click the trend) and the trend toolbar change the trend
@ -120,7 +123,13 @@ rotation, zoom. Outputs (⇨): *Hairline value[n]*, *Time range begin/end*, *Upd
in the legend background colour 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: one hidden real pen (49 visible) and nothing draws again (checked). not keep hidden real pens: one hidden real pen (49 visible) and nothing draws again (checked).
Cost: 50 history requests per trend. Cost: 50 history requests per trend. **Desktop side effect**: the hairline box lists every
visible pen, so it shows 50 values (the user found this unusable); `hairlineVisible` false does
not help, as the hairline can still be switched on from the trend toolbar. The sample trend
`CIENG_Trends` therefore keeps its 2 pens and draws no line on the web (2026-10-06).
- Component level (outside `<chartPanel>`): `<opaque>true` with `<backgroundColor>` turned the
frame around the plot **light** on the desktop instead of dark (2026-10-06, reverted);
`backgroundPaint` in the chart panel has no effect (ISS-056).
- **Web check of the settings** (2026-10-02, padded scratch copy of `CIENG_TrendLab`, checked in - **Web check of the settings** (2026-10-02, padded scratch copy of `CIENG_TrendLab`, checked in
the browser; supported-property lists: IM 36K10C50 Table 2.27-28, IM 36K10R30 §4.8.7): the browser; supported-property lists: IM 36K10C50 Table 2.27-28, IM 36K10R30 §4.8.7):
@ -134,6 +143,8 @@ rotation, zoom. Outputs (⇨): *Hairline value[n]*, *Time range begin/end*, *Upd
time, then stayed blank on several later opens (ISS-055). Cause: *Number of pens* resets all time, then stayed blank on several later opens (ISS-055). Cause: *Number of pens* resets all
pen sources, so fixed item names can be lost during load. **Connect** `microTrend.itemName[n]` pen sources, so fixed item names can be lost during load. **Connect** `microTrend.itemName[n]`
to the item with attribute `ItemName` instead (`<action type="actionConnectTo">`, `<direction>1`, to the item with attribute `ItemName` instead (`<action type="actionConnectTo">`, `<direction>1`,
`<itemAttribute>ItemName`; sample `CIENG_TrendLab`): both pens then drew on every open; the `<itemAttribute>ItemName`; samples `CIENG_Overview`, `CIENG_Trends`): both pens then drew on every open; the
history fill still failed at times on the web and on the desktop (only the live part drew; history fill still failed at times on the web and on the desktop (only the live part drew;
ISS-055 open). ISS-055 open). `fillWithHistory` true on an item that is in **no** storage group (e.g.
`SYSTEM.CPU_LOAD`) gives the message *Record not found* when the display opens, on the desktop
and on the web (tested 2026-10-06): set it false for such items.

View file

@ -74,7 +74,7 @@ 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 | 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. **Cause 1 found 2026-10-02**: `setNumberOfPens()` calls `updatePenSource()`, which replaces every pen source with an empty one, so fixed `itemName[n]` values are lost when *Number of pens* is applied after them during load (order varies). Fix in the sample: connect `microTrend.itemName[n]` to the item with attribute `ItemName` (as the factory/test displays do); both pens then drew on 3 of 3 opens. **Remaining**: on 1 of 3 opens only the live part drew (no history fill); every property set calls `startTrend()` again, so history requests are repeated and can cancel each other (web-client code, not fixable in the display). The Operator Interface (desktop) showed the same: both pens live, no history fill on the next open, so the fill problem is not web-only. After a CI Server restart (14:30): web first open of a copy of the display drew both pens with history; the next opens (another copy, and the same display again) showed only the live part; the desktop drew history on one display and only the live part on the custom-range copy. No pattern found yet. Earlier note: 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. **Cause 1 found 2026-10-02**: `setNumberOfPens()` calls `updatePenSource()`, which replaces every pen source with an empty one, so fixed `itemName[n]` values are lost when *Number of pens* is applied after them during load (order varies). Fix in the sample: connect `microTrend.itemName[n]` to the item with attribute `ItemName` (as the factory/test displays do); both pens then drew on 3 of 3 opens. **Remaining**: on 1 of 3 opens only the live part drew (no history fill); every property set calls `startTrend()` again, so history requests are repeated and can cancel each other (web-client code, not fixable in the display). The Operator Interface (desktop) showed the same: both pens live, no history fill on the next open, so the fill problem is not web-only. After a CI Server restart (14:30): web first open of a copy of the display drew both pens with history; the next opens (another copy, and the same display again) showed only the live part; the desktop drew history on one display and only the live part on the custom-range copy. No pattern found yet. Earlier note: 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` (removed 2026-10-06; micro trends now on `CIENG_Overview`, `CIENG_Trends`, `CIENG_TankFaceplate`) |
| 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. | closed | Documented in `trend.md`; installed software is the reference. Close when the user confirms. Closed 2026-10-02 (confirmed by user). | `.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. | closed | Documented in `trend.md`; installed software is the reference. Close when the user confirms. Closed 2026-10-02 (confirmed by user). | `.claude/skills/graphics/tasks/trend.md` |
| ISS-057 | 2026-10-02 | DATA EXPOSURE (filter, manual vs installed) | IM 36K10G10 §10.1 gives the filter example `"NAME" like "ABC*"` (quoted field name). On R1.05 a `DATA_EXPOSURE_DF` record with `RECORDS` = `"NAME" LIKE "<Section>*"` made `DBCSND` log `DSS-E-FLT_SYN_ERR` (+ `DSSF-E-CMP_NO_SUCC`, `DBC-E-DSS_SUB`, `DBC-E-SUB_DAT`, `DBC-E-DAT_HND`) and exit (`DUR-W-REM_PROC`), stopping **all** exposures. Tested on the user's R1.05 system (AID.WRPS items, exposure `WRPS-ITEM-VAL`). | closed | Closed 2026-10-02 (confirmed by user; user decision: installed software is the reference): the unquoted form `NAME LIKE "<Section>*"` compiles and data flows. Tested in R1.05 only. | `.claude/skills/data-access/tasks/rdbms-exposure.md` (done); `knowledge/manuals/IM36K10G10-01EN.md` (done); `knowledge/manuals/IM36K10L45-01EN.md` §8 (done) | | ISS-057 | 2026-10-02 | DATA EXPOSURE (filter, manual vs installed) | IM 36K10G10 §10.1 gives the filter example `"NAME" like "ABC*"` (quoted field name). On R1.05 a `DATA_EXPOSURE_DF` record with `RECORDS` = `"NAME" LIKE "<Section>*"` made `DBCSND` log `DSS-E-FLT_SYN_ERR` (+ `DSSF-E-CMP_NO_SUCC`, `DBC-E-DSS_SUB`, `DBC-E-SUB_DAT`, `DBC-E-DAT_HND`) and exit (`DUR-W-REM_PROC`), stopping **all** exposures. Tested on the user's R1.05 system (AID.WRPS items, exposure `WRPS-ITEM-VAL`). | closed | Closed 2026-10-02 (confirmed by user; user decision: installed software is the reference): the unquoted form `NAME LIKE "<Section>*"` compiles and data flows. Tested in R1.05 only. | `.claude/skills/data-access/tasks/rdbms-exposure.md` (done); `knowledge/manuals/IM36K10G10-01EN.md` (done); `knowledge/manuals/IM36K10L45-01EN.md` §8 (done) |
| ISS-058 | 2026-10-02 | DATA EXPOSURE (ITEM_HISTORY, manual vs installed) | IM 36K10G10 ch. 10 lists `ITEM_HISTORY` as an exposure source (filter required). The installed `dbc.sup` (R1.03 and R1.05, identical) has the change-log line `PCL Aug-19 e12150 Refactor to support MS-SQL/ODBC, remove ITM history support`. An `ITEM_HISTORY` record (all fields, quoted filter, ISS-057) on the user's R1.05 system never created its table; it was disabled and then deleted, so whether ITEM_HISTORY works with a correct filter is **not tested**. | open | Treat ITEM_HISTORY exposure as unsupported and use `ITEM_VALUES` with `AGG_INTERVAL`. To close: on an R1.05 system, create an `ITEM_HISTORY` record with an unquoted filter and check whether `DBCSND` stays up and the table is created. | `.claude/skills/data-access/tasks/rdbms-exposure.md`; `knowledge/manuals/IM36K10G10-01EN.md`; `knowledge/manuals/IM36K10L45-01EN.md` §8 | | ISS-058 | 2026-10-02 | DATA EXPOSURE (ITEM_HISTORY, manual vs installed) | IM 36K10G10 ch. 10 lists `ITEM_HISTORY` as an exposure source (filter required). The installed `dbc.sup` (R1.03 and R1.05, identical) has the change-log line `PCL Aug-19 e12150 Refactor to support MS-SQL/ODBC, remove ITM history support`. An `ITEM_HISTORY` record (all fields, quoted filter, ISS-057) on the user's R1.05 system never created its table; it was disabled and then deleted, so whether ITEM_HISTORY works with a correct filter is **not tested**. | open | Treat ITEM_HISTORY exposure as unsupported and use `ITEM_VALUES` with `AGG_INTERVAL`. To close: on an R1.05 system, create an `ITEM_HISTORY` record with an unquoted filter and check whether `DBCSND` stays up and the table is created. | `.claude/skills/data-access/tasks/rdbms-exposure.md`; `knowledge/manuals/IM36K10G10-01EN.md`; `knowledge/manuals/IM36K10L45-01EN.md` §8 |
@ -87,3 +87,11 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-065 | 2026-10-02 | GRAPHICS (layouts, web) | The web client (HTML display) supports only part of `Layouts.xml`: nested frame sets only in the parent's main (`n*`) slot (other placements hang on *Loading…*), frame `zoom` and navigate zoom ignored, `zoom`/`print`/`login`/`toolbar`/`statusline`/`lookfeel`/`playback` not supported, menu `sub`/`check`/`radio` items and left/right/bottom toolbars not shown, a layout without `title` shows *undefined*. Not described in the readme or IM 36K10R30. | open | Documented in the task (§6, tested and read from the web client code). Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6 (done) | | ISS-065 | 2026-10-02 | GRAPHICS (layouts, web) | The web client (HTML display) supports only part of `Layouts.xml`: nested frame sets only in the parent's main (`n*`) slot (other placements hang on *Loading…*), frame `zoom` and navigate zoom ignored, `zoom`/`print`/`login`/`toolbar`/`statusline`/`lookfeel`/`playback` not supported, menu `sub`/`check`/`radio` items and left/right/bottom toolbars not shown, a layout without `title` shows *undefined*. Not described in the readme or IM 36K10R30. | open | Documented in the task (§6, tested and read from the web client code). Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6 (done) |
| ISS-066 | 2026-10-02 | GRAPHICS (layouts) | Readme options that do not work as described in R1.03: a toolbar with `position="bottom"` is not shown (desktop and web; left/right work on the desktop); `initialPosition="centreFrame"` opens the window at 0,0 on the desktop; translations are used only for the exact locale (no fallback from `en_AU` to `en`). | open | Documented in the task. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6 (done) | | ISS-066 | 2026-10-02 | GRAPHICS (layouts) | Readme options that do not work as described in R1.03: a toolbar with `position="bottom"` is not shown (desktop and web; left/right work on the desktop); `initialPosition="centreFrame"` opens the window at 0,0 on the desktop; translations are used only for the exact locale (no fallback from `en_AU` to `en`). | open | Documented in the task. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6 (done) |
| ISS-067 | 2026-10-02 | GRAPHICS (layouts, tabs) | Readme: `<tab>` provides defaults (`closeTabAllowed`, `stackSize`, …) for its frames, and `maximumTabs`, `minimumTabLabelWidth`, `tabButtonGap`, `tabPosition` control the tabs. Observed: defaults on `<tab>` are not inherited (close buttons only with `closeTabAllowed` on each frame); `maximumTabs` does not limit the initial tabs; label width and gap show no effect on the desktop; the web client ignores `tabPosition` (always top) and hangs when the tab set sits next to the nav frame at the top level (factory shape with a nested frame set works). | open | Documented in the task; use the factory pattern. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6.6 (done) | | ISS-067 | 2026-10-02 | GRAPHICS (layouts, tabs) | Readme: `<tab>` provides defaults (`closeTabAllowed`, `stackSize`, …) for its frames, and `maximumTabs`, `minimumTabLabelWidth`, `tabButtonGap`, `tabPosition` control the tabs. Observed: defaults on `<tab>` are not inherited (close buttons only with `closeTabAllowed` on each frame); `maximumTabs` does not limit the initial tabs; label width and gap show no effect on the desktop; the web client ignores `tabPosition` (always top) and hangs when the tab set sits next to the nav frame at the top level (factory shape with a nested frame set works). | open | Documented in the task; use the factory pattern. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6.6 (done) |
| ISS-068 | 2026-10-06 | GRAPHICS (layouts, web) | `layouts.md` §6.3 (2026-10-02) lists all 8 status line types as shown on the web. A layout whose status line contains `connectionState` (a type listed in `Layouts.readme`) does not start in the HTML display: at login `createStatusline` fails with *Cannot read properties of undefined (reading 'split')* and no frame is created (menu and toolbar only). Seen with the demo layout and reproduced with test layout `LT_ConnState` 2026-10-06. The desktop was not re-tested. | open | Documented in `layouts.md` §6.3 (web: 7 types shown). Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6.3 (done) |
| ISS-069 | 2026-10-06 | GRAPHICS (layouts, tabs, web) | In the HTML display a `<tab>` set works only as the **last** child of its frame set: the tab click handler (`LayoutWindow.js`) uses the last panel created in the frame set. With the tab set first (banner frame after it, test layout `LT_TabFirst` 2026-10-06) the tab labels stay `_`, the console shows *Unable to switch/load requested display* and *Cannot set properties of undefined (setting 'active')*, tab clicks fail and the banner frame is missing. Not in `Layouts.readme` or IM 36K10R30. | open | Rule added (`layouts.md` §1, §6.6); sample `CIENG_Operator` uses the factory shape. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §1, §6.6 (done) |
| ISS-070 | 2026-10-06 | GRAPHICS (layouts, tabs, desktop) | The Operator Interface ignores `zoom` (`fitDisplay`, `stretchDisplay`) on frames inside a `<tab>` and on the `<tab>` element: the displays are shown at 100 % (cropped on a small, unused space on a large monitor; F5 *Reload all* did not change it). The layout command `navigate to <tab frame> <display> fitDisplay|stretchDisplay` does apply the zoom (sample: toolbar, menu and an *On entry* `ACTION` of `CIENG_AlarmBanner`, 2026-10-03/06). A tab opened by clicking the tab strip keeps the zoom it had. | open | Documented in `layouts.md` §6.1 / §6.6. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §6.1, §6.6 (done) |
| ISS-071 | 2026-10-06 | GRAPHICS (layout commands, desktop) | Only one layout command can run at a time: five *Execute command* `ACTION navigate …` actions in one *On entry* gave *IllegalStateException: A command is already being executed* (2026-10-03); reproduced 2026-10-06 with two `ACTION reload all` on one button (test display `CIENG_Test`). Layout commands cannot be chained (`Layouts.readme` has no separator). | open | Documented in `layouts.md` §3. Close when the user confirms. | `.claude/skills/graphics/tasks/layouts.md` §3 (done) |
| ISS-072 | 2026-10-06 | AUTH (users, quick load) | A user loaded with `dssqld` without a `PASSWORD` field (as `users-groups.md` advised: "a password is not required on import") has **no** password set: every logon fails with *DSS-E-UNK_USER Unknown user name/password combination*, also with an empty password; clearing the password in the Engineering Module made it work. With `PASSWORD ""` given explicitly the user logs on with an empty password on the desktop and the web (sample user `CIENG`, 2026-10-06). | closed | Answered by test 2026-10-06; `users-groups.md` corrected, sample `08b_user_df.qli` uses `PASSWORD ""`. Close when the user confirms. | `.claude/skills/authorization/tasks/users-groups.md` (done); `examples/CI-Eng-Sample/08b_user_df.qli` (done) |
| ISS-073 | 2026-10-06 | DSS (remove group / DSSSDA) | Removing an authorization group while a session of one of its users is open fails with *DSSP-E-NODEL … in dataset USER_VAL*; after logging out the session was still referenced, and a retry stopped the process `DSSSDA03` (*DUR-F-BAD_SIZE, Negative size not allowed*; `DUR-W-REM_PROC … exited unexpectedly`); following DSS requests failed with *DUR-F-UNKNOWN_ATT … DSSSDA03* until CI Server was restarted (2026-10-06). After the restart the group was removed without error. `USER_VAL` exports only its header, so open sessions cannot be listed. | open | Workaround: log out the user's sessions and restart CI Server before removing the group; noted in the sample `remove.cmd` / README and `users-groups.md`. Not repeated on purpose (it stops a CI Server process). Report to Yokogawa. | `.claude/skills/authorization/tasks/users-groups.md` (done); `examples/CI-Eng-Sample/remove.cmd`, `README.md` (done) |
| ISS-074 | 2026-10-06 | GRAPHICS (HTML display login) | IM 36K10R30 §4 lists the user profile fields used by the HTML display login as "… initial display, locale (layout not)". On R1.03.00 the profile's *Layout* is used too: a logon as `CIENG` (layout `CIENG_Operator`) at `/mobileoperator/` without `?l=` opened `CIENG_Operator` (2026-10-02 with ADMIN, 2026-10-06 with `CIENG`). | open | Installed software is the reference; R30 summary and `layouts.md` §3 updated. Close when the user confirms. | `knowledge/manuals/IM36K10R30-01EN.md` (done); `.claude/skills/graphics/tasks/layouts.md` §3, §5 (done) |
| ISS-075 | 2026-10-06 | GRAPHICS (`jwuiutl -v`) | `deploy-displays.md` called `jwuiutl -v` "report only", but `jwuiutl -d -v -i -l <log> <display>` re-saves the validated display (normalised XML: defaults dropped, positions as attributes; 9 618 → 11 191 bytes for `CIENG_Test`, 2026-10-06). On 2026-10-02 a validation of eight displays hung on one and left `<name>.lck` and `<name>.xml.tmp`; not reproduced on 2026-10-06. | open | Documented in `deploy-displays.md` §2 and the C50 summary. Close when the user confirms. | `.claude/skills/graphics/tasks/deploy-displays.md` §2 (done); `knowledge/manuals/IM36K10C50-01EN.md` (done) |

View file

@ -3,7 +3,7 @@ manual: IM 36K10C50-01EN
title: Edit Module title: Edit Module
edition: 3rd Edition, Sep. 2023 edition: 3rd Edition, Sep. 2023
version: R1.03 version: R1.03
status: display CIENG_Tank built by the user in the Edit Module (text, number field, alarm overview, trend) and checked as XML and HTML 2026-10-01; jwuiutl search, validate and HTML export verified; trend settings (§2.27) tested one by one on CIENG_TrendLab 2026-10-02 (skill graphics, tasks/trend.md); other components, symbols, actions and the tutorial from docs status: display CIENG_Tank built by the user in the Edit Module (text, number field, alarm overview, trend) and checked as XML and HTML 2026-10-01; jwuiutl search, validate and HTML export verified; trend settings (§2.27) tested one by one on CIENG_TrendLab 2026-10-02 (skill graphics, tasks/trend.md); generated sample displays (CIENG_*, most components: shapes, arc, text, number/text/date-time fields, buttons, toggle, check box, slider, spinner, combo box, data bar, scales, alarm overview, report, micro trend, trend) checked on desktop and web 2026-10-06; symbols, other actions and the tutorial from docs
--- ---
# Edit Module (R1.03) # Edit Module (R1.03)
@ -46,7 +46,9 @@ display. Displays are XML files (`IM36K10R30-01EN.md` §1). Section numbers refe
**Verified on the test system:** `-d -m TANK1` and `-d -v -i -l` ran without errors; locked **Verified on the test system:** `-d -m TANK1` and `-d -v -i -l` ran without errors; locked
displays and displays saved by a newer version are skipped (`*** Display locked <name>`, displays and displays saved by a newer version are skipped (`*** Display locked <name>`,
`… created with a newer version of CI Server (R1.04.0.0)`); `-e HTML -i -f DEPLOY CIENG_Tank` `… created with a newer version of CI Server (R1.04.0.0)`); `-e HTML -i -f DEPLOY CIENG_Tank`
wrote `mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html`. wrote `mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html`. 2026-10-06: `-v` with
a display name also **re-saved** that display (normalised XML, same content; skill `graphics`,
`tasks/deploy-displays.md` §2).
## 3. Components (§2) ## 3. Components (§2)
@ -87,7 +89,7 @@ Symbols* and *Validate all Displays* (with all tabs closed); a symbol can be lin
PROCESS Service class so each instance shows one object; data location (display, operator's PROCESS Service class so each instance shows one object; data location (display, operator's
CI Portal, display's server, enterprise, node). CI Portal, display's server, enterprise, node).
## 6. What the display file stores (verified with CIENG_Tank) ## 6. What the display file stores (verified with CIENG_Tank, removed from the sample 2026-10-06)
- `<coreObjectDefinition type="displayDefinition">` with `<html>true</html>`, `<width>`, - `<coreObjectDefinition type="displayDefinition">` with `<html>true</html>`, `<width>`,
`<height>`, grid, revision history, visibility groups, layers. `<height>`, grid, revision history, visibility groups, layers.
@ -99,6 +101,9 @@ CI Portal, display's server, enterprise, node).
reported *No problems found*, and a newly opened session showed the live value — the name is reported *No problems found*, and a newly opened session showed the live value — the name is
what counts. Sessions that were already open kept the old binding (value frozen) until the what counts. Sessions that were already open kept the old binding (value frozen) until the
display was opened in a new session. display was opened in a new session.
- Rules for writing display XML directly (text size, rounding, arc angles, item attributes for
the web, server-side commands, alarm overview columns): skill `graphics`,
`tasks/create-display.md`, verified 2026-10-06 with the generated `CIENG_*` displays.
## 7. Tutorial (§6) ## 7. Tutorial (§6)

View file

@ -83,7 +83,8 @@ as *dataset* events — `SUBJECT_GROUP` = dataset name (`ITEM_DF`, `ITEM_VAL`, `
`AUDIT_INFO` (*Audit trailing wanted*, default 0; also on `SUB_ITEM_DF`, `EXTERNAL_ALARM_DF`) made `AUDIT_INFO` (*Audit trailing wanted*, default 0; also on `SUB_ITEM_DF`, `EXTERNAL_ALARM_DF`) made
no difference for these tools; it switches the `ITEM.*` events of **operator writes**: a button on no difference for these tools; it switches the `ITEM.*` events of **operator writes**: a button on
display `CIENG_Tank` stored `ITEM.VALUE.MODIFY.OPER-INTERFACE` (old/new, user) with display `CIENG_Tank` stored `ITEM.VALUE.MODIFY.OPER-INTERFACE` (old/new, user) with
`AUDIT_INFO` 1 and nothing with 0 (verified, ISS-049). A changed `STORAGE` flag takes effect only after the notifying process `AUDIT_INFO` 1 and nothing with 0 (verified, ISS-049; the same events from *Manual* / *Auto* on
`CIENG_Control`, 2026-10-06). A changed `STORAGE` flag takes effect only after the notifying process
re-reads it (`ECL_REFRESH`, up to 30 minutes, both directions; verified, ISS-050). re-reads it (`ECL_REFRESH`, up to 30 minutes, both directions; verified, ISS-050).
## 4. Setup files (§4.2) ## 4. Setup files (§4.2)

View file

@ -3,7 +3,7 @@ manual: IM 36K10R30-01EN
title: Graphic Display Setup title: Graphic Display Setup
edition: 3rd Edition, Sep. 2023 edition: 3rd Edition, Sep. 2023
version: R1.03 version: R1.03
status: HTML display (Mobile Operator) and a project layout (CIENG_Operator) verified in the Operator Interface (desktop) and the HTML display 2026-10-01; dataset forms, form language and dual screen from docs status: HTML display (Mobile Operator) and a project layout (CIENG_Operator) verified in the Operator Interface (desktop) and the HTML display 2026-10-01; sample operator HMI with tab set, popup layout and per-user layout verified on both clients 2026-10-06; dataset forms, form language and dual screen from docs
--- ---
# Graphic Display Setup (R1.03) # Graphic Display Setup (R1.03)
@ -38,13 +38,16 @@ empty = `deploy`).
- Menu items (§1.5, e.g. `menu.file.login`, `menu.view.reload`), toolbar (§1.6), status line - Menu items (§1.5, e.g. `menu.file.login`, `menu.view.reload`), toolbar (§1.6), status line
items (§1.7, e.g. graphics queue level), frames and tabs (§1.8), translations (§1.9). items (§1.7, e.g. graphics queue level), frames and tabs (§1.8), translations (§1.9).
- Which layout opens: *In layout* of an *Open display* action (Edit Module), or the user's - Which layout opens: *In layout* of an *Open display* action (Edit Module), or the user's
*Layout* field (Engineering Module, Authorization > Users); empty = `default`. *Layout* field (Engineering Module, Authorization > Users); empty = `default`. Verified
2026-10-06 with the sample user `CIENG` on the desktop and in the HTML display.
- Dual screen (§1.10): copy the layout and the banner display as `<name>_1` / `<name>_2` and let - Dual screen (§1.10): copy the layout and the banner display as `<name>_1` / `<name>_2` and let
each banner open its main display in its own layout. each banner open its main display in its own layout.
- **Verified (2026-10-01)**: sample layout `CIENG_Operator` (skill `graphics`, task `layouts.md`): - **Verified (2026-10-01, former sample layout)**: sample layout `CIENG_Operator` (skill `graphics`, task `layouts.md`):
second window from an *Open display* action, own menu/toolbar/frames, `$default` title, popup second window from an *Open display* action, own menu/toolbar/frames, `$default` title, popup
layout, F11; the Operator Interface reads `Layouts.xml` only at start. The installed layout, F11; the Operator Interface reads `Layouts.xml` only at start. The installed
`Layouts.readme` is the full reference for options and commands. `Layouts.readme` is the full reference for options and commands. Since 2026-10-06
`CIENG_Operator` is the sample operator HMI (header frame, tab set, banner) with the popup
layout `CIENG_Popup`; web and desktop findings for tab sets in `layouts.md` §6.6.
- **Installed layouts**: `mobile`, `default`, `sxga1f/r`, `uxga1f/r`, `wxga1f/r`, `wsxga1f/r`, - **Installed layouts**: `mobile`, `default`, `sxga1f/r`, `uxga1f/r`, `wxga1f/r`, `wsxga1f/r`,
`wsxgap1f/r`, `wuxga1f/r`, `ResizablePopup`, `FixedPopup`, `popup`, `Splash`, `tuningpanel`, `wsxgap1f/r`, `wuxga1f/r`, `ResizablePopup`, `FixedPopup`, `popup`, `Splash`, `tuningpanel`,
`faceplate`, `SelectMode`, `Setpoint`, `mapviewer` (`f` fixed / `r` resizable per screen `faceplate`, `SelectMode`, `Setpoint`, `mapviewer` (`f` fixed / `r` resizable per screen
@ -72,8 +75,10 @@ property files and language codes (§3.5).
*Mobile Operator* on the Remote Connect page. Login with a CI Server user (manual, or SSO via *Mobile Operator* on the Remote Connect page. Login with a CI Server user (manual, or SSO via
`https://<host>:8443/auth/mbl`); user profile fields used: password, authorization group, ASA, `https://<host>:8443/auth/mbl`); user profile fields used: password, authorization group, ASA,
shelving group, process areas, logoff timeout, deployment, initial display, locale (layout shelving group, process areas, logoff timeout, deployment, initial display, locale (layout
not). Login control: `dssana.sup` interface *mobile operator*. not, per this manual). **Installed software**: the profile's *Layout* is used as well - a
- **Verified**: `http://localhost:8080/mobileoperator/?d=CIENG_Tank` showed the operator logon as `CIENG` without `?l=` opened `CIENG_Operator` (2026-10-06, ISS-074). Login control:
`dssana.sup` interface *mobile operator*.
- **Verified (2026-10-01)**: `http://localhost:8080/mobileoperator/?d=CIENG_Tank` showed the operator
frame (menu, navigation buttons, alarm banner, status line) and the display; the number field frame (menu, navigation buttons, alarm banner, status line) and the display; the number field
updated live; the alarm overview listed the sample's alarms. **Reloading the browser page ends updated live; the alarm overview listed the sample's alarms. **Reloading the browser page ends
the session** (login again); use the display's own menu *View > Reload* instead (keeps the the session** (login again); use the display's own menu *View > Reload* instead (keeps the
@ -84,7 +89,7 @@ property files and language codes (§3.5).
no enterprise displays. Components supported (§4.8): alarm overview, display, group, symbol, no enterprise displays. Components supported (§4.8): alarm overview, display, group, symbol,
trend, visibility group/layer, parameters, web browser (with listed properties). trend, visibility group/layer, parameters, web browser (with listed properties).
- Full screen F11, Chrome shortcuts or `chrome.exe --app=http://<host>:<port>`. - Full screen F11, Chrome shortcuts or `chrome.exe --app=http://<host>:<port>`.
- **Test system**: the HTML trend of `CIENG_Tank` drew no line although history existed; browser - **Test system**: the HTML trend of `CIENG_Tank` (removed from the sample 2026-10-06) drew no line although history existed; browser
console `Mismatch between number of labels … and number of columns in array (51)` (ISS-041). console `Mismatch between number of labels … and number of columns in array (51)` (ISS-041).
Cause (2026-10-02): the web trend code always builds 50 data columns, so a trend draws only Cause (2026-10-02): the web trend code always builds 50 data columns, so a trend draws only
with 50 visible pens; workaround `add_trend_spares.ps1`, details and web/desktop differences in with 50 visible pens; workaround `add_trend_spares.ps1`, details and web/desktop differences in

View file

@ -139,6 +139,9 @@ now come before classes and objects (phase 6), and the other interfaces follow a
| C50/R30 | HTML trend: cause of the empty web trend and 50-pen workaround (`add_trend_spares.ps1`); Micro Trend ([task](../.claude/skills/graphics/tasks/trend.md) §6) | passed (workaround) | passed | Web code always builds 50 columns (ISS-041). Padded `CIENG_TrendLab` draws in the browser with a clean legend; web ignores *Show in legend* (ISS-056). Micro Trend drew once, then blank (ISS-055). | | C50/R30 | HTML trend: cause of the empty web trend and 50-pen workaround (`add_trend_spares.ps1`); Micro Trend ([task](../.claude/skills/graphics/tasks/trend.md) §6) | passed (workaround) | passed | Web code always builds 50 columns (ISS-041). Padded `CIENG_TrendLab` draws in the browser with a clean legend; web ignores *Show in legend* (ISS-056). Micro Trend drew once, then blank (ISS-055). |
| C50/R30 | Web check of each trend setting (4 batches on a padded scratch copy, checked in the browser by Claude) ([task](../.claude/skills/graphics/tasks/trend.md) §6) | passed | passed | 2026-10-02. Works / ignored / different table in the task; matches IM 36K10C50 Table 2.27-28 except `timeShift` (error message) and *Show in legend* (ISS-056). A hidden real pen breaks the 50-pen workaround (confirmed). | | C50/R30 | Web check of each trend setting (4 batches on a padded scratch copy, checked in the browser by Claude) ([task](../.claude/skills/graphics/tasks/trend.md) §6) | passed | passed | 2026-10-02. Works / ignored / different table in the task; matches IM 36K10C50 Table 2.27-28 except `timeShift` (error message) and *Show in legend* (ISS-056). A hidden real pen breaks the 50-pen workaround (confirmed). |
| C50 | Remaining trend settings: custom time range, `Rendering3dOrt`, `RenderingCSS` ([task](../.claude/skills/graphics/tasks/trend.md) §4) | passed | passed | 2026-10-02. Custom range on desktop and web (desktop: no live update); 3dOrt draws black lines; CSS mode makes the display unloadable. | | C50 | Remaining trend settings: custom time range, `Rendering3dOrt`, `RenderingCSS` ([task](../.claude/skills/graphics/tasks/trend.md) §4) | passed | passed | 2026-10-02. Custom range on desktop and web (desktop: no live update); 3dOrt draws black lines; CSS mode makes the display unloadable. |
| R30/C50 | Sample operator HMI: 8 generated `CIENG_*` displays, layouts `CIENG_Operator` (header, tab set, banner) and `CIENG_Popup`, live-data feed with server-side *Start* / *Stop* ([sample README](../examples/CI-Eng-Sample/README.md), [layouts](../.claude/skills/graphics/tasks/layouts.md) §6.6) | passed | passed | 2026-10-06 on desktop and web. Replaces `CIENG_Tank`, `CIENG_Menu`, `CIENG_TrendLab`. Tab sets: last child of the frame set (ISS-069), desktop zoom via `navigate … stretchDisplay` (ISS-070), one layout command at a time (ISS-071), `connectionState` breaks the web layout (ISS-068). |
| C50 | Writing display XML directly: text size, rounding, arc angles, web item attributes, server-side command, alarm overview columns ([task](../.claude/skills/graphics/tasks/create-display.md)) | passed | passed | 2026-10-06, test display `CIENG_Test` (removed) on both clients; arc angles clockwise from 3 o'clock on both clients (an earlier note on mirrored angles was wrong); `jwuiutl -v` re-saves (ISS-075). |
| C10 | Sample user `CIENG` with empty password via quick load, profile layout and initial display ([task](../.claude/skills/authorization/tasks/users-groups.md)) | passed | passed | 2026-10-06: `PASSWORD ""` needed (ISS-072); web logon uses the profile layout (ISS-074); group removal with an open session stopped `DSSSDA03` (ISS-073). Factory group `OPERATOR` is enough for the server-side *Start*. |
| J10/C50 | Restart CI Server with the Edit Module open | observed | n/a | Start aborted: `JWUIGED<pid>` still attached to the BUS Service (`ci_start.log`); closing the Edit Module fixed it (skill `system-check`). | | J10/C50 | Restart CI Server with the Edit Module open | observed | n/a | Start aborted: `JWUIGED<pid>` still attached to the BUS Service (`ci_start.log`); closing the Edit Module fixed it (skill `system-check`). |
| R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. | | R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. |
| R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). | | R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). |