junction/.paul/ROADMAP.md
dtrentin 19fc203185 chore(paul): v0.4 + v0.6 shipped; autonomous finish run complete
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 09:00:21 +02:00

107 lines
4.8 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 | ✅ Shipped (branch v0.3.1-theming) | 2026-07-22 |
| v0.4 | OPC UA Protocol | 4 | ✅ Shipped (branch v0.4-opcua, awaiting merge) | 2026-07-22 |
| v0.5 | Fanuc FOCAS Protocol | 5 | ⏸️ Deferred (no native/Windows on dev host) | - |
| v0.6 | History & Trends | 6 | ✅ Shipped (branch v0.6-history, awaiting merge) | 2026-07-22 |
## 🚧 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*