3.5.0 release notes

Known issues

  • A small performance regression when loading the list of Contacts. medic#5755.

Upgrade notes

Breaking changes

There are no breaking changes when upgrading from 3.4.x.

Supported software

There are no required changes to the supported software matrix from 3.0.0.

NodeCouchDBBrowsersSMS bridgeAndroidmedic-androidmedic-couch2pg
8.11+2.1+Chrome 53+, Firefox latestmedic-gateway4.4+0.4.5+3.0+


Optimizing the history tab

We found that loading the History tab was taking a long time in projects with many places. This was due to loading the Places filter on the tab. By delaying the initialisation of the filter until needed we found performance improvements in three key areas. medic#4423 and medic#5455.

Rendering the history tab7247ms1843ms75%
Rendering the history content pane1002ms732ms27%
Starting the application1020ms875ms14%
Idle memory usage453MB202MB55%

Optimizing sentinel processing

By reducing the throttling of change processing and reducing the number of database writes we have greatly improved the rate at which Sentinel processes changes. Clearing a backlog of 200 documents used to take 67 seconds, but with 3.5.0 this has been reduced to 33 seconds, a 50% reduction. medic#4128.

To make Sentinel even more responsive to changes, transitions are now executed synchronously when messages are received. This means that replies are generated immediately and the user is notified of the success or error of their message as soon as possible. medic#4857.

Reducing the app size

After some analysis it was found that the webapp included font files that weren’t required. Certain files weren’t minified, and some others weren’t compressed. These fixes combined reduced the size by 2.6MB making the application easier to download and update. medic#5260, medic#5489, and medic#5490.

Sort muted contacts

Muted contacts are now sorted to the bottom of the contact list so you can more easily see all your active contacts. medic#5596.

Sort muted contacts

Facility EMR integration

Version 3.5.0 includes an integration with SIH, a facility based application in Mali. This enables patient referral information to be sent to a clinic and treatment data to be returned, closing the loop between the Community Health Worker and the clinic. This integration is possible thanks in part to a new outbound push feature, which is configurable and will facilitate integrations with other systems in the future. medic#5499, and medic#4813.

And more…


  • medic#1850: Report version of application and forms being used
  • medic#4811: Expose SMS sending capabilities in android wrapper
  • medic#4812: Support XForms that “compile” into SMS messages


  • horticulturalist#32: Horti should by default install release version and not master
  • medic-conf#117: Bulk user import
  • medic-conf#135: Create-user function always creates a new place
  • medic-conf#139: Allow data sharing and definition self-reference through the this keyword
  • medic-conf#147: Events dueDate function cannot access the reports of the contact
  • medic#5352: Date formatting in exports is not human readable
  • medic#5361: Serve app from root
  • medic#5439: Validate target ID uniqueness
  • medic#5511: Clean up translation exports
  • medic#5537: Add a permission to show the Report edit button
  • medic#5544: UHC metrics are incongruous between contacts and analytics tab due to month_start_date
  • medic#5579: Allow users to specify date for UHC last visited
  • medic#5580: Record the date when verifying a report
  • medic#5589: Allow external report contributions without a phone number
  • medic#5674: Add docs about the new replications feature to app-settings doc in cht-docs

Performance fixes

  • medic#3543: Sentinel marks reports with the sys.facility_not_found error before it searches and looks for the contact
  • medic#4327: Removes changes watching for online users to improve performance
  • medic#4713: Replace appcache with a service worker cache
  • medic#4898: Move feedback docs to users’ meta dbs

