Skip to Content
VERSION HISTORY

Platform Changelog

Track the evolution of the MCBx Platform

v1.132

Current
Released: 2026-05-19
Improvements
  • The new askMCB Heartbeats group introduced in v1.131 is now visible on the public /status page (mcbx.app/status) and in the JSON status API. A controller allowlist had silently excluded the new synthetic_chat check type so the per-tool heartbeats showed up only in the admin views.

v1.131

Released: 2026-05-19
New Features
  • askMCB synthetic heartbeats — every askMCB tool (organisation finder, prayer times, halal restaurants, learning academy, events, legal guidance, blog/page search, your-voice/WriteToPower, jobs) now has a per-tool synthetic chat probe that runs hourly and asserts the chatbot returns a real, on-topic response. Failures alert the operator via @mcb_health_bot and the central MSentry portfolio inbox within an hour — closing the 10-day detection gap that hid the v1.130 regression. A second tier of probes round-trips through the Odoo discuss.channel path (the exact code path that broke), available but dormant until proven non-disruptive in production.
Improvements
  • mcb_status: new check_type 'synthetic_chat' on mcb.health.check with regex assertion and latency threshold; new min_run_interval_minutes field that lets expensive probes (synthetic_chat) live in the same 5-minute global cron as cheap probes but actually fire only as often as their cadence allows. Reuses the existing healthy↔down transition alerter — no new alerting code path.

v1.130

Released: 2026-05-19
Improvements
  • askMCB reliability: every chatbot-service non-200 response (422 contract errors, 429 rate limits, 500s, anything else) now fires a Sentry capture so @mcb_health_bot and MSentry alert immediately — previously these errors only logged to the web server stdout and surfaced to users as a friendly "Sorry, I encountered an error" reply, which is how a regression hid in production for 10 days unnoticed.
Bug Fixes
  • Fix WhatsApp / SMS / Telegram chatbot 422 — mail_channel was sending an encrypted (stringified) user_id to chatbot-service whose Pydantic ChatRequest.user_id is Optional[int]. Every off-web chat since the PII-compliance release returned the friendly "Sorry, I encountered an error" reply. This is a regression of the v1.65 fix; we now send the raw int user_id (matching what the web controllers already send).

v1.129

Released: 2026-05-17
Improvements
  • Operator alerting: health-check transitions and chatbot LLM-key-exhaustion events now fan out to the central MSentry portfolio inbox (@MSentry_Bot) in addition to the existing @mcb_health_bot project channel. The two paths are independent — failure of one never affects the other, so the project's own bot keeps working even if MSentry is unreachable. Both Odoo (mcb_sre.send_alert) and the chatbot service (ApiKeyPool all-dead alert) post fire-and-forget to MSentry's /feedback endpoint.

v1.128

Released: 2026-05-10
Improvements
  • askMCB resilience: the chatbot now supports a pool of LLM API keys (OpenAI and Gemini) with automatic failover. If a key is rejected (auth error) or rate-limited, the chatbot rotates to the next key in the pool and the dead key is reported to Sentry. A new operator script (`scripts/deployment/rotate_llm_keys.py`) validates a fresh key against the live provider API before adding/replacing/rotating it on Railway. Chat errors that were previously hidden behind a friendly "Sorry, I encountered an error" reply with success=true now correctly surface as success=false to the caller and the per-channel error-rate metrics.

v1.127

Released: 2026-05-10
Improvements
  • askMCB observability: errors that previously surfaced only as friendly "Sorry, I encountered an error" replies on WhatsApp, SMS, and Telegram are now reported to Sentry and forwarded to the operator-only @mcb_health_bot Telegram alert channel. New per-channel error-rate health checks ("askMCB - WhatsApp / SMS / Telegram Error Rate") fire when any one channel exceeds 5% over a rolling 60-minute window.

v1.126

Released: 2026-05-07
Bug Fixes
  • Organisation Finder: mosque records imported from MuslimsInBritain.org now correctly show their data source as "MuslimsInBritain.org" rather than "Manual". Each mosque entry now carries a proper source link for full provenance tracking.

v1.125

Released: 2026-05-06
New Features
  • Map view: clicking a cluster bubble on the Organisation Finder map now offers two actions — Zoom in (the original behaviour) and View list, which slides out a panel listing every organisation inside that cluster with a direct link to each one.
Improvements
  • Hero banners across the platform no longer wrap the title onto two lines on tablet-sized screens. The accent text ("Organisation Finder", "Mizan Compass", etc.) now sits inline at tablet+ widths and only stacks below the main title on narrow phones.

v1.124

Released: 2026-05-02
Improvements
  • When the askMCB chat service is temporarily unavailable, the widget now shows a clear "temporarily unavailable, please try again" message and reminds users they can close the panel using the × in the top right.

v1.123

Released: 2026-04-28
Bug Fixes
  • Fixed the Community Dashboard stats panel being obscured by the blue Dashboard header bar. The panel z-index is now 1050, ensuring it floats above all portal headers.

v1.122

Released: 2026-04-28
Bug Fixes
  • Fixed the askMCB chat widget being covered by site navigation bars and overlays. Raised the widget z-index to 99999, ensuring it floats above all page elements including sticky headers, search dropdowns, and other UI overlays.

v1.121

Released: 2026-04-28
Bug Fixes
  • Fixed the askMCB chat widget being obscured by the site navigation bar. The widget is now injected directly into the page body instead of inside the main content wrapper, ensuring it always floats above sticky and fixed navigation elements regardless of the page.

v1.120

Released: 2026-04-28
Bug Fixes
  • Fixed the bug report panel being obscured by the blue header inside the askMCB widget. The form now opens inside the messages area (below the header), so the header with its close button remains visible and accessible while the form is open.

v1.119

