Merge pull request 'R1.05 write tests V9, V10, V12, V15 on the shared test server' (#30) from docs/r105-verify-writes into main

Reviewed-on: #30
This commit is contained in:
Clio Liu 2026-10-09 11:08:50 +11:00
commit 01174b061a
33 changed files with 445 additions and 26 deletions

View file

@ -2,7 +2,7 @@
task: Read-only checks of ALARM Service; generate an informational test event task: Read-only checks of ALARM Service; generate an informational test event
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10L15-01EN §1, §2.6, §3.4, §4.3, §6; IM 36K10C20-01EN §A7 (4th editions, Feb. 2026; content as in the 3rd editions, Sep. 2023); practiced on the R1.03 test system 2026-10-01 and read-only on the R1.05 test server 2026-10-09 source: IM 36K10L15-01EN §1, §2.6, §3.4, §4.3, §6; IM 36K10C20-01EN §A7 (4th editions, Feb. 2026; content as in the 3rd editions, Sep. 2023); practiced on the R1.03 test system 2026-10-01 and read-only on the R1.05 test server 2026-10-09
status: verified on R1.03 (2026-10-01). R1.05 - verified (R1.05 test server, 2026-10-09): processes, durwfp, active setup-file lines, almdbg 1/9/12, alhdbg 1, predefined ack types and the ALH storage group; setup files, templates and alarm dataset definitions compared by hash with R1.03 (identical except the files in §5). The INFO event (§4) was not generated on R1.05 (it writes to the shared alarm history). status: verified on R1.03 (2026-10-01). R1.05 - verified (R1.05 test server, 2026-10-09): processes, durwfp, active setup-file lines, almdbg 1/9/12, alhdbg 1, predefined ack types and the ALH storage group; setup files, templates and alarm dataset definitions compared by hash with R1.03 (identical except the files in §5). The INFO event (§4) was not generated on R1.05 (it writes to the shared alarm history). Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): INFO event with almdbg 16 (V10).
--- ---
# ALARM Service checks # ALARM Service checks
@ -71,7 +71,8 @@ description. Check with a filter `'EVENT_TYPE = "INFO"'` (plus a time range) on
**Verified (R1.03):** the event appears with `EVENT_TYPE` INFO, `ITEM_NAME` = the given name, **Verified (R1.03):** the event appears with `EVENT_TYPE` INFO, `ITEM_NAME` = the given name,
`ALARM_TEXT` = status text, `DESCRIPTION` = description, priority 15, ack 1. Other text columns `ALARM_TEXT` = status text, `DESCRIPTION` = description, priority 15, ack 1. Other text columns
(`INSTALL`, `UNIT`, `SUB`, `SOURCE`, `CATEGORY`, `CONDITION`) contain leftovers or unreadable (`INSTALL`, `UNIT`, `SUB`, `SOURCE`, `CATEGORY`, `CONDITION`) contain leftovers or unreadable
characters (ISS-037): use the event only as a test marker. Not run on R1.05. characters (ISS-037): use the event only as a test marker. **R1.05 (2026-10-09, V10):** same
result (`EVENT_TYPE` INFO, text and description as given, priority 15, ack 1).
## 5. What changed in the installed files on R1.05 ## 5. What changed in the installed files on R1.05

View file

@ -2,7 +2,7 @@
task: Switch on alarming for an item, test an alarm, read and acknowledge alarms task: Switch on alarming for an item, test an alarm, read and acknowledge alarms
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10L15-01EN §2.1–§2.3, IM 36K10C20-01EN §A2, §A5, §A12 (4th editions, Feb. 2026; content as in the 3rd editions, Sep. 2023); IM 36K01A50 §1.16 (ODBC acknowledge, unchanged in the 5th edition); IM 36K10C50-01EN §2.22, §4.12 (custom acknowledgement, R1.04+); practiced on CI-Eng-Sample 2026-10-01 source: IM 36K10L15-01EN §2.1–§2.3, IM 36K10C20-01EN §A2, §A5, §A12 (4th editions, Feb. 2026; content as in the 3rd editions, Sep. 2023); IM 36K01A50 §1.16 (ODBC acknowledge, unchanged in the 5th edition); IM 36K10C50-01EN §2.22, §4.12 (custom acknowledgement, R1.04+); practiced on CI-Eng-Sample 2026-10-01
status: verified on R1.03 (2026-10-01). R1.05 - ITEM_DF alarm fields, STATUS_DF, ALARM_CURRENT and ALARM_CHRONO definitions identical to R1.03; the sample alarm on TANK1.LEVEL (ALARMING, CIENG_ACK, CIENG_TANKS) loaded with 0 errors on the R1.05 test server (2026-10-08, load check only). Raising, acknowledging, delaying and repeating an alarm were not re-tested on R1.05 (shared server). Custom acknowledgement with reason and approver - from docs, not tested (ISS-099). status: verified on R1.03 (2026-10-01). R1.05 - ITEM_DF alarm fields, STATUS_DF, ALARM_CURRENT and ALARM_CHRONO definitions identical to R1.03; the sample alarm on TANK1.LEVEL (ALARMING, CIENG_ACK, CIENG_TANKS) loaded with 0 errors on the R1.05 test server (2026-10-08, load check only). Raising, acknowledging, delaying and repeating an alarm were not re-tested on R1.05 (shared server). Custom acknowledgement with reason and approver - from docs, not tested (ISS-099). Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): raise, acknowledge via ALARM_CURRENT (two ACKNOW records), return to normal, DELAY 5 / REPEAT 10 (V10).
--- ---
# Item alarming # Item alarming
@ -121,6 +121,15 @@ No alarm line from `ALDPRT` appeared in `umhlog.log` (ISS-035).
## R1.05 (R1.05 test server) ## R1.05 (R1.05 test server)
- 2026-10-09 (V10, with approval, removed afterwards): same results as the R1.03 table. 50 → 85:
status 10, options without `ack`, one `ALARM_CURRENT` row; acknowledged with `dssqld -m`
(`NAME`,`ACK`) → `ack` back, two `ACKNOW` records (the second with the node name); back to 50 →
`NORMAL`, `ALARM_CURRENT` empty. With `DELAY` 5 / `REPEAT` 10 and 27 s above the limit:
`DIRECT`, `DELAY` +5 s, `REPEAT` +15 s and +25 s (`RPT_COUNT` 1, 2), `NORMAL` (unacknowledged),
then a `NORMAL` with ack 1 after resetting `DELAY`/`REPEAT`. Note: an `ALARM_CHRONO` export
with `@FIELDS` must include `NAME` (the primary index), otherwise `DSS-E-PIDX_FST` and nothing is
exported. Alarm history and audit records of a test cannot be removed afterwards.
- 2026-10-08: the reduced sample load switched on alarming for `TANK1.LEVEL` (`CIENG_ACK`, - 2026-10-08: the reduced sample load switched on alarming for `TANK1.LEVEL` (`CIENG_ACK`,
`CIENG_TANKS`) with 0 errors and removed it again with 0 errors. This was a load check only: `CIENG_TANKS`) with 0 errors and removed it again with 0 errors. This was a load check only:
no alarm was raised or acknowledged. no alarm was raised or acknowledged.

View file

@ -2,7 +2,7 @@
task: Change a class that already has objects (compile and reset) task: Change a class that already has objects (compile and reset)
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10L10-01EN 4th ed. (Feb. 2026) §4 (Reset class); IM 36K10P11-01EN 4th ed. §2.3, §10.4; practiced with CI-Eng-Sample class CIENG_TANK 2026-09-30 source: IM 36K10L10-01EN 4th ed. (Feb. 2026) §4 (Reset class); IM 36K10P11-01EN 4th ed. §2.3, §10.4; practiced with CI-Eng-Sample class CIENG_TANK 2026-09-30
status: verified on R1.03 (2026-09-30, Engineering Module reset 2026-10-01). Not re-tested on R1.05; it needs the sample loaded again on the shared test server (awaiting decision, ISS-158). Manuals unchanged and CLASS_DF / CLASS_RESET_COMMAND definitions identical on R1.05 (2026-10-09), so the R1.03 results are expected to hold status: verified on R1.03 (2026-09-30, Engineering Module reset 2026-10-01). Not re-tested on R1.05; it needs the sample loaded again on the shared test server (awaiting decision, ISS-158). Manuals unchanged and CLASS_DF / CLASS_RESET_COMMAND definitions identical on R1.05 (2026-10-09), so the R1.03 results are expected to hold Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): compile sets RESET_REQUIRED 1 and the object keeps the old code; dssqld RESET 1 still does nothing (ISS-028); opcdbg Classes action 8 resets (RESET_REQUIRED 0, new PRINT text at once); OBJECT_ATTR_VAL CAPACITY 400 → volume 200 at level 50 (V15). Compile and reset leave opc_t*.asc/.lst/.rst files in %TLS_LST_PATH%; delete them after a test.
--- ---
# Change a class that has objects # Change a class that has objects

View file

@ -2,7 +2,7 @@
task: Block / unblock an item and write to a blocked item task: Block / unblock an item and write to a blocked item
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10G10-01EN 5th ed. (Feb. 2026) §3.3, §3.4; IM 36K10C10-01EN 5th ed. (Feb. 2026) §3.4, §3.5; practiced with CI-Eng-Sample 2026-09-30 (R1.03) source: IM 36K10G10-01EN 5th ed. (Feb. 2026) §3.3, §3.4; IM 36K10C10-01EN 5th ed. (Feb. 2026) §3.4, §3.5; practiced with CI-Eng-Sample 2026-09-30 (R1.03)
status: verified on R1.03 (2026-09-30); on R1.05 the BLOCKED fields of SECTION_DF, ITEM_DF and ITEM_VAL and the option bits are unchanged (checked 2026-10-08, read-only); blocking and writes to a blocked item not re-tested on the shared R1.05 test server, re-test awaits a decision (ISS-129) status: verified on R1.03 (2026-09-30); on R1.05 the BLOCKED fields of SECTION_DF, ITEM_DF and ITEM_VAL and the option bits are unchanged (checked 2026-10-08, read-only); blocking and writes to a blocked item not re-tested on the shared R1.05 test server, re-test awaits a decision (ISS-129) Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): block, silent ignore without -o, write with -o, unblock leaves ublk (V9).
--- ---
# Block / unblock an item # Block / unblock an item
@ -38,6 +38,6 @@ dssqld -m block.qli -l block.qlo
item was written by an application (`itmval -o`) while it was blocked (IM 36K10C10 §3.5, item was written by an application (`itmval -o`) while it was blocked (IM 36K10C10 §3.5,
ISS-001). ISS-001).
R1.05: not re-tested (blocking changes live behaviour on the shared test server). Before R1.05 (re-tested 2026-10-09, V9): same behaviour. `CI-Eng-Sample.TANK1.INFLOW` blocked → option
relying on the silent-ignore behaviour on R1.05, block a test item, write it without and with `blk`, status 9; `itmval -p … -v 77` exit 0, value unchanged; `-o` wrote 88 and added `ublk`; after
`-o`, and check the value and the `blk` / `ublk` flags as above. unblocking `blk` was gone and `ublk` stayed.

