Changelog

Changelog

What changed in the platform, when, and which manual section it affects. Read top-to-bottom for the recent history; jump to a section if you're looking for a specific feature.

Scope. This changelog covers user-facing changes — features added, bugs fixed that operators saw, UI affordances surfaced. Purely technical work (security audits, refactors, internal helpers) is tracked in GitHub issues with the user-manual:not-needed label and is omitted here.


July 2026

Major new features (June 29 – July 4 batch)

  • ,, — Supply canonical units. Every supply's stock lives in one of three base units — pieces / litres / kilograms. AI-assigned per product. Percent consumption uses % of one container (not % of stock). Same-property same-name dedup guard. See Supplies → Units overhaul.
  • , — Supply product images. Auto-fetch by receipt product string (not just canonical noun); LLM vision verification before save; large click popup instead of inline thumbnail; Reject + Re-fetch (AI) button. See Supplies → Product images.
  • ** — Smart-lock provider abstraction**. Nuki + 2N behind one LockProvider facade with 5-attempt retry policy for all lock calls, never-silent-error policy, 2N dispose lifecycle, no-direct-import CI ratchet. See Team & Access → Smart-lock abstraction.
  • , — V28 base-price editing. Per-property Pricing tab with calendar-grid base price + min stay + per-day override + presets. Discount % line in reservation FINANCIALS panel. See Properties → Base-price editing.
  • ,, — V28 Smart Locks overhaul. Integration-aware tabs, unified activity log with faults (⚠ chip), multi-lock status, charging V28-native panel. See Properties → Smart Locks V28 overhaul.
  • ** — Given-name greeting**. Deterministic given-name resolver at reservation ingest; every outbound greeting + calendar label + task overview uses guests.givenName, not raw name field. Recurrence-proof ratchet. See Communications → Given-name greeting.
  • ,,,, — Pulse Copilot capability epic. Approval gate on ALL mutations (including raw execute_trpc), anti-clobber read-merge, self-approval bypass fix, fuzzy/substring fallback + anchor-hints, missing admin-domain writes (email / pricing / set_cleaner / FAQ / message templates), AI Cockpit config read + writes, audit coverage extended, operator-friendly language. See Pulse Copilot → Capability parity.
  • , — Copilot cost + resilience. Right-sized specialist models to Sonnet 5 / Haiku with self-healing model resolution (no hardcoded SKUs). Cap tool-result dumps + stabilize prompt-cache prefix (72% spend on cache writes fixed). Plan/critique/revise pipeline collapsed to single specialist loop.
  • ,, — Beds24 enhancements. Reservation pull now covers Beds24-only properties. Setup validates read:bookings-personal scope. Rate/availability push live. V28 PM connector editor (provider + property ID + Test Connection + Map room). See Channel sync → Beds24 enhancements.
  • ** — V28 Tasks EDIT**. V28 Tasks page now supports editing a task instance (name / type / overview / property / duration) — legacy parity closed.
  • ** — REOPEN discoverable**. Collapsed done-task rows now surface REOPEN without expanding first.

June 2026