Released: 2026-04-27
New Features
  • Bug reporting via the askMCB chat widget. Any visitor — logged in or anonymous — can now click 🐛 Report a problem in the widget footer, type what went wrong, annotate an auto-captured screenshot with arrows/text/blur (using marker.js 2), and submit with one tap. The report lands as a ClickUp subtask under the affected addon's parent task, tagged with bug, from-askmcb, role, browser, and severity:triage. A canonical context.json attachment carries the full structured context — URL, console errors, network 4xx/5xx, JS exceptions, navigation history, viewport, build version — so triagers (and future LLM agents) have everything they need without asking follow-up questions. The LangGraph intent classifier also detects bug-shaped messages in free chat and offers a one-tap confirm card before filing.
Improvements
  • chatbot-service gains /bug/submit, /bug/{task_id}, and /bug/list endpoints. All screenshots are sanitized server-side via Pillow (EXIF stripped, decompression bombs blocked, max 4096×4096). Reporter identity is reconstructed from the Odoo session cookie — the client cannot spoof partner_id or role. User-supplied text is markdown-escaped and wrapped in XML tags for prompt-injection defense. IP addresses are stored as HMAC-SHA256 hashes with a daily-rotating salt.

v1.118

Released: 2026-04-26
New Features
  • askMCBx homepage chat now streams responses with live status pills. While Gemini is composing the answer the widget shows what it's actually doing — "Looking for mosques near you…", "Browsing courses…", "Connecting to Ad'l for legal guidance…" — instead of a silent spinner. Token-by-token streaming drops time-to-first-character from a few seconds to sub-second on most queries. Behind the scenes the chatbot service now uses true LangGraph astream_events with structured SSE event types (status / token / done / error) and a new Odoo proxy /chatbot/stream-message route forwards them to the browser. Per-turn token usage and USD cost are now captured from Gemini's usage_metadata and broken down by channel (web_widget / sms / whatsapp / telegram / discuss / search_bar) in /metrics and Prometheus. Three new health checks — error rate, p95 latency, and cost budget — fire @mcb_health_bot alerts when the chat path regresses or runs away on cost.
Improvements
  • Persistent LangGraph checkpointer (PostgresSaver) when a database URL is configured, so chat conversations survive pod restarts and horizontal scale. Single shared chatbot-service URL helper across all Odoo callers (controller + mail-channel hook) replaces two inconsistent broken fallback URLs. New documentation: docs/architecture/CHATBOT_ARCHITECTURE.md with file:line cites for the entire chatbot pipeline.
Bug Fixes
  • Homepage chat widget was POSTing to /chatbot/message which never existed as an Odoo route — every chat call silently fell into the generic error branch. The route now exists, plus a new /chatbot/stream-message companion for SSE. Both controllers share a single helper that resolves CHATBOT_SERVICE_URL via env var → ir.config_parameter (no broken fallback to the old non-existent mcb-chatbot-service-production hostname).

v1.117

Released: 2026-04-25
New Features
  • Telegram alerts now fire on Railway build failures. Previously, /health probes alone couldn't catch failed builds — Railway keeps the previous container running while a new build fails, so /health stays 200 even when the latest deployment is broken. The new railway_deployment check polls Railway's GraphQL API for latestDeployment.status on the four production services (mcbplatform, chatbot-service, mcb-api-gateway, document-processor) and surfaces FAILED/CRASHED transitions through @mcb_health_bot.
Improvements
  • Status page exposes a new external_services.railway_deployments bucket so build status sits alongside runtime /health and external API health.

v1.116

Released: 2026-04-25
Improvements
  • Status page now monitors the MCB API Gateway alongside the chatbot service and document processor. Together with v1.114's separation of the operator-only @mcb_health_bot from the user-facing @askMCBbot, the SRE alerting pipeline now covers the full sidecar trio.
Bug Fixes
  • Internal: noted that Railway keeps the previous container running when a deploy build fails — so /health probes alone won't catch build failures. A future release will add a Railway deployment-status check to close that blind spot.

v1.115

Released: 2026-04-25
Improvements
  • WriteToPower landing page simplified. Previously the page offered four competing entry points (a hero button, two side-by-side cards, featured campaigns, and a topic grid with no heading). Now there's a clear hierarchy: choose how to start (AI suggest vs. pick recipient directly) → browse by topic → featured campaigns shown last as optional shortcuts. The premature 4-step progress bar (which showed "Step 1" before you'd started anything) is gone — it now lives inside the compose wizard where it belongs.

v1.114

Released: 2026-04-24
Improvements
  • Platform health alerts now go to a dedicated Telegram bot (@mcb_health_bot) so operator pages no longer share the user-facing @askMCBbot channel. The SRE alerter fails closed if the health-bot env vars aren't set — preventing accidental leaks into the chatbot's user chat.

v1.113

Released: 2026-04-24
Improvements
  • WriteToPower Find Your Representative — the Mapbox address preview now fills its container on the very first load, matching the fix already shipped for Community Dashboard. Previously the map could render as a narrow strip until you resized the browser window.
Bug Fixes
  • Fixed Mapbox preview collapsing on initial render in the WriteToPower recipient-search panel. Root cause: Mapbox locks its container's pixel size at construction, before the surrounding portal layout has settled. Now calls resize() on style load + a 100ms fallback + a ResizeObserver so the map reflows whenever the layout shifts.

v1.112

Released: 2026-04-23
New Features
  • WriteToPower — when you pick a topic, the recipient cards that suit that topic get highlighted and starred in the existing grid. The old separate "Recommended for this topic" container has been removed so there's one clear answer to "who do you want to write to" rather than two parallel lists.
Improvements
  • Community Dashboard map now fills its container on first load. Previously the map could render inside a zero-height box until the browser fired a resize event. Fixed via an explicit resize on style load plus a ResizeObserver for subsequent layout shifts.
Bug Fixes
  • Resize-on-load applies to every viewport, including on portrait mobile where the portal header's calc(100vh - 150px) height was resolving after Mapbox had already measured.

v1.111

Released: 2026-04-23
New Features
  • Expanded WriteToPower councillor email coverage to 50.5% — 9,637 real councillor emails across 212 of 382 UK councils, up from 1,721 emails across 30 councils. Powered by a new multi-pass scraping pipeline (Serper-based URL discovery, Playwright fallback for bespoke council CMS pages, Gemini-Flash OCR for PDF councillor directories).
Improvements
  • Portal header fix across all 18 addons — Log In and Sign Up buttons now sit reliably at the right edge of the blue header bar (the old `ms-auto` class was a no-op inside the block-level parent column). Sign Up button text is now readable — forced dark on the light background instead of inheriting the header's text-light cascade.
Bug Fixes
  • Any portal header using the shared `portal_layout` template — Community Dashboard, WriteToPower, Org Finder, Events, all other addons — gets the header-button fixes automatically via `mcb_home_screen` v1.0.16.

v1.110

Released: 2026-04-19
New Features
  • WriteToPower Councillor tab — Find Your Representative now has four options: MP, Lord, Local Council, and Councillor. Enter a postcode with Councillor selected and we'll show you the individual councillors elected for your ward, ready to select and write to.
Improvements
  • Seeded 19,102 UK councillor rows from Open Council Data (names, wards, parties for all 382 councils). Scraped 1,721 real email addresses for councillors in 30 ModernGov-powered councils — mostly London boroughs plus Manchester, Liverpool, Leeds, Sheffield, Bristol, Nottingham. Councillors in those areas now have working Select buttons; the rest show a "we don't have email on file" fallback that points users at their council's website.
Bug Fixes
  • Shared rate limit and UK-postcode regex guard extended to the new find-councillors route; safe to expose publicly on the same 2s-per-IP budget as the other postcode endpoints.

v1.109

Released: 2026-04-18
New Features
  • WriteToPower Local Council — the Find Your Representative page now offers a third option alongside MP and Lord. Enter a postcode and we'll identify your local council via postcodes.io; if we have the council's contact details on file you can write to them directly, otherwise we link you to a search for the right department on their website.
Improvements
  • Postcode form submit now branches on the selected representative-type: MP → Parliament API constituency lookup, Council → postcodes.io GSS-code resolution. Shared rate limiter and UK-postcode regex validation from v1.108 apply to both paths. Select button uses a rebind-on-render pattern so stale council objects never leak between lookups.
Bug Fixes
  • Distinct DOM ids for the inline council card so it doesn't clobber the existing 'Local Council' recipient-card finder's state.

v1.108

Released: 2026-04-18
New Features
  • WriteToPower Councillors (Phase 1) — `writetopower.recipient` gains `council_name`, `council_code`, `ward_name`, `ward_code` fields and a new `councillor` recipient_type. New `_resolve_council_from_postcode` helper wraps postcodes.io and returns authoritative ONS GSS codes (E09/E05) for both council and ward.
Improvements
  • Security hardening on all postcode-lookup paths — server-side UK-postcode regex validation prevents URL injection / path traversal against postcodes.io and the UK Parliament API. `find_council` now dedupes via the shared resolver and matches seeded councils by GSS code (authoritative) instead of free-text ilike on council name. Public search routes (`search_mp`, `find_council`, `find_mp_by_postcode`) are rate-limited at 2s/IP; AI generation keeps its existing 15s window via the new `window_seconds` kwarg on `_wtp_check_rate_limit`.
Bug Fixes
  • postcodes.io 200+`result:null` (well-formed but non-existent postcode) now returns None cleanly instead of an empty dict; new test coverage for null-result, invalid postcode shapes, and UK-postcode acceptance set.

v1.107

Released: 2026-04-17
New Features
  • WriteToPower unified representative picker — the Find Your Representative page now offers a House of Commons / House of Lords toggle. Selecting Lords collapses the postcode/address search (Lords are not constituency-based) and shows name search only. Result cards render the peerage label for Lords and the constituency for MPs.
Improvements
  • `get_mp_profile` response now includes the `house` key so the portal can render house-appropriate labels without a second round-trip. Test-driven — 3 RED/GREEN cycles covered the unified picker, `_ensure_mp_exists` persistence, and stale-row correction on re-enrichment.
Bug Fixes
  • Fix stale Lord rows never getting their house corrected — previously, re-enriching an already-cached profile only touched synopsis/biography fields, leaving house='commons' on Lords. Re-enrichment now routes through `_ensure_mp_exists` which refreshes every field from the Parliament API.

v1.106

Released: 2026-04-17
New Features
  • WriteToPower search API — the `search_mp` endpoint now accepts an optional `house` keyword (`commons` | `lords` | `both`). Default behaviour is unchanged (Commons only) so existing callers keep working. Each result is tagged with its originating house, enabling the portal to offer a Lords search path alongside MPs.
Improvements
  • Test-driven — search-mp behaviour is covered by a new RED-first test suite (`test_search_mp_houses.py`) exercising each house mode, result tagging, and graceful fallback for unknown house values.
Bug Fixes
  • search-mp route registered correctly — fix a transient syntax error introduced when inserting class-level helpers above a `@http.route` decorator.

v1.105

Released: 2026-04-17
New Features
  • WriteToPower House of Lords — backend groundwork. `writetopower.mp` now tracks which house a member belongs to (Commons or Lords) via a new `house` field. Import wizard can pull Lords (House=2) from the UK Parliament API alongside or instead of Commons. Backend list/form/search views expose house, with filters + group-by.
Improvements
  • Import wizard — single pre-fetch of existing members across both houses to avoid N+1 lookups; API house code auto-inferred from `latestHouseMembership.house` when not explicitly overridden.