View file

@ -2,7 +2,7 @@
task: String items: length limit and truncation task: String items: length limit and truncation
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10C10-01EN 5th ed. (Feb. 2026) §3.3.4; IM 36K10G10-01EN 5th ed. (Feb. 2026) §3.2.2; data dictionary (`dssqld -f`); practiced on CI-Eng-Sample 2026-09-30 (R1.03) source: IM 36K10C10-01EN 5th ed. (Feb. 2026) §3.3.4; IM 36K10G10-01EN 5th ed. (Feb. 2026) §3.2.2; data dictionary (`dssqld -f`); practiced on CI-Eng-Sample 2026-09-30 (R1.03)
status: verified on R1.03 (2026-09-30); on R1.05 the limit 1–200 / default 80 was checked in the data dictionary and ITEM_DF is identical (2026-10-08, read-only); string writes and truncation not re-tested on the shared R1.05 test server, re-test awaits a decision (ISS-129) status: verified on R1.03 (2026-09-30); on R1.05 the limit 1–200 / default 80 was checked in the data dictionary and ITEM_DF is identical (2026-10-08, read-only); string writes and truncation not re-tested on the shared R1.05 test server, re-test awaits a decision (ISS-129) Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): a 120-character write to a length-100 item stored 99 characters with status 12 (V9).
--- ---
# String items # String items

View file

@ -2,7 +2,7 @@
task: Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print and delete generated reports; remove reports task: Define reports by quick load (ad hoc with parameters, schedule, item trigger, HTML, logbook); generate, read, print and delete generated reports; remove reports
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10C30-01EN §2.1, §2.3.1, §3, App. 1 (4th Edition, Feb. 2026); IM 36K10L50-01EN App. 1 (REPORT_DF, REPORT_VAL); IM 36K10P20-01EN (4th Edition, Feb. 2026); practiced on CI-Eng-Sample 2026-10-01 source: IM 36K10C30-01EN §2.1, §2.3.1, §3, App. 1 (4th Edition, Feb. 2026); IM 36K10L50-01EN App. 1 (REPORT_DF, REPORT_VAL); IM 36K10P20-01EN (4th Edition, Feb. 2026); practiced on CI-Eng-Sample 2026-10-01
status: verified on R1.03 (2026-10-01, command line and Engineering Module); on R1.05 the REPORT_DF / REPORT_VAL definitions are identical to R1.03 (file hashes, 2026-10-08) and the sample's three reports loaded and were removed with 0 errors on the R1.05 test server (2026-10-08, load check only); generating, printing and deleting generated reports not tested on R1.05 (shared server) status: verified on R1.03 (2026-10-01, command line and Engineering Module); on R1.05 the REPORT_DF / REPORT_VAL definitions are identical to R1.03 (file hashes, 2026-10-08) and the sample's three reports loaded and were removed with 0 errors on the R1.05 test server (2026-10-08, load check only); generating, printing and deleting generated reports not tested on R1.05 (shared server) Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): generate with dssqld (stored, not printed: FSL-E-PRT_UNKUSER), print a generated report to the file destination, item trigger 0 → 450 generated by RPTMAN and printed (V12).
--- ---
# Define and run reports # Define and run reports
@ -125,6 +125,12 @@ NAME,ACTIVATION_TIME,GENERATION_INTERVAL
## R1.05 (2026-10-08/09) ## R1.05 (2026-10-08/09)
- 2026-10-09 (V12, with approval, removed afterwards): same as R1.03. `GENERATE` 1 on
`CIENG_TANK1` → back to 0 within 5 s, one `REPORT_VAL` record (`ACTION_PROCESS` `DSSQLD<pid>`,
user `FULL AUTHORIZATION`), `FSL-E-PRT_UNKUSER` in `umhlog.log` and nothing printed (ISS-045);
`PRINT` 1 with `DEST_NAME` `CIENG_FILE` on that record wrote the report to the file; the item
trigger `CIENG_INFLOW_HI` (0 → 450) produced a record by `RPTMAN` and a line in the file.
- **Verified (R1.05 test server, 2026-10-08):** the reduced CI-Eng-Sample load created the file - **Verified (R1.05 test server, 2026-10-08):** the reduced CI-Eng-Sample load created the file
device and destination and the three reports with 0 errors (the sample files still say device and destination and the three reports with 0 errors (the sample files still say
`@VERSION 1.03.00`; R1.05 accepts them) and the sample's remove files (schedule cleared `@VERSION 1.03.00`; R1.05 accepts them) and the sample's remove files (schedule cleared

View file

@ -2,7 +2,7 @@
task: Check REPORT Service (processes, set-up files, system reports) and stop a hanging report task: Check REPORT Service (processes, set-up files, system reports) and stop a hanging report
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10R40-01EN §1.3, §2.2, §2.3, §5 (4th Edition, Feb. 2026); IM 36K10C30-01EN §4, App. 1.3 (4th Edition, Feb. 2026); practiced on the test system 2026-10-01 source: IM 36K10R40-01EN §1.3, §2.2, §2.3, §5 (4th Edition, Feb. 2026); IM 36K10C30-01EN §4, App. 1.3 (4th Edition, Feb. 2026); practiced on the test system 2026-10-01
status: verified on R1.03 (2026-10-01); on the R1.05 test server processes, set-up files, start/stop scripts, system reports and factory destinations checked read-only (2026-10-09); rptstp not re-tested on R1.05 (it cancels a running report on a shared server) status: verified on R1.03 (2026-10-01); on the R1.05 test server processes, set-up files, start/stop scripts, system reports and factory destinations checked read-only (2026-10-09); rptstp not re-tested on R1.05 (it cancels a running report on a shared server) Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): rptstp rptge1 stopped an endless LOOP report, GENERATE back to 0, RPTGE1 still attached (V12).
--- ---
# REPORT Service checks # REPORT Service checks
@ -83,5 +83,5 @@ above; 28 system reports; `rptstp rptge1` cancelled the test report `CIENG_LOOP`
- 28 system reports, same names as R1.03, all ad hoc, priority 0, lifetime 1 week, no schedule - 28 system reports, same names as R1.03, all ad hoc, priority 0, lifetime 1 week, no schedule
or destination; only `SYSTEM_LOG_HTML` has `CONTAINS_HTML` 1. or destination; only `SYSTEM_LOG_HTML` has `CONTAINS_HTML` 1.
- Factory destinations as on R1.03, no devices (`output-devices.md`). - Factory destinations as on R1.03, no devices (`output-devices.md`).
- Not re-tested: `rptstp` (awaiting user verification on a non-shared system: load a report with - `rptstp` re-tested 2026-10-09 (V12, with approval): an endless `LOOP` report kept `GENERATE` 1;
an endless `LOOP`, generate it, run `rptstp rptge1`; expected as on R1.03). `rptstp rptge1` (exit 0) stopped it, `GENERATE` went to 0 and `RPTGE1` stayed attached.

View file

@ -2,7 +2,7 @@
task: Try RQL queries in the interactive report generator; write CSV with SPOOL task: Try RQL queries in the interactive report generator; write CSV with SPOOL
version: R1.05 (first written for R1.03) version: R1.05 (first written for R1.03)
source: IM 36K10R40-01EN §4; IM 36K10P20-01EN §3–6, §9; IM 36K10C30-01EN §3.2.3 (all 4th Edition, Feb. 2026); R1.05 data dictionary (ITEM_VAL); practiced on the test system and CI-Eng-Sample 2026-10-01 source: IM 36K10R40-01EN §4; IM 36K10P20-01EN §3–6, §9; IM 36K10C30-01EN §3.2.3 (all 4th Edition, Feb. 2026); R1.05 data dictionary (ITEM_VAL); practiced on the test system and CI-Eng-Sample 2026-10-01
status: verified on R1.03 (2026-10-01); on the R1.05 test server piped query files, cursors (DECLARE/OPEN/FETCH), group functions, @VERSION and the new ITEM_VAL fields verified read-only (2026-10-09); SPOOL/CSV, history queries and the CI-Eng-Sample examples not re-run on R1.05 (sample not loaded on the shared server) status: verified on R1.03 (2026-10-01); on the R1.05 test server piped query files, cursors (DECLARE/OPEN/FETCH), group functions, @VERSION and the new ITEM_VAL fields verified read-only (2026-10-09); SPOOL/CSV, history queries and the CI-Eng-Sample examples not re-run on R1.05 (sample not loaded on the shared server) Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): SPOOL with @EXPORT wrote the quoted CSV lines to %TLS_LST_PATH% (file deleted) (V12).
--- ---
# RQL in the interactive generator # RQL in the interactive generator

View file

@ -44,7 +44,8 @@ For a server that other projects use, where CI Server must not be restarted:
| `shared\reduced_load.cmd` | `load.cmd` without the storage groups and history bindings (`03`, `04`: need a restart), the authorization group and user `CIENG` (`08`, `08b`: a password-less user on a shared server) and the layouts/displays (shared `Layouts.xml`) | | `shared\reduced_load.cmd` | `load.cmd` without the storage groups and history bindings (`03`, `04`: need a restart), the authorization group and user `CIENG` (`08`, `08b`: a password-less user on a shared server) and the layouts/displays (shared `Layouts.xml`) |
| `shared\test_r105.ps1` | Starts the Modbus slave mirror only for the test, checks classes, sub-items, Modbus loopback and OPC UA loopback with `itmval`, stops the mirror again | | `shared\test_r105.ps1` | Starts the Modbus slave mirror only for the test, checks classes, sub-items, Modbus loopback and OPC UA loopback with `itmval`, stops the mirror again |
| `shared\reduced_remove.cmd` | Removes exactly what `reduced_load.cmd` loaded | | `shared\reduced_remove.cmd` | Removes exactly what `reduced_load.cmd` loaded |
| `shared\clean_dss_tmp.ps1 -Since <time>` | Deletes the `dss_*.tmp` files the test left in `%TLS_LST_PATH%` (ISS-091) | | `shared\clean_dss_tmp.ps1 -Since <time>` | Deletes the `dss_*.tmp` files the test left in `%TLS_LST_PATH%` (ISS-091, ISS-119) |
| `shared\write_test\*` + `shared\test_r105_writes.ps1 [-Part v9\|v10\|v12\|v15]` | Write tests (blocking and string items, alarms, reports with `rptstp` and SPOOL, class change/reset and attribute change). Copy all files into the copied sample folder; `load_write_test.cmd`, run the parts, `remove_write_test.cmd`. Needs approval on a shared server (run 2026-10-09, `knowledge/r105-verification.md`). Afterwards delete the `opc_t*.asc/.lst/.rst` files the class compile and reset wrote to `%TLS_LST_PATH%` (they contain sample text). Alarm history, audit-trail and `umhlog` records of the test cannot be removed. |
Copy the whole sample folder to a temporary folder on the server, run from there, and delete Copy the whole sample folder to a temporary folder on the server, run from there, and delete
it afterwards. Also delete `%TLS_LOG_PATH%\OPXCIENG.log`. The OPC UA certificate exchange and it afterwards. Also delete `%TLS_LOG_PATH%\OPXCIENG.log`. The OPC UA certificate exchange and

