Skip to content

3.5.0: device intelligence, UX polish & correctness#44

Merged
chenliuyun merged 11 commits into
mainfrom
feat/v3.5.0-optimizations
May 11, 2026
Merged

3.5.0: device intelligence, UX polish & correctness#44
chenliuyun merged 11 commits into
mainfrom
feat/v3.5.0-optimizations

Conversation

@chenliuyun

Copy link
Copy Markdown
Collaborator

Summary

  • AI device type fallback: controlType fallback with typeSource signal; Unknown Device sentinel for typeless devices
  • Status identity injection: all status responses include deviceId + deviceType regardless of API support
  • CSS Level 4 colors: ~148 named colors for setColor (case-insensitive)
  • Command aliases: scenes run, history list
  • --once flag: shorthand for --max 1 on watch
  • --plan inline JSON: plan run accepts JSON string directly
  • Health audit layering: expected error codes (161/171/190) separated from real failures
  • Batch progress: [n/total] prefix in human mode

Validation

  • 2263 unit tests pass (Vitest, mocked, zero network)
  • 745 real-device integration tests pass (25 devices: 15 physical + 10 IR)
  • 0 code bugs found during real-device testing

Test plan

  • npx vitest run — 2263 pass
  • Real-device: status identity injection on all 25 devices
  • Real-device: AI device fallback warning on MindClip/PinNote
  • Real-device: 90+ CSS colors resolved correctly
  • Real-device: --once, --plan, aliases, batch progress, health layering
  • Real-device: watch streaming JSON structure, filter, expand combinations

chenliuyun added 11 commits May 11, 2026 14:19
AI MindClip and AI PinNote report neither deviceType nor controlType.
Previously rendered as empty/dash; now shows "Unknown Device" with a
stderr warning in describe mode.
- Status identity injection: ensure deviceId/deviceType override raw API fields
- Cache stores typeSource to distinguish deviceType vs controlType origin
- Cache-to-DeviceList synthesis respects typeSource (prevents controlType leaking as deviceType)
- --plan invalid JSON now throws UsageError (exit 2) instead of runtime error
- Tests updated for typeSource, controlType fallback warning, and stricter assertions
@chenliuyun
chenliuyun merged commit 82ad7be into main May 11, 2026
11 checks passed
@chenliuyun
chenliuyun deleted the feat/v3.5.0-optimizations branch May 11, 2026 12:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant