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-neededlabel and is omitted here.
June 2026
Major new features (June 14 – June 28 batch)
- #879, #690, #850, #865 — 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.
- #878, #824, #808, #837, #815 — 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.
- #736, #788, #826 — 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.
- #774, #775 — 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.
- #714 — 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. - #685 — Platform-admin subdomains.
costs./infra./status.flatsbratislava.comcarved off the per-tenant app to dedicated subdomains. See Platform admin → Subdomains. - #778, #822 — AI provider toggle. Anthropic ↔ Ollama at the platform level; Ollama hidden on prod, default on sandbox/preprod/demo. See Platform admin → AI provider toggle.
- #684, #686, #687, #688 — 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.
- #829 — 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.
- #683, #679 — Mock services integration. Mock Nuki "Simulate entry" + teammate popup moved into Smart Locks screen. Mock WA impersonate merged into WA Communication screen.
- #691, #699, #681 — 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.
- #582 — Editable host personality. Operator can define concise tone in Natalia's editable personality (not hardcoded). LLM reply-draft over-confirmation reduced.
- #785, #786 — 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.
- #712, #677, #818 — Mobile parity. Mobile booking-calendar timeline. Desktop PWA dock-icon badge. Mobile composer "Improve with AI".
- #702 — Mark-cash-settled. Symmetric with Mark-Expenses-Paid; clears spurious negative-net after settling.
- #776, #805 — 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.
- #851 — notifyOnResolved on manual markDone. Template's notifyOnResolved fires on manual markDone (approve OR reject), not only cron auto-resolve.
- #821 — Translation defaults card. Clarifies tenant fallback + reveals per-admin reading-language override on teammate profile.
Major new features (June 5 – June 13 batch)
- #620, #619 — 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.
- #552 — In-app notifications. Tab shake + audio + persistent inbox bell + 60s WA fallback if not acked. Per-template
inherit/force-audio/silent/wa-onlyoverride. See In-app notifications. - #562, #583, #561, #584, #579, #578, #558, #553 — 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. - #542, #545 — 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.
- #523 — Cost observability dashboard. Cross-tenant AI + integration spend at
costs.flatsbratislava.com(superadmin only). See Cost observability. - #533 — Status page.
status.flatsbratislava.comshows all 4 envs' health (prod / preprod / sandbox / demo). See Status page. - #306 — Community portal.
/roadmapPhase 1 (in-house, vote on queued features) + Discoursecommunity.flatsbratislava.comPhase 2 (operator-to-operator forum, SSO). See Community portal. - #673, #674, #541, #564 — 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.
- #549 — Late baggage pickup. LLM detects "I'll be back at 16:00 for the bags" → V28 approval task → cleaner sees
🧳 LATE PICKUP @ 16:00chip → Nuki PIN extension if needed. See Special requests → Late baggage pickup. - #668, #671, #559 — Reservation FINANCIALS + RESERVATION panels. Booking discount row, guest breakdown (adults / children / infants / pets), Open + Regenerate Guest Book buttons. See Reservations → Financials panel.
- #519, #636 — Occupancy-aware date picker. The task due-date param widget now shows vacant/occupied days inline; operator picks dates without conflict-checking separately.
- #660, #663, #565 — Conditions engine extensions. Watched-condition auto-dismiss flipped to ANY-false semantics (was ALL-false);
messageThread.*conditions re-evaluable for auto-dismiss; newtimevalue type + time-of-day comparison. - #544, #543 — Notifications + Nuki polish. WhatsApp 'Choose action' menu no longer drops param-button groups after the first. Nuki wrong-PIN paged as
NUKI LOCK FAILUREreclassified — guest-input codes now route as access-denied not lock failure. - #567, #568, #528, #656 — 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)
- #524 — Cleaner Web App (PWA). A mobile-first PWA alternative to the WhatsApp
plánwalkthrough. 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. - #515, #513, #487, #529, #481 — V28 Supplies. Pack-size mapping with LLM web-lookup, in-app receipt viewer, configurable auto-close on restock. See Supplies.
- #415, #414, #412 — 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.
- #367, #480, #458, #459, #494, #501, #406, #407, #410, #445, #347 — 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.
- #167, #168, #342–#344, #358, #465 — 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.
- #431, #263, #242 — Special Requests. Prompt-driven LLM detection, approval-gated, per-tenant — early check-in / late checkout / wine / parking / beds / pet / other. See Special Requests.
- #502, #504, #506 — 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.
- #105–#109 — Mobile app. Operator-facing mobile shell (Pulse / Inbox / Locks / AI), PWA-installable, viewport-switches at 760 px. See Mobile app.
- #313 — V28 Message Templates editor. V28-native editor for guest-facing message bodies — no more bouncing to legacy. See Communications → Message Templates editor.
- #319 — V28 Inbox search. Search across guest names + message content. See Communications → V28 Inbox search.
- #300, #301 — 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.
- #305 — Public /changelog page. Logged-out + logged-in users see ship notes at
/changelogrenderingCHANGELOG.md. See Getting Started → Public changelog page. - #430 — Google login. Replaces Manus IAM; direct Google OAuth is the primary login path. See Getting Started → Login.
- #493 — V28 is the default UI.
/adminredirects to/v28/…; persistent switch to legacy in the top-right. See Getting Started → V28 default. - #264, #249 — Cleaner-facing surfaces. Inline special-request categories (🍷 / 🛏 / 🅿️ /
eCI? @13:00) on calendar chips + cleanerplán; cleaner vacation/unavailability tracking via WA + app. See Team & Access → Cleaner Walkthrough. - #112 — Mobile-native capability hooks.
useShare/useHaptics/useCameraavailable in the operator mobile shell + cleaner web app.
May 2026
2026-05-19 — Send Check-in data-integrity fix
- #260 — "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
- #218 — WA bot dead because
tenants.whatsappPhoneNumberIdwas NULL on tenant rows. Bootstrap migration ran; admin can edit the field in Settings → Integrations. - #215 — V28 Edit Teammate modal now uses V28 design system. See Team & Access → Teammates.
- #214 — Auto-resolve task card now shows scheduled fire time + condition status without expansion. See Tasks → Task Card.
- #213 — V28 Payout Report From/To filter inputs wired correctly; prevents catastrophic "MARK N PAID" on all-time records. See Reports → Payout Report.
- #212 — Cleaner WA free-text + photo reports now routed through LLM intent classification instead of silently dropped. See Team & Access → Cleaner Walkthrough.
- #210 — Cleaner WA
plánnow includes dashboard-assigned cleanings (previously silently invisible). See Team & Access → Cleaner Walkthrough. - #187 — Pulse Copilot UX: send button no longer clipped; CMD+V paste-image works. See Pulse Copilot → Usage.
- #186 — Pulse Copilot reliability: timeout + hallucination guard. UI shows ✓ badge only when tool actually executed. See Pulse Copilot.
- #185 — "Add FAQ entry" task no longer fails with "Property not found" (placeholder schema regression). See Communications → FAQ Knowledge Base.
- #182 — Cleaner WA walkthrough no longer sends mixed-language messages (Slovak scaffolding + cleaner-language labels). See Team & Access → Cleaner Walkthrough.
- #181 — 27 "New Task Created" notification flood after admin photo eliminated; admin chat now visible on
/v28/wa-comm. See Tasks → Notifications, Reservations → Messages. - #180 — Silent skip no longer marks task
done— moves tofailedwith reason. See Tasks → Auto-resolve, Admin → Activity Log. - #173 — Loading state UX: every data-fetching screen shows a skeleton instead of blank. See Getting Started → Dashboard, Tasks → Task List.
- #171 —
assign_cleanertask action respects the May-16 unassignment fix. See Team & Access → Cleaner Walkthrough. - #166 — Removing teammate access code now revokes Nuki PIN end-to-end. See Team & Access → Access Codes.
- #164 — V28 Team & Account feature parity: access-code editor + per-teammate guestbook generation + Generate Nuki PIN + 2N QR. See Team & Access → Teammates.
- #156 — AI Suggest no longer pollutes language detection with synthetic system notes. See Communications → AI Suggest, Communications → Languages.
- #153 — V28 editor allows saving a template with
allowDismissonly (no action) with proper validation surfacing. See Task Templates → Editor. - #151 — Cleaner WA walkthrough: prefetch next item; photos accepted without
📷 Fototap. See Team & Access → Cleaner Walkthrough. - #137 — NULL
propertyNameon reservation6147057327data fix. See Properties → Property List.
2026-05-17 — V28 Reports parity
- #254 — Task-template validator no longer false-flags
{{guest.email}}/{{guest.name}}as unrecognised placeholders. See Task Templates → Placeholders. - #161 — 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:
- The relevant page(s) in this manual are updated.
- The issue gets the
user-manual:documentedlabel. - A line is added to this changelog under the relevant date.
When an issue is purely technical (security audits, refactors, internal helpers, test infrastructure):
- The issue gets the
user-manual:not-neededlabel. - It's not added to this changelog.
- The developer reference under
docs/captures it instead.
Older history
Pre-May 2026 changes are not retroactively documented here. For pre-May history, see:
docs/v28-redesign-mapping.md— V28 redesign scope (read-only ports).docs/cleaner-walkthrough-rollout-playbook.md— cleaner walkthrough rollout history.- GitHub issue history with the
documentationandenhancementlabels.
Source: the FlatsBratislava operator manual.