Bug Fixes
  • Make `constituency` optional on `writetopower.mp` — Lords have no constituency; the peerage label is stored in that field instead.

v1.104

Released: 2026-04-10
New Features
  • Class Manager Portal Navigation — register portal config and 4 nav tabs (Home, Browse, My Classes, My Teaching), fixing /classes 404
Improvements
  • Standardize auth checks — replace _is_public() with mcb_role across 6 addons (class_manager, org_finder, askmcb, writetopower, recruitment) for consistent role-based access control
  • Portal nav active tab fallback — portal layout now falls back to page_name when active_tab is not explicitly set, fixing tab highlighting for all addons
Bug Fixes
  • Fix FA4 icon — replace fa-chalkboard-teacher (FA5 only) with fa-users in Class Manager teaching tab
  • Add MCBControllerMixin to WriteToPower API controller — prevents AttributeError on role checks

v1.103

Released: 2026-04-09
Bug Fixes
  • WriteToPower email generation broken — OpenAI deprecated gpt-4-turbo-preview model (404 errors). Replaced with gpt-4o-mini across email generation and settings. Updated model selection options to current OpenAI models (gpt-4o-mini, gpt-4o, gpt-4.1-mini).

v1.102

Released: 2026-03-30
New Features
  • CRM Bridge (Phase 5) — membership campaigns auto-create CRM leads with 5-stage pipeline (Lead, Contacted, Interested, Application, Member)
  • Telegram Channel — 5th outreach channel using existing Telegram Bot API and telegram_chat_id field
  • Smart Channel Selection — learns per-org channel preferences from response rates and times
  • 85-Test Harness — unit (39), integration (30), post-deploy (15) tests with SendGrid sandbox mode
Improvements
  • Battle-Tested E2E Flow — campaign activate → postcommit chatbot notification → AI compose → SendGrid send → touch updated to 'sent'
  • Dynamic Portal Form — shows only campaign-requested fields, with sensitive field blocklist
  • Staff Approval Workflow — approve/reject AI-parsed data before applying to org records
  • Campaign Dashboard — funnel stats, channel breakdown, agent state overview
  • N+1 Query Fix — batch-create touches and agent states in single SQL calls
  • Shared LangGraph Checkpointer — single PostgresSaver instance for both compose and response graphs
Bug Fixes
  • 38 code review fixes — XSS escaping (portal, chatter, CRM), _execute_odoo write args, postcommit transaction timing, SendGrid sandbox toggle, channel list alignment, max_followups naming, portal blocklist for sensitive fields, domain validation constraint
  • Touch write-back — fixed touch_id passing from Odoo to chatbot, write() args format, postcommit hook for transaction visibility
  • Bot user permissions — chatbot_api user added to Outreach Manager group on both environments

v1.101

Released: 2026-03-26
New Features
  • Omnichannel Outreach Engine (mcb_outreach) — new addon for autonomous multi-channel outreach campaigns targeting 3,878+ organizations
  • LangGraph Agentic Orchestration — persistent per-org agents that plan, compose, send, wait, and evaluate across email, WhatsApp, SMS, voice, and Discuss
  • ElevenAgents Voice Integration — batch calling API with real-time WebSocket transcript monitoring and server tool callbacks for mid-call data collection
  • Campaign Management — goal-based targeting with domain filters, channel priority, follow-up scheduling, and rate limiting
  • AI Response Parsing — automated extraction of structured data from free-text responses via chatbot FastAPI service
Improvements
  • Portal Outreach View — Org Reps can view and respond to outreach requests directly at /my/outreach
  • Unified Chatter Timeline — all outreach touches (email, WhatsApp, SMS, voice transcripts) logged to organization mail.thread
  • API Gateway Outreach Endpoints — 5 REST endpoints with auth scopes for campaign management
  • Outreach Tools — 6 BaseMCBTool tools (send_email, send_whatsapp, send_sms, post_to_chatter, update_org_field, get_org_context)
Bug Fixes
  • Security hardening — safe_eval replaces eval for domain filters, webhook HMAC verification, XSS input escaping on portal forms, correct portal record rules using claimed_by_partner_id

v1.100

Released: 2026-03-25
New Features
  • LangGraph Conversational Chatbot — multi-turn AI agent powered by Gemini 3.1 Pro Preview, asks clarifying questions when info is missing
  • Image Vision Analysis — upload images (flyers, posters, screenshots) for AI-powered content extraction via Gemini Vision
  • URL Content Analysis — share links and the bot extracts and discusses the page content
  • CSS Design System Migration — ~100 hardcoded colors replaced with CSS variables across 9 addons, ~80 unnecessary !important removed
  • GDPR Compliance Documentation — full DPIA following ICO guidelines + OpenAI DPA requirements checklist
Improvements
  • 26 Unified Messaging Tests — full coverage for Telegram audit trail, channel consolidation, email-to-unified-channel integration
  • Mizan Compass Brand Migration — fully migrated from Odoo purple to MCB blue palette
  • Chatbot Feature Flag — CHATBOT_USE_LANGGRAPH env var for instant rollback to legacy UnifiedAgent
  • 14 Chatbot Tools — existing 12 tools wrapped in LangGraph ToolNode + 2 new (URL analyzer, image analyzer)
Bug Fixes
  • Gemini 2.5+ multimodal response handling — extract text from list content parts returned by newer Gemini models
  • langchain-google-genai 4.0 compatibility — fixed api_key parameter name and removed deprecated convert_system_message_to_human

v1.98

Released: 2026-03-24
New Features
  • GDPR PII Compliance — consent banner required before AI chatbot processing across all channels (web, SMS, WhatsApp, Telegram)
  • User ID Encryption — Fernet encryption of user identifiers before sending to external AI service, no PII leaves Odoo
  • Right-to-Erasure — users can delete chat history via /chatbot/delete-history or by sending DELETE keyword on any channel
