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
|
||||
```
|
||||
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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user