junction/.paul/ROADMAP.md
dtrentin 6f75f7feb1 feat: machine management UX + PAUL init (v0.2)
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>
2026-07-21 23:55:10 +02:00

84 lines
3.5 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 | 🚧 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 (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*