junction/.paul/paul.json
dtrentin 53ce8ab4da feat: per-machine data-item selection (v0.3)
Users pick which data items each machine monitors. Catalog comes from the
protocol probe; selection is opt-in and filters persistence (only selected
items are read/kept/saved). Whole solution green, 138 tests + 2 docker integration.

Domain:
- Machine.MonitoredItemIds (opt-in, empty = monitor nothing); backward-compatible
  optional ctor param + With override.
- DataItemDescriptor (protocol-agnostic catalog entry).
- IProtocolDriver.ProbeAsync → full unfiltered item catalog.

MTConnect:
- MtconnectDriver.ProbeAsync (GET /probe → parser → descriptors).
- ReadCurrentAsync filters snapshot items to selected ids (ConnectionState
  preserved); factory passes selection into driver.

Persistence:
- machines.MonitoredItemIdsJson column + idempotent ALTER-if-missing migration.
- Repository maps selection (System.Text.Json); round-tripped.

Core:
- IMachineMonitor.ProbeAsync(machine) exposes catalog to the UI via the plugin
  factory.

App:
- Config: "Load items" probes the machine, shows a checklist (select all/none),
  pre-selects existing choices in edit mode, offline fallback, saves selection.
- Detail: empty-state hint when a machine has no monitored items.

PAUL: v0.3 Phase 3 shipped; Phase 3.1 (theming/UX) next.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 00:28:47 +02:00

25 lines
470 B
JSON

{
"name": "Junction",
"version": "0.3.0",
"milestone": {
"name": "Data-Item Selection + UX",
"version": "0.3.0",
"status": "in_progress"
},
"phase": {
"number": 3,
"name": "Data-Item Selection",
"status": "complete"
},
"loop": {
"plan": "v0.3-appui",
"position": "PAUSED"
},
"timestamps": {
"created_at": "2026-07-21T23:30:00Z",
"updated_at": "2026-07-22T00:40:00Z"
},
"satellite": {
"groom": true
}
}