Commit Graph

23 Commits

Author SHA1 Message Date
a6c750d5c4 6.1 MqttPublisher hosted service
Persistent MQTTnet v4 IMqttClient wrapped in a BackgroundService:
attempts to connect on StartAsync (logging and continuing on failure)
and reconnects on a 5s loop while running. Exposes IsConnected so
6.4 can wire it into /health later. Honors username/password and
UseTls from MqttOptions; clean session is disabled.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 15:10:59 +02:00
521c95c10b 5.2 ImageController.GetImage
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:47:41 +02:00
abe896a7ab 5.1 FramesController.UploadImage (multipart)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:46:00 +02:00
a0fa0205e5 4.1 ImageStore
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:43:28 +02:00
ad62ce00a5 3.4 ImagePipelineTests golden fixtures
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:41:32 +02:00
5d0d5ed185 3.3 IImagePipeline + ImagePipeline
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:36:54 +02:00
54755c3808 3.2 DitheringRegistry
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:34:36 +02:00
0e757e4193 3.1 PaletteFactory
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:32:36 +02:00
0a936a9f04 2.4 Drop sample configs in repo root
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:31:16 +02:00
0dc0da8de1 2.3 Startup vs reload asymmetry (FramesRegistry)
FramesRegistry validates strictly on construction (fail-fast at startup) and
leniently on hot-reload (skip invalid frames with a warning, keep valid ones
serving). Exposes TryGetByName/TryGetByMac over the current valid set.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:27:20 +02:00
d0fa755534 2.2 FramesOptions (frames.json binding + validator)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:21:24 +02:00
20e6aafaa1 2.1 Configuration POCOs (Mqtt, Storage, UrlFetch, ApiKey)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:15:34 +02:00
79039623e8 1.7 ApiKey value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:12:16 +02:00
1b236e03af 1.6 DitherAlgorithm value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:10:43 +02:00
fa0081b923 1.5 PaletteEntry value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:09:15 +02:00
7d9c7ba338 1.4 Resolution value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 14:00:39 +02:00
c5f87d352a 1.3 Orientation value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:59:20 +02:00
cfaa4e86ab 1.2 FrameName value type
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:57:38 +02:00
c74dbd2602 1.1 MacAddress value type
Permissive parser (colon, hyphen, unseparated; case-insensitive; surrounding
whitespace) with canonical lowercase no-separator ToString. Implements
IParsable/ISpanParsable for ASP.NET route binding and ships a System.Text.Json
converter that normalizes on read.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:55:48 +02:00
ee77e5656e 0.3 Package references
Add SixLabors.ImageSharp 3.1.11 (last open-source version; 4.0 requires
a paid license), MQTTnet 4.3.7.1207 (v4 matches the APIs referenced in
SPEC/PLAN), and Serilog (AspNetCore + Console + File sinks).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:51:26 +02:00
65c398a578 0.2 Minimal Program.cs
Wire up MVC controllers and add GET /health returning
{ status: "Healthy", mqttConnected: false } (mqttConnected hardcoded
until the MQTT publisher lands). Switch launchSettings.json to port
8080 so the DoD curl works out of the box.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:48:02 +02:00
5f851ed621 0.1 Solution + projects
Scaffold FrameProcessor.slnx with src/FrameProcessor (net10.0 Web SDK) and
tests/FrameProcessor.Tests (xUnit) plus .gitignore and global.json pinning
the .NET 10 SDK. dotnet build, dotnet test, and dotnet format --verify-no-changes
all pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 13:45:39 +02:00
3fa14ff732 Initial plan 2026-06-07 13:32:14 +02:00