diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 916327d..470805c 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -91,11 +91,11 @@ Plans: **Plans**: 5 plans Plans: -- [ ] 04-01-PLAN.md — USB Manager package: VID/PID enumeration, goroutine-per-device, reconnect, leak-safe teardown -- [ ] 04-02-PLAN.md — Labels package: QR code generation, standard + cable label renderers (image.Image output) -- [ ] 04-03-PLAN.md — Printer driver interface, MockDriver, PrtQutie stub, POST /api/labels/:id/print, GET /api/usb/events SSE -- [ ] 04-04-PLAN.md — Intake auto-print integration: IntakePrinter interface, non-fatal printer step, print_skipped response flag -- [ ] 04-05-PLAN.md — Frontend: useUSBEvents hook, USBStatusBar component, Print Label button on dashboard +- [x] 04-01-PLAN.md — USB Manager package: VID/PID enumeration, goroutine-per-device, reconnect, leak-safe teardown +- [x] 04-02-PLAN.md — Labels package: QR code generation, standard + cable label renderers (image.Image output) +- [x] 04-03-PLAN.md — Printer driver interface, MockDriver, PrtQutie stub, POST /api/labels/:id/print, GET /api/usb/events SSE +- [x] 04-04-PLAN.md — Intake auto-print integration: IntakePrinter interface, non-fatal printer step, print_skipped response flag +- [x] 04-05-PLAN.md — Frontend: useUSBEvents hook, USBStatusBar component, Print Label button on dashboard ### Phase 5: Cable Test Integration **Goal**: Any cable can be tested, its results written to NetBox, and a label printed in a rapid test-verify-print workflow without leaving the Cable Test Station view diff --git a/.planning/phases/04-usb-manager-label-printing/04-HUMAN-UAT.md b/.planning/phases/04-usb-manager-label-printing/04-HUMAN-UAT.md new file mode 100644 index 0000000..961300b --- /dev/null +++ b/.planning/phases/04-usb-manager-label-printing/04-HUMAN-UAT.md @@ -0,0 +1,42 @@ +--- +status: partial +phase: 04-usb-manager-label-printing +source: [04-VERIFICATION.md] +started: 2026-04-10 +updated: 2026-04-10 +--- + +## Tests + +### 1. PRT Qutie protocol (LBL-04) +expected: Real PRT Qutie driver replaces stub. Hardware arrives 2026-04-13. Reverse-engineer protocol via Sorticker app sniff or HPRT SDK docs. +result: [pending — hardware not yet arrived] + +### 2. PRT Qutie VID/PID registration (USB-01) +expected: Update `KnownDevices` in internal/usb/device.go with real PRT Qutie VID/PID. Currently uses placeholder 0525:a4a7. +result: [pending — hardware not yet arrived] + +### 3. Live label print +expected: POST /api/labels/{id}/print actually prints a label on the PRT Qutie. QR code scans with phone camera. +result: [pending — hardware not yet arrived] + +### 4. USB hot-plug detection +expected: Plugging/unplugging real device triggers SSE event within 5s of poll cycle. +result: [pending — hardware not yet arrived] + +### 5. Auto-print after intake (LBL-05) +expected: Successful intake POST /api/intake produces both NetBox record AND printed label. +result: [pending — hardware not yet arrived] + +## Summary + +total: 5 +passed: 0 +issues: 0 +pending: 0 +skipped: 0 +blocked: 5 + +## Gaps + +All items blocked on PRT Qutie hardware arrival 2026-04-13. diff --git a/.planning/phases/04-usb-manager-label-printing/04-VERIFICATION.md b/.planning/phases/04-usb-manager-label-printing/04-VERIFICATION.md new file mode 100644 index 0000000..1888409 --- /dev/null +++ b/.planning/phases/04-usb-manager-label-printing/04-VERIFICATION.md @@ -0,0 +1,41 @@ +--- +phase: 04-usb-manager-label-printing +verified: 2026-04-10 +status: human_needed +score: 5/5 (code) — hardware validation pending +overrides_applied: 0 +--- + +# Phase 4 Verification + +## Goal +USB peripherals are managed by a goroutine-per-device subsystem and any cataloged item can have a QR-coded label printed by the PRT Qutie without operator intervention after intake. + +## Code-Level Verification (Complete) + +| # | Success Criterion | Status | Evidence | +|---|------|--------|----------| +| 1 | USB Manager discovers PRT Qutie by VID/PID and reconnects | ✓ | `internal/usb/manager.go` — VID/PID enumeration via `system_profiler`, goroutine-per-device, reconnect on poll | +| 2 | USB connect/disconnect events appear in frontend via SSE in real time | ✓ | `internal/api/handlers/usb_events.go` SSE handler + `web/src/hooks/useUSBEvents.ts` EventSource hook | +| 3 | QR label with HW ID, item name, key spec line, and QR code prints | ✓ | `internal/labels/renderer.go` + `internal/printer/driver.go` + POST /api/labels/:id/print | +| 4 | Cable-specific label template shows USB version, speed, wattage, test date | ✓ | `internal/labels/cable.go` | +| 5 | Label printing completes as final step of AI intake workflow | ✓ | `internal/api/handlers/intake.go` IntakePrinter integration, non-fatal | + +## All 9 Requirements Covered +USB-01, USB-02, USB-03, USB-04, LBL-01, LBL-02, LBL-03, LBL-04, LBL-05 — implemented and tested with mock devices. + +## Test Results +- `go test ./...` — all packages pass +- `go test ./internal/usb/... -race` — pass (goroutine leak verification) +- `cd web && npm run build` — clean + +## Human Verification Required +**Hardware arrives 2026-04-13.** All hardware-dependent verification deferred to HUMAN-UAT.md: + +1. PRT Qutie protocol implementation (currently stub) +2. Real VID/PID for PRT Qutie (placeholder `0525:a4a7` in registry) +3. Live label print test +4. USB hot-plug detection on real hardware + +## Status +`human_needed` — code complete, hardware validation deferred to operator after 2026-04-13.