View file

@ -1,6 +1,7 @@
# Read-only snapshot of everything the reduced CI-Eng-Sample test can touch. # Read-only snapshot of everything the reduced CI-Eng-Sample test can touch.
param([string]$Out) param([string]$Out)
$ErrorActionPreference = 'Continue' $ErrorActionPreference = 'Continue'
$started = Get-Date
$w = New-Object System.Collections.Generic.List[string] $w = New-Object System.Collections.Generic.List[string]
$tmp = Join-Path $PSScriptRoot 'snapx' $tmp = Join-Path $PSScriptRoot 'snapx'
New-Item -ItemType Directory -Force -Path $tmp | Out-Null New-Item -ItemType Directory -Force -Path $tmp | Out-Null
@ -19,6 +20,11 @@ foreach ($d in $ds) {
$w.Add("DS $d count=$($names.Count) hash=$sha cieng=$($mine.Count) $($mine -join ';')") $w.Add("DS $d count=$($names.Count) hash=$sha cieng=$($mine.Count) $($mine -join ';')")
} }
Remove-Item -Recurse -Force $tmp Remove-Item -Recurse -Force $tmp
# The exports above (OBJECT_DF) leave empty dss_*.tmp files in tls\lst (ISS-119): remove the ones
# this run wrote, so the snapshot does not change the system it describes.
Get-ChildItem -Path $env:TLS_LST_PATH -Filter 'dss_*.tmp' -ErrorAction SilentlyContinue |
Where-Object { $_.Length -eq 0 -and $_.LastWriteTime -ge $started } |
Remove-Item -ErrorAction SilentlyContinue
$root = $env:TLS_ALLUSERS_PATH $root = $env:TLS_ALLUSERS_PATH
foreach ($sub in 'com','sup','sav','lst') { foreach ($sub in 'com','sup','sav','lst') {
foreach ($i in (Get-ChildItem -Path (Join-Path $env:TLS_ROOT_PATH "tls\$sub") -File | Sort-Object Name)) { foreach ($i in (Get-ChildItem -Path (Join-Path $env:TLS_ROOT_PATH "tls\$sub") -File | Sort-Object Name)) {

View file

@ -0,0 +1,139 @@
# V9, V10, V12, V15 on the R1.05 test server, after write_test\load_write_test.cmd (all files copied into the sample folder). Prints results only.
param([string]$Part = 'all')
Set-Location -LiteralPath $PSScriptRoot
$P = 'CI-Eng-Sample'
function V($n) { (& itmval -g -n "$P.$n" 2>&1 | Out-String).Trim() -replace '\s+', ' ' }
function W($n, $v, [switch]$o) { if ($o) { $r = & itmval -p -n "$P.$n" -v $v -o 2>&1 } else { $r = & itmval -p -n "$P.$n" -v $v 2>&1 }; " write $n=$v$(if($o){' -o'}) exit=$LASTEXITCODE $r" }
function Q($mode, $file) { $r = & dssqld $mode $file -l ($file -replace '\.qli$', '.qlo') 2>&1 | Out-String; ($r -split "`n" | Where-Object { $_ -match '^[A-Z_]+_(DF|VAL|CURRENT)\s+\d' }) -join ' / ' }
function E($filter, $out) { $null = & dssqld -e $out $filter -c 2>&1; if (Test-Path $out) { Get-Content $out } }
function Umh($pat) { Select-String -Path "$env:TLS_LOG_PATH\umhlog.log" -Pattern $pat -SimpleMatch | Select-Object -Last 3 | ForEach-Object { ' umh: ' + $_.Line.Trim() } }
if ($Part -in 'all','v9') {
"=== V9 block / unblock (TANK1.INFLOW)"
W 'TANK1.INFLOW' 10
" before: $(V 'TANK1.INFLOW')"
" block: $(Q '-m' 't_block.qli')"
" blocked: $(V 'TANK1.INFLOW')"
W 'TANK1.INFLOW' 77
" after write without -o: $(V 'TANK1.INFLOW')"
W 'TANK1.INFLOW' 88 -o
" after write with -o: $(V 'TANK1.INFLOW')"
" unblock: $(Q '-m' 't_unblock.qli')"
" unblocked: $(V 'TANK1.INFLOW')"
"=== V9 string item (length 100, write 120 characters)"
$s = ('0123456789' * 12)
W 'DEMO.STR100' $s
$g = (& itmval -g -n "$P.DEMO.STR100" 2>&1 | Out-String)
$val = ([regex]::Match($g, 'Value\s*=\s*(.*)')).Groups[1].Value.Trim()
" stored length: $($val.Length) status: $(([regex]::Match($g, 'Status\s*=\s*(\d+)')).Groups[1].Value)"
}
if ($Part -in 'all','v10') {
"=== V10 alarm raise / acknowledge (TANK1.LEVEL, limits 10/20/80/90)"
W 'TANK1.LEVEL' 50; Start-Sleep 2
" start: $(V 'TANK1.LEVEL')"
$t0 = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss')
W 'TANK1.LEVEL' 85; Start-Sleep 3
" high: $(V 'TANK1.LEVEL')"
$cur = E 'f_almcur.qli' 'almcur.qlo'
" ALARM_CURRENT rows: $(@($cur).Count - 1)"
$hdr = ($cur | Select-Object -First 1) -split ','
$row = $cur | Select-Object -Skip 1 | Select-Object -Last 1
if ($row) {
$name = ($row -split '","')[0].Trim('"')
" alarm NAME: $name"
"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,ACK`r`n`r`n@ALARM_CURRENT`r`n""$name"",1`r`n" | Set-Content -Encoding ascii t_ack.qli
" acknowledge: $(Q '-m' 't_ack.qli')"
Start-Sleep 2
" after ack: $(V 'TANK1.LEVEL')"
}
W 'TANK1.LEVEL' 50; Start-Sleep 3
" back to 50: $(V 'TANK1.LEVEL'); ALARM_CURRENT rows: $(@(E 'f_almcur.qli' 'almcur.qlo').Count - 1)"
"=== V10 delay 5 s / repeat 10 s"
" set: $(Q '-m' 't_dr.qli')"
Start-Sleep 2
W 'TANK1.LEVEL' 85; Start-Sleep 27
W 'TANK1.LEVEL' 50; Start-Sleep 3
"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,ALARM_TIME,EVENT_TYPE,NEW_STATE,RPT_COUNT,ACK`r`n`r`n@SELECT`r`n'ITEM_NAME = ""CI-Eng-Sample.TANK1.LEVEL"" and ALARM_TIME > ""$t0""'`r`n@ALARM_CHRONO`r`n" | Set-Content -Encoding ascii f_chrono.qli
E 'f_chrono.qli' 'chrono.qlo' | ForEach-Object { " chrono: $_" }
" reset delay/repeat: $(Q '-m' 't_dr0.qli')"
Start-Sleep 2
" ALARM_CURRENT rows after reset: $(@(E 'f_almcur.qli' 'almcur.qlo').Count - 1)"
"=== V10 INFO event (almdbg 16)"
$t1 = (Get-Date).ToString('dd-MM-yyyy HH:mm:ss')
$null = ("16`n`n0`n15`n$P.TANK1.LEVEL`nV10 test`nCI-Eng-Sample INFO test event`n-1`n" | & almdbg 2>&1)
Start-Sleep 2
"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,ALARM_TIME,EVENT_TYPE,ITEM_NAME,ALARM_TEXT,DESCRIPTION,PRIORITY,ACK`r`n`r`n@SELECT`r`n'EVENT_TYPE = ""INFO"" and ALARM_TIME > ""$t1""'`r`n@ALARM_CHRONO`r`n" | Set-Content -Encoding ascii f_info.qli
E 'f_info.qli' 'info.qlo' | ForEach-Object { " info: $_" }
}
if ($Part -in 'all','v12') {
"=== V12 generate CIENG_TANK1 (dssqld)"
" generate: $(Q '-m' 't_gen.qli')"
Start-Sleep 5
E 'f_repdf.qli' 'repdf.qlo' | ForEach-Object { " report_df: $_" }
$rv = E 'f_repval.qli' 'repval.qlo'
$rv | ForEach-Object { " report_val: $_" }
$gen = $rv | Select-Object -Skip 1 | Where-Object { $_ -like '"CIENG_TANK1.*' } | Select-Object -Last 1
Umh 'PRT_UNKUSER'
if ($gen) {
$gname = ($gen -split '","')[0].Trim('"')
"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,DEST_NAME,PRINT`r`n`r`n@REPORT_VAL`r`n""$gname"",""CIENG_FILE"",1`r`n" | Set-Content -Encoding ascii t_print.qli
" print $gname to CIENG_FILE: $(Q '-m' 't_print.qli')"
Start-Sleep 5
$f = "$env:TLS_LST_PATH\cieng_report.txt"
" output file: $(if (Test-Path $f) { (Get-Item $f).Length.ToString() + ' bytes, first line: ' + (Get-Content $f -TotalCount 1) } else { 'missing' })"
}
"=== V12 item trigger CIENG_INFLOW_HI (0 -> 450)"
W 'TANK1.INFLOW' 0; Start-Sleep 3
W 'TANK1.INFLOW' 450; Start-Sleep 12
E 'f_repval.qli' 'repval.qlo' | Where-Object { $_ -like '*INFLOW_HI*' } | ForEach-Object { " report_val: $_" }
$f = "$env:TLS_LST_PATH\cieng_report.txt"
if (Test-Path $f) { " file now: " + ((Get-Content $f) -match 'inflow high' | Select-Object -Last 1) }
W 'TANK1.INFLOW' 0
"=== V12 rptstp on an endless report"
" generate CIENG_LOOP: $(Q '-m' 't_loop_gen.qli')"
Start-Sleep 5
E 'f_repdf.qli' 'repdf.qlo' | Where-Object { $_ -like '*CIENG_LOOP*' } | ForEach-Object { " while running: $_" }
$r = & rptstp rptge1 2>&1 | Out-String
" rptstp: exit=$LASTEXITCODE $($r.Trim())"
Start-Sleep 4
E 'f_repdf.qli' 'repdf.qlo' | Where-Object { $_ -like '*CIENG_LOOP*' } | ForEach-Object { " after rptstp: $_" }
" RPTGE1 attached (0 = yes): " + $(& durwfp -p RPTGE1 -t 0 2>&1 | Out-Null; $LASTEXITCODE)
"=== V12 SPOOL to CSV"
$csv = "$env:TLS_LST_PATH\cieng_levels.csv"
"set @next 0;`nset @page_size 0;`nspool '$csv';`nset @export 1;`nselect name, item_value, status from item_val where name like 'CI-Eng-Sample.TANK1.%';`nspool;`nset @export 0;`nquit;`n" | Set-Content -Encoding ascii q_spool.rql
$null = Get-Content q_spool.rql | & rptgen -s rptgen.rpt 2>&1
if (Test-Path $csv) { Get-Content $csv | ForEach-Object { " csv: $_" }; Remove-Item $csv } else { ' csv: file not written' }
}
if ($Part -in 'all','v15') {
"=== V15 change and reset class CIENG_TANK"
W 'TANK1.LEVEL' 50; Start-Sleep 2
E 'f_class.qli' 'cls.qlo' | ForEach-Object { " before: $_" }
" compile changed source: $(Q '-m' 't_cls.qli')"
Start-Sleep 3
E 'f_class.qli' 'cls.qlo' | ForEach-Object { " after compile: $_" }
W 'TANK1.LEVEL' 85; Start-Sleep 3
Umh 'CIENG_TANK CI-Eng-Sample.TANK1'
W 'TANK1.LEVEL' 50
"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,RESET`r`n`r`n@CLASS_DF`r`n""CIENG_TANK"",1`r`n" | Set-Content -Encoding ascii t_rst_dss.qli
" dssqld reset (ISS-028): $(Q '-m' 't_rst_dss.qli')"
Start-Sleep 3
E 'f_class.qli' 'cls.qlo' | Select-Object -Last 1 | ForEach-Object { " after dssqld reset: $_" }
$job = Start-Job { param($d) Set-Location $d; "2`n8`nCIENG_TANK`n0`n`n-1`n-1`n" | & opcdbg 0 2>&1 | Out-String } -ArgumentList $PSScriptRoot
if (Wait-Job $job -Timeout 30) { $o = Receive-Job $job; " opcdbg reset: " + (($o -split "`n" | Where-Object { $_ -match 'reset|Reset|error|Error' } | Select-Object -Last 3) -join ' | ') } else { Stop-Job $job; ' opcdbg reset: timed out' }
Remove-Job $job -Force
Get-Process opcdbg -ErrorAction SilentlyContinue | Where-Object { $_.StartTime -gt (Get-Date).AddMinutes(-2) } | Stop-Process -Force
Start-Sleep 3
E 'f_class.qli' 'cls.qlo' | Select-Object -Last 1 | ForEach-Object { " after opcdbg reset: $_" }
W 'TANK1.LEVEL' 85; Start-Sleep 3
Umh 'CIENG_TANK CI-Eng-Sample.TANK1'
W 'TANK1.LEVEL' 50; Start-Sleep 2
"=== V15 change attribute CAPACITY 200 -> 400"
E 'f_attr.qli' 'attr.qlo' | ForEach-Object { " before: $_" }
" set: $(Q '-m' 't_cap.qli')"
Start-Sleep 2
W 'TANK1.LEVEL' 49; Start-Sleep 1; W 'TANK1.LEVEL' 50; Start-Sleep 3
" VOLUME at level 50 (expect 200): $(V 'TANK1.CALC.VOLUME')"
}

View file

@ -0,0 +1,9 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@SELECT
'ITEM_NAME = "CI-Eng-Sample.TANK1.LEVEL"'
@ALARM_CURRENT

View file

@ -0,0 +1,12 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,ATTR_VALUE
@SELECT
'NAME = "CI-Eng-Sample.TANK1.CALC:CAPACITY"'
@OBJECT_ATTR_VAL

View file

@ -0,0 +1,12 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,COMPILE,RESET_REQUIRED,OBJECTS,OBJECTS_RESET
@SELECT
'NAME = "CIENG_TANK"'
@CLASS_DF

View file

@ -0,0 +1,12 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,GENERATE
@SELECT
'NAME = "CIENG_LOOP" or NAME = "CIENG_TANK1"'
@REPORT_DF

View file

@ -0,0 +1,12 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,REPORT_NAME,GENERATION_TIME,ACTION_PROCESS,USER_NAME
@SELECT
'REPORT_NAME = "CIENG_TANK1" or REPORT_NAME = "CIENG_INFLOW_HI" or REPORT_NAME = "CIENG_LOOP"'
@REPORT_VAL

View file

@ -0,0 +1,18 @@
@echo off
REM Write-test load (V9, V10, V12, V15) on the shared R1.05 test server (2026-10-09).
REM Sample sections, items, sub-items, alarm definitions, trigger/classes/objects, item alarm,
REM printer and reports, plus the test records. No Modbus, no OPC UA, no history group, no user.
cd /d "%~dp0"
dssqld -i 01_section_df.qli -l 01_section_df.qlo
dssqld -i 01b_alarm_df.qli -l 01b_alarm_df.qlo
dssqld -i 02_item_df.qli -l 02_item_df.qlo
dssqld -i 02b_sub_item_df.qli -l 02b_sub_item_df.qlo
dssqld -i 05_trigger_df.qli -l 05_trigger_df.qlo
dssqld -i 06_class_df.qli -l 06_class_df.qlo
dssqld -i 07_object_df.qli -l 07_object_df.qlo
dssqld -m 16_item_alarm_df.qli -l 16_item_alarm_df.qlo
powershell -NoProfile -ExecutionPolicy Bypass -File 17_printer_df.ps1
dssqld -i 17_printer_df.qli -l 17_printer_df.qlo
dssqld -i 18_report_df.qli -l 18_report_df.qlo
dssqld -i t_str.qli -l t_str.qlo
dssqld -i t_loop.qli -l t_loop.qlo

View file

@ -0,0 +1,16 @@
@echo off
REM Removes everything load_write_test.cmd loaded.
cd /d "%~dp0"
dssqld -r t_loop_rm.qli -l t_loop_rm.qlo
dssqld -m 83a_stop_report_df.qli -l 83a_stop_report_df.qlo
dssqld -r 83_remove_report_df.qli -l 83_remove_report_df.qlo
dssqld -r 84_remove_printer_df.qli -l 84_remove_printer_df.qlo
if exist "%TLS_LST_PATH%\cieng_report.txt" del "%TLS_LST_PATH%\cieng_report.txt"
dssqld -r 86_remove_object_df.qli -l 86_remove_object_df.qlo
dssqld -r 87_remove_class_df.qli -l 87_remove_class_df.qlo
dssqld -r 88_remove_trigger_df.qli -l 88_remove_trigger_df.qlo
dssqld -r 90b_remove_sub_item_df.qli -l 90b_remove_sub_item_df.qlo
dssqld -r t_str_rm.qli -l t_str_rm.qlo
dssqld -r 91_remove_item_df.qli -l 91_remove_item_df.qlo
dssqld -r 92_remove_section_df.qli -l 92_remove_section_df.qlo
dssqld -r 93_remove_alarm_df.qli -l 93_remove_alarm_df.qlo

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,BLOCKED
@ITEM_DF
"CI-Eng-Sample.TANK1.INFLOW",1

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,ATTR_VALUE
@OBJECT_ATTR_VAL
"CI-Eng-Sample.TANK1.CALC:CAPACITY","400"

View file

@ -0,0 +1,31 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,COMPILE,METHOD
@CLASS_DF
"CIENG_TANK",1,@"
CLASS CIENG_TANK;
PROLOG
ATTRIBUTE CAPACITY OBJECT FLOAT;
PROMPT CAPACITY QUERY "Tank capacity (m3)";
SIGNAL LEVEL := SECTION || ".LEVEL" TRIGGER VALUE;
SIGNAL VOLUME := FROM "CI-Eng-Sample.TEMPLATES.TPL_REAL" MAKE
"DESCRIPTION" EQUAL "Tank volume (m3), class CIENG_TANK";
IF CAPACITY <= 0 THEN
ERROR "CIENG_TANK: capacity must be > 0";
ENDIF;
BODY
METHOD CALC;
BODY
VOLUME := LEVEL * CAPACITY / 100.0;
IF LEVEL >=: 80.0 THEN
PRINT "CIENG_TANK ", SECTION, ": V15 changed text, volume ", VOLUME;
ENDIF;
ENDMETHOD CALC;
ENDCLASS CIENG_TANK;
"@

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,DELAY,REPEAT
@ITEM_DF
"CI-Eng-Sample.TANK1.LEVEL",5,10

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,DELAY,REPEAT
@ITEM_DF
"CI-Eng-Sample.TANK1.LEVEL",0,0

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,PARAM_VALUE_1,GENERATE
@REPORT_DF
"CIENG_TANK1","CI-Eng-Sample.TANK1.INFLOW",1

View file

@ -0,0 +1,14 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,DESCRIPTION,PRIORITY,ADHOC_ENABLED,LIFE_TIME,QUERY
@REPORT_DF
"CIENG_LOOP","Endless loop test for rptstp",0,1,"1 Days",@"
set @i 0;
loop set @i @i + 1; endloop;
"@

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,GENERATE
@REPORT_DF
"CIENG_LOOP",1

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME
@REPORT_DF
"CIENG_LOOP"

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,DESCRIPTION,ITEM_REP,STRING_LENGTH,AUDIT_INFO
@ITEM_DF
"CI-Eng-Sample.DEMO.STR100","Test string item, length 100","String",100,0

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME
@ITEM_DF
"CI-Eng-Sample.DEMO.STR100"

View file

@ -0,0 +1,11 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
@FIELDS
NAME,BLOCKED
@ITEM_DF
"CI-Eng-Sample.TANK1.INFLOW",0

View file

@ -47,7 +47,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-025 | 2026-09-30 | PROCESS (PRINT) | A Traditional `PRINT "… 80 %, volume ", VOLUME;` logged `OPC-I-INFO, UMH Message Text Error: Message number 083A001B (… level reached 80 )`: the text is cut at the `%` and the rest is lost. Without `%` the full text is logged. | closed | Tested 2026-10-01 with a temporary class (removed): `PRINT "… 50 %% …"` logs `50 % …` correctly; `\%` and `%c` with 37 both give the *Message Text Error* and cut the text. Documented: write `%%`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10P10-01EN.md` §4; `.claude/skills/class-object-engineering/tasks/traditional-class.md` | | ISS-025 | 2026-09-30 | PROCESS (PRINT) | A Traditional `PRINT "… 80 %, volume ", VOLUME;` logged `OPC-I-INFO, UMH Message Text Error: Message number 083A001B (… level reached 80 )`: the text is cut at the `%` and the rest is lost. Without `%` the full text is logged. | closed | Tested 2026-10-01 with a temporary class (removed): `PRINT "… 50 %% …"` logs `50 % …` correctly; `\%` and `%c` with 37 both give the *Message Text Error* and cut the text. Documented: write `%%`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10P10-01EN.md` §4; `.claude/skills/class-object-engineering/tasks/traditional-class.md` |
| ISS-026 | 2026-09-30 | PROCESS (`opc.sup`) | Installed PROCESS setup differs from IM 36K10L10 §2: `IMMED-EVENTS = NO` (manual: default on); `FLOW-CONTROL = 30,60` (manual 300/360 s); four executors `OPCEXE1`–`4` with fixed priority ranges (manual examples `OPCEXE01`…) and `opcdbg` still defaults to `OPCEXE`; keyword `VARTAB-SIZE` (manual `VARITAB-SIZE`); hidden keywords `FLDSEP`, `IGNEXI` not described; `ALARM-ITEMS` not set; class source file `opc_clssrc.dat` (manual `opc_clasrc.dat`); `opcini.sup` (licence line) not described. | closed | Installed software is the reference (standing user decision); summary written from the installed files. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L10-01EN.md` §2, §5 | | ISS-026 | 2026-09-30 | PROCESS (`opc.sup`) | Installed PROCESS setup differs from IM 36K10L10 §2: `IMMED-EVENTS = NO` (manual: default on); `FLOW-CONTROL = 30,60` (manual 300/360 s); four executors `OPCEXE1`–`4` with fixed priority ranges (manual examples `OPCEXE01`…) and `opcdbg` still defaults to `OPCEXE`; keyword `VARTAB-SIZE` (manual `VARITAB-SIZE`); hidden keywords `FLDSEP`, `IGNEXI` not described; `ALARM-ITEMS` not set; class source file `opc_clssrc.dat` (manual `opc_clasrc.dat`); `opcini.sup` (licence line) not described. | closed | Installed software is the reference (standing user decision); summary written from the installed files. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L10-01EN.md` §2, §5 |
| ISS-027 | 2026-09-30 | PROCESS (`opcdbg`) | IM 36K10L10 §4 says the `opcdbg` *Dump classes/objects* files can be read by `dssqld`. The files have no `@LANGUAGE`/`@FIELDS`/`@<dataset>` headers (`NAME,"desc",prio` + source lines prefixed `- `); `dssqld -i` on the object dump gave `DSS-E-UNK_DS_NM, Unknown data set name`. | closed | Use `dssqld -e CLASS_DF` / `OBJECT_DF` for transfers (documented in `opcdbg-checks.md`). No installed tool that reads the dump format was found. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L10-01EN.md` §4; `.claude/skills/class-object-engineering/tasks/opcdbg-checks.md` | | ISS-027 | 2026-09-30 | PROCESS (`opcdbg`) | IM 36K10L10 §4 says the `opcdbg` *Dump classes/objects* files can be read by `dssqld`. The files have no `@LANGUAGE`/`@FIELDS`/`@<dataset>` headers (`NAME,"desc",prio` + source lines prefixed `- `); `dssqld -i` on the object dump gave `DSS-E-UNK_DS_NM, Unknown data set name`. | closed | Use `dssqld -e CLASS_DF` / `OBJECT_DF` for transfers (documented in `opcdbg-checks.md`). No installed tool that reads the dump format was found. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L10-01EN.md` §4; `.claude/skills/class-object-engineering/tasks/opcdbg-checks.md` |
| ISS-028 | 2026-09-30 | PROCESS (class reset) | After recompiling a class with objects (`RESET_REQUIRED` 1), `dssqld -m` with `CLASS_DF` `RESET` = 1 (also with `RESET_NODE` = host node name) is accepted with 0 errors but does not reset; `OBJECT_DF` `RESET` = 1 is refused (`OPC-E-OBJ_RSTREQ`). `opcdbg` Classes → 8 *Reset class* works; it asks for a reset report file, which the manual does not list. | closed | Use `opcdbg`. 2026-10-01: `CLASS_RESET_COMMAND` cannot be driven by `dssqld` (read/update only; no record to update — *Not found*; insert `DSS-E-NO_AUTH`). Test class `CIENG_INCR` was recompiled and reset again with `opcdbg` (`RESET_REQUIRED` back to 0). Engineering Module reset verified by the user 2026-10-01: *Configuration › I/O processing › Classes* › right-click the class › *Reset* opens *Class - reset* (reset node, *Force extended reset*, *Abort after first failure*, progress, reset report) — the GUI for `CLASS_RESET_COMMAND`; *Reset* reset 1 of 1 object, `RESET_REQUIRED` back to 0, object running. Closed 2026-10-01 (confirmed by user). | `.claude/skills/class-object-engineering/tasks/change-reset-class.md`; `knowledge/manuals/IM36K10L10-01EN.md` §4 | | ISS-028 | 2026-09-30 | PROCESS (class reset) | After recompiling a class with objects (`RESET_REQUIRED` 1), `dssqld -m` with `CLASS_DF` `RESET` = 1 (also with `RESET_NODE` = host node name) is accepted with 0 errors but does not reset; `OBJECT_DF` `RESET` = 1 is refused (`OPC-E-OBJ_RSTREQ`). `opcdbg` Classes → 8 *Reset class* works; it asks for a reset report file, which the manual does not list. | closed | R1.05 (2026-10-09, V15): still the same, `dssqld -m` RESET 1 has no effect; use opcdbg or the Engineering Module. Use `opcdbg`. 2026-10-01: `CLASS_RESET_COMMAND` cannot be driven by `dssqld` (read/update only; no record to update — *Not found*; insert `DSS-E-NO_AUTH`). Test class `CIENG_INCR` was recompiled and reset again with `opcdbg` (`RESET_REQUIRED` back to 0). Engineering Module reset verified by the user 2026-10-01: *Configuration › I/O processing › Classes* › right-click the class › *Reset* opens *Class - reset* (reset node, *Force extended reset*, *Abort after first failure*, progress, reset report) — the GUI for `CLASS_RESET_COMMAND`; *Reset* reset 1 of 1 object, `RESET_REQUIRED` back to 0, object running. Closed 2026-10-01 (confirmed by user). | `.claude/skills/class-object-engineering/tasks/change-reset-class.md`; `knowledge/manuals/IM36K10L10-01EN.md` §4 |
| ISS-029 | 2026-09-30 | PROCESS (Java) | IM 36K10P11 §10.4 says a new Java class must be reset before objects are added, otherwise the code does not take effect. A Java class inserted with `COMPILE` 1 by `dssqld` ran its first object correctly without any reset (twice, including a full sample reload). | open | Installed behaviour is the reference; keep "reset after changing a class that has objects". Check whether the Engineering Module path (compile without quick load) behaves differently. | `knowledge/manuals/IM36K10P11-01EN.md` §7; `.claude/skills/class-object-engineering/tasks/java-class.md` | | ISS-029 | 2026-09-30 | PROCESS (Java) | IM 36K10P11 §10.4 says a new Java class must be reset before objects are added, otherwise the code does not take effect. A Java class inserted with `COMPILE` 1 by `dssqld` ran its first object correctly without any reset (twice, including a full sample reload). | open | Installed behaviour is the reference; keep "reset after changing a class that has objects". Check whether the Engineering Module path (compile without quick load) behaves differently. | `knowledge/manuals/IM36K10P11-01EN.md` §7; `.claude/skills/class-object-engineering/tasks/java-class.md` |
| ISS-030 | 2026-10-01 | BUS (UMH tools) | `umhman` (hex code → text) crashes with redirected input (bash: segmentation fault 139 with CRLF input; PowerShell `Start-Process -RedirectStandardInput`: 0xC0000005); with an argument it only prompts. `umhtestprog` prints `UMH TEST UTILITY` and crashes (segmentation fault). `umhmsg 8010008` stops with `umh_panic: …umhmsg.exe, license expired` although other tools (`dssqld`, `itmval`) still worked at that time. | closed | Retested 2026-10-01 right after a CI Server restart: all three work — `umhman` with piped input (bash, LF or CRLF; via `cmd <` too), `umhmsg 083A001B text "…"` writes the message to `umhlog.log` (process `UMHMSG_<pid>`, prints nothing), `umhtestprog` runs its self-test. The earlier failures came late in an unlicensed session (licence nearly expired). `itmval -f` (ISS-022) still crashes on a fresh start, so it is a separate fault. Closed 2026-10-01 (confirmed by user). | `.claude/skills/system-management/tasks/bus-utilities.md`; `knowledge/manuals/IM36K10L30-01EN.md` §3 | | ISS-030 | 2026-10-01 | BUS (UMH tools) | `umhman` (hex code → text) crashes with redirected input (bash: segmentation fault 139 with CRLF input; PowerShell `Start-Process -RedirectStandardInput`: 0xC0000005); with an argument it only prompts. `umhtestprog` prints `UMH TEST UTILITY` and crashes (segmentation fault). `umhmsg 8010008` stops with `umh_panic: …umhmsg.exe, license expired` although other tools (`dssqld`, `itmval`) still worked at that time. | closed | Retested 2026-10-01 right after a CI Server restart: all three work — `umhman` with piped input (bash, LF or CRLF; via `cmd <` too), `umhmsg 083A001B text "…"` writes the message to `umhlog.log` (process `UMHMSG_<pid>`, prints nothing), `umhtestprog` runs its self-test. The earlier failures came late in an unlicensed session (licence nearly expired). `itmval -f` (ISS-022) still crashes on a fresh start, so it is a separate fault. Closed 2026-10-01 (confirmed by user). | `.claude/skills/system-management/tasks/bus-utilities.md`; `knowledge/manuals/IM36K10L30-01EN.md` §3 |
| ISS-031 | 2026-10-01 | LICENCE (unlicensed node) | The unlicensed test node counts down about 1 hour of run time per CI Server start (`License time left` in `smd_<node>_LOW_smdsnp_general.log`, 3600 s → `*** license problem : 3 ***`); then `dssqld`/`itmval` stop with `license expired` and `ISF-F-LIC_PROB, DATABASE Service is not licensed`. A PC sleep pauses the count (start 17:25, ran out 09:52 next day). Restart of the CI Service resets it (verified 2026-10-01, back after ~45 s). | closed | Closed 2026-10-01 (confirmed by user): known limitation of the unlicensed test system, documented in system-check. Known limitation of the test system, documented in `system-check`. Plan tests in ≤ 1 h blocks. Close when the user confirms. | `.claude/skills/system-check/SKILL.md` §3 (done) | | ISS-031 | 2026-10-01 | LICENCE (unlicensed node) | The unlicensed test node counts down about 1 hour of run time per CI Server start (`License time left` in `smd_<node>_LOW_smdsnp_general.log`, 3600 s → `*** license problem : 3 ***`); then `dssqld`/`itmval` stop with `license expired` and `ISF-F-LIC_PROB, DATABASE Service is not licensed`. A PC sleep pauses the count (start 17:25, ran out 09:52 next day). Restart of the CI Service resets it (verified 2026-10-01, back after ~45 s). | closed | Closed 2026-10-01 (confirmed by user): known limitation of the unlicensed test system, documented in system-check. Known limitation of the test system, documented in `system-check`. Plan tests in ≤ 1 h blocks. Close when the user confirms. | `.claude/skills/system-check/SKILL.md` §3 (done) |
@ -142,7 +142,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-126 | 2026-10-08 | ITEM (`ITEM_VAL` fields) | R1.05 `ITEM_VAL` has three new fields: `ENG_UNIT`, `SCALE_HIGH_LIMIT`, `SCALE_LOW_LIMIT`, not in any manual. Values not read yet (probably the item's units and scale limits). | open | 2026-10-09: readable in RQL on R1.05; ENG_UNIT matches ITEM_DF for the item checked; scale limits unclear (ISS-167). Next: export `ITEM_VAL` of a test item read-only and compare with `ITEM_DF`. Relevant to RQL (`reporting`). | `.claude/skills/item-engineering/SKILL.md`, C10 summary, `.claude/skills/system-management/tasks/read-write-item.md` (done); `.claude/skills/reporting` (open) | | ISS-126 | 2026-10-08 | ITEM (`ITEM_VAL` fields) | R1.05 `ITEM_VAL` has three new fields: `ENG_UNIT`, `SCALE_HIGH_LIMIT`, `SCALE_LOW_LIMIT`, not in any manual. Values not read yet (probably the item's units and scale limits). | open | 2026-10-09: readable in RQL on R1.05; ENG_UNIT matches ITEM_DF for the item checked; scale limits unclear (ISS-167). Next: export `ITEM_VAL` of a test item read-only and compare with `ITEM_DF`. Relevant to RQL (`reporting`). | `.claude/skills/item-engineering/SKILL.md`, C10 summary, `.claude/skills/system-management/tasks/read-write-item.md` (done); `.claude/skills/reporting` (open) |
| ISS-127 | 2026-10-08 | TUTORIAL (CENTUM VP, HIS-TSE) | IM 36K10G10 ch. 14 (virtual test with the CENTUM VP FCS simulator, `tls\vagw\…\Controlbusemulation.exe`) and ch. 15 (HIS-TSE connection through RDP Connect, `.rdp` code signing, RD gateway) are new in R1.04/R1.05. | open | Not tested: no `tls\vagw`, no CENTUM VP or HIS-TSE on the R1.05 test server. | `knowledge/manuals/IM36K10G10-01EN.md`, `.claude/skills/item-engineering/SKILL.md` (done) | | ISS-127 | 2026-10-08 | TUTORIAL (CENTUM VP, HIS-TSE) | IM 36K10G10 ch. 14 (virtual test with the CENTUM VP FCS simulator, `tls\vagw\…\Controlbusemulation.exe`) and ch. 15 (HIS-TSE connection through RDP Connect, `.rdp` code signing, RD gateway) are new in R1.04/R1.05. | open | Not tested: no `tls\vagw`, no CENTUM VP or HIS-TSE on the R1.05 test server. | `knowledge/manuals/IM36K10G10-01EN.md`, `.claude/skills/item-engineering/SKILL.md` (done) |
| ISS-128 | 2026-10-08 | ENGINEERING MODULE (Tools menu) | IM 36K10C10 §1.1 has a new *Tools* menu with *OPC UA Information Model Mapper*; not in the revision table. Same mapper as in skill `data-access`. | closed | Confirmed in the installed menu definition (V3). Close when the user confirms. | `knowledge/manuals/IM36K10C10-01EN.md` (done) | | ISS-128 | 2026-10-08 | ENGINEERING MODULE (Tools menu) | IM 36K10C10 §1.1 has a new *Tools* menu with *OPC UA Information Model Mapper*; not in the revision table. Same mapper as in skill `data-access`. | closed | Confirmed in the installed menu definition (V3). Close when the user confirms. | `knowledge/manuals/IM36K10C10-01EN.md` (done) |
| ISS-129 | 2026-10-08 | ITEM (blocking, string writes on R1.05) | Blocking/unblocking (`ITEM_DF.BLOCKED`, `itmval -p` with and without `-o`) and string-item writes/truncation not re-tested on R1.05; definitions identical to R1.03. | open | Awaits the user's decision to test on the shared server with temporary sample items (V9). | `.claude/skills/item-engineering/tasks/block-item.md`, `string-items.md` (done) | | ISS-129 | 2026-10-08 | ITEM (blocking, string writes on R1.05) | Blocking/unblocking (`ITEM_DF.BLOCKED`, `itmval -p` with and without `-o`) and string-item writes/truncation not re-tested on R1.05; definitions identical to R1.03. | closed | 2026-10-09: re-tested on R1.05 with approval (V9): same behaviour as R1.03 (blk/ublk, silent ignore, 99 characters + status 12). Awaits the user's decision to test on the shared server with temporary sample items (V9). | `.claude/skills/item-engineering/tasks/block-item.md`, `string-items.md` (done) |
| ISS-132 | 2026-10-09 | ALARM (ASPA manual) | IM 36K10E30 4th ed. §3.2 KPI grid (R1.04): the count charts are labelled *In Time*, *Too Late*, *Not Ackn*, *Nuisance*, and the third chart is corrected to alarms **not** acknowledged within the analysed period (R1.03 said acknowledged). Not in the revision table. | closed | From docs; ASPA GUI not opened. Close when the user confirms. | `knowledge/manuals/IM36K10E30-01EN.md` (done); `knowledge/version-differences.md` (done) | | ISS-132 | 2026-10-09 | ALARM (ASPA manual) | IM 36K10E30 4th ed. §3.2 KPI grid (R1.04): the count charts are labelled *In Time*, *Too Late*, *Not Ackn*, *Nuisance*, and the third chart is corrected to alarms **not** acknowledged within the analysed period (R1.03 said acknowledged). Not in the revision table. | closed | From docs; ASPA GUI not opened. Close when the user confirms. | `knowledge/manuals/IM36K10E30-01EN.md` (done); `knowledge/version-differences.md` (done) |
| ISS-133 | 2026-10-09 | ALARM (`ALARM_ATTRIBUTE_TEMP_DF`) | New in R1.05: same fields as `ALARM_ATTRIBUTE_DF`, described in its header as a temporary store for item-specific alarm attributes; no data file, no index; 0 records on the R1.05 test server; used by the RESTful API server. No manual mentions it. | closed | Treat as internal: do not load, export or back it up. Close when the user confirms. | `.claude/skills/alarm-management/tasks/alarm-checks.md`, `knowledge/manuals/IM36K10L15-01EN.md` (done) | | ISS-133 | 2026-10-09 | ALARM (`ALARM_ATTRIBUTE_TEMP_DF`) | New in R1.05: same fields as `ALARM_ATTRIBUTE_DF`, described in its header as a temporary store for item-specific alarm attributes; no data file, no index; 0 records on the R1.05 test server; used by the RESTful API server. No manual mentions it. | closed | Treat as internal: do not load, export or back it up. Close when the user confirms. | `.claude/skills/alarm-management/tasks/alarm-checks.md`, `knowledge/manuals/IM36K10L15-01EN.md` (done) |
| ISS-134 | 2026-10-09 | ALARM (`alnsms.sup` defaults) | R1.05 `alnsms.sup`/`.tpl` add format units `SECTION` and `NAME` and change the active defaults (`BODY_FORMAT` with `SECTION,120`; `ALARM_PREFIX = PRIO`, R1.03 `<ALARM>`). The help still describes `ALARM_PREFIX` as a plain string, so the prefix may be the literal text "PRIO". Not in IM 36K10L15. | open | Not tested (`alnsms` not started; no GSM modem). | `knowledge/manuals/IM36K10L15-01EN.md`, `.claude/skills/alarm-management/tasks/alarm-checks.md` (done) | | ISS-134 | 2026-10-09 | ALARM (`alnsms.sup` defaults) | R1.05 `alnsms.sup`/`.tpl` add format units `SECTION` and `NAME` and change the active defaults (`BODY_FORMAT` with `SECTION,120`; `ALARM_PREFIX = PRIO`, R1.03 `<ALARM>`). The help still describes `ALARM_PREFIX` as a plain string, so the prefix may be the literal text "PRIO". Not in IM 36K10L15. | open | Not tested (`alnsms` not started; no GSM modem). | `knowledge/manuals/IM36K10L15-01EN.md`, `.claude/skills/alarm-management/tasks/alarm-checks.md` (done) |
@ -163,7 +163,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-155 | 2026-10-09 | PROCESS (OPC UA method system classes) | R1.05 installs Java classes `UAC_MTD_JBASE` and `UAS_MTD_JBASE` next to `AOG_BASE`, `AOG_JBASE`, `PRC_STATUS_BASE`. `UAC_MTD_JBASE` prompts for the method key as `Station:Method` and for argument lists `/type/description`; data-access `opcua-client.md` §7 says to set `MTD_KEY` to the method name. | open | Check which `MTD_KEY` form the client needs when §7 is practiced. | class-object skill, L10, P11 summaries (done); `.claude/skills/data-access/tasks/opcua-client.md` §7, `knowledge/manuals/IM36K10L45-01EN.md` (open) | | ISS-155 | 2026-10-09 | PROCESS (OPC UA method system classes) | R1.05 installs Java classes `UAC_MTD_JBASE` and `UAS_MTD_JBASE` next to `AOG_BASE`, `AOG_JBASE`, `PRC_STATUS_BASE`. `UAC_MTD_JBASE` prompts for the method key as `Station:Method` and for argument lists `/type/description`; data-access `opcua-client.md` §7 says to set `MTD_KEY` to the method name. | open | Check which `MTD_KEY` form the client needs when §7 is practiced. | class-object skill, L10, P11 summaries (done); `.claude/skills/data-access/tasks/opcua-client.md` §7, `knowledge/manuals/IM36K10L45-01EN.md` (open) |
| ISS-156 | 2026-10-09 | PROCESS (installed files R1.05) | Java runtime 11.0.18 → 11.0.28; `jopcsrv.jar` rebuilt with the same classes and public `fasttools.processfast` API; Java process start scripts add `tls\exe\lib\*`; `process_start/stop.cmd` call `?*_process_start/stop.cmd` (ISS-121). `opc.sup`, `prc.sup`, PROCESS dataset definitions and templates identical. | closed | Verified read-only. Close when the user confirms. | L10, P11 summaries, class-object skill (done) | | ISS-156 | 2026-10-09 | PROCESS (installed files R1.05) | Java runtime 11.0.18 → 11.0.28; `jopcsrv.jar` rebuilt with the same classes and public `fasttools.processfast` API; Java process start scripts add `tls\exe\lib\*`; `process_start/stop.cmd` call `?*_process_start/stop.cmd` (ISS-121). `opc.sup`, `prc.sup`, PROCESS dataset definitions and templates identical. | closed | Verified read-only. Close when the user confirms. | L10, P11 summaries, class-object skill (done) |
| ISS-157 | 2026-10-09 | PROCESS (`opcdbg` Java executor) | On R1.05 `opcdbg 0 4` with piped answers for `OPCJEXE` gave no output within 40 s (stopped); `OPCEXE1` and the database check worked as on R1.03. | open | Awaiting user verification: run interactively (V14). | `.claude/skills/class-object-engineering/tasks/opcdbg-checks.md`, L10 summary (done) | | ISS-157 | 2026-10-09 | PROCESS (`opcdbg` Java executor) | On R1.05 `opcdbg 0 4` with piped answers for `OPCJEXE` gave no output within 40 s (stopped); `OPCEXE1` and the database check worked as on R1.03. | open | Awaiting user verification: run interactively (V14). | `.claude/skills/class-object-engineering/tasks/opcdbg-checks.md`, L10 summary (done) |
| ISS-158 | 2026-10-09 | PROCESS (change / reset class on R1.05) | Change class, reset class, extended reset, ISS-028/029, the refused object, PRINT `%%` and runtime attribute change not re-tested on R1.05 (needs the sample loaded again on the shared server). | open | Awaiting decision (V15). Definitions and manuals unchanged. | `.claude/skills/class-object-engineering/tasks/change-reset-class.md` (done) | | ISS-158 | 2026-10-09 | PROCESS (change / reset class on R1.05) | Change class, reset class, extended reset, ISS-028/029, the refused object, PRINT `%%` and runtime attribute change not re-tested on R1.05 (needs the sample loaded again on the shared server). | closed | 2026-10-09: re-tested on R1.05 with approval (V15): compile → RESET_REQUIRED 1, old code until reset; opcdbg reset works; attribute change works. Awaiting decision (V15). Definitions and manuals unchanged. | `.claude/skills/class-object-engineering/tasks/change-reset-class.md` (done) |
| ISS-159 | 2026-10-09 | PROCESS (Java API not in P11) | Installed `ProcessClass` public methods not in IM 36K10P11: `getHistory(...)` (5 overloads), `defineIntegerAttributeForPrompt` / `defineDoubleAttributeForPrompt`, `sendAndReceiveMessage(...)`, `getDssSession()` (release notes only). Same on R1.03 and R1.05. | open | Untested; documented as "test before relying on them". | P11 summary, `.claude/skills/class-object-engineering/tasks/java-class.md` (done) | | ISS-159 | 2026-10-09 | PROCESS (Java API not in P11) | Installed `ProcessClass` public methods not in IM 36K10P11: `getHistory(...)` (5 overloads), `defineIntegerAttributeForPrompt` / `defineDoubleAttributeForPrompt`, `sendAndReceiveMessage(...)`, `getDssSession()` (release notes only). Same on R1.03 and R1.05. | open | Untested; documented as "test before relying on them". | P11 summary, `.claude/skills/class-object-engineering/tasks/java-class.md` (done) |
| ISS-160 | 2026-10-09 | HAC (extension hooks) | R1.05 `hacw_activate.cmd` calls `?*_hacw_activate.cmd` after all services start (before HAC status items and ACTIVE); `hacw_deactivate.cmd` calls `?*_hacw_deactivate.cmd` before DURM and services stop. `hacw_standby`/`hacw_stop` have no hook, so on a HAC server (`ci_start`/`ci_stop` replaced by these) `?*_ci_start`/`?*_ci_stop` hooks do not run. Not in J20. | open | Not tested (needs a licensed redundant pair). Part of ISS-121. | `.claude/skills/high-availability/**`, `knowledge/manuals/IM36K10J20-01EN.md` (done) | | ISS-160 | 2026-10-09 | HAC (extension hooks) | R1.05 `hacw_activate.cmd` calls `?*_hacw_activate.cmd` after all services start (before HAC status items and ACTIVE); `hacw_deactivate.cmd` calls `?*_hacw_deactivate.cmd` before DURM and services stop. `hacw_standby`/`hacw_stop` have no hook, so on a HAC server (`ci_start`/`ci_stop` replaced by these) `?*_ci_start`/`?*_ci_stop` hooks do not run. Not in J20. | open | Not tested (needs a licensed redundant pair). Part of ISS-121. | `.claude/skills/high-availability/**`, `knowledge/manuals/IM36K10J20-01EN.md` (done) |
| ISS-161 | 2026-10-09 | HAC (installed files R1.05) | `hacw_hmi.cmd` adds `tls\exe\lib\*` to the class path; HAC executables, `isfjrn`, `ismflush`, `jhacsrv.jar` rebuilt (same names). `hac.sup`, `hac_ees.sup`, `haccache.sup`, templates and the other HAC scripts identical to R1.03; ISS-053 still applies. | closed | Information. Close when the user confirms. | `knowledge/manuals/IM36K10J20-01EN.md`, `.claude/skills/high-availability/tasks/*` (done) | | ISS-161 | 2026-10-09 | HAC (installed files R1.05) | `hacw_hmi.cmd` adds `tls\exe\lib\*` to the class path; HAC executables, `isfjrn`, `ismflush`, `jhacsrv.jar` rebuilt (same names). `hac.sup`, `hac_ees.sup`, `haccache.sup`, templates and the other HAC scripts identical to R1.03; ISS-053 still applies. | closed | Information. Close when the user confirms. | `knowledge/manuals/IM36K10J20-01EN.md`, `.claude/skills/high-availability/tasks/*` (done) |

View file

@ -57,13 +57,13 @@ screenshot.
| `history-management` | C40 §4.2 (REST API, pyTOOLS; C API dropped); L20, L35 wording only | re-checked (from docs and file hashes) | 2026-10-08: history setup files and dataset definitions identical to R1.03; REST/pyTOOLS cross-linked to `data-access` / P40. **Awaiting user verification:** `hisdbg` read-only options and the changed start scripts (V6; ISS-100, 101). **Not tested:** storage groups, aggregation, `ITEM_HISTORY` reads (restart needed, ISS-103); archive. Note: `tlsdnetapi.dll` (.NET API) is no longer in `tls\exe` on R1.05. | | `history-management` | C40 §4.2 (REST API, pyTOOLS; C API dropped); L20, L35 wording only | re-checked (from docs and file hashes) | 2026-10-08: history setup files and dataset definitions identical to R1.03; REST/pyTOOLS cross-linked to `data-access` / P40. **Awaiting user verification:** `hisdbg` read-only options and the changed start scripts (V6; ISS-100, 101). **Not tested:** storage groups, aggregation, `ITEM_HISTORY` reads (restart needed, ISS-103); archive. Note: `tlsdnetapi.dll` (.NET API) is no longer in `tls\exe` on R1.05. |
| `portal-setup` | R10 §3.1 ISO, §3.3; R20 punctuation only | re-checked (read-only) | 2026-10-08: setup-file reads, web ports 8080/8443, Remote Connect page, security headers and CSP verified on R1.05; new `jwuiisg.sup` keywords and `dur.sup` gateway core documented (ISS-108–111). **Awaiting user verification:** Setup File Editor GUI (V7; ISS-112, 113). **Not tested:** separate CI Portal node, gateway core, setup-file changes (shared server), CSP effect on displays. | | `portal-setup` | R10 §3.1 ISO, §3.3; R20 punctuation only | re-checked (read-only) | 2026-10-08: setup-file reads, web ports 8080/8443, Remote Connect page, security headers and CSP verified on R1.05; new `jwuiisg.sup` keywords and `dur.sup` gateway core documented (ISS-108–111). **Awaiting user verification:** Setup File Editor GUI (V7; ISS-112, 113). **Not tested:** separate CI Portal node, gateway core, setup-file changes (shared server), CSP effect on displays. |
| `system-management` | J10 §2.9.1, new §3.2.6 gateway (unlisted), §5.1; L30 wording; L50 dataset rename; P30 none | re-checked (read-only) | 2026-10-08: exports, filters, `-f`, `dsschk -e -v`, `durwfp`, `umhman`, `itmval -g`, `itmdbg`, DSS compiler check re-tested on R1.05; `dssqld -i/-r`, `itmval -p` from the sample test (V4). ISS-116–123. **Awaiting user verification:** `ithloahis` (needs the full sample with history), start-script hooks (V8; ISS-121). **Not tested:** monitoring processes, gateway core. | | `system-management` | J10 §2.9.1, new §3.2.6 gateway (unlisted), §5.1; L30 wording; L50 dataset rename; P30 none | re-checked (read-only) | 2026-10-08: exports, filters, `-f`, `dsschk -e -v`, `durwfp`, `umhman`, `itmval -g`, `itmdbg`, DSS compiler check re-tested on R1.05; `dssqld -i/-r`, `itmval -p` from the sample test (V4). ISS-116–123. **Awaiting user verification:** `ithloahis` (needs the full sample with history), start-script hooks (V8; ISS-121). **Not tested:** monitoring processes, gateway core. |
| `item-engineering` | C10 §2.2; unlisted: C10 §1.1 Tools menu, string length 200 bytes (C10, G10); G10 §9.2, ch. 14–15 | re-checked (read-only) | 2026-10-08: item/section/sub-item definitions and `itm.sup` identical to R1.03; `ITEM_VAL` has 3 new fields (ISS-126); sample items and sub-items loaded and worked on R1.05 (V4). **Awaiting decision:** blocking and string writes on the shared server (V9; ISS-129). **Not tested:** G10 ch. 14–15 (no CENTUM VP, ISS-127). | | `item-engineering` | C10 §2.2; unlisted: C10 §1.1 Tools menu, string length 200 bytes (C10, G10); G10 §9.2, ch. 14–15 | re-checked (read-only) | 2026-10-08: item/section/sub-item definitions and `itm.sup` identical to R1.03; `ITEM_VAL` has 3 new fields (ISS-126); sample items and sub-items loaded and worked on R1.05 (V4). Blocking and string writes re-tested on R1.05 (V9, 2026-10-09). **Not tested:** G10 ch. 14–15 (no CENTUM VP, ISS-127). |
| `alarm-management` | none listed; unlisted E30 KPI labels and corrected chart (ISS-132) | re-checked (read-only) | 2026-10-09: setup files, templates and definitions identical to R1.03 except the start-script hooks, `alnsms.sup` defaults (ISS-134) and internal `ALARM_ATTRIBUTE_TEMP_DF` (ISS-133); `almdbg`/`alhdbg` read-only, ALH 52 weeks default (ISS-135); load rule for the shared server (ISS-136). **Awaiting user verification:** alarm raise/ack/delay/repeat, INFO event (V10). **Not tested:** external alarms, notification, shelving, ASPA GUI, custom acknowledgement. | | `alarm-management` | none listed; unlisted E30 KPI labels and corrected chart (ISS-132) | re-checked (read-only) | 2026-10-09: setup files, templates and definitions identical to R1.03 except the start-script hooks, `alnsms.sup` defaults (ISS-134) and internal `ALARM_ATTRIBUTE_TEMP_DF` (ISS-133); `almdbg`/`alhdbg` read-only, ALH 52 weeks default (ISS-135); load rule for the shared server (ISS-136). Alarm raise/ack/delay/repeat and INFO event re-tested on R1.05 (V10, 2026-10-09). **Not tested:** external alarms, notification, shelving, ASPA GUI, custom acknowledgement. |
| `audit-trail` | none (full diff clean) | re-checked (read-only) | 2026-10-09: processes, ADT group, 499 classifiers (36 new, ISS-141), definitions, setup files and scripts compared; RQL read of `AUDIT_TRAIL`; `APPROVAL_REASON`/`APPROVER` present and filled (ISS-140); hooks (ISS-142). **Awaiting user verification:** ADTLOG with the new units, selection on approval fields, custom acknowledgement record (V11). **Not tested:** PENDING (no Vnet), classifier STORAGE change. | | `audit-trail` | none (full diff clean) | re-checked (read-only) | 2026-10-09: processes, ADT group, 499 classifiers (36 new, ISS-141), definitions, setup files and scripts compared; RQL read of `AUDIT_TRAIL`; `APPROVAL_REASON`/`APPROVER` present and filled (ISS-140); hooks (ISS-142). **Awaiting user verification:** ADTLOG with the new units, selection on approval fields, custom acknowledgement record (V11). **Not tested:** PENDING (no Vnet), classifier STORAGE change. |
| `authorization` | none (J40 contact info only; C10 §2 `CI_NO_LOGIN`) | re-checked (read-only) | 2026-10-09: `dssana.sup` all tabs, USER/AUTH/SCHEME/API_KEYS definitions, 203 actions (ISS-146), 250 action fields and upgrade tool (ISS-147), new login interfaces (ISS-148), API keys (ISS-151), AD/SSO files (ISS-153). **Awaiting user verification:** `MAX_UI_PER_CLIENT` (V16), *Add API Key* GUI, users/groups and ISS-072/073 on a non-shared system (ISS-152). **Not tested:** AD, SPNEGO, upgrade merge (ISS-149). | | `authorization` | none (J40 contact info only; C10 §2 `CI_NO_LOGIN`) | re-checked (read-only) | 2026-10-09: `dssana.sup` all tabs, USER/AUTH/SCHEME/API_KEYS definitions, 203 actions (ISS-146), 250 action fields and upgrade tool (ISS-147), new login interfaces (ISS-148), API keys (ISS-151), AD/SSO files (ISS-153). **Awaiting user verification:** `MAX_UI_PER_CLIENT` (V16), *Add API Key* GUI, users/groups and ISS-072/073 on a non-shared system (ISS-152). **Not tested:** AD, SPNEGO, upgrade merge (ISS-149). |
| `class-object-engineering` | none listed; unlisted P11 §10.2 `createSection` fix (ISS-154) | re-checked (read-only) | 2026-10-09: definitions, `opc.sup`, `prc.sup`, templates and public Java API identical; Java 11.0.28, `tls\exe\lib`, hooks (ISS-156); OPC UA method system classes preinstalled (ISS-155); undocumented Java methods (ISS-159); `opcdbg` database check and OPCEXE1 info OK. **Awaiting user verification:** `OPCJEXE` statistics (V14). **Awaiting decision:** change/reset class re-test (V15). Sample classes `CIENG_INCR`, `CIENG_TANK` (traditional) and `CIENG_JFLOW` (Java) loaded and ran correctly on R1.05 (V4, 2026-10-08). | | `class-object-engineering` | none listed; unlisted P11 §10.2 `createSection` fix (ISS-154) | re-checked (read-only) | 2026-10-09: definitions, `opc.sup`, `prc.sup`, templates and public Java API identical; Java 11.0.28, `tls\exe\lib`, hooks (ISS-156); OPC UA method system classes preinstalled (ISS-155); undocumented Java methods (ISS-159); `opcdbg` database check and OPCEXE1 info OK. **Awaiting user verification:** `OPCJEXE` statistics (V14). Change/reset class and attribute change re-tested on R1.05 (V15, 2026-10-09; ISS-028 still holds). Sample classes `CIENG_INCR`, `CIENG_TANK` (traditional) and `CIENG_JFLOW` (Java) loaded and ran correctly on R1.05 (V4, 2026-10-08). |
| `high-availability` | none (J20 contact info only) | re-checked (read-only) | 2026-10-09: HAC files compared (ISS-161), activate/deactivate hooks (ISS-160), A50 PubSub precaution (ISS-162); `hac-checks` read-only on R1.05 (single server). **Not tested:** redundant pair, switchover, mirror, history merge, recovery, journaling (no licensed pair). | | `high-availability` | none (J20 contact info only) | re-checked (read-only) | 2026-10-09: HAC files compared (ISS-161), activate/deactivate hooks (ISS-160), A50 PubSub precaution (ISS-162); `hac-checks` read-only on R1.05 (single server). **Not tested:** redundant pair, switchover, mirror, history merge, recovery, journaling (no licensed pair). |
| `reporting` | none listed (E10 one sentence removed, ISS-166) | re-checked (read-only) | 2026-10-09: report definitions, setup and `.rpt` files identical; hooks (ISS-121); 28 system reports, 6 factory destinations; interactive RQL re-run, new `ITEM_VAL` fields (ISS-126, 167); `API_KEYS_DF` not queried (ISS-168). **Awaiting user verification:** generate/print/delete, item trigger, `rptstp`, SPOOL (V12). **Not tested:** Excel Add-in (no Office), report component, hardcopy printers. | | `reporting` | none listed (E10 one sentence removed, ISS-166) | re-checked (read-only) | 2026-10-09: report definitions, setup and `.rpt` files identical; hooks (ISS-121); 28 system reports, 6 factory destinations; interactive RQL re-run, new `ITEM_VAL` fields (ISS-126, 167); `API_KEYS_DF` not queried (ISS-168). Generate, print, item trigger, `rptstp`, SPOOL re-tested on R1.05 (V12, 2026-10-09). **Not tested:** Excel Add-in (no Office), report component, hardcopy printers. |
| `examples/CI-Eng-Sample` | — | re-tested | Reduced load (no history group, user or layouts) loaded, tested and removed on the shared R1.05 server 2026-10-08 (V4); scripts in `shared\`. Full load not tested on R1.05. | | `examples/CI-Eng-Sample` | — | re-tested | Reduced load (no history group, user or layouts) loaded, tested and removed on the shared R1.05 server 2026-10-08 (V4); scripts in `shared\`. Full load not tested on R1.05. |
## Manuals, in working order ## Manuals, in working order

View file

@ -120,7 +120,18 @@ Needs admin and a CI Server restart, so only on a non-shared system or with appr
`cieng_integration_start.cmd` (one line starting `intcpumon -n intcpumon`) in `tls\com`, `cieng_integration_start.cmd` (one line starting `intcpumon -n intcpumon`) in `tls\com`,
restart, check `durwfp -p intcpumon -t 0` returns 0, remove the file and restart again. restart, check `durwfp -p intcpumon -t 0` returns 0, remove the file and restart again.
### V9. Blocking and string writes (skill `item-engineering`; ISS-129) ### V9, V10, V12, V15: done 2026-10-09 on the shared R1.05 test server
Run with the user's approval as one session (`examples/CI-Eng-Sample/shared/test_r105_writes.ps1`):
sample sections, items, sub-items, alarm definitions, classes/objects, item alarm, printer and
reports plus a string test item and a loop report were loaded (0 errors), tested, removed (0
errors). A before/after snapshot of all touched datasets, the `tls\com`, `sup`, `sav`, `lst` and
`pki` folders and the process list was identical after deleting the test's temporary files
(`dss_*.tmp`, three `opc_t*` compile/reset files). Not removable: the test's alarm history
events, audit-trail records and `umhlog.log` lines. All results matched R1.03; details in the task
files.
### V9. Blocking and string writes (skill `item-engineering`; ISS-129): **done 2026-10-09**
Needs a decision: temporary sample items on the shared server, block/unblock with `dssqld -m`, Needs a decision: temporary sample items on the shared server, block/unblock with `dssqld -m`,
`itmval -p` with and without `-o`, a 120-character write to a string item of length 100 `itmval -p` with and without `-o`, a 120-character write to a string item of length 100
@ -133,12 +144,12 @@ approval on the shared one, unless marked read-only.
| # | Skill / task | What | Kind | | # | Skill / task | What | Kind |
|---|---|---|---| |---|---|---|---|
| V10 | `alarm-management` `item-alarming.md` §2–5, `alarm-checks.md` §4 | Alarm raise, acknowledge, delay/repeat on a temporary sample item; INFO event (`almdbg` 16) | writes, approval | | V10 | `alarm-management` `item-alarming.md` §2–5, `alarm-checks.md` §4 | Alarm raise, acknowledge, delay/repeat on a temporary sample item; INFO event (`almdbg` 16) | **done 2026-10-09** |
| V11 | `audit-trail` `configure-audit.md`, `read-audit-trail.md` §1a | ADTLOG with `APPRR`/`APPR`; selection expression on `appr`; custom acknowledgement record | admin / writes, approval | | V11 | `audit-trail` `configure-audit.md`, `read-audit-trail.md` §1a | ADTLOG with `APPRR`/`APPR`; selection expression on `appr`; custom acknowledgement record | admin / writes, approval |
| V12 | `reporting` `define-reports.md`, `report-checks.md`, `rql-interactive.md` §3 | Generate / print / delete with the sample, item trigger, `rptstp`, SPOOL to CSV; ISS-167 and ISS-168 tests | writes, approval | | V12 | `reporting` `define-reports.md`, `report-checks.md`, `rql-interactive.md` §3 | Generate / print with the sample, item trigger, `rptstp`, SPOOL to CSV | **done 2026-10-09**; ISS-167 / ISS-168 still open (non-shared system) |
| V13 | `authorization` `users-groups.md` | Users/groups load and remove, ISS-072/073 re-test; *Add API Key* GUI (look only) | non-shared system | | V13 | `authorization` `users-groups.md` | Users/groups load and remove, ISS-072/073 re-test; *Add API Key* GUI (look only) | non-shared system |
| V14 | `class-object-engineering` `opcdbg-checks.md` | `opcdbg 0 4`, Enter, `OPCJEXE`, `1`, `-1` twice, interactively (ISS-157) | read-only | | V14 | `class-object-engineering` `opcdbg-checks.md` | `opcdbg 0 4`, Enter, `OPCJEXE`, `1`, `-1` twice, interactively (ISS-157) | read-only |
| V15 | `class-object-engineering` `change-reset-class.md` | Change/reset class re-test with the sample (ISS-158) | writes, approval | | V15 | `class-object-engineering` `change-reset-class.md` | Change/reset class re-test with the sample (ISS-158) | **done 2026-10-09** |
| V16 | `authorization` `login-methods.md` | Was `MAX_UI_PER_CLIENT` in `dssana.sup` changed by hand on the test server? (ISS-150) | question | | V16 | `authorization` `login-methods.md` | Was `MAX_UI_PER_CLIENT` in `dssana.sup` changed by hand on the test server? (ISS-150) | question |
| V17 | `pytools` `setup-first-script.md` §5 | Python 3.12 64-bit on a test Core, `import dss`, first read-only script, `PY_DSS_NOT_LOGGED_IN` check (ISS-178) | test Core with Python | | V17 | `pytools` `setup-first-script.md` §5 | Python 3.12 64-bit on a test Core, `import dss`, first read-only script, `PY_DSS_NOT_LOGGED_IN` check (ISS-178) | test Core with Python |