Major new features (June 14 – June 28 batch)

  • ,, — Validator + refine architecture. Unified outbound validation across both send paths. 3-button surface (Refine / Send Anyway / Dismiss) on all 8 send surfaces. Autonomous auto-refine loop (cap 5 + WA escalation). Configurable blocking threshold per template. General outbound delivery guard — no silent-done. See Validator + refine.
  • ,, — Supplies 4-level model. Parsed name / corrected name / product type / category. Merge-by-product-type across receipts. Unified Pack Sizes + Correct-names editor in a slide-over. AI canonical button. Ignore list. See Supplies → 4-level model.
  • , — Supplies consumption categories. Four-category model (Guest Consumables / Cleaning Supplies / Stay Essentials / Reusables) drives per-supply spend config + stale-stock warnings + Add-supply dropdown grouping. See Supplies → Consumption categories.
  • , — Per-property message templates. Templates moved per-property (not tenant-global); per-property override on top of global default. V28 Inbox REPLY WITH TEMPLATE picker now shows correct templates. See Communications → Per-property templates.
  • ** — Super-admin tenant switcher**. Dropdown in V28 top-nav lets superadmins switch tenants without re-login. Audit log captures actor=superadmin-impersonate:<id>. See Platform admin → Tenant switcher.
  • ** — Platform-admin subdomains**. costs. / infra. / status.flatsbratislava.com carved off the per-tenant app to dedicated subdomains. See Platform admin → Subdomains.
  • , — AI provider toggle. Anthropic ↔ Ollama at the platform level; Ollama hidden on prod, default on sandbox/preprod/demo. See Platform admin → AI provider toggle.
  • ,, — V28 nav reorganization. Team & Billing → Operations as "Team". AI Cockpit Agents renamed "Chat Agents" + new "Event Agents" tab. Admin log items (Activity/Audit/Webhook/Errors) into one "Logs" entry with tabs. Manual Trigger folded into Smart Locks as per-property button.
  • ** — Task-template 8-phase lifecycle**. new / preparation / checkin / guest care / checkout / after stay / troubleshooting / other. All existing templates reset to "other" for manual re-categorization. See Task Templates → Lifecycle phases.
  • , — Mock services integration. Mock Nuki "Simulate entry" + teammate popup moved into Smart Locks screen. Mock WA impersonate merged into WA Communication screen.
  • , — Translation polish. Payout-report no longer translates admin action buttons (Print / Mark-Paid / Export CSV). Hardcoded Slovak glossary in payments.ts:579 removed. WA Communication surfaces target translation language.
  • ** — Editable host personality**. Operator can define concise tone in Natalia's editable personality (not hardcoded). LLM reply-draft over-confirmation reduced.
  • , — Pulse Copilot polish. Operator-friendly language (no tRPC/tool names / system-prompt jargon). Task-template audit log captures WHY + corrects copilot vs operator actor attribution.
  • , — Mobile parity. Mobile booking-calendar timeline. Desktop PWA dock-icon badge. Mobile composer "Improve with AI".
  • ** — Mark-cash-settled**. Symmetric with Mark-Expenses-Paid; clears spurious negative-net after settling.
  • , — PWA + crash resilience. SW stale-app-shell fix (login no longer fails on first load after deploy). ErrorBoundary chunk-load recovery + app_errors reporting + per-route mount deploy gate.
  • ** — notifyOnResolved on manual markDone**. Template's notifyOnResolved fires on manual markDone (approve OR reject), not only cron auto-resolve.
  • ** — Translation defaults card**. Clarifies tenant fallback + reveals per-admin reading-language override on teammate profile.

Major new features (June 5 – June 13 batch)

  • , — Channel sync engine. Per-property "What syncs?" matrix between FlatsBratislava and booking channels (Beds24, Hospitable) with rate / availability / content / photo push, debounced + credit-budgeted. Hospitable rows render disabled (not hidden) so the gap is visible. See Channel sync.
  • ** — In-app notifications**. Tab shake + audio + persistent inbox bell + 60s WA fallback if not acked. Per-template inherit / force-audio / silent / wa-only override. See In-app notifications.
  • ,,,, — Mobile push + parity. Push end-to-end with deep-link to entity routes, bottom-nav + iOS app-icon badges, resolve tasks on mobile, reply-with-template, calendar/occupancy on Pulse, phone-viewport redirect to /m. See Mobile → Push notifications.
  • , — Per-property manuals (AI Q&A grounded). Upload PDF / DOCX / images per property; embeddings index them; AI Suggest pulls context from operator-curated source instead of guessing. Periodic compaction of message refinements into tenant personality + FAQs. See Communications → Property manuals.
  • ** — Cost observability dashboard**. Cross-tenant AI + integration spend at costs.flatsbratislava.com (superadmin only). See Cost observability.
  • ** — Status page**. status.flatsbratislava.com shows all 4 envs' health (prod / preprod / sandbox / demo). See Status page.
  • ** — Community portal**. /roadmap Phase 1 (in-house, vote on queued features) + Discourse community.flatsbratislava.com Phase 2 (operator-to-operator forum, SSO). See Community portal.
  • ,, — Supplies enhancements. Per-item pieces-remaining chart + category filter, AI-categorize per-row button, AI auto-estimates pack sizes for products without published counts, restock event for auto-resolve. See Supplies → History.
  • ** — Late baggage pickup**. LLM detects "I'll be back at 16:00 for the bags" → V28 approval task → cleaner sees 🧳 LATE PICKUP @ 16:00 chip → Nuki PIN extension if needed. See Special requests → Late baggage pickup.
  • , — Reservation FINANCIALS + RESERVATION panels. Booking discount row, guest breakdown (adults / children / infants / pets), Open + Regenerate Guest Book buttons. See Reservations → Financials panel.
  • , — Occupancy-aware date picker. The task due-date param widget now shows vacant/occupied days inline; operator picks dates without conflict-checking separately.
  • , — Conditions engine extensions. Watched-condition auto-dismiss flipped to ANY-false semantics (was ALL-false); messageThread.* conditions re-evaluable for auto-dismiss; new time value type + time-of-day comparison.
  • , — Notifications + Nuki polish. WhatsApp 'Choose action' menu no longer drops param-button groups after the first. Nuki wrong-PIN paged as NUKI LOCK FAILURE reclassified — guest-input codes now route as access-denied not lock failure.
  • ,, — UI polish. STAY invoice no longer bundles city tax + COMBINED invoice option added. Calendar chip reads "Arriving" instead of "Check-in HH:MM" when guest's expected arrival differs from the standard time. Approve & notify button relabeled. Paste image into V28 inbox composer auto-attaches.

