docs(plans): create-time bindings — live rig gate PASS (Object-node pick, prefill, 30/30 bound, deploy-gate A/B) + task status
Claude-Session: https://claude.ai/code/session_01G2GHPnbbKGvyyfbr2XBRVH
This commit is contained in:
@@ -813,3 +813,64 @@ dotnet test tests/ZB.MOM.WW.ScadaBridge.CentralUI.Tests
|
|||||||
dotnet test tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests --filter Flatten
|
dotnet test tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests --filter Flatten
|
||||||
```
|
```
|
||||||
Expected: 0 errors, all green (the known env-only Playwright E2E project is not in this list). Then `git log --oneline main..HEAD` shows 7 commits; hand off via superpowers-extended-cc:finishing-a-development-branch.
|
Expected: 0 errors, all green (the known env-only Playwright E2E project is not in this list). Then `git log --oneline main..HEAD` shows 7 commits; hand off via superpowers-extended-cc:finishing-a-development-branch.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Status — implemented 2026-08-21
|
||||||
|
|
||||||
|
All 9 tasks done on branch `create-instance-bindings`. **Tasks 4 and 5 landed in one
|
||||||
|
commit**: Task 4's card-state fields are write-only until Task 5's markup reads them and
|
||||||
|
the CentralUI project treats unused-field warnings as errors, so Task 4's "build → 0
|
||||||
|
errors" gate is unachievable in isolation (plan defect). Task 4's instruction to move the
|
||||||
|
existing `@code` fields into the partial was skipped — a partial class already shares
|
||||||
|
private members across files. The card also drops the `binding-panel` class the Configure
|
||||||
|
panel carries: it has no CSS rule anywhere in the repo.
|
||||||
|
|
||||||
|
### Task 7 — live check on the docker rig (PASS)
|
||||||
|
|
||||||
|
Image built with `docker/build.sh` from the worktree, rig recreated with
|
||||||
|
`docker compose -f <main>/docker/docker-compose.yml up -d --force-recreate`; central
|
||||||
|
`/health/ready` Healthy in ~20s. Driven in Chrome at `http://localhost:9000` as
|
||||||
|
`multi-role`. Template **Motor Controller** (id 4, 3 compositions) at **Test Plant A**
|
||||||
|
(site 1, `OPC PLC Simulator`, OpcUa).
|
||||||
|
|
||||||
|
1. **Card appears on template+site.** `30 data-sourced attribute(s) in 4 group(s)` —
|
||||||
|
`(instance)` 13, `CoolingTank` 7 *(incl. DrivePump, DrivePump.AlarmSensor,
|
||||||
|
DrivePump.TempSensor)*, `CoolingTank2` 7, `Pump` 3 *(incl. AlarmSensor, TempSensor)*.
|
||||||
|
Identical grouping to the Configure page, nested modules folded. `4 group(s) unbound`,
|
||||||
|
footer "saves 0 binding(s)".
|
||||||
|
2. **Object-node selection works.** Root `Browse…` opened the picker with the new
|
||||||
|
"Select an object or tag" prompt; every root node (`OpcPlc`, `Boilers`, `Locations`, …)
|
||||||
|
rendered as a *clickable* link — all Objects, plain text before this change. Picked
|
||||||
|
`nsu=http://microsoft.com/Opc/OpcPlc/Boiler;i=5`; it landed in the root Object box.
|
||||||
|
3. **Prefill.** Every group took the connection; `(instance)` took the root verbatim (no
|
||||||
|
pill); the three module groups got `{root}.{groupKey}` with a **suggested** pill. All
|
||||||
|
four → **bound**, the unbound badge cleared, footer "saves 30 binding(s)".
|
||||||
|
4. **Per-group Browse.** `Pump` → picked the `Locations` Object (`i=31915`); the value
|
||||||
|
replaced the suggestion and the **suggested** pill disappeared (a browse pick is a
|
||||||
|
typed value, per `SetGroupObject`).
|
||||||
|
5. **Create.** Landed on `/deployment/instances/3660/configure?created=1&bound=30` with
|
||||||
|
the green notice *"Instance created. 30 binding(s) saved. Test Bindings, then Deploy."*;
|
||||||
|
Configure's panel showed the same 4 groups all **bound**, Pump carrying `i=31915`, and
|
||||||
|
**Test Bindings (30)** enabled.
|
||||||
|
6. **Skip bindings.** Second instance with the box ticked → group rows collapse, footer
|
||||||
|
"Creates the instance without bindings", lands on `?created=1` (no `bound`) with
|
||||||
|
*"Instance created. Bind the groups below, then Deploy."*, `30 unbound`, Test Bindings (0).
|
||||||
|
Pre-2026-08-21 behaviour preserved exactly.
|
||||||
|
7. **Deploy gate A/B — the decisive check.**
|
||||||
|
- id 3660 (bound at creation): `4 errors — ScriptCompilation (4)`, **zero ConnectionBinding**.
|
||||||
|
- id 3661 (skipped): `34 errors — ScriptCompilation (4) + ConnectionBinding (30)`.
|
||||||
|
|
||||||
|
The create-time bindings fully satisfy `ValidateConnectionBindingCompleteness`. The 4
|
||||||
|
ScriptCompilation errors are a **pre-existing property of the rig's Motor Controller
|
||||||
|
template** (identical on both instances, unrelated to this work).
|
||||||
|
8. Both test instances deleted (`instance delete --id 3660 / 3661`).
|
||||||
|
|
||||||
|
### Task 9 — solution build + suites (PASS)
|
||||||
|
|
||||||
|
```
|
||||||
|
dotnet build ZB.MOM.WW.ScadaBridge.slnx 0 Warning(s), 0 Error(s)
|
||||||
|
dotnet test tests/…DeploymentManager.Tests Passed 148, Failed 0
|
||||||
|
dotnet test tests/…CentralUI.Tests Passed 1130, Failed 0
|
||||||
|
dotnet test tests/…TemplateEngine.Tests --filter Flatten Passed 108, Failed 0
|
||||||
|
```
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"subject": "Task 7: Live check on the docker rig",
|
"subject": "Task 7: Live check on the docker rig",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"blockedBy": [
|
"blockedBy": [
|
||||||
6
|
6
|
||||||
]
|
]
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"subject": "Task 8: Docs",
|
"subject": "Task 8: Docs",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"blockedBy": [
|
"blockedBy": [
|
||||||
6
|
6
|
||||||
]
|
]
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"subject": "Task 9: Solution build + impacted suites",
|
"subject": "Task 9: Solution build + impacted suites",
|
||||||
"status": "pending",
|
"status": "completed",
|
||||||
"blockedBy": [
|
"blockedBy": [
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
@@ -74,5 +74,5 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"lastUpdated": "2026-08-21T00:00:00Z"
|
"lastUpdated": "2026-08-21T10:20:00Z"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user