Bug fixes

  • horticulturalist#36: Horti crashes on invalid json during view warming
  • medic-android#57: Opening the admin console through webapp requires user to close and reopen the app
  • medic-android#72: gradle sync fails because minSDKversion is in the manifest file not the build.gradle file.
  • medic-conf#130: medic-conf uploads puring function “purging” but webapp looks for function named “purge”
  • medic-conf#132: Shell completion for supported actions not working
  • medic-conf#138: subtitle_translation_key should not be a required field for all targets
  • medic-conf#140: Multiple tasks emitted for the same report do not have a unique id
  • medic-conf#141: Task event id should not be required
  • medic-conf#142: Function “modifyContent” parameters are undefined for task applies to “contacts”
  • medic-conf#143: Function “emitCustom” is not invoked for targets when applies to “contacts”
  • medic-conf#144: Function “emitCustom” should be passed in the instance which would have been emitted
  • medic-conf#146: Target “appliesToType” is documented as not required but crashes if not defined
  • medic-conf#148: Multiple tasks emitted for different events do not have a unique id
  • medic-conf#149: Emitted targets have undefined date for date of “reported” when appliesTo “contacts”
  • medic-conf#150: JsToString function is buggy and unnecessary
  • medic-conf#171: Error occurred during backup-all-forms command
  • medic-conf#177: medic-conf –local fails in medic/config/standard
  • medic-conf#185: medic-conf does not backup, upload, or convert forms by default
  • medic-conf#199: Support creating custom locales based on app version
  • medic#3093: Registering for a SMS schedule can start mid-group
  • medic#3986: If server is down app cannot start
  • medic#4404: Fix training data script references non-existent view
  • medic#4483: It’s possible to generate feedback docs with no error attached
  • medic#4498: Cannot send multiple scheduled messages at same time
  • medic#5120: Translation key should be mandatory
  • medic#5121: We should be able to add Keys with no translations
  • medic#5183: User cannot logout while offline
  • medic#5298: Investigate and fix common feedback errors
  • medic#5330: Error loading target details
  • medic#5345: Registration transition invalidates unique ids when creating people
  • medic#5347: The update_scheduled_reports transition runs indefinitely
  • medic#5351: Reminders are not working
  • medic#5357: The conditional_alerts transition should sort docs by reported_date
  • medic#5359: The death_reporting transition does not process reports when submitter has no phone number
  • medic#5365: Unregistered phone number or person getting an autoreply with correct textform format
  • medic#5369: Message recipient defaults to sender when recipient is explicit
  • medic#5376: Report Bug not working for admin users
  • medic#5405: Can’t edit translation terms for new keys
  • medic#5410: Registration transition should calculate dates relative to reported_date
  • medic#5415: ANC visit count includes visits specified as not attended in Standard configuration
  • medic#5447: Remove unused permissions
  • medic#5459: Place select2 dropdown results are badly styled in the admin app
  • medic#5481: Angular $exceptionHandler too sensitive
  • medic#5498: The DDoc Version on the About page isn’t working
  • medic#5501: Reloading the app while offline shows sync status “required”
  • medic#5504: poe export script empties translation files
  • medic#5519: Permission denied when API is trying to create extracted-resources path in docker env
  • medic#5522: Feedback modal doesn’t close after successful submission
  • medic#5531: Tooltip showing as logo
  • medic#5536: Countdown timer does not respect custom timer value
  • medic#5577: Nutrition Screening is linking report to contact that you’re logged in as and not the one it is reported under.
  • medic#5595: Fix UHC styling when using both UHC and muting at the same time
  • medic#5599: Logging in as admin on mobile app you’re unable to leave the admin console
  • medic#5602: People card shows on a person’s profile
  • medic#5617: Broken functionality after upgrade to 3.4 with custom locales
  • medic#5621: Offline users are seeing form errors same user online has no errors
  • medic#5622: JavaScript errors and crash stacks not logged to the console
  • medic#5639: Tasks to be completed for people do not appear in a place’s profile
  • medic#5646: Service worker is broken on older versions of Chrome
  • medic#5653: Upgrading from 3.4 to 3.5 is broken
  • medic#5668: The conditional_alerts transition doesn’t include the current report in the list of relevant reports
  • medic#5671: The accept_patient_reports throws an error
  • medic#5675: Import people blocked by CSP
  • medic#5692: API does not block offline users from editing docs when dbname is not medic
  • medic#5705: Webapp doesn’t support languages that are not pluralized by make-plural
  • medic#5718: New households registered do not show on the contact list until after page reload
  • medic#5741: Mobile “back” button not working as expected when creating reports
  • medic#5742: The translation “contact.no.children” is missing in the default configuration
  • medic#5743: User cannot login when database name is not medic

Technical issues

  • medic#3768: Check for npm audit vulnerabilities in automated builds and fix existing vulnerabilities
  • medic#4908: Fix flakey test - Submit Add Family form
  • medic#4968: Write a script that collects all aggregate docs from users’ meta dbs
  • medic#5196: Travis builds timing out after ~50 minutes when API fails to start
  • medic#5198: Work out how to run CI tests for outside collaborators
  • medic#5228: Clarify and streamline process for investigating e2e flakey test failures
  • medic#5297: Individual builds can no longer be restarted
  • medic#5300: Remove node domain from export data controller
  • medic#5311: Convert feedback export to streaming csv
  • medic#5340: Testing dev builds on mobile device after service worker change is awkward
  • medic#5546: Move “selected” into redux store