Phase 0-1: system management skills and CI-Eng-Sample project #2

Merged
cliu merged 2 commits from docs/phase-0-1-system-management into main 2026-09-30 14:04:38 +10:00
30 changed files with 699 additions and 55 deletions
Showing only changes of commit 1c3558c37c - Show all commits

View file

@ -71,6 +71,12 @@ prompt. Setup files (`*.sup`) are plain text (CRLF); edit them with the Setup Fi
`tls\exe\ciserv.exe`). From a non-elevated shell `Start-Service StartCIServer` fails with
"Cannot open StartCIServer service". Start it from an elevated prompt:
`Start-Service StartCIServer` (or Services › CI Service › Start).
- **Unlicensed systems shut down after about 1 hour.** All CI Server processes exit, the
`StartCIServer` service still shows *Running*, and every tool fails with
`umh_panic: <tool>, license expired`. To recover, **stop then start** the CI Service
(elevated): `Stop-Service StartCIServer` then `Start-Service StartCIServer`. Before a long
task on an unlicensed system, note the start time (`(Get-Process ciserv).StartTime`) and
restart first if the hour is nearly up.
## 4. Time synchronization

View file

@ -2,8 +2,8 @@
name: system-management
description: >-
CI Server R1.03 system management and command-line tools. Use when the user wants
to stop CI Server, export or
import dataset contents (dssqld), read or write item values (itmval), load or import history,
to stop CI Server, export dataset contents, load or remove records with quick load files
(dssqld, .qli), create sections or items in bulk, read or write item values or limits (itmval), load or import history,
check database consistency (dsschk), monitor processes/CPU/disk/network, back up or migrate
a system, tune or debug CI Server, or plan a system layout (standalone, separate portal, HAC,
host-to-host, enterprise) or time synchronization. Source IM 36K10J10-01EN.
@ -24,4 +24,10 @@ Rules for every task:
| Task | File | Status |
|---|---|---|
| Export dataset contents / dump the data dictionary | `tasks/export-dataset.md` | verified |
| Export dataset contents (whole or filtered) / dump the data dictionary | `tasks/export-dataset.md` | verified |
| Load or remove records with quick load files (`.qli`), e.g. sections and items | `tasks/load-remove-records.md` | verified |
| Read / write item values and read limits | `tasks/read-write-item.md` | verified |
| Load history from CSV (`ithloahis`) and read history back | `tasks/load-history.md` | verified |
| Monitor CPU, disk, network, processes; run a command on an item change | `tasks/monitoring-processes.md` | verified |
| Database consistency check (`dsschk`) | `tasks/consistency-check.md` | verified (check only) |
| Tuning checks: limits and health snapshots | `tasks/tuning-checks.md` | verified (read-only) |

View file

@ -0,0 +1,39 @@
---
task: Database consistency check (dsschk)
version: R1.03
source: IM 36K10J10-01EN §4.1.1; practiced on the test system 2026-09-30
status: verified (check only)
---
# Database consistency check (dsschk)
Needs CI Server running. Checking is read-only; **repair (`-r`) changes the database**:
back up first and ask the user.
## Check
```
dsschk -e -v > dsschk.out
```
- `-e` extended check: also compares the duplicated datasets on this node (e.g. item
definitions copied by ITEM and EQUIPMENT Services). This is the useful check on a
**single-node** system.
- `-v` verbose. Output lists `DSSP-I-CDS_START` / `DSSP-I-CDS_END` per dataset (228 on the
test system) and any problems; the same messages go to `%TLS_LOG_PATH%\umhlog.log`.
- `-d <dataset>` checks one dataset; `-n <node>` one node.
- Plain `dsschk` (no `-e`) only compares copies **between nodes**, so on a single node it
prints nothing.
Look for warnings or errors: search the output for `-W-`, `-E-` or `-F-`. None = consistent.
## Repair (not yet practiced)
From IM 36K10J10 §4.1.1: run `dsschk -r` until no more inconsistencies are reported (or the
same ones repeat), then `dsschk -e`, then `dsschk -e -r` (possibly twice). Read the output
carefully; some problems need manual work.
## ISAM files (not yet practiced)
`ismchk <database file>` checks one ISAM file; `ismkfr [-c] [-r] [-s] [-d] <file>` rebuilds
key files. Both need the file name (without it: `usage: ismchk data_base_name`).

View file