Improvements
  • 90-Day Data Retention — daily cron automatically deletes chatbot messages older than 90 days
  • Chatbot Service Security — API key middleware protects /chat endpoints, PII scrubbed from 16 log lines across 7 files
  • CSRF Protection — re-enabled on public chatbot endpoint, Odoo token now enforced
Bug Fixes
  • Omnichannel consent consistency — SMS, WhatsApp, and Telegram now use identical consent flow and messaging

v1.97

Released: 2026-03-24
New Features
  • SRE: Sentry Error Tracking — integrated across all 4 services (Odoo, API Gateway, Chatbot, Document Processor) with separate projects per service
  • SRE: Telegram Alerting — @mcb_health_bot sends real-time alerts for health check failures, recoveries, Twilio balance warnings, and Sentry error spikes
  • New mcb_sre Addon — dedicated SRE module with Telegram alert service, Sentry webhook receiver, and rate-limited alert delivery
Improvements
  • Correlation IDs — X-Request-ID header flows from API Gateway through Odoo for cross-service request tracing with Sentry tags
  • Health Check Transition Alerts — batched failure notifications and individual recovery alerts when service status changes
  • Twilio Balance Alerts — now route to Telegram in addition to Odoo chatter for faster response
  • Graceful Shutdown — all FastAPI services flush Sentry events on SIGTERM before Railway container restart
  • Sentry Webhook Security — HMAC-SHA256 signature verification on inbound Sentry alert webhooks
Bug Fixes
  • Health check NULL status handling — old checks with unset status no longer silently miss first failure transition

v1.96

Released: 2026-03-19
New Features
  • SendGrid Email Infrastructure — domain-authenticated outbound (noreply@mcbx.app) + Inbound Parse webhook for receiving @mcbx.app emails with routing rules
  • Email Routing System — 6 configurable rules (admin forwarding, noreply auto-reply, support, verify/outreach thread matching, catch-all)
  • Odoo Mail Integration — SendGrid inbound feeds into mail.thread for chatter replies, discuss channels, and mail aliases
  • AskMCB Chatbot — installed and activated on production with /chatbot routes
Improvements
  • CI/CD Overhaul — 4 broken workflows rewritten to use actual pytest test suite (smoke, BDD, functional), all green
  • Full Platform Audit — 5 parallel agents scanned 18 addons: 147 QWeb templates, 144 models, 60+ security ACLs, 27 CSS files, 17 manifests
  • Backend Form View Fix — chatter flex layout squeezed form sheet to zero width at wide viewports, fixed with flex-shrink constraint
  • Repository transferred from fielderone to muazamsarfaraz with Railway auto-update
Bug Fixes
  • Org Finder services 500 — field name mismatch (service_ids→service_tag_ids) + QWeb .items() sandbox violation
  • WhatsApp webhook 403 — wrong Twilio config param key (twilio.auth_token→sms_twilio.auth_token)
  • Google Fonts CDN removed from backend assets — external @import broke Odoo form rendering
  • Global .o_form_sheet CSS override removed — max-width:1400px conflicted with Odoo flexbox layout
  • Stats panel overflow fixed — height:100vh changed to max-height with overflow-y:auto

v1.95

Released: 2026-03-17
New Features
  • MCB API Gateway — 111 REST endpoints across 16 modules with Swagger docs, MCP server for AI agents, developer portal with self-service registration and webhooks
  • WriteToPower Expansion — 22 endpoints including MP voting records, parliamentary questions, NewsAPI integration, postal letter service, bulk email generation, analytics dashboards
  • Petition Integration Roadmap — research and design for UK Parliament petition discovery + MCB community petition-to-letter pipeline
Improvements
  • Security Hardening — audited all 14 addons, fixed 6 CRITICAL + 10 HIGH issues: raw SQL replaced with ORM, XSS prevention, CV upload validation, rate limiting on public APIs, sensitive field restrictions
  • API Gateway Integration Standard — all new addons now MUST expose Swagger-documented API endpoints
  • Development Skill Updated — odoo-development skill now covers security rules, API gateway pattern, addon UI templates, Odoo 19 syntax
Bug Fixes
  • API key prefix collision — validate against all matching keys not just first
  • Odoo False-to-None coercion — all gateway schemas handle Odoo's False and Many2one [id, name] format
  • pybreaker call_async bug in Python 3.11 — removed, using direct exception handling
  • Railway deployment fixes — Dockerfile system deps, line endings, healthcheck timeout

v1.94

Released: 2026-03-13
New Features
  • askMCB Full Cleanup — removed dead OrgFinderBot/LangGraph from chatbot-service, renamed addon mcb_vmm_chatbot to mcb_askmcb
  • Chatbot Service v2.0 — streamlined to UnifiedAgent-only architecture (-4,400 lines)
Improvements
  • Addon Rename — full database migration script for mcb_vmm_chatbot to mcb_askmcb across 7 DB tables
  • Documentation — rewrote all integration guides removing VMM/LangChain references
  • Cross-Addon Updates — updated mcb_messaging, mcb_status, CI workflows, and 105+ BDD test files

v1.93

Released: 2026-03-13
New Features
  • askMCB Chatbot Cleanup — removed obsolete bot registry, cleaned chatbot channel views, simplified livechat integration
Improvements
  • Livechat Channel — cleaned up deprecated VMM chatbot fields and views
  • Chatbot Views — simplified admin interface, removed legacy bot management tabs
  • Code Quality — removed unused imports and dead code paths across chatbot modules

v1.92

Released: 2026-03-10
New Features
  • Universal Search Bar — askMCBx search component integrated into homepage with autocomplete dropdown
  • Home Screen Navigation — BFS optimization, mobile horizontal scroll nav, ARIA roles (tablist, tab, aria-current)
  • CI Test Coverage — expanded from 6/17 to 17/17 addons in CI matrix with parallel jobs
