# This file contains a brief summary of each version bump.
# Its contents are parsed by a document builder and the rel-notes.rst
# file for the RTD site is generated. Changes must start with a date
# and version string. Blank are used to separate items when a version
# has several changes.  Multiple blank lines between versions are
# squished to one.

release = Cherry
2020 21 August; version 2.3.2
	Small cleanup of "code smells" and add additional test stats
	to unit tests.

2020 21 August; version 2.3.1
	Fix bug in message introduced with "code smell" fix. (RIC-629)

2020 20 August; version 2.3.0
	Address sonar flagged "bugs" in the config class (RIC-629).

2020 13 August; version 2.2.2
	Correct potential memory leaks in xapp class (RIC-629)

2020 July 31; version 2.2.1
	Correct "bugs" according to sonar (RIC-629)

2020 July 30; version 2.2.0
	Add support for configuration file reading and change notification.

2020 July 22; version 2.1.0
	Added metrics support (RIC-381).

2020 July 17; version 2.0.0
	Add alarm support.

	Add xapp namespace for Message, Msg_component, Alarm and Jhah
	objects.  This is a BREAKING change and thus the major version
	number was bumped to 2.

2020 June 29; version 1.2.0
	Add support for json parsing

2020 June 26; version 1.1.0
	Change the port type in constructors to indicate "const"

	Version bump to 1.1.0 to allow patches to bronze code to
	continue to be done on the 1.0.* level.


release= Bronze
2020 April 28; version 1.0.0
	Bump version to force package build (old CI version added
	incorrect install prefix). Bump to 1.0.0 for release.

2020 March 27; version 0.1.2
	Changes identified by sonar (missing copy/move builders)
	rmr_dump example programme
	Improvements to code for better test coverage
