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>
4.7 KiB
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:
- 02-A: Core — offline detection (fail-threshold → Disconnected) + dynamic monitor API (AddOrUpdate/Remove machine live)
- 02-B: App — machine detail screen (full snapshot) + dashboard row-click nav + back
- 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:
- 02.1-R1: MTConnect shared static HttpClient + per-request timeout (linked CTS) — fix socket-exhaustion
- 02.1-R2R3: disconnection UX (status color/dot/badge + LastSeen) + robust delete confirm overlay
- 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
v0.1 Walking Skeleton (Phase 1) — Shipped 2026-07-21
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.
- Solution scaffold, csproj set, Directory.Build.props, global.json
- Domain: Result, models, IProtocolDriver/Factory, IMachineRepository, PluginManifest
- Core: PollingEngine, PluginLoader (Assembly.LoadFrom), MachineMonitor, DI
- Persistence: schema, SqliteMachineRepository (Dapper), swap seam
- MTConnect: HTTP driver + namespace-version-agnostic parser (1.7 + 2.0) + plugin manifest
- App: Avalonia shell (net48;net8.0), DI+NLog, live dashboard, seed machine, start monitor
- Docker MTConnect mock; canned XML fixtures; integration test (docker-gated)
- Committed + pushed to origin/main (
507753f)
Commit: 507753f — init: scaffold Junction multi-protocol machine monitor (M1 walking skeleton)
Roadmap created: 2026-07-21 Last updated: 2026-07-21