diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ea674146..b60ff19b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,73 @@ # Changelog +## [1.41.0] — 2026-10-07 + +The Coach reasons before it answers, shows what it is doing while it works, +asks when a question is ambiguous, and remembers what it is told. + +### Added + +- **Reasoning.** Codex, OpenAI, Anthropic, OpenRouter, gateways and local + servers receive the requested reasoning in their documented dialect; + reasoning summaries stream to the Coach, signed or encrypted reasoning state + is carried between tool rounds and never stored, and a model that rejects a + reasoning parameter is retried without it (the downgrade is learned per + provider, endpoint and model for an hour, only from a 400 that names the + parameter). Thinking depth per person under Coach settings (Off, Light, + Balanced, Deep; Balanced by default); an operator switch and maximum under + Admin, Assistant; turns on the operator's budget are capped at Balanced. + `/api/auth/me` publishes the resolved `coachReasoning`. +- **Budgeted tool loop.** A turn runs against a token, time and round budget + (own provider 120k tokens, 150 s, 12 rounds; operator 40k, 90 s, 6 rounds) + with a no-progress brake and a reserved final round that keeps the tool + definitions with `tool_choice: none`. Every round is reserved against the + daily budget beforehand and settled afterwards. At most two concurrent turns + per person. +- **Live trail.** One quiet status line per answer (`activity` frames), never + expanded by itself; the screened reasoning text is stored encrypted + (`coach_messages.trail_encrypted`) and served lazily by + `GET /api/insights/chat/{id}/messages/{messageId}/trail`. +- **Comparisons.** `compare_series` (two periods or two metrics) and a + `compare` chart; tables arrive as interim results before the answer. +- **Clarifications** as suggested replies in the thread, at most one in six + turns and three a day; a declined or limited question becomes a stated + assumption with a reply that changes it. +- **Memory and plans.** Every turn carries an egress-checked memory block; + `remember_fact` saves preferences, goals and context with a visible note and + undo, health facts only after the person agrees; `propose_plan` suggests a + plan from a stated goal. Both are written only when the answer that shows + them is stored. Background extraction runs once a conversation is quiet for + 30 minutes; plan progress reaches the daily briefing. The memory list in + settings shows each fact's source and accepts edits. +- **Background reasoning** for the daily briefing (scheduled and on request) + and the weekly and monthly narratives; status cards never reason. + +### Fixed + +- **Dose-change screen.** The outbound screen blocks the dose-change class + across all seven languages, including the person's own medication names, + drug classes, spelled-out amounts and "extra / one more"; plan texts go + through the same screen. +- **Glucose by time of day.** The usual-range line, the MCP baseline and the + signals of the day compare glucose with the same hours of earlier days + instead of setting a morning reading against whole-day means. +- **Usual-range line** names the date of a latest reading that is not from + today, and a steady value as one figure. +- **Memory refresh** asks the Coach capability before deferring, so a + switched-off Coach does not re-queue it. + +### Changed + +- **Answer voice.** The first sentence answers; 40 to 120 words; at most one + next step. +- **Keyboard focus** is drawn in a neutral tone everywhere. + +### Migrations + +- `0376_ai_reasoning_controls`, `0377_coach_message_trail`, + `0378_coach_fact_source`: additive columns with constant defaults or + nullable; no table rewrite. + ## [1.40.6] — 2026-10-05 The Coach reads long series again; "today" only from today's readings; the diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index ff0caef05..650820e4d 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: HealthLog API - version: 1.40.6 + version: 1.41.0 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/package.json b/package.json index 022eeaa01..540f470a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.40.6", + "version": "1.41.0", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "PolyForm-Noncommercial-1.0.0", "homepage": "https://healthlog.dev",