M2 "Machine Management UX": full N-machine management from UI plus runtime resilience. All 3 screens now live (dashboard, detail, config). Core: - PollingEngine offline detection: consecutive-fail threshold emits a synthetic Disconnected snapshot (no-spam, resets on recovery). - MachineMonitor dynamic API: AddOrUpdateMachineAsync / RemoveMachineAsync start/restart/stop a machine's polling live (no app restart); idempotent. - MachineMonitor.AvailableProtocols exposes loaded protocol ids. App: - Machine detail screen: full current snapshot, reachable from dashboard row, live-refreshing, Back nav. - Config screen: add / edit / delete machines with validation; Save upserts + reloads monitor live; Delete two-state confirm + stops polling. - Dashboard: "Add machine" button, per-row Details, reload after mutation. Repo hygiene: - Untrack stray src/Junction.App/plugins/ build artifact (real output goes to bin/*/plugins via build target); add to .gitignore. PAUL: initialized .paul/ (PROJECT/ROADMAP/STATE + paul.json) as cross-session system-of-record. v0.1 shipped, v0.2 complete, v0.3 OPC UA next. Build 0 warn/0 err (net48 + net8.0). Tests: 125 unit + 2 docker integration. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
84 lines
3.5 KiB
Markdown
84 lines
3.5 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 | 🚧 Complete (commit pending) | - |
|
||
| v0.3 | OPC UA Protocol | 3 | 📋 Planned | - |
|
||
| v0.4 | Fanuc FOCAS Protocol | 4 | 📋 Planned | - |
|
||
| v0.5 | History & Trends | 5 | 📋 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
|
||
|
||
## 📋 Planned Milestone: v0.3 OPC UA Protocol
|
||
|
||
**Goal:** Second protocol plugin (OPC UA) proving the multi-protocol architecture.
|
||
**Prerequisite:** v0.2 complete
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 3 | OPC UA driver plugin (endpoint/nodes → MachineSnapshot), config keys, tests | Likely (OPC UA SDK on net48) |
|
||
|
||
## 📋 Planned Milestone: v0.4 Fanuc FOCAS Protocol
|
||
|
||
**Goal:** Fanuc FOCAS plugin via native fwlib32 (P/Invoke, Windows-only).
|
||
**Prerequisite:** v0.3 complete
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 4 | FOCAS P/Invoke driver, native lib lifetime/marshalling, Windows-only guard | Likely (native interop; use dotnet:dotnet-pinvoke) |
|
||
|
||
## 📋 Planned Milestone: v0.5 History & Trends
|
||
|
||
**Goal:** Persist time-series, show trends in detail page.
|
||
**Prerequisite:** v0.4 (or parallelizable)
|
||
**Estimated phases:** 1
|
||
|
||
| Phase | Focus | Research |
|
||
|-------|-------|----------|
|
||
| 5 | 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*
|