Improvements
  • Mizan v2.95 — tier badge CSS, accordion animations, sticky tier params on breadcrumbs, 13 new unit tests
  • Community Dashboard — cleaned stale duplicate templates, version bump to 19.0.1.53
  • WriteToPower v3 — NewsAPI keywords now read from DB with 10-min cache, version bump to 19.0.5.0.0
  • askMCB Data Quality — verification badges per level, service tag pills on search results
  • Robust Template System — migrated 11 _is_public() references across 6 addons to MCBControllerMixin role variables

v1.90

Released: 2026-03-09
Improvements
  • Vision test pipeline fixed — updated to Gemini 3.1 Pro and Claude Sonnet 4.6, fixed Playwright viewport handling and prompt template escaping
  • All 33 visual review tests passing with AI-powered scoring (avg 7.8/10)
Bug Fixes
  • Fixed logo cutoff on mobile — responsive header with 36px logo, truncated title, hidden subtitle
  • Fixed Sign Up button invisible on mobile — forced dark text on .btn-light inside colored header
  • Fixed livechat FAB — MCB purple branding, chat icon fallback, hover tooltip instead of unexplained blue circle
  • Fixed text contrast WCAG AA compliance — darkened --mcb-gray-600, --mcb-text-muted, universal search colors

v1.89

Released: 2026-03-07
New Features
  • askMCB rebrand — chatbot landing page (/chatbot) redesigned as askMCB AI Assistant with violet brand, shared component compliance (hero, stats, process steps, feature cards, CTA), interactive search section with hint chips

v1.88

Released: 2026-03-07
Improvements
  • Learning Academy course detail page redesigned with green branding — hero gradient, styled sidebar with green accent, green tabs, polished Join button, better breadcrumb contrast, responsive card design

v1.87

Released: 2026-03-07
Improvements
  • Landing page design system compliance across 5 addons — converted to shared QWeb components (hero, feature cards, stat cards, process steps, CTA)
  • Prayer Timetable landing page: added How It Works, Features, and CTA sections with teal color scheme
  • Learning Academy landing page: green color scheme with statistics section
  • Class Manager landing page: converted category cards and CTA to shared components
  • Removed 615 lines of dead CSS across WriteToPower, YourVoice, and Class Manager portals
  • Fixed FA5-only icons (fa-quran, fa-book-open, fa-mosque) to FA4 equivalents across all addons

v1.86

Released: 2026-03-07
Improvements
  • Cleaned up 250 lines of dead CSS from org_finder_portal.css — old custom styles replaced by shared design system components
Bug Fixes
  • Fixed invisible category card icons on Org Finder landing page — replaced undefined mcb-icon-circle with shared mcb-feature-icon component
  • Fixed category grid layout from 4-column to 3-column to match actual category count
  • Removed green heading override that conflicted with blue design theme

v1.85

Released: 2026-03-07
New Features
  • Criteria browser search — filter 215 criteria instantly by name, code, or description
  • Collapsible pillar sections — click to expand/collapse each pillar group for easier navigation
Bug Fixes
  • Fixed Silver badge icon not showing (fa-medal is FA5-only, replaced with fa-star for FA4 compatibility)
  • Fixed Silver stats text contrast on rankings page (was too light on light background)
  • Fixed criteria card descriptions truncating to single line — now shows 3 lines
  • Fixed empty state icon on rankings page (fa-chart-bar FA5 replaced with fa-bar-chart FA4)

v1.84

Released: 2026-03-07
Improvements
  • Full Mizan v2.97 data import — all 215 criteria updated with 33 structured fields via JSON-RPC, 7 stale criteria archived, criteria count corrected from 220 to 215
  • Version badge displayed on criteria browser hero section and criterion detail pages showing Mizan framework version (v2.9.7)

v1.83

Released: 2026-03-07
Improvements
  • Mizan v2.97 Islamic references update — refreshed islamic_references_structured data across 147 of 215 criteria with improved Quranic verse citations, Hadith references, fiqh principles, and Islamic concepts

v1.82

Released: 2026-03-07
New Features
  • Mizan Excellence Standards v2.95 upgrade with tier-aware progressive disclosure UI
  • Import wizard rewrite supporting all 33 JSON fields with upsert by criterion code
  • 5-tab criterion detail page (Overview, Requirements, Assessment, Islamic References, Regulatory)
  • Tier-based content filtering via URL query params (?tier=basic/good/better/best) for organisation-size-appropriate views
  • Super group sub-headers on criteria browser page with tier relevance indicators on cards
Improvements
  • New model fields: maqasid_mapping, islamic_verification, change_log, tier_summary, criterion_status
  • Expanded module selections (CORE, M1, M7, M8, M9) and outcome types (Excellence, Compliance, Impact, Compliance and Culture)
  • Maturity level progression display (Level 1-5) with collapsible sections
  • Rich Islamic references rendering with Quran and Hadith source links
  • Organisation size applicability table showing partial/full coverage per criterion

v1.81

Released: 2026-03-06
Bug Fixes
  • Fixed signup/CTA buttons showing white text on white background in addon landing page hero sections — Odoo's s_cover class was overriding button text colors

v1.80

Released: 2026-03-06
Bug Fixes
  • WriteToPower: fix Postworks status check failing with 400 error — DocumentSubmissionId was being overwritten with UniqueNumberReference (URN) after first status poll, causing all subsequent status queries to fail
  • Improved Postworks API error handling to extract detailed error messages instead of raw HTTP exceptions

v1.79

