- New device kind Ventilation with driver Vallox (WebSocket protocol of the unit's web UI:
READ_TABLES/WRITE_DATA, checksum, big-endian table); no migration (enums stored as text)
- Read profile incl. remaining minutes, outdoor/supply/extract/exhaust air temperatures,
humidity, CO2, fan speed; activate Home/Away/Boost/Fireplace (timed profiles use the
duration configured on the unit)
- Same SSRF protection as Shelly (shared connection handler), permissions, action log, audit
- Admin dialog without generation/channel/credentials for ventilation, device card with
values and profile buttons
- Tests: unit (protocol vs. reference bytes, driver, loopback WebSocket, SSRF, rules), bUnit
- ADR-0025, roadmap phase 19
- LearningSet.Passage (plain text, <= 3000 chars, normalized, locked after the first attempt); true/false as fixed-option choice items
- passage shown with every question for the child (runner, result) and in parent review; photo/answer-check AI prompts get it as delimited material
- editor field, true/false helper, AI draft task kind (standard, reading comprehension, word problems) with prompt, schema and parser checks
- migration Phase16LearningText; unit, bUnit and integration tests; docs (ROADMAP, ARCHITECTURE, ADR-0021 addendum)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- AppUser.BirthDate (optional): admin edits in user management, every user edits own via PUT /api/auth/me/birth-date; validator (not before 1900, not future); BirthdayRules (age, leap day 29.2. -> 28.2.)
- Privacy: directory BirthDate only for self, admin and family; audit log without the value
- Calendar template "Geburtstag": CalendarEvent.BirthDate, all-day yearly series enforced server-side, age and display title per occurrence, ICS/CalDAV export as single series with category, BirthDate kept on CalDAV PUT
- Migration Phase15Birthdays, tests (unit, bUnit, integration), docs (ROADMAP, ARCHITECTURE, ADR-0015 addendum)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Thinking models (qwen3) spent the token budget on reasoning and returned empty or
truncated content. Ollama requests now send think=false, chat replies get 3000 tokens
and <think> blocks are stripped. Admins see the last 20 AI exchanges (in memory only,
never the private AI chat) in the KI tab.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Local models may ignore the response schema (e.g. returning "exercises" instead of "items"), which made every draft fail.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Unit tests for signature/size/retention rules, strict AI schema and confidence handling,
prompt content and child DTO leak checks; integration tests for rights (404 for strangers),
deadline 409, invalid files, fake-server AI grading including missing provider/opt-in cases,
and retention. Retention 0 deletes photos at confirmation; photos past retention are purged lazily.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Adds the Mit KI erstellen dialog to the parent overview (shown from
GET /api/ai/status), a cloud privacy hint, the review report and a
KI-generiert, bitte pruefen notice in the set editor. bUnit coverage for
visibility, dialog states and escaped output.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
POST /api/learning/sets/ai-draft (LearningManage + AiUse) builds a fixed system
prompt from validated parameters, validates every returned task, recomputes
number solutions and stores the result as an unassigned draft with provenance.
AiStatusDto reports whether the generation provider is a cloud provider.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
PhotoUpload component (camera and file picker, preview, replace/remove), photo next to task and
model solution in AttemptReview, parent-triggered AI grading button visible only when the status
offers photo grading, retention setting in the admin settings editor, bUnit coverage.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>