Release v26.04.29.1 — Date durability + journal voice tuning #45
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Highlights
This release is two cohesive workstreams that came out of inspecting real journal usage across 4/27–4/29.
Calendar tool — date/time handling made model-agnostic
A user asked for a dentist appointment "this Friday at 8 AM" on a Wednesday and the assistant scheduled it for Thursday at 8 AM. Tracing the failure exposed two distinct fault lines, both fixed:
611c940— Splitstartintostart_date+start_time. A combined ISO datetime gives the model room to TZ-tag the calendar day; with split fields aYYYY-MM-DDstring carries no TZ to mis-tag and the day cannot drift across the local→UTC boundary. Strict regex validation rejects anything with a TZ suffix on either field. Legacy combinedstart/endkept as a backcompat fallback for saved tool-call payloads.03d725e— Anchor today's weekday + verifyexpected_weekday. Both journal and general chat system prompts now read"Today is Wednesday, 2026-04-29 (...)"instead of forcing the model to derive the weekday. Newexpected_weekdayparameter oncreate_event/update_eventrejects mismatches with a self-correcting error ("Date 2026-04-30 falls on Thursday, not Friday. Recompute…") — the local-vs-UTC distinction is covered (Tokyo Friday 23:00 stays Friday).Journal — three rough edges from real usage (Fable #157, #158, #159)
6c309f1— Persona tuning.JOURNAL_PERSONAnow leads with "CAPTURE first, advise only if asked";RESPONSE STYLEbans helpdesk-style follow-ups when the user is just logging work; emoji ban (the journal is a thinking-companion surface, not a chat bot);record_moment.contentdescription rewritten to require first-person/imperative phrasing with concrete GOOD/BAD examples (eliminates "The user mentioned…" observer voice).4f18023—record_momentdata hygiene. Server-side_filter_task_ids_by_keyword_overlapdrops moment→task links that share no meaningful keyword with the content — preempts the 4/27 Docker→ADHD auto-link bug._filter_placeholder_placesdrops generic single-word placeholders (work,home,office) that aren't real places.9f8b451— Journal prep filtering. Tasks now bucket intodue-today/upcoming/overdueso the prep stops calling 60-day-overdue tasks "due today"; overdue items surface with their staleness duration ("still on the list 68 days"). The events block now uses a TZ-aware day window (fixed RRULE expansion) plus a defense-in-depth proximity filter — eliminates the recurring "Birthday — 2026-09-29" surfacing 5 months out in every prep.MCP package
3b2a0a1— fable-mcp 0.3.0. Briefing tools removed; journal tools shipped (fable_get_today_journal,fable_list_moments, etc). Production MCP needs apipx install --forceafter this lands.Test plan
flutter analyzeandflutter testclean (Flutter side, n/a here)pytestclean — 53 tests green acrossjournal_prep+journal_search+record_moment_guards+calendar_tool_tz+events_*ruff checkclean across all touched filesexpected_weekday🤖 Generated with Claude Code