Released: 2026-03-05
Improvements
  • Removed 10 nested container violations across 6 addons (community dashboard, class manager, people hub, prayer timetable, events, recruitment, org finder) — portal pages now use the parent layout container correctly
  • WriteToPower CSS cleanup — replaced remaining hardcoded rgba/hex colors with CSS custom properties and removed unnecessary !important declarations
  • Added container nesting convention documentation as ASCII diagram in portal_layout template

v1.78

Released: 2026-03-05
Bug Fixes
  • Telegram chatbot now renders markdown responses with proper formatting (bold headers, clickable links) instead of raw syntax
  • Fixed search impressions tracking error (Organization.write() missing positional argument) in AskMCB chatbot service

v1.77

Released: 2026-03-04
Improvements
  • WriteToPower CSS refactor — migrated to MCB design system with --wtp-* token pattern (matching YourVoice --yv-* approach)
  • Replaced 100+ hardcoded hex values and unprefixed CSS variables with semantic --wtp-* tokens using --mcb-* fallbacks
  • Deduplicated Quill editor styles (3 blocks consolidated to 1), removed duplicate keyframes and topic card definitions
  • Added :focus-visible outlines and prefers-reduced-motion support to compose wizard interactive elements
  • Fixed var(--primary) typos and wrong MCB green (#1a5632) references in WTP context

v1.76

Released: 2026-03-04
New Features
  • AskMCB data quality layer — URL validation with blocklist and domain plausibility checking on organisation save
  • Verification-aware search ranking — verified organisations shown first with badges in search results
  • Structured JSON responses from AskMCB with verified/unverified result grouping and disclaimers
  • Search impression tracking — counts how often each organisation appears in AskMCB results
  • Automated nudge emails — weekly cron sends "people are searching for you" to unverified orgs with high search impressions
  • Staff URL Review Queue — new backend view to review and correct flagged website URLs
  • One-time URL migration sweep validates all existing organisation URLs on first deploy
Bug Fixes
  • WriteToPower: fix plain text extraction, tracking error, send button resilience

v1.75

Released: 2026-03-04
Improvements
  • YourVoice UI/UX overhaul — replaced 50+ hardcoded colors with CSS variables, added focus indicators and prefers-reduced-motion support
  • Collapsible sidebars on mobile for idea list and my ideas pages
  • Multi-breakpoint responsive design (992px, 768px, 576px) with fluid typography and 44px touch targets
  • Portal header now uses teal brand color instead of default blue
  • Fixed portal header container width not spanning full desktop width

v1.74

Released: 2026-03-04
Improvements
  • WriteToPower campaign mode — new "Your Details" step collects name, email, address before generating campaign letter
  • Auto-fill postcode from MP search and address from geocoder
  • Campaign letter placeholders now correctly substitute user name and address
  • POSTWORKS sender details pre-filled from Your Details step

v1.73

Released: 2026-03-03
Improvements
  • WriteToPower landing page — moved "Not sure where to start?" and "Know who to write to?" entry point cards above the topic grid for better discoverability

v1.72

Released: 2026-03-03
Improvements
  • Consolidated mcb_community_assets and mcb_community_social into mcb_community_dashboard as stats panel sections
  • Assets now display as categorised list in stats panel instead of map markers (cleaner map experience)
  • Single addon install for all Community Dashboard features (no separate addon dependencies)
  • Removed Mapbox marker code from asset discovery (stats panel only rendering)

v1.71

Released: 2026-03-03
New Features
  • Community Dashboard Social Upgrade — Two new addons extending the Community Dashboard:
  • MCB Community Assets — Google Places API integration for mapping local mosques, halal restaurants, Islamic schools, community centres and general amenities per LSOA
  • Muslim Fulfilment Score — Weighted walkability scoring (0-100) based on proximity to mosques (30%), halal food (25%), community centres (20%), Islamic schools (15%), and general amenities (10%)
  • MCB Community Social — Bookmarks, threaded comments with likes, social sharing (WhatsApp, Twitter, Facebook, email, copy link), and branded PDF area reports
  • Shared Area View — Public shareable snapshots of LSOA statistics with full server-side rendered demographics, employment, health, crime, deprivation, housing, and walkability data
  • Insights Page Asset Discovery — "Discover Local Assets" button on insights page triggers Google Places API and displays walkability score with nearby assets inline
Improvements
  • 11 asset categories seeded (6 Muslim-specific, 5 general) with Google Places type mappings
  • Lazy-loading strategy for Google Places — assets fetched on-demand per LSOA to optimise API costs
  • Haversine distance calculation for nearest-asset metrics
  • 90-day expiring share tokens with view count tracking
  • QWeb PDF reports with MCB branding and full data source attributions

v1.70

Released: 2026-03-02
New Features
  • Postworks delivery status tracking — 30-minute cron job polls Postworks API for letter status updates (submitted → processing → dispatched → delivered)
  • Manual "Refresh Status" button on postal letter admin form for on-demand status checks
  • Chatter messages posted automatically when letter status changes
Bug Fixes
  • Fix PDF letter text clipping — subject line was cut off due to double CSS + wkhtmltopdf margins
  • Fix PDF letter body rendering as wall of text — now formats content with proper paragraph breaks

v1.69

Released: 2026-03-01
Improvements
  • WriteToPower v3 — Production UX fixes
  • Direct CSS and JS loading to bypass stale Odoo asset bundle cache
  • Inline critical CSS for topic grid layout (display:grid, responsive breakpoints)
  • Init guard to prevent double-initialization from bundle + direct script
  • Asset bundle clear in Railway start script for future deploys
Bug Fixes
  • Fix topic grid not displaying as grid on production (stale asset bundle)
  • Fix compose page topic cards not populating (JS bundle missing populateComposeTopicGrid)
  • Fix ?topic_code= and ?direct=1 query params not working (stale JS)
  • Fix regulator selection not advancing to Step 2 (Charity Commission click)
  • Fix AI suggest and free-text concern link functionality

v1.68

Released: 2026-03-01
New Features
  • WriteToPower v3 - Topic-First UX Redesign
  • Topic-First Landing Page — Choose from 13 curated civic topics (Healthcare, Education, Islamophobia, Foreign Affairs, etc.) instead of starting with a recipient
  • AI Topic Suggest — Describe your concern in free text and AI recommends the best topic and recipient type
  • Recommended Recipients — Each topic suggests the most effective recipient types (MP, minister, regulator, journalist, etc.)
  • Government Ministers Database — 8 key UK government ministers with contact details
  • Media Outlets Database — 8 major UK media outlets (BBC, ITV, Guardian, etc.)
  • Think Tanks Database — 6 UK think tanks and policy organisations
  • "Also Write To" Panel — After sending, suggests writing to another recipient type about the same issue
Improvements
  • Complete 4-step compose wizard: Topic → Recipient → Message → Review & Send
  • Context bar showing selected topic and recipient as persistent chips
  • Journalist search by beat/topic
  • Local council postcode lookup
  • MP writing prompts from Parliament API (voting record + questions filtered by topic)
  • Dynamic topic system managed via admin panel
  • Topics include NewsAPI keywords for relevant article discovery

v1.67

Released: 2026-03-01
Improvements
  • Rate limiting on public search endpoint (5s per IP) using same pattern as WriteToPower and Recruitment
  • Input validation on search queries (3-500 characters, whitespace stripped)
  • ARIA combobox accessibility attributes for screen reader support on universal search bar (role, aria-expanded, aria-owns, aria-activedescendant)
  • Chatbot tool _execute_odoo calls standardised to keyword arguments across BlogSearch, YourVoice, and WebsitePage tools
Bug Fixes
  • Fix askMCBx Bot livechat view xpath targeting non-existent 'operators' page in Odoo 19 (changed to 'options')
  • Production recovery - added missing DB columns for mcb_vmm_chatbot module (use_vmm_bot, vmm_bot_mode, vmm_bot_welcome_message)
Security
  • XSS prevention in universal search bar -- all LLM-sourced content now escaped via escapeHtml() before DOM insertion
  • Rate limiting prevents abuse of public AI search endpoint (LLM API credit protection)
  • Input length validation prevents oversized payloads to search endpoint

v1.66

Released: 2026-03-01
New Features
  • WriteToPower v2 - Unified Advocacy Platform
  • Write to MPs, regulators, government ministers, journalists, media outlets, think tanks, and councils from one compose wizard
  • NewsAPI integration - relevant article suggestions to strengthen letters
  • Step 0 recipient type selector with 7 recipient categories
  • AI prompt adaptation per recipient type (formal complaints for regulators, story pitches for journalists, etc.)
  • UK regulator seed data (Ofcom, EHRC, IPSO, ICO, FCA, CMA, Charity Commission, IOPC)
  • Postworks postal enabled for MPs, ministers, and councils
  • Non-PII telemetry tracking with anonymous session IDs and optional user linking
  • Message queuing with automatic retry (exponential backoff) for failed sends
  • Admin analytics dashboard (pivot, graph, list views) under WriteToPower menu
  • Privacy notice on compose page explaining data collection policy
Improvements
  • Updated landing page to reflect unified advocacy platform capabilities
  • Compose wizard now starts with recipient type selection (Step 0)
  • AI-generated letters tailored to each recipient type
  • Send options adapt per recipient type (email, postal, complaint form link)
  • Queue processes every 5 minutes via cron with completion email notifications
Bug Fixes
  • Fixed search dropdown clipping inside overflow-hidden hero section - portal pattern moves dropdown to document.body with fixed positioning and dynamic repositioning on scroll/resize

v1.65

Released: 2026-02-26
New Features
  • integrate askMCBx bot with im_livechat widget
  • unified capabilities menu via explore_options
  • integrate Project Ad'l legal guidance into askMCB chatbot (#214)
  • Telegram integration for askMCB chatbot
  • rename Universal Search Bar to askMCBx
  • universal search bar v1.65 - complete implementation
  • register universal search JS and CSS in assets
  • add /chatbot/api/search proxy endpoint for universal search
  • add YourVoiceSearchTool for universal search
  • make UnifiedAgent provider-agnostic with LLM_API_KEY, LLM_BASE_URL, LLM_MODEL
Bug Fixes
  • search dropdown clipping AI text responses
  • search rate limiting - per-session keys, 2s limit, auto-retry
  • instruct LLM to present explore_options results in full, not summarised
  • force Ad'l tool usage for legal queries via keyword detection
  • stronger system prompt to force Ad'l tool usage for legal queries
  • force LLM to use Ad'l tool for legal questions instead of own knowledge
  • list_course_categories now shows courses when no tags exist
  • force chatbot service rebuild with course search fix
  • chatbot course search - handle generic queries and use website_published
  • address 7 code review findings (3 critical, 4 important)
  • search dropdown clipping inside overflow-hidden hero section
  • send numeric user_id to chatbot service (was string, caused 422)
  • remove BOM and non-ASCII chars from JS/CSS comments
  • replace non-UTF-8 em dash in chatbot.py docstring
  • predeploy logging to DATABASE for module upgrade diagnostics
  • add persistent logging to predeploy module upgrade
  • footer copyright JS - use readyState check pattern for reliable execution (v1.61)
  • complete footer overhaul with MCB branding (v1.60)
  • footer copyright - JS fallback + post-upgrade COW cleanup (v1.59)
Documentation
  • update activeContext and progress for v1.67 production deployment
  • update Memory Bank for v1.66 production deployment
  • update Memory Bank for v1.65 production deployment
  • add universal search bar implementation plan (13 tasks)
  • add universal search bar design document

Changelog auto-generated from git commits using Conventional Commits format.