junction/.paul/ROADMAP.md
dtrentin cf394bab31 refactor: v0.2.1 refinements — HttpClient lifetime, disconnection UX, DataGrid
Post-v0.2 polish (no behavior regressions; 127 tests + 2 docker integration green).

- MTConnect: shared static HttpClient (Timeout=Infinite) + per-request timeout
  via linked CancellationTokenSource. Fixes socket-exhaustion risk from
  new-HttpClient-per-driver on config edits / dynamic monitor reload.
- Disconnection UX: dashboard + detail show connection state with color
  (green/red/grey dot + badge) via StatusKindToBrush converter; LastSeen
  timestamp preserved across disconnects. VMs stay framework-agnostic.
- Delete confirm: VM-driven overlay naming the machine (replaces two-state
  button) to prevent accidental deletion.
- Dashboard table: switched to DataGrid — aligned columns + Details gets its
  own column (fixes row misalignment). Adds Avalonia.Controls.DataGrid 11.3.10.

PAUL: roadmap re-sequenced — v0.3 Data-Item Selection + UX, OPC UA → v0.4,
Fanuc → v0.5, History → v0.6.

Touches: Junction.Protocols.MTConnect, Junction.App, tests, .paul/.

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

107 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 📋 Planned | - |
| 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 (T1T30 + 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*