From edb9948891a7ae341611facac2048a80aebfb1ae Mon Sep 17 00:00:00 2001 From: cliu Date: Wed, 30 Sep 2026 15:56:49 +1000 Subject: [PATCH] Record confirmed tutorial tasks in item and class/object skills Co-Authored-By: Claude Opus 5.5 --- .../skills/class-object-engineering/SKILL.md | 20 ++++++ .../tasks/load-class-object.md | 68 +++++++++++++++++++ .claude/skills/item-engineering/SKILL.md | 23 +++++++ .../item-engineering/tasks/block-item.md | 36 ++++++++++ .../item-engineering/tasks/sub-items.md | 37 ++++++++++ knowledge/progress.md | 6 +- 6 files changed, 187 insertions(+), 3 deletions(-) create mode 100644 .claude/skills/class-object-engineering/SKILL.md create mode 100644 .claude/skills/class-object-engineering/tasks/load-class-object.md create mode 100644 .claude/skills/item-engineering/SKILL.md create mode 100644 .claude/skills/item-engineering/tasks/block-item.md create mode 100644 .claude/skills/item-engineering/tasks/sub-items.md diff --git a/.claude/skills/class-object-engineering/SKILL.md b/.claude/skills/class-object-engineering/SKILL.md new file mode 100644 index 0000000..53826cd --- /dev/null +++ b/.claude/skills/class-object-engineering/SKILL.md @@ -0,0 +1,20 @@ +--- +name: class-object-engineering +description: >- + CI Server R1.03 PROCESS Service classes, objects and trigger groups. Use when the user wants + to create a trigger group, write or compile a class (traditional language), create objects + from a class, or load classes and objects with quick load files. Sources IM 36K10G10-01EN + (Tutorial) and IM 36K10J10-01EN; to be extended with IM 36K10L10, P10 and P11 in phase 6. +--- + +# Class and object engineering (R1.03) + +Background: `knowledge/manuals/IM36K10G10-01EN.md` (chapter 5) and +`knowledge/manuals/IM36K10J10-01EN.md` (sections 2.4 and 5.3). Known issues for PROCESS +Service: `knowledge/manuals/IM36K01A50-01EN.md`. + +Rules: run `system-check` first; creating classes and objects changes the running system. + +| Task | File | Status | +|---|---|---| +| Trigger group, class (compiled on load) and object via quick load | `tasks/load-class-object.md` | verified | diff --git a/.claude/skills/class-object-engineering/tasks/load-class-object.md b/.claude/skills/class-object-engineering/tasks/load-class-object.md new file mode 100644 index 0000000..9aca5ba --- /dev/null +++ b/.claude/skills/class-object-engineering/tasks/load-class-object.md @@ -0,0 +1,68 @@ +--- +task: Create a trigger group, class and object with quick load files +version: R1.03 +source: IM 36K10G10-01EN §5.1–5.3; IM 36K10J10-01EN §5.6; practiced with CI-Eng-Sample 2026-09-30 +status: verified +--- + +# Trigger group, class and object via quick load + +Load in this order (each with `dssqld -i .qli -l .qlo`, check `Errors` = 0); +remove in reverse (object, class, trigger group) with `NAME`-only files and `dssqld -r`. + +**1. Trigger group** (`TRIGGER_DF`, name max 16 characters): + +``` +@FIELDS +NAME,DESCRIPTION,TRIGGER_INTERVAL + +@TRIGGER_DF +"CIENG_1S","CI-Eng-Sample one second trigger","1 seconds" +``` + +**2. Class** (`CLASS_DF`, name max 16 characters). The source goes in the `METHOD` memo field, +between `@"` and `"@` on their own lines; `COMPILE` 1 compiles it on load; `TRIGGER_1` +attaches a trigger group: + +``` +@FIELDS +NAME,DESCRIPTION,PF_LANGUAGE,TRIGGER_1,COMPILE,LISTING_WANTED,METHOD + +@CLASS_DF +"CIENG_INCR","Count CI-Eng-Sample.DEMO.COUNTER 1..100","Traditional","CIENG_1S",1,1,\ +@" +CLASS CIENG_INCR; + PROLOG + SIGNAL INPUT := "CI-Eng-Sample.DEMO.COUNTER"; + BODY + METHOD UP_AND_DOWN; + BODY + IF (INPUT >= 100) THEN + INPUT := 0; + ENDIF; + INPUT := INPUT + 1; + ENDMETHOD UP_AND_DOWN; +ENDCLASS CIENG_INCR; +"@ +``` + +The item a `SIGNAL` names must exist first (or be created by the class with `FROM … MAKE`). + +**3. Object** (`OBJECT_DF`): full name in its section, and the class: + +``` +@FIELDS +NAME,DESCRIPTION,CLASS + +@OBJECT_DF +"CI-Eng-Sample.DEMO.INCR1","Counts DEMO.COUNTER every second","CIENG_INCR" +``` + +## Check + +Run `itmval -g -n CI-Eng-Sample.DEMO.COUNTER` a few seconds apart: the value rises by one per +second. To inspect a class, export it with a filter file (`@SELECT`, then +`'NAME = ""'`, then `@CLASS_DF`). + +Example files: `examples/CI-Eng-Sample/05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli`, +`86_` to `88_remove_*.qli`. diff --git a/.claude/skills/item-engineering/SKILL.md b/.claude/skills/item-engineering/SKILL.md new file mode 100644 index 0000000..5ac92fa --- /dev/null +++ b/.claude/skills/item-engineering/SKILL.md @@ -0,0 +1,23 @@ +--- +name: item-engineering +description: >- + CI Server R1.03 sections, items and sub-items. Use when the user wants to create or change + sections, items or sub-items (integrator, min-max, pulse, rate-of-change), set limits, + scale or value format, block or unblock items or sections, or understand item status and + option flags. Sources IM 36K10G10-01EN (Tutorial); to be extended with IM 36K10C10 in phase 5. +--- + +# Item engineering (R1.03) + +Background: `knowledge/manuals/IM36K10G10-01EN.md` (chapter 3). Bulk creation of sections and +items uses quick load files: skill `system-management`, task `load-remove-records.md`. +Reading and writing values: `system-management` task `read-write-item.md`. + +Rules: +- Run the `system-check` skill first; follow the user's chosen way of working for any change. +- Names: `Section.Sub-section.Item`, max 255 bytes, no `:` or `.` inside a name, case insensitive. + +| Task | File | Status | +|---|---|---| +| Sub-items (integrator, min-max) | `tasks/sub-items.md` | verified | +| Block / unblock an item; write to a blocked item | `tasks/block-item.md` | verified | diff --git a/.claude/skills/item-engineering/tasks/block-item.md b/.claude/skills/item-engineering/tasks/block-item.md new file mode 100644 index 0000000..581cd3e --- /dev/null +++ b/.claude/skills/item-engineering/tasks/block-item.md @@ -0,0 +1,36 @@ +--- +task: Block / unblock an item and write to a blocked item +version: R1.03 +source: IM 36K10G10-01EN §3.3, §3.4; practiced with CI-Eng-Sample 2026-09-30 +status: verified +--- + +# Block / unblock an item + +A blocked item is not updated (e.g. during device maintenance). Blocking can be done per item, +sub-item or section; sub-items of a blocked item keep working. **Changes live behaviour:** +follow the user's chosen way of working. + +Block (`BLOCKED` 1) or unblock (`BLOCKED` 0) with an update file and `dssqld -m`: + +``` +@FIELDS +NAME,BLOCKED + +@ITEM_DF +"
.",1 +``` + +``` +dssqld -m block.qli -l block.qlo +``` + +(Engineering Module: right-click the item or section › *Block/Unblock*.) + +## Behaviour (verified on `CI-Eng-Sample.TANK1.INFLOW`) + +- Blocked: option flag `blk` appears in `itmval -g`; the status number is unchanged (stayed 9). +- `itmval -p -n -v ` on a blocked item is **silently ignored** (no error, value + unchanged; `knowledge/issues.md` ISS-011). Add `-o` to overwrite: + `itmval -p -n -v -o`. +- After unblocking, `blk` is replaced by `ublk` (meaning not yet confirmed, see ISS-001). diff --git a/.claude/skills/item-engineering/tasks/sub-items.md b/.claude/skills/item-engineering/tasks/sub-items.md new file mode 100644 index 0000000..1bd6453 --- /dev/null +++ b/.claude/skills/item-engineering/tasks/sub-items.md @@ -0,0 +1,37 @@ +--- +task: Create sub-items (integrator, min-max) +version: R1.03 +source: IM 36K10G10-01EN §3.1.5, §3.2.3; practiced with CI-Eng-Sample 2026-09-30 +status: verified +--- + +# Sub-items + +A sub-item hangs under an item (`
..`) and processes the main item's value. +Types: `Integrator`, `Min-Max`, `Pulse`, `Rate-of-Change`, `Typeless`. Sub-items cannot connect +to equipment, cannot have sub-items, and are **not** blocked when the main item is blocked. + +Quick load (`SUB_ITEM_DF`; the main item must exist): + +``` +@FIELDS +NAME,DESCRIPTION,SUB_TYPE,TIME_UNIT,MIN_MAX + +@SUB_ITEM_DF +"CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS","Pump 1 running time (seconds)","Integrator","","" +"CI-Eng-Sample.TANK1.LEVEL.MAX","Tank 1 maximum level","Min-Max","","Maximum" +``` + +Load with `dssqld -i .qli -l .qlo`; remove with a `NAME`-only file and `dssqld -r` +(before removing the main item). + +## Behaviour (verified) + +- **Integrator** adds *value × seconds*: with the main item at 1 it grows by 1 per second. + `TIME_UNIT` (e.g. `Hour`) made no difference (`knowledge/issues.md` ISS-010); to show hours, + divide by 3600 where the value is used. +- **Min-Max** with `MIN_MAX` = `Maximum` (or `Minimum`) keeps the highest (lowest) value + written to the main item: writing 30, 70, 50 gave 70. +- `TIME_UNIT` (Second, Minute, Hour, Day) belongs to Rate-of-Change (from docs, not practiced). + +Example files: `examples/CI-Eng-Sample/02b_sub_item_df.qli`, `90b_remove_sub_item_df.qli`. diff --git a/knowledge/progress.md b/knowledge/progress.md index 7a4d745..342cea7 100644 --- a/knowledge/progress.md +++ b/knowledge/progress.md @@ -97,9 +97,9 @@ now come before classes and objects (phase 6), and the other interfaces follow a | C10 | Windows settings changes (power, virtual memory, Defender, updates, …) | not practiced | n/a | Test PC kept as a development PC (user decision 2026-09-30); not applied. | | C10 | Vnet/IP drivers / Vnet/IP Interface Package | not practiced | n/a | No Vnet/IP card; not supported on Windows 10 Pro. | | C30 | IT Security Tool, Domain Link Management, account utilities | not practiced | n/a | Not installed and not supported on Windows 10 Pro. | -| G10 | Sub-items: Integrator, Min-Max (`SUB_ITEM_DF`) | practiced, awaiting confirmation | added (awaiting confirmation) | Integrator adds value × seconds; `TIME_UNIT` ignored. | -| G10 | Block / unblock an item (`ITEM_DF.BLOCKED` via `dssqld -m`); write with `itmval -o` | practiced, awaiting confirmation | passed (awaiting confirmation) | `blk` flag, writes without `-o` silently ignored; `ublk` after unblock ([ISS-001](issues.md)). | -| G10 | Trigger group, class (compile on load), object via quick load | practiced, awaiting confirmation | added (awaiting confirmation) | `DEMO.COUNTER` counts every second; full remove/load cycle clean. | +| G10 | Sub-items: Integrator, Min-Max (`SUB_ITEM_DF`) ([task](../.claude/skills/item-engineering/tasks/sub-items.md)) | passed | passed | Integrator adds value × seconds; `TIME_UNIT` ignored. | +| G10 | Block / unblock an item (`ITEM_DF.BLOCKED` via `dssqld -m`); write with `itmval -o` ([task](../.claude/skills/item-engineering/tasks/block-item.md)) | passed | passed | `blk` flag, writes without `-o` silently ignored; `ublk` after unblock ([ISS-001](issues.md)). | +| G10 | Trigger group, class (compile on load), object via quick load ([task](../.claude/skills/class-object-engineering/tasks/load-class-object.md)) | passed | passed | `DEMO.COUNTER` counts every second; full remove/load cycle clean. | | G10 | Authorization group and user creation | not practiced | n/a | Creates CI Server login accounts; left for the user or phase 5. | | G10 | Displays, symbols, Operator Interface test | not practiced | pending | GUI (Edit Module); phase 10. | | G10 | Lines / stations / points, alarms, reports, audit, RDBMS, history | not practiced | pending | Covered in their own phases (5–12). |