@ -47,6 +47,24 @@ description). Search it to find which dataset holds what, e.g. the version field
## Filtered exports
`dssqld -e <output> <filter>.qli` exports using a filter file with `@<DATASET>`, `@FIELD`
and `@SELECT` keywords (IM 36K10J10 §5.6). The exact filter syntax is **not yet verified**;
export the whole dataset and filter the CSV instead until it is.
Export only matching records with a filter file (IM 36K10L50 §3.6, verified 2026-09-30):
```
@SELECT
'GROUP_NAME = "CIENG_EVENT"'
@HIS_GROUP_DF
```
```
dssqld -e <output>.qli <filter>.qli [-c] -l <listing>.lst
```
- `@SELECT`, then the filter in **single quotes** with strings in double quotes, then
`@<DATASET>`. The filter applies only to the next dataset. Operators: `=`, `!=`, `<`, `>`,
`and`.
- Some datasets (e.g. `ITEM_HISTORY`, `ITEM_VAL`, `ALARM_CHRONO`) are not exported unless
named explicitly (`NO-EXPORT` list in `dssqld.sup`).
- `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range
(see `load-history.md`).
- `%TLS_DAT_PATH%\dss_export.qli` is Yokogawa's own filter file for exporting all engineering
definitions (`dssqld -e out.qli dss_export.qli`); it also shows `@MACRO` usage.

View file

@ -0,0 +1,77 @@
---
task: Load item history from CSV (ithloahis) and read history back (dssqld)
version: R1.03
source: IM 36K10J10-01EN §2.9.2; IM 36K10L50-01EN §3.6; practiced with CI-Eng-Sample 2026-09-30
status: verified
---
# Load item history (ithloahis) and read it back
**Writes to the history database.** Needs CI Server running and the items linked to an
item storage group of type *Event/Item* or *Event/Event*. The sample project provides
`CIENG_EVENT` with `CI-Eng-Sample.TANK1.LEVEL` and `.INFLOW`.
## Before loading
- A **new** storage group stores nothing until CI Server has been restarted (stop, then start
the CI Service). Restart after creating a group.
- Only samples dated **after the start of the current storage unit** were stored; older ones
were silently skipped (see `knowledge/issues.md` ISS-006). A restart starts a new unit.
## Input files
Event file: one sample per line.
```
EVENT
<time>,<item>,<value>
1790739700,CI-Eng-Sample.TANK1.LEVEL,47
```
Scan file: several items per line (max 100), one line per timestamp.
```
SCAN,CI-Eng-Sample.TANK1.LEVEL,CI-Eng-Sample.TANK1.INFLOW
1790739715,61,101
1790739720,62,102
```
Time is seconds since 1970 (UTC), optionally with a fraction, or a date text such as
`29-Apr-14 11:48:17.452`. Quotes and spaces around fields are optional. A blank value in a
scan line is skipped.
## Load
```
ithloahis -f <file>.csv -v
```
- `-v` shows progress (`Handle event based table`, `item … on column n`).
- `-t GMT|LST|LCT` sets how text times are read (default GMT).
- `-s <section>` puts a section in front of every item name.
- `-i` also updates the item's current value (can raise alarms and trigger objects; loads the
system). Without it, only history is written.
## Read history back
`ITEM_HISTORY` is not exported by default; use a filter file that names the item **and** a
time range, otherwise nothing is returned:
```
@SELECT
'ITEM_NAME = "CI-Eng-Sample.TANK1.LEVEL" and SAMPLE_TIME > "30-09-2026 00:00:00" and SAMPLE_TIME < "01-10-2026 00:00:00"'
@ITEM_HISTORY
```
```
dssqld -e history.qli <filter>.qli -c -l history.qlo
```
Result columns include `NAME` (`<group>:<item>/<time>/Value`), `SAMPLE_TIME`, `ITEM_VALUE`,
`QUALITY`. Values written live (e.g. with `itmval -p`) and the value at CI Server start also
appear.
## Verified (CI-Eng-Sample, 2026-09-30)
SCAN load of LEVEL 61–63 / INFLOW 101–103 and EVENT load of LEVEL 47, 48 were all read back
with the filter above.

View file

@ -0,0 +1,92 @@
---
task: Load and remove dataset records with dssqld (quick load)
version: R1.03
source: IM 36K10J10-01EN §2.9.2, §5.6; IM 36K10L45-01EN §9.10–9.11; practiced with CI-Eng-Sample 2026-09-30
status: verified
---
# Load and remove dataset records (dssqld quick load)
**Writes to the CI Server database.** Needs CI Server running. Follow the user's chosen way
of working: in *prepare only* mode, write the `.qli` files and a `.cmd` script for the user to
run. Test on a test system first.
## Quick load file format (.qli)
```
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! comment
@FIELDS
NAME,SECTION_PATH,SECTION_NAME,DESCRIPTION
@SECTION_DF
"CI-Eng-Sample","","CI-Eng-Sample","CI-Eng-Sample project"
"CI-Eng-Sample.TANK1","CI-Eng-Sample","TANK1","Sample tank 1"
```
- `@FIELDS` lists the fields in the records that follow; the next `@<DATASET>` line names
the dataset. A file can hold several `@FIELDS` / `@<DATASET>` blocks.
- One record per line, strings in double quotes, numbers bare, comma-separated. End a line
with `\` to continue the record on the next line (long `@FIELDS` lists can also wrap).
- Only the listed fields are set; the rest take their defaults. Required fields are marked
"Is required on import" in the data dictionary (`dssqld -f -l dict.lst`).
- Easiest way to get a correct template: export an existing dataset **without** `-c`
(`dssqld -e template.qli -d <DATASET>`); the output is already in this format.
## Load (insert)
```
dssqld -i <file>.qli -l <file>.qlo
```
Summary per dataset: `Recognized`, `Imported`, `Exists` (already present, left unchanged),
`Errors`. Check `Errors` is 0; the `.qlo` listing holds the same result.
## Update (modify)
```
dssqld -m <file>.qli -l <file>.qlo
```
Changes the listed fields of existing records (the key field plus the fields to change).
Summary: `Modified`, `Not found`, `Errors`. Verified by setting a storage group's `STOP_TIME`.
## Remove (delete)
```
dssqld -r <file>.qli -l <file>.qlo
```
The file only needs the key field (`@FIELDS` `NAME`). Summary: `Removed`, `Not found`, `Errors`.
**Storage groups** (`HIS_GROUP_DF`) cannot be deleted while they have an active storage unit
(`HIS-E-GROUPHASUNT, Group still has an active unit connected`). First remove the items from the
group (`ITEM_HIS_DF`), then set the group's `STOP_TIME` a minute ahead with `-m`, wait until it
has passed, then delete the group. Deleting a group deletes its history.
## Order matters
- Load parents before children: sections (parent before child) → template items → classes
(compiled) → objects → other items (IM 36K10J10 §5.6) → storage groups → items in storage
groups (`ITEM_HIS_DF`, record name `<group>:<item>`).
- Remove in reverse: items from storage groups, storage groups (stop first), items, sections
(children before parents).
- A **new storage group stores nothing until CI Server is restarted**.
- Linking items to a group straight after creating it failed once with 2 errors; a 5 s pause in
between has been reliable (`knowledge/issues.md` ISS-005).
- Put each step in a `.cmd` script so the order is repeatable. Run scripts by full path
(`cmd /c "<path>\load.cmd"`); a bare name may not be found from the current folder.
## Verified example
`examples/CI-Eng-Sample/` (`01_section_df.qli`, `02_item_df.qli`, `load.cmd`, `remove.cmd`):
sections, items, a storage group and its item links loaded, removed and loaded again with
0 errors. `remove.cmd` shows how to set the storage group stop time from a script (PowerShell
writes the `.qli`, then `Start-Sleep`; `timeout` fails when there is no console). Items need only
`NAME` and `ITEM_REP` (`Real`, `Integer`, `Boolean`, `String`); the sample also sets
`DESCRIPTION`, `VALUE_FORMAT`, limits and scale.

View file

@ -0,0 +1,61 @@
---
task: Monitoring processes (intcpumon, intdskmon, inttcpmon, intmon, intspawn)
version: R1.03
source: IM 36K10J10-01EN §4.1.6; practiced with CI-Eng-Sample 2026-09-30
status: verified
---
# Monitoring processes
INTEGRATION Service processes that write system health into items, or run a command when an
item changes. Each is configured in its own setup file in `%TLS_ROOT_PATH%\tls\sup\`.
**Changes the system's setup files.** Back each file up first. Follow the user's chosen way
of working; in *prepare only* mode, write the lines for the user to add.
## Setup file format
Setup files are plain text (CRLF). Lines starting with `!` are comments and editor
definitions (`!KEYWORD : …` shows each allowed keyword and its arguments). Active settings are
plain `keyword = value` lines, usually added at the end. The Setup File Editor edits the same
files.
## Settings
| Process | Setup lines | Item value |
|---|---|---|
| `intcpumon` | `interval = 10`, `logging`, `CPU = "", "<item>", ""` | CPU load %. Empty system name = this machine; empty counter = total CPU |
| `intdskmon` | `interval = 10`, `logging`, `DISK = "C:\\", "<item>"` | **Used** % of the disk (61.9 on a disk 61.9 % used), despite the manual saying free space |
| `inttcpmon` | `logging`, `TCP = "<host>", "<item>"` | 1 while the host answers a ping |
| `intmon` | `process = "<process>", "<item>"` | 1 while the CI Server process runs (e.g. `alm`) |
| `intspawn` | `TRIGGER = "<command>", "<item>", VALUE, NONE, 0` | Runs the command with the new value as argument |
`intspawn` trigger modes: `VALUE`, `STATUS`, `OPTION`, `TIMER` (value = interval in s),
`NODE_DOWN`, `NODE_UP`, `NODE`; filters `NONE`, `EQUAL`, `GREATER`, `LESS` with the value.
**Keep the command path short**: a ~130-character path silently did nothing
(`knowledge/issues.md` ISS-007). `intmon` also supports `node = <n>, "<item>"`,
`channel = <line>, <node>, "<item>"` and `offline` (for multi-node systems, not tested).
Tested lines for the sample project: `examples/CI-Eng-Sample/monitoring/*.sup.txt`
(items `CI-Eng-Sample.SYSTEM.*`).
## Start and stop
These processes do not start by default.
- For a test, start by hand (elevated): `Start-Process "$env:TLS_ROOT_PATH\tls\exe\<process>.exe" -ArgumentList "-n <process>" -WindowStyle Hidden`.
Stop with `Stop-Process -Name <process>`. They also stop when CI Server stops.
- To start them with CI Server, add them to `%TLS_ROOT_PATH%\tls\com\integration_start.cmd`
(for `intmon`, uncomment its `start /b /normal …\intmon.exe -n intmon` line; for the others
add `start /B /NORMAL %TLS_ROOT_PATH%\tls\exe\<process> -n <process>` followed by
`start /B /NORMAL /WAIT %TLS_ROOT_PATH%\tls\exe\durwfp -p <process> -t 10`). Not yet tested.
## Check
Read the target items with `itmval -g -n <item>` (status 9 once updated). With `logging`, the
processes also write to `%TLS_LOG_PATH%\umhlog.log`.
## Verified (CI-Eng-Sample, 2026-09-30)
CPU_LOAD 33.4, DISK_C 61.9, PING_LOCALHOST 1, PROC_ALM 1; `intspawn` wrote 0 and 1 to a file
when `PUMP1.MODE` changed. Setup files restored afterwards.

View file

@ -0,0 +1,68 @@
---
task: Read and write item values with itmval
version: R1.03
source: IM 36K10J10-01EN §2.9.2; practiced on the test system and CI-Eng-Sample 2026-09-30
status: verified
---
# Read and write item values (itmval)
Needs CI Server running. Reading is read-only. **Writing changes live data**: follow the
user's chosen way of working (direct vs prepare only) and never write to an item that drives
real equipment without explicit approval.
Item names are full paths: `<Section>.<Sub-section>.<Tag>`, e.g.
`CI-Eng-Sample.TANK1.INFLOW` from the sample project.
## Read the current value
```
itmval -g -n <Section>.<Tag>
```
Output:
```
Value = 130
Status = 9
Options = 0xffffff88.00 ack
Quality = 0
```
- **Status** is a number from `STATUS_DF` (export it with `dssqld -e status_df.qli -d STATUS_DF -c`
to look numbers up). Common ones: 9 `NORMAL`, 13 `NOT INIT` (never written; new items start
here), 4 / 5 `BOOLEAN 0` / `BOOLEAN 1`, 11 `HIGH HIGH`.
- **Options** lists item flags as words after the hex value, e.g. `ack` (acknowledged),
`off` (item's station not communicating). `uoff` also appears on station items after a write;
its meaning is not yet known (see `knowledge/issues.md` ISS-001).
## Read limits
```
itmval -g -n <Section>.<Tag> -a <n>
```
`<n>`: 1 deadband, 2 low, 3 high, 4 low-low, 5 high-high. The limit is returned in `Value`.
Items with no limits configured return `ITM-E-WRONG_ATT, Wrong attribute number used`.
## Write a value
```
itmval -p -n <Section>.<Tag> -v <value> [-s <status>] [-q <quality>]
```
- Read the item first and note its value, so it can be restored.
- Booleans take `-v 0` / `-v 1`; the status follows automatically (4 / 5).
- `-s` sets the status explicitly (e.g. `-s 9` NORMAL). Without it, a numeric write gives 9.
- `-o` overwrites a blocked item; `-t [<date>] <time> [GMT|LST]` sets the timestamp
(default local civil time); `-e` writes to event history only, not the current value.
- Read it back to confirm.
## Verified examples (CI-Eng-Sample)
| Command | Result |
|---|---|
| `itmval -p -n CI-Eng-Sample.TANK1.INFLOW -v 120.5` | Value 120.5, status 9 |
| `itmval -p -n CI-Eng-Sample.TANK1.INFLOW -v 130 -s 9` | Value 130, status 9 |
| `itmval -p -n CI-Eng-Sample.PUMP1.RUNNING -v 1` | Value 1, status 5 (BOOLEAN 1) |
| `itmval -g -n CI-Eng-Sample.TANK1.LEVEL -a 2` / `-a 3` / `-a 4` / `-a 5` | 20 / 80 / 10 / 90 |

View file

@ -0,0 +1,44 @@
---
task: Tuning checks (read-only)
version: R1.03
source: IM 36K10J10-01EN §5.5.1; practiced on the test system 2026-09-30
status: verified (read-only checks)
---
# Tuning checks (read-only)
Checks whether CI Server needs tuning. Nothing here changes the system. Changing the limits
means editing setup files and restarting CI Server: ask the user first.
## Limits in setup files (`%TLS_ROOT_PATH%\tls\sup\`)
Read the active (non-`!`) lines:
| File | Keyword | Meaning | Test system |
|---|---|---|---|
| `dur.sup` | `dur_max_proc` | Max processes (default 250) | 250 |
| `dur.sup` | `pool_kbytes` | DUR message pool | 250000 |
| `itm.sup` | `pool_kbytes` | Item common memory pool | 650000 |
| `database_start.cmd` (`tls\com`) | `-u` / `-f` | Max database users (default 2K) / files (default 1,200) | not checked |
## Live values: automatic health snapshots
CI Server's system monitor (`smdmon`) writes debugger snapshots about every 10 minutes to
`%TLS_LOG_PATH%\smd_<node>_<debugger>_*.log` (e.g. `smd_UNLICENCED_LOW_itmdbg_all.log`).
Read the newest entries:
| File | What to check | Target (IM 36K10J10 §5.5.1) |
|---|---|---|
| `*_itmdbg_all.log` | `common size` / `free size` | Free above 10 %, usage below 75 % |
| `*_smdsnp_process.log` | Per process: `queue_size`, `queue_used`, `queue_high` | No requests waiting (`queue_used` 0); enlarge a queue that stays in use |
| `*_ismdbg_all.log` | `Total number of lock collisions`, users, files | Collisions not rising above 250/s; entries below 80 % of max users |
| `*_smdsnp_process.log` | Number of processes | Well below `dur_max_proc` |
Test system (2026-09-30): common memory 665.6 MB, free 665.3 MB; queues empty; 3 lock
collisions in total.
## Not yet practiced
Debug launchers (`jwuipoi_debug`, `jhmiset_debug`, …), interactive debuggers (`itmdbg`,
`opcdbg`, `eqpdbg`, …), and per-process debug settings; see
`knowledge/manuals/IM36K10J10-01EN.md` §5.5.2.

View file

@ -45,5 +45,8 @@ cover something, say so plainly instead of guessing CI Server behavior.
The manuals are at `C:\Users\Public\Yokogawa\tls\doc\EN\` on the development machine. Work
proceeds manual by manual in the order in `knowledge/progress.md`: summarize the manual into
`knowledge/manuals/`, practice each task on the test system, and record a task in a skill only
after the user confirms it works. Track status in `knowledge/progress.md`. Log open questions
after the user confirms it works. Tasks may be practiced first on the author's AID test
project, but whatever they need must then be added to `CI-Eng-Sample` and re-tested there;
a task is done only when it passes on the sample project (or needs no project data). Track
status in `knowledge/progress.md`. Log open questions
and problems in `knowledge/issues.md`, each with the files to update once it is resolved.

1
examples/CI-Eng-Sample/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.qlo

View file

@ -0,0 +1,15 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! CI-Eng-Sample sections (CI Server R1.03.00)
@FIELDS
NAME,SECTION_PATH,SECTION_NAME,DESCRIPTION
@SECTION_DF
"CI-Eng-Sample","","CI-Eng-Sample","CI-Eng-Sample project"
"CI-Eng-Sample.TANK1","CI-Eng-Sample","TANK1","Sample tank 1"
"CI-Eng-Sample.PUMP1","CI-Eng-Sample","PUMP1","Sample pump 1"
"CI-Eng-Sample.SYSTEM","CI-Eng-Sample","SYSTEM","Sample system monitoring"

View file

@ -0,0 +1,20 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! CI-Eng-Sample internal items (no station), CI Server R1.03.00
@FIELDS
NAME,DESCRIPTION,ITEM_REP,VALUE_FORMAT
LOW_LOW_LIMIT,LOW_LIMIT,HIGH_LIMIT,HIGH_HIGH_LIMIT,SCALE_LOW_LIMIT,SCALE_HIGH_LIMIT
@ITEM_DF
"CI-Eng-Sample.TANK1.LEVEL","Tank 1 level (%)","Real","999.9",10,20,80,90,0,100
"CI-Eng-Sample.TANK1.INFLOW","Tank 1 inflow (m3/h)","Real","9999.9",0,0,0,0,0,500
"CI-Eng-Sample.PUMP1.RUNNING","Pump 1 running","Boolean","",0,0,0,0,0,0
"CI-Eng-Sample.PUMP1.MODE","Pump 1 mode (0 manual, 1 auto)","Integer","9",0,0,0,0,0,1
"CI-Eng-Sample.SYSTEM.CPU_LOAD","CPU load (%) from intcpumon","Real","999.9",0,0,0,0,0,100
"CI-Eng-Sample.SYSTEM.DISK_C","Disk C: from intdskmon","Real","999.9",0,0,0,0,0,100
"CI-Eng-Sample.SYSTEM.PING_LOCALHOST","localhost reachable, from inttcpmon","Integer","9",0,0,0,0,0,1
"CI-Eng-Sample.SYSTEM.PROC_ALM","ALARM process (alm) running, from intmon","Integer","9",0,0,0,0,0,1

View file

@ -0,0 +1,13 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! CI-Eng-Sample item storage group (Event/Item), CI Server R1.03.00
! Group names are max 16 characters.
@FIELDS
NAME,DESCRIPTION,TYPE,COL_STOR_TYPE,LIFE_TIME,ROLLOVER_INT
@HIS_GROUP_DF
"CIENG_EVENT","CI-Eng-Sample event history","Item","Event/Item","1 weeks","1 days"

View file

@ -0,0 +1,13 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! CI-Eng-Sample items in storage groups, CI Server R1.03.00
@FIELDS
NAME,ITEM_NAME,GROUP_NAME,ON_VALUE_CHANGE,ON_STATUS_CHANGE
@ITEM_HIS_DF
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL","CI-Eng-Sample.TANK1.LEVEL","CIENG_EVENT",1,1
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW","CI-Eng-Sample.TANK1.INFLOW","CIENG_EVENT",1,1

View file

@ -0,0 +1,13 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! Remove CI-Eng-Sample items from storage groups
@FIELDS
NAME
@ITEM_HIS_DF
"CIENG_EVENT:CI-Eng-Sample.TANK1.LEVEL"
"CIENG_EVENT:CI-Eng-Sample.TANK1.INFLOW"

View file

@ -0,0 +1,12 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! Remove CI-Eng-Sample storage group (deletes its history)
@FIELDS
NAME
@HIS_GROUP_DF
"CIENG_EVENT"

View file

@ -0,0 +1,19 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! Remove CI-Eng-Sample items
@FIELDS
NAME
@ITEM_DF
"CI-Eng-Sample.TANK1.LEVEL"
"CI-Eng-Sample.TANK1.INFLOW"
"CI-Eng-Sample.PUMP1.RUNNING"
"CI-Eng-Sample.PUMP1.MODE"
"CI-Eng-Sample.SYSTEM.CPU_LOAD"
"CI-Eng-Sample.SYSTEM.DISK_C"
"CI-Eng-Sample.SYSTEM.PING_LOCALHOST"
"CI-Eng-Sample.SYSTEM.PROC_ALM"

View file

@ -0,0 +1,15 @@
@LANGUAGE
ENGLISH
@VERSION
1.03.00
! Remove CI-Eng-Sample sections (children first)
@FIELDS
NAME
@SECTION_DF
"CI-Eng-Sample.TANK1"
"CI-Eng-Sample.PUMP1"
"CI-Eng-Sample.SYSTEM"
"CI-Eng-Sample"

View file

@ -1,36 +1,82 @@
# CI-Eng-Sample (placeholder)
**Status: planned, not built yet.** Nothing in this folder can be imported yet.
# CI-Eng-Sample
A small, invented sample project that anyone with this repo can load into a CI Server
**R1.03** test system. Skills use it for their examples, and every skill task can be practiced
and verified against the same known items on any machine.
**R1.03** test system. Skills use its names in their examples, and every skill task is
re-tested against it so that no other project is needed.
## Planned contents
Built and tested on CI Server R1.03.00 (unlicensed test system), 2026-09-30.
Built up phase by phase (see `knowledge/progress.md`):
## Load and remove
| Phase | Adds |
|---|---|
| 5 Items and acquisition | Top-level section, sub-sections, template items, internal items (no PLC needed), items with alarm limits |
| 6 Classes and objects | A class and objects created from it |
| 8 Alarms | Alarm settings on sample items |
| 9 History | An item storage group |
| 10 Graphics | A display and symbol |
| 11 Reporting | A report |
Test systems only: loading writes to the CI Server database. CI Server must be running.
From an elevated prompt, call the scripts by full path (a bare `load.cmd` may not be found
from the current folder):
## Planned files
```
cmd /c "<repo>\examples\CI-Eng-Sample\load.cmd"
cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
```
- Each step prints a summary and writes a `.qlo` listing; check that `Errors` is 0.
- **Restart CI Server after loading** (stop, then start the CI Service): a new storage group
stores no history until CI Server restarts.
- `load.cmd` on a system that already has the project reports `Exists` and changes nothing.
- `remove.cmd` takes about 1½ minutes: a storage group can only be deleted after its stop time
has passed, so the script sets a stop time one minute ahead and waits. Removing the group
also deletes its history.
## Current contents
| Name | Kind | Details |
|---|---|---|
| `CI-Eng-Sample` | Section | Top level |
| `CI-Eng-Sample.TANK1`, `.PUMP1`, `.SYSTEM` | Sections | Tank, pump, system monitoring |
| `CI-Eng-Sample.TANK1.LEVEL` | Item, Real | %, format `999.9`, limits LL 10 / L 20 / H 80 / HH 90, scale 0–100 (alarming off), stored in `CIENG_EVENT` |
| `CI-Eng-Sample.TANK1.INFLOW` | Item, Real | m3/h, format `9999.9`, scale 0–500, stored in `CIENG_EVENT` |
| `CI-Eng-Sample.PUMP1.RUNNING` | Item, Boolean | |
| `CI-Eng-Sample.PUMP1.MODE` | Item, Integer | 0 manual, 1 auto |
| `CI-Eng-Sample.SYSTEM.CPU_LOAD` | Item, Real | Target for `intcpumon` |
| `CI-Eng-Sample.SYSTEM.DISK_C` | Item, Real | Target for `intdskmon` (reports **used** %) |
| `CI-Eng-Sample.SYSTEM.PING_LOCALHOST` | Item, Integer | Target for `inttcpmon` (1 = reachable) |
| `CI-Eng-Sample.SYSTEM.PROC_ALM` | Item, Integer | Target for `intmon` (1 = `alm` process running) |
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
All items are internal (no station), so the project works without any PLC or simulator.
New items start with status 13 (`NOT INIT`) until a value is written.
## Files
| File | Purpose |
|---|---|
| `*.qli` | `dssqld` data files, one per dataset |
| `load.cmd` | Imports the data files in dependency order: template items → classes (compiled) → objects → remaining items (IM 36K10J10 §5.6) |
| `remove.cmd` | Removes the sample project from a system |
| `01_section_df.qli` | Sections (`SECTION_DF`); parents before children |
| `02_item_df.qli` | Items (`ITEM_DF`) |
| `03_his_group_df.qli` | Item storage group (`HIS_GROUP_DF`) |
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
| `89_`…`92_remove_*.qli` | Names to delete, in reverse order |
| `load.cmd`, `remove.cmd` | Run the steps in the right order |
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
## Monitoring processes (optional)
`monitoring/` holds the lines to add to the setup files in `%TLS_ROOT_PATH%\tls\sup\` so that
`intcpumon`, `intdskmon`, `inttcpmon`, `intmon` and `intspawn` write into the `SYSTEM` items.
These change the system's own setup files: back the files up first and restore them after
testing. See the `system-management` skill, task `monitoring-processes.md`.
## Planned additions
| Phase | Adds |
|---|---|
| 6 | Template items, a class and objects |
| 8 | Alarm settings on sample items |
| 9 | More storage groups (scan/time, aggregation) |
| 10 | A display and symbol |
| 11 | A report |
## Rules
- Test systems only. Loading writes to the CI Server database.
- Invented names only; no real plant or customer data.
- The top-level section name is still to be decided. Item names may not allow `-`, so it may
differ from the folder name (to be checked in phase 5).
- Test systems only; invented names only, no real plant or customer data.
- Keep the load order: sections → template items → classes (compiled) → objects → other
items → storage groups → items in storage groups (IM 36K10J10 §5.6). Keep `remove.cmd` in
reverse order.
- Every file notes the CI Server version it was built and tested on.

View file

@ -0,0 +1,12 @@
@echo off
rem Load CI-Eng-Sample into a CI Server R1.03 TEST system.
rem Run in an elevated prompt while CI Server is running; call this script by full path.
rem Results go to *.qlo listing files; check that Errors = 0.
rem Restart CI Server afterwards: new storage groups only start storing after a restart.
cd /d "%~dp0"
dssqld -i 01_section_df.qli -l 01_section_df.qlo
dssqld -i 02_item_df.qli -l 02_item_df.qlo
dssqld -i 03_his_group_df.qli -l 03_his_group_df.qlo
rem Short pause: linking items straight after creating the group failed once.
powershell -NoProfile -Command "Start-Sleep -Seconds 5"
dssqld -i 04_item_his_df.qli -l 04_item_his_df.qlo

View file

@ -0,0 +1,5 @@
! Add to %TLS_ROOT_PATH%\tls\sup\intcpumon.sup (CI Server R1.03.00, tested 2026-09-30)
! CPU = <system name>, <item>, <counter>; empty system = this machine, empty counter = total CPU %
interval = 10
logging
CPU = "", "CI-Eng-Sample.SYSTEM.CPU_LOAD", ""

View file

@ -0,0 +1,5 @@
! Add to %TLS_ROOT_PATH%\tls\sup\intdskmon.sup (CI Server R1.03.00, tested 2026-09-30)
! DISK = <disk>, <item>. The item receives the USED percentage of the disk.
interval = 10
logging
DISK = "C:\\", "CI-Eng-Sample.SYSTEM.DISK_C"

View file

@ -0,0 +1,3 @@
! Add to %TLS_ROOT_PATH%\tls\sup\intmon.sup (CI Server R1.03.00, tested 2026-09-30)
! process = <process name>, <item>. Item = 1 while the process runs.
process = "alm", "CI-Eng-Sample.SYSTEM.PROC_ALM"

View file

@ -0,0 +1,6 @@
! Add to %TLS_ROOT_PATH%\tls\sup\intspawn.sup (CI Server R1.03.00, tested 2026-09-30)
! TRIGGER = <command>, <item>, <VALUE|STATUS|OPTION|TIMER|NODE_DOWN|NODE_UP|NODE>, <NONE|EQUAL|GREATER|LESS>, <value>
! The new value is passed to the command as its argument. Keep the command path SHORT:
! a ~130-character path silently did nothing; C:\Claude\spawn_test.cmd worked.
! Example command file (spawn_test.cmd): @echo %* >> "C:\Temp\spawn_out.txt"
TRIGGER = "C:\Temp\spawn_test.cmd", "CI-Eng-Sample.PUMP1.MODE", VALUE, NONE, 0

View file

@ -0,0 +1,4 @@
! Add to %TLS_ROOT_PATH%\tls\sup\inttcpmon.sup (CI Server R1.03.00, tested 2026-09-30)
! TCP = <host>, <item>. Item = 1 while the host answers a ping.
logging
TCP = "localhost", "CI-Eng-Sample.SYSTEM.PING_LOCALHOST"

View file

@ -0,0 +1,16 @@
@echo off
rem Remove CI-Eng-Sample from a CI Server R1.03 TEST system (also deletes its history).
rem Run in an elevated prompt while CI Server is running; call this script by full path.
rem Order: storage links, stop + delete storage group, items, sections (children first).
rem A storage group with an active unit cannot be deleted (HIS-E-GROUPHASUNT), so the
rem group first gets a stop time one minute ahead; the script waits until it has passed.
cd /d "%~dp0"
dssqld -r 89_remove_item_his_df.qli -l 89_remove_item_his_df.qlo
powershell -NoProfile -Command "$t=(Get-Date).AddMinutes(1).ToString('dd-MM-yyyy HH:mm:ss'); \"@LANGUAGE`r`nENGLISH`r`n`r`n@VERSION`r`n1.03.00`r`n`r`n@FIELDS`r`nNAME,STOP_TIME`r`n`r`n@HIS_GROUP_DF`r`n\"\"CIENG_EVENT\"\",\"\"$t\"\"`r`n\" | Set-Content -Encoding ascii 90a_stop_his_group_df.qli"
dssqld -m 90a_stop_his_group_df.qli -l 90a_stop_his_group_df.qlo
echo Waiting 75 seconds for the storage group stop time to pass...
powershell -NoProfile -Command "Start-Sleep -Seconds 75"
dssqld -r 90_remove_his_group_df.qli -l 90_remove_his_group_df.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
del 90a_stop_his_group_df.qli

View file

@ -19,7 +19,10 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ID | Date | Area | Issue | Status | Next step / resolution | Update on close |
|---|---|---|---|---|---|---|
| ISS-001 | 2026-09-30 | ITEM (`itmval`) | Writing an item with `itmval -p -n AID.WRPS.SIM.INFLOW -v 400` added the `uoff` option flag (options 0x…8a → 0x…8e). The flag stayed after writing the original value back. Meaning of `uoff` unknown; not found in the EN manuals by text search. | open | Find what `uoff` means and how to clear it (ITEM Service IM 36K10L35/L36, Engineering Module I/O Processes IM 36K10C10). Until then, `itmval -p` stays "awaiting confirmation". | Create `.claude/skills/system-management/tasks/read-write-item.md` (with the `uoff` explanation) and add it to that skill's `SKILL.md` task table; `knowledge/progress.md` row "Write an item with `itmval -p`" |
| ISS-002 | 2026-09-30 | DATABASE (`dsschk`) | `dsschk -d ITEM_DF -v` (check only) exits 0 with no console output and nothing new in `umhlog.log`. Where results are reported is unknown. | open | Revisit with the Data Access / Data Set Service manuals; try without `-d`, or with `-e`. | Create `.claude/skills/system-management/tasks/consistency-check.md` and add it to that skill's `SKILL.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.1 consistency tools (add where output goes); `knowledge/progress.md` row "Consistency check" |
| ISS-003 | 2026-09-30 | DATABASE (`dssqld`) | Filtered export (`dssqld -e <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | open | Get the exact filter-file syntax from the Data Set Service manuals (IM 36K10L50 / P30). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | open | Retry on an item that has alarm limits configured (phase 8, alarms). | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
| ISS-001 | 2026-09-30 | ITEM (`itmval`) | Writing an item with `itmval -p -n AID.WRPS.SIM.INFLOW -v 400` added the `uoff` option flag (options 0x…8a → 0x…8e). The flag stayed after writing the original value back. Meaning of `uoff` unknown; not found in the EN manuals by text search. | open | 2026-09-30: writing internal sample items (`CI-Eng-Sample.*`, no station) does **not** set `uoff` (options stay 0x…88), so it is tied to station-connected items (the AID item was already `off`, its station not communicating). Still to find: meaning and how to clear it (ITEM Service IM 36K10L35/L36, Engineering Module I/O Processes IM 36K10C10). Revisit in phase 5 with a station item. | `.claude/skills/system-management/tasks/read-write-item.md` (replace the `uoff` note under "Read the current value"); `knowledge/progress.md` row "Write an item with `itmval -p`" |
| ISS-002 | 2026-09-30 | DATABASE (`dsschk`) | `dsschk -d ITEM_DF -v` (check only) exits 0 with no console output and nothing new in `umhlog.log`. Where results are reported is unknown. | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: `dsschk -e -v` prints a start/end line per dataset (228 checked, no problems) and logs to `umhlog.log`. Plain `dsschk` only compares copies between nodes, so it prints nothing on a single-node system. `ismchk` needs a database file name (usage: `ismchk data_base_name`), not run yet. | Create `.claude/skills/system-management/tasks/consistency-check.md` and add it to that skill's `SKILL.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.1 consistency tools (add where output goes); `knowledge/progress.md` row "Consistency check" |
| ISS-003 | 2026-09-30 | DATABASE (`dssqld`) | Filtered export (`dssqld -e <out> <filter>.qli`) failed with a guessed filter syntax (`@ITEM_DF`, `@FIELD`, `@SELECT`). | closed | Closed 2026-09-30 (confirmed by user). 2026-09-30: the quick load **data** format is now known and verified (`@LANGUAGE`, `@VERSION`, `@FIELDS`, `@<DATASET>`, quoted CSV records, `\` continuation, `!` comments; IM 36K10L45 §9.11). Filter syntax found (IM 36K10L50 §3.6) and practiced, awaiting confirmation: a file with `@SELECT`, then the filter in single quotes (strings in double quotes), then `@<DATASET>`; run `dssqld -e <out> <filter>.qli`. `ITEM_HISTORY` returns nothing unless the filter names `ITEM_NAME` and a `SAMPLE_TIME` range (`SAMPLE_TIME > "dd-mm-yyyy hh:mm:ss" and SAMPLE_TIME < ...`). | `.claude/skills/system-management/tasks/export-dataset.md` section "Filtered exports"; `knowledge/manuals/IM36K10J10-01EN.md` §5.6 step 1; `knowledge/progress.md` row "Export a dataset" |
| ISS-004 | 2026-09-30 | ITEM (`itmval`) | `itmval -g -a <1..5>` returns `ITM-E-WRONG_ATT` on `AID.WRPS.*` items, so reading limits is unproven. | closed | Closed 2026-09-30 (confirmed by user). On `CI-Eng-Sample.TANK1.LEVEL` (limits set) `-a 1..5` returned deadband 0, low 20, high 80, low-low 10, high-high 90. The error only occurs on items without limits. | `.claude/skills/system-management/tasks/read-write-item.md` (limits section); `knowledge/progress.md` row "Read an item with `itmval -g`" |
| ISS-005 | 2026-09-30 | DATABASE (`dssqld`) | Loading `04_item_his_df.qli` straight after creating the storage group gave 2 errors once; three other runs were clean. Error text not captured. | open | Added a 5 s pause in `load.cmd`. If it happens again, capture `04_item_his_df.qlo`. | `examples/CI-Eng-Sample/load.cmd`; `.claude/skills/system-management/tasks/load-remove-records.md` |
| ISS-006 | 2026-09-30 | HISTORY (`ithloahis`) | Samples dated before the start of the current storage unit were not stored (no error shown); samples after it were. Also, a new storage group stored nothing until CI Server was restarted. | open | Confirm with History Management (IM 36K10L20) in phase 9: how to load into older units, and whether a restart is really required. | `.claude/skills/system-management/tasks/load-history.md`; `examples/CI-Eng-Sample/README.md`; `knowledge/manuals/IM36K10J10-01EN.md` command-line tools |
| ISS-007 | 2026-09-30 | INTEGRATION (monitoring) | `intdskmon` wrote 61.9 for a C: drive that is 61.9 % used / 38.1 % free, although the manual says it monitors the disk free space rate. `intspawn` did nothing when the command path was ~130 characters; a short path worked (limit unknown). | open | Confirm the disk value meaning and the path limit. | `.claude/skills/system-management/tasks/monitoring-processes.md`; `knowledge/manuals/IM36K10J10-01EN.md` §4.1.6; `examples/CI-Eng-Sample/monitoring/` |

View file

@ -176,6 +176,8 @@ owns its design.
- Consistency tools: `ismchk <file>` / `ismkfr [-c] [-r] [-s] [-d] <file>` for ISAM files;
`dsschk [-d <dataset>] [-n <node>] [-e] [-r] [-v]` for replicated/duplicated datasets.
Repair: repeat `dsschk -r` until clean, then `dsschk -e`, then `dsschk -e -r` (maybe twice).
*Verified 2026-09-30:* on a single node plain `dsschk` prints nothing (it compares nodes);
use `dsschk -e -v`, which lists every dataset checked and also logs to `umhlog.log`.
- Disaster recovery: restore system backup (or reinstall OS + CI Server + patches) → restore
`tls` configuration and database → verify.
- Retrieve archived history from the Engineering module (you can set its lifetime).
@ -248,8 +250,9 @@ usability), administrator tasks (backup, accounts, monitoring), performance and
`opcdbg` (PROCESS); `almdbg` (ALARM); `eqpdbg` (EQUIPMENT).
**Migration (5.6)**, e.g. from a demo-license system to the target system
1. Export master datasets with `dssqld -e`, using `.qli` filter files (`@<DATASET>`,
`@FIELD`, `@SELECT`) where needed: `AUTH_GROUP_DF`, `USER_DF`, `PRINTER_*_DF`,
1. Export master datasets with `dssqld -e`, using `.qli` filter files where needed
(`@SELECT`, the filter in single quotes, then `@<DATASET>`; optionally `@FIELDS`; verified
2026-09-30, see skill `system-management` task `export-dataset.md`): `AUTH_GROUP_DF`, `USER_DF`, `PRINTER_*_DF`,
`STATUS_DF`, `ALARM_ACK_DF`, `ALARM_AOI_DF`, communication `*_LINE_DF` / `*_STATION_DF` /
`*_POINT_DF`, `INSTALL_DF`, `UNIT_DF`, `ITEM_DF`, `HIS_GROUP_DF` (item storage groups
only), `CLASS_DF`, `OBJECT_DF`, `REPORT_DF`. Drop fields removed in the new release.

View file

@ -4,6 +4,11 @@ Status of each manual and each practiced task. Update this file as work proceeds
**Manual status:** not started · summarized · in practice · done
**Task status:** not practiced · practiced, awaiting confirmation · passed · not completed (see notes)
**Sample column:** whether the task has been re-tested on **CI-Eng-Sample**:
n/a (needs no project data) · pending (tested on AID only) · added (sample content built) · passed
A task is **done** only when Status is *passed* and Sample is *passed* or *n/a*. Then AID is no
longer needed to repeat it.
## Test system
@ -16,15 +21,16 @@ with this repo:
was tested, not names to use elsewhere.
- Communication stations seen there (`WRPS_PLC`, `MODSIM_STATION`, `STN_MQTT`) belong to AID.
Shared, repeatable practice will use the sample project **CI-Eng-Sample**
(`examples/CI-Eng-Sample/`) once it exists.
Tasks may be practiced first on AID, but everything they need is then added to the sample
project **CI-Eng-Sample** (`examples/CI-Eng-Sample/`) and re-tested there, so that in the end
AID is not needed.
## Manuals, in working order
| Phase | Manual | Title | Status |
|---|---|---|---|
| 0 | IM 36K01A50 | Release Information | summarized ([notes](manuals/IM36K01A50-01EN.md)) |
| 1 | IM 36K10J10 | System Design/Management | in practice, skill `system-management` ([notes](manuals/IM36K10J10-01EN.md)) |
| 1 | IM 36K10J10 | System Design/Management | done except migration (phase 6) and debugging tools; skill `system-management` ([notes](manuals/IM36K10J10-01EN.md)) |
| 2 | IM 36K01C10 | CI Server Setup | not started |
| 2 | IM 36K01C30 | Security Guide | not started |
| 3 | IM 36K10G10 | Tutorial | not started |
@ -68,19 +74,19 @@ now come before classes and objects (phase 6), and the other interfaces follow a
## Tasks
| Manual | Task | Status | Notes |
|---|---|---|---|
| J10 | System check: version, paths, running state, time sync ([skill](../.claude/skills/system-check/SKILL.md)) | passed | Started CI Service elevated; live version R1.03.00; node UNLICENCED (expected). |
| J10 | Time sync check / configuration (`w32tm`, `durutl.sup`) | not practiced | Check only on this system; no Vnet/IP. |
| J10 | Export a dataset with `dssqld` ([task](../.claude/skills/system-management/tasks/export-dataset.md)) | passed | Filter-file syntax: [ISS-003](issues.md). |
| J10 | Import / update a dataset with `dssqld` | not practiced | Writes to the database; ask first. |
| J10 | Read an item with `itmval -g` | passed | Read `AID.WRPS.*` items. `-a 1..5` gave `ITM-E-WRONG_ATT` on an item without limits: [ISS-004](issues.md). |
| J10 | Write an item with `itmval -p` | practiced, awaiting confirmation | `AID.WRPS.SIM.INFLOW` 419.76 → 400 → 419.76. After the first write the item's options gained the `uoff` flag (0x8a → 0x8e), which stays after restoring the value. See [ISS-001](issues.md). |
| J10 | Read the message log (`tls\log\umhlog.log`) | passed | |
| J10 | Per-component version list (`tls\lst\tls_versions.lst`) | passed | |
| J10 | Load history from CSV with `ithloahis` | not practiced | Needs an item storage group. |
| J10 | Consistency check (`dsschk`, `ismchk`) | not completed | `dsschk -d ITEM_DF -v` exits 0 with no output and nothing new in the message log; See [ISS-002](issues.md). |
| J10 | Monitoring processes (`intmon`, `intcpumon`, `intdskmon`, `inttcpmon`, `intspawn`) | not practiced | Needs items to report into; better after phase 5. |
| J10 | Backup of `tls` folders | not practiced | Plan only; the actual backup tool is site-specific. |
| J10 | Migration between systems (§5.6) | not practiced | Needs engineered data; revisit after phase 6. |
| J10 | Tuning and debugging (setup files, `*_debug` launchers, debuggers) | not practiced | |
| Manual | Task | Status | Sample | Notes |
|---|---|---|---|---|
| J10 | System check: version, paths, running state, time sync ([skill](../.claude/skills/system-check/SKILL.md)) | passed | n/a | Started CI Service elevated; live version R1.03.00; node UNLICENCED (expected). |
| J10 | Time sync check (`w32tm`); DURUTL configuration (`durutl.sup`) | passed (check); configuration not practiced | n/a | `w32tm` check verified in system-check. `durutl.sup` has no active settings (single node, not a time master); configuring DURUTL needs a second node, so not practiced. |
| J10 | Export a dataset with `dssqld` ([task](../.claude/skills/system-management/tasks/export-dataset.md)) | passed | n/a | Filtered export (`@SELECT`) passed ([ISS-003](issues.md), closed). |
| J10 | Import and delete dataset records with `dssqld` (`-i`, `-r`) ([task](../.claude/skills/system-management/tasks/load-remove-records.md)) | passed | passed | Built CI-Eng-Sample: 3 sections + 4 items imported, removed and re-imported with 0 errors. 2026-09-30 later: `-m` (update, used to set a storage group stop time) and loading/removing storage groups passed; see [ISS-005](issues.md). |
| J10 | Read an item with `itmval -g` ([task](../.claude/skills/system-management/tasks/read-write-item.md)) | passed | passed | Read `AID.WRPS.*` items. `-a 1..5` gave `ITM-E-WRONG_ATT` on an item without limits; works on items with limits ([ISS-004](issues.md), closed). |
| J10 | Write an item with `itmval -p` ([task](../.claude/skills/system-management/tasks/read-write-item.md)) | passed | passed | Sample: `TANK1.INFLOW` 120.5 then 130 with `-s 9`, `PUMP1.RUNNING` 1 (status 5 BOOLEAN 1); no `uoff` flag. AID: `AID.WRPS.SIM.INFLOW` 419.76 → 400 → 419.76. After the first write the item's options gained the `uoff` flag (0x8a → 0x8e), which stays after restoring the value. See [ISS-001](issues.md). |
| J10 | Read the message log (`tls\log\umhlog.log`) | passed | n/a | |
| J10 | Per-component version list (`tls\lst\tls_versions.lst`) | passed | n/a | |
| J10 | Load history from CSV with `ithloahis`; read history back with `dssqld` ([task](../.claude/skills/system-management/tasks/load-history.md)) | passed | passed | Sample storage group `CIENG_EVENT` (Event/Item). SCAN file (LEVEL 61–63, INFLOW 101–103) and EVENT file (LEVEL 47, 48) stored and read back via `ITEM_HISTORY`. New groups need a CI Server restart before they store; samples dated before the current storage unit were not stored ([ISS-006](issues.md)). |
| J10 | Consistency check (`dsschk`, `ismchk`) ([task](../.claude/skills/system-management/tasks/consistency-check.md)) | passed (check); repair and `ismchk` not practiced | n/a | `dsschk -e -v` (check only) reports each of 228 datasets, no problems. Plain `dsschk` prints nothing on a single node. `ismchk` needs a database file name; not run ([ISS-002](issues.md), closed). |
| J10 | Monitoring processes (`intmon`, `intcpumon`, `intdskmon`, `inttcpmon`, `intspawn`) ([task](../.claude/skills/system-management/tasks/monitoring-processes.md)) | passed | passed | All five worked into `CI-Eng-Sample.SYSTEM.*` / `PUMP1.MODE`, started by hand with `<exe> -n <name>`; setup files restored afterwards. `intdskmon` reports **used** %; `intspawn` command path must be short ([ISS-007](issues.md)). |
| J10 | Backup of `tls` folders | not practiced | n/a | Plan only; the actual backup tool is site-specific. |
| J10 | Migration between systems (§5.6) | not practiced | pending | Needs engineered data; revisit after phase 6. |
| J10 | Tuning checks (read-only) ([task](../.claude/skills/system-management/tasks/tuning-checks.md)) | passed | n/a | Read `dur.sup` (max processes 250), `itm.sup` (item pool 650,000 KB) and the automatic health snapshots `tls\log\smd_*.log` (common memory free, queue use per process, lock collisions). Debug launchers and interactive debuggers not practiced. |