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>
107 lines
4.7 KiB
Markdown
107 lines
4.7 KiB
Markdown
# Roadmap: Junction
|
||
|
||
## Milestones
|
||
|
||
| Version | Name | Phases | Status | Completed |
|
||
|---------|------|--------|--------|-----------|
|
||
| v0.1 | Walking Skeleton (MTConnect) | 1 | ✅ Shipped | 2026-07-21 |
|
||
| v0.2 | Machine Management UX | 2, 2.1 | ✅ Shipped (2.1 commit pending) | 2026-07-21 |
|
||
| v0.3 | Data-Item Selection + UX | 3, 3.1 | 🚧 Phase 3 done, 3.1 (theming) next | - |
|
||
| v0.4 | OPC UA Protocol | 4 | 📋 Planned | - |
|
||
| v0.5 | Fanuc FOCAS Protocol | 5 | 📋 Planned | - |
|
||
| v0.6 | History & Trends | 6 | 📋 Planned | - |
|
||
|
||
## 🚧 Active Milestone: v0.2 Machine Management UX
|
||
|
||
**Goal:** User fully manages a fleet of N machines from the UI (add/edit/delete + detail view), with reliable online/offline state and live monitor reload.
|
||
**Status:** Phase 2 complete (commit pending)
|
||
**Progress:** [██████████] 100%
|
||
|
||
### Phase 2: Machine Management UX
|
||
|
||
**Goal:** Detail screen, config CRUD, offline detection, dynamic monitor reload.
|
||
**Depends on:** Phase 1
|
||
**Research:** Unlikely (internal patterns)
|
||
|
||
**Plans:**
|
||
- [x] 02-A: Core — offline detection (fail-threshold → Disconnected) + dynamic monitor API (AddOrUpdate/Remove machine live)
|
||
- [x] 02-B: App — machine detail screen (full snapshot) + dashboard row-click nav + back
|
||
- [x] 02-C: App — config add/edit/delete screen + repo.Upsert + live monitor reload; Core AvailableProtocols
|
||
|
||
### Phase 2.1: Refinements [INSERTED]
|
||
|
||
**Goal:** Post-v0.2 polish + repo hygiene.
|
||
**Depends on:** Phase 2
|
||
**Reason:** UX/robustness feedback + tracked-artifact cleanup.
|
||
|
||
**Plans:**
|
||
- [x] 02.1-R1: MTConnect shared static HttpClient + per-request timeout (linked CTS) — fix socket-exhaustion
|
||
- [x] 02.1-R2R3: disconnection UX (status color/dot/badge + LastSeen) + robust delete confirm overlay
|
||
- [x] 02.1-tablefix: dashboard → DataGrid (aligned columns, Details own column) + Avalonia.Controls.DataGrid 11.3.10
|
||
|
||
## 📋 Planned Milestone: v0.3 Data-Item Selection + UX
|
||
|
||
**Goal:** Per-machine selection of which data items to monitor (probe catalog, opt-in, filters persistence); then themed/iconed UI polish.
|
||
**Prerequisite:** v0.2.1 committed
|
||
**Estimated phases:** 2
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 3 | Item selection: Domain Machine.MonitoredItemIds + DataItemDescriptor + IProtocolDriver.ProbeAsync; MTConnect probe + filter to selected; Persistence col; App config checklist + detail shows selected | Unlikely (probe parser exists) |
|
||
| 3.1 | Theming/UX: Fluent light/dark + accent, per-protocol icons, curated layout | Unlikely |
|
||
|
||
## 📋 Planned Milestone: v0.4 OPC UA Protocol
|
||
|
||
**Goal:** Second protocol plugin (OPC UA) proving multi-protocol architecture.
|
||
**Prerequisite:** v0.3 complete
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 4 | OPC UA driver plugin (endpoint/nodes → MachineSnapshot), config keys, tests | Likely (OPC UA SDK on net48) |
|
||
|
||
## 📋 Planned Milestone: v0.5 Fanuc FOCAS Protocol
|
||
|
||
**Goal:** Fanuc FOCAS plugin via native fwlib32 (P/Invoke, Windows-only).
|
||
**Prerequisite:** v0.4 complete
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 5 | FOCAS P/Invoke driver, native lib lifetime/marshalling, Windows-only guard | Likely (native interop; use dotnet:dotnet-pinvoke) |
|
||
|
||
## 📋 Planned Milestone: v0.6 History & Trends
|
||
|
||
**Goal:** Persist time-series, show trends in detail page.
|
||
**Prerequisite:** v0.5 (or parallelizable)
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 6 | History tables, retention, trend charts in detail view | Unlikely |
|
||
|
||
## ✅ Completed Milestones
|
||
|
||
<details>
|
||
<summary>v0.1 Walking Skeleton (Phase 1) — Shipped 2026-07-21</summary>
|
||
|
||
### Phase 1: Walking Skeleton + MTConnect
|
||
**Goal:** One configured machine polled by MTConnect plugin against docker mock, last datum live on Avalonia dashboard. net48 + net8.0 build on Linux.
|
||
**Plans:** all complete (T1–T30 + unify), 115 tests + 2 docker integration, live e2e proven.
|
||
|
||
- [x] Solution scaffold, csproj set, Directory.Build.props, global.json
|
||
- [x] Domain: Result<T>, models, IProtocolDriver/Factory, IMachineRepository, PluginManifest
|
||
- [x] Core: PollingEngine, PluginLoader (Assembly.LoadFrom), MachineMonitor, DI
|
||
- [x] Persistence: schema, SqliteMachineRepository (Dapper), swap seam
|
||
- [x] MTConnect: HTTP driver + namespace-version-agnostic parser (1.7 + 2.0) + plugin manifest
|
||
- [x] App: Avalonia shell (net48;net8.0), DI+NLog, live dashboard, seed machine, start monitor
|
||
- [x] Docker MTConnect mock; canned XML fixtures; integration test (docker-gated)
|
||
- [x] Committed + pushed to origin/main (507753f)
|
||
|
||
**Commit:** 507753f — `init: scaffold Junction multi-protocol machine monitor (M1 walking skeleton)`
|
||
|
||
</details>
|
||
|
||
---
|
||
*Roadmap created: 2026-07-21*
|
||
*Last updated: 2026-07-21*
|