Major new features (May 20 – June 4 batch)

  • ** — Cleaner Web App (PWA)**. A mobile-first PWA alternative to the WhatsApp plán walkthrough. Phone-OTP login, 30-day cookie, 6 scenes (checklist / item detail / bulk-mark / issue report / offline / summary), service-worker offline queue, voice-note issue reporting. Channel B — WhatsApp Channel A stays. See Cleaner Web App.
  • ,, — V28 Supplies. Pack-size mapping with LLM web-lookup, in-app receipt viewer, configurable auto-close on restock. See Supplies.
  • , — AI Cockpit. Per-tenant per-specialist Agents editor (system prompt + model + thinking budget + tool rounds + plan-then-execute + max response tokens), turn-grouped cost dashboard. See AI Cockpit.
  • ,,,,, — Accounting. Overview KPIs (PENDING PAYOUTS / monthly BUNDLE / CITY TAX), AccPayments with source-task peek, invoice editor with EN labels, link-to-existing-invoice. See Accounting.
  • , –, — In-app Report Bug. Screenshot/video/voice capture, auto-collected context, anonymization toggle, admin viewer, 30-day retention, drag-rectangle region select. See Bug Report.
  • , — Special Requests. Prompt-driven LLM detection, approval-gated, per-tenant — early check-in / late checkout / wine / parking / beds / pet / other. See Special Requests.
  • , — Auto-refine drafts. Per-template / per-tenant policy: confident drafts auto-send; flagged drafts run a refinement pass + auto-send OR queue for operator approval; courtesy-message guard on send-message auto-complete. See Auto-refine drafts.
  • – — Mobile app. Operator-facing mobile shell (Pulse / Inbox / Locks / AI), PWA-installable, viewport-switches at 760 px. See Mobile app.
  • ** — V28 Message Templates editor**. V28-native editor for guest-facing message bodies — no more bouncing to legacy. See Communications → Message Templates editor.
  • ** — V28 Inbox search**. Search across guest names + message content. See Communications → V28 Inbox search.
  • , — Task templates audit log. Every change to a task template is logged — actor, action, field diff. Operator can restore from history. See Admin → Task templates audit log.
  • ** — Public /changelog page**. Logged-out + logged-in users see ship notes at /changelog rendering CHANGELOG.md. See Getting Started → Public changelog page.
  • ** — Google login**. Replaces Manus IAM; direct Google OAuth is the primary login path. See Getting Started → Login.
  • ** — V28 is the default UI**. /admin redirects to /v28/…; persistent switch to legacy in the top-right. See Getting Started → V28 default.
  • , — Cleaner-facing surfaces. Inline special-request categories (🍷 / 🛏 / 🅿️ / eCI? @13:00) on calendar chips + cleaner plán; cleaner vacation/unavailability tracking via WA + app. See Team & Access → Cleaner Walkthrough.
  • ** — Mobile-native capability hooks**. useShare / useHaptics / useCamera available in the operator mobile shell + cleaner web app.

May 2026

2026-05-19 — Send Check-in data-integrity fix

  • **** — "Auto-resolve was BLOCKED because the condition is not met: reservation.nukiAccessCode is_not_null" could fire even when the PIN existed. Root cause: multiple guest rows per reservation, JOIN picked one without the PIN. Fixed: the JOIN now prefers rows with non-empty access codes (canonical-row picker). See Reservations → Send Check-in, Properties → Smart Locks.

2026-05-18 — V28 polish + critical-bug sweep

2026-05-17 — V28 Reports parity

  • **** — Task-template validator no longer false-flags {{guest.email}} / {{guest.name}} as unrecognised placeholders. See Task Templates → Placeholders.
  • **** — V28 Reports completeness vs legacy /metrics; Simulation added. See Reports.

How this changelog is maintained

When an issue closes with audit:validated-* and is user-facing:

  1. The relevant page(s) in this manual are updated.
  2. The issue gets the user-manual:documented label.
  3. A line is added to this changelog under the relevant date.

When an issue is purely technical (security audits, refactors, internal helpers, test infrastructure):

  1. The issue gets the user-manual:not-needed label.
  2. It's not added to this changelog.
  3. The developer reference under docs/ captures it instead.

Older history

Pre-May 2026 changes are not retroactively documented here. For pre-May history, see:

Source: the FlatsBratislava operator manual.